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 ValuesMapArrayTests
19 def build_data_type(item_type
)
20 Arrow
::MapDataType.new(
26 def build_array(item_type
, values
)
27 Arrow
::MapArray.new(build_data_type(item_type
), values
)
35 target
= build(:null, values
)
36 assert_equal(values
, target
.values
)
41 {"key1" => false, "key2" => nil},
44 target
= build(:boolean, values
)
45 assert_equal(values
, target
.values
)
50 {"key1" => (2 ** 7) - 1, "key2" => nil},
53 target
= build(:int8, values
)
54 assert_equal(values
, target
.values
)
59 {"key1" => (2 ** 8) - 1, "key2" => nil},
62 target
= build(:uint8, values
)
63 assert_equal(values
, target
.values
)
68 {"key1" => (2 ** 16) - 1, "key2" => nil},
71 target
= build(:uint16, values
)
72 assert_equal(values
, target
.values
)
77 {"key1" => -(2 ** 31), "key2" => nil},
80 target
= build(:int32, values
)
81 assert_equal(values
, target
.values
)
86 {"key1" => (2 ** 32) - 1, "key2" => nil},
89 target
= build(:uint32, values
)
90 assert_equal(values
, target
.values
)
95 {"key1" => -(2 ** 63), "key2" => nil},
98 target
= build(:int64, values
)
99 assert_equal(values
, target
.values
)
104 {"key1" => (2 ** 64) - 1, "key2" => nil},
107 target
= build(:uint64, values
)
108 assert_equal(values
, target
.values
)
113 {"key1" => -1.0, "key2" => nil},
116 target
= build(:float, values
)
117 assert_equal(values
, target
.values
)
122 {"key1" => -1.0, "key2" => nil},
125 target
= build(:double, values
)
126 assert_equal(values
, target
.values
)
131 {"key1" => "\xff".b
, "key2" => nil},
134 target
= build(:binary, values
)
135 assert_equal(values
, target
.values
)
140 {"key1" => "Ruby", "key2" => nil},
143 target
= build(:string, values
)
144 assert_equal(values
, target
.values
)
149 {"key1" => Date
.new(1960, 1, 1), "key2" => nil},
152 target
= build(:date32, values
)
153 assert_equal(values
, target
.values
)
158 {"key1" => DateTime
.new(1960, 1, 1, 2, 9, 30), "key2" => nil},
161 target
= build(:date64, values
)
162 assert_equal(values
, target
.values
)
165 def test_timestamp_second
167 {"key1" => Time
.parse("1960-01-01T02:09:30Z"), "key2" => nil},
175 assert_equal(values
, target
.values
)
178 def test_timestamp_milli
180 {"key1" => Time
.parse("1960-01-01T02:09:30.123Z"), "key2" => nil},
188 assert_equal(values
, target
.values
)
191 def test_timestamp_micro
193 {"key1" => Time
.parse("1960-01-01T02:09:30.123456Z"), "key2" => nil},
201 assert_equal(values
, target
.values
)
204 def test_timestamp_nano
206 {"key1" => Time
.parse("1960-01-01T02:09:30.123456789Z"), "key2" => nil},
214 assert_equal(values
, target
.values
)
217 def test_time32_second
218 unit
= Arrow
::TimeUnit::SECOND
221 {"key1" => Arrow
::Time.new(unit
, 60 * 10), "key2" => nil},
229 assert_equal(values
, target
.values
)
232 def test_time32_milli
233 unit
= Arrow
::TimeUnit::MILLI
236 {"key1" => Arrow
::Time.new(unit
, (60 * 10) * 1000 + 123), "key2" => nil},
244 assert_equal(values
, target
.values
)
247 def test_time64_micro
248 unit
= Arrow
::TimeUnit::MICRO
251 {"key1" => Arrow
::Time.new(unit
, (60 * 10) * 1_000_000 + 123_456), "key2" => nil},
259 assert_equal(values
, target
.values
)
263 unit
= Arrow
::TimeUnit::NANO
266 {"key1" => Arrow
::Time.new(unit
, (60 * 10) * 1_000_000_000 + 123_456_789), "key2" => nil},
274 assert_equal(values
, target
.values
)
279 {"key1" => BigDecimal("92.92"), "key2" => nil},
288 assert_equal(values
, target
.values
)
293 {"key1" => BigDecimal("92.92"), "key2" => nil},
302 assert_equal(values
, target
.values
)
307 {"key1" => [true, nil, false], "key2" => nil},
318 assert_equal(values
, target
.values
)
323 {"key1" => {"field" => true}, "key2" => nil, "key3" => {"field" => nil}},
336 assert_equal(values
, target
.values
)
341 {"key1" => {"sub_key1" => true, "sub_key2" => nil}, "key2" => nil},
350 assert_equal(values
, target
.values
)
353 def test_sparse_union
354 omit("Need to add support for SparseUnionArrayBuilder")
356 {"key1" => {"field1" => true}, "key2" => nil, "key3" => {"field2" => nil}},
374 assert_equal(values
, target
.values
)
378 omit("Need to add support for DenseUnionArrayBuilder")
380 {"key1" => {"field1" => true}, "key2" => nil, "key3" => {"field2" => nil}},
398 assert_equal(values
, target
.values
)
402 omit("Need to add support for DictionaryArrayBuilder")
404 {"key1" => "Ruby", "key2" => nil, "key3" => "GLib"},
407 dictionary
= Arrow
::StringArray.new(["GLib", "Ruby"])
410 index_data_type
: :int8,
411 dictionary
: dictionary
,
415 assert_equal(values
, target
.values
)
419 class ValuesArrayMapArrayTest
< Test
::Unit::TestCase
420 include ValuesMapArrayTests
422 def build(item_type
, values
)
423 build_array(item_type
, values
)
427 class ValuesChunkedArrayMapArrayTest
< Test
::Unit::TestCase
428 include ValuesMapArrayTests
430 def build(item_type
, values
)
431 Arrow
::ChunkedArray.new([build_array(item_type
, values
)])