summaryrefslogtreecommitdiffstats
path: root/src/arrow/c_glib/test/test-array-builder.rb
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-21 11:54:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-21 11:54:28 +0000
commite6918187568dbd01842d8d1d2c808ce16a894239 (patch)
tree64f88b554b444a49f656b6c656111a145cbbaa28 /src/arrow/c_glib/test/test-array-builder.rb
parentInitial commit. (diff)
downloadceph-e6918187568dbd01842d8d1d2c808ce16a894239.tar.xz
ceph-e6918187568dbd01842d8d1d2c808ce16a894239.zip
Adding upstream version 18.2.2.upstream/18.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/arrow/c_glib/test/test-array-builder.rb')
-rw-r--r--src/arrow/c_glib/test/test-array-builder.rb1944
1 files changed, 1944 insertions, 0 deletions
diff --git a/src/arrow/c_glib/test/test-array-builder.rb b/src/arrow/c_glib/test/test-array-builder.rb
new file mode 100644
index 000000000..6bece6367
--- /dev/null
+++ b/src/arrow/c_glib/test/test-array-builder.rb
@@ -0,0 +1,1944 @@
+# 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.
+
+module ArrayBuilderAppendValueBytesTests
+ def test_append
+ builder = create_builder
+ value = "\x00\xff"
+ builder.append_value_bytes(GLib::Bytes.new(value))
+ assert_equal(build_array([value]),
+ builder.finish)
+ end
+end
+
+module ArrayBuilderAppendValuesTests
+ def test_empty
+ builder = create_builder
+ builder.append_values([])
+ assert_equal(build_array([]),
+ builder.finish)
+ end
+
+ def test_values_only
+ builder = create_builder
+ builder.append_values(sample_values)
+ assert_equal(build_array(sample_values),
+ builder.finish)
+ end
+
+ def test_with_is_valids
+ builder = create_builder
+ builder.append_values(sample_values, [true, true, false])
+ actual_sample_values = sample_values.dup
+ actual_sample_values[2] = nil
+ assert_equal(build_array(actual_sample_values),
+ builder.finish)
+ end
+
+ def test_with_large_is_valids
+ builder = create_builder
+ n = 10000
+ large_sample_values = sample_values * n
+ large_is_valids = [true, true, false] * n
+ builder.append_values(large_sample_values, large_is_valids)
+ actual_sample_values = sample_values.dup
+ actual_sample_values[2] = nil
+ actual_large_sample_values = actual_sample_values * n
+ assert_equal(build_array(actual_large_sample_values),
+ builder.finish)
+ end
+
+ def test_mismatch_length
+ builder = create_builder
+ message = "[#{builder_class_name}][append-values]: " +
+ "values length and is_valids length must be equal: <3> != <2>"
+ assert_raise(Arrow::Error::Invalid.new(message)) do
+ builder.append_values(sample_values, [true, true])
+ end
+ end
+end
+
+module ArrayBuilderAppendValuesWithNullTests
+ def test_values_only
+ builder = create_builder
+ builder.append_values(sample_values_with_null)
+ assert_equal(build_array(sample_values_with_null),
+ builder.finish)
+ end
+
+ def test_large_values_only
+ builder = create_builder
+ n = 10000
+ large_sample_values_with_null = sample_values_with_null * n
+ builder.append_values(large_sample_values_with_null)
+ assert_equal(build_array(large_sample_values_with_null),
+ builder.finish)
+ end
+
+ def test_with_is_valids
+ builder = create_builder
+ builder.append_values(sample_values_with_null, [true, true, false])
+ actual_sample_values = sample_values_with_null.dup
+ actual_sample_values[2] = nil
+ assert_equal(build_array(actual_sample_values),
+ builder.finish)
+ end
+
+ def test_with_large_is_valids
+ builder = create_builder
+ n = 10000
+ large_sample_values = sample_values_with_null * n
+ large_is_valids = [true, true, false] * n
+ builder.append_values(large_sample_values, large_is_valids)
+ actual_sample_values = sample_values_with_null.dup
+ actual_sample_values[2] = nil
+ actual_large_sample_values = actual_sample_values * n
+ assert_equal(build_array(actual_large_sample_values),
+ builder.finish)
+ end
+end
+
+module ArrayBuilderAppendValuesPackedTests
+ def test_empty
+ builder = create_builder
+ builder.append_values_packed("")
+ assert_equal(build_array([]),
+ builder.finish)
+ end
+
+ def test_values_only
+ builder = create_builder
+ builder.append_values_packed(pack_values(sample_values))
+ assert_equal(build_array(sample_values),
+ builder.finish)
+ end
+
+ def test_with_is_valids
+ builder = create_builder
+ builder.append_values_packed(pack_values(sample_values),
+ [true, true, false])
+ sample_values_with_null = sample_values
+ sample_values_with_null[2] = nil
+ assert_equal(build_array(sample_values_with_null),
+ builder.finish)
+ end
+
+ def test_with_large_is_valids
+ builder = create_builder
+ n = 10000
+ large_sample_values = sample_values * n
+ large_is_valids = [true, true, false] * n
+ builder.append_values_packed(pack_values(large_sample_values),
+ large_is_valids)
+ sample_values_with_null = sample_values
+ sample_values_with_null[2] = nil
+ large_sample_values_with_null = sample_values_with_null * n
+ assert_equal(build_array(large_sample_values_with_null),
+ builder.finish)
+ end
+
+ def test_mismatch_length
+ builder = create_builder
+ message = "[fixed-size-binary-array-builder][append-values-packed]: " +
+ "the number of values and is_valids length must be equal: <3> != <2>"
+ assert_raise(Arrow::Error::Invalid.new(message)) do
+ builder.append_values_packed(pack_values(sample_values),
+ [true, true])
+ end
+ end
+end
+
+module ArrayBuilderAppendStringsTests
+ def test_empty
+ builder = create_builder
+ builder.append_strings([])
+ assert_equal(build_array([]),
+ builder.finish)
+ end
+
+ def test_strings_only
+ builder = create_builder
+ builder.append_strings(sample_values)
+ assert_equal(build_array(sample_values),
+ builder.finish)
+ end
+
+ def test_with_is_valids
+ builder = create_builder
+ builder.append_strings(sample_values, [true, true, false])
+ sample_values_with_null = sample_values
+ sample_values_with_null[2] = nil
+ assert_equal(build_array(sample_values_with_null),
+ builder.finish)
+ end
+
+ def test_with_large_is_valids
+ builder = create_builder
+ n = 10000
+ large_sample_values = sample_values * n
+ large_is_valids = [true, true, false] * n
+ builder.append_strings(large_sample_values, large_is_valids)
+ sample_values_with_null = sample_values
+ sample_values_with_null[2] = nil
+ large_sample_values_with_null = sample_values_with_null * n
+ assert_equal(build_array(large_sample_values_with_null),
+ builder.finish)
+ end
+
+ def test_mismatch_length
+ builder = create_builder
+ message = "[#{builder_class_name}][append-strings]: " +
+ "values length and is_valids length must be equal: <3> != <2>"
+ assert_raise(Arrow::Error::Invalid.new(message)) do
+ builder.append_strings(sample_values, [true, true])
+ end
+ end
+end
+
+module ArrayBuilderAppendNullsTests
+ def test_zero
+ builder = create_builder
+ builder.append_nulls(0)
+ assert_equal(build_array([]),
+ builder.finish)
+ end
+
+ def test_positive
+ builder = create_builder
+ builder.append_nulls(3)
+ assert_equal(build_array([nil, nil, nil]),
+ builder.finish)
+ end
+
+ def test_negative
+ builder = create_builder
+ message = "[array-builder][append-nulls]: " +
+ "the number of nulls must be 0 or larger: <-1>"
+ assert_raise(Arrow::Error::Invalid.new(message)) do
+ builder.append_nulls(-1)
+ end
+ end
+end
+
+module ArrayBuilderAppendEmptyValueTests
+ def test_append
+ builder = create_builder
+ builder.append_empty_value
+ assert_equal(build_array([empty_value]),
+ builder.finish)
+ end
+end
+
+module ArrayBuilderAppendEmptyValuesTests
+ def test_zero
+ builder = create_builder
+ builder.append_empty_values(0)
+ assert_equal(build_array([]),
+ builder.finish)
+ end
+
+ def test_positive
+ builder = create_builder
+ builder.append_empty_values(3)
+ assert_equal(build_array([empty_value] * 3),
+ builder.finish)
+ end
+
+ def test_negative
+ builder = create_builder
+ message = "[array-builder][append-empty-values]: " +
+ "the number of empty values must be 0 or larger: <-1>"
+ assert_raise(Arrow::Error::Invalid.new(message)) do
+ builder.append_empty_values(-1)
+ end
+ end
+end
+
+module ArrayBuilderValueTypeTests
+ def test_value_data_type
+ assert_equal(value_data_type,
+ build_array(sample_values).value_data_type)
+ end
+
+ def test_value_type
+ assert_equal(value_data_type.id,
+ build_array(sample_values).value_type)
+ end
+end
+
+module ArrayBuilderCapacityControlTests
+ def test_resize
+ builder = create_builder
+ before_capacity = builder.capacity
+ builder.resize(before_capacity + 100)
+ after_capacity = builder.capacity
+
+ assert do
+ after_capacity >= before_capacity + 100
+ end
+ end
+
+ def test_reserve
+ builder = create_builder
+ before_capacity = builder.capacity
+ builder.reserve(100)
+ after_capacity = builder.capacity
+
+ assert do
+ after_capacity >= before_capacity + 100
+ end
+ end
+end
+
+module ArrayBuilderLengthTests
+ def test_length
+ builder = create_builder
+ sample_values_with_null = sample_values
+ sample_values_with_null[2, 0] = nil
+ lengths = [builder.length]
+ sample_values_with_null.each do |value|
+ if value.nil?
+ builder.append_null
+ else
+ builder.append_value(value)
+ end
+ lengths << builder.length
+ end
+ expected_lengths = [*0 ... (sample_values_with_null.length+1)]
+ assert_equal(expected_lengths,
+ lengths)
+ end
+end
+
+module ArrayBuilderNNullsTests
+ def test_n_nulls
+ builder = create_builder
+ sample_values_with_null = sample_values
+ sample_values_with_null[2, 0] = nil
+ null_counts = [builder.n_nulls]
+ sample_values_with_null.each do |value|
+ if value.nil?
+ builder.append_null
+ else
+ builder.append_value(value)
+ end
+ null_counts << builder.n_nulls
+ end
+ expected_null_counts = [0, 0, 0] + [1] * (sample_values_with_null.length - 2)
+ assert_equal(expected_null_counts,
+ null_counts)
+ end
+end
+
+class TestArrayBuilder < Test::Unit::TestCase
+ include Helper::Buildable
+ include Helper::Omittable
+
+ def setup
+ require_gi_bindings(3, 1, 9)
+ end
+
+ def build_array(values)
+ super(create_builder, values)
+ end
+
+ sub_test_case("NullArrayBuilder") do
+ def create_builder
+ Arrow::NullArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::NullDataType.new
+ end
+
+ def builder_class_name
+ "null-array-builder"
+ end
+
+ def sample_values
+ [nil, nil, nil]
+ end
+
+ def empty_value
+ nil
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ test("#append_null") do
+ builder = create_builder
+ builder.append_null
+ assert_equal(build_array([nil]),
+ builder.finish)
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ test("#length") do
+ builder = create_builder
+ before = builder.length
+ builder.append_null
+ after = builder.length
+ assert_equal(1,
+ after - before)
+ end
+
+ test("#n_nulls") do
+ builder = create_builder
+ before = builder.length
+ builder.append_null
+ after = builder.length
+ assert_equal(1,
+ after - before)
+ end
+ end
+
+ sub_test_case("BooleanArrayBuilder") do
+ def create_builder
+ Arrow::BooleanArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::BooleanDataType.new
+ end
+
+ def builder_class_name
+ "boolean-array-builder"
+ end
+
+ def sample_values
+ [true, false, true]
+ end
+
+ def empty_value
+ false
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("IntArrayBuilder") do
+ def create_builder
+ Arrow::IntArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::Int8DataType.new
+ end
+
+ def builder_class_name
+ "int-array-builder"
+ end
+
+ def sample_values
+ [1, -2, 3]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("UIntArrayBuilder") do
+ def create_builder
+ Arrow::UIntArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::UInt8DataType.new
+ end
+
+ def builder_class_name
+ "uint-array-builder"
+ end
+
+ def sample_values
+ [1, 2, 3]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("Int8ArrayBuilder") do
+ def create_builder
+ Arrow::Int8ArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::Int8DataType.new
+ end
+
+ def builder_class_name
+ "int8-array-builder"
+ end
+
+ def sample_values
+ [1, -2, 3]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("UInt8ArrayBuilder") do
+ def create_builder
+ Arrow::UInt8ArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::UInt8DataType.new
+ end
+
+ def builder_class_name
+ "uint8-array-builder"
+ end
+
+ def sample_values
+ [1, 2, 3]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("Int16ArrayBuilder") do
+ def create_builder
+ Arrow::Int16ArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::Int16DataType.new
+ end
+
+ def builder_class_name
+ "int16-array-builder"
+ end
+
+ def sample_values
+ [1, -2, 3]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("UInt16ArrayBuilder") do
+ def create_builder
+ Arrow::UInt16ArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::UInt16DataType.new
+ end
+
+ def builder_class_name
+ "uint16-array-builder"
+ end
+
+ def sample_values
+ [1, 2, 3]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("Int32ArrayBuilder") do
+ def create_builder
+ Arrow::Int32ArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::Int32DataType.new
+ end
+
+ def builder_class_name
+ "int32-array-builder"
+ end
+
+ def sample_values
+ [1, -2, 3]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("UInt32ArrayBuilder") do
+ def create_builder
+ Arrow::UInt32ArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::UInt32DataType.new
+ end
+
+ def builder_class_name
+ "uint32-array-builder"
+ end
+
+ def sample_values
+ [1, 2, 3]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("Int64ArrayBuilder") do
+ def create_builder
+ Arrow::Int64ArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::Int64DataType.new
+ end
+
+ def builder_class_name
+ "int64-array-builder"
+ end
+
+ def sample_values
+ [1, -2, 3]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("UInt64ArrayBuilder") do
+ def create_builder
+ Arrow::UInt64ArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::UInt64DataType.new
+ end
+
+ def builder_class_name
+ "uint64-array-builder"
+ end
+
+ def sample_values
+ [1, 2, 3]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("FloatArrayBuilder") do
+ def create_builder
+ Arrow::FloatArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::FloatDataType.new
+ end
+
+ def builder_class_name
+ "float-array-builder"
+ end
+
+ def sample_values
+ [1.1, -2.2, 3.3]
+ end
+
+ def empty_value
+ 0.0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("DoubleArrayBuilder") do
+ def create_builder
+ Arrow::DoubleArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::DoubleDataType.new
+ end
+
+ def builder_class_name
+ "double-array-builder"
+ end
+
+ def sample_values
+ [1.1, -2.2, 3.3]
+ end
+
+ def empty_value
+ 0.0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("Date32ArrayBuilder") do
+ def create_builder
+ Arrow::Date32ArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::Date32DataType.new
+ end
+
+ def builder_class_name
+ "date32-array-builder"
+ end
+
+ def sample_values
+ [
+ 0, # epoch
+ 17406, # 2017-08-28
+ 17427, # 2017-09-18
+ ]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("Date64ArrayBuilder") do
+ def create_builder
+ Arrow::Date64ArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::Date64DataType.new
+ end
+
+ def builder_class_name
+ "date64-array-builder"
+ end
+
+ def sample_values
+ [
+ -315619200, # 1960-01-01T00:00:00Z
+ 0, # epoch
+ 1503878400000, # 2017-08-28T00:00:00Z
+ ]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("TimestampArrayBuilder") do
+ def create_builder
+ data_type = Arrow::TimestampDataType.new(:milli)
+ Arrow::TimestampArrayBuilder.new(data_type)
+ end
+
+ def value_data_type
+ Arrow::TimestampDataType.new(:milli)
+ end
+
+ def builder_class_name
+ "timestamp-array-builder"
+ end
+
+ def sample_values
+ [
+ 0, # epoch
+ 1504953190854, # 2017-09-09T10:33:10.854Z
+ 1505660812942, # 2017-09-17T15:06:52.942Z
+ ]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("Time32ArrayBuilder") do
+ def create_builder
+ data_type = Arrow::Time32DataType.new(:second)
+ Arrow::Time32ArrayBuilder.new(data_type)
+ end
+
+ def value_data_type
+ Arrow::Time32DataType.new(:second)
+ end
+
+ def builder_class_name
+ "time32-array-builder"
+ end
+
+ def sample_values
+ [
+ 0, # midnight
+ 60 * 10, # 00:10:00
+ 60 * 60 * 2 + 30, # 02:00:30
+ ]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("Time64ArrayBuilder") do
+ def create_builder
+ data_type = Arrow::Time64DataType.new(:micro)
+ Arrow::Time64ArrayBuilder.new(data_type)
+ end
+
+ def value_data_type
+ Arrow::Time64DataType.new(:micro)
+ end
+
+ def builder_class_name
+ "time64-array-builder"
+ end
+
+ def sample_values
+ [
+ 0, # midnight
+ 60 * 10 * 1000 * 1000, # 00:10:00.000000
+ (60 * 60 * 2 + 30) * 1000 * 1000, # 02:00:30.000000
+ ]
+ end
+
+ def empty_value
+ 0
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("BinaryArrayBuilder") do
+ def create_builder
+ Arrow::BinaryArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::BinaryDataType.new
+ end
+
+ def builder_class_name
+ "binary-array-builder"
+ end
+
+ def sample_values
+ [
+ "\x00\x01",
+ "\xfe\xff",
+ "",
+ ]
+ end
+
+ def empty_value
+ ""
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_value_bytes") do
+ include ArrayBuilderAppendValueBytesTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+
+ def setup
+ require_gi_bindings(3, 4, 1)
+ end
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("LargeBinaryArrayBuilder") do
+ def create_builder
+ Arrow::LargeBinaryArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::LargeBinaryDataType.new
+ end
+
+ def builder_class_name
+ "large-binary-array-builder"
+ end
+
+ def sample_values
+ [
+ "\x00\x01",
+ "\xfe\xff",
+ "",
+ ]
+ end
+
+ def empty_value
+ ""
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_value_bytes") do
+ include ArrayBuilderAppendValueBytesTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+
+ def setup
+ require_gi_bindings(3, 4, 1)
+ end
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("StringArrayBuilder") do
+ def create_builder
+ Arrow::StringArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::StringDataType.new
+ end
+
+ def builder_class_name
+ "string-array-builder"
+ end
+
+ def sample_values
+ [
+ "hello",
+ "world!!",
+ "",
+ ]
+ end
+
+ def empty_value
+ ""
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+
+ def setup
+ require_gi_bindings(3, 4, 1)
+ end
+
+ def builder_class_name
+ "binary-array-builder"
+ end
+ end
+
+ sub_test_case("#append_strings") do
+ include ArrayBuilderAppendStringsTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("LargeStringArrayBuilder") do
+ def create_builder
+ Arrow::LargeStringArrayBuilder.new
+ end
+
+ def value_data_type
+ Arrow::LargeStringDataType.new
+ end
+
+ def builder_class_name
+ "large-string-array-builder"
+ end
+
+ def sample_values
+ [
+ "hello",
+ "world!!",
+ "",
+ ]
+ end
+
+ def empty_value
+ ""
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+
+ def setup
+ require_gi_bindings(3, 4, 1)
+ end
+
+ def builder_class_name
+ "large-binary-array-builder"
+ end
+ end
+
+ sub_test_case("#append_strings") do
+ include ArrayBuilderAppendStringsTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("FixedSizeBinaryArrayBuilder") do
+ def create_builder
+ Arrow::FixedSizeBinaryArrayBuilder.new(value_data_type)
+ end
+
+ def value_data_type
+ Arrow::FixedSizeBinaryDataType.new(4)
+ end
+
+ def builder_class_name
+ "fixed-size-binary-array-builder"
+ end
+
+ def sample_values
+ [
+ "0123",
+ "abcd",
+ "\x0\x0\x0\x0".b,
+ ]
+ end
+
+ def sample_values_with_null
+ [
+ "0123",
+ nil,
+ "\x0\x0\x0\x0".b,
+ ]
+ end
+
+ def pack_values(values)
+ values.join("")
+ end
+
+ def empty_value
+ "\x0\x0\x0\x0"
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_value") do
+ test("nil") do
+ builder = create_builder
+ builder.append_value(nil)
+ assert_equal(build_array([nil]),
+ builder.finish)
+ end
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ include ArrayBuilderAppendValuesWithNullTests
+ end
+
+ sub_test_case("#append_values_packed") do
+ include ArrayBuilderAppendValuesPackedTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("Decimal128ArrayBuilder") do
+ def create_builder
+ Arrow::Decimal128ArrayBuilder.new(value_data_type)
+ end
+
+ def value_data_type
+ Arrow::Decimal128DataType.new(8, 2)
+ end
+
+ def builder_class_name
+ "decimal128-array-builder"
+ end
+
+ def sample_values
+ [
+ Arrow::Decimal128.new("23423445"),
+ Arrow::Decimal128.new("00012345"),
+ Arrow::Decimal128.new("00000000"),
+ ]
+ end
+
+ def sample_values_with_null
+ [
+ Arrow::Decimal128.new("23423445"),
+ nil,
+ Arrow::Decimal128.new("00000000"),
+ ]
+ end
+
+ def pack_values(values)
+ values.collect(&:to_bytes).collect(&:to_s).join("")
+ end
+
+ def empty_value
+ Arrow::Decimal128.new("0")
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_value") do
+ test("nil") do
+ builder = create_builder
+ builder.append_value(nil)
+ assert_equal(build_array([nil]),
+ builder.finish)
+ end
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ include ArrayBuilderAppendValuesWithNullTests
+ end
+
+ sub_test_case("#append_values_packed") do
+ include ArrayBuilderAppendValuesPackedTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+
+ sub_test_case("Decimal256ArrayBuilder") do
+ def create_builder
+ Arrow::Decimal256ArrayBuilder.new(value_data_type)
+ end
+
+ def value_data_type
+ Arrow::Decimal256DataType.new(38, 2)
+ end
+
+ def builder_class_name
+ "decimal256-array-builder"
+ end
+
+ def sample_values
+ [
+ Arrow::Decimal256.new("23423445"),
+ Arrow::Decimal256.new("00012345"),
+ Arrow::Decimal256.new("00000000"),
+ ]
+ end
+
+ def sample_values_with_null
+ [
+ Arrow::Decimal256.new("23423445"),
+ nil,
+ Arrow::Decimal256.new("00000000"),
+ ]
+ end
+
+ def pack_values(values)
+ values.collect(&:to_bytes).collect(&:to_s).join("")
+ end
+
+ def empty_value
+ Arrow::Decimal256.new("0")
+ end
+
+ sub_test_case("value type") do
+ include ArrayBuilderValueTypeTests
+ end
+
+ sub_test_case("#append_value") do
+ test("nil") do
+ builder = create_builder
+ builder.append_value(nil)
+ assert_equal(build_array([nil]),
+ builder.finish)
+ end
+ end
+
+ sub_test_case("#append_values") do
+ include ArrayBuilderAppendValuesTests
+ include ArrayBuilderAppendValuesWithNullTests
+ end
+
+ sub_test_case("#append_values_packed") do
+ include ArrayBuilderAppendValuesPackedTests
+ end
+
+ sub_test_case("#append_nulls") do
+ include ArrayBuilderAppendNullsTests
+ end
+
+ sub_test_case("#append_empty_value") do
+ include ArrayBuilderAppendEmptyValueTests
+ end
+
+ sub_test_case("#append_empty_values") do
+ include ArrayBuilderAppendEmptyValuesTests
+ end
+
+ sub_test_case("capacity control") do
+ include ArrayBuilderCapacityControlTests
+ end
+
+ sub_test_case("#length") do
+ include ArrayBuilderLengthTests
+ end
+
+ sub_test_case("#n_nulls") do
+ include ArrayBuilderNNullsTests
+ end
+ end
+end