(ns mw-engine.world-test
  (:require [clojure.test :refer :all]
            [mw-engine.world :refer :all]
            [clojure.math.combinatorics :as combo]))

(deftest genesis-test
  (testing "World creation."
           (is 
             (empty?
               (remove 
                 true? 
                 (flatten
                   (map 
                     (fn [size] 
                       (let [world (make-world size size)]
                         (is (= (count world) size)
                             "World should be NxN matrix")
                         (is (empty? (remove #(= % size) (map count world)))
                             "World should be NxN matrix")
                         (map #(let [[x y] %
                                     cell (nth (nth world y) x)]
                                 (is (= (:x cell) x) "Checking x coordinate")
                                 (is (= (:y cell) y) "Checking y coordinate")
                                 (is (= (:state cell) :new) "Checking state is new"))
                              (combo/cartesian-product (range size) (range size)))
                         ))
                     (range 1 10)))))
             "Comprehensive new world test")))