예제 #1
0
        public void TestBufferedWrite()
        {
            using (var unmanagedArray = new UnmanagedArray(16))
            {
                var stream = new DoubleOutStream(unmanagedArray.PPData, unmanagedArray.Resize);

                var buffer = new double[16];
                buffer[1] = 3.0;
                buffer[2] = 4.0;

                using (var writer = stream.GetWriter())
                {
                    for (int stepSize = 1; stepSize < unmanagedArray.Length; stepSize++)
                    {
                        writer.Reset();

                        int n = writer.Write(buffer, 1, 2, stepSize);
                        unmanagedArray.CheckBoundaries();

                        writer.Reset();

                        var doubleArray = unmanagedArray.ToArray();
                        for (int i = 0; i < n; i++)
                        {
                            Assert.AreEqual(buffer[i + 1], doubleArray[i], "Step size was: {0}", stepSize);
                        }
                    }
                }
            }
        }
예제 #2
0
        public void TestCyclicRead()
        {
            using (var unmanagedArray = new UnmanagedArray(16))
            {
                var stream = new DoubleInStream(unmanagedArray.PLength, unmanagedArray.PPData, Validate);

                using (var reader = stream.GetCyclicReader())
                {
                    for (int bufferSize = 2; bufferSize < stream.Length * 5; bufferSize++)
                    {
                        var buffer = new double[bufferSize];

                        int startIndex = 0;
                        int length     = buffer.Length;

                        if (bufferSize > 5)
                        {
                            startIndex = 2;
                            length     = bufferSize - 2;
                        }

                        for (int stepSize = 8; stepSize < unmanagedArray.Length; stepSize++)
                        {
                            reader.Read(buffer, startIndex, length, stepSize);
                            for (int i = 0; i < startIndex; i++)
                            {
                                Assert.AreEqual(0.0, buffer[i], "Step size was: {0}, Buffer size was: {1}", stepSize, bufferSize);
                            }

                            var doubleArray = unmanagedArray.ToArray();
                            for (int i = startIndex; i < startIndex + length; i++)
                            {
                                Assert.AreEqual(doubleArray[(stepSize * (i - startIndex)) % stream.Length], buffer[i], "Step size was: {0}, Buffer size was: {1}", stepSize, bufferSize);
                            }

                            for (int i = startIndex + length; i < buffer.Length; i++)
                            {
                                Assert.AreEqual(0.0, buffer[i], "Step size was: {0}, Buffer size was: {1}", stepSize, bufferSize);
                            }

                            unmanagedArray.CheckBoundaries();
                            reader.Reset();
                        }
                    }
                }
            }
        }
예제 #3
0
        public void TestWrite()
        {
            using (var unmanagedArray = new UnmanagedArray(16))
            {
                var stream = new DoubleOutStream(unmanagedArray.PPData, unmanagedArray.Resize);

                var buffer = new double[16];
                using (var writer = stream.GetWriter())
                {
                    for (int stepSize = 1; stepSize < unmanagedArray.Length; stepSize++)
                    {
                        while (!writer.Eos)
                        {
                            writer.Write((double)stepSize, stepSize);
                        }
                        unmanagedArray.CheckBoundaries();
                        writer.Reset();
                    }
                }
            }
        }
예제 #4
0
        public void TestBufferedRead()
        {
            using (var unmanagedArray = new UnmanagedArray(16))
            {
                var stream = new DoubleInStream(unmanagedArray.PLength, unmanagedArray.PPData, Validate);

                int startIndex = 2;
                int length     = 2;

                using (var reader = stream.GetReader())
                {
                    for (int stepSize = 1; stepSize < unmanagedArray.Length; stepSize++)
                    {
                        double s = 0.0;

                        while (!reader.Eos)
                        {
                            var buffer = new double[16];
                            int n      = reader.Read(buffer, startIndex, length, stepSize);
                            for (int i = 0; i < startIndex; i++)
                            {
                                Assert.AreEqual(0.0, buffer[i], "Step size was: {0}", stepSize);
                            }
                            for (int i = startIndex; i < startIndex + n; i++)
                            {
                                Assert.AreEqual(s, buffer[i], "Step size was: {0}", stepSize);
                                s += stepSize;
                            }
                            for (int i = startIndex + n; i < buffer.Length; i++)
                            {
                                Assert.AreEqual(0.0, buffer[i], "Step size was: {0}", stepSize);
                            }
                        }
                        unmanagedArray.CheckBoundaries();
                        reader.Reset();
                    }
                }
            }
        }
예제 #5
0
        public void TestRead()
        {
            using (var unmanagedArray = new UnmanagedArray(16))
            {
                var stream = new DoubleInStream(unmanagedArray.PLength, unmanagedArray.PPData, Validate);

                using (var reader = stream.GetReader())
                {
                    for (int stepSize = 1; stepSize < unmanagedArray.Length; stepSize++)
                    {
                        double s = 0.0;
                        while (!reader.Eos)
                        {
                            double v = reader.Read(stepSize);
                            Assert.AreEqual(s, v);
                            s += stepSize;
                        }
                        unmanagedArray.CheckBoundaries();
                        reader.Reset();
                    }
                }
            }
        }