/** * This method allows to reset all primitive values before trying again a * local search on the same test case. * * @param test * the test case that will have their primitive values changed to * random primitive values. */ public static void randomizePrimitives(TestCase test) { for (Statement s : test) { if (s instanceof PrimitiveStatement<?>) { if (s instanceof NullStatement) { continue; // ignore NullStatement } ((PrimitiveStatement<?>) s).randomize(); } } }
/** * Create random primitive statement * * @param tc a {@link org.evosuite.testcase.TestCase} object. * @param clazz a {@link java.lang.reflect.Type} object. * @param position an integer. * @return a {@link org.evosuite.testcase.statements.PrimitiveStatement} object. */ public static PrimitiveStatement<?> getRandomStatement(TestCase tc, GenericClass clazz, int position) { PrimitiveStatement<?> statement = getPrimitiveStatement(tc, clazz); statement.randomize(); return statement; }
/** * {@inheritDoc} */ @Override public boolean mutate(TestCase test, TestFactory factory) { if (!hasMoreThanOneValue()) return false; T oldVal = value; while (value == oldVal && value != null) { if (Randomness.nextDouble() <= Properties.RANDOM_PERTURBATION) { // When using TT, then an integer may represent a boolean, // and we would lose "negation" as a mutation if (Properties.TT && getClass().equals(IntPrimitiveStatement.class)) { if (Randomness.nextDouble() <= Properties.RANDOM_PERTURBATION) { // mutateTransformedBoolean(test); ((IntPrimitiveStatement) this).negate(); } else randomize(); } else { randomize(); } } else delta(); } return true; }
@SuppressWarnings("unused") private void mutateTransformedBoolean(TestCase test) { if (Randomness.nextDouble() > Properties.RANDOM_PERTURBATION) { boolean done = false; for (Statement s : test) { if (s instanceof MethodStatement) { MethodStatement ms = (MethodStatement) s; List<VariableReference> parameters = ms.getParameterReferences(); int index = parameters.indexOf(retval); if (index >= 0) { Method m = ms.getMethod().getMethod(); org.objectweb.asm.Type[] types = org.objectweb.asm.Type.getArgumentTypes(m); if (types[index].equals(org.objectweb.asm.Type.BOOLEAN_TYPE)) { logger.warn("MUTATING"); ((IntPrimitiveStatement) this).negate(); done = true; break; } } } } if (!done) randomize(); } else { randomize(); } }