@Test
  public void testCompareTo() {
    CharacterGene g1 = CharacterGene.of('1');
    CharacterGene g2 = CharacterGene.of('2');
    CharacterGene g3 = CharacterGene.of('3');

    assertTrue(g1.compareTo(g2) < 0);
    assertTrue(g2.compareTo(g3) < 0);
    assertTrue(g3.compareTo(g2) > 0);
    assertTrue(g2.compareTo(g2) == 0);
  }
  @Test(invocationCount = 20, successPercentage = 95)
  public void newInstanceDistribution() {
    using(
        new Random(12345),
        r -> {
          final CharSeq characters = new CharSeq("0123456789");

          final Factory<CharacterGene> factory = CharacterGene.of(characters);

          final Histogram<Long> histogram = Histogram.ofLong(0L, 10L, 10);

          final int samples = 100000;
          for (int i = 0; i < samples; ++i) {
            final CharacterGene g1 = factory.newInstance();
            final CharacterGene g2 = factory.newInstance();
            Assert.assertNotSame(g1, g2);

            histogram.accept(Long.valueOf(g1.getAllele().toString()));
            histogram.accept(Long.valueOf(g2.getAllele().toString()));
          }

          assertUniformDistribution(histogram);
        });
  }
  @Test
  public void testGetCharacter() {
    CharacterGene gene = CharacterGene.of('6');

    assertEquals(new Character('6'), gene.getAllele());
  }
 @Test
 public void testCharacterGene() {
   CharacterGene gene = CharacterGene.of();
   assertTrue(gene.isValidCharacter(gene.getAllele()));
 }
 @Test
 public void testIsValidCharacter() {
   for (Character c : CharacterGene.DEFAULT_CHARACTERS) {
     assertTrue(CharacterGene.of(c).isValidCharacter(c));
   }
 }