diff --git a/lib/evalmath/evalmath.class.php b/lib/evalmath/evalmath.class.php index 093f4654276..0597f185eb3 100644 --- a/lib/evalmath/evalmath.class.php +++ b/lib/evalmath/evalmath.class.php @@ -107,7 +107,7 @@ class EvalMath { 'sin','sinh','arcsin','asin','arcsinh','asinh', 'cos','cosh','arccos','acos','arccosh','acosh', 'tan','tanh','arctan','atan','arctanh','atanh', - 'sqrt','abs','ln','log','exp'); + 'sqrt','abs','ln','log','exp','floor','ceil','round'); var $fc = array( // calc functions emulation 'average'=>array(-1), 'max'=>array(-1), 'min'=>array(-1), diff --git a/lib/evalmath/readme_moodle.txt b/lib/evalmath/readme_moodle.txt index 512bcd68544..0105d564b3e 100644 --- a/lib/evalmath/readme_moodle.txt +++ b/lib/evalmath/readme_moodle.txt @@ -10,6 +10,7 @@ Our changes: * moved pattern for func and var names into a static var * made a function to test a string to see if it is a valid func or var name. * localized strings +* added round, ceil and floor functions. To see all changes diff against version 1.1, available from: http://www.phpclasses.org/browse/package/2695.html diff --git a/lib/simpletest/testmathslib.php b/lib/simpletest/testmathslib.php index 1e0f8b32390..a17bd0a4390 100644 --- a/lib/simpletest/testmathslib.php +++ b/lib/simpletest/testmathslib.php @@ -121,6 +121,65 @@ class mathsslib_test extends UnitTestCase { } + function test_rounding_function() { + $formula = new calc_formula('=round(2.5)'); + $this->assertEqual($formula->evaluate(), 3); + + $formula = new calc_formula('=round(1.5)'); + $this->assertEqual($formula->evaluate(), 2); + + $formula = new calc_formula('=round(-1.49)'); + $this->assertEqual($formula->evaluate(), -1); + + $formula = new calc_formula('=round(-2.49)'); + $this->assertEqual($formula->evaluate(), -2); + + $formula = new calc_formula('=round(-1.5)'); + $this->assertEqual($formula->evaluate(), -2); + + $formula = new calc_formula('=round(-2.5)'); + $this->assertEqual($formula->evaluate(), -3); + + + $formula = new calc_formula('=ceil(2.5)'); + $this->assertEqual($formula->evaluate(), 3); + + $formula = new calc_formula('=ceil(1.5)'); + $this->assertEqual($formula->evaluate(), 2); + + $formula = new calc_formula('=ceil(-1.49)'); + $this->assertEqual($formula->evaluate(), -1); + + $formula = new calc_formula('=ceil(-2.49)'); + $this->assertEqual($formula->evaluate(), -2); + + $formula = new calc_formula('=ceil(-1.5)'); + $this->assertEqual($formula->evaluate(), -1); + + $formula = new calc_formula('=ceil(-2.5)'); + $this->assertEqual($formula->evaluate(), -2); + + + $formula = new calc_formula('=floor(2.5)'); + $this->assertEqual($formula->evaluate(), 2); + + $formula = new calc_formula('=floor(1.5)'); + $this->assertEqual($formula->evaluate(), 1); + + $formula = new calc_formula('=floor(-1.49)'); + $this->assertEqual($formula->evaluate(), -2); + + $formula = new calc_formula('=floor(-2.49)'); + $this->assertEqual($formula->evaluate(), -3); + + $formula = new calc_formula('=floor(-1.5)'); + $this->assertEqual($formula->evaluate(), -2); + + $formula = new calc_formula('=floor(-2.5)'); + $this->assertEqual($formula->evaluate(), -3); + + } + }