public static String describe(List<org.apache.iceberg.expressions.Expression> exprs) {
    return exprs.stream().map(Spark3Util::describe).collect(Collectors.joining(", "));
  }
@Test
  public void testDescribeSortOrder() {
    Schema schema =
        new Schema(
            required(1, "data", Types.StringType.get()),
            required(2, "time", Types.TimestampType.withoutZone()));

    Assert.assertEquals(
        "Sort order isn't correct.",
        "data DESC NULLS FIRST",
        Spark3Util.describe(buildSortOrder("Identity", schema, 1)));
    Assert.assertEquals(
        "Sort order isn't correct.",
        "bucket(1, data) DESC NULLS FIRST",
        Spark3Util.describe(buildSortOrder("bucket[1]", schema, 1)));
    Assert.assertEquals(
        "Sort order isn't correct.",
        "truncate(data, 3) DESC NULLS FIRST",
        Spark3Util.describe(buildSortOrder("truncate[3]", schema, 1)));
    Assert.assertEquals(
        "Sort order isn't correct.",
        "years(time) DESC NULLS FIRST",
        Spark3Util.describe(buildSortOrder("year", schema, 2)));
    Assert.assertEquals(
        "Sort order isn't correct.",
        "months(time) DESC NULLS FIRST",
        Spark3Util.describe(buildSortOrder("month", schema, 2)));
    Assert.assertEquals(
        "Sort order isn't correct.",
        "days(time) DESC NULLS FIRST",
        Spark3Util.describe(buildSortOrder("day", schema, 2)));
    Assert.assertEquals(
        "Sort order isn't correct.",
        "hours(time) DESC NULLS FIRST",
        Spark3Util.describe(buildSortOrder("hour", schema, 2)));
    Assert.assertEquals(
        "Sort order isn't correct.",
        "unknown(data) DESC NULLS FIRST",
        Spark3Util.describe(buildSortOrder("unknown", schema, 1)));

    // multiple sort orders
    SortOrder multiOrder =
        SortOrder.builderFor(schema).asc("time", NULLS_FIRST).asc("data", NULLS_LAST).build();
    Assert.assertEquals(
        "Sort order isn't correct.",
        "time ASC NULLS FIRST, data ASC NULLS LAST",
        Spark3Util.describe(multiOrder));
  }