diff options
| -rw-r--r-- | src/range.c | 2 | ||||
| -rw-r--r-- | src/sprintf.c | 2 | ||||
| -rw-r--r-- | test/t/module.rb | 7 | ||||
| -rw-r--r-- | test/t/string.rb | 26 |
4 files changed, 31 insertions, 6 deletions
diff --git a/src/range.c b/src/range.c index 6fe7964fe..085d5b1c0 100644 --- a/src/range.c +++ b/src/range.c @@ -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; diff --git a/src/sprintf.c b/src/sprintf.c index 630875a88..0e8ac830f 100644 --- a/src/sprintf.c +++ b/src/sprintf.c @@ -671,7 +671,7 @@ retry: tmp = mrb_check_string_type(mrb, val); if (!mrb_nil_p(tmp)) { if (RSTRING_LEN(tmp) != 1 ) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "%%c requires a character"); + mrb_raise(mrb, E_ARGUMENT_ERROR, "%c requires a character"); } c = RSTRING_PTR(tmp)[0]; n = 1; diff --git a/test/t/module.rb b/test/t/module.rb index ff8178cb0..511658150 100644 --- a/test/t/module.rb +++ b/test/t/module.rb @@ -34,14 +34,13 @@ end assert('Module#class_variables', '15.2.2.4.19') do class Test4ClassVariables1 @@var1 = 1 - @@var2 = 2 end class Test4ClassVariables2 < Test4ClassVariables1 - @@var3 = 2 + @@var2 = 2 end - Test4ClassVariables1.class_variables == [:@@var1, :@@var2] && - Test4ClassVariables2.class_variables == [:@@var3] + Test4ClassVariables1.class_variables == [:@@var1] && + Test4ClassVariables2.class_variables == [:@@var2] end assert('Module#const_defined?', '15.2.2.4.20') do diff --git a/test/t/string.rb b/test/t/string.rb index 26b7df584..1e921c668 100644 --- a/test/t/string.rb +++ b/test/t/string.rb @@ -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 |
