Working on unit tests.

This commit is contained in:
Simon Brooke 2021-06-09 20:20:52 +01:00
parent 2461319e57
commit 23032c586c
No known key found for this signature in database
GPG key ID: A7A4F18D1D4DF987
28 changed files with 6602 additions and 207 deletions

View file

@ -0,0 +1,143 @@
<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/agent/agent.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.agent.agent
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Anything&nbsp;in&nbsp;the&nbsp;game&nbsp;world&nbsp;with&nbsp;agency;&nbsp;primarily&nbsp;but&nbsp;not&nbsp;exclusively
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;characters.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[cc.journeyman.the-great-game.objects.game-object&nbsp;:refer&nbsp;[ProtoObject]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.objects.container&nbsp;:refer&nbsp;[ProtoContainer]]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
006&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;;;;&nbsp;&nbsp;hierarchy&nbsp;of&nbsp;needs&nbsp;probably&nbsp;gets&nbsp;implemented&nbsp;here
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;;;;&nbsp;&nbsp;I&#x27;m&nbsp;probably&nbsp;going&nbsp;to&nbsp;want&nbsp;to&nbsp;defprotocol&nbsp;stuff,&nbsp;to&nbsp;define&nbsp;the&nbsp;hierarchy
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;;;;&nbsp;&nbsp;of&nbsp;things&nbsp;in&nbsp;the&nbsp;gameworld;&nbsp;either&nbsp;that&nbsp;or&nbsp;drop&nbsp;to&nbsp;Java,&nbsp;wich&nbsp;I&#x27;d&nbsp;rather&nbsp;not&nbsp;do.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
010&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
011&nbsp;&nbsp;(defprotocol&nbsp;ProtoAgent
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;&quot;An&nbsp;object&nbsp;which&nbsp;can&nbsp;act&nbsp;in&nbsp;the&nbsp;world&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;(act
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[actor&nbsp;world&nbsp;circle]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Allow&nbsp;`actor`&nbsp;to&nbsp;do&nbsp;something&nbsp;in&nbsp;this&nbsp;`world`,&nbsp;in&nbsp;the&nbsp;context&nbsp;of&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`circle`;&nbsp;return&nbsp;the&nbsp;new&nbsp;state&nbsp;of&nbsp;the&nbsp;actor&nbsp;if&nbsp;something&nbsp;was&nbsp;done,&nbsp;`nil`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;nothing&nbsp;was&nbsp;done.&nbsp;Circle&nbsp;is&nbsp;expected&nbsp;to&nbsp;be&nbsp;one&nbsp;of
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
018&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`:active`&nbsp;-&nbsp;actors&nbsp;within&nbsp;visual&#x2F;audible&nbsp;range&nbsp;of&nbsp;the&nbsp;player
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`:pending`&nbsp;-&nbsp;actors&nbsp;not&nbsp;in&nbsp;the&nbsp;active&nbsp;circle,&nbsp;but&nbsp;sufficiently&nbsp;close
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;it&nbsp;that&nbsp;they&nbsp;may&nbsp;enter&nbsp;the&nbsp;active&nbsp;circle&nbsp;within&nbsp;a&nbsp;short&nbsp;period;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`:background`&nbsp;-&nbsp;actors&nbsp;who&nbsp;are&nbsp;active&nbsp;in&nbsp;the&nbsp;background&nbsp;in&nbsp;order&nbsp;to
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle&nbsp;trade,&nbsp;news,&nbsp;et&nbsp;cetera;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`other`&nbsp;-&nbsp;actors&nbsp;who&nbsp;are&nbsp;not&nbsp;members&nbsp;of&nbsp;any&nbsp;other&nbsp;circle,&nbsp;although
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I&#x27;m&nbsp;not&nbsp;clear&nbsp;whether&nbsp;it&nbsp;would&nbsp;ever&nbsp;be&nbsp;appropriate&nbsp;to&nbsp;invoke&nbsp;an
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`act`&nbsp;method&nbsp;on&nbsp;them.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
028&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;`act`&nbsp;method&nbsp;*must&nbsp;not*&nbsp;have&nbsp;side&nbsp;effects;&nbsp;it&nbsp;must&nbsp;*only*&nbsp;return&nbsp;a
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;state.&nbsp;If&nbsp;the&nbsp;actor&#x27;s&nbsp;intention&nbsp;is&nbsp;to&nbsp;seek&nbsp;to&nbsp;change&nbsp;the&nbsp;state&nbsp;of
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;something&nbsp;else&nbsp;in&nbsp;the&nbsp;game&nbsp;world,&nbsp;it&nbsp;must&nbsp;add&nbsp;a&nbsp;representation&nbsp;of&nbsp;that
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intention&nbsp;to&nbsp;the&nbsp;sequence&nbsp;which&nbsp;will&nbsp;be&nbsp;returned&nbsp;by&nbsp;its
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`pending-intentions`&nbsp;method.&quot;)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;(pending-intentions
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[actor]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;a&nbsp;sequence&nbsp;of&nbsp;effects&nbsp;an&nbsp;actor&nbsp;intends,&nbsp;as&nbsp;a&nbsp;consequence&nbsp;of
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;acting.&nbsp;The&nbsp;encoding&nbsp;of&nbsp;these&nbsp;is&nbsp;not&nbsp;yet&nbsp;defined.&quot;))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
038&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
039&nbsp;&nbsp;(defrecord&nbsp;Agent
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&quot;A&nbsp;default&nbsp;agent.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;[name&nbsp;craft&nbsp;home&nbsp;culture]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;ProtoObject
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;ProtoContainer
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;ProtoAgent
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;)
</span><br/>
</body>
</html>

View file

