Пример #1
0
 def test_embed_in_false(self, nrcv):
     prog = Conditional(Number(0), None, [
         FunctionDefinition("foo3", Function([], [])),
         FunctionDefinition("foo4", Function([], [Number(3)])),
         Conditional(Number(0), [], [])
     ])
     assert nrcv(prog) == set(["foo3"])
Пример #2
0
 def test_embed_in_true(self, nrcv):
     prog = Conditional(Number(0), [
         FunctionDefinition("foo1", Function([], [])),
         FunctionDefinition("foo2", Function([], [Number(1)])),
         Conditional(Number(0), [], [])
     ], None)
     assert nrcv(prog) == set(["foo1"])
Пример #3
0
 def test_embedded_in_bad_if(self, nrcv):
     prog = Conditional(Number(0), [
         FunctionDefinition("foo1", Function([], [])),
         FunctionDefinition("foo2", Function([], [Number(1)])),
         Conditional(Number(0), [], [])
     ], [
         FunctionDefinition("foo3", Function([], [])),
         FunctionDefinition("foo4", Function([], [Number(3)])),
         Conditional(Number(0), [], [])
     ])
     assert nrcv(prog) == set(["foo1", "foo3"])
Пример #4
0
 def test_embedded(self, nrcv):
     prog = Conditional(Number(0), [
         Conditional(Number(0), [], []),
         FunctionDefinition("foo1", Function([], [])),
         FunctionDefinition("foo2", Function([], [Number(1)])),
         Number(2),
     ], [
         Conditional(Number(0), [], []),
         FunctionDefinition("foo3", Function([], [])),
         FunctionDefinition("foo4", Function([], [Number(3)])),
         Number(4),
     ])
     assert nrcv(prog) == set(["foo1", "foo3"])
Пример #5
0
def my_tests():
    reader = Print(Read('n'))
    print_binary = Print(
        BinaryOperation(
            Reference('x'), '/',
            UnaryOperation('!', BinaryOperation(Reference('y'), '%',
                                                Number(2)))))
    conditional = Conditional(
        BinaryOperation(BinaryOperation(Reference('x'), '*', Number(2)), '<',
                        UnaryOperation('-', Reference('y'))),
        [
            print_binary,
            UnaryOperation('-', UnaryOperation('!', Reference('s')))
        ], [])
    definition_max3 = FunctionDefinition(
        'max3',
        Function(["a", "b", "c"], [
            Conditional(BinaryOperation(Reference("a"), ">", Reference("b")), [
                Conditional(
                    BinaryOperation(Reference("a"), ">=", Reference("c")),
                    [Reference("a")], [Reference("c")])
            ], [
                Conditional(
                    BinaryOperation(Reference("b"), "<", Reference("c")),
                    [Reference("c")], [Reference("b")])
            ])
        ]))
    fun_call = Print(FunctionCall(definition_max3, [Number(1), Number(2)]))
    definition_log2 = FunctionDefinition(
        "log2",
        Function(["k", "n", "step"], [
            Conditional(
                BinaryOperation(
                    BinaryOperation(Reference("k"), "*", Number(2)), "<=",
                    Reference("n")), [
                        FunctionCall(Reference("log_2_def"), [
                            BinaryOperation(Reference("k"), "*", Number(2)),
                            Reference("n"),
                            BinaryOperation(Reference("step"), "+", Number(1))
                        ])
                    ], [Reference("step")])
        ]))
    empty_func = FunctionDefinition("emptyFunc", Function([], []))
    printer = PrettyPrinter()
    printer.visit(reader)
    printer.visit(conditional)
    printer.visit(print_binary)
    printer.visit(definition_max3)
    printer.visit(fun_call)
    printer.visit(definition_log2)
    printer.visit(empty_func)
Пример #6
0
def test():
    f1 = Conditional(FunctionCall(Reference('x'), [Number(22)]), [Conditional(BinaryOperation(Number(0), '-', Number(6)), [],[Conditional(Number(0), [Conditional(UnaryOperation('-', Number(20)), [],[FunctionDefinition('foobar', Function(['ab', 'cd'], [
    Print(BinaryOperation(UnaryOperation('-', Number(120)), '*', BinaryOperation(UnaryOperation('-', Number(20)), '+', Reference('z')))), Read('x')
    ]))])],[])])],[Conditional(Number(0), [Conditional(Number(0), [],[Read('xxx')])],[])])

    f = FunctionDefinition('foo', Function(['a', 'b'], [
    FunctionDefinition('bar', Function(['c', 'd'], [
    Read('c')
    ])),
    Conditional(Number(6), [Conditional(Number(5), [Read('x')])],[f1])
    ]))

    pr = PrettyPrinter()
    pr.visit(f)
