public static Builder builder() {
    return new Builder();
  }
@TestTemplate
  public void rowDeltaWithDeletesAndDuplicates() {
    assumeThat(formatVersion).isGreaterThan(1);
    assertThat(listManifestFiles()).isEmpty();

    table
        .newRowDelta()
        .addRows(FILE_A)
        .addRows(DataFiles.builder(SPEC).copy(FILE_A).build())
        .addRows(FILE_A)
        .addDeletes(FILE_A_DELETES)
        .addDeletes(FileMetadata.deleteFileBuilder(SPEC).copy(FILE_A_DELETES).build())
        .addDeletes(FILE_A_DELETES)
        .commit();

    assertThat(table.currentSnapshot().summary())
        .hasSize(14)
        .containsEntry(SnapshotSummary.ADDED_FILES_PROP, "1")
        .containsEntry(SnapshotSummary.ADDED_DELETE_FILES_PROP, "1")
        .containsEntry(SnapshotSummary.ADDED_FILE_SIZE_PROP, "20") // size of data + delete file
        .containsEntry(SnapshotSummary.ADD_POS_DELETE_FILES_PROP, "1")
        .containsEntry(SnapshotSummary.ADDED_POS_DELETES_PROP, "1")
        .containsEntry(SnapshotSummary.ADDED_RECORDS_PROP, "1")
        .containsEntry(SnapshotSummary.CHANGED_PARTITION_COUNT_PROP, "1")
        .containsEntry(SnapshotSummary.TOTAL_DATA_FILES_PROP, "1")
        .containsEntry(SnapshotSummary.TOTAL_DELETE_FILES_PROP, "1")
        .containsEntry(SnapshotSummary.TOTAL_EQ_DELETES_PROP, "0")
        .containsEntry(SnapshotSummary.TOTAL_POS_DELETES_PROP, "1")
        .containsEntry(SnapshotSummary.TOTAL_FILE_SIZE_PROP, "20")
        .containsEntry(SnapshotSummary.TOTAL_RECORDS_PROP, "1");
  }