summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_case.rb21
-rw-r--r--test/ruby/test_optimization.rb13
2 files changed, 34 insertions, 0 deletions
diff --git a/test/ruby/test_case.rb b/test/ruby/test_case.rb
index f20d1dfd7e..b9f8ab264d 100644
--- a/test/ruby/test_case.rb
+++ b/test/ruby/test_case.rb
@@ -121,4 +121,25 @@ class TestCase < Test::Unit::TestCase
end
}
end
+
+ module NilEqq
+ refine NilClass do
+ def === other
+ false
+ end
+ end
+ end
+
+ class NilEqqClass
+ using NilEqq
+
+ def eqq(a)
+ case a; when nil then nil; else :not_nil; end
+ end
+ end
+
+
+ def test_deoptimize_nil
+ assert_equal :not_nil, NilEqqClass.new.eqq(nil)
+ end
end
diff --git a/test/ruby/test_optimization.rb b/test/ruby/test_optimization.rb
index 23c522612f..1c50044f7f 100644
--- a/test/ruby/test_optimization.rb
+++ b/test/ruby/test_optimization.rb
@@ -313,8 +313,11 @@ class TestRubyOptimization < Test::Unit::TestCase
code = <<-EOF
case foo
when "foo" then :foo
+ when true then true
+ when false then false
when :sym then :sym
when 6 then :fix
+ when nil then nil
when 0.1 then :float
when 0xffffffffffffffff then :big
else
@@ -323,8 +326,11 @@ class TestRubyOptimization < Test::Unit::TestCase
EOF
check = {
'foo' => :foo,
+ true => true,
+ false => false,
:sym => :sym,
6 => :fix,
+ nil => nil,
0.1 => :float,
0xffffffffffffffff => :big,
}
@@ -349,4 +355,11 @@ class TestRubyOptimization < Test::Unit::TestCase
end;
end
end
+
+ def test_eqq
+ [ nil, true, false, 0.1, :sym, 'str', 0xffffffffffffffff ].each do |v|
+ k = v.class.to_s
+ assert_redefine_method(k, '===', "assert_equal(#{v.inspect} === 0, 0)")
+ end
+ end
end