Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 Makefile                                 |    1 +
 regression/jvm/DoubleArithmeticTest.java |  168 ++++++++++++++++++++++++++++++
 regression/jvm/TestCase.java             |    7 ++
 regression/run-suite.sh                  |    1 +
 4 files changed, 177 insertions(+), 0 deletions(-)
 create mode 100644 regression/jvm/DoubleArithmeticTest.java

diff --git a/Makefile b/Makefile
index 3a11e2e..eaa68f2 100644
--- a/Makefile
+++ b/Makefile
@@ -234,6 +234,7 @@ REGRESSION_TEST_SUITE_CLASSES = \
        regression/jvm/CloneTest.java \
        regression/jvm/ControlTransferTest.java \
        regression/jvm/ConversionTest.java \
+       regression/jvm/DoubleArithmeticTest.java \
        regression/jvm/ExceptionsTest.java \
        regression/jvm/ExitStatusIsOneTest.java \
        regression/jvm/ExitStatusIsZeroTest.java \
diff --git a/regression/jvm/DoubleArithmeticTest.java 
b/regression/jvm/DoubleArithmeticTest.java
new file mode 100644
index 0000000..7e3bfc2
--- /dev/null
+++ b/regression/jvm/DoubleArithmeticTest.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2006, 2009 Pekka Enberg
+ *                     2009 Tomasz Grabiec
+ *
+ * This file is released under the GPL version 2 with the following
+ * clarification and special exception:
+ *
+ *     Linking this library statically or dynamically with other modules is
+ *     making a combined work based on this library. Thus, the terms and
+ *     conditions of the GNU General Public License cover the whole
+ *     combination.
+ *
+ *     As a special exception, the copyright holders of this library give you
+ *     permission to link this library with independent modules to produce an
+ *     executable, regardless of the license terms of these independent
+ *     modules, and to copy and distribute the resulting executable under terms
+ *     of your choice, provided that you also meet, for each linked independent
+ *     module, the terms and conditions of the license of that module. An
+ *     independent module is a module which is not derived from or based on
+ *     this library. If you modify this library, you may extend this exception
+ *     to your version of the library, but you are not obligated to do so. If
+ *     you do not wish to do so, delete this exception statement from your
+ *     version.
+ *
+ * Please refer to the file LICENSE for details.
+ */
+package jvm;
+
+/**
+ * @author Tomasz Grabiec
+ */
+public class DoubleArithmeticTest extends TestCase {
+    public static void testDoubleAddition() {
+        assertEquals(-1.5, add(0.5, -2.0));
+        assertEquals( 0.0, add(1.0, -1.0));
+        assertEquals( 0.0, add(0.0, 0.0));
+        assertEquals( 1.5, add(0.3, 1.2));
+        assertEquals( 3.14159, add(1.141, 2.00059));
+    }
+
+    public static double add(double augend, double addend) {
+        return augend + addend;
+    }
+
+    public static void testDoubleAdditionLocalSlot() {
+        double x = 1.234567;
+        double y = 7.654321;
+        double result = (1.111111 + x) + (0.0 + y);
+
+        assertEquals(9.999999, result);
+    }
+
+    public static void testDoubleSubtraction() {
+        assertEquals(-1.5, sub(-2.5, -1.0));
+        assertEquals( 0.0, sub(-1.0, -1.0));
+        assertEquals( 0.0, sub( 0.0,  0.0));
+        assertEquals(-1.5, sub( -0.5,  1.0));
+        assertEquals(-2.5, sub( 1,  3.5));
+    }
+
+    public static double sub(double minuend, double subtrahend) {
+        return minuend - subtrahend;
+    }
+
+    public static void testDoubleSubtractionImmediateLocal() {
+        double x = 4.5;
+        double y = 3.5;
+        double result = (1.5 - x) - (0.0 - y);
+
+        assertEquals(0.5, result);
+    }
+
+    public static void testDoubleMultiplication() {
+        assertEquals( 1.0, mul(-1.0, -1.0));
+        assertEquals(-3, mul(-1.5,  2));
+        assertEquals(-1.0, mul( 1.0, -1.0));
+        assertEquals( 12, mul( -3,  -4));
+        assertEquals( 0.0, mul( 0.0,  1.0));
+        assertEquals( 0.0, mul( 1.0,  0.0));
+        assertEquals( 6.4, mul( 2.0,  3.2));
+    }
+
+    public static double mul(double multiplicand, double multiplier) {
+        return multiplicand * multiplier;
+    }
+
+    public static void testDoubleDivision() {
+        assertEquals(-1.0, div( 1.0, -1.0));
+        assertEquals(-1.0, div(-1.0,  1.0));
+        assertEquals( 1.0, div(-1.0, -1.0));
+        assertEquals( 1.0, div( 1.0,  1.0));
+        assertEquals( 1.5, div( 3.0,  2.0));
+        assertEquals( 2.0, div( 2.0,  1.0));
+        assertEquals( 0.5, div( 1.0,  2.0));
+    }
+
+    public static double div(double dividend, double divisor) {
+        return dividend / divisor;
+    }
+
+    public static void testDoubleRemainder() {
+        assertEquals(2.0, rem(6.0, 4.0));
+        assertEquals(10000.5, rem(10000.5, 10001.5));
+        assertEquals(1.0, rem(10002.5, 10001.5));
+    }
+
+    public static double rem(double dividend, double divisor) {
+        return dividend % divisor;
+    }
+
+    public static void testDoubleNegation() {
+        assertEquals(-1.5, neg( 1.5));
+        assertEquals( -0.0, neg( 0.0));
+        assertEquals( 1.3, neg(-1.3));
+    }
+
+    public static double neg(double n) {
+        return -n;
+    }
+
+    public static double i2d(int val) {
+        return (double) val;
+    }
+
+    public static int d2i(double val) {
+        return (int) val;
+    }
+
+    public static void testDoubleIntConversion() {
+        assertEquals(2, d2i(2.5));
+        assertEquals(-1000, d2i(-1000.0101));
+        assertEquals(2.0, i2d(2));
+        assertEquals(-3000, i2d(-3000));
+    }
+
+    private static double zero = 0.0;
+    private static double one = 1.0;
+
+    public static void testDoubleComparison() {
+        assertTrue(zero < one);
+        assertFalse(one < zero);
+        assertFalse(one < one);
+
+        assertTrue(zero <= one);
+        assertTrue(one <= one);
+
+        assertFalse(zero > one);
+        assertTrue(one > zero);
+        assertFalse(one > one);
+
+        assertTrue(one >= zero);
+        assertTrue(one >= one);
+    }
+
+
+    public static void main(String[] args) {
+        testDoubleAddition();
+        testDoubleAdditionLocalSlot();
+        testDoubleSubtraction();
+        testDoubleSubtractionImmediateLocal();
+        testDoubleMultiplication();
+        testDoubleDivision();
+        testDoubleRemainder();
+        testDoubleNegation();
+        testDoubleIntConversion();
+        testDoubleComparison();
+    }
+}
diff --git a/regression/jvm/TestCase.java b/regression/jvm/TestCase.java
index 6ed621b..7b85a98 100644
--- a/regression/jvm/TestCase.java
+++ b/regression/jvm/TestCase.java
@@ -43,6 +43,13 @@ public class TestCase {
             fail("Expected '" + expected + "', but was '" + actual + "'.");
         }
     }
+
+    public static void assertEquals(double expected, double actual) {
+        if (expected != actual) {
+            fail("Expected '" + expected + "', but was '" + actual + "'.");
+        }
+    }
+
     protected static void assertEquals(Object expected, Object actual) {
         if (expected != actual) {
             fail("Expected '" + expected + "', but was '" + actual + "'.");
diff --git a/regression/run-suite.sh b/regression/run-suite.sh
index 364b10b..63d0f51 100755
--- a/regression/run-suite.sh
+++ b/regression/run-suite.sh
@@ -53,6 +53,7 @@ if [ -z "$CLASS_LIST" ]; then
     run_java jvm.CloneTest 0
     run_java jvm.ControlTransferTest 0
     run_java jvm.ConversionTest 0
+    run_java jvm.DoubleArithmeticTest 0
     run_java jvm.DupTest 0
     run_java jvm.ExceptionsTest 0
     run_java jvm.ExitStatusIsOneTest 1
-- 
1.6.0.6


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to