package rabbitescape.engine.solution; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.*; import org.junit.*; import rabbitescape.engine.Token; import rabbitescape.engine.World; public class TestSolution { @Test public void Equal_solutions_are_equal() { Solution solution1 = makeSolution( 3 ); Solution solution2 = makeSolution( 3 ); assertThat( solution1, equalTo( solution2 ) ); assertThat( solution1.hashCode(), equalTo( solution2.hashCode() ) ); } @Test public void Different_command_lists_make_them_unequal() { Solution solution1 = makeSolution( 3 ); Solution solution2 = makeShortSolution( 3 ); assertThat( solution1, not( equalTo( solution2 ) ) ); // Note: technically a correct hashCode could fail this, but it's // desirable that in most cases it won't. assertThat( solution1.hashCode(), not( equalTo( solution2.hashCode() ) ) ); } @Test public void Different_commands_make_them_unequal() { Solution solution1 = makeSolution( 3 ); Solution solution2 = makeSolution( 2 ); assertThat( solution1, not( equalTo( solution2 ) ) ); // Note: technically a correct hashCode could fail this, but it's // desirable that in most cases it won't. assertThat( solution1.hashCode(), not( equalTo( solution2.hashCode() ) ) ); } // --- private static Solution makeSolution( int waitTime ) { return new Solution( new SolutionCommand( new WaitAction( waitTime ) ) , new SolutionCommand( new PlaceTokenAction( 3, 2 ) ) , new SolutionCommand( new SelectAction( Token.Type.block ) ) , new SolutionCommand( new AssertStateAction( World.CompletionState.RUNNING ) ) ); } private static Solution makeShortSolution( int waitTime ) { return new Solution( new SolutionCommand( new WaitAction( waitTime ) ) , new SolutionCommand( new PlaceTokenAction( 3, 2 ) ) , new SolutionCommand( new SelectAction( Token.Type.block ) ) ); } }