@Test(dataProvider = "numberOfCrossoverPoints")
public void reverseCrossover(final Integer npoints) {

	for (int i = 1; i < 500; ++i) {
		final CharSeq chars = CharSeq.of("a-zA-Z");
		final ISeq<Character> a = ISeq.of(CharacterChromosome.of(chars, i))
			.map(CharacterGene::allele);
		final ISeq<Character> b = ISeq.of(CharacterChromosome.of(chars, i))
			.map(CharacterGene::allele);
		final MSeq<Character> ma1 = a.copy();
		final MSeq<Character> mb1 = b.copy();
		final int[] points = Combinatorics.subset(
			a.length() + 1,
			min(npoints, a.length() + 1),
			new Random(1234)
		);
		MultiPointCrossover.crossover(ma1, mb1, points);
		MultiPointCrossover.crossover(ma1, mb1, points);
		Assert.assertEquals(ma1, a);
		Assert.assertEquals(mb1, b);
	}
}