@ -0,0 +1,548 @@
<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/buildings/rectangular.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.buildings.rectangular
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Build&nbsp;buildings&nbsp;with&nbsp;a&nbsp;generally&nbsp;rectangular&nbsp;floow&nbsp;plan.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;Motivations
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Right,&nbsp;the&nbsp;idea&nbsp;behind&nbsp;this&nbsp;namespace&nbsp;is&nbsp;many&nbsp;fold.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
007&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;To&nbsp;establish&nbsp;the&nbsp;broad&nbsp;principle&nbsp;of&nbsp;genetic&nbsp;buildings,&nbsp;by&nbsp;creating&nbsp;a
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;which&nbsp;reproducibly&nbsp;creates&nbsp;reproducible&nbsp;buildings&nbsp;at&nbsp;specified
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;locations,&nbsp;such&nbsp;that&nbsp;different&nbsp;buildings&nbsp;are&nbsp;credibly&nbsp;varied&nbsp;but&nbsp;a
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building&nbsp;at&nbsp;a&nbsp;specified&nbsp;location&nbsp;is&nbsp;always&nbsp;(modulo&nbsp;economic&nbsp;change)&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;same.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;Create&nbsp;good&nbsp;rectangular&nbsp;buildings,&nbsp;and&nbsp;investigate&nbsp;whether&nbsp;a&nbsp;single&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;can&nbsp;be&nbsp;used&nbsp;to&nbsp;create&nbsp;buildings&nbsp;of&nbsp;more&nbsp;than&nbsp;one&nbsp;family&nbsp;(e.g.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;can&nbsp;it&nbsp;produce&nbsp;flat&nbsp;roofed,&nbsp;north&nbsp;African&nbsp;style,&nbsp;mud&nbsp;brick&nbsp;houses&nbsp;as
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;well&nbsp;as&nbsp;pitch&nbsp;roofed,&nbsp;half&nbsp;timbered&nbsp;northern&nbsp;European&nbsp;houses?)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;Establish&nbsp;whether,&nbsp;in&nbsp;my&nbsp;current&nbsp;state&nbsp;of&nbsp;fairly&nbsp;severe&nbsp;mental&nbsp;illness,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;can&nbsp;actually&nbsp;produce&nbsp;any&nbsp;usable&nbsp;code&nbsp;at&nbsp;all.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
019&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;Key&nbsp;factors&nbsp;in&nbsp;the&nbsp;creation&nbsp;of&nbsp;a&nbsp;building
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
021&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;###&nbsp;Holding
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
023&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Every&nbsp;building&nbsp;is&nbsp;on&nbsp;a&nbsp;holding,&nbsp;and,&nbsp;indeed,&nbsp;what&nbsp;I&nbsp;mean&nbsp;by&nbsp;&#x27;building&#x27;&nbsp;here
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;may&nbsp;well&nbsp;turn&nbsp;out&nbsp;to&nbsp;be&nbsp;&#x27;the&nbsp;collection&nbsp;of&nbsp;all&nbsp;the&nbsp;permanent&nbsp;structures&nbsp;on
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;holding.&nbsp;A&nbsp;holding&nbsp;is&nbsp;a&nbsp;polygonal&nbsp;area&nbsp;of&nbsp;the&nbsp;map&nbsp;which&nbsp;does&nbsp;not&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intersect&nbsp;with&nbsp;any&nbsp;other&nbsp;holding,&nbsp;but&nbsp;for&nbsp;the&nbsp;time&nbsp;being&nbsp;we&#x27;ll&nbsp;make&nbsp;the&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;simplifying&nbsp;assumption&nbsp;that&nbsp;every&nbsp;holding&nbsp;is&nbsp;a&nbsp;rectangular&nbsp;strip,&nbsp;and&nbsp;that
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#x27;urban&#x27;&nbsp;holdings&nbsp;are&nbsp;of&nbsp;a&nbsp;reasonably&nbsp;standard&nbsp;width&nbsp;(see&nbsp;Viking-period&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;York)&nbsp;and&nbsp;length.&nbsp;Rural&nbsp;holdings&nbsp;(farms,&nbsp;?wood&nbsp;lots)&nbsp;may&nbsp;be&nbsp;much&nbsp;larger.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
031&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;###&nbsp;Terrain
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
033&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;building&nbsp;is&nbsp;made&nbsp;of&nbsp;the&nbsp;stuff&nbsp;of&nbsp;the&nbsp;place.&nbsp;In&nbsp;a&nbsp;forest,&nbsp;buildings&nbsp;will&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tend&nbsp;to&nbsp;be&nbsp;wooden;&nbsp;in&nbsp;a&nbsp;terrain&nbsp;with&nbsp;rocky&nbsp;outcrops&nbsp;--&nbsp;normally&nbsp;found&nbsp;on&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;steep&nbsp;slopes&nbsp;--&nbsp;stone.&nbsp;On&nbsp;the&nbsp;flat&nbsp;lands&nbsp;where&nbsp;there&#x27;s&nbsp;river&nbsp;mud,&nbsp;of&nbsp;brick,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cob,&nbsp;or&nbsp;wattle&nbsp;and&nbsp;daub.&nbsp;So&nbsp;to&nbsp;build&nbsp;a&nbsp;building&nbsp;we&nbsp;need&nbsp;to&nbsp;know&nbsp;the&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;terrain.&nbsp;Terrain&nbsp;can&nbsp;be&nbsp;inferred&nbsp;from&nbsp;location&nbsp;but&nbsp;in&nbsp;practice&nbsp;this&nbsp;will&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;computationally&nbsp;expensive,&nbsp;so&nbsp;we&#x27;ll&nbsp;pass&nbsp;terrain&nbsp;in&nbsp;as&nbsp;an&nbsp;argument&nbsp;to
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;build&nbsp;function.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
041&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;the&nbsp;time&nbsp;being&nbsp;we&#x27;ll&nbsp;pass&nbsp;it&nbsp;in&nbsp;simply&nbsp;as&nbsp;a&nbsp;keyword&nbsp;from&nbsp;a&nbsp;defined&nbsp;set
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;keywords;&nbsp;later&nbsp;it&nbsp;may&nbsp;be&nbsp;a&nbsp;more&nbsp;sophisticated&nbsp;data&nbsp;structure.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
044&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;###&nbsp;Culture
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
046&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;People&nbsp;of&nbsp;different&nbsp;cultures&nbsp;build&nbsp;distinctively&nbsp;different&nbsp;buildings,&nbsp;even
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when&nbsp;using&nbsp;the&nbsp;same&nbsp;materials.&nbsp;So,&nbsp;in&nbsp;our&nbsp;world,&nbsp;a&nbsp;Japanese&nbsp;wooden&nbsp;house&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;looks&nbsp;quite&nbsp;different&nbsp;from&nbsp;an&nbsp;Anglo&nbsp;Saxon&nbsp;stave&nbsp;house&nbsp;which&nbsp;looks&nbsp;quite&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;different&nbsp;from&nbsp;a&nbsp;Canadian&nbsp;log&nbsp;cabin,&nbsp;even&nbsp;though&nbsp;the&nbsp;materials&nbsp;are&nbsp;much&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;same&nbsp;and&nbsp;the&nbsp;tools&nbsp;available&nbsp;to&nbsp;build&nbsp;with&nbsp;are&nbsp;not&nbsp;much&nbsp;different.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
052&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Culture&nbsp;can&nbsp;affect&nbsp;not&nbsp;just&nbsp;the&nbsp;overall&nbsp;shape&nbsp;of&nbsp;a&nbsp;building&nbsp;but&nbsp;also&nbsp;its&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finish&nbsp;and&nbsp;surface&nbsp;detail.&nbsp;For&nbsp;example,&nbsp;in&nbsp;many&nbsp;places&nbsp;in&nbsp;England,&nbsp;stone
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildings&nbsp;are&nbsp;typically&nbsp;left&nbsp;bare;&nbsp;in&nbsp;rural&nbsp;Scotland,&nbsp;typically&nbsp;painted&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;white&nbsp;or&nbsp;in&nbsp;pastel&nbsp;shades;&nbsp;in&nbsp;Ireland,&nbsp;often&nbsp;quite&nbsp;vivid&nbsp;colours.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
057&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;People&nbsp;may&nbsp;also&nbsp;show&nbsp;religious&nbsp;or&nbsp;cultural&nbsp;symbols&nbsp;on&nbsp;their&nbsp;buildings.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
059&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;all&nbsp;these&nbsp;reasons,&nbsp;we&nbsp;need&nbsp;to&nbsp;know&nbsp;the&nbsp;culture&nbsp;of&nbsp;the&nbsp;occupant&nbsp;when
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;creating&nbsp;a&nbsp;building.&nbsp;Again,&nbsp;this&nbsp;will&nbsp;initially&nbsp;be&nbsp;passed&nbsp;in&nbsp;as&nbsp;a&nbsp;keyword.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
062&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;###&nbsp;Craft
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
064&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;People&nbsp;in&nbsp;the&nbsp;game&nbsp;world&nbsp;have&nbsp;a&nbsp;craft,&nbsp;and&nbsp;some&nbsp;crafts&nbsp;will&nbsp;require&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;different&nbsp;features&nbsp;in&nbsp;the&nbsp;building.&nbsp;In&nbsp;the&nbsp;broadly&nbsp;late-bronze-age-to
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;medieval&nbsp;period&nbsp;within&nbsp;which&nbsp;the&nbsp;game&nbsp;is&nbsp;set,&nbsp;residence&nbsp;and&nbsp;&nbsp;workplace
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;for&nbsp;most&nbsp;people&nbsp;pretty&nbsp;much&nbsp;the&nbsp;same.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
069&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;So&nbsp;a&nbsp;baker&nbsp;needs&nbsp;an&nbsp;oven,&nbsp;a&nbsp;smith&nbsp;a&nbsp;forge,&nbsp;and&nbsp;so&nbsp;on.&nbsp;All&nbsp;crafts&nbsp;who&nbsp;do
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;some&nbsp;degree&nbsp;retail&nbsp;trade&nbsp;will&nbsp;want&nbsp;a&nbsp;shop&nbsp;front&nbsp;as&nbsp;part&nbsp;of&nbsp;the&nbsp;ground&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;floor&nbsp;of&nbsp;their&nbsp;dwelling.&nbsp;Merchants&nbsp;and&nbsp;bankers&nbsp;will&nbsp;probably&nbsp;have&nbsp;houses
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;are&nbsp;a&nbsp;bit&nbsp;more&nbsp;showy&nbsp;than&nbsp;others.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
074&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Whether&nbsp;the&nbsp;&#x27;genetic&nbsp;buildings&#x27;&nbsp;idea&nbsp;will&nbsp;ever&nbsp;really&nbsp;produce&nbsp;suitable
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildings&nbsp;for&nbsp;aristons&nbsp;I&nbsp;don&#x27;t&nbsp;know;&nbsp;it&nbsp;seems&nbsp;more&nbsp;likely&nbsp;that&nbsp;significant
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strongholds&nbsp;(of&nbsp;which&nbsp;there&nbsp;will&nbsp;be&nbsp;relatively&nbsp;few)&nbsp;should&nbsp;all&nbsp;be&nbsp;hand
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modelled&nbsp;rather&nbsp;than&nbsp;procedurally&nbsp;generated.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
079&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[cc.journeyman.the-great-game.holdings.holding&nbsp;:refer&nbsp;[ProtoHolding]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
080&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.location.location&nbsp;:refer&nbsp;[ProtoLocation]])
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
081&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[org.apache.commons.math3.random&nbsp;MersenneTwister]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
082&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
083&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
084&nbsp;&nbsp;(def&nbsp;^:dynamic&nbsp;*terrain-types*&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
085&nbsp;&nbsp;&nbsp;&nbsp;&quot;Types&nbsp;of&nbsp;terrain&nbsp;which&nbsp;affect&nbsp;building&nbsp;families.&nbsp;TODO:&nbsp;This&nbsp;is&nbsp;a&nbsp;placeholder;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;more&nbsp;sophisticated&nbsp;model&nbsp;will&nbsp;be&nbsp;needed.&quot;
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;#{:arable&nbsp;:arid&nbsp;:forest&nbsp;:plateau&nbsp;:upland})
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
088&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
089&nbsp;&nbsp;(def&nbsp;^:dynamic&nbsp;*cultures*
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
090&nbsp;&nbsp;&nbsp;&nbsp;&quot;Cultures&nbsp;which&nbsp;affect&nbsp;building&nbsp;families.&nbsp;TODO:&nbsp;placeholder&quot;
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;#{:ariston&nbsp;:coastal&nbsp;:steppe-clans&nbsp;:western-clans&nbsp;:wild-herd})
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
092&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
093&nbsp;&nbsp;(def&nbsp;^:dynamic&nbsp;*crafts*
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&quot;Crafts&nbsp;which&nbsp;affect&nbsp;building&nbsp;types&nbsp;in&nbsp;the&nbsp;game.&nbsp;See&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`Populating&nbsp;a&nbsp;game&nbsp;world`.&nbsp;TODO:&nbsp;placeholder&quot;
</span><br/>
<span class="covered" title="14 out of 14 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;#{:baker&nbsp;:banker&nbsp;:butcher&nbsp;:chancellor&nbsp;:innkeeper&nbsp;:lawyer&nbsp;:magus&nbsp;:merchant&nbsp;:miller&nbsp;:priest&nbsp;:scholar&nbsp;:smith&nbsp;:weaver})
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
097&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
098&nbsp;&nbsp;(def&nbsp;^:dynamic&nbsp;*building-families*&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
099&nbsp;&nbsp;&nbsp;&nbsp;&quot;Families&nbsp;of&nbsp;buildings.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Each&nbsp;family&nbsp;has
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;terrain&nbsp;types&nbsp;to&nbsp;which&nbsp;it&nbsp;is&nbsp;appropriate;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;crafts&nbsp;to&nbsp;which&nbsp;it&nbsp;is&nbsp;appropriate;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;cultures&nbsp;to&nbsp;which&nbsp;it&nbsp;is&nbsp;appropriate.&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Each&nbsp;generated&nbsp;building&nbsp;will&nbsp;be&nbsp;of&nbsp;one&nbsp;family,&nbsp;and&nbsp;will&nbsp;comprise&nbsp;modules&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;taken&nbsp;only&nbsp;from&nbsp;that&nbsp;family.&quot;
</span><br/>
<span class="covered" title="12 out of 12 forms covered">
109&nbsp;&nbsp;&nbsp;&nbsp;{:pitched-rectangular&nbsp;{:terrains&nbsp;#{:arable&nbsp;:forest&nbsp;:upland}
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:crafts&nbsp;*crafts*
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cultures&nbsp;#{:coastal&nbsp;:western-clans}
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:modules&nbsp;[]}
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:flatroof-rectangular&nbsp;{:terrains&nbsp;#{:arid&nbsp;:plateau}
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:crafts&nbsp;*crafts*
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
115&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cultures&nbsp;#{:coastal}
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:modules&nbsp;[]}})
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
117&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
118&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;So,&nbsp;modules&nbsp;need&nbsp;to&nbsp;contain
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
119&nbsp;&nbsp;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
120&nbsp;&nbsp;;;&nbsp;1.&nbsp;Ground&nbsp;floor&nbsp;modules,&nbsp;having&nbsp;external&nbsp;doors;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
121&nbsp;&nbsp;;;&nbsp;2.&nbsp;Craft&nbsp;modules&nbsp;--&nbsp;workshops&nbsp;--&nbsp;which&nbsp;will&nbsp;normally&nbsp;be&nbsp;ground&nbsp;floor&nbsp;(except
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
122&nbsp;&nbsp;;;&nbsp;weavers)&nbsp;and&nbsp;may&nbsp;have&nbsp;the&nbsp;constraint&nbsp;that&nbsp;no&nbsp;upper&nbsp;floor&nbsp;module&nbsp;can&nbsp;cover&nbsp;them;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
123&nbsp;&nbsp;;;&nbsp;3.&nbsp;Upper&nbsp;floor&nbsp;modules,&nbsp;having&nbsp;NO&nbsp;external&nbsp;doors&nbsp;(but&nbsp;linking&nbsp;internal&nbsp;doors);
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
124&nbsp;&nbsp;;;&nbsp;4.&nbsp;Roof&nbsp;modules
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
125&nbsp;&nbsp;;;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
126&nbsp;&nbsp;;;&nbsp;There&nbsp;also&nbsp;needs&nbsp;to&nbsp;be&nbsp;an&nbsp;undercroft&nbsp;or&nbsp;platform&nbsp;module,&nbsp;such&nbsp;that&nbsp;the&nbsp;area&nbsp;of&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
127&nbsp;&nbsp;;;&nbsp;the&nbsp;top&nbsp;of&nbsp;the&nbsp;platform&nbsp;is&nbsp;identical&nbsp;with&nbsp;the&nbsp;footprint&nbsp;of&nbsp;the&nbsp;building,&nbsp;and&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
128&nbsp;&nbsp;;;&nbsp;the&nbsp;altitude&nbsp;of&nbsp;the&nbsp;top&nbsp;of&nbsp;the&nbsp;platform&nbsp;is&nbsp;equal&nbsp;to&nbsp;the&nbsp;altitude&nbsp;of&nbsp;the&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
129&nbsp;&nbsp;;;&nbsp;terrain&nbsp;at&nbsp;the&nbsp;heighest&nbsp;corner&nbsp;of&nbsp;the&nbsp;building;&nbsp;so&nbsp;that&nbsp;the&nbsp;actual&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
130&nbsp;&nbsp;;;&nbsp;building&nbsp;doesn&#x27;t&nbsp;float&nbsp;in&nbsp;the&nbsp;air,&nbsp;and&nbsp;also&nbsp;so&nbsp;that&nbsp;none&nbsp;of&nbsp;the&nbsp;doors&nbsp;or&nbsp;windows
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
131&nbsp;&nbsp;;;&nbsp;are&nbsp;partly&nbsp;underground.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
132&nbsp;&nbsp;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
133&nbsp;&nbsp;;;&nbsp;Each&nbsp;module&nbsp;needs&nbsp;to&nbsp;wrap&nbsp;an&nbsp;actual&nbsp;3d&nbsp;model&nbsp;created&nbsp;in&nbsp;Blender&nbsp;or&nbsp;whatever,&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
134&nbsp;&nbsp;;;&nbsp;and&nbsp;have&nbsp;a&nbsp;list&nbsp;of&nbsp;optional&nbsp;textures&nbsp;with&nbsp;which&nbsp;that&nbsp;model&nbsp;can&nbsp;be&nbsp;rendered.&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
135&nbsp;&nbsp;;;&nbsp;So&nbsp;an&nbsp;upper&nbsp;floor&nbsp;bedroom&nbsp;module&nbsp;might&nbsp;have&nbsp;the&nbsp;following&nbsp;renders:
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
136&nbsp;&nbsp;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
137&nbsp;&nbsp;;;&nbsp;1.&nbsp;Bare&nbsp;masonry&nbsp;-&nbsp;constrained&nbsp;to&nbsp;upland&nbsp;or&nbsp;plateau&nbsp;terrain,&nbsp;and&nbsp;to&nbsp;coastal&nbsp;culture
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
138&nbsp;&nbsp;;;&nbsp;2.&nbsp;Painted&nbsp;masonry&nbsp;-&nbsp;constrained&nbsp;to&nbsp;upland&nbsp;or&nbsp;plateau&nbsp;terrain,&nbsp;and&nbsp;to&nbsp;coastal&nbsp;culture
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
139&nbsp;&nbsp;;;&nbsp;3.&nbsp;Half-timbered&nbsp;-&nbsp;not&nbsp;available&nbsp;on&nbsp;plateau&nbsp;terrain
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
140&nbsp;&nbsp;;;&nbsp;4.&nbsp;Weatherboarded&nbsp;-&nbsp;constrained&nbsp;to&nbsp;forest&nbsp;terrain
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
141&nbsp;&nbsp;;;&nbsp;5.&nbsp;Brick&nbsp;-&nbsp;constrained&nbsp;to&nbsp;arable&nbsp;or&nbsp;arid&nbsp;terrain
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
142&nbsp;&nbsp;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
143&nbsp;&nbsp;;;&nbsp;of&nbsp;course&nbsp;these&nbsp;are&nbsp;only&nbsp;examples,&nbsp;and&nbsp;also,&nbsp;it&#x27;s&nbsp;entirely&nbsp;possible&nbsp;to&nbsp;have
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
144&nbsp;&nbsp;;;&nbsp;for&nbsp;example&nbsp;multiple&nbsp;different&nbsp;weatherboard&nbsp;renders&nbsp;for&nbsp;the&nbsp;same&nbsp;module.&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
145&nbsp;&nbsp;;;&nbsp;There&nbsp;needs&nbsp;to&nbsp;be&nbsp;a&nbsp;way&nbsp;of&nbsp;rendering&nbsp;what&nbsp;can&nbsp;be&nbsp;built&nbsp;above&nbsp;what:&nbsp;for
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
146&nbsp;&nbsp;;;&nbsp;example,&nbsp;you&nbsp;can&#x27;t&nbsp;have&nbsp;a&nbsp;masonry&nbsp;clad&nbsp;module&nbsp;over&nbsp;a&nbsp;half&nbsp;timbered&nbsp;one,&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
147&nbsp;&nbsp;;;&nbsp;but&nbsp;you&nbsp;can&nbsp;have&nbsp;a&nbsp;half-timbered&nbsp;one&nbsp;over&nbsp;a&nbsp;masonry&nbsp;one
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
148&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
149&nbsp;&nbsp;(defn&nbsp;building-family
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
150&nbsp;&nbsp;&nbsp;&nbsp;&quot;A&nbsp;building&nbsp;family&nbsp;is&nbsp;essentially&nbsp;a&nbsp;collection&nbsp;of&nbsp;models&nbsp;of&nbsp;building&nbsp;modules
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
151&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;can&nbsp;be&nbsp;assembled&nbsp;to&nbsp;create&nbsp;buildings&nbsp;of&nbsp;a&nbsp;particular&nbsp;structural&nbsp;and
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;architectural&nbsp;style.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
153&nbsp;&nbsp;&nbsp;&nbsp;[terrain&nbsp;culture&nbsp;craft&nbsp;gene]
</span><br/>
<span class="partial" title="12 out of 13 forms covered">
154&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[candidates&nbsp;(filter&nbsp;#(and
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
155&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((:terrains&nbsp;%)&nbsp;terrain)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
156&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((:crafts&nbsp;%)&nbsp;craft)
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
157&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((:cultures&nbsp;%)&nbsp;culture))
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
158&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vals&nbsp;*building-families*))]
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
159&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nth&nbsp;candidates&nbsp;(mod&nbsp;(Math&#x2F;abs&nbsp;(.nextInt&nbsp;gene))&nbsp;(count&nbsp;candidates)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
160&nbsp;&nbsp;
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
161&nbsp;&nbsp;(building-family&nbsp;:arable&nbsp;:coastal&nbsp;:baker&nbsp;(MersenneTwister.&nbsp;5))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
162&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
163&nbsp;&nbsp;(defn&nbsp;build!&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
164&nbsp;&nbsp;&nbsp;&nbsp;&quot;Builds&nbsp;a&nbsp;building,&nbsp;and&nbsp;returns&nbsp;a&nbsp;data&nbsp;structure&nbsp;which&nbsp;represents&nbsp;it.&nbsp;In&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
165&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building&nbsp;the&nbsp;building,&nbsp;it&nbsp;adds&nbsp;a&nbsp;model&nbsp;of&nbsp;the&nbsp;building&nbsp;to&nbsp;the&nbsp;representation
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
166&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;world,&nbsp;so&nbsp;it&nbsp;does&nbsp;have&nbsp;a&nbsp;side&nbsp;effect.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
167&nbsp;&nbsp;&nbsp;&nbsp;[holding&nbsp;terrain&nbsp;culture&nbsp;craft&nbsp;size]
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
168&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(satisfies?&nbsp;ProtoHolding&nbsp;holding)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
169&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[location&nbsp;(.building-origin&nbsp;holding)
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
170&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gene&nbsp;(MersenneTwister.&nbsp;(int&nbsp;(+&nbsp;(*&nbsp;(.easting&nbsp;location)&nbsp;1000000)&nbsp;(.northing&nbsp;location))))
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
171&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;family&nbsp;(building-family&nbsp;terrain&nbsp;culture&nbsp;craft&nbsp;gene)]
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
172&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;
</span><br/>
<span class="not-covered" title="0 out of 11 forms covered">
173&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(instance?&nbsp;ProtoLocation&nbsp;location)&nbsp;(:orientation&nbsp;location))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
174&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stuff
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
175&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:nonsense
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
176&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
177&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:froboz))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
178&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
179&nbsp;&nbsp;;;&nbsp;(def&nbsp;ol&nbsp;(cc.journeyman.the-great-game.location.location&#x2F;OrientedLocation.&nbsp;123.45&nbsp;543.76&nbsp;12.34&nbsp;0.00&nbsp;{}))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
180&nbsp;&nbsp;
</span><br/>
</body>
</html>

View file

@ -0,0 +1,227 @@
<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/gossip/gossip.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.gossip.gossip
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Interchange&nbsp;of&nbsp;news&nbsp;events&nbsp;between&nbsp;gossip&nbsp;agents.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Note&nbsp;that&nbsp;habitual&nbsp;travellers&nbsp;are&nbsp;all&nbsp;gossip&nbsp;agents;&nbsp;specifically,&nbsp;at&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stage,&nbsp;that&nbsp;means&nbsp;merchants.&nbsp;When&nbsp;merchants&nbsp;are&nbsp;moved&nbsp;we&nbsp;also&nbsp;need&nbsp;to
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update&nbsp;the&nbsp;location&nbsp;of&nbsp;the&nbsp;gossip&nbsp;with&nbsp;the&nbsp;same&nbsp;key.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Innkeepers&nbsp;are&nbsp;also&nbsp;gossip&nbsp;agents&nbsp;but&nbsp;do&nbsp;not&nbsp;typically&nbsp;move.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[cc.journeyman.the-great-game.utils&nbsp;:refer&nbsp;[deep-merge]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.gossip.news-items&nbsp;:refer&nbsp;[learn-news-item]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
012&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
013&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
014&nbsp;&nbsp;(defn&nbsp;dialogue
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&quot;Dialogue&nbsp;between&nbsp;an&nbsp;`enquirer`&nbsp;and&nbsp;an&nbsp;`agent`&nbsp;in&nbsp;this&nbsp;`world`;&nbsp;returns&nbsp;a
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;map&nbsp;identical&nbsp;to&nbsp;`enquirer`&nbsp;except&nbsp;that&nbsp;its&nbsp;`:gossip`&nbsp;collection&nbsp;may&nbsp;have
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;additional&nbsp;entries.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;not&nbsp;yet&nbsp;written,&nbsp;this&nbsp;is&nbsp;a&nbsp;stub.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;[enquirer&nbsp;respondent&nbsp;world]
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;enquirer)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
021&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
022&nbsp;&nbsp;(defn&nbsp;gather-news
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&quot;Gather&nbsp;news&nbsp;for&nbsp;the&nbsp;specified&nbsp;`gossip`&nbsp;in&nbsp;this&nbsp;`world`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;[world&nbsp;gossip]
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[g&nbsp;(cond&nbsp;(keyword?&nbsp;gossip)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:gossips&nbsp;gossip)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;gossip)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gossip)]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;g
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:gossips
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{(:id&nbsp;g)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deep-merge
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{}
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(dialogue&nbsp;g&nbsp;%&nbsp;world)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(=&nbsp;g&nbsp;%)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(=&nbsp;(:location&nbsp;%)&nbsp;(:location&nbsp;g))
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vals&nbsp;(:gossips&nbsp;world))))))}}
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{})))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
043&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
044&nbsp;&nbsp;(defn&nbsp;move-gossip
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;world&nbsp;like&nbsp;this&nbsp;`world`&nbsp;but&nbsp;with&nbsp;this&nbsp;`gossip`&nbsp;moved&nbsp;to&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;`new-location`.&nbsp;Many&nbsp;gossips&nbsp;are&nbsp;essentially&nbsp;shadow-records&nbsp;of&nbsp;agents&nbsp;of
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;other&nbsp;types,&nbsp;and&nbsp;the&nbsp;movement&nbsp;of&nbsp;the&nbsp;gossip&nbsp;should&nbsp;be&nbsp;controlled&nbsp;by&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;run&nbsp;function&nbsp;of&nbsp;the&nbsp;type&nbsp;of&nbsp;the&nbsp;record&nbsp;they&nbsp;shadow.&nbsp;The&nbsp;[[#run]]&nbsp;function
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;below&nbsp;does&nbsp;NOT&nbsp;call&nbsp;this&nbsp;function.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;[gossip&nbsp;world&nbsp;new-location]
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[id&nbsp;(cond
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;gossip)
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:gossips&nbsp;gossip&nbsp;:id)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;gossip)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gossip)]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;(deep-merge
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:gossips
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{id
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:location&nbsp;new-location}}})))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
061&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
062&nbsp;&nbsp;(defn&nbsp;run
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;world&nbsp;like&nbsp;this&nbsp;`world`,&nbsp;with&nbsp;news&nbsp;items&nbsp;exchanged&nbsp;between&nbsp;gossip
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
064&nbsp;&nbsp;&nbsp;&nbsp;agents.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;[world]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deep-merge
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
069&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(gather-news&nbsp;world&nbsp;%)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keys&nbsp;(:gossips&nbsp;world)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
072&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
073&nbsp;&nbsp;
</span><br/>
</body>
</html>

View file

@ -0,0 +1,947 @@
<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/gossip/news_items.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.gossip.news-items
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Categories&nbsp;of&nbsp;news&nbsp;events&nbsp;interesting&nbsp;to&nbsp;gossip&nbsp;agents.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;ideas&nbsp;here&nbsp;are&nbsp;based&nbsp;on&nbsp;the&nbsp;essay&nbsp;[The&nbsp;spread&nbsp;of&nbsp;knowledge&nbsp;in&nbsp;a&nbsp;large
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;game&nbsp;world](The-spread-of-knowledge-in-a-large-game-world.html),&nbsp;q.v.;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;they&#x27;ve&nbsp;advanced&nbsp;a&nbsp;little&nbsp;beyond&nbsp;that&nbsp;and&nbsp;will&nbsp;doubtless
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;advance&nbsp;further&nbsp;in&nbsp;the&nbsp;course&nbsp;of&nbsp;writing&nbsp;and&nbsp;debugging&nbsp;this&nbsp;namespace.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
008&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;news&nbsp;item&nbsp;is&nbsp;a&nbsp;map&nbsp;with&nbsp;the&nbsp;keys:
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`date`&nbsp;-&nbsp;the&nbsp;date&nbsp;on&nbsp;which&nbsp;the&nbsp;reported&nbsp;event&nbsp;happened;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`nth-hand`&nbsp;-&nbsp;the&nbsp;number&nbsp;of&nbsp;agents&nbsp;the&nbsp;news&nbsp;item&nbsp;has&nbsp;passed&nbsp;through;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`verb`&nbsp;-&nbsp;what&nbsp;it&nbsp;is&nbsp;that&nbsp;happened&nbsp;(key&nbsp;into&nbsp;`news-topics`);
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
014&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plus&nbsp;other&nbsp;keys&nbsp;taken&nbsp;from&nbsp;the&nbsp;`keys`&nbsp;value&nbsp;associated&nbsp;with&nbsp;the&nbsp;verb&nbsp;in
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`news-topics`.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;Notes:
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*TODO*&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;namespace&nbsp;at&nbsp;present&nbsp;considers&nbsp;the&nbsp;`:knowledge`&nbsp;of&nbsp;a&nbsp;gossip&nbsp;to&nbsp;be&nbsp;a&nbsp;flat
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;of&nbsp;propositions,&nbsp;each&nbsp;of&nbsp;which&nbsp;must&nbsp;be&nbsp;checked&nbsp;every&nbsp;time&nbsp;any&nbsp;new
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proposition&nbsp;is&nbsp;offered.&nbsp;This&nbsp;is&nbsp;woefully&nbsp;inefficient.&nbsp;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[cc.journeyman.the-great-game.world.location&nbsp;:refer&nbsp;[distance-between]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.time&nbsp;:refer&nbsp;[game-time]]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
026&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
027&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
028&nbsp;&nbsp;(def&nbsp;news-topics
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&quot;Topics&nbsp;of&nbsp;interest&nbsp;to&nbsp;gossip&nbsp;agents.&nbsp;Topics&nbsp;are&nbsp;keyed&nbsp;in&nbsp;this&nbsp;map&nbsp;by
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;their&nbsp;`verbs`.&nbsp;The&nbsp;`keys`&nbsp;associated&nbsp;with&nbsp;each&nbsp;topic&nbsp;are&nbsp;the&nbsp;extra&nbsp;pieces
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;information&nbsp;required&nbsp;to&nbsp;give&nbsp;context&nbsp;to&nbsp;a&nbsp;gossip&nbsp;item.&nbsp;Generally:
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
032&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`actor`&nbsp;is&nbsp;the&nbsp;id&nbsp;of&nbsp;the&nbsp;character&nbsp;who&nbsp;it&nbsp;is&nbsp;reported&nbsp;performed&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;action;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`other`&nbsp;is&nbsp;the&nbsp;id&nbsp;of&nbsp;the&nbsp;character&nbsp;on&nbsp;whom&nbsp;it&nbsp;is&nbsp;reported&nbsp;the&nbsp;action
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;was&nbsp;performed;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`location`&nbsp;is&nbsp;the&nbsp;place&nbsp;at&nbsp;which&nbsp;the&nbsp;action&nbsp;was&nbsp;performed;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`object`&nbsp;is&nbsp;an&nbsp;object&nbsp;(or&nbsp;possibly&nbsp;list&nbsp;of&nbsp;objects?)&nbsp;relevant&nbsp;to&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;action;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;`price`&nbsp;is&nbsp;special&nbsp;to&nbsp;buy&#x2F;sell,&nbsp;but&nbsp;of&nbsp;significant&nbsp;interest&nbsp;to&nbsp;merchants.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
041&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;Notes
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
043&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;###&nbsp;Characters
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
045&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;*TODO*&nbsp;but&nbsp;note&nbsp;that&nbsp;at&nbsp;most&nbsp;all&nbsp;the&nbsp;receiver&nbsp;can&nbsp;learn&nbsp;about&nbsp;a&nbsp;character
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;a&nbsp;news&nbsp;item&nbsp;is&nbsp;what&nbsp;the&nbsp;giver&nbsp;knows&nbsp;about&nbsp;that&nbsp;character,&nbsp;degraded&nbsp;by
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;what&nbsp;the&nbsp;receiver&nbsp;finds&nbsp;interesting&nbsp;about&nbsp;them.&nbsp;If&nbsp;we&nbsp;just&nbsp;pass&nbsp;the&nbsp;id&nbsp;here,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;either&nbsp;the&nbsp;receiver&nbsp;knows&nbsp;everything&nbsp;in&nbsp;the&nbsp;database&nbsp;about&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;character,&nbsp;or&nbsp;else&nbsp;the&nbsp;receiver&nbsp;knows&nbsp;nothing&nbsp;at&nbsp;all&nbsp;about&nbsp;the&nbsp;character.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;Neither&nbsp;is&nbsp;desirable.&nbsp;Further&nbsp;thought&nbsp;needed.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
052&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;By&nbsp;implication,&nbsp;the&nbsp;character&nbsp;values&nbsp;passed&nbsp;should&nbsp;include&nbsp;*all*&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;information&nbsp;the&nbsp;giver&nbsp;knows&nbsp;about&nbsp;the&nbsp;character;&nbsp;that&nbsp;can&nbsp;then&nbsp;be&nbsp;degraded
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;the&nbsp;receiver&nbsp;stores&nbsp;only&nbsp;that&nbsp;segment&nbsp;which&nbsp;the&nbsp;receiver&nbsp;finds
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;interesting.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
057&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;###&nbsp;Locations
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
059&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;&#x27;location&#x27;&nbsp;value&nbsp;is&nbsp;a&nbsp;list&nbsp;comprising&nbsp;at&nbsp;most&nbsp;the&nbsp;x&#x2F;y&nbsp;coordinate&nbsp;location
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;the&nbsp;ids&nbsp;of&nbsp;the&nbsp;settlement&nbsp;and&nbsp;region&nbsp;(possibly&nbsp;hierarchically)&nbsp;that&nbsp;contain
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;location.&nbsp;If&nbsp;the&nbsp;x&#x2F;y&nbsp;is&nbsp;not&nbsp;local&nbsp;to&nbsp;the&nbsp;home&nbsp;of&nbsp;the&nbsp;receiving&nbsp;agent,&nbsp;they
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;won&#x27;t&nbsp;remember&nbsp;it&nbsp;and&nbsp;won&#x27;t&nbsp;pass&nbsp;it&nbsp;on;&nbsp;if&nbsp;any&nbsp;of&nbsp;the&nbsp;ids&nbsp;are&nbsp;not&nbsp;interesting
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
064&nbsp;&nbsp;&nbsp;&nbsp;So&nbsp;location&nbsp;information&nbsp;will&nbsp;degrade&nbsp;progressively&nbsp;as&nbsp;the&nbsp;item&nbsp;is&nbsp;passed&nbsp;along.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
065&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;It&nbsp;is&nbsp;assumed&nbsp;that&nbsp;the&nbsp;`:home`&nbsp;of&nbsp;a&nbsp;character&nbsp;is&nbsp;a&nbsp;location&nbsp;in&nbsp;this&nbsp;sense.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
067&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
068&nbsp;&nbsp;&nbsp;&nbsp;###&nbsp;Inferences
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
069&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;an&nbsp;agent&nbsp;learns&nbsp;that&nbsp;Adam&nbsp;has&nbsp;married&nbsp;Betty,&nbsp;they&nbsp;can&nbsp;infer&nbsp;that&nbsp;Betty&nbsp;has
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;married&nbsp;Adam;&nbsp;if&nbsp;they&nbsp;learn&nbsp;that&nbsp;Charles&nbsp;killed&nbsp;Dorothy,&nbsp;that&nbsp;Dorothy&nbsp;has&nbsp;died.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;I&#x27;m&nbsp;not&nbsp;convinced&nbsp;that&nbsp;my&nbsp;representation&nbsp;of&nbsp;inferences&nbsp;here&nbsp;is&nbsp;ideal.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;&quot;
</span><br/>
<span class="covered" title="13 out of 13 forms covered">
074&nbsp;&nbsp;&nbsp;&nbsp;{;;&nbsp;A&nbsp;significant&nbsp;attack&nbsp;is&nbsp;interesting&nbsp;whether&nbsp;or&nbsp;not&nbsp;it&nbsp;leads&nbsp;to&nbsp;deaths
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:attack&nbsp;{:verb&nbsp;:attack&nbsp;:keys&nbsp;[:actor&nbsp;:other&nbsp;:location]}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;Deaths&nbsp;of&nbsp;characters&nbsp;may&nbsp;be&nbsp;interesting
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:die&nbsp;{:verb&nbsp;:die&nbsp;:keys&nbsp;[:actor&nbsp;:location]}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;Deliberate&nbsp;killings&nbsp;are&nbsp;interesting.
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:kill&nbsp;{:verb&nbsp;:kill&nbsp;:keys&nbsp;[:actor&nbsp;:other&nbsp;:location]
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
080&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:inferences&nbsp;[{:verb&nbsp;:die&nbsp;:actor&nbsp;:other&nbsp;:other&nbsp;:nil}]}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;Marriages&nbsp;may&nbsp;be&nbsp;interesting
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:marry&nbsp;{:verb&nbsp;:marry&nbsp;:keys&nbsp;[:actor&nbsp;:other&nbsp;:location]
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:inferences&nbsp;[{:verb&nbsp;:marry&nbsp;:actor&nbsp;:other&nbsp;:other&nbsp;:actor}]}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
084&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;The&nbsp;end&nbsp;of&nbsp;ongoing&nbsp;open&nbsp;conflict&nbsp;between&nbsp;to&nbsp;characters&nbsp;may&nbsp;be&nbsp;interesting
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:peace&nbsp;{:verb&nbsp;:peace&nbsp;:keys&nbsp;[:actor&nbsp;:other&nbsp;:location]
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:inferences&nbsp;[{:verb&nbsp;:peace&nbsp;:actor&nbsp;:other&nbsp;:other&nbsp;:actor}]}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;Things&nbsp;related&nbsp;to&nbsp;the&nbsp;plot&nbsp;are&nbsp;interesting,&nbsp;but&nbsp;will&nbsp;require&nbsp;special
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
088&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;handling.&nbsp;Extra&nbsp;keys&nbsp;may&nbsp;be&nbsp;required&nbsp;by&nbsp;particular&nbsp;plot&nbsp;events.
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
089&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:plot&nbsp;{:verb&nbsp;:plot&nbsp;:keys&nbsp;[:actor&nbsp;:other&nbsp;:object&nbsp;:location]}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;Rapes&nbsp;are&nbsp;interesting.
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:rape&nbsp;{:verb&nbsp;:rape&nbsp;:keys&nbsp;[:actor&nbsp;:other&nbsp;:location]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;Should&nbsp;you&nbsp;also&nbsp;infer&nbsp;from&nbsp;rape&nbsp;that&nbsp;actor&nbsp;is&nbsp;male&nbsp;and&nbsp;adult?
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:inferences&nbsp;[{:verb&nbsp;:attack}
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:verb&nbsp;:sex}
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:verb&nbsp;:sex&nbsp;:actor&nbsp;:other&nbsp;:other&nbsp;:actor}]}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;Merchants,&nbsp;especially,&nbsp;are&nbsp;interested&nbsp;in&nbsp;prices&nbsp;in&nbsp;other&nbsp;markets
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:sell&nbsp;{:verb&nbsp;:sell&nbsp;:keys&nbsp;[:actor&nbsp;:other&nbsp;:object&nbsp;:location&nbsp;:price]}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;Sex&nbsp;can&nbsp;juicy&nbsp;gossip,&nbsp;although&nbsp;not&nbsp;normally&nbsp;if&nbsp;the&nbsp;participants&nbsp;are&nbsp;in&nbsp;an
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;established&nbsp;sexual&nbsp;relationship.
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:sex&nbsp;{:verb&nbsp;:sex&nbsp;:keys&nbsp;[:actor&nbsp;:other&nbsp;:location]
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:inferences&nbsp;[{:verb&nbsp;:sex&nbsp;:actor&nbsp;:other&nbsp;:other&nbsp;:actor}]}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;Thefts&nbsp;are&nbsp;interesting.
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:steal&nbsp;{:verb&nbsp;:steal&nbsp;:keys&nbsp;[:actor&nbsp;:other&nbsp;:object&nbsp;:location]}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;The&nbsp;succession&nbsp;of&nbsp;rulers&nbsp;is&nbsp;interesting;&nbsp;of&nbsp;respected&nbsp;craftsmen,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;potentially&nbsp;also&nbsp;interesting.
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:succession&nbsp;{:verb&nbsp;:succession&nbsp;:keys&nbsp;[:actor&nbsp;:other&nbsp;:location&nbsp;:rank]}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;The&nbsp;start&nbsp;of&nbsp;ongoing&nbsp;open&nbsp;conflict&nbsp;between&nbsp;two&nbsp;characters&nbsp;may&nbsp;be&nbsp;interesting.
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:war&nbsp;{:verb&nbsp;:war&nbsp;:keys&nbsp;[:actor&nbsp;:other&nbsp;:location]
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:inferences&nbsp;[{:verb&nbsp;:war&nbsp;:actor&nbsp;:other&nbsp;:other&nbsp;:actor}]}})
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
110&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
111&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
112&nbsp;&nbsp;(defn&nbsp;interest-in-character
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
113&nbsp;&nbsp;&nbsp;&nbsp;&quot;Integer&nbsp;representation&nbsp;of&nbsp;how&nbsp;interesting&nbsp;this&nbsp;`character`&nbsp;is&nbsp;to&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
114&nbsp;&nbsp;&nbsp;&nbsp;`gossip`.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
115&nbsp;&nbsp;&nbsp;&nbsp;*TODO:*&nbsp;this&nbsp;assumes&nbsp;that&nbsp;characters&nbsp;are&nbsp;passed&nbsp;as&nbsp;keywords,&nbsp;but,&nbsp;as
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
116&nbsp;&nbsp;&nbsp;&nbsp;documented&nbsp;above,&nbsp;they&nbsp;probably&nbsp;have&nbsp;to&nbsp;be&nbsp;maps,&nbsp;to&nbsp;allow&nbsp;for&nbsp;degradation.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
117&nbsp;&nbsp;&nbsp;&nbsp;[gossip&nbsp;character]
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
118&nbsp;&nbsp;&nbsp;&nbsp;(count
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(concat
</span><br/>
<span class="not-covered" title="0 out of 12 forms covered">
120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter&nbsp;#(=&nbsp;(:actor&nbsp;%&nbsp;character))&nbsp;(:knowledge&nbsp;gossip))
</span><br/>
<span class="not-covered" title="0 out of 12 forms covered">
121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter&nbsp;#(=&nbsp;(:other&nbsp;%&nbsp;character))&nbsp;(:knowledge&nbsp;gossip)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
122&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
123&nbsp;&nbsp;(defn&nbsp;interesting-character?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
124&nbsp;&nbsp;&nbsp;&nbsp;&quot;Boolean&nbsp;representation&nbsp;of&nbsp;whether&nbsp;this&nbsp;`character`&nbsp;is&nbsp;interesting&nbsp;to&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
125&nbsp;&nbsp;&nbsp;&nbsp;`gossip`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
126&nbsp;&nbsp;&nbsp;&nbsp;[gossip&nbsp;character]
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
127&nbsp;&nbsp;&nbsp;&nbsp;(&gt;&nbsp;(interest-in-character&nbsp;gossip&nbsp;character)&nbsp;0))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
128&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
129&nbsp;&nbsp;(defn&nbsp;interest-in-location
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
130&nbsp;&nbsp;&nbsp;&nbsp;&quot;Integer&nbsp;representation&nbsp;of&nbsp;how&nbsp;interesting&nbsp;this&nbsp;`location`&nbsp;is&nbsp;to&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
131&nbsp;&nbsp;&nbsp;&nbsp;`gossip`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
132&nbsp;&nbsp;&nbsp;&nbsp;[gossip&nbsp;location]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
133&nbsp;&nbsp;&nbsp;&nbsp;(cond
</span><br/>
<span class="partial" title="20 out of 21 forms covered">
134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(map?&nbsp;location)&nbsp;(number?&nbsp;(:x&nbsp;location))&nbsp;(number?&nbsp;(:y&nbsp;location)))
</span><br/>
<span class="partial" title="8 out of 9 forms covered">
135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if-let&nbsp;[home&nbsp;(:home&nbsp;gossip)]
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[d&nbsp;(distance-between&nbsp;location&nbsp;home)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;(&#x2F;&nbsp;10000&nbsp;d)&nbsp;;;&nbsp;10000&nbsp;at&nbsp;metre&nbsp;scale&nbsp;is&nbsp;10km;&nbsp;interest&nbsp;should
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;fall&nbsp;off&nbsp;with&nbsp;distance&nbsp;from&nbsp;home,&nbsp;but&nbsp;possibly&nbsp;on&nbsp;a&nbsp;log&nbsp;scale
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(&gt;&nbsp;i&nbsp;1)&nbsp;i&nbsp;0))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;location)
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(interest-in-location&nbsp;gossip&nbsp;%)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(count
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
151&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(some&nbsp;(fn&nbsp;[x]&nbsp;(=&nbsp;x&nbsp;location))&nbsp;(:location&nbsp;%))
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons&nbsp;{:location&nbsp;(:home&nbsp;gossip)}&nbsp;(:knowledge&nbsp;gossip))))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
153&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
154&nbsp;&nbsp;;;&nbsp;(interest-in-location&nbsp;{:home&nbsp;[{0,&nbsp;0}&nbsp;:test-home]&nbsp;:knowledge&nbsp;[]}&nbsp;[:test-home])
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
155&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
156&nbsp;&nbsp;(defn&nbsp;interesting-location?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
157&nbsp;&nbsp;&nbsp;&nbsp;&quot;True&nbsp;if&nbsp;the&nbsp;location&nbsp;of&nbsp;this&nbsp;news&nbsp;`item`&nbsp;is&nbsp;interesting&nbsp;to&nbsp;this&nbsp;`gossip`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
158&nbsp;&nbsp;&nbsp;&nbsp;[gossip&nbsp;item]
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
159&nbsp;&nbsp;&nbsp;&nbsp;(&gt;&nbsp;(interest-in-location&nbsp;gossip&nbsp;(:location&nbsp;item))&nbsp;0))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
160&nbsp;&nbsp;
</span><br/>
<span class="partial" title="1 out of 2 forms covered">
161&nbsp;&nbsp;(defn&nbsp;interesting-object?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
162&nbsp;&nbsp;&nbsp;&nbsp;[gossip&nbsp;object]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
163&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;Not&nbsp;yet&nbsp;(really)&nbsp;implemented
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
164&nbsp;&nbsp;&nbsp;&nbsp;true)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
165&nbsp;&nbsp;
</span><br/>
<span class="partial" title="1 out of 2 forms covered">
166&nbsp;&nbsp;(defn&nbsp;interesting-topic?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
167&nbsp;&nbsp;&nbsp;&nbsp;[gossip&nbsp;topic]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
168&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;Not&nbsp;yet&nbsp;(really)&nbsp;implemented
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
169&nbsp;&nbsp;&nbsp;&nbsp;true)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
170&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
171&nbsp;&nbsp;(defn&nbsp;compatible-value?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
172&nbsp;&nbsp;&nbsp;&nbsp;&quot;True&nbsp;if&nbsp;`known-value`&nbsp;is&nbsp;the&nbsp;same&nbsp;as&nbsp;`new-value`,&nbsp;or,&nbsp;for&nbsp;each&nbsp;key&nbsp;present
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
173&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;`new-value`,&nbsp;has&nbsp;the&nbsp;same&nbsp;value&nbsp;for&nbsp;that&nbsp;key.&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
174&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
175&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;rationale&nbsp;here&nbsp;is&nbsp;that&nbsp;if&nbsp;`new-value`&nbsp;contains&nbsp;new&nbsp;or&nbsp;different&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
176&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;information,&nbsp;it&#x27;s&nbsp;worth&nbsp;learning;&nbsp;otherwise,&nbsp;not.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
177&nbsp;&nbsp;&nbsp;&nbsp;[new-value&nbsp;known-value]
</span><br/>
<span class="partial" title="5 out of 6 forms covered">
178&nbsp;&nbsp;&nbsp;&nbsp;(or
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
179&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;new-value&nbsp;known-value)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
180&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;some&nbsp;handwaving&nbsp;here&nbsp;about&nbsp;being&nbsp;a&nbsp;slightly&nbsp;better&nbsp;descriptor&nbsp;--
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
181&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;having&nbsp;more&nbsp;keys&nbsp;than&nbsp;might&nbsp;
</span><br/>
<span class="partial" title="7 out of 10 forms covered">
182&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(and&nbsp;(map?&nbsp;new-value)&nbsp;(map?&nbsp;known-value))
</span><br/>
<span class="not-covered" title="0 out of 13 forms covered">
183&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(every?&nbsp;true?&nbsp;(map&nbsp;#(=&nbsp;(new-value&nbsp;%)&nbsp;(known-value&nbsp;%))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
184&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keys&nbsp;new-value))))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
185&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
186&nbsp;&nbsp;(defn&nbsp;compatible-item?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
187&nbsp;&nbsp;&nbsp;&nbsp;&quot;True&nbsp;if&nbsp;`new-item`&nbsp;is&nbsp;identical&nbsp;with,&nbsp;or&nbsp;less&nbsp;specific&nbsp;than,&nbsp;`known-item`.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
188&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
189&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;we&nbsp;already&nbsp;know&nbsp;&#x27;Bad&nbsp;Joe&nbsp;killed&nbsp;Sweet&nbsp;Daisy&#x27;,&nbsp;there&#x27;s&nbsp;no&nbsp;point&nbsp;in&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
190&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;learning&nbsp;that&nbsp;&#x27;someone&nbsp;killed&nbsp;Sweet&nbsp;Daisy&#x27;,&nbsp;but&nbsp;there&nbsp;is&nbsp;point&nbsp;in&nbsp;learning
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
191&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#x27;someone&nbsp;killed&nbsp;Sweet&nbsp;Daisy&nbsp;_with&nbsp;poison_&#x27;.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
192&nbsp;&nbsp;&nbsp;&nbsp;[new-item&nbsp;known-item]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
193&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
194&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(and&nbsp;%1&nbsp;%2)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
195&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;#(if
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
196&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(known-item&nbsp;%)&nbsp;;;&nbsp;if&nbsp;known-item&nbsp;has&nbsp;this&nbsp;key
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
197&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(compatible-value?&nbsp;(new-item&nbsp;%)&nbsp;(known-item&nbsp;%))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
198&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove&nbsp;#{:nth-hand&nbsp;:confidence&nbsp;:learned-from}&nbsp;(keys&nbsp;new-item)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
200&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
201&nbsp;&nbsp;(defn&nbsp;known-item?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
202&nbsp;&nbsp;&nbsp;&nbsp;&quot;True&nbsp;if&nbsp;this&nbsp;news&nbsp;`item`&nbsp;is&nbsp;already&nbsp;known&nbsp;to&nbsp;this&nbsp;`gossip`.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
203&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
204&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;means&nbsp;that&nbsp;the&nbsp;`gossip`&nbsp;already&nbsp;knows&nbsp;an&nbsp;item&nbsp;which&nbsp;identifiably&nbsp;has
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
205&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;same&nbsp;_or&nbsp;more&nbsp;specific_&nbsp;values&nbsp;for&nbsp;all&nbsp;the&nbsp;keys&nbsp;of&nbsp;this&nbsp;`item`&nbsp;except
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
206&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`:nth-hand`,&nbsp;`:confidence`&nbsp;and&nbsp;`:learned-from`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
207&nbsp;&nbsp;&nbsp;&nbsp;[gossip&nbsp;item]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
208&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
209&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(or&nbsp;%1&nbsp;%2)
</span><br/>
<span class="partial" title="9 out of 13 forms covered">
210&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter&nbsp;true?&nbsp;(map&nbsp;#(compatible-item?&nbsp;item&nbsp;%)&nbsp;(:knowledge&nbsp;gossip)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
211&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
212&nbsp;&nbsp;(defn&nbsp;interesting-item?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
213&nbsp;&nbsp;&nbsp;&nbsp;&quot;True&nbsp;if&nbsp;anything&nbsp;about&nbsp;this&nbsp;news&nbsp;`item`&nbsp;is&nbsp;interesting&nbsp;to&nbsp;this&nbsp;`gossip`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
214&nbsp;&nbsp;&nbsp;&nbsp;[gossip&nbsp;item]
</span><br/>
<span class="partial" title="7 out of 27 forms covered">
215&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(not&nbsp;(known-item?&nbsp;gossip&nbsp;item))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
216&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
217&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(interesting-character?&nbsp;gossip&nbsp;(:actor&nbsp;item))
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
218&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(interesting-character?&nbsp;gossip&nbsp;(:other&nbsp;item))
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
219&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(interesting-location?&nbsp;gossip&nbsp;(:location&nbsp;item))
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
220&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(interesting-object?&nbsp;gossip&nbsp;(:object&nbsp;item))
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
221&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(interesting-topic?&nbsp;gossip&nbsp;(:verb&nbsp;item)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
222&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
223&nbsp;&nbsp;(defn&nbsp;infer
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
224&nbsp;&nbsp;&nbsp;&nbsp;&quot;Infer&nbsp;a&nbsp;new&nbsp;knowledge&nbsp;item&nbsp;from&nbsp;this&nbsp;`item`,&nbsp;following&nbsp;this&nbsp;`rule`&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
225&nbsp;&nbsp;&nbsp;&nbsp;[item&nbsp;rule]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
226&nbsp;&nbsp;&nbsp;&nbsp;(reduce&nbsp;merge
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
227&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
228&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
229&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:verb&nbsp;(:verb&nbsp;rule)}
</span><br/>
<span class="covered" title="13 out of 13 forms covered">
230&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;(fn&nbsp;[k]&nbsp;{k&nbsp;(apply&nbsp;(k&nbsp;rule)&nbsp;(list&nbsp;item))})
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
231&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
232&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#{:verb}
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
233&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keys&nbsp;rule))))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
234&nbsp;&nbsp;
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
235&nbsp;&nbsp;(declare&nbsp;learn-news-item)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
236&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
237&nbsp;&nbsp;(defn&nbsp;make-all-inferences
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
238&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;list&nbsp;of&nbsp;knowledge&nbsp;entries&nbsp;that&nbsp;can&nbsp;be&nbsp;inferred&nbsp;from&nbsp;this&nbsp;news
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
239&nbsp;&nbsp;&nbsp;&nbsp;`item`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
240&nbsp;&nbsp;&nbsp;&nbsp;[item]
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
241&nbsp;&nbsp;&nbsp;&nbsp;(set
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
242&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
243&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
244&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
245&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(:knowledge&nbsp;(learn-news-item&nbsp;{}&nbsp;(infer&nbsp;item&nbsp;%)&nbsp;false))
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
246&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:inferences&nbsp;(news-topics&nbsp;(:verb&nbsp;item)))))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
247&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
248&nbsp;&nbsp;(defn&nbsp;degrade-character
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
249&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;character&nbsp;specification&nbsp;like&nbsp;this&nbsp;`character`,&nbsp;but&nbsp;comprising
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
250&nbsp;&nbsp;&nbsp;&nbsp;only&nbsp;those&nbsp;properties&nbsp;this&nbsp;`gossip`&nbsp;is&nbsp;interested&nbsp;in.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
251&nbsp;&nbsp;&nbsp;&nbsp;[gossip&nbsp;character]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
252&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;Not&nbsp;yet&nbsp;(really)&nbsp;implemented
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
253&nbsp;&nbsp;&nbsp;&nbsp;character)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
254&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
255&nbsp;&nbsp;(defn&nbsp;degrade-location
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
256&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;location&nbsp;specification&nbsp;like&nbsp;this&nbsp;`location`,&nbsp;but&nbsp;comprising
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
257&nbsp;&nbsp;&nbsp;&nbsp;only&nbsp;those&nbsp;elements&nbsp;this&nbsp;`gossip`&nbsp;is&nbsp;interested&nbsp;in.&nbsp;If&nbsp;none,&nbsp;return
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
258&nbsp;&nbsp;&nbsp;&nbsp;`nil`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
259&nbsp;&nbsp;&nbsp;&nbsp;[gossip&nbsp;location]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
260&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[l&nbsp;(when
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
261&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(coll?&nbsp;location)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
262&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter
</span><br/>
<span class="partial" title="5 out of 7 forms covered">
263&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(when&nbsp;(interesting-location?&nbsp;gossip&nbsp;%)&nbsp;%)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
264&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location))]
</span><br/>
<span class="partial" title="5 out of 7 forms covered">
265&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(empty?&nbsp;l)&nbsp;l)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
266&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
267&nbsp;&nbsp;(defn&nbsp;inc-or-one
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
268&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">
269&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">
270&nbsp;&nbsp;&nbsp;&nbsp;[val]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
271&nbsp;&nbsp;&nbsp;&nbsp;(if
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
272&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(number?&nbsp;val)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
273&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(inc&nbsp;val)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
274&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
275&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
276&nbsp;&nbsp;(defn&nbsp;learn-news-item
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
277&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;gossip&nbsp;like&nbsp;this&nbsp;`gossip`,&nbsp;which&nbsp;has&nbsp;learned&nbsp;this&nbsp;news&nbsp;`item`&nbsp;if
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
278&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;is&nbsp;of&nbsp;interest&nbsp;to&nbsp;them.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
279&nbsp;&nbsp;&nbsp;&nbsp;([gossip&nbsp;item]
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
280&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(learn-news-item&nbsp;gossip&nbsp;item&nbsp;true))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
281&nbsp;&nbsp;&nbsp;&nbsp;([gossip&nbsp;item&nbsp;follow-inferences?]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
282&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
283&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(interesting-item?&nbsp;gossip&nbsp;item)
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
284&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[item&#x27;&nbsp;(assoc
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
285&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
286&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:nth-hand&nbsp;(inc-or-one&nbsp;(:nth-hand&nbsp;item))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
287&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:time-stamp&nbsp;(if
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
288&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(number?&nbsp;(:time-stamp&nbsp;item))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
289&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:time-stamp&nbsp;item)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
290&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(game-time))
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
291&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:location&nbsp;(degrade-location&nbsp;gossip&nbsp;(:location&nbsp;item))
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
292&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:actor&nbsp;(degrade-character&nbsp;gossip&nbsp;(:actor&nbsp;item))
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
293&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:other&nbsp;(degrade-character&nbsp;gossip&nbsp;(:other&nbsp;item))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
294&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;do&nbsp;something&nbsp;to&nbsp;degrade&nbsp;confidence&nbsp;in&nbsp;the&nbsp;item,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
295&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;probably&nbsp;as&nbsp;a&nbsp;function&nbsp;of&nbsp;the&nbsp;provider&#x27;s&nbsp;confidence&nbsp;in
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
296&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;the&nbsp;item&nbsp;and&nbsp;the&nbsp;gossip&#x27;s&nbsp;trust&nbsp;in&nbsp;the&nbsp;provider
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
297&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
298&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g&nbsp;(assoc
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
299&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gossip
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
300&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:knowledge
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
301&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
302&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item&#x27;
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
303&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:knowledge&nbsp;gossip)))]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
304&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;follow-inferences?
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
305&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(assoc
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
306&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
307&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:knowledge
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
308&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(concat&nbsp;(:knowledge&nbsp;g)&nbsp;(make-all-inferences&nbsp;item)))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
309&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g)))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
310&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gossip))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
311&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
312&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
313&nbsp;&nbsp;
</span><br/>
</body>
</html>

