kou commented on code in PR #48699:
URL: https://github.com/apache/arrow/pull/48699#discussion_r2656029108


##########
ruby/red-arrow/test/test-array-builder.rb:
##########
@@ -147,44 +147,435 @@ def assert_build(builder_class, raw_array)
                      ])
       end
 
-      test("list<uint>s") do
-        values = [
-          [0, 1, 2],
-          [3, 4],
-        ]
-        array = Arrow::Array.new(values)
-        data_type = Arrow::ListDataType.new(Arrow::UInt8DataType.new)
-        assert_equal({
-                       data_type: data_type,
-                       values: [
-                         [0, 1, 2],
-                         [3, 4],
-                       ],
-                     },
-                     {
-                       data_type: array.value_data_type,
-                       values: array.to_a,
-                     })
-      end
+      sub_test_case("nested integer list") do
+        test("list<uint8>s") do
+          values = [
+            [0, 1, 2],
+            [3, 4],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::UInt8DataType.new)
+          assert_equal({
+                         data_type: data_type,
+                         values: [
+                           [0, 1, 2],
+                           [3, 4],
+                         ],
+                       },
+                       {
+                         data_type: array.value_data_type,
+                         values: array.to_a,
+                       })
+        end
 
-      test("list<int>s") do
-        values = [
-          [0, -1, 2],
-          [3, 4],
-        ]
-        array = Arrow::Array.new(values)
-        data_type = Arrow::ListDataType.new(Arrow::Int8DataType.new)
-        assert_equal({
-                       data_type: data_type,
-                       values: [
-                         [0, -1, 2],
-                         [3, 4],
-                       ],
-                     },
-                     {
-                       data_type: array.value_data_type,
-                       values: array.to_a,
-                     })
+        test("list<int8>s") do
+          values = [
+            [0, -1, 2],
+            [3, 4],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::Int8DataType.new)
+          assert_equal({
+                         data_type: data_type,
+                         values: [
+                           [0, -1, 2],
+                           [3, 4],
+                         ],
+                       },
+                       {
+                         data_type: array.value_data_type,
+                         values: array.to_a,
+                       })
+        end

Review Comment:
   Can we remove this test because `list<int8>s boundary` test covers this case?



##########
ruby/red-arrow/test/test-array-builder.rb:
##########
@@ -147,44 +147,435 @@ def assert_build(builder_class, raw_array)
                      ])
       end
 
-      test("list<uint>s") do
-        values = [
-          [0, 1, 2],
-          [3, 4],
-        ]
-        array = Arrow::Array.new(values)
-        data_type = Arrow::ListDataType.new(Arrow::UInt8DataType.new)
-        assert_equal({
-                       data_type: data_type,
-                       values: [
-                         [0, 1, 2],
-                         [3, 4],
-                       ],
-                     },
-                     {
-                       data_type: array.value_data_type,
-                       values: array.to_a,
-                     })
-      end
+      sub_test_case("nested integer list") do
+        test("list<uint8>s") do
+          values = [
+            [0, 1, 2],
+            [3, 4],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::UInt8DataType.new)
+          assert_equal({
+                         data_type: data_type,
+                         values: [
+                           [0, 1, 2],
+                           [3, 4],
+                         ],
+                       },
+                       {
+                         data_type: array.value_data_type,
+                         values: array.to_a,
+                       })
+        end
 
