diff --git a/range.c b/range.c index 1e4347e..014ed55 100644 --- a/range.c +++ b/range.c @@ -39,6 +39,9 @@ range_failed(void) static VALUE range_check(VALUE *args) { + if (args[0] == Qnil || args[0] == Qfalse || args[0] == Qtrue) + return Qnil; + return rb_funcall(args[0], id_cmp, 1, args[1]); } diff --git a/test/ruby/test_range.rb b/test/ruby/test_range.rb index e12e8fc..51eafb4 100644 --- a/test/ruby/test_range.rb +++ b/test/ruby/test_range.rb @@ -95,6 +95,10 @@ class TestRange < Test::Unit::TestCase assert_raise(ArgumentError) { (1 .. :a) } end + def test_nil_false_true_ranges + [nil, false, true].each {|value| assert_raise(ArgumentError) { (value..value) } } + end + def test_exclude_end assert(!((0..1).exclude_end?)) assert((0...1).exclude_end?)