View file

@ -0,0 +1,146 @@
<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/holdings/holding.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.holdings.holding
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[cc.journeyman.the-great-game.agent.agent&nbsp;:refer&nbsp;[ProtoAgent]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.objects.container&nbsp;:refer&nbsp;[ProtoContainer]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.objects.game-object&nbsp;:refer&nbsp;[ProtoObject]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.location.location&nbsp;:refer&nbsp;[OrientedLocation]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.world.routes&nbsp;:refer&nbsp;[]]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
007&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;;;;&nbsp;A&nbsp;holding&nbsp;is&nbsp;a&nbsp;polygonal&nbsp;area&nbsp;of&nbsp;the&nbsp;map&nbsp;which&nbsp;does&nbsp;not
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;;;;&nbsp;intersect&nbsp;with&nbsp;any&nbsp;other&nbsp;holding,&nbsp;or&nbsp;with&nbsp;any&nbsp;road&nbsp;or&nbsp;water&nbsp;feature.&nbsp;For&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;;;;&nbsp;the&nbsp;time&nbsp;being&nbsp;we&#x27;ll&nbsp;make&nbsp;the&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;;;;&nbsp;simplifying&nbsp;assumption&nbsp;that&nbsp;every&nbsp;holding&nbsp;is&nbsp;a&nbsp;rectangular&nbsp;strip,&nbsp;and&nbsp;that
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;;;;&nbsp;&#x27;urban&#x27;&nbsp;holdings&nbsp;are&nbsp;of&nbsp;a&nbsp;reasonably&nbsp;standard&nbsp;width&nbsp;(see&nbsp;Viking-period&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;;;;&nbsp;York)&nbsp;and&nbsp;length.&nbsp;Rural&nbsp;holdings&nbsp;(farms,&nbsp;?wood&nbsp;lots)&nbsp;may&nbsp;be&nbsp;much&nbsp;larger.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
014&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
015&nbsp;&nbsp;(defprotocol&nbsp;ProtoHolding
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;(frontage
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[holding]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;a&nbsp;sequence&nbsp;of&nbsp;two&nbsp;locations&nbsp;representing&nbsp;the&nbsp;edge&nbsp;of&nbsp;the&nbsp;polygon
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;defines&nbsp;this&nbsp;holding&nbsp;which&nbsp;is&nbsp;considered&nbsp;to&nbsp;be&nbsp;the&nbsp;front.&quot;)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;(building-origin
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[holding]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;an&nbsp;oriented&nbsp;location&nbsp;-&nbsp;normally&nbsp;the&nbsp;right&nbsp;hand&nbsp;end&nbsp;of&nbsp;the&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frontage,&nbsp;for&nbsp;an&nbsp;urban&nbsp;holding&nbsp;-&nbsp;from&nbsp;which&nbsp;buildings&nbsp;on&nbsp;the&nbsp;holding
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;should&nbsp;be&nbsp;built.&quot;))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
025&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
026&nbsp;&nbsp;(defrecord&nbsp;Holding&nbsp;[perimeter&nbsp;holder]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;Perimeter&nbsp;should&nbsp;be&nbsp;a&nbsp;list&nbsp;of&nbsp;locations&nbsp;in&nbsp;exactly&nbsp;the&nbsp;same&nbsp;sense&nbsp;as&nbsp;a
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;route&nbsp;in&nbsp;`cc.journeyman.the-great-game.world.routes`.&nbsp;Some&nbsp;sanity&nbsp;checking
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;is&nbsp;needed&nbsp;to&nbsp;ensure&nbsp;this!
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;ProtoContainer
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;ProtoHolding
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;(frontage&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[holding]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;TODO:&nbsp;this&nbsp;is&nbsp;WRONG,&nbsp;but&nbsp;will&nbsp;work&nbsp;for&nbsp;now.&nbsp;The&nbsp;frontage&nbsp;should
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;the&nbsp;side&nbsp;of&nbsp;the&nbsp;perimeter&nbsp;nearest&nbsp;to&nbsp;the&nbsp;nearest&nbsp;existing&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;route.&quot;
</span><br/>
<span class="not-covered" title="0 out of 11 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[(first&nbsp;(perimeter&nbsp;holding))&nbsp;(nth&nbsp;(perimeter&nbsp;holding)&nbsp;1)])
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;(building-origin&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[holding]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;TODO:&nbsp;again&nbsp;this&nbsp;is&nbsp;WRONG.&nbsp;The&nbsp;default&nbsp;building&nbsp;origin&nbsp;for&nbsp;rectangular&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildings&nbsp;should&nbsp;be&nbsp;the&nbsp;right&nbsp;hand&nbsp;end&nbsp;of&nbsp;the&nbsp;frontage&nbsp;when&nbsp;viewed
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;outside&nbsp;the&nbsp;holding.&nbsp;But&nbsp;that&#x27;s&nbsp;not&nbsp;general;&nbsp;celtic-style&nbsp;circular
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buildings&nbsp;should&nbsp;normally&nbsp;be&nbsp;in&nbsp;the&nbsp;centre&nbsp;of&nbsp;their&nbsp;holdings.&nbsp;So&nbsp;probably
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;building-origin&nbsp;becomes&nbsp;a&nbsp;method&nbsp;of&nbsp;building-family&nbsp;rather&nbsp;than&nbsp;of&nbsp;holding.&quot;
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first&nbsp;(frontage&nbsp;holding)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;ProtoObject)
</span><br/>
</body>
</html>

View file

@ -0,0 +1,149 @@
<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/location/location.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.location.location)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
002&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;;;;&nbsp;There&#x27;s&nbsp;probably&nbsp;conflict&nbsp;between&nbsp;this&nbsp;sense&nbsp;of&nbsp;a&nbsp;reified&nbsp;location&nbsp;and
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;;;;&nbsp;the&nbsp;simpler&nbsp;sense&nbsp;of&nbsp;a&nbsp;location&nbsp;described&nbsp;in&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;;;;&nbsp;`cc.journeyman.the-great-game.world.location`,&nbsp;q.v.&nbsp;This&nbsp;needs&nbsp;to
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;;;;&nbsp;be&nbsp;resolved!
</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;(defprotocol&nbsp;ProtoLocation
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;(easting&nbsp;[location]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;the&nbsp;easting&nbsp;of&nbsp;this&nbsp;location&quot;)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;(northing&nbsp;[location]&nbsp;&quot;Return&nbsp;the&nbsp;northing&nbsp;of&nbsp;this&nbsp;location&quot;)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;(altitude&nbsp;[location]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;the&nbsp;absolute&nbsp;altitude&nbsp;of&nbsp;this&nbsp;location,&nbsp;which&nbsp;may&nbsp;be
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;different&nbsp;from&nbsp;the&nbsp;terrain&nbsp;height&nbsp;at&nbsp;this&nbsp;location,&nbsp;if,&nbsp;for
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;example,&nbsp;the&nbsp;location&nbsp;is&nbsp;underground&nbsp;or&nbsp;on&nbsp;an&nbsp;upper&nbsp;floor.&quot;)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;(terrain-altitude&nbsp;[location]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;the&nbsp;&#x27;ground&nbsp;level&#x27;&nbsp;(altitude&nbsp;of&nbsp;the&nbsp;terrain)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;this&nbsp;location&nbsp;given&nbsp;this&nbsp;world.&nbsp;TODO:&nbsp;possibly
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;terrain-altitude&nbsp;should&nbsp;be&nbsp;a&nbsp;method&nbsp;of&nbsp;the&nbsp;world.&quot;)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;(settlement&nbsp;[location]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;the&nbsp;settlement&nbsp;record&nbsp;of&nbsp;the&nbsp;settlement&nbsp;in&nbsp;this&nbsp;world
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;within&nbsp;whose&nbsp;parish&nbsp;polygon&nbsp;this&nbsp;location&nbsp;exists,&nbsp;or&nbsp;if&nbsp;none
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whose&nbsp;centre&nbsp;(inn&nbsp;location)&nbsp;is&nbsp;closest&nbsp;to&nbsp;this&nbsp;location&quot;))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
024&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
025&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
026&nbsp;&nbsp;(defrecord&nbsp;Location&nbsp;[^Double&nbsp;easting&nbsp;^Double&nbsp;northing&nbsp;^Double&nbsp;altitude&nbsp;world]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;ProtoLocation
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;(easting&nbsp;[l]&nbsp;(:easting&nbsp;l))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;(northing&nbsp;[l]&nbsp;(:northing&nbsp;l))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;(altitude&nbsp;[l]&nbsp;(:altitude&nbsp;l))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;(terrain-altitude&nbsp;[l]&nbsp;0.0)&nbsp;;;&nbsp;TODO
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;(settlement&nbsp;[l]&nbsp;:tchahua))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
033&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
034&nbsp;&nbsp;(defrecord&nbsp;OrientedLocation
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&quot;Identical&nbsp;to&nbsp;a&nbsp;Location&nbsp;except&nbsp;having,&nbsp;additionally,&nbsp;an&nbsp;orientation&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[^Double&nbsp;easting&nbsp;^Double&nbsp;northing&nbsp;^Double&nbsp;altitude&nbsp;^Double&nbsp;orientation&nbsp;world]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;ProtoLocation
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;(easting&nbsp;[l]&nbsp;(:easting&nbsp;l))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;(northing&nbsp;[l]&nbsp;(:northing&nbsp;l))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;(altitude&nbsp;[l]&nbsp;(:altitude&nbsp;l))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;(terrain-altitude&nbsp;[l]&nbsp;0.0)&nbsp;;;&nbsp;TODO
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;(settlement&nbsp;[l]&nbsp;:tchahua))&nbsp;;;&nbsp;TODO
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
043&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;;;&nbsp;(.settlement&nbsp;(OrientedLocation.&nbsp;123.45&nbsp;543.76&nbsp;12.34&nbsp;0.00&nbsp;{}))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
045&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
046&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;;;&nbsp;(OrientedLocation.&nbsp;123.45&nbsp;543.76&nbsp;12.34&nbsp;0.00&nbsp;{})
</span><br/>
</body>
</html>

View file

@ -0,0 +1,260 @@
<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/merchants/markets.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.merchants.markets
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Adjusting&nbsp;quantities&nbsp;and&nbsp;prices&nbsp;in&nbsp;markets.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[taoensso.timbre&nbsp;:as&nbsp;l&nbsp;:refer&nbsp;[info&nbsp;error]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.utils&nbsp;:refer&nbsp;[deep-merge]]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
005&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
006&nbsp;&nbsp;(defn&nbsp;new-price
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;`stock`&nbsp;is&nbsp;greater&nbsp;than&nbsp;the&nbsp;maximum&nbsp;of&nbsp;`supply`&nbsp;and&nbsp;`demand`,&nbsp;then
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;there&nbsp;is&nbsp;surplus&nbsp;and&nbsp;`old`&nbsp;price&nbsp;is&nbsp;too&nbsp;high,&nbsp;so&nbsp;shold&nbsp;be&nbsp;reduced.&nbsp;If
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;lower,&nbsp;then&nbsp;it&nbsp;is&nbsp;too&nbsp;low&nbsp;and&nbsp;should&nbsp;be&nbsp;increased.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;[old&nbsp;stock&nbsp;supply&nbsp;demand]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;(let
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[delta&nbsp;(dec&#x27;&nbsp;(&#x2F;&nbsp;(max&nbsp;supply&nbsp;demand&nbsp;1)&nbsp;(max&nbsp;stock&nbsp;1)))
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scaled&nbsp;(&#x2F;&nbsp;delta&nbsp;100)]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(+&nbsp;old&nbsp;scaled)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
015&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
016&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
017&nbsp;&nbsp;(defn&nbsp;adjust-quantity-and-price
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&quot;Adjust&nbsp;the&nbsp;quantity&nbsp;of&nbsp;this&nbsp;`commodity`&nbsp;currently&nbsp;in&nbsp;stock&nbsp;in&nbsp;this&nbsp;`city`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;this&nbsp;`world`.&nbsp;Return&nbsp;a&nbsp;fragmentary&nbsp;world&nbsp;which&nbsp;can&nbsp;be&nbsp;deep-merged&nbsp;into
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;world.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;[world&nbsp;city&nbsp;commodity]
</span><br/>
<span class="partial" title="2 out of 4 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[c&nbsp;(cond
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;city)&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;city)
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;city)&nbsp;city)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;(:id&nbsp;c)
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;(or&nbsp;(-&gt;&nbsp;c&nbsp;:prices&nbsp;commodity)&nbsp;0)
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;(or&nbsp;(-&gt;&nbsp;c&nbsp;:demands&nbsp;commodity)&nbsp;0)
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;(or&nbsp;(-&gt;&nbsp;c&nbsp;:stock&nbsp;commodity)&nbsp;0)
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su&nbsp;(or&nbsp;(-&gt;&nbsp;c&nbsp;:supplies&nbsp;commodity)&nbsp;0)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decrement&nbsp;(min&nbsp;st&nbsp;d)
</span><br/>
<span class="partial" title="5 out of 6 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;increment&nbsp;(cond
</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;if&nbsp;we&#x27;ve&nbsp;two&nbsp;turns&#x27;&nbsp;production&nbsp;of&nbsp;this&nbsp;commodity&nbsp;in
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;stock,&nbsp;halt&nbsp;production
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt;&nbsp;st&nbsp;(*&nbsp;su&nbsp;2))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;if&nbsp;it&nbsp;is&nbsp;profitable&nbsp;to&nbsp;produce&nbsp;this&nbsp;commodity,&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;craftspeople&nbsp;of&nbsp;the&nbsp;city&nbsp;will&nbsp;do&nbsp;so.
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt;&nbsp;p&nbsp;1)&nbsp;su
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;otherwise,&nbsp;if&nbsp;there&nbsp;isn&#x27;t&nbsp;a&nbsp;turn&#x27;s&nbsp;production&nbsp;in
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;stock,&nbsp;top&nbsp;up&nbsp;the&nbsp;stock,&nbsp;so&nbsp;that&nbsp;there&#x27;s&nbsp;something&nbsp;for
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;incoming&nbsp;merchants&nbsp;to&nbsp;buy
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt;&nbsp;su&nbsp;st)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&nbsp;su&nbsp;st)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0)
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;(new-price&nbsp;p&nbsp;st&nbsp;su&nbsp;d)]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not=&nbsp;p&nbsp;n)
</span><br/>
<span class="covered" title="25 out of 25 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;info&nbsp;&quot;Price&nbsp;of&quot;&nbsp;commodity&nbsp;&quot;at&quot;&nbsp;id&nbsp;&quot;has&nbsp;changed&nbsp;from&quot;&nbsp;(float&nbsp;p)&nbsp;&quot;to&quot;&nbsp;(float&nbsp;n)))
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cities&nbsp;{id
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:stock
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{commodity&nbsp;(+&nbsp;(-&nbsp;st&nbsp;decrement)&nbsp;increment)}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:prices
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{commodity&nbsp;n}}}}))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
055&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
056&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
057&nbsp;&nbsp;(defn&nbsp;update-markets
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;world&nbsp;like&nbsp;this&nbsp;`world`,&nbsp;with&nbsp;quantities&nbsp;and&nbsp;prices&nbsp;in&nbsp;markets
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;updated&nbsp;to&nbsp;reflect&nbsp;supply&nbsp;and&nbsp;demand.&nbsp;If&nbsp;`city`&nbsp;or&nbsp;`city`&nbsp;and&nbsp;`commodity`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;specified,&nbsp;return&nbsp;a&nbsp;fragmentary&nbsp;world&nbsp;with&nbsp;only&nbsp;the&nbsp;changes&nbsp;for&nbsp;that
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;`city`&nbsp;(and&nbsp;`commodity`&nbsp;if&nbsp;specified)&nbsp;populated.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;([world]
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deep-merge
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(update-markets&nbsp;world&nbsp;%)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keys&nbsp;(:cities&nbsp;world)))))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
069&nbsp;&nbsp;&nbsp;&nbsp;([world&nbsp;city]
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deep-merge
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{}
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;#(update-markets&nbsp;world&nbsp;city&nbsp;%)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
074&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keys&nbsp;(:commodities&nbsp;world)))))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;([world&nbsp;city&nbsp;commodity]
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(adjust-quantity-and-price&nbsp;world&nbsp;city&nbsp;commodity)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
077&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
078&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
079&nbsp;&nbsp;(defn&nbsp;run
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
080&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;world&nbsp;like&nbsp;this&nbsp;`world`,&nbsp;with&nbsp;quantities&nbsp;and&nbsp;prices&nbsp;in&nbsp;markets
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
081&nbsp;&nbsp;&nbsp;&nbsp;updated&nbsp;to&nbsp;reflect&nbsp;supply&nbsp;and&nbsp;demand.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
082&nbsp;&nbsp;&nbsp;&nbsp;[world]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
083&nbsp;&nbsp;&nbsp;&nbsp;(update-markets&nbsp;world))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
084&nbsp;&nbsp;
</span><br/>
</body>
</html>

View file

@ -0,0 +1,326 @@
<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/merchants/merchant_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.merchants.merchant-utils
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Useful&nbsp;functions&nbsp;for&nbsp;doing&nbsp;low-level&nbsp;things&nbsp;with&nbsp;merchants.&quot;)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
003&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
004&nbsp;&nbsp;(defn&nbsp;expected-price
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&quot;Find&nbsp;the&nbsp;price&nbsp;anticipated,&nbsp;given&nbsp;this&nbsp;`world`,&nbsp;by&nbsp;this&nbsp;`merchant`&nbsp;for
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;`commodity`&nbsp;in&nbsp;this&nbsp;`city`.&nbsp;If&nbsp;no&nbsp;information,&nbsp;assume&nbsp;1.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;`merchant`&nbsp;should&nbsp;be&nbsp;passed&nbsp;as&nbsp;a&nbsp;map,&nbsp;`commodity`&nbsp;and&nbsp;`city`&nbsp;should&nbsp;be&nbsp;passed&nbsp;as&nbsp;keywords.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;commodity&nbsp;city]
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;(or
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:price
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(last
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(sort-by
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:date
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;merchant&nbsp;:known-prices&nbsp;city&nbsp;commodity))))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
016&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
017&nbsp;&nbsp;(defn&nbsp;burden
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;total&nbsp;weight&nbsp;of&nbsp;the&nbsp;current&nbsp;cargo&nbsp;carried&nbsp;by&nbsp;this&nbsp;`merchant`&nbsp;in&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;`world`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world]
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[m&nbsp;(cond
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;merchant)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:merchants&nbsp;merchant)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;merchant)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merchant)
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cargo&nbsp;(or&nbsp;(:stock&nbsp;m)&nbsp;{})]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(*&nbsp;(cargo&nbsp;%)&nbsp;(-&gt;&nbsp;world&nbsp;:commodities&nbsp;%&nbsp;:weight))
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keys&nbsp;cargo)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
033&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
034&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
035&nbsp;&nbsp;(defn&nbsp;can-carry
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;the&nbsp;number&nbsp;of&nbsp;units&nbsp;of&nbsp;this&nbsp;`commodity`&nbsp;which&nbsp;this&nbsp;`merchant`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;can&nbsp;carry&nbsp;in&nbsp;this&nbsp;`world`,&nbsp;given&nbsp;their&nbsp;current&nbsp;burden.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world&nbsp;commodity]
</span><br/>
<span class="partial" title="3 out of 4 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[m&nbsp;(cond
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;merchant)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:merchants&nbsp;merchant)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;merchant)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merchant)]
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(max
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(quot
</span><br/>
<span class="partial" title="12 out of 13 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&nbsp;(or&nbsp;(:capacity&nbsp;m)&nbsp;0)&nbsp;(burden&nbsp;m&nbsp;world))
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:commodities&nbsp;commodity&nbsp;:weight)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
049&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
050&nbsp;&nbsp;(defn&nbsp;can-afford
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;the&nbsp;number&nbsp;of&nbsp;units&nbsp;of&nbsp;this&nbsp;`commodity`&nbsp;which&nbsp;this&nbsp;`merchant`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;can&nbsp;afford&nbsp;to&nbsp;buy&nbsp;in&nbsp;this&nbsp;`world`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world&nbsp;commodity]
</span><br/>
<span class="partial" title="3 out of 4 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[m&nbsp;(cond
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;merchant)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:merchants&nbsp;merchant)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;merchant)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merchant)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;(:location&nbsp;m)]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nil?&nbsp;m)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(Exception.&nbsp;&quot;No&nbsp;merchant?&quot;))
</span><br/>
<span class="covered" title="14 out of 14 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(nil?&nbsp;l)&nbsp;(nil?&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;l)))
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(Exception.&nbsp;(str&nbsp;&quot;No&nbsp;known&nbsp;location&nbsp;for&nbsp;merchant&nbsp;&quot;&nbsp;m)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(quot
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:cash&nbsp;m)
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;l&nbsp;:prices&nbsp;commodity)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
069&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
070&nbsp;&nbsp;(defn&nbsp;add-stock
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;&quot;Where&nbsp;`a`&nbsp;and&nbsp;`b`&nbsp;are&nbsp;both&nbsp;maps&nbsp;all&nbsp;of&nbsp;whose&nbsp;values&nbsp;are&nbsp;numbers,&nbsp;return
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;map&nbsp;whose&nbsp;keys&nbsp;are&nbsp;a&nbsp;union&nbsp;of&nbsp;the&nbsp;keys&nbsp;of&nbsp;`a`&nbsp;and&nbsp;`b`&nbsp;and&nbsp;whose&nbsp;values
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;the&nbsp;sums&nbsp;of&nbsp;their&nbsp;respective&nbsp;values.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
074&nbsp;&nbsp;&nbsp;&nbsp;[a&nbsp;b]
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merge
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="partial" title="19 out of 20 forms covered">
079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(hash-map&nbsp;%&nbsp;(+&nbsp;(or&nbsp;(a&nbsp;%)&nbsp;0)&nbsp;(or&nbsp;(b&nbsp;%)&nbsp;0)))
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
080&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keys&nbsp;b))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
081&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
082&nbsp;&nbsp;(defn&nbsp;add-known-prices
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
083&nbsp;&nbsp;&nbsp;&nbsp;&quot;Add&nbsp;the&nbsp;current&nbsp;prices&nbsp;at&nbsp;this&nbsp;`merchant`&#x27;s&nbsp;location&nbsp;in&nbsp;the&nbsp;`world`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
084&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;a&nbsp;new&nbsp;cache&nbsp;of&nbsp;known&nbsp;prices,&nbsp;and&nbsp;return&nbsp;it.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
085&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world]
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[m&nbsp;(cond
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
088&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:merchants&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
089&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;(or&nbsp;(:known-prices&nbsp;m)&nbsp;{})
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;(:location&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;(or&nbsp;(:date&nbsp;world)&nbsp;0)
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;l&nbsp;:prices)]
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nil?&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(Exception.&nbsp;&quot;No&nbsp;merchant?&quot;))
</span><br/>
<span class="not-covered" title="0 out of 14 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(nil?&nbsp;l)&nbsp;(nil?&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;l)))
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(Exception.&nbsp;(str&nbsp;&quot;No&nbsp;known&nbsp;location&nbsp;for&nbsp;merchant&nbsp;&quot;&nbsp;m)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merge
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 17 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(hash-map&nbsp;%&nbsp;(apply&nbsp;vector&nbsp;cons&nbsp;{:price&nbsp;(p&nbsp;%)&nbsp;:date&nbsp;d}&nbsp;(k&nbsp;%)))
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:commodities&nbsp;keys))))))
</span><br/>
</body>
</html>