-      test("list<int>s") do
-        values = [
-          [0, -1, 2],
-          [3, 4],
-        ]
-        array = Arrow::Array.new(values)
-        data_type = Arrow::ListDataType.new(Arrow::Int8DataType.new)
-        assert_equal({
-                       data_type: data_type,
-                       values: [
-                         [0, -1, 2],
-                         [3, 4],
-                       ],
-                     },
-                     {
-                       data_type: array.value_data_type,
-                       values: array.to_a,
-                     })
+        test("list<int8>s") do
+          values = [
+            [0, -1, 2],
+            [3, 4],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::Int8DataType.new)
+          assert_equal({
+                         data_type: data_type,
+                         values: [
+                           [0, -1, 2],
+                           [3, 4],
+                         ],
+                       },
+                       {
+                         data_type: array.value_data_type,
+                         values: array.to_a,
+                       })
+        end
+
+        test("list<int8>s boundary") do
+          # Int8 can hold values from -128 to 127.
+          values = [
+            [0, -2**7],
+            [2**7 - 1],

Review Comment:
   How about using defined constants instead of comment?
   
   ```suggestion
             values = [
               [0, GLib::MININT8],
               [GLib::MAXINT8],
   ```



##########
ruby/red-arrow/lib/arrow/array-builder.rb:
##########
@@ -186,6 +199,34 @@ def create_builder(builder_info)
           data_type = Decimal256DataType.new(builder_info[:precision],
                                              builder_info[:scale])
           Decimal256ArrayBuilder.new(data_type)
+        when :int
+          required_bit_length = builder_info[:bit_length] + 1

Review Comment:
   Why do we need ` +1` only for `:int`?



##########
ruby/red-arrow/test/test-array-builder.rb:
##########
@@ -147,44 +147,435 @@ def assert_build(builder_class, raw_array)
                      ])
       end
 
-      test("list<uint>s") do
-        values = [
-          [0, 1, 2],
-          [3, 4],
-        ]
-        array = Arrow::Array.new(values)
-        data_type = Arrow::ListDataType.new(Arrow::UInt8DataType.new)
-        assert_equal({
-                       data_type: data_type,
-                       values: [
-                         [0, 1, 2],
-                         [3, 4],
-                       ],
-                     },
-                     {
-                       data_type: array.value_data_type,
-                       values: array.to_a,
-                     })
-      end
+      sub_test_case("nested integer list") do
+        test("list<uint8>s") do
+          values = [
+            [0, 1, 2],
+            [3, 4],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::UInt8DataType.new)
+          assert_equal({
+                         data_type: data_type,
+                         values: [
+                           [0, 1, 2],
+                           [3, 4],
+                         ],
+                       },
+                       {
+                         data_type: array.value_data_type,
+                         values: array.to_a,
+                       })
+        end
 
-      test("list<int>s") do
-        values = [
-          [0, -1, 2],
-          [3, 4],
-        ]
-        array = Arrow::Array.new(values)
-        data_type = Arrow::ListDataType.new(Arrow::Int8DataType.new)
-        assert_equal({
-                       data_type: data_type,
-                       values: [
-                         [0, -1, 2],
-                         [3, 4],
-                       ],
-                     },
-                     {
-                       data_type: array.value_data_type,
-                       values: array.to_a,
-                     })
+        test("list<int8>s") do
+          values = [
+            [0, -1, 2],
+            [3, 4],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::Int8DataType.new)
+          assert_equal({
+                         data_type: data_type,
+                         values: [
+                           [0, -1, 2],
+                           [3, 4],
+                         ],
+                       },
+                       {
+                         data_type: array.value_data_type,
+                         values: array.to_a,
+                       })
+        end
+
+        test("list<int8>s boundary") do
+          # Int8 can hold values from -128 to 127.
+          values = [
+            [0, -2**7],
+            [2**7 - 1],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::Int8DataType.new)
+
+          assert_equal({
+                         data_type: data_type,
+                         values: [
+                           [0, -128],
+                           [127],
+                         ],
+                       },
+                       {
+                         data_type: array.value_data_type,
+                         values: array.to_a,
+                       })
+        end
+
+        test("list<int16>s inferred from int8 underflow") do
+          values = [
+            [0, -2**7 - 1],
+            [2**7 - 1],

Review Comment:
   ```suggestion
               [0, GLib::MININT8 - 1],
               [GLib::MAXINT8],
   ```



##########
ruby/red-arrow/test/test-array-builder.rb:
##########
@@ -147,44 +147,435 @@ def assert_build(builder_class, raw_array)
                      ])
       end
 
