DojoDeveloppement/Lundi25Janvier2010Participants :
Thèmes proposés
Rétrospective de la dernière session
require 'test/unit'
require 'Lags'
class TestLags<Test::Unit::TestCase
def _test_recette
demandes = [Demande.new(0, 5, 10),
Demande.new(3, 7, 14),
Demande.new(5, 9, 7),
Demande.new(6, 9, 8)]
assert_equal(18, revenu_max(demandes))
end
def verifie_premiere_valeur(attendu, demandes)
mets_a_jour_valeurs!(demandes)
assert_equal(attendu, demandes.first.valeur)
end
def test_une_demande_de_prix_10_a_pour_valeur_10
verifie_premiere_valeur(10, [Demande.new(0, 5, 10)])
end
def test_une_demande_a_pour_valeur_son_prix
verifie_premiere_valeur(14, [Demande.new(0, 5, 14)])
end
def test_deux_demandes_compatibles
verifie_premiere_valeur(17, [Demande.new(0, 5, 10),
Demande.new(5, 6, 7)])
end
def test_deux_demandes_incompatibles
verifie_premiere_valeur(10, [Demande.new(0, 5, 10),
Demande.new(3, 7, 8)])
end
def test_revenu_max_pour_deux_demandes_incompatibles
assert_equal(10, revenu_max([Demande.new(0, 5, 10),
Demande.new(3, 7, 8)]))
assert_equal(14, revenu_max([Demande.new(0, 5, 10),
Demande.new(3, 7, 14)]))
end
def test_revenu_max_pour_deux_demandes_compatibles
assert_equal(17, revenu_max([Demande.new(0, 5, 10),
Demande.new(5, 6, 7)]))
end
def test_revenu_max_pour_trois_demandes_compatibles
assert_equal(23, revenu_max([Demande.new(0, 5, 10),
Demande.new(5, 6, 7),
Demande.new(12, 5, 6)]))
end
def test_revenu_max_pour_d1_puis_d2_ou_exclusif_d3
assert_equal(18.101, revenu_max([Demande.new(0, 5, 10.001),
Demande.new(5, 6, 7.010),
Demande.new(5, 6, 8.100)]))
end
end
def revenu_max(demandes)
mets_a_jour_valeurs!(demandes)
valeurs = demandes.map { |demande| demande.valeur }
valeurs.max
end
def mets_a_jour_valeurs!(demandes)
nouvelles_valeurs = demandes.clone
(demandes.size-1).downto(1) do |i|
if demandes[i-1].termine_avant(demandes[i])
demandes[i-1].valeur += demandes[i].valeur
end
end
end
class Demande
attr_reader :debut
attr_accessor :valeur
def initialize(debut, duree, prix)
@valeur = prix
@debut = debut
@duree = duree
end
def termine_avant(autre)
@debut + @duree <= autre.debut
end
end