View file

@ -0,0 +1,92 @@
<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/merchants/merchants.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.merchants.merchants
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Trade&nbsp;planning&nbsp;for&nbsp;merchants,&nbsp;primarily.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[cc.journeyman.the-great-game.utils&nbsp;:refer&nbsp;[deep-merge]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.merchants.strategies.simple&nbsp;:refer&nbsp;[move-merchant]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[taoensso.timbre&nbsp;:as&nbsp;l]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
006&nbsp;&nbsp;
</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;run
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;partial&nbsp;world&nbsp;based&nbsp;on&nbsp;this&nbsp;`world`,&nbsp;but&nbsp;with&nbsp;each&nbsp;merchant&nbsp;moved.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;[world]
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;(try
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deep-merge
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(try
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[move-fn&nbsp;(or
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:merchants&nbsp;%&nbsp;:move-fn)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;move-merchant)]
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;move-fn&nbsp;(list&nbsp;%&nbsp;world)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Exception&nbsp;any
</span><br/>
<span class="not-covered" title="0 out of 18 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;error&nbsp;any&nbsp;&quot;Failure&nbsp;while&nbsp;moving&nbsp;merchant&nbsp;&quot;&nbsp;%)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{}))
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keys&nbsp;(:merchants&nbsp;world))))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Exception&nbsp;any
</span><br/>
<span class="not-covered" title="0 out of 17 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;error&nbsp;any&nbsp;&quot;Failure&nbsp;while&nbsp;moving&nbsp;merchants&quot;)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
028&nbsp;&nbsp;
</span><br/>
</body>
</html>

View file

@ -0,0 +1,485 @@
<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/merchants/planning.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.merchants.planning
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Trade&nbsp;planning&nbsp;for&nbsp;merchants,&nbsp;primarily.&nbsp;This&nbsp;follows&nbsp;a&nbsp;simple-minded
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;generate-and-test&nbsp;strategy&nbsp;and&nbsp;currently&nbsp;generates&nbsp;plans&nbsp;for&nbsp;all&nbsp;possible
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;routes&nbsp;from&nbsp;the&nbsp;current&nbsp;location.&nbsp;This&nbsp;may&nbsp;not&nbsp;scale.&nbsp;Also,&nbsp;routes&nbsp;do&nbsp;not
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;currently&nbsp;have&nbsp;cost&nbsp;or&nbsp;risk&nbsp;associated&nbsp;with&nbsp;them.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[cc.journeyman.the-great-game.utils&nbsp;:refer&nbsp;[deep-merge&nbsp;make-target-filter]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.merchants.merchant-utils&nbsp;:refer&nbsp;[can-afford&nbsp;can-carry&nbsp;expected-price]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.world.routes&nbsp;:refer&nbsp;[find-route]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.world.world&nbsp;:refer&nbsp;[actual-price&nbsp;default-world]]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
010&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
011&nbsp;&nbsp;(defn&nbsp;generate-trade-plans
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;&quot;Generate&nbsp;all&nbsp;possible&nbsp;trade&nbsp;plans&nbsp;for&nbsp;this&nbsp;`merchant`&nbsp;and&nbsp;this&nbsp;`commodity`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;this&nbsp;`world`.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
014&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;Returned&nbsp;plans&nbsp;are&nbsp;maps&nbsp;with&nbsp;keys:
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
016&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:merchant&nbsp;-&nbsp;the&nbsp;id&nbsp;of&nbsp;the&nbsp;`merchant`&nbsp;for&nbsp;whom&nbsp;the&nbsp;plan&nbsp;was&nbsp;created;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:origin&nbsp;-&nbsp;the&nbsp;city&nbsp;from&nbsp;which&nbsp;the&nbsp;trade&nbsp;starts;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:destination&nbsp;-&nbsp;the&nbsp;city&nbsp;to&nbsp;which&nbsp;the&nbsp;trade&nbsp;is&nbsp;planned;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:commodity&nbsp;-&nbsp;the&nbsp;`commodity`&nbsp;to&nbsp;be&nbsp;carried;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:buy-price&nbsp;-&nbsp;the&nbsp;price&nbsp;at&nbsp;which&nbsp;that&nbsp;`commodity`&nbsp;can&nbsp;be&nbsp;bought;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:expected-price&nbsp;-&nbsp;the&nbsp;price&nbsp;at&nbsp;which&nbsp;the&nbsp;`merchant`&nbsp;anticipates
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;`commodity`&nbsp;can&nbsp;be&nbsp;sold;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:distance&nbsp;-&nbsp;the&nbsp;number&nbsp;of&nbsp;stages&nbsp;in&nbsp;the&nbsp;planned&nbsp;journey
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:dist-to-home&nbsp;-&nbsp;the&nbsp;distance&nbsp;from&nbsp;`destination`&nbsp;to&nbsp;the&nbsp;`merchant`&#x27;s
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;home&nbsp;city.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world&nbsp;commodity]
</span><br/>
<span class="partial" title="3 out of 4 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[m&nbsp;(cond
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;merchant)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:merchants&nbsp;merchant)
</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;&nbsp;&nbsp;(map?&nbsp;merchant)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merchant)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;origin&nbsp;(:location&nbsp;m)]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(hash-map
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:merchant&nbsp;(:id&nbsp;m)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:origin&nbsp;origin
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:destination&nbsp;%
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:commodity&nbsp;commodity
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:buy-price&nbsp;(actual-price&nbsp;world&nbsp;commodity&nbsp;origin)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:expected-price&nbsp;(expected-price
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;commodity
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:distance&nbsp;(count
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-route&nbsp;world&nbsp;origin&nbsp;%))
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:dist-to-home&nbsp;(count
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-route
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:home&nbsp;m)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%)))
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove&nbsp;#(=&nbsp;%&nbsp;origin)&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;keys)))))
</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;nearest-with-targets
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;the&nbsp;distance&nbsp;to&nbsp;the&nbsp;nearest&nbsp;destination&nbsp;among&nbsp;those&nbsp;of&nbsp;these
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;`plans`&nbsp;which&nbsp;match&nbsp;these&nbsp;`targets`.&nbsp;Plans&nbsp;are&nbsp;expected&nbsp;to&nbsp;be&nbsp;plans
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;returned&nbsp;by&nbsp;`generate-trade-plans`,&nbsp;q.v.;&nbsp;`targets`&nbsp;are&nbsp;expected&nbsp;to&nbsp;be
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;accepted&nbsp;by&nbsp;`make-target-filter`,&nbsp;q.v.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;[plans&nbsp;targets]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;(apply
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:distance
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-target-filter&nbsp;targets)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plans))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
067&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
068&nbsp;&nbsp;(defn&nbsp;plan-trade
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
069&nbsp;&nbsp;&nbsp;&nbsp;&quot;Find&nbsp;the&nbsp;best&nbsp;destination&nbsp;in&nbsp;this&nbsp;`world`&nbsp;for&nbsp;this&nbsp;`commodity`&nbsp;given&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;`merchant`&nbsp;and&nbsp;this&nbsp;`origin`.&nbsp;If&nbsp;two&nbsp;cities&nbsp;are&nbsp;anticipated&nbsp;to&nbsp;offer&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;same&nbsp;price,&nbsp;the&nbsp;nearer&nbsp;should&nbsp;be&nbsp;preferred;&nbsp;if&nbsp;two&nbsp;are&nbsp;equally&nbsp;distant,&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;ones&nbsp;nearer&nbsp;to&nbsp;the&nbsp;merchant&#x27;s&nbsp;home&nbsp;should&nbsp;be&nbsp;preferred.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;`merchant`&nbsp;may&nbsp;be&nbsp;passed&nbsp;as&nbsp;a&nbsp;map&nbsp;or&nbsp;a&nbsp;keyword;&nbsp;`commodity`&nbsp;should&nbsp;&nbsp;be
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
074&nbsp;&nbsp;&nbsp;&nbsp;passed&nbsp;as&nbsp;a&nbsp;keyword.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
075&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;returned&nbsp;plan&nbsp;is&nbsp;a&nbsp;map&nbsp;with&nbsp;keys:
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
077&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
078&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:merchant&nbsp;-&nbsp;the&nbsp;id&nbsp;of&nbsp;the&nbsp;`merchant`&nbsp;for&nbsp;whom&nbsp;the&nbsp;plan&nbsp;was&nbsp;created;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
079&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:origin&nbsp;-&nbsp;the&nbsp;city&nbsp;from&nbsp;which&nbsp;the&nbsp;trade&nbsp;starts;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
080&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:destination&nbsp;-&nbsp;the&nbsp;city&nbsp;to&nbsp;which&nbsp;the&nbsp;trade&nbsp;is&nbsp;planned;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
081&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:commodity&nbsp;-&nbsp;the&nbsp;`commodity`&nbsp;to&nbsp;be&nbsp;carried;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
082&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:buy-price&nbsp;-&nbsp;the&nbsp;price&nbsp;at&nbsp;which&nbsp;that&nbsp;`commodity`&nbsp;can&nbsp;be&nbsp;bought;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
083&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:expected-price&nbsp;-&nbsp;the&nbsp;price&nbsp;at&nbsp;which&nbsp;the&nbsp;`merchant`&nbsp;anticipates
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
084&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;`commodity`&nbsp;can&nbsp;be&nbsp;sold;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
085&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:distance&nbsp;-&nbsp;the&nbsp;number&nbsp;of&nbsp;stages&nbsp;in&nbsp;the&nbsp;planned&nbsp;journey
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;:dist-to-home&nbsp;-&nbsp;the&nbsp;distance&nbsp;from&nbsp;`destination`&nbsp;to&nbsp;the&nbsp;`merchant`&#x27;s
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;home&nbsp;city.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
088&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world&nbsp;commodity]
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
089&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[plans&nbsp;(generate-trade-plans&nbsp;merchant&nbsp;world&nbsp;commodity)
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;best-prices&nbsp;(filter
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-target-filter
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[:expected-price
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter&nbsp;number?&nbsp;(map&nbsp;:expected-price&nbsp;plans)))]])
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plans)]
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(sort-by
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;all&nbsp;other&nbsp;things&nbsp;being&nbsp;equal,&nbsp;a&nbsp;merchant&nbsp;would&nbsp;prefer&nbsp;to&nbsp;end&nbsp;closer
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;to&nbsp;home.
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(-&nbsp;0&nbsp;(:dist-to-home&nbsp;%))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;a&nbsp;merchant&nbsp;will&nbsp;seek&nbsp;the&nbsp;best&nbsp;price,&nbsp;but&nbsp;won&#x27;t&nbsp;go&nbsp;further&nbsp;than
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;needed&nbsp;to&nbsp;get&nbsp;it.
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-target-filter
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[:distance
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;min&nbsp;(filter&nbsp;number?&nbsp;(map&nbsp;:distance&nbsp;best-prices)))]])
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;best-prices)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
109&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
110&nbsp;&nbsp;(defn&nbsp;augment-plan
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
111&nbsp;&nbsp;&nbsp;&nbsp;&quot;Augment&nbsp;this&nbsp;`plan`&nbsp;constructed&nbsp;in&nbsp;this&nbsp;`world`&nbsp;for&nbsp;this&nbsp;`merchant`&nbsp;with
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
112&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;`:quantity`&nbsp;of&nbsp;goods&nbsp;which&nbsp;should&nbsp;be&nbsp;bought&nbsp;and&nbsp;the&nbsp;`:expected-profit`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
113&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;trade.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
114&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
115&nbsp;&nbsp;&nbsp;&nbsp;Returns&nbsp;the&nbsp;augmented&nbsp;plan.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
116&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world&nbsp;plan]
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
117&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[c&nbsp;(:commodity&nbsp;plan)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&nbsp;(:origin&nbsp;plan)
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;(min
</span><br/>
<span class="partial" title="4 out of 5 forms covered">
120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;o&nbsp;:stock&nbsp;c)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(can-carry&nbsp;merchant&nbsp;world&nbsp;c)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(can-afford&nbsp;merchant&nbsp;world&nbsp;c))
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;(*&nbsp;q&nbsp;(-&nbsp;(:expected-price&nbsp;plan)&nbsp;(:buy-price&nbsp;plan)))]
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(assoc&nbsp;plan&nbsp;:quantity&nbsp;q&nbsp;:expected-profit&nbsp;p)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
127&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
128&nbsp;&nbsp;(defn&nbsp;select-cargo
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
129&nbsp;&nbsp;&nbsp;&nbsp;&quot;A&nbsp;`merchant`,&nbsp;in&nbsp;a&nbsp;given&nbsp;location&nbsp;in&nbsp;a&nbsp;`world`,&nbsp;will&nbsp;choose&nbsp;to&nbsp;buy&nbsp;a&nbsp;cargo
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
130&nbsp;&nbsp;&nbsp;&nbsp;within&nbsp;the&nbsp;limit&nbsp;they&nbsp;are&nbsp;capable&nbsp;of&nbsp;carrying,&nbsp;which&nbsp;they&nbsp;can&nbsp;anticipate
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
131&nbsp;&nbsp;&nbsp;&nbsp;selling&nbsp;for&nbsp;a&nbsp;profit&nbsp;at&nbsp;a&nbsp;destination.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
132&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world]
</span><br/>
<span class="partial" title="2 out of 4 forms covered">
133&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[m&nbsp;(cond
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;merchant)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:merchants&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merchant)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;origin&nbsp;(:location&nbsp;m)
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;available&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;origin&nbsp;:stock)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plans&nbsp;(map
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(augment-plan
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(plan-trade&nbsp;m&nbsp;world&nbsp;%))
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(let&nbsp;[q&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;origin&nbsp;:stock&nbsp;%)]
</span><br/>
<span class="partial" title="8 out of 9 forms covered">
147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(number?&nbsp;q)&nbsp;(pos?&nbsp;q)))
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keys&nbsp;available)))]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not&nbsp;(empty?&nbsp;plans))
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
151&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(sort-by
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
153&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(-&nbsp;0&nbsp;(:dist-to-home&nbsp;%))
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
155&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-target-filter
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
156&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[:expected-profit
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
157&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;max&nbsp;(filter&nbsp;number?&nbsp;(map&nbsp;:expected-profit&nbsp;plans)))]])
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
158&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plans))))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
159&nbsp;&nbsp;
</span><br/>
</body>
</html>

View file

