Skip to content

Commit 320f8db

Browse files
authored
Updated approximations (#18)
* [fix] fixed approximations * [chore] updated jacodb version * [fix] fixed `String` approximation - assuming small length if string is symbolic * [todo] added todo's
1 parent 7deb55c commit 320f8db

File tree

8 files changed

+468
-17
lines changed

8 files changed

+468
-17
lines changed

approximations/build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ repositories {
1111
}
1212

1313
private val jacodbPackage = "com.github.UnitTestBot.jacodb"
14-
private val jacodbVersion = "453ec7c0b3" // jacodb neo branch
14+
private val jacodbVersion = "d7dd9d343b" // jacodb neo branch
1515

1616
dependencies {
1717
compileOnly("$jacodbPackage:jacodb-api-jvm:$jacodbVersion")
@@ -43,4 +43,3 @@ publishing {
4343
}
4444
}
4545
}
46-

approximations/src/main/java/generated/java/lang/StringImpl.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class StringImpl implements Serializable {
1616
@java.io.Serial
1717
private static final long serialVersionUID = -6849794470754667710L;
1818

19-
private static final int STRING_LENGTH_MAX = 256;
19+
private static final int STRING_LENGTH_MAX = 50;
2020

2121
static final byte UTF16 = 1;
2222

@@ -219,8 +219,7 @@ private void _assumeInvariants(StringImpl obj) {
219219
Engine.assume(obj.value != null);
220220
int len = obj.value.length >> obj.coder;
221221
Engine.assume(len >= 0);
222-
// TODO: add Engine.assumeSymbolic(instance, bool) #ASAP
223-
Engine.assume(len <= STRING_LENGTH_MAX);
222+
Engine.assumeSymbolic(obj, len <= STRING_LENGTH_MAX);
224223
}
225224

226225
private void _assumeInvariants() {
@@ -293,6 +292,10 @@ public void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin) {
293292
}
294293

295294
public static boolean latin1Equals(byte[] value, byte[] other) {
295+
Boolean arrayEquals = Engine.arrayEquals(value, other);
296+
if (arrayEquals != null)
297+
return arrayEquals;
298+
296299
if (value.length == other.length) {
297300
for(int i = 0; i < value.length; ++i) {
298301
if (value[i] != other[i]) {
@@ -313,11 +316,17 @@ public boolean equals(Object anObject) {
313316
} else {
314317
if (anObject instanceof StringImpl) {
315318
StringImpl aString = (StringImpl)anObject;
319+
Engine.assume(aString.value != value);
316320
_assumeInvariants(aString);
317321
return (!COMPACT_STRINGS || this.coder == aString.coder) && latin1Equals(this.value, aString.value);
318322
}
319323

320324
return false;
321325
}
322326
}
327+
328+
public boolean isEmpty() {
329+
_assumeInvariants();
330+
return value.length == 0;
331+
}
323332
}

0 commit comments

Comments
 (0)