This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 67fbca9e56 GH-34837: [GLib][Ruby] Add 
Arrow::{Sparse,Dense}UnionArray#get_value (#34838)
67fbca9e56 is described below

commit 67fbca9e565f7ba8deb5767238c2c703cd7406c1
Author: Sutou Kouhei <[email protected]>
AuthorDate: Mon Apr 3 00:58:53 2023 +0900

    GH-34837: [GLib][Ruby] Add Arrow::{Sparse,Dense}UnionArray#get_value 
(#34838)
    
    ### Rationale for this change
    
    They are missing.
    
    ### What changes are included in this PR?
    
    The following GLib APIs are added for them:
    
    * `garrow_union_array_get_type_code()`
    * `garrow_union_array_get_child_id()`
    * `garrow_dense_union_array_get_value_offset()`
    
    `Arrow::{Sparse,Dense}UnionArray#{to_records,values}` have a backward 
incompatible change:
    
    * Don't include field name:
      * Before: `{"field_name" => value}`
      * After: `value`
    
    Because I think that `"field_name"` is useless for many cases. Only `value` 
is suitable for many cases.
    
    ### Are these changes tested?
    
    Yes.
    
    ### Are there any user-facing changes?
    
    Yes.
    
    **This PR includes breaking changes to public APIs.**
    
    See the above description for details.
    
    * Closes: #34837
    
    Authored-by: Sutou Kouhei <[email protected]>
    Signed-off-by: Sutou Kouhei <[email protected]>
---
 c_glib/arrow-glib/composite-array.cpp              |  57 +++++++++++
 c_glib/arrow-glib/composite-array.h                |  12 +++
 c_glib/test/test-dense-union-array.rb              |  12 +++
 c_glib/test/test-sparse-union-array.rb             |   8 ++
 ruby/red-arrow/ext/arrow/converters.hpp            |  39 +++----
 .../arrow/dense-union-array.rb}                    |  27 ++---
 ruby/red-arrow/lib/arrow/loader.rb                 |   2 +
 .../arrow/sparse-union-array.rb}                   |  27 ++---
 .../test/raw-records/test-dense-union-array.rb     | 113 ++++++++++++++-------
 .../test/raw-records/test-sparse-union-array.rb    | 113 ++++++++++++++-------
 ruby/red-arrow/test/test-dense-union-array.rb      |  42 ++++++++
 ruby/red-arrow/test/test-dense-union-data-type.rb  |   2 +-
 ...ion-data-type.rb => test-sparse-union-array.rb} |  39 ++++---
 .../test/values/test-dense-union-array.rb          | 111 +++++++++++++-------
 .../test/values/test-sparse-union-array.rb         | 111 +++++++++++++-------
 15 files changed, 484 insertions(+), 231 deletions(-)

diff --git a/c_glib/arrow-glib/composite-array.cpp 
b/c_glib/arrow-glib/composite-array.cpp
index fd777f5862..ad6b8f405e 100644
--- a/c_glib/arrow-glib/composite-array.cpp
+++ b/c_glib/arrow-glib/composite-array.cpp
@@ -1113,6 +1113,44 @@ garrow_union_array_class_init(GArrowUnionArrayClass 
*klass)
   g_object_class_install_property(gobject_class, PROP_TYPE_IDS, spec);
 }
 