@ -0,0 +1,527 @@
<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/merchants/strategies/simple.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.merchants.strategies.simple
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Default&nbsp;trading&nbsp;strategy&nbsp;for&nbsp;merchants.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
003&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;simple&nbsp;strategy&nbsp;buys&nbsp;a&nbsp;single&nbsp;product&nbsp;in&nbsp;the&nbsp;local&nbsp;market&nbsp;if&nbsp;there&nbsp;is
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;which&nbsp;can&nbsp;be&nbsp;traded&nbsp;profitably,&nbsp;trades&nbsp;it&nbsp;to&nbsp;the&nbsp;chosen&nbsp;target&nbsp;market,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;sells&nbsp;it&nbsp;there.&nbsp;If&nbsp;there&nbsp;is&nbsp;no&nbsp;commodity&nbsp;locally&nbsp;which&nbsp;can&nbsp;be&nbsp;traded
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;profitably,&nbsp;moves&nbsp;towards&nbsp;home&nbsp;with&nbsp;no&nbsp;cargo.&nbsp;If&nbsp;at&nbsp;home&nbsp;and&nbsp;no&nbsp;commodity
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;can&nbsp;be&nbsp;traded&nbsp;profitably,&nbsp;does&nbsp;not&nbsp;move.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[taoensso.timbre&nbsp;:as&nbsp;l&nbsp;:refer&nbsp;[info&nbsp;error&nbsp;spy]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.utils&nbsp;:refer&nbsp;[deep-merge]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.gossip.gossip&nbsp;:refer&nbsp;[move-gossip]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.merchants.planning&nbsp;:refer&nbsp;[augment-plan&nbsp;plan-trade&nbsp;select-cargo]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.merchants.merchant-utils&nbsp;:refer
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[add-stock&nbsp;add-known-prices]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.world.routes&nbsp;:refer&nbsp;[find-route]]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
016&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
017&nbsp;&nbsp;(defn&nbsp;plan-and-buy
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;world&nbsp;like&nbsp;this&nbsp;`world`,&nbsp;in&nbsp;which&nbsp;this&nbsp;`merchant`&nbsp;has&nbsp;planned
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;new&nbsp;trade,&nbsp;and&nbsp;bought&nbsp;appropriate&nbsp;stock&nbsp;for&nbsp;it.&nbsp;If&nbsp;no&nbsp;profitable&nbsp;trade
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;can&nbsp;be&nbsp;planned,&nbsp;the&nbsp;merchant&nbsp;is&nbsp;simply&nbsp;moved&nbsp;towards&nbsp;their&nbsp;home.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world]
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[m&nbsp;(cond
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:merchants&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;(:id&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;(:location&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;market&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;location)
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plan&nbsp;(select-cargo&nbsp;merchant&nbsp;world)]
</span><br/>
<span class="not-covered" title="0 out of 17 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;debug&nbsp;&quot;plan-and-buy:&nbsp;merchant&quot;&nbsp;id)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(seq?&nbsp;plan)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[c&nbsp;(:commodity&nbsp;plan)
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;(*&nbsp;(:quantity&nbsp;plan)&nbsp;(:buy-price&nbsp;plan))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;(:quantity&nbsp;plan)]
</span><br/>
<span class="not-covered" title="0 out of 26 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;info&nbsp;&quot;Merchant&quot;&nbsp;id&nbsp;&quot;bought&quot;&nbsp;q&nbsp;&quot;units&nbsp;of&quot;&nbsp;c&nbsp;&quot;at&quot;&nbsp;location&nbsp;&quot;for&quot;&nbsp;p&nbsp;plan)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:merchants
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{id
</span><br/>
<span class="not-covered" title="0 out of 13 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:stock&nbsp;(add-stock&nbsp;(:stock&nbsp;m)&nbsp;{c&nbsp;q})
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cash&nbsp;(-&nbsp;(:cash&nbsp;m)&nbsp;p)
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:known-prices&nbsp;(add-known-prices&nbsp;m&nbsp;world)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:plan&nbsp;plan}}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cities
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{location
</span><br/>
<span class="not-covered" title="0 out of 16 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:stock&nbsp;(assoc&nbsp;(:stock&nbsp;market)&nbsp;c&nbsp;(-&nbsp;(-&gt;&nbsp;market&nbsp;:stock&nbsp;c)&nbsp;q))
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cash&nbsp;(+&nbsp;(:cash&nbsp;market)&nbsp;p)}}})
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;if&nbsp;no&nbsp;plan,&nbsp;then&nbsp;if&nbsp;at&nbsp;home&nbsp;stay&nbsp;put
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;(:location&nbsp;m)&nbsp;(:home&nbsp;m))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(do
</span><br/>
<span class="not-covered" title="0 out of 19 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;info&nbsp;&quot;Merchant&quot;&nbsp;id&nbsp;&quot;remains&nbsp;at&nbsp;home&nbsp;in&quot;&nbsp;location)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{})
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;else&nbsp;move&nbsp;towards&nbsp;home
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[route&nbsp;(find-route&nbsp;world&nbsp;location&nbsp;(:home&nbsp;m))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next-location&nbsp;(nth&nbsp;route&nbsp;1)]
</span><br/>
<span class="not-covered" title="0 out of 21 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;info&nbsp;&quot;No&nbsp;trade&nbsp;possible&nbsp;at&quot;&nbsp;location&nbsp;&quot;;&nbsp;merchant&quot;&nbsp;id&nbsp;&quot;moves&nbsp;to&quot;&nbsp;next-location)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(merge
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:merchants
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{id
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:location&nbsp;next-location}}}
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(move-gossip&nbsp;id&nbsp;world&nbsp;next-location))))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
064&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
065&nbsp;&nbsp;(defn&nbsp;re-plan
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;&quot;Having&nbsp;failed&nbsp;to&nbsp;sell&nbsp;a&nbsp;cargo&nbsp;at&nbsp;current&nbsp;location,&nbsp;re-plan&nbsp;a&nbsp;route&nbsp;to
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;sell&nbsp;the&nbsp;current&nbsp;cargo.&nbsp;Returns&nbsp;a&nbsp;revised&nbsp;world.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
068&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world]
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
069&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[m&nbsp;(cond
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:merchants&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
074&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;(:id&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;(:location&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 13 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plan&nbsp;(augment-plan&nbsp;m&nbsp;world&nbsp;(plan-trade&nbsp;m&nbsp;world&nbsp;(-&gt;&nbsp;m&nbsp;:plan&nbsp;:commodity)))]
</span><br/>
<span class="not-covered" title="0 out of 17 forms covered">
077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;debug&nbsp;&quot;re-plan:&nbsp;merchant&quot;&nbsp;id)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(deep-merge
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
080&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:merchants
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{id
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:plan&nbsp;plan}}})))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
083&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
084&nbsp;&nbsp;(defn&nbsp;sell-and-buy
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
085&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;new&nbsp;world&nbsp;like&nbsp;this&nbsp;`world`,&nbsp;in&nbsp;which&nbsp;this&nbsp;`merchant`&nbsp;has&nbsp;sold
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;their&nbsp;current&nbsp;stock&nbsp;in&nbsp;their&nbsp;current&nbsp;location,&nbsp;and&nbsp;planned&nbsp;a&nbsp;new&nbsp;trade,&nbsp;and
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;bought&nbsp;appropriate&nbsp;stock&nbsp;for&nbsp;it.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
088&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;this&nbsp;either&nbsp;sells&nbsp;the&nbsp;entire&nbsp;cargo,&nbsp;or,&nbsp;if&nbsp;the&nbsp;market&nbsp;can&#x27;t&nbsp;afford
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
089&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;it,&nbsp;none&nbsp;of&nbsp;it.&nbsp;And&nbsp;it&nbsp;does&nbsp;not&nbsp;cope&nbsp;with&nbsp;selling&nbsp;different&nbsp;commodities
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
090&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;in&nbsp;different&nbsp;markets.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world]
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
092&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[m&nbsp;(cond
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:merchants&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;(:id&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;(:location&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;market&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;location)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stock-value&nbsp;(reduce
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 11 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(*&nbsp;(-&gt;&nbsp;m&nbsp;:stock&nbsp;%)&nbsp;(-&gt;&nbsp;market&nbsp;:prices&nbsp;m))
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keys&nbsp;(:stock&nbsp;m))))]
</span><br/>
<span class="not-covered" title="0 out of 17 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;debug&nbsp;&quot;sell-and-buy:&nbsp;merchant&quot;&nbsp;id)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt;=&nbsp;(:cash&nbsp;market)&nbsp;stock-value)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(do
</span><br/>
<span class="not-covered" title="0 out of 25 forms covered">
109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;info&nbsp;&quot;Merchant&quot;&nbsp;id&nbsp;&quot;sells&quot;&nbsp;(:stock&nbsp;m)&nbsp;&quot;at&quot;&nbsp;location&nbsp;&quot;for&quot;&nbsp;stock-value)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(plan-and-buy
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merchant
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(deep-merge
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:merchants
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
115&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{id
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:stock&nbsp;{}
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cash&nbsp;(+&nbsp;(:cash&nbsp;m)&nbsp;stock-value)
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:known-prices&nbsp;(add-known-prices&nbsp;m&nbsp;world)}}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cities
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{location
</span><br/>
<span class="not-covered" title="0 out of 11 forms covered">
121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:stock&nbsp;(add-stock&nbsp;(:stock&nbsp;m)&nbsp;(:stock&nbsp;market))
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cash&nbsp;(-&nbsp;(:cash&nbsp;market)&nbsp;stock-value)}}})))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;else
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(re-plan&nbsp;merchant&nbsp;world))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
125&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
126&nbsp;&nbsp;(defn&nbsp;move-merchant
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
127&nbsp;&nbsp;&nbsp;&nbsp;&quot;Handle&nbsp;general&nbsp;en&nbsp;route&nbsp;movement&nbsp;of&nbsp;this&nbsp;`merchant`&nbsp;in&nbsp;this&nbsp;`world`;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
128&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a&nbsp;(partial&nbsp;or&nbsp;full)&nbsp;world&nbsp;like&nbsp;this&nbsp;`world`&nbsp;but&nbsp;in&nbsp;which&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
129&nbsp;&nbsp;&nbsp;&nbsp;merchant&nbsp;may&nbsp;have&nbsp;been&nbsp;moved&nbsp;ot&nbsp;updated.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
130&nbsp;&nbsp;&nbsp;&nbsp;[merchant&nbsp;world]
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
131&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[m&nbsp;(cond
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keyword?&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:merchants&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merchant)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;(:id&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 16 forms covered">
137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at-destination?&nbsp;(and&nbsp;(:plan&nbsp;m)&nbsp;(=&nbsp;(:location&nbsp;m)&nbsp;(-&gt;&nbsp;m&nbsp;:plan&nbsp;:destination)))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plan&nbsp;(:plan&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next-location&nbsp;(if&nbsp;plan
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nth
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-route
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:location&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:destination&nbsp;plan))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:location&nbsp;m))]
</span><br/>
<span class="not-covered" title="0 out of 24 forms covered">
147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;debug&nbsp;&quot;move-merchant:&nbsp;merchant&quot;&nbsp;id&nbsp;&quot;at&quot;&nbsp;(:location&nbsp;m)
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;destination&quot;&nbsp;(-&gt;&nbsp;m&nbsp;:plan&nbsp;:destination)&nbsp;&quot;next&quot;&nbsp;next-location
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;at&nbsp;destination&quot;&nbsp;at-destination?)
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
151&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;if&nbsp;the&nbsp;merchant&nbsp;is&nbsp;at&nbsp;the&nbsp;destination&nbsp;of&nbsp;their&nbsp;current&nbsp;plan
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;sell&nbsp;all&nbsp;cargo&nbsp;and&nbsp;repurchase.
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
153&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at-destination?
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(sell-and-buy&nbsp;merchant&nbsp;world)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
155&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;if&nbsp;they&nbsp;don&#x27;t&nbsp;have&nbsp;a&nbsp;plan,&nbsp;seek&nbsp;to&nbsp;create&nbsp;one
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
156&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nil?&nbsp;plan)
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
157&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(plan-and-buy&nbsp;merchant&nbsp;world)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
158&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;otherwise,&nbsp;move&nbsp;one&nbsp;step&nbsp;towards&nbsp;their&nbsp;destination
</span><br/>
<span class="not-covered" title="0 out of 11 forms covered">
159&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;next-location&nbsp;(not=&nbsp;next-location&nbsp;(:location&nbsp;m)))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
160&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(do
</span><br/>
<span class="not-covered" title="0 out of 23 forms covered">
161&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;info&nbsp;&quot;Merchant&nbsp;&quot;&nbsp;id&nbsp;&quot;&nbsp;moving&nbsp;from&nbsp;&quot;&nbsp;(:location&nbsp;m)&nbsp;&quot;&nbsp;to&nbsp;&quot;&nbsp;next-location)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
162&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(deep-merge
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
163&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:merchants
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
164&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{id
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
165&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:location&nbsp;next-location
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
166&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:known-prices&nbsp;(add-known-prices&nbsp;m&nbsp;world)}}}
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
167&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(move-gossip&nbsp;id&nbsp;world&nbsp;next-location)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
168&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
169&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(do
</span><br/>
<span class="not-covered" title="0 out of 19 forms covered">
170&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(l&#x2F;info&nbsp;&quot;Merchant&quot;&nbsp;id&nbsp;&quot;has&nbsp;plan&nbsp;but&nbsp;no&nbsp;next-location;&nbsp;currently&nbsp;at&quot;
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
171&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:location&nbsp;m)&nbsp;&quot;,&nbsp;destination&nbsp;is&quot;&nbsp;(:destination&nbsp;plan))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
172&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;world))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
173&nbsp;&nbsp;
</span><br/>
</body>
</html>

View file

@ -0,0 +1,41 @@
<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/objects/container.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.objects.container
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;(:require
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.objects.game-object&nbsp;:refer&nbsp;:all]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
004&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
005&nbsp;&nbsp;(defprotocol&nbsp;ProtoContainer
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;(contents
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[container]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;sequence&nbsp;of&nbsp;the&nbsp;contents&nbsp;of&nbsp;this&nbsp;`container`,&nbsp;or&nbsp;`nil`&nbsp;if&nbsp;empty.&quot;)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;(is-empty?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[container]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;this&nbsp;`container`&nbsp;is&nbsp;empty,&nbsp;else&nbsp;`false`.&quot;))
</span><br/>
</body>
</html>

View file

@ -0,0 +1,71 @@
<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/objects/game_object.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.objects.game-object
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Anything&nbsp;at&nbsp;all&nbsp;in&nbsp;the&nbsp;game&nbsp;world&quot;)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
003&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
004&nbsp;&nbsp;(defprotocol&nbsp;ProtoObject
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&quot;An&nbsp;object&nbsp;in&nbsp;the&nbsp;world&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;(id&nbsp;[object]&nbsp;&quot;Returns&nbsp;the&nbsp;unique&nbsp;id&nbsp;of&nbsp;this&nbsp;object.&quot;)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;(reify-object
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[object]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Adds&nbsp;this&nbsp;`object`&nbsp;to&nbsp;the&nbsp;global&nbsp;object&nbsp;list.&nbsp;If&nbsp;the&nbsp;`object`&nbsp;has&nbsp;a
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;non-nil&nbsp;value&nbsp;for&nbsp;its&nbsp;`id`&nbsp;method,&nbsp;keys&nbsp;it&nbsp;to&nbsp;that&nbsp;id&nbsp;-&nbsp;**but**&nbsp;if&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;value&nbsp;is&nbsp;already&nbsp;in&nbsp;use,&nbsp;throws&nbsp;a&nbsp;hard&nbsp;exception.&nbsp;Returns&nbsp;the&nbsp;id&nbsp;to
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;the&nbsp;object&nbsp;is&nbsp;keyed&nbsp;in&nbsp;the&nbsp;global&nbsp;object&nbsp;list.&quot;))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
013&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
014&nbsp;&nbsp;(defrecord&nbsp;GameObject
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[id]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&quot;An&nbsp;object&nbsp;in&nbsp;the&nbsp;world&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;ProtoObject
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;(id&nbsp;[_]&nbsp;id)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;(reify-object&nbsp;[object]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;TODO:&nbsp;doesn&#x27;t&nbsp;work&nbsp;yet&quot;
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object))
</span><br/>
</body>
</html>

View file

@ -0,0 +1,224 @@
<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/playroom.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.playroom
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[jme-clj.core&nbsp;:refer&nbsp;[add&nbsp;add-to-root&nbsp;box&nbsp;defsimpleapp&nbsp;fly-cam&nbsp;geo&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get*&nbsp;get-state&nbsp;load-texture&nbsp;rotate&nbsp;run&nbsp;set*&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setc&nbsp;set-state&nbsp;start&nbsp;unshaded-mat]])
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[com.jme3.math&nbsp;ColorRGBA]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
006&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;;;&nbsp;At&nbsp;present&nbsp;this&nbsp;file&nbsp;is&nbsp;just&nbsp;somewhere&nbsp;to&nbsp;play&nbsp;around&nbsp;with&nbsp;jme-clj&nbsp;examples
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
008&nbsp;&nbsp;
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
009&nbsp;&nbsp;(declare&nbsp;app)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
010&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
011&nbsp;&nbsp;(defn&nbsp;init&nbsp;[]
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[cube&nbsp;(geo&nbsp;&quot;jMonkey&nbsp;cube&quot;&nbsp;(box&nbsp;1&nbsp;1&nbsp;1))
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mat&nbsp;&nbsp;(unshaded-mat)]
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set*&nbsp;mat&nbsp;:texture&nbsp;&quot;ColorMap&quot;&nbsp;(load-texture&nbsp;&quot;textures&#x2F;Monkey.jpg&quot;))
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set*&nbsp;cube&nbsp;:material&nbsp;mat)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(add-to-root&nbsp;cube)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cube&nbsp;cube}))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
018&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;;;&nbsp;Let&#x27;s&nbsp;create&nbsp;simple-update&nbsp;fn&nbsp;with&nbsp;no&nbsp;body&nbsp;for&nbsp;now.
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
020&nbsp;&nbsp;&nbsp;(defn&nbsp;simple-update&nbsp;[tpf]
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[{:keys&nbsp;[cube]}&nbsp;(get-state)]
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(rotate&nbsp;cube&nbsp;0&nbsp;(*&nbsp;2&nbsp;tpf)&nbsp;0)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
023&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
024&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;;;&nbsp;Kills&nbsp;the&nbsp;running&nbsp;app&nbsp;var&nbsp;and&nbsp;closes&nbsp;its&nbsp;window.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
026&nbsp;&nbsp;;;&nbsp;(unbind-app&nbsp;#&#x27;app)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
027&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;;;&nbsp;We&nbsp;define&nbsp;the&nbsp;`app`&nbsp;var.
</span><br/>
<span class="partial" title="170 out of 215 forms covered">
029&nbsp;&nbsp;(defsimpleapp&nbsp;app
</span><br/>
<span class="partial" title="36 out of 42 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:opts&nbsp;{:show-settings?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:pause-on-lost-focus?&nbsp;false
</span><br/>
<span class="partial" title="66 out of 77 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:settings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;My&nbsp;JME&nbsp;Game&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:load-defaults?&nbsp;true
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:frame-rate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;60
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:width&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;800
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;600}}
</span><br/>
<span class="partial" title="1 out of 2 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:init&nbsp;init
</span><br/>
<span class="partial" title="1 out of 2 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:update&nbsp;simple-update)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
039&nbsp;&nbsp;
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
040&nbsp;&nbsp;(start&nbsp;app)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
041&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;;;&nbsp;Reinitialises&nbsp;the&nbsp;running&nbsp;app
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
043&nbsp;&nbsp;;;(run&nbsp;app
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(re-init&nbsp;init))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
046&nbsp;&nbsp;&nbsp;;;&nbsp;By&nbsp;default,&nbsp;there&nbsp;is&nbsp;a&nbsp;Fly&nbsp;Camera&nbsp;attached&nbsp;to&nbsp;the&nbsp;app&nbsp;that&nbsp;you&nbsp;can&nbsp;control&nbsp;with&nbsp;W,&nbsp;A,&nbsp;S&nbsp;and&nbsp;D&nbsp;keys.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;&nbsp;;;&nbsp;Let&#x27;s&nbsp;increase&nbsp;its&nbsp;movement&nbsp;speed.&nbsp;Now,&nbsp;you&nbsp;fly&nbsp;faster&nbsp;:)
</span><br/>
<span class="covered" title="16 out of 16 forms covered">
048&nbsp;&nbsp;&nbsp;(run&nbsp;app
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set*&nbsp;(fly-cam)&nbsp;:move-speed&nbsp;15))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
050&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
051&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
052&nbsp;&nbsp;&nbsp;;;&nbsp;Updates&nbsp;the&nbsp;app&nbsp;
</span><br/>
<span class="covered" title="16 out of 16 forms covered">
053&nbsp;&nbsp;(run&nbsp;app
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[{:keys&nbsp;[cube]}&nbsp;(get-state)]
</span><br/>
<span class="covered" title="13 out of 13 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set*&nbsp;cube&nbsp;:local-translation&nbsp;(add&nbsp;(get*&nbsp;cube&nbsp;:local-translation)&nbsp;1&nbsp;1&nbsp;1))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
056&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;Updates&nbsp;the&nbsp;app&nbsp;adding&nbsp;a&nbsp;second&nbsp;cube
</span><br/>
<span class="covered" title="16 out of 16 forms covered">
058&nbsp;&nbsp;(run&nbsp;app
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[cube&nbsp;(geo&nbsp;&quot;jMonkey&nbsp;cube&quot;&nbsp;(box&nbsp;1&nbsp;1&nbsp;1))
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mat&nbsp;&nbsp;(unshaded-mat)]
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set*&nbsp;mat&nbsp;:texture&nbsp;&quot;ColorMap&quot;&nbsp;(load-texture&nbsp;&quot;textures&#x2F;Monkey.jpg&quot;))
</span><br/>
<span class="covered" title="22 out of 22 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(setc&nbsp;cube
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:material&nbsp;mat
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:local-translation&nbsp;[-3&nbsp;0&nbsp;0])
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(add-to-root&nbsp;cube)
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set-state&nbsp;:cube2&nbsp;cube)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
067&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
068&nbsp;&nbsp;&nbsp;;;&nbsp;We&nbsp;added&nbsp;the&nbsp;new&nbsp;cube,&nbsp;but&nbsp;it&#x27;s&nbsp;not&nbsp;rotating.&nbsp;We&nbsp;need&nbsp;to&nbsp;update&nbsp;the&nbsp;simple-update&nbsp;fn.
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
069&nbsp;&nbsp;&nbsp;(defn&nbsp;simple-update&nbsp;[tpf]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[{:keys&nbsp;[cube&nbsp;cube2]}&nbsp;(get-state)]
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(rotate&nbsp;cube&nbsp;0&nbsp;(*&nbsp;2&nbsp;tpf)&nbsp;0)
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(rotate&nbsp;cube2&nbsp;0&nbsp;(*&nbsp;2&nbsp;tpf)&nbsp;0)))
</span><br/>
</body>
</html>

View file

