Exemplo n.º 1
0
    def test_if(self):
        value_if = parse('if (T){2 + 2} else if (T){2 - 2}')
        value_Eq = parse('if (2 == 2){1 + 2}')
        value_Gt = parse('if (3 > 1){3 + 5}')
        value_Le = parse('if (4 <= 5){2 + 5}')
        value_Lt = parse('if (3 < 5){3 * 1}')
        value_Ge = parse('if (3 >= 4){2 ^ 3}')
        value_Ne = parse('if (3 != 1){1 + 2} else { 1 + 1 }')
        value_ternario = parse('asd = 3 > 0 ? 1 : 2')

        if_if = CscriptTransformer().transform(value_if)
        if_Eq = CscriptTransformer().transform(value_Eq)
        if_Gt = CscriptTransformer().transform(value_Gt)
        if_Le = CscriptTransformer().transform(value_Le)
        if_Lt = CscriptTransformer().transform(value_Lt)
        if_Ge = CscriptTransformer().transform(value_Ge)
        if_Ne = CscriptTransformer().transform(value_Ne)
        if_ternario = CscriptTransformer().transform(value_ternario)
        env = {Symbol('b'): 2}
        print_ = parse('b = b == 2 ? 6 : 0')
        print_eval = CscriptTransformer().transform(print_)
        res = eval(print_eval, env)

        assert if_if == [
            Symbol.IF, True, [Symbol.ADD, 2.0, 2.0],
            [[True, [Symbol.SUB, 2.0, 2.0]]]
        ]
        assert if_Eq == [
            Symbol.IF, [Symbol.EQ, 2.0, 2.0], [Symbol.ADD, 1.0, 2.0]
        ]
        assert if_Gt == [Symbol.IF, [Symbol.GT, 3.0, 1.0], [Symbol.ADD, 3, 5]]
        assert if_Le == [Symbol.IF, [Symbol.LE, 4.0, 5.0], [Symbol.ADD, 2, 5]]
        assert if_Lt == [Symbol.IF, [Symbol.LT, 3.0, 5.0], [Symbol.MUL, 3, 1]]
        assert if_Ge == [Symbol.IF, [Symbol.GE, 3.0, 4.0], [Symbol.POW, 2, 3]]
        assert if_Ne == [
            Symbol.IF, [Symbol.NEQ, 3.0, 1.0], [Symbol.ADD, 1, 2],
            [[Symbol.ADD, 1, 1]]
        ]
        assert if_ternario == [
            Symbol.TERN, Symbol('asd'), [Symbol.GT, 3, 0], 1, 2
        ]
        assert env[Symbol('b')] == 6
        assert eval(if_if, {}) == 4
        assert eval(if_Eq, {}) == 3
        assert eval(if_Gt, {}) == 8
        assert eval(if_Le, {}) == 7
        assert eval(if_Lt, {}) == 3
        assert eval(if_Ne, {}) == 3
        assert eval(if_Ge, {}) is None
        env = {'asd': 2}
        assert eval(if_ternario, env) == None
        assert env[Symbol('asd')] == 1
Exemplo n.º 2
0
    def test_loop(self):
        loop = parse("""
        a = 2;

        for(x = 3; x <= 10; x = x + 1){
            a = a + x
        };

        a
        """)
        loop_transform = CscriptTransformer().transform(loop)
        #while
        while_p = parse("""
        a = 1;
        while(a < 10){
            a = a + 1
        }
        """)
        while_trans = CscriptTransformer().transform(while_p)
        env = {}
        assert eval(loop_transform, env) == 54
        env = {}
        eval(while_trans, env)
        assert env[Symbol('a')] == 10
Exemplo n.º 3
0
 def prnthss(self, Rparenthesis, unit, Lparenthesis):
     Rparenthesis = str(Rparenthesis)
     Lparenthesis = str(Lparenthesis)
     return [Symbol(Rparenthesis), unit, Symbol(Lparenthesis)]
Exemplo n.º 4
0
 def binop(self, left, op, right):
     op = str(op)
     return [Symbol(op), left, right]
Exemplo n.º 5
0
 def op(self, args):
     return Symbol(args)
Exemplo n.º 6
0
 def condition(self, *args):
     left, comparsion, right = args
     return [Symbol.COMPARE, left, Symbol(comparsion), right]
Exemplo n.º 7
0
 def name(self, name):
     return Symbol(name)
Exemplo n.º 8
0
 def test_atomic(self):
     assert eval(parse_src('verum'), e) is True
     assert eval(parse_src('falsus'), e) is False
     assert parse_src('adde') == Symbol('adde')
Exemplo n.º 9
0
 def bool(self, boolean):
     return Symbol(boolean) == Symbol.TRUE
Exemplo n.º 10
0
 def assign(self, left, op):
     return list(tuple((Symbol.DEFINE, Symbol(left), op)))
Exemplo n.º 11
0
 def symbol(self, symbol):
     return Symbol(symbol)