public void TestClone()
        {
            // Define variables and constants
            const ResourceUsage USAGE       = ResourceUsage.Write;
            const uint          NUM_INDICES = 21515;
            IndexBuffer         firstBuffer = BufferFactory.NewIndexBuffer().WithUsage(USAGE).WithLength(NUM_INDICES);

            // Set up context


            // Execute
            IndexBuffer secondBuffer = firstBuffer.Clone();
            IndexBuffer thirdBuffer  = secondBuffer.Clone().WithLength(NUM_INDICES * 2U);

            // Assert outcome
            Assert.AreEqual(USAGE, secondBuffer.Usage);
            Assert.AreEqual(firstBuffer.Usage, secondBuffer.Usage);
            Assert.AreEqual(NUM_INDICES, secondBuffer.Length);
            Assert.AreEqual(firstBuffer.Length, secondBuffer.Length);

            Assert.AreEqual(USAGE, thirdBuffer.Usage);
            Assert.AreEqual(secondBuffer.Length * 2U, thirdBuffer.Length);

            firstBuffer.Dispose();
            secondBuffer.Dispose();
            thirdBuffer.Dispose();
        }
        public void TestCopyTo()
        {
            // Define variables and constants
            IndexBuffer srcBuffer = BufferFactory.NewIndexBuffer()
                                    .WithUsage(ResourceUsage.Immutable)
                                    .WithInitialData(Enumerable.Range(0, 3000).Select(@int => (uint)@int).ToArray());
            IndexBuffer dstBuffer = srcBuffer.Clone()
                                    .WithUsage(ResourceUsage.DiscardWrite);

            // Set up context


            // Execute
            srcBuffer.CopyTo(dstBuffer);
            srcBuffer.CopyTo(dstBuffer, 100, 2000, 500);

            try {
                dstBuffer.CopyTo(srcBuffer);
                Assert.Fail();
            }
            catch (ResourceOperationUnavailableException) { }

#if !DEVELOPMENT && !RELEASE
            try {
                srcBuffer.CopyTo(dstBuffer, 1600, 2000, 500);
                Assert.Fail();
            }
            catch (AssuranceFailedException) { }

            try {
                srcBuffer.CopyTo(dstBuffer, 0, 2000, 2000);
                Assert.Fail();
            }
            catch (AssuranceFailedException) { }
#endif

            // Assert outcome
            Assert.IsFalse(srcBuffer.CanBeCopyDestination);
            Assert.IsTrue(dstBuffer.CanBeCopyDestination);

            srcBuffer.Dispose();
            dstBuffer.Dispose();
        }