public Result createResult(ValidatedResult<Model> validatedResult) {
        List<ValidationEvent> actualEvents = validatedResult.getValidationEvents();
        List<ValidationEvent> unmatchedEvents = getExpectedEvents().stream()
                .filter(expectedEvent -> actualEvents.stream()
                        .noneMatch(actualEvent -> compareEvents(expectedEvent, actualEvent)))
                .collect(Collectors.toList());

        List<ValidationEvent> extraEvents = actualEvents.stream()
                .filter(actualEvent -> getExpectedEvents().stream()
                        .noneMatch(expectedEvent -> compareEvents(expectedEvent, actualEvent)))
                // Exclude suppressed events from needing to be defined as acceptable validation
                // events. However, these can still be defined as required events.
                .filter(event -> event.getSeverity() != Severity.SUPPRESSED)
                // Exclude ModelDeprecation events and deprecation warnings about traits
                // needing to be defined. Without this exclusion, existing 1.0 test cases will fail.
                .filter(event -> !isModelDeprecationEvent(event))
                .collect(Collectors.toList());

        return new SmithyTestCase.Result(getModelLocation(), unmatchedEvents, extraEvents);
    }
Creates a test case result from a test case and validated model.

<p>The validation events encountered while validating a model are
compared against the expected validation events. An actual event (A) is
considered a match with an expected event (E) if A and E target the
same shape, have the same severity, the eventId of A contains the eventId
of E, and the message of E starts with the suppression reason or message
of A.

@param validatedResult Result of creating and validating the model.
@return Returns the created test case result.
smithy-model/src/main/java/software/amazon/smithy/model/validation/testrunner/SmithyTestCase.java