Specs en osherove.com/tdd-kata-1
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 "sum" | |
require "spec_helper.rb" # rspec -i | |
describe 'suma' do | |
before(:each) do | |
@sum = Sum.new # Para no hacer sum = Sum.new en cada spec | |
end | |
it 'Sumar cadena vacia' do | |
@sum.add("").should eq(0) | |
end | |
it 'Sumar un numero' do | |
@sum.add("2").should eq(2) | |
end | |
it 'Sumar dos numeros' do | |
@sum.add("2,3").should eq(5) | |
end | |
it 'Sumar varios numeros caso 1' do | |
@sum.add("2,3,5").should == 10 | |
end | |
it 'Sumar varios numeros caso 1' do | |
@sum.add("0,3,5,8,1").should == 17 | |
end | |
it 'Sumar varios numeros caso 3 con delimitador "\n" ' do | |
@sum.add('1,3\n4,1').should == 9 | |
end | |
it 'Sumar varios numeros con un diferente delimitador' do | |
@sum.add('//;\n2;3;5').should == 10 | |
end | |
it 'Sumar numeros negativos' do | |
@sum.add('//;\n2;1;-3;-5').should == "negatives not allowed -3 -5" | |
end | |
it 'Ignorar numeros > 1000' do | |
@sum.add('//;\n2;1000;1;2').should == 1005 | |
end | |
it 'Ignorar numeros > 1000' do | |
@sum.add('//;\n2;1001;1;2').should == 5 | |
end | |
it 'Un delimitador con varios caracteres' do | |
@sum.add('//[***]\n1***2***3').should == 6 | |
end | |
it 'Muchos delimitadores de un caracter' do | |
@sum.add('//[*][^]\n1*2^3').should == 6 | |
end | |
it 'Muchos delimitadores con varios caracteres' do | |
@sum.add('//[*(*][^)^]\n1*(*2^)^3').should == 6 | |
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
class Sum | |
def add x | |
del = getDelimitador (x) | |
suma = 0 | |
#num = x.gsub('\n',del).split(del) | |
num = mySplit( del, x) | |
msj = error_message(num) | |
if (msj != "") | |
return msj | |
end | |
num.each do |n| | |
suma += n.to_i unless n.to_i > 1000 | |
puts n | |
end | |
suma | |
end | |
def mySplit( del, x) | |
temp = ',' | |
#x.gsub!('\n', temp) | |
del << '\n' | |
del.each do |d| | |
x.gsub!(d, temp) | |
end | |
x.split(temp) | |
end | |
def getDelimitador cadena | |
del = [','] | |
if cadena.size > 2 && ( cadena[0..1] == "//") | |
del << cadena[2] | |
abierto, cerrado = cadena.index('['), cadena.index(']') | |
while abierto != nil && cerrado != nil | |
del << cadena[(abierto + 1)..(cerrado - 1)] | |
cadena[abierto..cerrado] = "" | |
abierto, cerrado = cadena.index('['), cadena.index(']') | |
end | |
end | |
del | |
end | |
def error_message num | |
message1 , message2 = "negatives not allowed", "" | |
num.each do |n| | |
if n.to_i < 0 | |
message2 = message2 + " " + n | |
end | |
end | |
if message2 != "" | |
return message1 + message2 | |
end | |
"" | |
end | |
end |