Skip to content

Commit

Permalink
first approach, trying to learn TDD
Browse files Browse the repository at this point in the history
  • Loading branch information
GermanDZ authored and 12meses12katas committed Mar 1, 2011
1 parent dc14a35 commit 3e7e1d5
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 0 deletions.
24 changes: 24 additions & 0 deletions germandz/fizzbuzz.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
def fizz? number
(number%3 == 0) || (number.to_s.include?"3")
end

def buzz? number
(number%5 == 0) || (number.to_s.include?"5")
end

def fizzbuzz? number
fizz?(number) && buzz?(number)
end

def output_for_number number
output = ""
output << "Fizz" if fizz? number
output << "Buzz" if buzz? number
output << "?" if fizzbuzz? number
output << number.to_s if output.empty?
output
end

def fizzbuzz
(1..100).inject("") { |result, number| result << output_for_number(number) << "\n" }
end
61 changes: 61 additions & 0 deletions germandz/fizzbuzz_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
require File.dirname(__FILE__) + "/fizzbuzz.rb"

describe "fizzbuzz" do

NEW_LINE_SEPARATOR = "\n"

def lines string
string.split(NEW_LINE_SEPARATOR)
end

def number_line_for_number number
number-1
end

it "must return 100 lines" do
lines(fizzbuzz).count.should == 100
end

it "must return 1 and 2 in the first two lines" do
lines(fizzbuzz)[number_line_for_number(1)].should == "1"
lines(fizzbuzz)[number_line_for_number(2)].should == "2"
end

it "must include 'Fizz' when line is for number 3" do
lines(fizzbuzz)[number_line_for_number(3)].should include "Fizz"
end

it "must include 'Fizz' when line is for a multiple of 3" do
(1..33).each do |base|
number = base*3
lines(fizzbuzz)[number_line_for_number(number)].should include "Fizz"
end
end

it "must include 'Buzz' when line is for number 5" do
lines(fizzbuzz)[number_line_for_number(5)].should include "Buzz"
end

it "must include 'Buzz' when line is for a multiple of 5" do
(1..20).each do |base|
number = base*5
lines(fizzbuzz)[number_line_for_number(number)].should include "Buzz"
end
end

it "must include '?' when line is for a multiple of 3 and 5" do
(1..6).each do |base|
number = base*3*5
lines(fizzbuzz)[number_line_for_number(number)].should include "?"
end
end

it "must include 'Fizz' when line is for a number including a 3" do
lines(fizzbuzz)[number_line_for_number(43)].should include "Fizz"
end

it "must include 'Buzz' when line is for a number including a 5" do
lines(fizzbuzz)[number_line_for_number(57)].should include "Buzz"
end

end

0 comments on commit 3e7e1d5

Please sign in to comment.