diff --git a/src/vending/core.clj b/src/vending/core.clj index e170ade..4859d37 100644 --- a/src/vending/core.clj +++ b/src/vending/core.clj @@ -1,9 +1,15 @@ (ns vending.core (:use clojure.set)) +(defn member? + "true if seq contains elm" + [seq elm] + (some #(= elm %) seq)) -(defn make-default-machine [] { :stock {:caramel-wafer 5 :teacake 5 :snowball 5} +(defn make-default-machine + "Initialise a machine in a known state" + [] { :stock {:caramel-wafer 5 :teacake 5 :snowball 5} :coins {:merk 1 :plack 4 :bawbee 4 :bodle 4} :tendered nil :message "" @@ -39,7 +45,10 @@ (defn add-coin [machine coin] "Add this coin to this machine." - (message-machine (assoc (dissoc machine :tendered) :tendered (cons coin (:tendered machine))) (str "Added a " coin))) + (if + (member? (keys coin-values) coin) + (message-machine (assoc (dissoc machine :tendered) :tendered (cons coin (:tendered machine))) (str "Added a " coin)) + (message-machine (assoc (dissoc machine :change) :change (cons coin (:change machine))) (str "Sorry, this machine doesn't accept " coin "s")))) (defn add-coins [machine coins] "Add these coins to this machine" diff --git a/test/vending/test/core.clj b/test/vending/test/core.clj index cdeb556..d5e6ce9 100644 --- a/test/vending/test/core.clj +++ b/test/vending/test/core.clj @@ -3,12 +3,6 @@ ring.mock.request vending.core)) -(defn member? - "true if seq contains elm" - [seq elm] - (some #(= elm %) seq)) - - (deftest test-vending (testing "Test adding coins to machine"