[480178] Fix handling of surrogate characters.
[mono.git] / mcs / class / corlib / Test / System / DecimalTest2.cs
index e963f05c2301bd2250efc4e10e6474c376767c6a..d87cbb1173bd1d82bea418842652358a2471ccbb 100644 (file)
@@ -38,22 +38,23 @@ namespace MonoTests.System
     /// <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
@@ -90,65 +91,91 @@ namespace MonoTests.System
                 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
-            AssertEquals("A02", 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
@@ -169,14 +196,14 @@ namespace MonoTests.System
                     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
@@ -185,7 +212,7 @@ namespace MonoTests.System
                         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
@@ -205,10 +232,12 @@ namespace MonoTests.System
 \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
@@ -229,7 +258,7 @@ namespace MonoTests.System
                     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
@@ -257,7 +286,7 @@ namespace MonoTests.System
                         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
@@ -278,12 +307,14 @@ namespace MonoTests.System
 \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
 \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
@@ -305,7 +336,7 @@ namespace MonoTests.System
                     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
@@ -357,7 +388,7 @@ namespace MonoTests.System
                         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
@@ -377,7 +408,7 @@ namespace MonoTests.System
 \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