コード例 #1
0
ファイル: test_basic.py プロジェクト: Todberg/sw10
    def test_parse_expression4(self):
        parser = testParser(lexer.lexer)

        res = parser.parse("x' == 0")
        res.visit()
        self.assertEqual(res.type, 'Equal')
        self.assertEqual(res.children[0].type, 'ClockRate')
        self.assertEqual(res.children[0].leaf, 'x')
        self.assertEqual(res.children[1].type, 'Number')
        self.assertEqual(res.children[1].leaf, 0)

        res = parser.parse("y >= 5 && x' == 0")
        res.visit()
        self.assertEqual(res.type, 'And')
        self.assertEqual(len(res.children), 2)
        self.assertEqual(res.children[0].type, 'GreaterEqual')
        self.assertEqual(res.children[0].children[0].type, 'Identifier')
        self.assertEqual(res.children[0].children[0].leaf, 'y')
        self.assertEqual(res.children[0].children[1].type, 'Number')
        self.assertEqual(res.children[0].children[1].leaf, 5)

        self.assertEqual(res.children[1].type, 'Equal')
        self.assertEqual(res.children[1].children[0].type, 'ClockRate')
        self.assertEqual(res.children[1].children[0].leaf, 'x')
        self.assertEqual(res.children[1].children[1].type, 'Number')
        self.assertEqual(res.children[1].children[1].leaf, 0)
コード例 #2
0
ファイル: test_basic.py プロジェクト: Todberg/sw10
    def test_parse_func_with_params(self):
        parser = testParser(lexer.lexer)

        res = parser.parse("ishit(4)")
        self.assertEqual(res.type, "FunctionCall")
        self.assertEqual(res.children[0].type, "Identifier")
        self.assertEqual(res.children[0].leaf, "ishit")
        #parameters
        self.assertEqual(len(res.leaf), 1)
        self.assertEqual(res.leaf[0].type, "Number")
        self.assertEqual(res.leaf[0].leaf, 4)

        res = parser.parse("cache.ishit(4)")
        self.assertEqual(res.type, "FunctionCall")
        self.assertEqual(res.children[0].type, "Identifier")
        self.assertEqual(res.children[0].leaf, "cache")
        self.assertEqual(res.children[0].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].leaf, "ishit")
        #parameters
        self.assertEqual(len(res.leaf), 1)
        self.assertEqual(res.leaf[0].type, "Number")
        self.assertEqual(res.leaf[0].leaf, 4)


        res = parser.parse("cache.ishit(acc)")
        self.assertEqual(res.type, "FunctionCall")
        self.assertEqual(res.children[0].type, "Identifier")
        self.assertEqual(res.children[0].leaf, "cache")
        self.assertEqual(res.children[0].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].leaf, "ishit")
        #parameters
        self.assertEqual(len(res.leaf), 1)
        self.assertEqual(res.leaf[0].type, "Identifier")
        self.assertEqual(res.leaf[0].leaf, "acc")

        res = parser.parse("ishit(4, 5, x, True, a.b.c)")
        res.visit()
        self.assertEqual(res.type, "FunctionCall")
        self.assertEqual(res.children[0].type, "Identifier")
        self.assertEqual(res.children[0].leaf, "ishit")
        #parameters
        self.assertEqual(len(res.leaf), 5)
        self.assertEqual(res.leaf[0].type, "Number")
        self.assertEqual(res.leaf[0].leaf, 4)
        self.assertEqual(res.leaf[1].type, "Number")
        self.assertEqual(res.leaf[1].leaf, 5)
        self.assertEqual(res.leaf[2].type, "Identifier")
        self.assertEqual(res.leaf[2].leaf, "x")
        self.assertEqual(res.leaf[3].type, "True")
        self.assertEqual(res.leaf[4].type, "Identifier")
        self.assertEqual(res.leaf[4].leaf, "a")
        self.assertEqual(res.leaf[4].children[0].type, "Identifier")
        self.assertEqual(res.leaf[4].children[0].leaf, "b")
        self.assertEqual(res.leaf[4].children[0].children[0].type, "Identifier")
        self.assertEqual(res.leaf[4].children[0].children[0].leaf, "c")
