### Question:
SpCrossover extends SinglePointCrossover<EnumGene<WildcardGene>, Double> implements CrossoverOperator { @Override public Tuple2<Classifier, Classifier> doCrossover(final Classifier parent1, final Classifier parent2) { final MSeq<EnumGene<WildcardGene>> that = copyChromosomes(parent1); final MSeq<EnumGene<WildcardGene>> other = copyChromosomes(parent2); crossover(that, other); final WildcardGene[] offspringChromosome1 = asArray(that); final WildcardGene[] offspringChromosome2 = asArray(other); final Classifier offspring1 = LcsObjects.anyClassifier(offspringChromosome1); final Classifier offspring2 = LcsObjects.anyClassifier(offspringChromosome2); return Tuple.of(offspring1, offspring2); }  @Override Tuple2<Classifier, Classifier> doCrossover(final Classifier parent1, final Classifier parent2);  }### Answer:
@Test public void testCrossover() { final SpCrossover spCrossover = new SpCrossover(); final Classifier classifier1 = LcsObjects.anyClassifier("rule1", TRUE, FALSE, TRUE, FALSE, TRUE); final Classifier classifier2 = LcsObjects.anyClassifier("rule2", FALSE, TRUE, FALSE, TRUE, FALSE); log.info("Before {} VS {}", classifier1.getCondition().toCanonicalString(), classifier2.getCondition().toCanonicalString()); final Tuple2<Classifier, Classifier> doCrossover = spCrossover.doCrossover(classifier1, classifier2); log.info("After {} VS {}", doCrossover._1.getCondition().toCanonicalString(), doCrossover._2.getCondition().toCanonicalString()); }