Skip to content

Commit

Permalink
MDL-9643 mathslib.php library, unit tests, removed e and pi constants
Browse files Browse the repository at this point in the history
  • Loading branch information
skodak committed May 25, 2007
1 parent 2d53fa5 commit ffaa6c4
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 4 deletions.
5 changes: 1 addition & 4 deletions lib/evalmath/evalmath.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ class EvalMath {
var $suppress_errors = false;
var $last_error = null;

var $v = array('e'=>2.71,'pi'=>3.14); // variables (and constants)
var $v = array(); // variables (and constants)
var $f = array(); // user-defined functions
var $vb = array('e', 'pi'); // constants
var $fb = array( // built-in functions
Expand All @@ -104,9 +104,6 @@ class EvalMath {
'sum'=>array(-1), 'pi'=>array(0), 'power'=>array(2), 'round'=>array(2,1), 'average'=>array(-1));

function EvalMath() {
// make the variables a little more accurate
$this->v['pi'] = pi();
$this->v['e'] = exp(1);
}

function e($expr) {
Expand Down
1 change: 1 addition & 0 deletions lib/evalmath/readme_moodle.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
57 changes: 57 additions & 0 deletions lib/mathslib.php
Original file line number Diff line number Diff line change
@@ -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;
}
}

?>
56 changes: 56 additions & 0 deletions lib/simpletest/testmathslib.php
Original file line number Diff line number Diff line change
@@ -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');
}

}

?>

0 comments on commit ffaa6c4

Please sign in to comment.