| # 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. |
| |
| class FunctionTest < Test::Unit::TestCase |
| sub_test_case("#execute") do |
| test("Arrow::Array") do |
| or_function = Arrow::Function.find("or") |
| args = [ |
| Arrow::BooleanArray.new([true, false, false]), |
| Arrow::BooleanArray.new([true, false, true]), |
| ] |
| assert_equal([true, false, true], |
| or_function.execute(args).value.to_a) |
| end |
| |
| test("Array") do |
| or_function = Arrow::Function.find("or") |
| args = [ |
| [true, false, false], |
| [true, false, true], |
| ] |
| assert_equal([true, false, true], |
| or_function.execute(args).value.to_a) |
| end |
| |
| test("Arrow::ChunkedArray") do |
| or_function = Arrow::Function.find("or") |
| args = [ |
| Arrow::ChunkedArray.new([ |
| Arrow::BooleanArray.new([true]), |
| Arrow::BooleanArray.new([false, false]), |
| ]), |
| Arrow::ChunkedArray.new([ |
| Arrow::BooleanArray.new([true, false]), |
| Arrow::BooleanArray.new([true]), |
| ]), |
| ] |
| assert_equal([true, false, true], |
| or_function.execute(args).value.to_a) |
| end |
| |
| test("Arrow::Column") do |
| or_function = Arrow::Function.find("or") |
| table = Arrow::Table.new(a: [true, false, false], |
| b: [true, false, true]) |
| assert_equal([true, false, true], |
| or_function.execute([table.a, table.b]).value.to_a) |
| end |
| |
| test("Arrow::Scalar") do |
| add_function = Arrow::Function.find("add") |
| args = [ |
| Arrow::Int8Array.new([1, 2, 3]), |
| Arrow::Int8Scalar.new(5), |
| ] |
| assert_equal([6, 7, 8], |
| add_function.execute(args).value.to_a) |
| end |
| |
| test("Integer") do |
| add_function = Arrow::Function.find("add") |
| args = [ |
| [1, 2, 3], |
| 5, |
| ] |
| assert_equal([6, 7, 8], |
| add_function.execute(args).value.to_a) |
| end |
| |
| test("Float") do |
| add_function = Arrow::Function.find("add") |
| args = [ |
| [1, 2, 3], |
| 5.1, |
| ] |
| assert_equal([6.1, 7.1, 8.1], |
| add_function.execute(args).value.to_a) |
| end |
| |
| test("true") do |
| and_function = Arrow::Function.find("and") |
| args = [ |
| Arrow::BooleanArray.new([true, false, false]), |
| true, |
| ] |
| assert_equal([true, false, false], |
| and_function.execute(args).value.to_a) |
| end |
| |
| test("false") do |
| or_function = Arrow::Function.find("or") |
| args = [ |
| Arrow::BooleanArray.new([true, false, false]), |
| false, |
| ] |
| assert_equal([true, false, false], |
| or_function.execute(args).value.to_a) |
| end |
| |
| test("String") do |
| ascii_upper_function = Arrow::Function.find("ascii_upper") |
| args = [ |
| "Hello", |
| ] |
| assert_equal("HELLO", |
| ascii_upper_function.execute(args).value.to_s) |
| end |
| |
| test("Date") do |
| cast_function = Arrow::Function.find("cast") |
| date = Date.new(2021, 6, 12) |
| args = [date] |
| options = { |
| to_data_type: Arrow::TimestampDataType.new(:second), |
| } |
| time = Time.utc(date.year, |
| date.month, |
| date.day) |
| assert_equal(Arrow::TimestampScalar.new(options[:to_data_type], |
| time.to_i), |
| cast_function.execute(args, options).value) |
| end |
| |
| test("Arrow::Time: second") do |
| cast_function = Arrow::Function.find("cast") |
| arrow_time = Arrow::Time.new(Arrow::TimeUnit::SECOND, |
| # 00:10:00 |
| 60 * 10) |
| args = [arrow_time] |
| options = { |
| to_data_type: Arrow::Time64DataType.new(:micro), |
| } |
| assert_equal(Arrow::Time64Scalar.new(options[:to_data_type], |
| # 00:10:00.000000 |
| 60 * 10 * 1000 * 1000), |
| cast_function.execute(args, options).value) |
| end |
| |
| test("Arrow::Time: micro") do |
| cast_function = Arrow::Function.find("cast") |
| arrow_time = Arrow::Time.new(Arrow::TimeUnit::MICRO, |
| # 00:10:00.000000 |
| 60 * 10 * 1000 * 1000) |
| args = [arrow_time] |
| options = { |
| to_data_type: Arrow::Time32DataType.new(:second), |
| allow_time_truncate: true, |
| } |
| assert_equal(Arrow::Time32Scalar.new(options[:to_data_type], |
| # 00:10:00 |
| 60 * 10), |
| cast_function.execute(args, options).value) |
| end |
| |
| test("Time") do |
| cast_function = Arrow::Function.find("cast") |
| time = Time.utc(2021, 6, 12, 1, 2, 3, 1) |
| args = [time] |
| options = { |
| to_data_type: Arrow::TimestampDataType.new(:second), |
| allow_time_truncate: true, |
| } |
| time = Time.utc(time.year, |
| time.month, |
| time.day, |
| time.hour, |
| time.min, |
| time.sec) |
| assert_equal(Arrow::TimestampScalar.new(options[:to_data_type], |
| time.to_i), |
| cast_function.execute(args, options).value) |
| end |
| |
| test("SetLookupOptions") do |
| is_in_function = Arrow::Function.find("is_in") |
| args = [ |
| Arrow::Int16Array.new([1, 0, 1, 2]), |
| ] |
| options = { |
| value_set: Arrow::Int16Array.new([2, 0]), |
| } |
| assert_equal(Arrow::BooleanArray.new([false, true, false, true]), |
| is_in_function.execute(args, options).value) |
| end |
| end |
| |
| def test_call |
| or_function = Arrow::Function.find("or") |
| args = [ |
| Arrow::BooleanArray.new([true, false, false]), |
| Arrow::BooleanArray.new([true, false, true]), |
| ] |
| assert_equal([true, false, true], |
| or_function.call(args).value.to_a) |
| end |
| end |