com.ociweb.pronghorn.code.FuzzValueGenerator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of Pronghorn Show documentation
Show all versions of Pronghorn Show documentation
Primary dependency for any project using the Pronghorn framework
The newest version!
package com.ociweb.pronghorn.code;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
import com.ociweb.pronghorn.util.Appendables;
public class FuzzValueGenerator extends Code implements SingleResult {
//when value masked by this is zero we will generate a null instead of the value.
//CAUTION: this implies that this particular literal value will not be tested.
private static final String MASK_FOR_NULL = "0x3FF";
private static final int MAX_FOR_NULL_INT = 0x3FF;
//TODO: generate code into resources folder, maven, where to put generated.
//TODO: must reset back to zero when we get to large.
private final String tab = " ";
private final int varId;
private final boolean isLong;
private final boolean isNullable;
private final boolean isChars;
private final long longMask;
private final long longFloor;
private final int intMask;
private final int intFloor;
private final boolean isFullRange;
private final long startValueLiteral;
private static final int[] primes = new int[]{ 137, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
127, 131}; //32 primes as seeds
private static final AtomicInteger genSeed = new AtomicInteger();
private static final int genSeedMask = (1<<5)-1;
private final int stepSize;
public FuzzValueGenerator(AtomicInteger varIdGen, boolean isLong, boolean isSigned, boolean isNullable) {
this(varIdGen,isLong,isSigned, isNullable, false);
}
public FuzzValueGenerator(AtomicInteger varIdGen, boolean isLong, boolean isSigned, boolean isNullable, boolean isChars) {
this(varIdGen,isLong,isSigned,isNullable,isChars,primes[genSeedMask&genSeed.incrementAndGet()], Long.MIN_VALUE);
}
public FuzzValueGenerator(AtomicInteger varIdGen, boolean isLong, boolean isSigned, boolean isNullable, boolean isChars, int step, long startLiteral) {
super(varIdGen,1,true);
this.startValueLiteral = startLiteral;
this.stepSize = step;
this.varId = varIdGen.incrementAndGet();
this.isLong = isLong;
this.isNullable = isNullable;
this.isChars = isChars;
int bits;
if (isSigned) {
isFullRange = true;
if (isLong) {
bits = 64;
longFloor = Long.MIN_VALUE;
intFloor = 0;
} else {
bits = 32;
longFloor = 0;
intFloor = Integer.MIN_VALUE;
}
} else {
isFullRange = false;
if (isLong) {
bits = 63;
longFloor = 0;
intFloor = 0;
} else {
bits = 31;
longFloor = 0;
intFloor = 0;
}
}
if (isLong) {
longMask = (1L< FF FF FF
if (isLong) {
if (0!=longFloor) {
Appendables.appendValue(target, longFloor).append("+");
}
target.append("(");
if (!isFullRange) {
Appendables.appendHexDigits(target, longMask).append("L & ");
}
appendMemberVar(target.append("("),varId);
Appendables.appendValue(target.append(" += "), stepSize).append("))");
} else {
if (0!=intFloor) {
System.out.println("appending the intFloor of "+intFloor);
Appendables.appendValue(target, intFloor).append("+");
}
target.append("(");
if (!isFullRange) {
Appendables.appendHexDigits(target, intMask).append(" & ");
}
appendMemberVar(target.append("("),varId);
Appendables.appendValue(target.append(" += "), stepSize).append("))");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy