blob: 35aa2461370ab4f75931572288a6532f8f920e82 [file] [log] [blame]
# 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