Skip to content

Instantly share code, notes, and snippets.

@adolfont
Created December 13, 2010 22:54
Show Gist options
  • Save adolfont/739752 to your computer and use it in GitHub Desktop.
Save adolfont/739752 to your computer and use it in GitHub Desktop.
Uma especificação para a operação tapa buraco
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
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