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

        List<ValidationEvent> extraEvents = actualEvents.stream()
                .filter(actualEvent -> expectedEvents.stream()
                        .noneMatch(expectedEvent -> compareEvents(expectedEvent, actualEvent)))
                // Exclude suppressed events from needing to be defined as acceptable events.
                // However, these can still be defined as required events.
                .filter(event -> event.getSeverity() != Severity.SUPPRESSED)
                .collect(Collectors.toList());

        return new SmithyDiffTestCase.Result(name, unmatchedEvents, extraEvents);
    }
Creates a test case result from a list of model diff events.

<p>The diff events encountered 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 actualEvents List of actual diff events.
@return Returns the created test case result.
smithy-diff/src/main/java/software/amazon/smithy/diff/testrunner/SmithyDiffTestCase.java