diff options
Diffstat (limited to 'src/arrow/ruby/red-gandiva/test')
6 files changed, 242 insertions, 0 deletions
diff --git a/src/arrow/ruby/red-gandiva/test/expression-builder/test-add.rb b/src/arrow/ruby/red-gandiva/test/expression-builder/test-add.rb new file mode 100644 index 000000000..d703c4902 --- /dev/null +++ b/src/arrow/ruby/red-gandiva/test/expression-builder/test-add.rb @@ -0,0 +1,54 @@ +# 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 TestExpressionBuilderAdd < Test::Unit::TestCase + def setup + @table = Arrow::Table.new(int32_field: Arrow::Int32Array.new([1]), + int64_field: Arrow::Int64Array.new([2])) + @schema = @table.schema + end + + def build + record = Gandiva::ExpressionBuilder::Record.new(@schema) + builder = yield(record) + builder.build + end + + test("literal") do + node = build do |record| + record.int32_field + (2 ** 63) + end + assert_equal("uint64 add((int32) int32_field, (const uint64) #{2 ** 63})", + node.to_s) + end + + test("int32 + int64") do + node = build do |record| + record.int32_field + record.int64_field + end + assert_equal("int64 add((int32) int32_field, (int64) int64_field)", + node.to_s) + end + + test("int64 + int32") do + node = build do |record| + record.int64_field + record.int32_field + end + assert_equal("int64 add((int64) int64_field, (int32) int32_field)", + node.to_s) + end +end diff --git a/src/arrow/ruby/red-gandiva/test/expression-builder/test-record.rb b/src/arrow/ruby/red-gandiva/test/expression-builder/test-record.rb new file mode 100644 index 000000000..83a1831ba --- /dev/null +++ b/src/arrow/ruby/red-gandiva/test/expression-builder/test-record.rb @@ -0,0 +1,45 @@ +# 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 TestExpressionBuilderRecord < Test::Unit::TestCase + def setup + @table = Arrow::Table.new(field: Arrow::Int32Array.new([1, 13, 3, 17])) + @schema = @table.schema + end + + def build + record = Gandiva::ExpressionBuilder::Record.new(@schema) + builder = yield(record) + builder.build + end + + test("name") do + node = build do |record| + record.field + end + assert_equal("(int32) field", + node.to_s) + end + + test("#[]") do + node = build do |record| + record[:field] + end + assert_equal("(int32) field", + node.to_s) + end +end diff --git a/src/arrow/ruby/red-gandiva/test/helper.rb b/src/arrow/ruby/red-gandiva/test/helper.rb new file mode 100644 index 000000000..9c291f7ae --- /dev/null +++ b/src/arrow/ruby/red-gandiva/test/helper.rb @@ -0,0 +1,20 @@ +# 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. + +require "gandiva" + +require "test-unit" diff --git a/src/arrow/ruby/red-gandiva/test/run-test.rb b/src/arrow/ruby/red-gandiva/test/run-test.rb new file mode 100755 index 000000000..48d2c49e1 --- /dev/null +++ b/src/arrow/ruby/red-gandiva/test/run-test.rb @@ -0,0 +1,50 @@ +#!/usr/bin/env ruby +# +# 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. + +$VERBOSE = true + +require "pathname" + +(ENV["ARROW_DLL_PATH"] || "").split(File::PATH_SEPARATOR).each do |path| + RubyInstaller::Runtime.add_dll_directory(path) +end + +base_dir = Pathname.new(__dir__).parent.expand_path +arrow_base_dir = base_dir.parent + "red-arrow" + +lib_dir = base_dir + "lib" +test_dir = base_dir + "test" + +arrow_lib_dir = arrow_base_dir + "lib" +arrow_ext_dir = arrow_base_dir + "ext" + "arrow" + +build_dir = ENV["BUILD_DIR"] +if build_dir + arrow_build_dir = Pathname.new(build_dir) + "red-arrow" +else + arrow_build_dir = arrow_ext_dir +end + +$LOAD_PATH.unshift(arrow_build_dir.to_s) +$LOAD_PATH.unshift(arrow_lib_dir.to_s) +$LOAD_PATH.unshift(lib_dir.to_s) + +require_relative "helper" + +exit(Test::Unit::AutoRunner.run(true, test_dir.to_s)) diff --git a/src/arrow/ruby/red-gandiva/test/test-boolean-literal-node.rb b/src/arrow/ruby/red-gandiva/test/test-boolean-literal-node.rb new file mode 100644 index 000000000..d79f72994 --- /dev/null +++ b/src/arrow/ruby/red-gandiva/test/test-boolean-literal-node.rb @@ -0,0 +1,24 @@ +# 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 TestBooleanLiteralNode < Test::Unit::TestCase + def test_value + value = true + literal_node = Gandiva::BooleanLiteralNode.new(value) + assert_equal(value, literal_node.value) + end +end diff --git a/src/arrow/ruby/red-gandiva/test/test-projector.rb b/src/arrow/ruby/red-gandiva/test/test-projector.rb new file mode 100644 index 000000000..d618b248a --- /dev/null +++ b/src/arrow/ruby/red-gandiva/test/test-projector.rb @@ -0,0 +1,49 @@ +# 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 TestProjector < Test::Unit::TestCase + def test_evaluate + table = Arrow::Table.new(:field1 => Arrow::Int32Array.new([1, 13, 3, 17]), + :field2 => Arrow::Int32Array.new([11, 2, 15, 17]), + :field3 => Arrow::Int32Array.new([1, 10, 2, 2])) + schema = table.schema + + expression1 = schema.build_expression do |record| + record.field1 + record.field2 + end + + expression2 = schema.build_expression do |record, context| + context.if(record.field1 > record.field2) + .then(record.field1 + record.field2 * record.field3) + .elsif(record.field1 == record.field2) + .then(record.field1 - record.field2 / record.field3) + .else(record.field2) + end + + projector = Gandiva::Projector.new(schema, + [expression1, expression2]) + + table.each_record_batch do |record_batch| + outputs = projector.evaluate(record_batch) + assert_equal([ + [12, 15, 18, 34], + [11, 33, 15, 9] + ], + outputs.collect(&:values)) + end + end +end |