public void rewardPenalize(boolean constraintMatchEnabled) {
HardSoftScoreHolder scoreHolder = new HardSoftScoreHolder(constraintMatchEnabled);
Rule hard1 = mockRule("hard1");
scoreHolder.configureConstraintWeight(hard1, HardSoftScore.ofHard(10));
Rule hard2 = mockRule("hard2");
scoreHolder.configureConstraintWeight(hard2, HardSoftScore.ofHard(100));
Rule soft1 = mockRule("soft1");
scoreHolder.configureConstraintWeight(soft1, HardSoftScore.ofSoft(10));
Rule soft2 = mockRule("soft2");
scoreHolder.configureConstraintWeight(soft2, HardSoftScore.ofSoft(100));
scoreHolder.penalize(mockRuleContext(hard1));
assertEquals(HardSoftScore.of(-10, 0), scoreHolder.extractScore(0));
scoreHolder.penalize(mockRuleContext(hard2), 2);
assertEquals(HardSoftScore.of(-210, 0), scoreHolder.extractScore(0));
scoreHolder.reward(mockRuleContext(soft1));
assertEquals(HardSoftScore.of(-210, 10), scoreHolder.extractScore(0));
scoreHolder.reward(mockRuleContext(soft2), 3);
assertEquals(HardSoftScore.of(-210, 310), scoreHolder.extractScore(0));
}