def test_one(self): prg1 = "{a:=1;b:=2;c:=1}; if(a>2 and not b=2) then{c:=2} else{a:=a-1}; c:=c+1; c:=c*1;c:=c/1; if(a=1 or b=2) then{d:=1};havoc x,y; while (y>10) do{y:=y-3}; assume x > 10; assert x > 15;skip; print_state" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 12)
def test_3(self): prg1 = "y := 8; skip; print_state" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 1)
def test_02(self): prg1 = "x := 10; y := 11; z := x + y; assert z = x + y" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 1)
def test_rel_exp(self): prg1 = "x := 1; y := 2; if x > y or x = 1 then skip; print_state" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 1)
def test_one(self): prg1 = "havoc x; assume x > 10; assert x > 15" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 1)
def test_if_else(self): prg1 = "x := 1; if x > 5 then skip else false " ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 1)
def test_two (self): prg2 = "havoc x,y;assume y>=0;c:=0;r:=x;while c<y inv c<=y and r=x+c do{r:=r+1;c:=c+1};assert r=x+y" ast2 = ast.parse_string (prg2) sym = wlang.sym.SymExec () st = wlang.sym.SymState () out = [s for s in sym.run (ast2, st)] self.assertEquals (len(out), 1)
def test_assert2(self): prg1 = "x := 1; assert x < 5" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 1)
def test_one(self): prg1 = """{a := 1; b := -1; c := a + b; d := b - a; e := a * b; f := a / b}; if a > 1 and a >= b then b := 3; if a <= 1 or b < 3 then a := 1; if false and not a = 1 then a := 1 else print_state; skip; print_state; while (a < 3) or (b = 1) and true do {a := a + 1}; assume b = -1; havoc c,d; assert a = 3; assert a = 2""" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() st.pick_concerete() st.is_error() st.mk_error() st.to_smt2() repr(st) out = [s for s in sym.run(ast1, st)] # self.assertEquals (len(out), 1) st2 = wlang.sym.SymState() st2.add_pc(z3.BoolVal(True)) st2.add_pc(z3.BoolVal(False)) st2.pick_concerete()
def test_while_wrong_inv(self): prg1 = "havoc x,y; assume y >= 0; c := 0; r := x; while c < y inv c > y do { r:= r+1; c := c+1}; assert r = x+y" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 1)
def test_assume(self): prg1 = "y := 2; assume y > 5" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 0)
def test_arithmetic(self): prg1 = "x := 10; y := 15; if x < y then {x := x + y * 5/5 - 2}" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 1)
def test_bool_const(self): prg1 = "x := 10; if true then {x := x + 1}" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 1)
def test_bool_exp(self): prg1 = "x := 1; y := 2; if x < y or x >= 0 and not x <= 15 then skip" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 1)
def test_six (self): prg1 = "assume x<20; while x>0 do x := x-1; print_state; while false do skip" ast1 = ast.parse_string (prg1) sym = wlang.sym.SymExec () st = wlang.sym.SymState () out = [s for s in sym.run (ast1, st)] print("len(out)=", len(out)) self.assertEquals (len(out), 11*2)
def test_five(self): prg1 = "assume x=2; if x>2 then skip; if x=2 then skip else skip; if not (x = 2) then skip else skip" ast1 = ast.parse_string (prg1) sym = wlang.sym.SymExec () st = wlang.sym.SymState () out = [s for s in sym.run (ast1, st)] print("len(out)=", len(out)) self.assertEquals (len(out), 2*2*2)
def test_four(self): prg1 = "x:= (1+2)-(2*(6/3)); skip; print_state" ast1 = ast.parse_string (prg1) sym = wlang.sym.SymExec () st = wlang.sym.SymState () out = [s for s in sym.run (ast1, st)] print("len(out)=", len(out)) self.assertEquals (len(out), 1)
def test_three (self): prg1 = "assert true; if ((7>=3 and 4>=4) or not true) then x:=10 else print_state" ast1 = ast.parse_string (prg1) sym = wlang.sym.SymExec () st = wlang.sym.SymState () out = [s for s in sym.run (ast1, st)] print("len(out)=", len(out)) self.assertEquals (len(out), 2)
def test_seven (self): prg1 = "x:=10; while x=10 do x:=11" ast1 = ast.parse_string (prg1) sym = wlang.sym.SymExec () st = wlang.sym.SymState () out = [s for s in sym.run (ast1, st)] print("len(out)=", len(out)) self.assertEquals (len(out), 3)
def test_eight(self): prg1 = "havoc x,y,z;if x>10 then {if x>5 then x:=10}" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] print('testProgram\n') print(out)
def test_two (self): prg2 = "assume x > 100; assert x > 15" ast2 = ast.parse_string (prg2) sym = wlang.sym.SymExec () st = wlang.sym.SymState () out = [s for s in sym.run (ast2, st)] print("len(out)=", len(out)) self.assertEquals (len(out), 1)
def test_two(self): prg1 = """ havoc x,y; assume y >= 0; c:= 0; r:= x; while c<y inv c <= y and r = x + c do { r:= r+1; c:= c+1 }; assert r= x+y; havoc x,y; assume y >= 0; c:= 0; r:= x; while c<y inv c >y do { r:= r+1; c:= c+1 }; assert r= x+y; havoc x,y; assume y >= 0; c:= 0; r:= x; while true inv c <= y and r = x + c do { r:= r+1; c:= c+1 }; assert r= x+y""" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)]
def test_two(self): # For the d part of ques 3 #prg1 = "havoc x,y; assume y>=0 " prg1 = "havoc x,y; assume y>=0; c:=y; r:=x; while c>0 inv (c<=y and r=x+y-c) do {r:= r+1; c:= c-1}; assert r =x+y" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] self.assertEquals(len(out), 1)
def test_program2(self): prg1 = "havoc x,y,z;if x>10 then {if x<20 then {if x>15 then {while x < 20 and x>9 do x:=x+1}}};while x < 25 and x>14 do x:=x+1" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] print('testProgram2\n') print(out) self.assertEquals(len(out), 13)
def test_nine(self): prg1 = "havoc x,r; assume x>10;assert x<0" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] print('test9\n') print(out) self.assertEquals(len(out), 0)
def test_two(self): prg1 = "havoc x; if true then x:=x+1;x:=x-1;x:=x*1;x:=x/1" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] print('test2\n') print(out) self.assertEquals(len(out), 1)
def test_three(self): prg1 = "havoc x,y;if x < 8 then y:=2;print_state" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] print('test3\n') print(out) self.assertEquals(len(out), 2)
def test_six(self): prg1 = "havoc x; while x >-11 and x<0 do x:=x+1" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] print('test6\n') print(out) self.assertEquals(len(out), 11)
def test_seven(self): prg1 = "havoc x;assert x>5;while x < 10 and x>-1 do x:=x+1" ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] print('test4\n') print(out) self.assertEquals(len(out), 5)
def test_five(self): prg1 = "havoc x; if x<8 or x>10 then x:=x+1 else x:=x-1;if not x>0 then x:=x+1;if x>5 then x:=10;skip" # if x<5 then x:=x+5 # ast1 = ast.parse_string(prg1) sym = wlang.sym.SymExec() st = wlang.sym.SymState() out = [s for s in sym.run(ast1, st)] print('test5\n') print(out) self.assertEquals(len(out), 4)