This is an automated email from the ASF dual-hosted git repository.
shiro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new 0c340b4 ARROW-4593: [Ruby] Arrow::Array#[out_of_range] returns nil
0c340b4 is described below
commit 0c340b4a4a1bcd71c3c1a97415d6c06ceaf43c2d
Author: Kouhei Sutou <[email protected]>
AuthorDate: Sun Feb 17 10:03:52 2019 +0900
ARROW-4593: [Ruby] Arrow::Array#[out_of_range] returns nil
Author: Kouhei Sutou <[email protected]>
Closes #3666 from kou/ruby-array-ref-out-of-range and squashes the
following commits:
f64df5b5 <Kouhei Sutou> Array# returns nil
---
ruby/red-arrow/lib/arrow/array.rb | 10 ++++++++++
ruby/red-arrow/test/test-array.rb | 33 ++++++++++++++++++++++++---------
2 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/ruby/red-arrow/lib/arrow/array.rb
b/ruby/red-arrow/lib/arrow/array.rb
index 359e70e..f60025a 100644
--- a/ruby/red-arrow/lib/arrow/array.rb
+++ b/ruby/red-arrow/lib/arrow/array.rb
@@ -35,8 +35,18 @@ module Arrow
end
end
+ # @param i [Integer]
+ # The index of the value to be gotten.
+ #
+ # You can specify negative index like for `::Array#[]`.
+ #
+ # @return [Object, nil]
+ # The `i`-th value.
+ #
+ # `nil` for NULL value or out of range `i`.
def [](i)
i += length if i < 0
+ return nil if i < 0 or i >= length
if null?(i)
nil
else
diff --git a/ruby/red-arrow/test/test-array.rb
b/ruby/red-arrow/test/test-array.rb
index 31e6eaf..3dd7635 100644
--- a/ruby/red-arrow/test/test-array.rb
+++ b/ruby/red-arrow/test/test-array.rb
@@ -24,15 +24,30 @@ class ArrayTest < Test::Unit::TestCase
end
end
- test("#each") do
- array = Arrow::BooleanArray.new([true, false, nil, true])
- assert_equal([true, false, nil, true],
- array.to_a)
- end
+ sub_test_case("instance methods") do
+ def setup
+ @values = [true, false, nil, true]
+ @array = Arrow::BooleanArray.new(@values)
+ end
+
+ test("#each") do
+ assert_equal(@values, @array.to_a)
+ end
- test("#[]") do
- array = Arrow::BooleanArray.new([true, false, nil, true])
- assert_equal([true, false, nil, true],
- [array[0], array[1], array[2], array[3]])
+ sub_test_case("#[]") do
+ test("valid range") do
+ assert_equal(@values,
+ @array.length.times.collect {|i| @array[i]})
+ end
+
+ test("out of range") do
+ assert_nil(@array[@array.length])
+ end
+
+ test("negative index") do
+ assert_equal(@values.last,
+ @array[-1])
+ end
+ end
end
end