Beispiel #1
0
        public void ArraySlice_WorksLikeArray()
        {
            var a          = new[] { 1.0, 2.71828, 3.14, 4, 4.99999, 42, 1024 };
            var slicea     = new ArraySlice <double>(a);
            var sliceaSame = new ArraySlice <double>(a);

            var b      = new[] { 1.0, 2, 3, 4, 5, 99, 1024 };
            var sliceb = new ArraySlice <double>(b);

            Assert.AreEqual(a, slicea.List);
            Assert.AreEqual(0, slicea.Offset);
            Assert.AreEqual(7, slicea.Count);
            Assert.IsTrue(slicea.Equals(sliceaSame));
            Assert.IsTrue(slicea.Equals((object)sliceaSame));
            Assert.AreEqual(sliceaSame.GetHashCode(), sliceaSame.GetHashCode());
            Assert.IsTrue(slicea == sliceaSame);
            Assert.IsTrue(slicea != sliceb);

            Assert.IsTrue(ApproximatelyEqual(4, slicea[3]));
            Assert.AreEqual(6, slicea.IndexOf(1024));
            Assert.AreEqual(-1, slicea.IndexOf(1025));
            Assert.IsTrue(slicea.Contains(1024));
            Assert.IsFalse(slicea.Contains(1025));
            Assert.IsTrue(ApproximatelyEqual(1081.85827, slicea.Sum()));

            IList <double> asList = slicea;

            Assert.IsTrue(ApproximatelyEqual(4, asList[3]));
            Assert.AreEqual(6, asList.IndexOf(1024));
            Assert.AreEqual(-1, asList.IndexOf(1025));
            Assert.IsTrue(asList.Contains(1024));
            Assert.IsFalse(asList.Contains(1025));
            Assert.IsTrue(ApproximatelyEqual(1081.85827, asList.Sum()));
        }
Beispiel #2
0
        public void ArraySlice_TestSlice()
        {
            var a          = new[] { 1.0, 2.71828, 3.14, 4, 4.99999, 42, 1024 };
            var slicea     = new ArraySlice <double>(a, 2, 3);
            var sliceaSame = new ArraySlice <double>(a, 2, 3);

            var b      = new[] { 1.0, 2, 3, 4, 5, 99, 1024 };
            var sliceb = new ArraySlice <double>(b, 2, 3);

            Assert.AreEqual(a, slicea.List);
            Assert.AreEqual(2, slicea.Offset);
            Assert.AreEqual(3, slicea.Count);
            Assert.IsTrue(slicea.Equals(sliceaSame));
            Assert.IsTrue(slicea.Equals((object)sliceaSame));
            Assert.AreEqual(sliceaSame.GetHashCode(), sliceaSame.GetHashCode());
            Assert.IsTrue(slicea == sliceaSame);
            Assert.IsTrue(slicea != sliceb);

            Assert.IsTrue(ApproximatelyEqual(4.99999, slicea[2]));
            Assert.AreEqual(1, slicea.IndexOf(4));
            Assert.AreEqual(-1, slicea.IndexOf(1025));
            Assert.IsTrue(slicea.Contains(4));
            Assert.IsFalse(slicea.Contains(1025));
            Assert.IsTrue(ApproximatelyEqual(12.13999, slicea.Sum()));

            IList <double> asList = slicea;

            Assert.IsTrue(ApproximatelyEqual(4.99999, asList[2]));
            Assert.AreEqual(1, asList.IndexOf(4));
            Assert.AreEqual(-1, asList.IndexOf(1025));
            Assert.IsTrue(asList.Contains(4));
            Assert.IsFalse(asList.Contains(1025));
            Assert.IsTrue(ApproximatelyEqual(12.13999, asList.Sum()));
        }
        public void ArraySliceTests_Basics()
        {
            int[]            sample       = Enumerable.Range(100, 50).ToArray();
            int[]            copyToTarget = new int[100];
            ArraySlice <int> slice;

            // Empty ArraySlice
            slice = ArraySlice <int> .Empty;
            slice.Trim();
            Assert.Empty(slice);
            Assert.True(slice == ArraySlice <int> .Empty);
            Assert.False(slice != ArraySlice <int> .Empty);

            VerifyCopyTo <int>(slice, copyToTarget);
            VerifyRoundTrip <int>(slice, copyToTarget);
            CollectionReadVerifier.VerifySame(slice, TreeSerializer.RoundTrip(slice, TreeFormat.Binary));
            CollectionReadVerifier.VerifySame(slice, TreeSerializer.RoundTrip(slice, TreeFormat.Json));

            // Whole Array
            slice = new ArraySlice <int>(sample);
            Assert.Equal(sample.Length, slice.Count);
            Assert.Equal(sample, slice);
            Assert.Equal(sample[10], slice[10]);
            VerifyCopyTo <int>(slice, copyToTarget);
            VerifyRoundTrip <int>(slice, copyToTarget);
            CollectionReadVerifier.VerifySame(slice, TreeSerializer.RoundTrip(slice, TreeFormat.Binary));
            CollectionReadVerifier.VerifySame(slice, TreeSerializer.RoundTrip(slice, TreeFormat.Json));

            // Array slice-to-end
            slice = new ArraySlice <int>(sample, index: 10);
            Assert.Equal(sample.Length - 10, slice.Count);
            Assert.Equal(sample[20], slice[10]);
            Assert.False(slice.Equals(sample));
            VerifyCopyTo <int>(slice, copyToTarget);
            VerifyRoundTrip <int>(slice, copyToTarget);
            CollectionReadVerifier.VerifySame(slice, TreeSerializer.RoundTrip(slice, TreeFormat.Binary));
            CollectionReadVerifier.VerifySame(slice, TreeSerializer.RoundTrip(slice, TreeFormat.Json));

            // Array slice
            slice = new ArraySlice <int>(sample, index: 10, length: 20);
            Assert.Equal(20, slice.Count);
            Assert.Equal(sample[10], slice[0]);
            VerifyCopyTo <int>(slice, copyToTarget);
            VerifyRoundTrip <int>(slice, copyToTarget);
            CollectionReadVerifier.VerifySame(slice, TreeSerializer.RoundTrip(slice, TreeFormat.Binary));
            CollectionReadVerifier.VerifySame(slice, TreeSerializer.RoundTrip(slice, TreeFormat.Json));

            // Bounds checks
            Assert.Throws <ArgumentNullException>(() => new ArraySlice <int>(null, 0, 0));                            // Array null
            Assert.Throws <ArgumentOutOfRangeException>(() => new ArraySlice <int>(sample, -1, 0));                   // index < 0
            Assert.Throws <ArgumentOutOfRangeException>(() => new ArraySlice <int>(sample, sample.Length + 1, 0));    // index > array.Length
            Assert.Throws <ArgumentOutOfRangeException>(() => new ArraySlice <int>(sample, 0, sample.Length + 1));    // length too long
            Assert.Throws <ArgumentOutOfRangeException>(() => new ArraySlice <int>(sample, 2, sample.Length + 3));

            // Clear
            slice.Clear();
            Assert.Empty(slice);
        }