Exemplo n.º 1
0
        public void Create()
        {
            IMultiDimensionalArray array = new MultiDimensionalArray(new[] { 2, 2 });

            array[0, 0] = 1;
            array[0, 1] = 2;
            array[1, 0] = 3;
            array[1, 1] = 4;

            IMultiDimensionalArrayView view = new MultiDimensionalArrayView();

            view.Parent = array;

            //why not same?? If i resize parent i do expect the subarray to be resize as well.
            //the values should be the same but not the reference
            Assert.AreNotSame(array.Shape, view.Shape);
            Assert.IsTrue(view.Shape.SequenceEqual(array.Shape));
            Assert.AreEqual(array.Count, view.Count);
            Assert.AreEqual(array.Rank, view.Rank);
            Assert.AreEqual(array.DefaultValue, view.DefaultValue);

            //subArray should have offsetStarts of MinValue and offsetEnds as MaxValue
            //so it will resize along with the parent
            Assert.IsTrue(view.OffsetStart.SequenceEqual(new[] { int.MinValue, int.MinValue }));
            Assert.IsTrue(view.OffsetEnd.SequenceEqual(new[] { int.MaxValue, int.MaxValue }));

            //assert values are equal
            Assert.AreEqual(array[0, 0], view[0, 0]);
            Assert.AreEqual(array[0, 1], view[0, 1]);
            Assert.AreEqual(array[1, 0], view[1, 0]);
            Assert.AreEqual(array[1, 1], view[1, 1]);
        }
Exemplo n.º 2
0
        public void ReduceBeforeAddingValuesAndGetValuesAfterwards()
        {
            var array = new MultiDimensionalArray(3, 3);

            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    array[i, j] = i * 3 + j;
                }
            }
            var subArray = new MultiDimensionalArrayView(array);

            subArray.SelectedIndexes[0] = new int[] { 3 }; //set non-existent index
            subArray.Reduce[0]          = true;            //try to reduce the first dimension

            //we can't get any values
            subArray.Count.Should("Count should be 0").Be.EqualTo(0);
            foreach (var value in subArray)
            {
                throw new ExpectationViolationException("Shouldn't return any values");
            }

            //add the index the view is looking for
            array.InsertAt(0, 3);
            array[3, 0] = 9;
            array[3, 1] = 10;
            array[3, 2] = 11;

            //and now we can get values
            subArray.Count.Should("Count should be 3").Be.EqualTo(3);
            int actualCount = subArray.Cast <object>().Count();

            actualCount.Should("Actual count should be 3").Be.EqualTo(3);
        }
        public override IFunction GetTimeSeries(ICoordinate coordinate)
        {
            var face = GetFaceAtCoordinate(coordinate);

            if (face != null)
            {
                var timeSeries = new TimeSeries {
                    Parent = this
                };
                var component = new Variable <double>
                {
                    Name = Name + string.Format(" ({0}, {1})", face.I, face.J)
                };
                timeSeries.Components.Add(component);

                var times  = (IMultiDimensionalArray <DateTime>)Time.Values.Clone();
                var values = new MultiDimensionalArrayView <double>(Components[0].Values);
                values.SelectedIndexes[1] = new[] { face.I };
                values.SelectedIndexes[2] = new[] { face.J };
                timeSeries.SetValues(values, new VariableValueFilter <DateTime>(timeSeries.Time, times));
                return(timeSeries);
            }

            return(null);
        }
 public void Count()
 {
     //array = 1,2,3,4,5
     IMultiDimensionalArray<int> array = new MultiDimensionalArray<int> {1, 2, 3, 4, 5};
     //view  = 2,3
     IMultiDimensionalArrayView<int> view = new MultiDimensionalArrayView<int>(array, 0, 1, 2);
     Assert.AreEqual(2, view.Count);
 }
 public void Add()
 {
     IMultiDimensionalArray<int> array = new MultiDimensionalArray<int>();
     IMultiDimensionalArrayView view = new MultiDimensionalArrayView(array, 0, int.MinValue, int.MaxValue);
     view.Add(4);
     Assert.AreEqual(1, view.Count);
     Assert.AreEqual(1, array.Count);
 }
 public void ClearView()
 {
     IMultiDimensionalArray<int> array = new MultiDimensionalArray<int> {1, 2, 3, 4, 5};
     IMultiDimensionalArrayView view = new MultiDimensionalArrayView(array, 0, 1, 2);
     view.Clear();
     Assert.AreEqual(0, view.Count);
     Assert.AreEqual(3, array.Count);
     Assert.IsTrue(new[] {1, 4, 5}.SequenceEqual(array));
 }
