Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/net/imap/sequence_set.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2420,7 +2420,7 @@ def reverse_each_minmax_with_index(minmaxes)
def slice_length(start, length)
start = Integer(start.to_int)
length = Integer(length.to_int)
raise ArgumentError, "length must be positive" unless length.positive?
raise ArgumentError, "length must not be negative" if length.negative?
stop = start + length unless start.negative? && start.abs <= length
slice_range(start...stop)
end
Expand Down
20 changes: 7 additions & 13 deletions test/net/imap/test_sequence_set.rb
Original file line number Diff line number Diff line change
Expand Up @@ -492,16 +492,10 @@ def pend_slice_bug(what, &) = pend("#slice bug: #{what}", &)
def pend_slice_neg_len(&)
pend_slice_bug("allow negative length", &)
assert_raise_with_message(ArgumentError,
"length must be positive",
"length must not be negative",
&)
end

def pend_slice_zero_len(&)
pend_slice_bug("allow zero length", &)
assert_raise_with_message(ArgumentError,
"length must be positive",
&)
end

test "#slice(start, length) -> nil, for negative length" do
set = SequenceSet[1...200]
Expand All @@ -511,22 +505,22 @@ def pend_slice_zero_len(&)

test "#slice(start, length) -> nil, for invalid start" do
set = SequenceSet[1..100]
pend_slice_zero_len do assert_nil set[ 101, 0] end
assert_nil set[ 101, 0]
assert_nil set[ 101, 1]
assert_nil set[ 101, 9]
pend_slice_zero_len do assert_nil set[-101, 0] end
assert_nil set[-101, 0]
assert_nil set[-101, 1]
assert_nil set[-101, 9]

set = SequenceSet[*((10..100) % 10)]
assert_nil set[-11, 1]
pend_slice_zero_len do assert_nil set[-11, 0] end
assert_nil set[-11, 0]
end

test "#slice(start, length) -> empty, for valid start but zero length" do
set = SequenceSet[1...200]
pend_slice_zero_len do assert_same SequenceSet.empty, set[ 100, 0] end
pend_slice_zero_len do assert_same SequenceSet.empty, set[-100, 0] end
assert_same SequenceSet.empty, set[ 100, 0]
assert_same SequenceSet.empty, set[-100, 0]
end

test "#[range] -> set, for valid range" do
Expand Down Expand Up @@ -613,7 +607,7 @@ def pend_slice_zero_len(&)
assert_equal SequenceSet[ 100], set[ 9, 4]
assert_equal SequenceSet[ 100], set[-1, 4]
# when positive start == cardinality
pend_slice_zero_len do assert_equal SequenceSet.empty, set[10, 0] end
assert_equal SequenceSet.empty, set[10, 0]
assert_equal SequenceSet.empty, set[10, 4]
assert_equal SequenceSet.empty, set[10...10]
assert_equal SequenceSet.empty, set[10.. 10]
Expand Down
Loading