    @Test
    public void testCrossOver() {

        String paramString = "recip(rord(creationDate),[1,2,3],[10,100,1000],[$2])";
        TestParam t1 = new TestParam("bf", "0",
                "recip(rord(creationDate),2,100,100)");
        TestParam t2 = new TestParam("bf", "0",
                "recip(rord(creationDate),1,1000,1000)");

        ParameterizableStringFactory<TestParam> fact = new ParameterizableStringFactory("bf",
                "0", TestParam.class, paramString);

        for (int i = 0; i < 100; i++) {
            Pair<TestParam, TestParam> pair = fact.crossover(t1, t2);
            for (TestParam t : new TestParam[]{pair.getLeft(), pair.getRight()}) {
                List<Float> floats = extractFloats(t.toString());
                assertTrue(
                        MathUtil.equals(floats.get(0), 1f, 0.00001f) ||
                                MathUtil.equals(floats.get(0), 2f, 0.00001f)
                );
                assertTrue(
                        MathUtil.equals(floats.get(1), 100f, 0.00001f) ||
                                MathUtil.equals(floats.get(1), 1000f, 0.00001f)
                );
                assertTrue(
                        MathUtil.equals(floats.get(2), 100f, 0.00001f) ||
                                MathUtil.equals(floats.get(2), 1000f, 0.00001f)
                );
            }

        }
    }