]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-9643 mathslib.php library, unit tests, removed e and pi constants
authorskodak <skodak>
Fri, 25 May 2007 06:50:09 +0000 (06:50 +0000)
committerskodak <skodak>
Fri, 25 May 2007 06:50:09 +0000 (06:50 +0000)
lib/evalmath/evalmath.class.php
lib/evalmath/readme_moodle.txt
lib/mathslib.php [new file with mode: 0644]
lib/simpletest/testmathslib.php [new file with mode: 0755]

index f689e2840d4acadfc182a4d979353d779208a071..2270d626e01f6689ed4c9bf5ac71727ff0ab1bdd 100644 (file)
@@ -91,7 +91,7 @@ class EvalMath {
     var $suppress_errors = false;\r
     var $last_error = null;\r
     \r
-    var $v = array('e'=>2.71,'pi'=>3.14); // variables (and constants)\r
+    var $v = array(); // variables (and constants)\r
     var $f = array(); // user-defined functions\r
     var $vb = array('e', 'pi'); // constants\r
     var $fb = array(  // built-in functions\r
@@ -104,9 +104,6 @@ class EvalMath {
         'sum'=>array(-1), 'pi'=>array(0), 'power'=>array(2), 'round'=>array(2,1), 'average'=>array(-1));\r
     \r
     function EvalMath() {\r
-        // make the variables a little more accurate\r
-        $this->v['pi'] = pi();\r
-        $this->v['e'] = exp(1);\r
     }\r
     \r
     function e($expr) {\r
index 20301333d054ef6cc51303fa46c3bd5c0ce79b5f..00bc223824e8e73ed9eb3805f7c5d9ac315086ef 100644 (file)
@@ -3,6 +3,7 @@ Description of MathEval library import into Moodle
 Our changes:
 * implicit multiplication not allowed
 * new custom calc emulation functions
+* removed e and pi constants - not use din calc
 
 To see all changes diff against version 1.1
 
diff --git a/lib/mathslib.php b/lib/mathslib.php
new file mode 100644 (file)
index 0000000..fa4f7ab
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+require_once $CFG->dirroot.'/lib/evalmath/evalmath.class.php';
+
+class calc_formula {
+
+    var $em;
+    var $nfx = false;
+    var $error = false;
+
+    function calc_formula($formula, $params=false) {
+        $this->em = new EvalMath();
+        $this->em->suppress_errors = true;
+        if (strpos($formula, '=') !== 0) {
+            $this->error = "missing '='";
+            return;
+        }
+        $formula = substr($formula, 1);
+        if (strpos($formula, '=') !== false) {
+            $this->error = "too many '='";
+            return;
+        }
+        $this->nfx = $this->em->nfx($formula);
+        if ($this->nfx == false) {
+            $this->error = $this->em->last_error;
+            return;
+        }
+        if ($params != false) {
+            $this->em->v = $params;
+        }
+    }
+
+    function set_params($params) {
+        $this->em->v = $params;
+    }
+
+    function evaluate() {
+        if ($this->nfx == false) {
+            return false;
+        }
+        $res = $this->em->pfx($this->nfx);
+        if ($res === false) {
+            $this->error = $this->em->last_error;
+            return false;
+        } else {
+            $this->error = false;
+            return $res;
+        }
+
+    }
+
+    function get_error() {
+        return $this->error;
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/lib/simpletest/testmathslib.php b/lib/simpletest/testmathslib.php
new file mode 100755 (executable)
index 0000000..541a3f9
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+
+/* $Id$ */
+
+if (!defined('MOODLE_INTERNAL')) {
+    die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
+}
+
+global $CFG;
+require_once($CFG->libdir . '/simpletestlib.php');
+require_once($CFG->libdir . '/mathslib.php');
+
+class mathsslib_test extends UnitTestCase {
+
+    /**
+     * Tests the basic formula execition
+     */
+    function test__basic() {
+        $calc = new calc_formula('=1+2');
+        $res = $calc->evaluate();
+        $this->assertEqual($res, 3, '3+1 is: %s');
+    }
+
+    /**
+     * Tests the formula params
+     */
+    function test__params() {
+        $calc = new calc_formula('=a+b+c', array('a'=>10,'b'=>20,'c'=>30));
+        $res = $calc->evaluate();
+        $this->assertEqual($res, 60, '10+20+30 is: %s');
+    }
+
+    /**
+     * Tests the formula params
+     */
+    function test__calc_function() {
+        $calc = new calc_formula('=sum(a,b,c)', array('a'=>10,'b'=>20,'c'=>30));
+        $res = $calc->evaluate();
+        $this->assertEqual($res, 60, 'sum(a,b,c) is: %s');
+    }
+
+    /**
+     * Tests the formula changed params
+     */
+    function test__changing_params() {
+        $calc = new calc_formula('=a+b+c', array('a'=>10,'b'=>20,'c'=>30));
+        $res = $calc->evaluate();
+        $this->assertEqual($res, 60, '10+20+30 is: %s');
+        $calc->set_params(array('a'=>1,'b'=>2,'c'=>3));
+        $res = $calc->evaluate();
+        $this->assertEqual($res, 6, '1+2+3 is: %s');
+    }
+
+}
+
+?>
\ No newline at end of file