@Test public void doubleGeneIntegerInteger() { DoubleGene gene = DoubleGene.of(-10.567, 10.567); assertEquals(gene.getMin(), -10.567); assertEquals(gene.getMax(), 10.567); }
@Test public void createNumber() { DoubleGene gene = DoubleGene.of(1.2345, -1234.1234, 1234.1234); DoubleGene g2 = gene.newInstance(5.0); assertEquals(g2.getAllele().intValue(), 5); assertEquals(g2.getMin(), -1234.1234); assertEquals(g2.getMax(), 1234.1234); }
@Test public void doubleGeneIntegerIntegerInteger() { DoubleGene gene = DoubleGene.of(1.234, 0.345, 2.123); assertEquals(gene.getAllele(), 1.234); assertEquals(gene.getMin(), 0.345); assertEquals(gene.getMax(), 2.123); try { gene = DoubleGene.of(0.1, 2.1, 4.1); assertFalse(gene.isValid()); } catch (IllegalArgumentException e) { assertTrue(true); } }
@Test public void mean() { final double min = -Double.MAX_VALUE; final double max = Double.MAX_VALUE; final DoubleGene template = DoubleGene.of(min, max); for (int i = 1; i < 500; ++i) { final DoubleGene a = template.newInstance(i - 50.0); final DoubleGene b = template.newInstance((i - 100)*3.0); final DoubleGene c = a.mean(b); assertEquals(a.getMin(), min); assertEquals(a.getMax(), max); assertEquals(b.getMin(), min); assertEquals(b.getMax(), max); assertEquals(c.getMin(), min); assertEquals(c.getMax(), max); assertEquals(c.getAllele(), ((i - 50) + ((i - 100)*3))/2.0); } }
@Test(dataProvider = "doubleScalarData") public void ofDoubleScalar(final DoubleRange domain) { final Codec<Double, DoubleGene> codec = Codecs.ofScalar(domain); final Genotype<DoubleGene> gt = codec.encoding().newInstance(); Assert.assertEquals(gt.length(), 1); Assert.assertEquals(gt.getChromosome().length(), 1); Assert.assertEquals(gt.getGene().getMin(), domain.getMin()); Assert.assertEquals(gt.getGene().getMax(), domain.getMax()); final Function<Genotype<DoubleGene>, Double> f = codec.decoder(); Assert.assertEquals(f.apply(gt), gt.getGene().doubleValue()); }
@Test(dataProvider = "doubleVectorData") public void ofDoubleVector(final DoubleRange domain, final int length) { final Codec<double[], DoubleGene> codec = Codecs.ofVector(domain, length); final Genotype<DoubleGene> gt = codec.encoding().newInstance(); Assert.assertEquals(gt.length(), 1); Assert.assertEquals(gt.getChromosome().length(), length); for (DoubleGene gene : gt.getChromosome()) { Assert.assertEquals(gene.getMin(), domain.getMin()); Assert.assertEquals(gene.getMax(), domain.getMax()); } final Function<Genotype<DoubleGene>, double[]> f = codec.decoder(); final double[] value = f.apply(gt); Assert.assertEquals(value.length, length); for (int i = 0; i < length; ++i) { Assert.assertEquals(gt.get(0, i).doubleValue(), value[i]); } }
@Test(dataProvider = "doubleVectorDataVector") public void ofDoubleVectorVector(final DoubleRange[] domain) { final Codec<double[], DoubleGene> codec = Codecs.ofVector(domain); final Genotype<DoubleGene> gt = codec.encoding().newInstance(); Assert.assertEquals(gt.length(), domain.length); for (int i = 0; i < gt.length(); ++i) { final Chromosome<DoubleGene> ch = gt.getChromosome(i); Assert.assertEquals(ch.length(), 1); final DoubleGene gene = ch.getGene(); Assert.assertEquals(gene.getMin(), domain[i].getMin()); Assert.assertEquals(gene.getMax(), domain[i].getMax()); } final Function<Genotype<DoubleGene>, double[]> f = codec.decoder(); final double[] value = f.apply(gt); Assert.assertEquals(value.length, domain.length); for (int i = 0; i < domain.length; ++i) { Assert.assertEquals(gt.get(i, 0).doubleValue(), value[i]); } }