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())); }
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); }