Exemplo n.º 1
0
    def test_find_modified_symbols(self):
        f = """
a += b
c = 99
a = b * c
"""
        mathparse = ctxmathparse.MathParse()
        mathparse.context_parse_string(f)
        self.assertEqual(mathparse.context.name, '_')
        self.assertEqual(mathparse.context.modified_symbols, set({'a', 'c'}))
        self.assertEqual(mathparse.context.symbols, set({'a', 'b', 'c'}))

        f = """
a = 99
if b > 75:
    c += 99
elif b > 60:
    c += 50
elif b < d:
    pass
else:
    c += 25
a += c
"""
        mathparse = ctxmathparse.MathParse()
        mathparse.context_parse_string(f)
        self.assertEqual(mathparse.context.modified_symbols, set({'a', 'c'}))
        self.assertEqual(mathparse.context.symbols, set({'a', 'b', 'c', 'd'}))
Exemplo n.º 2
0
    def test_add_function_to_context(self):
        f = """
def f1(x):
    return x + 9
"""
        mpctx = ctxmathparse.MathParse()
        mpctx.parse_string(f)
        self.assertEqual(len(mpctx.function_list), 1)
        self.assertEqual(mpctx.function_list[0].name, "f1")

        self.assertEqual(mpctx.function_list[0].args, {"x": "_f1_arg_x"})

        self.assertEqual(
            mpctx.function_list[0].translate_function_statement(0),
            "([_f1_arg_x] + 9)")

        self.assertEqual(mpctx.function_list[0].collect_function_statements(),
                         ["([_f1_arg_x] + 9)"])

        self.assertEqual(mpctx.function_list[0].get_function_statement(),
                         "[_f1_stmt_0]")

        self.assertEqual(
            mpctx.translate(), {
                "_f1_arg_x": "x",
                "_f1_stmt_0": "([_f1_arg_x] + 9)",
                "_f1": "[_f1_stmt_0]"
            })

        f = """
def f1(x):
    return x + 9

def f2(x):
    return x * 99
"""
        mpctx = ctxmathparse.MathParse()
        mpctx.parse_string(f)
        self.assertEqual(len(mpctx.function_list), 2)
        self.assertEqual(mpctx.function_list[0].name, "f1")
        self.assertEqual(mpctx.function_list[1].name, "f2")

        self.assertEqual(mpctx.function_list[0].args, {"x": "_f1_arg_x"})

        self.assertEqual(mpctx.function_list[1].args, {"x": "_f2_arg_x"})

        self.assertEqual(
            mpctx.translate(), {
                "_f1_arg_x": "x",
                "_f1_stmt_0": "([_f1_arg_x] + 9)",
                "_f1": "[_f1_stmt_0]",
                "_f2_arg_x": "x",
                "_f2_stmt_0": "([_f2_arg_x] * 99)",
                "_f2": "[_f2_stmt_0]"
            })
Exemplo n.º 3
0
    def test_find_returns(self):
        f = """
return x + 5
"""
        return
        mathparse = ctxmathparse.MathParse()
        mathparse.context_parse_string(f)
        returns = mathparse.context_returns()
        self.assertEqual(len(returns), 1)
        self.assertEqual(returns, {"_f1:return:0": "([_f1:x] + 5)"})
Exemplo n.º 4
0
    def test_two_statements_in_one_function(self):
        f = """
def f1(x, y):
    a = x * y
    return a + 5
"""
        mpctx = ctxmathparse.MathParse()
        mpctx.parse_string(f)
        self.assertEqual(
            mpctx.translate(), {
                "_f1_arg_x": "x",
                "_f1_arg_y": "y",
                "_f1_stmt_0": "([_f1_arg_x] * [_f1_arg_y])",
                "_f1_stmt_1": "([_f1_stmt_0] + 5)",
                "_f1": "[_f1_stmt_1]"
            })
Exemplo n.º 5
0
    def test_augadd(self):
        f = """
def f(a, x, y):
    a = x * y
    a -= 6
    return a + 7
"""

        # o = ctxmathparse.objectify_string(f)
        # print(o)
        mpctx = ctxmathparse.MathParse()
        mpctx.parse_string(f)
        self.assertEqual(
            mpctx.translate(), {
                "_f_arg_a": "a",
                "_f_arg_x": "x",
                "_f_arg_y": "y",
                "_f_stmt_0": "([_f_arg_x] * [_f_arg_y])",
                "_f_stmt_1": "([_f_stmt_0] - 6)",
                "_f_stmt_2": "([_f_stmt_1] + 7)",
                "_f": "[_f_stmt_2]"
            })
Exemplo n.º 6
0
 def test_init(self):
     mpctx = ctxmathparse.MathParse()
     self.assertEqual(mpctx.function_list, [])
     self.assertEqual(mpctx.source, '')
     self.assertEqual(mpctx.objast, None)