// ****************************************************************
// This is free software licensed under the NUnit license. You
// may obtain a copy of the license as well as information regarding
// copyright ownership at http://nunit.org/?p=license&r=2.4.
// ****************************************************************
namespace NUnit.Samples.Money
{
using System;
using System.Text;
/// A simple Money.
class Money: IMoney
{
private int fAmount;
private String fCurrency;
/// Constructs a money from the given amount and
/// currency.
public Money(int amount, String currency)
{
fAmount= amount;
fCurrency= currency;
}
/// Adds a money to this money. Forwards the request to
/// the AddMoney helper.
public IMoney Add(IMoney m)
{
return m.AddMoney(this);
}
public IMoney AddMoney(Money m)
{
if (m.Currency.Equals(Currency) )
return new Money(Amount+m.Amount, Currency);
return new MoneyBag(this, m);
}
public IMoney AddMoneyBag(MoneyBag s)
{
return s.AddMoney(this);
}
public int Amount
{
get { return fAmount; }
}
public String Currency
{
get { return fCurrency; }
}
public override bool Equals(Object anObject)
{
if (IsZero)
if (anObject is IMoney)
return ((IMoney)anObject).IsZero;
if (anObject is Money)
{
Money aMoney= (Money)anObject;
return aMoney.Currency.Equals(Currency)
&& Amount == aMoney.Amount;
}
return false;
}
public override int GetHashCode()
{
return fCurrency.GetHashCode()+fAmount;
}
public bool IsZero
{
get { return Amount == 0; }
}
public IMoney Multiply(int factor)
{
return new Money(Amount*factor, Currency);
}
public IMoney Negate()
{
return new Money(-Amount, Currency);
}
public IMoney Subtract(IMoney m)
{
return Add(m.Negate());
}
public override String ToString()
{
StringBuilder buffer = new StringBuilder();
buffer.Append("["+Amount+" "+Currency+"]");
return buffer.ToString();
}
}
}