public void assertWorkingScoreFromScratch(Score workingScore, Object completedAction) { ScoreDirectorFactory assertionScoreDirectorFactory = scoreDirectorFactory.getAssertionScoreDirectorFactory(); if (assertionScoreDirectorFactory == null) { assertionScoreDirectorFactory = scoreDirectorFactory; } ScoreDirector uncorruptedScoreDirector = assertionScoreDirectorFactory.buildScoreDirector(); 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(); } }