Esempio n. 1
0
    def test_op_or(self):
        lexer = Lexer('||')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_OR, lexer.tokens[0].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 2
0
    def test_op_le(self):
        lexer = Lexer('<=')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_LE, lexer.tokens[0].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 3
0
    def test_op_and(self):
        lexer = Lexer('&&')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_AND, lexer.tokens[0].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 4
0
    def test_single_comment(self):
        lexer = Lexer('+ // test + test - test')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_PLUS, lexer.tokens[0].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 5
0
    def test_op_mod(self):
        lexer = Lexer('%')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_MOD, lexer.tokens[0].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 6
0
    def test_op_plus(self):
        lexer = Lexer('+')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_PLUS, lexer.tokens[0].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 7
0
    def test_op_minus(self):
        lexer = Lexer('-')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_MINUS, lexer.tokens[0].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 8
0
    def test_i_fun_declaration(self):
        lexer = Lexer('fun add(int x[], int y) => int {\nret x[0] + y;\n}')

        lexer.lex_all()

        self.assertEqual(TokenType.KW_FUN, lexer.tokens[0].type)
        self.assertEqual(TokenType.IDENTIFIER, lexer.tokens[1].type)
        self.assertEqual(TokenType.C_ROUND_L, lexer.tokens[2].type)
        self.assertEqual(TokenType.PRIMITIVE_INT, lexer.tokens[3].type)
        self.assertEqual(TokenType.IDENTIFIER, lexer.tokens[4].type)
        self.assertEqual(TokenType.C_SQUARE_L, lexer.tokens[5].type)
        self.assertEqual(TokenType.C_SQUARE_R, lexer.tokens[6].type)
        self.assertEqual(TokenType.C_COMMA, lexer.tokens[7].type)
        self.assertEqual(TokenType.PRIMITIVE_INT, lexer.tokens[8].type)
        self.assertEqual(TokenType.IDENTIFIER, lexer.tokens[9].type)
        self.assertEqual(TokenType.C_ROUND_R, lexer.tokens[10].type)
        self.assertEqual(TokenType.KW_FAT_ARROW, lexer.tokens[11].type)
        self.assertEqual(TokenType.PRIMITIVE_INT, lexer.tokens[12].type)
        self.assertEqual(TokenType.C_CURLY_L, lexer.tokens[13].type)
        self.assertEqual(TokenType.KW_RETURN, lexer.tokens[14].type)
        self.assertEqual(TokenType.IDENTIFIER, lexer.tokens[15].type)
        self.assertEqual(TokenType.C_SQUARE_L, lexer.tokens[16].type)
        self.assertEqual(TokenType.LIT_INT, lexer.tokens[17].type)
        self.assertEqual(TokenType.C_SQUARE_R, lexer.tokens[18].type)
        self.assertEqual(TokenType.OP_PLUS, lexer.tokens[19].type)
        self.assertEqual(TokenType.IDENTIFIER, lexer.tokens[20].type)
        self.assertEqual(TokenType.C_SEMI, lexer.tokens[21].type)
        self.assertEqual(TokenType.C_CURLY_R, lexer.tokens[22].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[23].type)
Esempio n. 9
0
    def test_op_pov(self):
        lexer = Lexer('^')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_POV, lexer.tokens[0].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 10
0
    def test_file_name_is_set(self):
        lexer = Lexer('2 + 2', 'main.f12')

        lexer.lex_all()

        for t in lexer.tokens:
            self.assertEqual('main.f12', t.file_name)
Esempio n. 11
0
    def test_lit_float(self):
        lexer = Lexer(
            '123 12. 12.45 78.80E5 789.4e7 852.78E+50 369.78e-789 .789 .789E-70'
        )

        lexer.lex_all()

        self.assertEqual(TokenType.LIT_INT, lexer.tokens[0].type)
        self.assertEqual(TokenType.LIT_FLOAT, lexer.tokens[1].type)
        self.assertEqual(TokenType.LIT_FLOAT, lexer.tokens[2].type)
        self.assertEqual(TokenType.LIT_FLOAT, lexer.tokens[3].type)
        self.assertEqual(TokenType.LIT_FLOAT, lexer.tokens[4].type)
        self.assertEqual(TokenType.LIT_FLOAT, lexer.tokens[5].type)
        self.assertEqual(TokenType.LIT_FLOAT, lexer.tokens[6].type)
        self.assertEqual(TokenType.LIT_FLOAT, lexer.tokens[7].type)
        self.assertEqual(TokenType.LIT_FLOAT, lexer.tokens[8].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[9].type)

        self.assertEqual('123', lexer.tokens[0].value)
        self.assertEqual('12.', lexer.tokens[1].value)
        self.assertEqual('12.45', lexer.tokens[2].value)
        self.assertEqual('78.80E5', lexer.tokens[3].value)
        self.assertEqual('789.4e7', lexer.tokens[4].value)
        self.assertEqual('852.78E+50', lexer.tokens[5].value)
        self.assertEqual('369.78e-789', lexer.tokens[6].value)
        self.assertEqual('.789', lexer.tokens[7].value)
        self.assertEqual('.789E-70', lexer.tokens[8].value)
