mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/dl/cptr.c (rb_dlptr_eql, rb_dlptr_cmp): DL::CPtr#== and DL::CPtr#<=>
should not raise an exception when compared to a different object. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25634 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
89f1c60cba
commit
c30e32d075
3 changed files with 43 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
Wed Nov 4 02:08:14 2009 Aaron Patterson <tenderlove@ruby-lang.org>
|
||||
|
||||
* ext/dl/cptr.c (rb_dlptr_eql, rb_dlptr_cmp): DL::CPtr#== and DL::CPtr#<=>
|
||||
should not raise an exception when compared to a different object.
|
||||
|
||||
Wed Nov 4 00:05:36 2009 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* string.c (rb_str_upto): make next object before yield its block.
|
||||
|
|
|
@ -333,21 +333,42 @@ rb_dlptr_inspect(VALUE self)
|
|||
return rb_str_new2(str);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* ptr == other => true or false
|
||||
* ptr.eql?(other) => true or false
|
||||
*
|
||||
* Returns true if +other+ wraps the same pointer, otherwise returns
|
||||
* false.
|
||||
*/
|
||||
VALUE
|
||||
rb_dlptr_eql(VALUE self, VALUE other)
|
||||
{
|
||||
void *ptr1, *ptr2;
|
||||
|
||||
if(!rb_obj_is_kind_of(other, rb_cDLCPtr)) return Qfalse;
|
||||
|
||||
ptr1 = rb_dlptr2cptr(self);
|
||||
ptr2 = rb_dlptr2cptr(other);
|
||||
|
||||
return ptr1 == ptr2 ? Qtrue : Qfalse;
|
||||
}
|
||||
|
||||
VALUE
|
||||
/*
|
||||
* call-seq:
|
||||
* ptr <=> other => -1, 0, 1, or nil
|
||||
*
|
||||
* Returns -1 if less than, 0 if equal to, 1 if greater than +other+. Returns
|
||||
* nil if +ptr+ cannot be compared to +other+.
|
||||
*/
|
||||
static VALUE
|
||||
rb_dlptr_cmp(VALUE self, VALUE other)
|
||||
{
|
||||
void *ptr1, *ptr2;
|
||||
SIGNED_VALUE diff;
|
||||
|
||||
if(!rb_obj_is_kind_of(other, rb_cDLCPtr)) return Qnil;
|
||||
|
||||
ptr1 = rb_dlptr2cptr(self);
|
||||
ptr2 = rb_dlptr2cptr(other);
|
||||
diff = (SIGNED_VALUE)ptr1 - (SIGNED_VALUE)ptr2;
|
||||
|
|
|
@ -3,6 +3,22 @@ require_relative '../ruby/envutil'
|
|||
|
||||
module DL
|
||||
class TestCPtr < TestBase
|
||||
def test_equals
|
||||
ptr = CPtr.new 0
|
||||
ptr2 = CPtr.new 0
|
||||
assert_equal ptr2, ptr
|
||||
end
|
||||
|
||||
def test_not_equals
|
||||
ptr = CPtr.new 0
|
||||
assert_not_equal 10, ptr, '10 should not equal the pointer'
|
||||
end
|
||||
|
||||
def test_cmp
|
||||
ptr = CPtr.new 0
|
||||
assert_nil(ptr <=> 10, '10 should not be comparable')
|
||||
end
|
||||
|
||||
def test_ref_ptr
|
||||
ary = [0,1,2,4,5]
|
||||
addr = CPtr.new(dlwrap(ary))
|
||||
|
|
Loading…
Reference in a new issue