static MinMax findMinMax(MinMax minMax, List<Statement> statements, EncodedValueLookup lookup) {
        List<List<Statement>> groups = CustomModelParser.splitIntoGroup(statements);
        for (List<Statement> group : groups) findMinMaxForGroup(minMax, group, lookup);
        return minMax;
    }
@Test
    public void findMax_multipleBlocks() {
        List<Statement> statements = Arrays.asList(
                If("road_class == TERTIARY", MULTIPLY, "0.2"),
                ElseIf("road_class == SECONDARY", LIMIT, "25"),
                If("road_environment == TUNNEL", LIMIT, "60"),
                ElseIf("road_environment == BRIDGE", LIMIT, "50"),
                Else(MULTIPLY, "0.8")
        );
        assertEquals(120, findMinMax(new MinMax(0, 150), statements, lookup).max);
        assertEquals(80, findMinMax(new MinMax(0, 100), statements, lookup).max);
        assertEquals(60, findMinMax(new MinMax(0, 60), statements, lookup).max);

        statements = Arrays.asList(
                If("road_environment == TUNNEL", LIMIT, "130"),
                ElseIf("road_environment == BRIDGE", LIMIT, "50"),
                Else(MULTIPLY, "0.8")
        );
        assertEquals(130, findMinMax(new MinMax(0, 150), statements, lookup).max);

        statements = Arrays.asList(
                If("road_class == TERTIARY", MULTIPLY, "0.2"),
                ElseIf("road_class == SECONDARY", LIMIT, "25"),
                Else(LIMIT, "40"),
                If("road_environment == TUNNEL", MULTIPLY, "0.8"),
                ElseIf("road_environment == BRIDGE", LIMIT, "30")
        );
        assertEquals(40, findMinMax(new MinMax(0, 150), statements, lookup).max);
        assertEquals(40, findMinMax(new MinMax(0, 40), statements, lookup).max);
    }