eulers_day_off 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe EulersDayOff do
4
+ it "can generate a random list of 25 letters" do
5
+ letters = EulersDayOff.random_letters
6
+
7
+ letters.size.should == 25
8
+ letters.each do |letter|
9
+ letter.should match(/\A[a-z]{1}\z/)
10
+ end
11
+ end
12
+
13
+ it "can score a 5 x 5 board, ignoring pluals" do
14
+ board = [ %w(c a t b y),
15
+ %w(n r e u k),
16
+ %w(m t a m s),
17
+ %w(b t m s q),
18
+ %w(i y s v w) ]
19
+
20
+ EulersDayOff.score(board).should == 3 + # cat
21
+ 3 + # tam
22
+ 3 + # art
23
+ 4 + # team
24
+ 3 # bum
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe EulersDayOff::LetterGenerator do
4
+ let(:generator) { EulersDayOff::LetterGenerator.new }
5
+
6
+ before do
7
+ @mock = double()
8
+ generator.letters = @mock
9
+ end
10
+
11
+ it "generates 25 letters" do
12
+ @mock.should_receive(:sample).exactly(25).times.and_return('a')
13
+
14
+ random_letters = generator.generate
15
+
16
+ random_letters.size.should == 25
17
+ random_letters.each { |letter| letter.should == 'a' }
18
+ end
19
+
20
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe EulersDayOff::Scorer do
4
+
5
+ let(:scorer) { EulersDayOff::Scorer.new(stub(:include? => true)) }
6
+
7
+ it "gives a score of 0 for empty boards" do
8
+ scorer.score(Array.new(5) { Array.new(5) }).should == 0
9
+ end
10
+
11
+ it "can score a coloum that starts with a word" do
12
+ board = [ ["c", "a", "t", nil, nil], Array.new(5), Array.new(5), Array.new(5), Array.new(5) ]
13
+
14
+ scorer.score(board).should == 3
15
+ end
16
+
17
+ it "can score a coloum that ends with a word" do
18
+ board = [ [nil, nil, "c", "a", "t"], Array.new(5), Array.new(5), Array.new(5), Array.new(5) ]
19
+
20
+ scorer.score(board).should == 3
21
+ end
22
+
23
+ it "can score a row that starts with a word" do
24
+ board = [ ["c", nil, nil, nil, nil], ["a", nil, nil, nil, nil], ["t", nil, nil, nil, nil], Array.new(5), Array.new(5) ]
25
+
26
+ scorer.score(board).should == 3
27
+ end
28
+
29
+ it "can score a row that ends with a word" do
30
+ board = [ Array.new(5), Array.new(5), ["c", nil, nil, nil, nil], ["a", nil, nil, nil, nil], ["t", nil, nil, nil, nil] ]
31
+
32
+ scorer.score(board).should == 3
33
+ end
34
+
35
+ end
@@ -0,0 +1,2 @@
1
+ require 'rspec'
2
+ require 'eulers_day_off'
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe EulersDayOff::WordList do
4
+ let(:filter) { EulersDayOff::WordList.new }
5
+
6
+ it "#insert" do
7
+ filter.insert("blah")
8
+ filter.should include("blah")
9
+ end
10
+
11
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe EulersDayOff::WordLoader do
4
+ let(:loader) { EulersDayOff::WordLoader.new("FAKE_PATH") }
5
+
6
+ before do
7
+ @file_mock = double("file")
8
+ loader.file = @file_mock
9
+ end
10
+
11
+ it "creates a bloom filter from the word list" do
12
+ @file_mock.should_receive(:each_line).and_yield("cat\n").and_yield("dog")
13
+
14
+ bloom_filter_mock = double("bloom filter")
15
+ bloom_filter_mock.should_receive(:insert).with('cat')
16
+ bloom_filter_mock.should_receive(:insert).with('dog')
17
+
18
+ word_list = loader.populate_word_list(bloom_filter_mock)
19
+
20
+ word_list.should be(bloom_filter_mock)
21
+ end
22
+
23
+ end
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: eulers_day_off
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Eric Koslow
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2013-01-23 00:00:00 -06:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rake
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :development
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: rspec
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :development
43
+ version_requirements: *id002
44
+ description: Scores Euler's Day Off boards
45
+ email:
46
+ - ekoslow+eulersdayoff@gmail.com
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files: []
52
+
53
+ files:
54
+ - .gitignore
55
+ - Gemfile
56
+ - LICENSE.txt
57
+ - README.md
58
+ - Rakefile
59
+ - eulers_day_off.gemspec
60
+ - lib/eulers_day_off.rb
61
+ - lib/eulers_day_off/letter_generator.rb
62
+ - lib/eulers_day_off/scorer.rb
63
+ - lib/eulers_day_off/word_list.rb
64
+ - lib/eulers_day_off/word_loader.rb
65
+ - lib/version.rb
66
+ - lib/word_list.txt
67
+ - spec/eulers_day_off_spec.rb
68
+ - spec/letter_generator_spec.rb
69
+ - spec/scorer_spec.rb
70
+ - spec/spec_helper.rb
71
+ - spec/word_list_spec.rb
72
+ - spec/word_loader_spec.rb
73
+ has_rdoc: true
74
+ homepage: https://github.com/ekosz/eulers_day_off
75
+ licenses: []
76
+
77
+ post_install_message:
78
+ rdoc_options: []
79
+
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ segments:
94
+ - 0
95
+ version: "0"
96
+ requirements: []
97
+
98
+ rubyforge_project:
99
+ rubygems_version: 1.3.6
100
+ signing_key:
101
+ specification_version: 3
102
+ summary: Scores Euler's Day Off boards
103
+ test_files:
104
+ - spec/eulers_day_off_spec.rb
105
+ - spec/letter_generator_spec.rb
106
+ - spec/scorer_spec.rb
107
+ - spec/spec_helper.rb
108
+ - spec/word_list_spec.rb
109
+ - spec/word_loader_spec.rb