def test_deadcode_noop(): def prog(): x = 1 outp = "x = 1" run_pass_harness(prog, DeadCodePass, outp, locals())
def test_unused_vars_closure(): def prog(): def a(): return x + b() x = 1 def b(): return 1 def c(): return a() assert a() == 2 def outp(): def a(): return x + b() x = 1 def b(): return 1 assert a() == 2 run_pass_harness(prog, UnusedVarsPass, outp, locals())
def test_deadcode_pure_expr(): import json def f(): return 1 def prog(): # impure x = 1 f() x + f() # pure x x + 1 {'a': 1} [0][0] json.loads ((1)) def outp(): # impure x = 1 f() x + f() # pure run_pass_harness(prog, DeadCodePass, outp, locals())
def test_unused_vars_basic(): def prog(): x = 1 assert True def outp(): assert True run_pass_harness(prog, UnusedVarsPass, outp, locals())
def test_clean_imports_redundant(): def prog(): import json import json def outp(): import json run_pass_harness(prog, CleanImportsPass, outp, locals())
def test_unused_vars_copy(): def prog(): x = 1 y = x def outp(): x = 1 run_pass_harness(prog, UnusedVarsPass, outp, locals())
def test_unused_vars_noop(): def prog(): x = 1 assert x == 1 def outp(): x = 1 assert x == 1 run_pass_harness(prog, UnusedVarsPass, outp, locals())
def test_deadcode_else(): def prog(): if False: x = 1 else: y = 1 outp = "y = 1" run_pass_harness(prog, DeadCodePass, outp, locals())
def test_deadcode_try_noexcept(): def prog(): try: x = 1 except KeyError: pass outp = "x = 1" run_pass_harness(prog, DeadCodePass, outp, locals())
def test_clean_imports_move_to_top(): def prog(): x = 1 import json def outp(): import json x = 1 run_pass_harness(prog, CleanImportsPass, outp, locals())
def test_clean_imports_sort(): def prog(): import json import csv def outp(): import csv import json run_pass_harness(prog, CleanImportsPass, outp, locals())
def test_deadcode_try_except(): def prog(): try: raise KeyError() except KeyError: x = 1 outp = "x = 1" run_pass_harness(prog, DeadCodePass, outp, locals())
def test_copy_propagation_basic(): def prog(): x = 1 y = x z = y + x def outp(): x = 1 z = x + x run_pass_harness(prog, CopyPropagationPass, outp, locals())
def test_unused_vars_impure(): def f(): pass def prog(): x = f() def outp(): x = f() run_pass_harness(prog, UnusedVarsPass, outp, locals())
def test_unused_vars_comprehension(): def prog(): x = 1 z = [x + y for y in range(10)] assert z[0] == 1 def outp(): x = 1 z = [x + y for y in range(10)] assert z[0] == 1 run_pass_harness(prog, UnusedVarsPass, outp, locals())
def test_copy_propagation_two_step(): def prog(): x = 1 y = x z = y assert z == 1 def outp(): x = 1 assert x == 1 run_pass_harness(prog, CopyPropagationPass, outp, locals())
def test_clean_imports_whitespace(): def prog(): import json import csv x = 1 def outp(): import csv import json x = 1 run_pass_harness(prog, CleanImportsPass, outp, locals(), fixpoint=True)
def test_copy_propagation_noop(): def prog(): x = 1 y = x y = y + 1 assert y == 2 def outp(): x = 1 y = x y = y + 1 assert y == 2 run_pass_harness(prog, CopyPropagationPass, outp, locals())
def test_remove_suffixes_basic(): def prog(): x___foo = 1 def foo___bar(): y___foo.x___foo = 1 def outp(): x = 1 def foo(): y.x___foo = 1 run_pass_harness(prog, RemoveSuffixesPass, outp, locals())
def test_record_to_vars_basic(): class Cls: pass def prog(): c = Cls.__new__(Cls) c.x = 1 assert c.x == 1 def outp(): x___c = 1 assert x___c == 1 run_pass_harness(prog, RecordToVarsPass, outp, locals())
def test_record_to_vars_noop_2(): class Cls: def foo(self): pass def prog(): c = Cls.__new__(Cls) c.foo() def outp(): c = Cls.__new__(Cls) c.foo() run_pass_harness(prog, RecordToVarsPass, outp, locals())
def test_deadcode_for_if_never(): def prog(): for i in range(10): if False: x = 1 else: y = 1 outp = """ for i in range(10): y = 1 """ run_pass_harness(prog, DeadCodePass, outp, locals())
def test_copy_propagation_attribute(): class Foo: def __init__(self): self.x = 1 def prog(): f = Foo() a = f.x assert a == 1 def outp(): f = Foo() assert f.x == 1 run_pass_harness(prog, CopyPropagationPass, outp, locals())
def test_record_to_vars_noop(): class Cls: pass def prog(): c = Cls() c.x = 1 assert c.x == 1 def outp(): c = Cls() c.x = 1 assert c.x == 1 run_pass_harness(prog, RecordToVarsPass, outp, locals())
def test_unused_vars_multiple_assign(): def prog(): y = 1 y = y + 1 x = 1 x = 2 assert x + y == 4 def outp(): y = 1 y = y + 1 x = 2 assert x + y == 4 run_pass_harness(prog, UnusedVarsPass, outp, locals())
def test_deadcode_for_if_sometimes(): def prog(): for i in range(10): if i % 2 == 1: x = 1 else: y = 1 outp = """ for i in range(10): if i % 2 == 1: x = 1 else: y = 1 """ run_pass_harness(prog, DeadCodePass, outp, locals())
def test_copy_propagation_scope(): def prog(): x = 1 y = x def foo(): return [y for _ in range(1)] def bar(y): return y def outp(): x = 1 def foo(): return [x for _ in range(1)] def bar(y): return y run_pass_harness(prog, CopyPropagationPass, outp, locals())
def test_deadcode_keep_comments(): def prog(): # hello world """don't remove me""" # please remove me if False: # and remove me x = 1 # please keep me else: # and keep me x = 2 def outp(): # hello world """don't remove me""" # please keep me # and keep me x = 2 run_pass_harness(prog, DeadCodePass, outp, locals())
def test_clean_imports_preserve_comments(): def prog(): # A import json # B import csv if True: # C import json pass def outp(): import csv import json # A # B if True: # C pass run_pass_harness(prog, CleanImportsPass, outp, locals())