<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    皇家方舟

    TDD 程序代碼(13)

    TestMoney.java:
    package com;

    import junit.framework.TestCase;

    public class TestMoney extends TestCase {
    ?public void testMultiplication() {
    ??Money five = Money.dollar(5);
    ??assertEquals(Money.dollar(10), five.times(2));
    ??assertEquals(Money.dollar(15), five.times(3));
    ?}

    ?public void testEqualsObject() {
    ??assertTrue(Money.dollar(5).equals(Money.dollar(5)));
    ??assertFalse(Money.dollar(5).equals(Money.dollar(6)));
    ??assertFalse(Money.franc(5).equals(Money.dollar(5)));
    ?}

    ?public void testCurrency() {
    ??assertEquals("USD", Money.dollar(1).currency());
    ??assertEquals("CHF", Money.franc(1).currency());
    ?}

    ?public void testSimpleAddition() {
    ??Money five = Money.dollar(5);
    ??Expression result = five.plus(five);
    ??Sum sum = (Sum) result;
    ??Bank bank = new Bank();
    ??Money reduced = bank.reduce(sum, "USD");
    ??assertEquals(Money.dollar(10), reduced);
    ?}

    ?public void testPlusReturnSum() {
    ??Money five = Money.dollar(5);
    ??Expression result = five.plus(five);
    ??Sum sum = (Sum) result;
    ??assertEquals(five, sum.augend);
    ??assertEquals(five, sum.addend);
    ?}

    ?public void testReduceSum() {
    ??Expression sum = new Sum(Money.dollar(3), Money.dollar(4));
    ??Bank bank = new Bank();
    ??Money result = bank.reduce(sum, "USD");
    ??assertEquals(Money.dollar(7), result);
    ?}
    ?public void testReduceMoney(){
    ??Bank bank = new Bank();
    ??Money result = bank.reduce(Money.dollar(1), "USD");
    ??assertEquals(Money.dollar(1),result);
    ?}
    }



    posted on 2006-11-06 23:50 阿輝 閱讀(488) 評論(9)  編輯  收藏 所屬分類: 學習日志

    Feedback

    # re: TDD 程序代碼(13) 2006-11-06 23:50 阿輝

    Money.java:
    package com;

    public class Money implements Expression {

    protected String currency;

    protected int amount;

    public Money(int amount, String currency) {
    this.amount = amount;
    this.currency = currency;
    }

    public Money(int amount) {
    this.amount = amount;
    }

    public boolean equals(Object object) {
    Money money = (Money) object;
    return this.amount == money.amount
    && this.currency.equals(money.currency());
    }

    public static Money dollar(int amount) {
    return new Money(amount, "USD");
    }

    public static Money franc(int amount) {
    return new Money(amount, "CHF");
    }

    public Money times(int mutiplier) {
    return new Money(this.amount * mutiplier, this.currency);
    }

    public String currency() {
    return currency;
    }

    public String toString() {
    return this.currency + "" + this.amount;
    }

    public Expression plus(Money addend) {
    return new Sum(this, addend);
    }
    public Money reduce(String currency){
    return this;
    }
    }  回復  更多評論   

    # re: TDD 程序代碼(13) 2006-11-06 23:50 阿輝

    Bank.java:
    package com;

    public class Bank {

    public Money reduce(Expression expression, String currency) {
    return expression.reduce(currency);
    }

    }
      回復  更多評論   

    # re: TDD 程序代碼(13) 2006-11-06 23:51 阿輝

    Expression.java:
    package com;

    public interface Expression {
    Money reduce(String currency);
    }
      回復  更多評論   

    # re: TDD 程序代碼(13) 2006-11-06 23:51 阿輝

    Sum.java:

    package com;

    public class Sum implements Expression {
    Money augend;

    Money addend;

    public Sum(Money augend, Money addend) {
    this.augend = augend;
    this.addend = addend;
    }

    public Money reduce(String currency) {
    int amount = augend.amount + addend.amount;
    return new Money(amount, currency);
    }
    }
      回復  更多評論   

    # TestMoney.java 最后一章 2006-11-09 15:58 皇家方舟

    package com;


    import junit.framework.TestCase;


    public class TestMoney extends TestCase
    {
    public void testMultiplication()
    {
    Money five = Money.dollar(5);
    assertEquals(Money.dollar(10), five.times(2));
    assertEquals(Money.dollar(15), five.times(3));
    }


    public void testEqualsObject()
    {
    assertTrue(Money.dollar(5).equals(Money.dollar(5)));
    assertFalse(Money.dollar(5).equals(Money.dollar(6)));
    assertFalse(Money.franc(5).equals(Money.dollar(5)));
    }


    public void testCurrency()
    {
    assertEquals("USD", Money.dollar(1).currency());
    assertEquals("CHF", Money.franc(1).currency());
    }


    public void testSimpleAddition()
    {
    Money five = Money.dollar(5);
    Expression result = five.plus(five);
    Sum sum = (Sum)result;
    Bank bank = new Bank();
    Money reduced = bank.reduce(sum, "USD");
    assertEquals(Money.dollar(10), reduced);
    }


    public void testPlusReturnSum()
    {
    Money five = Money.dollar(5);
    Expression result = five.plus(five);
    Sum sum = (Sum)result;
    assertEquals(five, sum.augend);
    assertEquals(five, sum.addend);
    }


    public void testReduceSum()
    {
    Expression sum = new Sum(Money.dollar(3), Money.dollar(4));
    Bank bank = new Bank();
    Money result = bank.reduce(sum, "USD");
    assertEquals(Money.dollar(7), result);
    }


    public void testReduceMoney()
    {
    Bank bank = new Bank();
    Money result = bank.reduce(Money.dollar(1), "USD");
    assertEquals(Money.dollar(1), result);
    }


    public void testReduceMoneyDifferentCurrency()
    {
    Bank bank = new Bank();
    bank.addRate("CHF", "USD", 2);
    Money result = bank.reduce(Money.franc(4), "USD");
    assertEquals(Money.dollar(4 / 2), result);
    }


    public void testIdentityRate()
    {
    assertEquals(1, new Bank().rate("USD", "USD"));
    }


    public void testMixedAddition()
    {
    Expression fiveBucks = Money.dollar(5);
    Expression tenFrancs = Money.franc(10);
    Bank bank = new Bank();
    bank.addRate("CHF", "USD", 2);
    Money result = bank.reduce(fiveBucks.plus(tenFrancs), "USD");
    assertEquals(Money.dollar(10), result);
    }


    public void testSumplusMoney()
    {
    Expression fiveBucks = Money.dollar(5);
    Expression tenFrancs = Money.franc(10);
    Bank bank = new Bank();
    bank.addRate("CHF", "USD", 2);
    Expression sum = new Sum(fiveBucks, tenFrancs).plus(fiveBucks);
    Money result = bank.reduce(sum, "USD");
    assertEquals(Money.dollar(15), result);
    }


    public void testSumTimes()
    {
    Expression fiveBucks = Money.dollar(5);
    Expression tenFrancs = Money.franc(10);
    Bank bank = new Bank();
    bank.addRate("CHF", "USD", 2);
    Expression sum = new Sum(fiveBucks, tenFrancs).times(2);
    Money result = bank.reduce(sum, "USD");
    assertEquals(Money.dollar(20), result);
    }
    }
      回復  更多評論   

    # Expression.java 最后一章 2006-11-09 15:58 皇家方舟

    package com;


    public interface Expression
    {
    Money reduce(Bank bank, String currency);


    Expression plus(Expression tenFrancs);


    Expression times(int multiplier);
    }
      回復  更多評論   

    # Money.java 最后一章 2006-11-09 15:59 皇家方舟

    package com;


    public class Money implements Expression
    {

    protected String currency;

    protected int amount;


    public Money(int amount, String currency)
    {
    this.amount = amount;
    this.currency = currency;
    }


    public Money(int amount)
    {
    this.amount = amount;
    }


    public boolean equals(Object object)
    {
    Money money = (Money)object;
    return this.amount == money.amount
    && this.currency.equals(money.currency());
    }


    public static Money dollar(int amount)
    {
    return new Money(amount, "USD");
    }


    public static Money franc(int amount)
    {
    return new Money(amount, "CHF");
    }


    public Expression times(int mutiplier)
    {
    return new Money(this.amount * mutiplier, this.currency);
    }


    public String currency()
    {
    return currency;
    }


    public String toString()
    {
    return this.currency + "" + this.amount;
    }


    public Expression plus(Expression addend)
    {
    return new Sum(this, addend);
    }


    public Money reduce(Bank bank, String to)
    {
    int rate = bank.rate(this.currency, to);
    return new Money(amount / rate, to);
    }
    }
      回復  更多評論   

    # Bank.java 最后一章 2006-11-09 15:59 皇家方舟

    package com;


    import java.util.Hashtable;


    public class Bank
    {
    private Hashtable<Pair, Integer> rates = new Hashtable<Pair, Integer>();


    public Money reduce(Expression source, String to)
    {
    return source.reduce(this, to);
    }


    public void addRate(String from, String to, int rate)
    {
    rates.put(new Pair(from, to), new Integer(rate));
    }


    int rate(String from, String to)
    {
    if(from.equals(to))
    return 1;
    Integer rate = (Integer)rates.get(new Pair(from, to));
    return rate.intValue();
    }


    private class Pair
    {
    private String from;
    private String to;


    Pair(String from, String to)
    {
    this.from = from;
    this.to = to;
    }


    public boolean equals(Object object)
    {
    Pair pair = (Pair)object;
    return from.equals(pair.from) && to.equals(pair.to);
    }


    public int hashCode()
    {
    return 0;
    }
    }
    }
      回復  更多評論   

    # Sum.java 最后一章 2006-11-09 16:00 皇家方舟

    package com;


    public class Sum implements Expression
    {
    Expression augend;

    Expression addend;


    public Sum(Expression augend, Expression addend)
    {
    this.augend = augend;
    this.addend = addend;
    }


    public Money reduce(Bank bank, String to)
    {
    int amount = augend.reduce(bank, to).amount
    + addend.reduce(bank, to).amount;
    return new Money(amount, to);
    }


    public Expression plus(Expression addend)
    {
    return new Sum(this, addend);
    }


    public Expression times(int multiplier)
    {
    return new Sum(augend.times(multiplier), addend.times(multiplier));
    }
    }
      回復  更多評論   


    My Links

    Blog Stats

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久一本岛在免费线观看2020| 国产中文字幕在线免费观看| 日韩亚洲国产高清免费视频| 在线观看亚洲人成网站| 最近免费中文字幕大全高清大全1 最近免费中文字幕mv在线电影 | 337P日本欧洲亚洲大胆艺术图| 啦啦啦在线免费视频| 亚洲乱妇老熟女爽到高潮的片| 免费视频中文字幕| 黄床大片30分钟免费看| 亚洲国产av一区二区三区| 一个人看www免费高清字幕| 亚洲精品成人无码中文毛片不卡| 久久久久久久岛国免费播放 | 久久成人18免费网站 | 亚洲国产成人99精品激情在线| 久久电影网午夜鲁丝片免费| 亚洲AV网一区二区三区| 中文字幕亚洲图片| 99热免费在线观看| 亚洲精华国产精华精华液好用 | 一本久久综合亚洲鲁鲁五月天| 久久99国产综合精品免费| 亚洲精品国产情侣av在线| 午夜两性色视频免费网站| eeuss免费天堂影院| 久久99亚洲网美利坚合众国| 无码高潮少妇毛多水多水免费| 欧亚一级毛片免费看| 亚洲高清在线视频| 日韩中文字幕免费| 最近的2019免费中文字幕| 亚洲资源最新版在线观看| 老司机亚洲精品影视www| 57pao国产成永久免费视频| 亚洲AV成人一区二区三区观看| 亚洲国产精品va在线播放 | 毛片免费观看网址| 99在线免费视频| 在线观看亚洲AV日韩A∨| 亚洲精品白浆高清久久久久久|