$5 + 10 CHF = $10 if rate is 2:1
$5 * 2 - $10
Make "amount" private
Dollar side effects?
Money rounding?
equals()
hashCode()
public void testEquality() {
assertTrue(new Dollar(5).equals(new Dollar(5)));
}
class Dollar
attr_reader :amount
def initialize(aAmount)
@amount = aAmount
end
def times(multiplier)
Dollar.new(@amount * multiplier)
end
def equals(object)
@amount == object.amount
end
end
require 'test/unit'
require 'dollar.rb'
class TestDollar < Test::Unit::TestCase
def test_multiplication
five = Dollar.new(5)
product = five.times(2)
assert_equal(10, product.amount)
product = five.times(3)
assert_equal(15, product.amount)
end
def test_equality
assert_equal(true, Dollar.new(5).equals(Dollar.new(5)))
assert_equal(false, Dollar.new(5).equals(Dollar.new(6)))
end
end
require 'spec'
require 'dollar.rb'
class DollarSpecification < Spec::Context
def multiplication
five = Dollar.new(5)
product = five.times(2)
product.amount.should.equal 10
product = five.times(3)
product.amount.should.equal 15
end
def equality
Dollar.new(5).equals(Dollar.new(5)).should.equal true
Dollar.new(5).equals(Dollar.new(6)).should.equal false
end
end