+/**
+ * garrow_union_array_get_type_code:
+ * @array: A #GArrowUnionArray.
+ * @i: The index of the logical type code of the value in the union.
+ *
+ * Returns: The i-th logical type code of the value.
+ *
+ * Since: 12.0.0
+ */
+gint8
+garrow_union_array_get_type_code(GArrowUnionArray *array,
+                                 gint64 i)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  auto arrow_union_array =
+    std::static_pointer_cast<arrow::UnionArray>(arrow_array);
+  return arrow_union_array->type_code(i);
+}
+
+/**
+ * garrow_union_array_get_child_id:
+ * @array: A #GArrowUnionArray.
+ * @i: The index of the physical child ID containing value in the union.
+ *
+ * Returns: The physical child ID containing the i-th value.
+ *
+ * Since: 12.0.0
+ */
+gint
+garrow_union_array_get_child_id(GArrowUnionArray *array,
+                                gint64 i)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  auto arrow_union_array =
+    std::static_pointer_cast<arrow::UnionArray>(arrow_array);
+  return arrow_union_array->child_id(i);
+}
+
 /**
  * garrow_union_array_get_field
  * @array: A #GArrowUnionArray.
@@ -1483,6 +1521,25 @@ 
garrow_dense_union_array_new_data_type(GArrowDenseUnionDataType *data_type,
     "[dense-union-array][new][data-type]");
 }
 
+/**
+ * garrow_dense_union_array_get_value_offset:
+ * @array: A #GArrowUnionArray.
+ * @i: The index of the offset of the value in the union.
+ *
+ * Returns: The offset of the i-th value.
+ *
+ * Since: 12.0.0
+ */
+gint32
+garrow_dense_union_array_get_value_offset(GArrowDenseUnionArray *array,
+                                          gint64 i)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  auto arrow_dense_union_array =
+    std::static_pointer_cast<arrow::DenseUnionArray>(arrow_array);
+  return arrow_dense_union_array->value_offset(i);
+}
+
 
 typedef struct GArrowDictionaryArrayPrivate_ {
   GArrowArray *indices;
diff --git a/c_glib/arrow-glib/composite-array.h 
b/c_glib/arrow-glib/composite-array.h
index cfaeb4c768..28ca1b78b2 100644
--- a/c_glib/arrow-glib/composite-array.h
+++ b/c_glib/arrow-glib/composite-array.h
@@ -161,6 +161,14 @@ struct _GArrowUnionArrayClass
   GArrowArrayClass parent_class;
 };
 
+GARROW_AVAILABLE_IN_12_0
+gint8
+garrow_union_array_get_type_code(GArrowUnionArray *array,
+                                 gint64 i);
+GARROW_AVAILABLE_IN_12_0
+gint
+garrow_union_array_get_child_id(GArrowUnionArray *array,
+                                gint64 i);
 GArrowArray *
 garrow_union_array_get_field(GArrowUnionArray *array,
                              gint i);
@@ -209,6 +217,10 @@ 
garrow_dense_union_array_new_data_type(GArrowDenseUnionDataType *data_type,
                                        GArrowInt32Array *value_offsets,
                                        GList *fields,
                                        GError **error);
+GARROW_AVAILABLE_IN_12_0
+gint32
+garrow_dense_union_array_get_value_offset(GArrowDenseUnionArray *array,
+                                          gint64 i);
 
 
 #define GARROW_TYPE_DICTIONARY_ARRAY (garrow_dictionary_array_get_type())
diff --git a/c_glib/test/test-dense-union-array.rb 
b/c_glib/test/test-dense-union-array.rb
index ecd17d5a0a..b5eaa167b6 100644
--- a/c_glib/test/test-dense-union-array.rb
+++ b/c_glib/test/test-dense-union-array.rb
@@ -73,6 +73,18 @@ class TestDenseUnionArray < Test::Unit::TestCase
                      @array.value_data_type)
       end
 
+      def test_type_code
+        assert_equal(11, @array.get_type_code(0))
+      end
+
+      def test_child_id
+        assert_equal(0, @array.get_child_id(0))
+      end
+
+      def test_value_offset
+        assert_equal(1, @array.get_value_offset(2))
+      end
+
       def test_field
         assert_equal([
                        build_int16_array([1, nil]),
diff --git a/c_glib/test/test-sparse-union-array.rb 
b/c_glib/test/test-sparse-union-array.rb
index 1132ccb454..c52a99386b 100644
--- a/c_glib/test/test-sparse-union-array.rb
+++ b/c_glib/test/test-sparse-union-array.rb
@@ -71,6 +71,14 @@ class TestSparseUnionArray < Test::Unit::TestCase
                      @array.value_data_type)
       end
 
+      def test_type_code
+        assert_equal(11, @array.get_type_code(0))
+      end
+
+      def test_child_id
+        assert_equal(0, @array.get_child_id(0))
+      end
+
       def test_field
         assert_equal([
                        build_int16_array([1, nil, nil, nil, 5]),
diff --git a/ruby/red-arrow/ext/arrow/converters.hpp 
b/ruby/red-arrow/ext/arrow/converters.hpp
index 28955432a7..6406925ca0 100644
--- a/ruby/red-arrow/ext/arrow/converters.hpp
+++ b/ruby/red-arrow/ext/arrow/converters.hpp
@@ -685,25 +685,21 @@ namespace red_arrow {
   private:
     template <typename ArrayType>
     inline void convert_value(const ArrayType& array) {
-      auto result = rb_hash_new();
       if (array.IsNull(index_)) {
-        rb_hash_aset(result, field_name_, Qnil);
+        result_ = RUBY_Qnil;
       } else {
-        rb_hash_aset(result,
-                     field_name_,
-                     array_value_converter_->convert(array, index_));
+        result_ = array_value_converter_->convert(array, index_);
       }
-      result_ = result;
     }
 
-    uint8_t compute_field_index(const arrow::UnionArray& array,
-                                arrow::UnionType* type,
-                                const char* tag) {
+    int8_t compute_child_id(const arrow::UnionArray& array,
+                            arrow::UnionType* type,
+                            const char* tag) {
       const auto type_code = array.raw_type_codes()[index_];
       if (type_code >= 0 && type_code <= arrow::UnionType::kMaxTypeCode) {
-        const auto field_id = type->child_ids()[type_code];
-        if (field_id >= 0) {
-          return field_id;
+        const auto child_id = type->child_ids()[type_code];
+        if (child_id >= 0) {
+          return child_id;
         }
       }
       check_status(arrow::Status::Invalid("Unknown type ID: ", type_code),
@@ -715,36 +711,25 @@ namespace red_arrow {
       const auto type =
         std::static_pointer_cast<arrow::UnionType>(array.type()).get();
       const auto tag = "[raw-records][union-sparse-array]";
-      const auto index = compute_field_index(array, type, tag);
-      const auto field = type->field(index).get();
-      const auto& field_name = field->name();
-      const auto field_name_keep = field_name_;
-      field_name_ = rb_utf8_str_new(field_name.data(), field_name.length());
-      const auto field_array = array.field(index).get();
+      const auto child_id = compute_child_id(array, type, tag);
+      const auto field_array = array.field(child_id).get();
       check_status(field_array->Accept(this), tag);
-      field_name_ = field_name_keep;
     }
 
     void convert_dense(const arrow::DenseUnionArray& array) {
       const auto type =
         std::static_pointer_cast<arrow::UnionType>(array.type()).get();
       const auto tag = "[raw-records][union-dense-array]";
-      const auto index = compute_field_index(array, type, tag);
-      const auto field = type->field(index).get();
-      const auto& field_name = field->name();
-      const auto field_name_keep = field_name_;
-      field_name_ = rb_utf8_str_new(field_name.data(), field_name.length());
-      const auto field_array = array.field(index);
+      const auto child_id = compute_child_id(array, type, tag);
+      const auto field_array = array.field(child_id);
       const auto index_keep = index_;
       index_ = array.value_offset(index_);
       check_status(field_array->Accept(this), tag);
       index_ = index_keep;
-      field_name_ = field_name_keep;
     }
 
     ArrayValueConverter* array_value_converter_;
     int64_t index_;
-    VALUE field_name_;
     VALUE result_;
   };
 
diff --git a/ruby/red-arrow/test/test-dense-union-data-type.rb 
b/ruby/red-arrow/lib/arrow/dense-union-array.rb
similarity index 54%
copy from ruby/red-arrow/test/test-dense-union-data-type.rb
copy to ruby/red-arrow/lib/arrow/dense-union-array.rb
index d8da6f7729..07b2bbfce6 100644
--- a/ruby/red-arrow/test/test-dense-union-data-type.rb
+++ b/ruby/red-arrow/lib/arrow/dense-union-array.rb
@@ -15,27 +15,12 @@
 # specific language governing permissions and limitations
 # under the License.
 
-class DenseUnionDataTypeTest < Test::Unit::TestCase
-  sub_test_case(".new") do
-    def setup
-      @fields = [
-        Arrow::Field.new("visible", :boolean),
-        {
-          name: "count",
-          type: :int32,
-        },
-      ]
-    end
-
-    test("ordered arguments") do
-      assert_equal("dense_union<visible: bool=2, count: int32=9>",
-                   Arrow::DenseUnionDataType.new(@fields, [2, 9]).to_s)
-    end
-
-    test("description") do
-      assert_equal("dense_union<visible: bool=2, count: int32=9>",
-                   Arrow::DenseUnionDataType.new(fields: @fields,
-                                                  type_codes: [2, 9]).to_s)
+module Arrow
+  class DenseUnionArray
+    def get_value(i)
+      child_id = get_child_id(i)
+      field = get_field(child_id)
+      field[get_value_offset(i)]
     end
   end
 end
diff --git a/ruby/red-arrow/lib/arrow/loader.rb 
b/ruby/red-arrow/lib/arrow/loader.rb
index 71fbd9e57e..200b4b6d65 100644
--- a/ruby/red-arrow/lib/arrow/loader.rb
+++ b/ruby/red-arrow/lib/arrow/loader.rb
@@ -70,6 +70,7 @@ module Arrow
       require "arrow/decimal256-array"
       require "arrow/decimal256-array-builder"
       require "arrow/decimal256-data-type"
+      require "arrow/dense-union-array"
       require "arrow/dense-union-data-type"
       require "arrow/dictionary-array"
       require "arrow/dictionary-data-type"
@@ -109,6 +110,7 @@ module Arrow
       require "arrow/sort-key"
       require "arrow/sort-options"
       require "arrow/source-node-options"
+      require "arrow/sparse-union-array"
       require "arrow/sparse-union-data-type"
       require "arrow/string-dictionary-array-builder"
       require "arrow/string-array-builder"
diff --git a/ruby/red-arrow/test/test-dense-union-data-type.rb 
b/ruby/red-arrow/lib/arrow/sparse-union-array.rb
similarity index 54%
copy from ruby/red-arrow/test/test-dense-union-data-type.rb
copy to ruby/red-arrow/lib/arrow/sparse-union-array.rb
index d8da6f7729..783493f6b6 100644
--- a/ruby/red-arrow/test/test-dense-union-data-type.rb
+++ b/ruby/red-arrow/lib/arrow/sparse-union-array.rb
@@ -15,27 +15,12 @@
 # specific language governing permissions and limitations
 # under the License.
 
-class DenseUnionDataTypeTest < Test::Unit::TestCase
-  sub_test_case(".new") do
-    def setup
-      @fields = [
-        Arrow::Field.new("visible", :boolean),
-        {
-          name: "count",
-          type: :int32,
-        },
-      ]
-    end
-
-    test("ordered arguments") do
-      assert_equal("dense_union<visible: bool=2, count: int32=9>",
-                   Arrow::DenseUnionDataType.new(@fields, [2, 9]).to_s)
-    end
-
-    test("description") do
-      assert_equal("dense_union<visible: bool=2, count: int32=9>",
-                   Arrow::DenseUnionDataType.new(fields: @fields,
-                                                  type_codes: [2, 9]).to_s)
+module Arrow
+  class SparseUnionArray
+    def get_value(i)
+      child_id = get_child_id(i)
+      field = get_field(child_id)
+      field[i]
     end
   end
 end
diff --git a/ruby/red-arrow/test/raw-records/test-dense-union-array.rb 
b/ruby/red-arrow/test/raw-records/test-dense-union-array.rb
index 180ed1a6a9..c5b58d8ac5 100644
--- a/ruby/red-arrow/test/raw-records/test-dense-union-array.rb
+++ b/ruby/red-arrow/test/raw-records/test-dense-union-array.rb
@@ -76,12 +76,21 @@ module RawRecordsDenseUnionArrayTests
                            [union_array])
   end
 
+  def remove_field_names(records)
+    records.collect do |record|
+      record.collect do |column|
+        column.values[0]
+      end
+    end
+  end
+
   def test_null
     records = [
       [{"0" => nil}],
     ]
     target = build(:null, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_boolean
@@ -90,7 +99,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:boolean, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_int8
@@ -99,7 +109,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:int8, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_uint8
@@ -108,7 +119,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:uint8, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_int16
@@ -117,7 +129,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:int16, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_uint16
@@ -126,7 +139,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:uint16, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_int32
@@ -135,7 +149,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:int32, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_uint32
@@ -144,7 +159,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:uint32, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_int64
@@ -153,7 +169,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:int64, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_uint64
@@ -162,7 +179,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:uint64, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_float
@@ -171,7 +189,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:float, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_double
@@ -180,7 +199,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:double, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_binary
@@ -189,7 +209,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:binary, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_string
@@ -198,7 +219,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:string, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_date32
@@ -207,7 +229,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:date32, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_date64
@@ -216,7 +239,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:date64, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_timestamp_second
@@ -229,7 +253,8 @@ module RawRecordsDenseUnionArrayTests
                      unit: :second,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_timestamp_milli
@@ -242,7 +267,8 @@ module RawRecordsDenseUnionArrayTests
                      unit: :milli,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_timestamp_micro
@@ -255,7 +281,8 @@ module RawRecordsDenseUnionArrayTests
                      unit: :micro,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_timestamp_nano
@@ -268,7 +295,8 @@ module RawRecordsDenseUnionArrayTests
                      unit: :nano,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_time32_second
@@ -283,7 +311,8 @@ module RawRecordsDenseUnionArrayTests
                      unit: :second,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_time32_milli
@@ -298,7 +327,8 @@ module RawRecordsDenseUnionArrayTests
                      unit: :milli,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_time64_micro
@@ -313,7 +343,8 @@ module RawRecordsDenseUnionArrayTests
                      unit: :micro,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_time64_nano
@@ -328,7 +359,8 @@ module RawRecordsDenseUnionArrayTests
                      unit: :nano,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_decimal128
@@ -342,7 +374,8 @@ module RawRecordsDenseUnionArrayTests
                      scale: 2,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_decimal256
@@ -356,7 +389,8 @@ module RawRecordsDenseUnionArrayTests
                      scale: 2,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_month_interval
@@ -365,7 +399,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:month_interval, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_day_time_interval
@@ -374,7 +409,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:day_time_interval, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_month_day_nano_interval
@@ -383,7 +419,8 @@ module RawRecordsDenseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:month_day_nano_interval, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_list
@@ -399,7 +436,8 @@ module RawRecordsDenseUnionArrayTests
                      },
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_struct
@@ -418,7 +456,8 @@ module RawRecordsDenseUnionArrayTests
                      ],
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_map
@@ -432,7 +471,8 @@ module RawRecordsDenseUnionArrayTests
                      item: :boolean,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_sparse_union
@@ -457,7 +497,8 @@ module RawRecordsDenseUnionArrayTests
                      type_codes: [0, 1],
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_dense_union
@@ -482,7 +523,8 @@ module RawRecordsDenseUnionArrayTests
                      type_codes: [0, 1],
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_dictionary
@@ -500,7 +542,8 @@ module RawRecordsDenseUnionArrayTests
                                         ordered: true,
                                       },
                                       records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 end
 
diff --git a/ruby/red-arrow/test/raw-records/test-sparse-union-array.rb 
b/ruby/red-arrow/test/raw-records/test-sparse-union-array.rb
index 16e75834ca..246011021e 100644
--- a/ruby/red-arrow/test/raw-records/test-sparse-union-array.rb
+++ b/ruby/red-arrow/test/raw-records/test-sparse-union-array.rb
@@ -66,12 +66,21 @@ module RawRecordsSparseUnionArrayTests
                            [union_array])
   end
 
+  def remove_field_names(records)
+    records.collect do |record|
+      record.collect do |column|
+        column.values[0]
+      end
+    end
+  end
+
   def test_null
     records = [
       [{"0" => nil}],
     ]
     target = build(:null, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_boolean
@@ -80,7 +89,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:boolean, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_int8
@@ -89,7 +99,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:int8, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_uint8
@@ -98,7 +109,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:uint8, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_int16
@@ -107,7 +119,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:int16, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_uint16
@@ -116,7 +129,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:uint16, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_int32
@@ -125,7 +139,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:int32, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_uint32
@@ -134,7 +149,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:uint32, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_int64
@@ -143,7 +159,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:int64, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_uint64
@@ -152,7 +169,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:uint64, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_float
@@ -161,7 +179,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:float, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_double
@@ -170,7 +189,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:double, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_binary
@@ -179,7 +199,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:binary, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_string
@@ -188,7 +209,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:string, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_date32
@@ -197,7 +219,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:date32, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_date64
@@ -206,7 +229,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:date64, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_timestamp_second
@@ -219,7 +243,8 @@ module RawRecordsSparseUnionArrayTests
                      unit: :second,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_timestamp_milli
@@ -232,7 +257,8 @@ module RawRecordsSparseUnionArrayTests
                      unit: :milli,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_timestamp_micro
@@ -245,7 +271,8 @@ module RawRecordsSparseUnionArrayTests
                      unit: :micro,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_timestamp_nano
@@ -258,7 +285,8 @@ module RawRecordsSparseUnionArrayTests
                      unit: :nano,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_time32_second
@@ -273,7 +301,8 @@ module RawRecordsSparseUnionArrayTests
                      unit: :second,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_time32_milli
@@ -288,7 +317,8 @@ module RawRecordsSparseUnionArrayTests
                      unit: :milli,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_time64_micro
@@ -303,7 +333,8 @@ module RawRecordsSparseUnionArrayTests
                      unit: :micro,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_time64_nano
@@ -318,7 +349,8 @@ module RawRecordsSparseUnionArrayTests
                      unit: :nano,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_decimal128
@@ -332,7 +364,8 @@ module RawRecordsSparseUnionArrayTests
                      scale: 2,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_decimal256
@@ -346,7 +379,8 @@ module RawRecordsSparseUnionArrayTests
                      scale: 2,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_month_interval
@@ -355,7 +389,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:month_interval, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_day_time_interval
@@ -364,7 +399,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:day_time_interval, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_month_day_nano_interval
@@ -373,7 +409,8 @@ module RawRecordsSparseUnionArrayTests
       [{"1" => nil}],
     ]
     target = build(:month_day_nano_interval, records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_list
@@ -389,7 +426,8 @@ module RawRecordsSparseUnionArrayTests
                      },
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_struct
@@ -408,7 +446,8 @@ module RawRecordsSparseUnionArrayTests
                      ],
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_map
@@ -422,7 +461,8 @@ module RawRecordsSparseUnionArrayTests
                      item: :boolean,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_sparse_union
@@ -447,7 +487,8 @@ module RawRecordsSparseUnionArrayTests
                      type_codes: [0, 1],
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_dense_union
@@ -472,7 +513,8 @@ module RawRecordsSparseUnionArrayTests
                      type_codes: [0, 1],
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 
   def test_dictionary
@@ -490,7 +532,8 @@ module RawRecordsSparseUnionArrayTests
                      ordered: true,
                    },
                    records)
