                            (engine/take-space :space7)
                            (engine/change-player-turn)
                            (engine/take-space :space8)
-                           (engine/all-remaining-spaces)))))
+                           (engine/all-remaining-spaces))))
+          (it "snapshot: should have 0 spaces left"
+              (should= #{}
+                       (do (engine/take-space :space0)
+                           (engine/change-player-turn)
+                           (engine/take-space :space1)
+                           (engine/change-player-turn)
+                           (engine/take-space :space2)
+                           (engine/change-player-turn)
+                           (engine/take-space :space3)
+                           (engine/change-player-turn)
+                           (engine/take-space :space4)
+                           (engine/change-player-turn)
+                           (engine/take-space :space5)
+                           (engine/change-player-turn)
+                           (engine/take-space :space6)
+                           (engine/change-player-turn)
+                           (engine/take-space :space7)
+                           (engine/change-player-turn)
+                           (engine/take-space :space8)
+                           (engine/all-remaining-spaces @game-state)))))
 
 (describe "space-available?:"
           (before (engine/reset-game))
+          ;; -----
           (it "space should be available"
               (should= true
                        (do (engine/put! :board-size 3) 

                           (engine/take-space :space4)
                           (engine/take-space :space7)
                           (engine/take-space :space8)
                           (engine/cats-game?)))))

(describe "game-over?:"
          (before (engine/reset-game))
          (it "game should be over because player1 won"
              (should= true
                       (do (engine/put! :board-size 3)

(ns t3.game.engine-spec
  (:require-macros [speclj.core :refer [describe it should= before]])
  (:require [speclj.core]
            [t3.game.engine :as engine :refer [game-state]]))

(describe "which-player-turn? and change-player-turn:"
          (before (engine/reset-game))
          ;; -----
          (it "should start game as player1's turn"
              (should= :player1
                       (engine/which-player-turn?)))
          (it "snapshot: should start game as player1's turn"
              (should= :player1
                       (engine/which-player-turn? @game-state)))
          ;; -----
          (it "should be player2's turn after player1 goes"
              (should= :player2
                       (do (engine/change-player-turn)
                           (engine/which-player-turn?))))
          (it "snapshot: should be player2's turn after player1 goes"
              (should= :player2
                       (do (engine/change-player-turn)
                           (engine/which-player-turn? @game-state))))
          ;; -----
          (it "should be player1's turn again after player1 and player2 goes"
              (should= :player1
                       (do (engine/change-player-turn)
                           (engine/change-player-turn)
                           (engine/which-player-turn?))))
          (it "snapshot: should be player1's turn again after player1 and player2 goes"
              (should= :player1
                       (do (engine/change-player-turn)
                           (engine/change-player-turn)
                           (engine/which-player-turn? @game-state)))))

(describe "player-spaces and take-space:"
          (before (engine/reset-game))
          ;; -----
          (it "player1 should take :space1"
              (should= (sorted-set :space1)
                       (do (engine/take-space :space1)
                           (engine/player-spaces :player1))))
          (it "snapshot: player1 should take :space1"
              (should= (sorted-set :space1)
                       (do (engine/take-space :space1)
                           (engine/player-spaces @game-state :player1))))
          ;; -----
          (it "player2 should take :space2"
              (should= (sorted-set :space2)
                       (do (engine/change-player-turn)
                           (engine/take-space :space2)
                           (engine/player-spaces :player2))))
          (it "snapshot: player2 should take :space2"
              (should= (sorted-set :space2)
                       (do (engine/change-player-turn)
                           (engine/take-space :space2)
                           (engine/player-spaces @game-state :player2))))
          ;; -----
          (it "player1 should take :space5 & :space7, player2 should take :space6"
              (should= (list (sorted-set :space5 :space7) (sorted-set :space6))
                       (do (engine/take-space :space5)
