-func TestCalcNextBits(t *testing.T) {
- targetTimeSpan := uint64(consensus.BlocksPerRetarget * consensus.TargetSecondsPerBlock)
- cases := []struct {
- parentNode *BlockNode
- currentNode *BlockNode
- bits uint64
- }{
- {
- currentNode: &BlockNode{
- Height: 0,
- Bits: 1000,
- },
- bits: 1000,
- },
- {
- currentNode: &BlockNode{
- Height: consensus.BlocksPerRetarget - 1,
- Bits: 1000,
- },
- bits: 1000,
- },
- {
- parentNode: &BlockNode{
- Height: 0,
- Timestamp: 0,
- },
- currentNode: &BlockNode{
- Height: consensus.BlocksPerRetarget,
- Bits: difficulty.BigToCompact(big.NewInt(1000)),
- Timestamp: targetTimeSpan,
- },
- bits: difficulty.BigToCompact(big.NewInt(1000)),
- },
- {
- parentNode: &BlockNode{
- Height: 0,
- Timestamp: 0,
- },
- currentNode: &BlockNode{
- Height: consensus.BlocksPerRetarget,
- Bits: difficulty.BigToCompact(big.NewInt(1000)),
- Timestamp: targetTimeSpan * 2,
- },
- bits: difficulty.BigToCompact(big.NewInt(2000)),
- },
- }
-
- for i, c := range cases {
- c.currentNode.Parent = c.parentNode
- bits := c.currentNode.CalcNextBits()
- if bits != c.bits {
- t.Fatalf("calc next bit failed, index: %d, expected: %d, have: %d", i, c.bits, bits)
- }
- }
-}
-
-func TestCalcNextSeed(t *testing.T) {
- cases := []struct {
- node *BlockNode
- seed *bc.Hash
- }{
- {
- node: &BlockNode{
- Height: 0,
- },
- seed: consensus.InitialSeed,
- },
- {
- node: &BlockNode{
- Height: consensus.SeedPerRetarget - 1,
- Seed: &bc.Hash{V1: 100},
- },
- seed: &bc.Hash{V1: 100},
- },
- {
- node: &BlockNode{
- Height: consensus.SeedPerRetarget,
- Seed: &bc.Hash{V2: 200},
- Hash: bc.Hash{V3: 300},
- },
- seed: &bc.Hash{V3: 300},
- },
- }
-
- for i, c := range cases {
- seed := c.node.CalcNextSeed()
- if *seed != *c.seed {
- t.Fatalf("calc next seed failed, index: %d, expected: %v, have: %v", i, c.seed, seed)
- }
- }
-}
-