summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--lib/prime.rb2
-rw-r--r--test/test_prime.rb5
3 files changed, 12 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 1a16dc3509..97f00aee3f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Oct 20 12:17:56 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/prime.rb: Add basic argument checking to Prime.prime?
+ [Bug #11606]
+
Tue Oct 20 12:17:50 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
* lib/prime.rb: Optimize Integer#prime?
diff --git a/lib/prime.rb b/lib/prime.rb
index d99a51a967..c79b0cfd5f 100644
--- a/lib/prime.rb
+++ b/lib/prime.rb
@@ -144,6 +144,8 @@ class Prime
# +value+:: an arbitrary integer to be checked.
# +generator+:: optional. A pseudo-prime generator.
def prime?(value, generator = Prime::Generator23.new)
+ raise ArgumentError, "Expected a prime generator, got #{generator}" unless generator.respond_to? :each
+ raise ArgumentError, "Expected an integer, got #{value}" unless value.respond_to?(:integer?) && value.integer?
return false if value < 2
generator.each do |num|
q,r = value.divmod num
diff --git a/test/test_prime.rb b/test/test_prime.rb
index 1788d71b64..f8abebc323 100644
--- a/test/test_prime.rb
+++ b/test/test_prime.rb
@@ -118,6 +118,11 @@ class TestPrime < Test::Unit::TestCase
assert_not_respond_to(Prime.instance, :next)
end
+ def test_prime_each_basic_argument_checking
+ assert_raise(ArgumentError) { Prime.prime?(1,2) }
+ assert_raise(ArgumentError) { Prime.prime?(1.2) }
+ end
+
class TestInteger < Test::Unit::TestCase
def test_prime_division
pd = PRIMES.inject(&:*).prime_division