Esempio n. 12
0
    def test_to_stdout(self):
        lexer = Lexer('-->')

        lexer.lex_all()

        self.assertEqual(TokenType.KW_TO_STDOUT, lexer.tokens[0].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 13
0
    def test_void_type(self):
        lexer = Lexer('void')

        lexer.lex_all()

        self.assertEqual(TokenType.PRIMITIVE_VOID, lexer.tokens[0].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 14
0
    def test_helper(self):
        lexer = Lexer('>include')

        lexer.lex_all()

        self.assertEqual(TokenType.HELPER_INCLUDE, lexer.tokens[0].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 15
0
    def test_op_gt(self):
        lexer = Lexer('>>')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_GT, lexer.tokens[0].type)
        self.assertEqual(TokenType.OP_GT, lexer.tokens[1].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[2].type)
Esempio n. 16
0
    def test_lit_int(self):
        lexer = Lexer('1234567890')

        lexer.lex_all()

        self.assertEqual(TokenType.LIT_INT, lexer.tokens[0].type)
        self.assertEqual('1234567890', lexer.tokens[0].value)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 17
0
    def test_lit_str_escape(self):
        lexer = Lexer('"hello \\n \\t \\\" ha"')

        lexer.lex_all()

        self.assertEqual(TokenType.LIT_STR, lexer.tokens[0].type)
        self.assertEqual('hello \n \t \" ha', lexer.tokens[0].value)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 18
0
    def test_identifier(self):
        lexer = Lexer('_function_name')

        lexer.lex_all()

        self.assertEqual(TokenType.IDENTIFIER, lexer.tokens[0].type)
        self.assertEqual('_function_name', lexer.tokens[0].value)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 19
0
    def test_op_access(self):
        lexer = Lexer('..')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_ACCESS, lexer.tokens[0].type)
        self.assertEqual(TokenType.OP_ACCESS, lexer.tokens[1].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[2].type)
Esempio n. 20
0
    def test_lit_str(self):
        lexer = Lexer('"hello"')

        lexer.lex_all()

        self.assertEqual(TokenType.LIT_STR, lexer.tokens[0].type)
        self.assertEqual('hello', lexer.tokens[0].value)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 21
0
    def test_op_mul(self):
        lexer = Lexer('* /* + */ *')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_MUL, lexer.tokens[0].type)
        self.assertEqual(TokenType.OP_MUL, lexer.tokens[1].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[2].type)
Esempio n. 22
0
    def test_div(self):
        lexer = Lexer('/ /')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_DIV, lexer.tokens[0].type)
        self.assertEqual(TokenType.OP_DIV, lexer.tokens[1].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[2].type)
Esempio n. 23
0
    def test_op_eq_and_op_assign(self):
        lexer = Lexer('=====')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_EQ, lexer.tokens[0].type)
        self.assertEqual(TokenType.OP_EQ, lexer.tokens[1].type)
        self.assertEqual(TokenType.OP_ASSIGN, lexer.tokens[2].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[3].type)
Esempio n. 24
0
    def test_op_ge(self):
        lexer = Lexer('>==>>')

        lexer.lex_all()

        self.assertEqual(TokenType.OP_GE, lexer.tokens[0].type)
        self.assertEqual(TokenType.KW_FAT_ARROW, lexer.tokens[1].type)
        self.assertEqual(TokenType.OP_GT, lexer.tokens[2].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[3].type)
Esempio n. 25
0
    def test_unit_create_op(self):
        lexer = Lexer('|a|')

        lexer.lex_all()

        self.assertEqual(TokenType.C_PIPE, lexer.tokens[0].type)
        self.assertEqual(TokenType.IDENTIFIER, lexer.tokens[1].type)
        self.assertEqual(TokenType.C_PIPE, lexer.tokens[2].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[3].type)
Esempio n. 26
0
    def test_i_addition(self):
        lexer = Lexer('5 + 5')

        lexer.lex_all()

        self.assertEqual(TokenType.LIT_INT, lexer.tokens[0].type)
        self.assertEqual(TokenType.OP_PLUS, lexer.tokens[1].type)
        self.assertEqual(TokenType.LIT_INT, lexer.tokens[2].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[3].type)
Esempio n. 27
0
    def test_lit_str_multiline(self):
        lexer = Lexer('"hello\nmy\nname\nis"')

        lexer.lex_all()

        self.assertEqual(TokenType.LIT_STR, lexer.tokens[0].type)
        self.assertEqual('hello\nmy\nname\nis', lexer.tokens[0].value)
        self.assertEqual(4, lexer.line_number)
        self.assertEqual(TokenType.EOF, lexer.tokens[1].type)
Esempio n. 28
0
    def test_kw_from_stdin(self):
        lexer = Lexer('<-- <- <')

        lexer.lex_all()

        self.assertEqual(TokenType.KW_FROM_STDIN, lexer.tokens[0].type)
        self.assertEqual(TokenType.OP_LT, lexer.tokens[1].type)
        self.assertEqual(TokenType.OP_MINUS, lexer.tokens[2].type)
        self.assertEqual(TokenType.OP_LT, lexer.tokens[3].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[4].type)
Esempio n. 29
0
    def test_i_array_access(self):
        lexer = Lexer('x[0]')

        lexer.lex_all()

        self.assertEqual(TokenType.IDENTIFIER, lexer.tokens[0].type)
        self.assertEqual(TokenType.C_SQUARE_L, lexer.tokens[1].type)
        self.assertEqual(TokenType.LIT_INT, lexer.tokens[2].type)
        self.assertEqual(TokenType.C_SQUARE_R, lexer.tokens[3].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[4].type)
Esempio n. 30
0
    def test_op_minus_3(self):
        lexer = Lexer('5-5 - -')

        lexer.lex_all()

        self.assertEqual(TokenType.LIT_INT, lexer.tokens[0].type)
        self.assertEqual(TokenType.OP_MINUS, lexer.tokens[1].type)
        self.assertEqual(TokenType.LIT_INT, lexer.tokens[2].type)
        self.assertEqual(TokenType.OP_MINUS, lexer.tokens[3].type)
        self.assertEqual(TokenType.OP_MINUS, lexer.tokens[4].type)
        self.assertEqual(TokenType.EOF, lexer.tokens[5].type)