X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FTest%2FSystem%2FDecimalTest2.cs;h=d87cbb1173bd1d82bea418842652358a2471ccbb;hb=4857d28d990711734d66686b807fdf4f1f22427b;hp=4df2d39b7e5ae0c344427620207726436b668ef5;hpb=64f85a65b023522d3f34e9932e6a843e0ad8fc3b;p=mono.git diff --git a/mcs/class/corlib/Test/System/DecimalTest2.cs b/mcs/class/corlib/Test/System/DecimalTest2.cs index 4df2d39b7e5..d87cbb1173b 100644 --- a/mcs/class/corlib/Test/System/DecimalTest2.cs +++ b/mcs/class/corlib/Test/System/DecimalTest2.cs @@ -38,22 +38,23 @@ namespace MonoTests.System /// /// Tests for System.Decimal /// - public class DecimalTest2 : TestCase + [TestFixture] + public class DecimalTest2 { - public DecimalTest2() {} - private void ReportOpError(string msg, int i, int j, decimal d1, decimal d2, decimal d3, decimal d3b) { decimal delta = 0; try { delta = d3 - d3b; } catch (Exception e) { - Fail("ReportOpError: Unexpected exception on " + d3 + " - " + d3b + ". e:" + e); + Assert.Fail ("ReportOpError: Unexpected exception on " + d3 + " - " + d3b + ". e:" + e); } - Fail ("*** " + msg + " for d1=" + d1 + " i=" + i + " d2=" + d2 + " j=" + j + " d3=" + d3 + " d3b=" + d3b + "\n" - + "Ist:" + d3 + " Soll:" + d3b + " delta=" + (delta) + " == " + (d3 == d3b)); + Assert.Fail ("*** " + msg + " for d1=" + d1 + " i=" + i + " d2=" + d2 + " j=" + j + " d3=" + d3 + " d3b=" + d3b + "\n" + + "is:" + d3 + " must be:" + d3b + " delta=" + (delta) + " == " + (d3 == d3b)); } + [Test] + public void TestCompare() { const int size = 14; @@ -90,65 +91,91 @@ namespace MonoTests.System Decimal d1 = data[i]; for (int j = 0; j < size; j++) { - Assert(cmpTable[i,j] == -cmpTable[j,i]); + Assert.IsTrue (cmpTable[i,j] == -cmpTable[j,i]); int x = cmpTable[i,j]; Decimal d2 = data[j]; int y = Decimal.Compare(d1, d2); if (y < 0) y = -1; else if (y > 0) y = 1; - Assert(x == y); + Assert.IsTrue (x == y); y = d1.CompareTo(d2); if (y < 0) y = -1; else if (y > 0) y = 1; - Assert(x == y); + Assert.IsTrue (x == y); bool b = d1 < d2; if (x != -1) b = !b; - Assert(b); + Assert.IsTrue (b); b = d1 <= d2; if (x == 1) b = !b; - Assert(b); + Assert.IsTrue (b); b = d1 >= d2; if (x == -1) b = !b; - Assert(b); + Assert.IsTrue (b); b = d1 > d2; if (x != 1) b = !b; - Assert(b); + Assert.IsTrue (b); b = d1 == d2; if (x != 0) b = !b; - Assert(b); + Assert.IsTrue (b); b = d1.Equals(d2); if (x != 0) b = !b; - Assert(b); + Assert.IsTrue (b); b = Decimal.Equals(d1, d2); if (x != 0) b = !b; - Assert(b); + Assert.IsTrue (b); } } } +#if TARGET_JVM + // Under TARGET_JVm we have a slightly better precision (becuase of + // using Java BigDecimal). + private bool AreNotEqual(Decimal v1, Decimal v2) + { + Decimal delta = v1 - v2; + if (delta < 0m) + delta = -delta; + Decimal absV1 = v1 < 0m ? -v1 : v1; + if (absV1 < 1m) + return delta > 1E-27m; + return delta / absV1 > 1E-27m; + } +#else + private bool AreNotEqual(Decimal v1, Decimal v2) + { + return v1 != v2; + } +#endif + + [Test] + public void TestRemainder() { - Assert((decimal)Decimal.Remainder(3.6m, 1.3m) == 1.0m); - Assert((decimal)Decimal.Remainder(79228162514264337593543950335m , - 27703302467091960609331879.53200m) == 24420760848422211464106753m); + Assert.IsTrue ((decimal)Decimal.Remainder(3.6m, 1.3m) == 1.0m); + decimal res = 24420760848422211464106753m; + decimal remainder = Decimal.Remainder(79228162514264337593543950335m, 27703302467091960609331879.53200m); + if (AreNotEqual (res, remainder)) + Assert.AreEqual (res, remainder, "A02"); - Assert((decimal)Decimal.Remainder(45937986975432m, 43987453m) + Assert.IsTrue ((decimal)Decimal.Remainder(45937986975432m, 43987453m) == 42334506m); - Assert((decimal)Decimal.Remainder(45937986975000m, 5000m) + Assert.IsTrue ((decimal)Decimal.Remainder(45937986975000m, 5000m) == 0m); - Assert((decimal)Decimal.Remainder(-54789548973.6234m, 1.3356m) + Assert.IsTrue ((decimal)Decimal.Remainder(-54789548973.6234m, 1.3356m) == -0.1074m); } + [Test] + public void TestAdd() { decimal[] args = auto_build2; @@ -169,14 +196,14 @@ namespace MonoTests.System try { d3 = Decimal.Add(d1, d2); - if (d3 != tr.val) + if (AreNotEqual (d3, tr.val)) { if (tr.info == TestResultInfo.Overflow) { ReportOpError("Add: expected overflow", i, j, d1, d2, d3, tr.val); errOverflow++; } - else + else { ReportOpError("Add: result mismatch", i, j, d1, d2, d3, tr.val); errOp++; @@ -185,7 +212,7 @@ namespace MonoTests.System else if (tr.info == TestResultInfo.Ok) { d4 = Decimal.Subtract(d3, d2); - if (d4 != d1) + if (AreNotEqual (d4, d1)) { ReportOpError("Subtract: result mismatch", i, j, d3, d2, d4, d1); errOp++; @@ -205,10 +232,12 @@ namespace MonoTests.System if (errOverflow + errOp > 0) { - Fail("" + errOp + " wrong additions, " + errOverflow + " wrong overflows"); + Assert.Fail ("" + errOp + " wrong additions, " + errOverflow + " wrong overflows"); } } + [Test] + public void TestMult() { decimal[] args = auto_build2; @@ -229,7 +258,7 @@ namespace MonoTests.System try { d3 = Decimal.Multiply(d1, d2); - if (d3 != tr.val) + if (AreNotEqual (d3, tr.val)) { if (tr.info == TestResultInfo.Overflow) { @@ -257,7 +286,7 @@ namespace MonoTests.System try { d4 = Decimal.Divide(d3, d2); - if (d4 != d1 && tr.info != TestResultInfo.ReverseRound) + if (AreNotEqual (d4, d1) && tr.info != TestResultInfo.ReverseRound) { ReportOpError("MultDiv: result mismatch", i, j, d3, d2, d4, d1); errOp++; @@ -278,12 +307,14 @@ namespace MonoTests.System if (errOverflow + errOp > 0) { - Fail("" + errOp + " wrong multiplications, " + errOverflow + " wrong overflows"); + Assert.Fail ("" + errOp + " wrong multiplications, " + errOverflow + " wrong overflows"); } } - - // MS 1.x is being less precise than Mono (2 cases). MS 2.0 is correct. - // Mono doesn't produce the same result for (i==21/j==3) + + // MS 1.x is being less precise than Mono (2 cases). MS 2.0 is correct. + // Mono doesn't produce the same result for (i==21/j==3) + [Test] + public void TestDiv() { decimal[] args = auto_build2; @@ -305,7 +336,7 @@ namespace MonoTests.System try { d3 = Decimal.Divide(d1, d2); - if (d3 != tr.val) + if (AreNotEqual (d3, tr.val)) { if (tr.info == TestResultInfo.Overflow) { @@ -357,7 +388,7 @@ namespace MonoTests.System try { d4 = Decimal.Multiply(d3, d2); - if (d4 != d1 && tr.info != TestResultInfo.ReverseRound) + if (AreNotEqual(d4, d1) && tr.info != TestResultInfo.ReverseRound) { ReportOpError("DivMult: result mismatch", i, j, d3, d2, d4, d1); errOp++; @@ -377,7 +408,7 @@ namespace MonoTests.System if (errOverflow + errOp > 0) { - Fail("" + errOp + " wrong division, " + errOverflow + " wrong overflows, " + errDivideByZero + " wrong divide by zero, "); + Assert.Fail ("" + errOp + " wrong division, " + errOverflow + " wrong overflows, " + errDivideByZero + " wrong divide by zero, "); } }