Exemple #1
0
        public static void RunTests_InvalidValues()
        {
            double realRandom      = Support.GetRandomDoubleValue(false);
            double imaginaryRandom = Support.GetRandomDoubleValue(false);

            // Complex number with a valid real and an invalid imaginary part
            foreach (double imaginaryInvalid in Support.doubleInvalidValues)
            {
                VerifyBinaryAbs(realRandom, imaginaryInvalid, Math.Abs(imaginaryInvalid));
            }

            // Complex number with an invalid real and an a real imaginary part
            foreach (double realInvalid in Support.doubleInvalidValues)
            {
                VerifyBinaryAbs(realInvalid, realRandom, Math.Abs(realInvalid));
            }

            // Complex number with an invalid real and an invalid imaginary part
            foreach (double realInvalid in Support.doubleInvalidValues)
            {
                foreach (double imaginaryInvalid in Support.doubleInvalidValues)
                {
                    VerifyBinaryAbs(realInvalid, imaginaryInvalid, (double.IsInfinity(realInvalid) || double.IsInfinity(imaginaryInvalid)) ? double.PositiveInfinity : double.NaN);
                }
            }

            //Regression test case for issue: Complex.Abs() is inconsistent on NaN / Complex.
            VerifyBinaryAbs(double.NaN, 0, double.NaN);
        }
Exemple #2
0
        public static void RunTests_InvalidValues()
        {
            double realRandom      = Support.GetRandomDoubleValue(false);
            double imaginaryRandom = Support.GetRandomDoubleValue(false);

            // Complex number with a valid positive/negative real and an invalid imaginary part
            foreach (double imaginaryInvalid in Support.doubleInvalidValues)
            {
                VerifyCtor(realRandom, imaginaryInvalid);
                VerifyCtor(-realRandom, imaginaryInvalid);
            }

            // Complex number with an invalid real and an a positive/negative imaginary part
            foreach (double realInvalid in Support.doubleInvalidValues)
            {
                VerifyCtor(realInvalid, imaginaryRandom);
                VerifyCtor(realInvalid, -imaginaryRandom);
            }

            // Complex number with an invalid real and an invalid imaginary part
            foreach (double realInvalid in Support.doubleInvalidValues)
            {
                foreach (double imaginaryInvalid in Support.doubleInvalidValues)
                {
                    VerifyCtor(realInvalid, imaginaryInvalid);
                }
            }
        }
        public static void RunTests_Zero()
        {
            double real      = Support.GetRandomDoubleValue(false);
            double imaginary = Support.GetRandomDoubleValue(false);

            VerifyBinaryPlusResult(0.0, 0.0, real, imaginary); // Verify 0+x=0
            VerifyBinaryPlusResult(real, imaginary, 0.0, 0.0); // Verify 0+x=0
        }
