/*
* Copyright 2013 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.core.api.score.buildin.simple;
import org.junit.Test;
import org.optaplanner.core.api.score.buildin.AbstractScoreTest;
import org.optaplanner.core.impl.testdata.util.PlannerAssert;
import org.optaplanner.core.impl.testdata.util.PlannerTestUtils;
import static org.junit.Assert.*;
public class SimpleScoreTest extends AbstractScoreTest {
@Test
public void parseScore() {
assertEquals(SimpleScore.valueOf(-147), SimpleScore.parseScore("-147"));
assertEquals(SimpleScore.valueOfUninitialized(-7, -147), SimpleScore.parseScore("-7init/-147"));
}
@Test
public void toShortString() {
assertEquals("0", SimpleScore.valueOf(0).toShortString());
assertEquals("-147", SimpleScore.valueOf(-147).toShortString());
assertEquals("-7init/-147", SimpleScore.valueOfUninitialized(-7, -147).toShortString());
assertEquals("-7init", SimpleScore.valueOfUninitialized(-7, 0).toShortString());
}
@Test
public void testToString() {
assertEquals("0", SimpleScore.valueOf(0).toString());
assertEquals("-147", SimpleScore.valueOf(-147).toString());
assertEquals("-7init/-147", SimpleScore.valueOfUninitialized(-7, -147).toString());
}
@Test(expected = IllegalArgumentException.class)
public void parseScoreIllegalArgument() {
SimpleScore.parseScore("-147hard/-258soft");
}
@Test
public void toInitializedScore() {
assertEquals(SimpleScore.valueOf(-147),
SimpleScore.valueOf(-147).toInitializedScore());
assertEquals(SimpleScore.valueOf(-147),
SimpleScore.valueOfUninitialized(-7, -147).toInitializedScore());
}
@Test
public void withInitScore() {
assertEquals(SimpleScore.valueOfUninitialized(-7, -147),
SimpleScore.valueOf(-147).withInitScore(-7));
}
@Test
public void add() {
assertEquals(SimpleScore.valueOf(19),
SimpleScore.valueOf(20).add(
SimpleScore.valueOf(-1)));
assertEquals(SimpleScore.valueOfUninitialized(-77, 19),
SimpleScore.valueOfUninitialized(-70, 20).add(
SimpleScore.valueOfUninitialized(-7, -1)));
}
@Test
public void subtract() {
assertEquals(SimpleScore.valueOf(21),
SimpleScore.valueOf(20).subtract(
SimpleScore.valueOf(-1)));
assertEquals(SimpleScore.valueOfUninitialized(-63, 21),
SimpleScore.valueOfUninitialized(-70, 20).subtract(
SimpleScore.valueOfUninitialized(-7, -1)));
}
@Test
public void multiply() {
assertEquals(SimpleScore.valueOf(6),
SimpleScore.valueOf(5).multiply(1.2));
assertEquals(SimpleScore.valueOf(1),
SimpleScore.valueOf(1).multiply(1.2));
assertEquals(SimpleScore.valueOf(4),
SimpleScore.valueOf(4).multiply(1.2));
assertEquals(SimpleScore.valueOfUninitialized(-14, 8),
SimpleScore.valueOfUninitialized(-7, 4).multiply(2.0));
}
@Test
public void divide() {
assertEquals(SimpleScore.valueOf(5),
SimpleScore.valueOf(25).divide(5.0));
assertEquals(SimpleScore.valueOf(4),
SimpleScore.valueOf(21).divide(5.0));
assertEquals(SimpleScore.valueOf(4),
SimpleScore.valueOf(24).divide(5.0));
assertEquals(SimpleScore.valueOfUninitialized(-7, 4),
SimpleScore.valueOfUninitialized(-14, 8).divide(2.0));
}
@Test
public void power() {
assertEquals(SimpleScore.valueOf(25),
SimpleScore.valueOf(5).power(2.0));
assertEquals(SimpleScore.valueOf(5),
SimpleScore.valueOf(25).power(0.5));
assertEquals(SimpleScore.valueOfUninitialized(-343, 125),
SimpleScore.valueOfUninitialized(-7, 5).power(3.0));
}
@Test
public void negate() {
assertEquals(SimpleScore.valueOf(-5),
SimpleScore.valueOf(5).negate());
assertEquals(SimpleScore.valueOf(5),
SimpleScore.valueOf(-5).negate());
}
@Test
public void equalsAndHashCode() {
assertScoresEqualsAndHashCode(
SimpleScore.valueOf(-10),
SimpleScore.valueOf(-10),
SimpleScore.valueOfUninitialized(0, -10)
);
assertScoresEqualsAndHashCode(
SimpleScore.valueOfUninitialized(-7, -10),
SimpleScore.valueOfUninitialized(-7, -10)
);
assertScoresNotEquals(
SimpleScore.valueOf(-10),
SimpleScore.valueOf(-30),
SimpleScore.valueOfUninitialized(-7, -10)
);
}
@Test
public void compareTo() {
PlannerAssert.assertCompareToOrder(
SimpleScore.valueOfUninitialized(-8, 0),
SimpleScore.valueOfUninitialized(-7, -20),
SimpleScore.valueOfUninitialized(-7, -1),
SimpleScore.valueOfUninitialized(-7, 0),
SimpleScore.valueOfUninitialized(-7, 1),
SimpleScore.valueOf(-300),
SimpleScore.valueOf(-20),
SimpleScore.valueOf(-1),
SimpleScore.valueOf(0),
SimpleScore.valueOf(1)
);
}
@Test
public void serializeAndDeserialize() {
PlannerTestUtils.serializeAndDeserializeWithAll(
SimpleScore.valueOf(123),
output -> {
assertEquals(0, output.getInitScore());
assertEquals(123, output.getScore());
}
);
PlannerTestUtils.serializeAndDeserializeWithAll(
SimpleScore.valueOfUninitialized(-7, 123),
output -> {
assertEquals(-7, output.getInitScore());
assertEquals(123, output.getScore());
}
);
}
}