@ -0,0 +1,440 @@
<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/time.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.time
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[clojure.string&nbsp;:as&nbsp;s]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
003&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
004&nbsp;&nbsp;(def&nbsp;game-start-time
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;start&nbsp;time&nbsp;of&nbsp;this&nbsp;run.&quot;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;(System&#x2F;currentTimeMillis))
</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;(def&nbsp;^:const&nbsp;game-day-length
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;Java&nbsp;clock&nbsp;advances&nbsp;in&nbsp;milliseconds,&nbsp;which&nbsp;is&nbsp;fine.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;But&nbsp;we&nbsp;need&nbsp;game-days&nbsp;to&nbsp;be&nbsp;shorter&nbsp;than&nbsp;real&nbsp;world&nbsp;days.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;Witcher&nbsp;3&nbsp;game&nbsp;day&nbsp;is&nbsp;1&nbsp;hour&nbsp;36&nbsp;minutes,&nbsp;or&nbsp;96&nbsp;minutes,&nbsp;which&nbsp;is
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;presumably&nbsp;researched.&nbsp;Round&nbsp;it&nbsp;up&nbsp;to&nbsp;100&nbsp;minutes&nbsp;for&nbsp;easier
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;calculation.&quot;
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;(*&nbsp;100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;minutes&nbsp;per&nbsp;game&nbsp;day
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;seconds&nbsp;per&nbsp;minute
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1000))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;milliseconds&nbsp;per&nbsp;second
</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;now
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;&quot;For&nbsp;now,&nbsp;we&#x27;ll&nbsp;use&nbsp;Java&nbsp;timestamp&nbsp;for&nbsp;time;&nbsp;ultimately,&nbsp;we&nbsp;need&nbsp;a
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;concept&nbsp;of&nbsp;game-time&nbsp;which&nbsp;allows&nbsp;us&nbsp;to&nbsp;drive&nbsp;day&#x2F;night&nbsp;cycle,&nbsp;seasons,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;et&nbsp;cetera,&nbsp;but&nbsp;what&nbsp;matters&nbsp;about&nbsp;time&nbsp;is&nbsp;that&nbsp;it&nbsp;is&nbsp;a&nbsp;value&nbsp;which
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;increases.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;[]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;(System&#x2F;currentTimeMillis))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
025&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
026&nbsp;&nbsp;(def&nbsp;^:const&nbsp;canonical-ordering-of-houses
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;canonical&nbsp;ordering&nbsp;of&nbsp;religious&nbsp;houses.&quot;
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;[:eye
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:foot
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:nose
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:hand
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:ear
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:mouth
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stomach
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:furrow
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:plough])
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
037&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
038&nbsp;&nbsp;(def&nbsp;^:const&nbsp;days-of-week
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;eight-day&nbsp;week&nbsp;of&nbsp;the&nbsp;game&nbsp;world.&nbsp;This&nbsp;differs&nbsp;from&nbsp;the&nbsp;canonical
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;ordering&nbsp;of&nbsp;houses&nbsp;in&nbsp;that&nbsp;it&nbsp;omits&nbsp;the&nbsp;eye.&quot;
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;(rest&nbsp;canonical-ordering-of-houses))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
042&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
043&nbsp;&nbsp;(def&nbsp;^:const&nbsp;days-in-week
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&quot;This&nbsp;world&nbsp;has&nbsp;an&nbsp;eight&nbsp;day&nbsp;week.&quot;
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;(count&nbsp;days-of-week))
</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;(def&nbsp;^:const&nbsp;seasons-of-year
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;ordering&nbsp;of&nbsp;seasons&nbsp;in&nbsp;the&nbsp;year&nbsp;is&nbsp;different&nbsp;from&nbsp;the&nbsp;canonical
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;ordering&nbsp;of&nbsp;the&nbsp;houses,&nbsp;for&nbsp;reasons&nbsp;of&nbsp;the&nbsp;agricultural&nbsp;cycle.&quot;
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;[:foot
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:nose
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:hand
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:ear
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:mouth
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stomach
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:plough
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:furrow
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:eye])
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
059&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
060&nbsp;&nbsp;(def&nbsp;^:const&nbsp;seasons-in-year
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;&quot;Nine&nbsp;seasons&nbsp;in&nbsp;a&nbsp;year,&nbsp;one&nbsp;for&nbsp;each&nbsp;house&nbsp;(although&nbsp;the&nbsp;order&nbsp;is
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;different.&quot;
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;(count&nbsp;seasons-of-year))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
064&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
065&nbsp;&nbsp;(def&nbsp;^:const&nbsp;weeks-of-season
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;&quot;To&nbsp;fit&nbsp;nine&nbsp;seasons&nbsp;of&nbsp;eight&nbsp;day&nbsp;weeks&nbsp;into&nbsp;365&nbsp;days,&nbsp;each&nbsp;must&nbsp;be&nbsp;of
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;five&nbsp;weeks.&quot;
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
068&nbsp;&nbsp;&nbsp;&nbsp;[:first&nbsp;:second&nbsp;:third&nbsp;:fourth&nbsp;:fifth])
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
069&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
070&nbsp;&nbsp;(def&nbsp;^:const&nbsp;weeks-in-season
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;&quot;To&nbsp;fit&nbsp;nine&nbsp;seasons&nbsp;of&nbsp;eight&nbsp;day&nbsp;weeks&nbsp;into&nbsp;365&nbsp;days,&nbsp;each&nbsp;must&nbsp;be&nbsp;of
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;five&nbsp;weeks.&quot;
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;(count&nbsp;weeks-of-season))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
074&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
075&nbsp;&nbsp;(def&nbsp;^:const&nbsp;days-in-season
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;(*&nbsp;weeks-in-season&nbsp;days-in-week))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
077&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
078&nbsp;&nbsp;(defn&nbsp;game-time
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
079&nbsp;&nbsp;&nbsp;&nbsp;&quot;With&nbsp;no&nbsp;arguments,&nbsp;the&nbsp;current&nbsp;game&nbsp;time.&nbsp;If&nbsp;a&nbsp;Java&nbsp;`timestamp`&nbsp;value&nbsp;is
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
080&nbsp;&nbsp;&nbsp;&nbsp;passed&nbsp;(as&nbsp;a&nbsp;`long`),&nbsp;the&nbsp;game&nbsp;time&nbsp;represented&nbsp;by&nbsp;that&nbsp;value.&quot;
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
081&nbsp;&nbsp;&nbsp;&nbsp;([]&nbsp;(game-time&nbsp;(now)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
082&nbsp;&nbsp;&nbsp;&nbsp;([timestamp]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(-&nbsp;timestamp&nbsp;game-start-time)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
084&nbsp;&nbsp;
</span><br/>
<span class="covered" title="54 out of 54 forms covered">
085&nbsp;&nbsp;(defmacro&nbsp;day-of-year
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;day&nbsp;of&nbsp;the&nbsp;year&nbsp;represented&nbsp;by&nbsp;this&nbsp;`game-time`,&nbsp;ignoring&nbsp;leap&nbsp;years.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;[game-time]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
088&nbsp;&nbsp;&nbsp;&nbsp;`(mod&nbsp;(long&nbsp;(&#x2F;&nbsp;~game-time&nbsp;game-day-length))&nbsp;365))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
089&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
090&nbsp;&nbsp;(def&nbsp;waiting-day?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;&quot;Does&nbsp;this&nbsp;`game-time`&nbsp;represent&nbsp;a&nbsp;waiting&nbsp;day?&quot;
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
092&nbsp;&nbsp;&nbsp;&nbsp;(memoize
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;we&#x27;re&nbsp;likely&nbsp;to&nbsp;call&nbsp;this&nbsp;several&nbsp;times&nbsp;in&nbsp;quick&nbsp;succession&nbsp;on&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;same&nbsp;timestamp
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[game-time]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt;=
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(day-of-year&nbsp;game-time)
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*&nbsp;seasons-in-year&nbsp;weeks-in-season&nbsp;days-in-week)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
099&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
100&nbsp;&nbsp;(defn&nbsp;day
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
101&nbsp;&nbsp;&nbsp;&nbsp;&quot;Day&nbsp;of&nbsp;the&nbsp;eight-day&nbsp;week&nbsp;represented&nbsp;by&nbsp;this&nbsp;`game-time`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;[game-time]
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[day-of-week&nbsp;(mod&nbsp;(day-of-year&nbsp;game-time)&nbsp;days-in-week)]
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(waiting-day?&nbsp;game-time)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nth&nbsp;weeks-of-season&nbsp;day-of-week)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nth&nbsp;days-of-week&nbsp;day-of-week))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
107&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
108&nbsp;&nbsp;(defn&nbsp;week
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
109&nbsp;&nbsp;&nbsp;&nbsp;&quot;Week&nbsp;of&nbsp;season&nbsp;represented&nbsp;by&nbsp;this&nbsp;`game-time`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
110&nbsp;&nbsp;&nbsp;&nbsp;[game-time]
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
111&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[day-of-season&nbsp;(mod&nbsp;(day-of-year&nbsp;game-time)&nbsp;days-in-season)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;week&nbsp;(&#x2F;&nbsp;day-of-season&nbsp;days-in-week)]
</span><br/>
<span class="partial" title="4 out of 5 forms covered">
113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(waiting-day?&nbsp;game-time)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:waiting
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
115&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nth&nbsp;weeks-of-season&nbsp;week))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
116&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
117&nbsp;&nbsp;(defn&nbsp;season
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
118&nbsp;&nbsp;&nbsp;&nbsp;[game-time]
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
119&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[season&nbsp;(int&nbsp;(&#x2F;&nbsp;(day-of-year&nbsp;game-time)&nbsp;days-in-season))]
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(waiting-day?&nbsp;game-time)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:waiting
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nth&nbsp;seasons-of-year&nbsp;season))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
123&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
124&nbsp;&nbsp;(defn&nbsp;date-string
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
125&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;correctly&nbsp;formatted&nbsp;date&nbsp;for&nbsp;this&nbsp;`game-time`&nbsp;in&nbsp;the&nbsp;calendar&nbsp;of
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
126&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;Great&nbsp;Place.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
127&nbsp;&nbsp;&nbsp;&nbsp;[game-time]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
128&nbsp;&nbsp;&nbsp;&nbsp;(s&#x2F;join
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&quot;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(waiting-day?&nbsp;game-time)
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[(s&#x2F;capitalize
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(name
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(nth
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;weeks-of-season
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(mod&nbsp;(day-of-year&nbsp;game-time)&nbsp;days-in-week))))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;waiting&nbsp;day&quot;]
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[(s&#x2F;capitalize&nbsp;(name&nbsp;(week&nbsp;game-time)))
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(s&#x2F;capitalize&nbsp;(name&nbsp;(day&nbsp;game-time)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;of&nbsp;the&quot;
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(s&#x2F;capitalize&nbsp;(name&nbsp;(season&nbsp;game-time)))])))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
142&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
143&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
144&nbsp;&nbsp;
</span><br/>
</body>
</html>

View file

@ -0,0 +1,143 @@
<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/>
</body>
</html>

View file

@ -0,0 +1,485 @@
<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/world/heightmap.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.world.heightmap
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Functions&nbsp;dealing&nbsp;with&nbsp;the&nbsp;tessellated&nbsp;multi-layer&nbsp;heightmap.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[clojure.math.numeric-tower&nbsp;:refer&nbsp;[expt&nbsp;sqrt]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[mw-engine.core&nbsp;:refer&nbsp;[]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[mw-engine.heightmap&nbsp;:refer&nbsp;[apply-heightmap]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[mw-engine.utils&nbsp;:refer&nbsp;[get-cell&nbsp;in-bounds?&nbsp;map-world]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.utils&nbsp;:refer&nbsp;[value-or-default]]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
008&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;;;&nbsp;It&#x27;s&nbsp;not&nbsp;at&nbsp;all&nbsp;clear&nbsp;to&nbsp;me&nbsp;yet&nbsp;what&nbsp;the&nbsp;workflow&nbsp;for&nbsp;getting&nbsp;a&nbsp;MicroWorld
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;;;&nbsp;map&nbsp;into&nbsp;The&nbsp;Great&nbsp;Game,&nbsp;and&nbsp;whether&nbsp;it&nbsp;passes&nbsp;through&nbsp;Walkmap&nbsp;to&nbsp;get&nbsp;here.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;;;&nbsp;This&nbsp;file&nbsp;as&nbsp;currently&nbsp;written&nbsp;assumes&nbsp;it&nbsp;doesn&#x27;t.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
012&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;;;&nbsp;It&#x27;s&nbsp;utterly&nbsp;impossible&nbsp;to&nbsp;hold&nbsp;a&nbsp;whole&nbsp;continent&nbsp;at&nbsp;one&nbsp;metre&nbsp;scale&nbsp;in
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;;;&nbsp;memory&nbsp;at&nbsp;one&nbsp;time.&nbsp;So&nbsp;we&nbsp;have&nbsp;to&nbsp;be&nbsp;able&nbsp;to&nbsp;regenerate&nbsp;high&nbsp;resolution
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;;;&nbsp;surfaces&nbsp;from&nbsp;much&nbsp;lower&nbsp;resolution&nbsp;heightmaps.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;;;&nbsp;Thus&nbsp;to&nbsp;reproduce&nbsp;a&nbsp;segment&nbsp;of&nbsp;surface&nbsp;at&nbsp;a&nbsp;particular&nbsp;level&nbsp;of&nbsp;detail,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;;;&nbsp;we:
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;;;&nbsp;1.&nbsp;load&nbsp;the&nbsp;base&nbsp;heightmap&nbsp;into&nbsp;a&nbsp;grid&nbsp;(see
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;`mw-engine.heightmap&#x2F;apply-heightmap`);
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;;;&nbsp;2.&nbsp;scale&nbsp;the&nbsp;base&nbsp;hightmap&nbsp;to&nbsp;kilometre&nbsp;scale&nbsp;(see&nbsp;`scale-grid`);
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;;;&nbsp;3.&nbsp;exerpt&nbsp;the&nbsp;portion&nbsp;of&nbsp;that&nbsp;that&nbsp;we&nbsp;want&nbsp;to&nbsp;reproduce&nbsp;(see&nbsp;`exerpt-grid`);
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;;;&nbsp;4.&nbsp;interpolate&nbsp;that&nbsp;grid&nbsp;to&nbsp;get&nbsp;the&nbsp;resolution&nbsp;we&nbsp;require&nbsp;(see
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;`interpolate-grid`);
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;;;&nbsp;5.&nbsp;create&nbsp;an&nbsp;appropriate&nbsp;purturbation&nbsp;grid&nbsp;from&nbsp;the&nbsp;noise&nbsp;map(s)&nbsp;for&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
026&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;same&nbsp;coordinates&nbsp;to&nbsp;break&nbsp;up&nbsp;the&nbsp;smooth&nbsp;interpolation;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;;;&nbsp;6.&nbsp;sum&nbsp;the&nbsp;altitudes&nbsp;of&nbsp;the&nbsp;two&nbsp;grids.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;;;&nbsp;In&nbsp;production&nbsp;this&nbsp;will&nbsp;have&nbsp;to&nbsp;be&nbsp;done&nbsp;**very**&nbsp;fast!
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
030&nbsp;&nbsp;
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
031&nbsp;&nbsp;(def&nbsp;^:dynamic&nbsp;*base-map*&nbsp;&quot;resources&#x2F;maps&#x2F;heightmap.png&quot;)
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
032&nbsp;&nbsp;(def&nbsp;^:dynamic&nbsp;*noise-map*&nbsp;&quot;resources&#x2F;maps&#x2F;noise.png&quot;)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
033&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
034&nbsp;&nbsp;(defn&nbsp;scale-grid
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&quot;multiply&nbsp;all&nbsp;`:x`&nbsp;and&nbsp;`:y`&nbsp;values&nbsp;in&nbsp;this&nbsp;`grid`&nbsp;by&nbsp;this&nbsp;`n`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;[grid&nbsp;n]
</span><br/>
<span class="not-covered" title="0 out of 19 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;(map-world&nbsp;grid&nbsp;(fn&nbsp;[w&nbsp;c&nbsp;x]&nbsp;(assoc&nbsp;c&nbsp;:x&nbsp;(*&nbsp;(:x&nbsp;c)&nbsp;n)&nbsp;:y&nbsp;(*&nbsp;(:y&nbsp;c)&nbsp;n)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
038&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
039&nbsp;&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
040&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
041&nbsp;&nbsp;;;&nbsp;Each&nbsp;of&nbsp;the&nbsp;east-west&nbsp;curve&nbsp;and&nbsp;the&nbsp;north-south&nbsp;curve&nbsp;are&nbsp;of&nbsp;course&nbsp;two
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;;;&nbsp;dimensional&nbsp;curves;&nbsp;the&nbsp;east-west&nbsp;curve&nbsp;is&nbsp;in&nbsp;the&nbsp;:x&#x2F;:z&nbsp;plane&nbsp;and&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
043&nbsp;&nbsp;;;&nbsp;north-south&nbsp;curve&nbsp;is&nbsp;in&nbsp;the&nbsp;:y&#x2F;:z&nbsp;plane&nbsp;(except,&nbsp;perhaps&nbsp;unwisely,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;;;&nbsp;we&#x27;ve&nbsp;been&nbsp;using&nbsp;:altitude&nbsp;to&nbsp;label&nbsp;the&nbsp;:z&nbsp;plane).&nbsp;We&nbsp;have&nbsp;a&nbsp;library
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;;;&nbsp;function&nbsp;`walkmap.edge&#x2F;intersection2d`,&nbsp;but&nbsp;as&nbsp;currently&nbsp;written&nbsp;it
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
046&nbsp;&nbsp;;;&nbsp;can&nbsp;only&nbsp;find&nbsp;intersections&nbsp;in&nbsp;:x&#x2F;:y&nbsp;plane.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;;;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;rewrite&nbsp;the&nbsp;function&nbsp;so&nbsp;that&nbsp;it&nbsp;can&nbsp;use&nbsp;arbitrary&nbsp;coordinates.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;;;&nbsp;AFTER&nbsp;TRYING:&nbsp;OK,&nbsp;there&nbsp;are&nbsp;too&nbsp;many&nbsp;assumptions&nbsp;about&nbsp;the&nbsp;way&nbsp;that
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
050&nbsp;&nbsp;;;&nbsp;function&nbsp;is&nbsp;written&nbsp;to&nbsp;allow&nbsp;for&nbsp;easy&nbsp;rotation.&nbsp;TODO:&nbsp;think!
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
051&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
052&nbsp;&nbsp;(defn&nbsp;interpolate-altitude
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;the&nbsp;altitude&nbsp;of&nbsp;the&nbsp;point&nbsp;at&nbsp;`x-offset`,&nbsp;`y-offset`&nbsp;within&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;`cell`&nbsp;having&nbsp;this&nbsp;`src-width`,&nbsp;taken&nbsp;from&nbsp;this&nbsp;`grid`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;[cell&nbsp;grid&nbsp;src-width&nbsp;x-offset&nbsp;y-offset&nbsp;]
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[c-alt&nbsp;(:altitude&nbsp;cell)
</span><br/>
<span class="not-covered" title="0 out of 17 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n-alt&nbsp;(or&nbsp;(:altitude&nbsp;(get-cell&nbsp;grid&nbsp;(:x&nbsp;cell)&nbsp;(dec&nbsp;(:y&nbsp;cell))))&nbsp;c-alt)
</span><br/>
<span class="not-covered" title="0 out of 17 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w-alt&nbsp;(or&nbsp;(:altitude&nbsp;(get-cell&nbsp;grid&nbsp;(inc&nbsp;(:x&nbsp;cell))&nbsp;(:y&nbsp;cell)))&nbsp;c-alt)
</span><br/>
<span class="not-covered" title="0 out of 17 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s-alt&nbsp;(or&nbsp;(:altitude&nbsp;(get-cell&nbsp;grid&nbsp;(:x&nbsp;cell)&nbsp;(inc&nbsp;(:y&nbsp;cell))))&nbsp;c-alt)
</span><br/>
<span class="not-covered" title="0 out of 17 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e-alt&nbsp;(or&nbsp;(:altitude&nbsp;(get-cell&nbsp;grid&nbsp;(dec&nbsp;(:x&nbsp;cell))&nbsp;(:y&nbsp;cell)))&nbsp;c-alt)]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;construct&nbsp;two&nbsp;curves&nbsp;(arcs&nbsp;of&nbsp;circles&nbsp;good&nbsp;enough&nbsp;for&nbsp;now)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;n-alt...c-alt...s-alt&nbsp;and&nbsp;e-alt...c-alt...w-alt;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;then&nbsp;interpolate&nbsp;x-offset&nbsp;along&nbsp;e-alt...c-alt...w-alt&nbsp;and&nbsp;y-offset
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;along&nbsp;n-alt...c-alt...s-alt;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;then&nbsp;return&nbsp;the&nbsp;average&nbsp;of&nbsp;the&nbsp;two
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
066&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
068&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
069&nbsp;&nbsp;(defn&nbsp;interpolate-cell
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;&quot;Construct&nbsp;a&nbsp;grid&nbsp;(array&nbsp;of&nbsp;arrays)&nbsp;of&nbsp;cells&nbsp;each&nbsp;of&nbsp;width&nbsp;`target-width`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;this&nbsp;`cell`,&nbsp;of&nbsp;width&nbsp;`src-width`,&nbsp;taken&nbsp;from&nbsp;this&nbsp;`grid`&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;[cell&nbsp;grid&nbsp;src-width&nbsp;target-width]
</span><br/>
<span class="not-covered" title="0 out of 12 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[offsets&nbsp;(map&nbsp;#(*&nbsp;target-width&nbsp;%)&nbsp;(range&nbsp;(&#x2F;&nbsp;src-width&nbsp;target-width)))]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
074&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(into
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[r]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(into
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
080&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[c]
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(assoc&nbsp;cell
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:x&nbsp;(+&nbsp;(:x&nbsp;cell)&nbsp;c)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
084&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:y&nbsp;(+&nbsp;(:y&nbsp;cell)&nbsp;r)
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:altitude&nbsp;(interpolate-altitude&nbsp;cell&nbsp;grid&nbsp;src-width&nbsp;c&nbsp;r)))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offsets)))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offsets))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
088&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
089&nbsp;&nbsp;(defn&nbsp;interpolate-grid
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
090&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;grid&nbsp;interpolated&nbsp;from&nbsp;this&nbsp;`grid`&nbsp;of&nbsp;rows,&nbsp;cols&nbsp;given&nbsp;scaling
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;this&nbsp;`src-width`&nbsp;to&nbsp;this&nbsp;`target-width`&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
092&nbsp;&nbsp;&nbsp;&nbsp;[grid&nbsp;src-width&nbsp;target-width]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(into
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[row]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[g1&nbsp;g2]
</span><br/>
<span class="not-covered" title="0 out of 15 forms covered">
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(into&nbsp;[]&nbsp;(map&nbsp;#(into&nbsp;[]&nbsp;(concat&nbsp;%1&nbsp;%2))&nbsp;g1&nbsp;g2)))
</span><br/>
<span class="not-covered" title="0 out of 13 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(into&nbsp;[]&nbsp;(map&nbsp;#(interpolate-cell&nbsp;%&nbsp;grid&nbsp;src-width&nbsp;target-width)&nbsp;row))))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
104&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
105&nbsp;&nbsp;(defn&nbsp;excerpt-grid
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;that&nbsp;section&nbsp;of&nbsp;this&nbsp;`grid`&nbsp;where&nbsp;the&nbsp;`:x`&nbsp;co-ordinate&nbsp;of&nbsp;each&nbsp;cell
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
107&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;greater&nbsp;than&nbsp;or&nbsp;equal&nbsp;to&nbsp;this&nbsp;`x-offset`,&nbsp;the&nbsp;`:y`&nbsp;co-ordinate&nbsp;is&nbsp;greater
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
108&nbsp;&nbsp;&nbsp;&nbsp;than&nbsp;or&nbsp;equal&nbsp;to&nbsp;this&nbsp;`y-offset`,&nbsp;whose&nbsp;width&nbsp;is&nbsp;not&nbsp;greater&nbsp;than&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
109&nbsp;&nbsp;&nbsp;&nbsp;`width`,&nbsp;and&nbsp;whose&nbsp;height&nbsp;is&nbsp;not&nbsp;greater&nbsp;than&nbsp;this&nbsp;`height`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
110&nbsp;&nbsp;&nbsp;&nbsp;[grid&nbsp;x-offset&nbsp;y-offset&nbsp;width&nbsp;height]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
111&nbsp;&nbsp;&nbsp;&nbsp;(into
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil?
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
115&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[row]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt;=&nbsp;(:y&nbsp;(first&nbsp;row))&nbsp;y-offset)
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&lt;&nbsp;(:y&nbsp;(first&nbsp;row))&nbsp;(+&nbsp;y-offset&nbsp;height)))
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(into
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nil?
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[cell]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt;=&nbsp;(:x&nbsp;cell)&nbsp;x-offset)
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&lt;&nbsp;(:x&nbsp;cell)&nbsp;(+&nbsp;x-offset&nbsp;width)))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cell))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;row)))))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grid))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
134&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
135&nbsp;&nbsp;(defn&nbsp;get-surface
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
136&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return,&nbsp;as&nbsp;a&nbsp;vector&nbsp;of&nbsp;vectors&nbsp;of&nbsp;cells&nbsp;represented&nbsp;as&nbsp;Clojure&nbsp;maps,&nbsp;a
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
137&nbsp;&nbsp;&nbsp;&nbsp;segment&nbsp;of&nbsp;surface&nbsp;from&nbsp;this&nbsp;`base-map`&nbsp;as&nbsp;modified&nbsp;by&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
138&nbsp;&nbsp;&nbsp;&nbsp;`noise-map`&nbsp;at&nbsp;this&nbsp;`cell-size`&nbsp;starting&nbsp;at&nbsp;this&nbsp;`x-offset`&nbsp;and&nbsp;`y-offset`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
139&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;having&nbsp;this&nbsp;`width`&nbsp;and&nbsp;`height`.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
140&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
141&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;`base-map`&nbsp;and&nbsp;`noise-map`&nbsp;are&nbsp;not&nbsp;supplied,&nbsp;the&nbsp;bindings&nbsp;of&nbsp;`*base-map*`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
142&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;`*noise-map*`&nbsp;will&nbsp;be&nbsp;used,&nbsp;respectively.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
143&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
144&nbsp;&nbsp;&nbsp;&nbsp;`base-map`&nbsp;and&nbsp;`noise-map`&nbsp;may&nbsp;be&nbsp;passed&nbsp;either&nbsp;as&nbsp;strings,&nbsp;assumed&nbsp;to&nbsp;be
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
145&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;paths&nbsp;of&nbsp;PNG&nbsp;files,&nbsp;or&nbsp;as&nbsp;MicroWorld&nbsp;style&nbsp;world&nbsp;arrays.&nbsp;It&nbsp;is&nbsp;assumed
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
146&nbsp;&nbsp;&nbsp;&nbsp;that&nbsp;one&nbsp;pixel&nbsp;in&nbsp;`base-map`&nbsp;represents&nbsp;one&nbsp;square&nbsp;kilometre&nbsp;in&nbsp;the&nbsp;game
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
147&nbsp;&nbsp;&nbsp;&nbsp;world.&nbsp;It&nbsp;is&nbsp;assumed&nbsp;that&nbsp;`cell-size`,&nbsp;`x-offset`,&nbsp;`y-offset`,&nbsp;`width`&nbsp;and
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
148&nbsp;&nbsp;&nbsp;&nbsp;`height`&nbsp;are&nbsp;integer&nbsp;numbers&nbsp;of&nbsp;metres.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
149&nbsp;&nbsp;&nbsp;&nbsp;([cell-size&nbsp;x-offset&nbsp;y-offset&nbsp;width&nbsp;height]
</span><br/>
<span class="not-covered" title="0 out of 9 forms covered">
150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(get-surface&nbsp;*base-map*&nbsp;*noise-map*&nbsp;cell-size&nbsp;x-offset&nbsp;y-offset&nbsp;width&nbsp;height))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
151&nbsp;&nbsp;&nbsp;&nbsp;([base-map&nbsp;noise-map&nbsp;cell-size&nbsp;x-offset&nbsp;y-offset&nbsp;width&nbsp;height]
</span><br/>
<span class="not-covered" title="0 out of 12 forms covered">
152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[b&nbsp;(if&nbsp;(seq?&nbsp;base-map)&nbsp;base-map&nbsp;(scale-grid&nbsp;(apply-heightmap&nbsp;base-map)&nbsp;1000))
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
153&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;(if&nbsp;(seq?&nbsp;noise-map)&nbsp;noise-map&nbsp;(apply-heightmap&nbsp;noise-map))]
</span><br/>
<span class="not-covered" title="0 out of 11 forms covered">
154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(and&nbsp;(in-bounds?&nbsp;b&nbsp;x-offset&nbsp;y-offset)
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
155&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(in-bounds?&nbsp;b&nbsp;(+&nbsp;x-offset&nbsp;width)&nbsp;(+&nbsp;y-offset&nbsp;height)))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
156&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;;;&nbsp;actually&nbsp;do&nbsp;stuff
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
157&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(Exception.&nbsp;&quot;Surface&nbsp;out&nbsp;of&nbsp;bounds&nbsp;for&nbsp;map.&quot;)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
158&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
159&nbsp;&nbsp;
</span><br/>
</body>
</html>

View file

@ -0,0 +1,119 @@
<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/world/location.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.world.location
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Functions&nbsp;dealing&nbsp;with&nbsp;location&nbsp;in&nbsp;the&nbsp;world.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[clojure.math.numeric-tower&nbsp;:refer&nbsp;[expt&nbsp;sqrt]]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
004&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;A&nbsp;&#x27;location&#x27;&nbsp;value&nbsp;is&nbsp;a&nbsp;list&nbsp;comprising&nbsp;at&nbsp;most&nbsp;the&nbsp;x&#x2F;y&nbsp;coordinate&nbsp;location
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;and&nbsp;the&nbsp;ids&nbsp;of&nbsp;the&nbsp;settlement&nbsp;and&nbsp;region&nbsp;(possibly&nbsp;hierarchically)&nbsp;that&nbsp;contain
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;the&nbsp;location.&nbsp;If&nbsp;the&nbsp;x&#x2F;y&nbsp;is&nbsp;not&nbsp;local&nbsp;to&nbsp;the&nbsp;home&nbsp;of&nbsp;the&nbsp;receiving&nbsp;agent,&nbsp;they
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;won&#x27;t&nbsp;remember&nbsp;it&nbsp;and&nbsp;won&#x27;t&nbsp;pass&nbsp;it&nbsp;on;&nbsp;if&nbsp;any&nbsp;of&nbsp;the&nbsp;ids&nbsp;are&nbsp;not&nbsp;interesting
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;So&nbsp;location&nbsp;information&nbsp;will&nbsp;degrade&nbsp;progressively&nbsp;as&nbsp;the&nbsp;item&nbsp;is&nbsp;passed&nbsp;along.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
010&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;It&nbsp;is&nbsp;assumed&nbsp;that&nbsp;the&nbsp;`:home`&nbsp;of&nbsp;a&nbsp;character&nbsp;is&nbsp;a&nbsp;location&nbsp;in&nbsp;this&nbsp;sense.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
012&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
013&nbsp;&nbsp;(defn&nbsp;get-coords
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;the&nbsp;coordinates&nbsp;in&nbsp;the&nbsp;game&nbsp;world&nbsp;of&nbsp;`location`,&nbsp;which&nbsp;may&nbsp;be
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;A&nbsp;coordinate&nbsp;pair&nbsp;in&nbsp;the&nbsp;format&nbsp;{:x&nbsp;5&nbsp;:y&nbsp;32};
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;A&nbsp;location,&nbsp;as&nbsp;discussed&nbsp;above;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;Any&nbsp;other&nbsp;gameworld&nbsp;object,&nbsp;having&nbsp;a&nbsp;`:location`&nbsp;property&nbsp;whose&nbsp;value
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;one&nbsp;of&nbsp;the&nbsp;above.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;[location]
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;(cond
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;location)&nbsp;nil
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map?&nbsp;location)
</span><br/>
<span class="partial" title="1 out of 3 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
</span><br/>
<span class="partial" title="13 out of 14 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(number?&nbsp;(:x&nbsp;location))&nbsp;(number?&nbsp;(:y&nbsp;location)))
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:location&nbsp;location)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:location&nbsp;location))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(get-coords&nbsp;(first&nbsp;(remove&nbsp;keyword?&nbsp;location)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
030&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
031&nbsp;&nbsp;(defn&nbsp;distance-between
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;[location-1&nbsp;location-2]
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[c1&nbsp;(get-coords&nbsp;location-1)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c2&nbsp;(get-coords&nbsp;location-2)]
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when
</span><br/>
<span class="partial" title="5 out of 6 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;c1&nbsp;c2)
</span><br/>
<span class="covered" title="23 out of 23 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(sqrt&nbsp;(+&nbsp;(expt&nbsp;(-&nbsp;(:x&nbsp;c1)&nbsp;(:x&nbsp;c2))&nbsp;2)&nbsp;(expt&nbsp;(-&nbsp;(:y&nbsp;c1)&nbsp;(:y&nbsp;c2))&nbsp;2))))))
</span><br/>
</body>
</html>

View file

@ -0,0 +1,29 @@
<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/world/mw.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.world.mw
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Functions&nbsp;dealing&nbsp;with&nbsp;building&nbsp;a&nbsp;great&nbsp;game&nbsp;world&nbsp;from&nbsp;a&nbsp;MicroWorld&nbsp;world.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[clojure.math.numeric-tower&nbsp;:refer&nbsp;[expt&nbsp;sqrt]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[mw-engine.core&nbsp;:refer&nbsp;[]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[mw-engine.world&nbsp;:refer&nbsp;[]]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
006&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;;;&nbsp;It&#x27;s&nbsp;not&nbsp;at&nbsp;all&nbsp;clear&nbsp;to&nbsp;me&nbsp;yet&nbsp;what&nbsp;the&nbsp;workflow&nbsp;for&nbsp;getting&nbsp;a&nbsp;MicroWorld&nbsp;map&nbsp;into&nbsp;The&nbsp;Great&nbsp;Game,&nbsp;and&nbsp;whether&nbsp;it&nbsp;passes&nbsp;through&nbsp;Walkmap&nbsp;to&nbsp;get&nbsp;here.&nbsp;This&nbsp;file&nbsp;as&nbsp;currently&nbsp;written&nbsp;assumes&nbsp;it&nbsp;doesn&#x27;t.
</span><br/>
</body>
</html>

View file

@ -0,0 +1,173 @@
<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/world/routes.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.world.routes
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Conceptual&nbsp;(plan&nbsp;level)&nbsp;routes,&nbsp;represented&nbsp;as&nbsp;tuples&nbsp;of&nbsp;location&nbsp;ids.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[cc.journeyman.the-great-game.utils&nbsp;:refer&nbsp;[cyclic?]]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
004&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
005&nbsp;&nbsp;(defn&nbsp;find-routes
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&quot;Find&nbsp;routes&nbsp;from&nbsp;among&nbsp;these&nbsp;`routes`&nbsp;from&nbsp;`from`;&nbsp;if&nbsp;`to`&nbsp;is&nbsp;supplied,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;`to`,&nbsp;by&nbsp;breadth-first&nbsp;search.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;([routes&nbsp;from]
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[to]&nbsp;(cons&nbsp;from&nbsp;to))
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;empty?
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[route]
</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;(remove
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(=&nbsp;from&nbsp;%)
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(some&nbsp;#(=&nbsp;%&nbsp;from)&nbsp;route)&nbsp;route)))
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routes))))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;([routes&nbsp;from&nbsp;to]
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[steps&nbsp;(find-routes&nbsp;routes&nbsp;from)
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;found&nbsp;(filter
</span><br/>
<span class="covered" title="10 out of 10 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[step]&nbsp;(if&nbsp;(some&nbsp;#(=&nbsp;to&nbsp;%)&nbsp;step)&nbsp;step))
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;steps)]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;found)
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-routes&nbsp;routes&nbsp;from&nbsp;to&nbsp;steps)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;found)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;([routes&nbsp;from&nbsp;to&nbsp;steps]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not&nbsp;(empty?&nbsp;steps))
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[paths&nbsp;(remove
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cyclic?
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(mapcat
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[path]
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fn&nbsp;[x]&nbsp;(concat&nbsp;path&nbsp;(rest&nbsp;x)))
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-routes&nbsp;routes&nbsp;(last&nbsp;path))))
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;steps))
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;found&nbsp;(filter
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(=&nbsp;(last&nbsp;%)&nbsp;to)&nbsp;paths)]
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;found)
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-routes&nbsp;routes&nbsp;from&nbsp;to&nbsp;paths)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;found)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
045&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
046&nbsp;&nbsp;(defn&nbsp;find-route
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&quot;Find&nbsp;a&nbsp;single&nbsp;route&nbsp;from&nbsp;`from`&nbsp;to&nbsp;`to`&nbsp;in&nbsp;this&nbsp;`world-or-routes`,&nbsp;which
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;may&nbsp;be&nbsp;either&nbsp;a&nbsp;world&nbsp;as&nbsp;defined&nbsp;in&nbsp;[[the-great-game.world.world]]&nbsp;or&nbsp;else
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;sequence&nbsp;of&nbsp;tuples&nbsp;of&nbsp;keywords.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;[world-or-routes&nbsp;from&nbsp;to]
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;(first
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-routes
</span><br/>
<span class="partial" title="7 out of 8 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(:routes&nbsp;world-or-routes)&nbsp;world-or-routes)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to)))
</span><br/>
</body>
</html>

View file

@ -0,0 +1,125 @@
<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/world/run.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.world.run
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Run&nbsp;the&nbsp;whole&nbsp;simulation&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[environ.core&nbsp;:refer&nbsp;[env]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[taoensso.timbre&nbsp;:as&nbsp;timbre]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[taoensso.timbre.appenders.3rd-party.rotor&nbsp;:as&nbsp;rotor]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.gossip.gossip&nbsp;:as&nbsp;g]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.merchants.merchants&nbsp;:as&nbsp;m]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.merchants.markets&nbsp;:as&nbsp;k]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[cc.journeyman.the-great-game.world.world&nbsp;:as&nbsp;w]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
010&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
011&nbsp;&nbsp;(defn&nbsp;init
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;([]
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(init&nbsp;{}))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;([config]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(timbre&#x2F;merge-config!
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:appenders
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:rotor&nbsp;(rotor&#x2F;rotor-appender
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:path&nbsp;&quot;the-great-game.log&quot;
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:max-size&nbsp;(*&nbsp;512&nbsp;1024)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:backlog&nbsp;10})}
</span><br/>
<span class="not-covered" title="0 out of 9 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:level&nbsp;(or
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:log-level&nbsp;config)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(env&nbsp;:dev)&nbsp;:debug)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:info)})))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
025&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
026&nbsp;&nbsp;(defn&nbsp;run
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;pipeline&nbsp;to&nbsp;run&nbsp;the&nbsp;simulation&nbsp;each&nbsp;game&nbsp;day.&nbsp;Returns&nbsp;a&nbsp;world&nbsp;like
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;world,&nbsp;with&nbsp;all&nbsp;the&nbsp;various&nbsp;active&nbsp;elements&nbsp;updated.&nbsp;The&nbsp;optional
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;`date`&nbsp;argument,&nbsp;if&nbsp;supplied,&nbsp;is&nbsp;set&nbsp;as&nbsp;the&nbsp;`:date`&nbsp;of&nbsp;the&nbsp;returned&nbsp;world.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;([world]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;(g&#x2F;run
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(m&#x2F;run
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(k&#x2F;run
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(w&#x2F;run&nbsp;world)))))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;([world&nbsp;date]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;(g&#x2F;run
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(m&#x2F;run
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(k&#x2F;run
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(w&#x2F;run&nbsp;world&nbsp;date))))))
</span><br/>
</body>
</html>

View file

@ -0,0 +1,584 @@
<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/world/world.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;cc.journeyman.the-great-game.world.world
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Access&nbsp;to&nbsp;data&nbsp;about&nbsp;the&nbsp;world&quot;)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
003&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;;;;&nbsp;The&nbsp;world&nbsp;has&nbsp;to&nbsp;work&nbsp;either&nbsp;as&nbsp;map&nbsp;or&nbsp;a&nbsp;database.&nbsp;Initially,&nbsp;and&nbsp;for
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;;;;&nbsp;unit&nbsp;tests,&nbsp;I&#x27;ll&nbsp;use&nbsp;a&nbsp;map;&nbsp;later,&nbsp;there&nbsp;will&nbsp;be&nbsp;a&nbsp;database.&nbsp;But&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;;;;&nbsp;API&nbsp;needs&nbsp;to&nbsp;be&nbsp;agnostic,&nbsp;so&nbsp;that&nbsp;heirarchies&nbsp;which&nbsp;interact&nbsp;with
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;;;;&nbsp;`world`&nbsp;don&#x27;t&nbsp;have&nbsp;to&nbsp;know&nbsp;which&nbsp;they&#x27;ve&nbsp;got&nbsp;-&nbsp;as&nbsp;far&nbsp;as&nbsp;they&#x27;re&nbsp;concerned
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;;;;&nbsp;it&#x27;s&nbsp;just&nbsp;a&nbsp;handle.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
009&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
010&nbsp;&nbsp;(def&nbsp;default-world
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;&quot;A&nbsp;basic&nbsp;world&nbsp;for&nbsp;testing&nbsp;concepts&quot;
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;{:date&nbsp;0&nbsp;;;&nbsp;the&nbsp;age&nbsp;of&nbsp;this&nbsp;world&nbsp;in&nbsp;game&nbsp;days
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cities
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:aberdeen
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
015&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:id&nbsp;:aberdeen
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:supplies
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;`supplies`&nbsp;is&nbsp;the&nbsp;quantity&nbsp;of&nbsp;each&nbsp;commodity&nbsp;added&nbsp;to&nbsp;the&nbsp;stock
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;each&nbsp;game&nbsp;day.&nbsp;If&nbsp;the&nbsp;price&nbsp;in&nbsp;the&nbsp;market&nbsp;is&nbsp;lower&nbsp;than&nbsp;1&nbsp;(the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;cost&nbsp;of&nbsp;production&nbsp;of&nbsp;a&nbsp;unit)&nbsp;no&nbsp;goods&nbsp;will&nbsp;be&nbsp;added.
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:fish&nbsp;10
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;5}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:demands
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;`stock`&nbsp;is&nbsp;the&nbsp;quantity&nbsp;of&nbsp;each&nbsp;commodity&nbsp;in&nbsp;the&nbsp;market&nbsp;at&nbsp;any
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;given&nbsp;time.&nbsp;It&nbsp;is&nbsp;adjusted&nbsp;for&nbsp;production&nbsp;and&nbsp;consumption&nbsp;at
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;the&nbsp;end&nbsp;of&nbsp;each&nbsp;game&nbsp;day.
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:iron&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cloth&nbsp;10
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;10}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:port&nbsp;true
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:prices
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;`prices`:&nbsp;the&nbsp;current&nbsp;price&nbsp;(both&nbsp;buying&nbsp;and&nbsp;selling,&nbsp;for&nbsp;simplicity)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;of&nbsp;each&nbsp;commodity&nbsp;in&nbsp;the&nbsp;market.&nbsp;Updated&nbsp;each&nbsp;game&nbsp;day&nbsp;based&nbsp;on&nbsp;current
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;stock.
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cloth&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;1}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stock
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;`stock`&nbsp;is&nbsp;the&nbsp;quantity&nbsp;of&nbsp;each&nbsp;commodity&nbsp;in&nbsp;the&nbsp;market&nbsp;at&nbsp;any
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;given&nbsp;time.&nbsp;It&nbsp;is&nbsp;adjusted&nbsp;for&nbsp;production&nbsp;and&nbsp;consumption&nbsp;at
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;the&nbsp;end&nbsp;of&nbsp;each&nbsp;game&nbsp;day.
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cloth&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;0}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cash&nbsp;100}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:buckie
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:id&nbsp;:buckie
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:supplies
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:fish&nbsp;20}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:demands
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cloth&nbsp;5
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;3
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;5
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;1}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:port&nbsp;true
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:prices&nbsp;{:cloth&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;1}
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stock&nbsp;{:cloth&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;0}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
069&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cash&nbsp;100}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:callander
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:id&nbsp;:callander
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:supplies&nbsp;{:leather&nbsp;20}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:demands
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
074&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cloth&nbsp;5
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;3
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;5
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;1}
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:prices&nbsp;{:cloth&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
080&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;1}
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stock&nbsp;{:cloth&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
084&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;0}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
088&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cash&nbsp;100}
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
089&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:dundee&nbsp;{:id&nbsp;:dundee}
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:edinburgh&nbsp;{:id&nbsp;:dundee}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:falkirk
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:id&nbsp;:falkirk
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:supplies&nbsp;{:iron&nbsp;10}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:demands
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cloth&nbsp;5
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;3
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;5
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;10}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:port&nbsp;true
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:prices&nbsp;{:cloth&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;1}
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stock&nbsp;{:cloth&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;0}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cash&nbsp;100}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:glasgow
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:id&nbsp;:glasgow
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:supplies&nbsp;{:whisky&nbsp;10}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:demands
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
115&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cloth&nbsp;5
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;3
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;5
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;10}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:port&nbsp;true
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
120&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:prices&nbsp;{:cloth&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;1
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;1}
</span><br/>
<span class="covered" title="11 out of 11 forms covered">
125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stock&nbsp;{:cloth&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;0
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;0}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:cash&nbsp;100}}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:merchants
</span><br/>
<span class="covered" title="20 out of 20 forms covered">
132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:archie&nbsp;{:id&nbsp;:archie
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:home&nbsp;:aberdeen&nbsp;:location&nbsp;:aberdeen&nbsp;:cash&nbsp;100&nbsp;:capacity&nbsp;10
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:known-prices&nbsp;{}
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stock&nbsp;{}}
</span><br/>
<span class="covered" title="13 out of 13 forms covered">
136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:belinda&nbsp;{:id&nbsp;:belinda
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:home&nbsp;:buckie&nbsp;:location&nbsp;:buckie&nbsp;:cash&nbsp;100&nbsp;:capacity&nbsp;10
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:known-prices&nbsp;{}
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stock&nbsp;{}}
</span><br/>
<span class="covered" title="13 out of 13 forms covered">
140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:callum&nbsp;{:id&nbsp;:callum
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:home&nbsp;:callander&nbsp;:location&nbsp;:calander&nbsp;:cash&nbsp;100&nbsp;:capacity&nbsp;10
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:known-prices&nbsp;{}
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stock&nbsp;{}}
</span><br/>
<span class="covered" title="13 out of 13 forms covered">
144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:deirdre&nbsp;{:id&nbsp;:deidre
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:home&nbsp;:dundee&nbsp;:location&nbsp;:dundee&nbsp;:cash&nbsp;100&nbsp;:capacity&nbsp;10
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:known-prices&nbsp;{}
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stock&nbsp;{}}
</span><br/>
<span class="covered" title="13 out of 13 forms covered">
148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:euan&nbsp;{:id&nbsp;:euan
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:home&nbsp;:edinbirgh&nbsp;:location&nbsp;:edinburgh&nbsp;:cash&nbsp;100&nbsp;:capacity&nbsp;10
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:known-prices&nbsp;{}
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
151&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stock&nbsp;{}}
</span><br/>
<span class="covered" title="13 out of 13 forms covered">
152&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fiona&nbsp;{:id&nbsp;:fiona
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
153&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:home&nbsp;:falkirk&nbsp;:location&nbsp;:falkirk&nbsp;:cash&nbsp;100&nbsp;:capacity&nbsp;10
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:known-prices&nbsp;{}
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
155&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:stock&nbsp;{}}}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
156&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:routes
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
157&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;all&nbsp;routes&nbsp;can&nbsp;be&nbsp;traversed&nbsp;in&nbsp;either&nbsp;direction&nbsp;and&nbsp;are&nbsp;assumed&nbsp;to
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
158&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;take&nbsp;the&nbsp;same&nbsp;amount&nbsp;of&nbsp;time.
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
159&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[:aberdeen&nbsp;:buckie]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
160&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:aberdeen&nbsp;:dundee]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
161&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:callander&nbsp;:glasgow]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
162&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:dundee&nbsp;:callander]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
163&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:dundee&nbsp;:edinburgh]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
164&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:dundee&nbsp;:falkirk]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
165&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:edinburgh&nbsp;:falkirk]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
166&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:falkirk&nbsp;:glasgow]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
167&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:commodities
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
168&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;cost&nbsp;of&nbsp;commodities&nbsp;is&nbsp;expressed&nbsp;in&nbsp;person&#x2F;days;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
169&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;weight&nbsp;in&nbsp;packhorse&nbsp;loads.&nbsp;Transport&nbsp;in&nbsp;this&nbsp;model
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
170&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;is&nbsp;all&nbsp;overland;&nbsp;you&nbsp;don&#x27;t&nbsp;take&nbsp;bulk&nbsp;cargoes&nbsp;overland
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
171&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;in&nbsp;this&nbsp;period,&nbsp;it&#x27;s&nbsp;too&nbsp;expensive.
</span><br/>
<span class="covered" title="13 out of 13 forms covered">
172&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cloth&nbsp;{:id&nbsp;:cloth&nbsp;:cost&nbsp;1&nbsp;:weight&nbsp;0.25}
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
173&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:fish&nbsp;{:id&nbsp;:fish&nbsp;:cost&nbsp;1&nbsp;:weight&nbsp;1}
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
174&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:leather&nbsp;{:id&nbsp;:leather&nbsp;:cost&nbsp;1&nbsp;:weight&nbsp;0.5}
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
175&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:whisky&nbsp;{:id&nbsp;:whisky&nbsp;:cost&nbsp;1&nbsp;:weight&nbsp;0.1}
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
176&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:iron&nbsp;{:id&nbsp;:iron&nbsp;:cost&nbsp;1&nbsp;:weight&nbsp;10}}})
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
177&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
178&nbsp;&nbsp;(defn&nbsp;actual-price
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
179&nbsp;&nbsp;&nbsp;&nbsp;&quot;Find&nbsp;the&nbsp;actual&nbsp;current&nbsp;price&nbsp;of&nbsp;this&nbsp;`commodity`&nbsp;in&nbsp;this&nbsp;`city`&nbsp;given
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
180&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;`world`.&nbsp;**NOTE**&nbsp;that&nbsp;merchants&nbsp;can&nbsp;only&nbsp;know&nbsp;the&nbsp;actual&nbsp;prices&nbsp;in
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
181&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;city&nbsp;in&nbsp;which&nbsp;they&nbsp;are&nbsp;currently&nbsp;located.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
182&nbsp;&nbsp;&nbsp;&nbsp;[world&nbsp;commodity&nbsp;city]
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
183&nbsp;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;world&nbsp;:cities&nbsp;city&nbsp;:prices&nbsp;commodity))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
184&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
185&nbsp;&nbsp;(defn&nbsp;run
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
186&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;world&nbsp;like&nbsp;this&nbsp;`world`&nbsp;with&nbsp;only&nbsp;the&nbsp;`:date`&nbsp;to&nbsp;this&nbsp;`date`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
187&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;id&nbsp;`date`&nbsp;not&nbsp;supplied,&nbsp;the&nbsp;current&nbsp;value&nbsp;incremented&nbsp;by&nbsp;one).&nbsp;For
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
188&nbsp;&nbsp;&nbsp;&nbsp;running&nbsp;other&nbsp;aspects&nbsp;of&nbsp;the&nbsp;simulation,&nbsp;see&nbsp;[[the-great-game.world.run]].&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
189&nbsp;&nbsp;&nbsp;&nbsp;([world]
</span><br/>
<span class="not-covered" title="0 out of 12 forms covered">
190&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(run&nbsp;world&nbsp;(inc&nbsp;(or&nbsp;(:date&nbsp;world)&nbsp;0))))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
191&nbsp;&nbsp;&nbsp;&nbsp;([world&nbsp;date]
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
192&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(assoc&nbsp;world&nbsp;:date&nbsp;date)))
</span><br/>
</body>
</html>

View file

@ -15,44 +15,102 @@
<td class="with-number">Total</td><td class="with-number">Blank</td><td class="with-number">Instrumented</td> <td class="with-number">Total</td><td class="with-number">Blank</td><td class="with-number">Instrumented</td>
</tr></thead> </tr></thead>
<tr> <tr>
<td><a href="the_great_game/gossip/gossip.clj.html">the-great-game.gossip.gossip</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/agent/agent.clj.html">cc.journeyman.the-great-game.agent.agent</a></td><td class="with-bar"><div class="covered"
style="width:100.0%;
float:left;"> 3 </div></td>
<td class="with-number">100.00 %</td>
<td class="with-bar"><div class="covered"
style="width:100.0%;
float:left;"> 3 </div></td>
<td class="with-number">100.00 %</td>
<td class="with-number">45</td><td class="with-number">5</td><td class="with-number">3</td>
</tr>
<tr>
<td><a href="cc/journeyman/the_great_game/buildings/rectangular.clj.html">cc.journeyman.the-great-game.buildings.rectangular</a></td><td class="with-bar"><div class="covered"
style="width:74.64788732394366%;
float:left;"> 106 </div><div class="not-covered"
style="width:25.35211267605634%;
float:left;"> 36 </div></td>
<td class="with-number">74.65 %</td>
<td class="with-bar"><div class="covered"
style="width:77.41935483870968%;
float:left;"> 24 </div><div class="partial"
style="width:3.225806451612903%;
float:left;"> 1 </div><div class="not-covered"
style="width:19.35483870967742%;
float:left;"> 6 </div></td>
<td class="with-number">80.65 %</td>
<td class="with-number">180</td><td class="with-number">25</td><td class="with-number">31</td>
</tr>
<tr>
<td><a href="cc/journeyman/the_great_game/gossip/gossip.clj.html">cc.journeyman.the-great-game.gossip.gossip</a></td><td class="with-bar"><div class="covered"
style="width:4.62962962962963%; style="width:4.62962962962963%;
float:left;"> 5 </div><div class="not-covered" float:left;"> 5 </div><div class="not-covered"
style="width:95.37037037037037%; style="width:95.37037037037037%;
float:left;"> 103 </div></td> float:left;"> 103 </div></td>
<td class="with-number">4.63 %</td> <td class="with-number">4.63 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:12.820512820512821%; style="width:12.5%;
float:left;"> 5 </div><div class="not-covered" float:left;"> 5 </div><div class="not-covered"
style="width:87.17948717948718%; style="width:87.5%;
float:left;"> 34 </div></td> float:left;"> 35 </div></td>
<td class="with-number">12.82 %</td> <td class="with-number">12.50 %</td>
<td class="with-number">66</td><td class="with-number">5</td><td class="with-number">39</td> <td class="with-number">73</td><td class="with-number">7</td><td class="with-number">40</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/gossip/news_items.clj.html">the-great-game.gossip.news-items</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/gossip/news_items.clj.html">cc.journeyman.the-great-game.gossip.news-items</a></td><td class="with-bar"><div class="covered"
style="width:92.80155642023347%; style="width:68.92744479495268%;
float:left;"> 477 </div><div class="not-covered" float:left;"> 437 </div><div class="not-covered"
style="width:7.198443579766537%; style="width:31.07255520504732%;
float:left;"> 37 </div></td> float:left;"> 197 </div></td>
<td class="with-number">92.80 %</td> <td class="with-number">68.93 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:88.07339449541284%; style="width:63.07692307692308%;
float:left;"> 96 </div><div class="partial" float:left;"> 82 </div><div class="partial"
style="width:7.339449541284404%; style="width:7.6923076923076925%;
float:left;"> 8 </div><div class="not-covered" float:left;"> 10 </div><div class="not-covered"
style="width:4.587155963302752%; style="width:29.23076923076923%;
float:left;"> 5 </div></td> float:left;"> 38 </div></td>
<td class="with-number">95.41 %</td> <td class="with-number">70.77 %</td>
<td class="with-number">256</td><td class="with-number">31</td><td class="with-number">109</td> <td class="with-number">313</td><td class="with-number">36</td><td class="with-number">130</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/merchants/markets.clj.html">the-great-game.merchants.markets</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/holdings/holding.clj.html">cc.journeyman.the-great-game.holdings.holding</a></td><td class="with-bar"><div class="covered"
style="width:96.46464646464646%; style="width:14.285714285714286%;
float:left;"> 191 </div><div class="not-covered" float:left;"> 3 </div><div class="not-covered"
style="width:3.5353535353535355%; style="width:85.71428571428571%;
float:left;"> 18 </div></td>
<td class="with-number">14.29 %</td>
<td class="with-bar"><div class="covered"
style="width:42.857142857142854%;
float:left;"> 3 </div><div class="not-covered"
style="width:57.142857142857146%;
float:left;"> 4 </div></td>
<td class="with-number">42.86 %</td>
<td class="with-number">46</td><td class="with-number">3</td><td class="with-number">7</td>
</tr>
<tr>
<td><a href="cc/journeyman/the_great_game/location/location.clj.html">cc.journeyman.the-great-game.location.location</a></td><td class="with-bar"><div class="covered"
style="width:15.384615384615385%;
float:left;"> 4 </div><div class="not-covered"
style="width:84.61538461538461%;
float:left;"> 22 </div></td>
<td class="with-number">15.38 %</td>
<td class="with-bar"><div class="covered"
style="width:28.571428571428573%;
float:left;"> 4 </div><div class="not-covered"
style="width:71.42857142857143%;
float:left;"> 10 </div></td>
<td class="with-number">28.57 %</td>
<td class="with-number">47</td><td class="with-number">8</td><td class="with-number">14</td>
</tr>
<tr>
<td><a href="cc/journeyman/the_great_game/merchants/markets.clj.html">cc.journeyman.the-great-game.merchants.markets</a></td><td class="with-bar"><div class="covered"
style="width:96.48241206030151%;
float:left;"> 192 </div><div class="not-covered"
style="width:3.5175879396984926%;
float:left;"> 7 </div></td> float:left;"> 7 </div></td>
<td class="with-number">96.46 %</td> <td class="with-number">96.48 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:93.18181818181819%; style="width:93.18181818181819%;
float:left;"> 41 </div><div class="partial" float:left;"> 41 </div><div class="partial"
@ -64,7 +122,7 @@
<td class="with-number">84</td><td class="with-number">8</td><td class="with-number">44</td> <td class="with-number">84</td><td class="with-number">8</td><td class="with-number">44</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/merchants/merchant_utils.clj.html">the-great-game.merchants.merchant-utils</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/merchants/merchant_utils.clj.html">cc.journeyman.the-great-game.merchants.merchant-utils</a></td><td class="with-bar"><div class="covered"
style="width:65.4485049833887%; style="width:65.4485049833887%;
float:left;"> 197 </div><div class="not-covered" float:left;"> 197 </div><div class="not-covered"
style="width:34.5514950166113%; style="width:34.5514950166113%;
@ -81,12 +139,12 @@
<td class="with-number">106</td><td class="with-number">7</td><td class="with-number">72</td> <td class="with-number">106</td><td class="with-number">7</td><td class="with-number">72</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/merchants/merchants.clj.html">the-great-game.merchants.merchants</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/merchants/merchants.clj.html">cc.journeyman.the-great-game.merchants.merchants</a></td><td class="with-bar"><div class="covered"
style="width:2.816901408450704%; style="width:2.73972602739726%;
float:left;"> 2 </div><div class="not-covered" float:left;"> 2 </div><div class="not-covered"
style="width:97.1830985915493%; style="width:97.26027397260275%;
float:left;"> 69 </div></td> float:left;"> 71 </div></td>
<td class="with-number">2.82 %</td> <td class="with-number">2.74 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:12.5%; style="width:12.5%;
float:left;"> 2 </div><div class="not-covered" float:left;"> 2 </div><div class="not-covered"
@ -96,7 +154,7 @@
<td class="with-number">28</td><td class="with-number">3</td><td class="with-number">16</td> <td class="with-number">28</td><td class="with-number">3</td><td class="with-number">16</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/merchants/planning.clj.html">the-great-game.merchants.planning</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/merchants/planning.clj.html">cc.journeyman.the-great-game.merchants.planning</a></td><td class="with-bar"><div class="covered"
style="width:89.27335640138408%; style="width:89.27335640138408%;
float:left;"> 258 </div><div class="not-covered" float:left;"> 258 </div><div class="not-covered"
style="width:10.726643598615917%; style="width:10.726643598615917%;
@ -113,12 +171,12 @@
<td class="with-number">159</td><td class="with-number">11</td><td class="with-number">85</td> <td class="with-number">159</td><td class="with-number">11</td><td class="with-number">85</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/merchants/strategies/simple.clj.html">the-great-game.merchants.strategies.simple</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/merchants/strategies/simple.clj.html">cc.journeyman.the-great-game.merchants.strategies.simple</a></td><td class="with-bar"><div class="covered"
style="width:0.8264462809917356%; style="width:0.8156606851549756%;
float:left;"> 5 </div><div class="not-covered" float:left;"> 5 </div><div class="not-covered"
style="width:99.17355371900827%; style="width:99.18433931484502%;
float:left;"> 600 </div></td> float:left;"> 608 </div></td>
<td class="with-number">0.83 %</td> <td class="with-number">0.82 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:4.032258064516129%; style="width:4.032258064516129%;
float:left;"> 5 </div><div class="not-covered" float:left;"> 5 </div><div class="not-covered"
@ -128,7 +186,7 @@
<td class="with-number">173</td><td class="with-number">6</td><td class="with-number">124</td> <td class="with-number">173</td><td class="with-number">6</td><td class="with-number">124</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/objects/container.clj.html">the-great-game.objects.container</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/objects/container.clj.html">cc.journeyman.the-great-game.objects.container</a></td><td class="with-bar"><div class="covered"
style="width:100.0%; style="width:100.0%;
float:left;"> 2 </div></td> float:left;"> 2 </div></td>
<td class="with-number">100.00 %</td> <td class="with-number">100.00 %</td>
@ -139,48 +197,86 @@
<td class="with-number">11</td><td class="with-number">1</td><td class="with-number">2</td> <td class="with-number">11</td><td class="with-number">1</td><td class="with-number">2</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/objects/game_object.clj.html">the-great-game.objects.game-object</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/objects/game_object.clj.html">cc.journeyman.the-great-game.objects.game-object</a></td><td class="with-bar"><div class="covered"
style="width:60.0%; style="width:50.0%;
float:left;"> 3 </div><div class="not-covered" float:left;"> 3 </div><div class="not-covered"
style="width:40.0%; style="width:50.0%;
float:left;"> 2 </div></td> float:left;"> 3 </div></td>
<td class="with-number">60.00 %</td> <td class="with-number">50.00 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:60.0%; style="width:50.0%;
float:left;"> 3 </div><div class="not-covered" float:left;"> 3 </div><div class="not-covered"
style="width:40.0%; style="width:50.0%;
float:left;"> 2 </div></td> float:left;"> 3 </div></td>
<td class="with-number">60.00 %</td> <td class="with-number">50.00 %</td>
<td class="with-number">19</td><td class="with-number">2</td><td class="with-number">5</td> <td class="with-number">21</td><td class="with-number">2</td><td class="with-number">6</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/time.clj.html">the-great-game.time</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/playroom.clj.html">cc.journeyman.the-great-game.playroom</a></td><td class="with-bar"><div class="covered"
style="width:99.5850622406639%; style="width:86.05947955390334%;
float:left;"> 240 </div><div class="not-covered" float:left;"> 463 </div><div class="not-covered"
style="width:0.4149377593360996%; style="width:13.940520446096654%;
float:left;"> 1 </div></td> float:left;"> 75 </div></td>
<td class="with-number">99.59 %</td> <td class="with-number">86.06 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:98.33333333333333%; style="width:80.0%;
float:left;"> 59 </div><div class="partial" float:left;"> 28 </div><div class="partial"
style="width:14.285714285714286%;
float:left;"> 5 </div><div class="not-covered"
style="width:5.714285714285714%;
float:left;"> 2 </div></td>
<td class="with-number">94.29 %</td>
<td class="with-number">72</td><td class="with-number">12</td><td class="with-number">35</td>
</tr>
<tr>
<td><a href="cc/journeyman/the_great_game/time.clj.html">cc.journeyman.the-great-game.time</a></td><td class="with-bar"><div class="covered"
style="width:97.9253112033195%;
float:left;"> 236 </div><div class="not-covered"
style="width:2.074688796680498%;
float:left;"> 5 </div></td>
<td class="with-number">97.93 %</td>
<td class="with-bar"><div class="covered"
style="width:96.66666666666667%;
float:left;"> 58 </div><div class="partial"
style="width:1.6666666666666667%;
float:left;"> 1 </div><div class="not-covered"
style="width:1.6666666666666667%; style="width:1.6666666666666667%;
float:left;"> 1 </div></td> float:left;"> 1 </div></td>
<td class="with-number">100.00 %</td> <td class="with-number">98.33 %</td>
<td class="with-number">144</td><td class="with-number">21</td><td class="with-number">60</td> <td class="with-number">144</td><td class="with-number">21</td><td class="with-number">60</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/utils.clj.html">the-great-game.utils</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/utils.clj.html">cc.journeyman.the-great-game.utils</a></td><td class="with-bar"><div class="covered"
style="width:100.0%; style="width:84.33734939759036%;
float:left;"> 69 </div></td> float:left;"> 70 </div><div class="not-covered"
<td class="with-number">100.00 %</td> style="width:15.662650602409638%;
float:left;"> 13 </div></td>
<td class="with-number">84.34 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:100.0%; style="width:95.23809523809524%;
float:left;"> 19 </div></td> float:left;"> 20 </div><div class="not-covered"
<td class="with-number">100.00 %</td> style="width:4.761904761904762%;
<td class="with-number">35</td><td class="with-number">3</td><td class="with-number">19</td> float:left;"> 1 </div></td>
<td class="with-number">95.24 %</td>
<td class="with-number">45</td><td class="with-number">5</td><td class="with-number">21</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/world/location.clj.html">the-great-game.world.location</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/world/heightmap.clj.html">cc.journeyman.the-great-game.world.heightmap</a></td><td class="with-bar"><div class="covered"
style="width:3.5947712418300655%;
float:left;"> 11 </div><div class="not-covered"
style="width:96.40522875816994%;
float:left;"> 295 </div></td>
<td class="with-number">3.59 %</td>
<td class="with-bar"><div class="covered"
style="width:12.67605633802817%;
float:left;"> 9 </div><div class="not-covered"
style="width:87.32394366197182%;
float:left;"> 62 </div></td>
<td class="with-number">12.68 %</td>
<td class="with-number">159</td><td class="with-number">16</td><td class="with-number">71</td>
</tr>
<tr>
<td><a href="cc/journeyman/the_great_game/world/location.clj.html">cc.journeyman.the-great-game.world.location</a></td><td class="with-bar"><div class="covered"
style="width:87.95180722891567%; style="width:87.95180722891567%;
float:left;"> 73 </div><div class="not-covered" float:left;"> 73 </div><div class="not-covered"
style="width:12.048192771084338%; style="width:12.048192771084338%;
@ -197,7 +293,18 @@
<td class="with-number">37</td><td class="with-number">4</td><td class="with-number">17</td> <td class="with-number">37</td><td class="with-number">4</td><td class="with-number">17</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/world/routes.clj.html">the-great-game.world.routes</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/world/mw.clj.html">cc.journeyman.the-great-game.world.mw</a></td><td class="with-bar"><div class="covered"
style="width:100.0%;
float:left;"> 1 </div></td>
<td class="with-number">100.00 %</td>
<td class="with-bar"><div class="covered"
style="width:100.0%;
float:left;"> 1 </div></td>
<td class="with-number">100.00 %</td>
<td class="with-number">7</td><td class="with-number">1</td><td class="with-number">1</td>
</tr>
<tr>
<td><a href="cc/journeyman/the_great_game/world/routes.clj.html">cc.journeyman.the-great-game.world.routes</a></td><td class="with-bar"><div class="covered"
style="width:99.19354838709677%; style="width:99.19354838709677%;
float:left;"> 123 </div><div class="not-covered" float:left;"> 123 </div><div class="not-covered"
style="width:0.8064516129032258%; style="width:0.8064516129032258%;
@ -212,7 +319,7 @@
<td class="with-number">55</td><td class="with-number">2</td><td class="with-number">42</td> <td class="with-number">55</td><td class="with-number">2</td><td class="with-number">42</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/world/run.clj.html">the-great-game.world.run</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/world/run.clj.html">cc.journeyman.the-great-game.world.run</a></td><td class="with-bar"><div class="covered"
style="width:5.0%; style="width:5.0%;
float:left;"> 3 </div><div class="not-covered" float:left;"> 3 </div><div class="not-covered"
style="width:95.0%; style="width:95.0%;
@ -227,7 +334,7 @@
<td class="with-number">39</td><td class="with-number">2</td><td class="with-number">20</td> <td class="with-number">39</td><td class="with-number">2</td><td class="with-number">20</td>
</tr> </tr>
<tr> <tr>
<td><a href="the_great_game/world/world.clj.html">the-great-game.world.world</a></td><td class="with-bar"><div class="covered" <td><a href="cc/journeyman/the_great_game/world/world.clj.html">cc.journeyman.the-great-game.world.world</a></td><td class="with-bar"><div class="covered"
style="width:96.10983981693364%; style="width:96.10983981693364%;
float:left;"> 420 </div><div class="not-covered" float:left;"> 420 </div><div class="not-covered"
style="width:3.8901601830663615%; style="width:3.8901601830663615%;
@ -243,9 +350,9 @@
</tr> </tr>
<tr><td>Totals:</td> <tr><td>Totals:</td>
<td class="with-bar"></td> <td class="with-bar"></td>
<td class="with-number">66.55 %</td> <td class="with-number">61.00 %</td>
<td class="with-bar"></td> <td class="with-bar"></td>
<td class="with-number">68.63 %</td> <td class="with-number">61.78 %</td>
</tr> </tr>
</table> </table>
</body> </body>

