@Test
public void encoding() {

	final Codec<Double, DoubleGene> codec = new CompositeCodec<>(
		ISeq.of(
			Codecs.ofScalar(DoubleRange.of(0, 1)),
			Codecs.ofVector(DoubleRange.of(10, 100), 3),
			Codecs.ofScalar(DoubleRange.of(2, 3)),
			Codecs.ofVector(DoubleRange.of(200, 500), DoubleRange.of(200, 500))
		),
		values -> {
			final Double v1 = (Double)values[0];
			final double[] v2 = (double[])values[1];
			final Double v3 = (Double)values[2];
			final double[] v4 = (double[])values[3];
			return v1 + DoubleAdder.sum(v2) + v3 + DoubleAdder.sum(v4);
		}
	);
	final Genotype<DoubleGene> gt = codec.encoding().newInstance();
	final double sum = gt.stream()
		.mapToDouble(c -> c.stream()
			.mapToDouble(DoubleGene::doubleValue)
			.sum())
		.sum();
	Assert.assertEquals(sum, codec.decoder().apply(gt), 0.000001);
}