コード例 #3
0
ファイル: test_basic.py プロジェクト: Todberg/sw10
    def test_parse_array_index_expression(self):
        parser = testParser(lexer.lexer)
        res = parser.parse("a[1] == 2")
        #parser = testParser(lexer.lexer)
        #res = pars.parse()
        #res.visit()
        self.assertEqual(res.type, "Equal") 
        self.assertEqual(res.children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].type, "Index")
        self.assertEqual(res.children[0].children[0].leaf.type, "Number")
        self.assertEqual(res.children[0].children[0].leaf.leaf, 1)
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 2)

        res = parser.parse("N-1")
        self.assertEqual(res.type, "Minus") 
        self.assertEqual(res.children[0].type, "Identifier")
        self.assertEqual(res.children[0].leaf, 'N')
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 1)
コード例 #4
0
ファイル: test_basic.py プロジェクト: Todberg/sw10
    def test_parse_expression3(self):
        parser = testParser(lexer.lexer)

        res = parser.parse("(x == true) && (0 > N-0-1)")
        self.assertEqual(res.type, 'And')
        self.assertEqual(len(res.children), 2)
        self.assertEqual(res.children[0].type, 'Equal')
        self.assertEqual(res.children[0].children[0].type, 'Identifier')
        self.assertEqual(res.children[0].children[0].leaf, 'x')
        self.assertEqual(res.children[0].children[1].type, 'True')
        self.assertEqual(res.children[1].type, 'Greater')
        self.assertEqual(res.children[1].children[0].type, 'Number')
        self.assertEqual(res.children[1].children[0].leaf, 0)
        self.assertEqual(res.children[1].children[1].type, 'Minus')
        self.assertEqual(res.children[1].children[1].children[0].type, 'Minus')
        self.assertEqual(res.children[1].children[1].children[0].children[0].type, 'Identifier')
        self.assertEqual(res.children[1].children[1].children[0].children[0].leaf, 'N')
        self.assertEqual(res.children[1].children[1].children[0].children[1].type, 'Number')
        self.assertEqual(res.children[1].children[1].children[0].children[1].leaf, 0)
        self.assertEqual(res.children[1].children[1].children[1].type, 'Number')
        self.assertEqual(res.children[1].children[1].children[1].leaf, 1)

        res = parser.parse("x == true && (0 > N-0-1)")
        self.assertEqual(res.type, 'And')
        self.assertEqual(len(res.children), 2)
        self.assertEqual(res.children[0].type, 'Equal')
        self.assertEqual(res.children[0].children[0].type, 'Identifier')
        self.assertEqual(res.children[0].children[0].leaf, 'x')
        self.assertEqual(res.children[0].children[1].type, 'True')
        self.assertEqual(res.children[1].type, 'Greater')
        self.assertEqual(res.children[1].children[0].type, 'Number')
        self.assertEqual(res.children[1].children[0].leaf, 0)
        self.assertEqual(res.children[1].children[1].type, 'Minus')
        self.assertEqual(res.children[1].children[1].children[0].type, 'Minus')
        self.assertEqual(res.children[1].children[1].children[0].children[0].type, 'Identifier')
        self.assertEqual(res.children[1].children[1].children[0].children[0].leaf, 'N')
        self.assertEqual(res.children[1].children[1].children[0].children[1].type, 'Number')
        self.assertEqual(res.children[1].children[1].children[0].children[1].leaf, 0)
        self.assertEqual(res.children[1].children[1].children[1].type, 'Number')
        self.assertEqual(res.children[1].children[1].children[1].leaf, 1)