Exemple #4
0
        public static void RunTests_RandomValidValues()
        {
            // Verify test results with ComplexInFirstQuad
            double  real         = Support.GetRandomDoubleValue(false);
            double  imaginary    = Support.GetRandomDoubleValue(false);
            Complex complexFirst = new Complex(real, imaginary);

            VerifyToString(complexFirst);

            // Verify test results with Small_ComplexInFirstQuad
            real      = Support.GetSmallRandomDoubleValue(false);
            imaginary = Support.GetSmallRandomDoubleValue(false);
            Complex complexFirstSmall = new Complex(real, imaginary);

            VerifyToString(complexFirstSmall);

            // Verify test results with ComplexInSecondQuad
            real      = Support.GetRandomDoubleValue(true);
            imaginary = Support.GetRandomDoubleValue(false);
            Complex complexSecond = new Complex(real, imaginary);

            VerifyToString(complexSecond);

            // Verify test results with Small_ComplexInSecondQuad
            real      = Support.GetSmallRandomDoubleValue(true);
            imaginary = Support.GetSmallRandomDoubleValue(false);
            Complex complexSecondSmall = new Complex(real, imaginary);

            VerifyToString(complexSecondSmall);

            // Verify test results with ComplexInThirdQuad
            real      = Support.GetRandomDoubleValue(true);
            imaginary = Support.GetRandomDoubleValue(true);
            Complex complexThird = new Complex(real, imaginary);

            VerifyToString(complexThird);

            // Verify test results with Small_ComplexInThirdQuad
            real      = Support.GetSmallRandomDoubleValue(true);
            imaginary = Support.GetSmallRandomDoubleValue(true);
            Complex complexThirdSmall = new Complex(real, imaginary);

            VerifyToString(complexThirdSmall);

            // Verify test results with ComplexInFourthQuad
            real      = Support.GetRandomDoubleValue(false);
            imaginary = Support.GetRandomDoubleValue(true);
            Complex complexFourth = new Complex(real, imaginary);

            VerifyToString(complexFourth);

            // Verify test results with Small_ComplexInFourthQuad
            real      = Support.GetSmallRandomDoubleValue(false);
            imaginary = Support.GetSmallRandomDoubleValue(true);
            Complex complexFourthSmall = new Complex(real, imaginary);

            VerifyToString(complexFourthSmall);
        }
