public IterableOfProtosUsingCorrespondence<M> displayingDiffsPairedBy(
      Function<? super M, ?> keyFunction) {
    return usingCorrespondence().displayingDiffsPairedBy(keyFunction);
  }
@Test
  public void testDisplayingDiffsPairedBy() {
    Message actualInt3 = parse("o_int: 3 r_string: 'foo'");
    Message actualInt4 = parse("o_int: 4 r_string: 'bar'");
    Message expectedInt3 = parse("o_int: 3 r_string: 'baz'");
    Message expectedInt4 = parse("o_int: 4 r_string: 'qux'");

    Function<Message, Integer> getInt =
        message -> (Integer) message.getField(getFieldDescriptor("o_int"));

    expectFailureWhenTesting()
        .that(listOf(actualInt3, actualInt4))
        .displayingDiffsPairedBy(getInt)
        .containsExactly(expectedInt3, expectedInt4);
    expectThatFailure().factValue("diff", 0).contains("modified: r_string[0]: \"baz\" -> \"foo\"");
    expectThatFailure().factValue("diff", 1).contains("modified: r_string[0]: \"qux\" -> \"bar\"");
  }