-      test("list<uint>s") do
-        values = [
-          [0, 1, 2],
-          [3, 4],
-        ]
-        array = Arrow::Array.new(values)
-        data_type = Arrow::ListDataType.new(Arrow::UInt8DataType.new)
-        assert_equal({
-                       data_type: data_type,
-                       values: [
-                         [0, 1, 2],
-                         [3, 4],
-                       ],
-                     },
-                     {
-                       data_type: array.value_data_type,
-                       values: array.to_a,
-                     })
-      end
+      sub_test_case("nested integer list") do
+        test("list<uint8>s") do
+          values = [
+            [0, 1, 2],
+            [3, 4],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::UInt8DataType.new)

Review Comment:
   We can simplify this:
   
   ```suggestion
             data_type = Arrow::ListDataType.new(:uint8)
   ```



##########
ruby/red-arrow/test/test-array-builder.rb:
##########
@@ -147,44 +147,435 @@ def assert_build(builder_class, raw_array)
                      ])
       end
 
-      test("list<uint>s") do
-        values = [
-          [0, 1, 2],
-          [3, 4],
-        ]
-        array = Arrow::Array.new(values)
-        data_type = Arrow::ListDataType.new(Arrow::UInt8DataType.new)
-        assert_equal({
-                       data_type: data_type,
-                       values: [
-                         [0, 1, 2],
-                         [3, 4],
-                       ],
-                     },
-                     {
-                       data_type: array.value_data_type,
-                       values: array.to_a,
-                     })
-      end
+      sub_test_case("nested integer list") do
+        test("list<uint8>s") do
+          values = [
+            [0, 1, 2],
+            [3, 4],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::UInt8DataType.new)
+          assert_equal({
+                         data_type: data_type,
+                         values: [
+                           [0, 1, 2],
+                           [3, 4],
+                         ],
+                       },
+                       {
+                         data_type: array.value_data_type,
+                         values: array.to_a,
+                       })
+        end
 
-      test("list<int>s") do
-        values = [
-          [0, -1, 2],
-          [3, 4],
-        ]
-        array = Arrow::Array.new(values)
-        data_type = Arrow::ListDataType.new(Arrow::Int8DataType.new)
-        assert_equal({
-                       data_type: data_type,
-                       values: [
-                         [0, -1, 2],
-                         [3, 4],
-                       ],
-                     },
-                     {
-                       data_type: array.value_data_type,
-                       values: array.to_a,
-                     })
+        test("list<int8>s") do
+          values = [
+            [0, -1, 2],
+            [3, 4],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::Int8DataType.new)
+          assert_equal({
+                         data_type: data_type,
+                         values: [
+                           [0, -1, 2],
+                           [3, 4],
+                         ],
+                       },
+                       {
+                         data_type: array.value_data_type,
+                         values: array.to_a,
+                       })
+        end
+
+        test("list<int8>s boundary") do
+          # Int8 can hold values from -128 to 127.
+          values = [
+            [0, -2**7],
+            [2**7 - 1],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::Int8DataType.new)
+
+          assert_equal({
+                         data_type: data_type,
+                         values: [
+                           [0, -128],
+                           [127],
+                         ],
+                       },
+                       {
+                         data_type: array.value_data_type,
+                         values: array.to_a,
+                       })
+        end
+
+        test("list<int16>s inferred from int8 underflow") do
+          values = [
+            [0, -2**7 - 1],
+            [2**7 - 1],
+          ]
+          array = Arrow::Array.new(values)
+          data_type = Arrow::ListDataType.new(Arrow::Int16DataType.new)
+
+          # Int8 lower bound is -128
+          assert_equal({
+                         data_type: data_type,
+                         values: [
+                           [0, -129],
+                           [127],

Review Comment:
   ```suggestion
                              [0, GLib::MININT8 - 1],
                              [GLib::MAXINT8],
   ```



-- 
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