public void addConstraintMatch(boolean constraintMatchEnabled) {
    HardSoftScoreHolder scoreHolder = new HardSoftScoreHolder(constraintMatchEnabled);

    scoreHolder.addHardConstraintMatch(mockRuleContext("scoreRule1"), -1000);

    RuleContext ruleContext2 = mockRuleContext("scoreRule2");
    scoreHolder.addHardConstraintMatch(ruleContext2, -200);
    callUnMatch(ruleContext2);

    RuleContext ruleContext3 = mockRuleContext("scoreRule3");
    scoreHolder.addSoftConstraintMatch(ruleContext3, -30);
    scoreHolder.addSoftConstraintMatch(ruleContext3, -3); // Overwrite existing
    scoreHolder.addHardConstraintMatch(ruleContext3, -300); // Different score level
    scoreHolder.addHardConstraintMatch(ruleContext3, -400); // Overwrite existing

    RuleContext ruleContext4 = mockRuleContext("scoreRule4");
    scoreHolder.addHardConstraintMatch(ruleContext4, -1);
    scoreHolder.addSoftConstraintMatch(ruleContext4, -1);
    callUnMatch(ruleContext4);

    assertEquals(HardSoftScore.valueOf(-1400, -3), scoreHolder.extractScore());
    if (constraintMatchEnabled) {
      assertEquals(6, scoreHolder.getConstraintMatchTotals().size());
    }
  }
  public void addConstraintMatch(boolean constraintMatchEnabled) {
    HardSoftDoubleScoreHolder scoreHolder = new HardSoftDoubleScoreHolder(constraintMatchEnabled);

    scoreHolder.addHardConstraintMatch(createRuleContext("scoreRule1"), -10.00); // Rule match added

    RuleContext ruleContext2 = createRuleContext("scoreRule2");
    scoreHolder.addHardConstraintMatch(ruleContext2, -2.00); // Rule match added
    callUnMatch(ruleContext2); // Rule match removed

    RuleContext ruleContext3 = createRuleContext("scoreRule3");
    scoreHolder.addSoftConstraintMatch(ruleContext3, -0.30); // Rule match added
    scoreHolder.addSoftConstraintMatch(ruleContext3, -0.06); // Rule match modified

    assertEquals(HardSoftDoubleScore.valueOf(-10.00, -0.06), scoreHolder.extractScore());
    if (constraintMatchEnabled) {
      assertEquals(3, scoreHolder.getConstraintMatchTotals().size());
    }
  }