functional-yahtzee 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.bundle/config +1 -0
- data/.gitignore +2 -0
- data/.ruby-version +1 -0
- data/.travis.yml +6 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +71 -0
- data/Guardfile +6 -0
- data/README.md +115 -0
- data/Rakefile +13 -0
- data/artifacts/score_card.jpg +0 -0
- data/bin/console +31 -0
- data/functional_yahtzee.gemspec +25 -0
- data/lib/dice.rb +19 -0
- data/lib/errors.rb +5 -0
- data/lib/game.rb +33 -0
- data/lib/probability.rb +32 -0
- data/lib/round.rb +11 -0
- data/lib/score_card.rb +59 -0
- data/lib/scoring.rb +48 -0
- data/lib/scoring/lower_card.rb +62 -0
- data/lib/scoring/upper_card.rb +34 -0
- data/lib/yahtzee.rb +13 -0
- data/test/integration/dice_test.rb +20 -0
- data/test/integration/game_test.rb +431 -0
- data/test/integration/scoring_test.rb +20 -0
- data/test/test_helper.rb +19 -0
- data/test/unit/dice_test.rb +40 -0
- data/test/unit/game_test.rb +27 -0
- data/test/unit/probability_test.rb +35 -0
- data/test/unit/score_card_test.rb +77 -0
- data/test/unit/scoring/lower_card_test.rb +71 -0
- data/test/unit/scoring/upper_card_test.rb +53 -0
- data/test/unit/scoring_test.rb +169 -0
- metadata +145 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'scoring'
|
3
|
+
|
4
|
+
describe Yahtzee::Scoring do
|
5
|
+
subject { Yahtzee::Scoring }
|
6
|
+
|
7
|
+
describe "score(dice, placement)" do
|
8
|
+
describe "UpperCard Scoring" do
|
9
|
+
let(:score_card) { Yahtzee::ScoreCard.new }
|
10
|
+
let(:save_card) { Yahtzee::ScoreCard.persist(score_card) }
|
11
|
+
it "must keep state" do
|
12
|
+
card = subject.score([1,1,3,4,5], :aces, &save_card)
|
13
|
+
card = subject.score([1,2,2,4,5], :twos, &save_card)
|
14
|
+
card.aces.must_equal 2
|
15
|
+
card.twos.must_equal 4
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
if RUBY_ENGINE == "ruby"
|
2
|
+
begin
|
3
|
+
require 'simplecov'
|
4
|
+
require 'coveralls'
|
5
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
6
|
+
Coveralls::SimpleCov::Formatter,
|
7
|
+
SimpleCov::Formatter::HTMLFormatter
|
8
|
+
]
|
9
|
+
SimpleCov.start do
|
10
|
+
add_filter "/test/"
|
11
|
+
end
|
12
|
+
rescue LoadError
|
13
|
+
warn "unable to load Coveralls!"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
require 'minitest/autorun'
|
17
|
+
|
18
|
+
require_relative '../lib/yahtzee'
|
19
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'dice'
|
4
|
+
|
5
|
+
describe Yahtzee::Dice do
|
6
|
+
subject { Yahtzee::Dice }
|
7
|
+
|
8
|
+
describe ".reroll(keepers)" do
|
9
|
+
subject { Yahtzee::Dice.reroll([1,2,3]) }
|
10
|
+
|
11
|
+
it "must return the keepers + the new roll" do
|
12
|
+
subject.slice(0..2).must_equal([1,2,3])
|
13
|
+
end
|
14
|
+
|
15
|
+
it "must always return 5 digits" do
|
16
|
+
[[1,2,3],[1,2],[1,2,3,4], [1,2,3,4,5,6]].each do |keepers|
|
17
|
+
Yahtzee::Dice.reroll(keepers).count.must_equal 5
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe ".roll(num)" do
|
23
|
+
1.upto(5).each do |roll|
|
24
|
+
it "must retun #{roll} dice" do
|
25
|
+
subject.roll(roll).size.must_equal roll
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "wont allow rolls with more then 5 die" do
|
30
|
+
subject.roll(6).size.must_equal(5)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "must only roll 1-6" do
|
34
|
+
subject.roll(6).each do |roll|
|
35
|
+
(1..6).include?(roll).must_equal true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'game'
|
3
|
+
|
4
|
+
describe Yahtzee::Game do
|
5
|
+
subject { Yahtzee::Game }
|
6
|
+
|
7
|
+
describe "first_roll" do
|
8
|
+
it "must roll the dice and return the roll" do
|
9
|
+
subject.first_roll.must_be_kind_of Array
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "second_roll(keepers)" do
|
14
|
+
let(:keepers) { [1,2,3] }
|
15
|
+
it "must keep the die they want and reroll the rest" do
|
16
|
+
(subject.second_roll(keepers) & [1,2,3]).must_equal keepers
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "third_roll(keepers)" do
|
21
|
+
let(:keepers) { [1,2,3,4] }
|
22
|
+
it "must keep the die they want and reroll the rest" do
|
23
|
+
(subject.third_roll(keepers) & [1,2,3,4]).must_equal keepers
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'probability'
|
3
|
+
|
4
|
+
describe Yahtzee::Probability do
|
5
|
+
subject { Yahtzee::Probability }
|
6
|
+
|
7
|
+
describe "large_straight(dice, rolls_left)" do
|
8
|
+
it "must return 0.3333333333333333 with 2 rolls left" do
|
9
|
+
subject.large_straight([1,2,3,4,6], 2).must_equal(0.3333333333333333)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "must return 0.16666666666666666 with 1 rolls left" do
|
13
|
+
subject.large_straight([1,2,3,4,6], 1).must_equal(0.16666666666666666)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "must return 0.03333333333333333 with 1 rolls left" do
|
17
|
+
subject.large_straight([1,2,2,6,6], 1).must_equal(0.03333333333333333)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "small_straight(dice, rolls_left)" do
|
22
|
+
it "must return 0.16666666666666666 with 2 rolls left" do
|
23
|
+
subject.small_straight([1,2,3,5,6], 2).must_equal(0.16666666666666666)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "must return 0.08333333333333333 with 1 rolls left" do
|
27
|
+
subject.small_straight([1,2,3,5,6], 1).must_equal(0.08333333333333333)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "must return 0.03333333333333333 with 1 rolls left" do
|
31
|
+
subject.small_straight([1,2,5,5,6], 1).must_equal(0.03333333333333333)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'score_card'
|
3
|
+
|
4
|
+
describe Yahtzee::ScoreCard do
|
5
|
+
subject { Yahtzee::ScoreCard }
|
6
|
+
|
7
|
+
describe ".upper_keys" do
|
8
|
+
subject { Yahtzee::ScoreCard.upper_keys }
|
9
|
+
it "must contain all the keys on the upper card" do
|
10
|
+
subject.must_equal [:aces, :twos, :threes, :fours,
|
11
|
+
:fives, :sixes]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe ".lower_keys" do
|
16
|
+
subject { Yahtzee::ScoreCard.lower_keys }
|
17
|
+
it "must contain all the keys on the upper card" do
|
18
|
+
subject.must_equal [:yahtzee, :bonus_yahtzee_1, :bonus_yahtzee_2,
|
19
|
+
:bonus_yahtzee_3, :three_of_a_kind,
|
20
|
+
:four_of_a_kind, :full_house, :small_straight,
|
21
|
+
:large_straight, :chance]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe ".placement_keys" do
|
26
|
+
subject { Yahtzee::ScoreCard.placement_keys }
|
27
|
+
it "must include all the placement keys" do
|
28
|
+
subject.must_equal [:aces, :twos, :threes, :fours, :fives,
|
29
|
+
:sixes, :small_straight, :large_straight,
|
30
|
+
:full_house, :three_of_a_kind, :four_of_a_kind,
|
31
|
+
:yahtzee, :chance]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe ".meta_keys" do
|
36
|
+
subject { Yahtzee::ScoreCard.placement_keys }
|
37
|
+
it "must include all the placement keys" do
|
38
|
+
subject.must_equal [:aces, :twos, :threes, :fours, :fives,
|
39
|
+
:sixes, :small_straight, :large_straight,
|
40
|
+
:full_house, :three_of_a_kind, :four_of_a_kind,
|
41
|
+
:yahtzee, :chance]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe ".persist" do
|
46
|
+
subject { Yahtzee::ScoreCard.persist(score_card) }
|
47
|
+
let(:score_card) { Yahtzee::ScoreCard.new( yahtzee: 50 ) }
|
48
|
+
|
49
|
+
it "will return a new instance of ScoreCard with the old+new vals" do
|
50
|
+
old_id = score_card.object_id
|
51
|
+
score_card = subject.call(:small_straight, 30)
|
52
|
+
score_card.object_id.wont_equal old_id
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "initialize" do
|
57
|
+
it "will update attrs when passed in" do
|
58
|
+
subject.new( {:aces => 4} ).aces.must_equal 4
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "to_hash" do
|
63
|
+
it "must return a hash of the score card elements" do
|
64
|
+
subject.new({aces: 4}).to_hash.must_equal({
|
65
|
+
aces: 4, twos: nil, threes: nil,
|
66
|
+
fours: nil, fives: nil, sixes: nil,
|
67
|
+
upper_subtotal: nil,
|
68
|
+
upper_total: nil, small_straight: nil,
|
69
|
+
large_straight: nil, full_house: nil,
|
70
|
+
three_of_a_kind: nil, four_of_a_kind: nil,
|
71
|
+
yahtzee: nil, chance: nil, bonus_yahtzee_1: nil,
|
72
|
+
bonus_yahtzee_2: nil, bonus_yahtzee_3: nil,
|
73
|
+
lower_subtotal: nil, game_total: nil
|
74
|
+
})
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'scoring/lower_card'
|
3
|
+
|
4
|
+
describe Yahtzee::Scoring::LowerCard do
|
5
|
+
subject { Yahtzee::Scoring::LowerCard }
|
6
|
+
|
7
|
+
describe "score_yahtzee(dice)" do
|
8
|
+
it "must score a yahtzee" do
|
9
|
+
subject.score_yahtzee([4,4,4,4,4]).must_equal 50
|
10
|
+
subject.score_yahtzee([4,4,4,4,6]).must_equal 0
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "score_bonus_yahtzee(dice)" do
|
15
|
+
it "must score a bonus yahtzee" do
|
16
|
+
subject.score_bonus_yahtzee([4,4,4,4,4]).must_equal 100
|
17
|
+
subject.score_bonus_yahtzee([4,4,4,4,6]).must_equal 0
|
18
|
+
end
|
19
|
+
|
20
|
+
#1.upto(3) do |i|
|
21
|
+
# it "must respond to score_bonus_yahtzee_#{i}" do
|
22
|
+
# subject.send("score_bonus_yahtzee_#{i}",[4,4,4,4,4]).must_equal 100
|
23
|
+
# end
|
24
|
+
#end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "score_small_straight(dice)" do
|
28
|
+
it "must score a small straight" do
|
29
|
+
subject.score_small_straight([1,2,3,4,6]).must_equal 30
|
30
|
+
subject.score_small_straight([1,2,3,5,6]).must_equal 0
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "score_large_straight(dice)" do
|
35
|
+
it "must score a large straight" do
|
36
|
+
subject.score_large_straight([1,2,3,4,5]).must_equal 40
|
37
|
+
subject.score_large_straight([1,2,3,4,4]).must_equal 0
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "score_full_house(dice)" do
|
42
|
+
it "must return a score of 25 for a full house" do
|
43
|
+
subject.score_full_house([2,2,2,4,4]).must_equal 25
|
44
|
+
end
|
45
|
+
|
46
|
+
it "must return a score of 0 for no full-house" do
|
47
|
+
subject.score_full_house([1,2,4,4,4]).must_equal 0
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "score_three_of_a_kind(dice)" do
|
52
|
+
it "must total matches 3 or over" do
|
53
|
+
subject.score_three_of_a_kind([1,2,4,4,4]).must_equal 12
|
54
|
+
subject.score_three_of_a_kind([1,2,2,4,4]).must_equal 0
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "score_four_of_a_kind(dice)" do
|
59
|
+
it "must total matches 4 or over" do
|
60
|
+
subject.score_four_of_a_kind([1,4,4,4,4]).must_equal 16
|
61
|
+
subject.score_four_of_a_kind([1,2,2,4,4]).must_equal 0
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "score_min_of_a_kind(dice, min)" do
|
66
|
+
it "must total matches of min or over" do
|
67
|
+
subject.score_min_of_a_kind([1,4,4,4,4], 4).must_equal 16
|
68
|
+
subject.score_min_of_a_kind([1,2,4,4,4], 3).must_equal 12
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'score_card'
|
3
|
+
require 'scoring/upper_card'
|
4
|
+
|
5
|
+
describe Yahtzee::Scoring::UpperCard do
|
6
|
+
subject { Yahtzee::Scoring::UpperCard }
|
7
|
+
|
8
|
+
|
9
|
+
describe "score_sums(dice, scoring_die)" do
|
10
|
+
it "must add up only the scoring_die" do
|
11
|
+
subject.score_sums([1,1,0,0,0], 1).must_equal 2
|
12
|
+
subject.score_sums([1,1,4,4,1], 1).must_equal 3
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "scoring matching digits" do
|
17
|
+
describe "score_aces(dice)" do
|
18
|
+
it "must score only aces" do
|
19
|
+
subject.score_aces([1,2,3,4,5]).must_equal(1)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "score_twos(dice)" do
|
24
|
+
it "must score only twos" do
|
25
|
+
subject.score_twos([1,2,3,4,5]).must_equal(2)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "score_threes(dice)" do
|
30
|
+
it "must score only threes" do
|
31
|
+
subject.score_threes([1,2,3,4,5]).must_equal(3)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "score_fours(dice)" do
|
36
|
+
it "must score only fours" do
|
37
|
+
subject.score_fours([1,2,3,4,5]).must_equal(4)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "score_fives(dice)" do
|
42
|
+
it "must score only fives" do
|
43
|
+
subject.score_fives([1,2,3,4,5]).must_equal(5)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "score_sixes(dice)" do
|
48
|
+
it "must score only sixes" do
|
49
|
+
subject.score_sixes([1,2,3,4,6]).must_equal(6)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,169 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'scoring'
|
3
|
+
|
4
|
+
describe Yahtzee::Scoring do
|
5
|
+
subject { Yahtzee::Scoring }
|
6
|
+
|
7
|
+
describe "score(dice, placement)" do
|
8
|
+
let(:score_card) { Yahtzee::ScoreCard.new }
|
9
|
+
let(:writer) { Yahtzee::ScoreCard.persist(score_card) }
|
10
|
+
|
11
|
+
describe "score_game_total(scores, &writer)" do
|
12
|
+
let(:scores) {{
|
13
|
+
upper_total: 119, lower_subtotal: 166
|
14
|
+
}}
|
15
|
+
|
16
|
+
it "must return a score card with the game total of 285 (119+166)" do
|
17
|
+
subject.score_game_total(scores, &writer).
|
18
|
+
game_total.must_equal 285
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "UpperCard Scoring" do
|
23
|
+
describe "Aces" do
|
24
|
+
it "must return a score card with aces: 2" do
|
25
|
+
subject.score([1,1,3,4,5], :aces, &writer).
|
26
|
+
aces.must_equal 2
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "Twos" do
|
31
|
+
it "must return a score card with twos: 4" do
|
32
|
+
subject.score([1,2,2,4,5], :twos, &writer).
|
33
|
+
twos.must_equal 4
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "Threes" do
|
38
|
+
it "must return a score card with threes: 6" do
|
39
|
+
subject.score([1,3,3,4,5], :threes, &writer).
|
40
|
+
threes.must_equal 6
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "Fours" do
|
45
|
+
it "must return a score card with fours: 8" do
|
46
|
+
subject.score([1,3,4,4,5], :fours, &writer).
|
47
|
+
fours.must_equal 8
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "Fives" do
|
52
|
+
it "must return a score card with fives: 10" do
|
53
|
+
subject.score([1,3,4,5,5], :fives, &writer).
|
54
|
+
fives.must_equal 10
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "Sixes" do
|
59
|
+
it "must return a score card with sixes: 12" do
|
60
|
+
subject.score([1,3,6,5,6], :sixes, &writer).
|
61
|
+
sixes.must_equal 12
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "Upper Subtotal" do
|
66
|
+
let(:scores) {{
|
67
|
+
aces: 2, twos: 4, threes: 6,
|
68
|
+
fours: 8, fives: 10, sixes: 12
|
69
|
+
}}
|
70
|
+
|
71
|
+
it "must return a score card with upper_subtotal: 42" do
|
72
|
+
subject.score_subtotal(scores, :upper_subtotal, &writer).
|
73
|
+
upper_subtotal.must_equal 42
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "score_upper_total(scores, &writer)" do
|
78
|
+
let(:scores) {{
|
79
|
+
aces: 4, twos: 8, threes: 12,
|
80
|
+
fours: 16, fives: 20, sixes: 24
|
81
|
+
}}
|
82
|
+
|
83
|
+
it "must a score card with an upper_total of 119 (84+35)" do
|
84
|
+
subject.score_upper_total(scores, &writer).
|
85
|
+
upper_total.must_equal 119
|
86
|
+
end
|
87
|
+
end
|
88
|
+
describe "when the sum is not over 63" do
|
89
|
+
let(:scores) {{
|
90
|
+
aces: 2, twos: 4, threes: 6,
|
91
|
+
fours: 8, fives: 10, sixes: 12
|
92
|
+
}}
|
93
|
+
it "must return a score card with an upper_total of 42" do
|
94
|
+
subject.score_upper_total(scores, &writer).
|
95
|
+
upper_total.must_equal 42
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "LowerCard Scoring" do
|
101
|
+
describe "chance" do
|
102
|
+
it "must sum the dice" do
|
103
|
+
subject.score([1,2,3,4,5], :chance, &writer).
|
104
|
+
chance.must_equal 15
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "full_house" do
|
109
|
+
it "must return a score card with full_house: 25" do
|
110
|
+
subject.score([1,1,1,2,2], :full_house, &writer).
|
111
|
+
full_house.must_equal 25
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "small_straight" do
|
116
|
+
it "must return a score card with small_straight: 30" do
|
117
|
+
subject.score([1,2,3,4,6], :small_straight, &writer).
|
118
|
+
small_straight.must_equal 30
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "large_straight" do
|
123
|
+
it "must return a score card with large_straight: 40" do
|
124
|
+
subject.score([1,2,3,4,5], :large_straight, &writer).
|
125
|
+
large_straight.must_equal 40
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe "three_of_a_kind" do
|
130
|
+
it "must return a score card with three_of_a_kind: 9" do
|
131
|
+
subject.score([1,2,3,3,3], :three_of_a_kind, &writer).
|
132
|
+
three_of_a_kind.must_equal 9
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe "four_of_a_kind" do
|
137
|
+
it "must return a score card with four_of_a_kind: 16" do
|
138
|
+
subject.score([1,4,4,4,4], :four_of_a_kind, &writer).
|
139
|
+
four_of_a_kind.must_equal 16
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "yahtzee" do
|
144
|
+
it "must return a score card with yahtzee: 50" do
|
145
|
+
subject.score([1,1,1,1,1], :yahtzee, &writer).yahtzee.must_equal 50
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe "bonus_yahtzee_1" do
|
150
|
+
it "must return a score card with bonus_yahtzee_1: 100" do
|
151
|
+
subject.score([1,1,1,1,1], :bonus_yahtzee_1, &writer).
|
152
|
+
bonus_yahtzee_1.must_equal 100
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "Lower Subtotal" do
|
157
|
+
let(:scores) {{
|
158
|
+
full_house: 25, small_straight: 30,
|
159
|
+
large_straight: 40, three_of_a_kind: 9,
|
160
|
+
four_of_a_kind: 12, yahtzee: 50
|
161
|
+
}}
|
162
|
+
it "must return a score card with lower_subtotal: 166" do
|
163
|
+
subject.score_subtotal(scores, :lower_subtotal, &writer).
|
164
|
+
lower_subtotal.must_equal 166
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|