diff --git a/tests/math_expression.test b/tests/math_expression.test index 730e079..9f9f4c2 100644 --- a/tests/math_expression.test +++ b/tests/math_expression.test @@ -39,31 +39,31 @@ class CtoolsMathExpressionTestCase extends DrupalWebTestCase { $math_expression = new ctools_math_expr(); // Test constant expressions. - $this->assertEqual($math_expression->e('2'), 2); + $this->assertEqual($math_expression->evaluate('2'), 2); $random_number = rand(0, 10); - $this->assertEqual($random_number, $math_expression->e((string) $random_number)); + $this->assertEqual($random_number, $math_expression->evaluate((string) $random_number)); // Test simple arithmetic. $random_number_a = rand(5, 10); $random_number_b = rand(5, 10); - $this->assertEqual($random_number_a + $random_number_b, $math_expression->e("$random_number_a + $random_number_b")); - $this->assertEqual($random_number_a - $random_number_b, $math_expression->e("$random_number_a - $random_number_b")); - $this->assertEqual($random_number_a * $random_number_b, $math_expression->e("$random_number_a * $random_number_b")); - $this->assertEqual($random_number_a / $random_number_b, $math_expression->e("$random_number_a / $random_number_b")); + $this->assertEqual($random_number_a + $random_number_b, $math_expression->evaluate("$random_number_a + $random_number_b")); + $this->assertEqual($random_number_a - $random_number_b, $math_expression->evaluate("$random_number_a - $random_number_b")); + $this->assertEqual($random_number_a * $random_number_b, $math_expression->evaluate("$random_number_a * $random_number_b")); + $this->assertEqual(round($random_number_a / $random_number_b, 8), round($math_expression->evaluate("$random_number_a / $random_number_b"), 8)); // Test Associative property. $random_number_c = rand(5, 10); - $this->assertEqual($math_expression->e("$random_number_a + ($random_number_b + $random_number_c)"), $math_expression->e("($random_number_a + $random_number_b) + $random_number_c")); - $this->assertEqual($math_expression->e("$random_number_a * ($random_number_b * $random_number_c)"), $math_expression->e("($random_number_a * $random_number_b) * $random_number_c")); + $this->assertEqual($math_expression->evaluate("$random_number_a + ($random_number_b + $random_number_c)"), $math_expression->evaluate("($random_number_a + $random_number_b) + $random_number_c")); + $this->assertEqual($math_expression->evaluate("$random_number_a * ($random_number_b * $random_number_c)"), $math_expression->evaluate("($random_number_a * $random_number_b) * $random_number_c")); // Test Commutative property. - $this->assertEqual($math_expression->e("$random_number_a + $random_number_b"), $math_expression->e("$random_number_b + $random_number_a")); - $this->assertEqual($math_expression->e("$random_number_a * $random_number_b"), $math_expression->e("$random_number_b * $random_number_a")); + $this->assertEqual($math_expression->evaluate("$random_number_a + $random_number_b"), $math_expression->evaluate("$random_number_b + $random_number_a")); + $this->assertEqual($math_expression->evaluate("$random_number_a * $random_number_b"), $math_expression->evaluate("$random_number_b * $random_number_a")); // Test Distributive property. - $this->assertEqual($math_expression->e("($random_number_a + $random_number_b) * $random_number_c"), $math_expression->e("($random_number_a * $random_number_c + $random_number_b * $random_number_c)")); + $this->assertEqual($math_expression->evaluate("($random_number_a + $random_number_b) * $random_number_c"), $math_expression->evaluate("($random_number_a * $random_number_c + $random_number_b * $random_number_c)")); - $this->assertEqual(pow($random_number_a, $random_number_b), $math_expression->e("$random_number_a ^ $random_number_b")); + $this->assertEqual(pow($random_number_a, $random_number_b), $math_expression->evaluate("$random_number_a ^ $random_number_b")); } public function testBuildInFunctions() { @@ -72,26 +72,25 @@ class CtoolsMathExpressionTestCase extends DrupalWebTestCase { // @todo: maybe run this code multiple times to test different values. $random_double = $this->rand01(); $random_int = rand(5, 10); - $this->assertFloat(sin($random_double), $math_expression->e("sin($random_double)")); - $this->assertFloat(cos($random_double), $math_expression->e("cos($random_double)")); - $this->assertFloat(tan($random_double), $math_expression->e("tan($random_double)")); - $this->assertFloat(exp($random_double), $math_expression->e("exp($random_double)")); - $this->assertFloat(sqrt($random_double), $math_expression->e("sqrt($random_double)")); - $this->assertFloat(log($random_double), $math_expression->e("ln($random_double)")); - $this->assertFloat(round($random_double), $math_expression->e("round($random_double)")); - $this->assertFloat(abs($random_double + $random_int), $math_expression->e('abs(' . ($random_double + $random_int) . ')')); - $this->assertEqual(round($random_double + $random_int), $math_expression->e('round(' . ($random_double + $random_int) . ')')); - $this->assertEqual(ceil($random_double + $random_int), $math_expression->e('ceil(' . ($random_double + $random_int) . ')')); - $this->assertEqual(floor($random_double + $random_int), $math_expression->e('floor(' . ($random_double + $random_int) . ')')); + $this->assertFloat(sin($random_double), $math_expression->evaluate("sin($random_double)")); + $this->assertFloat(cos($random_double), $math_expression->evaluate("cos($random_double)")); + $this->assertFloat(tan($random_double), $math_expression->evaluate("tan($random_double)")); + $this->assertFloat(exp($random_double), $math_expression->evaluate("exp($random_double)")); + $this->assertFloat(sqrt($random_double), $math_expression->evaluate("sqrt($random_double)")); + $this->assertFloat(log($random_double), $math_expression->evaluate("ln($random_double)")); + $this->assertFloat(round($random_double), $math_expression->evaluate("round($random_double)")); + $this->assertFloat(abs($random_double + $random_int), $math_expression->evaluate('abs(' . ($random_double + $random_int) . ')')); + $this->assertEqual(round($random_double + $random_int), $math_expression->evaluate('round(' . ($random_double + $random_int) . ')')); + $this->assertEqual(ceil($random_double + $random_int), $math_expression->evaluate('ceil(' . ($random_double + $random_int) . ')')); + $this->assertEqual(floor($random_double + $random_int), $math_expression->evaluate('floor(' . ($random_double + $random_int) . ')')); // @fixme: you can't run time without an argument. - $this->assertFloat(time(), $math_expression->e('time(1)')); + $this->assertFloat(time(), $math_expression->evaluate('time(1)')); $random_double_a = $this->rand01(); $random_double_b = $this->rand01(); - // @fixme: max/min don't work at the moment. -// $this->assertFloat(max($random_double_a, $random_double_b), $math_expression->e("max($random_double_a, $random_double_b)")); -// $this->assertFloat(min($random_double_a, $random_double_b), $math_expression->e("min($random_double_a, $random_double_b)")); + $this->assertFloat(max($random_double_a, $random_double_b), $math_expression->evaluate("max($random_double_a, $random_double_b)")); + $this->assertFloat(min($random_double_a, $random_double_b), $math_expression->evaluate("min($random_double_a, $random_double_b)")); } public function testVariables() { @@ -101,11 +100,11 @@ class CtoolsMathExpressionTestCase extends DrupalWebTestCase { $random_number_b = rand(5, 10); // Store the first random number and use it on calculations. - $math_expression->e("var = $random_number_a"); - $this->assertEqual($random_number_a + $random_number_b, $math_expression->e("var + $random_number_b")); - $this->assertEqual($random_number_a * $random_number_b, $math_expression->e("var * $random_number_b")); - $this->assertEqual($random_number_a - $random_number_b, $math_expression->e("var - $random_number_b")); - $this->assertEqual($random_number_a / $random_number_b, $math_expression->e("var / $random_number_b")); + $math_expression->evaluate("var = $random_number_a"); + $this->assertEqual($random_number_a + $random_number_b, $math_expression->evaluate("var + $random_number_b")); + $this->assertEqual($random_number_a * $random_number_b, $math_expression->evaluate("var * $random_number_b")); + $this->assertEqual($random_number_a - $random_number_b, $math_expression->evaluate("var - $random_number_b")); + $this->assertEqual(round($random_number_a / $random_number_b, 8), round($math_expression->evaluate("var / $random_number_b"), 8)); } public function testCustomFunctions() { @@ -115,15 +114,31 @@ class CtoolsMathExpressionTestCase extends DrupalWebTestCase { $random_number_b = rand(5, 10); // Create a one-argument function. - $math_expression->e("f(x) = 2 * x"); - $this->assertEqual($random_number_a * 2, $math_expression->e("f($random_number_a)")); - $this->assertEqual($random_number_b * 2, $math_expression->e("f($random_number_b)")); + $math_expression->evaluate("f(x) = 2 * x"); + $this->assertEqual($random_number_a * 2, $math_expression->evaluate("f($random_number_a)")); + $this->assertEqual($random_number_b * 2, $math_expression->evaluate("f($random_number_b)")); // Create a two-argument function. - $math_expression->e("g(x, y) = 2 * x + y"); - $this->assertEqual($random_number_a * 2 + $random_number_b, $math_expression->e("g($random_number_a, $random_number_b)")); + $math_expression->evaluate("g(x, y) = 2 * x + y"); + $this->assertEqual($random_number_a * 2 + $random_number_b, $math_expression->evaluate("g($random_number_a, $random_number_b)")); // Use a custom function in another function. - $this->assertEqual(($random_number_a * 2 + $random_number_b) * 2, $math_expression->e("f(g($random_number_a, $random_number_b))")); + $this->assertEqual(($random_number_a * 2 + $random_number_b) * 2, $math_expression->evaluate("f(g($random_number_a, $random_number_b))")); } + + public function testIf() { + $math_expression = new ctools_math_expr(); + + $random_number_a = rand(1, 5); + $random_number_b = rand(10, 20); + + $this->assertEqual($math_expression->evaluate("if(1, $random_number_a, $random_number_b)"), $random_number_a); + $this->assertEqual($math_expression->evaluate("if(1, $random_number_a)"), $random_number_a); + + $this->assertEqual($math_expression->evaluate("if(0, $random_number_a, $random_number_b)"), $random_number_b); + + // Also add an expression so ensure it's evaluated. + $this->assertEqual($math_expression->evaluate("if($random_number_a > $random_number_b, $random_number_a, $random_number_b)"), $random_number_a); + } + }