code: @Override
      public Validation validate(SolutionType solution){
          if(mandatoryConstraints.isEmpty()){
              // CASE 1: no mandatory constraints
              return SimpleValidation.PASSED;
          } else if (mandatoryConstraints.size() == 1){
              // CASE 2: single mandatory constraint
              return mandatoryConstraints.get(0).validate(solution, data);
          } else {
              // CASE 3 (default): aggregate multiple constraint validations
              UnanimousValidation val = new UnanimousValidation();
              mandatoryConstraints.stream()
                                  .allMatch(c -> {
                                      // validate solution against constraint c
                                      Validation cval = c.validate(solution, data);
                                      // add to unanimous validation
                                      val.addValidation(c, cval);
                                      // continue until one constraint is not satisfied
                                      return cval.passed();
                                  });
              return val;
          }
      }
docs: <p>
  Validate a solution by checking all mandatory constraints. The solution will only pass validation if
  all mandatory constraints are satisfied.
  </p>
  <p>
  In case there are no mandatory constraints, this method always returns {@link SimpleValidation#PASSED}.
  If a single mandatory constraint has been specified, the corresponding validation is returned. In case
  of two or more constraints, an aggregated validation is constructed that only passes if all constraints are
  satisfied. Short-circuiting is applied: as soon as one violated constraint is found, the remaining constraints
  are not checked.
  </p>
  
  @param solution solution to validate
  @return aggregated validation