# 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 StructDataTypeTest < Test::Unit::TestCase def setup @count_field = Arrow::Field.new("count", :uint32) @visible_field = Arrow::Field.new("visible", :boolean) end sub_test_case(".new") do test("[Arrow::Field]") do fields = [ @count_field, @visible_field, ] assert_equal("struct", Arrow::StructDataType.new(fields).to_s) end test("[Hash]") do fields = [ {name: "count", data_type: :uint32}, {name: "visible", data_type: :boolean}, ] assert_equal("struct", Arrow::StructDataType.new(fields).to_s) end test("[Arrow::Field, Hash]") do fields = [ @count_field, {name: "visible", data_type: :boolean}, ] assert_equal("struct", Arrow::StructDataType.new(fields).to_s) end test("{Arrow::DataType}") do fields = { "count" => Arrow::UInt32DataType.new, "visible" => Arrow::BooleanDataType.new, } assert_equal("struct", Arrow::StructDataType.new(fields).to_s) end test("{Hash}") do fields = { "count" => {type: :uint32}, "visible" => {type: :boolean}, } assert_equal("struct", Arrow::StructDataType.new(fields).to_s) end test("{String, Symbol}") do fields = { "count" => "uint32", "visible" => :boolean, } assert_equal("struct", Arrow::StructDataType.new(fields).to_s) end end sub_test_case("instance methods") do def setup super @data_type = Arrow::StructDataType.new([@count_field, @visible_field]) end sub_test_case("#[]") do test("[String]") do assert_equal([@count_field, @visible_field], [@data_type["count"], @data_type["visible"]]) end test("[Symbol]") do assert_equal([@count_field, @visible_field], [@data_type[:count], @data_type[:visible]]) end test("[Integer]") do assert_equal([@count_field, @visible_field], [@data_type[0], @data_type[1]]) end test("[invalid]") do invalid = [] message = "field name or index must be String, Symbol or Integer" message << ": <#{invalid.inspect}>" assert_raise(ArgumentError.new(message)) do @data_type[invalid] end end end end end