Exemple #5
0
        public static void RunTests_InvalidValues()
        {
            // local variables
            Double realRandom;
            Double imaginaryRandom;

            // Complex number with a valid positive real and an invalid imaginary part
            foreach (double imaginaryInvalid in Support.doubleInvalidValues)
            {
                realRandom = Support.GetRandomDoubleValue(false);
                Complex c = new Complex(realRandom, imaginaryInvalid);
                VerifyToString(c);
            }

            // Complex number with a valid negative real and an invalid imaginary part
            foreach (double imaginaryInvalid in Support.doubleInvalidValues)
            {
                realRandom = Support.GetRandomDoubleValue(true);
                Complex c = new Complex(realRandom, imaginaryInvalid);
                VerifyToString(c);
            }

            // Complex number with an invalid real and an a positive imaginary part
            foreach (double realInvalid in Support.doubleInvalidValues)
            {
                imaginaryRandom = Support.GetRandomDoubleValue(false);
                Complex c = new Complex(realInvalid, imaginaryRandom);
                VerifyToString(c);
            }

            // Complex number with an invalid real and a negative imaginary part
            foreach (double realInvalid in Support.doubleInvalidValues)
            {
                imaginaryRandom = Support.GetRandomDoubleValue(true);
                Complex c = new Complex(realInvalid, imaginaryRandom);
                VerifyToString(c);
            }

            // Complex number with an invalid real and an invalid imaginary part
            foreach (double realInvalid in Support.doubleInvalidValues)
            {
                foreach (double imaginaryInvalid in Support.doubleInvalidValues)
                {
                    imaginaryRandom = Support.GetRandomDoubleValue(true);
                    Complex c = new Complex(realInvalid, imaginaryInvalid);
                    VerifyToString(c);
                }
            }
        }
        public static void RunTests_BoundaryValues()
        {
            // local variables
            Double real;
            Double img;

            // test with 'Max' - (Positive, Positive)
            real = Support.GetRandomDoubleValue(false);
            img  = Support.GetRandomDoubleValue(false);
            VerifyBinaryMinusResult(Double.MaxValue, Double.MaxValue, real, img);

            // test with (Positive, Positive) - 'Max'
            real = Support.GetRandomDoubleValue(false);
            img  = Support.GetRandomDoubleValue(false);
            VerifyBinaryMinusResult(real, img, Double.MaxValue, Double.MaxValue);

            // test with 'Max' - (Negative, Negative)
            real = Support.GetRandomDoubleValue(true);
            img  = Support.GetRandomDoubleValue(true);
            VerifyBinaryMinusResult(Double.MaxValue, Double.MaxValue, real, img);

            // test with (Negative, Negative) - 'Max'
            real = Support.GetRandomDoubleValue(true);
            img  = Support.GetRandomDoubleValue(true);
            VerifyBinaryMinusResult(real, img, Double.MaxValue, Double.MaxValue);

            // test with 'Min' - (Positive, Positive)
            real = Support.GetRandomDoubleValue(false);
            img  = Support.GetRandomDoubleValue(false);
            VerifyBinaryMinusResult(Double.MinValue, Double.MinValue, real, img);

            // test with (Positive, Positive) - 'Min'
            real = Support.GetRandomDoubleValue(false);
            img  = Support.GetRandomDoubleValue(false);
            VerifyBinaryMinusResult(real, img, Double.MinValue, Double.MinValue);

            // test with 'Min' - (Negative, Negative)
            real = Support.GetRandomDoubleValue(true);
            img  = Support.GetRandomDoubleValue(true);
            VerifyBinaryMinusResult(Double.MinValue, Double.MinValue, real, img);

            // test with (Negative, Negative) - 'Min'
            real = Support.GetRandomDoubleValue(true);
            img  = Support.GetRandomDoubleValue(true);
            VerifyBinaryMinusResult(real, img, Double.MinValue, Double.MinValue);
        }
        public static void RunTests_InvalidRealValues()
        {
            // local variables
            Double realFirst;
            Double imgFirst;
            Double realSecond;
            Double imgSecond;

            // Verify with (PositiveInfinity, valid) * (PositiveValid, valid)
            realFirst  = Double.PositiveInfinity;
            imgFirst   = Support.GetRandomDoubleValue(false);
            realSecond = Support.GetRandomDoubleValue(false);
            imgSecond  = Support.GetRandomDoubleValue(false);
            VerifyBinaryMultiplyResult(realFirst, imgFirst, realSecond, imgSecond);

            // Verify with (PositiveInfinity, valid) * (NegativeValid, valid)
            realFirst  = Double.PositiveInfinity;
            imgFirst   = Support.GetRandomDoubleValue(false);
            realSecond = Support.GetRandomDoubleValue(true);
            imgSecond  = Support.GetRandomDoubleValue(false);
            VerifyBinaryMultiplyResult(realFirst, imgFirst, realSecond, imgSecond);

            // Verify with (NegativeInfinity, valid) * (PositiveValid, valid)
            realFirst  = Double.NegativeInfinity;
            imgFirst   = Support.GetRandomDoubleValue(false);
            realSecond = Support.GetRandomDoubleValue(false);
            imgSecond  = Support.GetRandomDoubleValue(false);
            VerifyBinaryMultiplyResult(realFirst, imgFirst, realSecond, imgSecond);

            // Verify with (NegativeInfinity, valid) * (NegativeValid, valid)
            realFirst  = Double.NegativeInfinity;
            imgFirst   = Support.GetRandomDoubleValue(false);
            realSecond = Support.GetRandomDoubleValue(true);
            imgSecond  = Support.GetRandomDoubleValue(false);
            VerifyBinaryMultiplyResult(realFirst, imgFirst, realSecond, imgSecond);

            // Verify with (NaN, valid) * (valid, valid)
            realFirst  = Double.NaN;
            imgFirst   = Support.GetRandomDoubleValue(false);
            realSecond = Support.GetRandomDoubleValue(false);
            imgSecond  = Support.GetRandomDoubleValue(false);
            VerifyBinaryMultiplyResult(realFirst, imgFirst, realSecond, imgSecond);
        }
        public static void RunTests_RandomValidValues()
        {
            // Verify test results with ComlexInFirstQuad
            Double real      = Support.GetRandomDoubleValue(false);
            Double imaginary = Support.GetRandomDoubleValue(false);

            VerifyConjugate(real, imaginary);

            // Verify test results with Small_ComlexInFirstQuad
            real      = Support.GetSmallRandomDoubleValue(false);
            imaginary = Support.GetSmallRandomDoubleValue(false);
            VerifyConjugate(real, imaginary);

            // Verify test results with ComplexInSecondQuad
            real      = Support.GetRandomDoubleValue(true);
            imaginary = Support.GetRandomDoubleValue(false);
            VerifyConjugate(real, imaginary);

            // Verify test results with Small_ComplexInSecondQuad
            real      = Support.GetSmallRandomDoubleValue(true);
            imaginary = Support.GetSmallRandomDoubleValue(false);
            VerifyConjugate(real, imaginary);

            // Verify test results with ComplexInThirdQuad
            real      = Support.GetRandomDoubleValue(true);
            imaginary = Support.GetRandomDoubleValue(true);
            VerifyConjugate(real, imaginary);

            // Verify test results with Small_ComplexInThirdQuad
            real      = Support.GetSmallRandomDoubleValue(true);
            imaginary = Support.GetSmallRandomDoubleValue(true);
            VerifyConjugate(real, imaginary);

            // Verify test results with ComplexInFourthQuad
            real      = Support.GetRandomDoubleValue(true);
            imaginary = Support.GetRandomDoubleValue(true);
            VerifyConjugate(real, imaginary);

            // Verify test results with Small_ComplexInFourthQuad
            real      = Support.GetSmallRandomDoubleValue(true);
            imaginary = Support.GetSmallRandomDoubleValue(true);
            VerifyConjugate(real, imaginary);
        }
        public static void RunTests_InvalidImaginaryValues()
        {
            // local variables
            Double realFirst;
            Double imgFirst;
            Double realSecond;
            Double imgSecond;

            // Verify with (valid, PositiveInfinity) + (valid, PositiveValid)
            realFirst  = Support.GetRandomDoubleValue(false);
            imgFirst   = Double.PositiveInfinity;
            realSecond = Support.GetRandomDoubleValue(false);
            imgSecond  = Support.GetRandomDoubleValue(false);
            VerifyBinaryPlusResult(realFirst, imgFirst, realSecond, imgSecond);

            // Verify with (valid, PositiveInfinity) + (valid, NegativeValid)
            realFirst  = Support.GetRandomDoubleValue(false);
            imgFirst   = Double.PositiveInfinity;
            realSecond = Support.GetRandomDoubleValue(false);
            imgSecond  = Support.GetRandomDoubleValue(true);
            VerifyBinaryPlusResult(realFirst, imgFirst, realSecond, imgSecond);

            // Verify with (valid, NegativeInfinity) + (valid, PositiveValid)
            realFirst  = Support.GetRandomDoubleValue(false);
            imgFirst   = Double.NegativeInfinity;
            realSecond = Support.GetRandomDoubleValue(false);
            imgSecond  = Support.GetRandomDoubleValue(false);
            VerifyBinaryPlusResult(realFirst, imgFirst, realSecond, imgSecond);

            // Verify with (valid, NegativeInfinity) + (valid, NegativeValid)
            realFirst  = Support.GetRandomDoubleValue(false);
            imgFirst   = Double.NegativeInfinity;
            realSecond = Support.GetRandomDoubleValue(false);
            imgSecond  = Support.GetRandomDoubleValue(true);
            VerifyBinaryPlusResult(realFirst, imgFirst, realSecond, imgSecond);

            // Verify with (valid, NaN) + (valid, Valid)
            realFirst  = Support.GetRandomDoubleValue(false);
            imgFirst   = Double.NaN;
            realSecond = Support.GetRandomDoubleValue(false);
            imgSecond  = Support.GetRandomDoubleValue(false);
            VerifyBinaryPlusResult(realFirst, imgFirst, realSecond, imgSecond);
        }
        private static void VerifyLogWithBase(Complex complex)
        {
            Double baseValue = 0.0;
            Double baseLog;

            // verify with Random Int32
            do
            {
                baseValue = Support.GetRandomInt32Value(false);
            }while (0 == baseValue);

            Complex logValue = Complex.Log(complex, baseValue);

            Complex logComplex = Complex.Log(complex);

            baseLog = Math.Log(baseValue);
            Complex expectedLog = logComplex / baseLog;

            if (false == Support.VerifyRealImaginaryProperties(logValue, expectedLog.Real, expectedLog.Imaginary))
            {
                Console.WriteLine("Error LogBase-ErrLoG01571! Log({0}, {1}):{2} != {3} as expected", complex, baseValue, logValue, expectedLog);
                Assert.True(false, "Verification Failed");
            }

            // Verify with Random Double value

            baseValue = 0.0;
            do
            {
                baseValue = Support.GetRandomDoubleValue(false);
            }while (0.0 == baseValue);

            logValue    = Complex.Log(complex, baseValue);
            logComplex  = Complex.Log(complex);
            baseLog     = Math.Log(baseValue);
            expectedLog = logComplex / baseLog;

            if (!Support.VerifyRealImaginaryProperties(logValue, expectedLog.Real, expectedLog.Imaginary))
            {
                Console.WriteLine("Error LogBaseDbL-ErrLoG1598! Log({0}, {1}):{2} != {3} as expected", complex, baseValue, logValue, expectedLog);
                Assert.True(false, "Verification Failed");
            }
        }
        public static void RunTests_DoubleImplicitCastToComplex()
        {
            VerifyDoubleImplicitCastToComplex(Double.MinValue);

            for (int i = 0; i < Support.RandomSampleCount; ++i)
            {
                Double randomValue = Support.GetRandomDoubleValue(false);
                VerifyDoubleImplicitCastToComplex(randomValue);
            }

            VerifyDoubleImplicitCastToComplex(0);
            VerifyDoubleImplicitCastToComplex(1);

            for (int i = 0; i < Support.RandomSampleCount; ++i)
            {
                Double randomValue = Support.GetRandomDoubleValue(true);
                VerifyDoubleImplicitCastToComplex(randomValue);
            }

            VerifyDoubleImplicitCastToComplex(Double.MaxValue);
        }
