diff --git a/rover.fnl b/rover.fnl index acd1579..bebdc6f 100644 --- a/rover.fnl +++ b/rover.fnl @@ -1,9 +1,42 @@ (local { : view } (require :fennel)) +(macro expect [text actual expected] + `(let [actual# ,actual] + (or (match actual# + ,expected true + _# false) + (assert false (view { + :text ,text + :expected ,expected + :actual actual# + }))))) + +(fn command [rover commands] + {:x 0 :y 1 :direction :n}) + (fn rover [x y direction] - {}) + {: x + : y + : direction + : command + }) (let [r (rover 0 0 :n)] - (match r - {:x 0 :y 0 :direction :n} true - _ (assert false (view r)))) + (expect + "rover knows (x,y) and the direction (N,S,E,W) it is facing" + r + {:x 0 :y 0 :direction :n})) + +(let [r (rover 0 0 :n)] + (expect "The rover receives a character array of commands" + (r:command [:f :f :f]) + {})) + +(let [r (rover 0 0 :n)] + (expect + "Moves north when pointing north and asked to move forward" + (r:command [:f]) + {:x 0 :y 1 :direction :n})) + + +(print "OK")