Include the first constant name into `Ractor::IsolationError` message
[ruby.git] / test / ruby / test_case.rb
blob4a0f1bf78d0f44faec553efb10a92ff6504bb7a3
1 # frozen_string_literal: false
2 require 'test/unit'
4 class TestCase < Test::Unit::TestCase
5   def test_case
6     case 5
7     when 1, 2, 3, 4, 6, 7, 8
8       assert(false)
9     when 5
10       assert(true)
11     end
13     case 5
14     when 5
15       assert(true)
16     when 1..10
17       assert(false)
18     end
20     case 5
21     when 1..10
22       assert(true)
23     else
24       assert(false)
25     end
27     case 5
28     when 5
29       assert(true)
30     else
31       assert(false)
32     end
34     case "foobar"
35     when /^f.*r$/
36       assert(true)
37     else
38       assert(false)
39     end
41     case
42     when true
43       assert(true)
44     when false, nil
45       assert(false)
46     else
47       assert(false)
48     end
50     case "+"
51     when *%w/. +/
52       assert(true)
53     else
54       assert(false)
55     end
57     case
58     when *[], false
59       assert(false)
60     else
61       assert(true)
62     end
64     case
65     when *false, []
66       assert(true)
67     else
68       assert(false)
69     end
71     assert_raise(NameError) do
72       case
73       when false, *x, false
74       end
75     end
76   end
78   def test_deoptimization
79     assert_in_out_err(['-e', <<-EOS], '', %w[42], [])
80       class Symbol; undef ===; def ===(o); p 42; true; end; end; case :foo; when :foo; end
81     EOS
83     assert_in_out_err(['-e', <<-EOS], '', %w[42], [])
84       class Integer; undef ===; def ===(o); p 42; true; end; end; case 1; when 1; end
85     EOS
86   end
88   def test_optimization
89     case 1
90     when 0.9, 1.1
91       assert(false)
92     when 1.0
93       assert(true)
94     else
95       assert(false)
96     end
97     case 536870912
98     when 536870911.9, 536870912.1
99       assert(false)
100     when 536870912.0
101       assert(true)
102     else
103       assert(false)
104     end
105     case 0
106     when 0r
107       assert(true)
108     else
109       assert(false)
110     end
111     case 0
112     when 0i
113       assert(true)
114     else
115       assert(false)
116     end
117   end
119   def test_method_missing
120     flag = false
122     case 1
123     when Class.new(BasicObject) { def method_missing(*) true end }.new
124       flag = true
125     end
127     assert(flag)
128   end
130   def test_nomethoderror
131     assert_raise(NoMethodError) {
132       case 1
133       when Class.new(BasicObject) { }.new
134       end
135     }
136   end
138   module NilEqq
139     refine NilClass do
140       def === other
141         false
142       end
143     end
144   end
146   class NilEqqClass
147     using NilEqq
149     def eqq(a)
150       case a; when nil then nil; else :not_nil; end
151     end
152   end
155   def test_deoptimize_nil
156     assert_equal :not_nil, NilEqqClass.new.eqq(nil)
157   end