Skip to content

Commit 2ed385c

Browse files
committed
added tests
1 parent 360c5b8 commit 2ed385c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+3371
-2006
lines changed

bin/alk.jar

-6.21 KB
Binary file not shown.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
alki -a askith_assert.alk -s -smt="Z3"
3+
4+
a |-> $a_0
5+
res |-> 0
6+
i |-> $i_0
7+
Path condition:
8+
((($a_0.size()>0)&&(0<=$i_0))&&($i_0<($a_0.size()-1))) &&
9+
!($a_0[$i_0]>$a_0[($i_0+1)])
10+
11+
a |-> (store (store $a_0 $i_0 $a_0[($i_0+1)]) ($i_0+1) $a_0[$i_0])
12+
res |-> 0
13+
tmp |-> $a_0[$i_0]
14+
i |-> $i_0
15+
Path condition:
16+
((($a_0.size()>0)&&(0<=$i_0))&&($i_0<($a_0.size()-1))) &&
17+
($a_0[$i_0]>$a_0[($i_0+1)]) &&
18+
validStore($a_0, $i_0, $a_0[($i_0+1)]) &&
19+
validStore((store $a_0 $i_0 $a_0[($i_0+1)]), ($i_0+1), $a_0[$i_0])
20+
*/
21+
22+
@havoc a : array<int>;
23+
@havoc i : int;
24+
@assume a.size() > 0 && 0 <= i && i < a.size() - 1;
25+
if (a[i] > a[i + 1])
26+
{
27+
tmp = a[i];
28+
a[i] = a[i + 1];
29+
a[i + 1] = tmp;
30+
res = i;
31+
}
32+
res = 0;
33+
@assert a[i] <= a[i + 1];
34+
@assert res > 0 ==> res == i;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
alki -a askith_call.alk -m -s -smt="Z3"
3+
4+
Successfully verified: askIth
5+
6+
a |-> $a_1
7+
last |-> $\result_0
8+
Path condition:
9+
($a.size()>3) &&
10+
($a_1[2]<=$a_1[3]) &&
11+
($\result_0>0) ==> ($\result_0==2)
12+
13+
*/
14+
15+
askIth(out a, i)
16+
@requires a : array<int>
17+
@requires i : int
18+
@requires a.size() > 0 && 0 <= i && i < a.size() - 1
19+
@ensures a[i] <= a[i + 1]
20+
@ensures \result > 0 ==> \result == i
21+
@ensures \result : int
22+
{
23+
if (a[i] > a[i + 1])
24+
{
25+
tmp = a[i];
26+
a[i] = a[i + 1];
27+
a[i + 1] = tmp;
28+
return i;
29+
}
30+
return 0;
31+
}
32+
33+
@symbolic $a : array<int>;
34+
a = $a;
35+
@assume a.size() > 3;
36+
last = askIth(a, 2);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
alki -a askith_verify.alk -s -smt="Z3"
3+
4+
Successfully verified: askIth
5+
*/
6+
7+
askIth(out a, i)
8+
@requires a : array<int>
9+
@requires i : int
10+
@requires a.size() > 0 && 0 <= i && i < a.size() - 1
11+
@ensures a[i] <= a[i + 1]
12+
@ensures \result > 0 ==> \result == i
13+
@ensures \result : int
14+
{
15+
if (a[i] > a[i + 1])
16+
{
17+
tmp = a[i];
18+
a[i] = a[i + 1];
19+
a[i + 1] = tmp;
20+
return i;
21+
}
22+
return 0;
23+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
alki -a bubblesort.alk -m -i "b |-> [2, 3, 1]"
3+
b |-> [1, 2, 3]
4+
alki -a bubblesort.alk -m -i "b |-> [1.2, 1.5, 1.4]"
5+
b |-> [1.2, 1.4, 1.5]
6+
alki -a bubblesort.alk -m -i "b |-> [\"ab\", \"ac\", \"aa\"]"
7+
b |-> ["aa", "ab", "ac"]
8+
*/
9+
10+
swap(out a, i, j)
11+
@requires 0 <= i && i < a.size()
12+
@requires 0 <= j && j < a.size()
13+
{
14+
temp = a[i];
15+
a[i] = a[j];
16+
a[j] = temp;
17+
}
18+
19+
askIth(out a, i)
20+
@requires a.size() > 1
21+
@requires 0 <= i && i < a.size() - 1
22+
{
23+
if (a[i] > a[i + 1]) {
24+
swap(a, i, i + 1);
25+
return i;
26+
}
27+
return 0;
28+
}
29+
30+
bubbleSort(out a)
31+
@requires a.size() > 0
32+
{
33+
last = a.size() - 1;
34+
while (last > 0)
35+
{
36+
n1 = last;
37+
for (i = 0; i < n1; ++i)
38+
{
39+
last = askIth(a, i);
40+
}
41+
}
42+
}
43+
44+
bubbleSort(b);

examples/analysis/tase2022/fstalg.alk

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
alki -a fstalg.alk -m -i "a |-> [1, 2, 2, 3, 3, 3]"
3+
4+
a |-> [1, 2, 2, 3, 3, 3]
5+
slp |-> 3
6+
i |-> 6
7+
*/
8+
9+
slp = 1;
10+
i = 1;
11+
while (i < a.size())
12+
{
13+
if (a[i] == a[i - slp])
14+
slp = slp + 1;
15+
i = i + 1;
16+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
alki -a fstalg_assert.alk -m -s -smt="Z3"
3+
4+
a |-> $a_0
5+
slp |-> $slp_0
6+
i |-> ($i_1+1)
7+
Path condition:
8+
($a_0.size()>0) &&
9+
forall $i_0 : int :: ((0<=$i_0)&&($i_0<($a_0.size()-1))) ==> ($a_0[$i_0]<=$a_0[($i_0+1)]) &&
10+
exists $k_0 : int :: (((($slp_0-1)<=$k_0)&&($k_0<$i_1))&&($a_0[$k_0]==$a_0[(($k_0-$slp_0)+1)])) &&
11+
!($a_0[$i_1]==$a_0[($i_1-$slp_0)])
12+
13+
a |-> $a_0
14+
slp |-> ($slp_0+1)
15+
i |-> ($i_1+1)
16+
Path condition:
17+
($a_0.size()>0) &&
18+
forall $i_0 : int :: ((0<=$i_0)&&($i_0<($a_0.size()-1))) ==> ($a_0[$i_0]<=$a_0[($i_0+1)]) &&
19+
exists $k_0 : int :: (((($slp_0-1)<=$k_0)&&($k_0<$i_1))&&($a_0[$k_0]==$a_0[(($k_0-$slp_0)+1)])) &&
20+
($a_0[$i_1]==$a_0[($i_1-$slp_0)])
21+
*/
22+
23+
@havoc a : array<int>;
24+
slp = 1;
25+
i = 1;
26+
@assume a.size() > 0;
27+
@assume forall i : int :: 0 <= i && i < a.size() - 1 ==> a[i] <= a[i + 1];
28+
29+
@havoc i : int;
30+
@havoc slp : int;
31+
@assume exists k:int :: slp - 1 <= k && k < i && a[k] == a[k - slp + 1];
32+
if (a[i] == a[i - slp])
33+
slp = slp + 1;
34+
i = i + 1;
35+
@assert exists k:int :: slp - 1 <= k && k < i && a[k] == a[k - slp + 1];
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
alki -a fstalg_assume.alk -m -s -smt="Z3"
3+
4+
a |-> $a_0
5+
slp |-> 2
6+
i |-> 3
7+
8+
a |-> $a_0
9+
slp |-> 3
10+
i |-> 3
11+
12+
a |-> $a_0
13+
slp |-> 2
14+
i |-> 3
15+
16+
a |-> $a_0
17+
slp |-> 1
18+
i |-> 3
19+
*/
20+
21+
@havoc a : array<int>;
22+
@assume forall i : int :: 0 <= i && i < a.size() - 1 ==> a[i] <= a[i + 1];
23+
@assume a.size() == 3;
24+
slp = 1;
25+
i = 1;
26+
while (i < a.size())
27+
{
28+
if (a[i] == a[i - slp])
29+
slp = slp + 1;
30+
i = i + 1;
31+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
alki -a fstalg_inv.alk -m -s -smt="Z3"
3+
4+
a |-> $a_0
5+
slp |-> $slp_0
6+
i |-> $i_1
7+
8+
[13:11] Loop invariant was verified!
9+
[14:12] Loop invariant was verified!
10+
[13:11] Loop invariant was verified!
11+
[14:12] Loop invariant was verified!
12+
13+
*/
14+
15+
@havoc a : array<int>;
16+
slp = 1;
17+
i = 1;
18+
@assume a.size() > 0;
19+
@assume forall i : int :: 0 <= i && i < a.size() - 1 ==> a[i] <= a[i + 1];
20+
while (i < a.size())
21+
@invariant 1 <= slp && i <= a.size();
22+
@invariant (exists k:int :: slp - 1 <= k && k < i && a[k] == a[k - slp + 1]);
23+
// @invariant (forall k:int :: slp <= k && k < i ==> a[k] != a[k - slp]);
24+
// Z3 TIMEOUT, Dafny TIMEOUT; Why3 with Alt-Ergo WORKS FINE
25+
@modifies slp, i;
26+
{
27+
if (a[i] == a[i - slp])
28+
slp = slp + 1;
29+
i = i + 1;
30+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
alki -a fstalg_loopassert.alk -m -s -smt="Z3"
3+
4+
a |-> $a_0
5+
slp |-> 1
6+
i |-> 3
7+
8+
a |-> $a_0
9+
slp |-> 2
10+
i |-> 3
11+
12+
a |-> $a_0
13+
slp |-> 3
14+
i |-> 3
15+
16+
a |-> $a_0
17+
slp |-> 2
18+
i |-> 3
19+
*/
20+
21+
@havoc a : array<int>;
22+
slp = 1;
23+
i = 1;
24+
@assume a.size() == 3;
25+
@assume forall i : int :: 0 <= i && i < a.size() - 1 ==> a[i] <= a[i + 1];
26+
while (i < a.size())
27+
@modifies slp, i;
28+
{
29+
if (a[i] == a[i - slp])
30+
slp = slp + 1;
31+
i = i + 1;
32+
}
33+
@loopassert 1 <= slp && i <= a.size() && (exists k:int :: slp - 1 <= k && k < i && a[k] == a[k - slp + 1]);

0 commit comments

Comments
 (0)