-    assert_equal(records, target.raw_records)
+    assert_equal(remove_field_names(records),
+                 target.raw_records)
   end
 end
 
diff --git a/ruby/red-arrow/test/test-dense-union-array.rb 
b/ruby/red-arrow/test/test-dense-union-array.rb
new file mode 100644
index 0000000000..36a0a64b62
--- /dev/null
+++ b/ruby/red-arrow/test/test-dense-union-array.rb
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+class DenseUnionArrayTest < Test::Unit::TestCase
+  def setup
+    data_type_fields = [
+      Arrow::Field.new("number", :int16),
+      Arrow::Field.new("text", :string),
+    ]
+    type_codes = [11, 13]
+    @data_type = Arrow::DenseUnionDataType.new(data_type_fields, type_codes)
+    type_ids = Arrow::Int8Array.new([11, 13, 11, 13, 13])
+    value_offsets = Arrow::Int32Array.new([0, 0, 1, 1, 2])
+    fields = [
+      Arrow::Int16Array.new([1, nil]),
+      Arrow::StringArray.new(["a", "b", "c"])
+    ]
+    @array = Arrow::DenseUnionArray.new(@data_type,
+                                        type_ids,
+                                        value_offsets,
+                                        fields)
+  end
+
+  def test_get_value
+    assert_equal([1, "a", nil, "b", "c"],
+                 @array.length.times.collect {|i| @array[i]})
+  end
+end
diff --git a/ruby/red-arrow/test/test-dense-union-data-type.rb 
b/ruby/red-arrow/test/test-dense-union-data-type.rb
index d8da6f7729..cc191efa33 100644
--- a/ruby/red-arrow/test/test-dense-union-data-type.rb
+++ b/ruby/red-arrow/test/test-dense-union-data-type.rb
@@ -35,7 +35,7 @@ class DenseUnionDataTypeTest < Test::Unit::TestCase
     test("description") do
       assert_equal("dense_union<visible: bool=2, count: int32=9>",
                    Arrow::DenseUnionDataType.new(fields: @fields,
-                                                  type_codes: [2, 9]).to_s)
+                                                 type_codes: [2, 9]).to_s)
     end
   end
 end
