Skip to content

Instantly share code, notes, and snippets.

@erich
Created May 16, 2012 16:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save erich/2711999 to your computer and use it in GitHub Desktop.
Save erich/2711999 to your computer and use it in GitHub Desktop.
Test
#!/usr/bin/env ruby
class FirstTenPrimeNumbersMath
def prime_numbers
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
end
def multiply(first_number, second_number)
if are_integers?(first_number, second_number)
first_number * second_number
else
"Only integers are allowed"
end
end
def are_integers?(first_number, second_number)
first_number.is_a? Integer and second_number.is_a? Integer
end
def multiply_row_by_number(number)
prime_numbers.inject([]) {|array, prime_number| array << multiply(number, prime_number)}
end
end
class TablePresenter
def dashes
"---------------------------------------------"
end
def first_row
dashes+"\n"
end
def header_string(string)
string
end
def header(string)
first_row + header_string(string) + "\n" + first_row
end
def footer
dashes
end
def format_element(number)
number.to_s+"|"
end
def format_row(array)
array.inject("|") {|string, element| string += format_element(element)}
end
def format_column(array)
array
end
end
class PrimesTable
attr_accessor :prime_numbers, :table_presenter
def initialize(prime_numbers, table_presenter)
@prime_numbers = prime_numbers
@table_presenter = table_presenter
end
def format_table
puts @table_presenter.header("Times 10 Primes")
@prime_numbers.prime_numbers.each do |prime_number|
puts prime_number.to_s + @table_presenter.format_row(@prime_numbers.multiply_row_by_number(prime_number))
end
puts @table_presenter.footer
end
end
primes_table = PrimesTable.new(FirstTenPrimeNumbersMath.new, TablePresenter.new)
primes_table.format_table
require 'minitest/spec'
require 'minitest/autorun'
require './prime_numbers.rb'
describe FirstTenPrimeNumbersMath do
before(:each) do
@prime_numbers = FirstTenPrimeNumbersMath.new
end
it 'must have method prime_numbers' do
@prime_numbers.prime_numbers.must_equal [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
end
it 'wont include zero' do
@prime_numbers.prime_numbers.wont_include 0
end
it 'must multiply correctly' do
@prime_numbers.multiply(2, 2).must_equal 4
end
it 'must multiply only integers' do
@prime_numbers.multiply('as', 1).must_equal "Only integers are allowed"
end
it 'must multiply first row' do
@prime_numbers.multiply_row_by_number(2).must_equal [4, 6, 10, 14, 22, 26, 34, 38, 46, 58]
end
end
describe TablePresenter do
before(:each) do
@table = TablePresenter.new
end
it 'must print table header' do
@table.header_string('Times 10 Primes').must_equal "Times 10 Primes"
end
it 'must print table footer' do
@table.footer.must_equal "---------------------------------------------"
end
it 'must print not first element with proper format' do
@table.format_element(2).must_equal "2|"
end
it 'must format row' do
@table.format_row([1,2,3]).must_equal "|1|2|3|"
end
end
describe PrimesTable do
before(:each) do
@prime_numbers = FirstTenPrimeNumbersMath.new
@table = TablePresenter.new
@primes_table = PrimesTable.new(@prime_numbers, @table)
end
it 'must have prime_numbers and table_presenter methods' do
@primes_table.prime_numbers.methods.must_include(:multiply)
@primes_table.table_presenter.methods.must_include(:first_row)
end
end
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs.push "lib"
t.test_files = FileList['*_spec.rb']
t.verbose = true
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment