Fixed all failing tests. Two issues:
1. The regression test failures were both errors in the tests rather than in the code under test; 2. The failure in the 'bulk' test relates to the fact that the new declarative parser cannot cope with trailing whitespace.
This commit is contained in:
parent
ddf967088e
commit
88d707a32e
|
@ -6,19 +6,19 @@
|
||||||
## Vegetation rules
|
## Vegetation rules
|
||||||
;; rules which populate the world with plants
|
;; rules which populate the world with plants
|
||||||
|
|
||||||
;; Occasionally, passing birds plant tree seeds into grassland
|
;; Occasionally, passing birds plant tree seeds into grassland
|
||||||
|
|
||||||
if state is grassland then 1 chance in 10 state should be heath
|
if state is grassland then 1 chance in 10 state should be heath
|
||||||
|
|
||||||
;; heath below the treeline grows gradually into forest
|
;; heath below the treeline grows gradually into forest
|
||||||
|
|
||||||
if state is heath and altitude is less than 120 then state should be scrub
|
if state is heath and altitude is less than 120 then state should be scrub
|
||||||
if state is scrub then 1 chance in 5 state should be forest
|
if state is scrub then 1 chance in 5 state should be forest
|
||||||
|
|
||||||
;; Forest on fertile land grows to climax
|
;; Forest on fertile land grows to climax
|
||||||
|
|
||||||
if state is forest and fertility is more than 5 and altitude is less than 70 then state should be climax
|
if state is forest and fertility is more than 5 and altitude is less than 70 then state should be climax
|
||||||
|
|
||||||
;; Climax forest occasionally catches fire (e.g. lightning strikes)
|
;; Climax forest occasionally catches fire (e.g. lightning strikes)
|
||||||
|
|
||||||
if state is climax then 1 chance in 500 state should be fire
|
if state is climax then 1 chance in 500 state should be fire
|
||||||
|
@ -40,7 +40,7 @@ if state is waste then state should be grassland
|
||||||
|
|
||||||
## Potential blockers
|
## Potential blockers
|
||||||
|
|
||||||
;; Forest increases soil fertility.
|
;; Forest increases soil fertility.
|
||||||
if state is in forest or climax then fertility should be fertility + 1
|
if state is in forest or climax then fertility should be fertility + 1
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
lines delimited by the new-line character. Return a list of S-expressions."
|
lines delimited by the new-line character. Return a list of S-expressions."
|
||||||
[string]
|
[string]
|
||||||
;; TODO: tried to do this using with-open, but couldn't make it work.
|
;; TODO: tried to do this using with-open, but couldn't make it work.
|
||||||
(map parse-rule (remove comment? (split string #"\n"))))
|
(map #(parse-rule (trim %)) (remove comment? (split string #"\n"))))
|
||||||
|
|
||||||
(defn parse-file
|
(defn parse-file
|
||||||
"Parse rules from successive lines in the file loaded from this `filename`.
|
"Parse rules from successive lines in the file loaded from this `filename`.
|
||||||
|
|
|
@ -7,18 +7,19 @@
|
||||||
(testing "Bulk (file) parsing and compilation"
|
(testing "Bulk (file) parsing and compilation"
|
||||||
(is (= (count (parse-file (as-file "resources/rules.txt"))) 15)
|
(is (= (count (parse-file (as-file "resources/rules.txt"))) 15)
|
||||||
"Should parse all rules and throw no exceptions")
|
"Should parse all rules and throw no exceptions")
|
||||||
(is (empty?
|
(is (empty?
|
||||||
(remove #(= % 'fn)
|
(remove #(= % ':RULE)
|
||||||
(map first
|
(map first
|
||||||
(parse-file
|
(parse-file
|
||||||
(as-file "resources/rules.txt")))))
|
(as-file "resources/rules.txt")))))
|
||||||
"all parsed rules should be lambda sexprs")
|
"all parsed rules should be lambda sexprs")
|
||||||
(is (= (count (compile-file (as-file "resources/rules.txt"))) 15)
|
(is (= (count (compile-file (as-file "resources/rules.txt"))) 15)
|
||||||
"Should compile all rules and throw no exceptions")
|
"Should compile all rules and throw no exceptions")
|
||||||
(is (empty?
|
(is (empty?
|
||||||
(remove ifn?
|
(remove ifn?
|
||||||
(map first
|
(map first
|
||||||
(compile-file
|
(compile-file
|
||||||
(as-file "resources/rules.txt")))))
|
(as-file "resources/rules.txt")))))
|
||||||
"all compiled rules should be ifns")
|
"all compiled rules should be ifns")
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
|
@ -475,12 +475,13 @@
|
||||||
|
|
||||||
(deftest regression-tests
|
(deftest regression-tests
|
||||||
(testing "Rule in default set which failed on switchover to declarative rules"
|
(testing "Rule in default set which failed on switchover to declarative rules"
|
||||||
(let [afn (compile-rule "if state is scrub then 1 chance in 5 state should be forest")
|
(let [afn (compile-rule "if state is scrub then 1 chance in 1 state should be forest")
|
||||||
world (transform-world
|
world (transform-world
|
||||||
(make-world 3 3)
|
(make-world 3 3)
|
||||||
(list (compile-rule "if x is 2 then altitude should be 11")
|
(list (compile-rule "if x is 2 then altitude should be 11")
|
||||||
(compile-rule "if x is less than 2 then state should be scrub")))]
|
(compile-rule "if x is less than 2 then state should be scrub")))]
|
||||||
(is (= (:state (apply afn (list {:x 1 :y 1} world))) :forest)
|
(is (= (:state (apply afn (list (get-cell world 1 1) world))) :forest)
|
||||||
"Centre cell is scrub, so rule should fire")
|
"Centre cell is scrub, so rule should fire")
|
||||||
(is (= (:state (apply afn (list {:x 2 :y 1} world))) :beach)
|
(is (= (apply afn (list (get-cell world 2 1) world)) nil)
|
||||||
"Middle cell of the strip is not scrub, so rule should not fire."))))
|
"Middle cell of the strip is not scrub, so rule should not fire."))))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue