public void assertWorkingScoreFromScratch(Score workingScore, Object completedAction) { InnerScoreDirectorFactory assertionScoreDirectorFactory = scoreDirectorFactory.getAssertionScoreDirectorFactory(); if (assertionScoreDirectorFactory == null) { assertionScoreDirectorFactory = scoreDirectorFactory; } InnerScoreDirector uncorruptedScoreDirector = assertionScoreDirectorFactory.buildScoreDirector(true); uncorruptedScoreDirector.setWorkingSolution(workingSolution); Score uncorruptedScore = uncorruptedScoreDirector.calculateScore(); if (!workingScore.equals(uncorruptedScore)) { String scoreCorruptionAnalysis = buildScoreCorruptionAnalysis(uncorruptedScoreDirector); uncorruptedScoreDirector.dispose(); throw new IllegalStateException( "Score corruption: the workingScore (" + workingScore + ") is not the uncorruptedScore (" + uncorruptedScore + ") after completedAction (" + completedAction + "):\n" + scoreCorruptionAnalysis); } else { uncorruptedScoreDirector.dispose(); } }
@Override public void assertScoreFromScratch(Solution_ solution) { // Get the score before uncorruptedScoreDirector.calculateScore() modifies it Score score = getSolutionDescriptor().getScore(solution); InnerScoreDirector<Solution_> uncorruptedScoreDirector = buildScoreDirector(false, true); uncorruptedScoreDirector.setWorkingSolution(solution); Score uncorruptedScore = uncorruptedScoreDirector.calculateScore(); uncorruptedScoreDirector.dispose(); if (!score.equals(uncorruptedScore)) { throw new IllegalStateException( "Score corruption: the solution's score (" + score + ") is not the uncorruptedScore (" + uncorruptedScore + ")."); } }