package edu.stanford.rsl.conrad.numerics.test;
import edu.stanford.rsl.conrad.numerics.mathexpressions.Evaluator;
/**
* Class for testing the accuracy of expressions class
* @author Rotimi X Ojo
*
*/
public class TestExpressions {
public static void main(String [] args){
System.out.println("Evaluating Mathematical Expressions Class:");
int maxNum = 100;
int x = (int)Math.random() * maxNum;
int y = (int)Math.random() * maxNum;
assert(Evaluator.getValue(x + "+" +y) == x + y );
assert(Evaluator.getValue(x + "-" +y)== x - y);
assert(Evaluator.getValue(y + "-" +x)== y - x);
System.out.println("\tForm [int +/- int] is accurate");
x = (int)Math.random() * maxNum;
y = (int)Math.random() * maxNum;
assert(Evaluator.getValue("((("+x + "+" +y+")))") == x + y);
assert(Evaluator.getValue("((("+x + "-" +y+")))")== x - y);
assert(Evaluator.getValue("((("+y + "-" +x+")))")== y - x);
System.out.println("\tForm [(((int +/- int)))] is accurate");
double a = Math.random() * maxNum;
double b = Math.random() * maxNum;
assert(Evaluator.getValue("((("+a + "+" +b+")))") == a + b);
assert(Evaluator.getValue("((("+a + "-" +b+")))")== a - b);
assert(Evaluator.getValue("((("+b + "-" +a+")))")== b - a);
System.out.println("\tForm [double +/- double] is accurate");
x = 1 + (int)Math.random() * maxNum;
y = 1 + (int)Math.random() * maxNum;
assert(Evaluator.getValue("((("+x + "*" +y+")))") == x*y);
assert(Evaluator.getValue("((("+x + "/" +y+")))")== x/(double)y);
assert(Evaluator.getValue("((("+y + "/" +x+")))")== y/(double)x);
System.out.println("\tForm [int * or / int] is accurate");
a = 0.1+Math.random() * maxNum;
b = 0.1+Math.random() * maxNum;
assert(Evaluator.getValue("((("+a + "*" +b+")))") == a*b);
assert(Evaluator.getValue("((("+a + "/" +b+")))")== a/b);
assert(Evaluator.getValue("((("+b + "/" +a+")))")== b/a);
System.out.println("\tForm [(((double * or / double)))] is accurate");
double m = 0.1 + Math.random() * maxNum;
double n = 0.1 + Math.random() * maxNum;
double o = 1 + Math.random() * maxNum;
assert(Evaluator.getValue("(" + m + "+" + n + ")*"+ o) == (m + n)* o);
assert(Evaluator.getValue(o +"*(" + m + "+" + n + ")")== o*(m + n));
assert(Evaluator.getValue(o+"/(" + m + "+" + n + ")")== o/(m+n));
System.out.println("\tForm [(var op var) op var and var op(var op var)] is accurate");
//
m = 0.1 + Math.random() * maxNum;
n = 0.1 + Math.random() * maxNum;
o = 0.1 + Math.random() * maxNum;
double p = 0.1 + Math.random() * maxNum;
assert(Evaluator.getValue("((" + m +"+" + n+")*"+ o +")+"+ p ) == ((m + n)* o)+ p);
assert(Evaluator.getValue("((" +m + "*(" +n + "+" + o +")))/" +p)== ((m*(n + o)))/p);
assert(Evaluator.getValue(m +"/(("+n+"+"+o+")/" +p+")")== m/((n+o)/p));
System.out.println("\tForm [((var op var) op var) op var and (var op(var op var)) op var] is accurate");
m = 0.1 + Math.random() * maxNum;
n = 0.1 + Math.random() * maxNum;
o = 0.1 + Math.random() * maxNum;
assert(Evaluator.getValue("(" +m + "+" + "sqrt("+n +"))*"+ o) == (m + Math.sqrt(n))* o);
assert(Evaluator.getValue("sin(" +m + ")*(" +n +" + cos("+o+"))")== Math.sin(m)*(n + Math.cos(o)));
assert(Evaluator.getValue("("+m+"+"+n +")/sqrt("+o+")")== (m + n)/Math.sqrt(o) );
assert(Evaluator.getValue(m+"/("+n +"*tan("+o+"))") == m/(n*Math.tan(o)));
System.out.println("\tForm [(var op func) op var and func op(func op var)] is accurate");
System.out.println("Test Complete");
}
}
/*
* Copyright (C) 2010-2014 Rotimi X Ojo
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/