Exemplo n.º 7
0
        public void Add()
        {
            IMultiDimensionalArray <int> array = new MultiDimensionalArray <int>();
            IMultiDimensionalArrayView   view  = new MultiDimensionalArrayView(array, 0, int.MinValue, int.MaxValue);

            view.Add(4);
            Assert.AreEqual(1, view.Count);
            Assert.AreEqual(1, array.Count);
        }
Exemplo n.º 8
0
        public void StrideCalculation()
        {
            IMultiDimensionalArray array = new MultiDimensionalArray(new[] { 6, 1 });

            IMultiDimensionalArray array2 = new MultiDimensionalArray(new[] { 6, 3 });
            //reduce the 2nd dimension to only the 1st element. So it resembles the array
            IMultiDimensionalArray view = new MultiDimensionalArrayView(array2, 1, 0, 0);

            Assert.AreEqual(array.Stride, view.Stride);
        }
 public void ConvertToListUsingCopyConstructor()
 {
     MultiDimensionalArray array = new MultiDimensionalArray<double>(2);
     IMultiDimensionalArray<double> view = new MultiDimensionalArrayView<double>(array);
     view[0] = 10;
     view[1] = 5;
     var arrayList = new ArrayList(view);
     Assert.AreEqual(10, arrayList[0]);
     Assert.AreEqual(5, arrayList[1]);
 }
Exemplo n.º 10
0
        public void Count()
        {
            //array = 1,2,3,4,5
            IMultiDimensionalArray <int> array = new MultiDimensionalArray <int> {
                1, 2, 3, 4, 5
            };
            //view  = 2,3
            IMultiDimensionalArrayView <int> view = new MultiDimensionalArrayView <int>(array, 0, 1, 2);

            Assert.AreEqual(2, view.Count);
        }
Exemplo n.º 11
0
        public void ClearView()
        {
            IMultiDimensionalArray <int> array = new MultiDimensionalArray <int> {
                1, 2, 3, 4, 5
            };
            IMultiDimensionalArrayView view = new MultiDimensionalArrayView(array, 0, 1, 2);

            view.Clear();
            Assert.AreEqual(0, view.Count);
            Assert.AreEqual(3, array.Count);
            Assert.IsTrue(new[] { 1, 4, 5 }.SequenceEqual(array));
        }
Exemplo n.º 12
0
        public void ConvertToListUsingCopyConstructor()
        {
            MultiDimensionalArray           array = new MultiDimensionalArray <double>(2);
            IMultiDimensionalArray <double> view  = new MultiDimensionalArrayView <double>(array);

            view[0] = 10;
            view[1] = 5;
            var arrayList = new ArrayList(view);

            Assert.AreEqual(10, arrayList[0]);
            Assert.AreEqual(5, arrayList[1]);
        }
        public void ConvertToListUsingCopyConstructorGeneric()
        {
            IList<int> values = new List<int> {1, 2, 3, 4};

            MultiDimensionalArray array = new MultiDimensionalArray<int>(values, new[] {1, 4});

            IMultiDimensionalArray<int> view = new MultiDimensionalArrayView<int>(array);

            IList array1D = new List<int>(view);

            Assert.AreEqual(4, array1D.Count);
            Assert.AreEqual(4, array1D[3]);
            Assert.AreEqual(2, array1D[1]);
        }
