public static String[][] assignExecutors(
      List<? extends ScanTaskGroup<?>> taskGroups, List<String> executorLocations) {
    Map<Integer, JavaHash<StructLike>> partitionHashes = Maps.newHashMap();
    String[][] locations = new String[taskGroups.size()][];

    for (int index = 0; index < taskGroups.size(); index++) {
      locations[index] = assign(taskGroups.get(index), executorLocations, partitionHashes);
    }

    return locations;
  }
@Test
  public void testFileScanTaskWithoutDeletes() {
    List<ScanTask> tasks =
        ImmutableList.of(
            new MockFileScanTask(mockDataFile(Row.of(1, "a")), SCHEMA, SPEC_1),
            new MockFileScanTask(mockDataFile(Row.of(2, "b")), SCHEMA, SPEC_1),
            new MockFileScanTask(mockDataFile(Row.of(3, "c")), SCHEMA, SPEC_1));
    ScanTaskGroup<ScanTask> taskGroup = new BaseScanTaskGroup<>(tasks);
    List<ScanTaskGroup<ScanTask>> taskGroups = ImmutableList.of(taskGroup);

    String[][] locations = SparkPlanningUtil.assignExecutors(taskGroups, EXECUTOR_LOCATIONS);

    // should not assign executors if there are no deletes
    assertThat(locations.length).isEqualTo(1);
    assertThat(locations[0]).isEmpty();
  }