diff --git a/ruby/red-arrow/test/test-dense-union-data-type.rb 
b/ruby/red-arrow/test/test-sparse-union-array.rb
similarity index 54%
copy from ruby/red-arrow/test/test-dense-union-data-type.rb
copy to ruby/red-arrow/test/test-sparse-union-array.rb
index d8da6f7729..bd1f9ec5c4 100644
--- a/ruby/red-arrow/test/test-dense-union-data-type.rb
+++ b/ruby/red-arrow/test/test-sparse-union-array.rb
@@ -15,27 +15,24 @@
 # specific language governing permissions and limitations
 # under the License.
 
-class DenseUnionDataTypeTest < Test::Unit::TestCase
-  sub_test_case(".new") do
-    def setup
-      @fields = [
-        Arrow::Field.new("visible", :boolean),
-        {
-          name: "count",
-          type: :int32,
-        },
-      ]
-    end
-
-    test("ordered arguments") do
-      assert_equal("dense_union<visible: bool=2, count: int32=9>",
-                   Arrow::DenseUnionDataType.new(@fields, [2, 9]).to_s)
-    end
+class SparseUnionArrayTest < Test::Unit::TestCase
+  def setup
+    data_type_fields = [
+      Arrow::Field.new("number", :int16),
+      Arrow::Field.new("text", :string),
+    ]
+    type_codes = [11, 13]
+    @data_type = Arrow::SparseUnionDataType.new(data_type_fields, type_codes)
+    type_ids = Arrow::Int8Array.new([11, 13, 11, 13, 11])
+    fields = [
+      Arrow::Int16Array.new([1, nil, nil, nil, 5]),
+      Arrow::StringArray.new([nil, "b", nil, "d", nil]),
+    ]
+    @array = Arrow::SparseUnionArray.new(@data_type, type_ids, fields)
+  end
 
-    test("description") do
-      assert_equal("dense_union<visible: bool=2, count: int32=9>",
-                   Arrow::DenseUnionDataType.new(fields: @fields,
-                                                  type_codes: [2, 9]).to_s)
-    end
+  def test_get_value
+    assert_equal([1, "b", nil, "d", 5],
+                 @array.length.times.collect {|i| @array[i]})
   end
 end
diff --git a/ruby/red-arrow/test/values/test-dense-union-array.rb 
b/ruby/red-arrow/test/values/test-dense-union-array.rb
index a5cb51d4bf..5f8469d72e 100644
--- a/ruby/red-arrow/test/values/test-dense-union-array.rb
+++ b/ruby/red-arrow/test/values/test-dense-union-array.rb
@@ -64,12 +64,19 @@ module ValuesDenseUnionArrayTests
                                arrays)
   end
 
+  def remove_field_names(values)
+    values.collect do |value|
+      value.values[0]
+    end
+  end
+
   def test_null
     values = [
       {"0" => nil},
     ]
     target = build(:null, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_boolean
@@ -78,7 +85,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:boolean, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_int8
@@ -87,7 +95,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:int8, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_uint8
@@ -96,7 +105,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:uint8, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_int16
@@ -105,7 +115,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:int16, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_uint16
@@ -114,7 +125,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:uint16, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_int32
@@ -123,7 +135,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:int32, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_uint32
@@ -132,7 +145,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:uint32, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_int64
@@ -141,7 +155,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:int64, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_uint64
@@ -150,7 +165,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:uint64, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_float
@@ -159,7 +175,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:float, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_double
@@ -168,7 +185,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:double, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_binary
@@ -177,7 +195,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:binary, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_string
@@ -186,7 +205,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:string, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_date32
@@ -195,7 +215,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:date32, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_date64
@@ -204,7 +225,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:date64, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_timestamp_second
@@ -217,7 +239,8 @@ module ValuesDenseUnionArrayTests
                      unit: :second,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_timestamp_milli
@@ -230,7 +253,8 @@ module ValuesDenseUnionArrayTests
                      unit: :milli,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_timestamp_micro
@@ -243,7 +267,8 @@ module ValuesDenseUnionArrayTests
                      unit: :micro,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_timestamp_nano
@@ -256,7 +281,8 @@ module ValuesDenseUnionArrayTests
                      unit: :nano,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_time32_second
@@ -271,7 +297,8 @@ module ValuesDenseUnionArrayTests
                      unit: :second,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_time32_milli
@@ -286,7 +313,8 @@ module ValuesDenseUnionArrayTests
                      unit: :milli,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_time64_micro
@@ -301,7 +329,8 @@ module ValuesDenseUnionArrayTests
                      unit: :micro,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_time64_nano
@@ -316,7 +345,8 @@ module ValuesDenseUnionArrayTests
                      unit: :nano,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_decimal128
@@ -330,7 +360,8 @@ module ValuesDenseUnionArrayTests
                      scale: 2,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_decimal256
@@ -344,7 +375,8 @@ module ValuesDenseUnionArrayTests
                      scale: 2,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_month_interval
@@ -353,7 +385,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:month_interval, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_day_time_interval
@@ -362,7 +395,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:day_time_interval, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_month_day_nano_interval
@@ -371,7 +405,8 @@ module ValuesDenseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:month_day_nano_interval, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_list
@@ -387,7 +422,8 @@ module ValuesDenseUnionArrayTests
                      },
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_struct
@@ -406,7 +442,8 @@ module ValuesDenseUnionArrayTests
                      ],
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_map
@@ -420,7 +457,8 @@ module ValuesDenseUnionArrayTests
                      item: :boolean,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_sparse_union
