public void TestNavigateTowardsFunc()
{
// create chains
var fakeHeaders = new FakeHeaders();
var header0 = fakeHeaders.GenesisChained();
var header1 = fakeHeaders.NextChained();
var header2 = fakeHeaders.NextChained();
var header3 = fakeHeaders.NextChained();
var chain0 = new ChainBuilder(new[] { header0, }).ToImmutable();
var chain1 = new ChainBuilder(new[] { header0, header1, }).ToImmutable();
var chain2 = new ChainBuilder(new[] { header0, header1, header2 }).ToImmutable();
var chain3 = new ChainBuilder(new[] { header0, header1, header2, header3 }).ToImmutable();
// the list of target chains to use, stays 1 ahead and then catches up with chain 3
var targetStack = new Stack<Chain>(new[] { chain1, chain2, chain3, chain3 }.Reverse());
// verify navigating towards an updating chain
CollectionAssert.AreEqual(
new[]
{
Tuple.Create(+1, header1),
Tuple.Create(+1, header2),
Tuple.Create(+1, header3)
}
, chain0.NavigateTowards(() => targetStack.Pop()).ToList());
// verify all targets used
Assert.AreEqual(0, targetStack.Count);
}