示例#1
0
        public override void Write(byte[] buffer, int offset, int count)
        {
            if (buffer == null)
            {
                throw new ArgumentNullException("buffer");
            }
            if (offset < 0)
            {
                throw new ArgumentOutOfRangeException("offset", "offset cannot be negative");
            }
            if (count < 0)
            {
                throw new ArgumentOutOfRangeException("count", "count cannot be negative");
            }
            if (buffer.Length - offset < count)
            {
                throw new ArgumentException("count and offset define positions greater than buffer length");
            }

            EnsureWriteable();

            int i = _position + count;

            // Check for overflow
            if (i < 0)
            {
                throw new IOException("Cannot write to stream. Buffer would overflow");
            }

            _buffer.Append(buffer, offset, count);

            _position = i;
        }
        public void ToArray()
        {
            //Arrange
            var numberOfValuesPerPopulatingArrays = new int[] { 1000, 20, 1234, 100000 };
            var arrays = new List <decimal[]>();

            for (var i = 0; i < numberOfValuesPerPopulatingArrays.Length; i++)
            {
                var    number  = numberOfValuesPerPopulatingArrays[i];
                Random randNum = new Random(number + DateTime.Now.Millisecond);
                arrays.Add(Enumerable
                           .Repeat(0, number)
                           .Select(j => (decimal)randNum.Next(0, 10000000))
                           .ToArray());
            }
            var expectedResult = arrays.SelectMany(arr => arr).ToArray();

            //Action
            var builder = new StructArrayBuilder <decimal>();

            for (var i = 0; i < arrays.Count; i++)
            {
                var arr = arrays[i];
                builder.Append(arr);
            }
            var result = builder.ToArray();

            //Assert
            Assert.NotNull(result);
            Assert.Equal(expectedResult.Length, result.Length);
            Assert.Equal(expectedResult, result);

            Console.WriteLine("Ran StructArrayBuilder_Tests.ToArray");
        }
        public TestState <decimal> Arrange_PrepArrayAndAppend(
            bool useSkipLists = true, int numValues = 10000, int chunkSize = 2000, int percentOfChunksToAction = 33)
        {
            //Arrange
            if (numValues < 5 * chunkSize)
            {
                chunkSize = numValues / 5;
            }
            var numberOfChunks = (int)(numValues / chunkSize);
            var numberOfValuesPerPopulatingArrays = Enumerable.Repeat(0, numberOfChunks).Select(n => chunkSize).ToArray();
            var arrays = new List <decimal[]>();

            for (var i = 0; i < numberOfValuesPerPopulatingArrays.Length; i++)
            {
                var    number  = numberOfValuesPerPopulatingArrays[i];
                Random randNum = new Random(number + DateTime.Now.Millisecond);
                arrays.Add(Enumerable
                           .Repeat(0, number)
                           .Select(j => (decimal)randNum.Next(0, 10000000))
                           .ToArray());
            }
            var expectedResult = arrays.SelectMany(arr => arr).ToArray();

            //Action
            var builder = new StructArrayBuilder <decimal>(useSkipLists);

            for (var i = 0; i < arrays.Count; i++)
            {
                var arr = arrays[i];
                builder.Append(arr);
            }

            return(new TestState <decimal>()
            {
                Builder = builder,
                ExpectedResult = expectedResult,
                NumberofChunksToAction = (int)(percentOfChunksToAction * numberOfChunks / 100)
            });
        }