public void SlicingTest_1D() { var data = new ArraySlice <int>(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); Assert.AreEqual(new Shape(10), data.Shape); // return identical view var view = new ArraySlice <int>(data, ":"); Assert.AreEqual(new Shape(10), view.Shape); Assert.AreEqual(data, view); view = new ArraySlice <int>(data, "-77:77"); Assert.AreEqual(new Shape(10), view.Shape); Assert.AreEqual(data, view); // return reduced view view = new ArraySlice <int>(data, "7:"); Assert.AreEqual(new Shape(3), view.Shape); Assert.AreEqual(new int[] { 7, 8, 9 }, view); view = new ArraySlice <int>(data, ":5"); Assert.AreEqual(new Shape(5), view.Shape); Assert.AreEqual(new int[] { 0, 1, 2, 3, 4 }, view); view = new ArraySlice <int>(data, "2:3"); Assert.AreEqual(new Shape(1), view.Shape); Assert.AreEqual(new int[] { 2 }, view); // return stepped view view = new ArraySlice <int>(data, "::2"); Assert.AreEqual(new Shape(5), view.Shape); Assert.AreEqual(new int[] { 0, 2, 4, 6, 8 }, view); view = new ArraySlice <int>(data, "::3"); Assert.AreEqual(new Shape(4), view.Shape); Assert.AreEqual(new int[] { 0, 3, 6, 9 }, view); view = new ArraySlice <int>(data, "-77:77:77"); Assert.AreEqual(new Shape(1), view.Shape); Assert.AreEqual(new[] { 0 }, view); // negative step! view = new ArraySlice <int>(data, "::-1"); Assert.AreEqual(new Shape(10), view.Shape); Assert.AreEqual(data.Reverse().ToArray(), view); view = new ArraySlice <int>(data, "::-2"); Assert.AreEqual(new Shape(5), view.Shape); Assert.AreEqual(new int[] { 9, 7, 5, 3, 1 }, view); view = new ArraySlice <int>(data, "::-3"); Assert.AreEqual(new Shape(4), view.Shape); Assert.AreEqual(new int[] { 9, 6, 3, 0 }, view); view = new ArraySlice <int>(data, "-77:77:-77"); Assert.AreEqual(new Shape(1), view.Shape); Assert.AreEqual(new[] { 9 }, view); }