Created
December 13, 2010 22:54
-
-
Save adolfont/739752 to your computer and use it in GitHub Desktop.
Uma especificação para a operação tapa buraco
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class TapaBuraco | |
def calcula(nomeRua, quantBuracos, grauPref, comprimento) | |
resposta = Hash.new | |
raise "nomeRua deve ser uma String" unless nomeRua.kind_of? String | |
raise "quantBuracos deve ser um Fixnum" unless quantBuracos.kind_of? Fixnum | |
raise "grauPref deve ser um Fixnum ou um Float" unless grauPref.kind_of? Fixnum or grauPref.kind_of? Float | |
raise "comprimento deve ser um Fixnum" unless comprimento.kind_of? Fixnum | |
if (nomeRua == "" or quantBuracos == 0 or | |
grauPref <=0 or grauPref > 1 or comprimento <=0) | |
resposta["custo"]="Erro" | |
else | |
resposta["custo"]=quantBuracos*comprimento*1000 | |
if (grauPref > 0.8) | |
resposta["data"]="01/02/2011" | |
elsif (grauPref > 0.6) | |
resposta["data"]="01/04/2011" | |
else | |
resposta["data"]="15/06/2011" | |
end | |
end | |
return resposta | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require "tapaBuraco" | |
# limitação: Ruby não faz checagem estática de tipos | |
# limitação: só sdá para testar alguns valores específicos | |
describe TapaBuraco do | |
before do | |
@tapaBuraco = TapaBuraco.new | |
@rua = "Rua das Flores" | |
end | |
it "o nome da rua não pode ser vazio" do | |
@tapaBuraco.calcula("",1,1,1)["custo"].should == "Erro" | |
end | |
it "a quantidade de buracos da rua deve ser igual ou superior a 1" do | |
@tapaBuraco.calcula(@rua,0,1,1)["custo"].should == "Erro" | |
@tapaBuraco.calcula(@rua,1,1,1)["custo"].should == 1000 | |
end | |
it "o grau de preferência da rua deve ser um valor entre 0 e 1, maior do que zero e menor ou igual a 1" do | |
@tapaBuraco.calcula(@rua,1,0,1)["custo"].should == "Erro" | |
@tapaBuraco.calcula(@rua,1,2,1)["custo"].should == "Erro" | |
@tapaBuraco.calcula(@rua,1,0.5,1)["custo"].should == 1000 | |
@tapaBuraco.calcula(@rua,1,1,1)["custo"].should == 1000 | |
end | |
it "o comprimento da rua deve ser um valor superior a 0" do | |
@tapaBuraco.calcula(@rua,1,1,-1)["custo"].should == "Erro" | |
@tapaBuraco.calcula(@rua,1,1,0)["custo"].should == "Erro" | |
@tapaBuraco.calcula(@rua,1,1,1)["custo"].should == 1000 | |
end | |
it "o custo é igual ao comprimento multiplicado pela quantidade de buracos, por sua vez multiplicado por mil" do | |
@tapaBuraco.calcula(@rua,1,1,1)["custo"].should == 1000 | |
@tapaBuraco.calcula(@rua,2,1,1)["custo"].should == 2000 | |
@tapaBuraco.calcula(@rua,1,1,2)["custo"].should == 2000 | |
@tapaBuraco.calcula(@rua,2,1,2)["custo"].should == 4000 | |
end | |
describe "#data" do | |
it "se o grau de preferência for superior a 0.8, a data será 01/02/2011" do | |
@tapaBuraco.calcula(@rua,1,0.81,1)["custo"].should == 1000 | |
@tapaBuraco.calcula(@rua,1,0.81,1)["data"].should == "01/02/2011" | |
end | |
it "se o grau de preferência igual ou inferior a 0.8 e superior a 0.6, a data será 01/04/2011" do | |
@tapaBuraco.calcula(@rua,1,0.8,1)["custo"].should == 1000 | |
@tapaBuraco.calcula(@rua,1,0.8,1)["data"].should == "01/04/2011" | |
end | |
it "se o grau de preferência igual ou inferior a 0.6, a data será 15/06/2011" do | |
@tapaBuraco.calcula(@rua,1,0.6,1)["custo"].should == 1000 | |
@tapaBuraco.calcula(@rua,1,0.6,1)["data"].should == "15/06/2011" | |
end | |
end | |
describe "#checagemTipos" do | |
it "o nome da rua é do tipo String" do | |
lambda{@tapaBuraco.calcula(0,1,1,1)}.should raise_error | |
end | |
it "a quantidade de buracos é um valor inteiro" do | |
lambda{@tapaBuraco.calcula(@rua,0.5,1,1)}.should raise_error | |
end | |
it "o grau de preferência é um valor real (ou inteiro)" do | |
lambda{@tapaBuraco.calcula(@rua,1,"a",1)}.should raise_error | |
end | |
it "o comprimento é um valor inteiro" do | |
lambda{@tapaBuraco.calcula(@rua,1,1,0.5)}.should raise_error | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment