summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/prime.rb12
-rw-r--r--test/test_prime.rb8
2 files changed, 20 insertions, 0 deletions
diff --git a/lib/prime.rb b/lib/prime.rb
index 5be12f24f5..44129d2dd7 100644
--- a/lib/prime.rb
+++ b/lib/prime.rb
@@ -141,6 +141,18 @@ class Prime
generator.each(&block)
end
+ # Return true if +obj+ is an Integer an is prime. Also returns
+ # true if +obj+ is a Module that is an ancestor of +Prime+.
+ def include?(obj)
+ case obj
+ when Integer
+ prime?(obj)
+ when Module
+ Module.instance_method(:include?).bind(Prime).call(obj)
+ else
+ false
+ end
+ end
# Returns true if +value+ is a prime number, else returns false.
#
diff --git a/test/test_prime.rb b/test/test_prime.rb
index 9db13f08fe..b809d15df7 100644
--- a/test/test_prime.rb
+++ b/test/test_prime.rb
@@ -27,6 +27,14 @@ class TestPrime < Test::Unit::TestCase
assert_equal PRIMES, primes
end
+ def test_include?
+ assert_equal(false, Prime.include?(nil))
+ assert_equal(true, Prime.include?(3))
+ assert_equal(false, Prime.include?(4))
+ assert_equal(true, Prime.include?(Enumerable))
+ assert_equal(false, Prime.include?(Comparable))
+ end
+
def test_integer_each_prime
primes = []
Integer.each_prime(1000) do |p|