public void ShouldPushChunkPairsRecursively()
        {
            var chunkStack1 = new ChunkStack <int>(
                100 * MemorySize.MB,
                new ConstantSizeCalculator <int>(sizeof(int)),
                null);

            var chunkStack2 = new ChunkStack <int>(
                100 * MemorySize.MB,
                new ConstantSizeCalculator <int>(sizeof(int)),
                null);

            var appender = new MergeSortBase <int> .ChunkStackAppender(chunkStack1, chunkStack2);

            appender.PushToStackRecursively(new int[] { 1, 2 });
            CollectionAssert.AreEqual(new int[] { 2 }, chunkStack1.GetChunkSizes());
            CollectionAssert.AreEqual(new int[] { }, chunkStack2.GetChunkSizes());

            appender.PushToStackRecursively(new int[] { 3, 4 });
            CollectionAssert.AreEqual(new int[] { }, chunkStack1.GetChunkSizes());
            CollectionAssert.AreEqual(new int[] { 4 }, chunkStack2.GetChunkSizes());

            appender.PushToStackRecursively(new int[] { 5, 6 });
            CollectionAssert.AreEqual(new int[] { 2 }, chunkStack1.GetChunkSizes());
            CollectionAssert.AreEqual(new int[] { 4 }, chunkStack2.GetChunkSizes());

            appender.PushToStackRecursively(new int[] { 7, 8 });
            CollectionAssert.AreEqual(new int[] { 8 }, chunkStack1.GetChunkSizes());
            CollectionAssert.AreEqual(new int[] { }, chunkStack2.GetChunkSizes());

            appender.PushToStackRecursively(new int[] { 9, 10 });
            CollectionAssert.AreEqual(new int[] { 2, 8 }, chunkStack1.GetChunkSizes());
            CollectionAssert.AreEqual(new int[] { }, chunkStack2.GetChunkSizes());

            appender.PushToStackRecursively(new int[] { 11, 12 });
            CollectionAssert.AreEqual(new int[] { 8 }, chunkStack1.GetChunkSizes());
            CollectionAssert.AreEqual(new int[] { 4 }, chunkStack2.GetChunkSizes());

            appender.PushToStackRecursively(new int[] { 12, 13 });
            CollectionAssert.AreEqual(new int[] { 2, 8 }, chunkStack1.GetChunkSizes());
            CollectionAssert.AreEqual(new int[] { 4 }, chunkStack2.GetChunkSizes());

            appender.PushToStackRecursively(new int[] { 14, 15 });
            CollectionAssert.AreEqual(new int[] { }, chunkStack1.GetChunkSizes());
            CollectionAssert.AreEqual(new int[] { 16 }, chunkStack2.GetChunkSizes());

            appender.PushToStackRecursively(new int[] { 16, 17 });
            CollectionAssert.AreEqual(new int[] { 2 }, chunkStack1.GetChunkSizes());
            CollectionAssert.AreEqual(new int[] { 16 }, chunkStack2.GetChunkSizes());
        }