示例#1
0
 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)
示例#3
0
 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)
示例#9
0
    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()
示例#10
0
 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)
示例#11
0
 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)
示例#12
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)
示例#13
0
 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)
示例#14
0
 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)
示例#15
0
 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)
示例#16
0
 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)
示例#17
0
 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)
示例#18
0
 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)
示例#19
0
 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)
示例#20
0
 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)
示例#21
0
 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)
示例#22
0
 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)]
示例#23
0
    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)
示例#24
0
 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)
示例#25
0
 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)
示例#26
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)
示例#27
0
 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)
示例#28
0
 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)
示例#29
0
 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)
示例#30
0
 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)