public void TestNavigateTowards()
{
// create forked chains
var fakeHeadersA = new FakeHeaders();
var header0 = fakeHeadersA.GenesisChained();
var header1 = fakeHeadersA.NextChained();
var fakeHeadersB = new FakeHeaders(fakeHeadersA);
var header2A = fakeHeadersA.NextChained();
var header3A = fakeHeadersA.NextChained();
var header4A = fakeHeadersA.NextChained();
var header2B = fakeHeadersB.NextChained();
var header3B = fakeHeadersB.NextChained();
var header4B = fakeHeadersB.NextChained();
var chain0 = new ChainBuilder(new[] { header0, header1, header2A, header3A }).ToImmutable();
var chain1 = new ChainBuilder(new[] { header0, header1, header2B, header3B, header4B }).ToImmutable();
// verify path from chain 0 to chain 1
CollectionAssert.AreEqual(
new[]
{
Tuple.Create(-1, header3A),
Tuple.Create(-1, header2A),
Tuple.Create(+1, header2B),
Tuple.Create(+1, header3B),
Tuple.Create(+1, header4B)
}
, chain0.NavigateTowards(chain1).ToList());
// verify path from chain 1 to chain 0
CollectionAssert.AreEqual(
new[]
{
Tuple.Create(-1, header4B),
Tuple.Create(-1, header3B),
Tuple.Create(-1, header2B),
Tuple.Create(+1, header2A),
Tuple.Create(+1, header3A)
}
, chain1.NavigateTowards(chain0).ToList());
}