   [init-game moves]
   (reduce
     (fn [game [x y]] (logic/on-move game x y))
+    init-game
     moves))
 
 
-;; Tests
+;; ----------------------------------------------------------------------------
+;; Generators
+;; ----------------------------------------------------------------------------
+
+(def player-gen
+  (gen/elements #{:cell/cross :cell/circle}))
+
+(def cell-gen
+  (gen/elements #{:cell/empty :cell/cross :cell/circle}))
+
+(def board-gen
+  (apply gen/hash-map
+    (interleave
+      cst/coordinates
+      (repeat cst/cell-count cell-gen)
+      )))
+
+
+;; ----------------------------------------------------------------------------
+;; Example based tests
+;; ----------------------------------------------------------------------------
 
 (deftest test-init-game
   (let [init-game (logic/new-game)]

    (is (> cst/cell-count (count-empty-cells end-game)))
    ))


;; Generative testing

(def player-gen
  (gen/elements #{:cell/cross :cell/circle}))

(def cell-gen
  (gen/elements #{:cell/empty :cell/cross :cell/circle}))

(def board-gen
  (apply gen/hash-map
    (interleave
      cst/coordinates
      (repeat cst/cell-count cell-gen)
      )))

(defn valid-on-move-reaction
  [game-state]

    ))


;; ----------------------------------------------------------------------------
;; Utils for the tests
;; ----------------------------------------------------------------------------

(defn get-cells
  [game-state]