コード例 #5
0
ファイル: test_basic.py プロジェクト: Todberg/sw10
    def test_parse_expression2(self):
        parser = testParser(lexer.lexer)
        res = parser.parse("(N - 0 - 1)")
        self.assertEqual(res.type, "Minus")
        self.assertEqual(res.children[0].type, "Minus")
        self.assertEqual(res.children[0].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].leaf, 'N')
        self.assertEqual(res.children[0].children[1].type, "Number")
        self.assertEqual(res.children[0].children[1].leaf, 0)
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 1)

        res = parser.parse("-42")
        self.assertEqual(res.type, "UnaryMinus")
        self.assertEqual(res.children[0].type, "Number")
        self.assertEqual(res.children[0].leaf, 42)

        res = parser.parse("-(42+1)")
        self.assertEqual(res.type, "UnaryMinus")
        self.assertEqual(res.children[0].type, "Plus")
        self.assertEqual(res.children[0].children[0].type, "Number")
        self.assertEqual(res.children[0].children[0].leaf, 42)
        self.assertEqual(res.children[0].children[1].type, "Number")
        self.assertEqual(res.children[0].children[1].leaf, 1)

        res = parser.parse("N- 0- 1")
        self.assertEqual(res.type, "Minus")
        self.assertEqual(res.children[0].type, "Minus")
        self.assertEqual(res.children[0].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].leaf, 'N')
        self.assertEqual(res.children[0].children[1].type, "Number")
        self.assertEqual(res.children[0].children[1].leaf, 0)
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 1)


        res = parser.parse("N-0-1")
        self.assertEqual(res.type, "Minus")
        self.assertEqual(res.children[0].type, "Minus")
        self.assertEqual(res.children[0].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].leaf, 'N')
        self.assertEqual(res.children[0].children[1].type, "Number")
        self.assertEqual(res.children[0].children[1].leaf, 0)
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 1)

        res = parser.parse("(x == 5 && y == 4)")
        self.assertEqual(res.type, "And")
        self.assertEqual(res.children[0].type, "Equal")
        self.assertEqual(res.children[0].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].leaf, 'x')
        self.assertEqual(res.children[0].children[1].type, "Number")
        self.assertEqual(res.children[0].children[1].leaf, 5)
        self.assertEqual(res.children[1].children[0].type, "Identifier")
        self.assertEqual(res.children[1].children[0].leaf, 'y')
        self.assertEqual(res.children[1].children[1].type, "Number")
        self.assertEqual(res.children[1].children[1].leaf, 4)

        res = parser.parse("True")
        self.assertEqual(res.type, "True")

        res = parser.parse("true")
        res.visit()
        self.assertEqual(res.type, "True")

        res = parser.parse("x[0][1] == True")
        self.assertEqual(res.type, "Equal")
        self.assertEqual(res.children[0].type, "Identifier")
        self.assertEqual(res.children[0].leaf, 'x')
        self.assertEqual(res.children[0].children[0].type, "Index")
        self.assertEqual(res.children[0].children[0].leaf.type, 'Number')
        self.assertEqual(res.children[0].children[0].leaf.leaf, 0)
        self.assertEqual(res.children[0].children[1].type, "Index")
        self.assertEqual(res.children[0].children[1].leaf.type, 'Number')
        self.assertEqual(res.children[0].children[1].leaf.leaf, 1)
        self.assertEqual(res.children[1].type, "True")

        res = parser.parse("msg[ 0 ][ N - 0 - 1 ] == True")
        self.assertEqual(res.type, "Equal")
        self.assertEqual(res.children[0].type, "Identifier")
        self.assertEqual(res.children[0].leaf, 'msg')
        self.assertEqual(res.children[0].children[0].type, "Index")
        self.assertEqual(res.children[0].children[0].leaf.type, 'Number')
        self.assertEqual(res.children[0].children[0].leaf.leaf, 0)
        self.assertEqual(res.children[0].children[1].type, "Index")
        index2 = res.children[0].children[1].leaf
        self.assertEqual(index2.type, 'Minus')
        self.assertEqual(index2.children[0].type, 'Minus')
        self.assertEqual(index2.children[0].children[0].type, 'Identifier')
        self.assertEqual(index2.children[0].children[0].leaf, 'N')
        self.assertEqual(index2.children[0].children[1].type, 'Number')
        self.assertEqual(index2.children[0].children[1].leaf, 0)
        self.assertEqual(res.children[1].type, "True")