View file

@ -115,36 +115,6 @@
:cultures #{:coastal} :cultures #{:coastal}
:modules []}}) :modules []}})
;; TODO: So, modules need to contain
;;
;; 1. Ground floor modules, having external doors;
;; 2. Craft modules -- workshops -- which will normally be ground floor (except
;; weavers) and may have the constraint that no upper floor module can cover them;
;; 3. Upper floor modules, having NO external doors (but linking internal doors);
;; 4. Roof modules
;;
;; There also needs to be an undercroft or platform module, such that the area of
;; the top of the platform is identical with the footprint of the building, and
;; the altitude of the top of the platform is equal to the altitude of the
;; terrain at the heighest corner of the building; so that the actual
;; building doesn't float in the air, and also so that none of the doors or windows
;; are partly underground.
;;
;; Each module needs to wrap an actual 3d model created in Blender or whatever,
;; and have a list of optional textures with which that model can be rendered.
;; So an upper floor bedroom module might have the following renders:
;;
;; 1. Bare masonry - constrained to upland or plateau terrain, and to coastal culture
;; 2. Painted masonry - constrained to upland or plateau terrain, and to coastal culture
;; 3. Half-timbered - not available on plateau terrain
;; 4. Weatherboarded - constrained to forest terrain
;; 5. Brick - constrained to arable or arid terrain
;;
;; of course these are only examples, and also, it's entirely possible to have
;; for example multiple different weatherboard renders for the same module.
;; There needs to be a way of rendering what can be built above what: for
;; example, you can't have a masonry clad module over a half timbered one,
;; but you can have a half-timbered one over a masonry one
(defn building-family (defn building-family
"A building family is essentially a collection of models of building modules "A building family is essentially a collection of models of building modules

View file

@ -1,5 +1,5 @@
(ns cc.journeyman.the-great-game.gossip.news-items (ns cc.journeyman.the-great-game.gossip.news-items
"Categories of news events interesting to gossip agents. "Using news items (propositions) to transfer knowledge between gossip agents.
The ideas here are based on the essay [The spread of knowledge in a large The ideas here are based on the essay [The spread of knowledge in a large
game world](The-spread-of-knowledge-in-a-large-game-world.html), q.v.; game world](The-spread-of-knowledge-in-a-large-game-world.html), q.v.;
@ -22,7 +22,8 @@
list of propositions, each of which must be checked every time any new list of propositions, each of which must be checked every time any new
proposition is offered. This is woefully inefficient. " proposition is offered. This is woefully inefficient. "
(:require [cc.journeyman.the-great-game.world.location :refer [distance-between]] (:require [cc.journeyman.the-great-game.world.location :refer [distance-between]]
[cc.journeyman.the-great-game.time :refer [game-time]])) [cc.journeyman.the-great-game.time :refer [game-time]]
[taoensso.timbre :as l]))
(def news-topics (def news-topics
@ -155,8 +156,8 @@
(defn interesting-location? (defn interesting-location?
"True if the location of this news `item` is interesting to this `gossip`." "True if the location of this news `item` is interesting to this `gossip`."
[gossip item] [gossip location]
(> (interest-in-location gossip (:location item)) 0)) (> (interest-in-location gossip location) 0))
(defn interesting-object? (defn interesting-object?
[gossip object] [gossip object]
@ -190,13 +191,16 @@
learning that 'someone killed Sweet Daisy', but there is point in learning learning that 'someone killed Sweet Daisy', but there is point in learning
'someone killed Sweet Daisy _with poison_'." 'someone killed Sweet Daisy _with poison_'."
[new-item known-item] [new-item known-item]
(reduce (if
#(and %1 %2) (reduce
(map #(if #(and %1 %2)
(known-item %) ;; if known-item has this key (map #(if
(compatible-value? (new-item %) (known-item %)) (known-item %) ;; if known-item has this key
true) (compatible-value? (new-item %) (known-item %))
(remove #{:nth-hand :confidence :learned-from} (keys new-item))))) true)
(remove #{:nth-hand :confidence :learned-from} (keys new-item))))
true
false))
(defn known-item? (defn known-item?
"True if this news `item` is already known to this `gossip`. "True if this news `item` is already known to this `gossip`.
@ -205,9 +209,13 @@
the same _or more specific_ values for all the keys of this `item` except the same _or more specific_ values for all the keys of this `item` except
`:nth-hand`, `:confidence` and `:learned-from`." `:nth-hand`, `:confidence` and `:learned-from`."
[gossip item] [gossip item]
(reduce (if
#(or %1 %2) (reduce
(filter true? (map #(compatible-item? item %) (:knowledge gossip))))) #(or %1 %2)
false
(filter true? (map #(compatible-item? item %) (:knowledge gossip))))
true
false))
(defn interesting-item? (defn interesting-item?
"True if anything about this news `item` is interesting to this `gossip`." "True if anything about this news `item` is interesting to this `gossip`."
@ -220,30 +228,39 @@
(interesting-object? gossip (:object item)) (interesting-object? gossip (:object item))
(interesting-topic? gossip (:verb item))))) (interesting-topic? gossip (:verb item)))))
(defn inc-or-one
"If this `val` is a number, return that number incremented by one; otherwise,
return 1. TODO: should probably be in `utils`."
[val]
(if
(number? val)
(inc val)
1))
(defn infer (defn infer
"Infer a new knowledge item from this `item`, following this `rule`" "Infer a new knowledge item from this `item`, following this `rule`."
[item rule] [item rule]
;; (l/info "Applying rule '" rule "' to item '" item "'")
(reduce merge (reduce merge
item item
(cons (cons
{:verb (:verb rule)} {:verb (:verb rule)
(map (fn [k] {k (apply (k rule) (list item))}) :nth-hand (inc-or-one (:nth-hand item))}
(map (fn [k] {k (item (rule k))})
(remove (remove
#{:verb} #{:verb :nth-hand}
(keys rule)))))) (keys rule))))))
(declare learn-news-item) (declare learn-news-item)
(defn make-all-inferences (defn make-all-inferences
"Return a list of knowledge entries that can be inferred from this news "Return a set of knowledge entries that can be inferred from this news
`item`." `item`."
[item] [item]
(set (set
(reduce
concat
(map (map
#(:knowledge (learn-news-item {} (infer item %) false)) #(infer item %)
(:inferences (news-topics (:verb item))))))) (:inferences (news-topics (:verb item))))))
(defn degrade-character (defn degrade-character
"Return a character specification like this `character`, but comprising "Return a character specification like this `character`, but comprising
@ -264,15 +281,6 @@
location))] location))]
(when-not (empty? l) l))) (when-not (empty? l) l)))
(defn inc-or-one
"If this `val` is a number, return that number incremented by one; otherwise,
return 1. TODO: should probably be in `utils`."
[val]
(if
(number? val)
(inc val)
1))
(defn learn-news-item (defn learn-news-item
"Return a gossip like this `gossip`, which has learned this news `item` if "Return a gossip like this `gossip`, which has learned this news `item` if
it is of interest to them." it is of interest to them."

View file

@ -43,5 +43,3 @@
;; (.settlement (OrientedLocation. 123.45 543.76 12.34 0.00 {})) ;; (.settlement (OrientedLocation. 123.45 543.76 12.34 0.00 {}))
;; (OrientedLocation. 123.45 543.76 12.34 0.00 {})

View file

@ -1,135 +1,163 @@
(ns cc.journeyman.the-great-game.gossip.news-items-test (ns cc.journeyman.the-great-game.gossip.news-items-test
(:require [clojure.test :refer [deftest is testing]] (:require [clojure.test :refer [deftest is testing]]
[cc.journeyman.the-great-game.gossip.news-items :refer [cc.journeyman.the-great-game.gossip.news-items :refer
[degrade-location infer interest-in-location interesting-location? [compatible-item? degrade-location infer interest-in-location interesting-location?
learn-news-item make-all-inferences]])) learn-news-item make-all-inferences]]))
(deftest compatible-item-test
(testing "Compatible item: items are identical"
(let [expected true
new-item {:verb :kills :location :tchahua :actor :fierce-fred :other :dainty-daisy}
known-item {:verb :kills :location :tchahua :actor :fierce-fred :other :dainty-daisy}
actual (compatible-item? new-item known-item)]
(is (= actual expected) "Items which are identical are compatible.")))
(testing "Compatible item: new item is less specific"
(let [expected true
new-item {:verb :kills :location :tchahua :other :dainty-daisy}
known-item {:verb :kills :location :tchahua :actor :fierce-fred :other :dainty-daisy}
actual (compatible-item? new-item known-item)]
(is (= actual expected)
"An item which is less specific is compatible with existing knowledge.")))
(testing "Compatible item: new item is more specific"
(let [expected true
new-item {:verb :kills :location :tchahua :actor :fierce-fred :other :dainty-daisy :date 20210609}
known-item {:verb :kills :location :tchahua :actor :fierce-fred :other :dainty-daisy}
actual (compatible-item? new-item known-item)]
(is (= actual expected) "A new item which is more specific adds knowledge and is not compatible")))
(testing "Compatible item: new item conflicts with existing knowledge."
(let [expected false
new-item {:verb :kills :location :tchahua :actor :jealous-joe :other :dainty-daisy}
known-item {:verb :kills :location :tchahua :actor :fierce-fred :other :dainty-daisy}
actual (compatible-item? new-item known-item)]
(is (= actual expected) "A new item which we don't yet intelligently handle but is not compatible"))))
(deftest location-test (deftest location-test
(testing "Interest in locations" (testing "Interest in locations"
(let [expected 1 (let [expected 1
actual (interest-in-location actual (interest-in-location
{:knowledge [{:verb :steal {:knowledge [{:verb :steal
:actor :albert :actor :albert
:other :belinda :other :belinda
:object :foo :object :foo
:location [{:x 35 :y 23} :auchencairn :galloway]}]} :location [{:x 35 :y 23} :auchencairn :galloway]}]}
:galloway)] :galloway)]
(is (= actual expected))) (is (= actual expected)))
(let [expected 2 (let [expected 2
actual (interest-in-location actual (interest-in-location
{:knowledge [{:verb :steal {:knowledge [{:verb :steal
:actor :albert :actor :albert
:other :belinda :other :belinda
:object :foo :object :foo
:location [{:x 35 :y 23} :auchencairn :galloway :scotland]}]} :location [{:x 35 :y 23} :auchencairn :galloway :scotland]}]}
[:galloway :scotland])] [:galloway :scotland])]
(is (= actual expected))) (is (= actual expected)))
(let [expected 2 (let [expected 2
actual (interest-in-location actual (interest-in-location
{:home [{:x 35 :y 23} :auchencairn :galloway :scotland]} {:home [{:x 35 :y 23} :auchencairn :galloway :scotland]}
[:galloway :scotland])] [:galloway :scotland])]
(is (= actual expected))) (is (= actual expected)))
(let [expected 0 (let [expected 0
actual (interest-in-location actual (interest-in-location
{:knowledge [{:verb :steal {:knowledge [{:verb :steal
:actor :albert :actor :albert
:other :belinda :other :belinda
:object :foo :object :foo
:location [{:x 35 :y 23} :auchencairn :galloway]}]} :location [{:x 35 :y 23} :auchencairn :galloway]}]}
[:dumfries])] [:dumfries])]
(is (= actual expected))) (is (= actual expected)))
(let [expected 7071.067811865475 (let [expected 7071.067811865475
actual (interest-in-location actual (interest-in-location
{:home [{:x 35 :y 23}]} {:home [{:x 35 :y 23}]}
[{:x 34 :y 24}])] [{:x 34 :y 24}])]
(is (= actual expected) (is (= actual expected)
"TODO: 7071.067811865475 is actually a bad answer.")) "TODO: 7071.067811865475 is actually a bad answer."))
(let [expected 0 (let [expected 0
actual (interest-in-location actual (interest-in-location
{:home [{:x 35 :y 23}]} {:home [{:x 35 :y 23}]}
[{:x 34 :y 24000}])] [{:x 34 :y 24000}])]
(is (= actual expected) (is (= actual expected)
"Too far apart (> 10000).")) "Too far apart (> 10000)."))
(let [expected true (let [expected true
actual (interesting-location? actual (interesting-location?
{:knowledge [{:verb :steal {:knowledge [{:verb :steal
:actor :albert :actor :albert
:other :belinda :other :belinda
:object :foo :object :foo
:location [{:x 35 :y 23} :auchencairn :galloway]}]} :location [{:x 35 :y 23} :auchencairn :galloway]}]}
:galloway)] :galloway)]
(is (= actual expected))) (is (= actual expected)))
(let [expected true (let [expected true
actual (interesting-location? actual (interesting-location?
{:knowledge [{:verb :steal {:knowledge [{:verb :steal
:actor :albert :actor :albert
:other :belinda :other :belinda
:object :foo :object :foo
:location [{:x 35 :y 23} :auchencairn :galloway]}]} :location [{:x 35 :y 23} :auchencairn :galloway]}]}
[:galloway :scotland])] [:galloway :scotland])]
(is (= actual expected))) (is (= actual expected)))
(let [expected false (let [expected false
actual (interesting-location? actual (interesting-location?
{:knowledge [{:verb :steal {:knowledge [{:verb :steal
:actor :albert :actor :albert
:other :belinda :other :belinda
:object :foo :object :foo
:location [{:x 35 :y 23} :auchencairn :galloway]}]} :location [{:x 35 :y 23} :auchencairn :galloway]}]}
[:dumfries])] [:dumfries])]
(is (= actual expected))) (is (= actual expected)))
(let [expected true (let [expected true
actual (interesting-location? actual (interesting-location?
{:home [{:x 35 :y 23}]} {:home [{:x 35 :y 23}]}
[{:x 34 :y 24}])] [{:x 34 :y 24}])]
(is (= actual expected))) (is (= actual expected)))
(let [expected false (let [expected false
actual (interesting-location? actual (interesting-location?
{:home [{:x 35 :y 23}]} {:home [{:x 35 :y 23}]}
[{:x 34 :y 240000}])] [{:x 34 :y 240000}])]
(is (= actual expected)))) (is (= actual expected))))
(testing "Degrading locations" (testing "Degrading locations"
(let [expected [:galloway] (let [expected [:galloway]
actual (degrade-location actual (degrade-location
{:home [{0 0} :test-home :galloway]} {:home [{0 0} :test-home :galloway]}
[{-4 55} :auchencairn :galloway])] [{-4 55} :auchencairn :galloway])]
(is (= actual expected))) (is (= actual expected)))
(let [expected nil (let [expected nil
actual (degrade-location actual (degrade-location
{:home [{0 0} :test-home :galloway]} {:home [{0 0} :test-home :galloway]}
[:froboz])] [:froboz])]
(is (= actual expected))))) (is (= actual expected)))))
(deftest inference-tests (deftest inference-tests
(testing "Ability to infer new knowledge from news items: single rule tests" (testing "Ability to infer new knowledge from news items: single rule tests"
(let [expected {:verb :marry, :actor :belinda, :other :adam} (let [expected {:verb :marry, :actor :belinda, :other :adam}
actual (infer {:verb :marry :actor :adam :other :belinda} item {:verb :marry :actor :adam :other :belinda}
{:verb :marry :actor :other :other :actor})] rule {:verb :marry :actor :other :other :actor}
actual (infer item rule)]
(is (= actual expected))) (is (= actual expected)))
(let [expected {:verb :attack, :actor :adam, :other :belinda} (let [expected {:verb :attack, :actor :adam, :other :belinda}
actual (infer {:verb :rape :actor :adam :other :belinda} item {:verb :rape :actor :adam :other :belinda}
{:verb :attack})] rule {:verb :attack}
actual (infer item rule)]
(is (= actual expected))) (is (= actual expected)))
(let [expected {:verb :sex, :actor :belinda, :other :adam} (let [expected {:verb :sex, :actor :belinda, :other :adam}
actual (infer {:verb :rape :actor :adam :other :belinda} item {:verb :rape :actor :adam :other :belinda}
{:verb :sex :actor :other :other :actor})] rule {:verb :sex :actor :other :other :actor}
actual (infer item rule)]
(is (= actual expected)))) (is (= actual expected))))
(testing "Ability to infer new knowledge from news items: all applicable rules" (testing "Ability to infer new knowledge from news items: all applicable rules"
(let [expected #{{:verb :sex, :actor :belinda, :other :adam, :location nil, :nth-hand 1} (let [expected #{{:verb :sex, :actor :belinda, :other :adam, :location :test-home, :nth-hand 1}
{:verb :sex, :actor :adam, :other :belinda, :location nil, :nth-hand 1} {:verb :sex, :actor :adam, :other :belinda, :location :test-home, :nth-hand 1}
{:verb :attack, :actor :adam, :other :belinda, :location nil, :nth-hand 1}} {:verb :attack, :actor :adam, :other :belinda, :location :test-home, :nth-hand 1}}
;; dates will not be and cannot be expected to be equal ;; dates will not be and cannot be expected to be equal
actual (make-all-inferences actual (set (make-all-inferences
{:verb :rape :actor :adam :other :belinda :location :test-home}) {:verb :rape :actor :adam :other :belinda :location :test-home :nth-hand 1}))]
actual' (set (map #(dissoc % :time-stamp) actual))] (is (= actual expected)))))
(is (= actual' expected)))))
(deftest learn-tests (deftest learn-tests
(testing "Learning from an interesting news item." (testing "Learning from an interesting news item."
(let [expected {:home [{0 0} :test-home], (let [expected {:home [{0 0} :test-home]
:knowledge [{:verb :sex, :actor :adam, :other :belinda, :location nil, :nth-hand 1} :knowledge [{:verb :sex, :actor :adam, :other :belinda, :location [:test-home], :nth-hand 1}
{:verb :sex, :actor :belinda, :other :adam, :location nil, :nth-hand 1}]} {:verb :sex, :actor :belinda, :other :adam, :location [:test-home], :nth-hand 1}]}
actual (learn-news-item actual (learn-news-item
{:home [{0, 0} :test-home] :knowledge []} {:home [{0, 0} :test-home] :knowledge []}
{:verb :sex :actor :adam :other :belinda :location [:test-home]}) {:verb :sex :actor :adam :other :belinda :location [:test-home]})]
actual' (assoc actual :knowledge (vec (map #(dissoc % :time-stamp) (:knowledge actual))))] (is (= actual expected)))))
(is (= actual' expected)))))