Esempio n. 1
0
        public void Multiply_Scalar()
        {
            // arrange
            var targetData = new int[1];
            var src1Data   = new int[1];
            var src2Data   = new int[1];

            var target = new DataAndLayout <int>(targetData, new FastAccess(new Layout(new int[] { }, 0, new int[] { })));
            var src1   = new DataAndLayout <int>(src1Data, new FastAccess(new Layout(new int[] { }, 0, new int[] { })));
            var src2   = new DataAndLayout <int>(src2Data, new FastAccess(new Layout(new int[] { }, 0, new int[] { })));

            const int CopyPattern1 = 4;

            src1Data[0] = CopyPattern1;

            const int CopyPattern2 = 5;

            src2Data[0] = CopyPattern2;

            // action
            ScalarOps.Multiply(target, src1, src2);

            // assert
            const int ExpectedValue = 20;

            Assert.AreEqual(ExpectedValue, targetData[0]);
        }
Esempio n. 2
0
        public void CanUse_ScalarTarget_ReturnFalse()
        {
            // arrange
            var target = new DataAndLayout <int>(new int[1], new FastAccess(new Layout(new int[] { }, 0, new int[] { })));

            // action
            var canUse = VectorOps.CanUse(target);

            // assert
            Assert.IsFalse(canUse);
        }
Esempio n. 3
0
        public void CanUse_GoodTargetOnly_ReturnTrue()
        {
            // arrange
            var target = new DataAndLayout <int>(new int[10], new FastAccess(new Layout(new int[] { 10 }, 0, new int[] { 1 })));

            // action
            var canUse = VectorOps.CanUse(target);

            // assert
            Assert.IsTrue(canUse);
        }
Esempio n. 4
0
        public void Convert_InvalidConvert_ThrowException()
        {
            var targetData = new string[4];
            var srcData    = new[] { 4, 2, 7, 1 };

            var target = new DataAndLayout <string>(targetData, new FastAccess(new Layout(new int[] { 4 }, 0, new int[] { 1 })));
            var source = new DataAndLayout <int>(srcData, new FastAccess(new Layout(new int[] { 4 }, 0, new int[] { 1 })));

            // action
            ScalarOps.Convert(target, source);
        }
Esempio n. 5
0
        public void CanUse_UnSupportedType_ReturnFalse()
        {
            // arrange
            var data   = new UnSupportedTypeForUnitTestOnly[1];
            var target = new DataAndLayout <UnSupportedTypeForUnitTestOnly>(data, new FastAccess(new Layout(new int[] { }, 0, new int[] { })));

            // action
            var canUse = VectorOps.CanUse(target);

            // assert
            Assert.IsFalse(canUse);
        }
Esempio n. 6
0
        public void CanUse_TargetIsNotContinuous_ReturnFalse()
        {
            // arrange
            const int NotContinuousStride = 2;
            var       target = new DataAndLayout <int>(new int[20], new FastAccess(new Layout(new int[] { 10 }, 0, new int[] { NotContinuousStride })));

            // action
            var canUse = VectorOps.CanUse(target);

            // assert
            Assert.IsFalse(canUse);
        }
Esempio n. 7
0
        public void CanUse_CanUseBothSrc1AndSrc2_ReturnTrue()
        {
            // arrange
            var target = new DataAndLayout <int>(new int[10], new FastAccess(new Layout(new int[] { 10 }, 0, new int[] { 1 })));
            var src1   = new DataAndLayout <int>(new int[10], new FastAccess(new Layout(new int[] { 10 }, 0, new int[] { 1 })));
            var src2   = new DataAndLayout <int>(new int[10], new FastAccess(new Layout(new int[] { 10 }, 0, new int[] { 1 })));

            // action
            var canUse = VectorOps.CanUse(target, src1, src2);

            // assert
            Assert.IsTrue(canUse);
        }
Esempio n. 8
0
        public void Fill_Scalar()
        {
            // arrange
            var data   = new int[1];
            var scalar = new DataAndLayout <int>(data, new FastAccess(new Layout(new int[] { }, 0, new int[] { })));

            // action
            const int FillPattern = 999;

            ScalarOps.Fill(FillPattern, scalar);

            // assert
            Assert.IsTrue(data.All(d => d == FillPattern));
        }
