1 # Licensed to the Apache Software Foundation (ASF) under one
2 # or more contributor license agreements. See the NOTICE file
3 # distributed with this work for additional information
4 # regarding copyright ownership. The ASF licenses this file
5 # to you under the Apache License, Version 2.0 (the
6 # "License"); you may not use this file except in compliance
7 # with the License. You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing,
12 # software distributed under the License is distributed on an
13 # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 # KIND, either express or implied. See the License for the
15 # specific language governing permissions and limitations
18 module ValuesListArrayTests
19 def build_data_type(type
)
24 field_description
= field_description
.merge(type
)
26 field_description
[:type] = type
28 Arrow
::ListDataType.new(field
: field_description
)
31 def build_array(type
, values
)
32 Arrow
::ListArray.new(build_data_type(type
), values
)
40 target
= build(:null, values
)
41 assert_equal(values
, target
.values
)
49 target
= build(:boolean, values
)
50 assert_equal(values
, target
.values
)
55 [-(2 ** 7), nil, (2 ** 7) - 1],
58 target
= build(:int8, values
)
59 assert_equal(values
, target
.values
)
64 [0, nil, (2 ** 8) - 1],
67 target
= build(:uint8, values
)
68 assert_equal(values
, target
.values
)
73 [-(2 ** 15), nil, (2 ** 15) - 1],
76 target
= build(:int16, values
)
77 assert_equal(values
, target
.values
)
82 [0, nil, (2 ** 16) - 1],
85 target
= build(:uint16, values
)
86 assert_equal(values
, target
.values
)
91 [-(2 ** 31), nil, (2 ** 31) - 1],
94 target
= build(:int32, values
)
95 assert_equal(values
, target
.values
)
100 [0, nil, (2 ** 32) - 1],
103 target
= build(:uint32, values
)
104 assert_equal(values
, target
.values
)
109 [-(2 ** 63), nil, (2 ** 63) - 1],
112 target
= build(:int64, values
)
113 assert_equal(values
, target
.values
)
118 [0, nil, (2 ** 64) - 1],
121 target
= build(:uint64, values
)
122 assert_equal(values
, target
.values
)
130 target
= build(:float, values
)
131 assert_equal(values
, target
.values
)
139 target
= build(:double, values
)
140 assert_equal(values
, target
.values
)
145 ["\x00".b
, nil, "\xff".b
],
148 target
= build(:binary, values
)
149 assert_equal(values
, target
.values
)
157 "\u3042", # U+3042 HIRAGANA LETTER A
161 target
= build(:string, values
)
162 assert_equal(values
, target
.values
)
168 Date
.new(1960, 1, 1),
170 Date
.new(2017, 8, 23),
174 target
= build(:date32, values
)
175 assert_equal(values
, target
.values
)
181 DateTime
.new(1960, 1, 1, 2, 9, 30),
183 DateTime
.new(2017, 8, 23, 14, 57, 2),
187 target
= build(:date64, values
)
188 assert_equal(values
, target
.values
)
191 def test_timestamp_second
194 Time
.parse("1960-01-01T02:09:30Z"),
196 Time
.parse("2017-08-23T14:57:02Z"),
205 assert_equal(values
, target
.values
)
208 def test_timestamp_milli
211 Time
.parse("1960-01-01T02:09:30.123Z"),
213 Time
.parse("2017-08-23T14:57:02.987Z"),
222 assert_equal(values
, target
.values
)
225 def test_timestamp_micro
228 Time
.parse("1960-01-01T02:09:30.123456Z"),
230 Time
.parse("2017-08-23T14:57:02.987654Z"),
239 assert_equal(values
, target
.values
)
242 def test_timestamp_nano
245 Time
.parse("1960-01-01T02:09:30.123456789Z"),
247 Time
.parse("2017-08-23T14:57:02.987654321Z"),
256 assert_equal(values
, target
.values
)
259 def test_time32_second
260 unit
= Arrow
::TimeUnit::SECOND
264 Arrow
::Time.new(unit
, 60 * 10),
267 Arrow
::Time.new(unit
, 60 * 60 * 2 + 9),
276 assert_equal(values
, target
.values
)
279 def test_time32_milli
280 unit
= Arrow
::TimeUnit::MILLI
284 Arrow
::Time.new(unit
, (60 * 10) * 1000 + 123),
287 Arrow
::Time.new(unit
, (60 * 60 * 2 + 9) * 1000 + 987),
296 assert_equal(values
, target
.values
)
299 def test_time64_micro
300 unit
= Arrow
::TimeUnit::MICRO
304 Arrow
::Time.new(unit
, (60 * 10) * 1_000_000 + 123_456),
307 Arrow
::Time.new(unit
, (60 * 60 * 2 + 9) * 1_000_000 + 987_654),
316 assert_equal(values
, target
.values
)
320 unit
= Arrow
::TimeUnit::NANO
324 Arrow
::Time.new(unit
, (60 * 10) * 1_000_000_000 + 123_456_789),
327 Arrow
::Time.new(unit
, (60 * 60 * 2 + 9) * 1_000_000_000 + 987_654_321),
336 assert_equal(values
, target
.values
)
354 assert_equal(values
, target
.values
)
372 assert_equal(values
, target
.values
)
398 assert_equal(values
, target
.values
)
420 assert_equal(values
, target
.values
)
426 {"key1" => true, "key2" => nil},
437 assert_equal(values
, target
.values
)
441 omit("Need to add support for SparseUnionArrayBuilder")
465 assert_equal(values
, target
.values
)
469 omit("Need to add support for DenseUnionArrayBuilder")
493 assert_equal(values
, target
.values
)
497 omit("Need to add support for DictionaryArrayBuilder")
506 dictionary
= Arrow
::StringArray.new(["GLib", "Ruby"])
509 index_data_type
: :int8,
510 dictionary
: dictionary
,
514 assert_equal(values
, target
.values
)
518 class ValuesArrayListArrayTest
< Test
::Unit::TestCase
519 include ValuesListArrayTests
521 def build(type
, values
)
522 build_array(type
, values
)
526 class ValuesChunkedArrayListArrayTest
< Test
::Unit::TestCase
527 include ValuesListArrayTests
529 def build(type
, values
)
530 Arrow
::ChunkedArray.new([build_array(type
, values
)])