numb 0.77.0 → 0.84.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.77.0
1
+ 0.84.0
@@ -0,0 +1,13 @@
1
+ # coding: utf-8
2
+ class Integer
3
+ def aliquot_sequence(max_iterations=(self > 100 ? 10 : Math.sqrt(self)),
4
+ summatory_function=->(n){ n.aliquot_sum })
5
+ sequence = [self]
6
+ max_iterations.floor.times do |limit|
7
+ sequence << summatory_function[sequence.last]
8
+ break if sequence[0..-2].include?(sequence.last)
9
+ return sequence << (1/0.0) if limit.succ == max_iterations
10
+ end
11
+ sequence
12
+ end
13
+ end
data/lib/numb/aspiring.rb CHANGED
@@ -1,16 +1,4 @@
1
1
  class Integer
2
- def aliquot_sequence(max_iterations=(self > 100 ? 10 : Math.sqrt(self)))
3
- sequence = [self]
4
- max_iterations.floor.times do |limit|
5
- divisors = sequence.last.proper_divisors
6
- break if divisors.empty?
7
- sequence << divisors.reduce(:+)
8
- break if sequence[0..-2].include?(sequence.last)
9
- return sequence << (1/0.0) if limit.succ == max_iterations
10
- end
11
- sequence
12
- end
13
-
14
2
  def aspiring?(max_iterations=10)
15
3
  return false if perfect?
16
4
  (last = aliquot_sequence(max_iterations).last).to_f.finite? ?
data/lib/numb/evil.rb ADDED
@@ -0,0 +1,5 @@
1
+ class Integer
2
+ def evil?
3
+ not odious?
4
+ end
5
+ end
@@ -3,4 +3,15 @@ class Integer
3
3
  return 1 if zero?
4
4
  (1..self).reduce(:*)
5
5
  end
6
+
7
+ def factorial?
8
+ divisors = self.divisors.sort
9
+ divisors.each_with_index do |d, i|
10
+ if divisors[i.succ] == d.succ
11
+ return true if d.factorial == self
12
+ else
13
+ return d.factorial == self
14
+ end
15
+ end
16
+ end
6
17
  end
@@ -0,0 +1,7 @@
1
+ class Integer
2
+ def odious?
3
+ return false unless positive?
4
+ to_s(2).count('1').odd?
5
+ end
6
+ end
7
+
@@ -0,0 +1,6 @@
1
+ class Integer
2
+ def sociable?(t)
3
+ return false unless t >= 3
4
+ aliquot_sequence(t.succ).last == self
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class Integer
2
+ def sum_of_unitary_divisors
3
+ divisors.select{|d| unitary_divisor?(d)}.reduce(:+) or 0
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class Integer
2
+ def twin_prime?(p)
3
+ [p, self].all?(&:prime?) and p == self + 2
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class Integer
2
+ def unhappy?
3
+ not happy?
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class Integer
2
+ def unitary_amicable?(n)
3
+ [n + self, sum_of_unitary_divisors].all? do |other|
4
+ other == n.sum_of_unitary_divisors
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class Integer
2
+ def unitary_sociable?(t)
3
+ return false unless t >= 3
4
+ seq = aliquot_sequence(t.succ, ->(n){ n.sum_of_unitary_divisors - n})
5
+ seq.size - 1 == t and seq.last == self
6
+ end
7
+ end
data/lib/numb.rb CHANGED
@@ -1,29 +1,5 @@
1
1
  # coding: utf-8
2
2
 
