コード例 #1
0
ファイル: CBORNumberTest.cs プロジェクト: jimsch/CBOR
        public void TestMultiply()
        {
            try {
                ToCN(2).Multiply(null);
                Assert.Fail("Should have failed");
            } catch (ArgumentNullException) {
                // NOTE: Intentionally empty
            } catch (Exception ex) {
                Assert.Fail(ex.ToString());
                throw new InvalidOperationException(String.Empty, ex);
            }
            var r = new RandomGenerator();

            for (var i = 0; i < 3000; ++i)
            {
                CBORObject o1         = CBORTestCommon.RandomNumber(r);
                CBORObject o2         = CBORTestCommon.RandomNumber(r);
                EDecimal   cmpDecFrac = AsED(o1).Multiply(AsED(o2));
                EDecimal   cmpCobj    = ToCN(o1).Multiply(ToCN(o2)).ToEDecimal();
                if (!cmpDecFrac.Equals(cmpCobj))
                {
                    TestCommon.CompareTestEqual(
                        cmpDecFrac,
                        cmpCobj,
                        o1.ToString() + "\n" + o2.ToString());
                }
                CBORTestCommon.AssertRoundTrip(o1);
                CBORTestCommon.AssertRoundTrip(o2);
            }
        }
コード例 #2
0
ファイル: CBORNumberTest.cs プロジェクト: jimsch/CBOR
 public void TestAbs()
 {
     TestCommon.CompareTestEqual(
         ToCN(2),
         ToCN(-2).Abs());
     TestCommon.CompareTestEqual(
         ToCN(2),
         ToCN(2).Abs());
     TestCommon.CompareTestEqual(
         ToCN(2.5),
         ToCN(-2.5).Abs());
     {
         CBORNumber objectTemp  = ToCN(EDecimal.FromString("6.63"));
         CBORNumber objectTemp2 = ToCN(EDecimal.FromString(
                                           "-6.63")).Abs();
         TestCommon.CompareTestEqual(objectTemp, objectTemp2);
     }
     {
         CBORNumber objectTemp  = ToCN(EFloat.FromString("2.75"));
         CBORNumber objectTemp2 = ToCN(EFloat.FromString("-2.75")).Abs();
         TestCommon.CompareTestEqual(objectTemp, objectTemp2);
     }
     {
         CBORNumber objectTemp  = ToCN(ERational.FromDouble(2.5));
         CBORNumber objectTemp2 = ToCN(ERational.FromDouble(-2.5)).Abs();
         TestCommon.CompareTestEqual(objectTemp, objectTemp2);
     }
 }
コード例 #3
0
ファイル: CBORTestCommon.cs プロジェクト: ewertons/CBOR
        public static void AssertRoundTrip(CBORObject o)
        {
            CBORObject o2 = FromBytesTestAB(CheckEncodeToBytes(o));

            TestCommon.CompareTestEqual(o, o2);
            TestNumber(o);
            TestCommon.AssertEqualsHashCode(o, o2);
        }
