public class UniqueList { private /*@ spec_public */ int[] values; private /*@ spec_public */ int length; /* public invariant (\forall int i, j; 0 <= i && i < length - 1 && 1 <= j && j < length && i < j; values[i] != values[j] ); */ /* { new org.jmlspecs.utils.Utils.ValueBool() { public boolean value(Object[] args) { return true;} }.value(null); } */ /* @ public invariant (\forall int i; @ 0 <= i && i < length - 1; @ (\forall int j; 1 <= j && j < length && i < j; values[i] != values[j]) @ ); @*/ public UniqueList(){ values = new int[10]; length = 0; } /*@ requires length < 10; @ ensures length == \old(length) + 1; @ requires (\forall int i; 0 <= i && i < length; values[i] != value); @*/ public void add(int value){ values[length] = value; length++; } /*@ requires index < length; @ ensures \result == values[index]; @*/ public /*@ pure */ int getValue(int index){ return values[index]; } /*@ @ requires index1 < length; @ requires index2 < length; @ ensures values[index1] == \old(values[index2]); @ ensures values[index2] == \old(values[index1]); @*/ public void swap(int index1, int index2){ int temp = values[index1]; values[index1] = values[index2]; values[index2] = temp; } public static void main(String[] args){ UniqueList list = new UniqueList(); list.add(4); list.add(5); list.add(6); list.swap(0,2); list.add(6); } }