<html>
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <link rel="stylesheet" href="../../../coverage.css"/>  <title> cc/journeyman/the_great_game/utils.clj </title>
 </head>
 <body>
<span class="covered" title="1 out of 1 forms covered">
                001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.utils)
                </span><br/>
<span class="blank" title="0 out of 0 forms covered">
                002&nbsp;&nbsp;
                </span><br/>
<span class="covered" title="1 out of 1 forms covered">
                003&nbsp;&nbsp;(defn&nbsp;cyclic?
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                004&nbsp;&nbsp;&nbsp;&nbsp;&quot;True&nbsp;if&nbsp;two&nbsp;or&nbsp;more&nbsp;elements&nbsp;of&nbsp;`route`&nbsp;are&nbsp;identical&quot;
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                005&nbsp;&nbsp;&nbsp;&nbsp;[route]
                </span><br/>
<span class="covered" title="8 out of 8 forms covered">
                006&nbsp;&nbsp;&nbsp;&nbsp;(not=&nbsp;(count&nbsp;route)(count&nbsp;(set&nbsp;route))))
                </span><br/>
<span class="blank" title="0 out of 0 forms covered">
                007&nbsp;&nbsp;
                </span><br/>
<span class="covered" title="1 out of 1 forms covered">
                008&nbsp;&nbsp;(defn&nbsp;deep-merge
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                009&nbsp;&nbsp;&nbsp;&nbsp;&quot;Recursively&nbsp;merges&nbsp;maps.&nbsp;Stolen&nbsp;from
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                010&nbsp;&nbsp;&nbsp;&nbsp;https:&#x2F;&#x2F;dnaeon.github.io&#x2F;recursively-merging-maps-in-clojure&#x2F;&quot;
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                011&nbsp;&nbsp;&nbsp;&nbsp;[&amp;&nbsp;maps]
                </span><br/>
<span class="covered" title="1 out of 1 forms covered">
                012&nbsp;&nbsp;&nbsp;&nbsp;(letfn&nbsp;[(m&nbsp;[&amp;&nbsp;xs]
                </span><br/>
<span class="covered" title="17 out of 17 forms covered">
                013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(some&nbsp;#(and&nbsp;(map?&nbsp;%)&nbsp;(not&nbsp;(record?&nbsp;%)))&nbsp;xs)
                </span><br/>
<span class="covered" title="5 out of 5 forms covered">
                014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;merge-with&nbsp;m&nbsp;xs)
                </span><br/>
<span class="covered" title="3 out of 3 forms covered">
                015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(last&nbsp;xs)))]
                </span><br/>
<span class="covered" title="4 out of 4 forms covered">
                016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce&nbsp;m&nbsp;maps)))
                </span><br/>
<span class="blank" title="0 out of 0 forms covered">
                017&nbsp;&nbsp;
                </span><br/>
<span class="covered" title="1 out of 1 forms covered">
                018&nbsp;&nbsp;(defn&nbsp;make-target-filter
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                019&nbsp;&nbsp;&nbsp;&nbsp;&quot;Construct&nbsp;a&nbsp;filter&nbsp;which,&nbsp;when&nbsp;applied&nbsp;to&nbsp;a&nbsp;list&nbsp;of&nbsp;maps,
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                020&nbsp;&nbsp;&nbsp;&nbsp;will&nbsp;pass&nbsp;those&nbsp;which&nbsp;match&nbsp;these&nbsp;`targets`,&nbsp;where&nbsp;each&nbsp;target
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                021&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;a&nbsp;tuple&nbsp;[key&nbsp;value].&quot;
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                022&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;this&nbsp;would&nbsp;probably&nbsp;be&nbsp;more&nbsp;elegant&nbsp;as&nbsp;a&nbsp;macro
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                023&nbsp;&nbsp;&nbsp;&nbsp;[targets]
                </span><br/>
<span class="covered" title="2 out of 2 forms covered">
                024&nbsp;&nbsp;&nbsp;&nbsp;(eval
                </span><br/>
<span class="covered" title="3 out of 3 forms covered">
                025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#x27;fn
                </span><br/>
<span class="covered" title="3 out of 3 forms covered">
                027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector&nbsp;&#x27;m)
                </span><br/>
<span class="covered" title="3 out of 3 forms covered">
                028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#x27;and
                </span><br/>
<span class="covered" title="3 out of 3 forms covered">
                030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
                </span><br/>
<span class="covered" title="3 out of 3 forms covered">
                031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(list
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#x27;=
                </span><br/>
<span class="covered" title="6 out of 6 forms covered">
                033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(first&nbsp;%)&nbsp;&#x27;m)
                </span><br/>
<span class="covered" title="3 out of 3 forms covered">
                034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nth&nbsp;%&nbsp;1))
                </span><br/>
<span class="covered" title="1 out of 1 forms covered">
                035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;targets)))))
                </span><br/>
