private boolean removeCharacters(LocalSearchObjective<TestChromosome> objective, TestChromosome test, StringPrimitiveStatement p, int statement) { boolean improvement = false; backup(test, p); for (int i = oldValue.length() - 1; i >= 0; i--) { String newString = oldValue.substring(0, i) + oldValue.substring(i + 1); p.setValue(newString); logger.info(" " + i + " " + oldValue + "/" + oldValue.length() + " -> " + newString + "/" + newString.length()); if (objective.hasImproved(test)) { logger.info("Has improved"); backup(test, p); improvement = true; } else { logger.info("Has not improved"); restore(test, p); } } return improvement; }
private boolean removeCharacters(LocalSearchObjective<TestChromosome> objective, TestChromosome test, StringPrimitiveStatement p, int statement) { boolean improvement = false; backup(test, p); for (int i = oldValue.length() - 1; i >= 0; i--) { String newString = oldValue.substring(0, i) + oldValue.substring(i + 1); p.setValue(newString); logger.info(" " + i + " " + oldValue + "/" + oldValue.length() + " -> " + newString + "/" + newString.length()); if (objective.hasImproved(test)) { logger.info("Has improved"); backup(test, p); improvement = true; } else { logger.info("Has not improved"); restore(test, p); } if(LocalSearchBudget.getInstance().isFinished()) break; } return improvement; }
if (objective.hasImproved(test)) { backup(test, p);
if (objective.hasImproved(test)) { backup(test, p); improvement = true; if (objective.hasImproved(test)) { backup(test, p); improvement = true;
p.setValue(newString); while (objective.hasImproved(test)) { oldValue = p.getValue(); oldResult = test.getLastExecutionResult();
+ newString + "/" + newString.length()); if (objective.hasImproved(test)) { done = false; + " -> " + newString + "/" + newString.length()); if (objective.hasImproved(test)) { done = false; iterate(-2, objective, test, p, i, statement);
if (objective.hasImproved(test)) { backup(test, p); improvement = true; if (objective.hasImproved(test)) { backup(test, p); improvement = true;
private boolean iterate(long delta, LocalSearchObjective<TestChromosome> objective, TestChromosome test, NumericalPrimitiveStatement<T> p, int statement) { boolean improvement = false; T oldValue = p.getValue(); ExecutionResult oldResult = test.getLastExecutionResult(); p.increment(delta); logger.info("Trying increment " + delta + " of " + p.getCode()); while (objective.hasImproved(test)) { oldValue = p.getValue(); oldResult = test.getLastExecutionResult(); improvement = true; delta = 2 * delta; p.increment(delta); logger.info("Trying increment " + delta + " of " + p.getCode()); } logger.info("No improvement on " + p.getCode()); p.setValue(oldValue); test.setLastExecutionResult(oldResult); test.setChanged(false); logger.info("Final value of this iteration: " + p.getValue()); return improvement; }
logger.info("Is changed"); if (objective.hasImproved(test)) { logger.info("Fitness has improved, keeping");
/** * Try to replace source of field with all possible choices * * @param test * @param statement * @param objective */ private boolean doSearch(TestChromosome test, FieldStatement statement, LocalSearchObjective<TestChromosome> objective) { if (!statement.isStatic()) { VariableReference source = statement.getSource(); List<VariableReference> objects = test.getTestCase().getObjects(source.getType(), statement.getPosition()); objects.remove(source); for (VariableReference replacement : objects) { statement.setSource(replacement); if (objective.hasImproved(test)) { return true; } } statement.setSource(source); } return false; } }
if (!objective.hasImproved(test)) { statement.replaceParameterReference(parameter, numParameter); boolean done = false; for (VariableReference replacement : objects) { statement.replaceParameterReference(replacement, numParameter); if (objective.hasImproved(test)) { done = true; hasImproved = true;
/** {@inheritDoc} */ @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public boolean doSearch(TestChromosome test, int statement, LocalSearchObjective<TestChromosome> objective) { EnumPrimitiveStatement p = (EnumPrimitiveStatement) test.getTestCase().getStatement(statement); ExecutionResult oldResult = test.getLastExecutionResult(); oldValue = p.getValue(); for (Object value : p.getEnumValues()) { p.setValue(value); if (!objective.hasImproved(test)) { // Restore original p.setValue(oldValue); test.setLastExecutionResult(oldResult); test.setChanged(false); } else { logger.debug("Finished local search with result " + p.getCode()); return true; } } return false; }
private boolean iterate(double delta, double factor, LocalSearchObjective<TestChromosome> objective, TestChromosome test, NumericalPrimitiveStatement<T> p, int statement) { boolean improvement = false; T oldValue = p.getValue(); ExecutionResult oldResult = test.getLastExecutionResult(); logger.info("Trying increment " + delta + " of " + p.getCode()); p.increment(delta); while (objective.hasImproved(test)) { oldValue = p.getValue(); oldResult = test.getLastExecutionResult(); test.setChanged(false); improvement = true; delta = factor * delta; //if (delta > 1) // return improvement; logger.info("Trying increment " + delta + " of " + p.getCode()); p.increment(delta); } p.setValue(oldValue); test.setLastExecutionResult(oldResult); test.setChanged(false); return improvement; } }
if (objective.hasImproved(test)) { done = true; hasImproved = true; if (!objective.hasImproved(test)) { logger.info("Undoing change"); restore(test, statement); statement.replaceParameterReference(replacement, numParameter); logger.info("Resulting test: " + test.getTestCase().toCode()); if (objective.hasImproved(test)) { backup(test, statement); hasImproved = true;
if (objective.hasImproved(test)) { done = false; hasImproved = true; p.setSize(oldLength + 1); logger.debug("Trying increment of {}", p.getCode()); improved = objective.hasImproved(test); if (objective.hasImproved(test)) { done = false; hasImproved = true; p.setSize(oldLength - 1); logger.debug("Trying decrement of {}", p.getCode()); improved = objective.hasImproved(test);
if (objective.hasImproved(test)) { DSEStats.getInstance().reportNewTestUseful(); logger.info("Solution improves fitness, finishing DSE");
/** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public boolean doSearch(TestChromosome test, int statement, LocalSearchObjective<TestChromosome> objective) { PrimitiveStatement<Boolean> p = (PrimitiveStatement<Boolean>) test.getTestCase().getStatement(statement); ExecutionResult oldResult = test.getLastExecutionResult(); oldValue = p.getValue(); p.setValue(!oldValue); if (!objective.hasImproved(test)) { // Restore original p.setValue(oldValue); test.setLastExecutionResult(oldResult); test.setChanged(false); return false; } else { return true; } }
if (objective.hasImproved(test)) { done = false; improved = true; if (objective.hasImproved(test)) { improved = true; done = false;
@Override public boolean doSearch(TestChromosome test, int statement, LocalSearchObjective<TestChromosome> objective) { NullStatement nullStatement = (NullStatement) test.getTestCase().getStatement(statement); TestCase newTest = test.getTestCase(); TestCase oldTest = newTest.clone(); ExecutionResult oldResult = test.getLastExecutionResult(); //double oldFitness = test.getFitness(); Map<FitnessFunction<?>, Double> oldFitnesses = test.getFitnessValues(); Map<FitnessFunction<?>, Double> oldLastFitnesses = test.getPreviousFitnessValues(); try { TestFactory.getInstance().attemptGeneration(newTest, nullStatement.getReturnType(), statement); if (!objective.hasImproved(test)) { test.setTestCase(oldTest); test.setLastExecutionResult(oldResult); //test.setFitness(oldFitness); test.setFitnessValues(oldFitnesses); test.setPreviousFitnessValues(oldLastFitnesses); } else { return true; } } catch (ConstructionFailedException e) { // If we can't construct it, then ignore } return false; }