public void ReduceOnWrongDimensionThrowsAnException() { var array = new MultiDimensionalArray(3, 3); var subArray = array.Select(0, 0, 1); subArray.Reduce[0] = true; //try to reduce the first dimension }
public void ReduceArray() { // create a 2D grid and slice rows and columns // 1 2 3 // 4 5 6 // 7 8 9 IMultiDimensionalArray array = new MultiDimensionalArray(3, 3); array[0, 0] = 1; array[0, 1] = 2; array[0, 2] = 3; array[1, 0] = 4; array[1, 1] = 5; array[1, 2] = 6; array[2, 0] = 7; array[2, 1] = 8; array[2, 2] = 9; //create a reduced array containing the first row var view = array.Select(0, 0, 0); view.Reduce[0] = true; //reduce the x dimension Assert.AreEqual(1, view.Rank); Assert.AreEqual(new[] { 3 }, view.Shape); Assert.AreEqual(2, view[1]); }
public void SelectOnMultipleIndexes() { // more complex example (isn't it another test?) var array = new MultiDimensionalArray(3, 3); // 1 9 2 1 2 // 9 9 9 ==> // 3 9 4 3 4 array[0, 0] = 1; array[0, 1] = 9; array[0, 2] = 2; array[1, 0] = 9; array[1, 1] = 9; array[1, 2] = 9; array[2, 0] = 3; array[2, 1] = 9; array[2, 2] = 4; IMultiDimensionalArrayView view = array.Select(0, new[] { 0, 2 }).Select(1, new[] { 0, 2 }); Assert.IsTrue(new[] { 2, 2 }.SequenceEqual(view.Shape)); Assert.AreEqual(4, view.Count); Assert.AreEqual(1, view[0, 0]); Assert.AreEqual(2, view[0, 1]); Assert.AreEqual(3, view[1, 0]); Assert.AreEqual(4, view[1, 1]); }
public void TestVariableOwnerForSubArray() { //test on class because our MDA interface does not have owner. //test here and not in MDA because owner is a variable IMultiDimensionalArray array = new MultiDimensionalArray(3, 3); array[1, 1] = 5; ((MultiDimensionalArray)array).Owner = new Variable <double>("x"); array = array.Select(0, 0, 2).Select(1, 0, 2); Assert.AreEqual(5, array[1, 1]); }
public void GenericFiltered() { IMultiDimensionalArray <double> array = new MultiDimensionalArray <double>(3); array[0] = 1; array[1] = 2; array[2] = 3; var view = array.Select(0, new[] { 1 }); Assert.AreEqual(2, view[0]); }
public void IndexOf() { IMultiDimensionalArray <double> array = new MultiDimensionalArray <double>(3); array[0] = 1; array[1] = 2; array[2] = 3; var view = array.Select(0, new[] { 1 }); Assert.AreEqual(0, view.IndexOf(2)); }
public void Remove() { IMultiDimensionalArray <double> array = new MultiDimensionalArray <double>(3); array[0] = 1; array[1] = 2; array[2] = 3; var view = array.Select(0, new[] { 1 }); view.Remove(2); Assert.AreEqual(2, array.Count); Assert.AreEqual(new[] { 1.0, 3.0 }, array); }
public void ResizeParentAndUpdateShapeOfSubArray() { //create a 2D grid of 3x3 IMultiDimensionalArray array = new MultiDimensionalArray(3, 3); //select rows [1, 2). So skip the first row IMultiDimensionalArray subArray = array.Select(0, 1, int.MaxValue); Assert.IsTrue(subArray.Shape.SequenceEqual(new[] { 2, 3 })); //resize the parent. Add one row and one column. Check the shape of the subArray changes array.Resize(new[] { 4, 4 }); Assert.IsTrue(subArray.Shape.SequenceEqual(new[] { 3, 4 })); }
public void Clone() { IMultiDimensionalArray <double> array = new MultiDimensionalArray <double>(3); array[0] = 1; array[1] = 2; array[2] = 3; var view = array.Select(0, 1, 1); var clonedView = (IMultiDimensionalArrayView)view.Clone(); Assert.IsTrue(view.OffsetStart.SequenceEqual(clonedView.OffsetStart)); Assert.IsTrue(view.OffsetEnd.SequenceEqual(clonedView.OffsetEnd)); }
public void InsertAt() { IMultiDimensionalArray <double> array = new MultiDimensionalArray <double>(6); array[0] = 1; array[1] = 2; array[2] = 3; array[3] = 4; array[4] = 5; array[5] = 6; var view = array.Select(0, new[] { 0, 2, 4 }); view.InsertAt(0, 3); //insert at end Assert.AreEqual(7, array.Count); Assert.AreEqual(new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 0.0, 6.0 }, array); //Ambiguous! }
public void SelectUsingIndexes() { IMultiDimensionalArray array = new MultiDimensionalArray(3); array[0] = 1; array[1] = 2; array[2] = 3; IMultiDimensionalArrayView view = array.Select(0, new[] { 0, 2 }); // Select first and last element Assert.AreEqual(2, view.Count); Assert.AreEqual(1, view[0]); Assert.AreEqual(3, view[1]); Assert.AreEqual(3, view.MaxValue); Assert.AreEqual(1, view.MinValue); }
public void SelectARow() { var array = new MultiDimensionalArray(2, 3); // 1 2 3 1 2 3 // 4 5 6 ==> array[0, 0] = 1; array[0, 1] = 2; array[0, 2] = 3; array[1, 0] = 4; array[1, 1] = 5; array[1, 2] = 6; // select the first index of the first dimension (e.g. the row) var row = array.Select(0, new[] { 0 }); row.Reduce[0] = true; Assert.AreEqual(new[] { 1, 2, 3 }, row); }
public void Bind3DArrayUsing2DView() { IMultiDimensionalArray array = new MultiDimensionalArray(3, 3, 3); array[0, 0, 0] = 1; array[1, 1, 1] = 2; IMultiDimensionalArrayView view = array.Select(0, 0, 0); view.Reduce[0] = true; // reduce 1st dimension DataGridView gridView = new DataGridView(); MultiDimensionalArrayBindingList multiDimensionalArrayBindingList = new MultiDimensionalArrayBindingList(view); gridView.DataSource = multiDimensionalArrayBindingList; Form form = new Form(); gridView.Dock = DockStyle.Fill; form.Controls.Add(gridView); WindowsFormsTestHelper.ShowModal(form); }
public void OutOfRangeForChildArray() { ///create a 2D grid and slice rows and columns /// 1 2 /// 3 4 IMultiDimensionalArray array = new MultiDimensionalArray(2, 2); array[0, 0] = 1; array[0, 1] = 2; array[1, 0] = 4; array[1, 1] = 5; //create a subarray of the top left corner // 1 |2| // 4 |5| // IMultiDimensionalArray subArray = array.Select(1, 1, 1); subArray[1, 1] = 5; // <= exception }
public void MoveDimensionAtGivenIndexAndLength() { var values = new List <int> { 1, 2, 3, 4 }; IMultiDimensionalArray <int> array = new MultiDimensionalArray <int>(values, new[] { 1, 4 }); var view = array.Select(1, 2, 3); // select { 1, 2, [3, 4] } // move 2nd dimension index var dimension = 1; var startIndex = 1; var length = 2; var newIndex = 0; array.Move(dimension, startIndex, length, newIndex); // 1, 2, 3, 4 => 2, 3, 1, 4 // 2, 3, [1, 4] Assert.IsTrue(view.SequenceEqual(new[] { 1, 4 })); }
public void UseEnumeratorOnMultiDimensionalArrayView() { // Setup an array // 1 2 - // 3 4 - // - - - IMultiDimensionalArray <double> array = new MultiDimensionalArray <double>(3, 3); array[0, 0] = 1; array[0, 1] = 2; array[1, 0] = 3; array[1, 1] = 4; // make a selection of the top right corner IMultiDimensionalArray <double> view = array.Select(0, 0, 1).Select(1, 0, 1); Assert.IsTrue(new[] { 2, 2 }.SequenceEqual(view.Shape)); // since array supports enumerator - we can enumerate throuth all values as 1D array Assert.IsTrue(new double[] { 1, 2, 3, 4 }.SequenceEqual(view)); }
public void ReducedIndexing() { IMultiDimensionalArray <double> array = new MultiDimensionalArray <double>(1, 3); array[0, 0] = 1; array[0, 1] = 2; array[0, 2] = 3; var view = array.Select(0, int.MinValue, int.MaxValue); view.SelectedIndexes[0] = new int[] { 0 }; view.SelectedIndexes[1] = new int[] { 1 }; view.Reduce[0] = true; //reduce the x dimension //one element Assert.AreEqual(1, view.Count); //rank and shape are one Assert.AreEqual(1, view.Rank); Assert.AreEqual(new[] { 1 }, view.Shape); //get the value Assert.AreEqual(2, view[0]); }
public void Bind3DArrayUsing2DView() { IMultiDimensionalArray array = new MultiDimensionalArray(3, 3, 3); array[0, 0, 0] = 1; array[1, 1, 1] = 2; IMultiDimensionalArrayView view = array.Select(0, 0, 0); view.Reduce[0] = true; // reduce 1st dimension DataGridView gridView = new DataGridView(); MultiDimensionalArrayBindingList multiDimensionalArrayBindingList = new MultiDimensionalArrayBindingList(view); gridView.DataSource = multiDimensionalArrayBindingList; Form form = new Form(); gridView.Dock = DockStyle.Fill; form.Controls.Add(gridView); WindowsFormsTestHelper.ShowModal(form); }
public void GenericFiltered() { IMultiDimensionalArray<double> array = new MultiDimensionalArray<double>(3); array[0] = 1; array[1] = 2; array[2] = 3; var view = array.Select(0, new[] {1}); Assert.AreEqual(2, view[0]); }
public void IndexOf() { IMultiDimensionalArray<double> array = new MultiDimensionalArray<double>(3); array[0] = 1; array[1] = 2; array[2] = 3; var view = array.Select(0, new[] { 1 }); Assert.AreEqual(0, view.IndexOf(2)); }
public void OutOfRangeForChildArray() { ///create a 2D grid and slice rows and columns /// 1 2 /// 3 4 IMultiDimensionalArray array = new MultiDimensionalArray(2, 2); array[0, 0] = 1; array[0, 1] = 2; array[1, 0] = 4; array[1, 1] = 5; //create a subarray of the top left corner // 1 |2| // 4 |5| // IMultiDimensionalArray subArray = array.Select(1, 1, 1); subArray[1, 1] = 5; // <= exception }
public void Select() { // create a 2D grid and slice rows and columns // // 1 2 3 // 4 5 6 // 7 8 9 // IMultiDimensionalArray array = new MultiDimensionalArray(3, 3); array[0, 0] = 1; // row 0 array[0, 1] = 2; array[0, 2] = 3; array[1, 0] = 4; // row 1 array[1, 1] = 5; array[1, 2] = 6; array[2, 0] = 7; // row 2 array[2, 1] = 8; array[2, 2] = 9; Assert.AreEqual(9, array.Count); Assert.AreEqual(2, array[0, 1]); IMultiDimensionalArrayView subArray; // a new array is the middle column of our grid // // 1 [2] 3 // 4 [5] 6 // 7 [8] 9 // ^ subArray = array.Select(new[] { int.MinValue, 1 }, new[] { int.MaxValue, 1 }); Assert.AreEqual(3, subArray.Shape[0]); Assert.AreEqual(1, subArray.Shape[1]); Assert.AreEqual(int.MinValue, subArray.OffsetStart[0]); Assert.AreEqual(int.MaxValue, subArray.OffsetEnd[0]); Assert.AreEqual(1, subArray.OffsetStart[1]); Assert.AreEqual(1, subArray.OffsetEnd[1]); // check values Assert.AreEqual(2, subArray[0, 0]); Assert.AreEqual(5, subArray[1, 0]); Assert.AreEqual(8, subArray[2, 0]); // 1 [2] 3 // 4 [5] 6 // 7 [8] 9 // ^ subArray = array.Select(1, 1, 1); // select 2st column, slicing Assert.AreEqual(3, subArray.Shape[0]); Assert.AreEqual(1, subArray.Shape[1]); Assert.AreEqual(int.MinValue, subArray.OffsetStart[0]); Assert.AreEqual(int.MaxValue, subArray.OffsetEnd[0]); Assert.AreEqual(1, subArray.OffsetStart[1]); Assert.AreEqual(1, subArray.OffsetEnd[1]); // 1 [2 3) // 4 [5 6) // 7 [8 9) // ^ subArray = array.Select(1, 1, int.MaxValue); Assert.AreEqual(3, subArray.Shape[0]); Assert.AreEqual(2, subArray.Shape[1]); Assert.AreEqual(int.MinValue, subArray.OffsetStart[0]); Assert.AreEqual(int.MaxValue, subArray.OffsetEnd[0]); Assert.AreEqual(1, subArray.OffsetStart[1]); Assert.AreEqual(int.MaxValue, subArray.OffsetEnd[1]); }
public void ReduceArray() { // create a 2D grid and slice rows and columns // 1 2 3 // 4 5 6 // 7 8 9 IMultiDimensionalArray array = new MultiDimensionalArray(3, 3); array[0, 0] = 1; array[0, 1] = 2; array[0, 2] = 3; array[1, 0] = 4; array[1, 1] = 5; array[1, 2] = 6; array[2, 0] = 7; array[2, 1] = 8; array[2, 2] = 9; //create a reduced array containing the first row var view = array.Select(0, 0, 0); view.Reduce[0] = true; //reduce the x dimension Assert.AreEqual(1, view.Rank); Assert.AreEqual(new[] {3}, view.Shape); Assert.AreEqual(2, view[1]); }
public void ReduceOnWrongDimensionThrowsAnException() { var array = new MultiDimensionalArray(3, 3); var subArray = array.Select(0, 0, 1); subArray.Reduce[0] = true; //try to reduce the first dimension }
public void InsertAt() { IMultiDimensionalArray<double> array = new MultiDimensionalArray<double>(6); array[0] = 1; array[1] = 2; array[2] = 3; array[3] = 4; array[4] = 5; array[5] = 6; var view = array.Select(0, new[] {0, 2, 4}); view.InsertAt(0, 3); //insert at end Assert.AreEqual(7, array.Count); Assert.AreEqual(new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 0.0, 6.0}, array); //Ambiguous! }
public void Select() { // create a 2D grid and slice rows and columns // // 1 2 3 // 4 5 6 // 7 8 9 // IMultiDimensionalArray array = new MultiDimensionalArray(3, 3); array[0, 0] = 1; // row 0 array[0, 1] = 2; array[0, 2] = 3; array[1, 0] = 4; // row 1 array[1, 1] = 5; array[1, 2] = 6; array[2, 0] = 7; // row 2 array[2, 1] = 8; array[2, 2] = 9; Assert.AreEqual(9, array.Count); Assert.AreEqual(2, array[0, 1]); IMultiDimensionalArrayView subArray; // a new array is the middle column of our grid // // 1 [2] 3 // 4 [5] 6 // 7 [8] 9 // ^ subArray = array.Select(new[] {int.MinValue, 1}, new[] {int.MaxValue, 1}); Assert.AreEqual(3, subArray.Shape[0]); Assert.AreEqual(1, subArray.Shape[1]); Assert.AreEqual(int.MinValue, subArray.OffsetStart[0]); Assert.AreEqual(int.MaxValue, subArray.OffsetEnd[0]); Assert.AreEqual(1, subArray.OffsetStart[1]); Assert.AreEqual(1, subArray.OffsetEnd[1]); // check values Assert.AreEqual(2, subArray[0, 0]); Assert.AreEqual(5, subArray[1, 0]); Assert.AreEqual(8, subArray[2, 0]); // 1 [2] 3 // 4 [5] 6 // 7 [8] 9 // ^ subArray = array.Select(1, 1, 1); // select 2st column, slicing Assert.AreEqual(3, subArray.Shape[0]); Assert.AreEqual(1, subArray.Shape[1]); Assert.AreEqual(int.MinValue, subArray.OffsetStart[0]); Assert.AreEqual(int.MaxValue, subArray.OffsetEnd[0]); Assert.AreEqual(1, subArray.OffsetStart[1]); Assert.AreEqual(1, subArray.OffsetEnd[1]); // 1 [2 3) // 4 [5 6) // 7 [8 9) // ^ subArray = array.Select(1, 1, int.MaxValue); Assert.AreEqual(3, subArray.Shape[0]); Assert.AreEqual(2, subArray.Shape[1]); Assert.AreEqual(int.MinValue, subArray.OffsetStart[0]); Assert.AreEqual(int.MaxValue, subArray.OffsetEnd[0]); Assert.AreEqual(1, subArray.OffsetStart[1]); Assert.AreEqual(int.MaxValue, subArray.OffsetEnd[1]); }
public void SelectARow() { var array = new MultiDimensionalArray(2, 3); // 1 2 3 1 2 3 // 4 5 6 ==> array[0, 0] = 1; array[0, 1] = 2; array[0, 2] = 3; array[1, 0] = 4; array[1, 1] = 5; array[1, 2] = 6; // select the first index of the first dimension (e.g. the row) var row = array.Select(0,new[]{0}); row.Reduce[0] = true; Assert.AreEqual(new[]{1,2,3},row); }
public void SelectOnMultipleIndexes() { // more complex example (isn't it another test?) var array = new MultiDimensionalArray(3, 3); // 1 9 2 1 2 // 9 9 9 ==> // 3 9 4 3 4 array[0, 0] = 1; array[0, 1] = 9; array[0, 2] = 2; array[1, 0] = 9; array[1, 1] = 9; array[1, 2] = 9; array[2, 0] = 3; array[2, 1] = 9; array[2, 2] = 4; IMultiDimensionalArrayView view = array.Select(0, new[] {0, 2}).Select(1, new[] {0, 2}); Assert.IsTrue(new[] {2, 2}.SequenceEqual(view.Shape)); Assert.AreEqual(4, view.Count); Assert.AreEqual(1, view[0, 0]); Assert.AreEqual(2, view[0, 1]); Assert.AreEqual(3, view[1, 0]); Assert.AreEqual(4, view[1, 1]); }
public void SelectUsingIndexes() { IMultiDimensionalArray array = new MultiDimensionalArray(3); array[0] = 1; array[1] = 2; array[2] = 3; IMultiDimensionalArrayView view = array.Select(0, new[] {0, 2}); // Select first and last element Assert.AreEqual(2, view.Count); Assert.AreEqual(1, view[0]); Assert.AreEqual(3, view[1]); Assert.AreEqual(3,view.MaxValue); Assert.AreEqual(1,view.MinValue); }
public void UseEnumeratorOnMultiDimensionalArrayView() { // Setup an array // 1 2 - // 3 4 - // - - - IMultiDimensionalArray<double> array = new MultiDimensionalArray<double>(3, 3); array[0, 0] = 1; array[0, 1] = 2; array[1, 0] = 3; array[1, 1] = 4; // make a selection of the top right corner IMultiDimensionalArray<double> view = array.Select(0, 0, 1).Select(1, 0, 1); Assert.IsTrue(new[] {2, 2}.SequenceEqual(view.Shape)); // since array supports enumerator - we can enumerate throuth all values as 1D array Assert.IsTrue(new double[] {1, 2, 3, 4}.SequenceEqual(view)); }
public void MoveDimensionAtGivenIndexAndLength() { var values = new List<int> { 1, 2, 3, 4 }; IMultiDimensionalArray<int> array = new MultiDimensionalArray<int>(values, new[] { 1, 4 }); var view = array.Select(1, 2, 3); // select { 1, 2, [3, 4] } // move 2nd dimension index var dimension = 1; var startIndex = 1; var length = 2; var newIndex = 0; array.Move(dimension, startIndex, length, newIndex); // 1, 2, 3, 4 => 2, 3, 1, 4 // 2, 3, [1, 4] Assert.IsTrue(view.SequenceEqual(new[] { 1, 4 })); }
public void ReducedIndexing() { IMultiDimensionalArray<double> array = new MultiDimensionalArray<double>(1, 3); array[0, 0] = 1; array[0, 1] = 2; array[0, 2] = 3; var view = array.Select(0, int.MinValue, int.MaxValue); view.SelectedIndexes[0] = new int[] { 0 }; view.SelectedIndexes[1] = new int[] { 1 }; view.Reduce[0] = true; //reduce the x dimension //one element Assert.AreEqual(1, view.Count); //rank and shape are one Assert.AreEqual(1, view.Rank); Assert.AreEqual(new[] { 1 }, view.Shape); //get the value Assert.AreEqual(2, view[0]); }
public void ResizeParentAndUpdateShapeOfSubArray() { //create a 2D grid of 3x3 IMultiDimensionalArray array = new MultiDimensionalArray(3, 3); //select rows [1, 2). So skip the first row IMultiDimensionalArray subArray = array.Select(0, 1, int.MaxValue); Assert.IsTrue(subArray.Shape.SequenceEqual(new[] {2, 3})); //resize the parent. Add one row and one column. Check the shape of the subArray changes array.Resize(new[] {4, 4}); Assert.IsTrue(subArray.Shape.SequenceEqual(new[] {3, 4})); }
public void Clone() { IMultiDimensionalArray<double> array = new MultiDimensionalArray<double>(3); array[0] = 1; array[1] = 2; array[2] = 3; var view = array.Select(0, 1, 1); var clonedView = (IMultiDimensionalArrayView)view.Clone(); Assert.IsTrue(view.OffsetStart.SequenceEqual(clonedView.OffsetStart)); Assert.IsTrue(view.OffsetEnd.SequenceEqual(clonedView.OffsetEnd)); }
public void TestVariableOwnerForSubArray() { //test on class because our MDA interface does not have owner. //test here and not in MDA because owner is a variable IMultiDimensionalArray array = new MultiDimensionalArray(3, 3); array[1, 1] = 5; ((MultiDimensionalArray)array).Owner = new Variable<double>("x"); array = array.Select(0, 0, 2).Select(1, 0, 2); Assert.AreEqual(5, array[1,1]); }
public void Remove() { IMultiDimensionalArray<double> array = new MultiDimensionalArray<double>(3); array[0] = 1; array[1] = 2; array[2] = 3; var view = array.Select(0, new[] { 1 }); view.Remove(2); Assert.AreEqual(2, array.Count); Assert.AreEqual(new[] {1.0, 3.0}, array); }