Created
June 23, 2016 23:06
-
-
Save mh120888/716b7dc205ed0f2ff7dbed116b6db0c3 to your computer and use it in GitHub Desktop.
Generative ttt spec
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns clojure-ttt.generative-spec | |
(:require [speclj.core :refer :all] | |
[clojure-ttt.core :as core] | |
[clojure-ttt.player :as player]) | |
(:import [clojure_ttt.player ComputerPlayer])) | |
(def human-marker "x") | |
(def ai-marker "o") | |
(def computer-player (ComputerPlayer.)) | |
(defn simulate-possible-human-moves | |
[boards human-marker] | |
((comp vec flatten) (map (fn [board] (map #(core/mark-space board % human-marker) (keys (core/find-free-spaces board)))) boards))) | |
(defn simulate-computer-moves | |
[boards ai-marker] | |
((comp vec flatten) (map (fn [board] (core/mark-space board (player/get-move computer-player board ai-marker) ai-marker)) boards))) | |
(defn simulate-possible-games | |
([] (simulate-possible-games [human-marker ai-marker] [simulate-possible-human-moves simulate-computer-moves] [(core/generate-new-board 3)] [])) | |
([markers simulate-move-functions in-progress-boards completed-boards] | |
(if (empty? in-progress-boards) | |
completed-boards | |
(let [new-in-progress-boards ((first simulate-move-functions) in-progress-boards (first markers))] | |
(recur (reverse markers) (reverse simulate-move-functions) (vec (remove #(core/stop-game? %) new-in-progress-boards)) ((comp vec concat) completed-boards (vec (filter #(core/stop-game? %) new-in-progress-boards)))))))) | |
(tags :slow | |
(describe "get-move for ComputerPlayer" | |
(before | |
(def possible-games (simulate-possible-games))) | |
(it "never allows the human player to win" | |
(should= 0 (count (filter #(= human-marker (core/has-won? %)) possible-games)))))) | |
(run-specs) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment