diff --git a/src/.dir-locals.el b/.dir-locals.el similarity index 100% rename from src/.dir-locals.el rename to .dir-locals.el diff --git a/.travis.yml b/.travis.yml index 4683eeba79d..6c2d69165be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,61 @@ language: cpp -matrix: +jobs: include: + - &linter-stage + stage: Linter + Doxygen + non-debug Ubuntu/gcc-5 test + env: NAME="CPP-LINT" + install: + script: scripts/travis_lint.sh + before_cache: + + - stage: Linter + Doxygen + non-debug Ubuntu/gcc-5 test + env: NAME="DOXYGEN-CHECK" + addons: + apt: + packages: + - doxygen + install: + script: scripts/travis_doxygen.sh + before_cache: + + # Ubuntu Linux with glibc using g++-5 + - stage: Linter + Doxygen + non-debug Ubuntu/gcc-5 test + os: linux + sudo: false + compiler: gcc + cache: ccache + addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - libwww-perl + - g++-5 + - libubsan0 + before_install: + - mkdir bin ; ln -s /usr/bin/gcc-5 bin/gcc + # env: COMPILER=g++-5 SAN_FLAGS="-fsanitize=undefined -fno-sanitize-recover -fno-omit-frame-pointer" + env: COMPILER="ccache g++-5" + # Alpine Linux with musl-libc using g++ - - os: linux + - stage: Test different OS/CXX/Flags + os: linux sudo: required compiler: gcc cache: ccache services: - docker before_install: - - docker pull diffblue/cbmc-builder:alpine-0.0.1 + - docker pull diffblue/cbmc-builder:alpine-0.0.3 env: - - PRE_COMMAND="docker run -v ${TRAVIS_BUILD_DIR}:/cbmc -v ${HOME}/.ccache:/root/.ccache diffblue/cbmc-builder:alpine-0.0.1" + - PRE_COMMAND="docker run -v ${TRAVIS_BUILD_DIR}:/cbmc -v ${HOME}/.ccache:/root/.ccache diffblue/cbmc-builder:alpine-0.0.3" - COMPILER="ccache g++" # OS X using g++ - - os: osx + - stage: Test different OS/CXX/Flags + os: osx sudo: false compiler: gcc cache: ccache @@ -26,42 +64,24 @@ matrix: - mkdir bin ; ln -s /usr/bin/gcc bin/gcc - HOMEBREW_NO_AUTO_UPDATE=1 brew install ccache - export PATH=/usr/local/opt/ccache/libexec:$PATH - - ccache -M 1G - env: COMPILER=g++ + env: COMPILER="ccache g++" # OS X using clang++ - - os: osx + - stage: Test different OS/CXX/Flags + os: osx sudo: false compiler: clang cache: ccache before_install: - HOMEBREW_NO_AUTO_UPDATE=1 brew install ccache - export PATH=/usr/local/opt/ccache/libexec:$PATH - - ccache -M 1G env: - COMPILER="ccache clang++ -Qunused-arguments -fcolor-diagnostics" - CCACHE_CPP2=yes - # Ubuntu Linux with glibc using g++-5 - - os: linux - sudo: false - compiler: gcc - cache: ccache - addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - libwww-perl - - g++-5 - - libubsan0 - before_install: - - mkdir bin ; ln -s /usr/bin/gcc-5 bin/gcc - # env: COMPILER=g++-5 SAN_FLAGS="-fsanitize=undefined -fno-sanitize-recover -fno-omit-frame-pointer" - env: COMPILER="g++-5" - # Ubuntu Linux with glibc using g++-5, debug mode - - os: linux + - stage: Test different OS/CXX/Flags + os: linux sudo: false compiler: gcc cache: ccache @@ -77,12 +97,13 @@ matrix: - mkdir bin ; ln -s /usr/bin/gcc-5 bin/gcc # env: COMPILER=g++-5 SAN_FLAGS="-fsanitize=undefined -fno-sanitize-recover -fno-omit-frame-pointer" env: - - COMPILER="g++-5" + - COMPILER="ccache g++-5" - EXTRA_CXXFLAGS="-DDEBUG" script: echo "Not running any tests for a debug build." # Ubuntu Linux with glibc using clang++-3.7 - - os: linux + - stage: Test different OS/CXX/Flags + os: linux sudo: false compiler: clang cache: ccache @@ -105,7 +126,8 @@ matrix: - CCACHE_CPP2=yes # Ubuntu Linux with glibc using clang++-3.7, debug mode - - os: linux + - stage: Test different OS/CXX/Flags + os: linux sudo: false compiler: clang cache: ccache @@ -129,27 +151,11 @@ matrix: - EXTRA_CXXFLAGS="-DDEBUG" script: echo "Not running any tests for a debug build." - - env: NAME="CPP-LINT" - install: - script: scripts/travis_lint.sh - before_cache: - - - env: NAME="DOXYGEN-CHECK" - addons: - apt: - packages: - - doxygen - install: - script: scripts/travis_doxygen.sh - before_cache: - allow_failures: - - env: NAME="CPP-LINT" - install: - script: scripts/travis_lint.sh - before_cache: + - <<: *linter-stage install: + - ccache --max-size=1G - COMMAND="make -C src minisat2-download" && eval ${PRE_COMMAND} ${COMMAND} - COMMAND="make -C src boost-download" && diff --git a/README.md b/README.md index e1c2b090091..8804b2f0b55 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,31 @@ and passing the resulting equation to a decision procedure. For full information see [cprover.org](http://www.cprover.org/cbmc). +Versions +======== + +Get the [latest release](https://github.com/diffblue/cbmc/releases) +* Releases are tested and for production use. + +Get the current *develop* version: `git clone https://github.com/diffblue/cbmc.git` +* Develop versions are not recommended for production use. + +Report bugs +=========== + +If you encounter a problem please file a bug report: +* Create an [issue](https://github.com/diffblue/cbmc/issues) + +Contributing to the code base +============================= + +1. Fork the repository +2. Clone the repository `git clone git@github.com:YOURNAME/cbmc.git` +3. Create a branch from the `develop` branch (default branch) +4. Make your changes (follow the [coding guidelines](https://github.com/diffblue/cbmc/blob/develop/CODING_STANDARD.md)) +5. Push your changes to your branch +6. Create a Pull Request targeting the `develop` branch + License ======= 4-clause BSD license, see `LICENSE` file. diff --git a/regression/.gitignore b/regression/.gitignore new file mode 100644 index 00000000000..750ecf9f446 --- /dev/null +++ b/regression/.gitignore @@ -0,0 +1 @@ +tests.log diff --git a/regression/Makefile b/regression/Makefile index 87dcd7c93f3..c69d85febc2 100644 --- a/regression/Makefile +++ b/regression/Makefile @@ -2,11 +2,14 @@ DIRS = ansi-c \ cbmc \ cpp \ cbmc-java \ + cbmc-java-inheritance \ goto-analyzer \ + goto-diff \ goto-instrument \ goto-instrument-typedef \ - goto-diff \ invariants \ + strings \ + strings-smoke-tests \ test-script \ # Empty last line diff --git a/regression/cbmc-java-inheritance/Makefile b/regression/cbmc-java-inheritance/Makefile new file mode 100644 index 00000000000..dcdf752aea1 --- /dev/null +++ b/regression/cbmc-java-inheritance/Makefile @@ -0,0 +1,38 @@ +default: tests.log + +test: + @if ! ../test.pl -c ../../../src/cbmc/cbmc ; then \ + ../failed-tests-printer.pl ; \ + exit 1 ; \ + fi + +tests.log: ../test.pl + @if ! ../test.pl -c ../../../src/cbmc/cbmc ; then \ + ../failed-tests-printer.pl ; \ + exit 1 ; \ + fi + +show: + @for dir in *; do \ + if [ -d "$$dir" ]; then \ + vim -o "$$dir/*.java" "$$dir/*.out"; \ + fi; \ + done; + +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) diff --git a/regression/cbmc-java-inheritance/inheritance01/A.class b/regression/cbmc-java-inheritance/inheritance01/A.class new file mode 100644 index 00000000000..90633af3927 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance01/A.class differ diff --git a/regression/cbmc-java-inheritance/inheritance01/B.class b/regression/cbmc-java-inheritance/inheritance01/B.class new file mode 100644 index 00000000000..1ba2667c1e3 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance01/B.class differ diff --git a/regression/cbmc-java-inheritance/inheritance01/test.class b/regression/cbmc-java-inheritance/inheritance01/test.class new file mode 100644 index 00000000000..c8b094f59ad Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance01/test.class differ diff --git a/regression/cbmc-java-inheritance/inheritance01/test.desc b/regression/cbmc-java-inheritance/inheritance01/test.desc new file mode 100644 index 00000000000..61ed56c4b41 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance01/test.desc @@ -0,0 +1,5 @@ +CORE +test.class +--function test.check +^EXIT=0$ +^SIGNAL=0$ diff --git a/regression/cbmc-java-inheritance/inheritance01/test.java b/regression/cbmc-java-inheritance/inheritance01/test.java new file mode 100644 index 00000000000..4038d8419f6 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance01/test.java @@ -0,0 +1,20 @@ +class A +{ + public int toInt() + { + return 12345; + } +} + +class B extends A +{ +} + +class test +{ + void check() + { + B b=new B(); + assert(b.toInt()==12345); + } +} diff --git a/regression/cbmc-java-inheritance/inheritance02/A.class b/regression/cbmc-java-inheritance/inheritance02/A.class new file mode 100644 index 00000000000..20d9f12ec40 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance02/A.class differ diff --git a/regression/cbmc-java-inheritance/inheritance02/B.class b/regression/cbmc-java-inheritance/inheritance02/B.class new file mode 100644 index 00000000000..cd5a6778035 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance02/B.class differ diff --git a/regression/cbmc-java-inheritance/inheritance02/test.class b/regression/cbmc-java-inheritance/inheritance02/test.class new file mode 100644 index 00000000000..09d573eb971 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance02/test.class differ diff --git a/regression/cbmc-java-inheritance/inheritance02/test.desc b/regression/cbmc-java-inheritance/inheritance02/test.desc new file mode 100644 index 00000000000..61ed56c4b41 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance02/test.desc @@ -0,0 +1,5 @@ +CORE +test.class +--function test.check +^EXIT=0$ +^SIGNAL=0$ diff --git a/regression/cbmc-java-inheritance/inheritance02/test.java b/regression/cbmc-java-inheritance/inheritance02/test.java new file mode 100644 index 00000000000..1aae7f2ef63 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance02/test.java @@ -0,0 +1,24 @@ +class A +{ + protected int toInt() + { + return 12345; + } +} + +class B extends A +{ + public void secondary() + { + assert(toInt()==12345); + } +} + +class test +{ + void check() + { + B b=new B(); + b.secondary(); + } +} diff --git a/regression/cbmc-java-inheritance/inheritance03/A.class b/regression/cbmc-java-inheritance/inheritance03/A.class new file mode 100644 index 00000000000..1df27f96de7 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance03/A.class differ diff --git a/regression/cbmc-java-inheritance/inheritance03/B.class b/regression/cbmc-java-inheritance/inheritance03/B.class new file mode 100644 index 00000000000..0d68ec19ee0 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance03/B.class differ diff --git a/regression/cbmc-java-inheritance/inheritance03/Z.class b/regression/cbmc-java-inheritance/inheritance03/Z.class new file mode 100644 index 00000000000..49b6e283992 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance03/Z.class differ diff --git a/regression/cbmc-java-inheritance/inheritance03/test.class b/regression/cbmc-java-inheritance/inheritance03/test.class new file mode 100644 index 00000000000..dfa16d22feb Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance03/test.class differ diff --git a/regression/cbmc-java-inheritance/inheritance03/test.desc b/regression/cbmc-java-inheritance/inheritance03/test.desc new file mode 100644 index 00000000000..61ed56c4b41 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance03/test.desc @@ -0,0 +1,5 @@ +CORE +test.class +--function test.check +^EXIT=0$ +^SIGNAL=0$ diff --git a/regression/cbmc-java-inheritance/inheritance03/test.java b/regression/cbmc-java-inheritance/inheritance03/test.java new file mode 100644 index 00000000000..0d965134877 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance03/test.java @@ -0,0 +1,24 @@ +class Z +{ + public int toInt() + { + return 12345; + } +} + +class A extends Z +{ +} + +class B extends A +{ +} + +class test +{ + void check() + { + B b=new B(); + assert(b.toInt()==12345); + } +} diff --git a/regression/cbmc-java-inheritance/inheritance04/A.class b/regression/cbmc-java-inheritance/inheritance04/A.class new file mode 100644 index 00000000000..90633af3927 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance04/A.class differ diff --git a/regression/cbmc-java-inheritance/inheritance04/B.class b/regression/cbmc-java-inheritance/inheritance04/B.class new file mode 100644 index 00000000000..b8d4c0dafbc Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance04/B.class differ diff --git a/regression/cbmc-java-inheritance/inheritance04/Z.class b/regression/cbmc-java-inheritance/inheritance04/Z.class new file mode 100644 index 00000000000..74b27f055a5 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance04/Z.class differ diff --git a/regression/cbmc-java-inheritance/inheritance04/test.class b/regression/cbmc-java-inheritance/inheritance04/test.class new file mode 100644 index 00000000000..7f4c18b5fde Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance04/test.class differ diff --git a/regression/cbmc-java-inheritance/inheritance04/test.desc b/regression/cbmc-java-inheritance/inheritance04/test.desc new file mode 100644 index 00000000000..61ed56c4b41 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance04/test.desc @@ -0,0 +1,5 @@ +CORE +test.class +--function test.check +^EXIT=0$ +^SIGNAL=0$ diff --git a/regression/cbmc-java-inheritance/inheritance04/test.java b/regression/cbmc-java-inheritance/inheritance04/test.java new file mode 100644 index 00000000000..783e0079c37 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance04/test.java @@ -0,0 +1,28 @@ +class A +{ + public int toInt() + { + return 12345; + } +} + +class B extends A +{ + public int toInt() + { + return 9999; + } +} + +class Z extends B +{ +} + +class test +{ + void check() + { + Z z=new Z(); + assert(z.toInt()==9999); + } +} diff --git a/regression/cbmc-java-inheritance/inheritance05/A.class b/regression/cbmc-java-inheritance/inheritance05/A.class new file mode 100644 index 00000000000..692fc625e18 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance05/A.class differ diff --git a/regression/cbmc-java-inheritance/inheritance05/B.class b/regression/cbmc-java-inheritance/inheritance05/B.class new file mode 100644 index 00000000000..d1f3c3841a6 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance05/B.class differ diff --git a/regression/cbmc-java-inheritance/inheritance05/test.class b/regression/cbmc-java-inheritance/inheritance05/test.class new file mode 100644 index 00000000000..549b549c5de Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance05/test.class differ diff --git a/regression/cbmc-java-inheritance/inheritance05/test.desc b/regression/cbmc-java-inheritance/inheritance05/test.desc new file mode 100644 index 00000000000..61ed56c4b41 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance05/test.desc @@ -0,0 +1,5 @@ +CORE +test.class +--function test.check +^EXIT=0$ +^SIGNAL=0$ diff --git a/regression/cbmc-java-inheritance/inheritance05/test.java b/regression/cbmc-java-inheritance/inheritance05/test.java new file mode 100644 index 00000000000..3d0c967b728 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance05/test.java @@ -0,0 +1,21 @@ +interface A +{ + public int toInt(); +} + +class B implements A +{ + public int toInt() + { + return 12345; + } +} + +class test +{ + void check() + { + B b=new B(); + assert(b.toInt()==12345); + } +} diff --git a/regression/cbmc-java-inheritance/inheritance06/A.java b/regression/cbmc-java-inheritance/inheritance06/A.java new file mode 100644 index 00000000000..d2f2e7b43dc --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance06/A.java @@ -0,0 +1,10 @@ +package temp; + +class A +{ + int toint() + { + return 123456; + } +} + diff --git a/regression/cbmc-java-inheritance/inheritance06/B.java b/regression/cbmc-java-inheritance/inheritance06/B.java new file mode 100644 index 00000000000..4bd0f629038 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance06/B.java @@ -0,0 +1,9 @@ +package temp; + +public class B extends A +{ + public int check() + { + return toint(); + } +} diff --git a/regression/cbmc-java-inheritance/inheritance06/temp/A.class b/regression/cbmc-java-inheritance/inheritance06/temp/A.class new file mode 100644 index 00000000000..8e5acf1693d Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance06/temp/A.class differ diff --git a/regression/cbmc-java-inheritance/inheritance06/temp/B.class b/regression/cbmc-java-inheritance/inheritance06/temp/B.class new file mode 100644 index 00000000000..a4d9cfb5fb2 Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance06/temp/B.class differ diff --git a/regression/cbmc-java-inheritance/inheritance06/test.class b/regression/cbmc-java-inheritance/inheritance06/test.class new file mode 100644 index 00000000000..53ce4d575ca Binary files /dev/null and b/regression/cbmc-java-inheritance/inheritance06/test.class differ diff --git a/regression/cbmc-java-inheritance/inheritance06/test.desc b/regression/cbmc-java-inheritance/inheritance06/test.desc new file mode 100644 index 00000000000..61ed56c4b41 --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance06/test.desc @@ -0,0 +1,5 @@ +CORE +test.class +--function test.check +^EXIT=0$ +^SIGNAL=0$ diff --git a/regression/cbmc-java-inheritance/inheritance06/test.java b/regression/cbmc-java-inheritance/inheritance06/test.java new file mode 100644 index 00000000000..fd8633b51bc --- /dev/null +++ b/regression/cbmc-java-inheritance/inheritance06/test.java @@ -0,0 +1,11 @@ +import temp.B; + +public class test +{ + public void check() + { + B myObject = new B(); + assert(myObject.check()==123456); + } +} + diff --git a/regression/cbmc-java/ArithmeticException1/ArithmeticExceptionTest.class b/regression/cbmc-java/ArithmeticException1/ArithmeticExceptionTest.class new file mode 100644 index 00000000000..3ad4e6ebe86 Binary files /dev/null and b/regression/cbmc-java/ArithmeticException1/ArithmeticExceptionTest.class differ diff --git a/regression/cbmc-java/ArithmeticException1/ArithmeticExceptionTest.java b/regression/cbmc-java/ArithmeticException1/ArithmeticExceptionTest.java new file mode 100644 index 00000000000..7988e85700e --- /dev/null +++ b/regression/cbmc-java/ArithmeticException1/ArithmeticExceptionTest.java @@ -0,0 +1,11 @@ +public class ArithmeticExceptionTest { + public static void main(String args[]) { + try { + int i=0; + int j=10/i; + } + catch(ArithmeticException exc) { + assert false; + } + } +} diff --git a/regression/cbmc-java/ArithmeticException1/test.desc b/regression/cbmc-java/ArithmeticException1/test.desc new file mode 100644 index 00000000000..e8f7c941fd4 --- /dev/null +++ b/regression/cbmc-java/ArithmeticException1/test.desc @@ -0,0 +1,9 @@ +CORE +ArithmeticExceptionTest.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +^.*assertion at file ArithmeticExceptionTest.java line 8 function.*: FAILURE$ +^VERIFICATION FAILED +-- +^warning: ignoring diff --git a/regression/cbmc-java/ArithmeticException2/ArithmeticExceptionTest.class b/regression/cbmc-java/ArithmeticException2/ArithmeticExceptionTest.class new file mode 100644 index 00000000000..3ac62d1ede5 Binary files /dev/null and b/regression/cbmc-java/ArithmeticException2/ArithmeticExceptionTest.class differ diff --git a/regression/cbmc-java/ArithmeticException2/ArithmeticExceptionTest.java b/regression/cbmc-java/ArithmeticException2/ArithmeticExceptionTest.java new file mode 100644 index 00000000000..0c83bf9a409 --- /dev/null +++ b/regression/cbmc-java/ArithmeticException2/ArithmeticExceptionTest.java @@ -0,0 +1,12 @@ +public class ArithmeticExceptionTest { + public static void main(String args[]) { + try { + long denom=0; + long num=10; + long j=num/denom; + } + catch(ArithmeticException exc) { + assert false; + } + } +} diff --git a/regression/cbmc-java/ArithmeticException2/test.desc b/regression/cbmc-java/ArithmeticException2/test.desc new file mode 100644 index 00000000000..00820d86c6e --- /dev/null +++ b/regression/cbmc-java/ArithmeticException2/test.desc @@ -0,0 +1,9 @@ +CORE +ArithmeticExceptionTest.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +^.*assertion at file ArithmeticExceptionTest.java line 9 function.*: FAILURE$ +^VERIFICATION FAILED +-- +^warning: ignoring diff --git a/regression/cbmc-java/ArithmeticException3/ArithmeticExceptionTest.class b/regression/cbmc-java/ArithmeticException3/ArithmeticExceptionTest.class new file mode 100644 index 00000000000..21c451e02f3 Binary files /dev/null and b/regression/cbmc-java/ArithmeticException3/ArithmeticExceptionTest.class differ diff --git a/regression/cbmc-java/ArithmeticException3/ArithmeticExceptionTest.java b/regression/cbmc-java/ArithmeticException3/ArithmeticExceptionTest.java new file mode 100644 index 00000000000..dfe7b031288 --- /dev/null +++ b/regression/cbmc-java/ArithmeticException3/ArithmeticExceptionTest.java @@ -0,0 +1,11 @@ +public class ArithmeticExceptionTest { + public static void main(String args[]) { + try { + int i=0; + int j=10%i; + } + catch(ArithmeticException exc) { + assert false; + } + } +} diff --git a/regression/cbmc-java/ArithmeticException3/test.desc b/regression/cbmc-java/ArithmeticException3/test.desc new file mode 100644 index 00000000000..e8f7c941fd4 --- /dev/null +++ b/regression/cbmc-java/ArithmeticException3/test.desc @@ -0,0 +1,9 @@ +CORE +ArithmeticExceptionTest.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +^.*assertion at file ArithmeticExceptionTest.java line 8 function.*: FAILURE$ +^VERIFICATION FAILED +-- +^warning: ignoring diff --git a/regression/cbmc-java/ArithmeticException4/ArithmeticExceptionTest.class b/regression/cbmc-java/ArithmeticException4/ArithmeticExceptionTest.class new file mode 100644 index 00000000000..a4723d1d652 Binary files /dev/null and b/regression/cbmc-java/ArithmeticException4/ArithmeticExceptionTest.class differ diff --git a/regression/cbmc-java/ArithmeticException4/ArithmeticExceptionTest.java b/regression/cbmc-java/ArithmeticException4/ArithmeticExceptionTest.java new file mode 100644 index 00000000000..1e811e417f8 --- /dev/null +++ b/regression/cbmc-java/ArithmeticException4/ArithmeticExceptionTest.java @@ -0,0 +1,12 @@ +public class ArithmeticExceptionTest { + public static void main(String args[]) { + try { + long denom=0; + long num=10; + long result=num%denom; + } + catch(ArithmeticException exc) { + assert false; + } + } +} diff --git a/regression/cbmc-java/ArithmeticException4/test.desc b/regression/cbmc-java/ArithmeticException4/test.desc new file mode 100644 index 00000000000..00820d86c6e --- /dev/null +++ b/regression/cbmc-java/ArithmeticException4/test.desc @@ -0,0 +1,9 @@ +CORE +ArithmeticExceptionTest.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +^.*assertion at file ArithmeticExceptionTest.java line 9 function.*: FAILURE$ +^VERIFICATION FAILED +-- +^warning: ignoring diff --git a/regression/cbmc-java/ArithmeticException5/ArithmeticExceptionTest.class b/regression/cbmc-java/ArithmeticException5/ArithmeticExceptionTest.class new file mode 100644 index 00000000000..813391d04af Binary files /dev/null and b/regression/cbmc-java/ArithmeticException5/ArithmeticExceptionTest.class differ diff --git a/regression/cbmc-java/ArithmeticException5/ArithmeticExceptionTest.java b/regression/cbmc-java/ArithmeticException5/ArithmeticExceptionTest.java new file mode 100644 index 00000000000..d32299a427f --- /dev/null +++ b/regression/cbmc-java/ArithmeticException5/ArithmeticExceptionTest.java @@ -0,0 +1,11 @@ +public class ArithmeticExceptionTest { + public static void main(String args[]) { + try { + double i=0; + double j=10/i; + } + catch(ArithmeticException exc) { + assert false; + } + } +} diff --git a/regression/cbmc-java/ArithmeticException5/test.desc b/regression/cbmc-java/ArithmeticException5/test.desc new file mode 100644 index 00000000000..d57ec32a9a9 --- /dev/null +++ b/regression/cbmc-java/ArithmeticException5/test.desc @@ -0,0 +1,8 @@ +CORE +ArithmeticExceptionTest.class +--java-throw-runtime-exceptions +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL +-- +^warning: ignoring diff --git a/regression/cbmc-java/ArithmeticException6/ArithmeticExceptionTest.class b/regression/cbmc-java/ArithmeticException6/ArithmeticExceptionTest.class new file mode 100644 index 00000000000..fdcb29ad252 Binary files /dev/null and b/regression/cbmc-java/ArithmeticException6/ArithmeticExceptionTest.class differ diff --git a/regression/cbmc-java/ArithmeticException6/ArithmeticExceptionTest.java b/regression/cbmc-java/ArithmeticException6/ArithmeticExceptionTest.java new file mode 100644 index 00000000000..281f868b3e6 --- /dev/null +++ b/regression/cbmc-java/ArithmeticException6/ArithmeticExceptionTest.java @@ -0,0 +1,10 @@ +public class ArithmeticExceptionTest { + public static void main(int denom) { + try { + int j=10/denom; + } + catch(ArithmeticException exc) { + assert false; + } + } +} diff --git a/regression/cbmc-java/ArithmeticException6/test.desc b/regression/cbmc-java/ArithmeticException6/test.desc new file mode 100644 index 00000000000..8cab5f69869 --- /dev/null +++ b/regression/cbmc-java/ArithmeticException6/test.desc @@ -0,0 +1,9 @@ +CORE +ArithmeticExceptionTest.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +^.*assertion at file ArithmeticExceptionTest.java line 7 function.*: FAILURE$ +^VERIFICATION FAILED +-- +^warning: ignoring diff --git a/regression/cbmc-java/ArrayIndexOutOfBoundsException1/ArrayIndexOutOfBoundsExceptionTest.class b/regression/cbmc-java/ArrayIndexOutOfBoundsException1/ArrayIndexOutOfBoundsExceptionTest.class new file mode 100644 index 00000000000..ca15fe999ec Binary files /dev/null and b/regression/cbmc-java/ArrayIndexOutOfBoundsException1/ArrayIndexOutOfBoundsExceptionTest.class differ diff --git a/regression/cbmc-java/ArrayIndexOutOfBoundsException1/ArrayIndexOutOfBoundsExceptionTest.java b/regression/cbmc-java/ArrayIndexOutOfBoundsException1/ArrayIndexOutOfBoundsExceptionTest.java new file mode 100644 index 00000000000..2013694f875 --- /dev/null +++ b/regression/cbmc-java/ArrayIndexOutOfBoundsException1/ArrayIndexOutOfBoundsExceptionTest.java @@ -0,0 +1,11 @@ +public class ArrayIndexOutOfBoundsExceptionTest { + public static void main(String args[]) { + try { + int[] a=new int[4]; + a[4]=0; + } + catch (ArrayIndexOutOfBoundsException exc) { + assert false; + } + } +} diff --git a/regression/cbmc-java/ArrayIndexOutOfBoundsException1/test.desc b/regression/cbmc-java/ArrayIndexOutOfBoundsException1/test.desc new file mode 100644 index 00000000000..e6216e07c79 --- /dev/null +++ b/regression/cbmc-java/ArrayIndexOutOfBoundsException1/test.desc @@ -0,0 +1,9 @@ +CORE +ArrayIndexOutOfBoundsExceptionTest.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +^.*assertion at file ArrayIndexOutOfBoundsExceptionTest.java line 8 function.*: FAILURE$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/ArrayIndexOutOfBoundsException2/ArrayIndexOutOfBoundsExceptionTest.class b/regression/cbmc-java/ArrayIndexOutOfBoundsException2/ArrayIndexOutOfBoundsExceptionTest.class new file mode 100644 index 00000000000..3de63e25a0f Binary files /dev/null and b/regression/cbmc-java/ArrayIndexOutOfBoundsException2/ArrayIndexOutOfBoundsExceptionTest.class differ diff --git a/regression/cbmc-java/ArrayIndexOutOfBoundsException2/ArrayIndexOutOfBoundsExceptionTest.java b/regression/cbmc-java/ArrayIndexOutOfBoundsException2/ArrayIndexOutOfBoundsExceptionTest.java new file mode 100644 index 00000000000..b1f8683115e --- /dev/null +++ b/regression/cbmc-java/ArrayIndexOutOfBoundsException2/ArrayIndexOutOfBoundsExceptionTest.java @@ -0,0 +1,11 @@ +public class ArrayIndexOutOfBoundsExceptionTest { + public static void main(String args[]) { + try { + int[] a=new int[4]; + int i=a[5]; + } + catch (ArrayIndexOutOfBoundsException exc) { + assert false; + } + } +} diff --git a/regression/cbmc-java/ArrayIndexOutOfBoundsException2/test.desc b/regression/cbmc-java/ArrayIndexOutOfBoundsException2/test.desc new file mode 100644 index 00000000000..e6216e07c79 --- /dev/null +++ b/regression/cbmc-java/ArrayIndexOutOfBoundsException2/test.desc @@ -0,0 +1,9 @@ +CORE +ArrayIndexOutOfBoundsExceptionTest.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +^.*assertion at file ArrayIndexOutOfBoundsExceptionTest.java line 8 function.*: FAILURE$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/ClassCastException1/A.class b/regression/cbmc-java/ClassCastException1/A.class new file mode 100644 index 00000000000..3618c09b4ef Binary files /dev/null and b/regression/cbmc-java/ClassCastException1/A.class differ diff --git a/regression/cbmc-java/ClassCastException1/B.class b/regression/cbmc-java/ClassCastException1/B.class new file mode 100644 index 00000000000..e9257dc4427 Binary files /dev/null and b/regression/cbmc-java/ClassCastException1/B.class differ diff --git a/regression/cbmc-java/ClassCastException1/ClassCastExceptionTest.class b/regression/cbmc-java/ClassCastException1/ClassCastExceptionTest.class new file mode 100644 index 00000000000..f791d7e4fcd Binary files /dev/null and b/regression/cbmc-java/ClassCastException1/ClassCastExceptionTest.class differ diff --git a/regression/cbmc-java/ClassCastException1/ClassCastExceptionTest.java b/regression/cbmc-java/ClassCastException1/ClassCastExceptionTest.java new file mode 100644 index 00000000000..e3a87f5a163 --- /dev/null +++ b/regression/cbmc-java/ClassCastException1/ClassCastExceptionTest.java @@ -0,0 +1,12 @@ +public class ClassCastExceptionTest { + public static void main(String args[]) { + try { + Object x = new Integer(0); + String y = (String)x; + } + catch (ClassCastException exc) { + assert false; + } + + } +} diff --git a/regression/cbmc-java/ClassCastException1/test.desc b/regression/cbmc-java/ClassCastException1/test.desc new file mode 100644 index 00000000000..fa84bf185ab --- /dev/null +++ b/regression/cbmc-java/ClassCastException1/test.desc @@ -0,0 +1,9 @@ +CORE +ClassCastExceptionTest.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +^.*assertion at file ClassCastExceptionTest.java line 8 function.*: FAILURE$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/ClassCastException2/A.class b/regression/cbmc-java/ClassCastException2/A.class new file mode 100644 index 00000000000..5400c088442 Binary files /dev/null and b/regression/cbmc-java/ClassCastException2/A.class differ diff --git a/regression/cbmc-java/ClassCastException2/B.class b/regression/cbmc-java/ClassCastException2/B.class new file mode 100644 index 00000000000..57c02bfbefd Binary files /dev/null and b/regression/cbmc-java/ClassCastException2/B.class differ diff --git a/regression/cbmc-java/ClassCastException2/C.class b/regression/cbmc-java/ClassCastException2/C.class new file mode 100644 index 00000000000..3bff3313aa1 Binary files /dev/null and b/regression/cbmc-java/ClassCastException2/C.class differ diff --git a/regression/cbmc-java/ClassCastException2/ClassCastExceptionTest.class b/regression/cbmc-java/ClassCastException2/ClassCastExceptionTest.class new file mode 100644 index 00000000000..503940e149a Binary files /dev/null and b/regression/cbmc-java/ClassCastException2/ClassCastExceptionTest.class differ diff --git a/regression/cbmc-java/ClassCastException2/ClassCastExceptionTest.java b/regression/cbmc-java/ClassCastException2/ClassCastExceptionTest.java new file mode 100644 index 00000000000..6b83050ca6a --- /dev/null +++ b/regression/cbmc-java/ClassCastException2/ClassCastExceptionTest.java @@ -0,0 +1,18 @@ +class A {} + +class B extends A {} + +class C extends B {} + +public class ClassCastExceptionTest { + public static void main(String args[]) { + try { + A c = new C(); + B b = (B)c; + } + catch (ClassCastException exc) { + assert false; + } + + } +} diff --git a/regression/cbmc-java/ClassCastException2/test.desc b/regression/cbmc-java/ClassCastException2/test.desc new file mode 100644 index 00000000000..c593280efe5 --- /dev/null +++ b/regression/cbmc-java/ClassCastException2/test.desc @@ -0,0 +1,8 @@ +CORE +ClassCastExceptionTest.class +--java-throw-runtime-exceptions +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/Makefile b/regression/cbmc-java/Makefile index a1b44c5a948..dcdf752aea1 100644 --- a/regression/cbmc-java/Makefile +++ b/regression/cbmc-java/Makefile @@ -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) diff --git a/regression/cbmc-java/NegativeArraySizeException/NegativeArraySizeExceptionTest.class b/regression/cbmc-java/NegativeArraySizeException/NegativeArraySizeExceptionTest.class new file mode 100644 index 00000000000..70adc3ee839 Binary files /dev/null and b/regression/cbmc-java/NegativeArraySizeException/NegativeArraySizeExceptionTest.class differ diff --git a/regression/cbmc-java/NegativeArraySizeException/NegativeArraySizeExceptionTest.java b/regression/cbmc-java/NegativeArraySizeException/NegativeArraySizeExceptionTest.java new file mode 100644 index 00000000000..d9c9859aa1f --- /dev/null +++ b/regression/cbmc-java/NegativeArraySizeException/NegativeArraySizeExceptionTest.java @@ -0,0 +1,10 @@ +public class NegativeArraySizeExceptionTest { + public static void main(String args[]) { + try { + int a[]=new int[-1]; + } + catch (NegativeArraySizeException exc) { + assert false; + } + } +} diff --git a/regression/cbmc-java/NegativeArraySizeException/test.desc b/regression/cbmc-java/NegativeArraySizeException/test.desc new file mode 100644 index 00000000000..a203a79a628 --- /dev/null +++ b/regression/cbmc-java/NegativeArraySizeException/test.desc @@ -0,0 +1,9 @@ +CORE +NegativeArraySizeExceptionTest.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +^.*assertion at file NegativeArraySizeExceptionTest.java line 7 function.*: FAILURE$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetArray/NondetArray.class b/regression/cbmc-java/NondetArray/NondetArray.class new file mode 100644 index 00000000000..57858ac292f Binary files /dev/null and b/regression/cbmc-java/NondetArray/NondetArray.class differ diff --git a/regression/cbmc-java/NondetArray/NondetArray.java b/regression/cbmc-java/NondetArray/NondetArray.java new file mode 100644 index 00000000000..21dd4416b4e --- /dev/null +++ b/regression/cbmc-java/NondetArray/NondetArray.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class NondetArray +{ + void main() + { + Object[] obj = CProver.nondetWithoutNull(); + assert obj != null; + } +} diff --git a/regression/cbmc-java/NondetArray/test.desc b/regression/cbmc-java/NondetArray/test.desc new file mode 100644 index 00000000000..63cf6d4cbc0 --- /dev/null +++ b/regression/cbmc-java/NondetArray/test.desc @@ -0,0 +1,6 @@ +CORE +NondetArray.class +--function NondetArray.main +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetArray2/NondetArray2.class b/regression/cbmc-java/NondetArray2/NondetArray2.class new file mode 100644 index 00000000000..83eba68f03c Binary files /dev/null and b/regression/cbmc-java/NondetArray2/NondetArray2.class differ diff --git a/regression/cbmc-java/NondetArray2/NondetArray2.java b/regression/cbmc-java/NondetArray2/NondetArray2.java new file mode 100644 index 00000000000..2ff2201ee5d --- /dev/null +++ b/regression/cbmc-java/NondetArray2/NondetArray2.java @@ -0,0 +1,17 @@ +import org.cprover.CProver; + +class NondetArray2 +{ + void main() + { + Integer[] ints = CProver.nondetWithoutNull(); + + int num = 0; + for (Integer i : ints) { + if(i == null) + continue; + num *= i.intValue(); + } + assert num == 0; + } +} diff --git a/regression/cbmc-java/NondetArray2/test.desc b/regression/cbmc-java/NondetArray2/test.desc new file mode 100644 index 00000000000..2a274211c6c --- /dev/null +++ b/regression/cbmc-java/NondetArray2/test.desc @@ -0,0 +1,8 @@ +CORE +NondetArray2.class +--function NondetArray2.main --unwind 5 +^VERIFICATION SUCCESSFUL$ +-- +-- +Disabled pending fixing warnings for array-of with zero length: +^warning: ignoring diff --git a/regression/cbmc-java/NondetArray3/NondetArray3.class b/regression/cbmc-java/NondetArray3/NondetArray3.class new file mode 100644 index 00000000000..0e5a2532fd6 Binary files /dev/null and b/regression/cbmc-java/NondetArray3/NondetArray3.class differ diff --git a/regression/cbmc-java/NondetArray3/NondetArray3.java b/regression/cbmc-java/NondetArray3/NondetArray3.java new file mode 100644 index 00000000000..af5f8f7f111 --- /dev/null +++ b/regression/cbmc-java/NondetArray3/NondetArray3.java @@ -0,0 +1,18 @@ +import org.cprover.CProver; + +class NondetArray3 +{ + void main() + { + Integer[] ints = CProver.nondetWithoutNull(); + assert ints != null; + + int num = 0; + for (Integer i : ints) { + if(i == null) + continue; + num *= i.intValue(); + } + assert num == 0; + } +} diff --git a/regression/cbmc-java/NondetArray3/test.desc b/regression/cbmc-java/NondetArray3/test.desc new file mode 100644 index 00000000000..de192436903 --- /dev/null +++ b/regression/cbmc-java/NondetArray3/test.desc @@ -0,0 +1,8 @@ +CORE +NondetArray3.class +--function NondetArray3.main --unwind 5 +^VERIFICATION SUCCESSFUL$ +-- +-- +Disabled pending fixing warnings for array-of with zero length: +^warning: ignoring diff --git a/regression/cbmc-java/NondetArray4/NondetArray4.class b/regression/cbmc-java/NondetArray4/NondetArray4.class new file mode 100644 index 00000000000..dbe5532ccfb Binary files /dev/null and b/regression/cbmc-java/NondetArray4/NondetArray4.class differ diff --git a/regression/cbmc-java/NondetArray4/NondetArray4.java b/regression/cbmc-java/NondetArray4/NondetArray4.java new file mode 100644 index 00000000000..4b4e15aaad7 --- /dev/null +++ b/regression/cbmc-java/NondetArray4/NondetArray4.java @@ -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; + } +} diff --git a/regression/cbmc-java/NondetArray4/test.desc b/regression/cbmc-java/NondetArray4/test.desc new file mode 100644 index 00000000000..fd419bab2d4 --- /dev/null +++ b/regression/cbmc-java/NondetArray4/test.desc @@ -0,0 +1,6 @@ +CORE +NondetArray4.class +--function NondetArray4.main +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetAssume1/NondetAssume1.class b/regression/cbmc-java/NondetAssume1/NondetAssume1.class new file mode 100644 index 00000000000..bcdca197547 Binary files /dev/null and b/regression/cbmc-java/NondetAssume1/NondetAssume1.class differ diff --git a/regression/cbmc-java/NondetAssume1/NondetAssume1.java b/regression/cbmc-java/NondetAssume1/NondetAssume1.java new file mode 100644 index 00000000000..9177bcece6b --- /dev/null +++ b/regression/cbmc-java/NondetAssume1/NondetAssume1.java @@ -0,0 +1,11 @@ +import org.cprover.CProver; + +class NondetAssume1 +{ + void main() + { + int x = CProver.nondetInt(); + CProver.assume(x == 1); + assert x == 1; + } +} diff --git a/regression/cbmc-java/NondetAssume1/test.desc b/regression/cbmc-java/NondetAssume1/test.desc new file mode 100644 index 00000000000..bbff9abb9f2 --- /dev/null +++ b/regression/cbmc-java/NondetAssume1/test.desc @@ -0,0 +1,6 @@ +CORE +NondetAssume1.class +--function NondetAssume1.main +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetAssume2/A.class b/regression/cbmc-java/NondetAssume2/A.class new file mode 100644 index 00000000000..66636e271af Binary files /dev/null and b/regression/cbmc-java/NondetAssume2/A.class differ diff --git a/regression/cbmc-java/NondetAssume2/B.class b/regression/cbmc-java/NondetAssume2/B.class new file mode 100644 index 00000000000..9978b0f14de Binary files /dev/null and b/regression/cbmc-java/NondetAssume2/B.class differ diff --git a/regression/cbmc-java/NondetAssume2/C.class b/regression/cbmc-java/NondetAssume2/C.class new file mode 100644 index 00000000000..bbf6b9b7eae Binary files /dev/null and b/regression/cbmc-java/NondetAssume2/C.class differ diff --git a/regression/cbmc-java/NondetAssume2/NondetAssume2.class b/regression/cbmc-java/NondetAssume2/NondetAssume2.class new file mode 100644 index 00000000000..45efb7811e2 Binary files /dev/null and b/regression/cbmc-java/NondetAssume2/NondetAssume2.class differ diff --git a/regression/cbmc-java/NondetAssume2/NondetAssume2.java b/regression/cbmc-java/NondetAssume2/NondetAssume2.java new file mode 100644 index 00000000000..1f8f74a3464 --- /dev/null +++ b/regression/cbmc-java/NondetAssume2/NondetAssume2.java @@ -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; + } +} diff --git a/regression/cbmc-java/NondetAssume2/test.desc b/regression/cbmc-java/NondetAssume2/test.desc new file mode 100644 index 00000000000..19abaa63e8a --- /dev/null +++ b/regression/cbmc-java/NondetAssume2/test.desc @@ -0,0 +1,6 @@ +CORE +NondetAssume2.class +--function NondetAssume2.main +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetBoolean/NondetBoolean.class b/regression/cbmc-java/NondetBoolean/NondetBoolean.class new file mode 100644 index 00000000000..0b4ed3f7915 Binary files /dev/null and b/regression/cbmc-java/NondetBoolean/NondetBoolean.class differ diff --git a/regression/cbmc-java/NondetBoolean/NondetBoolean.java b/regression/cbmc-java/NondetBoolean/NondetBoolean.java new file mode 100644 index 00000000000..4b05ae056ea --- /dev/null +++ b/regression/cbmc-java/NondetBoolean/NondetBoolean.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class NondetBoolean +{ + static void main() + { + boolean x = CProver.nondetBoolean(); + assert x == false; + } +} diff --git a/regression/cbmc-java/NondetBoolean/test.desc b/regression/cbmc-java/NondetBoolean/test.desc new file mode 100644 index 00000000000..c0bfc954449 --- /dev/null +++ b/regression/cbmc-java/NondetBoolean/test.desc @@ -0,0 +1,6 @@ +CORE +NondetBoolean.class +--function NondetBoolean.main +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetByte/NondetByte.class b/regression/cbmc-java/NondetByte/NondetByte.class new file mode 100644 index 00000000000..d066e46704c Binary files /dev/null and b/regression/cbmc-java/NondetByte/NondetByte.class differ diff --git a/regression/cbmc-java/NondetByte/NondetByte.java b/regression/cbmc-java/NondetByte/NondetByte.java new file mode 100644 index 00000000000..36b7b209014 --- /dev/null +++ b/regression/cbmc-java/NondetByte/NondetByte.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class NondetByte +{ + static void main() + { + byte x = CProver.nondetByte(); + assert x == 0; + } +} diff --git a/regression/cbmc-java/NondetByte/test.desc b/regression/cbmc-java/NondetByte/test.desc new file mode 100644 index 00000000000..d05a462245a --- /dev/null +++ b/regression/cbmc-java/NondetByte/test.desc @@ -0,0 +1,6 @@ +CORE +NondetByte.class +--function NondetByte.main +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetCastToObject/NondetCastToObject.class b/regression/cbmc-java/NondetCastToObject/NondetCastToObject.class new file mode 100644 index 00000000000..65e622d872c Binary files /dev/null and b/regression/cbmc-java/NondetCastToObject/NondetCastToObject.class differ diff --git a/regression/cbmc-java/NondetCastToObject/NondetCastToObject.java b/regression/cbmc-java/NondetCastToObject/NondetCastToObject.java new file mode 100644 index 00000000000..133df3f9f4e --- /dev/null +++ b/regression/cbmc-java/NondetCastToObject/NondetCastToObject.java @@ -0,0 +1,11 @@ +import org.cprover.CProver; + +class NondetCastToObject +{ + void main() + { + Object o = CProver.nondetWithNull(); + CProver.assume(o != null); + assert o != null; + } +} diff --git a/regression/cbmc-java/NondetCastToObject/test.desc b/regression/cbmc-java/NondetCastToObject/test.desc new file mode 100644 index 00000000000..5d3b98bb583 --- /dev/null +++ b/regression/cbmc-java/NondetCastToObject/test.desc @@ -0,0 +1,6 @@ +CORE +NondetCastToObject.class +--function NondetCastToObject.main +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetChar/NondetChar.class b/regression/cbmc-java/NondetChar/NondetChar.class new file mode 100644 index 00000000000..4d05d0b75dd Binary files /dev/null and b/regression/cbmc-java/NondetChar/NondetChar.class differ diff --git a/regression/cbmc-java/NondetChar/NondetChar.java b/regression/cbmc-java/NondetChar/NondetChar.java new file mode 100644 index 00000000000..f9570d8a5d2 --- /dev/null +++ b/regression/cbmc-java/NondetChar/NondetChar.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class NondetChar +{ + static void main() + { + char x = CProver.nondetChar(); + assert x == '\0'; + } +} diff --git a/regression/cbmc-java/NondetChar/test.desc b/regression/cbmc-java/NondetChar/test.desc new file mode 100644 index 00000000000..96ecd2f6735 --- /dev/null +++ b/regression/cbmc-java/NondetChar/test.desc @@ -0,0 +1,6 @@ +CORE +NondetChar.class +--function NondetChar.main +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetDirectFromMethod/A.class b/regression/cbmc-java/NondetDirectFromMethod/A.class new file mode 100644 index 00000000000..6d3758b230a Binary files /dev/null and b/regression/cbmc-java/NondetDirectFromMethod/A.class differ diff --git a/regression/cbmc-java/NondetDirectFromMethod/NondetDirectFromMethod.class b/regression/cbmc-java/NondetDirectFromMethod/NondetDirectFromMethod.class new file mode 100644 index 00000000000..6dafdc80b07 Binary files /dev/null and b/regression/cbmc-java/NondetDirectFromMethod/NondetDirectFromMethod.class differ diff --git a/regression/cbmc-java/NondetDirectFromMethod/NondetDirectFromMethod.java b/regression/cbmc-java/NondetDirectFromMethod/NondetDirectFromMethod.java new file mode 100644 index 00000000000..dbd7960c880 --- /dev/null +++ b/regression/cbmc-java/NondetDirectFromMethod/NondetDirectFromMethod.java @@ -0,0 +1,19 @@ +import org.cprover.CProver; + +class A +{ + int a; +} + +class NondetDirectFromMethod +{ + A methodReturningA() + { + return CProver.nondetWithoutNull(); + } + + void main() + { + assert methodReturningA() != null; + } +} diff --git a/regression/cbmc-java/NondetDirectFromMethod/test.desc b/regression/cbmc-java/NondetDirectFromMethod/test.desc new file mode 100644 index 00000000000..10989391e46 --- /dev/null +++ b/regression/cbmc-java/NondetDirectFromMethod/test.desc @@ -0,0 +1,6 @@ +CORE +NondetDirectFromMethod.class +--function NondetDirectFromMethod.main +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetDouble/NondetDouble.class b/regression/cbmc-java/NondetDouble/NondetDouble.class new file mode 100644 index 00000000000..5d298bcfa63 Binary files /dev/null and b/regression/cbmc-java/NondetDouble/NondetDouble.class differ diff --git a/regression/cbmc-java/NondetDouble/NondetDouble.java b/regression/cbmc-java/NondetDouble/NondetDouble.java new file mode 100644 index 00000000000..451fcf4db7e --- /dev/null +++ b/regression/cbmc-java/NondetDouble/NondetDouble.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class NondetDouble +{ + static void main() + { + double x = CProver.nondetDouble(); + assert x == 0; + } +} diff --git a/regression/cbmc-java/NondetDouble/test.desc b/regression/cbmc-java/NondetDouble/test.desc new file mode 100644 index 00000000000..631edbe5024 --- /dev/null +++ b/regression/cbmc-java/NondetDouble/test.desc @@ -0,0 +1,6 @@ +CORE +NondetDouble.class +--function NondetDouble.main +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetFloat/NondetFloat.class b/regression/cbmc-java/NondetFloat/NondetFloat.class new file mode 100644 index 00000000000..9b26f72c773 Binary files /dev/null and b/regression/cbmc-java/NondetFloat/NondetFloat.class differ diff --git a/regression/cbmc-java/NondetFloat/NondetFloat.java b/regression/cbmc-java/NondetFloat/NondetFloat.java new file mode 100644 index 00000000000..e461162d0d5 --- /dev/null +++ b/regression/cbmc-java/NondetFloat/NondetFloat.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class NondetFloat +{ + static void main() + { + float x = CProver.nondetFloat(); + assert x == 0; + } +} diff --git a/regression/cbmc-java/NondetFloat/test.desc b/regression/cbmc-java/NondetFloat/test.desc new file mode 100644 index 00000000000..27bc33761b6 --- /dev/null +++ b/regression/cbmc-java/NondetFloat/test.desc @@ -0,0 +1,6 @@ +CORE +NondetFloat.class +--function NondetFloat.main +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetGenericArray/A.class b/regression/cbmc-java/NondetGenericArray/A.class new file mode 100644 index 00000000000..1323ce430e5 Binary files /dev/null and b/regression/cbmc-java/NondetGenericArray/A.class differ diff --git a/regression/cbmc-java/NondetGenericArray/B.class b/regression/cbmc-java/NondetGenericArray/B.class new file mode 100644 index 00000000000..730946d3d80 Binary files /dev/null and b/regression/cbmc-java/NondetGenericArray/B.class differ diff --git a/regression/cbmc-java/NondetGenericArray/C.class b/regression/cbmc-java/NondetGenericArray/C.class new file mode 100644 index 00000000000..27903564a63 Binary files /dev/null and b/regression/cbmc-java/NondetGenericArray/C.class differ diff --git a/regression/cbmc-java/NondetGenericArray/NondetGenericArray.class b/regression/cbmc-java/NondetGenericArray/NondetGenericArray.class new file mode 100644 index 00000000000..76c6f43ab08 Binary files /dev/null and b/regression/cbmc-java/NondetGenericArray/NondetGenericArray.class differ diff --git a/regression/cbmc-java/NondetGenericArray/NondetGenericArray.java b/regression/cbmc-java/NondetGenericArray/NondetGenericArray.java new file mode 100644 index 00000000000..1c7d62a5b73 --- /dev/null +++ b/regression/cbmc-java/NondetGenericArray/NondetGenericArray.java @@ -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; + } +} diff --git a/regression/cbmc-java/NondetGenericArray/test.desc b/regression/cbmc-java/NondetGenericArray/test.desc new file mode 100644 index 00000000000..9abfffc4b9f --- /dev/null +++ b/regression/cbmc-java/NondetGenericArray/test.desc @@ -0,0 +1,8 @@ +CORE +NondetGenericArray.class +--function NondetGenericArray.main +^VERIFICATION SUCCESSFUL$ +-- +-- +Disabled pending fixing warnings for array-of with zero length: +^warning: ignoring diff --git a/regression/cbmc-java/NondetGenericRecursive/A.class b/regression/cbmc-java/NondetGenericRecursive/A.class new file mode 100644 index 00000000000..005c8063d51 Binary files /dev/null and b/regression/cbmc-java/NondetGenericRecursive/A.class differ diff --git a/regression/cbmc-java/NondetGenericRecursive/B.class b/regression/cbmc-java/NondetGenericRecursive/B.class new file mode 100644 index 00000000000..8a18024f50b Binary files /dev/null and b/regression/cbmc-java/NondetGenericRecursive/B.class differ diff --git a/regression/cbmc-java/NondetGenericRecursive/C.class b/regression/cbmc-java/NondetGenericRecursive/C.class new file mode 100644 index 00000000000..acc2b11ef63 Binary files /dev/null and b/regression/cbmc-java/NondetGenericRecursive/C.class differ diff --git a/regression/cbmc-java/NondetGenericRecursive/NondetGenericRecursive.class b/regression/cbmc-java/NondetGenericRecursive/NondetGenericRecursive.class new file mode 100644 index 00000000000..c0040fb2f5f Binary files /dev/null and b/regression/cbmc-java/NondetGenericRecursive/NondetGenericRecursive.class differ diff --git a/regression/cbmc-java/NondetGenericRecursive/NondetGenericRecursive.java b/regression/cbmc-java/NondetGenericRecursive/NondetGenericRecursive.java new file mode 100644 index 00000000000..33d2b8d68bc --- /dev/null +++ b/regression/cbmc-java/NondetGenericRecursive/NondetGenericRecursive.java @@ -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; + } +} diff --git a/regression/cbmc-java/NondetGenericRecursive/test.desc b/regression/cbmc-java/NondetGenericRecursive/test.desc new file mode 100644 index 00000000000..34af1b2e6c1 --- /dev/null +++ b/regression/cbmc-java/NondetGenericRecursive/test.desc @@ -0,0 +1,6 @@ +CORE +NondetGenericRecursive.class +--function NondetGenericRecursive.main +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetGenericRecursive2/A.class b/regression/cbmc-java/NondetGenericRecursive2/A.class new file mode 100644 index 00000000000..5628564f73d Binary files /dev/null and b/regression/cbmc-java/NondetGenericRecursive2/A.class differ diff --git a/regression/cbmc-java/NondetGenericRecursive2/B.class b/regression/cbmc-java/NondetGenericRecursive2/B.class new file mode 100644 index 00000000000..606067dcdb8 Binary files /dev/null and b/regression/cbmc-java/NondetGenericRecursive2/B.class differ diff --git a/regression/cbmc-java/NondetGenericRecursive2/C.class b/regression/cbmc-java/NondetGenericRecursive2/C.class new file mode 100644 index 00000000000..fe32a4afb54 Binary files /dev/null and b/regression/cbmc-java/NondetGenericRecursive2/C.class differ diff --git a/regression/cbmc-java/NondetGenericRecursive2/NondetGenericRecursive2.class b/regression/cbmc-java/NondetGenericRecursive2/NondetGenericRecursive2.class new file mode 100644 index 00000000000..ed328ac8e04 Binary files /dev/null and b/regression/cbmc-java/NondetGenericRecursive2/NondetGenericRecursive2.class differ diff --git a/regression/cbmc-java/NondetGenericRecursive2/NondetGenericRecursive2.java b/regression/cbmc-java/NondetGenericRecursive2/NondetGenericRecursive2.java new file mode 100644 index 00000000000..de5ef46c4cb --- /dev/null +++ b/regression/cbmc-java/NondetGenericRecursive2/NondetGenericRecursive2.java @@ -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; + } +} diff --git a/regression/cbmc-java/NondetGenericRecursive2/test.desc b/regression/cbmc-java/NondetGenericRecursive2/test.desc new file mode 100644 index 00000000000..52558889313 --- /dev/null +++ b/regression/cbmc-java/NondetGenericRecursive2/test.desc @@ -0,0 +1,6 @@ +CORE +NondetGenericRecursive2.class +--function NondetGenericRecursive2.main +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetGenericWithNull/B.class b/regression/cbmc-java/NondetGenericWithNull/B.class new file mode 100644 index 00000000000..80c9824e519 Binary files /dev/null and b/regression/cbmc-java/NondetGenericWithNull/B.class differ diff --git a/regression/cbmc-java/NondetGenericWithNull/NondetGenericWithNull.class b/regression/cbmc-java/NondetGenericWithNull/NondetGenericWithNull.class new file mode 100644 index 00000000000..0b52a47bd0a Binary files /dev/null and b/regression/cbmc-java/NondetGenericWithNull/NondetGenericWithNull.class differ diff --git a/regression/cbmc-java/NondetGenericWithNull/NondetGenericWithNull.java b/regression/cbmc-java/NondetGenericWithNull/NondetGenericWithNull.java new file mode 100644 index 00000000000..9c89b92b31f --- /dev/null +++ b/regression/cbmc-java/NondetGenericWithNull/NondetGenericWithNull.java @@ -0,0 +1,13 @@ +import org.cprover.CProver; + +class B { int a; } + +class NondetGenericWithNull +{ + static void main() + { + B b = CProver.nondetWithNull(); + assert b != null; + assert b.a != 0; + } +} diff --git a/regression/cbmc-java/NondetGenericWithNull/test.desc b/regression/cbmc-java/NondetGenericWithNull/test.desc new file mode 100644 index 00000000000..c2feb23068d --- /dev/null +++ b/regression/cbmc-java/NondetGenericWithNull/test.desc @@ -0,0 +1,6 @@ +CORE +NondetGenericWithNull.class +--function NondetGenericWithNull.main +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetGenericWithoutNull/B.class b/regression/cbmc-java/NondetGenericWithoutNull/B.class new file mode 100644 index 00000000000..c7e4fbbf832 Binary files /dev/null and b/regression/cbmc-java/NondetGenericWithoutNull/B.class differ diff --git a/regression/cbmc-java/NondetGenericWithoutNull/NondetGenericWithoutNull.class b/regression/cbmc-java/NondetGenericWithoutNull/NondetGenericWithoutNull.class new file mode 100644 index 00000000000..c369eae01fc Binary files /dev/null and b/regression/cbmc-java/NondetGenericWithoutNull/NondetGenericWithoutNull.class differ diff --git a/regression/cbmc-java/NondetGenericWithoutNull/NondetGenericWithoutNull.java b/regression/cbmc-java/NondetGenericWithoutNull/NondetGenericWithoutNull.java new file mode 100644 index 00000000000..6a3ef4ad6f3 --- /dev/null +++ b/regression/cbmc-java/NondetGenericWithoutNull/NondetGenericWithoutNull.java @@ -0,0 +1,12 @@ +import org.cprover.CProver; + +class B { int a; } + +class NondetGenericWithoutNull +{ + static void main() + { + B b = CProver.nondetWithoutNull(); + assert b != null; + } +} diff --git a/regression/cbmc-java/NondetGenericWithoutNull/test.desc b/regression/cbmc-java/NondetGenericWithoutNull/test.desc new file mode 100644 index 00000000000..e9ada8b935c --- /dev/null +++ b/regression/cbmc-java/NondetGenericWithoutNull/test.desc @@ -0,0 +1,6 @@ +CORE +NondetGenericWithoutNull.class +--function NondetGenericWithoutNull.main +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetInt/NondetInt.class b/regression/cbmc-java/NondetInt/NondetInt.class new file mode 100644 index 00000000000..0af2adcb608 Binary files /dev/null and b/regression/cbmc-java/NondetInt/NondetInt.class differ diff --git a/regression/cbmc-java/NondetInt/NondetInt.java b/regression/cbmc-java/NondetInt/NondetInt.java new file mode 100644 index 00000000000..f2ae6890fb0 --- /dev/null +++ b/regression/cbmc-java/NondetInt/NondetInt.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class NondetInt +{ + static void main() + { + int x = CProver.nondetInt(); + assert x == 0; + } +} diff --git a/regression/cbmc-java/NondetInt/test.desc b/regression/cbmc-java/NondetInt/test.desc new file mode 100644 index 00000000000..324d69b8c91 --- /dev/null +++ b/regression/cbmc-java/NondetInt/test.desc @@ -0,0 +1,6 @@ +CORE +NondetInt.class +--function NondetInt.main +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetLong/NondetLong.class b/regression/cbmc-java/NondetLong/NondetLong.class new file mode 100644 index 00000000000..27a693dee6e Binary files /dev/null and b/regression/cbmc-java/NondetLong/NondetLong.class differ diff --git a/regression/cbmc-java/NondetLong/NondetLong.java b/regression/cbmc-java/NondetLong/NondetLong.java new file mode 100644 index 00000000000..57707eb07cb --- /dev/null +++ b/regression/cbmc-java/NondetLong/NondetLong.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class NondetLong +{ + static void main() + { + long x = CProver.nondetLong(); + assert x == 0; + } +} diff --git a/regression/cbmc-java/NondetLong/test.desc b/regression/cbmc-java/NondetLong/test.desc new file mode 100644 index 00000000000..f92db994e00 --- /dev/null +++ b/regression/cbmc-java/NondetLong/test.desc @@ -0,0 +1,6 @@ +CORE +NondetLong.class +--function NondetLong.main +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NondetShort/NondetShort.class b/regression/cbmc-java/NondetShort/NondetShort.class new file mode 100644 index 00000000000..32e0868de3e Binary files /dev/null and b/regression/cbmc-java/NondetShort/NondetShort.class differ diff --git a/regression/cbmc-java/NondetShort/NondetShort.java b/regression/cbmc-java/NondetShort/NondetShort.java new file mode 100644 index 00000000000..941ee23ffd2 --- /dev/null +++ b/regression/cbmc-java/NondetShort/NondetShort.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class NondetShort +{ + static void main() + { + short x = CProver.nondetShort(); + assert x == 0; + } +} diff --git a/regression/cbmc-java/NondetShort/test.desc b/regression/cbmc-java/NondetShort/test.desc new file mode 100644 index 00000000000..24ac39c540b --- /dev/null +++ b/regression/cbmc-java/NondetShort/test.desc @@ -0,0 +1,6 @@ +CORE +NondetShort.class +--function NondetShort.main +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NullPointer1/test.desc b/regression/cbmc-java/NullPointer1/test.desc index d479356875a..64fd6a24f69 100644 --- a/regression/cbmc-java/NullPointer1/test.desc +++ b/regression/cbmc-java/NullPointer1/test.desc @@ -3,7 +3,7 @@ NullPointer1.class --pointer-check --stop-on-fail ^EXIT=10$ ^SIGNAL=0$ -^ file NullPointer1.java line 16 function java::NullPointer1.main:\(\[Ljava/lang/String;\)V$ +^ file NullPointer1.java line 16 function java::NullPointer1.main:\(\[Ljava/lang/String;\)V bytecode-index 9$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/cbmc-java/NullPointer4/test.desc b/regression/cbmc-java/NullPointer4/test.desc index 2e1b728c1fc..fbe3588bfff 100644 --- a/regression/cbmc-java/NullPointer4/test.desc +++ b/regression/cbmc-java/NullPointer4/test.desc @@ -3,7 +3,7 @@ NullPointer4.class --pointer-check --stop-on-fail ^EXIT=10$ ^SIGNAL=0$ -^ file NullPointer4.java line 6 function java::NullPointer4.main:\(\[Ljava/lang/String;\)V$ +^ file NullPointer4.java line 6 function java::NullPointer4.main:\(\[Ljava/lang/String;\)V bytecode-index 4$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/cbmc-java/NullPointerException2/A.class b/regression/cbmc-java/NullPointerException2/A.class new file mode 100644 index 00000000000..19526643bf2 Binary files /dev/null and b/regression/cbmc-java/NullPointerException2/A.class differ diff --git a/regression/cbmc-java/NullPointerException2/B.class b/regression/cbmc-java/NullPointerException2/B.class new file mode 100644 index 00000000000..f29cbafef50 Binary files /dev/null and b/regression/cbmc-java/NullPointerException2/B.class differ diff --git a/regression/cbmc-java/NullPointerException2/Test.class b/regression/cbmc-java/NullPointerException2/Test.class new file mode 100644 index 00000000000..9885d01cc77 Binary files /dev/null and b/regression/cbmc-java/NullPointerException2/Test.class differ diff --git a/regression/cbmc-java/NullPointerException2/Test.java b/regression/cbmc-java/NullPointerException2/Test.java new file mode 100644 index 00000000000..684e6725a70 --- /dev/null +++ b/regression/cbmc-java/NullPointerException2/Test.java @@ -0,0 +1,17 @@ +class B extends RuntimeException {} + +class A { + int i; +} + +public class Test { + public static void main(String args[]) { + A a=null; + try { + a.i=0; + } + catch (NullPointerException exc) { + assert false; + } + } +} diff --git a/regression/cbmc-java/NullPointerException2/test.desc b/regression/cbmc-java/NullPointerException2/test.desc new file mode 100644 index 00000000000..e4ad2c5739d --- /dev/null +++ b/regression/cbmc-java/NullPointerException2/test.desc @@ -0,0 +1,9 @@ +CORE +Test.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +^.*assertion at file Test.java line 14 function.*: FAILURE$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/NullPointerException3/A.class b/regression/cbmc-java/NullPointerException3/A.class new file mode 100644 index 00000000000..19526643bf2 Binary files /dev/null and b/regression/cbmc-java/NullPointerException3/A.class differ diff --git a/regression/cbmc-java/NullPointerException3/B.class b/regression/cbmc-java/NullPointerException3/B.class new file mode 100644 index 00000000000..f29cbafef50 Binary files /dev/null and b/regression/cbmc-java/NullPointerException3/B.class differ diff --git a/regression/cbmc-java/NullPointerException3/Test.class b/regression/cbmc-java/NullPointerException3/Test.class new file mode 100644 index 00000000000..7f90d2404b4 Binary files /dev/null and b/regression/cbmc-java/NullPointerException3/Test.class differ diff --git a/regression/cbmc-java/NullPointerException3/Test.java b/regression/cbmc-java/NullPointerException3/Test.java new file mode 100644 index 00000000000..398d90b0c21 --- /dev/null +++ b/regression/cbmc-java/NullPointerException3/Test.java @@ -0,0 +1,17 @@ +class B extends RuntimeException {} + +class A { + int i; +} + +public class Test { + public static void main(String args[]) { + A a=null; + try { + int i=a.i; + } + catch (NullPointerException exc) { + assert false; + } + } +} diff --git a/regression/cbmc-java/NullPointerException3/test.desc b/regression/cbmc-java/NullPointerException3/test.desc new file mode 100644 index 00000000000..e4ad2c5739d --- /dev/null +++ b/regression/cbmc-java/NullPointerException3/test.desc @@ -0,0 +1,9 @@ +CORE +Test.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +^.*assertion at file Test.java line 14 function.*: FAILURE$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/address_space_size_limit1/Test.class b/regression/cbmc-java/address_space_size_limit1/Test.class new file mode 100644 index 00000000000..5f81fc826ff Binary files /dev/null and b/regression/cbmc-java/address_space_size_limit1/Test.class differ diff --git a/regression/cbmc-java/address_space_size_limit1/Test.java b/regression/cbmc-java/address_space_size_limit1/Test.java new file mode 100644 index 00000000000..4f60b51e973 --- /dev/null +++ b/regression/cbmc-java/address_space_size_limit1/Test.java @@ -0,0 +1,13 @@ +public class Test { + int x; + Test(int x) { this.x = x; } + + public static void main(String[] args) { + int i; + Test[] tests = new Test[30]; + for(i = 0; i < 30; ++i) { + tests[i] = new Test(i); + } + assert i == tests[0].x; + } +} diff --git a/regression/cbmc-java/address_space_size_limit1/test.desc b/regression/cbmc-java/address_space_size_limit1/test.desc new file mode 100644 index 00000000000..d08ff5b05c1 --- /dev/null +++ b/regression/cbmc-java/address_space_size_limit1/test.desc @@ -0,0 +1,5 @@ +CORE +Test.class +--object-bits 4 +too many addressed objects +-- diff --git a/regression/cbmc-java/address_space_size_limit2/Test.class b/regression/cbmc-java/address_space_size_limit2/Test.class new file mode 100644 index 00000000000..5f81fc826ff Binary files /dev/null and b/regression/cbmc-java/address_space_size_limit2/Test.class differ diff --git a/regression/cbmc-java/address_space_size_limit2/Test.java b/regression/cbmc-java/address_space_size_limit2/Test.java new file mode 100644 index 00000000000..4f60b51e973 --- /dev/null +++ b/regression/cbmc-java/address_space_size_limit2/Test.java @@ -0,0 +1,13 @@ +public class Test { + int x; + Test(int x) { this.x = x; } + + public static void main(String[] args) { + int i; + Test[] tests = new Test[30]; + for(i = 0; i < 30; ++i) { + tests[i] = new Test(i); + } + assert i == tests[0].x; + } +} diff --git a/regression/cbmc-java/address_space_size_limit2/test.desc b/regression/cbmc-java/address_space_size_limit2/test.desc new file mode 100644 index 00000000000..9cf9d12a7f7 --- /dev/null +++ b/regression/cbmc-java/address_space_size_limit2/test.desc @@ -0,0 +1,8 @@ +CORE +Test.class +--object-bits 8 +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +^\[java::Test.main:\(\[Ljava/lang/String;\)V.assertion.1\] .*: FAILURE$ +-- diff --git a/regression/cbmc-java/assume1/Assume1.class b/regression/cbmc-java/assume1/Assume1.class new file mode 100644 index 00000000000..b9a49bc9971 Binary files /dev/null and b/regression/cbmc-java/assume1/Assume1.class differ diff --git a/regression/cbmc-java/assume1/Assume1.java b/regression/cbmc-java/assume1/Assume1.java new file mode 100644 index 00000000000..4de0afd025b --- /dev/null +++ b/regression/cbmc-java/assume1/Assume1.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class Assume1 +{ + static void foo(int x) + { + CProver.assume(x>3); + assert x>0; + } +} diff --git a/regression/cbmc-java/assume1/test.desc b/regression/cbmc-java/assume1/test.desc new file mode 100644 index 00000000000..1f80a1c1e86 --- /dev/null +++ b/regression/cbmc-java/assume1/test.desc @@ -0,0 +1,8 @@ +CORE +Assume1.class +--function Assume1.foo +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/assume2/Assume2.class b/regression/cbmc-java/assume2/Assume2.class new file mode 100644 index 00000000000..36e09875d7d Binary files /dev/null and b/regression/cbmc-java/assume2/Assume2.class differ diff --git a/regression/cbmc-java/assume2/Assume2.java b/regression/cbmc-java/assume2/Assume2.java new file mode 100644 index 00000000000..6991167bfb8 --- /dev/null +++ b/regression/cbmc-java/assume2/Assume2.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class Assume2 +{ + static void foo(int x) + { + CProver.assume(x>3); + assert x>4; + } +} diff --git a/regression/cbmc-java/assume2/test.desc b/regression/cbmc-java/assume2/test.desc new file mode 100644 index 00000000000..35a954116f8 --- /dev/null +++ b/regression/cbmc-java/assume2/test.desc @@ -0,0 +1,8 @@ +CORE +Assume2.class +--function Assume2.foo +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/assume3/Assume3.class b/regression/cbmc-java/assume3/Assume3.class new file mode 100644 index 00000000000..916ad4065fb Binary files /dev/null and b/regression/cbmc-java/assume3/Assume3.class differ diff --git a/regression/cbmc-java/assume3/Assume3.java b/regression/cbmc-java/assume3/Assume3.java new file mode 100644 index 00000000000..895deee9ca0 --- /dev/null +++ b/regression/cbmc-java/assume3/Assume3.java @@ -0,0 +1,10 @@ +import org.cprover.CProver; + +class Assume3 +{ + public static void main(String[] args) + { + CProver.assume(false); + assert false; + } +} diff --git a/regression/cbmc-java/assume3/test.desc b/regression/cbmc-java/assume3/test.desc new file mode 100644 index 00000000000..0ad8c00399f --- /dev/null +++ b/regression/cbmc-java/assume3/test.desc @@ -0,0 +1,8 @@ +CORE +Assume3.class + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/basic1/helloworld.class b/regression/cbmc-java/basic1/helloworld.class index b1dabd1ca44..244d721feaa 100644 Binary files a/regression/cbmc-java/basic1/helloworld.class and b/regression/cbmc-java/basic1/helloworld.class differ diff --git a/regression/cbmc-java/basic1/helloworld.java b/regression/cbmc-java/basic1/helloworld.java index c76a0967f92..bfb08fce317 100644 --- a/regression/cbmc-java/basic1/helloworld.java +++ b/regression/cbmc-java/basic1/helloworld.java @@ -4,7 +4,14 @@ /* Hello World Java Program */ class helloworld { public static void main(String[] args) { + assert(System.out != null); System.out.println("Hello World!"); + assert(System.err != null); + System.err.println("Hello World!"); + assert(System.in != null); + try { + int avail = System.in.available(); + } + catch(java.io.IOException e) {} } } - diff --git a/regression/cbmc-java/cast_null1/test.class b/regression/cbmc-java/cast_null1/test.class new file mode 100644 index 00000000000..efced7cc257 Binary files /dev/null and b/regression/cbmc-java/cast_null1/test.class differ diff --git a/regression/cbmc-java/cast_null1/test.desc b/regression/cbmc-java/cast_null1/test.desc new file mode 100644 index 00000000000..86a52fc73e7 --- /dev/null +++ b/regression/cbmc-java/cast_null1/test.desc @@ -0,0 +1,9 @@ +CORE +test.class + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +Dynamic cast check: FAILURE +^warning: ignoring diff --git a/regression/cbmc-java/cast_null1/test.java b/regression/cbmc-java/cast_null1/test.java new file mode 100644 index 00000000000..b6eb1d11817 --- /dev/null +++ b/regression/cbmc-java/cast_null1/test.java @@ -0,0 +1,8 @@ + +public class test { + + public static void main() { + test t = (test)null; + } + +} diff --git a/regression/cbmc-java/cast_null2/test.class b/regression/cbmc-java/cast_null2/test.class new file mode 100644 index 00000000000..efced7cc257 Binary files /dev/null and b/regression/cbmc-java/cast_null2/test.class differ diff --git a/regression/cbmc-java/cast_null2/test.desc b/regression/cbmc-java/cast_null2/test.desc new file mode 100644 index 00000000000..c621e5854e5 --- /dev/null +++ b/regression/cbmc-java/cast_null2/test.desc @@ -0,0 +1,8 @@ +CORE +test.class +--java-throw-runtime-exceptions +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/cast_null2/test.java b/regression/cbmc-java/cast_null2/test.java new file mode 100644 index 00000000000..b6eb1d11817 --- /dev/null +++ b/regression/cbmc-java/cast_null2/test.java @@ -0,0 +1,8 @@ + +public class test { + + public static void main() { + test t = (test)null; + } + +} diff --git a/regression/cbmc-java/covered1/covered1.class b/regression/cbmc-java/covered1/covered1.class new file mode 100644 index 00000000000..7cb91496b7d Binary files /dev/null and b/regression/cbmc-java/covered1/covered1.class differ diff --git a/regression/cbmc-java/covered1/covered1.java b/regression/cbmc-java/covered1/covered1.java new file mode 100644 index 00000000000..018e65336a6 --- /dev/null +++ b/regression/cbmc-java/covered1/covered1.java @@ -0,0 +1,37 @@ +public class covered1 +{ + // this is a variable + int x=1; + //these are two, one line off the first + int y=2; + int z=3; + //this is part of static init + static int z0=0; + + //another non-static + int a; + int b; + static boolean odd; + + static + { + odd=(z0+1)%2==0; + } + + covered1(int a, int b) + { + this.a=a*b; + this.b=a+b; + if(this.a==a) + z0++; + else + odd=!odd; + } + // at the back + int z1=2; + int z2=3; + int z3=4; + // + static int z4=5; + int z5=5; +} diff --git a/regression/cbmc-java/covered1/test.desc b/regression/cbmc-java/covered1/test.desc new file mode 100644 index 00000000000..6f78ed37e63 --- /dev/null +++ b/regression/cbmc-java/covered1/test.desc @@ -0,0 +1,18 @@ +CORE +covered1.class +--cover location --json-ui --show-properties +^EXIT=0$ +^SIGNAL=0$ +.*\"coveredLines\": \"22\",$ +.*\"coveredLines\": \"4,6,7,23-25,31-33,36\",$ +.*\"coveredLines\": \"26\",$ +.*\"coveredLines\": \"28\",$ +.*\"coveredLines\": \"28\",$ +.*\"coveredLines\": \"28\",$ +.*\"coveredLines\": \"28\",$ +.*\"coveredLines\": \"29\",$ +.*\"coveredLines\": \"18\",$ +.*\"coveredLines\": \"18\",$ +.*\"coveredLines\": \"35\",$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/enum1/test.desc b/regression/cbmc-java/enum1/test.desc index d9ca7a162db..eff2c2e6817 100644 --- a/regression/cbmc-java/enum1/test.desc +++ b/regression/cbmc-java/enum1/test.desc @@ -1,8 +1,9 @@ CORE enum1.class --java-unwind-enum-static --unwind 3 -^EXIT=10$ +^VERIFICATION SUCCESSFUL$ +^EXIT=0$ ^SIGNAL=0$ -^Unwinding loop java::enum1.:\(\)V.0 iteration 5 \(6 max\) file enum1.java line 6 function java::enum1.:\(\)V bytecode_index 78 thread 0$ +^Unwinding loop java::enum1.:\(\)V.0 iteration 5 \(6 max\) file enum1.java line 6 function java::enum1.:\(\)V bytecode-index 78 thread 0$ -- ^warning: ignoring diff --git a/regression/cbmc-java/exceptions19/exception_handler.class b/regression/cbmc-java/exceptions19/exception_handler.class new file mode 100644 index 00000000000..39457a93971 Binary files /dev/null and b/regression/cbmc-java/exceptions19/exception_handler.class differ diff --git a/regression/cbmc-java/exceptions19/exception_handler.j b/regression/cbmc-java/exceptions19/exception_handler.j new file mode 100644 index 00000000000..04b3c177689 --- /dev/null +++ b/regression/cbmc-java/exceptions19/exception_handler.j @@ -0,0 +1,25 @@ +.class exception_handler +.super java/lang/Object + +.method public ()V + aload_0 + invokevirtual java/lang/Object/()V + return +.end method + +.method public f()V + .limit stack 4 + .limit locals 4 + + begin: + new java/lang/Exception + dup + invokespecial java/lang/Exception.()V + athrow + start: + dup + end: + astore_1 + return +.catch all from begin to end using start +.end method diff --git a/regression/cbmc-java/exceptions19/test.desc b/regression/cbmc-java/exceptions19/test.desc new file mode 100644 index 00000000000..ed4bf5a2715 --- /dev/null +++ b/regression/cbmc-java/exceptions19/test.desc @@ -0,0 +1,8 @@ +CORE +exception_handler.class +--function exception_handler.f +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/exceptions20/A.class b/regression/cbmc-java/exceptions20/A.class new file mode 100644 index 00000000000..eb19ef6be2b Binary files /dev/null and b/regression/cbmc-java/exceptions20/A.class differ diff --git a/regression/cbmc-java/exceptions20/B.class b/regression/cbmc-java/exceptions20/B.class new file mode 100644 index 00000000000..47ae8f218e4 Binary files /dev/null and b/regression/cbmc-java/exceptions20/B.class differ diff --git a/regression/cbmc-java/exceptions20/C.class b/regression/cbmc-java/exceptions20/C.class new file mode 100644 index 00000000000..0c9779a4c2b Binary files /dev/null and b/regression/cbmc-java/exceptions20/C.class differ diff --git a/regression/cbmc-java/exceptions20/D.class b/regression/cbmc-java/exceptions20/D.class new file mode 100644 index 00000000000..12179e84294 Binary files /dev/null and b/regression/cbmc-java/exceptions20/D.class differ diff --git a/regression/cbmc-java/exceptions20/test.class b/regression/cbmc-java/exceptions20/test.class new file mode 100644 index 00000000000..c76687b1bc7 Binary files /dev/null and b/regression/cbmc-java/exceptions20/test.class differ diff --git a/regression/cbmc-java/exceptions20/test.desc b/regression/cbmc-java/exceptions20/test.desc new file mode 100644 index 00000000000..72829197eb8 --- /dev/null +++ b/regression/cbmc-java/exceptions20/test.desc @@ -0,0 +1,11 @@ +CORE +test.class +--json-ui --trace +^EXIT=10$ +^SIGNAL=0$ +.*VERIFICATION FAILED.* +-- +^warning: ignoring +-- +this fails with assertion error if nil values are not allowed in assignments in +the JSON trace diff --git a/regression/cbmc-java/exceptions20/test.java b/regression/cbmc-java/exceptions20/test.java new file mode 100644 index 00000000000..bc925b32d65 --- /dev/null +++ b/regression/cbmc-java/exceptions20/test.java @@ -0,0 +1,30 @@ +class A extends Throwable {} +class B extends A {} +class C extends B {} +class D extends C {} + +public class test { + public static void main (String arg[]) { + try { + D d = new D(); + C c = new C(); + B b = new B(); + A a = new A(); + A e = a; + throw e; + } + catch(D exc) { + assert false; + } + catch(C exc) { + assert false; + } + catch(B exc) { + assert false; + } + catch(A exc) { + assert false; + } + } +} + diff --git a/regression/cbmc-java/exceptions21/test.class b/regression/cbmc-java/exceptions21/test.class new file mode 100644 index 00000000000..52c93d2bc4a Binary files /dev/null and b/regression/cbmc-java/exceptions21/test.class differ diff --git a/regression/cbmc-java/exceptions21/test.desc b/regression/cbmc-java/exceptions21/test.desc new file mode 100644 index 00000000000..24040e046e4 --- /dev/null +++ b/regression/cbmc-java/exceptions21/test.desc @@ -0,0 +1,11 @@ +CORE +test.class +--function test.f --java-throw-runtime-exceptions +^EXIT=0$ +^SIGNAL=0$ +VERIFICATION SUCCESSFUL +-- +reference is null in .*: FAILURE +-- +This checks that the second use of a particular exception type in a given function is correctly initialised. +In the failing case the #exception_value variable is nondet at the time it is thrown, so cbmc can set it to null and fail an assertion. diff --git a/regression/cbmc-java/exceptions21/test.java b/regression/cbmc-java/exceptions21/test.java new file mode 100644 index 00000000000..bc4c5570cc1 --- /dev/null +++ b/regression/cbmc-java/exceptions21/test.java @@ -0,0 +1,24 @@ +public class test { + + int field; + + public static void f() { + + test testinstance = new test(); + test testnull = null; + int x = 0; + try { + x = testinstance.field; + } + catch(NullPointerException e) { + x++; + } + try { + x = testnull.field; + } + catch(NullPointerException e) { + x++; + } + } + +} diff --git a/regression/cbmc-java/exceptions22/test.class b/regression/cbmc-java/exceptions22/test.class new file mode 100644 index 00000000000..38081aaa0f2 Binary files /dev/null and b/regression/cbmc-java/exceptions22/test.class differ diff --git a/regression/cbmc-java/exceptions22/test.desc b/regression/cbmc-java/exceptions22/test.desc new file mode 100644 index 00000000000..a3eaa698597 --- /dev/null +++ b/regression/cbmc-java/exceptions22/test.desc @@ -0,0 +1,11 @@ +CORE +test.class + +^EXIT=0$ +^SIGNAL=0$ +VERIFICATION SUCCESSFUL +-- +^warning: ignoring +-- +This test checks that a thrown exception is caught, and is not erroneously rethrown +on function exit such that another surrounding try block can catch it again. diff --git a/regression/cbmc-java/exceptions22/test.java b/regression/cbmc-java/exceptions22/test.java new file mode 100644 index 00000000000..7ca29cddab9 --- /dev/null +++ b/regression/cbmc-java/exceptions22/test.java @@ -0,0 +1,20 @@ +public class test { + public static void main () { + try { + f(); + } + catch(Exception e) { + assert(false); // Should be unreachable + } + } + + public static void f() { + try { + throw new Exception(); + } + catch(Exception e) { + // Should prevent main's catch handler from being invoked + } + } +} + diff --git a/regression/cbmc-java/exceptions23/test.class b/regression/cbmc-java/exceptions23/test.class new file mode 100644 index 00000000000..acfbe7b2551 Binary files /dev/null and b/regression/cbmc-java/exceptions23/test.class differ diff --git a/regression/cbmc-java/exceptions23/test.desc b/regression/cbmc-java/exceptions23/test.desc new file mode 100644 index 00000000000..fd651101086 --- /dev/null +++ b/regression/cbmc-java/exceptions23/test.desc @@ -0,0 +1,12 @@ +CORE +test.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +VERIFICATION FAILED +assertion at file test\.java line 9 function java::test\.main:\(\)V bytecode-index 12: FAILURE +-- +^warning: ignoring +-- +This test checks that accessing an array member, cf. a getfield or setfield bytecode, +can produce a NullPointerException. diff --git a/regression/cbmc-java/exceptions23/test.java b/regression/cbmc-java/exceptions23/test.java new file mode 100644 index 00000000000..d50d7ac8356 --- /dev/null +++ b/regression/cbmc-java/exceptions23/test.java @@ -0,0 +1,12 @@ + +public class test { + public static void main () { + try { + int[] array = null; + int x = array[0]; + } + catch(NullPointerException e) { + assert false; + } + } +} diff --git a/regression/cbmc-java/exceptions24/A.class b/regression/cbmc-java/exceptions24/A.class new file mode 100644 index 00000000000..3c3c1f09997 Binary files /dev/null and b/regression/cbmc-java/exceptions24/A.class differ diff --git a/regression/cbmc-java/exceptions24/test.class b/regression/cbmc-java/exceptions24/test.class new file mode 100644 index 00000000000..7c9e70f9925 Binary files /dev/null and b/regression/cbmc-java/exceptions24/test.class differ diff --git a/regression/cbmc-java/exceptions24/test.desc b/regression/cbmc-java/exceptions24/test.desc new file mode 100644 index 00000000000..1bf09a500d5 --- /dev/null +++ b/regression/cbmc-java/exceptions24/test.desc @@ -0,0 +1,12 @@ +CORE +test.class +--java-throw-runtime-exceptions +^EXIT=10$ +^SIGNAL=0$ +VERIFICATION FAILED +assertion at file test\.java line 9 function java::test\.main:\(\)V bytecode-index 10: FAILURE +-- +^warning: ignoring +-- +This test ensures that attempting a virtual call against a null pointer can produce a NullPointerException, +even when there are no field accesses inside the method or inspection of its class identifier to trigger one. diff --git a/regression/cbmc-java/exceptions24/test.java b/regression/cbmc-java/exceptions24/test.java new file mode 100644 index 00000000000..9cefd50370a --- /dev/null +++ b/regression/cbmc-java/exceptions24/test.java @@ -0,0 +1,18 @@ + +public class test { + public static void main () { + try { + A a = null; + a.f(); + } + catch(NullPointerException e) { + assert false; + } + } +} + +class A { + + public void f() {} + +} diff --git a/regression/cbmc-java/external_getstatic1/test.class b/regression/cbmc-java/external_getstatic1/test.class new file mode 100644 index 00000000000..ec38ad69385 Binary files /dev/null and b/regression/cbmc-java/external_getstatic1/test.class differ diff --git a/regression/cbmc-java/external_getstatic1/test.desc b/regression/cbmc-java/external_getstatic1/test.desc new file mode 100644 index 00000000000..dc5ca4fa5cb --- /dev/null +++ b/regression/cbmc-java/external_getstatic1/test.desc @@ -0,0 +1,8 @@ +CORE +test.class + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/external_getstatic1/test.java b/regression/cbmc-java/external_getstatic1/test.java new file mode 100644 index 00000000000..5b3f3bdb9b2 --- /dev/null +++ b/regression/cbmc-java/external_getstatic1/test.java @@ -0,0 +1,16 @@ +class A +{ + public static A external_global; + public int i; +}; + +public class test +{ + public static void main() + { + if(A.external_global == null) + return; + A local = A.external_global; + assert(local instanceof A); + } +} diff --git a/regression/cbmc-java/finally1/test.class b/regression/cbmc-java/finally1/test.class new file mode 100644 index 00000000000..73e239d42e5 Binary files /dev/null and b/regression/cbmc-java/finally1/test.class differ diff --git a/regression/cbmc-java/finally1/test.desc b/regression/cbmc-java/finally1/test.desc new file mode 100644 index 00000000000..a5fb4996899 --- /dev/null +++ b/regression/cbmc-java/finally1/test.desc @@ -0,0 +1,9 @@ +CORE +test.class + +^EXIT=10$ +^SIGNAL=0$ +assertion at file test\.java line 7 function java::test\.main:\(\)V bytecode-index 9: FAILURE +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/finally1/test.java b/regression/cbmc-java/finally1/test.java new file mode 100644 index 00000000000..f1a964d83d3 --- /dev/null +++ b/regression/cbmc-java/finally1/test.java @@ -0,0 +1,11 @@ +public class test { + public static void main() throws Exception { + try { + throw new Exception(); + } + finally { + assert(false); + } + } +} + diff --git a/regression/cbmc-java/finally2/test.class b/regression/cbmc-java/finally2/test.class new file mode 100644 index 00000000000..a7e4c2e4c22 Binary files /dev/null and b/regression/cbmc-java/finally2/test.class differ diff --git a/regression/cbmc-java/finally2/test.desc b/regression/cbmc-java/finally2/test.desc new file mode 100644 index 00000000000..ae317e016fe --- /dev/null +++ b/regression/cbmc-java/finally2/test.desc @@ -0,0 +1,9 @@ +CORE +test.class + +^EXIT=10$ +^SIGNAL=0$ +assertion at file test\.java line 8 function java::test\.main:\(\)V bytecode-index 9: FAILURE +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/finally2/test.java b/regression/cbmc-java/finally2/test.java new file mode 100644 index 00000000000..548936094dc --- /dev/null +++ b/regression/cbmc-java/finally2/test.java @@ -0,0 +1,12 @@ +public class test { + public static void main() throws Exception { + try { + throw new Exception(); + } + catch(Exception e) { } + finally { + assert(false); + } + } +} + diff --git a/regression/cbmc-java/finally3/test.class b/regression/cbmc-java/finally3/test.class new file mode 100644 index 00000000000..e73e96ce4ad Binary files /dev/null and b/regression/cbmc-java/finally3/test.class differ diff --git a/regression/cbmc-java/finally3/test.desc b/regression/cbmc-java/finally3/test.desc new file mode 100644 index 00000000000..40c2fe0ab68 --- /dev/null +++ b/regression/cbmc-java/finally3/test.desc @@ -0,0 +1,10 @@ +CORE +test.class + +^EXIT=10$ +^SIGNAL=0$ +assertion at file test\.java line 7 function java::test\.main:\(\)V bytecode-index 9: SUCCESS +assertion at file test\.java line 10 function java::test\.main:\(\)V bytecode-index 22: FAILURE +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/finally3/test.java b/regression/cbmc-java/finally3/test.java new file mode 100644 index 00000000000..51d347c3327 --- /dev/null +++ b/regression/cbmc-java/finally3/test.java @@ -0,0 +1,14 @@ +public class test { + public static void main() throws Exception { + try { + throw new NullPointerException(); + } + catch(ArithmeticException e) { + assert(false); + } + finally { + assert(false); + } + } +} + diff --git a/regression/cbmc-java/finally4/test.class b/regression/cbmc-java/finally4/test.class new file mode 100644 index 00000000000..f7989f80e54 Binary files /dev/null and b/regression/cbmc-java/finally4/test.class differ diff --git a/regression/cbmc-java/finally4/test.desc b/regression/cbmc-java/finally4/test.desc new file mode 100644 index 00000000000..eeba95d006c --- /dev/null +++ b/regression/cbmc-java/finally4/test.desc @@ -0,0 +1,9 @@ +CORE +test.class + +^EXIT=10$ +^SIGNAL=0$ +assertion at file test\.java line 11 function java::test\.main:\(\)V bytecode-index 7: FAILURE +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/finally4/test.java b/regression/cbmc-java/finally4/test.java new file mode 100644 index 00000000000..4943a8d251d --- /dev/null +++ b/regression/cbmc-java/finally4/test.java @@ -0,0 +1,15 @@ +public class test { + public static void main() throws Exception { + try { + int x = 1; + x++; + } + catch(ArithmeticException e) { + assert(false); + } + finally { + assert(false); + } + } +} + diff --git a/regression/cbmc-java/finally5/test.class b/regression/cbmc-java/finally5/test.class new file mode 100644 index 00000000000..0bde735c6af Binary files /dev/null and b/regression/cbmc-java/finally5/test.class differ diff --git a/regression/cbmc-java/finally5/test.desc b/regression/cbmc-java/finally5/test.desc new file mode 100644 index 00000000000..cc3b6780920 --- /dev/null +++ b/regression/cbmc-java/finally5/test.desc @@ -0,0 +1,9 @@ +CORE +test.class + +^EXIT=10$ +^SIGNAL=0$ +assertion at file test\.java line 7 function java::test\.main:\(\)V bytecode-index 12: FAILURE +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/finally5/test.java b/regression/cbmc-java/finally5/test.java new file mode 100644 index 00000000000..3411b175943 --- /dev/null +++ b/regression/cbmc-java/finally5/test.java @@ -0,0 +1,15 @@ +public class test { + public static void main() throws Exception { + try { + f(); + } + finally { + assert(false); + } + } + + public static void f() throws Exception { + throw new Exception(); + } +} + diff --git a/regression/cbmc-java/finally6/test.class b/regression/cbmc-java/finally6/test.class new file mode 100644 index 00000000000..5f4d1321761 Binary files /dev/null and b/regression/cbmc-java/finally6/test.class differ diff --git a/regression/cbmc-java/finally6/test.desc b/regression/cbmc-java/finally6/test.desc new file mode 100644 index 00000000000..91aca5d1b77 --- /dev/null +++ b/regression/cbmc-java/finally6/test.desc @@ -0,0 +1,9 @@ +CORE +test.class + +^EXIT=10$ +^SIGNAL=0$ +assertion at file test\.java line 8 function java::test\.main:\(\)V bytecode-index 12: FAILURE +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/finally6/test.java b/regression/cbmc-java/finally6/test.java new file mode 100644 index 00000000000..e7c328bdf56 --- /dev/null +++ b/regression/cbmc-java/finally6/test.java @@ -0,0 +1,16 @@ +public class test { + public static void main() throws Exception { + try { + f(); + } + catch(Exception e) { } + finally { + assert(false); + } + } + + public static void f() throws Exception { + throw new Exception(); + } +} + diff --git a/regression/cbmc-java/finally7/test.class b/regression/cbmc-java/finally7/test.class new file mode 100644 index 00000000000..94bdd643637 Binary files /dev/null and b/regression/cbmc-java/finally7/test.class differ diff --git a/regression/cbmc-java/finally7/test.desc b/regression/cbmc-java/finally7/test.desc new file mode 100644 index 00000000000..5772f2dea33 --- /dev/null +++ b/regression/cbmc-java/finally7/test.desc @@ -0,0 +1,10 @@ +CORE +test.class + +^EXIT=10$ +^SIGNAL=0$ +assertion at file test\.java line 7 function java::test\.main:\(\)V bytecode-index 12: SUCCESS +assertion at file test\.java line 10 function java::test\.main:\(\)V bytecode-index 25: FAILURE +^VERIFICATION FAILED$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/finally7/test.java b/regression/cbmc-java/finally7/test.java new file mode 100644 index 00000000000..b9e8e16380e --- /dev/null +++ b/regression/cbmc-java/finally7/test.java @@ -0,0 +1,18 @@ +public class test { + public static void main() throws Exception { + try { + f(); + } + catch(ArithmeticException e) { + assert(false); + } + finally { + assert(false); + } + } + + public static void f() throws NullPointerException { + throw new NullPointerException(); + } +} + diff --git a/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Item.class b/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Item.class new file mode 100644 index 00000000000..bf9694b3f36 Binary files /dev/null and b/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Item.class differ diff --git a/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Item.java b/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Item.java new file mode 100644 index 00000000000..6e04c6f345a --- /dev/null +++ b/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Item.java @@ -0,0 +1,5 @@ +package com.diffblue.javatest.nestedobjects.subpackage; + +public class Item { + public int cost; +} diff --git a/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Order.class b/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Order.class new file mode 100644 index 00000000000..9c810453dec Binary files /dev/null and b/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Order.class differ diff --git a/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Order.java b/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Order.java new file mode 100644 index 00000000000..012c3c7a355 --- /dev/null +++ b/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/Order.java @@ -0,0 +1,25 @@ +package com.diffblue.javatest.nestedobjects.subpackage; + +public class Order { + public Item item; + + /** + * Checks if this order has an item. + */ + public boolean hasItem() { + if (item == null) { + return false; + } else { + return true; + } + } + + /** + * Sets the item for this order. + */ + public boolean setItem(Item item) { + boolean exists = hasItem(); + this.item = item; + return exists; + } +} diff --git a/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/readme.txt b/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/readme.txt new file mode 100644 index 00000000000..2a237709812 --- /dev/null +++ b/regression/cbmc-java/internal1/com/diffblue/javatest/nestedobjects/subpackage/readme.txt @@ -0,0 +1,2 @@ +Source of benchmark: +https://github.com/DiffBlue-benchmarks/java-test \ No newline at end of file diff --git a/regression/cbmc-java/internal1/test.desc b/regression/cbmc-java/internal1/test.desc new file mode 100644 index 00000000000..09047367ca9 --- /dev/null +++ b/regression/cbmc-java/internal1/test.desc @@ -0,0 +1,13 @@ +CORE +com/diffblue/javatest/nestedobjects/subpackage/Order.class +--json-ui --function 'com.diffblue.javatest.nestedobjects.subpackage.Order.setItem:(Lcom/diffblue/javatest/nestedobjects/subpackage/Item;)Z' --cover location --trace +activate-multi-line-match +EXIT=0 +SIGNAL=0 +"identifier": "__CPROVER_initialize",\n *"sourceLocation": [{][}]\n *[}],\n *"hidden": false,\n *"internal": true,\n *"stepType": "function-call", +"internal": true,\n *"lhs": "tmp_object_factory[$][0-9]+", +"internal": false,\n *"sourceLocation": [{]\n *"file": "com/diffblue/javatest/nestedobjects/subpackage/Order.java",\n *"function": "java::com.diffblue.javatest.nestedobjects.subpackage.Order.setItem:[(]Lcom/diffblue/javatest/nestedobjects/subpackage/Item;[)]Z",\n *"line": "21"\n *[}],\n *"stepType": "function-call", +"internal": false,\n *"lhs": "this",\n *"mode": "java",\n *"sourceLocation": [{]\n *"file": "com/diffblue/javatest/nestedobjects/subpackage/Order.java",\n *"function": "java::com.diffblue.javatest.nestedobjects.subpackage.Order.setItem:[(]Lcom/diffblue/javatest/nestedobjects/subpackage/Item;[)]Z", +"internal": false,\n *"lhs": "item",\n *"mode": "java",\n *"sourceLocation": [{]\n *"file": "com/diffblue/javatest/nestedobjects/subpackage/Order.java",\n *"function": "java::com.diffblue.javatest.nestedobjects.subpackage.Order.setItem:[(]Lcom/diffblue/javatest/nestedobjects/subpackage/Item;[)]Z", +-- +^warning: ignoring diff --git a/regression/cbmc-java/json_trace1/Test.class b/regression/cbmc-java/json_trace1/Test.class new file mode 100644 index 00000000000..2f57ffa3c57 Binary files /dev/null and b/regression/cbmc-java/json_trace1/Test.class differ diff --git a/regression/cbmc-java/json_trace1/Test.java b/regression/cbmc-java/json_trace1/Test.java new file mode 100644 index 00000000000..79cb55bfdf9 --- /dev/null +++ b/regression/cbmc-java/json_trace1/Test.java @@ -0,0 +1,21 @@ +public class Test { + + byte main(byte[] a) { + if (a.length != 9) { + return -1; + } + + byte diff = 0; + for (byte i = 0; i < 9; i++) { + if (a[i] == 1) { + diff++; + } else if (a[i] == 2) { + diff--; + } else if (a[i] != 0) { + return -1; + } + } + + return -1; + } +} diff --git a/regression/cbmc-java/json_trace1/test.desc b/regression/cbmc-java/json_trace1/test.desc new file mode 100644 index 00000000000..c7596faa19d --- /dev/null +++ b/regression/cbmc-java/json_trace1/test.desc @@ -0,0 +1,7 @@ +CORE +Test.class +--cover location --trace --json-ui +^EXIT=0$ +^SIGNAL=0$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/json_trace2/Test.class b/regression/cbmc-java/json_trace2/Test.class new file mode 100644 index 00000000000..68771db843a Binary files /dev/null and b/regression/cbmc-java/json_trace2/Test.class differ diff --git a/regression/cbmc-java/json_trace2/Test.java b/regression/cbmc-java/json_trace2/Test.java new file mode 100644 index 00000000000..25608c219d3 --- /dev/null +++ b/regression/cbmc-java/json_trace2/Test.java @@ -0,0 +1,7 @@ +public class Test { + boolean test(Object x) { + if(x==null) + return false; + return true; + } +} diff --git a/regression/cbmc-java/json_trace2/test.desc b/regression/cbmc-java/json_trace2/test.desc new file mode 100644 index 00000000000..13d8774fb25 --- /dev/null +++ b/regression/cbmc-java/json_trace2/test.desc @@ -0,0 +1,10 @@ +CORE +Test.class +--cover location --trace --json-ui --function Test.test +activate-multi-line-match +EXIT=0 +SIGNAL=0 +"outputID": "return",\n *"sourceLocation": \{\n *"file": "Test\.java",\n *"function": "java::Test\.test:\(Ljava/lang/Object;\)Z",\n *"line": "3"\n *\},\n *"stepType": "output",\n *"thread": 0,\n *"values": \[\n *\{\n *"binary": "00000000",\n *"data": "false",\n *"name": "integer",\n *"type": "boolean",\n *"width": 8 +"inputID": "arg1a",\n *"internal": true,\n *"mode": "java",\n *"sourceLocation": \{\n *"file": "Test\.java",\n *"function": "java::Test\.test:\(Ljava/lang/Object;\)Z",\n *"line": "3"\n *\},\n *"stepType": "input",\n *"thread": 0,\n *"values": \[\n *\{\n *"data": "null",\n *"name": "pointer",\n *"type": "struct java\.lang\.Object \{ __CPROVER_string @class_identifier; boolean @lock; \} \*" +-- +^warning: ignoring diff --git a/regression/cbmc-java/json_trace3/Test.class b/regression/cbmc-java/json_trace3/Test.class new file mode 100644 index 00000000000..86426242aaa Binary files /dev/null and b/regression/cbmc-java/json_trace3/Test.class differ diff --git a/regression/cbmc-java/json_trace3/Test.java b/regression/cbmc-java/json_trace3/Test.java new file mode 100644 index 00000000000..02cc993c56e --- /dev/null +++ b/regression/cbmc-java/json_trace3/Test.java @@ -0,0 +1,9 @@ +public class Test { + public static void main(long[] a) { + if(a.length<3) + return; + for(int i=0; i symbol table AST +generation happens correctly. The generated .class file does not contain LVTs. diff --git a/regression/cbmc-java/method_parmeters2/method_parameters.class b/regression/cbmc-java/method_parmeters2/method_parameters.class new file mode 100644 index 00000000000..5f065c68585 Binary files /dev/null and b/regression/cbmc-java/method_parmeters2/method_parameters.class differ diff --git a/regression/cbmc-java/method_parmeters2/method_parameters.java b/regression/cbmc-java/method_parmeters2/method_parameters.java new file mode 100644 index 00000000000..10dfba1bbea --- /dev/null +++ b/regression/cbmc-java/method_parmeters2/method_parameters.java @@ -0,0 +1,129 @@ +class method_parameters +{ + void test1() + {} + + void test2(boolean b) + {} + + void test3(byte b) + {} + + void test3a(char c) + {} + + void test4(int i) + {} + + void test5(float f) + {} + + void test6(String s) + {} + + void test7(long l) + {} + + void test8(double l) + {} + + void test9(int i, long l) + { + int local = 123; + } + + void test10(double i, String s) + { + int local = 123; + } + + void test11(int a[][]) + {} + + double test12(double a[][], double d) + { + if (a.length < 1) return 0; + if (a[0].length < 1) return 0; + return d + a[0][0]; + } + + void test12a(double a[][][], int i, double d) + {} + + double test12b(double a[][], double d) + { + return 123.123; + } + + void test12c(double a[][][], double d) + { + } + + void test13(double d, int i, byte b, char c) + {} + + // Same as above but now static + + static void ttest1() + {} + + static void ttest2(boolean b) + {} + + static void ttest3(byte b) + {} + + static void ttest3a(char c) + {} + + static void ttest4(int i) + {} + + static void ttest5(float f) + {} + + static void ttest6(String s) + {} + + static void ttest7(long l) + {} + + static void ttest8(double l) + {} + + static void ttest9(int i, long l) + { + int local = 123; + } + + static void ttest10(double i, String s) + { + int local = 123; + } + + static void ttest11(int a[][]) + {} + + static double ttest12(double a[][], double d) + { + if (a.length < 1) return 0; + if (a[0].length < 1) return 0; + return d + a[0][0]; + } + + static void ttest12a(double a[][][], int i, double d) + {} + + static double ttest12b(double a[][], double d) + { + return 123.123; + } + + static void ttest12c(double a[][][], double d) + { + } + + static void ttest13(double d, int i, byte b, char c) + {} + +} diff --git a/regression/cbmc-java/method_parmeters2/test.desc b/regression/cbmc-java/method_parmeters2/test.desc new file mode 100644 index 00000000000..507e8d4ef11 --- /dev/null +++ b/regression/cbmc-java/method_parmeters2/test.desc @@ -0,0 +1,10 @@ +CORE +method_parameters.class +--verbosity 10 --show-symbol-table +^EXIT=0$ +^SIGNAL=0$ +-- +-- +The purpose of the test is ensuring that the bytecode -> symbol table AST +generation happens correctly. The generated .class file DOES contain LVTs, i.e., +it has been compiled with with "javac -g". diff --git a/regression/cbmc-java/putstatic_source_location/test.class b/regression/cbmc-java/putstatic_source_location/test.class new file mode 100644 index 00000000000..5507bc508cd Binary files /dev/null and b/regression/cbmc-java/putstatic_source_location/test.class differ diff --git a/regression/cbmc-java/putstatic_source_location/test.desc b/regression/cbmc-java/putstatic_source_location/test.desc new file mode 100644 index 00000000000..fdb85eb8ee7 --- /dev/null +++ b/regression/cbmc-java/putstatic_source_location/test.desc @@ -0,0 +1,6 @@ +CORE +test.class +--show-goto-functions +^EXIT=0$ +^SIGNAL=0$ +test\.java line 5 function java::test.main:\(\)V bytecode-index 1 diff --git a/regression/cbmc-java/putstatic_source_location/test.java b/regression/cbmc-java/putstatic_source_location/test.java new file mode 100644 index 00000000000..9f1b4f1ba06 --- /dev/null +++ b/regression/cbmc-java/putstatic_source_location/test.java @@ -0,0 +1,11 @@ +public class test { + + public static int x; + public static void main() { + x = 1; + } + static { + x = 0; + } + +} diff --git a/regression/cbmc-java/siblingobjects1/Other.class b/regression/cbmc-java/siblingobjects1/Other.class new file mode 100644 index 00000000000..32b9ecbde03 Binary files /dev/null and b/regression/cbmc-java/siblingobjects1/Other.class differ diff --git a/regression/cbmc-java/siblingobjects1/test.class b/regression/cbmc-java/siblingobjects1/test.class new file mode 100644 index 00000000000..587eaab4feb Binary files /dev/null and b/regression/cbmc-java/siblingobjects1/test.class differ diff --git a/regression/cbmc-java/siblingobjects1/test.desc b/regression/cbmc-java/siblingobjects1/test.desc new file mode 100644 index 00000000000..fd32dd3f006 --- /dev/null +++ b/regression/cbmc-java/siblingobjects1/test.desc @@ -0,0 +1,8 @@ +CORE +test.class +--function test.main +^EXIT=10$ +^SIGNAL=0$ +VERIFICATION FAILED +assertion at file test\.java line 10 .* FAILURE +-- diff --git a/regression/cbmc-java/siblingobjects1/test.java b/regression/cbmc-java/siblingobjects1/test.java new file mode 100644 index 00000000000..385f501d8f7 --- /dev/null +++ b/regression/cbmc-java/siblingobjects1/test.java @@ -0,0 +1,17 @@ + +public class test { + + public Other o1; + public Other o2; + + public void main() { + if(o1 == null || o2 == null) + return; + assert(false); + } + +} + +class Other { + int x; +} diff --git a/regression/cbmc-java/siblingobjects2/Other.class b/regression/cbmc-java/siblingobjects2/Other.class new file mode 100644 index 00000000000..e3b5e79fb89 Binary files /dev/null and b/regression/cbmc-java/siblingobjects2/Other.class differ diff --git a/regression/cbmc-java/siblingobjects2/test.class b/regression/cbmc-java/siblingobjects2/test.class new file mode 100644 index 00000000000..3f769495c3a Binary files /dev/null and b/regression/cbmc-java/siblingobjects2/test.class differ diff --git a/regression/cbmc-java/siblingobjects2/test.desc b/regression/cbmc-java/siblingobjects2/test.desc new file mode 100644 index 00000000000..a6eefe5c7e5 --- /dev/null +++ b/regression/cbmc-java/siblingobjects2/test.desc @@ -0,0 +1,9 @@ +CORE +test.class +--function test.main +^EXIT=10$ +^SIGNAL=0$ +VERIFICATION FAILED +assertion at file test.java line 23 function java::test\.toplevel_pointers_not_null.*: FAILURE +assertion at file test.java line 18 function java::test\.next_pointers_not_null.*: FAILURE +-- diff --git a/regression/cbmc-java/siblingobjects2/test.java b/regression/cbmc-java/siblingobjects2/test.java new file mode 100644 index 00000000000..b48802655b5 --- /dev/null +++ b/regression/cbmc-java/siblingobjects2/test.java @@ -0,0 +1,31 @@ + +public class test { + + public Other o1; + public Other o2; + + public void main() { + if(o1 != null && o2 != null) { + if(o1.next != null && o2.next != null) { + next_pointers_not_null(); + } + toplevel_pointers_not_null(); + } + } + + public void next_pointers_not_null() { + // Should be possible to hit with --java-max-input-tree-depth >= 2 + assert(false); + } + + public void toplevel_pointers_not_null() { + // Should be possible to hit + assert(false); + } + +} + +class Other { + int x; + Other next; +} diff --git a/regression/cbmc-java/stack_var4/test.desc b/regression/cbmc-java/stack_var4/test.desc index 805e44acccd..0f67b9755d8 100644 --- a/regression/cbmc-java/stack_var4/test.desc +++ b/regression/cbmc-java/stack_var4/test.desc @@ -3,8 +3,6 @@ stack_test.class ^EXIT=0$ ^SIGNAL=0$ -^.*assertion at file stack_test.java line 5 function.*: SUCCESS -$ ^VERIFICATION SUCCESSFUL$ -- ^warning: ignoring diff --git a/regression/cbmc-java/stack_var5/test.desc b/regression/cbmc-java/stack_var5/test.desc index 805e44acccd..0f67b9755d8 100644 --- a/regression/cbmc-java/stack_var5/test.desc +++ b/regression/cbmc-java/stack_var5/test.desc @@ -3,8 +3,6 @@ stack_test.class ^EXIT=0$ ^SIGNAL=0$ -^.*assertion at file stack_test.java line 5 function.*: SUCCESS -$ ^VERIFICATION SUCCESSFUL$ -- ^warning: ignoring diff --git a/regression/cbmc-java/stack_var6/test.desc b/regression/cbmc-java/stack_var6/test.desc index 805e44acccd..0f67b9755d8 100644 --- a/regression/cbmc-java/stack_var6/test.desc +++ b/regression/cbmc-java/stack_var6/test.desc @@ -3,8 +3,6 @@ stack_test.class ^EXIT=0$ ^SIGNAL=0$ -^.*assertion at file stack_test.java line 5 function.*: SUCCESS -$ ^VERIFICATION SUCCESSFUL$ -- ^warning: ignoring diff --git a/regression/cbmc-java/stack_var7/test.desc b/regression/cbmc-java/stack_var7/test.desc index 805e44acccd..0f67b9755d8 100644 --- a/regression/cbmc-java/stack_var7/test.desc +++ b/regression/cbmc-java/stack_var7/test.desc @@ -3,8 +3,6 @@ stack_test.class ^EXIT=0$ ^SIGNAL=0$ -^.*assertion at file stack_test.java line 5 function.*: SUCCESS -$ ^VERIFICATION SUCCESSFUL$ -- ^warning: ignoring diff --git a/regression/cbmc-java/static_init1/A.class b/regression/cbmc-java/static_init1/A.class new file mode 100644 index 00000000000..cc4eabe9772 Binary files /dev/null and b/regression/cbmc-java/static_init1/A.class differ diff --git a/regression/cbmc-java/static_init1/B.class b/regression/cbmc-java/static_init1/B.class new file mode 100644 index 00000000000..448af921050 Binary files /dev/null and b/regression/cbmc-java/static_init1/B.class differ diff --git a/regression/cbmc-java/static_init1/static_init.class b/regression/cbmc-java/static_init1/static_init.class new file mode 100644 index 00000000000..92cc80f9170 Binary files /dev/null and b/regression/cbmc-java/static_init1/static_init.class differ diff --git a/regression/cbmc-java/static_init1/static_init.java b/regression/cbmc-java/static_init1/static_init.java new file mode 100644 index 00000000000..778b6926fcc --- /dev/null +++ b/regression/cbmc-java/static_init1/static_init.java @@ -0,0 +1,32 @@ +public class static_init { + + // A should be initialised first, then B will begin init + // after A.x is set. + public static void main() { + assert(A.x == 1 && B.x == 1 && B.y == 2 && A.y == 2); + } + +} + +class A { + + public static int x; + public static int y; + static { + x = 1; + y = B.y; + } + +} + +class B { + + public static int x; + public static int y; + static { + x = A.x; + y = 2; + + } + +} diff --git a/regression/cbmc-java/static_init1/test.desc b/regression/cbmc-java/static_init1/test.desc new file mode 100644 index 00000000000..30868289dae --- /dev/null +++ b/regression/cbmc-java/static_init1/test.desc @@ -0,0 +1,8 @@ +CORE +static_init.class + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/static_init2/A.class b/regression/cbmc-java/static_init2/A.class new file mode 100644 index 00000000000..cc4eabe9772 Binary files /dev/null and b/regression/cbmc-java/static_init2/A.class differ diff --git a/regression/cbmc-java/static_init2/B.class b/regression/cbmc-java/static_init2/B.class new file mode 100644 index 00000000000..448af921050 Binary files /dev/null and b/regression/cbmc-java/static_init2/B.class differ diff --git a/regression/cbmc-java/static_init2/static_init.class b/regression/cbmc-java/static_init2/static_init.class new file mode 100644 index 00000000000..6a0da38e029 Binary files /dev/null and b/regression/cbmc-java/static_init2/static_init.class differ diff --git a/regression/cbmc-java/static_init2/static_init.java b/regression/cbmc-java/static_init2/static_init.java new file mode 100644 index 00000000000..b0ec59c314e --- /dev/null +++ b/regression/cbmc-java/static_init2/static_init.java @@ -0,0 +1,32 @@ +public class static_init { + + // B will begin init first, but then begin A init before it + // has set B.y, leading to the unintuitive result given here. + public static void main() { + assert(B.x == 1 && B.y == 2 && A.x == 1 && A.y == 0); + } + +} + +class A { + + public static int x; + public static int y; + static { + x = 1; + y = B.y; + } + +} + +class B { + + public static int x; + public static int y; + static { + x = A.x; + y = 2; + + } + +} diff --git a/regression/cbmc-java/static_init2/test.desc b/regression/cbmc-java/static_init2/test.desc new file mode 100644 index 00000000000..30868289dae --- /dev/null +++ b/regression/cbmc-java/static_init2/test.desc @@ -0,0 +1,8 @@ +CORE +static_init.class + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/swap1/Swap.class b/regression/cbmc-java/swap1/Swap.class new file mode 100644 index 00000000000..9b070cbb7ad Binary files /dev/null and b/regression/cbmc-java/swap1/Swap.class differ diff --git a/regression/cbmc-java/swap1/Swap.java b/regression/cbmc-java/swap1/Swap.java new file mode 100644 index 00000000000..3b6c100e15e --- /dev/null +++ b/regression/cbmc-java/swap1/Swap.java @@ -0,0 +1,7 @@ +public class Swap { + public static void main(String[] args) { + int x = 5; + int result = x - 2; + assert result == -3; + } +} diff --git a/regression/cbmc-java/swap1/SwapDump.java b/regression/cbmc-java/swap1/SwapDump.java new file mode 100644 index 00000000000..52503eaec99 --- /dev/null +++ b/regression/cbmc-java/swap1/SwapDump.java @@ -0,0 +1,108 @@ +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.objectweb.asm.*; +public class SwapDump implements Opcodes { + +public static byte[] dump () throws Exception { + +ClassWriter cw = new ClassWriter(0); +FieldVisitor fv; +MethodVisitor mv; + +cw.visit(52, ACC_PUBLIC + ACC_SUPER, "Swap", null, "java/lang/Object", null); + +cw.visitSource("Swap.java", null); + +{ +fv = cw.visitField(ACC_FINAL + ACC_STATIC + ACC_SYNTHETIC, "$assertionsDisabled", "Z", null, null); +fv.visitEnd(); +} +{ +mv = cw.visitMethod(ACC_STATIC, "", "()V", null, null); +mv.visitCode(); +Label l0 = new Label(); +mv.visitLabel(l0); +mv.visitLineNumber(1, l0); +mv.visitLdcInsn(Type.getType("LSwap;")); +mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "desiredAssertionStatus", "()Z", false); +Label l1 = new Label(); +mv.visitJumpInsn(IFNE, l1); +mv.visitInsn(ICONST_1); +Label l2 = new Label(); +mv.visitJumpInsn(GOTO, l2); +mv.visitLabel(l1); +mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null); +mv.visitInsn(ICONST_0); +mv.visitLabel(l2); +mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {Opcodes.INTEGER}); +mv.visitFieldInsn(PUTSTATIC, "Swap", "$assertionsDisabled", "Z"); +mv.visitInsn(RETURN); +mv.visitMaxs(1, 0); +mv.visitEnd(); +} +{ +mv = cw.visitMethod(ACC_PUBLIC, "", "()V", null, null); +mv.visitCode(); +Label l0 = new Label(); +mv.visitLabel(l0); +mv.visitLineNumber(1, l0); +mv.visitVarInsn(ALOAD, 0); +mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "", "()V", false); +mv.visitInsn(RETURN); +Label l1 = new Label(); +mv.visitLabel(l1); +mv.visitLocalVariable("this", "LSwap;", null, l0, l1, 0); +mv.visitMaxs(1, 1); +mv.visitEnd(); +} +{ +mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null); +mv.visitCode(); +Label l0 = new Label(); +mv.visitLabel(l0); +mv.visitLineNumber(3, l0); +mv.visitInsn(ICONST_5); +mv.visitVarInsn(ISTORE, 1); +Label l1 = new Label(); +mv.visitLabel(l1); +mv.visitLineNumber(4, l1); +mv.visitVarInsn(ILOAD, 1); +mv.visitInsn(ICONST_2); +mv.visitInsn(SWAP); // Manually added +mv.visitInsn(ISUB); +mv.visitVarInsn(ISTORE, 2); +Label l2 = new Label(); +mv.visitLabel(l2); +mv.visitLineNumber(5, l2); +mv.visitFieldInsn(GETSTATIC, "Swap", "$assertionsDisabled", "Z"); +Label l3 = new Label(); +mv.visitJumpInsn(IFNE, l3); +mv.visitVarInsn(ILOAD, 2); +mv.visitIntInsn(BIPUSH, -3); +mv.visitJumpInsn(IF_ICMPEQ, l3); +mv.visitTypeInsn(NEW, "java/lang/AssertionError"); +mv.visitInsn(DUP); +mv.visitMethodInsn(INVOKESPECIAL, "java/lang/AssertionError", "", "()V", false); +mv.visitInsn(ATHROW); +mv.visitLabel(l3); +mv.visitLineNumber(6, l3); +mv.visitFrame(Opcodes.F_APPEND,2, new Object[] {Opcodes.INTEGER, Opcodes.INTEGER}, 0, null); +mv.visitInsn(RETURN); +Label l4 = new Label(); +mv.visitLabel(l4); +mv.visitLocalVariable("args", "[Ljava/lang/String;", null, l0, l4, 0); +mv.visitLocalVariable("x", "I", null, l1, l4, 1); +mv.visitLocalVariable("result", "I", null, l2, l4, 2); +mv.visitMaxs(2, 3); +mv.visitEnd(); +} +cw.visitEnd(); + +return cw.toByteArray(); +} + +public static void main(String[] args) throws Exception { + Files.write(Paths.get("Swap.class"), dump()); +} +} diff --git a/regression/cbmc-java/swap1/test.desc b/regression/cbmc-java/swap1/test.desc new file mode 100644 index 00000000000..8f803004f29 --- /dev/null +++ b/regression/cbmc-java/swap1/test.desc @@ -0,0 +1,8 @@ +CORE +Swap.class + +^EXIT=0 +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/swap2/org/springframework/build/gradle/MergePlugin$1$_execute_closure1$_closure2.class b/regression/cbmc-java/swap2/org/springframework/build/gradle/MergePlugin$1$_execute_closure1$_closure2.class new file mode 100644 index 00000000000..a31f9a0bba4 Binary files /dev/null and b/regression/cbmc-java/swap2/org/springframework/build/gradle/MergePlugin$1$_execute_closure1$_closure2.class differ diff --git a/regression/cbmc-java/swap2/org/springframework/build/gradle/MergePlugin.groovy b/regression/cbmc-java/swap2/org/springframework/build/gradle/MergePlugin.groovy new file mode 100644 index 00000000000..6af1cf3b80c --- /dev/null +++ b/regression/cbmc-java/swap2/org/springframework/build/gradle/MergePlugin.groovy @@ -0,0 +1,177 @@ +/* + * Copyright 2002-2015 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.build.gradle + +import org.gradle.api.* +import org.gradle.api.artifacts.Configuration +import org.gradle.api.artifacts.ProjectDependency; +import org.gradle.api.artifacts.maven.Conf2ScopeMapping +import org.gradle.api.plugins.MavenPlugin +import org.gradle.plugins.ide.eclipse.EclipsePlugin +import org.gradle.plugins.ide.idea.IdeaPlugin +import org.gradle.api.invocation.* + +/** + * Gradle plugin that allows projects to merged together. Primarily developed to + * allow Spring to support multiple incompatible versions of third-party + * dependencies (for example Hibernate v3 and v4). + *

+ * The 'merge' extension should be used to define how projects are merged, for example: + *

+ * configure(subprojects) {
+ *     apply plugin: MergePlugin
+ * }
+ *
+ * project("myproject") {
+ * }
+ *
+ * project("myproject-extra") {
+ *     merge.into = project("myproject")
+ * }
+ * 
+ *

+ * This plugin adds two new configurations: + *

    + *
  • merging - Contains the projects being merged into this project
  • + *
  • runtimeMerge - Contains all dependencies that are merge projects. These are used + * to allow an IDE to reference merge projects.
  • + *
      + * + * @author Rob Winch + * @author Phillip Webb + */ +class MergePlugin implements Plugin { + + private static boolean attachedProjectsEvaluated; + + public void apply(Project project) { + project.plugins.apply(MavenPlugin) + project.plugins.apply(EclipsePlugin) + project.plugins.apply(IdeaPlugin) + + MergeModel model = project.extensions.create("merge", MergeModel) + model.project = project + project.configurations.create("merging") + Configuration runtimeMerge = project.configurations.create("runtimeMerge") + + // Ensure the IDE can reference merged projects + project.eclipse.classpath.plusConfigurations += [ runtimeMerge ] + project.idea.module.scopes.PROVIDED.plus += [ runtimeMerge ] + + // Hook to perform the actual merge logic + project.afterEvaluate{ + if (it.merge.into != null) { + setup(it) + } + setupIdeDependencies(it) + } + + // Hook to build runtimeMerge dependencies + if (!attachedProjectsEvaluated) { + project.gradle.projectsEvaluated{ + postProcessProjects(it) + } + attachedProjectsEvaluated = true; + } + } + + private void setup(Project project) { + project.merge.into.dependencies.add("merging", project) + project.dependencies.add("provided", project.merge.into.sourceSets.main.output) + project.dependencies.add("runtimeMerge", project.merge.into) + setupTaskDependencies(project) + setupMaven(project) + } + + private void setupTaskDependencies(Project project) { + // invoking a task will invoke the task with the same name on 'into' project + ["sourcesJar", "jar", "javadocJar", "javadoc", "install", "artifactoryPublish"].each { + def task = project.tasks.findByPath(it) + if (task) { + task.enabled = false + task.dependsOn(project.merge.into.tasks.findByPath(it)) + } + } + + // update 'into' project artifacts to contain the source artifact contents + project.merge.into.sourcesJar.from(project.sourcesJar.source) + project.merge.into.jar.from(project.sourceSets.main.output) + project.merge.into.javadoc { + source += project.javadoc.source + classpath += project.javadoc.classpath + } + } + + private void setupIdeDependencies(Project project) { + project.configurations.each { c -> + c.dependencies.findAll( { it instanceof org.gradle.api.artifacts.ProjectDependency } ).each { d -> + d.dependencyProject.merge.from.each { from -> + project.dependencies.add("runtimeMerge", from) + } + } + } + } + + private void setupMaven(Project project) { + project.configurations.each { configuration -> + Conf2ScopeMapping mapping = project.conf2ScopeMappings.getMapping([configuration]) + if (mapping.scope) { + Configuration intoConfiguration = project.merge.into.configurations.create( + project.name + "-" + configuration.name) + configuration.excludeRules.each { + configuration.exclude([ + (ExcludeRule.GROUP_KEY) : it.group, + (ExcludeRule.MODULE_KEY) : it.module]) + } + configuration.dependencies.each { + def intoCompile = project.merge.into.configurations.getByName("compile") + // Protect against changing a compile scope dependency (SPR-10218) + if (!intoCompile.dependencies.contains(it)) { + intoConfiguration.dependencies.add(it) + } + } + def index = project.parent.childProjects.findIndexOf {p -> p.getValue() == project} + project.merge.into.install.repositories.mavenInstaller.pom.scopeMappings.addMapping( + mapping.priority + 100 + index, intoConfiguration, mapping.scope) + } + } + } + + private postProcessProjects(Gradle gradle) { + gradle.allprojects(new Action() { + public void execute(Project project) { + project.configurations.getByName("runtime").allDependencies.withType(ProjectDependency).each{ + Configuration dependsOnMergedFrom = it.dependencyProject.configurations.getByName("merging"); + dependsOnMergedFrom.dependencies.each{ dep -> + project.dependencies.add("runtimeMerge", dep.dependencyProject) + } + } + } + }); + } +} + +class MergeModel { + Project project; + Project into; + List from = []; + + public void setInto(Project into) { + this.into = into; + into.merge.from.add(project); + } +} \ No newline at end of file diff --git a/regression/cbmc-java/swap2/test.desc b/regression/cbmc-java/swap2/test.desc new file mode 100644 index 00000000000..a7953d29a8b --- /dev/null +++ b/regression/cbmc-java/swap2/test.desc @@ -0,0 +1,8 @@ +CORE +org/springframework/build/gradle/MergePlugin$1$_execute_closure1$_closure2.class +--function "org.springframework.build.gradle.MergePlugin\$1\$_execute_closure1\$_closure2.\$getCallSiteArray:()[Lorg/codehaus/groovy/runtime/callsite/CallSite;" +^EXIT=0 +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/cbmc-java/synchronized/Sync.class b/regression/cbmc-java/synchronized/Sync.class new file mode 100644 index 00000000000..0c493d5eea9 Binary files /dev/null and b/regression/cbmc-java/synchronized/Sync.class differ diff --git a/regression/cbmc-java/synchronized/Sync.java b/regression/cbmc-java/synchronized/Sync.java new file mode 100644 index 00000000000..2f8f91cc2ae --- /dev/null +++ b/regression/cbmc-java/synchronized/Sync.java @@ -0,0 +1,11 @@ +public class Sync { + public static void main(String[] args) { + final Object o = null; + try { + synchronized (o) {} + assert false; + } catch (NullPointerException e) { + return; + } + } +} diff --git a/regression/cbmc-java/synchronized/test.desc b/regression/cbmc-java/synchronized/test.desc new file mode 100644 index 00000000000..7155ff81375 --- /dev/null +++ b/regression/cbmc-java/synchronized/test.desc @@ -0,0 +1,10 @@ +KNOWNBUG +Sync.class + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring +-- +See #1236 for details of this test. diff --git a/regression/cbmc-java/virtual7/test.desc b/regression/cbmc-java/virtual7/test.desc index 2e196d82e8c..b35404ac657 100644 --- a/regression/cbmc-java/virtual7/test.desc +++ b/regression/cbmc-java/virtual7/test.desc @@ -3,9 +3,9 @@ test.class --show-goto-functions ^EXIT=0$ ^SIGNAL=0$ -IF "java::E".*THEN GOTO [67] -IF "java::B".*THEN GOTO [67] -IF "java::D".*THEN GOTO [67] -IF "java::C".*THEN GOTO [67] +IF "java::E".*THEN GOTO [12] +IF "java::B".*THEN GOTO [12] +IF "java::D".*THEN GOTO [12] +IF "java::C".*THEN GOTO [12] -- IF "java::A".*THEN GOTO diff --git a/regression/cbmc-java/virtual_function_unwinding/Inner.class b/regression/cbmc-java/virtual_function_unwinding/Inner.class new file mode 100644 index 00000000000..32974676994 Binary files /dev/null and b/regression/cbmc-java/virtual_function_unwinding/Inner.class differ diff --git a/regression/cbmc-java/virtual_function_unwinding/Interface.class b/regression/cbmc-java/virtual_function_unwinding/Interface.class new file mode 100644 index 00000000000..d05ac9d4a17 Binary files /dev/null and b/regression/cbmc-java/virtual_function_unwinding/Interface.class differ diff --git a/regression/cbmc-java/virtual_function_unwinding/Outer.class b/regression/cbmc-java/virtual_function_unwinding/Outer.class new file mode 100644 index 00000000000..a2e452ab1bf Binary files /dev/null and b/regression/cbmc-java/virtual_function_unwinding/Outer.class differ diff --git a/regression/cbmc-java/virtual_function_unwinding/Virtual.class b/regression/cbmc-java/virtual_function_unwinding/Virtual.class new file mode 100644 index 00000000000..3c960cfabd4 Binary files /dev/null and b/regression/cbmc-java/virtual_function_unwinding/Virtual.class differ diff --git a/regression/cbmc-java/virtual_function_unwinding/Virtual.java b/regression/cbmc-java/virtual_function_unwinding/Virtual.java new file mode 100644 index 00000000000..2fd37dac136 --- /dev/null +++ b/regression/cbmc-java/virtual_function_unwinding/Virtual.java @@ -0,0 +1,19 @@ +interface Interface { + boolean b(); +} + +class Inner implements Interface { + public boolean b() { return false; } +} + +class Outer implements Interface { + private Interface inner; + public Outer(Interface inner) { this.inner = inner; } + public boolean b() { return !inner.b(); } +} + +public class Virtual { + public static void main(String[] args) { + assert new Outer(new Inner()).b(); + } +} diff --git a/regression/cbmc-java/virtual_function_unwinding/test.desc b/regression/cbmc-java/virtual_function_unwinding/test.desc new file mode 100644 index 00000000000..b72e982ae9c --- /dev/null +++ b/regression/cbmc-java/virtual_function_unwinding/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +Virtual.class +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +-- +See diffblue/test-gen#845 for details diff --git a/regression/cbmc/address_space_size_limit1/test.desc b/regression/cbmc/address_space_size_limit1/test.desc index 9dcfb8970aa..d0d0ed3c04e 100644 --- a/regression/cbmc/address_space_size_limit1/test.desc +++ b/regression/cbmc/address_space_size_limit1/test.desc @@ -1,5 +1,5 @@ CORE test.c ---no-simplify --unwind 300 -too many variables +--no-simplify --unwind 300 --object-bits 8 +too many addressed objects -- diff --git a/regression/cbmc/address_space_size_limit2/test.c b/regression/cbmc/address_space_size_limit2/test.c new file mode 100644 index 00000000000..c35cc13da7f --- /dev/null +++ b/regression/cbmc/address_space_size_limit2/test.c @@ -0,0 +1,10 @@ +#include +#include + +int main(int argc, char** argv) +{ + char* c=(char*)malloc(10); + char* d=c; + for(char i=0; i<10; i++, d++); + assert((size_t)d==(size_t)c+10); +} diff --git a/regression/cbmc/address_space_size_limit2/test.desc b/regression/cbmc/address_space_size_limit2/test.desc new file mode 100644 index 00000000000..63d05de2268 --- /dev/null +++ b/regression/cbmc/address_space_size_limit2/test.desc @@ -0,0 +1,5 @@ +KNOWNBUG +test.c +--32 --object-bits 31 --unwind 11 --no-simplify +dynamic object too large +-- diff --git a/regression/cbmc/address_space_size_limit3/main.c b/regression/cbmc/address_space_size_limit3/main.c new file mode 100644 index 00000000000..6c62d538ee5 --- /dev/null +++ b/regression/cbmc/address_space_size_limit3/main.c @@ -0,0 +1,136 @@ +// copy of Pointer_Arithmetic12 + +#include + +#include + +uint32_t __stack[32]; + +uint32_t eax; +uint32_t ebp; +uint32_t ebx; +uint32_t ecx; +uint32_t edi; +uint32_t edx; +uint32_t esi; +uint32_t esp=(uint32_t)&(__stack[31]); +uint32_t var0; +uint32_t var1; +uint32_t var10; +uint32_t var11; +uint32_t var12; +uint32_t var13; +uint32_t var14; +uint32_t var15; +uint32_t var16; +uint32_t var2; +uint32_t var3; +uint32_t var4; +uint32_t var5; +uint32_t var6; +uint32_t var7; +uint32_t var8; +uint32_t var9; + +void g__L_0x3b4_0() +{ + L_0x3b4_0: esp-=0x4; + L_0x3b4_1: *(uint32_t*)(esp)=ebp; + L_0x3b5_0: ebp=esp; + L_0x3b7_0: var4=ebp; + L_0x3b7_1: var4+=0xc; + L_0x3b7_2: eax=*(uint32_t*)(var4); + L_0x3ba_0: edx=eax; + L_0x3bc_0: edx&=0x3; + L_0x3bf_0: var5=ebp; + L_0x3bf_1: var5+=0x8; + L_0x3bf_2: eax=*(uint32_t*)(var5); + L_0x3c2_0: *(uint32_t*)(eax)=edx; + L_0x3c4_0: ebp=*(uint32_t*)(esp); + L_0x3c4_1: esp+=0x4; + L_0x3c5_0: return; +} + +void f__L_0x3c6_0() +{ + L_0x3c6_0: esp-=0x4; + L_0x3c6_1: *(uint32_t*)(esp)=ebp; + L_0x3c7_0: ebp=esp; + L_0x3c9_0: esp-=0x18; + L_0x3cc_0: var6=ebp; + L_0x3cc_1: var6-=0x4; + L_0x3cc_2: *(uint32_t*)(var6)=0x0; + L_0x3d3_0: var7=ebp; + L_0x3d3_1: var7-=0x8; + L_0x3d3_2: *(uint32_t*)(var7)=0x0; + L_0x3da_0: var8=ebp; + L_0x3da_1: var8+=0x8; + L_0x3da_2: eax=*(uint32_t*)(var8); + L_0x3dd_0: var9=ebp; + L_0x3dd_1: var9-=0x4; + L_0x3dd_2: *(uint32_t*)(var9)=eax; + L_0x3e0_0: var10=ebp; + L_0x3e0_1: var10-=0x4; + L_0x3e0_2: eax=*(uint32_t*)(var10); + L_0x3e3_0: var11=esp; + L_0x3e3_1: var11+=0x4; + L_0x3e3_2: *(uint32_t*)(var11)=eax; + L_0x3e7_0: var12=ebp; + L_0x3e7_1: var12-=0x8; + L_0x3e7_2: eax=(uint32_t)&*(uint32_t*)(var12); + L_0x3ea_0: *(uint32_t*)(esp)=eax; + L_0x3ed_0: esp-=4; g__L_0x3b4_0(); esp+=4; + L_0x3f2_0: var13=ebp; + L_0x3f2_1: var13-=0x4; + L_0x3f2_2: *(uint32_t*)(var13)=0x5; + L_0x3f9_0: var14=ebp; + L_0x3f9_1: var14-=0x8; + L_0x3f9_2: eax=*(uint32_t*)(var14); + L_0x3fc_0: esp=ebp; + L_0x3fc_1: ebp=*(uint32_t*)(esp); + L_0x3fc_2: esp+=0x4; + L_0x3fd_0: return; +} + +int main() +{ + L_0x3fe_0: esp-=0x4; + L_0x3fe_1: *(uint32_t*)(esp)=ebp; + L_0x3ff_0: ebp=esp; + L_0x401_0: esp-=0x14; + L_0x404_0: var15=ebp; + L_0x404_1: var15-=0x4; +#ifdef NONDET + L_0x404_2: *(uint32_t*)(var15)=nondet_uint(); +#else + L_0x404_2: *(uint32_t*)(var15)=0xffffffff; +#endif + L_0x40b_0: var16=ebp; + L_0x40b_1: var16-=0x4; + L_0x40b_2: eax=*(uint32_t*)(var16); + L_0x40e_0: *(uint32_t*)(esp)=eax; + L_0x411_0: esp-=4; f__L_0x3c6_0(); esp+=4; +#if 1 + uint32_t eax1=eax; + C_0x3ff_0: ebp=esp; + C_0x401_0: esp-=0x14; + C_0x404_0: var15=ebp; + C_0x404_1: var15-=0x4; +#ifdef NONDET + C_0x404_2: *(uint32_t*)(var15)=nondet_uint(); +#else + C_0x404_2: *(uint32_t*)(var15)=0xffffffff; +#endif + C_0x40b_0: var16=ebp; + C_0x40b_1: var16-=0x4; + C_0x40b_2: eax=*(uint32_t*)(var16); + C_0x40e_0: *(uint32_t*)(esp)=eax; + C_0x411_0: esp-=4; f__L_0x3c6_0(); esp+=4; + uint32_t eax2=eax; + assert(eax2==eax1); +#endif + L_0x416_0: esp=ebp; + L_0x416_1: ebp=*(uint32_t*)(esp); + L_0x416_2: esp+=0x4; + L_0x417_0: return 0; +} diff --git a/regression/cbmc/address_space_size_limit3/test.desc b/regression/cbmc/address_space_size_limit3/test.desc new file mode 100644 index 00000000000..ee7b4e94ab8 --- /dev/null +++ b/regression/cbmc/address_space_size_limit3/test.desc @@ -0,0 +1,11 @@ +CORE +main.c +--32 --little-endian --object-bits 25 --pointer-check +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +^.* dereference failure: pointer outside object bounds in .*: FAILURE$ +-- +^warning: ignoring +-- +requires at least 8 offset bits diff --git a/regression/cbmc/bad_option/main.c b/regression/cbmc/bad_option/main.c new file mode 100644 index 00000000000..4cce7f667ff --- /dev/null +++ b/regression/cbmc/bad_option/main.c @@ -0,0 +1,3 @@ +int main() { + return 0; +} diff --git a/regression/cbmc/bad_option/test.desc b/regression/cbmc/bad_option/test.desc new file mode 100644 index 00000000000..c7f22f5b873 --- /dev/null +++ b/regression/cbmc/bad_option/test.desc @@ -0,0 +1,7 @@ +CORE +main.c +-foo +^EXIT=(64|1)$ +^SIGNAL=0$ +Unknown option: -foo +-- diff --git a/regression/cbmc/bad_option/test_multiple.desc b/regression/cbmc/bad_option/test_multiple.desc new file mode 100644 index 00000000000..30697b2267d --- /dev/null +++ b/regression/cbmc/bad_option/test_multiple.desc @@ -0,0 +1,7 @@ +CORE +main.c +--trace --foo --refine-strings +^EXIT=(64|1)$ +^SIGNAL=0$ +Unknown option: --foo +-- diff --git a/regression/cbmc/fgets1/test.desc b/regression/cbmc/fgets1/test.desc index 3a8c4e6a733..1551462c520 100644 --- a/regression/cbmc/fgets1/test.desc +++ b/regression/cbmc/fgets1/test.desc @@ -5,6 +5,6 @@ main.c ^SIGNAL=0$ ^VERIFICATION FAILED$ \[main.assertion.3\] assertion p\[1\]=='b': FAILURE -\*\* 1 of 38 failed \(2 iterations\) +\*\* 1 of \d+ failed \(2 iterations\) -- ^warning: ignoring diff --git a/regression/cbmc/trace_class_identifier/TestGenTest.class b/regression/cbmc/trace_class_identifier/TestGenTest.class new file mode 100644 index 00000000000..4238fc097d6 Binary files /dev/null and b/regression/cbmc/trace_class_identifier/TestGenTest.class differ diff --git a/regression/cbmc/trace_class_identifier/TestGenTest.java b/regression/cbmc/trace_class_identifier/TestGenTest.java new file mode 100644 index 00000000000..bfb5cdfeccc --- /dev/null +++ b/regression/cbmc/trace_class_identifier/TestGenTest.java @@ -0,0 +1,7 @@ +public class TestGenTest +{ + public void f() + { + int a = 4; + } +} diff --git a/regression/cbmc/trace_class_identifier/test.desc b/regression/cbmc/trace_class_identifier/test.desc new file mode 100644 index 00000000000..5514cd02ba0 --- /dev/null +++ b/regression/cbmc/trace_class_identifier/test.desc @@ -0,0 +1,8 @@ +CORE +TestGenTest.class +--function TestGenTest.f --trace --cover location --json-ui +"data": "java::TestGenTest",$ +^EXIT=0$ +^SIGNAL=0$ +-- +^warning: ignoring diff --git a/regression/cpp/pointer_to_member_conversion1/main.cpp b/regression/cpp/pointer_to_member_conversion1/main.cpp new file mode 100644 index 00000000000..06457da223e --- /dev/null +++ b/regression/cpp/pointer_to_member_conversion1/main.cpp @@ -0,0 +1,30 @@ +class B +{ +}; + +class D: public B +{ +public: + int x; +}; + +class E +{ +public: + int y; +}; + + +int main(int argc, char** argv) +{ + int B::* xptr=static_cast(&D::x); +#if 0 + B b; + b.*xptr; // undefined +#endif + + D d; + d.*xptr; // valid + + return 0; +} diff --git a/regression/cpp/pointer_to_member_conversion1/test.desc b/regression/cpp/pointer_to_member_conversion1/test.desc new file mode 100644 index 00000000000..7851737adc1 --- /dev/null +++ b/regression/cpp/pointer_to_member_conversion1/test.desc @@ -0,0 +1,10 @@ +KNOWNBUG +main.cpp + +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring +-- +should exercise cpp_typecheckt::standard_conversion_pointer_to_member, cpp/cpp_typecheck_conversion.cpp:610 once other bugs are fixed diff --git a/regression/cpp/pointer_to_member_conversion2/main.cpp b/regression/cpp/pointer_to_member_conversion2/main.cpp new file mode 100644 index 00000000000..c0f4ddf9df4 --- /dev/null +++ b/regression/cpp/pointer_to_member_conversion2/main.cpp @@ -0,0 +1,30 @@ +class B +{ +}; + +class D: public B +{ +public: + int x; +}; + +class E +{ +public: + int y; +}; + + +int main(int argc, char** argv) +{ + int B::* xptr=static_cast(&D::x); +#if 0 + B b; + b.*xptr; // undefined +#endif + + E e; + e.*xptr; // compiler error + + return 0; +} diff --git a/regression/cpp/pointer_to_member_conversion2/test.desc b/regression/cpp/pointer_to_member_conversion2/test.desc new file mode 100644 index 00000000000..57b8cb22426 --- /dev/null +++ b/regression/cpp/pointer_to_member_conversion2/test.desc @@ -0,0 +1,11 @@ +KNOWNBUG +main.cpp + +^EXIT=(64|1)$ +^SIGNAL=0$ +invalid implicit conversion +^CONVERSION ERROR$ +-- +^warning: ignoring +-- +should exercise cpp_typecheckt::standard_conversion_pointer_to_member, cpp/cpp_typecheck_conversion.cpp:610 once other bugs are fixed diff --git a/regression/invariants/Makefile b/regression/invariants/Makefile index b561a960830..96c4a9e8077 100644 --- a/regression/invariants/Makefile +++ b/regression/invariants/Makefile @@ -4,7 +4,8 @@ SRC = driver.cpp INCLUDES = -I ../../src -OBJ += ../../src/util/util$(LIBEXT) +OBJ += ../../src/big-int/big-int$(LIBEXT) \ + ../../src/util/util$(LIBEXT) include ../../src/config.inc include ../../src/common diff --git a/regression/invariants/driver.cpp b/regression/invariants/driver.cpp index 824ae588c03..c0627bbd341 100644 --- a/regression/invariants/driver.cpp +++ b/regression/invariants/driver.cpp @@ -12,6 +12,8 @@ Author: Chris Smowton, chris.smowton@diffblue.com #include #include #include +#include +#include /// An example of structured invariants-- this contains fields to /// describe the error to a catcher, and also produces a human-readable @@ -83,6 +85,8 @@ int main(int argc, char** argv) DATA_INVARIANT_STRUCTURED(false, structured_error_testt, 1, "Structured error"); // NOLINT else if(arg=="data-invariant-string") DATA_INVARIANT(false, "Test invariant failure"); + else if(arg=="irep") + INVARIANT_WITH_IREP(false, "error with irep", pointer_typet(void_typet())); else return 1; } diff --git a/regression/invariants/invariant-failure13/test.desc b/regression/invariants/invariant-failure13/test.desc new file mode 100644 index 00000000000..331889e1eb7 --- /dev/null +++ b/regression/invariants/invariant-failure13/test.desc @@ -0,0 +1,14 @@ +CORE +dummy_parameter.c +irep +^EXIT=(0|127|134|137)$ +^SIGNAL=0$ +--- begin invariant violation report --- +Invariant check failed +error with irep +pointer +0: empty +^(Backtrace)|(Backtraces not supported)$ +-- +^warning: ignoring +^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings-smoke-tests/Makefile b/regression/strings-smoke-tests/Makefile new file mode 100644 index 00000000000..47653a6bb95 --- /dev/null +++ b/regression/strings-smoke-tests/Makefile @@ -0,0 +1,38 @@ +default: tests.log + +test: + @if ! ../test.pl -c ../../../src/cbmc/cbmc ; then \ + ../failed-tests-printer.pl ; \ + exit 1 ; \ + fi + +testfuture: + @if ! ../test.pl -c ../../../src/cbmc/cbmc -CF ; then \ + ../failed-tests-printer.pl ; \ + exit 1 ; \ + fi + +testall: + @if ! ../test.pl -c ../../../src/cbmc/cbmc -CFTK ; then \ + ../failed-tests-printer.pl ; \ + exit 1 ; \ + fi + +tests.log: ../test.pl + @if ! ../test.pl -c ../../../src/cbmc/cbmc ; then \ + ../failed-tests-printer.pl ; \ + exit 1 ; \ + fi + +show: + @for dir in *; do \ + if [ -d "$$dir" ]; then \ + vim -o "$$dir/*.c" "$$dir/*.out"; \ + fi; \ + done; + +clean: + find -name '*.out' -execdir $(RM) '{}' \; + find -name '*.gb' -execdir $(RM) '{}' \; + $(RM) tests.log + diff --git a/regression/strings-smoke-tests/java_append_char/test.desc b/regression/strings-smoke-tests/java_append_char/test.desc new file mode 100644 index 00000000000..7fdd9f47961 --- /dev/null +++ b/regression/strings-smoke-tests/java_append_char/test.desc @@ -0,0 +1,7 @@ +CORE +test_append_char.class +--refine-strings --string-max-length 1000 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_append_char/test_append_char.class b/regression/strings-smoke-tests/java_append_char/test_append_char.class new file mode 100644 index 00000000000..00c40aef6f6 Binary files /dev/null and b/regression/strings-smoke-tests/java_append_char/test_append_char.class differ diff --git a/regression/strings-smoke-tests/java_append_char/test_append_char.java b/regression/strings-smoke-tests/java_append_char/test_append_char.java new file mode 100644 index 00000000000..3eec4f30abe --- /dev/null +++ b/regression/strings-smoke-tests/java_append_char/test_append_char.java @@ -0,0 +1,17 @@ +public class test_append_char +{ + public static void main(/*String[] args*/) + { + char[] diff = {'d', 'i', 'f', 'f'}; + char[] blue = {'b', 'l', 'u', 'e'}; + + StringBuilder buffer = new StringBuilder(); + + buffer.append(diff) + .append(blue); + + String tmp=buffer.toString(); + System.out.println(tmp); + assert tmp.equals("diffblue"); + } +} diff --git a/regression/strings-smoke-tests/java_append_int/test.desc b/regression/strings-smoke-tests/java_append_int/test.desc new file mode 100644 index 00000000000..e1455859470 --- /dev/null +++ b/regression/strings-smoke-tests/java_append_int/test.desc @@ -0,0 +1,7 @@ +FUTURE +test_append_int.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_append_int/test_append_int.class b/regression/strings-smoke-tests/java_append_int/test_append_int.class new file mode 100644 index 00000000000..16948397e03 Binary files /dev/null and b/regression/strings-smoke-tests/java_append_int/test_append_int.class differ diff --git a/regression/strings-smoke-tests/java_append_int/test_append_int.java b/regression/strings-smoke-tests/java_append_int/test_append_int.java new file mode 100644 index 00000000000..963f3d7c063 --- /dev/null +++ b/regression/strings-smoke-tests/java_append_int/test_append_int.java @@ -0,0 +1,11 @@ +public class test_append_int +{ + public static void main(/*String[] args*/) + { + StringBuilder diffblue = new StringBuilder(); + diffblue.append("d"); + diffblue.append(4); + String s = diffblue.toString(); + assert s.equals("d4"); + } +} diff --git a/regression/strings-smoke-tests/java_append_object/test.desc b/regression/strings-smoke-tests/java_append_object/test.desc new file mode 100644 index 00000000000..787852963ed --- /dev/null +++ b/regression/strings-smoke-tests/java_append_object/test.desc @@ -0,0 +1,8 @@ +FUTURE +test_append_object.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +Issue: diffblue/test-gen#82 diff --git a/regression/strings-smoke-tests/java_append_object/test_append_object.class b/regression/strings-smoke-tests/java_append_object/test_append_object.class new file mode 100644 index 00000000000..ed6942a1fa6 Binary files /dev/null and b/regression/strings-smoke-tests/java_append_object/test_append_object.class differ diff --git a/regression/strings-smoke-tests/java_append_object/test_append_object.java b/regression/strings-smoke-tests/java_append_object/test_append_object.java new file mode 100644 index 00000000000..121690451ca --- /dev/null +++ b/regression/strings-smoke-tests/java_append_object/test_append_object.java @@ -0,0 +1,17 @@ +public class test_append_object +{ + public static void main(/*String[] args*/) + { + Object diff = "diff"; + Object blue = "blue"; + + StringBuilder buffer = new StringBuilder(); + + buffer.append(diff) + .append(blue); + + String tmp=buffer.toString(); + System.out.println(tmp); + assert tmp.equals("diffblue"); + } +} diff --git a/regression/strings-smoke-tests/java_append_string/test.desc b/regression/strings-smoke-tests/java_append_string/test.desc new file mode 100644 index 00000000000..943ca820bcc --- /dev/null +++ b/regression/strings-smoke-tests/java_append_string/test.desc @@ -0,0 +1,7 @@ +CORE +test_append_string.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_append_string/test_append_string.class b/regression/strings-smoke-tests/java_append_string/test_append_string.class new file mode 100644 index 00000000000..622e08467f9 Binary files /dev/null and b/regression/strings-smoke-tests/java_append_string/test_append_string.class differ diff --git a/regression/strings-smoke-tests/java_append_string/test_append_string.java b/regression/strings-smoke-tests/java_append_string/test_append_string.java new file mode 100644 index 00000000000..e7f961172fa --- /dev/null +++ b/regression/strings-smoke-tests/java_append_string/test_append_string.java @@ -0,0 +1,14 @@ +public class test_append_string +{ + public static void main(/*String[] args*/) + { + String di = new String("di"); + StringBuilder diff = new StringBuilder(); + diff.append(di); + diff.append("ff"); + System.out.println(diff); + String s = diff.toString(); + System.out.println(s); + assert s.equals("diff"); + } +} diff --git a/regression/strings-smoke-tests/java_case/test.desc b/regression/strings-smoke-tests/java_case/test.desc new file mode 100644 index 00000000000..2889787e47a --- /dev/null +++ b/regression/strings-smoke-tests/java_case/test.desc @@ -0,0 +1,12 @@ +CORE +test_case.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* file test_case.java line 10 .* SUCCESS$ +assertion.* file test_case.java line 11 .* SUCCESS$ +assertion.* file test_case.java line 12 .* SUCCESS$ +assertion.* file test_case.java line 16 .* FAILURE$ +assertion.* file test_case.java line 20 .* SUCCESS$ +assertion.* file test_case.java line 24 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_case/test_case.class b/regression/strings-smoke-tests/java_case/test_case.class new file mode 100644 index 00000000000..68e4955d131 Binary files /dev/null and b/regression/strings-smoke-tests/java_case/test_case.class differ diff --git a/regression/strings-smoke-tests/java_case/test_case.java b/regression/strings-smoke-tests/java_case/test_case.java new file mode 100644 index 00000000000..088ee70803e --- /dev/null +++ b/regression/strings-smoke-tests/java_case/test_case.java @@ -0,0 +1,27 @@ +public class test_case +{ + public static void main(int i) + { + String s = new String("Ab"); + String l = s.toLowerCase(); + String u = s.toUpperCase(); + if(i==1) + { + assert(l.equals("ab")); + assert(u.equals("AB")); + assert(s.equalsIgnoreCase("aB")); + } + else if(i==2) + { + assert(!u.equals("AB")); + } + else if(i==3) + { + assert("ÖÇ".toLowerCase().equals("öç")); + } + else + { + assert(!"ÖÇ".toLowerCase().equals("öç")); + } + } +} diff --git a/regression/strings-smoke-tests/java_char_array/test.desc b/regression/strings-smoke-tests/java_char_array/test.desc new file mode 100644 index 00000000000..d00a921a8c1 --- /dev/null +++ b/regression/strings-smoke-tests/java_char_array/test.desc @@ -0,0 +1,13 @@ +CORE +test_char_array.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +.*assertion.* test_char_array.java line 9 .* SUCCESS$ +.*assertion.* test_char_array.java line 10 .* SUCCESS$ +.*assertion.* test_char_array.java line 11 .* SUCCESS$ +.*assertion.* test_char_array.java line 13 .* FAILURE$ +.*assertion.* test_char_array.java line 15 .* FAILURE$ +.*assertion.* test_char_array.java line 17 .* FAILURE$ +^VERIFICATION FAILED$ +-- diff --git a/regression/strings-smoke-tests/java_char_array/test_char_array.class b/regression/strings-smoke-tests/java_char_array/test_char_array.class new file mode 100644 index 00000000000..e509fe289d3 Binary files /dev/null and b/regression/strings-smoke-tests/java_char_array/test_char_array.class differ diff --git a/regression/strings-smoke-tests/java_char_array/test_char_array.java b/regression/strings-smoke-tests/java_char_array/test_char_array.java new file mode 100644 index 00000000000..e0efe1777e7 --- /dev/null +++ b/regression/strings-smoke-tests/java_char_array/test_char_array.java @@ -0,0 +1,19 @@ +public class test_char_array +{ + public static void main(int i) + { + String s = "abc"; + char [] str = s.toCharArray(); + char c = str[2]; + char a = s.charAt(0); + assert(str.length == 3); + assert(a == 'a'); + assert(c == 'c'); + if(i==0) + assert(str.length != 3); + if(i==2) + assert(a != 'a'); + if(i==3) + assert(c != 'c'); + } +} diff --git a/regression/strings-smoke-tests/java_char_array_init/test.desc b/regression/strings-smoke-tests/java_char_array_init/test.desc new file mode 100644 index 00000000000..04096a8a984 --- /dev/null +++ b/regression/strings-smoke-tests/java_char_array_init/test.desc @@ -0,0 +1,8 @@ +FUTURE +test_init.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +cbmc/test-gen#259 diff --git a/regression/strings-smoke-tests/java_char_array_init/test_init.class b/regression/strings-smoke-tests/java_char_array_init/test_init.class new file mode 100644 index 00000000000..48075eb9187 Binary files /dev/null and b/regression/strings-smoke-tests/java_char_array_init/test_init.class differ diff --git a/regression/strings-smoke-tests/java_char_array_init/test_init.java b/regression/strings-smoke-tests/java_char_array_init/test_init.java new file mode 100644 index 00000000000..8e0f656e3e8 --- /dev/null +++ b/regression/strings-smoke-tests/java_char_array_init/test_init.java @@ -0,0 +1,21 @@ +public class test_init { + + public static void main(/*String[] argv*/) + { + char [] str = new char[10]; + str[0] = 'H'; + str[1] = 'e'; + str[2] = 'l'; + str[3] = 'l'; + str[4] = 'o'; + String s = new String(str); + String t = new String(str,1,2); + + System.out.println(s.length()); + assert(s.length() == 10); + System.out.println(s); + System.out.println(t); + assert(t.equals("el")); + assert(s.startsWith("Hello")); + } +} diff --git a/regression/strings-smoke-tests/java_char_at/test.desc b/regression/strings-smoke-tests/java_char_at/test.desc new file mode 100644 index 00000000000..f2d5ecad6c7 --- /dev/null +++ b/regression/strings-smoke-tests/java_char_at/test.desc @@ -0,0 +1,7 @@ +CORE +test_char_at.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_char_at/test_char_at.class b/regression/strings-smoke-tests/java_char_at/test_char_at.class new file mode 100644 index 00000000000..de5fe888245 Binary files /dev/null and b/regression/strings-smoke-tests/java_char_at/test_char_at.class differ diff --git a/regression/strings-smoke-tests/java_char_at/test_char_at.java b/regression/strings-smoke-tests/java_char_at/test_char_at.java new file mode 100644 index 00000000000..3b8663d62ae --- /dev/null +++ b/regression/strings-smoke-tests/java_char_at/test_char_at.java @@ -0,0 +1,7 @@ +public class test_char_at { + + public static void main(/*String[] argv*/) { + String s = new String("abc"); + assert(s.charAt(2)=='c'); + } +} diff --git a/regression/strings-smoke-tests/java_code_point/test.desc b/regression/strings-smoke-tests/java_code_point/test.desc new file mode 100644 index 00000000000..e3be9616fa5 --- /dev/null +++ b/regression/strings-smoke-tests/java_code_point/test.desc @@ -0,0 +1,7 @@ +CORE +test_code_point.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_code_point/test_code_point.class b/regression/strings-smoke-tests/java_code_point/test_code_point.class new file mode 100644 index 00000000000..1d5d2269325 Binary files /dev/null and b/regression/strings-smoke-tests/java_code_point/test_code_point.class differ diff --git a/regression/strings-smoke-tests/java_code_point/test_code_point.java b/regression/strings-smoke-tests/java_code_point/test_code_point.java new file mode 100644 index 00000000000..faf9a2051d5 --- /dev/null +++ b/regression/strings-smoke-tests/java_code_point/test_code_point.java @@ -0,0 +1,14 @@ +public class test_code_point +{ + public static void main(/*String[] argv*/) + { + String s = "!𐤇𐤄𐤋𐤋𐤅"; + assert(s.codePointAt(1) == 67847); + assert(s.codePointBefore(3) == 67847); + assert(s.codePointCount(1,5) >= 2); + assert(s.offsetByCodePoints(1,2) >= 3); + StringBuilder sb = new StringBuilder(); + sb.appendCodePoint(0x10907); + assert(s.charAt(1) == sb.charAt(0)); + } +} diff --git a/regression/strings-smoke-tests/java_compare/test.desc b/regression/strings-smoke-tests/java_compare/test.desc new file mode 100644 index 00000000000..9e6810476b9 --- /dev/null +++ b/regression/strings-smoke-tests/java_compare/test.desc @@ -0,0 +1,7 @@ +CORE +test_compare.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_compare/test_compare.class b/regression/strings-smoke-tests/java_compare/test_compare.class new file mode 100644 index 00000000000..3a807f4d203 Binary files /dev/null and b/regression/strings-smoke-tests/java_compare/test_compare.class differ diff --git a/regression/strings-smoke-tests/java_compare/test_compare.java b/regression/strings-smoke-tests/java_compare/test_compare.java new file mode 100644 index 00000000000..c052ed429bd --- /dev/null +++ b/regression/strings-smoke-tests/java_compare/test_compare.java @@ -0,0 +1,9 @@ +public class test_compare +{ + public static void main(/*String[] argv*/) + { + String s1 = "ab"; + String s2 = "aa"; + assert(s1.compareTo(s2) == 1); + } +} diff --git a/regression/strings-smoke-tests/java_concat/test.desc b/regression/strings-smoke-tests/java_concat/test.desc new file mode 100644 index 00000000000..2dcca464779 --- /dev/null +++ b/regression/strings-smoke-tests/java_concat/test.desc @@ -0,0 +1,8 @@ +CORE +test_concat.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 10.* SUCCESS$ +^\[.*assertion.2\].* line 11.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_concat/test_concat.class b/regression/strings-smoke-tests/java_concat/test_concat.class new file mode 100644 index 00000000000..e4143c15773 Binary files /dev/null and b/regression/strings-smoke-tests/java_concat/test_concat.class differ diff --git a/regression/strings-smoke-tests/java_concat/test_concat.java b/regression/strings-smoke-tests/java_concat/test_concat.java new file mode 100644 index 00000000000..b9909c723d4 --- /dev/null +++ b/regression/strings-smoke-tests/java_concat/test_concat.java @@ -0,0 +1,13 @@ +public class test_concat +{ + public static void main(/*String[] argv*/) + { + String s = new String("pi"); + int i = s.length(); + String t = new String("ppo"); + String u = s.concat(t); + char c = u.charAt(i); + assert(c == 'p'); + assert(c == 'o'); + } +} diff --git a/regression/strings-smoke-tests/java_contains/test.desc b/regression/strings-smoke-tests/java_contains/test.desc new file mode 100644 index 00000000000..158cf338c0a --- /dev/null +++ b/regression/strings-smoke-tests/java_contains/test.desc @@ -0,0 +1,11 @@ +CORE +test_contains.class +--refine-strings --string-max-length 100 +^EXIT=0$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 9.* SUCCESS$ +^VERIFICATION SUCCESSFUL$ +-- +-- +Issue: diffblue/test-gen#201 diff --git a/regression/strings-smoke-tests/java_contains/test_contains.class b/regression/strings-smoke-tests/java_contains/test_contains.class new file mode 100644 index 00000000000..0319198566d Binary files /dev/null and b/regression/strings-smoke-tests/java_contains/test_contains.class differ diff --git a/regression/strings-smoke-tests/java_contains/test_contains.java b/regression/strings-smoke-tests/java_contains/test_contains.java new file mode 100644 index 00000000000..0357b3d596b --- /dev/null +++ b/regression/strings-smoke-tests/java_contains/test_contains.java @@ -0,0 +1,19 @@ +public class test_contains +{ + public static void main(String x) + { + String s = new String("Abc"); + String u = "bc"; + String t = "ab"; + assert(s.contains(u)); + assert(!s.contains(t)); + + // Too slow now after constant unfolding was deleted due to invalidity. + // May be fast enough in the future though. + // String z = new String(x); + // if (z.length() > 3) + // assert(t.contains(z)); + // else + // assert(z.contains(u)); + } +} diff --git a/regression/strings-smoke-tests/java_contains/test_string_printable.desc b/regression/strings-smoke-tests/java_contains/test_string_printable.desc new file mode 100644 index 00000000000..ccd29948c26 --- /dev/null +++ b/regression/strings-smoke-tests/java_contains/test_string_printable.desc @@ -0,0 +1,12 @@ +KNOWNBUG +test_contains.class +--refine-strings --string-max-length 100 --string-printable +^EXIT=0$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 9.* SUCCESS$ +^VERIFICATION SUCCESSFUL$ +-- +-- +This should create a huge formula and run out of memory. +Issue: https://github.com/diffblue/test-gen/issues/745 diff --git a/regression/strings-smoke-tests/java_delete/test.desc b/regression/strings-smoke-tests/java_delete/test.desc new file mode 100644 index 00000000000..f0c0aedda91 --- /dev/null +++ b/regression/strings-smoke-tests/java_delete/test.desc @@ -0,0 +1,7 @@ +CORE +test_delete.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_delete/test_delete.class b/regression/strings-smoke-tests/java_delete/test_delete.class new file mode 100644 index 00000000000..f18891851b1 Binary files /dev/null and b/regression/strings-smoke-tests/java_delete/test_delete.class differ diff --git a/regression/strings-smoke-tests/java_delete/test_delete.java b/regression/strings-smoke-tests/java_delete/test_delete.java new file mode 100644 index 00000000000..13bd09cd075 --- /dev/null +++ b/regression/strings-smoke-tests/java_delete/test_delete.java @@ -0,0 +1,10 @@ +public class test_delete +{ + public static void main(/*String[] argv*/) + { + StringBuilder s = new StringBuilder("Abc"); + s.delete(1,2); + String str = s.toString(); + assert(str.equals("Ac")); + } +} diff --git a/regression/strings-smoke-tests/java_delete_char_at/test.desc b/regression/strings-smoke-tests/java_delete_char_at/test.desc new file mode 100644 index 00000000000..d415d16e9b6 --- /dev/null +++ b/regression/strings-smoke-tests/java_delete_char_at/test.desc @@ -0,0 +1,7 @@ +CORE +test_delete_char_at.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_delete_char_at/test_delete_char_at.class b/regression/strings-smoke-tests/java_delete_char_at/test_delete_char_at.class new file mode 100644 index 00000000000..cfd8561e596 Binary files /dev/null and b/regression/strings-smoke-tests/java_delete_char_at/test_delete_char_at.class differ diff --git a/regression/strings-smoke-tests/java_delete_char_at/test_delete_char_at.java b/regression/strings-smoke-tests/java_delete_char_at/test_delete_char_at.java new file mode 100644 index 00000000000..94787c5283d --- /dev/null +++ b/regression/strings-smoke-tests/java_delete_char_at/test_delete_char_at.java @@ -0,0 +1,11 @@ +public class test_delete_char_at +{ + public static void main(/*String[] argv*/) + { + StringBuilder s = new StringBuilder(); + s.append("Abc"); + s.deleteCharAt(1); + String str = s.toString(); + assert(str.equals("Ac")); + } +} diff --git a/regression/strings-smoke-tests/java_empty/test.desc b/regression/strings-smoke-tests/java_empty/test.desc new file mode 100644 index 00000000000..181ff4ee5fd --- /dev/null +++ b/regression/strings-smoke-tests/java_empty/test.desc @@ -0,0 +1,7 @@ +CORE +test_empty.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_empty/test_empty.class b/regression/strings-smoke-tests/java_empty/test_empty.class new file mode 100644 index 00000000000..8e9a17d387e Binary files /dev/null and b/regression/strings-smoke-tests/java_empty/test_empty.class differ diff --git a/regression/strings-smoke-tests/java_empty/test_empty.java b/regression/strings-smoke-tests/java_empty/test_empty.java new file mode 100644 index 00000000000..47c335e16fa --- /dev/null +++ b/regression/strings-smoke-tests/java_empty/test_empty.java @@ -0,0 +1,8 @@ +public class test_empty +{ + public static void main(/*String[] argv*/) + { + String empty = ""; + assert(empty.isEmpty()); + } +} diff --git a/regression/strings-smoke-tests/java_endswith/test.desc b/regression/strings-smoke-tests/java_endswith/test.desc new file mode 100644 index 00000000000..002bd3015da --- /dev/null +++ b/regression/strings-smoke-tests/java_endswith/test.desc @@ -0,0 +1,8 @@ +CORE +test_endswith.class +--refine-strings --string-max-length 100 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 9.* SUCCESS$ +^\[.*assertion.2\].* line 10.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_endswith/test_endswith.class b/regression/strings-smoke-tests/java_endswith/test_endswith.class new file mode 100644 index 00000000000..1f86e94431d Binary files /dev/null and b/regression/strings-smoke-tests/java_endswith/test_endswith.class differ diff --git a/regression/strings-smoke-tests/java_endswith/test_endswith.java b/regression/strings-smoke-tests/java_endswith/test_endswith.java new file mode 100644 index 00000000000..f7729ef6a40 --- /dev/null +++ b/regression/strings-smoke-tests/java_endswith/test_endswith.java @@ -0,0 +1,12 @@ +public class test_endswith +{ + public static void main(/*String[] argv*/) + { + String s = new String("Abcd"); + String suff = "cd"; + String bad_suff = "bc"; + + assert(s.endsWith(suff)); + assert(s.endsWith(bad_suff)); + } +} diff --git a/regression/strings-smoke-tests/java_equal/test.desc b/regression/strings-smoke-tests/java_equal/test.desc new file mode 100644 index 00000000000..964c3b72bae --- /dev/null +++ b/regression/strings-smoke-tests/java_equal/test.desc @@ -0,0 +1,8 @@ +CORE +test_equal.class +--refine-strings --string-max-length 100 --string-max-length 100 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* FAILURE$ +^\[.*assertion.2\].* line 9.* SUCCESS$ +-- diff --git a/regression/strings-smoke-tests/java_equal/test_2.desc b/regression/strings-smoke-tests/java_equal/test_2.desc new file mode 100644 index 00000000000..bfa989a3695 --- /dev/null +++ b/regression/strings-smoke-tests/java_equal/test_2.desc @@ -0,0 +1,7 @@ +KNOWNBUG +test_equal_2.class +--refine-strings --string-max-length 100 --string-max-length 100 +^EXIT=0$ +^SIGNAL=0$ +-- +https://github.com/diffblue/test-gen/issues/856 diff --git a/regression/strings-smoke-tests/java_equal/test_equal.class b/regression/strings-smoke-tests/java_equal/test_equal.class new file mode 100644 index 00000000000..e0fc6db8aaf Binary files /dev/null and b/regression/strings-smoke-tests/java_equal/test_equal.class differ diff --git a/regression/strings-smoke-tests/java_equal/test_equal.java b/regression/strings-smoke-tests/java_equal/test_equal.java new file mode 100644 index 00000000000..a3acb0ebda5 --- /dev/null +++ b/regression/strings-smoke-tests/java_equal/test_equal.java @@ -0,0 +1,11 @@ +public class test_equal +{ + public static void main(String[] argv) + { + String s = new String("pi"); + String t = new String("po"); + String u = "po"; + assert(s.equals(t)); + assert(t.equals(u)); + } +} diff --git a/regression/strings-smoke-tests/java_equal/test_equal_2.java b/regression/strings-smoke-tests/java_equal/test_equal_2.java new file mode 100644 index 00000000000..931ed71471a --- /dev/null +++ b/regression/strings-smoke-tests/java_equal/test_equal_2.java @@ -0,0 +1,7 @@ +public class test_equal_2 +{ + public static void main(String s) + { + assert(!(s.equals("pi") && s.equals("po"))); + } +} diff --git a/regression/strings-smoke-tests/java_float/test.desc b/regression/strings-smoke-tests/java_float/test.desc new file mode 100644 index 00000000000..427d1fca836 --- /dev/null +++ b/regression/strings-smoke-tests/java_float/test.desc @@ -0,0 +1,7 @@ +FUTURE +test_float.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_float/test_float.class b/regression/strings-smoke-tests/java_float/test_float.class new file mode 100644 index 00000000000..e4448d41558 Binary files /dev/null and b/regression/strings-smoke-tests/java_float/test_float.class differ diff --git a/regression/strings-smoke-tests/java_float/test_float.java b/regression/strings-smoke-tests/java_float/test_float.java new file mode 100644 index 00000000000..d2791d5c343 --- /dev/null +++ b/regression/strings-smoke-tests/java_float/test_float.java @@ -0,0 +1,15 @@ +public class test_float +{ + public static void main(/*String[] arg*/) + { + float inf = 100.0f / 0.0f; + float minus_inf = -100.0f / 0.0f; + float nan = 0.0f / 0.0f; + String inf_string = Float.toString(inf); + String mininf_string = Float.toString(minus_inf); + String nan_string = Float.toString(nan); + assert(nan_string.equals("NaN")); + assert(inf_string.equals("Infinity")); + assert(mininf_string.equals("-Infinity")); + } +} diff --git a/regression/strings-smoke-tests/java_format/test.class b/regression/strings-smoke-tests/java_format/test.class new file mode 100644 index 00000000000..a889c41e687 Binary files /dev/null and b/regression/strings-smoke-tests/java_format/test.class differ diff --git a/regression/strings-smoke-tests/java_format/test.desc b/regression/strings-smoke-tests/java_format/test.desc new file mode 100644 index 00000000000..8999b5b27ec --- /dev/null +++ b/regression/strings-smoke-tests/java_format/test.desc @@ -0,0 +1,9 @@ +CORE +test.class +--refine-strings --string-max-length 20 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 6.* SUCCESS$ +^\[.*assertion.2\].* line 7.* FAILURE$ +-- +^ignoring diff --git a/regression/strings-smoke-tests/java_format/test.java b/regression/strings-smoke-tests/java_format/test.java new file mode 100644 index 00000000000..9726153fbb3 --- /dev/null +++ b/regression/strings-smoke-tests/java_format/test.java @@ -0,0 +1,10 @@ +public class test +{ + public static String main() + { + String s = String.format("foo %s", "bar"); + assert(s.equals("foo bar")); + assert(!s.equals("foo bar")); + return s; + } +} diff --git a/regression/strings-smoke-tests/java_format2/test.class b/regression/strings-smoke-tests/java_format2/test.class new file mode 100644 index 00000000000..e78ed5bb9df Binary files /dev/null and b/regression/strings-smoke-tests/java_format2/test.class differ diff --git a/regression/strings-smoke-tests/java_format2/test.desc b/regression/strings-smoke-tests/java_format2/test.desc new file mode 100644 index 00000000000..f34840a743c --- /dev/null +++ b/regression/strings-smoke-tests/java_format2/test.desc @@ -0,0 +1,9 @@ +CORE +test.class +--refine-strings --string-max-length 20 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 6.* SUCCESS$ +^\[.*assertion.2\].* line 7.* FAILURE$ +-- +^warning diff --git a/regression/strings-smoke-tests/java_format2/test.java b/regression/strings-smoke-tests/java_format2/test.java new file mode 100644 index 00000000000..c197d5c6793 --- /dev/null +++ b/regression/strings-smoke-tests/java_format2/test.java @@ -0,0 +1,10 @@ +public class test +{ + public static String main(String str) + { + String s = String.format("foo %s", str); + assert(s.equals("foo ".concat(str))); + assert(!s.equals("foo ".concat(str))); + return s; + } +} diff --git a/regression/strings-smoke-tests/java_format3/test.class b/regression/strings-smoke-tests/java_format3/test.class new file mode 100644 index 00000000000..6d235dcccab Binary files /dev/null and b/regression/strings-smoke-tests/java_format3/test.class differ diff --git a/regression/strings-smoke-tests/java_format3/test.desc b/regression/strings-smoke-tests/java_format3/test.desc new file mode 100644 index 00000000000..597b65ce183 --- /dev/null +++ b/regression/strings-smoke-tests/java_format3/test.desc @@ -0,0 +1,9 @@ +CORE +test.class +--refine-strings --string-max-length 20 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 7.* SUCCESS$ +^\[.*assertion.2\].* line 9.* FAILURE$ +-- +^warning diff --git a/regression/strings-smoke-tests/java_format3/test.java b/regression/strings-smoke-tests/java_format3/test.java new file mode 100644 index 00000000000..fd88ef5c3b5 --- /dev/null +++ b/regression/strings-smoke-tests/java_format3/test.java @@ -0,0 +1,12 @@ +public class test +{ + public static String main(int i) + { + String s = String.format("%3$sar", "a", "r", "b"); + if(i==0) + assert(s.equals("bar")); + else + assert(!s.equals("bar")); + return s; + } +} diff --git a/regression/strings-smoke-tests/java_format4/test.class b/regression/strings-smoke-tests/java_format4/test.class new file mode 100644 index 00000000000..8adb0b41ad8 Binary files /dev/null and b/regression/strings-smoke-tests/java_format4/test.class differ diff --git a/regression/strings-smoke-tests/java_format4/test.desc b/regression/strings-smoke-tests/java_format4/test.desc new file mode 100644 index 00000000000..120bf0cf11f --- /dev/null +++ b/regression/strings-smoke-tests/java_format4/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +test.class +--refine-strings --string-max-length 20 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 13.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_format4/test.java b/regression/strings-smoke-tests/java_format4/test.java new file mode 100644 index 00000000000..bc76a9ee416 --- /dev/null +++ b/regression/strings-smoke-tests/java_format4/test.java @@ -0,0 +1,17 @@ +public class test +{ + public static String main(String str) + { + try + { + String s = String.format("%s %s", "a"); + assert(false); + return s; + } + catch(java.util.IllegalFormatException e) + { + assert(false); + return str; + } + } +} diff --git a/regression/strings-smoke-tests/java_format5/test.class b/regression/strings-smoke-tests/java_format5/test.class new file mode 100644 index 00000000000..66f386a8c3e Binary files /dev/null and b/regression/strings-smoke-tests/java_format5/test.class differ diff --git a/regression/strings-smoke-tests/java_format5/test.desc b/regression/strings-smoke-tests/java_format5/test.desc new file mode 100644 index 00000000000..1a77e4be0a5 --- /dev/null +++ b/regression/strings-smoke-tests/java_format5/test.desc @@ -0,0 +1,8 @@ +THOROUGH +test.class +--refine-strings --string-max-length 20 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 7.* SUCCESS$ +^\[.*assertion.2\].* line 9.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_format5/test.java b/regression/strings-smoke-tests/java_format5/test.java new file mode 100644 index 00000000000..5078791baa2 --- /dev/null +++ b/regression/strings-smoke-tests/java_format5/test.java @@ -0,0 +1,12 @@ +public class test +{ + public static String main(boolean b) + { + String s = String.format("%s%s%s%s%s%s%s%s", "a", "b", "c", "d", "e", "f", "g", "h"); + if(b) + assert(s.equals("abcdefgh")); + else + assert(!s.equals("abcdefgh")); + return s; + } +} diff --git a/regression/strings-smoke-tests/java_hash_code/test.desc b/regression/strings-smoke-tests/java_hash_code/test.desc new file mode 100644 index 00000000000..fc628393186 --- /dev/null +++ b/regression/strings-smoke-tests/java_hash_code/test.desc @@ -0,0 +1,8 @@ +CORE +test_hash_code.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 9.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_hash_code/test_hash_code.class b/regression/strings-smoke-tests/java_hash_code/test_hash_code.class new file mode 100644 index 00000000000..21bc5d96ca9 Binary files /dev/null and b/regression/strings-smoke-tests/java_hash_code/test_hash_code.class differ diff --git a/regression/strings-smoke-tests/java_hash_code/test_hash_code.java b/regression/strings-smoke-tests/java_hash_code/test_hash_code.java new file mode 100644 index 00000000000..d9f42b7ff9d --- /dev/null +++ b/regression/strings-smoke-tests/java_hash_code/test_hash_code.java @@ -0,0 +1,11 @@ +public class test_hash_code +{ + public static void main(/*String[] argv*/) + { + String s1 = "ab"; + String s2 = "ab"; + String s3 = "aa"; + assert(s1.hashCode() == s2.hashCode()); + assert(s1.hashCode() == s3.hashCode()); + } +} diff --git a/regression/strings-smoke-tests/java_if/test.class b/regression/strings-smoke-tests/java_if/test.class new file mode 100644 index 00000000000..11958bd6ce9 Binary files /dev/null and b/regression/strings-smoke-tests/java_if/test.class differ diff --git a/regression/strings-smoke-tests/java_if/test.desc b/regression/strings-smoke-tests/java_if/test.desc new file mode 100644 index 00000000000..382365ad33b --- /dev/null +++ b/regression/strings-smoke-tests/java_if/test.desc @@ -0,0 +1,9 @@ +CORE +test.class +--refine-strings --string-max-length 100 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 12.* SUCCESS$ +^\[.*assertion.2\].* line 13.* FAILURE$ +-- +$ignoring\s*char\s*array diff --git a/regression/strings-smoke-tests/java_if/test.java b/regression/strings-smoke-tests/java_if/test.java new file mode 100644 index 00000000000..9760eb7bb2a --- /dev/null +++ b/regression/strings-smoke-tests/java_if/test.java @@ -0,0 +1,16 @@ +public class test +{ + public static String main() + { + Object t[] = new Object[5]; + t[0] = "world!"; + StringBuilder s = new StringBuilder("Hello "); + if(t[0] instanceof String) + { + s.append((String) t[0]); + } + assert(s.toString().equals("Hello world!")); + assert(!s.toString().equals("Hello world!")); + return s.toString(); + } +} diff --git a/regression/strings-smoke-tests/java_index_of/test.desc b/regression/strings-smoke-tests/java_index_of/test.desc new file mode 100644 index 00000000000..e0e7de66561 --- /dev/null +++ b/regression/strings-smoke-tests/java_index_of/test.desc @@ -0,0 +1,7 @@ +CORE +test_index_of.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_index_of/test_index_of.class b/regression/strings-smoke-tests/java_index_of/test_index_of.class new file mode 100644 index 00000000000..8a989bdc95c Binary files /dev/null and b/regression/strings-smoke-tests/java_index_of/test_index_of.class differ diff --git a/regression/strings-smoke-tests/java_index_of/test_index_of.java b/regression/strings-smoke-tests/java_index_of/test_index_of.java new file mode 100644 index 00000000000..3568dab9696 --- /dev/null +++ b/regression/strings-smoke-tests/java_index_of/test_index_of.java @@ -0,0 +1,13 @@ +public class test_index_of +{ + public static void main(/*String[] argv*/) + { + String s = "Abc"; + String bc = "bc"; + String ab = "ab"; + int i = s.indexOf(bc); + int j = s.indexOf(ab); + assert(i == 1); + assert(j == -1); + } +} diff --git a/regression/strings-smoke-tests/java_index_of2/test.desc b/regression/strings-smoke-tests/java_index_of2/test.desc new file mode 100644 index 00000000000..09a7398d4b7 --- /dev/null +++ b/regression/strings-smoke-tests/java_index_of2/test.desc @@ -0,0 +1,7 @@ +CORE +test_index_of2.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- diff --git a/regression/strings-smoke-tests/java_index_of2/test_index_of2.class b/regression/strings-smoke-tests/java_index_of2/test_index_of2.class new file mode 100644 index 00000000000..cb7aacc4a7a Binary files /dev/null and b/regression/strings-smoke-tests/java_index_of2/test_index_of2.class differ diff --git a/regression/strings-smoke-tests/java_index_of2/test_index_of2.java b/regression/strings-smoke-tests/java_index_of2/test_index_of2.java new file mode 100644 index 00000000000..613ecefb75c --- /dev/null +++ b/regression/strings-smoke-tests/java_index_of2/test_index_of2.java @@ -0,0 +1,9 @@ +public class test_index_of2 +{ + public static void main(String param) + { + String s = "abcdefg"; + int i = s.indexOf(param); + assert(i != 1); + } +} diff --git a/regression/strings-smoke-tests/java_index_of_char/test.desc b/regression/strings-smoke-tests/java_index_of_char/test.desc new file mode 100644 index 00000000000..a95467b52e4 --- /dev/null +++ b/regression/strings-smoke-tests/java_index_of_char/test.desc @@ -0,0 +1,8 @@ +CORE +test_index_of_char.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +Issue: cbmc/test-gen#77 diff --git a/regression/strings-smoke-tests/java_index_of_char/test_index_of_char.class b/regression/strings-smoke-tests/java_index_of_char/test_index_of_char.class new file mode 100644 index 00000000000..f87a1026683 Binary files /dev/null and b/regression/strings-smoke-tests/java_index_of_char/test_index_of_char.class differ diff --git a/regression/strings-smoke-tests/java_index_of_char/test_index_of_char.java b/regression/strings-smoke-tests/java_index_of_char/test_index_of_char.java new file mode 100644 index 00000000000..6a5d3d60bd6 --- /dev/null +++ b/regression/strings-smoke-tests/java_index_of_char/test_index_of_char.java @@ -0,0 +1,10 @@ +public class test_index_of_char +{ + public static void main(/*String[] argv*/) + { + String s = "Abc"; + char c = 'c'; + int i = s.indexOf(c); + assert(i == 2); + } +} diff --git a/regression/strings-smoke-tests/java_insert_char/test.desc b/regression/strings-smoke-tests/java_insert_char/test.desc new file mode 100644 index 00000000000..88200524d70 --- /dev/null +++ b/regression/strings-smoke-tests/java_insert_char/test.desc @@ -0,0 +1,7 @@ +CORE +test_insert_char.class +--refine-strings --string-max-length 1000 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_insert_char/test_insert_char.class b/regression/strings-smoke-tests/java_insert_char/test_insert_char.class new file mode 100644 index 00000000000..481304a9f6d Binary files /dev/null and b/regression/strings-smoke-tests/java_insert_char/test_insert_char.class differ diff --git a/regression/strings-smoke-tests/java_insert_char/test_insert_char.java b/regression/strings-smoke-tests/java_insert_char/test_insert_char.java new file mode 100644 index 00000000000..ac6beb4ffcf --- /dev/null +++ b/regression/strings-smoke-tests/java_insert_char/test_insert_char.java @@ -0,0 +1,10 @@ +public class test_insert_char +{ + public static void main(/*String[] argv*/) + { + StringBuilder sb = new StringBuilder("ac"); + sb.insert(1, 'b'); + String s = sb.toString(); + assert(s.equals("abc")); + } +} diff --git a/regression/strings-smoke-tests/java_insert_char_array/test.desc b/regression/strings-smoke-tests/java_insert_char_array/test.desc new file mode 100644 index 00000000000..6fc7a12f439 --- /dev/null +++ b/regression/strings-smoke-tests/java_insert_char_array/test.desc @@ -0,0 +1,7 @@ +CORE +test_insert_char_array.class +--refine-strings --string-max-length 1000 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_insert_char_array/test_insert_char_array.class b/regression/strings-smoke-tests/java_insert_char_array/test_insert_char_array.class new file mode 100644 index 00000000000..3c0b5329230 Binary files /dev/null and b/regression/strings-smoke-tests/java_insert_char_array/test_insert_char_array.class differ diff --git a/regression/strings-smoke-tests/java_insert_char_array/test_insert_char_array.java b/regression/strings-smoke-tests/java_insert_char_array/test_insert_char_array.java new file mode 100644 index 00000000000..2c2840df672 --- /dev/null +++ b/regression/strings-smoke-tests/java_insert_char_array/test_insert_char_array.java @@ -0,0 +1,14 @@ +public class test_insert_char_array +{ + public static void main(/*String[] argv*/) + { + StringBuilder sb = new StringBuilder("ad"); + char[] array = new char[2]; + array[0] = 'b'; + array[1] = 'c'; + sb.insert(1, array); + String s = sb.toString(); + System.out.println(s); + assert(s.equals("abcd")); + } +} diff --git a/regression/strings-smoke-tests/java_insert_int/test.desc b/regression/strings-smoke-tests/java_insert_int/test.desc new file mode 100644 index 00000000000..488e2bc8766 --- /dev/null +++ b/regression/strings-smoke-tests/java_insert_int/test.desc @@ -0,0 +1,7 @@ +FUTURE +test_insert_int.class +--refine-strings --string-max-length 1000 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_insert_int/test_insert_int.class b/regression/strings-smoke-tests/java_insert_int/test_insert_int.class new file mode 100644 index 00000000000..8b0121ec681 Binary files /dev/null and b/regression/strings-smoke-tests/java_insert_int/test_insert_int.class differ diff --git a/regression/strings-smoke-tests/java_insert_int/test_insert_int.java b/regression/strings-smoke-tests/java_insert_int/test_insert_int.java new file mode 100644 index 00000000000..b787141e51a --- /dev/null +++ b/regression/strings-smoke-tests/java_insert_int/test_insert_int.java @@ -0,0 +1,10 @@ +public class test_insert_int +{ + public static void main(/*String[] argv*/) + { + StringBuilder sb = new StringBuilder("ac"); + sb.insert(1, 42); + String s = sb.toString(); + assert(s.equals("a42c")); + } +} diff --git a/regression/strings-smoke-tests/java_insert_multiple/.test_insert.java.swp b/regression/strings-smoke-tests/java_insert_multiple/.test_insert.java.swp new file mode 100644 index 00000000000..5596a2c906d Binary files /dev/null and b/regression/strings-smoke-tests/java_insert_multiple/.test_insert.java.swp differ diff --git a/regression/strings-smoke-tests/java_insert_multiple/test.desc b/regression/strings-smoke-tests/java_insert_multiple/test.desc new file mode 100644 index 00000000000..d3236ab78ee --- /dev/null +++ b/regression/strings-smoke-tests/java_insert_multiple/test.desc @@ -0,0 +1,7 @@ +CORE +test_insert_multiple.class +--refine-strings --string-max-length 1000 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_insert_multiple/test_insert_multiple.class b/regression/strings-smoke-tests/java_insert_multiple/test_insert_multiple.class new file mode 100644 index 00000000000..17ced6ec67c Binary files /dev/null and b/regression/strings-smoke-tests/java_insert_multiple/test_insert_multiple.class differ diff --git a/regression/strings-smoke-tests/java_insert_multiple/test_insert_multiple.java b/regression/strings-smoke-tests/java_insert_multiple/test_insert_multiple.java new file mode 100644 index 00000000000..cce6881ca7d --- /dev/null +++ b/regression/strings-smoke-tests/java_insert_multiple/test_insert_multiple.java @@ -0,0 +1,11 @@ +public class test_insert_multiple +{ + public static void main(/*String[] argv*/) + { + StringBuilder sb = new StringBuilder("ad"); + sb.insert(1, 'c'); + sb.insert(1, "b"); + String s = sb.toString(); + assert(s.equals("abcd")); + } +} diff --git a/regression/strings-smoke-tests/java_insert_string/test.desc b/regression/strings-smoke-tests/java_insert_string/test.desc new file mode 100644 index 00000000000..2b91905e17e --- /dev/null +++ b/regression/strings-smoke-tests/java_insert_string/test.desc @@ -0,0 +1,7 @@ +CORE +test_insert_string.class +--refine-strings --string-max-length 1000 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_insert_string/test_insert_string.class b/regression/strings-smoke-tests/java_insert_string/test_insert_string.class new file mode 100644 index 00000000000..39cc969a902 Binary files /dev/null and b/regression/strings-smoke-tests/java_insert_string/test_insert_string.class differ diff --git a/regression/strings-smoke-tests/java_insert_string/test_insert_string.java b/regression/strings-smoke-tests/java_insert_string/test_insert_string.java new file mode 100644 index 00000000000..7c161205131 --- /dev/null +++ b/regression/strings-smoke-tests/java_insert_string/test_insert_string.java @@ -0,0 +1,10 @@ +public class test_insert_string +{ + public static void main(/*String[] argv*/) + { + StringBuilder sb = new StringBuilder("ad"); + sb.insert(1, "bc"); + String s = sb.toString(); + assert(s.equals("abcd")); + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string/Test1.class b/regression/strings-smoke-tests/java_int_to_string/Test1.class new file mode 100644 index 00000000000..b4e1976927d Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string/Test1.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string/Test1.java b/regression/strings-smoke-tests/java_int_to_string/Test1.java new file mode 100644 index 00000000000..bc5f46a5761 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string/Test1.java @@ -0,0 +1,13 @@ +public class Test1 +{ + public static void main(Boolean b) + { + String s = Integer.toString(12); + if (b) { + assert(s.equals("12")); + } + else { + assert(!s.equals("12")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string/Test2.class b/regression/strings-smoke-tests/java_int_to_string/Test2.class new file mode 100644 index 00000000000..b5c286c4fca Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string/Test2.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string/Test2.java b/regression/strings-smoke-tests/java_int_to_string/Test2.java new file mode 100644 index 00000000000..b0feb6ae002 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string/Test2.java @@ -0,0 +1,13 @@ +public class Test2 +{ + public static void main(Boolean b) + { + String s = Integer.toString(-23); + if (b) { + assert(s.equals("-23")); + } + else { + assert(!s.equals("-23")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string/Test3.class b/regression/strings-smoke-tests/java_int_to_string/Test3.class new file mode 100644 index 00000000000..f3c171504dc Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string/Test3.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string/Test3.java b/regression/strings-smoke-tests/java_int_to_string/Test3.java new file mode 100644 index 00000000000..f2e4b9ee389 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string/Test3.java @@ -0,0 +1,13 @@ +public class Test3 +{ + public static void main(Boolean b) + { + String s = Integer.toString(Integer.MAX_VALUE); + if (b) { + assert(s.equals("2147483647")); + } + else { + assert(!s.equals("2147483647")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string/Test4.class b/regression/strings-smoke-tests/java_int_to_string/Test4.class new file mode 100644 index 00000000000..299c653044e Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string/Test4.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string/Test4.java b/regression/strings-smoke-tests/java_int_to_string/Test4.java new file mode 100644 index 00000000000..e4a3bdb41bc --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string/Test4.java @@ -0,0 +1,13 @@ +public class Test4 +{ + public static void main(Boolean b) + { + String s = Integer.toString(Integer.MIN_VALUE + 1); + if (b) { + assert(s.equals("-2147483647")); + } + else { + assert(!s.equals("-2147483647")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string/Test5.class b/regression/strings-smoke-tests/java_int_to_string/Test5.class new file mode 100644 index 00000000000..eafc3cb9a78 Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string/Test5.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string/Test5.java b/regression/strings-smoke-tests/java_int_to_string/Test5.java new file mode 100644 index 00000000000..408b2eaad11 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string/Test5.java @@ -0,0 +1,13 @@ +public class Test5 +{ + public static void main(Boolean b) + { + String s = Integer.toString(0); + if (b) { + assert(s.equals("0")); + } + else { + assert(!s.equals("0")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string/test1.desc b/regression/strings-smoke-tests/java_int_to_string/test1.desc new file mode 100644 index 00000000000..88f39d5eb12 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string/test1.desc @@ -0,0 +1,8 @@ +CORE +Test1.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string/test2.desc b/regression/strings-smoke-tests/java_int_to_string/test2.desc new file mode 100644 index 00000000000..5ff465a846e --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string/test2.desc @@ -0,0 +1,8 @@ +CORE +Test2.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string/test3.desc b/regression/strings-smoke-tests/java_int_to_string/test3.desc new file mode 100644 index 00000000000..97565815465 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string/test3.desc @@ -0,0 +1,8 @@ +CORE +Test3.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string/test4.desc b/regression/strings-smoke-tests/java_int_to_string/test4.desc new file mode 100644 index 00000000000..2106e2defa5 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string/test4.desc @@ -0,0 +1,8 @@ +CORE +Test4.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string/test5.desc b/regression/strings-smoke-tests/java_int_to_string/test5.desc new file mode 100644 index 00000000000..524a176db3f --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string/test5.desc @@ -0,0 +1,8 @@ +CORE +Test5.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_knownbug/Test.class b/regression/strings-smoke-tests/java_int_to_string_knownbug/Test.class new file mode 100644 index 00000000000..f367a4884d7 Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_knownbug/Test.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_knownbug/Test.java b/regression/strings-smoke-tests/java_int_to_string_knownbug/Test.java new file mode 100644 index 00000000000..cd1f45d3caa --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_knownbug/Test.java @@ -0,0 +1,13 @@ +public class Test +{ + public static void main(Boolean b) + { + String t = Integer.toString(Integer.MIN_VALUE); + if (b) { + assert(t.equals("-2147483648")); + } + else { + assert(!t.equals("-2147483648")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_knownbug/test.desc b/regression/strings-smoke-tests/java_int_to_string_knownbug/test.desc new file mode 100644 index 00000000000..b1ed3bac24c --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_knownbug/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +Test.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary1.class b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary1.class new file mode 100644 index 00000000000..5623ec7b8fe Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary1.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary1.java b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary1.java new file mode 100644 index 00000000000..7fc9c70f983 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary1.java @@ -0,0 +1,13 @@ +public class Test_binary1 +{ + public static void main(Boolean b) + { + String s = Integer.toString(-23, 2); + if (b) { + assert(s.equals("-10111")); + } + else { + assert(!s.equals("-10111")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary2.class b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary2.class new file mode 100644 index 00000000000..fcf394e2179 Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary2.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary2.java b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary2.java new file mode 100644 index 00000000000..c8f71309d6b --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary2.java @@ -0,0 +1,13 @@ +public class Test_binary2 +{ + public static void main(Boolean b) + { + String s = Integer.toString(Integer.MAX_VALUE, 2); + if (b) { + assert(s.equals("1111111111111111111111111111111")); + } + else { + assert(!s.equals("1111111111111111111111111111111")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary3.class b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary3.class new file mode 100644 index 00000000000..b6f7c61d4b2 Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary3.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary3.java b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary3.java new file mode 100644 index 00000000000..7319a279ff0 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_binary3.java @@ -0,0 +1,13 @@ +public class Test_binary3 +{ + public static void main(Boolean b) + { + String s = Integer.toString(Integer.MIN_VALUE + 1, 2); + if (b) { + assert(s.equals("-1111111111111111111111111111111")); + } + else { + assert(!s.equals("-1111111111111111111111111111111")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_decimal.class b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_decimal.class new file mode 100644 index 00000000000..114102c52a4 Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_decimal.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_decimal.java b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_decimal.java new file mode 100644 index 00000000000..36c973cecea --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_decimal.java @@ -0,0 +1,13 @@ +public class Test_decimal +{ + public static void main(Boolean b) + { + String s = Integer.toString(-27, 10); + if (b) { + assert(s.equals("-27")); + } + else { + assert(!s.equals("-27")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex1.class b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex1.class new file mode 100644 index 00000000000..f4cb44e6360 Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex1.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex1.java b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex1.java new file mode 100644 index 00000000000..1fbc7f9974e --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex1.java @@ -0,0 +1,13 @@ +public class Test_hex1 +{ + public static void main(Boolean b) + { + String s = Integer.toString(-27, 16); + if (b) { + assert(s.equals("-1b")); + } + else { + assert(!s.equals("-1b")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex2.class b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex2.class new file mode 100644 index 00000000000..34e32836b04 Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex2.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex2.java b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex2.java new file mode 100644 index 00000000000..169186c259a --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex2.java @@ -0,0 +1,13 @@ +public class Test_hex2 +{ + public static void main(Boolean b) + { + String s = Integer.toString(Integer.MAX_VALUE, 16); + if (b) { + assert(s.equals("7fffffff")); + } + else { + assert(!s.equals("7fffffff")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex3.class b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex3.class new file mode 100644 index 00000000000..f631570c22c Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex3.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex3.java b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex3.java new file mode 100644 index 00000000000..b7fd403dcf9 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_hex3.java @@ -0,0 +1,13 @@ +public class Test_hex3 +{ + public static void main(Boolean b) + { + String s = Integer.toString(Integer.MIN_VALUE + 1, 16); + if (b) { + assert(s.equals("-7fffffff")); + } + else { + assert(!s.equals("-7fffffff")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal1.class b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal1.class new file mode 100644 index 00000000000..3a1c6f2c216 Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal1.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal1.java b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal1.java new file mode 100644 index 00000000000..337e09c27b4 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal1.java @@ -0,0 +1,13 @@ +public class Test_octal1 +{ + public static void main(Boolean b) + { + String s = Integer.toString(-23, 8); + if (b) { + assert(s.equals("-27")); + } + else { + assert(!s.equals("-27")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal2.class b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal2.class new file mode 100644 index 00000000000..470a21e79de Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal2.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal2.java b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal2.java new file mode 100644 index 00000000000..0402a5dd182 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal2.java @@ -0,0 +1,13 @@ +public class Test_octal2 +{ + public static void main(Boolean b) + { + String s = Integer.toString(Integer.MAX_VALUE, 8); + if (b) { + assert(s.equals("17777777777")); + } + else { + assert(!s.equals("17777777777")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal3.class b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal3.class new file mode 100644 index 00000000000..f7b84bb2998 Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal3.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal3.java b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal3.java new file mode 100644 index 00000000000..b88d62ce67e --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/Test_octal3.java @@ -0,0 +1,13 @@ +public class Test_octal3 +{ + public static void main(Boolean b) + { + String s = Integer.toString(Integer.MIN_VALUE + 1, 8); + if (b) { + assert(s.equals("-17777777777")); + } + else { + assert(!s.equals("-17777777777")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/test_binary1.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_binary1.desc new file mode 100644 index 00000000000..20bd5377109 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_binary1.desc @@ -0,0 +1,8 @@ +CORE +Test_binary1.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/test_binary2.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_binary2.desc new file mode 100644 index 00000000000..370139d2c42 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_binary2.desc @@ -0,0 +1,8 @@ +CORE +Test_binary2.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/test_binary3.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_binary3.desc new file mode 100644 index 00000000000..a4e6438623e --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_binary3.desc @@ -0,0 +1,8 @@ +CORE +Test_binary3.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/test_decimal.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_decimal.desc new file mode 100644 index 00000000000..7226334925f --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_decimal.desc @@ -0,0 +1,8 @@ +CORE +Test_decimal.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/test_hex1.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_hex1.desc new file mode 100644 index 00000000000..48d705734ac --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_hex1.desc @@ -0,0 +1,8 @@ +CORE +Test_hex1.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/test_hex2.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_hex2.desc new file mode 100644 index 00000000000..89c4928e147 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_hex2.desc @@ -0,0 +1,8 @@ +CORE +Test_hex2.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/test_hex3.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_hex3.desc new file mode 100644 index 00000000000..0c5ff51b802 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_hex3.desc @@ -0,0 +1,8 @@ +CORE +Test_hex3.class +--refine-strings --string-max-length 100 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/test_octal1.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_octal1.desc new file mode 100644 index 00000000000..9afe7b06279 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_octal1.desc @@ -0,0 +1,8 @@ +CORE +Test_octal1.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/test_octal2.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_octal2.desc new file mode 100644 index 00000000000..aee4977a75f --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_octal2.desc @@ -0,0 +1,8 @@ +CORE +Test_octal2.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix/test_octal3.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_octal3.desc new file mode 100644 index 00000000000..b7a5ceb3ce1 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix/test_octal3.desc @@ -0,0 +1,8 @@ +CORE +Test_octal3.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_binary.class b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_binary.class new file mode 100644 index 00000000000..daae1fcce6c Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_binary.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_binary.java b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_binary.java new file mode 100644 index 00000000000..727d93c7054 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_binary.java @@ -0,0 +1,13 @@ +public class Test_binary +{ + public static void main(Boolean b) + { + String s = Integer.toString(Integer.MIN_VALUE, 2); + if (b) { + assert(s.equals("-10000000000000000000000000000000")); + } + else { + assert(!s.equals("-10000000000000000000000000000000")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_hex.class b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_hex.class new file mode 100644 index 00000000000..b568e5cab6c Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_hex.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_hex.java b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_hex.java new file mode 100644 index 00000000000..e15bcc1d9e2 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_hex.java @@ -0,0 +1,13 @@ +public class Test_hex +{ + public static void main(Boolean b) + { + String s = Integer.toString(Integer.MIN_VALUE, 16); + if (b) { + assert(s.equals("-80000000")); + } + else { + assert(!s.equals("-80000000")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_octal.class b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_octal.class new file mode 100644 index 00000000000..f8830a84878 Binary files /dev/null and b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_octal.class differ diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_octal.java b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_octal.java new file mode 100644 index 00000000000..a6b3f53227b --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/Test_octal.java @@ -0,0 +1,13 @@ +public class Test_octal +{ + public static void main(Boolean b) + { + String s = Integer.toString(Integer.MIN_VALUE, 8); + if (b) { + assert(s.equals("-20000000000")); + } + else { + assert(!s.equals("-20000000000")); + } + } +} diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/test_binary.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/test_binary.desc new file mode 100644 index 00000000000..d8959c329a7 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/test_binary.desc @@ -0,0 +1,8 @@ +KNOWNBUG +Test_binary.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/test_hex.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/test_hex.desc new file mode 100644 index 00000000000..324cd50051e --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/test_hex.desc @@ -0,0 +1,8 @@ +KNOWNBUG +Test_hex.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/test_octal.desc b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/test_octal.desc new file mode 100644 index 00000000000..ce0a5607186 --- /dev/null +++ b/regression/strings-smoke-tests/java_int_to_string_with_radix_knownbug/test_octal.desc @@ -0,0 +1,8 @@ +KNOWNBUG +Test_octal.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_intern/test.desc b/regression/strings-smoke-tests/java_intern/test.desc new file mode 100644 index 00000000000..c8d0eea43bd --- /dev/null +++ b/regression/strings-smoke-tests/java_intern/test.desc @@ -0,0 +1,7 @@ +CORE +test_intern.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 9.* SUCCESS$ +-- diff --git a/regression/strings-smoke-tests/java_intern/test_intern.class b/regression/strings-smoke-tests/java_intern/test_intern.class new file mode 100644 index 00000000000..894615c0a9a Binary files /dev/null and b/regression/strings-smoke-tests/java_intern/test_intern.class differ diff --git a/regression/strings-smoke-tests/java_intern/test_intern.java b/regression/strings-smoke-tests/java_intern/test_intern.java new file mode 100644 index 00000000000..7f9d5283597 --- /dev/null +++ b/regression/strings-smoke-tests/java_intern/test_intern.java @@ -0,0 +1,11 @@ +public class test_intern +{ + public static void main(/*String[] argv*/) + { + String s1 = "abc"; + String s3 = "abc"; + String x = s1.intern(); + String y = s3.intern(); + assert(x == y); + } +} diff --git a/regression/strings-smoke-tests/java_last_index_of/test.desc b/regression/strings-smoke-tests/java_last_index_of/test.desc new file mode 100644 index 00000000000..381078254cd --- /dev/null +++ b/regression/strings-smoke-tests/java_last_index_of/test.desc @@ -0,0 +1,8 @@ +CORE +test_last_index_of.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 9.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_last_index_of/test_last_index_of.class b/regression/strings-smoke-tests/java_last_index_of/test_last_index_of.class new file mode 100644 index 00000000000..26f5ec3a7c3 Binary files /dev/null and b/regression/strings-smoke-tests/java_last_index_of/test_last_index_of.class differ diff --git a/regression/strings-smoke-tests/java_last_index_of/test_last_index_of.java b/regression/strings-smoke-tests/java_last_index_of/test_last_index_of.java new file mode 100644 index 00000000000..59b9f5ab36d --- /dev/null +++ b/regression/strings-smoke-tests/java_last_index_of/test_last_index_of.java @@ -0,0 +1,11 @@ +public class test_last_index_of +{ + public static void main(/*String[] argv*/) + { + String s = "abcab"; + String ab = "ab"; + int i = s.lastIndexOf(ab); + assert(i == 3); + assert(i == 1); + } +} diff --git a/regression/strings-smoke-tests/java_last_index_of2/test.desc b/regression/strings-smoke-tests/java_last_index_of2/test.desc new file mode 100644 index 00000000000..5348cbe7fce --- /dev/null +++ b/regression/strings-smoke-tests/java_last_index_of2/test.desc @@ -0,0 +1,7 @@ +CORE +test_last_index_of2.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_last_index_of2/test_last_index_of2.class b/regression/strings-smoke-tests/java_last_index_of2/test_last_index_of2.class new file mode 100644 index 00000000000..9c82a704075 Binary files /dev/null and b/regression/strings-smoke-tests/java_last_index_of2/test_last_index_of2.class differ diff --git a/regression/strings-smoke-tests/java_last_index_of2/test_last_index_of2.java b/regression/strings-smoke-tests/java_last_index_of2/test_last_index_of2.java new file mode 100644 index 00000000000..f533835fda4 --- /dev/null +++ b/regression/strings-smoke-tests/java_last_index_of2/test_last_index_of2.java @@ -0,0 +1,8 @@ +public class test_last_index_of2 +{ + public static void main(String[] args) + { + String letters = "automatictestcasegenerationatdiffblue"; + assert(letters.lastIndexOf("diffblue", 25)==-1); + } +} diff --git a/regression/strings-smoke-tests/java_last_index_of_char/test.desc b/regression/strings-smoke-tests/java_last_index_of_char/test.desc new file mode 100644 index 00000000000..aa88fc5f6ef --- /dev/null +++ b/regression/strings-smoke-tests/java_last_index_of_char/test.desc @@ -0,0 +1,7 @@ +CORE +test_last_index_of_char.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_last_index_of_char/test_last_index_of_char.class b/regression/strings-smoke-tests/java_last_index_of_char/test_last_index_of_char.class new file mode 100644 index 00000000000..388717f4261 Binary files /dev/null and b/regression/strings-smoke-tests/java_last_index_of_char/test_last_index_of_char.class differ diff --git a/regression/strings-smoke-tests/java_last_index_of_char/test_last_index_of_char.java b/regression/strings-smoke-tests/java_last_index_of_char/test_last_index_of_char.java new file mode 100644 index 00000000000..029d59c9d68 --- /dev/null +++ b/regression/strings-smoke-tests/java_last_index_of_char/test_last_index_of_char.java @@ -0,0 +1,9 @@ +public class test_last_index_of_char +{ + public static void main(/*String[] argv*/) + { + String s = "abcab"; + int n = s.lastIndexOf('a'); + assert(n == 3); + } +} diff --git a/regression/strings-smoke-tests/java_length/test.desc b/regression/strings-smoke-tests/java_length/test.desc new file mode 100644 index 00000000000..60c360eecb8 --- /dev/null +++ b/regression/strings-smoke-tests/java_length/test.desc @@ -0,0 +1,9 @@ +CORE +test_length.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +\[.*assertion\.1\] .* line 7 .*: SUCCESS +\[.*assertion\.2\] .* line 8 .*: FAILURE +-- diff --git a/regression/strings-smoke-tests/java_length/test_length.class b/regression/strings-smoke-tests/java_length/test_length.class new file mode 100644 index 00000000000..9a1bd297761 Binary files /dev/null and b/regression/strings-smoke-tests/java_length/test_length.class differ diff --git a/regression/strings-smoke-tests/java_length/test_length.java b/regression/strings-smoke-tests/java_length/test_length.java new file mode 100644 index 00000000000..620bdc448e9 --- /dev/null +++ b/regression/strings-smoke-tests/java_length/test_length.java @@ -0,0 +1,10 @@ +public class test_length +{ + public static void main(/*String[] argv*/) + { + String s = new String("Abc"); + int l = s.length(); + assert(l == 3); + assert(l != 3); + } +} diff --git a/regression/strings-smoke-tests/java_length2/test.class b/regression/strings-smoke-tests/java_length2/test.class new file mode 100644 index 00000000000..8e9d3161fb5 Binary files /dev/null and b/regression/strings-smoke-tests/java_length2/test.class differ diff --git a/regression/strings-smoke-tests/java_length2/test.desc b/regression/strings-smoke-tests/java_length2/test.desc new file mode 100644 index 00000000000..e473b51d950 --- /dev/null +++ b/regression/strings-smoke-tests/java_length2/test.desc @@ -0,0 +1,10 @@ +FUTURE +test.class +--refine-strings --function test.check +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +This test currently fails because we do not handle the case where the argument +'s' is null. This should be handled in the String model. +The issue number for that is: diffblue/test-gen#500 diff --git a/regression/strings-smoke-tests/java_length2/test.java b/regression/strings-smoke-tests/java_length2/test.java new file mode 100644 index 00000000000..e88464536e0 --- /dev/null +++ b/regression/strings-smoke-tests/java_length2/test.java @@ -0,0 +1,12 @@ +public class test +{ + public static int check(String s) + { + if(s.equals("abc")){ + assert s.length() == 3; + return 0; + } + return 1; + } +} + diff --git a/regression/strings-smoke-tests/java_long_to_string/Test1.class b/regression/strings-smoke-tests/java_long_to_string/Test1.class new file mode 100644 index 00000000000..5da6b2c60d9 Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string/Test1.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string/Test1.java b/regression/strings-smoke-tests/java_long_to_string/Test1.java new file mode 100644 index 00000000000..87d68654663 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string/Test1.java @@ -0,0 +1,13 @@ +public class Test1 +{ + public static void main(Boolean b) + { + String s = Long.toString(12); + if (b) { + assert(s.equals("12")); + } + else { + assert(!s.equals("12")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string/Test2.class b/regression/strings-smoke-tests/java_long_to_string/Test2.class new file mode 100644 index 00000000000..64f5f9c1d9b Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string/Test2.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string/Test2.java b/regression/strings-smoke-tests/java_long_to_string/Test2.java new file mode 100644 index 00000000000..501197a16cb --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string/Test2.java @@ -0,0 +1,13 @@ +public class Test2 +{ + public static void main(Boolean b) + { + String s = Long.toString(-23); + if (b) { + assert(s.equals("-23")); + } + else { + assert(!s.equals("-23")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string/Test3.class b/regression/strings-smoke-tests/java_long_to_string/Test3.class new file mode 100644 index 00000000000..b191c01a7e2 Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string/Test3.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string/Test3.java b/regression/strings-smoke-tests/java_long_to_string/Test3.java new file mode 100644 index 00000000000..9e99a48986f --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string/Test3.java @@ -0,0 +1,13 @@ +public class Test3 +{ + public static void main(Boolean b) + { + String s = Long.toString(Long.MAX_VALUE); + if (b) { + assert(s.equals("9223372036854775807")); + } + else { + assert(!s.equals("9223372036854775807")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string/Test4.class b/regression/strings-smoke-tests/java_long_to_string/Test4.class new file mode 100644 index 00000000000..53b23e0aaac Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string/Test4.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string/Test4.java b/regression/strings-smoke-tests/java_long_to_string/Test4.java new file mode 100644 index 00000000000..0436b667c4e --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string/Test4.java @@ -0,0 +1,13 @@ +public class Test4 +{ + public static void main(Boolean b) + { + String s = Long.toString(Long.MIN_VALUE + 1); + if (b) { + assert(s.equals("-9223372036854775807")); + } + else { + assert(!s.equals("-9223372036854775807")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string/Test5.class b/regression/strings-smoke-tests/java_long_to_string/Test5.class new file mode 100644 index 00000000000..68231cf010d Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string/Test5.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string/Test5.java b/regression/strings-smoke-tests/java_long_to_string/Test5.java new file mode 100644 index 00000000000..ca50cb68168 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string/Test5.java @@ -0,0 +1,13 @@ +public class Test5 +{ + public static void main(Boolean b) + { + String s = Long.toString(0); + if (b) { + assert(s.equals("0")); + } + else { + assert(!s.equals("0")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string/test1.desc b/regression/strings-smoke-tests/java_long_to_string/test1.desc new file mode 100644 index 00000000000..88f39d5eb12 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string/test1.desc @@ -0,0 +1,8 @@ +CORE +Test1.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string/test2.desc b/regression/strings-smoke-tests/java_long_to_string/test2.desc new file mode 100644 index 00000000000..a4f7d628251 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string/test2.desc @@ -0,0 +1,8 @@ +THOROUGH +Test2.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string/test3.desc b/regression/strings-smoke-tests/java_long_to_string/test3.desc new file mode 100644 index 00000000000..5e96ef2ae6d --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string/test3.desc @@ -0,0 +1,8 @@ +THOROUGH +Test3.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string/test4.desc b/regression/strings-smoke-tests/java_long_to_string/test4.desc new file mode 100644 index 00000000000..aa12d7732f1 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string/test4.desc @@ -0,0 +1,8 @@ +THOROUGH +Test4.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string/test5.desc b/regression/strings-smoke-tests/java_long_to_string/test5.desc new file mode 100644 index 00000000000..08531bc36e0 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string/test5.desc @@ -0,0 +1,8 @@ +CORE +Test5.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary1.class b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary1.class new file mode 100644 index 00000000000..1e4aab76f11 Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary1.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary1.java b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary1.java new file mode 100644 index 00000000000..24db3c01147 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary1.java @@ -0,0 +1,13 @@ +public class Test_binary1 +{ + public static void main(Boolean b) + { + String s = Long.toString(-23, 2); + if (b) { + assert(s.equals("-10111")); + } + else { + assert(!s.equals("-10111")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary2.class b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary2.class new file mode 100644 index 00000000000..83a7057d5d8 Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary2.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary2.java b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary2.java new file mode 100644 index 00000000000..cb8d22d374d --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary2.java @@ -0,0 +1,13 @@ +public class Test_binary2 +{ + public static void main(Boolean b) + { + String s = Long.toString(Long.MAX_VALUE, 2); + if (b) { + assert(s.equals("111111111111111111111111111111111111111111111111111111111111111")); + } + else { + assert(!s.equals("111111111111111111111111111111111111111111111111111111111111111")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary3.class b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary3.class new file mode 100644 index 00000000000..aa17d8f76b6 Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary3.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary3.java b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary3.java new file mode 100644 index 00000000000..0e4da6d5a32 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_binary3.java @@ -0,0 +1,13 @@ +public class Test_binary3 +{ + public static void main(Boolean b) + { + String s = Long.toString(Long.MIN_VALUE + 1, 2); + if (b) { + assert(s.equals("-111111111111111111111111111111111111111111111111111111111111111")); + } + else { + assert(!s.equals("-111111111111111111111111111111111111111111111111111111111111111")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_decimal.class b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_decimal.class new file mode 100644 index 00000000000..f69a22e0e1c Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_decimal.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_decimal.java b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_decimal.java new file mode 100644 index 00000000000..1d9c9995d9b --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_decimal.java @@ -0,0 +1,13 @@ +public class Test_decimal +{ + public static void main(Boolean b) + { + String s = Long.toString(-27, 10); + if (b) { + assert(s.equals("-27")); + } + else { + assert(!s.equals("-27")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex1.class b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex1.class new file mode 100644 index 00000000000..5b4bdc2e5f3 Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex1.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex1.java b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex1.java new file mode 100644 index 00000000000..87fcd77c908 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex1.java @@ -0,0 +1,13 @@ +public class Test_hex1 +{ + public static void main(Boolean b) + { + String s = Long.toString(-27, 16); + if (b) { + assert(s.equals("-1b")); + } + else { + assert(!s.equals("-1b")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex2.class b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex2.class new file mode 100644 index 00000000000..c67d97d4ae1 Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex2.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex2.java b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex2.java new file mode 100644 index 00000000000..a337367ec9e --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex2.java @@ -0,0 +1,13 @@ +public class Test_hex2 +{ + public static void main(Boolean b) + { + String s = Long.toString(Long.MAX_VALUE, 16); + if (b) { + assert(s.equals("7fffffffffffffff")); + } + else { + assert(!s.equals("7fffffffffffffff")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex3.class b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex3.class new file mode 100644 index 00000000000..e8439e883d8 Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex3.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex3.java b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex3.java new file mode 100644 index 00000000000..5803911a06c --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_hex3.java @@ -0,0 +1,13 @@ +public class Test_hex3 +{ + public static void main(Boolean b) + { + String s = Long.toString(Long.MIN_VALUE + 1, 16); + if (b) { + assert(s.equals("-7fffffffffffffff")); + } + else { + assert(!s.equals("-7fffffffffffffff")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal1.class b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal1.class new file mode 100644 index 00000000000..964eec8439c Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal1.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal1.java b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal1.java new file mode 100644 index 00000000000..a39f0877692 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal1.java @@ -0,0 +1,13 @@ +public class Test_octal1 +{ + public static void main(Boolean b) + { + String s = Long.toString(-23, 8); + if (b) { + assert(s.equals("-27")); + } + else { + assert(!s.equals("-27")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal2.class b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal2.class new file mode 100644 index 00000000000..d71ea9a161a Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal2.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal2.java b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal2.java new file mode 100644 index 00000000000..abe3c9b5379 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal2.java @@ -0,0 +1,13 @@ +public class Test_octal2 +{ + public static void main(Boolean b) + { + String s = Long.toString(Long.MAX_VALUE, 8); + if (b) { + assert(s.equals("777777777777777777777")); + } + else { + assert(!s.equals("777777777777777777777")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal3.class b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal3.class new file mode 100644 index 00000000000..15b78163b62 Binary files /dev/null and b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal3.class differ diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal3.java b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal3.java new file mode 100644 index 00000000000..ef675fa7946 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/Test_octal3.java @@ -0,0 +1,13 @@ +public class Test_octal3 +{ + public static void main(Boolean b) + { + String s = Long.toString(Long.MIN_VALUE + 1, 8); + if (b) { + assert(s.equals("-777777777777777777777")); + } + else { + assert(!s.equals("-777777777777777777777")); + } + } +} diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/test_binary1.desc b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_binary1.desc new file mode 100644 index 00000000000..bfdddd48786 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_binary1.desc @@ -0,0 +1,8 @@ +THOROUGH +Test_binary1.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/test_binary2.desc b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_binary2.desc new file mode 100644 index 00000000000..7cabc082721 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_binary2.desc @@ -0,0 +1,8 @@ +THOROUGH +Test_binary2.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/test_binary3.desc b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_binary3.desc new file mode 100644 index 00000000000..cd10cf15647 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_binary3.desc @@ -0,0 +1,8 @@ +THOROUGH +Test_binary3.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/test_decimal.desc b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_decimal.desc new file mode 100644 index 00000000000..7226334925f --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_decimal.desc @@ -0,0 +1,8 @@ +CORE +Test_decimal.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/test_hex1.desc b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_hex1.desc new file mode 100644 index 00000000000..48d705734ac --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_hex1.desc @@ -0,0 +1,8 @@ +CORE +Test_hex1.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/test_hex2.desc b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_hex2.desc new file mode 100644 index 00000000000..d21d067e620 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_hex2.desc @@ -0,0 +1,8 @@ +CORE +Test_hex2.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/test_hex3.desc b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_hex3.desc new file mode 100644 index 00000000000..0c5ff51b802 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_hex3.desc @@ -0,0 +1,8 @@ +CORE +Test_hex3.class +--refine-strings --string-max-length 100 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/test_octal1.desc b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_octal1.desc new file mode 100644 index 00000000000..8188ebc0ee9 --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_octal1.desc @@ -0,0 +1,8 @@ +CORE +Test_octal1.class +--refine-strings --string-max-length 100 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/test_octal2.desc b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_octal2.desc new file mode 100644 index 00000000000..3884ae1fa9f --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_octal2.desc @@ -0,0 +1,8 @@ +CORE +Test_octal2.class +--refine-strings --string-max-length 100 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_long_to_string_with_radix/test_octal3.desc b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_octal3.desc new file mode 100644 index 00000000000..527357b801e --- /dev/null +++ b/regression/strings-smoke-tests/java_long_to_string_with_radix/test_octal3.desc @@ -0,0 +1,8 @@ +CORE +Test_octal3.class +--refine-strings --string-max-length 100 +^EXIT=10$ +^SIGNAL=0$ +assertion.* line 7 .* SUCCESS$ +assertion.* line 10 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_object_allocation/test.class b/regression/strings-smoke-tests/java_object_allocation/test.class new file mode 100644 index 00000000000..fce0d46166d Binary files /dev/null and b/regression/strings-smoke-tests/java_object_allocation/test.class differ diff --git a/regression/strings-smoke-tests/java_object_allocation/test.desc b/regression/strings-smoke-tests/java_object_allocation/test.desc new file mode 100644 index 00000000000..fe10bf71202 --- /dev/null +++ b/regression/strings-smoke-tests/java_object_allocation/test.desc @@ -0,0 +1,9 @@ +CORE +test.class +--refine-strings --show-goto-functions +// Enable multi-line checking +activate-multi-line-match +EXIT=0 +SIGNAL=0 +char \([*]malloc_site.[0-9]*\)\[INFINITY\(\)\];\n\s*//.*\n\s*malloc_site.[0-9]*\s*=\s*MALLOC\(char \[INFINITY\(\)\], 2ull? \* INFINITY\(\)\);\n\s*//.*\n\s*cprover_string_array.[0-9]*\s*=\s*malloc_site.\d*; +-- diff --git a/regression/strings-smoke-tests/java_object_allocation/test.java b/regression/strings-smoke-tests/java_object_allocation/test.java new file mode 100644 index 00000000000..9122dd4dfaf --- /dev/null +++ b/regression/strings-smoke-tests/java_object_allocation/test.java @@ -0,0 +1,9 @@ +public class test +{ + public static void check() + { + String s = new String("foo"); + String t = new String("bar"); + String u = s.concat(t); + } +} diff --git a/regression/strings-smoke-tests/java_parseint/Test1.class b/regression/strings-smoke-tests/java_parseint/Test1.class new file mode 100644 index 00000000000..9394e390d14 Binary files /dev/null and b/regression/strings-smoke-tests/java_parseint/Test1.class differ diff --git a/regression/strings-smoke-tests/java_parseint/Test1.java b/regression/strings-smoke-tests/java_parseint/Test1.java new file mode 100644 index 00000000000..13041ba4f85 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint/Test1.java @@ -0,0 +1,14 @@ +public class Test1 +{ + public static void main(Boolean b) + { + String twelve = new String("12"); + int parsed1 = Integer.parseInt(twelve); + if (b) { + assert(parsed1 == 12); + } + else { + assert(parsed1 != 12); + } + } +} diff --git a/regression/strings-smoke-tests/java_parseint/Test2.class b/regression/strings-smoke-tests/java_parseint/Test2.class new file mode 100644 index 00000000000..8c1238fe288 Binary files /dev/null and b/regression/strings-smoke-tests/java_parseint/Test2.class differ diff --git a/regression/strings-smoke-tests/java_parseint/Test2.java b/regression/strings-smoke-tests/java_parseint/Test2.java new file mode 100644 index 00000000000..38d17372ed1 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint/Test2.java @@ -0,0 +1,15 @@ +public class Test2 +{ + public static void main(Boolean b) + { + // 2^31-1, max value of Integer + String max_int = new String("2147483647"); + int parsed2 = Integer.parseInt(max_int); + if (b) { + assert(parsed2 == 2147483647); + } + else{ + assert(parsed2 != 2147483647); + } + } +} diff --git a/regression/strings-smoke-tests/java_parseint/Test3.class b/regression/strings-smoke-tests/java_parseint/Test3.class new file mode 100644 index 00000000000..c3b2e364a6c Binary files /dev/null and b/regression/strings-smoke-tests/java_parseint/Test3.class differ diff --git a/regression/strings-smoke-tests/java_parseint/Test3.java b/regression/strings-smoke-tests/java_parseint/Test3.java new file mode 100644 index 00000000000..946e63adc12 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint/Test3.java @@ -0,0 +1,10 @@ +public class Test3 +{ + public static void main(String input_string) + { + int parsed1 = Integer.parseInt(input_string); + if (parsed1 == 2) { + assert(false); + } + } +} diff --git a/regression/strings-smoke-tests/java_parseint/test1.desc b/regression/strings-smoke-tests/java_parseint/test1.desc new file mode 100644 index 00000000000..5d48a0d6aad --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint/test1.desc @@ -0,0 +1,7 @@ +CORE +Test1.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 11.* FAILURE$ diff --git a/regression/strings-smoke-tests/java_parseint/test2.desc b/regression/strings-smoke-tests/java_parseint/test2.desc new file mode 100644 index 00000000000..16f6de423bf --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint/test2.desc @@ -0,0 +1,7 @@ +CORE +Test2.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 9.* SUCCESS$ +^\[.*assertion.2\].* line 12.* FAILURE$ diff --git a/regression/strings-smoke-tests/java_parseint/test3.desc b/regression/strings-smoke-tests/java_parseint/test3.desc new file mode 100644 index 00000000000..bb643427dd2 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint/test3.desc @@ -0,0 +1,6 @@ +CORE +Test3.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 7.* FAILURE$ diff --git a/regression/strings-smoke-tests/java_parseint_knownbug/Test.class b/regression/strings-smoke-tests/java_parseint_knownbug/Test.class new file mode 100644 index 00000000000..cdeb074b580 Binary files /dev/null and b/regression/strings-smoke-tests/java_parseint_knownbug/Test.class differ diff --git a/regression/strings-smoke-tests/java_parseint_knownbug/Test.java b/regression/strings-smoke-tests/java_parseint_knownbug/Test.java new file mode 100644 index 00000000000..92d0ababf6c --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_knownbug/Test.java @@ -0,0 +1,16 @@ +public class Test +{ + public static void main(Boolean b) + { + // -2^31, min value of Integer, and longest string we could have without + // leading zeroes + String min_int = new String("-2147483648"); + int parsed3 = Integer.parseInt(min_int); + if (b) { + assert(parsed3 == -2147483648); + } + else { + assert(parsed3 != -2147483648); + } + } +} diff --git a/regression/strings-smoke-tests/java_parseint_knownbug/test.desc b/regression/strings-smoke-tests/java_parseint_knownbug/test.desc new file mode 100644 index 00000000000..76feb55c355 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_knownbug/test.desc @@ -0,0 +1,10 @@ +KNOWNBUG +Test.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 10.* SUCCESS$ +^\[.*assertion.2\].* line 13.* FAILURE$ +-- +-- +Issue #664 is about turning these tests on diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test1.class b/regression/strings-smoke-tests/java_parseint_with_radix/Test1.class new file mode 100644 index 00000000000..357e4e8aa62 Binary files /dev/null and b/regression/strings-smoke-tests/java_parseint_with_radix/Test1.class differ diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test1.java b/regression/strings-smoke-tests/java_parseint_with_radix/Test1.java new file mode 100644 index 00000000000..d909b13c746 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/Test1.java @@ -0,0 +1,14 @@ +public class Test1 +{ + public static void main(Boolean b) + { + String str1 = new String("F"); + int parsed1 = Integer.parseInt(str1, 16); + if (b) { + assert(parsed1 == 15); + } + else { + assert(parsed1 != 15); + } + } +} diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test2.class b/regression/strings-smoke-tests/java_parseint_with_radix/Test2.class new file mode 100644 index 00000000000..56be994524e Binary files /dev/null and b/regression/strings-smoke-tests/java_parseint_with_radix/Test2.class differ diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test2.java b/regression/strings-smoke-tests/java_parseint_with_radix/Test2.java new file mode 100644 index 00000000000..5a67b9f22b8 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/Test2.java @@ -0,0 +1,14 @@ +public class Test2 +{ + public static void main(Boolean b) + { + String str2 = new String("123"); + int parsed2 = Integer.parseInt(str2, 10); + if (b) { + assert(parsed2 == 123); + } + else { + assert(parsed2 != 123); + } + } +} diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test3.class b/regression/strings-smoke-tests/java_parseint_with_radix/Test3.class new file mode 100644 index 00000000000..6c6390c1dbb Binary files /dev/null and b/regression/strings-smoke-tests/java_parseint_with_radix/Test3.class differ diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test3.java b/regression/strings-smoke-tests/java_parseint_with_radix/Test3.java new file mode 100644 index 00000000000..1ad62071461 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/Test3.java @@ -0,0 +1,14 @@ +public class Test3 +{ + public static void main(Boolean b) + { + String str3 = new String("77"); + int parsed3 = Integer.parseInt(str3, 8); + if (b) { + assert(parsed3 == 63); + } + else { + assert(parsed3 != 63); + } + } +} diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test4.class b/regression/strings-smoke-tests/java_parseint_with_radix/Test4.class new file mode 100644 index 00000000000..5a6d40acd40 Binary files /dev/null and b/regression/strings-smoke-tests/java_parseint_with_radix/Test4.class differ diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test4.java b/regression/strings-smoke-tests/java_parseint_with_radix/Test4.java new file mode 100644 index 00000000000..06e69e10938 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/Test4.java @@ -0,0 +1,14 @@ +public class Test4 +{ + public static void main(Boolean b) + { + String str4 = new String("-101"); + int parsed4 = Integer.parseInt(str4, 2); + if (b) { + assert(parsed4 == -5); + } + else { + assert(parsed4 != -5); + } + } +} diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test5.class b/regression/strings-smoke-tests/java_parseint_with_radix/Test5.class new file mode 100644 index 00000000000..06d65ec696e Binary files /dev/null and b/regression/strings-smoke-tests/java_parseint_with_radix/Test5.class differ diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test5.java b/regression/strings-smoke-tests/java_parseint_with_radix/Test5.java new file mode 100644 index 00000000000..0769189ce4c --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/Test5.java @@ -0,0 +1,14 @@ +public class Test5 +{ + public static void main(Boolean b) + { + String str5 = new String("00aB"); + int parsed5 = Integer.parseInt(str5, 16); + if (b) { + assert(parsed5 == 171); + } + else { + assert(parsed5 != 171); + } + } +} diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test6.class b/regression/strings-smoke-tests/java_parseint_with_radix/Test6.class new file mode 100644 index 00000000000..1309be8b84f Binary files /dev/null and b/regression/strings-smoke-tests/java_parseint_with_radix/Test6.class differ diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/Test6.java b/regression/strings-smoke-tests/java_parseint_with_radix/Test6.java new file mode 100644 index 00000000000..73dbc1703e7 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/Test6.java @@ -0,0 +1,15 @@ +public class Test6 +{ + public static void main(Boolean b) + { + // 2^31-1, max value of Integer + String str1 = new String("7FFFFFFF"); + int parsed1 = Integer.parseInt(str1, 16); + if (b) { + assert(parsed1 == 2147483647); + } + else{ + assert(parsed1 != 2147483647); + } + } +} diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/test1.desc b/regression/strings-smoke-tests/java_parseint_with_radix/test1.desc new file mode 100644 index 00000000000..0ab380c3cde --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/test1.desc @@ -0,0 +1,8 @@ +CORE +Test1.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 11.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/test2.desc b/regression/strings-smoke-tests/java_parseint_with_radix/test2.desc new file mode 100644 index 00000000000..0b6a1a2dd97 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/test2.desc @@ -0,0 +1,8 @@ +CORE +Test2.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 11.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/test3.desc b/regression/strings-smoke-tests/java_parseint_with_radix/test3.desc new file mode 100644 index 00000000000..7b68147d90b --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/test3.desc @@ -0,0 +1,8 @@ +CORE +Test3.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 11.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/test4.desc b/regression/strings-smoke-tests/java_parseint_with_radix/test4.desc new file mode 100644 index 00000000000..8c775500aaa --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/test4.desc @@ -0,0 +1,8 @@ +CORE +Test4.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 11.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/test5.desc b/regression/strings-smoke-tests/java_parseint_with_radix/test5.desc new file mode 100644 index 00000000000..2b0338b1c0c --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/test5.desc @@ -0,0 +1,8 @@ +CORE +Test5.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 11.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_parseint_with_radix/test6.desc b/regression/strings-smoke-tests/java_parseint_with_radix/test6.desc new file mode 100644 index 00000000000..71b3d8423e4 --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix/test6.desc @@ -0,0 +1,9 @@ +CORE +Test6.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 9.* SUCCESS$ +^\[.*assertion.2\].* line 12.* FAILURE$ +-- +-- diff --git a/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/Test.class b/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/Test.class new file mode 100644 index 00000000000..5e30e2f707e Binary files /dev/null and b/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/Test.class differ diff --git a/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/Test.java b/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/Test.java new file mode 100644 index 00000000000..6967518352e --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/Test.java @@ -0,0 +1,15 @@ +public class Test +{ + public static void main(Boolean b) + { + // -2^31, min value of Integer, and longest string we could have + String str = new String("-100000000000000000000000000000000"); + int parsed = Integer.parseInt(str, 2); + if (b) { + assert(parsed == -2147483648); + } + else { + assert(parsed != -2147483648); + } + } +} diff --git a/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/output b/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/output new file mode 100644 index 00000000000..dfb2f48b2cf --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/output @@ -0,0 +1,164 @@ +CBMC version 5.7 64-bit x86_64 linux +Parsing test_parseint_with_radix.class +Java main class: test_parseint_with_radix +Converting +Generating GOTO Program +Adding CPROVER library (x86_64) +Removal of function pointers and virtual functions +Partial Inlining +Generic Property Instrumentation +Starting Bounded Model Checking +Unwinding loop __CPROVER__start.0 iteration 1 thread 0 +Unwinding loop __CPROVER__start.0 iteration 2 thread 0 +Unwinding loop __CPROVER__start.0 iteration 3 thread 0 +Unwinding loop __CPROVER__start.0 iteration 4 thread 0 +Unwinding loop __CPROVER__start.0 iteration 5 thread 0 +Unwinding recursion java::test_parseint_with_radix::clinit_wrapper iteration 1 +Unwinding recursion java::test_parseint_with_radix::clinit_wrapper iteration 1 +size of program expression: 530 steps +simple slicing removed 50 assignments +Generated 68 VCC(s), 9 remaining after simplification +Passing problem to string refinement loop with MiniSAT 2.2.1 without simplifier +converting SSA +Running string refinement loop with MiniSAT 2.2.1 without simplifier +BV-Refinement: post-processing +BV-Refinement: iteration 1 +54337 variables, 39117 clauses +SAT checker inconsistent: instance is UNSATISFIABLE +BV-Refinement: got UNSAT, and the proof passes => UNSAT +Total iterations: 1 +BV-Refinement: post-processing +BV-Refinement: iteration 1 +54337 variables, 39117 clauses +SAT checker inconsistent: instance is UNSATISFIABLE +BV-Refinement: got UNSAT, and the proof passes => UNSAT +Total iterations: 1 +Runtime decision procedure: 0.386s + +** Results: +[pointer_dereference.1] reference is null in *stub_ignored_arg1: SUCCESS +[pointer_dereference.2] reference is null in *stub_ignored_arg1->data: SUCCESS +[pointer_dereference.3] reference is null in *cprover_string_array$7: SUCCESS +[pointer_dereference.4] reference is null in *this: SUCCESS +[pointer_dereference.5] reference is null in *stub_ignored_arg0: SUCCESS +[pointer_dereference.6] reference is null in *stub_ignored_arg0->data: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.1] reference is null in *args: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.2] reference is null in *new_tmp0: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.3] reference is null in *new_tmp2: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.assertion.1] assertion at file test_parseint_with_radix.java line 9 function java::test_parseint_with_radix.main:([Ljava/lang/String;)V bytecode-index 20: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.null-pointer-exception.1] Throw null: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.4] reference is null in *new_tmp3: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.assertion.2] assertion at file test_parseint_with_radix.java line 10 function java::test_parseint_with_radix.main:([Ljava/lang/String;)V bytecode-index 29: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.null-pointer-exception.2] Throw null: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.5] reference is null in *args: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.6] reference is null in *new_tmp4: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.7] reference is null in *new_tmp6: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.assertion.3] assertion at file test_parseint_with_radix.java line 16 function java::test_parseint_with_radix.main:([Ljava/lang/String;)V bytecode-index 52: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.null-pointer-exception.3] Throw null: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.8] reference is null in *new_tmp7: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.assertion.4] assertion at file test_parseint_with_radix.java line 17 function java::test_parseint_with_radix.main:([Ljava/lang/String;)V bytecode-index 61: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.null-pointer-exception.4] Throw null: SUCCESS +[pointer_dereference.7] reference is null in *this: SUCCESS +[array-create-negative-size.1] Array size should be >= 0: SUCCESS +[pointer_dereference.8] reference is null in *cloned_array: SUCCESS +[pointer_dereference.9] reference is null in *cloned_array: SUCCESS +[pointer_dereference.10] reference is null in *this: SUCCESS +[pointer_dereference.11] reference is null in *cloned_array: SUCCESS +[pointer_dereference.12] reference is null in *this: SUCCESS +[pointer_dereference.13] reference is null in *cloned_array: SUCCESS +[pointer_dereference.14] reference is null in cloned_array->data[index]: SUCCESS +[pointer_dereference.15] reference is null in this->data[index]: SUCCESS +[pointer_dereference.16] reference is null in *this: SUCCESS +[array-create-negative-size.2] Array size should be >= 0: SUCCESS +[pointer_dereference.17] reference is null in *cloned_array: SUCCESS +[pointer_dereference.18] reference is null in *cloned_array: SUCCESS +[pointer_dereference.19] reference is null in *this: SUCCESS +[pointer_dereference.20] reference is null in *cloned_array: SUCCESS +[pointer_dereference.21] reference is null in *this: SUCCESS +[pointer_dereference.22] reference is null in *cloned_array: SUCCESS +[pointer_dereference.23] reference is null in cloned_array->data[index]: SUCCESS +[pointer_dereference.24] reference is null in this->data[index]: SUCCESS +[pointer_dereference.25] reference is null in *this: SUCCESS +[array-create-negative-size.3] Array size should be >= 0: SUCCESS +[pointer_dereference.26] reference is null in *cloned_array: SUCCESS +[pointer_dereference.27] reference is null in *cloned_array: SUCCESS +[pointer_dereference.28] reference is null in *this: SUCCESS +[pointer_dereference.29] reference is null in *cloned_array: SUCCESS +[pointer_dereference.30] reference is null in *this: SUCCESS +[pointer_dereference.31] reference is null in *cloned_array: SUCCESS +[pointer_dereference.32] reference is null in cloned_array->data[index]: SUCCESS +[pointer_dereference.33] reference is null in this->data[index]: SUCCESS +[pointer_dereference.34] reference is null in *this: SUCCESS +[array-create-negative-size.4] Array size should be >= 0: SUCCESS +[pointer_dereference.35] reference is null in *cloned_array: SUCCESS +[pointer_dereference.36] reference is null in *cloned_array: SUCCESS +[pointer_dereference.37] reference is null in *this: SUCCESS +[pointer_dereference.38] reference is null in *cloned_array: SUCCESS +[pointer_dereference.39] reference is null in *this: SUCCESS +[pointer_dereference.40] reference is null in *cloned_array: SUCCESS +[pointer_dereference.41] reference is null in cloned_array->data[index]: SUCCESS +[pointer_dereference.42] reference is null in this->data[index]: SUCCESS +[pointer_dereference.43] reference is null in *this: SUCCESS +[array-create-negative-size.5] Array size should be >= 0: SUCCESS +[pointer_dereference.44] reference is null in *cloned_array: SUCCESS +[pointer_dereference.45] reference is null in *cloned_array: SUCCESS +[pointer_dereference.46] reference is null in *this: SUCCESS +[pointer_dereference.47] reference is null in *cloned_array: SUCCESS +[pointer_dereference.48] reference is null in *this: SUCCESS +[pointer_dereference.49] reference is null in *cloned_array: SUCCESS +[pointer_dereference.50] reference is null in cloned_array->data[index]: SUCCESS +[pointer_dereference.51] reference is null in this->data[index]: SUCCESS +[pointer_dereference.52] reference is null in *this: SUCCESS +[array-create-negative-size.6] Array size should be >= 0: SUCCESS +[pointer_dereference.53] reference is null in *cloned_array: SUCCESS +[pointer_dereference.54] reference is null in *cloned_array: SUCCESS +[pointer_dereference.55] reference is null in *this: SUCCESS +[pointer_dereference.56] reference is null in *cloned_array: SUCCESS +[pointer_dereference.57] reference is null in *this: SUCCESS +[pointer_dereference.58] reference is null in *cloned_array: SUCCESS +[pointer_dereference.59] reference is null in cloned_array->data[index]: SUCCESS +[pointer_dereference.60] reference is null in this->data[index]: SUCCESS +[pointer_dereference.61] reference is null in *this: SUCCESS +[array-create-negative-size.7] Array size should be >= 0: SUCCESS +[pointer_dereference.62] reference is null in *cloned_array: SUCCESS +[pointer_dereference.63] reference is null in *cloned_array: SUCCESS +[pointer_dereference.64] reference is null in *this: SUCCESS +[pointer_dereference.65] reference is null in *cloned_array: SUCCESS +[pointer_dereference.66] reference is null in *this: SUCCESS +[pointer_dereference.67] reference is null in *cloned_array: SUCCESS +[pointer_dereference.68] reference is null in cloned_array->data[index]: SUCCESS +[pointer_dereference.69] reference is null in this->data[index]: SUCCESS +[pointer_dereference.70] reference is null in *this: SUCCESS +[array-create-negative-size.8] Array size should be >= 0: SUCCESS +[pointer_dereference.71] reference is null in *cloned_array: SUCCESS +[pointer_dereference.72] reference is null in *cloned_array: SUCCESS +[pointer_dereference.73] reference is null in *this: SUCCESS +[pointer_dereference.74] reference is null in *cloned_array: SUCCESS +[pointer_dereference.75] reference is null in *this: SUCCESS +[pointer_dereference.76] reference is null in *cloned_array: SUCCESS +[pointer_dereference.77] reference is null in cloned_array->data[index]: SUCCESS +[pointer_dereference.78] reference is null in this->data[index]: SUCCESS +[pointer_dereference.79] reference is null in *this: SUCCESS +[array-create-negative-size.9] Array size should be >= 0: SUCCESS +[pointer_dereference.80] reference is null in *cloned_array: SUCCESS +[pointer_dereference.81] reference is null in *cloned_array: SUCCESS +[pointer_dereference.82] reference is null in *this: SUCCESS +[pointer_dereference.83] reference is null in *cloned_array: SUCCESS +[pointer_dereference.84] reference is null in *this: SUCCESS +[pointer_dereference.85] reference is null in *cloned_array: SUCCESS +[pointer_dereference.86] reference is null in cloned_array->data[index]: SUCCESS +[pointer_dereference.87] reference is null in this->data[index]: SUCCESS +[pointer_dereference.88] reference is null in *args: SUCCESS +[pointer_dereference.89] reference is null in *args: SUCCESS +[pointer_dereference.90] reference is null in *args: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.9] reference is null in *args: SUCCESS +[pointer_dereference.91] reference is null in *args: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.10] reference is null in array_data_init$10[array_init_iter$11]: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.11] reference is null in *malloc_site$12: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.12] reference is null in *malloc_site$12: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.13] reference is null in *malloc_site$12: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.14] reference is null in *malloc_site$12: SUCCESS +[java::test_parseint_with_radix.main:([Ljava/lang/String;)V.pointer_dereference.15] reference is null in *malloc_site$13: SUCCESS + +** 0 of 123 failed (1 iteration) +VERIFICATION SUCCESSFUL diff --git a/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/test.desc b/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/test.desc new file mode 100644 index 00000000000..b0af402d3bd --- /dev/null +++ b/regression/strings-smoke-tests/java_parseint_with_radix_knownbug/test.desc @@ -0,0 +1,10 @@ +KNOWNBUG +Test2.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 9.* SUCCESS$ +^\[.*assertion.2\].* line 12.* FAILURE$ +-- +-- +Issue #664 is about turning these tests on diff --git a/regression/strings-smoke-tests/java_parselong/Test_binary_min.class b/regression/strings-smoke-tests/java_parselong/Test_binary_min.class new file mode 100644 index 00000000000..8ad0ba0388b Binary files /dev/null and b/regression/strings-smoke-tests/java_parselong/Test_binary_min.class differ diff --git a/regression/strings-smoke-tests/java_parselong/Test_binary_min.java b/regression/strings-smoke-tests/java_parselong/Test_binary_min.java new file mode 100644 index 00000000000..01f265c364c --- /dev/null +++ b/regression/strings-smoke-tests/java_parselong/Test_binary_min.java @@ -0,0 +1,15 @@ +public class Test_binary_min +{ + public static void main(boolean b) + { + // -2^63+1, because we currently can't cope with -2^63 + String str = new String("-111111111111111111111111111111111111111111111111111111111111111"); + long parsed = Long.parseLong(str, 2); + if (b) { + assert(parsed == -9223372036854775807L); + } + else { + assert(parsed != -9223372036854775807L); + } + } +} diff --git a/regression/strings-smoke-tests/java_parselong/Test_decimal_max.class b/regression/strings-smoke-tests/java_parselong/Test_decimal_max.class new file mode 100644 index 00000000000..35313e14aea Binary files /dev/null and b/regression/strings-smoke-tests/java_parselong/Test_decimal_max.class differ diff --git a/regression/strings-smoke-tests/java_parselong/Test_decimal_max.java b/regression/strings-smoke-tests/java_parselong/Test_decimal_max.java new file mode 100644 index 00000000000..ec7bfd25266 --- /dev/null +++ b/regression/strings-smoke-tests/java_parselong/Test_decimal_max.java @@ -0,0 +1,15 @@ +public class Test_decimal_max +{ + public static void main(boolean b) + { + // 2^63+1 + String str = new String("9223372036854775807"); + long parsed = Long.parseLong(str); + if (b) { + assert(parsed == 9223372036854775807L); + } + else { + assert(parsed != 9223372036854775807L); + } + } +} diff --git a/regression/strings-smoke-tests/java_parselong/Test_decimal_min.class b/regression/strings-smoke-tests/java_parselong/Test_decimal_min.class new file mode 100644 index 00000000000..8260f5d3e60 Binary files /dev/null and b/regression/strings-smoke-tests/java_parselong/Test_decimal_min.class differ diff --git a/regression/strings-smoke-tests/java_parselong/Test_decimal_min.java b/regression/strings-smoke-tests/java_parselong/Test_decimal_min.java new file mode 100644 index 00000000000..0d7c53694f7 --- /dev/null +++ b/regression/strings-smoke-tests/java_parselong/Test_decimal_min.java @@ -0,0 +1,15 @@ +public class Test_decimal_min +{ + public static void main(boolean b) + { + // -2^63+1, because we currently can't cope with -2^63 + String str = new String("-9223372036854775807"); + long parsed = Long.parseLong(str, 10); + if (b) { + assert(parsed == -9223372036854775807L); + } + else { + assert(parsed != -9223372036854775807L); + } + } +} diff --git a/regression/strings-smoke-tests/java_parselong/Test_hex.class b/regression/strings-smoke-tests/java_parselong/Test_hex.class new file mode 100644 index 00000000000..e65697c2635 Binary files /dev/null and b/regression/strings-smoke-tests/java_parselong/Test_hex.class differ diff --git a/regression/strings-smoke-tests/java_parselong/Test_hex.java b/regression/strings-smoke-tests/java_parselong/Test_hex.java new file mode 100644 index 00000000000..f42b5319f7b --- /dev/null +++ b/regression/strings-smoke-tests/java_parselong/Test_hex.java @@ -0,0 +1,14 @@ +public class Test_hex +{ + public static void main(boolean b) + { + String str = new String("+00AbCdEf0123"); + long parsed = Long.parseLong(str, 16); + if (b) { + assert(parsed == 737894400291L); + } + else { + assert(parsed != 737894400291L); + } + } +} diff --git a/regression/strings-smoke-tests/java_parselong/Test_octal.class b/regression/strings-smoke-tests/java_parselong/Test_octal.class new file mode 100644 index 00000000000..3b368c7b9cd Binary files /dev/null and b/regression/strings-smoke-tests/java_parselong/Test_octal.class differ diff --git a/regression/strings-smoke-tests/java_parselong/Test_octal.java b/regression/strings-smoke-tests/java_parselong/Test_octal.java new file mode 100644 index 00000000000..c7358417154 --- /dev/null +++ b/regression/strings-smoke-tests/java_parselong/Test_octal.java @@ -0,0 +1,14 @@ +public class Test_octal +{ + public static void main(boolean b) + { + String str = new String("7654321076543210"); + long parsed = Long.parseLong(str, 8); + if (b) { + assert(parsed == 275730608604808L); + } + else { + assert(parsed != 275730608604808L); + } + } +} diff --git a/regression/strings-smoke-tests/java_parselong/test_binary_min.desc b/regression/strings-smoke-tests/java_parselong/test_binary_min.desc new file mode 100644 index 00000000000..9fa189f76cf --- /dev/null +++ b/regression/strings-smoke-tests/java_parselong/test_binary_min.desc @@ -0,0 +1,9 @@ +CORE +Test_binary_min.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 9.* SUCCESS$ +^\[.*assertion.2\].* line 12.* FAILURE$ +-- +-- diff --git a/regression/strings-smoke-tests/java_parselong/test_decimal_max.desc b/regression/strings-smoke-tests/java_parselong/test_decimal_max.desc new file mode 100644 index 00000000000..25795287397 --- /dev/null +++ b/regression/strings-smoke-tests/java_parselong/test_decimal_max.desc @@ -0,0 +1,9 @@ +CORE +Test_decimal_max.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 9.* SUCCESS$ +^\[.*assertion.2\].* line 12.* FAILURE$ +-- +-- diff --git a/regression/strings-smoke-tests/java_parselong/test_decimal_min.desc b/regression/strings-smoke-tests/java_parselong/test_decimal_min.desc new file mode 100644 index 00000000000..95a847bf862 --- /dev/null +++ b/regression/strings-smoke-tests/java_parselong/test_decimal_min.desc @@ -0,0 +1,9 @@ +CORE +Test_decimal_min.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 9.* SUCCESS$ +^\[.*assertion.2\].* line 12.* FAILURE$ +-- +-- diff --git a/regression/strings-smoke-tests/java_parselong/test_hex.desc b/regression/strings-smoke-tests/java_parselong/test_hex.desc new file mode 100644 index 00000000000..efae1994f9e --- /dev/null +++ b/regression/strings-smoke-tests/java_parselong/test_hex.desc @@ -0,0 +1,9 @@ +CORE +Test_hex.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 11.* FAILURE$ +-- +-- diff --git a/regression/strings-smoke-tests/java_parselong/test_octal.desc b/regression/strings-smoke-tests/java_parselong/test_octal.desc new file mode 100644 index 00000000000..72dc00545cb --- /dev/null +++ b/regression/strings-smoke-tests/java_parselong/test_octal.desc @@ -0,0 +1,9 @@ +CORE +Test_octal.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 11.* FAILURE$ +-- +-- diff --git a/regression/strings-smoke-tests/java_replace/test.desc b/regression/strings-smoke-tests/java_replace/test.desc new file mode 100644 index 00000000000..542ed1630b5 --- /dev/null +++ b/regression/strings-smoke-tests/java_replace/test.desc @@ -0,0 +1,10 @@ +FUTURE +test_replace.class +--refine-strings --string-max-length 100 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +diffblue/test-gen#256 +This test is only effective with a model of +java.lang.String.replace(LCharSequence; LCharSequence). diff --git a/regression/strings-smoke-tests/java_replace/test_replace.class b/regression/strings-smoke-tests/java_replace/test_replace.class new file mode 100644 index 00000000000..d15509ee8ac Binary files /dev/null and b/regression/strings-smoke-tests/java_replace/test_replace.class differ diff --git a/regression/strings-smoke-tests/java_replace/test_replace.java b/regression/strings-smoke-tests/java_replace/test_replace.java new file mode 100644 index 00000000000..07e7ac036b9 --- /dev/null +++ b/regression/strings-smoke-tests/java_replace/test_replace.java @@ -0,0 +1,13 @@ +public class test_replace +{ + public static void main(/*String[] argv*/) + { + String s = new String("abcabd"); + String u = s.replace("d","z"); + System.out.println(u); + assert(u.equals("abcabz")); + String v = u.replace("ab","w"); + System.out.println(v); + assert(v.equals("wcwz")); + } +} diff --git a/regression/strings-smoke-tests/java_replace_char/test.desc b/regression/strings-smoke-tests/java_replace_char/test.desc new file mode 100644 index 00000000000..5c336326e5d --- /dev/null +++ b/regression/strings-smoke-tests/java_replace_char/test.desc @@ -0,0 +1,7 @@ +CORE +test_replace_char.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_replace_char/test_replace_char.class b/regression/strings-smoke-tests/java_replace_char/test_replace_char.class new file mode 100644 index 00000000000..64626b3b09d Binary files /dev/null and b/regression/strings-smoke-tests/java_replace_char/test_replace_char.class differ diff --git a/regression/strings-smoke-tests/java_replace_char/test_replace_char.java b/regression/strings-smoke-tests/java_replace_char/test_replace_char.java new file mode 100644 index 00000000000..82a023924e2 --- /dev/null +++ b/regression/strings-smoke-tests/java_replace_char/test_replace_char.java @@ -0,0 +1,9 @@ +public class test_replace_char +{ + public static void main(/*String[] argv*/) + { + String s = new String("abcabd"); + String t = s.replace('b','m'); + assert(t.equals("amcamd")); + } +} diff --git a/regression/strings-smoke-tests/java_set_char_at/test.desc b/regression/strings-smoke-tests/java_set_char_at/test.desc new file mode 100644 index 00000000000..1c471d0194a --- /dev/null +++ b/regression/strings-smoke-tests/java_set_char_at/test.desc @@ -0,0 +1,7 @@ +CORE +test_set_char_at.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_set_char_at/test_set_char_at.class b/regression/strings-smoke-tests/java_set_char_at/test_set_char_at.class new file mode 100644 index 00000000000..6e843afbe2a Binary files /dev/null and b/regression/strings-smoke-tests/java_set_char_at/test_set_char_at.class differ diff --git a/regression/strings-smoke-tests/java_set_char_at/test_set_char_at.java b/regression/strings-smoke-tests/java_set_char_at/test_set_char_at.java new file mode 100644 index 00000000000..fd1d1fbf9e2 --- /dev/null +++ b/regression/strings-smoke-tests/java_set_char_at/test_set_char_at.java @@ -0,0 +1,13 @@ +public class test_set_char_at +{ + public static void main(/*String[] argv*/) + { + String s = new String("Abc"); + char c = s.charAt(1); + StringBuilder sb = new StringBuilder(s); + sb.setCharAt(1,'w'); + s = sb.toString(); + assert(s.equals("Awc")); + assert(s.charAt(2)=='c'); + } +} diff --git a/regression/strings-smoke-tests/java_set_length/test.desc b/regression/strings-smoke-tests/java_set_length/test.desc new file mode 100644 index 00000000000..d19eb265fa4 --- /dev/null +++ b/regression/strings-smoke-tests/java_set_length/test.desc @@ -0,0 +1,9 @@ +CORE +test_set_length.class +--refine-strings --string-max-length 100 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 9.* SUCCESS$ +^\[.*assertion.3\].* line 10.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_set_length/test_set_length.class b/regression/strings-smoke-tests/java_set_length/test_set_length.class new file mode 100644 index 00000000000..8cb9e416191 Binary files /dev/null and b/regression/strings-smoke-tests/java_set_length/test_set_length.class differ diff --git a/regression/strings-smoke-tests/java_set_length/test_set_length.java b/regression/strings-smoke-tests/java_set_length/test_set_length.java new file mode 100644 index 00000000000..5894b27beeb --- /dev/null +++ b/regression/strings-smoke-tests/java_set_length/test_set_length.java @@ -0,0 +1,12 @@ +public class test_set_length +{ + public static void main(/*String[] argv*/) + { + StringBuilder s = new StringBuilder("abc"); + s.setLength(10); + String t = s.toString(); + assert(t.startsWith("abc")); + assert(t.length() == 10); + assert(t.length() == 3); + } +} diff --git a/regression/strings-smoke-tests/java_starts_with/test.desc b/regression/strings-smoke-tests/java_starts_with/test.desc new file mode 100644 index 00000000000..ec6b84102f2 --- /dev/null +++ b/regression/strings-smoke-tests/java_starts_with/test.desc @@ -0,0 +1,8 @@ +CORE +test_starts_with.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 8.* SUCCESS$ +^\[.*assertion.2\].* line 9.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_starts_with/test_starts_with.class b/regression/strings-smoke-tests/java_starts_with/test_starts_with.class new file mode 100644 index 00000000000..da1decd8d35 Binary files /dev/null and b/regression/strings-smoke-tests/java_starts_with/test_starts_with.class differ diff --git a/regression/strings-smoke-tests/java_starts_with/test_starts_with.java b/regression/strings-smoke-tests/java_starts_with/test_starts_with.java new file mode 100644 index 00000000000..aba79d846c0 --- /dev/null +++ b/regression/strings-smoke-tests/java_starts_with/test_starts_with.java @@ -0,0 +1,11 @@ +public class test_starts_with +{ + public static void main(/*String[] argv*/) + { + String s = new String("Abcd"); + String pref = "Ab"; + String bad_pref = "bc"; + assert(s.startsWith(pref)); + assert(s.startsWith(bad_pref)); + } +} diff --git a/regression/strings-smoke-tests/java_string_builder_length/test.desc b/regression/strings-smoke-tests/java_string_builder_length/test.desc new file mode 100644 index 00000000000..2a37e02a36c --- /dev/null +++ b/regression/strings-smoke-tests/java_string_builder_length/test.desc @@ -0,0 +1,7 @@ +CORE +test_sb_length.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_string_builder_length/test_sb_length.class b/regression/strings-smoke-tests/java_string_builder_length/test_sb_length.class new file mode 100644 index 00000000000..cfc35874d26 Binary files /dev/null and b/regression/strings-smoke-tests/java_string_builder_length/test_sb_length.class differ diff --git a/regression/strings-smoke-tests/java_string_builder_length/test_sb_length.java b/regression/strings-smoke-tests/java_string_builder_length/test_sb_length.java new file mode 100644 index 00000000000..b616749ffb4 --- /dev/null +++ b/regression/strings-smoke-tests/java_string_builder_length/test_sb_length.java @@ -0,0 +1,9 @@ +public class test_sb_length +{ + public static void main(/*String[] argv*/) + { + StringBuilder x = new StringBuilder("abc"); + x.append("de"); + assert(x.length() == 5); + } +} diff --git a/regression/strings-smoke-tests/java_subsequence/test.desc b/regression/strings-smoke-tests/java_subsequence/test.desc new file mode 100644 index 00000000000..df3cc28619f --- /dev/null +++ b/regression/strings-smoke-tests/java_subsequence/test.desc @@ -0,0 +1,7 @@ +CORE +test_subsequence.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_subsequence/test_subsequence.class b/regression/strings-smoke-tests/java_subsequence/test_subsequence.class new file mode 100644 index 00000000000..0f8410939e1 Binary files /dev/null and b/regression/strings-smoke-tests/java_subsequence/test_subsequence.class differ diff --git a/regression/strings-smoke-tests/java_subsequence/test_subsequence.java b/regression/strings-smoke-tests/java_subsequence/test_subsequence.java new file mode 100644 index 00000000000..4d8d79cb381 --- /dev/null +++ b/regression/strings-smoke-tests/java_subsequence/test_subsequence.java @@ -0,0 +1,14 @@ +public class test_subsequence +{ + public static void main(/*String[] argv*/) + { + String abcdef = "AbcDef"; + CharSequence cde = abcdef.subSequence(2,5); + char c = cde.charAt(0); + char d = cde.charAt(1); + char e = cde.charAt(2); + assert(c == 'c'); + assert(d == 'D'); + assert(e == 'e'); + } +} diff --git a/regression/strings-smoke-tests/java_substring/test.desc b/regression/strings-smoke-tests/java_substring/test.desc new file mode 100644 index 00000000000..26ec800cfac --- /dev/null +++ b/regression/strings-smoke-tests/java_substring/test.desc @@ -0,0 +1,7 @@ +CORE +test_substring.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings-smoke-tests/java_substring/test_substring.class b/regression/strings-smoke-tests/java_substring/test_substring.class new file mode 100644 index 00000000000..3ba0b60e7f2 Binary files /dev/null and b/regression/strings-smoke-tests/java_substring/test_substring.class differ diff --git a/regression/strings-smoke-tests/java_substring/test_substring.java b/regression/strings-smoke-tests/java_substring/test_substring.java new file mode 100644 index 00000000000..03a33fdbebd --- /dev/null +++ b/regression/strings-smoke-tests/java_substring/test_substring.java @@ -0,0 +1,14 @@ +public class test_substring +{ + public static void main(/*String[] argv*/) + { + String abcdef = "AbcDef"; + String cde = abcdef.substring(2,5); + char c = cde.charAt(0); + char d = cde.charAt(1); + char e = cde.charAt(2); + assert(c == 'c'); + assert(d == 'D'); + assert(e == 'e'); + } +} diff --git a/regression/strings-smoke-tests/java_trim/test.desc b/regression/strings-smoke-tests/java_trim/test.desc new file mode 100644 index 00000000000..171ada28356 --- /dev/null +++ b/regression/strings-smoke-tests/java_trim/test.desc @@ -0,0 +1,8 @@ +CORE +test_trim.class +--refine-strings --string-max-length 100 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 6.* SUCCESS$ +^\[.*assertion.2\].* line 7.* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_trim/test_trim.class b/regression/strings-smoke-tests/java_trim/test_trim.class new file mode 100644 index 00000000000..33b34714ae2 Binary files /dev/null and b/regression/strings-smoke-tests/java_trim/test_trim.class differ diff --git a/regression/strings-smoke-tests/java_trim/test_trim.java b/regression/strings-smoke-tests/java_trim/test_trim.java new file mode 100644 index 00000000000..20dd7ba2796 --- /dev/null +++ b/regression/strings-smoke-tests/java_trim/test_trim.java @@ -0,0 +1,9 @@ +public class test_trim +{ + public static void main(/*String[] argv*/) + { + String empty = " "; + assert(empty.trim().isEmpty()); + assert(empty.isEmpty()); + } +} diff --git a/regression/strings-smoke-tests/java_value_of_float/test.class b/regression/strings-smoke-tests/java_value_of_float/test.class new file mode 100644 index 00000000000..ddb0cfbdc0b Binary files /dev/null and b/regression/strings-smoke-tests/java_value_of_float/test.class differ diff --git a/regression/strings-smoke-tests/java_value_of_float/test.desc b/regression/strings-smoke-tests/java_value_of_float/test.desc new file mode 100644 index 00000000000..4e3e8769be6 --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_float/test.desc @@ -0,0 +1,8 @@ +CORE +test.class +--refine-strings --function test.check --string-max-length 100 +^EXIT=10$ +^SIGNAL=0$ +assertion.* file test.java line 7 .* SUCCESS$ +assertion.* file test.java line 9 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_value_of_float/test.java b/regression/strings-smoke-tests/java_value_of_float/test.java new file mode 100644 index 00000000000..ff05337b112 --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_float/test.java @@ -0,0 +1,11 @@ +public class test +{ + public static void check(int i) + { + String s = String.valueOf(123.456f); + if(i == 1) + assert(s.equals("123.456")); + else + assert(!s.equals("123.456")); + } +} \ No newline at end of file diff --git a/regression/strings-smoke-tests/java_value_of_float_2/test.class b/regression/strings-smoke-tests/java_value_of_float_2/test.class new file mode 100644 index 00000000000..7e8016e0b84 Binary files /dev/null and b/regression/strings-smoke-tests/java_value_of_float_2/test.class differ diff --git a/regression/strings-smoke-tests/java_value_of_float_2/test.desc b/regression/strings-smoke-tests/java_value_of_float_2/test.desc new file mode 100644 index 00000000000..370b9327f58 --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_float_2/test.desc @@ -0,0 +1,8 @@ +KNOWNBUG +test.class +--refine-strings --function test.check --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* file test.java line 6 .* SUCCESS$ +assertion.* file test.java line 7 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_value_of_float_2/test.java b/regression/strings-smoke-tests/java_value_of_float_2/test.java new file mode 100644 index 00000000000..7967e6f3668 --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_float_2/test.java @@ -0,0 +1,9 @@ +public class test +{ + public static void check() + { + String s3=String.valueOf(7.89e12f); + assert(s3.equals("7.89E12")); + assert(!s3.equals("7.89E12")); + } +} diff --git a/regression/strings-smoke-tests/java_value_of_float_3/test.class b/regression/strings-smoke-tests/java_value_of_float_3/test.class new file mode 100644 index 00000000000..3572c20abb1 Binary files /dev/null and b/regression/strings-smoke-tests/java_value_of_float_3/test.class differ diff --git a/regression/strings-smoke-tests/java_value_of_float_3/test.desc b/regression/strings-smoke-tests/java_value_of_float_3/test.desc new file mode 100644 index 00000000000..771fdebe7cc --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_float_3/test.desc @@ -0,0 +1,9 @@ +KNOWNBUG +test.class +--refine-strings --function test.check +^EXIT=10$ +^SIGNAL=0$ +assertion.* file test.java line 7 .* SUCCESS$ +assertion.* file test.java line 8 .* FAILURE$ + +-- diff --git a/regression/strings-smoke-tests/java_value_of_float_3/test.java b/regression/strings-smoke-tests/java_value_of_float_3/test.java new file mode 100644 index 00000000000..47bfa2b43cf --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_float_3/test.java @@ -0,0 +1,10 @@ +public class test +{ + public static void check() + { + String s5=String.valueOf(5.67e-9f); + // The result may not be exactly 5.67E-9 as 5.66999...E-9 is also valid + assert(s5.startsWith("5.6") && s5.endsWith("E-9")); + assert(!s5.startsWith("5.6") || !s5.endsWith("E-9")); + } + } diff --git a/regression/strings-smoke-tests/java_value_of_float_4/test.class b/regression/strings-smoke-tests/java_value_of_float_4/test.class new file mode 100644 index 00000000000..b9330858ee9 Binary files /dev/null and b/regression/strings-smoke-tests/java_value_of_float_4/test.class differ diff --git a/regression/strings-smoke-tests/java_value_of_float_4/test.desc b/regression/strings-smoke-tests/java_value_of_float_4/test.desc new file mode 100644 index 00000000000..7f1e0f8819a --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_float_4/test.desc @@ -0,0 +1,10 @@ +THOROUGH +test.class +--refine-strings --function test.check +^EXIT=10$ +^SIGNAL=0$ +assertion.* test.java line 8 .* SUCCESS$ +assertion.* test.java line 9 .* SUCCESS$ +assertion.* test.java line 10 .* SUCCESS$ +assertion.* test.java line 11 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_value_of_float_4/test.java b/regression/strings-smoke-tests/java_value_of_float_4/test.java new file mode 100644 index 00000000000..13c1151eb7b --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_float_4/test.java @@ -0,0 +1,13 @@ +public class test +{ + public static void check() + { + String s7=String.valueOf(java.lang.Float.POSITIVE_INFINITY); + String s8=String.valueOf(java.lang.Float.NEGATIVE_INFINITY); + String s9=String.valueOf(java.lang.Float.NaN); + assert(s7.equals("Infinity")); + assert(s8.equals("-Infinity")); + assert(s9.equals("NaN")); + assert(!s7.equals("Infinity") || !s8.equals("-Infinity") || !s9.equals("NaN")); + } +} diff --git a/regression/strings-smoke-tests/java_value_of_float_5/test.class b/regression/strings-smoke-tests/java_value_of_float_5/test.class new file mode 100644 index 00000000000..576229eef26 Binary files /dev/null and b/regression/strings-smoke-tests/java_value_of_float_5/test.class differ diff --git a/regression/strings-smoke-tests/java_value_of_float_5/test.desc b/regression/strings-smoke-tests/java_value_of_float_5/test.desc new file mode 100644 index 00000000000..7a279ade453 --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_float_5/test.desc @@ -0,0 +1,8 @@ +THOROUGH +test.class +--refine-strings --function test.check +^EXIT=10$ +^SIGNAL=0$ +assertion.* file test.java line 6 .* SUCCESS$ +assertion.* file test.java line 7 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_value_of_float_5/test.java b/regression/strings-smoke-tests/java_value_of_float_5/test.java new file mode 100644 index 00000000000..d64f033c86c --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_float_5/test.java @@ -0,0 +1,9 @@ +public class test +{ + public static void check() + { + String s1=String.valueOf(-123.456f); + assert(s1.equals("-123.456")); + assert(!s1.equals("-123.456")); + } +} diff --git a/regression/strings-smoke-tests/java_value_of_long/test.class b/regression/strings-smoke-tests/java_value_of_long/test.class new file mode 100644 index 00000000000..b559af818fb Binary files /dev/null and b/regression/strings-smoke-tests/java_value_of_long/test.class differ diff --git a/regression/strings-smoke-tests/java_value_of_long/test.desc b/regression/strings-smoke-tests/java_value_of_long/test.desc new file mode 100644 index 00000000000..c7ea25ab2f8 --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_long/test.desc @@ -0,0 +1,8 @@ +CORE +test.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +assertion.* file test.java line 9 .* SUCCESS$ +assertion.* file test.java line 14 .* FAILURE$ +-- diff --git a/regression/strings-smoke-tests/java_value_of_long/test.java b/regression/strings-smoke-tests/java_value_of_long/test.java new file mode 100644 index 00000000000..a9ceaa964a7 --- /dev/null +++ b/regression/strings-smoke-tests/java_value_of_long/test.java @@ -0,0 +1,17 @@ +public class test +{ + public static void main(int i) + { + long l1=12345678901234L; + if(i == 0) + { + String s = String.valueOf(l1); + assert(s.equals("12345678901234")); + } + else + { + String s = String.valueOf(-l1); + assert(!s.equals("-12345678901234")); + } + } +} diff --git a/regression/strings-smoke-tests/jsonArrays/test.class b/regression/strings-smoke-tests/jsonArrays/test.class new file mode 100644 index 00000000000..e1e896095a3 Binary files /dev/null and b/regression/strings-smoke-tests/jsonArrays/test.class differ diff --git a/regression/strings-smoke-tests/jsonArrays/test.desc b/regression/strings-smoke-tests/jsonArrays/test.desc new file mode 100644 index 00000000000..71edef45763 --- /dev/null +++ b/regression/strings-smoke-tests/jsonArrays/test.desc @@ -0,0 +1,10 @@ +CORE +test.class +--refine-strings --function test.check --json-ui --trace --string-max-length 100 --cover location +^EXIT=0$ +^SIGNAL=0$ +\"data\".*\"tmp_object_factory\$\d+.*\" +-- +This checks that tmp_object_factory$6 gets affected to the data field +of some strings, which was not the case in previous versions of cbmc, +as it was just ignored by the json output. \ No newline at end of file diff --git a/regression/strings-smoke-tests/jsonArrays/test.java b/regression/strings-smoke-tests/jsonArrays/test.java new file mode 100644 index 00000000000..c7b07e0fdec --- /dev/null +++ b/regression/strings-smoke-tests/jsonArrays/test.java @@ -0,0 +1,8 @@ +public class test +{ + public static int check(String s) + { + int i=Integer.parseInt(s); + return i; + } +} diff --git a/regression/strings-smoke-tests/performance.py b/regression/strings-smoke-tests/performance.py new file mode 100755 index 00000000000..9e7b5a93279 --- /dev/null +++ b/regression/strings-smoke-tests/performance.py @@ -0,0 +1,34 @@ +#!/usr/bin/python + +''' +This script collects the running times of the tests present in the current +directory. + +It does not run the tests but reads the already present output files. + +Usage: + python performance.py + +Dependencies: + gnuplot http://www.gnuplot.info/ +''' + +import time +from subprocess import check_output +from subprocess import check_call + +git_output = check_output(['git', 'show', 'HEAD']) +commit = git_output.split('\n')[0] +commit_id = time.strftime('%Y_%m_%d__%H_%M_%S')+'__'+commit[7:] + +process = check_output(['grep', '^Runtime decision procedure', '-R']) +file_name = 'performance_'+commit_id+'.out' + +print 'writing to file', file_name + +with open(file_name, 'w') as f: + f.write(process) + +print('drawing to file', file_name+'.png') +check_call(['gnuplot', '-e', 'file="'+file_name+'"', '-e', + 'outputfile="'+file_name+'.png"', 'performance_draw.gp']) diff --git a/regression/strings-smoke-tests/performance_draw.gp b/regression/strings-smoke-tests/performance_draw.gp new file mode 100644 index 00000000000..9f57ad24742 --- /dev/null +++ b/regression/strings-smoke-tests/performance_draw.gp @@ -0,0 +1,7 @@ +set datafile separator ":" +set term png +set output outputfile +set logscale y 10 +set yrange [0.01:100] + +plot file using 3 with lines diff --git a/regression/strings/CharacterGetNumericValue/test.class b/regression/strings/CharacterGetNumericValue/test.class new file mode 100644 index 00000000000..565d2d522b7 Binary files /dev/null and b/regression/strings/CharacterGetNumericValue/test.class differ diff --git a/regression/strings/CharacterGetNumericValue/test.desc b/regression/strings/CharacterGetNumericValue/test.desc new file mode 100644 index 00000000000..9f34df46fd6 --- /dev/null +++ b/regression/strings/CharacterGetNumericValue/test.desc @@ -0,0 +1,9 @@ +CORE +test.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +assertion at file test.java line 8 .* SUCCESS$ +assertion at file test.java line 10 .* FAILURE$ +-- +^warning: ignoring diff --git a/regression/strings/CharacterGetNumericValue/test.java b/regression/strings/CharacterGetNumericValue/test.java new file mode 100644 index 00000000000..b4fe441de04 --- /dev/null +++ b/regression/strings/CharacterGetNumericValue/test.java @@ -0,0 +1,12 @@ +public class test +{ + + public static void main(String[] args) + { + char c = 'a'; + if(args.length>1) + assert Character.getNumericValue(c) == 10; + else + assert Character.getNumericValue(c) != 10; + } +} diff --git a/regression/strings/Makefile b/regression/strings/Makefile index f9aee8c563e..47653a6bb95 100644 --- a/regression/strings/Makefile +++ b/regression/strings/Makefile @@ -1,6 +1,38 @@ +default: tests.log test: - @../test.pl -c ../../../src/cbmc/cbmc + @if ! ../test.pl -c ../../../src/cbmc/cbmc ; then \ + ../failed-tests-printer.pl ; \ + exit 1 ; \ + fi testfuture: - @../test.pl -c ../../../src/cbmc/cbmc -F + @if ! ../test.pl -c ../../../src/cbmc/cbmc -CF ; then \ + ../failed-tests-printer.pl ; \ + exit 1 ; \ + fi + +testall: + @if ! ../test.pl -c ../../../src/cbmc/cbmc -CFTK ; then \ + ../failed-tests-printer.pl ; \ + exit 1 ; \ + fi + +tests.log: ../test.pl + @if ! ../test.pl -c ../../../src/cbmc/cbmc ; then \ + ../failed-tests-printer.pl ; \ + exit 1 ; \ + fi + +show: + @for dir in *; do \ + if [ -d "$$dir" ]; then \ + vim -o "$$dir/*.c" "$$dir/*.out"; \ + fi; \ + done; + +clean: + find -name '*.out' -execdir $(RM) '{}' \; + find -name '*.gb' -execdir $(RM) '{}' \; + $(RM) tests.log + diff --git a/regression/strings/RegexMatches01/test.desc b/regression/strings/RegexMatches01/test.desc index 45cc542b352..e4259466e6b 100644 --- a/regression/strings/RegexMatches01/test.desc +++ b/regression/strings/RegexMatches01/test.desc @@ -1,6 +1,6 @@ FUTURE RegexMatches01.class ---string-refine --unwind 100 +--refine-strings --unwind 100 ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/RegexMatches02/test.desc b/regression/strings/RegexMatches02/test.desc index 86353d9a54c..006922c3d6a 100644 --- a/regression/strings/RegexMatches02/test.desc +++ b/regression/strings/RegexMatches02/test.desc @@ -1,6 +1,6 @@ FUTURE RegexMatches02.class ---string-refine --unwind 100 +--refine-strings --unwind 100 ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/RegexSubstitution01/test.desc b/regression/strings/RegexSubstitution01/test.desc index bc7ed3648f3..ccf24b2e8fa 100644 --- a/regression/strings/RegexSubstitution01/test.desc +++ b/regression/strings/RegexSubstitution01/test.desc @@ -1,6 +1,6 @@ FUTURE RegexSubstitution01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/RegexSubstitution02/test.desc b/regression/strings/RegexSubstitution02/test.desc index 0645c3ac9b8..7064bcc0333 100644 --- a/regression/strings/RegexSubstitution02/test.desc +++ b/regression/strings/RegexSubstitution02/test.desc @@ -1,6 +1,6 @@ FUTURE RegexSubstitution02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/RegexSubstitution03/test.desc b/regression/strings/RegexSubstitution03/test.desc index 20da1478b1a..4b0d5739c42 100644 --- a/regression/strings/RegexSubstitution03/test.desc +++ b/regression/strings/RegexSubstitution03/test.desc @@ -1,6 +1,6 @@ FUTURE RegexSubstitution03.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StaticCharMethods01/test.desc b/regression/strings/StaticCharMethods01/test.desc index 4b633e92bcf..0440fc98273 100644 --- a/regression/strings/StaticCharMethods01/test.desc +++ b/regression/strings/StaticCharMethods01/test.desc @@ -1,6 +1,6 @@ -FUTURE +CORE StaticCharMethods01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StaticCharMethods02/test.desc b/regression/strings/StaticCharMethods02/test.desc index 00aaaba8964..d537da812c9 100644 --- a/regression/strings/StaticCharMethods02/test.desc +++ b/regression/strings/StaticCharMethods02/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StaticCharMethods02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ +^\[.*assertion\.1\] .* line 6 .* FAILURE$ -- ^warning: ignoring diff --git a/regression/strings/StaticCharMethods03/test.desc b/regression/strings/StaticCharMethods03/test.desc index 6f3d3bc5607..174071ed1da 100644 --- a/regression/strings/StaticCharMethods03/test.desc +++ b/regression/strings/StaticCharMethods03/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StaticCharMethods03.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 6 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StaticCharMethods04/test.desc b/regression/strings/StaticCharMethods04/test.desc index 0c9484ef337..ecc807f2d31 100644 --- a/regression/strings/StaticCharMethods04/test.desc +++ b/regression/strings/StaticCharMethods04/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StaticCharMethods04.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ +^\[.*assertion\.1\] .* line 6 .* FAILURE$ -- ^warning: ignoring diff --git a/regression/strings/StaticCharMethods05/test.desc b/regression/strings/StaticCharMethods05/test.desc index 5b4a6b4b622..f8abd67fc57 100644 --- a/regression/strings/StaticCharMethods05/test.desc +++ b/regression/strings/StaticCharMethods05/test.desc @@ -1,8 +1,11 @@ -FUTURE +CORE StaticCharMethods05.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +null-pointer-exception\.14\] Throw null: FAILURE +^\[.*assertion\.1\] .* line 12 .* FAILURE$ +^\[.*assertion\.2\] .* line 22 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StaticCharMethods06/test.desc b/regression/strings/StaticCharMethods06/test.desc index 6f351b2c7cf..3caa6a7b878 100644 --- a/regression/strings/StaticCharMethods06/test.desc +++ b/regression/strings/StaticCharMethods06/test.desc @@ -1,6 +1,6 @@ FUTURE StaticCharMethods06.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringBuilderAppend01/test.desc b/regression/strings/StringBuilderAppend01/test.desc index f1f89b629be..d0207fc9ea7 100644 --- a/regression/strings/StringBuilderAppend01/test.desc +++ b/regression/strings/StringBuilderAppend01/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderAppend01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringBuilderAppend02/test.desc b/regression/strings/StringBuilderAppend02/test.desc index 1336c45c3d2..70357b670d8 100644 --- a/regression/strings/StringBuilderAppend02/test.desc +++ b/regression/strings/StringBuilderAppend02/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderAppend02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringBuilderCapLen01/test.desc b/regression/strings/StringBuilderCapLen01/test.desc index 05516f08da2..4186f2534ac 100644 --- a/regression/strings/StringBuilderCapLen01/test.desc +++ b/regression/strings/StringBuilderCapLen01/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderCapLen01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringBuilderCapLen02/test.desc b/regression/strings/StringBuilderCapLen02/test.desc index 72a0bbd72c2..f9db006ed0b 100644 --- a/regression/strings/StringBuilderCapLen02/test.desc +++ b/regression/strings/StringBuilderCapLen02/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderCapLen02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringBuilderCapLen03/test.desc b/regression/strings/StringBuilderCapLen03/test.desc index 474bdc661ab..c35dfb33871 100644 --- a/regression/strings/StringBuilderCapLen03/test.desc +++ b/regression/strings/StringBuilderCapLen03/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderCapLen03.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringBuilderCapLen04/test.desc b/regression/strings/StringBuilderCapLen04/test.desc index fa342b79518..78930851e45 100644 --- a/regression/strings/StringBuilderCapLen04/test.desc +++ b/regression/strings/StringBuilderCapLen04/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderCapLen04.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringBuilderChars01/test.desc b/regression/strings/StringBuilderChars01/test.desc index 41dfe54abeb..48acfb25a5d 100644 --- a/regression/strings/StringBuilderChars01/test.desc +++ b/regression/strings/StringBuilderChars01/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderChars01.class ---string-refine --unwind 100 +--refine-strings --unwind 100 ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringBuilderChars02/test.desc b/regression/strings/StringBuilderChars02/test.desc index 50e49d474bc..d9006ab74ba 100644 --- a/regression/strings/StringBuilderChars02/test.desc +++ b/regression/strings/StringBuilderChars02/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderChars02.class ---string-refine --unwind 100 +--refine-strings --unwind 100 ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringBuilderChars03/test.desc b/regression/strings/StringBuilderChars03/test.desc index 23dda39df4e..d6f1cb4155c 100644 --- a/regression/strings/StringBuilderChars03/test.desc +++ b/regression/strings/StringBuilderChars03/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderChars03.class ---string-refine --unwind 100 +--refine-strings --unwind 100 ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringBuilderChars04/test.desc b/regression/strings/StringBuilderChars04/test.desc index a68edd89395..37009795a48 100644 --- a/regression/strings/StringBuilderChars04/test.desc +++ b/regression/strings/StringBuilderChars04/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderChars04.class ---string-refine --unwind 100 +--refine-strings --unwind 100 ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringBuilderChars05/test.desc b/regression/strings/StringBuilderChars05/test.desc index eeac328e02b..49aed9d48fd 100644 --- a/regression/strings/StringBuilderChars05/test.desc +++ b/regression/strings/StringBuilderChars05/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderChars05.class ---string-refine --unwind 100 +--refine-strings --unwind 100 ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringBuilderChars06/test.desc b/regression/strings/StringBuilderChars06/test.desc index a3dc3712a5a..5ccf470590e 100644 --- a/regression/strings/StringBuilderChars06/test.desc +++ b/regression/strings/StringBuilderChars06/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderChars06.class ---string-refine --unwind 100 +--refine-strings --unwind 100 ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringBuilderConstructors01/test.desc b/regression/strings/StringBuilderConstructors01/test.desc index 2c60f9bbbda..3e27d46c329 100644 --- a/regression/strings/StringBuilderConstructors01/test.desc +++ b/regression/strings/StringBuilderConstructors01/test.desc @@ -1,6 +1,6 @@ KNOWNBUG StringBuilderConstructors01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringBuilderConstructors02/test.desc b/regression/strings/StringBuilderConstructors02/test.desc index 5e951bc8079..f6c0cded34e 100644 --- a/regression/strings/StringBuilderConstructors02/test.desc +++ b/regression/strings/StringBuilderConstructors02/test.desc @@ -1,6 +1,6 @@ KNOWNBUG StringBuilderConstructors02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringBuilderInsertDelete01/test.desc b/regression/strings/StringBuilderInsertDelete01/test.desc index 4c3000d6a97..b2f927ad3b7 100644 --- a/regression/strings/StringBuilderInsertDelete01/test.desc +++ b/regression/strings/StringBuilderInsertDelete01/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderInsertDelete01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringBuilderInsertDelete02/test.desc b/regression/strings/StringBuilderInsertDelete02/test.desc index ae4d0ca5b81..1e67f7eb3c0 100644 --- a/regression/strings/StringBuilderInsertDelete02/test.desc +++ b/regression/strings/StringBuilderInsertDelete02/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderInsertDelete02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringBuilderInsertDelete03/test.desc b/regression/strings/StringBuilderInsertDelete03/test.desc index 3dfa92f0338..084038f4465 100644 --- a/regression/strings/StringBuilderInsertDelete03/test.desc +++ b/regression/strings/StringBuilderInsertDelete03/test.desc @@ -1,6 +1,6 @@ FUTURE StringBuilderInsertDelete03.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringCompare01/test.desc b/regression/strings/StringCompare01/test.desc index 52b1d6d084c..2140f3a0c48 100644 --- a/regression/strings/StringCompare01/test.desc +++ b/regression/strings/StringCompare01/test.desc @@ -1,8 +1,10 @@ FUTURE StringCompare01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ -- ^warning: ignoring +-- +Fails because string.regionMatches is not implemented diff --git a/regression/strings/StringCompare02/test.desc b/regression/strings/StringCompare02/test.desc index eb52d1f1a58..d20bfb7eb5c 100644 --- a/regression/strings/StringCompare02/test.desc +++ b/regression/strings/StringCompare02/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringCompare02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 12 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringCompare03/test.desc b/regression/strings/StringCompare03/test.desc index bd0f3177acf..afc9b9b5307 100644 --- a/regression/strings/StringCompare03/test.desc +++ b/regression/strings/StringCompare03/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringCompare03.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 12 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringCompare04/test.desc b/regression/strings/StringCompare04/test.desc index 88ecddbfcf6..afc70f4933b 100644 --- a/regression/strings/StringCompare04/test.desc +++ b/regression/strings/StringCompare04/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringCompare04.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ +^\[.*assertion\.1\] .* line 7 .* FAILURE$ -- ^warning: ignoring diff --git a/regression/strings/StringCompare05/test.desc b/regression/strings/StringCompare05/test.desc index 1358a05a36b..0f24821dee6 100644 --- a/regression/strings/StringCompare05/test.desc +++ b/regression/strings/StringCompare05/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringCompare05.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ +^\[.*assertion\.1\] .* line 9 .* FAILURE$ -- ^warning: ignoring diff --git a/regression/strings/StringConcatenation01/test.desc b/regression/strings/StringConcatenation01/test.desc index a229b504571..29244c24734 100644 --- a/regression/strings/StringConcatenation01/test.desc +++ b/regression/strings/StringConcatenation01/test.desc @@ -1,6 +1,6 @@ -KNOWNBUG +CORE StringConcatenation01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringConcatenation02/test.desc b/regression/strings/StringConcatenation02/test.desc index 0e1faf53d5e..ad9402eaec9 100644 --- a/regression/strings/StringConcatenation02/test.desc +++ b/regression/strings/StringConcatenation02/test.desc @@ -1,8 +1,9 @@ -KNOWNBUG +CORE StringConcatenation02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ +^\[.*assertion\.1\] .* line 7 .* FAILURE$ -- ^warning: ignoring diff --git a/regression/strings/StringConcatenation03/test.desc b/regression/strings/StringConcatenation03/test.desc index 3c01a4ee0a9..c5798d1ae1d 100644 --- a/regression/strings/StringConcatenation03/test.desc +++ b/regression/strings/StringConcatenation03/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringConcatenation03.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ +^\[.*assertion\.1\] .* line 11 .* FAILURE$ -- ^warning: ignoring diff --git a/regression/strings/StringConcatenation04/test.desc b/regression/strings/StringConcatenation04/test.desc index 3dbecf065ba..a781c7887b1 100644 --- a/regression/strings/StringConcatenation04/test.desc +++ b/regression/strings/StringConcatenation04/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringConcatenation04.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 8 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringConstructors01/test.desc b/regression/strings/StringConstructors01/test.desc index ed57bdfdde5..b1465868c19 100644 --- a/regression/strings/StringConstructors01/test.desc +++ b/regression/strings/StringConstructors01/test.desc @@ -1,6 +1,6 @@ FUTURE StringConstructors01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringConstructors02/test.desc b/regression/strings/StringConstructors02/test.desc index e3904d1d557..37838aafbc9 100644 --- a/regression/strings/StringConstructors02/test.desc +++ b/regression/strings/StringConstructors02/test.desc @@ -1,6 +1,6 @@ FUTURE StringConstructors02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringConstructors03/test.desc b/regression/strings/StringConstructors03/test.desc index 0caf75f41ea..10193fc66c2 100644 --- a/regression/strings/StringConstructors03/test.desc +++ b/regression/strings/StringConstructors03/test.desc @@ -1,6 +1,6 @@ FUTURE StringConstructors03.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringConstructors04/test.desc b/regression/strings/StringConstructors04/test.desc index 75364dcde22..2e6e88fa862 100644 --- a/regression/strings/StringConstructors04/test.desc +++ b/regression/strings/StringConstructors04/test.desc @@ -1,6 +1,6 @@ FUTURE StringConstructors04.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringConstructors05/test.desc b/regression/strings/StringConstructors05/test.desc index e74dfc73f6c..a3c6a6c0437 100644 --- a/regression/strings/StringConstructors05/test.desc +++ b/regression/strings/StringConstructors05/test.desc @@ -1,6 +1,6 @@ FUTURE StringConstructors05.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/StringContains01/test.class b/regression/strings/StringContains01/test.class new file mode 100644 index 00000000000..ce12a0ee470 Binary files /dev/null and b/regression/strings/StringContains01/test.class differ diff --git a/regression/strings/StringContains01/test.desc b/regression/strings/StringContains01/test.desc new file mode 100644 index 00000000000..2e66f73126f --- /dev/null +++ b/regression/strings/StringContains01/test.desc @@ -0,0 +1,6 @@ +FUTURE +test.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ diff --git a/regression/strings/StringContains01/test.java b/regression/strings/StringContains01/test.java new file mode 100644 index 00000000000..de588381d8a --- /dev/null +++ b/regression/strings/StringContains01/test.java @@ -0,0 +1,8 @@ +public class test +{ + public static void main(String s) + { + String ab = "abc"; + assert(ab.contains(s)); + } +} diff --git a/regression/strings/StringContains02/test.class b/regression/strings/StringContains02/test.class new file mode 100644 index 00000000000..c1b575d8c6e Binary files /dev/null and b/regression/strings/StringContains02/test.class differ diff --git a/regression/strings/StringContains02/test.desc b/regression/strings/StringContains02/test.desc new file mode 100644 index 00000000000..2e66f73126f --- /dev/null +++ b/regression/strings/StringContains02/test.desc @@ -0,0 +1,6 @@ +FUTURE +test.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ diff --git a/regression/strings/StringContains02/test.java b/regression/strings/StringContains02/test.java new file mode 100644 index 00000000000..77fa0284700 --- /dev/null +++ b/regression/strings/StringContains02/test.java @@ -0,0 +1,7 @@ +public class test +{ + public static void main(String s) + { + assert(s.contains("Hello")); + } +} diff --git a/regression/strings/StringIndexMethods01/test.desc b/regression/strings/StringIndexMethods01/test.desc index 005d4459f12..4bdc0d39b71 100644 --- a/regression/strings/StringIndexMethods01/test.desc +++ b/regression/strings/StringIndexMethods01/test.desc @@ -1,6 +1,6 @@ -FUTURE +THOROUGH StringIndexMethods01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringIndexMethods02/test.desc b/regression/strings/StringIndexMethods02/test.desc index 28df14f0145..05518537f78 100644 --- a/regression/strings/StringIndexMethods02/test.desc +++ b/regression/strings/StringIndexMethods02/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringIndexMethods02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 6 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringIndexMethods03/test.desc b/regression/strings/StringIndexMethods03/test.desc index 02f9934726b..17a62282b22 100644 --- a/regression/strings/StringIndexMethods03/test.desc +++ b/regression/strings/StringIndexMethods03/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringIndexMethods03.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 6 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringIndexMethods04/test.desc b/regression/strings/StringIndexMethods04/test.desc index cb94fecb6a6..5902a92be18 100644 --- a/regression/strings/StringIndexMethods04/test.desc +++ b/regression/strings/StringIndexMethods04/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringIndexMethods04.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 6 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringIndexMethods05/test.desc b/regression/strings/StringIndexMethods05/test.desc index cb43b009246..29dee098ac7 100644 --- a/regression/strings/StringIndexMethods05/test.desc +++ b/regression/strings/StringIndexMethods05/test.desc @@ -1,8 +1,9 @@ FUTURE StringIndexMethods05.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 6 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringMiscellaneous01/test.desc b/regression/strings/StringMiscellaneous01/test.desc index 050c3e99e90..624c8028cb3 100644 --- a/regression/strings/StringMiscellaneous01/test.desc +++ b/regression/strings/StringMiscellaneous01/test.desc @@ -1,6 +1,6 @@ FUTURE StringMiscellaneous01.class ---string-refine --unwind 30 +--refine-strings --unwind 30 ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringMiscellaneous02/test.desc b/regression/strings/StringMiscellaneous02/test.desc index 8f1a1d9475f..7fd0118b93a 100644 --- a/regression/strings/StringMiscellaneous02/test.desc +++ b/regression/strings/StringMiscellaneous02/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringMiscellaneous02.class ---string-refine --unwind 30 +--refine-strings --unwind 30 ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 6 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringMiscellaneous03/test.desc b/regression/strings/StringMiscellaneous03/test.desc index 341867d536f..d19fcdfaa5e 100644 --- a/regression/strings/StringMiscellaneous03/test.desc +++ b/regression/strings/StringMiscellaneous03/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringMiscellaneous03.class ---string-refine --unwind 30 +--refine-strings --unwind 30 ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 11 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringMiscellaneous04/test.desc b/regression/strings/StringMiscellaneous04/test.desc index 737ab3b0f8c..9eb355cd0d2 100644 --- a/regression/strings/StringMiscellaneous04/test.desc +++ b/regression/strings/StringMiscellaneous04/test.desc @@ -1,6 +1,6 @@ -FUTURE +CORE StringMiscellaneous04.class ---string-refine --unwind 30 +--refine-strings --unwind 30 ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringStartEnd01/test.desc b/regression/strings/StringStartEnd01/test.desc index a5463d5b5ea..123429bd623 100644 --- a/regression/strings/StringStartEnd01/test.desc +++ b/regression/strings/StringStartEnd01/test.desc @@ -1,6 +1,6 @@ -KNOWNBUG +THOROUGH StringStartEnd01.class ---string-refine --unwind 30 +--refine-strings --unwind 30 ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringStartEnd02/test.desc b/regression/strings/StringStartEnd02/test.desc index 8e623622f72..deddbb5b902 100644 --- a/regression/strings/StringStartEnd02/test.desc +++ b/regression/strings/StringStartEnd02/test.desc @@ -1,8 +1,9 @@ -KNOWNBUG +CORE StringStartEnd02.class ---string-refine --unwind 30 +--refine-strings --unwind 30 --string-max-length 1000 ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 13 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringStartEnd03/test.desc b/regression/strings/StringStartEnd03/test.desc index 2903ec98e3e..b7727fd8b91 100644 --- a/regression/strings/StringStartEnd03/test.desc +++ b/regression/strings/StringStartEnd03/test.desc @@ -1,8 +1,9 @@ -KNOWNBUG +THOROUGH StringStartEnd03.class ---string-refine --unwind 15 +--refine-strings --unwind 15 ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 13 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringValueOf01/test.desc b/regression/strings/StringValueOf01/test.desc index 341f5e98975..c6098401ba0 100644 --- a/regression/strings/StringValueOf01/test.desc +++ b/regression/strings/StringValueOf01/test.desc @@ -1,6 +1,6 @@ FUTURE StringValueOf01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/StringValueOf02/test.desc b/regression/strings/StringValueOf02/test.desc index a10b398bf41..906d983e34f 100644 --- a/regression/strings/StringValueOf02/test.desc +++ b/regression/strings/StringValueOf02/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringValueOf02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 7 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringValueOf03/test.desc b/regression/strings/StringValueOf03/test.desc index 4ed709a2404..ffde4e2de6f 100644 --- a/regression/strings/StringValueOf03/test.desc +++ b/regression/strings/StringValueOf03/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringValueOf03.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 7 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringValueOf04/test.desc b/regression/strings/StringValueOf04/test.desc index 0d8442e9de1..e73f1492261 100644 --- a/regression/strings/StringValueOf04/test.desc +++ b/regression/strings/StringValueOf04/test.desc @@ -1,8 +1,9 @@ -KNOWNBUG +CORE StringValueOf04.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 7 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringValueOf05/test.desc b/regression/strings/StringValueOf05/test.desc index f77cdef0b8e..494b6779cc2 100644 --- a/regression/strings/StringValueOf05/test.desc +++ b/regression/strings/StringValueOf05/test.desc @@ -1,8 +1,9 @@ -KNOWNBUG +CORE StringValueOf05.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 7 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringValueOf06/test.desc b/regression/strings/StringValueOf06/test.desc index 56551c4a14b..29fe55a89f2 100644 --- a/regression/strings/StringValueOf06/test.desc +++ b/regression/strings/StringValueOf06/test.desc @@ -1,8 +1,9 @@ -KNOWNBUG +CORE StringValueOf06.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 7 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringValueOf07/test.desc b/regression/strings/StringValueOf07/test.desc index 6dde9de229d..e1d94ae7025 100644 --- a/regression/strings/StringValueOf07/test.desc +++ b/regression/strings/StringValueOf07/test.desc @@ -1,8 +1,9 @@ -KNOWNBUG +CORE StringValueOf07.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 8 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringValueOf08/test.desc b/regression/strings/StringValueOf08/test.desc index 21d64075aaf..3746e46471f 100644 --- a/regression/strings/StringValueOf08/test.desc +++ b/regression/strings/StringValueOf08/test.desc @@ -1,8 +1,9 @@ -FUTURE +CORE StringValueOf08.class ---string-refine +--refine-strings --string-max-length 100 ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 7 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringValueOf09/test.desc b/regression/strings/StringValueOf09/test.desc index 4ff97a7caef..d1bad9a12b6 100644 --- a/regression/strings/StringValueOf09/test.desc +++ b/regression/strings/StringValueOf09/test.desc @@ -1,8 +1,9 @@ -FUTURE +THOROUGH StringValueOf09.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 7 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/StringValueOf10/test.desc b/regression/strings/StringValueOf10/test.desc index 10e7f184189..3f8c5d6d60f 100644 --- a/regression/strings/StringValueOf10/test.desc +++ b/regression/strings/StringValueOf10/test.desc @@ -1,6 +1,6 @@ FUTURE StringValueOf10.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/SubString01/test.desc b/regression/strings/SubString01/test.desc index 8eea70cf458..975eaa118f3 100644 --- a/regression/strings/SubString01/test.desc +++ b/regression/strings/SubString01/test.desc @@ -1,6 +1,6 @@ -KNOWNBUG +CORE SubString01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/SubString02/test.desc b/regression/strings/SubString02/test.desc index 063ce88f0f2..2003191a147 100644 --- a/regression/strings/SubString02/test.desc +++ b/regression/strings/SubString02/test.desc @@ -1,8 +1,9 @@ -KNOWNBUG +CORE SubString02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 7 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/SubString03/test.desc b/regression/strings/SubString03/test.desc index f985329ce2d..22143857480 100644 --- a/regression/strings/SubString03/test.desc +++ b/regression/strings/SubString03/test.desc @@ -1,8 +1,9 @@ -KNOWNBUG +CORE SubString03.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ +^\[.*assertion\.1\] .* line 7 .* FAILURE$ ^VERIFICATION FAILED$ -- ^warning: ignoring diff --git a/regression/strings/TokenTest01/test.desc b/regression/strings/TokenTest01/test.desc index 02a11e8e392..122e6a8830a 100644 --- a/regression/strings/TokenTest01/test.desc +++ b/regression/strings/TokenTest01/test.desc @@ -1,6 +1,6 @@ FUTURE TokenTest01.class ---string-refine --unwind 30 +--refine-strings --unwind 30 ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/TokenTest02/test.desc b/regression/strings/TokenTest02/test.desc index 48e6b0c1ab6..6d1dabed602 100644 --- a/regression/strings/TokenTest02/test.desc +++ b/regression/strings/TokenTest02/test.desc @@ -1,6 +1,6 @@ FUTURE TokenTest02.class ---string-refine --unwind 15 +--refine-strings --unwind 15 ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/Validate01/test.desc b/regression/strings/Validate01/test.desc index e797b2735aa..649136a2956 100644 --- a/regression/strings/Validate01/test.desc +++ b/regression/strings/Validate01/test.desc @@ -1,6 +1,6 @@ FUTURE Validate01.class ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/Validate02/test.desc b/regression/strings/Validate02/test.desc index a5a3a6f1d20..22251c38a95 100644 --- a/regression/strings/Validate02/test.desc +++ b/regression/strings/Validate02/test.desc @@ -1,6 +1,6 @@ FUTURE Validate02.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/bug-test-gen-095/test.class b/regression/strings/bug-test-gen-095/test.class new file mode 100644 index 00000000000..3895d218c3d Binary files /dev/null and b/regression/strings/bug-test-gen-095/test.class differ diff --git a/regression/strings/bug-test-gen-095/test.desc b/regression/strings/bug-test-gen-095/test.desc new file mode 100644 index 00000000000..9f39bb3f26c --- /dev/null +++ b/regression/strings/bug-test-gen-095/test.desc @@ -0,0 +1,8 @@ +FUTURE +test.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +\[.*assertion\.1\] .* line 8 .* FAILURE +^VERIFICATION FAILED$ +-- diff --git a/regression/strings/bug-test-gen-095/test.java b/regression/strings/bug-test-gen-095/test.java new file mode 100644 index 00000000000..a6910527551 --- /dev/null +++ b/regression/strings/bug-test-gen-095/test.java @@ -0,0 +1,10 @@ +public class test +{ + public static void main(String[] args) + { + StringBuilder sb = new StringBuilder(args[0]); + sb.append("Z"); + String s = sb.toString(); + assert(s.equals("fg")); + } +} diff --git a/regression/strings/bug-test-gen-119-2/StringValueOfLong.class b/regression/strings/bug-test-gen-119-2/StringValueOfLong.class new file mode 100644 index 00000000000..821230a7f7f Binary files /dev/null and b/regression/strings/bug-test-gen-119-2/StringValueOfLong.class differ diff --git a/regression/strings/bug-test-gen-119-2/StringValueOfLong.java b/regression/strings/bug-test-gen-119-2/StringValueOfLong.java new file mode 100644 index 00000000000..21f21cec9f7 --- /dev/null +++ b/regression/strings/bug-test-gen-119-2/StringValueOfLong.java @@ -0,0 +1,9 @@ +public class StringValueOfLong +{ + public static void main() + { + long longValue = 10000000000L; // L suffix indicates long + String tmp=String.valueOf(longValue); + assert tmp.equals("10000000000"); + } +} diff --git a/regression/strings/bug-test-gen-119-2/test.desc b/regression/strings/bug-test-gen-119-2/test.desc new file mode 100644 index 00000000000..312601b835d --- /dev/null +++ b/regression/strings/bug-test-gen-119-2/test.desc @@ -0,0 +1,7 @@ +CORE +StringValueOfLong.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings/bug-test-gen-119/StringValueOfBool.class b/regression/strings/bug-test-gen-119/StringValueOfBool.class new file mode 100644 index 00000000000..150b1840b64 Binary files /dev/null and b/regression/strings/bug-test-gen-119/StringValueOfBool.class differ diff --git a/regression/strings/bug-test-gen-119/StringValueOfBool.java b/regression/strings/bug-test-gen-119/StringValueOfBool.java new file mode 100644 index 00000000000..0452785fede --- /dev/null +++ b/regression/strings/bug-test-gen-119/StringValueOfBool.java @@ -0,0 +1,10 @@ +public class StringValueOfBool +{ + public static void main() + { + boolean booleanValue = false; + + String tmp=String.valueOf(booleanValue); + assert tmp.equals("false"); + } +} diff --git a/regression/strings/bug-test-gen-119/test.desc b/regression/strings/bug-test-gen-119/test.desc new file mode 100644 index 00000000000..c5672ad9702 --- /dev/null +++ b/regression/strings/bug-test-gen-119/test.desc @@ -0,0 +1,7 @@ +CORE +StringValueOfBool.class +--refine-strings +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index 1ec17bca535..86af21533f8 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -1,18 +1,32 @@ -typedef struct __CPROVER_string { char *s; } __CPROVER_string; -//typedef struct __CPROVER_char { char c; } __CPROVER_char; -typedef unsigned char __CPROVER_char; +/*******************************************************************\ + +Module: Hack for C string tests + +Author: Romain Brenguier + +\*******************************************************************/ + +#ifndef CPROVER_ESSION_STRINGS_CPROVER_STRING_HACK_H +#define CPROVER_ESSION_STRINGS_CPROVER_STRING_HACK_H + +typedef struct __attribute__((__packed__)) __CPROVER_refined_string_type // NOLINT + { int length; char content[]; } __CPROVER_refined_string_type; +typedef __CPROVER_refined_string_type __CPROVER_string; //NOLINT /****************************************************************************** * CPROVER string functions ******************************************************************************/ /* returns s[p] */ -#define __CPROVER_char_at(s, p) __CPROVER_uninterpreted_string_char_at_func(s, p) +#define __CPROVER_char_at(s, p) \ + __CPROVER_uninterpreted_string_char_at_func(s, p) /* string equality */ -#define __CPROVER_string_equal(s1, s2) __CPROVER_uninterpreted_string_equal_func(s1, s2) +#define __CPROVER_string_equal(s1, s2) \ + __CPROVER_uninterpreted_string_equal_func(s1, s2) /* defines a string literal, e.g. __CPROVER_string_literal("foo") */ -#define __CPROVER_string_literal(s) __CPROVER_uninterpreted_string_literal_func(s) +#define __CPROVER_string_literal(s) \ + __CPROVER_uninterpreted_string_literal_func(s) /* defines a char literal, e.g. __CPROVER_char_literal("c"). NOTE: you * *must* use a C string literal as argument (i.e. double quotes "c", not @@ -20,30 +34,39 @@ typedef unsigned char __CPROVER_char; #define __CPROVER_char_literal(c) __CPROVER_uninterpreted_char_literal_func(c) /* produces the concatenation of s1 and s2 */ -#define __CPROVER_string_concat(s1, s2) __CPROVER_uninterpreted_string_concat_func(s1, s2) +#define __CPROVER_string_concat(s1, s2) \ + __CPROVER_uninterpreted_string_concat_func(s1, s2) /* return the length of s */ -#define __CPROVER_string_length(s) __CPROVER_uninterpreted_string_length_func(s) +#define __CPROVER_string_length(s) \ + __CPROVER_uninterpreted_string_length_func(s) /* extracts the substring between positions i and j (j not included) */ -#define __CPROVER_string_substring(s, i, j) __CPROVER_uninterpreted_string_substring_func(s, i, j) +#define __CPROVER_string_substring(s, i, j) \ + __CPROVER_uninterpreted_string_substring_func(s, i, j) /* test whether p is a prefix of s */ -#define __CPROVER_string_isprefix(p, s) __CPROVER_uninterpreted_string_is_prefix_func(p, s) +#define __CPROVER_string_isprefix(p, s) \ + __CPROVER_uninterpreted_string_is_prefix_func(p, s) /* test whether p is a suffix of s */ -#define __CPROVER_string_issuffix(p, s) __CPROVER_uninterpreted_string_is_suffix_func(p, s) +#define __CPROVER_string_issuffix(p, s) \ + __CPROVER_uninterpreted_string_is_suffix_func(p, s) /* test whether p contains s */ -#define __CPROVER_string_contains(p, s) __CPROVER_uninterpreted_string_contains_func(p, s) +#define __CPROVER_string_contains(p, s) \ + __CPROVER_uninterpreted_string_contains_func(p, s) /* first index where character c appears, -1 if not found */ -#define __CPROVER_string_index_of(s, c) __CPROVER_uninterpreted_string_index_of_func(s, c) +#define __CPROVER_string_index_of(s, c) \ + __CPROVER_uninterpreted_string_index_of_func(s, c) /* last index where character c appears */ -#define __CPROVER_string_last_index_of(s, c) __CPROVER_uninterpreted_string_last_index_of_func(s, c) +#define __CPROVER_string_last_index_of(s, c) \ + __CPROVER_uninterpreted_string_last_index_of_func(s, c) /* returns a new string obtained from s by setting s[p] = c */ -#define __CPROVER_char_set(s, p, c) __CPROVER_uninterpreted_string_char_set_func(s, p, c) +#define __CPROVER_char_set(s, p, c) \ + __CPROVER_uninterpreted_string_char_set_func(s, p, c) #define __CPROVER_string_copy(s) __CPROVER_uninterpreted_string_copy_func(s) @@ -54,19 +77,32 @@ typedef unsigned char __CPROVER_char; /****************************************************************************** * don't use these directly ******************************************************************************/ -extern __CPROVER_char __CPROVER_uninterpreted_string_char_at_func(__CPROVER_string str, int pos); -extern __CPROVER_bool __CPROVER_uninterpreted_string_equal_func(__CPROVER_string str1, __CPROVER_string str2); +extern char __CPROVER_uninterpreted_string_char_at_func( + __CPROVER_string str, int pos); +extern __CPROVER_bool __CPROVER_uninterpreted_string_equal_func( + __CPROVER_string str1, __CPROVER_string str2); extern __CPROVER_string __CPROVER_uninterpreted_string_literal_func(char * str); -extern __CPROVER_char __CPROVER_uninterpreted_char_literal_func(); -extern __CPROVER_string __CPROVER_uninterpreted_string_concat_func(__CPROVER_string str1, __CPROVER_string str2); +extern char __CPROVER_uninterpreted_char_literal_func(); +extern __CPROVER_string __CPROVER_uninterpreted_string_concat_func( + __CPROVER_string str1, __CPROVER_string str2); extern int __CPROVER_uninterpreted_string_length_func(__CPROVER_string str); -extern __CPROVER_string __CPROVER_uninterpreted_string_substring_func(__CPROVER_string str, int i, int j); -extern __CPROVER_bool __CPROVER_uninterpreted_string_is_prefix_func(__CPROVER_string pref, __CPROVER_string str); -extern __CPROVER_bool __CPROVER_uninterpreted_string_is_suffix_func(__CPROVER_string suff, __CPROVER_string str); -extern __CPROVER_bool __CPROVER_uninterpreted_string_contains_func(__CPROVER_string str1, __CPROVER_string str2); -extern int __CPROVER_uninterpreted_string_index_of_func(__CPROVER_string str, __CPROVER_char c); -extern int __CPROVER_uninterpreted_string_last_index_of_func(__CPROVER_string str, __CPROVER_char c); -extern __CPROVER_string __CPROVER_uninterpreted_string_char_set_func(__CPROVER_string str, int pos, __CPROVER_char c); -extern __CPROVER_string __CPROVER_uninterpreted_string_copy_func(__CPROVER_string str); +extern __CPROVER_string __CPROVER_uninterpreted_string_substring_func( + __CPROVER_string str, int i, int j); +extern __CPROVER_bool __CPROVER_uninterpreted_string_is_prefix_func( + __CPROVER_string pref, __CPROVER_string str); +extern __CPROVER_bool __CPROVER_uninterpreted_string_is_suffix_func( + __CPROVER_string suff, __CPROVER_string str); +extern __CPROVER_bool __CPROVER_uninterpreted_string_contains_func( + __CPROVER_string str1, __CPROVER_string str2); +extern int __CPROVER_uninterpreted_string_index_of_func( + __CPROVER_string str, char c); +extern int __CPROVER_uninterpreted_string_last_index_of_func( + __CPROVER_string str, char c); +extern __CPROVER_string __CPROVER_uninterpreted_string_char_set_func( + __CPROVER_string str, int pos, char c); +extern __CPROVER_string __CPROVER_uninterpreted_string_copy_func( + __CPROVER_string str); extern int __CPROVER_uninterpreted_string_parse_int_func(__CPROVER_string str); extern __CPROVER_string __CPROVER_uninterpreted_string_of_int_func(int i); + +#endif diff --git a/regression/strings/java_append_char/test.desc b/regression/strings/java_append_char/test.desc new file mode 100644 index 00000000000..1c583f7be2d --- /dev/null +++ b/regression/strings/java_append_char/test.desc @@ -0,0 +1,8 @@ +CORE +test_append_char.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +^\[.*assertion\.1\].* line 15.* FAILURE$ +-- diff --git a/regression/strings/java_append_char/test_append_char.class b/regression/strings/java_append_char/test_append_char.class new file mode 100644 index 00000000000..c0b1491423b Binary files /dev/null and b/regression/strings/java_append_char/test_append_char.class differ diff --git a/regression/strings/java_append_char/test_append_char.java b/regression/strings/java_append_char/test_append_char.java new file mode 100644 index 00000000000..90e9ab089a2 --- /dev/null +++ b/regression/strings/java_append_char/test_append_char.java @@ -0,0 +1,17 @@ +public class test_append_char +{ + public static void main(/*String[] args*/) + { + char[] diff = {'d', 'i', 'f', 'f'}; + char[] blue = {'b', 'l', 'u', 'e'}; + + StringBuilder buffer = new StringBuilder(); + + buffer.append(diff) + .append(blue); + + String tmp=buffer.toString(); + System.out.println(tmp); + assert(!tmp.equals("diffblue")); + } +} diff --git a/regression/strings/java_append_int/test.desc b/regression/strings/java_append_int/test.desc new file mode 100644 index 00000000000..1d3e387d278 --- /dev/null +++ b/regression/strings/java_append_int/test.desc @@ -0,0 +1,9 @@ +KNOWNBUG +test_append_int.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion\.1\].* line 9.* FAILURE$ +-- +-- +Requires private library, should be moved to test-gen suite diff --git a/regression/strings/java_append_int/test_append_int.class b/regression/strings/java_append_int/test_append_int.class new file mode 100644 index 00000000000..d9ee5046e7d Binary files /dev/null and b/regression/strings/java_append_int/test_append_int.class differ diff --git a/regression/strings/java_append_int/test_append_int.java b/regression/strings/java_append_int/test_append_int.java new file mode 100644 index 00000000000..cf550211ad7 --- /dev/null +++ b/regression/strings/java_append_int/test_append_int.java @@ -0,0 +1,11 @@ +public class test_append_int +{ + public static void main(/*String[] args*/) + { + StringBuilder diffblue = new StringBuilder(); + diffblue.append("d"); + diffblue.append(4); + String s = diffblue.toString(); + assert(!s.equals("d4")); + } +} diff --git a/regression/strings/java_append_object/test.desc b/regression/strings/java_append_object/test.desc new file mode 100644 index 00000000000..23ad1a81be4 --- /dev/null +++ b/regression/strings/java_append_object/test.desc @@ -0,0 +1,7 @@ +KNOWNBUG +test_append_object.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion\.1\].* line 15.* FAILURE$ +-- diff --git a/regression/strings/java_append_object/test_append_object.class b/regression/strings/java_append_object/test_append_object.class new file mode 100644 index 00000000000..fbfec51a3f5 Binary files /dev/null and b/regression/strings/java_append_object/test_append_object.class differ diff --git a/regression/strings/java_append_object/test_append_object.java b/regression/strings/java_append_object/test_append_object.java new file mode 100644 index 00000000000..e139a01679a --- /dev/null +++ b/regression/strings/java_append_object/test_append_object.java @@ -0,0 +1,17 @@ +public class test_append_object +{ + public static void main(/*String[] args*/) + { + Object diff = "diff"; + Object blue = "blue"; + + StringBuilder buffer = new StringBuilder(); + + buffer.append(diff) + .append(blue); + + String tmp=buffer.toString(); + System.out.println(tmp); + assert(!tmp.equals("diffblue")); + } +} diff --git a/regression/strings/java_append_string/test.desc b/regression/strings/java_append_string/test.desc new file mode 100644 index 00000000000..7b6ea8ccae7 --- /dev/null +++ b/regression/strings/java_append_string/test.desc @@ -0,0 +1,7 @@ +FUTURE +test_append_string.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion.1\].* line 12.* FAILURE$ +-- diff --git a/regression/strings/java_append_string/test_append_string.class b/regression/strings/java_append_string/test_append_string.class new file mode 100644 index 00000000000..f2cb5cf8bea Binary files /dev/null and b/regression/strings/java_append_string/test_append_string.class differ diff --git a/regression/strings/java_append_string/test_append_string.java b/regression/strings/java_append_string/test_append_string.java new file mode 100644 index 00000000000..54665da29cc --- /dev/null +++ b/regression/strings/java_append_string/test_append_string.java @@ -0,0 +1,14 @@ +public class test_append_string +{ + public static void main(/*String[] args*/) + { + String di = new String("di"); + StringBuilder diff = new StringBuilder(); + diff.append(di); + diff.append("ff"); + System.out.println(diff); + String s = diff.toString(); + System.out.println(s); + assert (!s.equals("diff")); + } +} diff --git a/regression/strings/java_case/test.desc b/regression/strings/java_case/test.desc index 9f48288c694..22d58ddb3ac 100644 --- a/regression/strings/java_case/test.desc +++ b/regression/strings/java_case/test.desc @@ -1,10 +1,7 @@ -FUTURE +CORE test_case.class ---string-refine +--refine-strings --string-max-length 1000 ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_case.java line 11: SUCCESS$ -^\[assertion.2\] assertion at file test_case.java line 12: SUCCESS$ -^\[assertion.3\] assertion at file test_case.java line 13: SUCCESS$ -^\[assertion.4\] assertion at file test_case.java line 14: FAILURE$ +^\[.*assertion\.1\].* line 8.* FAILURE$ -- diff --git a/regression/strings/java_case/test_case.class b/regression/strings/java_case/test_case.class index 8579881de17..5887b496986 100644 Binary files a/regression/strings/java_case/test_case.class and b/regression/strings/java_case/test_case.class differ diff --git a/regression/strings/java_case/test_case.java b/regression/strings/java_case/test_case.java index ce3a51814c8..309abfc07b9 100644 --- a/regression/strings/java_case/test_case.java +++ b/regression/strings/java_case/test_case.java @@ -1,16 +1,12 @@ -public class test_case { - - public static void main(String[] argv) { - - String s = new String("AbcCdE"); - String l = s.toLowerCase(); - System.out.println(l); - - String u = s.toUpperCase(); - System.out.println(u); - assert(l.equals("abccde")); - assert(u.equals("ABCCDE")); - assert(s.equalsIgnoreCase("ABccDe")); - assert(!l.equals("abccde") || !u.equals("ABCCDE")); - } +public class test_case +{ + public static void main(/*String[] argv*/) + { + String s = new String("Ab"); + String l = s.toLowerCase(); + String u = s.toUpperCase(); + assert(!l.equals("ab") || + !u.equals("AB") || + !s.equalsIgnoreCase("aB")); + } } diff --git a/regression/strings/java_char_array/test.desc b/regression/strings/java_char_array/test.desc index 8282b808b84..0acb4c57e47 100644 --- a/regression/strings/java_char_array/test.desc +++ b/regression/strings/java_char_array/test.desc @@ -1,9 +1,7 @@ -FUTURE +CORE test_char_array.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_char_array.java line 11: SUCCESS$ -^\[assertion.2\] assertion at file test_char_array.java line 12: SUCCESS$ -^\[assertion.3\] assertion at file test_char_array.java line 13: FAILURE$ +^\[.*assertion\.1\].* line 9.* FAILURE$ -- diff --git a/regression/strings/java_char_array/test_char_array.class b/regression/strings/java_char_array/test_char_array.class index 836942da134..38a7ecf41ed 100644 Binary files a/regression/strings/java_char_array/test_char_array.class and b/regression/strings/java_char_array/test_char_array.class differ diff --git a/regression/strings/java_char_array/test_char_array.java b/regression/strings/java_char_array/test_char_array.java index 3cfd4000d3a..96e250fb030 100644 --- a/regression/strings/java_char_array/test_char_array.java +++ b/regression/strings/java_char_array/test_char_array.java @@ -1,15 +1,13 @@ -public class test_char_array { - - public static void main(String[] argv) - { - String s = "abc"; - char [] str = s.toCharArray(); - int[] test = new int[312]; - char c = str[2]; - String t = argv[0]; - char d = t.charAt(0); - assert(str.length == 3); - assert(c == 'c'); - assert(c == d || d < 'a' || d > 'z' ); - } +public class test_char_array +{ + public static void main(/*String[] argv*/) + { + String s = "abc"; + char [] str = s.toCharArray(); + char c = str[2]; + char a = s.charAt(0); + assert(str.length != 3 || + a != 'a' || + c != 'c'); + } } diff --git a/regression/strings/java_char_array_init/test.desc b/regression/strings/java_char_array_init/test.desc index fe5ffae7238..61a71f5034f 100644 --- a/regression/strings/java_char_array_init/test.desc +++ b/regression/strings/java_char_array_init/test.desc @@ -1,11 +1,7 @@ -FUTURE +CORE test_init.class ---string-refine +--refine-strings --string-max-length 1000 ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_init.java line 16: SUCCESS$ -^\[assertion.2\] assertion at file test_init.java line 17: SUCCESS$ -^\[assertion.3\] assertion at file test_init.java line 18: SUCCESS$ -^\[assertion.4\] assertion at file test_init.java line 20: SUCCESS$ -^\[assertion.5\] assertion at file test_init.java line 21: FAILURE$ +^\[.*assertion.1\].* line 14.* FAILURE$ -- diff --git a/regression/strings/java_char_array_init/test_init.class b/regression/strings/java_char_array_init/test_init.class index be3baee56bd..ff9c64510da 100644 Binary files a/regression/strings/java_char_array_init/test_init.class and b/regression/strings/java_char_array_init/test_init.class differ diff --git a/regression/strings/java_char_array_init/test_init.java b/regression/strings/java_char_array_init/test_init.java index 5f4e220844c..b27030b1306 100644 --- a/regression/strings/java_char_array_init/test_init.java +++ b/regression/strings/java_char_array_init/test_init.java @@ -1,23 +1,18 @@ public class test_init { - public static void main(String[] argv) - { - char [] str = new char[10]; - str[0] = 'H'; - str[1] = 'e'; - str[2] = 'l'; - str[3] = 'l'; - str[4] = 'o'; - String s = new String(str); - String t = new String(str,1,2); + public static void main(/*String[] argv*/) + { + char [] str = new char[10]; + str[0] = 'H'; + str[1] = 'e'; + str[2] = 'l'; + str[3] = 'l'; + str[4] = 'o'; + String s = new String(str); + String t = new String(str,1,2); - System.out.println(s); - System.out.println(s.length()); - assert(s.startsWith("Hello")); - assert(s.length() == 10); - assert(t.equals("el")); - String u = String.valueOf(str,3,2); - assert(u.equals("lo")); - assert(s.equals("Hello") || !t.equals("el") || !u.equals("lo")); - } + assert(s.length() != 10 || + !t.equals("el") || + !s.startsWith("Hello")); + } } diff --git a/regression/strings/java_char_at/test.desc b/regression/strings/java_char_at/test.desc index 6f206a0f22f..b9f7706b7e2 100644 --- a/regression/strings/java_char_at/test.desc +++ b/regression/strings/java_char_at/test.desc @@ -1,9 +1,7 @@ -FUTURE +CORE test_char_at.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_char_at.java line 11: SUCCESS$ -^\[assertion.2\] assertion at file test_char_at.java line 13: FAILURE$ -^\[assertion.3\] assertion at file test_char_at.java line 15: SUCCESS$ +^\[.*assertion\.1\].* line 5.* FAILURE$ -- diff --git a/regression/strings/java_char_at/test_char_at.class b/regression/strings/java_char_at/test_char_at.class index 7d1f07fad7d..dc9ed32f19f 100644 Binary files a/regression/strings/java_char_at/test_char_at.class and b/regression/strings/java_char_at/test_char_at.class differ diff --git a/regression/strings/java_char_at/test_char_at.java b/regression/strings/java_char_at/test_char_at.java index 337c6524099..9ae02733fb8 100644 --- a/regression/strings/java_char_at/test_char_at.java +++ b/regression/strings/java_char_at/test_char_at.java @@ -1,17 +1,7 @@ public class test_char_at { - public static void main(String[] argv) { - String s = new String("Hello World!"); - char c = s.charAt(4); - StringBuilder sb = new StringBuilder(s); - sb.setCharAt(5,'-'); - s = sb.toString(); - - if(argv.length==1) - assert(c == 'o'); - else if(argv.length==2) - assert(c == 'p'); - else - assert(s.equals("Hello-World!")); - } + public static void main(/*String[] argv*/) { + String s = new String("abc"); + assert(s.charAt(2)!='c'); + } } diff --git a/regression/strings/java_code_point/test.desc b/regression/strings/java_code_point/test.desc index 35ca0cd6f4b..b8571739ab9 100644 --- a/regression/strings/java_code_point/test.desc +++ b/regression/strings/java_code_point/test.desc @@ -1,11 +1,7 @@ -FUTURE +CORE test_code_point.class ---string-refine -^EXIT=0$ +--refine-strings +^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_code_point.java line 5: SUCCESS$ -^\[assertion.2\] assertion at file test_code_point.java line 6: SUCCESS$ -^\[assertion.3\] assertion at file test_code_point.java line 7: SUCCESS$ -^\[assertion.4\] assertion at file test_code_point.java line 8: SUCCESS$ -^\[assertion.5\] assertion at file test_code_point.java line 11: SUCCESS$ +^\[.*assertion\.1\].* line 8.* FAILURE$ -- diff --git a/regression/strings/java_code_point/test_code_point.class b/regression/strings/java_code_point/test_code_point.class index c257f0633ec..f2f5fbad63a 100644 Binary files a/regression/strings/java_code_point/test_code_point.class and b/regression/strings/java_code_point/test_code_point.class differ diff --git a/regression/strings/java_code_point/test_code_point.java b/regression/strings/java_code_point/test_code_point.java index c27a56f575c..345dc1fa08b 100644 --- a/regression/strings/java_code_point/test_code_point.java +++ b/regression/strings/java_code_point/test_code_point.java @@ -1,13 +1,14 @@ -public class test_code_point { - - public static void main(String[] argv) { - String s = "!𐤇𐤄𐤋𐤋𐤅"; - assert(s.codePointAt(1) == 67847); - assert(s.codePointBefore(3) == 67847); - assert(s.codePointCount(1,5) >= 2); - assert(s.offsetByCodePoints(1,2) >= 3); - StringBuilder sb = new StringBuilder(); - sb.appendCodePoint(0x10907); - assert(s.charAt(1) == sb.charAt(0)); - } +public class test_code_point +{ + public static void main(/*String[] argv*/) + { + String s = "!𐤇𐤄𐤋𐤋𐤅"; + StringBuilder sb = new StringBuilder(); + sb.appendCodePoint(0x10907); + assert(s.codePointAt(1) != 67847 || + s.codePointBefore(3) != 67847 || + s.codePointCount(1,5) < 2 || + s.offsetByCodePoints(1,2) < 3 || + s.charAt(1) != sb.charAt(0)); + } } diff --git a/regression/strings/java_compare/test.desc b/regression/strings/java_compare/test.desc index 517b208c3e4..c409e58fadc 100644 --- a/regression/strings/java_compare/test.desc +++ b/regression/strings/java_compare/test.desc @@ -1,10 +1,7 @@ -FUTURE +CORE test_compare.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_compare.java line 6: SUCCESS$ -^\[assertion.2\] assertion at file test_compare.java line 8: FAILURE$ -^\[assertion.3\] assertion at file test_compare.java line 11: SUCCESS$ -^\[assertion.4\] assertion at file test_compare.java line 12: FAILURE$ +^\[.*assertion\.1\].* line 7.* FAILURE$ -- diff --git a/regression/strings/java_compare/test_compare.class b/regression/strings/java_compare/test_compare.class index 5616013c523..67f18914ea6 100644 Binary files a/regression/strings/java_compare/test_compare.class and b/regression/strings/java_compare/test_compare.class differ diff --git a/regression/strings/java_compare/test_compare.java b/regression/strings/java_compare/test_compare.java index 8c1d4b71a0c..0a535fd0bf3 100644 --- a/regression/strings/java_compare/test_compare.java +++ b/regression/strings/java_compare/test_compare.java @@ -1,18 +1,9 @@ -public class test_compare { - - public static void main(String[] argv) { - String s1 = "abc"; - String s2 = "aac"; - assert(s1.compareTo(s2) == 1); - - assert(s2.compareTo(argv[0]) != -1); - - String s3 = "abc"; - assert(s3.hashCode() == s1.hashCode()); - assert(s3.hashCode() == s2.hashCode()); - - /*String x = s1.intern(); - String y = s3.intern(); - assert(x == y);*/ - } +public class test_compare +{ + public static void main(/*String[] argv*/) + { + String s1 = "ab"; + String s2 = "aa"; + assert(s1.compareTo(s2) != 1); + } } diff --git a/regression/strings/java_concat/test.desc b/regression/strings/java_concat/test.desc index 8ef2898e0d7..2dcca464779 100644 --- a/regression/strings/java_concat/test.desc +++ b/regression/strings/java_concat/test.desc @@ -1,8 +1,8 @@ -FUTURE +CORE test_concat.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_concat.java line 9: SUCCESS$ -^\[assertion.2\] assertion at file test_concat.java line 10: FAILURE$ +^\[.*assertion.1\].* line 10.* SUCCESS$ +^\[.*assertion.2\].* line 11.* FAILURE$ -- diff --git a/regression/strings/java_concat/test_concat.class b/regression/strings/java_concat/test_concat.class index a6d4008aa26..a69c05921f6 100644 Binary files a/regression/strings/java_concat/test_concat.class and b/regression/strings/java_concat/test_concat.class differ diff --git a/regression/strings/java_concat/test_concat.java b/regression/strings/java_concat/test_concat.java index d714ea89538..6bbe753b2e4 100644 --- a/regression/strings/java_concat/test_concat.java +++ b/regression/strings/java_concat/test_concat.java @@ -1,12 +1,13 @@ -public class test_concat { - - public static void main(String[] argv) { - String s = new String("pi"); - int i = s.length(); - String t = new String("ppo"); - String u = s.concat(t); - char c = u.charAt(i); - assert(c == 'p'); - assert(c == 'o'); - } +public class test_concat +{ + public static void main(/*String[] argv*/) + { + String s = new String("pi"); + int i = s.length(); + String t = new String("ppo"); + String u = s.concat(t); + char c = u.charAt(i); + assert(c == 'p'); + assert(c != 'p'); + } } diff --git a/regression/strings/java_contains/test.desc b/regression/strings/java_contains/test.desc index 4e7a3bd4f7d..e5bb1edbc3b 100644 --- a/regression/strings/java_contains/test.desc +++ b/regression/strings/java_contains/test.desc @@ -1,8 +1,7 @@ -FUTURE +CORE test_contains.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_contains.java line 7: SUCCESS$ -^\[assertion.2\] assertion at file test_contains.java line 8: FAILURE$ +^\[.*assertion\.1\].* line 7.* FAILURE$ -- diff --git a/regression/strings/java_contains/test_contains.class b/regression/strings/java_contains/test_contains.class index 855ab828393..9bbccb03775 100644 Binary files a/regression/strings/java_contains/test_contains.class and b/regression/strings/java_contains/test_contains.class differ diff --git a/regression/strings/java_contains/test_contains.java b/regression/strings/java_contains/test_contains.java index fce2ee63047..6f4c60a1a2e 100644 --- a/regression/strings/java_contains/test_contains.java +++ b/regression/strings/java_contains/test_contains.java @@ -1,10 +1,9 @@ -public class test_contains { - - public static void main(String[] argv) { - String s = new String("Hello World!"); - String u = "o W"; - String t = "W o"; - assert(s.contains(u)); - assert(s.contains(t)); - } +public class test_contains +{ + public static void main(/*String[] argv*/) + { + String s = new String("Abc"); + String u = "bc"; + assert(!s.contains(u)); + } } diff --git a/regression/strings/java_delete/test.desc b/regression/strings/java_delete/test.desc index c6c608c0955..964669b6896 100644 --- a/regression/strings/java_delete/test.desc +++ b/regression/strings/java_delete/test.desc @@ -1,8 +1,7 @@ -FUTURE +CORE test_delete.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_delete.java line 11: SUCCESS$ -^\[assertion.2\] assertion at file test_delete.java line 12: FAILURE$ +^\[.*assertion\.1\].* line 8.* FAILURE$ -- diff --git a/regression/strings/java_delete/test_delete.class b/regression/strings/java_delete/test_delete.class index 6d30024f108..7036ce13c90 100644 Binary files a/regression/strings/java_delete/test_delete.class and b/regression/strings/java_delete/test_delete.class differ diff --git a/regression/strings/java_delete/test_delete.java b/regression/strings/java_delete/test_delete.java index c91b16c5b89..ea846cd215a 100644 --- a/regression/strings/java_delete/test_delete.java +++ b/regression/strings/java_delete/test_delete.java @@ -1,15 +1,10 @@ -public class test_delete { - - public static void main(String[] argv) { - StringBuilder s = new StringBuilder(); - s.append("Hello World!"); - s.delete(4,6); - s.deleteCharAt(1); - - String str = s.toString(); - System.out.println(str); - assert(str.equals("HllWorld!")); - assert(!str.equals("HllWorld!")); - - } +public class test_delete +{ + public static void main(/*String[] argv*/) + { + StringBuilder s = new StringBuilder("Abc"); + s.delete(1,2); + String str = s.toString(); + assert(!str.equals("Ac")); + } } diff --git a/regression/strings/java_delete_char_at/test.desc b/regression/strings/java_delete_char_at/test.desc new file mode 100644 index 00000000000..8450851614c --- /dev/null +++ b/regression/strings/java_delete_char_at/test.desc @@ -0,0 +1,7 @@ +CORE +test_delete_char_at.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion\.1\].* line 9.* FAILURE$ +-- diff --git a/regression/strings/java_delete_char_at/test_delete_char_at.class b/regression/strings/java_delete_char_at/test_delete_char_at.class new file mode 100644 index 00000000000..ed3148e2f7e Binary files /dev/null and b/regression/strings/java_delete_char_at/test_delete_char_at.class differ diff --git a/regression/strings/java_delete_char_at/test_delete_char_at.java b/regression/strings/java_delete_char_at/test_delete_char_at.java new file mode 100644 index 00000000000..5f2c995b56b --- /dev/null +++ b/regression/strings/java_delete_char_at/test_delete_char_at.java @@ -0,0 +1,11 @@ +public class test_delete_char_at +{ + public static void main(/*String[] argv*/) + { + StringBuilder s = new StringBuilder(); + s.append("Abc"); + s.deleteCharAt(1); + String str = s.toString(); + assert(!str.equals("Ac")); + } +} diff --git a/regression/strings/java_easychair/easychair.class b/regression/strings/java_easychair/easychair.class index e47900cc0b2..e6c5f66c42d 100644 Binary files a/regression/strings/java_easychair/easychair.class and b/regression/strings/java_easychair/easychair.class differ diff --git a/regression/strings/java_easychair/easychair.java b/regression/strings/java_easychair/easychair.java index 55ca2a31bb3..caed962fb46 100644 --- a/regression/strings/java_easychair/easychair.java +++ b/regression/strings/java_easychair/easychair.java @@ -1,34 +1,34 @@ -public class easychair { +public class easychair +{ + public static void main(String[] argv) + { + if(argv.length > 1) + { + String str = new String(argv[1]); + if(str.length() < 40) + { + // containing "/" and containing "EasyChair" + int lastSlash = str.lastIndexOf('/'); + if(lastSlash < 0) return ; - public static void main(String[] argv) { - if(argv.length > 1){ - String str = new String(argv[1]); - if(str.length() < 40){ - - // containing "/" and containing "EasyChair" - int lastSlash = str.lastIndexOf('/'); - if(lastSlash < 0) return ; - - String rest = str.substring(lastSlash + 1); - // warning: removed this because contains is not efficient at the moment - if(! rest.contains("EasyChair")) return ; - // (2) Check that str starts with "http://" - if(! str.startsWith("http://")) return ; - // (3) Take the string between "http://" and the last "/". - // if it starts with "www." strip the "www." off - String t = str.substring("http://".length(),lastSlash - "http://".length()); - if(t.startsWith("www.")) - t = t.substring("www.".length()); - - // - //(4) Check that after stripping we have either "live.com" - // or "google.com" - if(!t.equals("live.com") && !t.equals("google.com")) - return ; - // s survived all checks - assert(false); //return true; - } - } - } + String rest = str.substring(lastSlash + 1); + // warning: removed this because contains is not efficient at the moment + if(! rest.contains("EasyChair")) return ; + // (2) Check that str starts with "http://" + if(! str.startsWith("http://")) return ; + // (3) Take the string between "http://" and the last "/". + // if it starts with "www." strip the "www." off + String t = str.substring("http://".length(),lastSlash - "http://".length()); + if(t.startsWith("www.")) + t = t.substring("www.".length()); + //(4) Check that after stripping we have either "live.com" + // or "google.com" + if(!t.equals("live.com") && !t.equals("google.com")) + return ; + // s survived all checks + assert(false); //return true; + } + } + } } diff --git a/regression/strings/java_easychair/test.desc b/regression/strings/java_easychair/test.desc index 8680af72c5a..004b61e2b18 100644 --- a/regression/strings/java_easychair/test.desc +++ b/regression/strings/java_easychair/test.desc @@ -1,7 +1,7 @@ -FUTURE +THOROUGH easychair.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file easychair.java line 29: FAILURE$ +^\[.*assertion\.1\].* line 30.* FAILURE$ -- diff --git a/regression/strings/java_empty/test.desc b/regression/strings/java_empty/test.desc index cab514b80b5..0d2635c6963 100644 --- a/regression/strings/java_empty/test.desc +++ b/regression/strings/java_empty/test.desc @@ -1,8 +1,7 @@ -FUTURE +CORE test_empty.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_empty.java line 4: SUCCESS$ -^\[assertion.2\] assertion at file test_empty.java line 5: FAILURE$ +^\[.*assertion\.1\].* line 6.* FAILURE$ -- diff --git a/regression/strings/java_empty/test_empty.class b/regression/strings/java_empty/test_empty.class index f0ced290ee3..147a2b628fe 100644 Binary files a/regression/strings/java_empty/test_empty.class and b/regression/strings/java_empty/test_empty.class differ diff --git a/regression/strings/java_empty/test_empty.java b/regression/strings/java_empty/test_empty.java index 2465fb16e41..18fde4a115e 100644 --- a/regression/strings/java_empty/test_empty.java +++ b/regression/strings/java_empty/test_empty.java @@ -1,7 +1,8 @@ -public class test_empty { - public static void main(String[] argv) { - String empty = " "; - assert(empty.trim().isEmpty()); - assert(empty.isEmpty()); - } +public class test_empty +{ + public static void main(/*String[] argv*/) + { + String empty = ""; + assert(!empty.isEmpty()); + } } diff --git a/regression/strings/java_endswith/test.desc b/regression/strings/java_endswith/test.desc new file mode 100644 index 00000000000..8d6444b75bd --- /dev/null +++ b/regression/strings/java_endswith/test.desc @@ -0,0 +1,7 @@ +CORE +test_endswith.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion\.1\].* line 7.* FAILURE$ +-- diff --git a/regression/strings/java_endswith/test_endswith.class b/regression/strings/java_endswith/test_endswith.class new file mode 100644 index 00000000000..e3d453c444f Binary files /dev/null and b/regression/strings/java_endswith/test_endswith.class differ diff --git a/regression/strings/java_endswith/test_endswith.java b/regression/strings/java_endswith/test_endswith.java new file mode 100644 index 00000000000..fabf6f8dde0 --- /dev/null +++ b/regression/strings/java_endswith/test_endswith.java @@ -0,0 +1,9 @@ +public class test_endswith +{ + public static void main(/*String[] argv*/) + { + String s = new String("Abcd"); + String suff = "cd"; + assert(!s.endsWith(suff)); + } +} diff --git a/regression/strings/java_equal/test.desc b/regression/strings/java_equal/test.desc index d66c30b26fe..3e744a2eb05 100644 --- a/regression/strings/java_equal/test.desc +++ b/regression/strings/java_equal/test.desc @@ -1,8 +1,7 @@ -FUTURE +CORE test_equal.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_equal.java line 7: FAILURE$ -^\[assertion.2\] assertion at file test_equal.java line 8: SUCCESS$ +^\[.*assertion\.1\].* line 8.* FAILURE$ -- diff --git a/regression/strings/java_equal/test_equal.class b/regression/strings/java_equal/test_equal.class index 26ee19e6cb1..e0fc6db8aaf 100644 Binary files a/regression/strings/java_equal/test_equal.class and b/regression/strings/java_equal/test_equal.class differ diff --git a/regression/strings/java_equal/test_equal.java b/regression/strings/java_equal/test_equal.java index 151162a106d..e8c9ac7cb1a 100644 --- a/regression/strings/java_equal/test_equal.java +++ b/regression/strings/java_equal/test_equal.java @@ -1,10 +1,9 @@ -public class test_equal { - - public static void main(String[] argv) { - String s = new String("pi"); - String t = new String("po"); - String u = "po"; - assert(s.equals(t)); - assert(t.equals(u)); - } +public class test_equal +{ + public static void main(String[] argv) + { + String s = new String("pi"); + String t = new String("po"); + assert(!s.equals(t)); + } } diff --git a/regression/strings/java_float/test.desc b/regression/strings/java_float/test.desc index 955f0358eab..7a560bf3ccf 100644 --- a/regression/strings/java_float/test.desc +++ b/regression/strings/java_float/test.desc @@ -1,10 +1,7 @@ -FUTURE +THOROUGH test_float.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_float.java line 14: SUCCESS$ -^\[assertion.2\] assertion at file test_float.java line 15: SUCCESS$ -^\[assertion.3\] assertion at file test_float.java line 16: SUCCESS$ -^\[assertion.4\] assertion at file test_float.java line 17: FAILURE$ +^\[.*assertion\.1\].* line 15.* FAILURE$ -- diff --git a/regression/strings/java_float/test_float.class b/regression/strings/java_float/test_float.class index 356d0e17871..00e8622e2ac 100644 Binary files a/regression/strings/java_float/test_float.class and b/regression/strings/java_float/test_float.class differ diff --git a/regression/strings/java_float/test_float.java b/regression/strings/java_float/test_float.java index e59c631d91e..312f1aeaf10 100644 --- a/regression/strings/java_float/test_float.java +++ b/regression/strings/java_float/test_float.java @@ -1,20 +1,17 @@ -public class test_float { - - public static void main(String[] arg) { - float inf = 100.0f / 0.0f; - float minus_inf = -100.0f / 0.0f; - float nan = 0.0f / 0.0f; - String inf_string = Float.toString(inf); - String mininf_string = Float.toString(minus_inf); - String nan_string = Float.toString(nan); - //String arg1 = arg[0]; - System.out.println(nan_string); - System.out.println(inf_string); - System.out.println(mininf_string); - assert(nan_string.equals("NaN")); - assert(inf_string.equals("Infinity")); - assert(mininf_string.equals("-Infinity")); - assert(!nan_string.equals("NaN") || !inf_string.equals("Infinity") - || !mininf_string.equals("-Infinity")); - } +public class test_float +{ + public static void main(/*String[] arg*/) + { + float inf = 100.0f / 0.0f; + float minus_inf = -100.0f / 0.0f; + float nan = 0.0f / 0.0f; + String inf_string = Float.toString(inf); + String mininf_string = Float.toString(minus_inf); + String nan_string = Float.toString(nan); + System.out.println(nan_string); + System.out.println(inf_string); + System.out.println(mininf_string); + assert(!nan_string.equals("NaN") || !inf_string.equals("Infinity") + || !mininf_string.equals("-Infinity")); + } } diff --git a/regression/strings/java_hash_code/test.desc b/regression/strings/java_hash_code/test.desc new file mode 100644 index 00000000000..b8893f4a9b0 --- /dev/null +++ b/regression/strings/java_hash_code/test.desc @@ -0,0 +1,7 @@ +CORE +test_hash_code.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion\.1\].* line 7.* FAILURE$ +-- diff --git a/regression/strings/java_hash_code/test_hash_code.class b/regression/strings/java_hash_code/test_hash_code.class new file mode 100644 index 00000000000..d9b3e2b2f3d Binary files /dev/null and b/regression/strings/java_hash_code/test_hash_code.class differ diff --git a/regression/strings/java_hash_code/test_hash_code.java b/regression/strings/java_hash_code/test_hash_code.java new file mode 100644 index 00000000000..fbc15f0b4c2 --- /dev/null +++ b/regression/strings/java_hash_code/test_hash_code.java @@ -0,0 +1,9 @@ +public class test_hash_code +{ + public static void main(/*String[] argv*/) + { + String s1 = "ab"; + String s2 = "ab"; + assert(s1.hashCode() != s2.hashCode()); + } +} diff --git a/regression/strings/java_index_of/test.desc b/regression/strings/java_index_of/test.desc index daa6c32493b..67ff3297142 100644 --- a/regression/strings/java_index_of/test.desc +++ b/regression/strings/java_index_of/test.desc @@ -1,16 +1,7 @@ -FUTURE +CORE test_index_of.class ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_index_of.java line 13: SUCCESS$ -^\[assertion.2\] assertion at file test_index_of.java line 14: FAILURE$ -^\[assertion.3\] assertion at file test_index_of.java line 17: SUCCESS$ -^\[assertion.4\] assertion at file test_index_of.java line 18: FAILURE$ -^\[assertion.5\] assertion at file test_index_of.java line 21: SUCCESS$ -^\[assertion.6\] assertion at file test_index_of.java line 22: FAILURE$ -^\[assertion.7\] assertion at file test_index_of.java line 25: SUCCESS$ -^\[assertion.8\] assertion at file test_index_of.java line 26: FAILURE$ -^\[assertion.9\] assertion at file test_index_of.java line 28: SUCCESS$ -^\[assertion.10\] assertion at file test_index_of.java line 29: SUCCESS$ +^\[.*assertion\.1\].* line 8.* FAILURE$ -- diff --git a/regression/strings/java_index_of/test_index_of.class b/regression/strings/java_index_of/test_index_of.class index 8b3b7525f1a..cae397a79fb 100644 Binary files a/regression/strings/java_index_of/test_index_of.class and b/regression/strings/java_index_of/test_index_of.class differ diff --git a/regression/strings/java_index_of/test_index_of.java b/regression/strings/java_index_of/test_index_of.java index bbe06d279ec..b607ba79570 100644 --- a/regression/strings/java_index_of/test_index_of.java +++ b/regression/strings/java_index_of/test_index_of.java @@ -1,32 +1,10 @@ -public class test_index_of { - - public static void main(String[] argv) { - String s = "Hello World!"; - char c = 'o'; - int i = s.indexOf(c); - int j = s.lastIndexOf('o'); - int k = s.indexOf(c,5); - int l = s.lastIndexOf(c,5); - int m = s.indexOf("lo"); - int n = s.lastIndexOf("lo"); - if(argv.length == 1){ - assert(i == 4); - assert(i != 4); - } - else if(argv.length == 2){ - assert(j == 7); - assert(j != 7); - } - else if(argv.length == 3){ - assert(k == 7); - assert(k != 7); - } - else if(argv.length == 4){ - assert(l == 4); - assert(l != 4); - } else { - assert(m != 2); - assert(n != 2); - } - } +public class test_index_of +{ + public static void main(/*String[] argv*/) + { + String s = "Abc"; + String bc = "bc"; + int i = s.indexOf(bc); + assert(i != 1); + } } diff --git a/regression/strings/java_index_of_char/test.desc b/regression/strings/java_index_of_char/test.desc new file mode 100644 index 00000000000..83fbccc0515 --- /dev/null +++ b/regression/strings/java_index_of_char/test.desc @@ -0,0 +1,7 @@ +CORE +test_index_of_char.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion\.1\].* line 8.* FAILURE$ +-- diff --git a/regression/strings/java_index_of_char/test_index_of_char.class b/regression/strings/java_index_of_char/test_index_of_char.class new file mode 100644 index 00000000000..bf4fa6e946e Binary files /dev/null and b/regression/strings/java_index_of_char/test_index_of_char.class differ diff --git a/regression/strings/java_index_of_char/test_index_of_char.java b/regression/strings/java_index_of_char/test_index_of_char.java new file mode 100644 index 00000000000..92d75b3b07d --- /dev/null +++ b/regression/strings/java_index_of_char/test_index_of_char.java @@ -0,0 +1,10 @@ +public class test_index_of_char +{ + public static void main(/*String[] argv*/) + { + String s = "Abc"; + char c = 'c'; + int i = s.indexOf(c); + assert(i != 2); + } +} diff --git a/regression/strings/java_insert/test_insert.class b/regression/strings/java_insert/test_insert.class deleted file mode 100644 index 5fa0f425061..00000000000 Binary files a/regression/strings/java_insert/test_insert.class and /dev/null differ diff --git a/regression/strings/java_insert/test_insert.java b/regression/strings/java_insert/test_insert.java deleted file mode 100644 index 6871a51716c..00000000000 --- a/regression/strings/java_insert/test_insert.java +++ /dev/null @@ -1,19 +0,0 @@ -public class test_insert { - - public static void main(String[] argv) { - int i = 123; - long j = 123; - char c = '/'; - boolean b = true; - StringBuilder sb = new StringBuilder("hello"); - sb.insert(2,i); - sb.insert(2,c); - sb.insert(2,j); - sb.insert(2,b); - sb.insert(2,"abc"); - String s = sb.toString(); - System.out.println(s); - assert(s.equals("heabctrue123/123llo")); - assert(!s.equals("heabctrue123/123llo")); - } -} diff --git a/regression/strings/java_insert/test_insert1.class b/regression/strings/java_insert/test_insert1.class deleted file mode 100644 index 80091936cea..00000000000 Binary files a/regression/strings/java_insert/test_insert1.class and /dev/null differ diff --git a/regression/strings/java_insert/test_insert1.java b/regression/strings/java_insert/test_insert1.java deleted file mode 100644 index 54e754302c5..00000000000 --- a/regression/strings/java_insert/test_insert1.java +++ /dev/null @@ -1,23 +0,0 @@ -public class test_insert1 { - - public static void main(String[] argv) { - int i = 123; - long j = 123; - char c = '/'; - boolean b = true; - StringBuilder sb = new StringBuilder("hello"); - sb.insert(2,i); - - /* - sb.insert(2,c); - sb.insert(2,j); - sb.insert(2,b); - sb.insert(2,"abc"); - */ - String s = sb.toString(); - System.out.println(s); - assert(s.equals("he123llo")); - //assert(s.equals("heabctrue123/123llo")); - //assert(!s.equals("heabctrue123/123llo")); - } -} diff --git a/regression/strings/java_insert_char/test.desc b/regression/strings/java_insert_char/test.desc new file mode 100644 index 00000000000..cdda3eeae95 --- /dev/null +++ b/regression/strings/java_insert_char/test.desc @@ -0,0 +1,7 @@ +CORE +test_insert_char.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion\.1\].* line 8.* FAILURE$ +-- diff --git a/regression/strings/java_insert_char/test_insert_char.class b/regression/strings/java_insert_char/test_insert_char.class new file mode 100644 index 00000000000..fbf4a82070b Binary files /dev/null and b/regression/strings/java_insert_char/test_insert_char.class differ diff --git a/regression/strings/java_insert_char/test_insert_char.java b/regression/strings/java_insert_char/test_insert_char.java new file mode 100644 index 00000000000..3a83f03b332 --- /dev/null +++ b/regression/strings/java_insert_char/test_insert_char.java @@ -0,0 +1,10 @@ +public class test_insert_char +{ + public static void main(/*String[] argv*/) + { + StringBuilder sb = new StringBuilder("ac"); + sb.insert(1, 'b'); + String s = sb.toString(); + assert(!s.equals("abc")); + } +} diff --git a/regression/strings/java_insert_char_array/test.desc b/regression/strings/java_insert_char_array/test.desc new file mode 100644 index 00000000000..648fec2fa7d --- /dev/null +++ b/regression/strings/java_insert_char_array/test.desc @@ -0,0 +1,7 @@ +CORE +test_insert_char_array.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion\.1\].* line 12.* FAILURE$ +-- diff --git a/regression/strings/java_insert_char_array/test_insert_char_array.class b/regression/strings/java_insert_char_array/test_insert_char_array.class new file mode 100644 index 00000000000..bc1a23a7496 Binary files /dev/null and b/regression/strings/java_insert_char_array/test_insert_char_array.class differ diff --git a/regression/strings/java_insert_char_array/test_insert_char_array.java b/regression/strings/java_insert_char_array/test_insert_char_array.java new file mode 100644 index 00000000000..079dbd2fee6 --- /dev/null +++ b/regression/strings/java_insert_char_array/test_insert_char_array.java @@ -0,0 +1,14 @@ +public class test_insert_char_array +{ + public static void main(/*String[] argv*/) + { + StringBuilder sb = new StringBuilder("ad"); + char[] array = new char[2]; + array[0] = 'b'; + array[1] = 'c'; + sb.insert(1, array); + String s = sb.toString(); + System.out.println(s); + assert(!s.equals("abcd")); + } +} diff --git a/regression/strings/java_insert_int/test.desc b/regression/strings/java_insert_int/test.desc new file mode 100644 index 00000000000..bc25e9abf3c --- /dev/null +++ b/regression/strings/java_insert_int/test.desc @@ -0,0 +1,7 @@ +CORE +test_insert_int.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion\.1\].* line 8.* FAILURE$ +-- diff --git a/regression/strings/java_insert_int/test_insert_int.class b/regression/strings/java_insert_int/test_insert_int.class new file mode 100644 index 00000000000..cd355c86546 Binary files /dev/null and b/regression/strings/java_insert_int/test_insert_int.class differ diff --git a/regression/strings/java_insert_int/test_insert_int.java b/regression/strings/java_insert_int/test_insert_int.java new file mode 100644 index 00000000000..15a7a2d53f6 --- /dev/null +++ b/regression/strings/java_insert_int/test_insert_int.java @@ -0,0 +1,10 @@ +public class test_insert_int +{ + public static void main(/*String[] argv*/) + { + StringBuilder sb = new StringBuilder("ac"); + sb.insert(1, 42); + String s = sb.toString(); + assert(!s.equals("a42c")); + } +} diff --git a/regression/strings/java_insert_multiple/test.desc b/regression/strings/java_insert_multiple/test.desc new file mode 100644 index 00000000000..3ad6df9d1e2 --- /dev/null +++ b/regression/strings/java_insert_multiple/test.desc @@ -0,0 +1,7 @@ +CORE +test_insert_multiple.class +--refine-strings +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion\.1\].* line 9.* FAILURE$ +-- diff --git a/regression/strings/java_insert_multiple/test_insert_multiple.class b/regression/strings/java_insert_multiple/test_insert_multiple.class new file mode 100644 index 00000000000..d6b470a1f72 Binary files /dev/null and b/regression/strings/java_insert_multiple/test_insert_multiple.class differ diff --git a/regression/strings/java_insert_multiple/test_insert_multiple.java b/regression/strings/java_insert_multiple/test_insert_multiple.java new file mode 100644 index 00000000000..c976ddd807f --- /dev/null +++ b/regression/strings/java_insert_multiple/test_insert_multiple.java @@ -0,0 +1,11 @@ +public class test_insert_multiple +{ + public static void main(/*String[] argv*/) + { + StringBuilder sb = new StringBuilder("ad"); + sb.insert(1, 'c'); + sb.insert(1, "b"); + String s = sb.toString(); + assert(!s.equals("abcd")); + } +} diff --git a/regression/strings/java_insert_string/test.desc b/regression/strings/java_insert_string/test.desc new file mode 100644 index 00000000000..79fa2931c93 --- /dev/null +++ b/regression/strings/java_insert_string/test.desc @@ -0,0 +1,7 @@ +CORE +test_insert_string.class +--refine-strings --string-max-length 1000 +^EXIT=10$ +^SIGNAL=0$ +^\[.*assertion\.1\].* line 8.* FAILURE$ +-- diff --git a/regression/strings/java_insert_string/test_insert_string.class b/regression/strings/java_insert_string/test_insert_string.class new file mode 100644 index 00000000000..be8f7ad0f79 Binary files /dev/null and b/regression/strings/java_insert_string/test_insert_string.class differ diff --git a/regression/strings/java_insert_string/test_insert_string.java b/regression/strings/java_insert_string/test_insert_string.java new file mode 100644 index 00000000000..028a348122b --- /dev/null +++ b/regression/strings/java_insert_string/test_insert_string.java @@ -0,0 +1,10 @@ +public class test_insert_string +{ + public static void main(/*String[] argv*/) + { + StringBuilder sb = new StringBuilder("ad"); + sb.insert(1, "bc"); + String s = sb.toString(); + assert(!s.equals("abcd")); + } +} diff --git a/regression/strings/java_int/test.desc b/regression/strings/java_int/test.desc deleted file mode 100644 index ae60dd78af0..00000000000 --- a/regression/strings/java_int/test.desc +++ /dev/null @@ -1,13 +0,0 @@ -FUTURE -test_int.class ---string-refine -^EXIT=10$ -^SIGNAL=0$ -^\[assertion.1\] assertion at file test_int.java line 8: SUCCESS$ -^\[assertion.2\] assertion at file test_int.java line 9: SUCCESS$ -^\[assertion.3\] assertion at file test_int.java line 12: SUCCESS$ -^\[assertion.4\] assertion at file test_int.java line 15: SUCCESS$ -^\[assertion.5\] assertion at file test_int.java line 18: SUCCESS$ -^\[assertion.6\] assertion at file test_int.java line 21: SUCCESS$ -^\[assertion.7\] assertion at file test_int.java line 23: FAILURE$ --- diff --git a/regression/strings/java_int/test_int.class b/regression/strings/java_int/test_int.class deleted file mode 100644 index 643d7eca09c..00000000000 Binary files a/regression/strings/java_int/test_int.class and /dev/null differ diff --git a/regression/strings/java_int/test_int.java b/regression/strings/java_int/test_int.java deleted file mode 100644 index 620ae638dce..00000000000 --- a/regression/strings/java_int/test_int.java +++ /dev/null @@ -1,25 +0,0 @@ -public class test_int { - - public static void main(String[] argv) { - String s = Integer.toString(2345); - char c = s.charAt(1); - char d = s.charAt(2); - char e = s.charAt(3); - assert(c == '3'); - assert(d == '4'); - - int i = Integer.parseInt("1234"); - assert(i == 1234); - - String t = Integer.toString(-2345); - assert(t.charAt(0) == '-'); - - int j = Integer.parseInt("-4231"); - assert(j == -4231); - - String u = Integer.toHexString(43981); - assert(u.equals("abcd")); - - assert(e == '2' || i < 1234 || t.charAt(0) != '-' || j != -4231 || !u.equals("abcd")); - } -} diff --git a/regression/strings/java_prefix/test.desc b/regression/strings/java_prefix/test.desc deleted file mode 100644 index 175f934ca1d..00000000000 --- a/regression/strings/java_prefix/test.desc +++ /dev/null @@ -1,10 +0,0 @@ -FUTURE -test_prefix.class ---string-refine -^EXIT=10$ -^SIGNAL=0$ -^\[assertion.1\] assertion at file test_prefix.java line 14: SUCCESS$ -^\[assertion.2\] assertion at file test_prefix.java line 16: FAILURE$ -^\[assertion.3\] assertion at file test_prefix.java line 18: SUCCESS$ -^\[assertion.4\] assertion at file test_prefix.java line 20: FAILURE$ --- diff --git a/regression/strings/java_prefix/test_prefix.class b/regression/strings/java_prefix/test_prefix.class deleted file mode 100644 index 6f5f4025932..00000000000 Binary files a/regression/strings/java_prefix/test_prefix.class and /dev/null differ diff --git a/regression/strings/java_prefix/test_prefix.java b/regression/strings/java_prefix/test_prefix.java deleted file mode 100644 index c9b5fa72fcf..00000000000 --- a/regression/strings/java_prefix/test_prefix.java +++ /dev/null @@ -1,23 +0,0 @@ -public class test_prefix { - - public static void main(String[] argv) { - String s = new String("Hello World!"); - //String t = new String("Hello"); - //String u = new String("Wello"); - String u = "Wello"; - boolean b = s.startsWith("Hello"); - //boolean c = s.startsWith("Wello"); - //boolean b = s.startsWith(t); - boolean c = s.startsWith(u); - boolean d = s.startsWith("lo",3); - if(argv.length == 1){ - assert(b); - } else if(argv.length == 2){ - assert(c); - } else if(argv.length == 3){ - assert(d); - } else if(argv.length == 4){ - assert(!d); - } - } -} diff --git a/regression/strings/java_replace/test.desc b/regression/strings/java_replace/test.desc deleted file mode 100644 index 1e89ebe37b4..00000000000 --- a/regression/strings/java_replace/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -FUTURE -test_replace.class ---string-refine -^EXIT=10$ -^SIGNAL=0$ -^\[assertion.1\] assertion at file test_replace.java line 6: SUCCESS$ -^\[assertion.2\] assertion at file test_replace.java line 8: FAILURE$ --- diff --git a/regression/strings/java_replace/test_replace.class b/regression/strings/java_replace/test_replace.class deleted file mode 100644 index c795826dc15..00000000000 Binary files a/regression/strings/java_replace/test_replace.class and /dev/null differ diff --git a/regression/strings/java_replace/test_replace.java b/regression/strings/java_replace/test_replace.java deleted file mode 100644 index 342bf9afddc..00000000000 --- a/regression/strings/java_replace/test_replace.java +++ /dev/null @@ -1,10 +0,0 @@ -public class test_replace { - - public static void main(String[] argv) { - String s = new String("Hello World!"); - String t = s.replace('o','u'); - assert(t.equals("Hellu Wurld!")); - System.out.println(t); - assert(!t.equals("Hellu Wurld!")); - } -} diff --git a/regression/strings/java_set_length/test.desc b/regression/strings/java_set_length/test.desc deleted file mode 100644 index 43f82a648fd..00000000000 --- a/regression/strings/java_set_length/test.desc +++ /dev/null @@ -1,9 +0,0 @@ -FUTURE -test_set_length.class ---string-refine -^EXIT=10$ -^SIGNAL=0$ -^\[assertion.1\] assertion at file test_set_length.java line 8: SUCCESS$ -^\[assertion.2\] assertion at file test_set_length.java line 9: SUCCESS$ -^\[assertion.3\] assertion at file test_set_length.java line 10: FAILURE$ --- diff --git a/regression/strings/java_set_length/test_set_length.class b/regression/strings/java_set_length/test_set_length.class deleted file mode 100644 index 8836640967a..00000000000 Binary files a/regression/strings/java_set_length/test_set_length.class and /dev/null differ diff --git a/regression/strings/java_set_length/test_set_length.java b/regression/strings/java_set_length/test_set_length.java deleted file mode 100644 index 97b20f2332d..00000000000 --- a/regression/strings/java_set_length/test_set_length.java +++ /dev/null @@ -1,12 +0,0 @@ -public class test_set_length { - - public static void main(String[] argv) { - - StringBuilder s = new StringBuilder("abc"); - s.setLength(10); - String t = s.toString(); - assert(t.startsWith("abc")); - assert(t.length() == 10); - assert(t.length() == 3); - } -} diff --git a/regression/strings/java_string_builder/test.desc b/regression/strings/java_string_builder/test.desc deleted file mode 100644 index 9712205b104..00000000000 --- a/regression/strings/java_string_builder/test.desc +++ /dev/null @@ -1,9 +0,0 @@ -FUTURE -test_string_builder.class ---string-refine -^EXIT=10$ -^SIGNAL=0$ -^\[assertion.1\] assertion at file test_string_builder.java line 11: SUCCESS$ -^\[assertion.2\] assertion at file test_string_builder.java line 12: SUCCESS$ -^\[assertion.3\] assertion at file test_string_builder.java line 13: FAILURE$ --- diff --git a/regression/strings/java_string_builder/test_string_builder.class b/regression/strings/java_string_builder/test_string_builder.class deleted file mode 100644 index 7a61d1f02be..00000000000 Binary files a/regression/strings/java_string_builder/test_string_builder.class and /dev/null differ diff --git a/regression/strings/java_string_builder/test_string_builder.java b/regression/strings/java_string_builder/test_string_builder.java deleted file mode 100644 index 1d76b34e9f8..00000000000 --- a/regression/strings/java_string_builder/test_string_builder.java +++ /dev/null @@ -1,16 +0,0 @@ -public class test_string_builder { - public static void main(String[] argv) { - if(argv.length > 2) { - StringBuilder tmp = new StringBuilder(); - tmp.append("prefix "); - tmp.append(argv[1]); - tmp.append(" middle ").append(argv[2]).append(" end"); - //StringBuilder tmp1 = tmp.append(argv[2]); - //tmp1.append(" end"); - String r = tmp.toString(); - assert(r.startsWith("pref")); - assert(r.endsWith("end")); - assert(r.startsWith("pr3f")); - } - } -} diff --git a/regression/strings/java_string_builder_insert/test.desc b/regression/strings/java_string_builder_insert/test.desc deleted file mode 100644 index 2655f846da1..00000000000 --- a/regression/strings/java_string_builder_insert/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -FUTURE -test_insert.class ---string-refine -^EXIT=10$ -^SIGNAL=0$ -^\[assertion.1\] assertion at file test_insert.java line 17: SUCCESS$ -^\[assertion.2\] assertion at file test_insert.java line 18: FAILURE$ --- diff --git a/regression/strings/java_string_builder_insert/test_insert.class b/regression/strings/java_string_builder_insert/test_insert.class deleted file mode 100644 index 69a32d7f93f..00000000000 Binary files a/regression/strings/java_string_builder_insert/test_insert.class and /dev/null differ diff --git a/regression/strings/java_string_builder_insert/test_insert.java b/regression/strings/java_string_builder_insert/test_insert.java deleted file mode 100644 index 1fac897c5ed..00000000000 --- a/regression/strings/java_string_builder_insert/test_insert.java +++ /dev/null @@ -1,20 +0,0 @@ -public class test_insert { - - public static void main(String[] argv) - { - char [] str = new char[5]; - str[0] = 'H'; - str[1] = 'e'; - str[2] = 'l'; - str[3] = 'l'; - str[4] = 'o'; - - - StringBuilder sb = new StringBuilder(" world"); - sb.insert(0,str); - String s = sb.toString(); - System.out.println(s); - assert(s.equals("Hello world")); - assert(!s.equals("Hello world")); - } -} diff --git a/regression/strings/java_string_builder_length/test.desc b/regression/strings/java_string_builder_length/test.desc deleted file mode 100644 index c4720992571..00000000000 --- a/regression/strings/java_string_builder_length/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -FUTURE -test_sb_length.class ---string-refine -^EXIT=10$ -^SIGNAL=0$ -\[assertion.1\] assertion at file test_sb_length.java line 6: SUCCESS$ -\[assertion.2\] assertion at file test_sb_length.java line 8: FAILURE$ --- diff --git a/regression/strings/java_string_builder_length/test_sb_length.class b/regression/strings/java_string_builder_length/test_sb_length.class deleted file mode 100644 index 586e8f71935..00000000000 Binary files a/regression/strings/java_string_builder_length/test_sb_length.class and /dev/null differ diff --git a/regression/strings/java_string_builder_length/test_sb_length.java b/regression/strings/java_string_builder_length/test_sb_length.java deleted file mode 100644 index 652b72cdc90..00000000000 --- a/regression/strings/java_string_builder_length/test_sb_length.java +++ /dev/null @@ -1,11 +0,0 @@ -public class test_sb_length { - public static void main(String[] argv) { - StringBuilder tmp = new StringBuilder("prefix"); - //tmp.append("prefix"); - tmp.append("end"); - assert(tmp.length() == 9); - if(argv.length > 1) { - assert(tmp.length() == 12); - } - } -} diff --git a/regression/strings/java_strlen/test.desc b/regression/strings/java_strlen/test.desc deleted file mode 100644 index b98e6f76f0a..00000000000 --- a/regression/strings/java_strlen/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -FUTURE -test_length.class ---string-refine -^EXIT=10$ -^SIGNAL=0$ -^\[assertion.1\] assertion at file test_length.java line 10: SUCCESS$ -^\[assertion.2\] assertion at file test_length.java line 11: FAILURE$ --- diff --git a/regression/strings/java_strlen/test_length.class b/regression/strings/java_strlen/test_length.class deleted file mode 100644 index 7f1c10c02ca..00000000000 Binary files a/regression/strings/java_strlen/test_length.class and /dev/null differ diff --git a/regression/strings/java_strlen/test_length.java b/regression/strings/java_strlen/test_length.java deleted file mode 100644 index 9410315db38..00000000000 --- a/regression/strings/java_strlen/test_length.java +++ /dev/null @@ -1,14 +0,0 @@ -public class test_length { - - public static void main(String[] argv) { - String s = new String("hello"); - if(argv.length > 1) { - String t = argv[1]; - int i = t.length(); - String u = t.concat(s); - char c = u.charAt(i); - assert(c == 'h'); - assert(c == 'o'); - } - } -} diff --git a/regression/strings/java_substring/test.desc b/regression/strings/java_substring/test.desc deleted file mode 100644 index bd54a8204fe..00000000000 --- a/regression/strings/java_substring/test.desc +++ /dev/null @@ -1,10 +0,0 @@ -FUTURE -test_substring.class ---string-refine -^EXIT=10$ -^SIGNAL=0$ -^\[assertion.1\] assertion at file test_substring.java line 12: SUCCESS$ -^\[assertion.2\] assertion at file test_substring.java line 13: FAILURE$ -^\[assertion.3\] assertion at file test_substring.java line 20: SUCCESS$ -^\[assertion.4\] assertion at file test_substring.java line 21: FAILURE$ --- diff --git a/regression/strings/java_substring/test_substring.class b/regression/strings/java_substring/test_substring.class deleted file mode 100644 index e6532aca43e..00000000000 Binary files a/regression/strings/java_substring/test_substring.class and /dev/null differ diff --git a/regression/strings/java_substring/test_substring.java b/regression/strings/java_substring/test_substring.java deleted file mode 100644 index 8a2ac883cca..00000000000 --- a/regression/strings/java_substring/test_substring.java +++ /dev/null @@ -1,27 +0,0 @@ -public class test_substring { - - public static void main(String[] argv) { - if(argv.length > 1) { - String t = argv[1]; - - if(t.length() == 6) { - String u = t.substring(2,4); - char c = u.charAt(1); - char d = t.charAt(3); - char e = t.charAt(4); - assert(c == d); - assert(c == e); - } - else if(t.length() == 5){ - CharSequence u = t.subSequence(2,4); - char c = u.charAt(1); - char d = t.charAt(3); - char e = t.charAt(4); - assert(c == d); - assert(c == e); - } - - - } - } -} diff --git a/regression/strings/java_suffix/test.desc b/regression/strings/java_suffix/test.desc deleted file mode 100644 index 2740e87d6e4..00000000000 --- a/regression/strings/java_suffix/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -FUTURE -test_suffix.class ---string-refine -^EXIT=10$ -^SIGNAL=0$ -^\[assertion.1\] assertion at file test_suffix.java line 12: SUCCESS$ -^\[assertion.2\] assertion at file test_suffix.java line 13: FAILURE$ --- diff --git a/regression/strings/java_suffix/test_suffix.class b/regression/strings/java_suffix/test_suffix.class deleted file mode 100644 index 557acd02653..00000000000 Binary files a/regression/strings/java_suffix/test_suffix.class and /dev/null differ diff --git a/regression/strings/java_suffix/test_suffix.java b/regression/strings/java_suffix/test_suffix.java deleted file mode 100644 index f61b0b8ba36..00000000000 --- a/regression/strings/java_suffix/test_suffix.java +++ /dev/null @@ -1,15 +0,0 @@ -public class test_suffix { - - public static void main(String[] argv) { - String s = new String("Hello World!"); - //String t = new String("Hello"); - //String u = new String("Wello"); - String u = "Wello!"; - boolean b = s.endsWith("World!"); - //boolean c = s.startsWith("Wello"); - //boolean b = s.startsWith(t); - boolean c = s.startsWith(u); - assert(b); - assert(c); - } -} diff --git a/regression/strings/java_trim/test.desc b/regression/strings/java_trim/test.desc deleted file mode 100644 index 7c0f1a87978..00000000000 --- a/regression/strings/java_trim/test.desc +++ /dev/null @@ -1,8 +0,0 @@ -FUTURE -test_trim.class ---string-refine -^EXIT=10$ -^SIGNAL=0$ -^\[assertion.1\] assertion at file test_trim.java line 5: SUCCESS$ -^\[assertion.2\] assertion at file test_trim.java line 6: FAILURE$ --- diff --git a/regression/strings/java_trim/test_trim.class b/regression/strings/java_trim/test_trim.class deleted file mode 100644 index 8e6a923dcbc..00000000000 Binary files a/regression/strings/java_trim/test_trim.class and /dev/null differ diff --git a/regression/strings/java_trim/test_trim.java b/regression/strings/java_trim/test_trim.java deleted file mode 100644 index 8d8d41cb29a..00000000000 --- a/regression/strings/java_trim/test_trim.java +++ /dev/null @@ -1,8 +0,0 @@ -public class test_trim { - public static void main(String[] argv) { - String t = " a b c "; - String x = t.trim(); - assert(x.equals("a b c")); - assert(x.equals("abc ")); - } -} diff --git a/regression/strings/test1/test.desc b/regression/strings/test1/test.desc index b86ded86c18..2e0b38c3ae3 100644 --- a/regression/strings/test1/test.desc +++ b/regression/strings/test1/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion c1 == c2: SUCCESS$ diff --git a/regression/strings/test2/test.desc b/regression/strings/test2/test.desc index b322a1d0d33..809cbcdaa29 100644 --- a/regression/strings/test2/test.desc +++ b/regression/strings/test2/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion n == 5: SUCCESS$ diff --git a/regression/strings/test3.1/test.desc b/regression/strings/test3.1/test.desc index c88a62b6704..6fddff4c129 100644 --- a/regression/strings/test3.1/test.desc +++ b/regression/strings/test3.1/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test3.2/test.desc b/regression/strings/test3.2/test.desc index c88a62b6704..6fddff4c129 100644 --- a/regression/strings/test3.2/test.desc +++ b/regression/strings/test3.2/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test3.3/test.desc b/regression/strings/test3.3/test.desc index c88a62b6704..6fddff4c129 100644 --- a/regression/strings/test3.3/test.desc +++ b/regression/strings/test3.3/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test3.4/test.desc b/regression/strings/test3.4/test.desc index d88e1c83744..fc1cde2392c 100644 --- a/regression/strings/test3.4/test.desc +++ b/regression/strings/test3.4/test.desc @@ -1,7 +1,7 @@ FUTURE -test.c ---string-refine -^EXIT=10$ +test_init.class +--refine-strings +^EXIT=0$ ^SIGNAL=0$ -^VERIFICATION FAILED$ +^VERIFICATION SUCCESSFUL$ -- diff --git a/regression/strings/test3/test.desc b/regression/strings/test3/test.desc index 24ed719acc2..f6f9a63520a 100644 --- a/regression/strings/test3/test.desc +++ b/regression/strings/test3/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_string_length\(s\) == i \+ 5: SUCCESS$ diff --git a/regression/strings/test4/test.desc b/regression/strings/test4/test.desc index c88a62b6704..6fddff4c129 100644 --- a/regression/strings/test4/test.desc +++ b/regression/strings/test4/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test5/test.desc b/regression/strings/test5/test.desc index d88e1c83744..303defd9de4 100644 --- a/regression/strings/test5/test.desc +++ b/regression/strings/test5/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/test_char_set/test.desc b/regression/strings/test_char_set/test.desc index 99f3cfd81de..360759faf98 100644 --- a/regression/strings/test_char_set/test.desc +++ b/regression/strings/test_char_set/test.desc @@ -1,8 +1,8 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_string_equal\(t, __CPROVER_string_literal\("apc"\)): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_string_equal\(t, __CPROVER_string_literal\("abc"\)): FAILURE$ +^\[.*assertion.1\].* SUCCESS$ +^\[.*assertion.2\].* FAILURE$ -- diff --git a/regression/strings/test_concat/test.desc b/regression/strings/test_concat/test.desc index 8df68c18bc3..317a4d1b4dd 100644 --- a/regression/strings/test_concat/test.desc +++ b/regression/strings/test_concat/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion c == .p.: SUCCESS$ diff --git a/regression/strings/test_contains/test.desc b/regression/strings/test_contains/test.desc index f2414880794..b0e33ce2b43 100644 --- a/regression/strings/test_contains/test.desc +++ b/regression/strings/test_contains/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion !__CPROVER_uninterpreted_string_contains_func\(t, __CPROVER_uninterpreted_string_literal_func\(\"3\"\)): SUCCESS$ diff --git a/regression/strings/test_equal/test.desc b/regression/strings/test_equal/test.desc index 5fbe05f8fdd..34297ec50f5 100644 --- a/regression/strings/test_equal/test.desc +++ b/regression/strings/test_equal/test.desc @@ -1,8 +1,8 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_string_equal\(s, __CPROVER_string_literal\("pippo"\)): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_string_equal\(s, __CPROVER_string_literal\("mippo"\)): FAILURE$ +^\[.*.assertion.1\].* SUCCESS$ +^\[.*.assertion.2\].* FAILURE$ -- diff --git a/regression/strings/test_index_of/test.desc b/regression/strings/test_index_of/test.desc index edc8e09c4ed..a2c12c3d259 100644 --- a/regression/strings/test_index_of/test.desc +++ b/regression/strings/test_index_of/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion firstSlash == 3: SUCCESS$ diff --git a/regression/strings/test_int/test.desc b/regression/strings/test_int/test.desc index 8d78e11e71b..fcce43ca76c 100644 --- a/regression/strings/test_int/test.desc +++ b/regression/strings/test_int/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_char_at\(s,0\) == .1.: SUCCESS$ diff --git a/regression/strings/test_pass1/test.desc b/regression/strings/test_pass1/test.desc index 9bb75eda5b6..f2f54e69921 100644 --- a/regression/strings/test_pass1/test.desc +++ b/regression/strings/test_pass1/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func\(t, __CPROVER_uninterpreted_string_literal_func\(\"a\"\)): SUCCESS diff --git a/regression/strings/test_pass_pc3/test.desc b/regression/strings/test_pass_pc3/test.desc index 3edb9f68f7a..f1f3d1618c8 100644 --- a/regression/strings/test_pass_pc3/test.desc +++ b/regression/strings/test_pass_pc3/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_string_length\(s3\) == 0: FAILURE$ diff --git a/regression/strings/test_prefix/test.desc b/regression/strings/test_prefix/test.desc index 6c62a2fa466..be0ed5dc69e 100644 --- a/regression/strings/test_prefix/test.desc +++ b/regression/strings/test_prefix/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion b: SUCCESS$ diff --git a/regression/strings/test_strlen/test.desc b/regression/strings/test_strlen/test.desc index 30c3f4066ed..28ed1b7e698 100644 --- a/regression/strings/test_strlen/test.desc +++ b/regression/strings/test_strlen/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion len_s == len_t: SUCCESS$ diff --git a/regression/strings/test_substring/test.desc b/regression/strings/test_substring/test.desc index a32376aca23..f0e4b5832b2 100644 --- a/regression/strings/test_substring/test.desc +++ b/regression/strings/test_substring/test.desc @@ -1,10 +1,10 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_string_equal\(t,__CPROVER_string_literal\("cd"\)): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_string_equal\(t,__CPROVER_string_literal\("cc"\)): FAILURE$ -^\[main.assertion.3\] assertion !__CPROVER_string_equal\(t,__CPROVER_string_literal\("bc"\)): SUCCESS$ -^\[main.assertion.4\] assertion !__CPROVER_string_equal\(t,__CPROVER_string_literal\("cd"\)): FAILURE$ +^\[.*assertion.1\].* SUCCESS$ +^\[.*assertion.2\].* FAILURE$ +^\[.*assertion.3\].* SUCCESS$ +^\[.*assertion.4\].* FAILURE$ -- diff --git a/regression/strings/test_suffix/test.desc b/regression/strings/test_suffix/test.desc index 9f425595434..e7e8c1e36be 100644 --- a/regression/strings/test_suffix/test.desc +++ b/regression/strings/test_suffix/test.desc @@ -1,6 +1,6 @@ FUTURE test.c ---string-refine +--refine-strings ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_string_issuffix\(__CPROVER_string_literal\("po"\),s\): SUCCESS$ diff --git a/regression/test.pl b/regression/test.pl index f309a293ba9..3118fd375f6 100755 --- a/regression/test.pl +++ b/regression/test.pl @@ -3,6 +3,7 @@ use subs; use strict; use warnings; +use File::Basename; use Cwd; @@ -71,8 +72,7 @@ ($$$$$) $options =~ s/$ign//g if(defined($ign)); - my $descriptor = $test; - $descriptor =~ s/^.*\///; + my $descriptor = basename($test); my $output = $descriptor; $output =~ s/\.[^.]*$/.out/; diff --git a/scripts/bash-autocomplete/.gitignore b/scripts/bash-autocomplete/.gitignore new file mode 100644 index 00000000000..1e0acedc4f2 --- /dev/null +++ b/scripts/bash-autocomplete/.gitignore @@ -0,0 +1 @@ +cbmc.sh diff --git a/scripts/bash-autocomplete/Readme.md b/scripts/bash-autocomplete/Readme.md new file mode 100644 index 00000000000..a56074561da --- /dev/null +++ b/scripts/bash-autocomplete/Readme.md @@ -0,0 +1,49 @@ +# CBMC Autocomplete Scripts for Bash +This directory contains an autocomplete script for bash. + +## Installation for bash +1. Compile cbmc and + +2. `cd scripts/bash-autocomplete` + +3. `./extract-switches.sh` + +4. Put the following at the end of your `~/.bashrc`, with the directories adapted to your directory structure: + ```bash + cbmcautocomplete=~/diffblue/cbmc/scripts/bash-autocomplete/cbmc.sh + if [ -f $cbmcautocomplete ]; then + . $cbmcautocomplete + fi + ``` + +5. `source ~/.bashrc` + +## Installation for zsh +Follow 1. 2. and 3. as above. + +4. Put the following at the end of your `~/.zshrc`, with the directories adapted to your directory structure: + ```bash + autoload bashcompinit + bashcompinit + cbmcautocomplete=~/diffblue/cbmc/scripts/bash-autocomplete/cbmc.sh + if [ -f $cbmcautocomplete ]; then + . $cbmcautocomplete + fi + ``` +5. `source ~/.zshrc` + +## Usage +As with the usual autocomplete in bash, start typing a switch to complete it, for example: +``` +cbmc --clas +``` +will complete to +``` +cbmc --classpath +``` + +## Features implemented + +* Completing all switches +* Completing values for `--cover`, `--mm` and `--arch` +* When completing a name of a file to analyze, only files with supported extensions are shown. diff --git a/scripts/bash-autocomplete/cbmc.sh.template b/scripts/bash-autocomplete/cbmc.sh.template new file mode 100644 index 00000000000..0e241d0b3bf --- /dev/null +++ b/scripts/bash-autocomplete/cbmc.sh.template @@ -0,0 +1,43 @@ +#!/bin/bash +_cbmc_autocomplete() +{ + #list of all switches cbmc has. IMPORTANT: in the template file, this variable must be defined on line 5. + local switches="" + #word on which the cursor is + local cur=${COMP_WORDS[COMP_CWORD]} + #previous word (in case it is a switch with a parameter) + local prev=${COMP_WORDS[COMP_CWORD-1]} + + #check if the command before cursor is a switch that takes parameters, if yes, + #offer a choice of parameters + case "$prev" in + --cover) #for coverage we list the options explicitly + COMPREPLY=( $( compgen -W "assertion path branch location decision condition mcdc cover" -- $cur ) ) + return 0 + ;; + --mm) #for memory models we list the options explicitly + COMPREPLY=( $( compgen -W "sc tso pso" -- $cur ) ) + return 0 + ;; + --arch) #for architecture we list the options explicitly + COMPREPLY=( $( compgen -W "i386 x86_64" -- $cur ) ) + return 0 + ;; + -I|--classpath|-cp|--outfile|--existing-coverage|--graphml-cex) + #a switch that takes a file parameter of which we don't know an extension + #TODO probably we can do more for -I, --classpath, -cp + COMPREPLY=( $(compgen -f -- $cur) ) + return 0 + ;; + esac + + #complete a switch from a standard list, if the parameter under cursor starts with a hyphen + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "$switches" -- $cur ) ) + return 0 + fi + + #if none of the above applies, offer directories and files that we can analyze + COMPREPLY=( $(compgen -G '*.class|*.jar|*.cpp|*.cc|*.c\+\+|*.ii|*.cxx|*.c|*.i|*.gb' -- $cur) ) +} +complete -F _cbmc_autocomplete cbmc diff --git a/scripts/bash-autocomplete/extract_switches.sh b/scripts/bash-autocomplete/extract_switches.sh new file mode 100755 index 00000000000..e000b469bea --- /dev/null +++ b/scripts/bash-autocomplete/extract_switches.sh @@ -0,0 +1,48 @@ +#!/bin/bash +echo "Compiling the helper file to extract the raw list of parameters from cbmc" +g++ -c -MMD -MP -std=c++11 -Wall -I ../../src/ -ftrack-macro-expansion=0 -fno-diagnostics-show-caret switch_extractor_helper.c -o tmp.o 2> pragma.txt + +retval=$? + +#clean up compiled files, we don't need them. +rm tmp.o 2> /dev/null +rm tmp.d 2> /dev/null + +#check if compilation went fine +if [ $retval -ne 0 ]; then + echo "Problem compiling the helper file, parameter list not extracted." + exit 1; +fi + +echo "Converting the raw parameter list to the format required by autocomplete scripts" +rawstring=`sed "s/^.*pragma message: \(.*\)/\1/" pragma.txt` +#delete pragma file, we won't need it +rm pragma.txt 2> /dev/null + +#now the main bit, convert from raw format to a proper list of switches +cleanstring=`( + #extract 2-hyphen switches, such as --foo + #grep for '(foo)' expressions, and then use sed to remove parantheses and put '--' at the start + (echo $rawstring | grep -o "([^)]*)" | sed "s/^.\(.*\).$/--\1/") ; + #extract 1-hyphen switches, such as -F + #use sed to remove all (foo) expressions, then you're left with switches and ':', so grep the colons out and then use sed to include the '-' + (echo $rawstring | sed "s/([^)]*)//g" | grep -o "[a-zA-Z0-9]" | sed "s/\(.*\)/-\1/") + ) | tr '\n' ' '` + +#sanity check that there is only one line of output +if [ `echo $cleanstring | wc -l | awk '{print $1}'` -ne 1 ]; then + echo "Problem converting the parameter list to the correct format, I was expecting one line but either got 0 or >2. This is likely to be an error in this conversion script." + exit 1; +fi + +#sanity check that there are no dangerous characters +echo $cleanstring | grep -q "[^a-zA-Z0-9 -]" +if [ $? -eq 0 ]; then + echo "Problem converting the parameter list to the correct format, illegal characters detected. This is likely to be an error in this conversion script." + exit 1; +fi + +echo "Injecting the parameter list to the autocomplete file." +sed "5 s/.*/ local switches=\"$cleanstring\"/" cbmc.sh.template > cbmc.sh + +rm pragma.txt 2> /dev/null diff --git a/scripts/bash-autocomplete/switch_extractor_helper.c b/scripts/bash-autocomplete/switch_extractor_helper.c new file mode 100644 index 00000000000..4d9cc2e56fe --- /dev/null +++ b/scripts/bash-autocomplete/switch_extractor_helper.c @@ -0,0 +1,3 @@ +#include "cbmc/cbmc_parse_options.h" + +#pragma message CBMC_OPTIONS diff --git a/scripts/cpplint.py b/scripts/cpplint.py index 84da2ae8ac9..e3ab0505e9a 100755 --- a/scripts/cpplint.py +++ b/scripts/cpplint.py @@ -1377,7 +1377,8 @@ def CleanseRawStrings(raw_lines): def FindNextMultiLineCommentStart(lines, lineix): """Find the beginning marker for a multiline comment.""" while lineix < len(lines): - if lines[lineix].strip().startswith('/*'): + if (lines[lineix].strip().startswith('/*') or + lines[lineix].strip().startswith('#if 0')): # Only return this marker if the comment goes beyond this line if lines[lineix].strip().find('*/', 2) < 0: return lineix @@ -1388,7 +1389,8 @@ def FindNextMultiLineCommentStart(lines, lineix): def FindNextMultiLineCommentEnd(lines, lineix): """We are inside a comment, find the end marker.""" while lineix < len(lines): - if lines[lineix].strip().endswith('*/'): + if (lines[lineix].strip().endswith('*/') or + lines[lineix].strip().endswith('#endif')): return lineix lineix += 1 return len(lines) @@ -1923,11 +1925,11 @@ def CheckForCopyright(filename, lines, error): # We'll say it should occur by line 10. Don't forget there's a # dummy line at the front. for line in xrange(1, min(len(lines), 11)): - if re.search(r'Author', lines[line], re.I): break + if re.search(r'Author|Copyright', lines[line], re.I): break else: # means no copyright line was found error(filename, 0, 'legal/copyright', 5, 'No copyright message found. ' - 'You should have a line: "Author: "') + 'You should have a line: "Author: " or "Copyright ..."') def GetIndentLevel(line): @@ -6514,6 +6516,9 @@ def ProcessFile(filename, vlevel, extra_check_functions=[]): if Search(r'_builtin_headers(_[a-z0-9_-]+)?\.h$', filename): return + if Search(r'regression/.*\.cpp', filename): + return + if not ProcessConfigOverrides(filename): _RestoreFilters() return diff --git a/scripts/run_diff.sh b/scripts/run_diff.sh index 43d43f7577a..0e388537fb4 100755 --- a/scripts/run_diff.sh +++ b/scripts/run_diff.sh @@ -38,6 +38,8 @@ then doxygen=doxygen doxygenlogdir="doc/html" doxygenlog="$doxygenlogdir/doxygen.log" + suppress_warnings=( + "warning: Included by graph for .* not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.") if ! $doxygen --version &>/dev/null then echo "Lint script could not be found in the $script_folder directory" @@ -45,7 +47,8 @@ then exit 1 else mkdir -p $doxygenlogdir && cd src && $doxygen &> ../$doxygenlog && cd .. - cmd='cat $doxygenlog' + suppress_warnings_regex=$(IFS="|" ; echo "${suppress_warnings[*]}") + cmd='grep -Ev "$suppress_warnings_regex" $doxygenlog' fi else echo "Mode $mode not recognized" diff --git a/scripts/travis_doxygen.sh b/scripts/travis_doxygen.sh index 78adcff3c13..359de72ff60 100755 --- a/scripts/travis_doxygen.sh +++ b/scripts/travis_doxygen.sh @@ -8,5 +8,9 @@ pip install --user unidiff if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then $script_folder/run_diff.sh DOXYGEN HEAD~1 # Check for errors introduced in last commit else - $script_folder/run_diff.sh DOXYGEN $TRAVIS_BRANCH # Check for errors compared to merge target + TMP_HEAD=$(git rev-parse HEAD) + git config remote.origin.fetch +refs/heads/$TRAVIS_BRANCH:refs/remotes/origin/$TRAVIS_BRANCH + git fetch --unshallow + git checkout $TMP_HEAD + $script_folder/run_diff.sh DOXYGEN origin/$TRAVIS_BRANCH # Check for errors compared to merge target fi diff --git a/scripts/travis_lint.sh b/scripts/travis_lint.sh index 036605237ee..6592a3ebdfa 100755 --- a/scripts/travis_lint.sh +++ b/scripts/travis_lint.sh @@ -8,5 +8,9 @@ pip install --user unidiff if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then $script_folder/run_diff.sh CPPLINT HEAD~1 # Check for errors introduced in last commit else - $script_folder/run_diff.sh CPPLINT $TRAVIS_BRANCH # Check for errors compared to merge target + TMP_HEAD=$(git rev-parse HEAD) + git config remote.origin.fetch +refs/heads/$TRAVIS_BRANCH:refs/remotes/origin/$TRAVIS_BRANCH + git fetch --unshallow + git checkout $TMP_HEAD + $script_folder/run_diff.sh CPPLINT origin/$TRAVIS_BRANCH # Check for errors compared to merge target fi diff --git a/src/Makefile b/src/Makefile index 2d6b4eedb98..e90c402c819 100644 --- a/src/Makefile +++ b/src/Makefile @@ -84,6 +84,14 @@ glucose-download: @(cd ../glucose-syrup; patch -p1 < ../scripts/glucose-syrup-patch) @rm glucose-syrup.tgz +cprover-jar-build: + @echo "Building org.cprover.jar" + @(cd java_bytecode/library/; \ + mkdir -p target; \ + javac -d target/ `find src/ -name "*.java"`; \ + cd target; jar cf org.cprover.jar `find . -name "*.class"`; \ + mv org.cprover.jar ../../../) + boost-download: @echo "Downloading boost headers" @lwp-download "http://storage.googleapis.com/diffblue-mirror/boost/boost_1.63_headers.tar.bz2?GoogleAccessId=diffbluemaster@diffblue-cr.iam.gserviceaccount.com&Expires=1542631994&Signature=X2GwPSm1dR8IPGP0D5JoyDmOnL%2Br4F7AI7NUA7SbmOAowMC0JS7Q5A6%2BkQziUzQa88zpddr5gSRbDOLqdoGzwLrYgPNtURS5dJ7l1q6xfJWSS%2FYf8be%2FSbdfLVN8qcXKCsfDe05Hqf%2Bz2cksqjQ1H6L0syj43rftbW4%2F7tp355%2BkinCeE466ulJeyru3CK%2F3RGX2Ul6ZQV6lNxkit1m6QM5BRtLbUQ1GOW0GCK9fWH2fry2n7kRVBCM3oz8fX62kLdKYlaXCf%2BvvXs9hOOmcQurL%2Fa4DCJYoClX%2BpznqXVmjUY%2FI3pD4HlRKbCeiPnoC6de2i1uxFNSVTBpG3w%2BtfA%3D%3D" @@ -93,4 +101,4 @@ boost-download: @mv boost ../boost-include/boost @rm boost_1.63_headers.tar.bz2 -.PHONY: minisat2-download glucose-download +.PHONY: minisat2-download glucose-download cprover-jar-build diff --git a/src/analyses/Makefile b/src/analyses/Makefile index 690b119e83c..77c7d7f92d0 100644 --- a/src/analyses/Makefile +++ b/src/analyses/Makefile @@ -24,6 +24,7 @@ SRC = ai.cpp \ reaching_definitions.cpp \ replace_symbol_ext.cpp \ static_analysis.cpp \ + uncaught_exceptions_analysis.cpp \ uninitialized_domain.cpp \ # Empty last line diff --git a/src/analyses/ai.h b/src/analyses/ai.h index 5e0d1db3b2e..a04c60547d0 100644 --- a/src/analyses/ai.h +++ b/src/analyses/ai.h @@ -12,12 +12,14 @@ Author: Daniel Kroening, kroening@kroening.com #ifndef CPROVER_ANALYSES_AI_H #define CPROVER_ANALYSES_AI_H -#include #include +#include +#include #include #include #include +#include #include @@ -334,7 +336,7 @@ class ai_baset const namespacet &ns)=0; virtual statet &get_state(locationt l)=0; virtual const statet &find_state(locationt l) const=0; - virtual statet* make_temporary_state(const statet &s)=0; + virtual std::unique_ptr make_temporary_state(const statet &s)=0; }; // domainT is expected to be derived from ai_domain_baseT @@ -400,9 +402,9 @@ class ait:public ai_baset static_cast(src), from, to); } - statet *make_temporary_state(const statet &s) override + std::unique_ptr make_temporary_state(const statet &s) override { - return new domainT(static_cast(s)); + return util_make_unique(static_cast(s)); } void fixedpoint( diff --git a/src/analyses/call_graph.cpp b/src/analyses/call_graph.cpp index 26d144af4b4..91b8c3e6a15 100644 --- a/src/analyses/call_graph.cpp +++ b/src/analyses/call_graph.cpp @@ -79,6 +79,16 @@ void call_grapht::add( std::back_inserter(map_from_edges_to_call_locations[{caller, callee}])); } +/// Returns an inverted copy of this call graph +/// \return Inverted (callee -> caller) call graph +call_grapht call_grapht::get_inverted() const +{ + call_grapht result; + for(const auto &caller_callee : graph) + result.add(caller_callee.second, caller_callee.first); + return result; +} + void call_grapht::output_dot(std::ostream &out) const { out << "digraph call_graph {\n" diff --git a/src/analyses/call_graph.h b/src/analyses/call_graph.h index d55a4f46812..f3e5b581883 100644 --- a/src/analyses/call_graph.h +++ b/src/analyses/call_graph.h @@ -35,6 +35,7 @@ class call_grapht void swap(call_grapht &other); void add(const irep_idt &caller, const irep_idt &callee); + call_grapht get_inverted() const; /** * The type provides a mapping from edges of the call-graph to particular diff --git a/src/analyses/constant_propagator.cpp b/src/analyses/constant_propagator.cpp index 02913f9360a..aef07c8d3f1 100644 --- a/src/analyses/constant_propagator.cpp +++ b/src/analyses/constant_propagator.cpp @@ -79,7 +79,7 @@ void constant_propagator_domaint::assign_rec( cond = simplify_expr(cond,ns); } else - assert(0); + UNREACHABLE; assign(values, to_symbol_expr(lhs), cond, ns); } diff --git a/src/analyses/custom_bitvector_analysis.cpp b/src/analyses/custom_bitvector_analysis.cpp index da5bd52fb61..a81a08e6e67 100644 --- a/src/analyses/custom_bitvector_analysis.cpp +++ b/src/analyses/custom_bitvector_analysis.cpp @@ -296,7 +296,7 @@ void custom_bitvector_domaint::transform( else if(identifier=="__CPROVER_clear_may") mode=modet::CLEAR_MAY; else - assert(false); + UNREACHABLE; exprt lhs=code_function_call.arguments()[0]; @@ -411,7 +411,7 @@ void custom_bitvector_domaint::transform( else if(statement=="clear_may") mode=modet::CLEAR_MAY; else - assert(false); + UNREACHABLE; exprt lhs=instruction.code.op0(); diff --git a/src/analyses/goto_check.cpp b/src/analyses/goto_check.cpp index be4edbf288f..b6ee194dd9f 100644 --- a/src/analyses/goto_check.cpp +++ b/src/analyses/goto_check.cpp @@ -833,7 +833,7 @@ void goto_checkt::nan_check( equal_exprt(expr.op1(), minus_inf))); } else - assert(false); + UNREACHABLE; isnan.make_not(); @@ -909,7 +909,7 @@ void goto_checkt::pointer_validity_check( const exprt &access_ub, const irep_idt &mode) { - if(mode!=ID_java && !enable_pointer_check) + if(!enable_pointer_check) return; const exprt &pointer=expr.op0(); @@ -1702,6 +1702,10 @@ void goto_checkt::goto_check( if(!it->source_location.get_column().empty()) i_it->source_location.set_column(it->source_location.get_column()); + + if(!it->source_location.get_java_bytecode_index().empty()) + i_it->source_location.set_java_bytecode_index( + it->source_location.get_java_bytecode_index()); } if(i_it->function.empty()) diff --git a/src/analyses/goto_rw.cpp b/src/analyses/goto_rw.cpp index 49827bd2bd3..571d8bd0ad1 100644 --- a/src/analyses/goto_rw.cpp +++ b/src/analyses/goto_rw.cpp @@ -10,8 +10,9 @@ Date: April 2010 #include "goto_rw.h" -#include #include +#include +#include #include #include @@ -20,6 +21,7 @@ Date: April 2010 #include #include #include +#include #include @@ -49,12 +51,12 @@ rw_range_sett::~rw_range_sett() for(rw_range_sett::objectst::iterator it=r_range_set.begin(); it!=r_range_set.end(); ++it) - delete it->second; + it->second=nullptr; for(rw_range_sett::objectst::iterator it=w_range_set.begin(); it!=w_range_set.end(); ++it) - delete it->second; + it->second=nullptr; } void rw_range_sett::output(std::ostream &out) const @@ -461,16 +463,18 @@ void rw_range_sett::add( const range_spect &range_start, const range_spect &range_end) { - objectst::iterator entry=(mode==get_modet::LHS_W ? w_range_set : r_range_set). - insert( - std::pair( - identifier, nullptr)).first; + objectst::iterator entry= + (mode==get_modet::LHS_W?w_range_set:r_range_set) + .insert( + std::pair>( + identifier, nullptr)) + .first; if(entry->second==nullptr) - entry->second=new range_domaint(); + entry->second=util_make_unique(); - static_cast(entry->second)->push_back( - std::make_pair(range_start, range_end)); + static_cast(*entry->second).push_back( + {range_start, range_end}); } void rw_range_sett::get_objects_rec( @@ -662,17 +666,18 @@ void rw_guarded_range_set_value_sett::add( const range_spect &range_start, const range_spect &range_end) { - objectst::iterator entry=(mode==get_modet::LHS_W ? w_range_set : r_range_set). - insert( - std::pair( - identifier, nullptr)).first; + objectst::iterator entry= + (mode==get_modet::LHS_W?w_range_set:r_range_set) + .insert( + std::pair>( + identifier, nullptr)) + .first; if(entry->second==nullptr) - entry->second=new guarded_range_domaint(); + entry->second=util_make_unique(); - static_cast(entry->second)->insert( - std::make_pair(range_start, - std::make_pair(range_end, guard.as_expr()))); + static_cast(*entry->second).insert( + {range_start, {range_end, guard.as_expr()}}); } void goto_rw(goto_programt::const_targett target, @@ -708,7 +713,7 @@ void goto_rw(goto_programt::const_targett target, switch(target->type) { case NO_INSTRUCTION_TYPE: - assert(false); + UNREACHABLE; break; case GOTO: diff --git a/src/analyses/goto_rw.h b/src/analyses/goto_rw.h index 1f92c3e0e14..38bc4d2e61a 100644 --- a/src/analyses/goto_rw.h +++ b/src/analyses/goto_rw.h @@ -15,6 +15,7 @@ Date: April 2010 #include #include #include +#include // unique_ptr #include @@ -44,6 +45,14 @@ void goto_rw(const goto_functionst &goto_functions, class range_domain_baset { public: + range_domain_baset()=default; + + range_domain_baset(const range_domain_baset &rhs)=delete; + range_domain_baset &operator=(const range_domain_baset &rhs)=delete; + + range_domain_baset(range_domain_baset &&rhs)=delete; + range_domain_baset &operator=(range_domain_baset &&rhs)=delete; + virtual ~range_domain_baset(); virtual void output(const namespacet &ns, std::ostream &out) const=0; @@ -61,12 +70,29 @@ inline range_spect to_range_spect(const mp_integer &size) } // each element x represents a range of bits [x.first, x.second.first) -class range_domaint: - public range_domain_baset, - public std::list > +class range_domaint:public range_domain_baset { + typedef std::list> sub_typet; + sub_typet data; + public: - virtual void output(const namespacet &ns, std::ostream &out) const; + void output(const namespacet &ns, std::ostream &out) const override; + + // NOLINTNEXTLINE(readability/identifiers) + typedef sub_typet::iterator iterator; + // NOLINTNEXTLINE(readability/identifiers) + typedef sub_typet::const_iterator const_iterator; + + iterator begin() { return data.begin(); } + const_iterator begin() const { return data.begin(); } + const_iterator cbegin() const { return data.begin(); } + + iterator end() { return data.end(); } + const_iterator end() const { return data.end(); } + const_iterator cend() const { return data.end(); } + + void push_back(const sub_typet::value_type &v) { data.push_back(v); } + void push_back(sub_typet::value_type &&v) { data.push_back(std::move(v)); } }; class array_exprt; @@ -83,10 +109,10 @@ class rw_range_sett { public: #ifdef USE_DSTRING - typedef std::map objectst; + typedef std::map> objectst; #else - typedef std::unordered_map - objectst; + typedef std::unordered_map< + irep_idt, std::unique_ptr, string_hash> objectst; #endif virtual ~rw_range_sett(); @@ -108,8 +134,8 @@ class rw_range_sett const range_domaint &get_ranges(objectst::const_iterator it) const { - PRECONDITION(dynamic_cast(it->second)!=nullptr); - return *static_cast(it->second); + PRECONDITION(dynamic_cast(it->second.get())!=nullptr); + return static_cast(*it->second); } enum class get_modet { LHS_W, READ }; @@ -257,12 +283,36 @@ class rw_range_set_value_sett:public rw_range_sett const range_spect &size); }; -class guarded_range_domaint: - public range_domain_baset, - public std::multimap > +class guarded_range_domaint:public range_domain_baset { + typedef std::multimap> sub_typet; + sub_typet data; + public: - virtual void output(const namespacet &ns, std::ostream &out) const; + virtual void output(const namespacet &ns, std::ostream &out) const override; + + // NOLINTNEXTLINE(readability/identifiers) + typedef sub_typet::iterator iterator; + // NOLINTNEXTLINE(readability/identifiers) + typedef sub_typet::const_iterator const_iterator; + + iterator begin() { return data.begin(); } + const_iterator begin() const { return data.begin(); } + const_iterator cbegin() const { return data.begin(); } + + iterator end() { return data.end(); } + const_iterator end() const { return data.end(); } + const_iterator cend() const { return data.end(); } + + iterator insert(const sub_typet::value_type &v) + { + return data.insert(v); + } + + iterator insert(sub_typet::value_type &&v) + { + return data.insert(std::move(v)); + } }; class rw_guarded_range_set_value_sett:public rw_range_set_value_sett @@ -277,8 +327,9 @@ class rw_guarded_range_set_value_sett:public rw_range_set_value_sett const guarded_range_domaint &get_ranges(objectst::const_iterator it) const { - PRECONDITION(dynamic_cast(it->second)!=nullptr); - return *static_cast(it->second); + PRECONDITION( + dynamic_cast(it->second.get())!=nullptr); + return static_cast(*it->second); } virtual void get_objects_rec( diff --git a/src/analyses/invariant_set.cpp b/src/analyses/invariant_set.cpp index a91c0349bbb..718df977b33 100644 --- a/src/analyses/invariant_set.cpp +++ b/src/analyses/invariant_set.cpp @@ -474,7 +474,7 @@ void invariant_sett::strengthen_rec(const exprt &expr) } } else - assert(false); + UNREACHABLE; } else if(expr.id()==ID_equal) { @@ -673,7 +673,7 @@ tvt invariant_sett::implies_rec(const exprt &expr) const else if(expr.id()==ID_notequal) return is_ne(p); else - assert(false); + UNREACHABLE; } return tvt::unknown(); diff --git a/src/analyses/local_bitvector_analysis.cpp b/src/analyses/local_bitvector_analysis.cpp index f48b34a760d..341eab33d42 100644 --- a/src/analyses/local_bitvector_analysis.cpp +++ b/src/analyses/local_bitvector_analysis.cpp @@ -41,16 +41,16 @@ void local_bitvector_analysist::flagst::print(std::ostream &out) const out << "+integer_address"; } -bool local_bitvector_analysist::loc_infot::merge(const loc_infot &src) +bool local_bitvector_analysist::merge(points_tot &a, points_tot &b) { bool result=false; std::size_t max_index= - std::max(src.points_to.size(), points_to.size()); + std::max(a.size(), b.size()); for(std::size_t i=0; isecond]; - - return get_rec(rhs, loc_info_src); + return get_rec(rhs, loc_infos[loc_it->second]); } local_bitvector_analysist::flagst local_bitvector_analysist::get_rec( const exprt &rhs, - const loc_infot &loc_info_src) + points_tot &loc_info_src) { if(rhs.id()==ID_constant) { @@ -139,7 +137,7 @@ local_bitvector_analysist::flagst local_bitvector_analysist::get_rec( if(is_tracked(identifier)) { unsigned src_pointer=pointers.number(identifier); - return loc_info_src.points_to[src_pointer]; + return loc_info_src[src_pointer]; } else return flagst::mk_unknown(); @@ -258,7 +256,7 @@ void local_bitvector_analysist::build(const goto_functiont &goto_function) // in the entry location. for(const auto &local : locals.locals_map) if(is_tracked(local.first)) - loc_infos[0].points_to[pointers.number(local.first)]=flagst::mk_unknown(); + loc_infos[0][pointers.number(local.first)]=flagst::mk_unknown(); while(!work_queue.empty()) { @@ -267,8 +265,8 @@ void local_bitvector_analysist::build(const goto_functiont &goto_function) const goto_programt::instructiont &instruction=*node.t; work_queue.pop(); - const loc_infot &loc_info_src=loc_infos[loc_nr]; - loc_infot loc_info_dest=loc_infos[loc_nr]; + auto &loc_info_src=loc_infos[loc_nr]; + auto loc_info_dest=loc_infos[loc_nr]; switch(instruction.type) { @@ -320,7 +318,7 @@ void local_bitvector_analysist::build(const goto_functiont &goto_function) for(const auto &succ : node.successors) { assert(succsource_location << "\n"; - const loc_infot &loc_info=loc_infos[l]; + const auto &loc_info=loc_infos[l]; for(points_tot::const_iterator - p_it=loc_info.points_to.begin(); - p_it!=loc_info.points_to.end(); + p_it=loc_info.begin(); + p_it!=loc_info.end(); p_it++) { - out << " " << pointers[p_it-loc_info.points_to.begin()] + out << " " << pointers[p_it-loc_info.begin()] << ": " << *p_it << "\n"; diff --git a/src/analyses/local_bitvector_analysis.h b/src/analyses/local_bitvector_analysis.h index a88b38fb1c6..4a750d8cf32 100644 --- a/src/analyses/local_bitvector_analysis.h +++ b/src/analyses/local_bitvector_analysis.h @@ -186,27 +186,20 @@ class local_bitvector_analysist // This is a vector, so it's fast. typedef expanding_vectort points_tot; - // the information tracked per program location - class loc_infot - { - public: - points_tot points_to; - - bool merge(const loc_infot &src); - }; + static bool merge(points_tot &a, points_tot &b); - typedef std::vector loc_infost; + typedef std::vector loc_infost; loc_infost loc_infos; void assign_lhs( const exprt &lhs, const exprt &rhs, - const loc_infot &loc_info_src, - loc_infot &loc_info_dest); + points_tot &loc_info_src, + points_tot &loc_info_dest); flagst get_rec( const exprt &rhs, - const loc_infot &loc_info_src); + points_tot &loc_info_src); bool is_tracked(const irep_idt &identifier); }; diff --git a/src/analyses/local_may_alias.h b/src/analyses/local_may_alias.h index 5e04ff01a75..307513a64eb 100644 --- a/src/analyses/local_may_alias.h +++ b/src/analyses/local_may_alias.h @@ -12,10 +12,11 @@ Author: Daniel Kroening, kroening@kroening.com #ifndef CPROVER_ANALYSES_LOCAL_MAY_ALIAS_H #define CPROVER_ANALYSES_LOCAL_MAY_ALIAS_H -#include #include +#include #include +#include #include "locals.h" #include "dirty.h" @@ -117,8 +118,7 @@ class local_may_alias_factoryt goto_functionst::function_mapt::const_iterator f_it2= goto_functions->function_map.find(fkt); assert(f_it2!=goto_functions->function_map.end()); - return *(fkt_map[fkt]=std::unique_ptr( - new local_may_aliast(f_it2->second))); + return *(fkt_map[fkt]=util_make_unique(f_it2->second)); } local_may_aliast &operator()(goto_programt::const_targett t) diff --git a/src/analyses/natural_loops.h b/src/analyses/natural_loops.h index ce27a306882..9eb24ccc0ed 100644 --- a/src/analyses/natural_loops.h +++ b/src/analyses/natural_loops.h @@ -93,23 +93,21 @@ void natural_loops_templatet::compute(P &program) { if(m_it->is_backwards_goto()) { - for(const auto &target : m_it->targets) + const auto &target=m_it->get_target(); + + if(target->location_number<=m_it->location_number) { - if(target->location_number<=m_it->location_number) - { - const nodet &node= - cfg_dominators.cfg[cfg_dominators.cfg.entry_map[m_it]]; + const nodet &node= + cfg_dominators.cfg[cfg_dominators.cfg.entry_map[m_it]]; -#ifdef DEBUG - std::cout << "Computing loop for " - << m_it->location_number << " -> " - << target->location_number << "\n"; -#endif - if(node.dominators.find(target)!=node.dominators.end()) - { - compute_natural_loop(m_it, target); - } - } + #ifdef DEBUG + std::cout << "Computing loop for " + << m_it->location_number << " -> " + << target->location_number << "\n"; + #endif + + if(node.dominators.find(target)!=node.dominators.end()) + compute_natural_loop(m_it, target); } } } diff --git a/src/analyses/reaching_definitions.cpp b/src/analyses/reaching_definitions.cpp index 89b31da543b..c3242849511 100644 --- a/src/analyses/reaching_definitions.cpp +++ b/src/analyses/reaching_definitions.cpp @@ -15,14 +15,26 @@ Date: February 2013 #include "reaching_definitions.h" +#include + #include #include +#include #include #include "is_threaded.h" #include "dirty.h" +reaching_definitions_analysist::reaching_definitions_analysist( + const namespacet &_ns): + concurrency_aware_ait(), + ns(_ns) +{ +} + +reaching_definitions_analysist::~reaching_definitions_analysist()=default; + void rd_range_domaint::populate_cache(const irep_idt &identifier) const { assert(bv_container); @@ -717,26 +729,16 @@ const rd_range_domaint::ranges_at_loct &rd_range_domaint::get( return entry->second; } -reaching_definitions_analysist::~reaching_definitions_analysist() -{ - if(is_dirty) - delete is_dirty; - if(is_threaded) - delete is_threaded; - if(value_sets) - delete value_sets; -} - void reaching_definitions_analysist::initialize( const goto_functionst &goto_functions) { - value_set_analysis_fit *value_sets_=new value_set_analysis_fit(ns); + auto value_sets_=util_make_unique(ns); (*value_sets_)(goto_functions); - value_sets=value_sets_; + value_sets=std::move(value_sets_); - is_threaded=new is_threadedt(goto_functions); + is_threaded=util_make_unique(goto_functions); - is_dirty=new dirtyt(goto_functions); + is_dirty=util_make_unique(goto_functions); concurrency_aware_ait::initialize(goto_functions); } diff --git a/src/analyses/reaching_definitions.h b/src/analyses/reaching_definitions.h index 21cbd1ed377..c62bd5e4b51 100644 --- a/src/analyses/reaching_definitions.h +++ b/src/analyses/reaching_definitions.h @@ -241,14 +241,7 @@ class reaching_definitions_analysist: { public: // constructor - explicit reaching_definitions_analysist(const namespacet &_ns): - concurrency_aware_ait(), - ns(_ns), - value_sets(nullptr), - is_threaded(nullptr), - is_dirty(nullptr) - { - } + explicit reaching_definitions_analysist(const namespacet &_ns); virtual ~reaching_definitions_analysist(); @@ -290,9 +283,9 @@ class reaching_definitions_analysist: protected: const namespacet &ns; - value_setst * value_sets; - is_threadedt * is_threaded; - dirtyt * is_dirty; + std::unique_ptr value_sets; + std::unique_ptr is_threaded; + std::unique_ptr is_dirty; }; #endif // CPROVER_ANALYSES_REACHING_DEFINITIONS_H diff --git a/src/analyses/static_analysis.h b/src/analyses/static_analysis.h index ed54cf783af..37dff029936 100644 --- a/src/analyses/static_analysis.h +++ b/src/analyses/static_analysis.h @@ -16,10 +16,13 @@ Author: Daniel Kroening, kroening@kroening.com #error Deprecated, use ai.h instead #endif -#include #include +#include +#include #include +#include + #include // don't use me -- I am just a base class @@ -264,7 +267,7 @@ class static_analysis_baset virtual void generate_state(locationt l)=0; virtual statet &get_state(locationt l)=0; virtual const statet &get_state(locationt l) const=0; - virtual statet* make_temporary_state(statet &s)=0; + virtual std::unique_ptr make_temporary_state(statet &s)=0; typedef domain_baset::expr_sett expr_sett; @@ -346,9 +349,9 @@ class static_analysist:public static_analysis_baset return static_cast(a).merge(static_cast(b), to); } - virtual statet *make_temporary_state(statet &s) + virtual std::unique_ptr make_temporary_state(statet &s) { - return new T(static_cast(s)); + return util_make_unique(static_cast(s)); } virtual void generate_state(locationt l) diff --git a/src/analyses/uncaught_exceptions_analysis.cpp b/src/analyses/uncaught_exceptions_analysis.cpp new file mode 100644 index 00000000000..65baa49e082 --- /dev/null +++ b/src/analyses/uncaught_exceptions_analysis.cpp @@ -0,0 +1,229 @@ +/*******************************************************************\ + +Module: Over-approximating uncaught exceptions analysis + +Author: Cristina David + +\*******************************************************************/ + +/// \file +/// Over-approximating uncaught exceptions analysis + +#ifdef DEBUG +#include +#endif +#include "uncaught_exceptions_analysis.h" + +/// Returns the compile type of an exception +irep_idt uncaught_exceptions_domaint::get_exception_type(const typet &type) +{ + PRECONDITION(type.id()==ID_pointer); + + if(type.subtype().id()==ID_symbol) + { + return to_symbol_type(type.subtype()).get_identifier(); + } + return ID_empty; +} + +/// Returns the symbol corresponding to an exception +exprt uncaught_exceptions_domaint::get_exception_symbol(const exprt &expr) +{ + if(expr.id()!=ID_symbol && expr.has_operands()) + return get_exception_symbol(expr.op0()); + + return expr; +} + +/// The join operator for the uncaught exceptions domain +void uncaught_exceptions_domaint::join( + const irep_idt &element) +{ + thrown.insert(element); +} + +void uncaught_exceptions_domaint::join( + const std::set &elements) +{ + thrown.insert(elements.begin(), elements.end()); +} + +void uncaught_exceptions_domaint::join( + const std::vector &elements) +{ + thrown.insert(elements.begin(), elements.end()); +} + + +/// The transformer for the uncaught exceptions domain +void uncaught_exceptions_domaint::transform( + const goto_programt::const_targett from, + uncaught_exceptions_analysist &uea, + const namespacet &ns) +{ + const goto_programt::instructiont &instruction=*from; + + switch(instruction.type) + { + case THROW: + { + const exprt &exc_symbol=get_exception_symbol(instruction.code); + // retrieve the static type of the thrown exception + const irep_idt &type_id=get_exception_type(exc_symbol.type()); + bool assertion_error= + id2string(type_id).find("java.lang.AssertionError")!=std::string::npos; + if(!assertion_error) + { + join(type_id); + // we must consider all the subtypes given that + // the runtime type is a subtype of the static type + std::vector subtypes= + class_hierarchy.get_children_trans(type_id); + join(subtypes); + } + break; + } + case CATCH: + { + if(!instruction.code.has_operands()) + { + if(!instruction.targets.empty()) // push + { + std::set caught; + stack_caught.push_back(caught); + std::set &last_caught=stack_caught.back(); + const irept::subt &exception_list= + instruction.code.find(ID_exception_list).get_sub(); + + for(const auto &exc : exception_list) + { + last_caught.insert(exc.id()); + std::vector subtypes= + class_hierarchy.get_children_trans(exc.id()); + last_caught.insert(subtypes.begin(), subtypes.end()); + } + } + else // pop + { + if(!stack_caught.empty()) + { + const std::set &caught=stack_caught.back(); + join(caught); + // remove the caught exceptions + for(const auto &exc_id : caught) + thrown.erase(exc_id); + stack_caught.pop_back(); + } + } + } + break; + } + case FUNCTION_CALL: + { + const exprt &function_expr= + to_code_function_call(instruction.code).function(); + DATA_INVARIANT( + function_expr.id()==ID_symbol, + "identifier expected to be a symbol"); + const irep_idt &function_name= + to_symbol_expr(function_expr).get_identifier(); + // use the current information about the callee + join(uea.exceptions_map[function_name]); + break; + } + default: + {} + } +} + +/// Returns the value of the private member thrown +const std::set &uncaught_exceptions_domaint::get_elements() const +{ + return thrown; +} + +/// Constructs the class hierarchy +void uncaught_exceptions_domaint::operator()( + const namespacet &ns) +{ + class_hierarchy(ns.get_symbol_table()); +} + +/// Runs the uncaught exceptions analysis, which populates the exceptions map +void uncaught_exceptions_analysist::collect_uncaught_exceptions( + const goto_functionst &goto_functions, + const namespacet &ns) +{ + bool change=true; + + while(change) + { + change=false; + // add all the functions to the worklist + forall_goto_functions(current_function, goto_functions) + { + domain.make_top(); + const goto_programt &goto_program=current_function->second.body; + + if(goto_program.empty()) + continue; + + forall_goto_program_instructions(instr_it, goto_program) + { + domain.transform(instr_it, *this, ns); + } + // did our estimation for the current function improve? + const std::set &elements=domain.get_elements(); + if(exceptions_map[current_function->first].size()first]=elements; + } + } + } +} + +/// Prints the exceptions map that maps each method to the set of exceptions +/// that may escape it +void uncaught_exceptions_analysist::output( + const goto_functionst &goto_functions) +{ +#ifdef DEBUG + forall_goto_functions(it, goto_functions) + { + if(exceptions_map[it->first].size()>0) + { + std::cout << "Uncaught exceptions in function " << + it->first << ": " << std::endl; + INVARIANT( + exceptions_map.find(it->first)!=exceptions_map.end(), + "each function expected to be recorded in `exceptions_map`"); + for(auto exc_id : exceptions_map[it->first]) + std::cout << id2string(exc_id) << " "; + std::cout << std::endl; + } + } +#endif +} + +/// Applies the uncaught exceptions analysis and outputs the result +void uncaught_exceptions_analysist::operator()( + const goto_functionst &goto_functions, + const namespacet &ns, + exceptions_mapt &exceptions) +{ + domain(ns); + collect_uncaught_exceptions(goto_functions, ns); + exceptions=exceptions_map; + output(goto_functions); +} + +/// Applies the uncaught exceptions analysis and outputs the result +void uncaught_exceptions( + const goto_functionst &goto_functions, + const namespacet &ns, + std::map> &exceptions_map) +{ + uncaught_exceptions_analysist exceptions; + exceptions(goto_functions, ns, exceptions_map); +} diff --git a/src/analyses/uncaught_exceptions_analysis.h b/src/analyses/uncaught_exceptions_analysis.h new file mode 100644 index 00000000000..a53998b4bd2 --- /dev/null +++ b/src/analyses/uncaught_exceptions_analysis.h @@ -0,0 +1,86 @@ +/*******************************************************************\ + +Module: Over-approximative uncaught exceptions analysis + +Author: Cristina David + +\*******************************************************************/ + +/// \file +/// Over-approximative uncaught exceptions analysis + +#ifndef CPROVER_ANALYSES_UNCAUGHT_EXCEPTIONS_ANALYSIS_H +#define CPROVER_ANALYSES_UNCAUGHT_EXCEPTIONS_ANALYSIS_H + +#include +#include +#include +#include +#include + +/// defines the domain used by the uncaught exceptions analysis +class uncaught_exceptions_analysist; + +class uncaught_exceptions_domaint +{ + public: + void transform(const goto_programt::const_targett, + uncaught_exceptions_analysist &, + const namespacet &); + + void join(const irep_idt &); + void join(const std::set &); + void join(const std::vector &); + + void make_top() + { + thrown.clear(); + stack_caught.clear(); + } + + static irep_idt get_exception_type(const typet &type); + + static exprt get_exception_symbol(const exprt &exor); + + const std::set &get_elements() const; + + void operator()(const namespacet &ns); + + private: + typedef std::vector> stack_caughtt; + stack_caughtt stack_caught; + std::set thrown; + class_hierarchyt class_hierarchy; +}; + +/// computes in exceptions_map an overapproximation of the exceptions thrown by +/// each method +class uncaught_exceptions_analysist +{ +public: + typedef std::map> exceptions_mapt; + + void collect_uncaught_exceptions( + const goto_functionst &, + const namespacet &); + + void output(const goto_functionst &); + + void operator()( + const goto_functionst &, + const namespacet &, + exceptions_mapt &); + + friend class uncaught_exceptions_domaint; + + private: + uncaught_exceptions_domaint domain; + exceptions_mapt exceptions_map; +}; + +void uncaught_exceptions( + const goto_functionst &, + const namespacet &, + std::map> &); + +#endif diff --git a/src/ansi-c/ansi_c_convert_type.cpp b/src/ansi-c/ansi_c_convert_type.cpp index 23be0fdb935..1a67c80c4fa 100644 --- a/src/ansi-c/ansi_c_convert_type.cpp +++ b/src/ansi-c/ansi_c_convert_type.cpp @@ -460,7 +460,7 @@ void ansi_c_convert_typet::write(typet &type) else type=unsigned_long_long_int_type(); else - assert(false); + UNREACHABLE; } else if(gcc_int128_cnt) { diff --git a/src/ansi-c/ansi_c_declaration.cpp b/src/ansi-c/ansi_c_declaration.cpp index 00beb3a92cf..a0ef86cffe0 100644 --- a/src/ansi-c/ansi_c_declaration.cpp +++ b/src/ansi-c/ansi_c_declaration.cpp @@ -16,6 +16,7 @@ Author: Daniel Kroening, kroening@kroening.com #include #include +#include void ansi_c_declaratort::build(irept &src) { @@ -36,7 +37,7 @@ void ansi_c_declaratort::build(irept &src) else if(t.id().empty() || t.is_nil()) { - assert(0); + UNREACHABLE; } else if(t.id()==ID_abstract) { @@ -108,7 +109,7 @@ typet ansi_c_declarationt::full_type( p=&(p->subtypes().back()); } else - assert(false); + UNREACHABLE; } *p=type(); diff --git a/src/ansi-c/ansi_c_entry_point.cpp b/src/ansi-c/ansi_c_entry_point.cpp index b22896bd7f7..af1f6c1cb51 100644 --- a/src/ansi-c/ansi_c_entry_point.cpp +++ b/src/ansi-c/ansi_c_entry_point.cpp @@ -305,7 +305,7 @@ bool ansi_c_entry_point( max=to_unsignedbv_type(envp_size_symbol.type).largest(); } else - assert(false); + UNREACHABLE; exprt max_minus_one=from_integer(max-1, envp_size_symbol.type); @@ -431,7 +431,7 @@ bool ansi_c_entry_point( } } else - assert(false); + UNREACHABLE; } else { diff --git a/src/ansi-c/ansi_c_language.cpp b/src/ansi-c/ansi_c_language.cpp index 3a2f52f25fd..b262b46d7d5 100644 --- a/src/ansi-c/ansi_c_language.cpp +++ b/src/ansi-c/ansi_c_language.cpp @@ -129,6 +129,8 @@ bool ansi_c_languaget::final( symbol_tablet &symbol_table, bool generate_start_function) { + generate_opaque_method_stubs(symbol_table); + if(generate_start_function) { if(ansi_c_entry_point(symbol_table, "main", get_message_handler())) @@ -143,9 +145,9 @@ void ansi_c_languaget::show_parse(std::ostream &out) parse_tree.output(out); } -languaget *new_ansi_c_language() +std::unique_ptr new_ansi_c_language() { - return new ansi_c_languaget; + return util_make_unique(); } bool ansi_c_languaget::from_expr( diff --git a/src/ansi-c/ansi_c_language.h b/src/ansi-c/ansi_c_language.h index ba2aa0f8e32..a06cf4d3645 100644 --- a/src/ansi-c/ansi_c_language.h +++ b/src/ansi-c/ansi_c_language.h @@ -10,7 +10,12 @@ Author: Daniel Kroening, kroening@kroening.com #ifndef CPROVER_ANSI_C_ANSI_C_LANGUAGE_H #define CPROVER_ANSI_C_ANSI_C_LANGUAGE_H +/*! \defgroup gr_ansi_c ANSI-C front-end */ + +#include + #include +#include #include "ansi_c_parse_tree.h" @@ -63,8 +68,8 @@ class ansi_c_languaget:public languaget exprt &expr, const namespacet &ns) override; - languaget *new_language() override - { return new ansi_c_languaget; } + std::unique_ptr new_language() override + { return util_make_unique(); } std::string id() const override { return "C"; } std::string description() const override { return "ANSI-C 99"; } @@ -77,6 +82,6 @@ class ansi_c_languaget:public languaget std::string parse_path; }; -languaget *new_ansi_c_language(); +std::unique_ptr new_ansi_c_language(); #endif // CPROVER_ANSI_C_ANSI_C_LANGUAGE_H diff --git a/src/ansi-c/c_preprocess.cpp b/src/ansi-c/c_preprocess.cpp index 927a928b187..26fb22355ff 100644 --- a/src/ansi-c/c_preprocess.cpp +++ b/src/ansi-c/c_preprocess.cpp @@ -106,7 +106,7 @@ static std::string type_max(const typet &src) return integer2string( power(2, to_unsignedbv_type(src).get_width()-1)-1); else - assert(false); + UNREACHABLE; } /// quote a string for bash and CMD @@ -766,7 +766,7 @@ bool c_preprocess_gcc_clang( else if(config.ansi_c.wchar_t_width==config.ansi_c.char_width) command+=" -D__WCHAR_TYPE__=\""+sig+" char\""; else - assert(false); + UNREACHABLE; } if(config.ansi_c.char_is_unsigned) @@ -804,7 +804,7 @@ bool c_preprocess_gcc_clang( break; default: - assert(false); + UNREACHABLE; } // Standard Defines, ANSI9899 6.10.8 diff --git a/src/ansi-c/c_typecast.cpp b/src/ansi-c/c_typecast.cpp index ce451e79f75..edf95e5379e 100644 --- a/src/ansi-c/c_typecast.cpp +++ b/src/ansi-c/c_typecast.cpp @@ -378,11 +378,11 @@ void c_typecastt::implicit_typecast_arithmetic( } return; - case BOOL: assert(false); // should always be promoted to int - case CHAR: assert(false); // should always be promoted to int - case UCHAR: assert(false); // should always be promoted to int - case SHORT: assert(false); // should always be promoted to int - case USHORT: assert(false); // should always be promoted to int + case BOOL: UNREACHABLE; // should always be promoted to int + case CHAR: UNREACHABLE; // should always be promoted to int + case UCHAR: UNREACHABLE; // should always be promoted to int + case SHORT: UNREACHABLE; // should always be promoted to int + case USHORT: UNREACHABLE; // should always be promoted to int case INT: new_type=signed_int_type(); break; case UINT: new_type=unsigned_int_type(); break; case LONG: new_type=signed_long_int_type(); break; diff --git a/src/ansi-c/c_typecheck_expr.cpp b/src/ansi-c/c_typecheck_expr.cpp index fee4e8685d1..54eab363d7b 100644 --- a/src/ansi-c/c_typecheck_expr.cpp +++ b/src/ansi-c/c_typecheck_expr.cpp @@ -77,7 +77,7 @@ void c_typecheck_baset::add_rounding_mode(exprt &expr) else if(expr.id()==ID_minus) expr.id(ID_floatbv_minus); else - assert(false); + UNREACHABLE; expr.op2()=from_integer(0, unsigned_int_type()); } @@ -875,7 +875,7 @@ void c_typecheck_baset::typecheck_side_effect_statement_expression( else if(last_statement==ID_function_call) { // this is suspected to be dead - assert(false); + UNREACHABLE; // make the last statement an expression @@ -2852,7 +2852,7 @@ void c_typecheck_baset::typecheck_expr_binary_arithmetic(exprt &expr) else if(expr.id()==ID_bitxor) expr.id(ID_xor); else - assert(false); + UNREACHABLE; expr.type()=type0; return; } @@ -3010,7 +3010,7 @@ void c_typecheck_baset::typecheck_expr_pointer_arithmetic(exprt &expr) else { p_op=int_op=nullptr; - assert(false); + UNREACHABLE; } const typet &int_op_type=follow(int_op->type()); diff --git a/src/ansi-c/c_typecheck_initializer.cpp b/src/ansi-c/c_typecheck_initializer.cpp index 1bc494c8d4a..7d388cc68dd 100644 --- a/src/ansi-c/c_typecheck_initializer.cpp +++ b/src/ansi-c/c_typecheck_initializer.cpp @@ -344,7 +344,7 @@ void c_typecheck_baset::designator_enter( entry.subtype=vector_type.subtype(); } else - assert(false); + UNREACHABLE; designator.push_entry(entry); } @@ -478,7 +478,7 @@ exprt::operandst::const_iterator c_typecheck_baset::do_designated_initializer( dest=&(dest->op0()); } else - assert(false); + UNREACHABLE; } // second phase: assign value diff --git a/src/ansi-c/c_typecheck_type.cpp b/src/ansi-c/c_typecheck_type.cpp index 5195e653364..393be7dbf54 100644 --- a/src/ansi-c/c_typecheck_type.cpp +++ b/src/ansi-c/c_typecheck_type.cpp @@ -380,7 +380,7 @@ void c_typecheck_baset::typecheck_custom_type(typet &type) type.set(ID_f, integer2string(f_int)); } else - assert(false); + UNREACHABLE; } void c_typecheck_baset::typecheck_code_type(code_typet &type) @@ -759,7 +759,7 @@ void c_typecheck_baset::typecheck_compound_type(struct_union_typet &type) else if(compound_symbol.type.id()==ID_union) compound_symbol.type.id(ID_incomplete_union); else - assert(false); + UNREACHABLE; symbolt *new_symbol; move_symbol(compound_symbol, new_symbol); diff --git a/src/ansi-c/expr2c.cpp b/src/ansi-c/expr2c.cpp index 4db1985b07e..22f39ce7a46 100644 --- a/src/ansi-c/expr2c.cpp +++ b/src/ansi-c/expr2c.cpp @@ -114,7 +114,7 @@ void expr2ct::get_shorthands(const exprt &expr) ns_collision[symbol->location.get_function()].insert(sh); if(!shorthands.insert(std::make_pair(*it, sh)).second) - assert(false); + UNREACHABLE; } for(find_symbols_sett::const_iterator @@ -465,28 +465,40 @@ std::string expr2ct::convert_rec( } else if(src.id()==ID_symbol) { - const typet &followed=ns.follow(src); + symbol_typet symbolic_type=to_symbol_type(src); + const irep_idt &typedef_identifer=symbolic_type.get(ID_typedef); - if(followed.id()==ID_struct) + // Providing we have a valid identifer, we can just use that rather than + // trying to find the concrete type + if(typedef_identifer!="") { - std::string dest=q+"struct"; - const irep_idt &tag=to_struct_type(followed).get_tag(); - if(tag!="") - dest+=" "+id2string(tag); - dest+=d; - return dest; + return q+id2string(typedef_identifer)+d; } - else if(followed.id()==ID_union) + else { - std::string dest=q+"union"; - const irep_idt &tag=to_union_type(followed).get_tag(); - if(tag!="") - dest+=" "+id2string(tag); - dest+=d; - return dest; + const typet &followed=ns.follow(src); + + if(followed.id()==ID_struct) + { + std::string dest=q+"struct"; + const irep_idt &tag=to_struct_type(followed).get_tag(); + if(tag!="") + dest+=" "+id2string(tag); + dest+=d; + return dest; + } + else if(followed.id()==ID_union) + { + std::string dest=q+"union"; + const irep_idt &tag=to_union_type(followed).get_tag(); + if(tag!="") + dest+=" "+id2string(tag); + dest+=d; + return dest; + } + else + return convert_rec(followed, new_qualifiers, declarator); } - else - return convert_rec(followed, new_qualifiers, declarator); } else if(src.id()==ID_struct_tag) { diff --git a/src/cbmc/all_properties_class.h b/src/cbmc/all_properties_class.h index 89c4614cc12..42b95de39f4 100644 --- a/src/cbmc/all_properties_class.h +++ b/src/cbmc/all_properties_class.h @@ -56,7 +56,7 @@ class bmc_all_propertiest: } // make some poor compilers happy - assert(false); + UNREACHABLE; return ""; } diff --git a/src/cbmc/bmc.cpp b/src/cbmc/bmc.cpp index 4f55b1a7315..ab5d6883ab0 100644 --- a/src/cbmc/bmc.cpp +++ b/src/cbmc/bmc.cpp @@ -55,15 +55,16 @@ void bmct::error_trace() switch(ui) { case ui_message_handlert::uit::PLAIN: - std::cout << "\n" << "Counterexample:" << "\n"; - show_goto_trace(std::cout, ns, goto_trace); + status() << "Counterexample:" << eom; + show_goto_trace(status(), ns, goto_trace); + status() << eom; break; case ui_message_handlert::uit::XML_UI: { xmlt xml; convert(ns, goto_trace, xml); - std::cout << xml << "\n"; + status() << preformatted_output << xml << eom; } break; @@ -80,7 +81,7 @@ void bmct::error_trace() result["status"]=json_stringt("failed"); jsont &json_trace=result["trace"]; convert(ns, goto_trace, json_trace); - std::cout << ",\n" << json_result; + status() << preformatted_output << json_result << eom; } break; } @@ -313,11 +314,11 @@ safety_checkert::resultt bmct::run( std::unique_ptr memory_model; if(mm.empty() || mm=="sc") - memory_model=std::unique_ptr(new memory_model_sct(ns)); + memory_model=util_make_unique(ns); else if(mm=="tso") - memory_model=std::unique_ptr(new memory_model_tsot(ns)); + memory_model=util_make_unique(ns); else if(mm=="pso") - memory_model=std::unique_ptr(new memory_model_psot(ns)); + memory_model=util_make_unique(ns); else { error() << "Invalid memory model " << mm diff --git a/src/cbmc/bmc.h b/src/cbmc/bmc.h index e05a4de62f6..4c69fab527c 100644 --- a/src/cbmc/bmc.h +++ b/src/cbmc/bmc.h @@ -113,6 +113,8 @@ class bmct:public safety_checkert friend class bmc_all_propertiest; friend class bmc_covert; + template