Project

General

Profile

Bug #3693 » fixed_objspace_test.rb

authorNari (Narihiro Nakamura), 08/14/2010 06:56 AM

 
diff --git a/ext/objspace/objspace.c b/ext/objspace/objspace.c
index 817380f..ebca2f8 100644
--- a/ext/objspace/objspace.c
+++ b/ext/objspace/objspace.c
@@ -141,6 +141,9 @@ memsize_of(VALUE obj)
}
break;
+ case T_ZOMBIE:
+ break;
+
default:
rb_bug("objspace/memsize_of(): unknown data type 0x%x(%p)",
BUILTIN_TYPE(obj), (void*)obj);
diff --git a/gc.c b/gc.c
index db3dce5..1eaa3d0 100644
--- a/gc.c
+++ b/gc.c
@@ -1176,7 +1176,7 @@ rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
size_t
rb_objspace_data_type_memsize(VALUE obj)
{
- if (RTYPEDDATA_P(obj)) {
+ if (RTYPEDDATA_P(obj) && RTYPEDDATA_TYPE(obj)->function.dsize) {
return RTYPEDDATA_TYPE(obj)->function.dsize(RTYPEDDATA_DATA(obj));
}
else {
diff --git a/test/objspace/test_objspace.rb b/test/objspace/test_objspace.rb
new file mode 100644
index 0000000..cfdb485
--- /dev/null
+++ b/test/objspace/test_objspace.rb
@@ -0,0 +1,44 @@
+require "test/unit"
+require "objspace"
+
+class TestObjSpace < Test::Unit::TestCase
+ def test_memsize_of
+ assert_equal(0, ObjectSpace.memsize_of(true))
+ assert_kind_of(Integer, ObjectSpace.memsize_of(Object.new))
+ assert_kind_of(Integer, ObjectSpace.memsize_of(Class))
+ assert_kind_of(Integer, ObjectSpace.memsize_of(""))
+ assert_kind_of(Integer, ObjectSpace.memsize_of([]))
+ assert_kind_of(Integer, ObjectSpace.memsize_of({}))
+ assert_kind_of(Integer, ObjectSpace.memsize_of(//))
+ f = File.new(__FILE__)
+ assert_kind_of(Integer, ObjectSpace.memsize_of(f))
+ f.close
+ assert_kind_of(Integer, ObjectSpace.memsize_of(/a/.match("a")))
+ assert_kind_of(Integer, ObjectSpace.memsize_of(Struct.new(:a)))
+ end
+
+ def test_count_objects_size
+ res = ObjectSpace.count_objects_size
+ assert_equal(false, res.empty?)
+ assert_equal(true, res[:TOTAL] > 0)
+ arg = {}
+ ObjectSpace.count_objects_size(arg)
+ assert_equal(false, arg.empty?)
+ end
+
+ def test_count_nodes
+ res = ObjectSpace.count_nodes
+ assert_equal(false, res.empty?)
+ arg = {}
+ ObjectSpace.count_nodes(arg)
+ assert_equal(false, arg.empty?)
+ end
+
+ def test_count_tdata_objects
+ res = ObjectSpace.count_tdata_objects
+ assert_equal(false, res.empty?)
+ arg = {}
+ ObjectSpace.count_tdata_objects(arg)
+ assert_equal(false, arg.empty?)
+ end
+end
(2-2/2)