btcd/blockchain/blockindex_test.go

43 lines
1.1 KiB
Go
Raw Normal View History

// Copyright (c) 2023 The utreexo developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
package blockchain
import (
"math/rand"
"testing"
)
func TestAncestor(t *testing.T) {
height := 500_000
blockNodes := chainedNodes(nil, height)
for i, blockNode := range blockNodes {
// Grab a random node that's a child of this node
// and try to fetch the current blockNode with Ancestor.
randNode := blockNodes[rand.Intn(height-i)+i]
got := randNode.Ancestor(blockNode.height)
// See if we got the right one.
if got.hash != blockNode.hash {
t.Fatalf("expected ancestor at height %d "+
"but got a node at height %d",
blockNode.height, got.height)
}
// Gensis doesn't have ancestors so skip the check below.
if blockNode.height == 0 {
continue
}
// The ancestors are deterministic so check that this node's
// ancestor is the correct one.
if blockNode.ancestor.height != getAncestorHeight(blockNode.height) {
t.Fatalf("expected anestor at height %d, but it was at %d",
getAncestorHeight(blockNode.height),
blockNode.ancestor.height)
}
}
}