diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
commit | e6918187568dbd01842d8d1d2c808ce16a894239 (patch) | |
tree | 64f88b554b444a49f656b6c656111a145cbbaa28 /src/arrow/c_glib/test/test-array-builder.rb | |
parent | Initial commit. (diff) | |
download | ceph-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.rb | 1944 |
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 |