From 0d4227ac04832a3bb4010d701ebda2c97c034da6 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Sun, 12 May 2013 18:42:21 +1000 Subject: Implemented ObjectSpace.count_objects to count the number of allocated objects for each type --- test/assert.rb | 21 +++++++++++++++++++++ test/t/objectspace.rb | 19 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 test/t/objectspace.rb (limited to 'test') diff --git a/test/assert.rb b/test/assert.rb index a69066828..cb2e28b89 100644 --- a/test/assert.rb +++ b/test/assert.rb @@ -86,6 +86,19 @@ def assert_true(ret, msg = nil, diff = nil) ret end +def assert_false(ret, msg = nil, diff = nil) + if $mrbtest_assert + $mrbtest_assert_idx += 1 + if ret + msg = "Expected #{ret.inspect} to be false" unless msg + diff = assertion_diff(false, ret) unless diff + + $mrbtest_assert.push([$mrbtest_assert_idx, msg, diff]) + end + end + !ret +end + def assert_equal(exp, act, msg = nil) msg = "Expected to be equal" unless msg diff = assertion_diff(exp, act) @@ -135,6 +148,14 @@ def assert_raise(*exp) ret end +## +# Fails unless +obj+ is a kind of +cls+. +def assert_kind_of(cls, obj, msg = nil) + msg = "Expected #{obj.inspect} to be a kind of #{cls}, not #{obj.class}" unless msg + diff = assertion_diff(cls, obj.class) + assert_true(obj.kind_of?(cls), msg, diff) +end + ## # Report the test result and print all assertions # which were reported broken. diff --git a/test/t/objectspace.rb b/test/t/objectspace.rb new file mode 100644 index 000000000..bf79da902 --- /dev/null +++ b/test/t/objectspace.rb @@ -0,0 +1,19 @@ + +assert('ObjectSpace.count_objects') do + h = {} + ObjectSpace.count_objects(h) + assert_kind_of(Hash, h) + assert_true(h.keys.all? {|x| x.is_a?(Symbol) || x.is_a?(Integer) }) + assert_true(h.values.all? {|x| x.is_a?(Integer) }) + + h = ObjectSpace.count_objects + assert_kind_of(Hash, h) + assert_true(h.keys.all? {|x| x.is_a?(Symbol) || x.is_a?(Integer) }) + assert_true(h.values.all? {|x| x.is_a?(Integer) }) + + assert_raise(TypeError) { ObjectSpace.count_objects(1) } + + h0 = {:MRB_TT_FOO=>1000} + h = ObjectSpace.count_objects(h0) + assert_false(h0.has_key?(:MRB_TT_FOO)) + end \ No newline at end of file -- cgit v1.2.3