import junit.framework._ import org.junit.Assert._ class ArithExpTest extends TestCase { val Epsilon = 1.1e-16 val zero = Const(0.) val negSeven = Const(-7.) val five = Const(5.) val negTen = Const(-10.) val ten = Const(10.) val twentyFive = Const(25.) val x = Var("x") val y = Var("y") val z = Var("z") /** Tests the eval() method in the ArithExpr composite. */ def testExprPrint() { assertEquals("const 0.", "0.0", zero.exprString) assertEquals("const -7.", "-7.0", negSeven.exprString) assertEquals("const -10.", "-10.0", negTen.exprString) assertEquals("5 + 5", "(5.0 + 5.0)", Sum(five, five).exprString); assertEquals("5 * 10", "(5.0 * 10.0)", Prod(five, ten).exprString); assertEquals("10/5", "(10.0 / 5.0)", Quot(ten, five).exprString); assertEquals("10 - 5", "(10.0 - 5.0)", Diff(ten, five).exprString); assertEquals("x * x", "(x * x)", Prod(x, x).exprString); assertEquals("y/z", "(y / z)", Quot(y, z).exprString); } val e = EmptyEnv val env1 = e.cons("x", -10.).cons("y", 25.).cons("z", -5.) /** Tests the eval() method in the ArithExpr composite. */ def testEval() { assertEquals("const 0.", 0., zero.eval(e), Epsilon) assertEquals("const 7.", -7., negSeven.eval(e), Epsilon) assertEquals("const -10.", -10., negTen.eval(e), Epsilon) assertEquals("25 + 5", 30., Sum(twentyFive, five).eval(e), Epsilon); assertEquals("-7 * 10", -70., Prod(negSeven, ten).eval(e), Epsilon); assertEquals("25/5", 5., Quot(twentyFive, five).eval(e), Epsilon); assertEquals("25 - 5", 20., Diff(twentyFive, five).eval(e), Epsilon); assertEquals("x * z", 50., Prod(x, z).eval(env1), Epsilon); assertEquals("x + y", 15., Sum(x, y).eval(env1), Epsilon) assertEquals("y/z", -5., Quot(y, z).eval(env1), Epsilon); } }