# 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