Skip to content

Java nondet test gen support #607

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

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
08e3146
Add nondet methods to CProver class
reuk Feb 21, 2017
0493249
Add nondet regression test cases
reuk Feb 21, 2017
a632f46
Add stubs to select nondet methods in java code
reuk Feb 21, 2017
496d0b7
Add asserts and rebuild java regression classes
reuk Feb 21, 2017
c4ef939
Add test descriptors for new tests
reuk Feb 21, 2017
a0b2d04
Add support for 'primitive' nondet methods
reuk Feb 21, 2017
d8f68bb
Add testcase for generic nondet
reuk Feb 21, 2017
9a992af
Add support for generic nondet
reuk Feb 22, 2017
f97cf4f
Add 'assignment' test cases for generic nondet
reuk Feb 22, 2017
943ba3f
Fix object_factory issues with java.lang.Object
reuk Feb 22, 2017
caa8622
Update test.desc for no-assignment generic nondet
reuk Feb 22, 2017
755773f
Add generic recursive testcase
reuk Feb 22, 2017
e3e7a91
Replace object_factory with non-recursive nondet
reuk Feb 23, 2017
d53bab8
Remove mistakenly-added txt file
reuk Feb 23, 2017
fe49f1d
Add nondet recursive expansion to typecheck_expr
reuk Feb 23, 2017
ca39c44
Use correct max_nondet_array_length
reuk Feb 23, 2017
4aaeea0
Update cprover class to allow null/non-null nondet
reuk Feb 23, 2017
1496ca1
Support both null and non-null nondet objects
reuk Feb 23, 2017
652c204
Add cerr DEBUG output during typecheck
reuk Feb 23, 2017
3cde102
Add nondetGenericRecursive2 test
reuk Feb 23, 2017
c81e06b
Change generic nondet to init existing variable
reuk Feb 24, 2017
9f0dc21
Add another nondet generic recursive test case
reuk Feb 24, 2017
059ce68
Add new internal 'nondet initializer block' type
reuk Feb 24, 2017
afc28bf
Add array test
reuk Feb 24, 2017
f9b4448
Apply formatting based on pull-request feedback
reuk Feb 26, 2017
cc0c081
Update CProver generic nondet signatures
reuk Feb 27, 2017
6795387
Revert to init-in-place for generic nondet
reuk Feb 27, 2017
4348e92
Fix formatting to comply with style guide
reuk Feb 27, 2017
a164d48
Use classes compiled in debug mode
reuk Feb 27, 2017
8d46ad1
Revert to better generic nodet signature
reuk Feb 27, 2017
01a5754
Remove typechecking following nullable nondet call
reuk Mar 1, 2017
2b6197d
Remove tests using nondetWithoutNull
reuk Mar 1, 2017
1d307e9
Remove old, unused 'nondet block' code
reuk Mar 1, 2017
96060b1
Fix build after patching
reuk Mar 2, 2017
8dd731b
Use regex to test nondet method name
reuk Mar 2, 2017
2fe55a3
Fix breakage introduced during rebase
reuk Mar 6, 2017
67697aa
Implement style fixes based on feedback
reuk Mar 8, 2017
101a65d
Mark known failing tests as KNOWNBUG
reuk Mar 10, 2017
8321fa8
Fix bug assigning nondetWithNull to Object
reuk Mar 10, 2017
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 @@ -18,3 +18,16 @@ show:
vim -o "$$dir/*.java" "$$dir/*.out"; \
fi; \
done;

%.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 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 foo()
{
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.foo
^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 foo()
{
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.foo
^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 foo()
{
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.foo
^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 foo()
{
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.foo
^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 foo()
{
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.foo
^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 foo()
{
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.foo
^VERIFICATION FAILED$
--
^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 foo()
{
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.foo
^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 foo()
{
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.foo
^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 foo()
{
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 @@
KNOWNBUG
NondetGenericArray.class
--function NondetGenericArray.foo
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file not shown.
Binary file not shown.
Binary file not shown.
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 foo()
{
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.foo
^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 foo()
{
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 @@
KNOWNBUG
NondetGenericRecursive2.class
--function NondetGenericRecursive2.foo
^VERIFICATION SUCCESSFUL$
--
^warning: ignoring
Binary file added regression/cbmc-java/nondetGenericWithNull/A.class
Binary file not shown.
Binary file added regression/cbmc-java/nondetGenericWithNull/B.class
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import org.cprover.CProver;

class B { int a; }

class NondetGenericWithNull
{
static void foo()
{
B b = CProver.nondetWithNull();
assert b != null;
assert b.a != 0;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/nondetGenericWithNull/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetGenericWithNull.class
--function NondetGenericWithNull.foo
^VERIFICATION FAILED$
--
^warning: ignoring
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added regression/cbmc-java/nondetInt/NondetInt.class
Binary file not shown.
10 changes: 10 additions & 0 deletions regression/cbmc-java/nondetInt/NondetInt.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import org.cprover.CProver;

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

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

class NondetShort
{
static void foo()
{
short x = CProver.nondetShort();
assert x == 0;
}
}
6 changes: 6 additions & 0 deletions regression/cbmc-java/nondetShort/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
CORE
NondetShort.class
--function NondetShort.foo
^VERIFICATION FAILED$
--
^warning: ignoring
5 changes: 5 additions & 0 deletions src/goto-programs/goto_convert.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ Author: Daniel Kroening, [email protected]

\*******************************************************************/

#ifdef DEBUG
#include <iostream>
#endif

#include <cassert>

#include <util/cprover_prefix.h>
Expand Down Expand Up @@ -905,6 +909,7 @@ void goto_convertt::convert_assign(

copy(new_assign, ASSIGN, dest);
}

else
{
clean_expr(rhs, dest);
Expand Down
4 changes: 4 additions & 0 deletions src/goto-programs/goto_convert_side_effect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ Author: Daniel Kroening, [email protected]

\*******************************************************************/

#ifdef DEBUG
#include <iostream>
#endif

#include <util/arith_tools.h>
#include <util/expr_util.h>
#include <util/std_expr.h>
Expand Down
Loading