Exemplo n.º 1
0
    def testLambda_call_expand_argument(self):
        """Arguments are expanded before the call method is executed.
        """
        # Makes an instance of Lambda.
        forms = Parser.parse('((x) (* x x x))')
        lambda_func = Lambda(forms,
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Define macro.
        forms = Parser.parse('(defmacro cube (x) `(* ,x ,x ,x))')
        exp = Expander.expand(forms,
                              PackageManager.current_package.env['VARIABLE'],
                              PackageManager.current_package.env['FUNCTION'],
                              PackageManager.current_package.env['MACRO'])
        Evaluator.eval(exp, PackageManager.current_package.env['VARIABLE'],
                       PackageManager.current_package.env['FUNCTION'],
                       PackageManager.current_package.env['MACRO'])

        # Checks call.
        retval = lambda_func(
            Parser.parse('((cube 2))'),  # an argument is expression.
            PackageManager.current_package.env['VARIABLE'],
            PackageManager.current_package.env['FUNCTION'],
            PackageManager.current_package.env['MACRO'])

        # Checks return value.
        self.assertTrue(retval, Integer(512))
Exemplo n.º 2
0
    def testLambda_call_keyword_argument_with_default_value(self):
        """Checks assigning keyword arguments.
        """
        # Makes an instance of Lmabda.
        forms = Parser.parse('((x &key (y t)) (if y (* x x) (* x x x))))')
        lambda_func = Lambda(forms,
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Checks call.

        # When a keyword argumet is not given, Null() is set to an argument.
        retval = lambda_func(Parser.parse('(2)'),
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # retval is result of (* x x x).
        self.assertTrue(retval is Integer(4))

        # When an keyword argumet is given, this is set to an argument.
        retval = lambda_func(Parser.parse('(2 :y nil)'),
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # retval is result of (* x x).
        self.assertTrue(retval is Integer(8))
Exemplo n.º 3
0
    def testLambda_call_optional_argument(self):
        """Checks assigning optinal arguments.
        """
        # Makes an instance of Lmabda.
        forms = Parser.parse('((x &optional y) (if y (* x x) (* x x x))))')
        lambda_func = Lambda(forms,
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Checks call.

        # When an optional argumet is not given, Null() is set to an argument.
        retval = lambda_func(Parser.parse('(2)'),
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # retval is result of (* x x x).
        self.assertTrue(retval is Integer(8))

        # When an optional argumet is given, this is set to an argument.
        retval = lambda_func(Parser.parse('(2 t)'),
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # retval is result of (* x x).
        self.assertTrue(retval is Integer(4))
Exemplo n.º 4
0
    def testLambda_properties(self):
        """Checks object properties. Properties are as follow,

            self.params: Parameters.
            self.forms: Body (forms).
            self.var_env: Lexical variable environment.
            self.func_env: Lexical function environment.
            self.macro_env: Lexical macro environment.
        """
        # makes an instance of Lmabda.
        forms = Parser.parse('((x) (* x x x))')
        lambda_func = Lambda(forms,
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Checks properties.

        # Checks lambda_func.params.
        self.assertEqual(lambda_func.params, ['X'])

        # Checks lambda_func.forms.
        self.assertEqual(str(lambda_func.forms), '(* X X X)')

        # Checks lambda_func lexical scope.
        self.assertTrue(lambda_func.var_env is
                        PackageManager.current_package.env['VARIABLE'])
        self.assertTrue(lambda_func.func_env is
                        PackageManager.current_package.env['FUNCTION'])
        self.assertTrue(lambda_func.macro_env is
                        PackageManager.current_package.env['MACRO'])
Exemplo n.º 5
0
    def test_read(self):
        # test only EOF
        in_port = InPort(io.StringIO(''))
        eof = Parser._read(in_port)

        self.assertIsInstance(eof, Symbol)
        self.assertEqual(eof, Parser.eof_object)
Exemplo n.º 6
0
    def testLambdaSystemFunction_call(self):
        # Makes an instance of LambdaSytemFunction.
        forms = Parser.parse('((x) (* x x x))')
        lambda_func = Lambda(forms,
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Executes lambda function.
        retval = lambda_func(Parser.parse("(2)"),
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Checks return value.
        # exp is (* x x x) and arg is 2, so retval must be Integer(8).
        self.assertEqual(retval, Integer(8))
Exemplo n.º 7
0
    def test_tokenize(self):
        in_port = InPort(io.StringIO('(list 1 2.3 "string")'))
        token = in_port.next_token()
        token_list = Parser._read_ahead(token, in_port)

        self.assertIsInstance(token_list[0], Symbol)
        self.assertIsInstance(token_list[1], Integer)
        self.assertIsInstance(token_list[2], SingleFloat)
        self.assertIsInstance(token_list[3], String)
Exemplo n.º 8
0
    def test_atom(self):
        self.assertIsInstance(Parser._convert_to_atom('"string"'), String)
        self.assertIsInstance(Parser._convert_to_atom('1'), Integer)
        self.assertIsInstance(Parser._convert_to_atom('2.3'), SingleFloat)
        self.assertIsInstance(Parser._convert_to_atom('symbol'), Symbol)

        # check values
        self.assertEqual(Parser._convert_to_atom('"string"').value, 'string')
        self.assertEqual(Parser._convert_to_atom('1').value, np.int(1))
        self.assertEqual(Parser._convert_to_atom('2.3').value, np.float32(2.3))
        self.assertEqual(Parser._convert_to_atom('symbol').value, 'SYMBOL')
Exemplo n.º 9
0
    def testLambda_call_evaluate_argument(self):
        """Arguments are evaluated before the call method is executed.
        """
        # Makes an instance of Lambda.
        forms = Parser.parse('((x) (* x x x))')
        lambda_func = Lambda(forms,
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Checks call.
        retval = lambda_func(
            Parser.parse('((* 2 2 2))'),  # an argument is expression.
            PackageManager.current_package.env['VARIABLE'],
            PackageManager.current_package.env['FUNCTION'],
            PackageManager.current_package.env['MACRO'])

        # Checks return value.
        self.assertTrue(retval, Integer(512))
Exemplo n.º 10
0
    def testLambda_call(self):
        """Checks call method of Lambda. The body of Lmabda is expanded
        and executed when the method is called.
        """
        # Makes an instance of Lambda.
        forms = Parser.parse('((x) (* x x x))')
        lambda_func = Lambda(forms,
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Checks call.
        retval = lambda_func(Parser.parse('(2)'),
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Checks return value.
        self.assertTrue(retval, Integer(8))
Exemplo n.º 11
0
    def testLambdaSystemFunction(self):
        # Makes an instance of LambdaSytemFunction.
        forms = Parser.parse('((x) (* x x x))')
        lambda_func = Lambda(forms,
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Checks official representation.
        self.assertRegex(str(lambda_func), r"#<FUNCTION LAMBDA \{[0-9A-Z]+\}>")
Exemplo n.º 12
0
    def test_tokenize_sharpquote(self):
        in_port = InPort(io.StringIO("#'+"))
        token = in_port.next_token()
        token_list = Parser._read_ahead(token, in_port)

        # token_list must be [FUNCTION +]

        self.assertIsInstance(token_list[0], Symbol)
        self.assertTrue(token_list[0] is Symbol('FUNCTION'))

        self.assertIsInstance(token_list[1], Symbol)
Exemplo n.º 13
0
    def testLambda_call_rest_argument(self):
        """Checks assigning rest arguments.
        """
        # Makes an instance of Lmabda.
        forms = Parser.parse('((x &rest y) (cons x y))')
        lambda_func = Lambda(forms,
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Checks call.

        # When an optional argumet is not given, Null() is set to an argument.
        retval = lambda_func(Parser.parse('(1 2 3 4 5)'),
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # retval is result of being given &rest parameter.
        self.assertEqual(str(retval), '(1 2 3 4 5)')
Exemplo n.º 14
0
    def testEqSystemFunction_call_nil(self):
        # Make an instance of EqSystemFunction.
        eq = EqSystemFunction()

        # If args are not the same objects, eq return nil.
        forms = Parser.parse('(1 1.0)')
        retval = eq(forms, PackageManager.current_package.env['VARIABLE'],
                    PackageManager.current_package.env['FUNCTION'],
                    PackageManager.current_package.env['MACRO'])

        # Checks return value.
        self.assertEqual(retval, Null())
Exemplo n.º 15
0
    def testEqSystemFunction_call_cons(self):
        # Make an instance of EqSystemFunction.
        eq = EqSystemFunction()

        # If args are cons, eq return nil because cons returns a different object.
        forms = Parser.parse('((cons 1 1) (cons 1 1))')
        retval = eq(forms, PackageManager.current_package.env['VARIABLE'],
                    PackageManager.current_package.env['FUNCTION'],
                    PackageManager.current_package.env['MACRO'])

        # Checks return value
        self.assertEqual(retval, Null())
Exemplo n.º 16
0
    def testConsSystemFunction_call(self):
        # Makes an instance of CdrSystemFunction.
        cdr = CdrSystemFunction()

        # Calls cdr.
        forms = Parser.parse("('(1 2))")
        retval = cdr(forms, PackageManager.current_package.env['VARIABLE'],
                     PackageManager.current_package.env['FUNCTION'],
                     PackageManager.current_package.env['MACRO'])

        # Chesk return value.
        self.assertEqual(str(retval), '(2)')
Exemplo n.º 17
0
    def testMulSystemFunction_call(self):
        # Makes an instance of MulSystemFunction.
        mul = MulSystemFunction()

        # Calls mul.
        forms = Parser.parse('(1 2 3)')
        retval = mul(forms, PackageManager.current_package.env['VARIABLE'],
                     PackageManager.current_package.env['FUNCTION'],
                     PackageManager.current_package.env['MACRO'])

        # Chesk return value.
        self.assertEqual(retval, Integer(6))
Exemplo n.º 18
0
    def testSubSystemFunction_call(self):
        # Makes an instance of SubSystemFunction.
        sub = SubSystemFunction()

        # Calls sub.
        forms = Parser.parse('(1 2 3)')
        retval = sub(forms, PackageManager.current_package.env['VARIABLE'],
                     PackageManager.current_package.env['FUNCTION'],
                     PackageManager.current_package.env['MACRO'])

        # Chesk return value.
        self.assertEqual(retval, Integer(-4))
Exemplo n.º 19
0
    def testAppendSystemFunction_call_dotted_list(self):
        # Makes an instance of AppendSystemFunction.
        append = AppendSystemFunction()

        # Calls append.
        forms = Parser.parse("('(1 2) 3)")
        retval = append(forms, PackageManager.current_package.env['VARIABLE'],
                        PackageManager.current_package.env['FUNCTION'],
                        PackageManager.current_package.env['MACRO'])

        # Chesk return value.
        self.assertEqual(str(retval), '(1 2 . 3)')
Exemplo n.º 20
0
    def testListSystemFunction_call(self):
        # Makes an instance of ListSystemFunction.
        lst = ListSystemFunction()

        # Calls list.
        forms = Parser.parse("(3 4 'a (car '(b . c)) (+ 6 -2))")
        retval = lst(forms, PackageManager.current_package.env['VARIABLE'],
                     PackageManager.current_package.env['FUNCTION'],
                     PackageManager.current_package.env['MACRO'])

        # Chesk return value.
        self.assertEqual(str(retval), '(3 4 A B 4)')
Exemplo n.º 21
0
    def testExpanderUnitTestCase_expand_atom(self):
        # Sets atom.
        forms = Parser.parse('3.14')

        # Expand forms.
        forms = Expander.expand(forms,
                                PackageManager.current_package.env['VARIABLE'],
                                PackageManager.current_package.env['FUNCTION'],
                                PackageManager.current_package.env['MACRO'])

        # Checks forms.
        self.assertEqual(forms, SingleFloat(3.14))
Exemplo n.º 22
0
    def testMulSystemFunction_call(self):
        # Makes an instance of DivSystemFunction.
        div = DivSystemFunction()

        # Calls cons.
        forms = Parser.parse('(1 2 3)')
        retval = div(forms, PackageManager.current_package.env['VARIABLE'],
                     PackageManager.current_package.env['FUNCTION'],
                     PackageManager.current_package.env['MACRO'])

        # Chesk return value.
        self.assertEqual(retval, Ratio('1/6'))
Exemplo n.º 23
0
    def test_tokenize_backquote(self):
        in_port = InPort(io.StringIO("`(+ 1 2.3)"))
        token = in_port.next_token()
        token_list = Parser._read_ahead(token, in_port)

        # token_list must be [BACKQUOTE, [+, 1, 2.3]]

        self.assertIsInstance(token_list[0], Symbol)
        self.assertTrue(token_list[0] is Symbol('BACKQUOTE'))

        self.assertIsInstance(token_list[1][0], Symbol)
        self.assertIsInstance(token_list[1][1], Integer)
        self.assertIsInstance(token_list[1][2], SingleFloat)
Exemplo n.º 24
0
    def testUsePackageSystemFunction_call(self):
        # Makes an instance of UsePackageSystemFunction.
        use_package = UsePackageSystemFunction()

        # Calls use_package.
        forms = Parser.parse("('COMMON-LISP 'COMMON-LISP-USER)")
        retval = use_package(forms,
                             PackageManager.current_package.env['VARIABLE'],
                             PackageManager.current_package.env['FUNCTION'],
                             PackageManager.current_package.env['MACRO'])

        # Checks return value.
        self.assertEqual(retval, T())
Exemplo n.º 25
0
    def testNumericalEqualSystemFunction_call_false_case(self):
        # Makes an instance of NumericalEqualSystemFunction.
        numerical_equal = NumericalEqualSystemFunction()

        # Calls numerical_euqal, false case.
        forms = Parser.parse('(1 2 3 4 5)')
        retval = numerical_equal(
            forms, PackageManager.current_package.env['VARIABLE'],
            PackageManager.current_package.env['FUNCTION'],
            PackageManager.current_package.env['MACRO'])

        # Checks return value.
        self.assertEqual(retval, Null())
Exemplo n.º 26
0
    def testQuitSystemFunction_call(self):
        # Import Interrupt exception class form clispy.interpreter.
        from clispy.interpreter import Interrupt

        # Makes an instance of QuitSystemFunction.
        quit_ = QuitSystemFunction()

        # Checks raise exception.
        with self.assertRaises(Interrupt):
            quit_(Parser.parse('()'),
                  PackageManager.current_package.env['VARIABLE'],
                  PackageManager.current_package.env['FUNCTION'],
                  PackageManager.current_package.env['MACRO'])
Exemplo n.º 27
0
    def testInternSystemFunction_call(self):
        # Make an instance of InternSystemFunction.
        intern_ = InternSystemFunction()

        # Calls intern_.
        forms = Parser.parse('("G1")')
        retval = intern_(forms, PackageManager.current_package.env['VARIABLE'],
                         PackageManager.current_package.env['FUNCTION'],
                         PackageManager.current_package.env['MACRO'])

        # Chesk return value.
        self.assertEqual(retval[0], Symbol('G1'))
        self.assertEqual(retval[1], Null())

        # Second calls intern_.
        forms = Parser.parse('("G1")')
        retval = intern_(forms, PackageManager.current_package.env['VARIABLE'],
                         PackageManager.current_package.env['FUNCTION'],
                         PackageManager.current_package.env['MACRO'])

        # Chesk second return value.
        self.assertEqual(retval[0], Symbol('G1'))
        self.assertEqual(retval[1], Keyword(':INTERNAL'))
Exemplo n.º 28
0
    def testNumericalNotEqualSystemFunction_call_true_case(self):
        """Makes an instance of NumeciralNotEqualSystemFunction.
        """
        numerical_not_equal = NumericalNotEqualSystemFunction()

        # Calls numerical_not_euqal, true case.
        forms = Parser.parse('(1 2 3 4 5)')
        retval = numerical_not_equal(
            forms, PackageManager.current_package.env['VARIABLE'],
            PackageManager.current_package.env['FUNCTION'],
            PackageManager.current_package.env['MACRO'])

        # Checks return value.
        self.assertEqual(retval, T())
Exemplo n.º 29
0
    def testLessThanEqualSystemFunction_call_false_case(self):
        """Makes an instance of LessThanEqualSystemFunction.
        """
        less_than_equal = LessThanEqualSystemFunction()

        # Calls less_than_equal, false case.
        forms = Parser.parse('(1 2 1 4 5)')
        retval = less_than_equal(
            forms, PackageManager.current_package.env['VARIABLE'],
            PackageManager.current_package.env['FUNCTION'],
            PackageManager.current_package.env['MACRO'])

        # Checks return value.
        self.assertEqual(retval, Null())
Exemplo n.º 30
0
    def testGreaterThanEqualSystemFunction_call_false_case(self):
        """Makes an instance of GreaterThanEqualSystemFunction.
        """
        greater_than_equal = GreaterThanEqualSystemFunction()

        # Calls greater_than_equal, false case.
        forms = Parser.parse('(5 4 5 2 1)')
        retval = greater_than_equal(
            forms, PackageManager.current_package.env['VARIABLE'],
            PackageManager.current_package.env['FUNCTION'],
            PackageManager.current_package.env['MACRO'])

        # Checks return value.
        self.assertEqual(retval, Null())