3
- libs = %w{abundancy abundant achilles almost_perfect almost_prime amicable
4
- apocalyptic aspiring augmented_amicable automorphic balanced_prime
5
- base binomial biquadratic breeder brown carmichael carol
6
- centered_n_gonal centered_triangular congruum composite coprime
7
- core cototient cube d decagonal deficient dodecagonal dihedral_prime
8
- dudeney economical emrip equidigital extravagant factorial factorion
9
- fermat_pseudoprime fibonacci friendly frugal happy harshad
10
- heptagonal hexagonal highly_composite highly_abundant hilbert
11
- hyperperfect idoneal impolite integer_p interprime
12
- jacobsthal_lucas kaprekar keith knodel k_perfect kynea
13
- leonardo leyland lucas lucas_carmichael mersenne_prime minimal
14
- mms_pair mobius myriagonal narcissistic next_prev_prime n_gonal
15
- nivenmorphic noncototient nth_prime number_of_divisors octagonal
16
- ordinal ore parasitic pentagonal perfect perfect_power polite
17
- polydivisible positive poulet powerful practical prime_count
18
- prime_signature primitive_pseudoperfect primorial pronic proth
19
- quarticfree refactorable repunit rhonda rough self self_descriptive
20
- semiperfect semiprime smarandache_wellin smith smooth
21
- sophie_germain_prime sphenic square square_free sublime
22
- sum_of_squares superabundant superperfect totient triangular
23
- trimorphic undulating unitary_perfect unitary_divisor untouchable
24
- vampire weird wieferich woodall zeisel zerofree
25
- }
26
-
27
3
  class Integer
28
4
  def number_of_distinct_prime_factors
29
5
  prime_factors.uniq.size
@@ -62,6 +38,11 @@ class Integer
62
38
  end
63
39
  alias :σ :sum_of_divisors
64
40
 
41
+ def aliquot_sum
42
+ return 0 if zero?
43
+ σ - self
44
+ end
45
+
65
46
  def digital_root
66
47
  self == 0 ? 0 : 1 + ((self - 1) % 9)
67
48
  end
@@ -83,6 +64,4 @@ end
83
64
 
84
65
  require 'prime'
85
66
 
86
- libs.each do |predicate|
87
- require File.join(File.dirname(__FILE__), "numb/#{predicate}")
88
- end
67
+ Dir.glob(File.dirname(__FILE__) + '/numb/*.rb').each {|file| require file}
data/spec/evil_spec.rb ADDED
@@ -0,0 +1,20 @@
1
+ describe Integer, "#evil?" do
2
+ # A001969
3
+ @seq = [0,3,5,6,9,10,12,15,17,18,20,23,24,27,29,30,33,34,
4
+ 36,39,40,43,45,46,48,51,53,54,57,58,60,63,65,66,
5
+ 68,71,72,75,77,78,80,83,85,86,89,90,92,95,96,99,
6
+ 101,102,105,106,108,111,113,114,116,119,120,123,
7
+ 125,126,129].to_seq
8
+
9
+ @seq.each do |n|
10
+ it "should return true for evil number #{n}" do
11
+ n.should be_evil
12
+ end
13
+ end
14
+
15
+ @seq.invert.each do |n|
16
+ it "should return false for non-evil number #{n}" do
17
+ n.should_not be_evil
18
+ end
19
+ end
20
+ end
@@ -12,3 +12,24 @@ describe Integer, "#factorial" do
12
12
  end
13
13
  end
14
14
  end
15
+
16
+ describe Integer, "#factorial?" do
17
+ # A000142
18
+ @seq = [1,1,2,6,24,120,720,5040,40320,362880,3628800,
19
+ 39916800,479001600,6227020800,87178291200,
20
+ 1307674368000,20922789888000,355687428096000,
21
+ 6402373705728000,121645100408832000,
22
+ 2432902008176640000]
23
+
24
+ @seq.first(10).each do |n|
25
+ it "should return true for factorial #{n}" do
26
+ n.should be_factorial
27
+ end
28
+ end
29
+
30
+ @seq.first(10).to_seq.invert.sample(10).each do |n|
31
+ it "should return false for non-factorial #{n}" do
32
+ n.should_not be_factorial
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,19 @@
1
+ describe Integer, "#odious?" do
2
+ @seq = [1,2,4,7,8,11,13,14,16,19,21,22,25,26,28,31,32,35,
3
+ 37,38,41,42,44,47,49,50,52,55,56,59,61,62,64,67,
4
+ 69,70,73,74,76,79,81,82,84,87,88,91,93,94,97,98,
5
+ 100,103,104,107,109,110,112,115,117,118,121,122,
6
+ 124,127,128].to_seq
7
+
8
+ @seq.each do |n|
9
+ it "returns true for odious number #{n}" do
10
+ n.should be_odious
11
+ end
12
+ end
13
+
14
+ @seq.invert.each do |n|
15
+ it "returns false for non-odious number #{n}" do
16
+ n.should_not be_odious
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,57 @@
1
+ describe Integer, "#sociable?" do
2
+ # A090615
3
+ @seq = {
4
+ 4 => [1264460,2115324,2784580,4938136,7169104,18048976,
5
+ 18656380,28158165,46722700,81128632,174277820,
6
+ 209524210,330003580,498215416,1236402232,
7
+ 1799281330,2387776550,2717495235,2879697304,
8
+ 3705771825,4424606020],
9
+ 5 => [12496],
10
+ # A119478
11
+ 6 => [21548919483,90632826380,1771417411016,
12
+ 3524434872392,4773123705616],
13
+ 8 => [1095447416, 1276254780],
14
+ 9 => [805984760],
15
+ 28 =>[14316],
16
+ }
17
+
18
+ # A000396
19
+ @perfect = [6,28,496,8128,33550336,8589869056,137438691328,
20
+ 2305843008139952128,
21
+ 2658455991569831744654692615953842176,
22
+ 191561942608236107294793378084303638130997321548169216].first(4)
23
+
24
+ @perfect.sample(2).each do |n|
25
+ it "should return false for 1-sociable (perfect) number #{n}" do
26
+ n.sociable?(1).should be_false
27
+ end
28
+ end
29
+
30
+ # A063990
31
+ @amicable = [220,284,1184,1210,2620,2924,5020,5564,6232,6368,
32
+ 10744,10856,12285,14595,17296,18416,63020,66928,
33
+ 66992,67095,69615,71145,76084,79750,87633,88730,
34
+ 100485,122265,122368,123152,124155,139815,141664,
35
+ 142310]
36
+
37
+ @amicable.sample(2).each do |n|
38
+ it "should return false for 2-sociable (amicable) number #{n}" do
39
+ n.sociable?(2).should be_false
40
+ end
41
+ end
42
+
43
+ @seq.each do |t, members|
44
+ next if t >= 6 # Too slow :-(
45
+ members.sample(2).each do |n|
46
+ it "should return true for #{t}-sociable number #{n}" do
47
+ n.sociable?(t).should be_true
48
+ end
49
+ end
50
+
51
+ members.to_seq.invert.sample(2).each do |n|
52
+ it "should return false for non-#{t}-sociable number #{n}" do
53
+ n.sociable?(t).should be_false
54
+ end
55
+ end
56
+ end
57
+ end
data/spec/spec_helper.rb CHANGED
@@ -10,7 +10,10 @@ class Seq
10
10
  include Enumerable
11
11
  attr_accessor :exclude, :include
12
12
  def initialize(*args)
13
- @include = args.first?
13
+ @include = args
14
+ if @include.size == 1 and @include.first.is_a?(Enumerable)
15
+ @include = @include.first
16
+ end
14
17
  @exclude = []
15
18
  end
16
19
 
@@ -22,6 +25,7 @@ class Seq
22
25
  end
23
26
 
24
27
  def invert
28
+ return [] if @include.size < 2
25
29
  Seq.new(self.begin..self.end).tap{|s| s.exclude = @include }
26
30
  end
27
31
 
@@ -0,0 +1,14 @@
1
+ describe Integer, "#sum_of_unitary_divisors" do
2
+ # A034448
3
+ @seq = [1,3,4,5,6,12,8,9,10,18,12,20,14,24,24,17,18,30,
4
+ 20,30,32,36,24,36,26,42,28,40,30,72,32,33,48,54,
5
+ 48,50,38,60,56,54,42,96,44,60,60,72,48,68,50,78,
6
+ 72,70,54,84,72,72,80,90,60,120,62,96,80,65,84,144,
7
+ 68,90,96,144]
8
+
9
+ @seq.to_enum.with_index(1).each do |sum, n|
10
+ it "should return #{sum} for #{n}" do
11
+ n.sum_of_unitary_divisors.should == sum
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,31 @@
1
+ describe Integer, "#twin_prime?" do
2
+ # A001359, A006512
3
+ @seq = [3,5,11,17,29,41,59,71,101,107,137,149,179,191,
4
+ 197,227,239,269,281,311,347,419,431,461,521,569,
5
+ 599,617,641,659,809,821,827,857,881,1019,1031,
6
+ 1049,1061,1091,1151,1229,1277,1289,1301,1319,1427,
7
+ 1451,1481,1487,1607].zip(
8
+ [5,7,13,19,31,43,61,73,103,109,139,151,181,193,
9
+ 199,229,241,271,283,313,349,421,433,463,523,571,
10
+ 601,619,643,661,811,823,829,859,883,1021,1033,
11
+ 1051,1063,1093,1153,1231,1279,1291,1303,1321,1429,
12
+ 1453,1483,1489,1609])
13
+
14
+ @seq.each do |p, q|
15
+ it "should return true for twin-primes #{p} and #{q}" do
16
+ p.twin_prime?(q).should be_true
17
+ end
18
+ end
19
+
20
+ it "returns false for two primes which are not twin" do
21
+ 2.twin_prime?(29).should be_false
22
+ end
23
+
24
+ it "returns false for a prime and a composite" do
25
+ 17.twin_prime?(20).should be_false
26
+ end
27
+
28
+ it "returns false for two composites with a difference of two" do
29
+ 20.twin_prime?(22).should be_false
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ describe Integer, "#unhappy?" do
2
+ # A031177
3
+ @seq = [2,3,4,5,6,8,9,11,12,14,15,16,17,18,20,21,22,24,
4
+ 25,26,27,29,30,33,34,35,36,37,38,39,40,41,42,43,
5
+ 45,46,47,48,50,51,52,53,54,55,56,57,58,59,60,61,
6
+ 62,63,64,65,66,67,69,71,72,73,74,75,76,77,78,80,
7
+ 81,83].to_seq
8
+
9
+ @seq.each do |n|
10
+ it "should return true for unhappy number #{n}" do
11
+ n.should be_unhappy
12
+ end
13
+ end
14
+
15
+ @seq.invert.each do |n|
16
+ it "should return false for happy number #{n}" do
17
+ n.should_not be_unhappy
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ describe Integer, "#unitary_amicable?" do
2
+ # A002952, A002953
3
+ @seq = [114,1140,18018,32130,44772,56430,67158,142310,
4
+ 180180,197340,241110,296010,308220,462330,591030,
5
+ 669900,671580,785148,815100,1004850,1077890,
6
+ 1080150,1156870,1177722,1222650,1281540,1475810,
7
+ 1511930,1571388].zip(
8
+ [126,1260,22302,40446,49308,64530,73962,168730,
9
+ 223020,286500,242730,429750,365700,548550,618570,
10
+ 827700,739620,827652,932100,1241550,1099390,
11
+ 1291050,1292570,1241478,1398150,1621500,1669150,
12
+ 1598470,1654212])
13
+
14
+ @seq.each do |m, n|
15
+ it "should return true for unitary amicable pair (#{m},#{n})" do
16
+ m.unitary_amicable?(n).should be_true
17
+ end
18
+
19
+ it "should return true for unitary amicable pair (#{n},#{m})" do
20
+ n.unitary_amicable?(m).should be_true
21
+ end
22
+
23
+ o, p = n+m, @seq.reject{|pair| pair == [n, m]}.sample.last
24
+ it "should return false for non-unitary amicable pair (#{o},#{p})" do
25
+ o.unitary_amicable?(p).should_not be_true
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,30 @@
1
+ describe Integer, "#unitary_sociable?" do
2
+ # A000173
3
+ @seq = {
4
+ 3 => [30],
5
+ 4 => [263820, 395730, 172459210, 209524210, 384121920, 1799281330,
6
+ 2069510520, 2514290520],
7
+ 5 => [1482],
8
+ 6 => [698130, 341354790, 530946330, 582129630],
9
+ 14 => [2418, 24180, 35238],
10
+ 65 => [473298],
11
+ 25 => [763620],
12
+ 39 => [2212026],
13
+ 26 => [2233554],
14
+ 10 => [525150234, 5251502340],
15
+ 12 => [3344596854]
16
+ }
17
+
18
+ (3..5).map{|_| [_, @seq[_]]}.each do |t, members|
19
+ members.sample(1).each do |n|
20
+ it "should return true for #{t}-unitary-sociable number #{n}" do
21
+ n.unitary_sociable?(t).should be_true
22
+ end
23
+
24
+ m = n - 2
25
+ it "should return false for non-#{t}-unitary-sociable number #{m}" do
26
+ m.unitary_sociable?(t).should be_false
27
+ end
28
+ end
29
+ end
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: numb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.77.0
4
+ version: 0.84.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Run Paint Run Run
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-21 00:00:00 +00:00
12
+ date: 2010-02-13 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -42,6 +42,7 @@ files:
42
42
  - lib/numb/abundancy.rb
