public void TestOperators() { SpiceExpression e = new SpiceExpression(); string[] tests = new string[] { // Basic operators "2.345 + 2.5u", "2.345 - 2.5u", "-1.5u * 3k", "20meg / 1.9u", "10 % 3", "101 < 101", "101 <= 101", "102 > 101", "102 >= 101", "101u == 101e-6", "1 == 0", "101u != 101e-6", "1 != 0", "1 || 0", "0 || 0", "1 && 0", "1 && 1", "1.0 ? -1.0 : 2.0" }; double[] results = new double[] { 2.345 + 2.5e-6, 2.345 - 2.5e-6, -1.5e-6 * 3e3, 20e6 / 1.9e-6, 10 % 3, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, -1.0 }; RunTests(tests, results); }
/// <summary> /// Run a series of expressions /// </summary> /// <param name="tests">Expressions</param> /// <param name="results">Expected results</param> private void RunTests(string[] tests, double[] results) { SpiceExpression e = new SpiceExpression(); // Run tests for (int i = 0; i < tests.Length; i++) { double c = e.Parse(tests[i]); double error = c - results[i]; if (results[i] != 0.0) { error /= results[i]; } Assert.AreEqual(error, 0.0, Tolerance); } }
public void TestPrecedence() { SpiceExpression e = new SpiceExpression(); string[] tests = new string[] { "1 + 2 * 3", "1 - 2 / 3", "2 / 3 / 4", "1 ? 2 ? 3 : 4 : 5 ? 6 : 7", "1 ? 2 > 3 : 4", "(1 + 2) * 3", "10.5g / ((1m + 2) / (10u - 2))" }; double[] results = new double[] { 1.0 + 2.0 * 3.0, 1.0 - 2.0 / 3.0, 2.0 / 3.0 / 4.0, true ? true ? 3 : 4 : true ? 6 : 7, 0.0, 9.0, 10.5e9 / ((1e-3 + 2) / (10e-6 - 2)) }; RunTests(tests, results); }