@@ -16,7 +16,7 @@ public class StringImpl implements Serializable {
16
16
@ java .io .Serial
17
17
private static final long serialVersionUID = -6849794470754667710L ;
18
18
19
- private static final int STRING_LENGTH_MAX = 256 ;
19
+ private static final int STRING_LENGTH_MAX = 50 ;
20
20
21
21
static final byte UTF16 = 1 ;
22
22
@@ -219,8 +219,7 @@ private void _assumeInvariants(StringImpl obj) {
219
219
Engine .assume (obj .value != null );
220
220
int len = obj .value .length >> obj .coder ;
221
221
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 );
224
223
}
225
224
226
225
private void _assumeInvariants () {
@@ -293,6 +292,10 @@ public void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin) {
293
292
}
294
293
295
294
public static boolean latin1Equals (byte [] value , byte [] other ) {
295
+ Boolean arrayEquals = Engine .arrayEquals (value , other );
296
+ if (arrayEquals != null )
297
+ return arrayEquals ;
298
+
296
299
if (value .length == other .length ) {
297
300
for (int i = 0 ; i < value .length ; ++i ) {
298
301
if (value [i ] != other [i ]) {
@@ -313,11 +316,17 @@ public boolean equals(Object anObject) {
313
316
} else {
314
317
if (anObject instanceof StringImpl ) {
315
318
StringImpl aString = (StringImpl )anObject ;
319
+ Engine .assume (aString .value != value );
316
320
_assumeInvariants (aString );
317
321
return (!COMPACT_STRINGS || this .coder == aString .coder ) && latin1Equals (this .value , aString .value );
318
322
}
319
323
320
324
return false ;
321
325
}
322
326
}
327
+
328
+ public boolean isEmpty () {
329
+ _assumeInvariants ();
330
+ return value .length == 0 ;
331
+ }
323
332
}
0 commit comments