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); } }
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); } }
public static void AssertRoundTrip(CBORObject o) { CBORObject o2 = FromBytesTestAB(CheckEncodeToBytes(o)); TestCommon.CompareTestEqual(o, o2); TestNumber(o); TestCommon.AssertEqualsHashCode(o, o2); }
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); } } }
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); }
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); }
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); } }
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()); } } }
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); } }
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()); } } } }
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); }