43
43
  - lib/numb/abundant.rb
44
44
  - lib/numb/achilles.rb
45
+ - lib/numb/aliquot_sequence.rb
45
46
  - lib/numb/almost_perfect.rb
46
47
  - lib/numb/almost_prime.rb
47
48
  - lib/numb/amicable.rb
@@ -74,6 +75,7 @@ files:
74
75
  - lib/numb/economical.rb
75
76
  - lib/numb/emrip.rb
76
77
  - lib/numb/equidigital.rb
78
+ - lib/numb/evil.rb
77
79
  - lib/numb/extravagant.rb
78
80
  - lib/numb/factorial.rb
79
81
  - lib/numb/factorion.rb
@@ -116,6 +118,7 @@ files:
116
118
  - lib/numb/nth_prime.rb
117
119
  - lib/numb/number_of_divisors.rb
118
120
  - lib/numb/octagonal.rb
121
+ - lib/numb/odious.rb
119
122
  - lib/numb/ordinal.rb
120
123
  - lib/numb/ore.rb
121
124
  - lib/numb/parasitic.rb
@@ -146,20 +149,26 @@ files:
146
149
  - lib/numb/smarandache_wellin.rb
147
150
  - lib/numb/smith.rb
148
151
  - lib/numb/smooth.rb
152
+ - lib/numb/sociable.rb
149
153
  - lib/numb/sophie_germain_prime.rb
150
154
  - lib/numb/sphenic.rb
151
155
  - lib/numb/square.rb
152
156
  - lib/numb/square_free.rb
153
157
  - lib/numb/sublime.rb
154
158
  - lib/numb/sum_of_squares.rb
159
+ - lib/numb/sum_of_unitary_divisors.rb
155
160
  - lib/numb/superabundant.rb
156
161
  - lib/numb/superperfect.rb
157
162
  - lib/numb/totient.rb
158
163
  - lib/numb/triangular.rb
159
164
  - lib/numb/trimorphic.rb
165
+ - lib/numb/twin_prime.rb
160
166
  - lib/numb/undulating.rb
167
+ - lib/numb/unhappy.rb
168
+ - lib/numb/unitary_amicable.rb
161
169
  - lib/numb/unitary_divisor.rb
162
170
  - lib/numb/unitary_perfect.rb
171
+ - lib/numb/unitary_sociable.rb
163
172
  - lib/numb/untouchable.rb
164
173
  - lib/numb/vampire.rb
165
174
  - lib/numb/weird.rb
@@ -204,6 +213,7 @@ files:
204
213
  - spec/economical_spec.rb
205
214
  - spec/emrip_spec.rb
206
215
  - spec/equidigital_spec.rb
216
+ - spec/evil_spec.rb
207
217
  - spec/extravagant_spec.rb
208
218
  - spec/factorial_spec.rb
209
219
  - spec/factorion_spec.rb
@@ -244,6 +254,7 @@ files:
244
254
  - spec/number_of_distinct_prime_factors_spec.rb
245
255
  - spec/number_of_prime_factors_spec.rb
246
256
  - spec/octagonal_spec.rb
257
+ - spec/odious_spec.rb
247
258
  - spec/ordinal_spec.rb
248
259
  - spec/ore_spec.rb
249
260
  - spec/parasitic_spec.rb
@@ -275,6 +286,7 @@ files:
275
286
  - spec/smarandache_wellin_spec.rb
276
287
  - spec/smith_spec.rb
277
288
  - spec/smooth_spec.rb
