summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/range.c2
-rw-r--r--src/sprintf.c2
-rw-r--r--test/t/module.rb7
-rw-r--r--test/t/string.rb26
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