Exemplo n.º 14
0
        public void ReduceWithEmptyIndex()
        {
            var array    = new MultiDimensionalArray(3, 3);
            var subArray = new MultiDimensionalArrayView(array);

            //set empty index
            subArray.SelectedIndexes[0] = new int[] {};
            subArray.Reduce[0]          = true; //try to reduce the first dimension

            subArray.Count.Should("Count should be 0").Be.EqualTo(0);
            foreach (var value in subArray) //should be empty list
            {
                throw new ExpectationViolationException("Shouldn't return any values");
            }
        }
Exemplo n.º 15
0
        public void ToString()
        {
            IMultiDimensionalArray <int> array = new MultiDimensionalArray <int> {
                1, 2, 3, 4, 5
            };
            IMultiDimensionalArrayView view = new MultiDimensionalArrayView(array, 0, 1, 2);
            string s = view.ToString();

            Assert.IsTrue(s.Contains(2.ToString()));
            Assert.IsTrue(s.Contains(3.ToString()));

            Assert.IsFalse(s.Contains(1.ToString()));
            Assert.IsFalse(s.Contains(4.ToString()));
            Assert.IsFalse(s.Contains(5.ToString()));
        }
Exemplo n.º 16
0
        public void ConvertToListUsingCopyConstructorGeneric()
        {
            IList <int> values = new List <int> {
                1, 2, 3, 4
            };

            MultiDimensionalArray array = new MultiDimensionalArray <int>(values, new[] { 1, 4 });

            IMultiDimensionalArray <int> view = new MultiDimensionalArrayView <int>(array);

            IList array1D = new List <int>(view);

            Assert.AreEqual(4, array1D.Count);
            Assert.AreEqual(4, array1D[3]);
            Assert.AreEqual(2, array1D[1]);
        }
Exemplo n.º 17
0
        public void ShapeCalculationWithStartAndEndOffset()
        {
            IMultiDimensionalArray array = new MultiDimensionalArray(3, 3);

            //skip first element in both dimensions
            IMultiDimensionalArrayView subArray = new MultiDimensionalArrayView(array);

            subArray.OffsetStart[0] = 1;
            subArray.OffsetStart[1] = 1;
            Assert.IsTrue(subArray.Shape.SequenceEqual(new int[2] {
                2, 2
            }));

            //skip last element for both dimensions
            subArray = new MultiDimensionalArrayView(array);
            subArray.OffsetEnd[0] = 1;
            subArray.OffsetEnd[1] = 1;
            Assert.IsTrue(subArray.Shape.SequenceEqual(new int[2] {
                2, 2
            }));

            //skip last and first element for both dimensions
            subArray = new MultiDimensionalArrayView(array);
            subArray.OffsetEnd[0]   = 1;
            subArray.OffsetEnd[1]   = 1;
            subArray.OffsetStart[0] = 1;
            subArray.OffsetStart[1] = 1;
            Assert.IsTrue(subArray.Shape.SequenceEqual(new int[2] {
                1, 1
            }));

            //skip first element in both dimensions and resize parent
            subArray = new MultiDimensionalArrayView(array);
            subArray.OffsetStart[0] = 1;
            subArray.OffsetStart[1] = 1;
            //resize the parent array
            array.Resize(new[] { 4, 4 });
            Assert.IsTrue(subArray.Shape.SequenceEqual(new int[2] {
                3, 3
            }));
        }
Exemplo n.º 18
0
        public void ReduceWithNonExistentIndex()
        {
            var array = new MultiDimensionalArray(3, 3);

            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    array[i, j] = i * 3 + j;
                }
            }
            var subArray = new MultiDimensionalArrayView(array);

            subArray.SelectedIndexes[0] = new int[] { 3 }; //set non-existent index
            subArray.Reduce[0]          = true;            //try to reduce the first dimension

            subArray.Count.Should("Count should be 0").Be.EqualTo(0);
            foreach (var value in subArray) //should be empty list
            {
                throw new ExpectationViolationException("Shouldn't return any values");
            }
        }
