Skip to content

Commit c2a8aa2

Browse files
authored
Merge pull request #497 from sosy-lab/z3/version-update-from-4.14.0
Z3/version update from 4.14.0 to 4.15.2
2 parents c8e5576 + 4070cfc commit c2a8aa2

File tree

4 files changed

+34
-16
lines changed

4 files changed

+34
-16
lines changed

lib/ivy.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ SPDX-License-Identifier: Apache-2.0
189189

190190
<!-- Solver Binaries -->
191191
<dependency org="org.sosy_lab" name="javasmt-solver-mathsat" rev="5.6.11-sosy1" conf="runtime-mathsat-x64->solver-mathsat-x64; runtime-mathsat-arm64->solver-mathsat-arm64" />
192-
<dependency org="org.sosy_lab" name="javasmt-solver-z3" rev="4.14.0" conf="runtime-z3-x64->solver-z3-x64; runtime-z3-arm64->solver-z3-arm64; contrib->sources,javadoc" />
192+
<dependency org="org.sosy_lab" name="javasmt-solver-z3" rev="4.15.2" conf="runtime-z3-x64->solver-z3-x64; runtime-z3-arm64->solver-z3-arm64; contrib->sources,javadoc" />
193193
<dependency org="org.sosy_lab" name="javasmt-solver-opensmt" rev="2.9.0-gef441e1c" conf="runtime-opensmt-x64->solver-opensmt-x64; runtime-opensmt-arm64->solver-opensmt-arm64; contrib->sources,javadoc"/>
194194
<dependency org="org.sosy_lab" name="javasmt-solver-optimathsat" rev="1.7.3-sosy1" conf="runtime-optimathsat->solver-optimathsat" />
195195
<dependency org="org.sosy_lab" name="javasmt-solver-cvc4" rev="1.8-prerelease-2020-06-24-g7825d8f28" conf="runtime-cvc4->solver-cvc4" />

