ExpoSE icon indicating copy to clipboard operation
ExpoSE copied to clipboard

Does not find alternative paths when using string.replace

Open Otto-AA opened this issue 3 years ago • 0 comments

I am new to this library, so I'm not sure if this is a bug or I am missing something.

Considering the following test case:

const S$ = require('S$');
const s = S$.symbol('s', 'x');

if (s.replace('', '').length) {
    throw 'Has length'
} else {
    throw 'Nope'
}

I would have expected it to find both paths (one with s = 'x' and one with s = ''), however running expoSE test.js results in:

[!] Nope
[!] expoSE replay '{...}/test.js' '{"_bound":0}'
[!] Stats
[+] General Function Call: 5
[+] Symbolic Values: 1
[+] Symbolic Primitives: 1
[+] Wrapped Constants: 1
[+] Symbolic Field: 1
[+] Modeled Function Call: {"#replace":1}
[!] Done
[+] /home/oaie/hacks/html-parser/src/test.js. Coverage (Term): 81% Coverage (Decisions): 50% Coverage (LOC): 80% Lines Of Code: 7 -*
[+] Total Lines Of Code 7
[+] Total Coverage: 0.8%
[+] EXPOSE_PRINT_COVERAGE=1 for line by line breakdown
[+] ExpoSE Finished. 1 paths, 1 errors

When using the empty string as the default parameter it finds the first one (Has length) but not the second one (Nope). Thus it seems, that using the no-op s.replace('', '') prevents it from searching for further solutions somehow. Without the .replace(...) call it finds both solutions.

Otto-AA avatar Feb 28 '23 18:02 Otto-AA