@Test(invocationCount = 10)
public void crossover() {

	final PartiallyMatchedCrossover<Integer, Double> pmco =
		new PartiallyMatchedCrossover<>(1);
	final int length = 1000;
	final MSeq<Integer> alleles = MSeq.<Integer>ofLength(length).fill(Int());
	final ISeq<Integer> ialleles = alleles.toISeq();
	final MSeq<EnumGene<Integer>> that = alleles.map(i -> new EnumGene<>(i, ialleles));
	final MSeq<EnumGene<Integer>> other = alleles.map(i -> new EnumGene<>(i, ialleles));
	that.shuffle();
	other.shuffle();
	final PermutationChromosome<Integer> thatChrom1 = new PermutationChromosome<>(that.toISeq());
	Assert.assertTrue(thatChrom1.isValid(), "thatChrom1 not valid");
	final PermutationChromosome<Integer> otherChrom1 = new PermutationChromosome<>(other.toISeq());
	Assert.assertTrue(otherChrom1.isValid(), "otherChrom1 not valid");
	pmco.crossover(that, other);
	final PermutationChromosome<Integer> thatChrom2 = new PermutationChromosome<>(that.toISeq());
	Assert.assertTrue(thatChrom2.isValid(), "thatChrom2 not valid: " + thatChrom2);
	final PermutationChromosome<Integer> otherChrom2 = new PermutationChromosome<>(other.toISeq());
	Assert.assertTrue(otherChrom2.isValid(), "otherChrom2 not valid: " + otherChrom2);
	Assert.assertFalse(thatChrom1.equals(thatChrom2), "That chromosome must not be equal");
	Assert.assertFalse(otherChrom1.equals(otherChrom2), "That chromosome must not be equal");
}