diff --git a/README.md b/README.md index fba6b77..7e2b448 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,11 @@ 著書「テスト駆動開発」の第1章〜第17章の写経をrustで書いたものです。 - [書籍「テスト駆動開発」をRustで書く #1 (chapter1...3)](https://qiita.com/Khigashiguchi/items/dfc382d9d2f988522721) -- [書籍「テスト駆動開発」をRustで書く #2 (chapter4...11)]() +- [書籍「テスト駆動開発」をRustで書く #2 (chapter4...11)](https://qiita.com/Khigashiguchi/items/6041308a46b30e849648) +- [書籍「テスト駆動開発」をRustで書く #3 (chapter7...11)](https://qiita.com/Khigashiguchi/items/61ffa5da34d957df01f1) -# Chapters +# 著書内容 +## Chapters - Chapter/1 仮実装 - Chapter/2 明白な実装 @@ -18,20 +20,27 @@ - Chapter/10 テストに聞いてみる - Chapter/11 不要になったら消す -## TODO LIST in Chapters -- [ ]$5 + 10CHF = $10 -- [x]$5 * 2 = $10 -- [x]amountをprivateにする(すでにprivateだった) -- [x]Dollarの副作用どうする -- [ ]Moneyの丸め処理どうする -- [x]equals()の実装 -- [ ]hashCode()の実装 -- [ ]nullとの等価性比較 -- [ ]他のオブジェクトとの等価性比較 -- [x]5CHF * 2 = 10CHF -- [x]DollarとFrancの重複 -- [x]equalsの一般化 -- [x]timesの一般化 -- [x]FrancとDollarを比較する -- [x]通貨の概念 -- [x]testFrancMultiplicationを削除する? +### TODO LIST in Chapters +著書内でTDD進めていく際のTODOリストです。 + +#### TODO After chapter/12 +- [ ] $5 + 10CHF = $10 +- [ ] $5 + $5 = $10 + +#### TODO Before chapter/11 +- [ ] $5 + 10CHF = $10 +- [x] $5 * 2 = $10 +- [x] amountをprivateにする(すでにprivateだった) +- [x] Dollarの副作用どうする +- [ ] Moneyの丸め処理どうする +- [x] equals()の実装 +- [ ] hashCode()の実装 +- [ ] nullとの等価性比較 +- [ ] 他のオブジェクトとの等価性比較 +- [x] 5CHF * 2 = 10CHF +- [x] DollarとFrancの重複 +- [x] equalsの一般化 +- [x] timesの一般化 +- [x] FrancとDollarを比較する +- [x] 通貨の概念 +- [x] testFrancMultiplicationを削除する? diff --git a/src/lib.rs b/src/lib.rs index c15ebfe..f106a6e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,9 @@ use std::ops::Mul; +use std::ops::Add; + +pub trait Bank { + fn reduce(source: Money, to: &'static str) -> Money; +} #[derive(Debug)] pub struct Money { @@ -41,6 +46,25 @@ impl Mul for Money { } } +impl Add for Money { + type Output = Self; + + fn add(self, other: Self) -> Self { + Self { + amount: self.amount + other.amount, + currency: self.currency + } + } +} + +impl Bank for Money { + fn reduce(source: Self, to: &'static str) -> Self { + Self { + amount: 10, + currency: "USD" + } + } +} #[cfg(test)] mod tests { use super::*; @@ -62,4 +86,10 @@ mod tests { assert_eq!("USD", Money::dollar(1).currency()); assert_eq!("CHF", Money::franc(1).currency()); } + #[test] + fn test_simple_addition() { + let sum = Money::dollar(5) + Money::dollar(5); + let reduced = Money::reduce(sum, "USD"); + assert_eq!(Money::dollar(10), reduced); + } }