From 1030ece3ff73b32c7e13489302a3c41b943b58a3 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Wed, 13 Aug 2014 20:02:37 +0100 Subject: [PATCH] Kibitised, and improved test coverage. Cloverage currently failing, don't know why. --- src/mw_engine/heightmap.clj | 2 +- src/mw_engine/utils.clj | 4 ++-- src/mw_engine/world.clj | 12 ++++++------ test/mw_engine/heightmap_test.clj | 16 ++++++++++++++++ test/mw_engine/utils_test.clj | 8 ++++++++ 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/mw_engine/heightmap.clj b/src/mw_engine/heightmap.clj index 60e0ba1..bfcf6af 100644 --- a/src/mw_engine/heightmap.clj +++ b/src/mw_engine/heightmap.clj @@ -40,7 +40,7 @@ "Set the `gradient` property of this `cell` of this `world` to the difference in altitude between its highest and lowest neghbours." [world cell] - (let [heights (remove nil? (map #(:altitude %) (get-neighbours world cell))) + (let [heights (remove nil? (map :altitude (get-neighbours world cell))) highest (cond (empty? heights) 0 ;; shouldn't happen true (apply max heights)) lowest (cond (empty? heights) 0 ;; shouldn't diff --git a/src/mw_engine/utils.clj b/src/mw_engine/utils.clj index 94ef499..3b73c3d 100644 --- a/src/mw_engine/utils.clj +++ b/src/mw_engine/utils.clj @@ -11,7 +11,7 @@ * `n` a number, on the set of real numbers." [n] - (cond (< n 0) (- 0 n) true n)) + (cond (neg? n) (- 0 n) true n)) (defn member? "True if elt is a member of col." @@ -161,7 +161,7 @@ (or (property downstream) default)) (first cells) true downstream)))) ([cells property] - (get-least-cell cells property (. Integer MAX_VALUE)))) + (get-least-cell cells property (Integer/MAX_VALUE)))) (defn- set-cell-property diff --git a/src/mw_engine/world.clj b/src/mw_engine/world.clj index c1959f0..97f4f21 100644 --- a/src/mw_engine/world.clj +++ b/src/mw_engine/world.clj @@ -8,7 +8,8 @@ ;; that every cell's :x and :y properties reflect its place in the matrix. (ns mw-engine.world - (:use mw-engine.utils)) + (:use mw-engine.utils) + (:require [clojure.string :as string :only [join]])) (defn- make-cell "Create a minimal default cell at x, y @@ -27,7 +28,7 @@ [index width height] (cond (= index width) nil true (cons (make-cell index height) - (make-world-row (+ index 1) width height)))) + (make-world-row (inc index) width height)))) (defn- make-world-rows [index width height] "Make the (remaining) rows in a world of this width and height, from this @@ -38,7 +39,7 @@ * `height` total height of the matrix, in cells." (cond (= index height) nil true (cons (apply vector (make-world-row 0 width index)) - (make-world-rows (+ index 1) width height)))) + (make-world-rows (inc index) width height)))) (defn make-world "Make a world width cells from east to west, and height cells from north to @@ -53,7 +54,7 @@ "Truncate the print name of the state of this cell to at most limit characters." [cell limit] (let [s (:state cell)] - (cond (> (count (.toString s)) 10) (subs s 0 10) + (cond (> (count (str s)) limit) (subs s 0 limit) true s))) (defn format-cell @@ -67,8 +68,7 @@ (defn- format-world-row "Format one row in the state of a world for printing." [row] - (apply str - (map format-cell row))) + (string/join (map format-cell row))) (defn print-world "Print the current state of this world, and return nil. diff --git a/test/mw_engine/heightmap_test.clj b/test/mw_engine/heightmap_test.clj index b1b92bd..23f63fa 100644 --- a/test/mw_engine/heightmap_test.clj +++ b/test/mw_engine/heightmap_test.clj @@ -2,6 +2,7 @@ (:use clojure.java.io) (:require [clojure.test :refer :all] [mw-engine.heightmap :refer :all] + [mw-engine.world :as world :only [make-world]] [clojure.math.combinatorics :as combo])) (deftest apply-heightmap-test @@ -11,6 +12,21 @@ gradients (map #(:gradient %) (flatten world))] (is (= (count world) 9) "World should be 9x9") (is (= (count (first world)) 9) "World should be 9x9") + (is (= (count (remove nil? altitudes)) 81) + "All cells should have altitude") + (is (= (count (remove nil? gradients)) 81) + "All cells should have gradient") + (is (> (apply max altitudes) + (apply min altitudes)) + "There should be a range of altitudes") + (is (> (apply + gradients) 0) + "At least some gradients must be positive, none should be negative")) + ;; alternate means of making the world, same tests. + (let [world (apply-heightmap (world/make-world 9 9) (as-file "resources/heightmaps/test9x9.png")) + altitudes (map #(:altitude %) (flatten world)) + gradients (map #(:gradient %) (flatten world))] + (is (= (count world) 9) "World should be 9x9") + (is (= (count (first world)) 9) "World should be 9x9") (is (= (count (remove nil? altitudes)) 81) "All cells should have altitude") (is (= (count (remove nil? gradients)) 81) diff --git a/test/mw_engine/utils_test.clj b/test/mw_engine/utils_test.clj index e06cece..977abbb 100644 --- a/test/mw_engine/utils_test.clj +++ b/test/mw_engine/utils_test.clj @@ -4,6 +4,14 @@ [clojure.math.combinatorics :as combo] [mw-engine.utils :refer :all])) +(deftest abs-test + (testing "Absolute value function" + (is (= (abs 0) 0) "Corner case: nothing comes of nothing, nothing ever could.") + (is (= (abs 1) 1) "Corner case: one is one and all alone and ever more shall be so.") + (is (= (abs -1) 1) "Corner case: when others are cast down and afflicted, thou shalt be able to raise them up.") + (is (= (abs -90371) 90371) "Random check") + (is (= (abs 30971) 30971) "Another random check"))) + (deftest get-neighbours-test (testing "Gross functionality of get-neighbours: checks the right number of neighbours returned, doesn't actually check they're the right ones."