Project

General

Profile

Actions

Bug #15254

closed

Array#slice should not treat the index past the last element as a special case

Added by Malakai97 (Bryan Hockey) over 3 years ago. Updated over 3 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
[ruby-core:89559]

Description

Array#slice should not treat the index past the last element as a special case. This causes Array#slice(start, length) has inconsistent behavior when given out of bounds values for the start parameter. It sometimes returns an array, and sometimes nil.

    describe "inconsistencies starting in past the end" do
      it { @array.slice(5,3).must_equal [] } # passes
      it { @array.slice(6,3).must_equal [] } # returns nil
      it { @array.slice(100,3).must_equal [] } # returns nil
    end

    describe "failures when starting before the start" do
      it { @array.slice(-5,1).must_equal [0] } # passes
      it { @array.slice(-5,5).must_equal @array } # passes
      it { @array.slice(-6,2).must_equal [0] } # returns nil
      it { @array.slice(-6,6).must_equal @array } # returns nil
    end

The attached script contains the minitest tests.


Files

array_slice_start_length_test.rb (645 Bytes) array_slice_start_length_test.rb Malakai97 (Bryan Hockey), 10/25/2018 09:43 PM

Updated by marcandre (Marc-Andre Lafortune) over 3 years ago

  • Status changed from Open to Rejected

This is per spec.

Here's one way to see the start indices:

   [ :a,  :b,  :c   ]
#   ^    ^    ^   ^
#   0    1    2   3
#  -3   -2   -1

Other indices (4, -4) are out of bounds and will result in nil return.

Actions

Also available in: Atom PDF