コード例 #4
0
        public void TestCompareTo()
        {
            var r = new RandomGenerator();

            for (var i = 0; i < 500; ++i)
            {
                ERational bigintA = RandomObjects.RandomERational(r);
                ERational bigintB = RandomObjects.RandomERational(r);
                ERational bigintC = RandomObjects.RandomERational(r);
                TestCommon.CompareTestRelations(bigintA, bigintB, bigintC);
            }
            TestCommon.CompareTestLess(ERational.Zero, ERational.NaN);
            ERational rat, rat2;

            for (var i = 0; i < 100; ++i)
            {
                EInteger num = RandomObjects.RandomEInteger(r);
                if (num.IsZero)
                {
                    // Skip if number is 0; 0/1 and 0/2 are
                    // equal in that case
                    continue;
                }
                num  = num.Abs();
                rat  = ERational.Create(num, EInteger.One);
                rat2 = ERational.Create(num, (EInteger)2);
                TestCommon.CompareTestLess(rat2, rat);
                TestCommon.CompareTestGreater(rat, rat2);
            }
            TestCommon.CompareTestLess(
                ERational.Create(EInteger.One, (EInteger)2),
                ERational.Create((EInteger)4, EInteger.One));
            for (var i = 0; i < 100; ++i)
            {
                EInteger num = RandomObjects.RandomEInteger(r);
                EInteger den = RandomObjects.RandomEInteger(r);
                if (den.IsZero)
                {
                    den = EInteger.One;
                }
                rat = ERational.Create(num, den);
                for (int j = 0; j < 10; ++j)
                {
                    EInteger num2 = num;
                    EInteger den2 = den;
                    EInteger mult = RandomObjects.RandomEInteger(r);
                    if (mult.IsZero || mult.Equals(EInteger.One))
                    {
                        mult = (EInteger)2;
                    }
                    num2 *= (EInteger)mult;
                    den2 *= (EInteger)mult;
                    rat2  = ERational.Create(num2, den2);
                    TestCommon.CompareTestEqual(rat, rat2);
                }
            }
        }
コード例 #5
0
        public void TestParseJSONNumber()
        {
            foreach (var str in BadJsonNumbers)
            {
                if (CBORDataUtilities.ParseJSONNumber(str) != null)
                {
                    Assert.Fail(str);
                }
                if (CBORDataUtilities.ParseJSONNumber(str, false, false, true) !=
                    null)
                {
                    Assert.Fail(str);
                }
                if (CBORDataUtilities.ParseJSONNumber(str, false, false, false) !=
                    null)
                {
                    Assert.Fail(str);
                }
            }
            CBORObject cbor = CBORDataUtilities.ParseJSONNumber("2e-2147483648");

            CBORTestCommon.AssertJSONSer(cbor, "2E-2147483648");
            foreach (var str in GoodJsonNumbers)
            {
                if (CBORDataUtilities.ParseJSONNumber(str) == null)
                {
                    Assert.Fail(str);
                }
                if (CBORDataUtilities.ParseJSONNumber(str, false, false, true) ==
                    null)
                {
                    Assert.Fail(str);
                }
                if (CBORDataUtilities.ParseJSONNumber(str, false, false, false) ==
                    null)
                {
                    Assert.Fail(str);
                }
            }
            TestCommon.CompareTestEqual(
                ToObjectTest.TestToFromObjectRoundTrip(230).AsNumber(),
                CBORDataUtilities.ParseJSONNumber("23.0e01").AsNumber());
            TestCommon.CompareTestEqual(
                ToObjectTest.TestToFromObjectRoundTrip(23).AsNumber(),
                CBORDataUtilities.ParseJSONNumber("23.0e00").AsNumber());
            cbor = CBORDataUtilities.ParseJSONNumber(
                "1e+99999999999999999999999999");
            Assert.IsTrue(cbor != null);
            Assert.IsFalse(cbor.AsNumber().CanFitInDouble());
            CBORTestCommon.AssertRoundTrip(cbor);
        }
コード例 #6
0
ファイル: CBORSupplementTest.cs プロジェクト: NauhcNoohc/CBOR
        public void TestEquivalentInfinities()
        {
            CBORObject co, co2;

            co  = CBORObject.FromObject(CBORTestCommon.DecPosInf);
            co2 = CBORObject.FromObject(Double.PositiveInfinity);
            TestCommon.CompareTestEqual(co, co2);
            co = CBORObject.NewMap().Add(
                CBORTestCommon.DecPosInf,
                CBORObject.Undefined);
            co2 = CBORObject.NewMap().Add(
                Double.PositiveInfinity,
                CBORObject.Undefined);
            TestCommon.CompareTestEqual(co, co2);
        }
