snuyanzin commented on code in PR #22834:
URL: https://github.com/apache/flink/pull/22834#discussion_r1252977095


##########
flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/CollectionFunctionsITCase.java:
##########
@@ -1050,4 +1051,209 @@ public static class CreateEmptyArray extends 
ScalarFunction {
             return new int[] {};
         }
     }
+
+    private Stream<TestSetSpec> arraySliceTestCases() {
+        return Stream.of(
+                TestSetSpec.forFunction(BuiltInFunctionDefinitions.ARRAY_SLICE)
+                        .onFieldsWithData(
+                                new Integer[] {null, 1, 2, 3, 4, 5, 6, null},
+                                null,
+                                new Row[] {
+                                    Row.of(true, LocalDate.of(2022, 4, 20)),
+                                    Row.of(true, LocalDate.of(1990, 10, 14)),
+                                    null
+                                },
+                                new String[] {"a", "b", "c", "d", "e"},
+                                new Integer[] {1, 2, 3, 4, 5})
+                        .andDataTypes(
+                                DataTypes.ARRAY(DataTypes.INT()),
+                                DataTypes.ARRAY(DataTypes.INT()),
+                                DataTypes.ARRAY(
+                                        DataTypes.ROW(DataTypes.BOOLEAN(), 
DataTypes.DATE())),
+                                DataTypes.ARRAY(DataTypes.STRING()),
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(-123, -231),
+                                "ARRAY_SLICE(f4, -123, -231)",
+                                new Integer[] {},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(-5, -5),
+                                "ARRAY_SLICE(f4, -5, -5)",
+                                new Integer[] {1},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(-6, -5),
+                                "ARRAY_SLICE(f4, -6, -5)",
+                                new Integer[] {1},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(5, 5),
+                                "ARRAY_SLICE(f4, 5, 5)",
+                                new Integer[] {5},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(5, 6),
+                                "ARRAY_SLICE(f4, 5, 6)",
+                                new Integer[] {5},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(-5, 0),
+                                "ARRAY_SLICE(f4, -5, 0)",
+                                new Integer[] {1},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(-5, -8),
+                                "ARRAY_SLICE(f4, -5, -8)",
+                                new Integer[] {},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(-20, -8),
+                                "ARRAY_SLICE(f4, -20, -8)",
+                                new Integer[] {},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(20, 30),
+                                "ARRAY_SLICE(f4, 20, 30)",
+                                new Integer[] {},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(-123, 123),
+                                "ARRAY_SLICE(f4, -123, 123)",
+                                new Integer[] {1, 2, 3, 4, 5},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(3, -7),
+                                "ARRAY_SLICE(f4, 3, -7)",
+                                new Integer[] {},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f4").arraySlice(0, -7),
+                                "ARRAY_SLICE(f4, 0, -7)",
+                                new Integer[] {},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(0, 8),
+                                "ARRAY_SLICE(f0, 0, 8)",
+                                new Integer[] {null, 1, 2, 3, 4, 5, 6, null},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(0, 9),
+                                "ARRAY_SLICE(f0, 0, 9)",
+                                new Integer[] {null, 1, 2, 3, 4, 5, 6, null},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(0, 0),
+                                "ARRAY_SLICE(f0, 0, 0)",
+                                new Integer[] {null},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(0, -1),
+                                "ARRAY_SLICE(f0, 0, -1)",
+                                new Integer[] {null, 1, 2, 3, 4, 5, 6, null},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(1, 0),
+                                "ARRAY_SLICE(f0, 1, 0)",
+                                new Integer[] {null},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(1, 8),
+                                "ARRAY_SLICE(f0, 1, 8)",
+                                new Integer[] {null, 1, 2, 3, 4, 5, 6, null},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(1, 15),
+                                "ARRAY_SLICE(f0, 1, 15)",
+                                new Integer[] {null, 1, 2, 3, 4, 5, 6, null},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(-1, 15),
+                                "ARRAY_SLICE(f0, -1, 15)",
+                                new Integer[] {null},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(-8, 15),
+                                "ARRAY_SLICE(f0, -8, 15)",
+                                new Integer[] {null, 1, 2, 3, 4, 5, 6, null},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(-9, 15),
+                                "ARRAY_SLICE(f0, -9, 15)",
+                                new Integer[] {null, 1, 2, 3, 4, 5, 6, null},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(8, 15),
+                                "ARRAY_SLICE(f0, 8, 15)",
+                                new Integer[] {null},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(9, 15),
+                                "ARRAY_SLICE(f0, 9, 15)",
+                                new Integer[] {},
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(null, 15),
+                                "ARRAY_SLICE(f0, null, 15)",
+                                null,
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(1, null),
+                                "ARRAY_SLICE(f0, 1, null)",
+                                null,
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f0").arraySlice(null, null),
+                                "ARRAY_SLICE(f0, null, null)",
+                                null,
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f1").arraySlice(null, null),
+                                "ARRAY_SLICE(f1, null, null)",
+                                null,
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f1").arraySlice(1, 3),
+                                "ARRAY_SLICE(f1, 1, 3)",
+                                null,
+                                DataTypes.ARRAY(DataTypes.INT()))
+                        .testResult(
+                                $("f2").arraySlice(1, 1),
+                                "ARRAY_SLICE(f2, 1, 1)",
+                                new Row[] {
+                                    Row.of(true, LocalDate.of(2022, 4, 20)),
+                                },
+                                DataTypes.ARRAY(
+                                        DataTypes.ROW(DataTypes.BOOLEAN(), 
DataTypes.DATE())))
+                        .testResult(
+                                $("f3").arraySlice(-1, -3),
+                                "ARRAY_SLICE(f3, -1, -3)",
+                                new String[] {},
+                                DataTypes.ARRAY(DataTypes.STRING()))
+                        .testResult(
+                                $("f3").arraySlice(-3, -1),
+                                "ARRAY_SLICE(f3, -3, -1)",
+                                new String[] {"c", "d", "e"},
+                                DataTypes.ARRAY(DataTypes.STRING()))
+                        .testResult(
+                                $("f3").arraySlice(-30, -5),
+                                "ARRAY_SLICE(f3, -30, -5)",
+                                new String[] {"a"},
+                                DataTypes.ARRAY(DataTypes.STRING()))

Review Comment:
   I still tend to think we could decrease amount of tests
   
   The way how I did it: i checked cases: every (normalized) offset could be 
before array,, inside array and after array.
   Moreover all the cases when end is before start could be merged into one.
   Normalized means the result of normalization: in case of positive nothing to 
do
   in case of negative just add length of array + 1 (same logic as done in 
function implementation)
   and then we could see where it goes.
   Based on that a number of cases could be omitted since they are testing the 
same thing
   
   ```suggestion
   .testResult(
         $("f4").arraySlice(-123, -231),
         "ARRAY_SLICE(f4, -123, -231)",
         new Integer[] {},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f4").arraySlice(-5, -5),
         "ARRAY_SLICE(f4, -5, -5)",
         new Integer[] {1},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f4").arraySlice(-6, -5),
         "ARRAY_SLICE(f4, -6, -5)",
         new Integer[] {1},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f4").arraySlice(5, 6),
         "ARRAY_SLICE(f4, 5, 6)",
         new Integer[] {5},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f4").arraySlice(20, 30),
         "ARRAY_SLICE(f4, 20, 30)",
         new Integer[] {},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f4").arraySlice(-123, 123),
         "ARRAY_SLICE(f4, -123, 123)",
         new Integer[] {1, 2, 3, 4, 5},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f0").arraySlice(0, 8),
         "ARRAY_SLICE(f0, 0, 8)",
         new Integer[] {null, 1, 2, 3, 4, 5, 6, null},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f0").arraySlice(0, 9),
         "ARRAY_SLICE(f0, 0, 9)",
         new Integer[] {null, 1, 2, 3, 4, 5, 6, null},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f0").arraySlice(0, -1),
         "ARRAY_SLICE(f0, 0, -1)",
         new Integer[] {null, 1, 2, 3, 4, 5, 6, null},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f0").arraySlice(1, 0),
         "ARRAY_SLICE(f0, 1, 0)",
         new Integer[] {null},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f0").arraySlice(-1, 15),
         "ARRAY_SLICE(f0, -1, 15)",
         new Integer[] {null},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f0").arraySlice(8, 15),
         "ARRAY_SLICE(f0, 8, 15)",
         new Integer[] {null},
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f0").arraySlice(null, 15),
         "ARRAY_SLICE(f0, null, 15)",
         null,
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f0").arraySlice(1, null),
         "ARRAY_SLICE(f0, 1, null)",
         null,
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f0").arraySlice(null, null),
         "ARRAY_SLICE(f0, null, null)",
         null,
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f1").arraySlice(1, 3),
         "ARRAY_SLICE(f1, 1, 3)",
         null,
         DataTypes.ARRAY(DataTypes.INT()))
   .testResult(
         $("f2").arraySlice(1, 1),
         "ARRAY_SLICE(f2, 1, 1)",
         new Row[] {
             Row.of(true, LocalDate.of(2022, 4, 20)),
         },
         DataTypes.ARRAY(
                 DataTypes.ROW(DataTypes.BOOLEAN(), DataTypes.DATE())))
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to