@@ -27,6 +27,15 @@ def test_each
2727 assert_equal PRIMES , primes
2828 end
2929
30+ def test_integer_each_prime
31+ primes = [ ]
32+ Integer . each_prime ( 1000 ) do |p |
33+ break if p > 541
34+ primes << p
35+ end
36+ assert_equal PRIMES , primes
37+ end
38+
3039 def test_each_by_prime_number_theorem
3140 3 . upto ( 15 ) do |i |
3241 max = 2 **i
@@ -124,6 +133,78 @@ def test_prime_each_basic_argument_checking
124133 assert_raise ( ArgumentError ) { Prime . prime? ( 1.2 ) }
125134 end
126135
136+ def test_prime?
137+ assert_equal Prime . prime? ( 1 ) , false
138+ assert_equal Prime . prime? ( 2 ) , true
139+ assert_equal Prime . prime? ( 4 ) , false
140+ end
141+
142+ class TestPseudoPrimeGenerator < Test ::Unit ::TestCase
143+ def test_upper_bound
144+ pseudo_prime_generator = Prime ::PseudoPrimeGenerator . new ( 42 )
145+ assert_equal pseudo_prime_generator . upper_bound , 42
146+ end
147+
148+ def test_succ
149+ pseudo_prime_generator = Prime ::PseudoPrimeGenerator . new ( 42 )
150+ assert_raise ( NotImplementedError ) { pseudo_prime_generator . succ }
151+ end
152+
153+ def test_next
154+ pseudo_prime_generator = Prime ::PseudoPrimeGenerator . new ( 42 )
155+ assert_raise ( NotImplementedError ) { pseudo_prime_generator . next }
156+ end
157+
158+ def test_rewind
159+ pseudo_prime_generator = Prime ::PseudoPrimeGenerator . new ( 42 )
160+ assert_raise ( NotImplementedError ) { pseudo_prime_generator . rewind }
161+ end
162+ end
163+
164+ class TestTrialDivisionGenerator < Test ::Unit ::TestCase
165+ # The first 100 prime numbers
166+ PRIMES = [
167+ 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 ,
168+ 41 , 43 , 47 , 53 , 59 , 61 , 67 , 71 , 73 , 79 , 83 ,
169+ 89 , 97 , 101 , 103 , 107 , 109 , 113 , 127 , 131 ,
170+ 137 , 139 , 149 , 151 , 157 , 163 , 167 , 173 , 179 ,
171+ 181 , 191 , 193 , 197 , 199 , 211 , 223 , 227 , 229 ,
172+ 233 , 239 , 241 , 251 , 257 , 263 , 269 , 271 , 277 ,
173+ 281 , 283 , 293 , 307 , 311 , 313 , 317 , 331 , 337 ,
174+ 347 , 349 , 353 , 359 , 367 , 373 , 379 , 383 , 389 ,
175+ 397 , 401 , 409 , 419 , 421 , 431 , 433 , 439 , 443 ,
176+ 449 , 457 , 461 , 463 , 467 , 479 , 487 , 491 , 499 ,
177+ 503 , 509 , 521 , 523 , 541 ,
178+ ]
179+
180+ def test_each
181+ primes = [ ]
182+ Prime . each ( nil , Prime ::TrialDivisionGenerator . new ) do |p |
183+ break if p > 541
184+ primes << p
185+ end
186+ assert_equal PRIMES , primes
187+ end
188+
189+ def test_rewind
190+ generator = Prime ::TrialDivisionGenerator . new
191+ assert_equal generator . next , 2
192+ assert_equal generator . next , 3
193+ generator . rewind
194+ assert_equal generator . next , 2
195+ end
196+ end
197+
198+ class TestGenerator23 < Test ::Unit ::TestCase
199+ def test_rewind
200+ generator = Prime ::Generator23 . new
201+ assert_equal generator . next , 2
202+ assert_equal generator . next , 3
203+ generator . rewind
204+ assert_equal generator . next , 2
205+ end
206+ end
207+
127208 class TestInteger < Test ::Unit ::TestCase
128209 def test_prime_division
129210 pd = PRIMES . inject ( &:* ) . prime_division
0 commit comments