public MatchType determineMatch(BiFunction<T, T, Boolean> sameWhen,
                                      BiFunction<? super Exception, ? super Exception, Boolean>
                                          exceptionsSameWhen) {
    MatchType matchType;
    if (bothReturnedValues()) {
      matchType = valuesMatch(sameWhen) ? MATCH : MISMATCH;

    } else if (bothThrewExceptions()) {
      matchType = exceptionsMatch(exceptionsSameWhen) ? EXCEPTION_MATCH : EXCEPTION_MISMATCH;

    } else {
      matchType = controlThrewException() ? CONTROL_EXCEPTION : CANDIDATE_EXCEPTION;
    }
    return matchType;
  }