Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for explicit nondet in java code #691

Merged
merged 7 commits into from
Apr 18, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions regression/cbmc-java/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,16 @@ clean:
find -name '*.out' -execdir $(RM) '{}' \;
find -name '*.gb' -execdir $(RM) '{}' \;
$(RM) tests.log

%.class: %.java ../../src/org.cprover.jar
javac -g -cp ../../src/org.cprover.jar:. $<

nondet_java_files := $(shell find . -name "Nondet*.java")
nondet_class_files := $(patsubst %.java, %.class, $(nondet_java_files))

.PHONY: nondet-class-files
nondet-class-files: $(nondet_class_files)

.PHONY: clean-nondet-class-files
clean-nondet-class-files:
-rm $(nondet_class_files)
Binary file added regression/cbmc-java/NondetArray/NondetArray.class
Binary file not shown.
10 changes: 10 additions & 0 deletions regression/cbmc-java/NondetArray/NondetArray.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import org.cprover.CProver;

class NondetArray
{
void main()
{
Object[] obj = CProver.nondetWithoutNull();
assert obj != null;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetArray/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetArray.class
--function NondetArray.main
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetArray2/NondetArray2.class
Binary file not shown.
15 changes: 15 additions & 0 deletions regression/cbmc-java/NondetArray2/NondetArray2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import org.cprover.CProver;

class NondetArray2
{
void main()
{
Integer[] ints = CProver.nondetWithoutNull();

int num = 0;
for (Integer i : ints) {
num *= i.intValue();
}
assert num == 0;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetArray2/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetArray2.class
--function NondetArray2.main --unwind 5
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetArray3/NondetArray3.class
Binary file not shown.
16 changes: 16 additions & 0 deletions regression/cbmc-java/NondetArray3/NondetArray3.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import org.cprover.CProver;

class NondetArray3
{
void main()
{
Integer[] ints = CProver.nondetWithoutNull();
assert ints != null;

int num = 0;
for (Integer i : ints) {
num *= i.intValue();
}
assert num == 0;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetArray3/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetArray3.class
--function NondetArray3.main --unwind 5
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetArray4/NondetArray4.class
Binary file not shown.
14 changes: 14 additions & 0 deletions regression/cbmc-java/NondetArray4/NondetArray4.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import org.cprover.CProver;

class NondetArray4
{
void main()
{
int a = 1;
int b = 2;
int c = 3;

Integer[] ints = CProver.nondetWithoutNull();
assert ints != null;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetArray4/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetArray4.class
--function NondetArray4.main
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file not shown.
11 changes: 11 additions & 0 deletions regression/cbmc-java/NondetAssume1/NondetAssume1.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import org.cprover.CProver;

class NondetAssume1
{
void main()
{
int x = CProver.nondetInt();
CProver.assume(x == 1);
assert x == 1;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetAssume1/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetAssume1.class
--function NondetAssume1.main
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetAssume2/A.class
Binary file not shown.
Binary file added regression/cbmc-java/NondetAssume2/B.class
Binary file not shown.
Binary file added regression/cbmc-java/NondetAssume2/C.class
Binary file not shown.
Binary file not shown.
17 changes: 17 additions & 0 deletions regression/cbmc-java/NondetAssume2/NondetAssume2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import org.cprover.CProver;

class A { int x; }

class B { A a; }

class C { B b; }

class NondetAssume2
{
void main()
{
C c = CProver.nondetWithNull();
CProver.assume(c != null);
assert c != null;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetAssume2/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetAssume2.class
--function NondetAssume2.main
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file not shown.
10 changes: 10 additions & 0 deletions regression/cbmc-java/NondetBoolean/NondetBoolean.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import org.cprover.CProver;

class NondetBoolean
{
static void main()
{
boolean x = CProver.nondetBoolean();
assert x == false;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetBoolean/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetBoolean.class
--function NondetBoolean.main
^VERIFICATION FAILED$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetByte/NondetByte.class
Binary file not shown.
10 changes: 10 additions & 0 deletions regression/cbmc-java/NondetByte/NondetByte.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import org.cprover.CProver;

class NondetByte
{
static void main()
{
byte x = CProver.nondetByte();
assert x == 0;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetByte/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetByte.class
--function NondetByte.main
^VERIFICATION FAILED$
--
^warning: ignoring
Binary file not shown.
11 changes: 11 additions & 0 deletions regression/cbmc-java/NondetCastToObject/NondetCastToObject.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import org.cprover.CProver;

class NondetCastToObject
{
void main()
{
Object o = CProver.nondetWithNull();
CProver.assume(o != null);
assert o != null;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetCastToObject/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetCastToObject.class
--function NondetCastToObject.main
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetChar/NondetChar.class
Binary file not shown.
10 changes: 10 additions & 0 deletions regression/cbmc-java/NondetChar/NondetChar.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import org.cprover.CProver;

class NondetChar
{
static void main()
{
char x = CProver.nondetChar();
assert x == '\0';
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetChar/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetChar.class
--function NondetChar.main
^VERIFICATION FAILED$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetDirectFromMethod/A.class
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import org.cprover.CProver;

class A
{
int a;
}

class NondetDirectFromMethod
{
A methodReturningA()
{
return CProver.nondetWithoutNull();
}

void main()
{
assert methodReturningA() != null;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetDirectFromMethod/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetDirectFromMethod.class
--function NondetDirectFromMethod.main
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetDouble/NondetDouble.class
Binary file not shown.
10 changes: 10 additions & 0 deletions regression/cbmc-java/NondetDouble/NondetDouble.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import org.cprover.CProver;

class NondetDouble
{
static void main()
{
double x = CProver.nondetDouble();
assert x == 0;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetDouble/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetDouble.class
--function NondetDouble.main
^VERIFICATION FAILED$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetFloat/NondetFloat.class
Binary file not shown.
10 changes: 10 additions & 0 deletions regression/cbmc-java/NondetFloat/NondetFloat.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import org.cprover.CProver;

class NondetFloat
{
static void main()
{
float x = CProver.nondetFloat();
assert x == 0;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetFloat/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetFloat.class
--function NondetFloat.main
^VERIFICATION FAILED$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetGenericArray/A.class
Binary file not shown.
Binary file added regression/cbmc-java/NondetGenericArray/B.class
Binary file not shown.
Binary file added regression/cbmc-java/NondetGenericArray/C.class
Binary file not shown.
Binary file not shown.
30 changes: 30 additions & 0 deletions regression/cbmc-java/NondetGenericArray/NondetGenericArray.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import org.cprover.CProver;

class A
{
int[] ints = new int[10];
}

class B
{
A a;
}

class C
{
B b;
}

class NondetGenericArray
{
static void main()
{
C c = CProver.nondetWithNull();
CProver.assume(c != null);
CProver.assume(c.b != null);
CProver.assume(c.b.a != null);
CProver.assume(c.b.a.ints != null);
assert c.b.a != null;
assert c.b.a.ints != null;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetGenericArray/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetGenericArray.class
--function NondetGenericArray.main
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetGenericRecursive/A.class
Binary file not shown.
Binary file added regression/cbmc-java/NondetGenericRecursive/B.class
Binary file not shown.
Binary file added regression/cbmc-java/NondetGenericRecursive/C.class
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import org.cprover.CProver;

class A
{
}

class B
{
A a;
}

class C
{
B b;
}

class NondetGenericRecursive
{
static void main()
{
C c = CProver.nondetWithNull();
assert c == null;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetGenericRecursive/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetGenericRecursive.class
--function NondetGenericRecursive.main
^VERIFICATION FAILED$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetGenericRecursive2/A.class
Binary file not shown.
Binary file added regression/cbmc-java/NondetGenericRecursive2/B.class
Binary file not shown.
Binary file added regression/cbmc-java/NondetGenericRecursive2/C.class
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import org.cprover.CProver;

class A
{
}

class B
{
A a;
}

class C
{
B b;
}

class NondetGenericRecursive2
{
static void main()
{
C c = CProver.nondetWithNull();
CProver.assume(c != null);
CProver.assume(c.b != null);
CProver.assume(c.b.a != null);
assert c.b.a != null;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/NondetGenericRecursive2/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetGenericRecursive2.class
--function NondetGenericRecursive2.main
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file added regression/cbmc-java/NondetGenericWithNull/B.class
Binary file not shown.
Binary file not shown.
Loading