public class trace { public void mgood() { int k = 5; int j = 0; //@ loop_invariant j == i && 0 <= i && i <= k; for (int i=0; i<k; i++) { ++j; } //@ assert j == k; return ; } public void m1() { int k = 5; int j = 1; //@ loop_invariant j == i && 0 <= i && i <= k; for (int i=0; i<k; i++) { ++j; } //@ assert j == k; return ; } public void m2() { int k = 5; int j = 0; //@ loop_invariant j == i && 0 <= i && i <= k; for (int i=0; i<k; i++) { ++j; if (j == 3) { //@ assert false; } } //@ assert j == k; return ; } public void m3() { int k = 5; int j = 0; //@ loop_invariant j == i && 0 <= i && i <= k; //@ decreases j; for (int i=0; i<k; i++) { ++j; } //@ assert j == k; return ; } public void m4() { int k = 5; int j = 0; //@ loop_invariant j == i && 0 <= i && i <= k; //@ decreases i-j; for (int i=0; i<k; i++) { ++j; } //@ assert j == k; return ; } public void m5() { int k = 5; int j = 0; //@ loop_invariant j == i && 0 <= i && i <= k; //@ decreases k-j-1; for (int i=0; i<k; i++) { ++j; } //@ assert j == k; return ; } public void m6() { int k = 5; int j = 0; //@ loop_invariant j == i && 0 <= i && i <= k; //@ decreases k-j-2; for (int i=0; i<k; i++) { ++j; } //@ assert j == k; return ; } public void mwhile() { int k = 5; int j = 0; int i = 0; //@ loop_invariant j == 2*i && 0 <= i && i <= k; while (i < k) { j += 2; ++i; } //@ assert j == k+k; return ; } public void mwhile1() { int k = 5; int j = 1; int i = 0; //@ loop_invariant j == 2*i && 0 <= i && i <= k; while (i < k) { j += 2; ++i; } //@ assert j == k+k; return ; } public void mwhile2() { int k = 5; int j = 0; int i = 0; //@ loop_invariant j == 2*i && 0 <= i && i <= k; while (i < k) { j += 3; ++i; } //@ assert j == k+k; return ; } public void mdo() { int k = 5; int j = 0; int i = 0; //@ loop_invariant j == 2*i && 0 <= i && i < k; //@ decreases k-i; do { j += 2; ++i; } while (i < k); //@ assert j == k+k; return ; } public void mdo1() { int k = 5; int j = 1; int i = 0; //@ loop_invariant j == 2*i && 0 <= i && i < k; do { j += 2; ++i; } while (i < k); //@ assert j == k+k; return ; } public void mdo2() { int k = 5; int j = 0; int i = 0; //@ loop_invariant j == 2*i && 0 <= i && i < k; do { j += 3; ++i; } while (i < k); //@ assert j == k+k; return ; } public void mforeach(int[] a) { int j = 0; //@ loop_invariant j == \index && 0 <= \index && \index <= a.length; for (int i: a) { j += 1; } //@ assert j == a.length; return ; } public void mforeach1(int[] a) { int j = 0; //@ loop_invariant j == 0 && 0 <= \index && \index <= a.length; for (int i: a) { j += 1; } //@ assert j == a.length; return ; } public void mforeach2(int[] a) { int j = 0; //@ loop_invariant j == \index && 0 <= \index && \index <= a.length; for (int i: a) { j = j + j + 1; } return ; } public void mforeach3(int[] a) { int j = 0; //@ loop_invariant j == \index && 0 <= \index && \index <= a.length; //@ decreases a.length - j; for (int i: a) { j += 1; } //@ assert j == a.length; return ; } public void mforeach4(int[] a) { int j = 0; //@ loop_invariant j == \index && 0 <= \index && \index <= a.length; //@ decreases j; for (int i: a) { j += 1; } //@ assert j == a.length; return ; } public void mforeach5(int[] a) { int j = 0; //@ loop_invariant j == \index && 0 <= \index && \index <= a.length; //@ decreases -j; for (int i: a) { j += 1; } //@ assert j == a.length; return ; } }