mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #550 from iij/pr-string-slice-boundary-error
fix the issue String#slice with Range may return broken String.
This commit is contained in:
+1
-1
@@ -286,7 +286,7 @@ mrb_range_beg_len(mrb_state *mrb, mrb_value range, mrb_int *begp, mrb_int *lenp,
|
||||
if (end > len) end = len;
|
||||
}
|
||||
if (end < 0) end += len;
|
||||
if (!r->excl) end++; /* include end point */
|
||||
if (!r->excl && end < len) end++; /* include end point */
|
||||
len = end - beg;
|
||||
if (len < 0) len = 0;
|
||||
|
||||
|
||||
@@ -61,6 +61,32 @@ assert('String#[]', '15.2.10.5.6') do
|
||||
a3 == 'bc' and b3 == nil
|
||||
end
|
||||
|
||||
assert('String#[] with Range') do
|
||||
a1 = 'abc'[1..0]
|
||||
b1 = 'abc'[1..1]
|
||||
c1 = 'abc'[1..2]
|
||||
d1 = 'abc'[1..3]
|
||||
e1 = 'abc'[1..4]
|
||||
f1 = 'abc'[0..-2]
|
||||
g1 = 'abc'[-2..3]
|
||||
h1 = 'abc'[3..4]
|
||||
i1 = 'abc'[4..5]
|
||||
a2 = 'abc'[1...0]
|
||||
b2 = 'abc'[1...1]
|
||||
c2 = 'abc'[1...2]
|
||||
d2 = 'abc'[1...3]
|
||||
e2 = 'abc'[1...4]
|
||||
f2 = 'abc'[0...-2]
|
||||
g2 = 'abc'[-2...3]
|
||||
h2 = 'abc'[3...4]
|
||||
i2 = 'abc'[4...5]
|
||||
|
||||
a1 == '' and b1 == 'b' and c1 == 'bc' and d1 == 'bc' and e1 == 'bc' and
|
||||
f1 == 'ab' and g1 == 'bc' and h1 == '' and i2 == nil and
|
||||
a2 == '' and b2 == '' and c2 == 'b' and d2 == 'bc' and e2 == 'bc' and
|
||||
f2 == 'a' and g2 == 'bc' and h2 == '' and i2 == nil
|
||||
end
|
||||
|
||||
assert('String#capitalize', '15.2.10.5.7') do
|
||||
a = 'abc'
|
||||
a.capitalize
|
||||
|
||||
Reference in New Issue
Block a user