<span class="blank" title="0 out of 0 forms covered">
                036&nbsp;&nbsp;
                </span><br/>
<span class="covered" title="1 out of 1 forms covered">
                037&nbsp;&nbsp;(defn&nbsp;value-or-default
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                038&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;the&nbsp;value&nbsp;of&nbsp;this&nbsp;key&nbsp;`k`&nbsp;in&nbsp;this&nbsp;map&nbsp;`m`,&nbsp;or&nbsp;this&nbsp;`dflt`&nbsp;value&nbsp;if
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                039&nbsp;&nbsp;&nbsp;&nbsp;there&nbsp;is&nbsp;none.&quot;
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                040&nbsp;&nbsp;&nbsp;&nbsp;[m&nbsp;k&nbsp;dflt]
                </span><br/>
<span class="not-covered" title="0 out of 13 forms covered">
                041&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(when&nbsp;(map?&nbsp;m)&nbsp;(m&nbsp;k))&nbsp;dflt))
                </span><br/>
<span class="blank" title="0 out of 0 forms covered">
                042&nbsp;&nbsp;
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                043&nbsp;&nbsp;;;&nbsp;(value-or-default&nbsp;{:x&nbsp;0&nbsp;:y&nbsp;0&nbsp;:altitude&nbsp;7}&nbsp;:altitude&nbsp;8)
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                044&nbsp;&nbsp;;;&nbsp;(value-or-default&nbsp;{:x&nbsp;0&nbsp;:y&nbsp;0&nbsp;:altitude&nbsp;7}&nbsp;:alt&nbsp;8)
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                045&nbsp;&nbsp;;;&nbsp;(value-or-default&nbsp;nil&nbsp;:altitude&nbsp;8)
                </span><br/>
<span class="blank" title="0 out of 0 forms covered">
                046&nbsp;&nbsp;
                </span><br/>
<span class="covered" title="1 out of 1 forms covered">
                047&nbsp;&nbsp;(defn&nbsp;truthy?&nbsp;
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                048&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;`true`&nbsp;unless&nbsp;`val`&nbsp;is&nbsp;`nil`,&nbsp;`false`&nbsp;or&nbsp;an&nbsp;empty&nbsp;sequence.
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Otherwise&nbsp;always&nbsp;&#x27;false&#x27;;&nbsp;never&nbsp;any&nbsp;other&nbsp;value.&quot;
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                050&nbsp;&nbsp;&nbsp;&nbsp;[val]
                </span><br/>
<span class="covered" title="11 out of 11 forms covered">
                051&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(or&nbsp;val&nbsp;false)&nbsp;true))
                </span><br/>
<span class="blank" title="0 out of 0 forms covered">
                052&nbsp;&nbsp;
                </span><br/>
<span class="blank" title="0 out of 0 forms covered">
                053&nbsp;&nbsp;
                </span><br/>
<span class="covered" title="1 out of 1 forms covered">
                054&nbsp;&nbsp;(defn&nbsp;inc-or-one
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                055&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;this&nbsp;`val`&nbsp;is&nbsp;a&nbsp;number,&nbsp;return&nbsp;that&nbsp;number&nbsp;incremented&nbsp;by&nbsp;one;&nbsp;otherwise,
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1.&nbsp;TODO:&nbsp;should&nbsp;probably&nbsp;be&nbsp;in&nbsp;`utils`.&quot;
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                057&nbsp;&nbsp;&nbsp;&nbsp;[val]
                </span><br/>
<span class="covered" title="2 out of 2 forms covered">
                058&nbsp;&nbsp;&nbsp;&nbsp;(if
                </span><br/>
<span class="covered" title="3 out of 3 forms covered">
                059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(number?&nbsp;val)
                </span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
                060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(inc&nbsp;val)
                </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
                061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1))
                </span><br/>
 </body>
</html>