Feature #6317 » range_cover.diff
| range.c | ||
|---|---|---|
|
static VALUE
|
||
|
range_cover(VALUE range, VALUE val)
|
||
|
{
|
||
|
VALUE beg, end;
|
||
|
VALUE beg, end, val_beg, val_end;
|
||
|
VALUE range_p = rb_obj_is_kind_of(val, rb_cRange);
|
||
|
int c;
|
||
|
beg = RANGE_BEG(range);
|
||
|
end = RANGE_END(range);
|
||
|
if (r_le(beg, val)) {
|
||
|
if (EXCL(range)) {
|
||
|
if (r_lt(val, end))
|
||
|
return Qtrue;
|
||
|
}
|
||
|
else {
|
||
|
if (r_le(val, end))
|
||
|
return Qtrue;
|
||
|
}
|
||
|
if (range_p) {
|
||
|
val_beg = RANGE_BEG(val);
|
||
|
val_end = RANGE_END(val);
|
||
|
c = r_le(val_beg, val_end);
|
||
|
if (c == Qfalse)
|
||
|
return Qfalse;
|
||
|
if ((c == (int)INT2FIX(0)) && EXCL(val))
|
||
|
return Qfalse;
|
||
|
}
|
||
|
else {
|
||
|
val_beg = val;
|
||
|
val_end = val;
|
||
|
}
|
||
|
if (r_le(beg, val_beg)) {
|
||
|
c = r_le(val_end, end);
|
||
|
if (c == Qtrue)
|
||
|
return Qtrue;
|
||
|
if (c == (int)INT2FIX(0)) {
|
||
|
if (EXCL(range)) {
|
||
|
if (range_p && EXCL(val))
|
||
|
return Qtrue;
|
||
|
}
|
||
|
else {
|
||
|
return Qtrue;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return Qfalse;
|
||
|
}
|
||
| test/ruby/test_range.rb | ||
|---|---|---|
|
assert(("a"..."z").cover?("y"))
|
||
|
assert(!(("a"..."z").cover?("z")))
|
||
|
assert(("a".."z").cover?("cc"))
|
||
|
assert(!(("z".."a").cover?("c")))
|
||
|
assert(("e".."r").cover?("e".."r"))
|
||
|
assert(("e".."r").cover?("e"..."r"))
|
||
|
assert(!(("e".."r").cover?("d".."r")))
|
||
|
assert(!(("e".."r").cover?("e".."s")))
|
||
|
assert(!(("e".."r").cover?("e"..."s")))
|
||
|
assert(!(("e".."r").cover?("a".."d")))
|
||
|
assert(!(("e".."r").cover?("s".."z")))
|
||
|
assert(!(("e"..."r").cover?("e".."r")))
|
||
|
assert(("e"..."r").cover?("e"..."r"))
|
||
|
assert(!(("r".."e").cover?("e".."r")))
|
||
|
assert(!(("e".."r").cover?("r".."e")))
|
||
|
assert(("e".."r").cover?("g".."g"))
|
||
|
assert(!(("e".."r").cover?("g"..."g")))
|
||
|
end
|
||
|
def test_beg_len
|
||