Exemple #12
0
        private static void VerifyLogWithBase(Complex complex)
        {
            double baseValue = 0.0;
            double baseLog;

            // Verify with Random Int32
            do
            {
                baseValue = Support.GetRandomInt32Value(false);
            }while (0 == baseValue);

            Complex logValue = Complex.Log(complex, baseValue);

            Complex logComplex = Complex.Log(complex);

            baseLog = Math.Log(baseValue);
            Complex expectedLog = logComplex / baseLog;

            Support.VerifyRealImaginaryProperties(logValue, expectedLog.Real, expectedLog.Imaginary,
                                                  string.Format("Log({0}, {1}):{2} != {3} as expected", complex, baseValue, logValue, expectedLog));

            // Verify with Random double value
            baseValue = 0.0;
            do
            {
                baseValue = Support.GetRandomDoubleValue(false);
            }while (0.0 == baseValue);

            logValue    = Complex.Log(complex, baseValue);
            logComplex  = Complex.Log(complex);
            baseLog     = Math.Log(baseValue);
            expectedLog = logComplex / baseLog;

            Support.VerifyRealImaginaryProperties(logValue, expectedLog.Real, expectedLog.Imaginary,
                                                  string.Format("Log({0}, {1}):{2} != {3} as expected", complex, baseValue, logValue, expectedLog));
        }
