package cmu.datatypes;
import java.util.LinkedList;
import org.junit.Test;
import gov.nasa.jpf.annotation.Conditional;
import gov.nasa.jpf.util.test.TestJPF;
public class ListTest extends TestJPF {
static String[] JPF_CONFIGURATION = {/*"+interaction=interaction",*/"+choice=MapChoice", "+search.class= .search.RandomSearch", "+invocation=true"};
@Conditional static boolean a1 = true;
@Conditional static boolean a2 = true;
@Conditional static boolean a3 = true;
@Conditional static boolean a4 = true;
@Conditional static boolean a5 = true;
@Conditional static boolean a6 = true;
@Conditional static boolean a7 = true;
@Conditional static boolean a8 = true;
@Conditional static boolean a9 = true;
@Conditional static boolean a10 = true;
@Conditional static boolean a11 = true;
@Conditional static boolean a12 = true;
@Conditional static boolean a13 = true;
@Conditional static boolean a14 = true;
@Conditional static boolean a15 = true;
@Conditional static boolean a16 = true;
@Conditional static boolean a17 = true;
@Conditional static boolean a18 = true;
@Conditional static boolean a19 = true;
@Conditional static boolean a20 = true;
@Conditional static boolean a21 = true;
@Conditional static boolean a22 = true;
@Conditional static boolean a23 = true;
@Conditional static boolean a24 = true;
@Conditional static boolean a25 = true;
@Conditional static boolean a26 = true;
@Conditional static boolean a27 = true;
@Conditional static boolean a28 = true;
@Conditional static boolean a29 = true;
@Conditional static boolean a30 = true;
@Test
public void linkedListTest() throws Exception {
if (verifyNoPropertyViolation(JPF_CONFIGURATION)) {
LinkedList<Character> list = new LinkedList<>();
if (a1) list = new LinkedList<>();
list.add('0');
if (a1) {list.add('c');}else{list.add('c');}
if (a2) {list.add('c');}else{list.add('c');}
if (a3) {list.add('c');}else{list.add('c');}
if (a4) {list.add('c');}else{list.add('c');}
if (a5) {list.add('c');}else{list.add('c');}
if (a6) {list.add('c');}else{list.add('c');}
if (a7) {list.add('c');}else{list.add('c');}
if (a8) {list.add('c');}else{list.add('c');}
if (a9) {list.add('c');}else{list.add('c');}
if (a10) {list.add('c');}else{list.add('c');}
if (a11) {list.add('c');}else{list.add('c');}
if (a12) {list.add('c');}else{list.add('c');}
if (a13) {list.add('c');}else{list.add('c');}
if (a14) {list.add('c');}else{list.add('c');}
if (a15) {list.add('c');}else{list.add('c');}
if (a16) {list.add('c');}else{list.add('c');}
if (a17) {list.add('c');}else{list.add('c');}
if (a18) {list.add('c');}else{list.add('c');}
if (a19) {list.add('c');}else{list.add('c');}
if (a20) {list.add('c');}else{list.add('c');}
if (a21) {list.add('c');}else{list.add('c');}
if (a22) {list.add('c');}else{list.add('c');}
if (a23) {list.add('c');}else{list.add('c');}
if (a24) {list.add('c');}else{list.add('c');}
if (a25) {list.add('c');}else{list.add('c');}
if (a26) {list.add('c');}else{list.add('c');}
if (a27) {list.add('c');}else{list.add('c');}
if (a28) {list.add('c');}else{list.add('c');}
if (a29) {list.add('c');}else{list.add('c');}
if (a30) {list.add('c');}else{list.add('c');}
list.removeFirst();
System.out.println(list.size());
for (Character e : list) {
System.out.println(e);
}
// list.toString();
System.out.println(list);
//// System.out.println();
// System.out.println(list);
}
}
@Test
public void invocationTest() throws Exception {
if (verifyNoPropertyViolation(JPF_CONFIGURATION)) {
C c = new C(0);
if (a1) {c = new C(c);}
if (a2) {c = new C(c);}
if (a3) {c = new C(c);}
if (a4) {c = new C(c);}
if (a5) {c = new C(c);}
if (a6) {c = new C(c);}
if (a7) {c = new C(c);}
if (a8) {c = new C(c);}
if (a9) {c = new C(c);}
if (a10) {c = new C(c);}
if (a11) {c = new C(c);}
if (a12) {c = new C(c);}
if (a13) {c = new C(c);}
if (a14) {c = new C(c);}
if (a15) {c = new C(c);}
if (a16) {c = new C(c);}
if (a17) {c = new C(c);}
if (a18) {c = new C(c);}
if (a19) {c = new C(c);}
if (a20) {c = new C(c);}
if (a21) {c = new C(c);}
if (a22) {c = new C(c);}
if (a23) {c = new C(c);}
if (a24) {c = new C(c);}
if (a25) {c = new C(c);}
if (a26) {c = new C(c);}
if (a27) {c = new C(c);}
if (a28) {c = new C(c);}
if (a29) {c = new C(c);}
if (a30) {c = new C(c);}
c.method();
}
}
class C {
int i = 0;
public C(C c) {
i = c.i + 1;
}
public C(int i) {
this.i = i;
}
void method() {
for (int i = 0; i < 1000; i++) {}
System.out.println("ListTest.C.method()");
}
}
}