src/org/sosy_lab/java_smt/basicimpl/AbstractBitvectorFormulaManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ public BitvectorFormula rotateLeft(BitvectorFormula pNumber, BitvectorFormula pT
340340
protected TFormulaInfo rotateLeft(TFormulaInfo pNumber, TFormulaInfo pToRotate) {
341341
int length = getLength(wrap(pNumber));
342342
final TFormulaInfo lengthAsBv = makeBitvectorImpl(length, length);
343-
final TFormulaInfo toRotateInRange = smodulo(pToRotate, lengthAsBv);
343+
final TFormulaInfo toRotateInRange = remainder(pToRotate, lengthAsBv, false);
344344
return or(
345345
shiftLeft(pNumber, toRotateInRange),
346346
shiftRight(pNumber, subtract(lengthAsBv, toRotateInRange), false));
@@ -373,7 +373,7 @@ public BitvectorFormula rotateRight(BitvectorFormula pNumber, BitvectorFormula p
373373
protected TFormulaInfo rotateRight(TFormulaInfo pNumber, TFormulaInfo pToRotate) {
374374
int length = getLength(wrap(pNumber));
375375
final TFormulaInfo lengthAsBv = makeBitvectorImpl(length, length);
376-
final TFormulaInfo toRotateInRange = smodulo(pToRotate, lengthAsBv);
376+
final TFormulaInfo toRotateInRange = remainder(pToRotate, lengthAsBv, false);
377377
return or(
378378
shiftRight(pNumber, toRotateInRange, false),
379379
shiftLeft(pNumber, subtract(lengthAsBv, toRotateInRange)));

src/org/sosy_lab/java_smt/test/BitvectorFormulaManagerTest.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -463,12 +463,20 @@ public void bvRotateByConstant() throws SolverException, InterruptedException {
463463

464464
@Test
465465
public void bvRotateByBV() throws SolverException, InterruptedException {
466-
assume()
467-
.withMessage("Princess is too slow for this test")
468-
.that(solver)
469-
.isNotEqualTo(Solvers.PRINCESS);
466+
int[] bitsizes;
467+
switch (solverToUse()) {
468+
case PRINCESS:
469+
bitsizes = new int[] {2, 3}; // Princess is too slow for larger bitvectors
470+
break;
471+
case Z3:
472+
bitsizes = new int[] {2, 3, 4, 8}; // Z3 is too slow for larger bitvectors since v4.15.0
473+
break;
474+
default:
475+
bitsizes = new int[] {2, 3, 4, 8, 13, 25, 31};
476+
break;
477+
}
470478

471-
for (int bitsize : new int[] {8, 13, 25, 31}) {
479+
for (int bitsize : bitsizes) {
472480
BitvectorFormula zero = bvmgr.makeBitvector(bitsize, 0);
473481
BitvectorFormula a = bvmgr.makeVariable(bitsize, "a" + bitsize);
474482
BitvectorFormula b = bvmgr.makeVariable(bitsize, "b" + bitsize);
@@ -600,6 +608,16 @@ public void bvModulo() throws SolverException, InterruptedException {
600608
assertThatFormula(bvmgr.equal(bvmgr.smodulo(minusTen, minusThree), minusOne)).isTautological();
601609
}
602610

611+
@Test
612+
public void bvModulo2() throws SolverException, InterruptedException {
613+
BitvectorFormula one = bvmgr.makeBitvector(2, 1);
614+
BitvectorFormula two = bvmgr.makeBitvector(2, 2);
615+
BitvectorFormula three = bvmgr.makeBitvector(2, 3);
616+
617+
// check that SMOD works for small bitvectors: 1_2 % 2_2 == 3_2 or 01 % 10 == 11
618+
assertThatFormula(bvmgr.equal(bvmgr.smodulo(one, two), three)).isTautological();
619+
}
620+
603621
@Test
604622
public void bvModuloByZero() throws SolverException, InterruptedException {
605623
BitvectorFormula ten = bvmgr.makeBitvector(8, 10);

src/org/sosy_lab/java_smt/test/RotationVisitorTest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ public void rotateLeftTest() {
5151
FunctionDeclarationKind.ITE,
5252
FunctionDeclarationKind.EQ,
5353
FunctionDeclarationKind.EQ,
54-
FunctionDeclarationKind.BV_SMOD,
55-
FunctionDeclarationKind.BV_SMOD,
54+
FunctionDeclarationKind.BV_UREM,
55+
FunctionDeclarationKind.BV_UREM,
5656
FunctionDeclarationKind.BV_LSHR,
5757
FunctionDeclarationKind.BV_SUB);
5858
break;
@@ -62,8 +62,8 @@ public void rotateLeftTest() {
6262
.containsExactly(
6363
FunctionDeclarationKind.BV_OR,
6464
FunctionDeclarationKind.BV_SHL,
65-
FunctionDeclarationKind.BV_SMOD,
66-
FunctionDeclarationKind.BV_SMOD,
65+
FunctionDeclarationKind.BV_UREM,
66+
FunctionDeclarationKind.BV_UREM,
6767
FunctionDeclarationKind.BV_LSHR,
6868
FunctionDeclarationKind.BV_SUB);
6969
break;
@@ -114,8 +114,8 @@ public void rotateRightTest() {
114114
FunctionDeclarationKind.ITE,
115115
FunctionDeclarationKind.EQ,
116116
FunctionDeclarationKind.EQ,
117-
FunctionDeclarationKind.BV_SMOD,
118-
FunctionDeclarationKind.BV_SMOD,
117+
FunctionDeclarationKind.BV_UREM,
118+
FunctionDeclarationKind.BV_UREM,
119119
FunctionDeclarationKind.BV_SHL,
120120
FunctionDeclarationKind.BV_SUB);
121121
break;
@@ -125,8 +125,8 @@ public void rotateRightTest() {
125125
.containsExactly(
126126
FunctionDeclarationKind.BV_OR,
127127
FunctionDeclarationKind.BV_SHL,
128-
FunctionDeclarationKind.BV_SMOD,
129-
FunctionDeclarationKind.BV_SMOD,
128+
FunctionDeclarationKind.BV_UREM,
129+
FunctionDeclarationKind.BV_UREM,
130130
FunctionDeclarationKind.BV_LSHR,
131131
FunctionDeclarationKind.BV_SUB);
132132
break;

0 commit comments

Comments
 (0)