SurfMover { public void move(RobotState myRobotState, MoveEnemy duelEnemy, int wavesToSurf, boolean painting) { if (duelEnemy == null) { return; } Point2D.Double myLocation = myRobotState.location; Wave surfWave = duelEnemy.findSurfableWave(Wave.FIRST_WAVE, myRobotState); if (surfWave == null) { orbit(myLocation, duelEnemy); } else { surf(myRobotState, duelEnemy, surfWave, wavesToSurf, painting); } } SurfMover(AdvancedRobot robot, BattleField battleField,
      Collection<RoboGraphic> renderables, OutputStream out); void initRound(); void move(RobotState myRobotState, MoveEnemy duelEnemy,
      int wavesToSurf, boolean painting); void roundOver(MoveEnemy duelEnemy);  }
@Test public void testMove() { SurfMover mover = newSurfMover(); RobotState myRobotState = RobotState.newBuilder() .setLocation(newLocation()) .setHeading(0) .setVelocity(8.0) .setTime(10L) .build(); mover.move(myRobotState, newDuelEnemy(), 2, false); verifySomeRobotMovement(); }