A Ruby implementation of the FizzBuzz test using the Enumerator class
Some days ago I learnt about The FizzBuzz Test and did a simple implementation in Ruby. The FizzBuzz test is a simple algorithm that is supposed to do the following:
For each number from 1 to 100:
- If the number is divisible by 3, print “Fizz”
- If the number is divisible by 5, print “Buzz”
- If the number is divisible by both 3 and 5, print “FizzBuzz”
- Otherwise print the number
I was just reading about how you can use the Enumerator class to have generators in the Programming Ruby 1.9 book, and thought that a good implementation could be done using just an Enumerator, so here it is, along with a simple RSpect test:
FizzBuzz = Enumerator.new do |yielder| count = 1 loop do if count % 3 == 0 if count % 5 == 0 yielder.yield "FizzBuzz" else yielder.yield "Fizz" end elsif count % 5 == 0 yielder.yield "Buzz" else yielder.yield count end count += 1 end end |
require_relative 'fizzbuzz' describe FizzBuzz do before(:all) do @fizzbuzzes = FizzBuzz.first(100) end it "returns 'Fizz' for all multiples of 3" do @fizzbuzzes[3-1].should == 'Fizz' end it "returns 'Buzz' for all multiples of 5" do @fizzbuzzes[5-1].should == 'Buzz' end it "returns 'FizzBuzz' for all multiples of 3 and 5" do @fizzbuzzes[60 - 1].should == 'FizzBuzz' end it "returns the passed number if not a multiple of 3 or 5" do @fizzbuzzes[1 - 1].should == 1 end end |
You can also find the code in its GitHub repository: https://github.com/brafales/ruby-fizzbuzz.
Push git tags to a remote repository Ruby on Rails, Varnish and user dependent content