Exemplo n.º 19
0
        public void RemoveAt()
        {
            //array = 1,2,3,4,5
            IMultiDimensionalArray <int> array = new MultiDimensionalArray <int> {
                1, 2, 3, 4, 5
            };
            //view  = 2,3
            IMultiDimensionalArrayView <int> view = new MultiDimensionalArrayView <int>(array, 0, 1, 2);

            Assert.IsTrue(new[] { 2, 3 }.SequenceEqual(view));
            view.RemoveAt(0);
            //array = 1,3,4,5
            //view  = 3
            Assert.AreEqual(1, view.Count);
            Assert.AreEqual(4, array.Count);
            Assert.IsTrue(new[] { 3 }.SequenceEqual(view));
            Assert.IsTrue(new[] { 1, 3, 4, 5 }.SequenceEqual(array));

            view.RemoveAt(0);
            Assert.AreEqual(0, view.Count);
            Assert.AreEqual(3, array.Count);
            Assert.IsTrue(new[] { 1, 4, 5 }.SequenceEqual(array));
        }
        public void ReduceWithNonExistentIndex()
        {
            var array = new MultiDimensionalArray(3, 3);
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                    array[i, j] = i*3 + j;
            var subArray = new MultiDimensionalArrayView(array);
            
            subArray.SelectedIndexes[0] = new int[] { 3 }; //set non-existent index
            subArray.Reduce[0] = true; //try to reduce the first dimension

            subArray.Count.Should("Count should be 0").Be.EqualTo(0);
            foreach(var value in subArray) //should be empty list
                throw new ExpectationViolationException("Shouldn't return any values");
        }
        public void ReduceWithEmptyIndex()
        {
            var array = new MultiDimensionalArray(3,3);
            var subArray = new MultiDimensionalArrayView(array);
            
            //set empty index
            subArray.SelectedIndexes[0] = new int[]{};
            subArray.Reduce[0] = true; //try to reduce the first dimension

            subArray.Count.Should("Count should be 0").Be.EqualTo(0);
            foreach (var value in subArray) //should be empty list
                throw new ExpectationViolationException("Shouldn't return any values");
        }
        public void Create()
        {
            IMultiDimensionalArray array = new MultiDimensionalArray(new[] {2, 2});
            array[0, 0] = 1;
            array[0, 1] = 2;
            array[1, 0] = 3;
            array[1, 1] = 4;

            IMultiDimensionalArrayView view = new MultiDimensionalArrayView();
            view.Parent = array;

            //why not same?? If i resize parent i do expect the subarray to be resize as well.
            //the values should be the same but not the reference
            Assert.AreNotSame(array.Shape, view.Shape);
            Assert.IsTrue(view.Shape.SequenceEqual(array.Shape));
            Assert.AreEqual(array.Count, view.Count);
            Assert.AreEqual(array.Rank, view.Rank);
            Assert.AreEqual(array.DefaultValue, view.DefaultValue);

            //subArray should have offsetStarts of MinValue and offsetEnds as MaxValue
            //so it will resize along with the parent
            Assert.IsTrue(view.OffsetStart.SequenceEqual(new[] {int.MinValue, int.MinValue}));
            Assert.IsTrue(view.OffsetEnd.SequenceEqual(new[] {int.MaxValue, int.MaxValue}));

            //assert values are equal
            Assert.AreEqual(array[0, 0], view[0, 0]);
            Assert.AreEqual(array[0, 1], view[0, 1]);
            Assert.AreEqual(array[1, 0], view[1, 0]);
            Assert.AreEqual(array[1, 1], view[1, 1]);
        }
        public void ReduceBeforeAddingValuesAndGetValuesAfterwards()
        {
            var array = new MultiDimensionalArray(3, 3);
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                    array[i, j] = i * 3 + j;
            var subArray = new MultiDimensionalArrayView(array);

            subArray.SelectedIndexes[0] = new int[] { 3 }; //set non-existent index
            subArray.Reduce[0] = true; //try to reduce the first dimension

            //we can't get any values
            subArray.Count.Should("Count should be 0").Be.EqualTo(0);
            foreach(var value in subArray)
                throw new ExpectationViolationException("Shouldn't return any values");
            
            //add the index the view is looking for
            array.InsertAt(0,3);
            array[3, 0] = 9;
            array[3, 1] = 10;
            array[3, 2] = 11;

            //and now we can get values
            subArray.Count.Should("Count should be 3").Be.EqualTo(3);
            int actualCount = subArray.Cast<object>().Count();
            actualCount.Should("Actual count should be 3").Be.EqualTo(3);
        }
        public void ToString()
        {
            IMultiDimensionalArray<int> array = new MultiDimensionalArray<int> {1, 2, 3, 4, 5};
            IMultiDimensionalArrayView view = new MultiDimensionalArrayView(array, 0, 1, 2);
            string s = view.ToString();

            Assert.IsTrue(s.Contains(2.ToString()));
            Assert.IsTrue(s.Contains(3.ToString()));

            Assert.IsFalse(s.Contains(1.ToString()));
            Assert.IsFalse(s.Contains(4.ToString()));
            Assert.IsFalse(s.Contains(5.ToString()));
        }
        public void RemoveAt()
        {
            //array = 1,2,3,4,5
            IMultiDimensionalArray<int> array = new MultiDimensionalArray<int> {1, 2, 3, 4, 5};
            //view  = 2,3
            IMultiDimensionalArrayView<int> view = new MultiDimensionalArrayView<int>(array, 0, 1, 2);
            Assert.IsTrue(new[] {2, 3}.SequenceEqual(view));
            view.RemoveAt(0);
            //array = 1,3,4,5
            //view  = 3
            Assert.AreEqual(1, view.Count);
            Assert.AreEqual(4, array.Count);
            Assert.IsTrue(new[] {3}.SequenceEqual(view));
            Assert.IsTrue(new[] {1, 3, 4, 5}.SequenceEqual(array));

            view.RemoveAt(0);
            Assert.AreEqual(0, view.Count);
            Assert.AreEqual(3, array.Count);
            Assert.IsTrue(new[] {1, 4, 5}.SequenceEqual(array));
        }
        public void ShapeCalculationWithStartAndEndOffset()
        {
            IMultiDimensionalArray array = new MultiDimensionalArray(3, 3);

            //skip first element in both dimensions
            IMultiDimensionalArrayView subArray = new MultiDimensionalArrayView(array);
            subArray.OffsetStart[0] = 1;
            subArray.OffsetStart[1] = 1;
            Assert.IsTrue(subArray.Shape.SequenceEqual(new int[2] {2, 2}));

            //skip last element for both dimensions
            subArray = new MultiDimensionalArrayView(array);
            subArray.OffsetEnd[0] = 1;
            subArray.OffsetEnd[1] = 1;
            Assert.IsTrue(subArray.Shape.SequenceEqual(new int[2] {2, 2}));

            //skip last and first element for both dimensions
            subArray = new MultiDimensionalArrayView(array);
            subArray.OffsetEnd[0] = 1;
            subArray.OffsetEnd[1] = 1;
            subArray.OffsetStart[0] = 1;
            subArray.OffsetStart[1] = 1;
            Assert.IsTrue(subArray.Shape.SequenceEqual(new int[2] {1, 1}));

            //skip first element in both dimensions and resize parent
            subArray = new MultiDimensionalArrayView(array);
            subArray.OffsetStart[0] = 1;
            subArray.OffsetStart[1] = 1;
            //resize the parent array
            array.Resize(new[] {4, 4});
            Assert.IsTrue(subArray.Shape.SequenceEqual(new int[2] {3, 3}));
        }
        public void StrideCalculation()
        {
            IMultiDimensionalArray array = new MultiDimensionalArray(new[] {6, 1});

            IMultiDimensionalArray array2 = new MultiDimensionalArray(new[] {6, 3});
            //reduce the 2nd dimension to only the 1st element. So it resembles the array
            IMultiDimensionalArray view = new MultiDimensionalArrayView(array2, 1, 0, 0);
            Assert.AreEqual(array.Stride, view.Stride);
        }