code: @Override
      public boolean isTabu(Move<? super SolutionType> move, SolutionType currentSolution) {
          // apply move
          move.apply(currentSolution);
          // check: contained in tabu memory?
          boolean tabu = memory.contains(currentSolution);
          // undo move
          move.undo(currentSolution);
          // return result
          return tabu;
      }
docs: Verifies whether the given move is tabu by applying it to the current solution and checking if the obtained
  neighbour is currently contained in the tabu memory. If not, the move is allowed. Before returning, the move
  is undone to restore the original state of the current solution.
  
  @param move move to be applied to the current solution
  @param currentSolution current solution
  @return <code>true</code> if the neighbour obtained by applying the given move to the current solution is
  currently already contained in the tabu memory