/// <summary>\r
/// Tests for System.Decimal\r
/// </summary>\r
- public class DecimalTest2 : TestCase\r
+ [TestFixture]\r
+ public class DecimalTest2\r
{\r
- public DecimalTest2() {}\r
-\r
private void ReportOpError(string msg, int i, int j, decimal d1, decimal d2, decimal d3, decimal d3b)\r
{\r
decimal delta = 0;\r
try {\r
delta = d3 - d3b;\r
} catch (Exception e) {\r
- Fail("ReportOpError: Unexpected exception on " + d3 + " - " + d3b + ". e:" + e);\r
+ Assert.Fail ("ReportOpError: Unexpected exception on " + d3 + " - " + d3b + ". e:" + e);\r
}\r
- Fail ("*** " + msg + " for d1=" + d1 + " i=" + i + " d2=" + d2 + " j=" + j + " d3=" + d3 + " d3b=" + d3b + "\n"\r
- + "Ist:" + d3 + " Soll:" + d3b + " delta=" + (delta) + " == " + (d3 == d3b));\r
+ Assert.Fail ("*** " + msg + " for d1=" + d1 + " i=" + i + " d2=" + d2 + " j=" + j + " d3=" + d3 + " d3b=" + d3b + "\n"\r
+ + "is:" + d3 + " must be:" + d3b + " delta=" + (delta) + " == " + (d3 == d3b));\r
}\r
\r
+ [Test]\r
+ \r
public void TestCompare()\r
{\r
const int size = 14;\r
Decimal d1 = data[i];\r
for (int j = 0; j < size; j++) \r
{\r
- Assert(cmpTable[i,j] == -cmpTable[j,i]);\r
+ Assert.IsTrue (cmpTable[i,j] == -cmpTable[j,i]);\r
int x = cmpTable[i,j];\r
Decimal d2 = data[j];\r
\r
int y = Decimal.Compare(d1, d2);\r
if (y < 0) y = -1;\r
else if (y > 0) y = 1;\r
- Assert(x == y);\r
+ Assert.IsTrue (x == y);\r
\r
y = d1.CompareTo(d2);\r
if (y < 0) y = -1;\r
else if (y > 0) y = 1;\r
- Assert(x == y);\r
+ Assert.IsTrue (x == y);\r
\r
bool b = d1 < d2;\r
if (x != -1) b = !b;\r
- Assert(b);\r
+ Assert.IsTrue (b);\r
\r
b = d1 <= d2;\r
if (x == 1) b = !b;\r
- Assert(b);\r
+ Assert.IsTrue (b);\r
\r
b = d1 >= d2;\r
if (x == -1) b = !b;\r
- Assert(b);\r
+ Assert.IsTrue (b);\r
\r
b = d1 > d2;\r
if (x != 1) b = !b;\r
- Assert(b);\r
+ Assert.IsTrue (b);\r
\r
b = d1 == d2;\r
if (x != 0) b = !b;\r
- Assert(b);\r
+ Assert.IsTrue (b);\r
\r
b = d1.Equals(d2);\r
if (x != 0) b = !b;\r
- Assert(b);\r
+ Assert.IsTrue (b);\r
\r
b = Decimal.Equals(d1, d2);\r
if (x != 0) b = !b;\r
- Assert(b);\r
+ Assert.IsTrue (b);\r
}\r
}\r
}\r
\r
+#if TARGET_JVM\r
+ // Under TARGET_JVm we have a slightly better precision (becuase of\r
+ // using Java BigDecimal).\r
+ private bool AreNotEqual(Decimal v1, Decimal v2)\r
+ {\r
+ Decimal delta = v1 - v2;\r
+ if (delta < 0m)\r
+ delta = -delta;\r
+ Decimal absV1 = v1 < 0m ? -v1 : v1;\r
+ if (absV1 < 1m)\r
+ return delta > 1E-27m;\r
+ return delta / absV1 > 1E-27m;\r
+ }\r
+#else\r
+ private bool AreNotEqual(Decimal v1, Decimal v2)\r
+ {\r
+ return v1 != v2;\r
+ }\r
+#endif\r
+\r
+ [Test]\r
+ \r
public void TestRemainder()\r
{\r
- Assert((decimal)Decimal.Remainder(3.6m, 1.3m) == 1.0m);\r
- Assert((decimal)Decimal.Remainder(79228162514264337593543950335m , \r
- 27703302467091960609331879.53200m) == 24420760848422211464106753m);\r
+ Assert.IsTrue ((decimal)Decimal.Remainder(3.6m, 1.3m) == 1.0m);\r
+ decimal res = 24420760848422211464106753m;\r
+ decimal remainder = Decimal.Remainder(79228162514264337593543950335m, 27703302467091960609331879.53200m);\r
+ if (AreNotEqual (res, remainder))\r
+ Assert.AreEqual (res, remainder, "A02");\r
\r
- Assert((decimal)Decimal.Remainder(45937986975432m, 43987453m)\r
+ Assert.IsTrue ((decimal)Decimal.Remainder(45937986975432m, 43987453m)\r
== 42334506m);\r
- Assert((decimal)Decimal.Remainder(45937986975000m, 5000m)\r
+ Assert.IsTrue ((decimal)Decimal.Remainder(45937986975000m, 5000m)\r
== 0m);\r
- Assert((decimal)Decimal.Remainder(-54789548973.6234m, 1.3356m) \r
+ Assert.IsTrue ((decimal)Decimal.Remainder(-54789548973.6234m, 1.3356m) \r
== -0.1074m);\r
}\r
\r
+ [Test]\r
+ \r
public void TestAdd()\r
{\r
decimal[] args = auto_build2;\r
try\r
{\r
d3 = Decimal.Add(d1, d2);\r
- if (d3 != tr.val) \r
+ if (AreNotEqual (d3, tr.val))\r
{\r
if (tr.info == TestResultInfo.Overflow)\r
{\r
ReportOpError("Add: expected overflow", i, j, d1, d2, d3, tr.val);\r
errOverflow++;\r
}\r
- else \r
+ else\r
{\r
ReportOpError("Add: result mismatch", i, j, d1, d2, d3, tr.val);\r
errOp++;\r
else if (tr.info == TestResultInfo.Ok)\r
{\r
d4 = Decimal.Subtract(d3, d2);\r
- if (d4 != d1)\r
+ if (AreNotEqual (d4, d1))\r
{\r
ReportOpError("Subtract: result mismatch", i, j, d3, d2, d4, d1);\r
errOp++;\r
\r
if (errOverflow + errOp > 0) \r
{\r
- Fail("" + errOp + " wrong additions, " + errOverflow + " wrong overflows");\r
+ Assert.Fail ("" + errOp + " wrong additions, " + errOverflow + " wrong overflows");\r
}\r
}\r
\r
+ [Test]\r
+ \r
public void TestMult()\r
{\r
decimal[] args = auto_build2;\r
try\r
{\r
d3 = Decimal.Multiply(d1, d2);\r
- if (d3 != tr.val) \r
+ if (AreNotEqual (d3, tr.val)) \r
{\r
if (tr.info == TestResultInfo.Overflow)\r
{\r
try \r
{\r
d4 = Decimal.Divide(d3, d2);\r
- if (d4 != d1 && tr.info != TestResultInfo.ReverseRound)\r
+ if (AreNotEqual (d4, d1) && tr.info != TestResultInfo.ReverseRound)\r
{\r
ReportOpError("MultDiv: result mismatch", i, j, d3, d2, d4, d1);\r
errOp++;\r
\r
if (errOverflow + errOp > 0) \r
{\r
- Fail("" + errOp + " wrong multiplications, " + errOverflow + " wrong overflows");\r
+ Assert.Fail ("" + errOp + " wrong multiplications, " + errOverflow + " wrong overflows");\r
}\r
}\r
-
- // 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)
+\r
+ // MS 1.x is being less precise than Mono (2 cases). MS 2.0 is correct.\r
+ // Mono doesn't produce the same result for (i==21/j==3)\r
+ [Test]\r
+ \r
public void TestDiv()\r
{\r
decimal[] args = auto_build2;\r
try\r
{\r
d3 = Decimal.Divide(d1, d2);\r
- if (d3 != tr.val) \r
+ if (AreNotEqual (d3, tr.val)) \r
{\r
if (tr.info == TestResultInfo.Overflow)\r
{\r
try\r
{\r
d4 = Decimal.Multiply(d3, d2);\r
- if (d4 != d1 && tr.info != TestResultInfo.ReverseRound)\r
+ if (AreNotEqual(d4, d1) && tr.info != TestResultInfo.ReverseRound)\r
{\r
ReportOpError("DivMult: result mismatch", i, j, d3, d2, d4, d1);\r
errOp++;\r
\r
if (errOverflow + errOp > 0) \r
{\r
- Fail("" + errOp + " wrong division, " + errOverflow + " wrong overflows, " + errDivideByZero + " wrong divide by zero, ");\r
+ Assert.Fail ("" + errOp + " wrong division, " + errOverflow + " wrong overflows, " + errDivideByZero + " wrong divide by zero, ");\r
}\r
}\r
\r