Sunday, October 25, 2009

Ruby Unit Test

tc_pascals_triangle.rb
require "test/unit"

require "pascals_triangle"

class TestPascalsTriangle < Test::Unit::TestCase
    def setup
        @output = <<END_OUTPUT
                           1                           
                        1     1                        
                     1     2     1                     
                  1     3     3     1                  
               1     4     6     4     1               
            1     5    10    10     5     1            
         1     6    15    20    15     6     1         
      1     7    21    35    35    21     7     1      
   1     8    28    56    70    56    28     8     1   
1     9    36    84    126   126   84    36     9     1
END_OUTPUT
        @rows = @output.each_line.map { |line| line.scan(/\d+/).map { |n| n.to_i } }
       
        @tri = PascalsTriangle.new
    end
   
    def test_next_row
        @rows.each do |row|
            assert_equal(row, @tri.next_row)
        end
    end
end

pascals_triangle.rb
class PascalsTriangle
  def initialize
    @last_row = nil
  end

  def next_row
    @last_row =
    if @last_row.nil?
      [1]
    elsif @last_row == [1]
      [1, 1]
        else
            [1] + @last_row.enum_for(:each_cons, 2).map do |l, r|
                l + r
            end + [1]
    end
  end


end

No comments: