Refactor math support to build for cldc 1.1.

This commit is contained in:
James Roseborough
2008-07-22 17:50:31 +00:00
parent 9113435e57
commit eae183e334
10 changed files with 214 additions and 141 deletions

View File

@@ -3,40 +3,42 @@ package org.luaj.vm;
import junit.framework.TestCase;
import org.luaj.lib.MathLib;
import org.luaj.platform.J2meMidp10Cldc10Platform;
import org.luaj.platform.J2meMidp20Cldc11Platform;
import org.luaj.platform.J2sePlatform;
public class MathLibTest extends TestCase {
private Platform j2se;
private Platform j2me;
private boolean supportedOnJ2me;
protected void setUp() throws Exception {
j2se = new J2sePlatform();
j2me = new org.luaj.platform.J2meMidp10Cldc10Platform(null);
j2me = new org.luaj.platform.J2meMidp20Cldc11Platform(null);
supportedOnJ2me = true;
}
public void testMathDPow() {
assertEquals( 1, J2meMidp10Cldc10Platform.dpow(2, 0), 0 );
assertEquals( 2, J2meMidp10Cldc10Platform.dpow(2, 1), 0 );
assertEquals( 8, J2meMidp10Cldc10Platform.dpow(2, 3), 0 );
assertEquals( -8, J2meMidp10Cldc10Platform.dpow(-2, 3), 0 );
assertEquals( 1/8., J2meMidp10Cldc10Platform.dpow(2, -3), 0 );
assertEquals( -1/8., J2meMidp10Cldc10Platform.dpow(-2, -3), 0 );
assertEquals( 16, J2meMidp10Cldc10Platform.dpow(256, .5), 0 );
assertEquals( 4, J2meMidp10Cldc10Platform.dpow(256, .25), 0 );
assertEquals( 64, J2meMidp10Cldc10Platform.dpow(256, .75), 0 );
assertEquals( 1./16, J2meMidp10Cldc10Platform.dpow(256, - .5), 0 );
assertEquals( 1./ 4, J2meMidp10Cldc10Platform.dpow(256, -.25), 0 );
assertEquals( 1./64, J2meMidp10Cldc10Platform.dpow(256, -.75), 0 );
assertEquals( Double.NaN, J2meMidp10Cldc10Platform.dpow(-256, .5), 0 );
assertEquals( 1, J2meMidp10Cldc10Platform.dpow(.5, 0), 0 );
assertEquals( .5, J2meMidp10Cldc10Platform.dpow(.5, 1), 0 );
assertEquals(.125, J2meMidp10Cldc10Platform.dpow(.5, 3), 0 );
assertEquals( 2, J2meMidp10Cldc10Platform.dpow(.5, -1), 0 );
assertEquals( 8, J2meMidp10Cldc10Platform.dpow(.5, -3), 0 );
assertEquals(1, J2meMidp10Cldc10Platform.dpow(0.0625, 0), 0 );
assertEquals(0.00048828125, J2meMidp10Cldc10Platform.dpow(0.0625, 2.75), 0 );
assertEquals( 1, J2meMidp20Cldc11Platform.dpow(2, 0), 0 );
assertEquals( 2, J2meMidp20Cldc11Platform.dpow(2, 1), 0 );
assertEquals( 8, J2meMidp20Cldc11Platform.dpow(2, 3), 0 );
assertEquals( -8, J2meMidp20Cldc11Platform.dpow(-2, 3), 0 );
assertEquals( 1/8., J2meMidp20Cldc11Platform.dpow(2, -3), 0 );
assertEquals( -1/8., J2meMidp20Cldc11Platform.dpow(-2, -3), 0 );
assertEquals( 16, J2meMidp20Cldc11Platform.dpow(256, .5), 0 );
assertEquals( 4, J2meMidp20Cldc11Platform.dpow(256, .25), 0 );
assertEquals( 64, J2meMidp20Cldc11Platform.dpow(256, .75), 0 );
assertEquals( 1./16, J2meMidp20Cldc11Platform.dpow(256, - .5), 0 );
assertEquals( 1./ 4, J2meMidp20Cldc11Platform.dpow(256, -.25), 0 );
assertEquals( 1./64, J2meMidp20Cldc11Platform.dpow(256, -.75), 0 );
assertEquals( Double.NaN, J2meMidp20Cldc11Platform.dpow(-256, .5), 0 );
assertEquals( 1, J2meMidp20Cldc11Platform.dpow(.5, 0), 0 );
assertEquals( .5, J2meMidp20Cldc11Platform.dpow(.5, 1), 0 );
assertEquals(.125, J2meMidp20Cldc11Platform.dpow(.5, 3), 0 );
assertEquals( 2, J2meMidp20Cldc11Platform.dpow(.5, -1), 0 );
assertEquals( 8, J2meMidp20Cldc11Platform.dpow(.5, -3), 0 );
assertEquals(1, J2meMidp20Cldc11Platform.dpow(0.0625, 0), 0 );
assertEquals(0.00048828125, J2meMidp20Cldc11Platform.dpow(0.0625, 2.75), 0 );
}
public void testAbs() {
@@ -49,6 +51,7 @@ public class MathLibTest extends TestCase {
}
public void testCosh() {
supportedOnJ2me = false;
tryTrigOps( MathLib.COSH );
}
@@ -57,6 +60,7 @@ public class MathLibTest extends TestCase {
}
public void testExp() {
supportedOnJ2me = false;
tryMathOp( MathLib.EXP, 0 );
tryMathOp( MathLib.EXP, 0.1 );
tryMathOp( MathLib.EXP, .9 );
@@ -69,6 +73,7 @@ public class MathLibTest extends TestCase {
}
public void testLog() {
supportedOnJ2me = false;
tryMathOp( MathLib.LOG, 0.1 );
tryMathOp( MathLib.LOG, .9 );
tryMathOp( MathLib.LOG, 1. );
@@ -80,6 +85,7 @@ public class MathLibTest extends TestCase {
}
public void testLog10() {
supportedOnJ2me = false;
tryMathOp( MathLib.LOG10, 0.1 );
tryMathOp( MathLib.LOG10, .9 );
tryMathOp( MathLib.LOG10, 1. );
@@ -115,6 +121,7 @@ public class MathLibTest extends TestCase {
}
public void testSinh() {
supportedOnJ2me = false;
tryTrigOps( MathLib.SINH );
}
@@ -132,10 +139,12 @@ public class MathLibTest extends TestCase {
}
public void testTanh() {
supportedOnJ2me = false;
tryTrigOps( MathLib.TANH );
}
public void testAtan2() {
supportedOnJ2me = false;
tryDoubleOps( MathLib.ATAN2, false );
}
@@ -202,17 +211,32 @@ public class MathLibTest extends TestCase {
tryMathOp( id, -Math.PI*9/8 );
}
private void tryMathOp(int id, double x) {
double expected = j2se.mathop(id, x);
double actual = j2me.mathop(id, x);
assertEquals( expected, actual, 1.e-5 );
private void tryMathOp(int id, double x) {
try {
double expected = j2se.mathop(id, LDouble.valueOf(x)).toJavaDouble();
double actual = j2me.mathop(id, LDouble.valueOf(x)).toJavaDouble();
if ( supportedOnJ2me )
assertEquals( expected, actual, 1.e-5 );
else
this.fail("j2me should throw exception for math op "+id+" but returned "+actual);
} catch ( LuaErrorException lee ) {
if ( supportedOnJ2me )
throw lee;
}
}
private void tryMathOp(int id, double a, double b) {
double expected = j2se.mathop(id, a, b);
double actual = j2me.mathop(id, a, b);
assertEquals( expected, actual, 1.e-5 );
}
try {
double expected = j2se.mathop(id, LDouble.valueOf(a), LDouble.valueOf(b)).toJavaDouble();
double actual = j2me.mathop(id, LDouble.valueOf(a), LDouble.valueOf(b)).toJavaDouble();
if ( supportedOnJ2me )
assertEquals( expected, actual, 1.e-5 );
else
this.fail("j2me should throw exception for math op "+id+" but returned "+actual);
} catch ( LuaErrorException lee ) {
if ( supportedOnJ2me )
throw lee;
}
}
}