@Override public CharacterGene newInstance() { return of(_validCharacters); }
/** * Create a new character gene from the given character. If the character * is not within the {@link #getValidCharacters()}, an invalid gene will be * created. * * @param character the character value of the created gene. * @return a new character gene. * @throws NullPointerException if the given {@code character} is * {@code null}. */ @Override public CharacterGene newInstance(final Character character) { return of(character, _validCharacters); }
public static CharacterGene nextCharacterGene() { return CharacterGene.of(); }
public static CharacterGene nextCharacterGene() { return CharacterGene.of(); }
@Test public void testIsValidCharacter() { for (Character c : CharacterGene.DEFAULT_CHARACTERS) { assertTrue(CharacterGene.of(c.charValue()).isValidCharacter(c)); } }
private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); final int length = in.readInt(); _validCharacters = (CharSeq)in.readObject(); final MSeq<CharacterGene> genes = MSeq.ofLength(length); for (int i = 0; i < length; ++i) { final CharacterGene gene = CharacterGene.of( in.readChar(), _validCharacters ); genes.set(i, gene); } reflect.setField(this, "_genes", genes.toISeq()); }
@Test public void testCharacterGeneCharacter() { CharacterGene gene = CharacterGene.of('4'); assertEquals(Character.valueOf('4'), gene.getAllele()); }
@Test public void testGetCharacter() { CharacterGene gene = CharacterGene.of('6'); assertEquals(Character.valueOf('6'), gene.getAllele()); }
@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); assertEquals(0, g2.compareTo(g2)); }
/** * Create a new chromosome from the given genes (given as string). * * @param alleles the character genes. * @param validChars the valid characters. * @return a new {@code CharacterChromosome} with the given parameter * @throws IllegalArgumentException if the genes string is empty. */ public static CharacterChromosome of( final String alleles, final CharSeq validChars ) { final IntRef index = new IntRef(); final Supplier<CharacterGene> geneFactory = () -> CharacterGene.of( alleles.charAt(index.value++), validChars ); final ISeq<CharacterGene> genes = MSeq.<CharacterGene>ofLength(alleles.length()) .fill(geneFactory) .toISeq(); return new CharacterChromosome(genes, IntRange.of(alleles.length())); }
@Test public void testCharacterGene() { CharacterGene gene = CharacterGene.of(); assertTrue(gene.isValidCharacter(gene.getAllele())); }
@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); }); }