DojoDeveloppement/Lundi15Decembre2008Rétrospective du /Lundi8Decembre2008 :
Les tests : ScoreBowlingTest.rb
require "test/unit"
require "ScoreBowling"
class ScoreBowlingTest < Test::Unit::TestCase
def assert_score_equal scoreAttendu, lancers
assert_equal scoreAttendu, score(lancers)
end
def testPouilleux
assert_score_equal 0,
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
end
def testSansBonus
assert_score_equal 1,
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
assert_score_equal 2,
[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
assert_score_equal 3,
[1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0]
end
def testUnSpareAuPremierTour
assert_score_equal 10 + 5 + 5,
[1,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
assert_score_equal 10 + 6 + 6,
[0,0,1,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
end
def testUnStrikeDansLaPartie
assert_score_equal 10 + 5 + 5,
[10,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
end
def testRecette
lancers = [9,0,6,4,5,2,10,7,2,10,10,10,6,4,10,10, 2]
assert_equal 177, score(lancers)
end
end
ScoreBowling.rb
NB_TOURS = 10
def strike? lancers, tour
lancers[tour] == 10
end
def spare? lancers, tour
lancers[tour] + lancers[tour + 1] == 10
end
def bonus lancers, tour
lancers[tour + 2]
end
def bonus? lancers, tour
strike?(lancers, tour) || spare?(lancers, tour)
end
def score lancers
resultat = 0
tour = 0
NB_TOURS.times do |i|
resultat += lancers[tour] + lancers[tour+1]
resultat += bonus(lancers, tour) if bonus? (lancers, tour)
tour += strike?(lancers, tour) ? 1 : 2
end
resultat
end