IA { public static boolean hasSolution(final Boolean[] line) { return hasSolution(new Boolean[][] { line }); }  static boolean hasSolution(final Boolean[] line); static boolean hasSolution(final Boolean[][] lines);  }
@Test public void it_returns_true_if_grid_is_solved() { final Boolean[] line = { false, false, true }; Assertions.assertThat(IA.hasSolution(line)).isTrue(); }
@Test public void it_should_jump_over_a_ball_on_the_right() { final Boolean[] line = { true, true, false }; Assertions.assertThat(IA.hasSolution(line)).isTrue(); }
@Test public void it_should_jump_over_a_ball_on_the_left() { final Boolean[] line = { false, true, true }; Assertions.assertThat(IA.hasSolution(line)).isTrue(); }
@Test public void return_false_if_there_is_no_hole() { final Boolean[] line = { true, true, true }; Assertions.assertThat(IA.hasSolution(line)).isFalse(); }
@Test public void return_false_if_there_is_no_possible_moves() { final Boolean[] line = { true, false, true }; Assertions.assertThat(IA.hasSolution(line)).isFalse(); }
@Test public void it_solves_in_many_turns() { final Boolean[] line = { true, true, false, true, false }; Assertions.assertThat(IA.hasSolution(line)).isTrue(); }
@Test public void it_has_no_solution_after_a_round() { final Boolean[] line = { true, true, false, false, true }; Assertions.assertThat(IA.hasSolution(line)).isFalse(); }
@Test public void first_solution_is_not_correct_with_sevral_moves() { final Boolean[] line = { false, true, false, true, false, true, true, false }; Assertions.assertThat(IA.hasSolution(line)).isTrue(); }
@Test public void it_should_handle_vertical_move() { final Boolean[][] board = { { true }, { true }, { false } }; Assertions.assertThat(IA.hasSolution(board)).isTrue(); }