Esempio n. 9
0
        public void CanUseSrc_NotContinuousStride_ReturnFalse()
        {
            // arrange
            const int BufferSize = 6;
            const int NumDim     = 3;
            var       data       = new int[BufferSize];
            var       src        = new DataAndLayout <int>(data, new FastAccess(new Layout(new int[] { 1, 2, 3 }, 0, new int[] { 6, 3, 2 })));

            // action
            var canUse = VectorOps.CanUseSrc(NumDim, src);

            // assert
            Assert.IsFalse(canUse);
        }
Esempio n. 10
0
        public void CanUseSrc_NoStride_ReturnTrue()
        {
            // arrange
            const int BufferSize = 1;
            const int NumDim     = 1;
            var       data       = new int[BufferSize];
            var       src        = new DataAndLayout <int>(data, new FastAccess(new Layout(new int[] { 1 }, 0, new int[] { 0 })));

            // action
            var canUse = VectorOps.CanUseSrc(NumDim, src);

            // assert
            Assert.IsTrue(canUse);
        }
Esempio n. 11
0
        public void Fill_Vector2D()
        {
            // arrange
            var data   = new int[24];
            var target = new DataAndLayout <int>(data, new FastAccess(new Layout(new int[] { 2, 3, 4 }, 0, new int[] { 12, 4, 1 })));

            const int FillPattern = 999;

            // action
            ScalarOps.Fill(FillPattern, target);

            // assert
            Assert.IsTrue(data.All(d => d == FillPattern));
        }
Esempio n. 12
0
        public void TrueIndices()
        {
            // arrange
            var targetData = new int[4];
            var srcData    = new bool[] { false, true, false, true };

            var target = new DataAndLayout <int>(targetData, new FastAccess(new Layout(new int[] { 4 }, 0, new int[] { 1 })));
            var source = new DataAndLayout <bool>(srcData, new FastAccess(new Layout(new int[] { 4 }, 0, new int[] { 1 })));

            // action
            ScalarOps.TrueIndices(target, source);

            // assert
            CollectionAssert.AreEqual(new[] { 1, 3, 1, 3 }, targetData);
        }
Esempio n. 13
0
        public void FindLastAxis_Notfound()
        {
            // arrange
            var targetData = new int[4];
            var srcData    = new[] { 4, 2, 7, 1 };

            var target = new DataAndLayout <int>(targetData, new FastAccess(new Layout(new int[] { 4 }, 0, new int[] { 1 })));
            var src    = new DataAndLayout <int>(srcData, new FastAccess(new Layout(new int[] { 4 }, 0, new int[] { 1 })));

            // action
            ScalarOps.FindLastAxis(9, target, src);

            // assert
            Assert.AreEqual(SpecialIdx.NotFound, targetData[0]);
        }
Esempio n. 14
0
        public void CanUse_CanNotUseSrc1Only_ReturnFalse()
        {
            // arrange
            var target = new DataAndLayout <int>(new int[10], new FastAccess(new Layout(new int[] { 10 }, 0, new int[] { 1 })));
            var src2   = new DataAndLayout <int>(new int[10], new FastAccess(new Layout(new int[] { 10 }, 0, new int[] { 1 })));

            const int NotContinuousStride = 2;
            var       src1 = new DataAndLayout <int>(new int[20], new FastAccess(new Layout(new int[] { 10 }, 0, new int[] { NotContinuousStride })));

            // action
            var canUse = VectorOps.CanUse(target, src1, src2);

            // assert
            Assert.IsFalse(canUse);
        }
Esempio n. 15
0
        public void ArgMaxLastAxis()
        {
            // arrange
            var targetData = new int[4];
            var srcData    = new[] { 4, 2, 7, 1 };

            var target = new DataAndLayout <int>(targetData, new FastAccess(new Layout(new int[] { 4 }, 0, new int[] { 1 })));
            var src    = new DataAndLayout <int>(srcData, new FastAccess(new Layout(new int[] { 4 }, 0, new int[] { 1 })));

            // action
            ScalarOps.ArgMaxLastAxis(target, src);

            // assert
            Assert.AreEqual(2, targetData[0]);
        }
Esempio n. 16
0
        public void CountTrueLastAxis()
        {
            // arrange
            var targetData = new int[1];
            var srcData    = new[] { false, false, true, true };

            var target = new DataAndLayout <int>(targetData, new FastAccess(new Layout(new int[] { 1 }, 0, new int[] { 1 })));
            var src    = new DataAndLayout <bool>(srcData, new FastAccess(new Layout(new int[] { 4 }, 0, new int[] { 1 })));

            // action
            ScalarOps.CountTrueLastAxis(target, src);

            // assert
            Assert.AreEqual(2, targetData[0]);
        }
