LocalSearchSolverPhaseScope localSearchSolverPhaseScope = createLocalSearchSolverPhaseScope();
forager.phaseStarted(localSearchSolverPhaseScope);
LocalSearchStepScope localSearchStepScope = createStepScope(localSearchSolverPhaseScope);
forager.beforeDeciding(localSearchStepScope);
// Pre conditions
MoveScope a = createMoveScope(localSearchStepScope, DefaultSimpleScore.valueOf(-20), 30.0);
MoveScope b = createMoveScope(localSearchStepScope, DefaultSimpleScore.valueOf(-1), 9.0);
MoveScope c = createMoveScope(localSearchStepScope, DefaultSimpleScore.valueOf(-20), 20.0);
MoveScope d = createMoveScope(localSearchStepScope, DefaultSimpleScore.valueOf(-300), 50000.0);
MoveScope e = createMoveScope(localSearchStepScope, DefaultSimpleScore.valueOf(-1), 1.0);
// Do stuff
forager.addMove(a);
assertFalse(forager.isQuitEarly());
forager.addMove(b);
assertFalse(forager.isQuitEarly());
forager.addMove(c);
assertFalse(forager.isQuitEarly());
forager.addMove(d);
assertFalse(forager.isQuitEarly());
forager.addMove(e);
assertFalse(forager.isQuitEarly());
MoveScope pickedScope = forager.pickMove(localSearchStepScope);
// Post conditions
assertSame(b, pickedScope);
List<Move> topList = forager.getTopList(3);
assertTrue(topList.contains(a.getMove())); // Because a's acceptChance is higher than c's
assertTrue(topList.contains(b.getMove()));