Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / mini / basic-math.cs
index c70a6b4ec58b9a46fa87eec26b2ae999fb2e6317..a5aeb9cc8a9eac5d8e28873b5f53601acff087bd 100644 (file)
@@ -6,7 +6,7 @@ using System.Reflection;
  *
  * Each test needs to be of the form:
  *
- * static int test_<result>_<name> ();
+ * public static int test_<result>_<name> ();
  *
  * where <result> is an integer (the value that needs to be returned by
  * the method to make it pass.
@@ -23,46 +23,53 @@ using System.Reflection;
  * the IL code looks.
  */
 
-class Tests {
+#if __MOBILE__
+class MathTests
+#else
+class Tests
+#endif
+{
 
-       static int Main () {
-               return TestDriver.RunTests (typeof (Tests));
+#if !__MOBILE__
+       public static int Main (string[] args) {
+               return TestDriver.RunTests (typeof (Tests), args);
        }
+#endif
        
-       static int test_0_sin_precision () {
+       public static int test_0_sin_precision () {
                double d1 = Math.Sin (1);
                 double d2 = Math.Sin (1) - d1;
                return (d2 == 0) ? 0 : 1;
        }
 
-       static int test_0_cos_precision () {
+       public static int test_0_cos_precision () {
                double d1 = Math.Cos (1);
                 double d2 = Math.Cos (1) - d1;
                return (d2 == 0) ? 0 : 1;
        }
 
-       static int test_0_tan_precision () {
+       public static int test_0_tan_precision () {
                double d1 = Math.Tan (1);
                 double d2 = Math.Tan (1) - d1;
                return (d2 == 0) ? 0 : 1;
        }
 
-       static int test_0_atan_precision () {
+       public static int test_0_atan_precision () {
                double d1 = Math.Atan (double.NegativeInfinity);
                 double d2 = Math.Atan (double.NegativeInfinity) - d1;
                return (d2 == 0) ? 0 : 1;
        }
 
-       static int test_0_sqrt_precision () {
+       public static int test_0_sqrt_precision () {
                double d1 = Math.Sqrt (2);
                 double d2 = Math.Sqrt (2) - d1;
                return (d2 == 0) ? 0 : 1;
        }
 
-       static int test_2_sqrt () {
+       public static int test_2_sqrt () {
                return (int) Math.Sqrt (4);
        }
-       static int test_0_sqrt_precision_and_not_spill () {
+       public static int test_0_sqrt_precision_and_not_spill () {
                double expected = 0;
                double[] operands = new double[3];
                double[] temporaries = new double[3];
@@ -87,7 +94,7 @@ class Tests {
                return (result == expected) ? 0 : 1;
        }
        
-       static int test_0_sqrt_precision_and_spill () {
+       public static int test_0_sqrt_precision_and_spill () {
                double expected = 0;
                double[] operands = new double[9];
                double[] temporaries = new double[9];
@@ -112,7 +119,7 @@ class Tests {
                return (result == expected) ? 0 : 1;
        }
        
-       static int test_0_div_precision_and_spill () {
+       public static int test_0_div_precision_and_spill () {
                double expected = 0;
                double[] operands = new double[9];
                double[] temporaries = new double[9];
@@ -136,27 +143,27 @@ class Tests {
                return (result == expected) ? 0 : 1;
        }
        
-       static int test_0_sqrt_nan () {
+       public static int test_0_sqrt_nan () {
                return Double.IsNaN (Math.Sqrt (Double.NaN)) ? 0 : 1;
        }
        
-       static int test_0_sin_nan () {
+       public static int test_0_sin_nan () {
                return Double.IsNaN (Math.Sin (Double.NaN)) ? 0 : 1;
        }
        
-       static int test_0_cos_nan () {
+       public static int test_0_cos_nan () {
                return Double.IsNaN (Math.Cos (Double.NaN)) ? 0 : 1;
        }
        
-       static int test_0_tan_nan () {
+       public static int test_0_tan_nan () {
                return Double.IsNaN (Math.Tan (Double.NaN)) ? 0 : 1;
        }
        
-       static int test_0_atan_nan () {
+       public static int test_0_atan_nan () {
                return Double.IsNaN (Math.Atan (Double.NaN)) ? 0 : 1;
        }
 
-       static int test_0_min () {
+       public static int test_0_min () {
                if (Math.Min (5, 6) != 5)
                        return 1;
                if (Math.Min (6, 5) != 5)
@@ -172,7 +179,7 @@ class Tests {
                return 0;
        }
 
-       static int test_0_max () {
+       public static int test_0_max () {
                if (Math.Max (5, 6) != 6)
                        return 1;
                if (Math.Max (6, 5) != 6)
@@ -187,5 +194,111 @@ class Tests {
                        return 6;
                return 0;
        }
-               
+
+       public static int test_0_min_un () {
+               uint a = (uint)int.MaxValue + 10;
+
+               for (uint b = 7; b <= 10; ++b) {
+                       if (Math.Min (a, b) != b)
+                               return (int)b;
+                       if (Math.Min (b, a) != b)
+                               return (int)b;
+               }
+
+               if (Math.Min ((ulong)5, (ulong)6) != 5)
+                       return 4;
+               if (Math.Min ((ulong)6, (ulong)5) != 5)
+                       return 5;
+
+               ulong la = (ulong)long.MaxValue + 10;
+
+               for (ulong b = 7; b <= 10; ++b) {
+                       if (Math.Min (la, b) != b)
+                               return (int)b;
+                       if (Math.Min (b, la) != b)
+                               return (int)b;
+               }
+
+               return 0;
+       }
+
+       public static int test_0_max_un () {
+               uint a = (uint)int.MaxValue + 10;
+
+               for (uint b = 7; b <= 10; ++b) {
+                       if (Math.Max (a, b) != a)
+                               return (int)b;
+                       if (Math.Max (b, a) != a)
+                               return (int)b;
+               }
+
+               if (Math.Max ((ulong)5, (ulong)6) != 6)
+                       return 4;
+               if (Math.Max ((ulong)6, (ulong)5) != 6)
+                       return 5;
+
+               ulong la = (ulong)long.MaxValue + 10;
+
+               for (ulong b = 7; b <= 10; ++b) {
+                       if (Math.Max (la, b) != la)
+                               return (int)b;
+                       if (Math.Max (b, la) != la)
+                               return (int)b;
+               }
+
+               return 0;
+       }
+
+       public static int test_0_abs () {
+               double d = -5.0;
+
+               if (Math.Abs (d) != 5.0)
+                       return 1;
+               return 0;
+       }
+
+       public static int test_0_float_abs () {
+               float f = -1.0f;
+
+               if (Math.Abs (f) != 1.0f)
+                       return 1;
+               return 0;
+       }
+
+       public static int test_0_round () {
+               if (Math.Round (5.0) != 5.0)
+                       return 1;
+
+               if (Math.Round (5.000000000000001) != 5.0)
+                       return 2;
+
+               if (Math.Round (5.499999999999999) != 5.0)
+                       return 3;
+
+               if (Math.Round (5.5) != 6.0)
+                       return 4;
+
+               if (Math.Round (5.999999999999999) != 6.0)
+                       return 5;
+
+               if (Math.Round (Double.Epsilon) != 0)
+                       return 6;
+
+               if (!Double.IsNaN (Math.Round (Double.NaN)))
+                       return 7;
+
+               if (!Double.IsPositiveInfinity (Math.Round (Double.PositiveInfinity)))
+                       return 8;
+
+               if (!Double.IsNegativeInfinity (Math.Round (Double.NegativeInfinity)))
+                       return 9;
+
+               if (Math.Round (Double.MinValue) != Double.MinValue)
+                       return 10;
+
+               if (Math.Round (Double.MaxValue) != Double.MaxValue)
+                       return 11;
+
+               return 0;
+       }
 }