Esempio n. 17
0
        public void FillIncrementing()
        {
            // arrange
            const int BufferSize = 10;
            var       data       = new int[BufferSize];
            var       target     = new DataAndLayout <int>(data, new FastAccess(new Layout(new int[] { BufferSize }, 0, new int[] { 1 })));

            // action
            ScalarOps.FillIncrementing(0, 2, target);

            // assert
            var expecedData = Enumerable.Range(0, BufferSize).Select(n => n * 2).ToArray();

            Assert.IsTrue(Enumerable.SequenceEqual(expecedData, data));
        }
Esempio n. 18
0
        public void Fill_Vector1D()
        {
            // arrange
            const int BufferSize = 10;
            var       data       = new int[BufferSize];
            var       target     = new DataAndLayout <int>(data, new FastAccess(new Layout(new int[] { BufferSize }, 0, new int[] { 1 })));

            const int FillPattern = 999;

            // action
            ScalarOps.Fill(FillPattern, target);

            // assert
            Assert.IsTrue(data.All(d => d == FillPattern));
        }
Esempio n. 19
0
        public void AnyLastAxis_NotAllFalse()
        {
            // arrange
            const int NumElements = 4;
            var       targetData  = new bool[NumElements];
            var       srcData     = new[] { false, false, true, true };

            var target = new DataAndLayout <bool>(targetData, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));
            var src    = new DataAndLayout <bool>(srcData, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));

            // action
            ScalarOps.AnyLastAxis(target, src);

            // assert
            CollectionAssert.AreEqual(new[] { true, false, false, false }, targetData);
        }
Esempio n. 20
0
        public void ProductLastAxis()
        {
            // arrange
            const int NumElements = 6;
            var       targetData  = new double[NumElements];
            var       srcData     = new[] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };

            var target = new DataAndLayout <double>(targetData, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));
            var src    = new DataAndLayout <double>(srcData, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));

            // action
            ScalarOps.ProductLastAxis(target, src);

            // assert
            Assert.AreEqual(720.0, targetData[0]);
        }
Esempio n. 21
0
        public void MinLastAxis()
        {
            // arrange
            const int NumElements = 6;
            var       targetData  = new double[NumElements];
            var       srcData     = new[] { -1.0, -0.6, -0.2, 0.2, 0.6, 1.0 };

            var target = new DataAndLayout <double>(targetData, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));
            var src    = new DataAndLayout <double>(srcData, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));

            // action
            ScalarOps.MinLastAxis(target, src);

            // assert
            Assert.AreEqual(-1, targetData[0]);
        }
Esempio n. 22
0
        public void Truncate()
        {
            // arrange
            const int NumElements = 6;
            var       targetData  = new double[NumElements];
            var       srcData     = new[] { -1.0, -0.6, -0.2, 0.2, 0.6, 1.0 };

            var target = new DataAndLayout <double>(targetData, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));
            var src    = new DataAndLayout <double>(srcData, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));

            // action
            ScalarOps.Truncate(target, src);

            // assert
            CollectionAssert.AreEqual(new[] { -1.0, 0.0, 0.0, 0.0, 0.0, 1.0 }, targetData);
        }
Esempio n. 23
0
        public void Sqrt()
        {
            // arrange
            const int NumElements = 3;
            var       targetData  = new double[NumElements];
            var       srcData     = new[] { 1.0, 4.0, 16.0 };

            var target = new DataAndLayout <double>(targetData, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));
            var src    = new DataAndLayout <double>(srcData, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));

            // action
            ScalarOps.Sqrt(target, src);

            // assert
            CollectionAssert.AreEqual(new[] { 1.0, 2.0, 4.0 }, targetData);
        }
Esempio n. 24
0
        public void Convert()
        {
            // arrange
            var targetData = new double[4];
            var srcData    = new[] { 4, 2, 7, 1 };

            var target = new DataAndLayout <double>(targetData, new FastAccess(new Layout(new int[] { 4 }, 0, new int[] { 1 })));
            var source = new DataAndLayout <int>(srcData, new FastAccess(new Layout(new int[] { 4 }, 0, new int[] { 1 })));

            // action
            ScalarOps.Convert(target, source);

            // assert
            Assert.IsInstanceOfType(targetData, typeof(double[]));
            CollectionAssert.AreEqual(new[] { 4.0, 2.0, 7.0, 1.0 }, targetData);
        }