Exemple #13
0
        public static void RunTests_ImaginaryOne()
        {
            // Verify real part is 0.0, and imaginary part is 1.0

            if (false == Support.VerifyRealImaginaryProperties(Complex.ImaginaryOne, 0.0, 1.0))
            {
                Console.WriteLine("ErRoR ErrImaginaryOne_2563-1! Verify real part is 0.0, and imaginary part is 1.0");
                Assert.True(false, "Verification Failed");
            }

            // verify magnitude is 1.0 and phase is Math.PI/2.

            if (false == Support.VerifyMagnitudePhaseProperties(Complex.ImaginaryOne, 1.0, (Double)(Math.PI / 2)))
            {
                Console.WriteLine("ErRoR ErrImaginaryOne_2567-1! verify magnitude is 1.0 and phase is Math.PI/2.");
                Assert.True(false, "Verification Failed");
            }

            // verify ImaginaryOne * ImaginaryOne = -1

            Complex multResultImgOnes = Complex.ImaginaryOne * Complex.ImaginaryOne;

            if (-1 != multResultImgOnes)
            {
                Console.WriteLine("ErRoR ErrImaginaryOne_2973-1! Multiplication of ImaginaryOnes is not -1", multResultImgOnes);
                Assert.True(false, "Verification Failed");
            }

            // verify ImaginaryOne / ImaginaryOne = 1

            Complex divResultImgOnes = Complex.ImaginaryOne / Complex.ImaginaryOne;

            if (1 != divResultImgOnes)
            {
                Console.WriteLine("ErRoR ErrImaginaryOne_2978-1! Division of ImaginaryOnes is not 1", divResultImgOnes);
                Assert.True(false, "Verification Failed");
            }

            // verify ImaginaryOne / ImaginaryOne = 1

            Double absResult = Complex.Abs(Complex.ImaginaryOne);

            if (1 != absResult)
            {
                Console.WriteLine("ErRoR ErrImaginaryOne_2981-1! Abs of ImaginaryOne is not 1", absResult);
                Assert.True(false, "Verification Failed");
            }

            // verify Conjugate(1) = 1

            Complex conjugateResult = Complex.Conjugate(Complex.ImaginaryOne);

            if (-Complex.ImaginaryOne != conjugateResult)
            {
                Console.WriteLine("ErRoR ErrImaginaryOne_2983-1! Conjugate of ImaginaryOne is not 1", conjugateResult);
                Assert.True(false, "Verification Failed");
            }

            // verify Reciprocal(1) = 1

            Complex reciprocalResult = Complex.Reciprocal(Complex.ImaginaryOne);

            if (-Complex.ImaginaryOne != reciprocalResult)
            {
                Console.WriteLine("ErRoR ErrImaginaryOne_2986-1! Reciprocal of ImaginaryOne is not 1", reciprocalResult);
                Assert.True(false, "Verification Failed");
            }

            // create a complex number with random real and imaginary parts
            Double  realPart      = Support.GetRandomDoubleValue(false);
            Double  imaginaryPart = Support.GetRandomDoubleValue(false);
            Complex complexRandom = new Complex(realPart, imaginaryPart);

            // verify x*i = Complex(-x.Imaginary, x.Real)

            Complex multResult = complexRandom * Complex.ImaginaryOne;

            if (false == Support.VerifyRealImaginaryProperties(multResult, -complexRandom.Imaginary, complexRandom.Real))
            {
                Console.WriteLine("FAiL! ErRoR ErrImaginaryOne_2718-1! Mult with i does not equal to ({0}, {1}): {2}", -complexRandom.Imaginary, complexRandom.Real, multResult);
                Assert.True(false, "Verification Failed");
            }

            // verify x/i = Complex(x.Imaginary, -x.Real)

            Complex divResult = complexRandom / Complex.ImaginaryOne;

            if (false == Support.VerifyRealImaginaryProperties(divResult, complexRandom.Imaginary, -complexRandom.Real))
            {
                Console.WriteLine("FAiL! ErRoR ErrImaginaryOne_2738-1! Div by i does not equal to ({0}, {1}): {2}", complexRandom.Imaginary, -complexRandom.Real, divResult);
                Assert.True(false, "Verification Failed");
            }
        }