Пример #7
0
 def test_embed_in_cond(self, nrcv):
     bad_cond = Conditional(Number(0), [
         FunctionDefinition("foo", Function([], [])),
         Number(0)
     ])
     prog = Conditional(bad_cond, [], [])
     assert nrcv(prog) == set(["foo"])
Пример #8
0
    def visitFunctionDefinition(self, func_def):
        args_without_const = [
            elem.accept(self) for elem in func_def.function.args
        ]
        body_without_const = [
            elem.accept(self) for elem in func_def.function.body
        ]

        func_without_const = Function(args_without_const, body_without_const)

        func_def_without_const = FunctionDefinition(func_def.name,
                                                    func_without_const)

        return func_def_without_const
Пример #9
0
 def test_smoke(self, nrcv):
     prog = (
         Conditional(Number(1), [
             FunctionDefinition("foo", Function([], [
                 Number(123),
                 Conditional(Number(1), [
                     Number(2),
                 ])
             ])),
             FunctionDefinition("bar", Function([], [
                 Number(123)
             ])),
             FunctionDefinition("baz", Function([], [
             ])),
             FunctionDefinition("foobar", Function([], [
                 Conditional(Number(1), [
                     Number(2),
                 ]),
                 Number(123)
             ])),
         ])
     )
     assert nrcv(prog) == set(["foo", "baz"])
Пример #10
0
 def test_embedded(self, nrcv):
     prog = FunctionDefinition("foo1", Function([], [
         Conditional(Number(0), [], []),
         FunctionDefinition("foo2", Function([], [
             FunctionDefinition("foo3", Function([], [])),
         ])),
         FunctionDefinition("foo4", Function([], [
             FunctionDefinition("foo5", Function([], [])),
             Conditional(Number(0), [], [])
         ])),
         FunctionDefinition("foo6", Function([], []))
     ]))
     assert nrcv(prog) == set(["foo3", "foo4", "foo5", "foo6"])
Пример #11
0
 def test_good(self, nrcv):
     prog = FunctionDefinition("foo", Function([], [Number(10)]))
     assert nrcv(prog) == set()
Пример #12
0
 def visitFunction(self, fun):
     body = self.visitBody(fun.body)
     return Function(fun.args, body)
Пример #13
0
        self.visit(uoper.expr, False)
        print(')', end='')

    def visitReference(self, refer):
        print(refer.name, end='')

    def visitPrint(self, prnt):
        print('print', end=' ')
        self.visit(prnt.expr, False)

    def visitRead(self, read):
        print('read ' + read.name, end='')


if __name__ == '__main__':
    printer = PrettyPrinter()
    function = Function([], [])
    definition = FunctionDefinition('x', function)
    conditional = Conditional(BinaryOperation(Number(42), '-', Number(42)), [
        Conditional(
            BinaryOperation(BinaryOperation(Number(42), '+', Reference('a')),
                            '*', Number(0)), [],
            [Conditional(Number(42), [definition], [])])
    ], [])
    printer.visit(definition)
    printer.visit(conditional)
    printer.visit(Read('x'))
    printer.visit(Print(BinaryOperation(Number(2), '+', Reference('a'))))
    call = FunctionCall(Reference('foo'), [])
    printer.visit(call)
Пример #14
0
 def test_definition_containing_bad(self, nrcv_good):
     assert not nrcv_good(FunctionDefinition("foo", Function([], [])))
Пример #15
0
 def test_definition_containing_good(self, nrcv_good):
     assert nrcv_good(FunctionDefinition("foo", Function([], [Number(10)])))
