def test_pyObjectManager_Char_is_unconstrained(): b = ast_parse.parse(test2).body p = Path(b, source=test2) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 s = pg.completed[0].state.copy() c = s.getVar('s')[0] assert c.is_unconstrained # For now, this will add bounded int constraints to the solver... z3_obj = c.getZ3Object() # Those bounds should not count as constrained assert c.is_unconstrained # This constraint should eval to True, and not be added s.addConstraint(z3_obj > 5) assert c.is_unconstrained # Try with symbolic c = s.getVar('c2')[0] assert c.is_unconstrained # For now, this will add bounded int constraints to the solver... z3_obj = c.getZ3Object() # Those bounds should not count as constrained assert c.is_unconstrained # This should add a real constraint s.addConstraint(z3_obj > 5) assert c.is_constrained
def test_function_pyState_BVS_ret_as_list(): b = ast_parse.parse(test2).body p = Path(b,source=test2) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1
def test_var_used_in_z3_ignore(): b = ast_parse.parse(test10).body p = Path(b, source=test10) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 s = pg.completed[0].state.copy() i = s.getVar('i') z3_obj = i.getZ3Object() # Not in here to begin with #assert not z3Helpers.varIsUsedInSolver(z3_obj,s.solver) assert not s.var_in_solver(z3_obj) # Now it will be in there s.addConstraint(z3_obj > 3) #assert z3Helpers.varIsUsedInSolver(z3_obj,s.solver) assert s.var_in_solver(z3_obj) # Now try ignoring it s.remove_constraints(z3_obj > 3) s.addConstraint(z3_obj > 3) assert not s.var_in_solver(z3_obj, ignore=[z3_obj > 3]) assert not s.var_in_solver(z3_obj, ignore=z3_obj > 3)
def test_pyObjectManager_List_setitem(): b = ast_parse.parse(test1).body p = Path(b, source=test1) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 l = pg.completed[0].state.getVar('l') s = pg.completed[0].state # Base check assert l[1].count == 0 assert type(l[1]) == Real # Assign an Int l[1] = Int(varName='x', ctx=0, state=s) assert l[1].count == 1 assert type(l[1]) == Int # Assign back to Real l[1] = Real(varName='x', ctx=0, state=s) assert l[1].count == 2 assert type(l[1]) == Real # Assign to BitVec l[1] = BitVec(varName='x', ctx=0, size=32, state=s) assert l[1].count == 3 assert type(l[1]) == BitVec # Assign List l[1] = List(varName='x', ctx=0, state=s) #assert l[1].count == 4 assert type(l[1]) == List
def test_pyState_Subscript_negative_slices(): b = ast_parse.parse(test14).body p = Path(b,source=test14) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 s = pg.completed[0].state.copy() a = s.getVar('a') b = s.getVar('b') x = s.getVar('x') y = s.getVar('y') assert a.mustBe("test"[-1:]) assert b.mustBe("test"[-3:-1]) assert len(x) == 1 assert x[0].mustBe(4) assert len(y) == 2 assert y[0].mustBe(2) assert y[1].mustBe(3)
def test_pySym_If_Subscript_Int(): b = ast_parse.parse(test5).body p = Path(b, source=test5) pg = PathGroup(p) pg.explore() # Splits into 8 possibilities and then if splits again assert len(pg.completed) == 2 assert len(pg.deadended) == 2 s = pg.completed[0].state.copy() x = s.getVar('x') y = s.getVar('y') i = s.getVar('i') assert y.mustBe(2) if i.mustBe(0): assert x.mustBe(0) else: assert not x.canBe(0) s = pg.completed[1].state.copy() x = s.getVar('x') y = s.getVar('y') i = s.getVar('i') assert y.mustBe(2) if i.mustBe(0): assert x.mustBe(0) else: assert not x.canBe(0)
def test_pyObjectManager_List_setitem(): b = ast_parse.parse(test1).body p = Path(b,source=test1) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 l = pg.completed[0].state.getVar('l') s = pg.completed[0].state # Base check assert l[1].count == 0 assert type(l[1]) == Real # Assign an Int l[1] = Int(varName='x',ctx=0,state=s) assert l[1].count == 1 assert type(l[1]) == Int # Assign back to Real l[1] = Real(varName='x',ctx=0,state=s) assert l[1].count == 2 assert type(l[1]) == Real # Assign to BitVec l[1] = BitVec(varName='x',ctx=0,size=32,state=s) assert l[1].count == 3 assert type(l[1]) == BitVec # Assign List l[1] = List(varName='x',ctx=0,state=s) #assert l[1].count == 4 assert type(l[1]) == List
def test_var_used_in_z3_ignore(): b = ast_parse.parse(test10).body p = Path(b,source=test10) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 s = pg.completed[0].state.copy() i = s.getVar('i') z3_obj = i.getZ3Object() # Not in here to begin with #assert not z3Helpers.varIsUsedInSolver(z3_obj,s.solver) assert not s.var_in_solver(z3_obj) # Now it will be in there s.addConstraint(z3_obj > 3) #assert z3Helpers.varIsUsedInSolver(z3_obj,s.solver) assert s.var_in_solver(z3_obj) # Now try ignoring it s.remove_constraints(z3_obj > 3) s.addConstraint(z3_obj > 3) assert not s.var_in_solver(z3_obj, ignore=[z3_obj > 3]) assert not s.var_in_solver(z3_obj, ignore=z3_obj > 3)
def test_function_List_insert(): b = ast_parse.parse(test1).body p = Path(b,source=test1) pg = PathGroup(p) pg.explore() # [5.15, 'c', 's\x00\x00\x00\x00\x00', 14, 'test', [1, 2, 4, 5], 1.234, 0, 1, 2, 3] assert len(pg.completed) == 1 s = pg.completed[0].state.copy() l = s.getVar('l') assert type(l[0]) == Real assert type(l[1]) == String and len(l[1]) == 1 assert type(l[2]) == String assert type(l[3]) == BitVec my_list = s.any_list(l) assert my_list[0] == 5.15 assert my_list[1] == "c" assert my_list[2].startswith("s") assert my_list[3] == 14 assert my_list[4] == "test" assert my_list[5] == [1,2,4,5] assert my_list[6] == 1.234 assert my_list[7:] == [0,1,2,3]
def test_pySym_functionNestingTwo(): # More intense nesting b = ast_parse.parse(test7).body p = Path(b,source=test7) pg = PathGroup(p) pg.explore() assert pg.completed[0].state.any_int('x') == 7
def test_function_pyState_BVS_ret_as_list(): b = ast_parse.parse(test2).body p = Path(b, source=test2) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1
def test_pyObjectManager_Char_is_unconstrained(): b = ast_parse.parse(test2).body p = Path(b,source=test2) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 s = pg.completed[0].state.copy() c = s.getVar('s')[0] assert c.is_unconstrained # For now, this will add bounded int constraints to the solver... z3_obj = c.getZ3Object() # Those bounds should not count as constrained assert c.is_unconstrained # This constraint should eval to True, and not be added s.addConstraint(z3_obj > 5) assert c.is_unconstrained # Try with symbolic c = s.getVar('c2')[0] assert c.is_unconstrained # For now, this will add bounded int constraints to the solver... z3_obj = c.getZ3Object() # Those bounds should not count as constrained assert c.is_unconstrained # This should add a real constraint s.addConstraint(z3_obj > 5) assert c.is_constrained
def test_pySym_complicated(): b = ast_parse.parse(test5).body p = Path(b,source=test5) pg = PathGroup(p) assert pg.explore(find=19) assert pg.found[0].state.any_int('z') == 26
def test_pySym_complicated(): b = ast_parse.parse(test5).body p = Path(b, source=test5) pg = PathGroup(p) assert pg.explore(find=19) assert pg.found[0].state.any_int('z') == 26
def test_pyState_ListComp_StringCmp(): b = ast_parse.parse(test7).body p = Path(b, source=test7) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == ["b"]
def test_function_int_statesplit(): b = ast_parse.parse(test3).body p = Path(b,source=test3) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 8 assert set([p.state.any_int('x') for p in pg.completed]) == set(range(8))
def test_pyState_Subscript_MultiDimentional(): b = ast_parse.parse(test3).body p = Path(b,source=test3) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_int('x') == 4
def test_pySym_BinOp_StringMult(): b = ast_parse.parse(test14).body p = Path(b,source=test14) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_str('x') == "A" * 4
def test_pySym_BinOp_BitStuff(): b = ast_parse.parse(test5).body p = Path(b, source=test5) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_int('e') == 57065549561856
def test_pySym_BinOp_StringMult(): b = ast_parse.parse(test14).body p = Path(b, source=test14) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_str('x') == "A" * 4
def test_function_String_rstrip_Char(): b = ast_parse.parse(test5).body p = Path(b, source=test5) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 2 assert set([p.state.any_str('x') for p in pg.completed]) == {"m", "mee"}
def test_pyState_GeneratorExp_General(): b = ast_parse.parse(test1).body p = Path(b,source=test1) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_str('x') == "".join(str(i) for i in range(5))
def test_function_List_append(): b = ast_parse.parse(test1).body p = Path(b,source=test1) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [1, 2.3, [1, 2.2, 3]]
def test_function_List_append_statesplit(): b = ast_parse.parse(test2).body p = Path(b,source=test2) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 8 assert set([p.state.any_list('l').pop() for p in pg.completed]) == set(range(8))
def test_pyState_Subscript_AssignToVar(): b = ast_parse.parse(test1).body p = Path(b,source=test1) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_int('x') == 2
def test_getZ3Object(): b = ast_parse.parse("x = 12").body p = Path(b,source="x = 12") pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 x = pg.completed[0].state.getVar('x') assert type(x) is Int
def test_pySym_BinOp_BitStuff(): b = ast_parse.parse(test5).body p = Path(b,source=test5) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_int('e') == 57065549561856
def test_pySym_BinOp_ListConcat(): b = ast_parse.parse(test11).body p = Path(b, source=test11) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [1, 2, 3] + [4, 5, 6]
def test_function_String_rstrip_Char(): b = ast_parse.parse(test5).body p = Path(b,source=test5) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 2 assert set([p.state.any_str('x') for p in pg.completed]) == {"m","mee"}
def test_pySym_BinOp_Xor(): b = ast_parse.parse(test4).body p = Path(b, source=test4) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_int('d') == 13
def test_function_ord_StateSplitting(): b = ast_parse.parse(test2).body p = Path(b,source=test2) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 8 assert set([p.state.any_int('x') for p in pg.completed]) == set([ord(str(x)) for x in range(8)])
def test_pySym_BinOp_ListConcat(): b = ast_parse.parse(test11).body p = Path(b,source=test11) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [1,2,3] + [4,5,6]
def test_pyState_nestedSlice(): b = ast_parse.parse(test11).body p = Path(b,source=test11) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_int('x') == 3
def test_pySym_BinOp_Xor(): b = ast_parse.parse(test4).body p = Path(b,source=test4) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_int('d') == 13
def test_pyObjectManager_List_BasicAssign(): b = ast_parse.parse(test1).body p = Path(b,source=test1) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [1,2.2,3]
def test_pyObjectManager_List_StateSplit(): b = ast_parse.parse(test12).body p = Path(b,source=test12) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 8 assert set([p.state.any_list('l')[1] for p in pg.completed]) == set(range(8))
def test_function_List_append(): b = ast_parse.parse(test1).body p = Path(b, source=test1) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [1, 2.3, [1, 2.2, 3]]
def test_pyObjectManager_List_FunctionCalls(): b = ast_parse.parse(test10).body p = Path(b,source=test10) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [1, 12, [24]]
def test_getZ3Object(): b = ast_parse.parse("x = 12").body p = Path(b, source="x = 12") pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 x = pg.completed[0].state.getVar('x') assert type(x) is Int
def test_pyObjectManager_List_NestedList(): b = ast_parse.parse(test2).body p = Path(b,source=test2) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [1,2.2,[3,[4,5],6]]
def test_pyObjectManager_List_BasicAssign(): b = ast_parse.parse(test1).body p = Path(b, source=test1) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [1, 2.2, 3]
def test_pySym_variableSlice(): b = ast_parse.parse(test4).body p = Path(b,source=test4) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_int('out') == 104
def test_pyState_ListComp_MultipleFor_ReturnList(): b = ast_parse.parse(test5).body p = Path(b,source=test5) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [[x,y] for x in [1,2,3] for y in [1]]
def test_pyObjectManager_List_FunctionCalls(): b = ast_parse.parse(test10).body p = Path(b, source=test10) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [1, 12, [24]]
def test_pySym_nestedFor(): b = ast_parse.parse(test2).body p = Path(b,source=test2) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_int('out') == 290
def test_pyObjectManager_List_NestedList(): b = ast_parse.parse(test2).body p = Path(b, source=test2) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [1, 2.2, [3, [4, 5], 6]]
def test_pyState_ListComp_MoreFunctions(): b = ast_parse.parse(test8).body p = Path(b, source=test8) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [str(i) for i in range(10)]
def test_function_int_statesplit(): b = ast_parse.parse(test3).body p = Path(b, source=test3) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 8 assert set([p.state.any_int('x') for p in pg.completed]) == set(range(8))
def test_pySym_AugAssign_BitStuff(): b = ast_parse.parse(test3).body p = Path(b,source=test3) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_int('e') == 38776701190144
def test_pyState_ListComp_outputModifier(): b = ast_parse.parse(test6).body p = Path(b, source=test6) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 1 assert pg.completed[0].state.any_list('l') == [x**2 for x in range(5)]
def test_pyObjectManager_List_StateSplit(): b = ast_parse.parse(test12).body p = Path(b, source=test12) pg = PathGroup(p) pg.explore() assert len(pg.completed) == 8 assert set([p.state.any_list('l')[1] for p in pg.completed]) == set(range(8))