aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_prime.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_prime.rb')
-rw-r--r--test/test_prime.rb26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/test_prime.rb b/test/test_prime.rb
index 307d53afb3..b4962bafcf 100644
--- a/test/test_prime.rb
+++ b/test/test_prime.rb
@@ -1,6 +1,7 @@
require 'test/unit'
require 'prime'
require 'stringio'
+require 'timeout'
class TestPrime < Test::Unit::TestCase
# The first 100 prime numbers
@@ -143,4 +144,29 @@ class TestPrime < Test::Unit::TestCase
assert !-4.prime?
end
end
+
+ def test_eratosthenes_works_fine_after_timeout
+ sieve = Prime::EratosthenesSieve.instance
+ sieve.send(:initialize)
+ begin
+ # simulates that Timeout.timeout interrupts Prime::EratosthenesSieve#extend_table
+ def sieve.Integer(n)
+ n = super(n)
+ sleep 10 if /extend_table/ =~ caller.first
+ return n
+ end
+
+ begin
+ Timeout.timeout(0.5) { Prime.each(7*37){} }
+ flunk("timeout expected")
+ rescue Timeout::Error
+ end
+ ensure
+ class << sieve
+ remove_method :Integer
+ end
+ end
+
+ refute_includes Prime.each(7*37).to_a, 7*37, "[ruby-dev:39465]"
+ end
end