Skip to content

Commit

Permalink
optimize fuzz case generation
Browse files Browse the repository at this point in the history
  • Loading branch information
esaulpaugh committed Aug 16, 2020
1 parent a6de535 commit 63bee46
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions src/test/java/com/esaulpaugh/headlong/abi/MonteCarloTestCase.java
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,6 @@ public class MonteCarloTestCase {
this.rawSignature = sig;
this.function = new Function(sig, null, md);
this.argsTuple = generateTuple(function.getParamTypes(), rng);
function.getParamTypes().validate(argsTuple);
}

JsonElement toJsonElement(Gson gson, String name, JsonPrimitive version) {
Expand Down Expand Up @@ -331,10 +330,10 @@ private static long generateLong(Random r, int bitLen, int len, boolean unsigned
case 8: break;
default: throw new Error();
}
val = unsigned || r.nextBoolean() ? val : val < 0 ? -(val + 1) : (-val - 1);
if(!unsigned) {
val = r.nextBoolean() ? val : val < 0 ? -(val + 1) : (-val - 1);
int valBitLen = val < 0 ? BizarroIntegers.bitLen(val) : Integers.bitLen(val);
if(valBitLen >= bitLen) {
if (valBitLen >= bitLen) {
val >>= 1;
}
}
Expand Down Expand Up @@ -400,16 +399,22 @@ private static String generateASCIIString(final int len, Random r) {

private static int[] generateIntArray(final int len, IntType intType, Random r) {
int[] ints = new int[len];
final int bitLen = intType.bitLength;
final int bound = bitLen / Byte.SIZE;
final boolean unsigned = intType.unsigned;
for (int i = 0; i < len; i++) {
ints[i] = (int) generateLong(r, intType);
ints[i] = (int) generateLong(r, bitLen, 1 + r.nextInt(bound), unsigned);
}
return ints;
}

private static long[] generateLongArray(final int len, LongType longType, Random r) {
long[] longs = new long[len];
final int bitLen = longType.bitLength;
final int bound = bitLen / Byte.SIZE;
final boolean unsigned = longType.unsigned;
for (int i = 0; i < len; i++) {
longs[i] = generateLong(r, longType);
longs[i] = generateLong(r, bitLen, 1 + r.nextInt(bound), unsigned);
}
return longs;
}
Expand Down

0 comments on commit 63bee46

Please sign in to comment.