289
+ - spec/sociable_spec.rb
278
290
  - spec/sophie_germain_prime_spec.rb
279
291
  - spec/spec_helper.rb
280
292
  - spec/sphenic_spec.rb
@@ -282,14 +294,19 @@ files:
282
294
  - spec/square_spec.rb
283
295
  - spec/sublime_spec.rb
284
296
  - spec/sum_of_squares.rb
297
+ - spec/sum_of_unitary_divisors_spec.rb
285
298
  - spec/superabundant_spec.rb
286
299
  - spec/superperfect_spec.rb
287
300
  - spec/totient_spec.rb
288
301
  - spec/triangular_spec.rb
289
302
  - spec/trimorphic_spec.rb
303
+ - spec/twin_prime_spec.rb
290
304
  - spec/undulating_spec.rb
305
+ - spec/unhappy_spec.rb
306
+ - spec/unitary_amicable_spec.rb
291
307
  - spec/unitary_divisor_spec.rb
292
308
  - spec/unitary_perfect.rb
309
+ - spec/unitary_sociable.rb
293
310
  - spec/untouchable_spec.rb
294
311
  - spec/vampire_spec.rb
295
312
  - spec/weird_spec.rb
@@ -340,6 +357,7 @@ test_files:
340
357
  - spec/equidigital_spec.rb
341
358
  - spec/primorial_spec.rb
342
359
  - spec/superabundant_spec.rb
360
+ - spec/sociable_spec.rb
343
361
  - spec/nivenmorphic_spec.rb
344
362
  - spec/dudeney_spec.rb
345
363
  - spec/centered_triangular_spec.rb
@@ -361,6 +379,7 @@ test_files:
361
379
  - spec/woodall_spec.rb
362
380
  - spec/abundancy_spec.rb
363
381
  - spec/polite_spec.rb
382
+ - spec/unitary_amicable_spec.rb
364
383
  - spec/zerofree_spec.rb
365
384
  - spec/automorphic_spec.rb
366
385
  - spec/minimal_spec.rb
@@ -370,6 +389,7 @@ test_files:
370
389
  - spec/zeisel_spec.rb
371
390
  - spec/smooth_spec.rb
372
391
  - spec/d_spec.rb
392
+ - spec/unitary_sociable.rb
373
393
  - spec/spec_helper.rb
374
394
  - spec/heptagonal_spec.rb
375
395
  - spec/kynea_spec.rb
@@ -391,6 +411,7 @@ test_files:
391
411
  - spec/breeder_spec.rb
392
412
  - spec/sphenic_spec.rb
393
413
  - spec/idoneal_spec.rb
414
+ - spec/sum_of_unitary_divisors_spec.rb
394
415
  - spec/lucas_carmichael_spec.rb
395
416
  - spec/rhonda_spec.rb
396
417
  - spec/totient_spec.rb
@@ -406,11 +427,13 @@ test_files:
406
427
  - spec/highly_composite_spec.rb
407
428
  - spec/frugal_spec.rb
408
429
  - spec/divides_spec.rb
430
+ - spec/odious_spec.rb
409
431
  - spec/semiprime_spec.rb
410
432
  - spec/deficient_spec.rb
411
433
  - spec/almost_perfect_spec.rb
412
434
  - spec/amicable_spec.rb
413
435
  - spec/happy_spec.rb
436
+ - spec/twin_prime_spec.rb
414
437
  - spec/hexagonal_spec.rb
415
438
  - spec/wieferich_prime_spec.rb
416
439
  - spec/fibonacci_spec.rb
@@ -423,6 +446,7 @@ test_files:
423
446
  - spec/core_spec.rb
424
447
  - spec/lucas_spec.rb
425
448
  - spec/trimorphic_spec.rb
449
+ - spec/evil_spec.rb
426
450
  - spec/harshad_spec.rb
427
451
  - spec/cube_spec.rb
428
452
  - spec/ore_spec.rb
@@ -456,3 +480,4 @@ test_files:
456
480
  - spec/aspiring_spec.rb
457
481
  - spec/mobius_spec.rb
458
482
  - spec/positive_spec.rb
483
+ - spec/unhappy_spec.rb