From 25c1fd3b9037d9eb39596bb994eeabed812adada Mon Sep 17 00:00:00 2001 From: kazu Date: Wed, 10 Apr 2019 09:15:21 +0000 Subject: Reverting all commits from r67479 to r67496 because of CI failures Because hard to specify commits related to r67479 only. So please commit again. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67499 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_gc_compact.rb | 103 ------------------------------------------- 1 file changed, 103 deletions(-) delete mode 100644 test/ruby/test_gc_compact.rb (limited to 'test/ruby/test_gc_compact.rb') diff --git a/test/ruby/test_gc_compact.rb b/test/ruby/test_gc_compact.rb deleted file mode 100644 index 0b2acacdc9..0000000000 --- a/test/ruby/test_gc_compact.rb +++ /dev/null @@ -1,103 +0,0 @@ -# frozen_string_literal: true -require 'test/unit' -require 'fiddle' - -class TestGCCompact < Test::Unit::TestCase - if Fiddle::SIZEOF_LONG == Fiddle::SIZEOF_VOIDP - def memory_location(obj) - (Fiddle.dlwrap(obj) >> 1) - end - elsif Fiddle::SIZEOF_LONG_LONG == Fiddle::SIZEOF_VOIDP - def memory_location(obj) - (Fiddle.dlwrap(obj) >> 1) / 2 - end - else - raise "Not supported" - end - - def assert_object_ids(list) - same_count = list.find_all { |obj| - memory_location(obj) == obj.object_id - }.count - list.count - same_count - end - - def big_list - 1000.times.map { - # try to make some empty slots by allocating an object and discarding - Object.new - Object.new - } # likely next to each other - end - - # Find an object that's allocated in a slot that had a previous - # tenant, and that tenant moved and is still alive - def find_object_in_recycled_slot(addresses) - new_object = nil - - loop do - new_object = Object.new - if addresses.include? memory_location(new_object) - break - end - end - - new_object - end - - def test_find_collided_object - list_of_objects = big_list - - ids = list_of_objects.map(&:object_id) # store id in map - addresses = list_of_objects.map(&self.:memory_location) - - # All object ids should be equal - assert_equal 0, assert_object_ids(list_of_objects) # should be 0 - - GC.compact - - # Some should have moved - id_count = assert_object_ids(list_of_objects) - skip "couldn't get objects to move" if id_count == 0 - assert_operator id_count, :>, 0 - - new_ids = list_of_objects.map(&:object_id) - - # Object ids should not change after compaction - assert_equal ids, new_ids - - new_tenant = find_object_in_recycled_slot(addresses) - assert new_tenant - - # This is the object that used to be in new_object's position - previous_tenant = list_of_objects[addresses.index(memory_location(new_tenant))] - - assert_not_equal previous_tenant.object_id, new_tenant.object_id - - # Should be able to look up object by object_id - assert_equal new_tenant, ObjectSpace._id2ref(new_tenant.object_id) - - # Should be able to look up object by object_id - assert_equal previous_tenant, ObjectSpace._id2ref(previous_tenant.object_id) - - int = (new_tenant.object_id >> 1) - # These two should be the same! but they are not :( - assert_equal int, ObjectSpace._id2ref(int.object_id) - end - - def test_many_collisions - list_of_objects = big_list - ids = list_of_objects.map(&:object_id) - addresses = list_of_objects.map(&self.:memory_location) - - GC.compact - - new_tenants = 10.times.map { - find_object_in_recycled_slot(addresses) - } - - collisions = GC.stat(:object_id_collisions) - skip "couldn't get objects to collide" if collisions == 0 - assert_operator collisions, :>, 0 - end -end -- cgit v1.2.3