Пример #16
0
def my_tests():
    print_binary = Print(
        BinaryOperation(
            Number(56), '/',
            UnaryOperation('!', BinaryOperation(Number(8), '%', Number(2)))))
    conditional = Conditional(
        BinaryOperation(BinaryOperation(Number(4), '*', Number(2)), '<',
                        UnaryOperation('-', Number(-5))),
        [print_binary, print_binary], [])
    definition_max3 = FunctionDefinition(
        'max3',
        Function(["a", "b", "c"], [
            Conditional(BinaryOperation(Reference("a"), "-", Reference("a")), [
                Conditional(BinaryOperation(Reference("a"), "*", Number(0)),
                            [], [Reference("c")])
            ], [
                Conditional(BinaryOperation(Number(0), "*", Reference("c")),
                            [Reference("c")])
            ])
        ]))
    fun_call = FunctionCall(
        definition_max3,
        [Number(1),
         BinaryOperation(Number(1), '*', Number(7)),
         Number(3)])
    definition_log2 = FunctionDefinition(
        "log2",
        Function(["k", "n", "step"], [
            Conditional(
                BinaryOperation(
                    BinaryOperation(Reference("k"), "-", Reference("k")), "<=",
                    Reference("n")), [
                        FunctionCall(Reference("log_2_def"), [
                            BinaryOperation(Reference("k"), "*", Number(0)),
                            Reference("n"),
                            BinaryOperation(Number(4), "+", Number(5))
                        ])
                    ], [Reference("step")])
        ]))

    folder = ConstantFolder()
    my_printer = printer.PrettyPrinter()

    conditional_c = folder.visit(conditional)
    definition_max3_c = folder.visit(definition_max3)
    fun_call_c = folder.visit(fun_call)
    definition_log2_c = folder.visit(definition_log2)

    if conditional_c == conditional:
        print('!')
    if definition_max3_c == definition_max3:
        print('!')
    if definition_log2_c == definition_log2:
        print('!')
    if fun_call_c == fun_call:
        print('!')

    my_printer.visit(conditional_c)
    my_printer.visit(conditional)
    my_printer.visit(definition_max3_c)
    my_printer.visit(definition_max3)
    my_printer.visit(fun_call_c)
    my_printer.visit(fun_call)
    my_printer.visit(definition_log2_c)
Пример #17
0
 def func_def(name):
     return FunctionDefinition(name, Function([], []))
Пример #18
0
 def test_function_pure_non_empty(self, pcv):
     assert pcv(Function([], [Number(10), Number(20)])) == True
Пример #19
0
 def test_embedded(self, nrcv):
     prog = Print(FunctionDefinition("foo", Function([], [])))
     assert nrcv(prog) == set(["foo"])
Пример #20
0
 def visit_wrapped(tree):
     res = nrcv(FunctionDefinition("foo", Function([], [tree])))
     assert res == set() or res == set(["foo"])
     return "foo" not in res
Пример #21
0
    def visitReference(self, refer):
        return refer

    def visitPrint(self, prnt):
        prnt.expr = self.visit(prnt.expr)
        return prnt

    def visitRead(self, read):
        return read


if __name__ == '__main__':
    printer = PrettyPrinter()
    folder = ConstantFolder()
    function = Function(['a', 'b'],
                        [Conditional(Number(42), [Number(42)], None)])
    definition = FunctionDefinition('x', function)
    conditional = Conditional(
        BinaryOperation(Reference('a'), '-',
                        BinaryOperation(Reference('a'), '-', Reference('a'))),
        [
            Conditional(
                BinaryOperation(
                    BinaryOperation(Number(42), '+', Reference('a')), '*',
                    Number(0)), [],
                [Conditional(Number(42), [definition], [])])
        ], [])
    printer.visit(conditional)
    conditional = folder.visit(conditional)
    prnt = Print(
        BinaryOperation(
Пример #22
0
 def test_good_with_args(self, nrcv):
     prog = FunctionDefinition("foo", Function(["arg"], [Number(10)]))
     assert nrcv(prog) == set()
Пример #23
0
 def test_bad_empty(self, nrcv):
     prog = FunctionDefinition("foo", Function([], []))
     assert nrcv(prog) == set(["foo"])
Пример #24
0
 def test_function_empty(self, pcv):
     assert pcv(Function([], [])) == True
Пример #25
0
 def test_bad_empty_with_args(self, nrcv):
     prog = FunctionDefinition("foo", Function(["arg"], []))
     assert nrcv(prog) == set(["foo"])
Пример #26
0
 def test_function_unpure(self, pcv):
     assert pcv(Function([], [Number(10), Print(Number(5)), Number(20)])) == False
Пример #27
0
 def test_bad_not_last(self, nrcv):
     prog = FunctionDefinition("foo", Function(["arg"], [
         Conditional(Number(0), [], []),
         Number(1)
     ]))
     assert nrcv(prog) == set()
Пример #28
0
 def test_function_definition(self, pcv):
     assert pcv(FunctionDefinition("name", Function([], [Number(5)]))) == True
Пример #29
0
 def visitFunctionDefinition(self, definition):
     return FunctionDefinition(
         definition.name,
         Function(definition.function.args,
                  self.visitInnerExprs(definition.function.body)))