Esempio n. 25
0
        public void Copy_Vector2D()
        {
            // arrange
            const int BufferSize = 24;
            var       targetData = new int[BufferSize];
            var       srcData    = Enumerable.Range(0, BufferSize).ToArray();

            var target = new DataAndLayout <int>(targetData, new FastAccess(new Layout(new int[] { 2, 3, 4 }, 0, new int[] { 12, 4, 1 })));
            var src    = new DataAndLayout <int>(srcData, new FastAccess(new Layout(new int[] { 2, 3, 4 }, 0, new int[] { 12, 4, 1 })));

            // action
            ScalarOps.Copy(target, src);

            // assert
            Assert.IsTrue(Enumerable.SequenceEqual(targetData, srcData));
        }
Esempio n. 26
0
        public void Abs()
        {
            // arrange
            var bufferSize = 10;
            var targetData = new int[bufferSize];
            var srcData    = Enumerable.Range(-1 * bufferSize / 2, bufferSize).ToArray();

            var target = new DataAndLayout <int>(targetData, new FastAccess(new Layout(new int[] { bufferSize }, 0, new int[] { 1 })));
            var src    = new DataAndLayout <int>(srcData, new FastAccess(new Layout(new int[] { bufferSize }, 0, new int[] { 1 })));

            // action
            ScalarOps.Abs(target, src);

            // assert
            var allPositive = target.Data.All(v => v >= 0);

            Assert.IsTrue(allPositive);
        }
Esempio n. 27
0
        public void Xor()
        {
            // arrange
            const int NumElements = 4;
            var       targetData  = new bool[NumElements];
            var       src1Data    = new[] { false, false, true, true };
            var       src2Data    = new[] { false, true, false, true };

            var target = new DataAndLayout <bool>(targetData, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));
            var src1   = new DataAndLayout <bool>(src1Data, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));
            var src2   = new DataAndLayout <bool>(src2Data, new FastAccess(new Layout(new int[] { NumElements }, 0, new int[] { 1 })));

            // action
            ScalarOps.Xor(target, src1, src2);

            // assert
            CollectionAssert.AreEqual(new[] { false, true, true, false }, targetData);
        }
Esempio n. 28
0
        public void Fill()
        {
            // arrange
            var vectorCount = Vector <int> .Count;

            // Itentionally break the alignment for the Vector operation to test more code.
            var bufferSize = 10 + (vectorCount / 2);
            var data       = new int[bufferSize];
            var target     = new DataAndLayout <int>(data, new FastAccess(new Layout(new int[] { bufferSize }, 0, new int[] { 1 })));

            const int FillPattern = 999;

            // action
            VectorOps.Fill(FillPattern, target);

            // assert
            Assert.IsTrue(data.All(d => d == FillPattern));
        }
Esempio n. 29
0
        public void Copy_Scalar()
        {
            // arrange
            var targetData = new int[1];
            var srcData    = new int[1];

            var       target      = new DataAndLayout <int>(targetData, new FastAccess(new Layout(new int[] { }, 0, new int[] { })));
            var       src         = new DataAndLayout <int>(srcData, new FastAccess(new Layout(new int[] { }, 0, new int[] { })));
            const int CopyPattern = 999;

            srcData[0] = CopyPattern;

            // action
            ScalarOps.Copy(target, src);

            // assert
            Assert.AreEqual(CopyPattern, targetData[0]);
        }
Esempio n. 30
0
        public void Atan()
        {
            // arrange
            var targetData = new double[3];
            var srcData    = new double[] { -1.0, 0, 1.0 };

            var target = new DataAndLayout <double>(targetData, new FastAccess(new Layout(new int[] { 3 }, 0, new int[] { 1 })));
            var src    = new DataAndLayout <double>(srcData, new FastAccess(new Layout(new int[] { 3 }, 0, new int[] { 1 })));

            // action
            ScalarOps.Atan(target, src);

            // assert
            const double Epsilon = 1e-8;

            Assert.IsTrue(Math.Abs(targetData[0] - (-Math.PI / 4.0)) < Epsilon);
            Assert.IsTrue(Math.Abs(targetData[1] - 0.0) < Epsilon);
            Assert.IsTrue(Math.Abs(targetData[2] - (Math.PI / 4.0)) < Epsilon);
        }