コード例 #7
0
ファイル: DecimalTest.cs プロジェクト: NZSmartie/Numbers
        public void TestDecimal()
        {
            var fr = new RandomGenerator();

            for (var i = 0; i < 1000; ++i)
            {
                decimal  d  = RandomDecimal(fr);
                EDecimal ed = d;
                TestCommon.CompareTestEqual(d, (decimal)ed, ed.ToString());
                EDecimal ed2 =

                    EDecimal.FromString(d.ToString(System.Globalization.CultureInfo.InvariantCulture));
                TestCommon.CompareTestEqual(ed, ed2);
            }
        }
コード例 #8
0
ファイル: DecimalTest.cs プロジェクト: NZSmartie/Numbers
        public void TestDecimalString()
        {
            var fr = new RandomGenerator();

            for (var i = 0; i < 1000; ++i)
            {
                EDecimal ed = RandomObjects.RandomEDecimal(fr);
                if (!ed.IsFinite)
                {
                    continue;
                }
                decimal d;
                try {
                    System.Globalization.NumberStyles numstyles =
                        System.Globalization.NumberStyles.AllowExponent |
                        System.Globalization.NumberStyles.Number;
                    d = Decimal.Parse(
                        ed.ToString(),
                        numstyles,
                        System.Globalization.CultureInfo.InvariantCulture);
                    EDecimal ed3 = EDecimal.FromString(
                        ed.ToString(),
                        EContext.CliDecimal);
                    string msg = ed.ToString() + " (expanded: " +
                                 EDecimal.FromString(ed.ToString()) + ")";
                    TestCommon.CompareTestEqual(
                        (EDecimal)d,
                        ed3,
                        msg);
                } catch (OverflowException ex) {
                    EDecimal ed2 = EDecimal.FromString(
                        ed.ToString(),
                        EContext.CliDecimal);
                    Assert.IsTrue(
                        ed2.IsInfinity(),
                        ed.ToString(),
                        ex.ToString());
                }
            }
        }
コード例 #9
0
        public void TestDivide()
        {
            var fr = new RandomGenerator();

            for (var i = 0; i < 500; ++i)
            {
                ERational er  = RandomObjects.RandomERational(fr);
                ERational er2 = RandomObjects.RandomERational(fr);
                if (er2.IsZero || !er2.IsFinite)
                {
                    continue;
                }
                if (er.IsZero || !er.IsFinite)
                {
                    continue;
                }
                ERational ermult = er.Multiply(er2);
                ERational erdiv  = ermult.Divide(er);
                TestCommon.CompareTestEqual(erdiv, er2);
                erdiv = ermult.Divide(er2);
                TestCommon.CompareTestEqual(erdiv, er);
            }
        }
コード例 #10
0
        public void TestDecimalString()
        {
            var fr = new RandomGenerator();

            // var sw = new System.Diagnostics.Stopwatch();
            // var sw2 = new System.Diagnostics.Stopwatch();
            // var sw3 = new System.Diagnostics.Stopwatch();
            for (var i = 0; i < 10000; ++i)
            {
                if (i % 100 == 0)
                {
                    // Console.WriteLine(i + " sw=" +
                    // sw.ElapsedMilliseconds + ", " + (sw2.ElapsedMilliseconds) +
                    // ", " + (sw3.ElapsedMilliseconds));
                }
                // sw3.Start();
                EDecimal ed = RandomObjects.RandomEDecimal(fr);
                // sw3.Stop();
                // Reduce to Decimal128. Without this reduction,
                // Decimal.Parse would run significantly more slowly
                // on average for random
                // EDecimals than
                // EDecimal.FromString(CliDecimal) does.
                // Decimal128 covers all numbers representable
                // in a CliDecimal.
                ed = ed.RoundToPrecision(EContext.Decimal128);

                if (!ed.IsFinite)
                {
                    continue;
                }
                string  edString = ed.ToString();
                decimal d;
                try {
                    System.Globalization.NumberStyles numstyles =
                        System.Globalization.NumberStyles.AllowExponent |
                        System.Globalization.NumberStyles.Number;
                    // sw.Start();
                    d = Decimal.Parse(
                        edString,
                        numstyles,
                        System.Globalization.CultureInfo.InvariantCulture);
                    // sw.Stop();
                    // sw2.Start();
                    EDecimal ed3 = EDecimal.FromString(
                        edString,
                        EContext.CliDecimal);
                    // sw2.Stop();
                    var edd = (EDecimal)d;
                    if (!edd.Equals(ed3))
                    {
                        string msg = ed.ToString() + " (expanded: " +
                                     EDecimal.FromString(ed.ToString()) + ")";
                        TestCommon.CompareTestEqual(
                            (EDecimal)d,
                            ed3,
                            msg);
                    }
                    // sw3.Stop();
                } catch (OverflowException ex) {
                    EDecimal ed2 = EDecimal.FromString(
                        edString,
                        EContext.CliDecimal);
                    if (!ed2.IsInfinity())
                    {
                        Assert.Fail(edString + "\n" + ex.ToString());
                    }
                }
            }
        }
