Esempio 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))
Esempio 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))
Esempio 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))
Esempio 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'])
Esempio 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)
Esempio 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))
Esempio 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)
Esempio 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')
Esempio 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))
Esempio 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))
Esempio 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]+\}>")
Esempio 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)
Esempio 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)')
Esempio 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())
Esempio 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())
Esempio 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)')
Esempio 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))
Esempio 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))
Esempio 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)')
Esempio 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)')
Esempio 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))
Esempio 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'))
Esempio 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)
Esempio 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())
Esempio 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())
Esempio 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'])
Esempio 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'))
Esempio 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())
Esempio 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())
Esempio 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())