/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.optaplanner.benchmark.impl.result;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.optaplanner.core.api.score.buildin.simple.SimpleScore;
import org.optaplanner.core.config.solver.SolverConfig;
import org.optaplanner.core.config.solver.random.RandomType;
import static org.junit.Assert.*;
public class PlannerBenchmarkResultTest {
@Test
public void createMergedResult() {
PlannerBenchmarkResult p1 = new PlannerBenchmarkResult();
p1.initSystemProperties();
PlannerBenchmarkResult p2 = new PlannerBenchmarkResult();
p2.initSystemProperties();
SolverBenchmarkResult p1SolverX = new SolverBenchmarkResult(p1);
p1SolverX.setName("Solver X");
SolverConfig p1SolverConfigX = new SolverConfig();
p1SolverConfigX.setRandomType(RandomType.JDK);
p1SolverX.setSolverConfig(p1SolverConfigX);
p1SolverX.setSingleBenchmarkResultList(new ArrayList<>());
SolverBenchmarkResult p1SolverY = new SolverBenchmarkResult(p1);
p1SolverY.setName("Solver Y");
SolverConfig p1SolverConfigY = new SolverConfig();
p1SolverConfigY.setRandomType(RandomType.MERSENNE_TWISTER);
p1SolverY.setSolverConfig(p1SolverConfigY);
p1SolverY.setSingleBenchmarkResultList(new ArrayList<>());
SolverBenchmarkResult p2SolverZ = new SolverBenchmarkResult(p2);
p2SolverZ.setName("Solver Z");
SolverConfig p2SolverConfigZ = new SolverConfig();
p2SolverConfigZ.setRandomType(RandomType.WELL1024A);
p2SolverZ.setSolverConfig(p2SolverConfigZ);
p2SolverZ.setSingleBenchmarkResultList(new ArrayList<>());
ProblemBenchmarkResult p1ProblemA = new ProblemBenchmarkResult(p1);
p1ProblemA.setInputSolutionFile(new File("problemA.xml"));
p1ProblemA.setProblemStatisticList(Collections.emptyList());
p1ProblemA.setSingleBenchmarkResultList(Collections.emptyList());
p1ProblemA.setSingleBenchmarkResultList(new ArrayList<>());
ProblemBenchmarkResult p1ProblemB = new ProblemBenchmarkResult(p1);
p1ProblemB.setInputSolutionFile(new File("problemB.xml"));
p1ProblemB.setProblemStatisticList(Collections.emptyList());
p1ProblemB.setSingleBenchmarkResultList(Collections.emptyList());
p1ProblemB.setSingleBenchmarkResultList(new ArrayList<>());
ProblemBenchmarkResult p2ProblemA = new ProblemBenchmarkResult(p2);
p2ProblemA.setInputSolutionFile(new File("problemA.xml"));
p2ProblemA.setProblemStatisticList(Collections.emptyList());
p2ProblemA.setSingleBenchmarkResultList(Collections.emptyList());
p2ProblemA.setSingleBenchmarkResultList(new ArrayList<>());
SingleBenchmarkResult p1SolverXProblemA = createSingleBenchmarkResult(p1SolverX, p1ProblemA, -1);
createSubSingleBenchmarkResult(p1SolverXProblemA, 1);
SingleBenchmarkResult p1SolverXProblemB = createSingleBenchmarkResult(p1SolverX, p1ProblemB, -20);
SingleBenchmarkResult p1SolverYProblemA = createSingleBenchmarkResult(p1SolverY, p1ProblemA, -300);
SingleBenchmarkResult p1SolverYProblemB = createSingleBenchmarkResult(p1SolverY, p1ProblemB, -4000);
SingleBenchmarkResult p2SolverZProblemA = createSingleBenchmarkResult(p2SolverZ, p2ProblemA, -50000);
PlannerBenchmarkResult mergedResult = PlannerBenchmarkResult.createMergedResult(Arrays.asList(
p1SolverXProblemA, p1SolverXProblemB, p1SolverYProblemA, p1SolverYProblemB, p2SolverZProblemA));
assertEquals(true, mergedResult.getAggregation());
List<ProblemBenchmarkResult> mergedProblemBenchmarkResultList = mergedResult.getUnifiedProblemBenchmarkResultList();
List<SolverBenchmarkResult> mergedSolverBenchmarkResultList = mergedResult.getSolverBenchmarkResultList();
assertEquals(3, mergedSolverBenchmarkResultList.size());
assertEquals("Solver X", mergedSolverBenchmarkResultList.get(0).getName());
assertEquals("Solver Y", mergedSolverBenchmarkResultList.get(1).getName());
assertEquals("Solver Z", mergedSolverBenchmarkResultList.get(2).getName());
assertEquals(2, mergedProblemBenchmarkResultList.size());
assertEquals("problemA.xml", mergedProblemBenchmarkResultList.get(0).getInputSolutionFile().getName());
assertEquals("problemB.xml", mergedProblemBenchmarkResultList.get(1).getInputSolutionFile().getName());
}
protected SingleBenchmarkResult createSingleBenchmarkResult(
SolverBenchmarkResult solverBenchmarkResult, ProblemBenchmarkResult problemBenchmarkResult, int score) {
SingleBenchmarkResult singleBenchmarkResult = new SingleBenchmarkResult(solverBenchmarkResult, problemBenchmarkResult);
solverBenchmarkResult.getSingleBenchmarkResultList().add(singleBenchmarkResult);
problemBenchmarkResult.getSingleBenchmarkResultList().add(singleBenchmarkResult);
singleBenchmarkResult.setAverageAndTotalScoreForTesting(SimpleScore.valueOf(score));
singleBenchmarkResult.setSubSingleBenchmarkResultList(new ArrayList<>(1));
createSubSingleBenchmarkResult(singleBenchmarkResult, 0);
return singleBenchmarkResult;
}
protected SubSingleBenchmarkResult createSubSingleBenchmarkResult(SingleBenchmarkResult parent, int subSingleIndex) {
SubSingleBenchmarkResult subSingleBenchmarkResult = new SubSingleBenchmarkResult(parent, subSingleIndex);
subSingleBenchmarkResult.setPureSubSingleStatisticList(Collections.emptyList());
parent.getSubSingleBenchmarkResultList().add(subSingleBenchmarkResult);
return subSingleBenchmarkResult;
}
}