From 69465df4242f3b2d8e55fbe18d7c45b47b40a626 Mon Sep 17 00:00:00 2001 From: HParker Date: Fri, 17 Feb 2023 08:15:03 -0800 Subject: Allow classes and modules to become too complex This makes the behavior of classes and modules when there are too many instance variables match the behavior of objects with too many instance variables. --- test/ruby/test_shapes.rb | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'test/ruby') diff --git a/test/ruby/test_shapes.rb b/test/ruby/test_shapes.rb index b1a2ba2f1b..e34256415b 100644 --- a/test/ruby/test_shapes.rb +++ b/test/ruby/test_shapes.rb @@ -105,7 +105,27 @@ class TestShapes < Test::Unit::TestCase obj.instance_variable_set(:"@a#{_1}", 1) end - assert_false RubyVM::Shape.of(obj).too_complex? + assert_predicate RubyVM::Shape.of(obj), :too_complex? + end + + def test_too_many_ivs_on_module + obj = Module.new + + (RubyVM::Shape::SHAPE_MAX_NUM_IVS + 1).times do + obj.instance_variable_set(:"@a#{_1}", 1) + end + + assert_predicate RubyVM::Shape.of(obj), :too_complex? + end + + def test_too_many_ivs_on_builtin + obj = "string" + + (RubyVM::Shape::SHAPE_MAX_NUM_IVS + 1).times do + obj.instance_variable_set(:"@a#{_1}", 1) + end + + refute RubyVM::Shape.of(obj).too_complex? end def test_removing_when_too_many_ivs_on_class -- cgit v1.2.3