stdlib_libraries/time_limits_no_parens.rb
tests/_examples/stdlib_libraries/time_limits_no_parens.rb in the metorex repository.
# A block given a limit on how long it may run, and the collector's settings.
require "timeout"
p Timeout.timeout(1) { 42 }
begin
Timeout.timeout 1 do
sleep
end
rescue Timeout::Error => expired
p [expired.class, expired.message]
end
begin
Timeout.timeout 1, ArgumentError, "took too long" do
sleep 5
end
rescue ArgumentError => expired
p expired.message
end
begin
Timeout.timeout -1 do
:never
end
rescue ArgumentError => refused
p refused.message
end
# A limit ends with its block, so a later wait is not cut short by it.
p Timeout.timeout(0.01) { :inside }
p sleep 0.05
settings = GC.config
p settings[:implementation].is_a? String
p GC.config(foo: "bar") == settings
Output:
42
[Timeout::Error, "execution expired"]
"took too long"
"Timeout sec must be a non-negative number"
:inside
0
true
true