コード例 #11
0
        public void TestParseJSONNumber()
        {
            if (CBORDataUtilities.ParseJSONNumber("100.", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("-100.", false, false) != null)
            {
                Assert.Fail();
            }
            if (
                CBORDataUtilities.ParseJSONNumber(
                    "100.e+20",
                    false,
                    false) != null)
            {
                Assert.Fail();
            }
            if (
                CBORDataUtilities.ParseJSONNumber(
                    "-100.e20",
                    false,
                    false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("100.e20", false, false) != null)
            {
                Assert.Fail();
            }

            if (CBORDataUtilities.ParseJSONNumber("+0.1", false, false) != null)
            {
                Assert.Fail();
            }

            if (CBORDataUtilities.ParseJSONNumber("0.", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("-0.", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0g.1", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0.e+20", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("-0.e20", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0.e20", false, false) != null)
            {
                Assert.Fail();
            }

            if (CBORDataUtilities.ParseJSONNumber(null, false, false) != null)
            {
                Assert.Fail();
            }
            if (
                CBORDataUtilities.ParseJSONNumber(
                    String.Empty,
                    false,
                    false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("xyz", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("true", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber(".1", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0..1", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0xyz", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0.1xyz", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0.xyz", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0.5exyz", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0.5q+88", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0.5ee88", false, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("-5e") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("-5e-2x") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("-5e+2x") != null)
            {
                Assert.Fail();
            }
            CBORObject cbor = CBORDataUtilities.ParseJSONNumber("2e-2147483648");

            CBORTestCommon.AssertSer(cbor, "2E-2147483648");
            if (
                CBORDataUtilities.ParseJSONNumber(
                    "0.5e+xyz",
                    false,
                    false) != null)
            {
                Assert.Fail();
            }
            if (
                CBORDataUtilities.ParseJSONNumber(
                    "0.5e+88xyz",
                    false,
                    false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0000") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0x1") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0xf") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0x20") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0x01") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber(".2") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber(".05") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("-.2") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("-.05") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("23.") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("23.e0") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("23.e1") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("0.") != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("5.2", true, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("5e+1", true, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("-5.2", true, false) != null)
            {
                Assert.Fail();
            }
            if (CBORDataUtilities.ParseJSONNumber("-5e+1", true, false) != null)
            {
                Assert.Fail();
            }

            TestCommon.CompareTestEqual(
                CBORObject.FromObject(230),
                CBORDataUtilities.ParseJSONNumber("23.0e01"));
            TestCommon.CompareTestEqual(
                CBORObject.FromObject(23),
                CBORDataUtilities.ParseJSONNumber("23.0e00"));
            cbor = CBORDataUtilities.ParseJSONNumber(
                "1e+99999999999999999999999999",
                false,
                false);
            Assert.IsTrue(cbor != null);
            Assert.IsFalse(cbor.CanFitInDouble());
            CBORTestCommon.AssertRoundTrip(cbor);
        }