Example #1
0
class test_environment(TestCase):
    def setUp(self):
        self.env = Environment()

    def set_namespace(self, namespace):
        self.env.namespace = namespace

    def assert_eval_results(self, inp, outp):
        result = self.env.eval(inp)
        self.assertEqual(outp, result)

    def test_eval_numerical_primitive(self):
        self.assert_eval_results(INT_VAL_EXPR, INT_VAL)

    def test_eval_numerical_float_primitive(self):
        self.assert_eval_results(FLOAT_VAL_EXPR, FLOAT_VAL)

    def test_eval_variable(self):
        self.set_namespace({VAL1: NUMERIC_VAL})
        self.assert_eval_results(VAL1_EXPR, NUMERIC_VAL)

    def test_eval_function(self):
        self.set_namespace({ADD: add})
        self.assert_eval_results(ADD_EXPR, add)

    def test_eval_combination(self):
        self.set_namespace({ADD: BuiltinProcedure(add), VAL1: 123})
        self.assert_eval_results(E([ADD_EXPR, VAL1_EXPR, E(456, CT)], C),
                                 579)

    def test_eval_nested_combination(self):
        self.set_namespace({ADD: BuiltinProcedure(add), VAL1: 123})
        self.assert_eval_results(E([ADD_EXPR, VAL1_EXPR,
                                    E([ADD_EXPR, E(1, CT), E(2, CT)], C)], C),
                                 126)

    def test_eval_special_form(self):
        self.env = Environment(special_forms={SPEC_FORM_NAME: lambda x: x[0]})
        self.assert_eval_results(E([SPEC_FORM_NAME_EXPR, PM1_EXPR], C),
                                 PM1_EXPR)

    def test_eval_defined_procedure(self):
        self.set_namespace({ADD: BuiltinProcedure(add),
                            PROC_NAME: Procedure(
                    [E([ADD_EXPR, PM1_EXPR, PM2_EXPR], C)],
                    parameters=[PM1, PM2])})
        self.assert_eval_results(E([PROC_NAME_EXPR, E(1, CT), E(2, CT)], C),
                                 3)

    def test_eval_nested_defined_procedure(self):
        self.set_namespace({ADD: BuiltinProcedure(add),
                            PROC_NAME: Procedure(
                    [E([ADD_EXPR, PM1_EXPR,
                        E([ADD_EXPR, E(20, CT), PM2_EXPR], C)], C)],
                    parameters=[PM1, PM2])})
        self.assert_eval_results(E([PROC_NAME_EXPR, E(1, CT), E(2, CT)], C),
                                 23)

    def test_eval_symbol_not_found_raises_error(self):
        self.assertRaises(SymbolError, self.env.eval, E('foo'))
Example #2
0
def run_session(filename):
    """Run session test.

    Output summary to stdout and return True if all test pass,
    otherwise return False."""

    env = Environment(namespace=Builtins.namespace())
    num_tests, num_passed = 0, 0
    with open(filename) as f:
        input_expression = ""
        # Iterate over non-blank lines
        for line in ifilter(None, imap(str.strip, f)):
            if line.startswith(';'):
                continue
            elif line.startswith('> '):
                # Lines are stripped, so add a space to get whitespace
                # between the lines.
                input_expression += " " + line[2:]
            elif input_expression:
                # We got a line not starting with '> ', this is the
                # expected result from the preceding input expression
                num_tests += 1

                parser = Parser(StringIO.StringIO(input_expression))
                for expr in parser.expressions():
                    result = env.eval(expr)
                    result = repr(result) if result is not None else ''

                expected = line.rstrip('\n')
                if result != expected:
                    print 'Failure: "%s" != "%s"' % (result, expected)
                else:
                    num_passed += 1
                input_expression = ""
            else:
                # If we got a non-empty line without an input
                # expression something is wrong
                print 'Unexpected line: "%s"' % line
    print "{:20} Ran {} tests, {} passed".format(os.path.basename(filename),
                                                 num_tests, num_passed)
    return num_tests == num_passed
Example #3
0
 def test_eval_special_form(self):
     self.env = Environment(special_forms={SPEC_FORM_NAME: lambda x: x[0]})
     self.assert_eval_results(E([SPEC_FORM_NAME_EXPR, PM1_EXPR], C),
                              PM1_EXPR)
Example #4
0
 def setUp(self):
     self.env = Environment()