Inheritance: IRandomAccessSource
        virtual public void TestGetArray()
        {
            ArrayRandomAccessSource source1 = new ArrayRandomAccessSource(data); // 0 - 99
            ArrayRandomAccessSource source2 = new ArrayRandomAccessSource(data); // 100 - 199
            ArrayRandomAccessSource source3 = new ArrayRandomAccessSource(data); // 200 - 299

            IRandomAccessSource[] inputs = new IRandomAccessSource[] { source1, source2, source3 };

            GroupedRandomAccessSource grouped = new GroupedRandomAccessSource(inputs);

            byte[] output = new byte[500];

            Assert.AreEqual(300, grouped.Get(0, output, 0, 300));
            AssertArrayEqual(RangeArray(0, 100), 0, output, 0, 100);
            AssertArrayEqual(RangeArray(0, 100), 0, output, 100, 100);
            AssertArrayEqual(RangeArray(0, 100), 0, output, 200, 100);

            Assert.AreEqual(300, grouped.Get(0, output, 0, 301));
            AssertArrayEqual(RangeArray(0, 100), 0, output, 0, 100);
            AssertArrayEqual(RangeArray(0, 100), 0, output, 100, 100);
            AssertArrayEqual(RangeArray(0, 100), 0, output, 200, 100);

            Assert.AreEqual(100, grouped.Get(150, output, 0, 100));
            AssertArrayEqual(RangeArray(50, 50), 0, output, 0, 50);
            AssertArrayEqual(RangeArray(0, 50), 0, output, 50, 50);
        }
        virtual public void TestGet()
        {
            ArrayRandomAccessSource source1 = new ArrayRandomAccessSource(data);
            ArrayRandomAccessSource source2 = new ArrayRandomAccessSource(data);
            ArrayRandomAccessSource source3 = new ArrayRandomAccessSource(data);

            IRandomAccessSource[] inputs = { source1, source2, source3 };

            GroupedRandomAccessSource grouped = new GroupedRandomAccessSource(inputs);

            Assert.AreEqual(source1.Length + source2.Length + source3.Length, grouped.Length);

            Assert.AreEqual(source1.Get(99), grouped.Get(99));
            Assert.AreEqual(source2.Get(0), grouped.Get(100));
            Assert.AreEqual(source2.Get(1), grouped.Get(101));
            Assert.AreEqual(source1.Get(99), grouped.Get(99));
            Assert.AreEqual(source3.Get(99), grouped.Get(299));

            Assert.AreEqual(-1, grouped.Get(300));
        }