]> git.proxmox.com Git - ceph.git/blame - ceph/src/arrow/ruby/red-arrow/test/test-memory-view.rb
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / ruby / red-arrow / test / test-memory-view.rb
CommitLineData
1d09f67e
TL
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
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
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
16# under the License.
17
18class MemoryViewTest < Test::Unit::TestCase
19 def setup
20 unless Fiddle.const_defined?(:MemoryView)
21 omit("Fiddle::MemoryView is needed")
22 end
23 unless Fiddle::MemoryView.respond_to?(:export)
24 omit("Fiddle::MemoryView.export is needed")
25 end
26 end
27
28 def little_endian?
29 [1].pack("s") == [1].pack("s<")
30 end
31
32 test("BooleanArray") do
33 array = Arrow::BooleanArray.new([true] * 9)
34 Fiddle::MemoryView.export(array) do |memory_view|
35 if little_endian?
36 template = "b"
37 else
38 template = "B"
39 end
40 assert_equal([
41 "#{template}8",
42 1,
43 2,
44 [(("1" * 9) + ("0" * 7))].pack("#{template}*"),
45 ],
46 [
47 memory_view.format,
48 memory_view.item_size,
49 memory_view.byte_size,
50 memory_view.to_s,
51 ])
52 end
53 end
54
55 test("Int8Array") do
56 values = [-(2 ** 7), 0, (2 ** 7) - 1]
57 array = Arrow::Int8Array.new(values)
58 Fiddle::MemoryView.export(array) do |memory_view|
59 assert_equal([
60 "c",
61 1,
62 values.size,
63 values.pack("c*"),
64 ],
65 [
66 memory_view.format,
67 memory_view.item_size,
68 memory_view.byte_size,
69 memory_view.to_s,
70 ])
71 end
72 end
73
74 test("Int16Array") do
75 values = [-(2 ** 15), 0, (2 ** 15) - 1]
76 array = Arrow::Int16Array.new(values)
77 Fiddle::MemoryView.export(array) do |memory_view|
78 assert_equal([
79 "s",
80 2,
81 2 * values.size,
82 values.pack("s*"),
83 ],
84 [
85 memory_view.format,
86 memory_view.item_size,
87 memory_view.byte_size,
88 memory_view.to_s,
89 ])
90 end
91 end
92
93 test("Int32Array") do
94 values = [-(2 ** 31), 0, (2 ** 31) - 1]
95 array = Arrow::Int32Array.new(values)
96 Fiddle::MemoryView.export(array) do |memory_view|
97 assert_equal([
98 "l",
99 4,
100 4 * values.size,
101 values.pack("l*"),
102 ],
103 [
104 memory_view.format,
105 memory_view.item_size,
106 memory_view.byte_size,
107 memory_view.to_s,
108 ])
109 end
110 end
111
112 test("Int64Array") do
113 values = [-(2 ** 63), 0, (2 ** 63) - 1]
114 array = Arrow::Int64Array.new(values)
115 Fiddle::MemoryView.export(array) do |memory_view|
116 assert_equal([
117 "q",
118 8,
119 8 * values.size,
120 values.pack("q*"),
121 ],
122 [
123 memory_view.format,
124 memory_view.item_size,
125 memory_view.byte_size,
126 memory_view.to_s,
127 ])
128 end
129 end
130
131 test("UInt8Array") do
132 values = [0, (2 ** 8) - 1]
133 array = Arrow::UInt8Array.new(values)
134 Fiddle::MemoryView.export(array) do |memory_view|
135 assert_equal([
136 "C",
137 1,
138 values.size,
139 values.pack("C*"),
140 ],
141 [
142 memory_view.format,
143 memory_view.item_size,
144 memory_view.byte_size,
145 memory_view.to_s,
146 ])
147 end
148 end
149
150 test("UInt16Array") do
151 values = [0, (2 ** 16) - 1]
152 array = Arrow::UInt16Array.new(values)
153 Fiddle::MemoryView.export(array) do |memory_view|
154 assert_equal([
155 "S",
156 2,
157 2 * values.size,
158 values.pack("S*"),
159 ],
160 [
161 memory_view.format,
162 memory_view.item_size,
163 memory_view.byte_size,
164 memory_view.to_s,
165 ])
166 end
167 end
168
169 test("UInt32Array") do
170 values = [0, (2 ** 32) - 1]
171 array = Arrow::UInt32Array.new(values)
172 Fiddle::MemoryView.export(array) do |memory_view|
173 assert_equal([
174 "L",
175 4,
176 4 * values.size,
177 values.pack("L*"),
178 ],
179 [
180 memory_view.format,
181 memory_view.item_size,
182 memory_view.byte_size,
183 memory_view.to_s,
184 ])
185 end
186 end
187
188 test("UInt64Array") do
189 values = [(2 ** 64) - 1]
190 array = Arrow::UInt64Array.new(values)
191 Fiddle::MemoryView.export(array) do |memory_view|
192 assert_equal([
193 "Q",
194 8,
195 8 * values.size,
196 values.pack("Q*"),
197 ],
198 [
199 memory_view.format,
200 memory_view.item_size,
201 memory_view.byte_size,
202 memory_view.to_s,
203 ])
204 end
205 end
206
207 test("FloatArray") do
208 values = [-1.1, 0.0, 1.1]
209 array = Arrow::FloatArray.new(values)
210 Fiddle::MemoryView.export(array) do |memory_view|
211 assert_equal([
212 "f",
213 4,
214 4 * values.size,
215 values.pack("f*"),
216 ],
217 [
218 memory_view.format,
219 memory_view.item_size,
220 memory_view.byte_size,
221 memory_view.to_s,
222 ])
223 end
224 end
225
226 test("DoubleArray") do
227 values = [-1.1, 0.0, 1.1]
228 array = Arrow::DoubleArray.new(values)
229 Fiddle::MemoryView.export(array) do |memory_view|
230 assert_equal([
231 "d",
232 8,
233 8 * values.size,
234 values.pack("d*"),
235 ],
236 [
237 memory_view.format,
238 memory_view.item_size,
239 memory_view.byte_size,
240 memory_view.to_s,
241 ])
242 end
243 end
244
245 test("FixedSizeBinaryArray") do
246 values = ["\x01\x02", "\x03\x04", "\x05\x06"]
247 data_type = Arrow::FixedSizeBinaryDataType.new(2)
248 array = Arrow::FixedSizeBinaryArray.new(data_type, values)
249 Fiddle::MemoryView.export(array) do |memory_view|
250 assert_equal([
251 "C2",
252 2,
253 2 * values.size,
254 values.join("").b,
255 ],
256 [
257 memory_view.format,
258 memory_view.item_size,
259 memory_view.byte_size,
260 memory_view.to_s,
261 ])
262 end
263 end
264
265 test("Date32Array") do
266 n_days_since_epoch = 17406 # 2017-08-28
267 values = [n_days_since_epoch]
268 array = Arrow::Date32Array.new(values)
269 Fiddle::MemoryView.export(array) do |memory_view|
270 assert_equal([
271 "l",
272 4,
273 4 * values.size,
274 values.pack("l*"),
275 ],
276 [
277 memory_view.format,
278 memory_view.item_size,
279 memory_view.byte_size,
280 memory_view.to_s,
281 ])
282 end
283 end
284
285 test("Date64Array") do
286 n_msecs_since_epoch = 1503878400000 # 2017-08-28T00:00:00Z
287 values = [n_msecs_since_epoch]
288 array = Arrow::Date64Array.new(values)
289 Fiddle::MemoryView.export(array) do |memory_view|
290 assert_equal([
291 "q",
292 8,
293 8 * values.size,
294 values.pack("q*"),
295 ],
296 [
297 memory_view.format,
298 memory_view.item_size,
299 memory_view.byte_size,
300 memory_view.to_s,
301 ])
302 end
303 end
304
305 test("Time32Array") do
306 values = [1, 2, 3]
307 array = Arrow::Time32Array.new(:milli, values)
308 Fiddle::MemoryView.export(array) do |memory_view|
309 assert_equal([
310 "l",
311 4,
312 4 * values.size,
313 values.pack("l*"),
314 ],
315 [
316 memory_view.format,
317 memory_view.item_size,
318 memory_view.byte_size,
319 memory_view.to_s,
320 ])
321 end
322 end
323
324 test("Time64Array") do
325 values = [1, 2, 3]
326 array = Arrow::Time64Array.new(:nano, values)
327 Fiddle::MemoryView.export(array) do |memory_view|
328 assert_equal([
329 "q",
330 8,
331 8 * values.size,
332 values.pack("q*"),
333 ],
334 [
335 memory_view.format,
336 memory_view.item_size,
337 memory_view.byte_size,
338 memory_view.to_s,
339 ])
340 end
341 end
342
343 test("TimestampArray") do
344 values = [1, 2, 3]
345 array = Arrow::TimestampArray.new(:micro, values)
346 Fiddle::MemoryView.export(array) do |memory_view|
347 assert_equal([
348 "q",
349 8,
350 8 * values.size,
351 values.pack("q*"),
352 ],
353 [
354 memory_view.format,
355 memory_view.item_size,
356 memory_view.byte_size,
357 memory_view.to_s,
358 ])
359 end
360 end
361
362 test("Decimal128Array") do
363 values = [
364 Arrow::Decimal128.new("10.1"),
365 Arrow::Decimal128.new("11.1"),
366 Arrow::Decimal128.new("10.2"),
367 ]
368 data_type = Arrow::Decimal128DataType.new(3, 1)
369 array = Arrow::Decimal128Array.new(data_type, values)
370 Fiddle::MemoryView.export(array) do |memory_view|
371 assert_equal([
372 "q2",
373 16,
374 16 * values.size,
375 values.collect {|value| value.to_bytes.to_s}.join(""),
376 ],
377 [
378 memory_view.format,
379 memory_view.item_size,
380 memory_view.byte_size,
381 memory_view.to_s,
382 ])
383 end
384 end
385
386 test("Decimal256Array") do
387 values = [
388 Arrow::Decimal256.new("10.1"),
389 Arrow::Decimal256.new("11.1"),
390 Arrow::Decimal256.new("10.2"),
391 ]
392 data_type = Arrow::Decimal256DataType.new(3, 1)
393 array = Arrow::Decimal256Array.new(data_type, values)
394 Fiddle::MemoryView.export(array) do |memory_view|
395 assert_equal([
396 "q4",
397 32,
398 32 * values.size,
399 values.collect {|value| value.to_bytes.to_s}.join(""),
400 ],
401 [
402 memory_view.format,
403 memory_view.item_size,
404 memory_view.byte_size,
405 memory_view.to_s,
406 ])
407 end
408 end
409
410 test("Buffer") do
411 values = [0, nil, nil] * 3
412 array = Arrow::Int8Array.new(values)
413 buffer = array.null_bitmap
414 Fiddle::MemoryView.export(buffer) do |memory_view|
415 if little_endian?
416 template = "b"
417 else
418 template = "B"
419 end
420 assert_equal([
421 "#{template}8",
422 1,
423 2,
424 ["100" * 3].pack("#{template}*"),
425 ],
426 [
427 memory_view.format,
428 memory_view.item_size,
429 memory_view.byte_size,
430 memory_view.to_s,
431 ])
432 end
433 end
434end