示例#1
0
        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);
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        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);
        }