public void TestToBuilder()
{
var fakeHeaders = new FakeHeaders();
var header0 = fakeHeaders.GenesisChained();
var header1 = fakeHeaders.NextChained();
var chainBuilder = new ChainBuilder();
// verify to builder with 0 blocks
var chainEmpty = chainBuilder.ToImmutable();
var chainBuilderEmpty = chainEmpty.ToBuilder();
Assert.AreEqual(0, chainBuilderEmpty.Blocks.Count);
Assert.AreEqual(0, chainBuilderEmpty.BlocksByHash.Count);
// verify to builder with 1 block
chainBuilder.AddBlock(header0);
var chain0 = chainBuilder.ToImmutable();
var chainBuilder0 = chain0.ToBuilder();
CollectionAssert.AreEqual(new[] { header0 }, chainBuilder0.Blocks);
CollectionAssert.AreEquivalent(new Dictionary<UInt256, ChainedHeader> { { header0.Hash, header0 } }, chainBuilder0.BlocksByHash);
// verify to builder with 2 blocks
chainBuilder.AddBlock(header1);
var chain1 = chainBuilder.ToImmutable();
var chainBuilder1 = chain1.ToBuilder();
CollectionAssert.AreEqual(new[] { header0, header1 }, chainBuilder1.Blocks);
CollectionAssert.AreEquivalent(new Dictionary<UInt256, ChainedHeader> { { header0.Hash, header0 }, { header1.Hash, header1 } }, chainBuilder1.BlocksByHash);
}