/* * Copyright 2016 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.test.impl.score.buildin.bendablelong; import org.optaplanner.core.api.domain.solution.PlanningSolution; import org.optaplanner.core.api.score.buildin.bendablelong.BendableLongScore; import org.optaplanner.core.api.solver.SolverFactory; import org.optaplanner.core.impl.score.buildin.bendablelong.BendableLongScoreDefinition; import org.optaplanner.test.impl.score.AbstractScoreVerifier; /** * To assert the constraints (including score rules) of a {@link SolverFactory} * that uses a {@link BendableLongScore}. * @param <Solution_> the solution type, the class with the {@link PlanningSolution} annotation */ public class BendableLongScoreVerifier<Solution_> extends AbstractScoreVerifier<Solution_> { protected final int hardLevelsSize; /** * @param solverFactory never null, the {@link SolverFactory} of which you want to test the constraints. */ public BendableLongScoreVerifier(SolverFactory<Solution_> solverFactory) { super(solverFactory, BendableLongScore.class); hardLevelsSize = ((BendableLongScoreDefinition) scoreDirectorFactory.getScoreDefinition()).getHardLevelsSize(); } /** * Assert that the constraint (which is usually a score rule) of {@link PlanningSolution} * has the expected weight for that score level. * @param constraintName never null, the name of the constraint, which is usually the name of the score rule * @param hardLevel {@code 0 <= hardLevel <} {@code hardLevelSize}. * The {@code scoreLevel} is {@code hardLevel} for hard levels and {@code softLevel + hardLevelSize} for soft levels. * @param expectedWeight the total weight for all matches of that 1 constraint * @param solution never null, the actual {@link PlanningSolution} */ public void assertHardWeight(String constraintName, int hardLevel, long expectedWeight, Solution_ solution) { assertHardWeight(null, constraintName, hardLevel, expectedWeight, solution); } /** * Assert that the constraint (which is usually a score rule) of {@link PlanningSolution} * has the expected weight for that score level. * @param constraintPackage sometimes null. * When null, {@code constraintName} for the {@code scoreLevel} must be unique. * @param constraintName never null, the name of the constraint, which is usually the name of the score rule * @param hardLevel {@code 0 <= hardLevel <} {@code hardLevelSize}. * The {@code scoreLevel} is {@code hardLevel} for hard levels and {@code softLevel + hardLevelSize} for soft levels. * @param expectedWeight the total weight for all matches of that 1 constraint * @param solution never null, the actual {@link PlanningSolution} */ public void assertHardWeight(String constraintPackage, String constraintName, int hardLevel, long expectedWeight, Solution_ solution) { assertWeight(constraintPackage, constraintName, hardLevel, Long.valueOf(expectedWeight), solution); } /** * Assert that the constraint (which is usually a score rule) of {@link PlanningSolution} * has the expected weight for that score level. * @param constraintName never null, the name of the constraint, which is usually the name of the score rule * @param softLevel {@code 0 <= softLevel <} {@code softLevelSize}. * The {@code scoreLevel} is {@code hardLevel} for hard levels and {@code softLevel + hardLevelSize} for soft levels. * @param expectedWeight the total weight for all matches of that 1 constraint * @param solution never null, the actual {@link PlanningSolution} */ public void assertSoftWeight(String constraintName, int softLevel, long expectedWeight, Solution_ solution) { assertSoftWeight(null, constraintName, softLevel, expectedWeight, solution); } /** * Assert that the constraint (which is usually a score rule) of {@link PlanningSolution} * has the expected weight for that score level. * @param constraintPackage sometimes null. * When null, {@code constraintName} for the {@code scoreLevel} must be unique. * @param constraintName never null, the name of the constraint, which is usually the name of the score rule * @param softLevel {@code 0 <= softLevel <} {@code softLevelSize}. * The {@code scoreLevel} is {@code hardLevel} for hard levels and {@code softLevel + hardLevelSize} for soft levels. * @param expectedWeight the total weight for all matches of that 1 constraint * @param solution never null, the actual {@link PlanningSolution} */ public void assertSoftWeight(String constraintPackage, String constraintName, int softLevel, long expectedWeight, Solution_ solution) { assertWeight(constraintPackage, constraintName, hardLevelsSize + softLevel, Long.valueOf(expectedWeight), solution); } }