/*
* 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.hardmediumsoftlong;
import org.optaplanner.core.api.domain.solution.PlanningSolution;
import org.optaplanner.core.api.score.buildin.hardmediumsoftlong.HardMediumSoftLongScore;
import org.optaplanner.core.api.solver.SolverFactory;
import org.optaplanner.test.impl.score.AbstractScoreVerifier;
/**
* To assert the constraints (including score rules) of a {@link SolverFactory}
* that uses a {@link HardMediumSoftLongScore}.
* @param <Solution_> the solution type, the class with the {@link PlanningSolution} annotation
*/
public class HardMediumSoftLongScoreVerifier<Solution_> extends AbstractScoreVerifier<Solution_> {
/**
* @param solverFactory never null, the {@link SolverFactory} of which you want to test the constraints.
*/
public HardMediumSoftLongScoreVerifier(SolverFactory<Solution_> solverFactory) {
super(solverFactory, HardMediumSoftLongScore.class);
}
/**
* 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 expectedWeight the total weight for all matches of that 1 constraint
* @param solution never null, the actual {@link PlanningSolution}
*/
public void assertHardWeight(String constraintName, long expectedWeight, Solution_ solution) {
assertHardWeight(null, constraintName, 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 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, long expectedWeight, Solution_ solution) {
assertWeight(constraintPackage, constraintName, 0, 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 expectedWeight the total weight for all matches of that 1 constraint
* @param solution never null, the actual {@link PlanningSolution}
*/
public void assertMediumWeight(String constraintName, long expectedWeight, Solution_ solution) {
assertHardWeight(null, constraintName, 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 expectedWeight the total weight for all matches of that 1 constraint
* @param solution never null, the actual {@link PlanningSolution}
*/
public void assertMediumWeight(String constraintPackage, String constraintName, long expectedWeight, Solution_ solution) {
assertWeight(constraintPackage, constraintName, 1, 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 expectedWeight the total weight for all matches of that 1 constraint
* @param solution never null, the actual {@link PlanningSolution}
*/
public void assertSoftWeight(String constraintName, long expectedWeight, Solution_ solution) {
assertSoftWeight(null, constraintName, 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 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, long expectedWeight, Solution_ solution) {
assertWeight(constraintPackage, constraintName, 2, Long.valueOf(expectedWeight), solution);
}
}