diff options
Diffstat (limited to 'bootstraptest/test_thread.rb')
| -rw-r--r-- | bootstraptest/test_thread.rb | 65 |
1 files changed, 46 insertions, 19 deletions
diff --git a/bootstraptest/test_thread.rb b/bootstraptest/test_thread.rb index d16295de8b..7ff5bb4a38 100644 --- a/bootstraptest/test_thread.rb +++ b/bootstraptest/test_thread.rb @@ -1,4 +1,14 @@ -# Thread and Fiber +show_limit %q{ + threads = [] + begin + threads << Thread.new{sleep} + + raise Exception, "skipping" if threads.count >= 10_000 + rescue Exception => error + puts "Thread count: #{threads.count} (#{error})" + break + end while true +} if false # disable to pass CI assert_equal %q{ok}, %q{ Thread.new{ @@ -36,7 +46,7 @@ begin } } rescue ThreadError => e - :ok if /can't create Thread/ =~ e.message + /can't create Thread/ =~ e.message ? :ok : e.message end } assert_equal %q{ok}, %q{ @@ -50,7 +60,7 @@ begin } } rescue ThreadError => e - :ok if /can't create Thread/ =~ e.message + /can't create Thread/ =~ e.message ? :ok : e.message end } assert_equal %q{ok}, %q{ @@ -232,9 +242,22 @@ assert_equal 'true', %{ end } +assert_equal 'true', %{ + Thread.new{}.join + begin + Process.waitpid2 fork{ + Thread.new{ + sleep 0.1 + }.join + } + true + rescue NotImplementedError + true + end +} + assert_equal 'ok', %{ - open("zzz.rb", "w") do |f| - f.puts <<-END + File.write("zzz_t1.rb", <<-END) begin Thread.new { fork { GC.start } }.join pid, status = Process.wait2 @@ -243,8 +266,7 @@ assert_equal 'ok', %{ $result = :ok end END - end - require "./zzz.rb" + require "./zzz_t1.rb" $result } @@ -299,10 +321,6 @@ assert_equal 'ok', %q{ }, '[ruby-dev:34492]' assert_normal_exit %q{ - at_exit { Fiber.new{}.resume } -} - -assert_normal_exit %q{ g = enum_for(:local_variables) loop { g.next } }, '[ruby-dev:34128]' @@ -328,10 +346,6 @@ assert_normal_exit %q{ }, '[ruby-dev:34128]' assert_normal_exit %q{ - Fiber.new(&Object.method(:class_eval)).resume("foo") -}, '[ruby-dev:34128]' - -assert_normal_exit %q{ Thread.new("foo", &Object.method(:class_eval)).join }, '[ruby-dev:34128]' @@ -406,8 +420,7 @@ assert_equal 'ok', %q{ } assert_equal 'ok', %{ - open("zzz.rb", "w") do |f| - f.puts <<-'end;' # do + File.write("zzz_t2.rb", <<-'end;') # do begin m = Thread::Mutex.new parent = Thread.current @@ -429,8 +442,7 @@ assert_equal 'ok', %{ $result = :ok end end; - end - require "./zzz.rb" + require "./zzz_t2.rb" $result } @@ -482,3 +494,18 @@ assert_equal 'foo', %q{ GC.start f.call.source } + +assert_normal_exit %q{ + class C + def inspect + sleep 0.5 + 'C!!' + end + end + Thread.new{ + loop{ + p C.new + } + } + sleep 0.1 +}, timeout: 5 |
