diff --git a/src/vending/core.clj b/src/vending/core.clj index 66d5a87..e170ade 100644 --- a/src/vending/core.clj +++ b/src/vending/core.clj @@ -10,13 +10,15 @@ :change nil :output nil} ) -(def coin-values {:merk 100 :plack 25 :bawbee 10 :bodle 5}) +;; Laterly a bodle was worth either one sixth or one eighth of an English penny, but apparently +;; it was two pence Scots. Other values are more certain; a merk was 13 shillings and sixpence. +(def coin-values {:merk 160 :bawbee 6 :plack 4 :bodle 2}) (keys coin-values) (.indexOf (keys coin-values) :bodle) -(def item-prices {:caramel-wafer 65 :teacake 100 :snowball 150}) +(def item-prices {:caramel-wafer 10 :teacake 16 :snowball 22}) (defn coin-value [coin] (coin-values coin)) diff --git a/test/vending/test/core.clj b/test/vending/test/core.clj index 4146e9d..cdeb556 100644 --- a/test/vending/test/core.clj +++ b/test/vending/test/core.clj @@ -41,21 +41,21 @@ "summing coins" (let [coins1 (sum-coins (list :merk :plack :bawbee :bodle)) coins2 (sum-coins (list :merk :plack :bawbee :bodle :merk :plack :bawbee :bodle))] - (= (:merk coins1 1) "after adding one merk, one merk should be present") - (= (:merk coins2 2) "after adding two merks, two merks should be present") + (is (= (:merk coins1) 1) "after adding one merk, one merk should be present") + (is (= (:merk coins2) 2) "after adding two merks, two merks should be present") )) (testing "making appropriate change" - (let [wallet {:merk 5 :plack 5 :bawbee 5 :bodle 5} + (let [wallet {:merk 1 :plack 1 :bawbee 1 :bodle 1} no-change (make-change 0 wallet) - merk-change (make-change 100 wallet) - ten-change (make-change 10 wallet) - all-change (make-change 140 wallet)] + merk-change (make-change (coin-values :merk) wallet) + ten-change (make-change (+ (coin-values :plack) (coin-values :bawbee)) wallet) + all-change (make-change (reduce + (map #(coin-values %) (keys coin-values))) wallet)] (is (empty? no-change) "no change implies an empty coin list") - (is (= merk-change '(:merk)) "100 units of change should be satisfied with one mark") - (is (= (set all-change) (set (list :merk :plack :bawbee :bodle))) "140 units of change should be satisfied with one coin of each denomination") - (is (or (= (set ten-change) (set (list :bawbee))) (= (set ten-change) (set (list :bodle :bodle)))) "ten change could be satisfied with one bawbee or two bodles"))) + (is (= merk-change '(:merk)) "140 units of change should be satisfied with one mark") + (is (= (set all-change) (set (list :merk :plack :bawbee :bodle))) "172 units of change should be satisfied with one coin of each denomination") + (is (= (set ten-change) (set (list :plack :bawbee))) "ten change could be satisfied with one bawbee or two bodles"))) (testing "removing change from machine" @@ -68,13 +68,10 @@ (testing "full machine cycle" - (let [machine (get-caramel-wafer (add-coin (make-default-machine) :merk))] + (let [machine (get-caramel-wafer (add-coin (add-coin (make-default-machine) :bawbee) :bawbee))] (is (= (:message machine) "Enjoy your :caramel-wafer")) - (is (= (set (:change machine)) #{:plack :bawbee})) - (is (= (:merk (:coins machine)) 2)) + (is (= (set (:change machine)) #{:bodle})) + (is (= (:bawbee (:coins machine)) 6)) (is (= (:output machine) '(:caramel-wafer))))) ) - (make-change-machine (make-default-machine) '( 1 1 1 1)) - - (set '(:a :b :c))