mirror of
https://github.com/btcsuite/btcd.git
synced 2024-11-19 09:50:08 +01:00
43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
|
// 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)
|
||
|
}
|
||
|
}
|
||
|
}
|