@@ -445,7 +483,8 @@ module ValuesDenseUnionArrayTests
                      type_codes: [0, 1],
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_dense_union
@@ -470,7 +509,8 @@ module ValuesDenseUnionArrayTests
                      type_codes: [0, 1],
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_dictionary
@@ -488,7 +528,8 @@ module ValuesDenseUnionArrayTests
                                         ordered: true,
                                       },
                                       values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 end
 
diff --git a/ruby/red-arrow/test/values/test-sparse-union-array.rb 
b/ruby/red-arrow/test/values/test-sparse-union-array.rb
index 932b1b40c0..f0af4e22e9 100644
--- a/ruby/red-arrow/test/values/test-sparse-union-array.rb
+++ b/ruby/red-arrow/test/values/test-sparse-union-array.rb
@@ -55,12 +55,19 @@ module ValuesSparseUnionArrayTests
                                 arrays)
   end
 
+  def remove_field_names(values)
+    values.collect do |value|
+      value.values[0]
+    end
+  end
+
   def test_null
     values = [
       {"0" => nil},
     ]
     target = build(:null, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_boolean
@@ -69,7 +76,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:boolean, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_int8
@@ -78,7 +86,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:int8, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_uint8
@@ -87,7 +96,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:uint8, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_int16
@@ -96,7 +106,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:int16, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_uint16
@@ -105,7 +116,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:uint16, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_int32
@@ -114,7 +126,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:int32, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_uint32
@@ -123,7 +136,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:uint32, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_int64
@@ -132,7 +146,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:int64, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_uint64
@@ -141,7 +156,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:uint64, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_float
@@ -150,7 +166,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:float, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_double
@@ -159,7 +176,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:double, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_binary
@@ -168,7 +186,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:binary, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_string
@@ -177,7 +196,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:string, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_date32
@@ -186,7 +206,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:date32, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_date64
@@ -195,7 +216,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:date64, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_timestamp_second
@@ -208,7 +230,8 @@ module ValuesSparseUnionArrayTests
                      unit: :second,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_timestamp_milli
@@ -221,7 +244,8 @@ module ValuesSparseUnionArrayTests
                      unit: :milli,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_timestamp_micro
@@ -234,7 +258,8 @@ module ValuesSparseUnionArrayTests
                      unit: :micro,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_timestamp_nano
@@ -247,7 +272,8 @@ module ValuesSparseUnionArrayTests
                      unit: :nano,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_time32_second
@@ -262,7 +288,8 @@ module ValuesSparseUnionArrayTests
                      unit: :second,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_time32_milli
@@ -277,7 +304,8 @@ module ValuesSparseUnionArrayTests
                      unit: :milli,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_time64_micro
@@ -292,7 +320,8 @@ module ValuesSparseUnionArrayTests
                      unit: :micro,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_time64_nano
@@ -307,7 +336,8 @@ module ValuesSparseUnionArrayTests
                      unit: :nano,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_decimal128
@@ -321,7 +351,8 @@ module ValuesSparseUnionArrayTests
                      scale: 2,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_month_interval
@@ -330,7 +361,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:month_interval, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_day_time_interval
@@ -339,7 +371,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:day_time_interval, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_month_day_nano_interval
@@ -348,7 +381,8 @@ module ValuesSparseUnionArrayTests
       {"1" => nil},
     ]
     target = build(:month_day_nano_interval, values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_decimal256
@@ -362,7 +396,8 @@ module ValuesSparseUnionArrayTests
                      scale: 2,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_list
@@ -378,7 +413,8 @@ module ValuesSparseUnionArrayTests
                      },
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_struct
@@ -397,7 +433,8 @@ module ValuesSparseUnionArrayTests
                      ],
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_map
@@ -411,7 +448,8 @@ module ValuesSparseUnionArrayTests
                      item: :boolean,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_sparse_union
@@ -436,7 +474,8 @@ module ValuesSparseUnionArrayTests
                      type_codes: [0, 1],
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_dense_union
@@ -461,7 +500,8 @@ module ValuesSparseUnionArrayTests
                      type_codes: [0, 1],
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 
   def test_dictionary
@@ -479,7 +519,8 @@ module ValuesSparseUnionArrayTests
                      ordered: true,
                    },
                    values)
-    assert_equal(values, target.values)
+    assert_equal(remove_field_names(values),
+                 target.values)
   end
 end
 

Reply via email to