コード例 #6
0
ファイル: test_basic.py プロジェクト: Todberg/sw10
    def test_parse_expression(self):
        parser = testParser(lexer.lexer)

        res = parser.parse("")
        #should not fail
        self.assertFalse(res)

        res = parser.parse(" ")
        #should not fail
        self.assertFalse(res)

        res = parser.parse("5")
        self.assertEqual(res.type, "Number")
        self.assertEqual(res.leaf, 5)
  
        res = parser.parse("5 > 5")
        self.assertEqual(res.type, "Greater") 
        self.assertEqual(res.children[0].type, "Number")
        self.assertEqual(res.children[0].leaf, 5)
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 5)

        res = parser.parse("5 != 5")
        #res.visit()
        self.assertEqual(res.type, "NotEqual") 
        self.assertEqual(res.children[0].type, "Number")
        self.assertEqual(res.children[0].leaf, 5)
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 5)

        res = parser.parse("!True")
        self.assertEqual(res.type, "UnaryNot")
        self.assertEqual(res.children[0].type, 'True')
  
        res = parser.parse("5 && 4")
        self.assertEqual(res.type, "And")
        self.assertEqual(res.children[0].type, "Number")
        self.assertEqual(res.children[0].leaf, 5)
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 4)

        res = parser.parse("5 and 4")
        self.assertEqual(res.type, "And")
        self.assertEqual(res.children[0].type, "Number")
        self.assertEqual(res.children[0].leaf, 5)
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 4)

        res = parser.parse("!(5 && 4)")
        self.assertEqual(res.type, "UnaryNot")
        self.assertEqual(res.children[0].type, "And")
        self.assertEqual(res.children[0].children[0].type, "Number")
        self.assertEqual(res.children[0].children[0].leaf, 5)
        self.assertEqual(res.children[0].children[1].type, "Number")
        self.assertEqual(res.children[0].children[1].leaf, 4)

        res = parser.parse("not (5 && 4)")
        self.assertEqual(res.type, "UnaryNot")
        self.assertEqual(res.children[0].type, "And")
        self.assertEqual(res.children[0].children[0].type, "Number")
        self.assertEqual(res.children[0].children[0].leaf, 5)
        self.assertEqual(res.children[0].children[1].type, "Number")
        self.assertEqual(res.children[0].children[1].leaf, 4)

        res = parser.parse("5 || 4")
        self.assertEqual(res.type, "Or")
        self.assertEqual(res.children[0].type, "Number")
        self.assertEqual(res.children[0].leaf, 5)
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 4)

        res = parser.parse("5 or 4")
        self.assertEqual(res.type, "Or")
        self.assertEqual(res.children[0].type, "Number")
        self.assertEqual(res.children[0].leaf, 5)
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 4)
  
        res = parser.parse("5 < 5 and 4 > 3")
        self.assertEqual(res.type, "And")
        self.assertEqual(res.children[0].type, "Less")
        self.assertEqual(res.children[0].children[0].type, "Number")
        self.assertEqual(res.children[0].children[0].leaf, 5)
        self.assertEqual(res.children[0].children[1].type, "Number")
        self.assertEqual(res.children[0].children[1].leaf, 5)
  
        res = parser.parse("3 * 2 + 4")
        self.assertEqual(res.type, "Plus")
        self.assertEqual(res.children[0].type, "Times")
        self.assertEqual(res.children[0].children[0].type, "Number")
        self.assertEqual(res.children[0].children[0].leaf, 3)
        self.assertEqual(res.children[0].children[1].type, "Number")
        self.assertEqual(res.children[0].children[1].leaf, 2)
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 4)

        res = parser.parse("Viking1.safe and Viking2.safe") #TODO add struct support
        self.assertEqual(res.type, "And")
        self.assertEqual(res.children[0].type, "Identifier")
        self.assertEqual(res.children[0].leaf, "Viking1")
        self.assertEqual(res.children[0].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].leaf, "safe")
        self.assertEqual(res.children[1].type, "Identifier")
        self.assertEqual(res.children[1].leaf, "Viking2")
        self.assertEqual(res.children[1].children[0].type, "Identifier")
        self.assertEqual(res.children[1].children[0].leaf, "safe")

        res = parser.parse(
            "Viking1.safe and Viking2.safe and Viking3.safe and Viking4.safe")
        self.assertEqual(res.type, "And")
        self.assertEqual(res.children[0].type, "And")
        self.assertEqual(res.children[1].type, "Identifier")
        self.assertEqual(res.children[1].leaf, "Viking4")
        self.assertEqual(res.children[1].children[0].type, "Identifier")
        self.assertEqual(res.children[1].children[0].leaf, "safe")

        self.assertEqual(res.children[0].children[0].type, "And")
        self.assertEqual(res.children[0].children[1].type, "Identifier")
        self.assertEqual(res.children[0].children[1].leaf, "Viking3")
        self.assertEqual(res.children[0].children[1].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[1].children[0].leaf, "safe")

        self.assertEqual(res.children[0].children[0].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].children[0].leaf, "Viking1")
        self.assertEqual(res.children[0].children[0].children[0].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].children[0].children[0].leaf, "safe")
        self.assertEqual(res.children[0].children[0].children[1].type, "Identifier")
        self.assertEqual(res.children[0].children[0].children[1].leaf, "Viking2")
        self.assertEqual(res.children[0].children[0].children[1].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].children[1].children[0].leaf, "safe")

        res = parser.parse("N - 1")
        self.assertEqual(res.type, "Minus") 
        self.assertEqual(res.children[0].type, "Identifier")
        self.assertEqual(res.children[0].leaf, 'N')
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 1)

        res = parser.parse("f() == 2")
        self.assertEqual(res.type, "Equal") 
        self.assertEqual(res.children[0].type, "FunctionCall")
        self.assertEqual(res.children[0].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].leaf, "f")
        self.assertEqual(res.children[1].type, "Number")
        self.assertEqual(res.children[1].leaf, 2)

        res = parser.parse("dbm.isEmpty()")
        self.assertEqual(res.type, "FunctionCall") 
        self.assertEqual(res.children[0].type, "Identifier")
        self.assertEqual(res.children[0].leaf, "dbm")
        self.assertEqual(res.children[0].children[0].type, "Identifier")
        self.assertEqual(res.children[0].children[0].leaf, "isEmpty")