Lots of new unit tests.

This commit is contained in:
Simon Brooke 2023-04-11 15:18:52 +01:00
parent 01e4572119
commit 7c4d3668a8
26 changed files with 866 additions and 1128 deletions

View file

@ -130,19 +130,19 @@
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;[symbol]
</span><br/>
<span class="partial" title="4 out of 5 forms covered">
<span class="covered" title="5 out of 5 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(:strict&nbsp;*options*)
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
<span class="covered" title="7 out of 7 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info&nbsp;(format&nbsp;&quot;%s&nbsp;ne&nbsp;āfand&nbsp;innan&nbsp;Lisp&nbsp;1.5&quot;&nbsp;symbol)
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
<span class="covered" title="6 out of 6 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;{:type&nbsp;:strict
</span><br/>
<span class="not-tracked" title="0 out of 0 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;:phase&nbsp;:host
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
<span class="covered" title="1 out of 1 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;symbol})))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
@ -283,19 +283,19 @@
<span class="covered" title="4 out of 4 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;path)&nbsp;l
</span><br/>
<span class="partial" title="6 out of 13 forms covered">
<span class="covered" title="13 out of 13 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not&nbsp;(instance?&nbsp;ConsCell&nbsp;l))&nbsp;(throw&nbsp;(ex-info&nbsp;(str&nbsp;&quot;Ne&nbsp;liste:&nbsp;&quot;
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
<span class="covered" title="4 out of 4 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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;&quot;;&nbsp;&quot;&nbsp;(type&nbsp;l))
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
<span class="covered" title="8 out of 8 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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:phase&nbsp;:eval
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;&quot;universal&nbsp;access&nbsp;function&quot;
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
<span class="covered" title="3 out of 3 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;[l&nbsp;path]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
@ -310,19 +310,19 @@
<span class="covered" title="6 out of 6 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\d&nbsp;(uaf&nbsp;(.getCdr&nbsp;l)&nbsp;(butlast&nbsp;path))
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
<span class="covered" title="6 out of 6 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info&nbsp;(str&nbsp;&quot;uaf:&nbsp;unexpected&nbsp;letter&nbsp;in&nbsp;path&nbsp;(only&nbsp;`a`&nbsp;and&nbsp;`d`&nbsp;permitted):&nbsp;&quot;
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
<span class="covered" title="3 out of 3 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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(last&nbsp;path))
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
<span class="covered" title="8 out of 8 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:phase&nbsp;:eval
</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;&quot;universal&nbsp;access&nbsp;function&quot;
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
<span class="covered" title="3 out of 3 forms covered">
107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;[l&nbsp;path]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
@ -568,7 +568,7 @@
<span class="covered" title="1 out of 1 forms covered">
188&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if
</span><br/>
<span class="partial" title="11 out of 13 forms covered">
<span class="partial" title="12 out of 13 forms covered">
189&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
@ -580,7 +580,7 @@
<span class="covered" title="3 out of 3 forms covered">
192&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(symbol?&nbsp;value)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
<span class="covered" title="2 out of 2 forms covered">
193&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;value&nbsp;NIL))
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
@ -619,13 +619,13 @@
<span class="not-covered" title="0 out of 1 forms covered">
205&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;any))))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
<span class="covered" title="3 out of 3 forms covered">
206&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info
</span><br/>
<span class="not-covered" title="0 out of 9 forms covered">
<span class="covered" title="9 out of 9 forms covered">
207&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(str&nbsp;&quot;Un-ġefōg&nbsp;þing&nbsp;in&nbsp;RPLACD:&nbsp;`&quot;&nbsp;value&nbsp;&quot;`&nbsp;(&quot;&nbsp;(type&nbsp;value)&nbsp;&quot;)&quot;)
</span><br/>
<span class="not-covered" title="0 out of 10 forms covered">
<span class="covered" title="10 out of 10 forms covered">
208&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cause&nbsp;:bad-value
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
@ -634,19 +634,19 @@
<span class="not-tracked" title="0 out of 0 forms covered">
210&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:function&nbsp;:rplacd
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
<span class="covered" title="4 out of 4 forms covered">
211&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;(list&nbsp;cell&nbsp;value)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:type&nbsp;:beowulf})))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
<span class="covered" title="3 out of 3 forms covered">
213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info
</span><br/>
<span class="not-covered" title="0 out of 9 forms covered">
<span class="covered" title="9 out of 9 forms covered">
214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(str&nbsp;&quot;Uncynlic&nbsp;miercels&nbsp;in&nbsp;RPLACD:&nbsp;`&quot;&nbsp;cell&nbsp;&quot;`&nbsp;(&quot;&nbsp;(type&nbsp;cell)&nbsp;&quot;)&quot;)
</span><br/>
<span class="not-covered" title="0 out of 10 forms covered">
<span class="covered" title="10 out of 10 forms covered">
215&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{:cause&nbsp;:bad-cell
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
@ -655,7 +655,7 @@
<span class="not-tracked" title="0 out of 0 forms covered">
217&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:detail&nbsp;:rplacd
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
<span class="covered" title="4 out of 4 forms covered">
218&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:args&nbsp;(list&nbsp;cell&nbsp;value)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
@ -682,7 +682,7 @@
<span class="blank" title="0 out of 0 forms covered">
226&nbsp;&nbsp;
</span><br/>
<span class="partial" title="5 out of 36 forms covered">
<span class="covered" title="36 out of 36 forms covered">
227&nbsp;&nbsp;(defmacro&nbsp;NULL
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
@ -691,13 +691,13 @@
<span class="not-tracked" title="0 out of 0 forms covered">
229&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
<span class="covered" title="1 out of 1 forms covered">
230&nbsp;&nbsp;&nbsp;&nbsp;`(if&nbsp;(=&nbsp;~x&nbsp;NIL)&nbsp;T&nbsp;F))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
231&nbsp;&nbsp;
</span><br/>
<span class="partial" title="5 out of 36 forms covered">
<span class="covered" title="36 out of 36 forms covered">
232&nbsp;&nbsp;(defmacro&nbsp;NILP
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
@ -706,7 +706,7 @@
<span class="not-tracked" title="0 out of 0 forms covered">
234&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
<span class="covered" title="1 out of 1 forms covered">
235&nbsp;&nbsp;&nbsp;&nbsp;`(if&nbsp;(=&nbsp;~x&nbsp;NIL)&nbsp;T&nbsp;NIL))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
@ -847,13 +847,13 @@
<span class="not-tracked" title="0 out of 0 forms covered">
281&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(println&nbsp;&quot;&nbsp;&nbsp;filtered:&nbsp;&quot;&nbsp;(seq&nbsp;(filter&nbsp;#{F&nbsp;NIL}&nbsp;args)))
</span><br/>
<span class="partial" title="5 out of 7 forms covered">
<span class="partial" title="6 out of 7 forms covered">
282&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(=&nbsp;NIL&nbsp;args)&nbsp;T
</span><br/>
<span class="covered" title="14 out of 14 forms covered">
283&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(seq?&nbsp;args)&nbsp;(if&nbsp;(seq&nbsp;(filter&nbsp;#{F&nbsp;NIL}&nbsp;args))&nbsp;F&nbsp;T)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
<span class="covered" title="1 out of 1 forms covered">
284&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;T))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
@ -889,13 +889,13 @@
<span class="not-tracked" title="0 out of 0 forms covered">
295&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(println&nbsp;&quot;&nbsp;&nbsp;filtered:&nbsp;&quot;&nbsp;(seq&nbsp;(remove&nbsp;#{F&nbsp;NIL}&nbsp;args)))
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
<span class="partial" title="6 out of 7 forms covered">
296&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(=&nbsp;NIL&nbsp;args)&nbsp;F
</span><br/>
<span class="not-covered" title="0 out of 14 forms covered">
<span class="covered" title="14 out of 14 forms covered">
297&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(seq?&nbsp;args)&nbsp;(if&nbsp;(seq&nbsp;(remove&nbsp;#{F&nbsp;NIL}&nbsp;args))&nbsp;T&nbsp;F)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
<span class="covered" title="1 out of 1 forms covered">
298&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;F))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
@ -1078,7 +1078,7 @@
<span class="covered" title="5 out of 5 forms covered">
358&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[p&nbsp;(apply&nbsp;*&nbsp;args)]
</span><br/>
<span class="partial" title="5 out of 7 forms covered">
<span class="covered" title="7 out of 7 forms covered">
359&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(integer?&nbsp;p)&nbsp;p&nbsp;(float&nbsp;p))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
@ -1093,7 +1093,7 @@
<span class="covered" title="4 out of 4 forms covered">
363&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[d&nbsp;(-&nbsp;x&nbsp;y)]
</span><br/>
<span class="partial" title="5 out of 7 forms covered">
<span class="covered" title="7 out of 7 forms covered">
364&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(integer?&nbsp;d)&nbsp;d&nbsp;(float&nbsp;d))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
@ -1153,7 +1153,7 @@
<span class="not-tracked" title="0 out of 0 forms covered">
383&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
<span class="covered" title="2 out of 2 forms covered">
384&nbsp;&nbsp;&nbsp;&nbsp;(dec&nbsp;x))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
@ -1165,7 +1165,7 @@
<span class="not-tracked" title="0 out of 0 forms covered">
387&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
<span class="covered" title="6 out of 6 forms covered">
388&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(integer?&nbsp;x)&nbsp;T&nbsp;F))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
@ -1189,7 +1189,7 @@
<span class="not-tracked" title="0 out of 0 forms covered">
395&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;y]
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
<span class="covered" title="6 out of 6 forms covered">
396&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(&lt;&nbsp;x&nbsp;y)&nbsp;T&nbsp;F))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
@ -1201,7 +1201,7 @@
<span class="not-tracked" title="0 out of 0 forms covered">
399&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;y]
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
<span class="covered" title="6 out of 6 forms covered">
400&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(&gt;&nbsp;x&nbsp;y)&nbsp;T&nbsp;F))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
@ -1237,7 +1237,7 @@
<span class="not-tracked" title="0 out of 0 forms covered">
411&nbsp;&nbsp;&nbsp;&nbsp;[&amp;&nbsp;args]
</span><br/>
<span class="not-covered" title="0 out of 14 forms covered">
<span class="covered" title="14 out of 14 forms covered">
412&nbsp;&nbsp;&nbsp;&nbsp;(throw&nbsp;(ex-info&nbsp;&quot;LISP&nbsp;STÆFLEAHTER&quot;&nbsp;{:args&nbsp;args
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
@ -1249,7 +1249,7 @@
<span class="not-tracked" title="0 out of 0 forms covered">
415&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:type&nbsp;:lisp
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
<span class="covered" title="8 out of 8 forms covered">
416&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:code&nbsp;(or&nbsp;(first&nbsp;args)&nbsp;&#x27;A1)})))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
@ -1334,7 +1334,7 @@
443&nbsp;&nbsp;&nbsp;&nbsp;[target&nbsp;plist]
</span><br/>
<span class="covered" title="13 out of 13 forms covered">
444&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(and&nbsp;(instance?&nbsp;ConsCell&nbsp;plist)(even?&nbsp;(count&nbsp;plist)))
444&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(and&nbsp;(instance?&nbsp;ConsCell&nbsp;plist)&nbsp;(even?&nbsp;(count&nbsp;plist)))
</span><br/>
<span class="partial" title="6 out of 7 forms covered">
445&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(=&nbsp;plist&nbsp;NIL)&nbsp;NIL
@ -1558,215 +1558,218 @@
<span class="not-tracked" title="0 out of 0 forms covered">
518&nbsp;&nbsp;&nbsp;&nbsp;[a-list&nbsp;indicator]
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
519&nbsp;&nbsp;&nbsp;&nbsp;(map
<span class="not-covered" title="0 out of 2 forms covered">
519&nbsp;&nbsp;&nbsp;&nbsp;(doall
</span><br/>
<span class="not-covered" title="0 out of 9 forms covered">
520&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(PUT&nbsp;(CAR&nbsp;%)&nbsp;indicator&nbsp;(CDR&nbsp;%))
<span class="not-covered" title="0 out of 3 forms covered">
520&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 14 forms covered">
521&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(when&nbsp;(PUT&nbsp;(CAR&nbsp;%)&nbsp;indicator&nbsp;(CDR&nbsp;%))&nbsp;(CAR&nbsp;%))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
521&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a-list))
522&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a-list)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
522&nbsp;&nbsp;
523&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
523&nbsp;&nbsp;(defn&nbsp;DEFINE
524&nbsp;&nbsp;(defn&nbsp;DEFINE
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
524&nbsp;&nbsp;&nbsp;&nbsp;&quot;Bootstrap-only&nbsp;version&nbsp;of&nbsp;`DEFINE`&nbsp;which,&nbsp;post&nbsp;boostrap,&nbsp;can&nbsp;be&nbsp;overwritten&nbsp;
525&nbsp;&nbsp;&nbsp;&nbsp;&quot;Bootstrap-only&nbsp;version&nbsp;of&nbsp;`DEFINE`&nbsp;which,&nbsp;post&nbsp;boostrap,&nbsp;can&nbsp;be&nbsp;overwritten&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
525&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;LISP.&nbsp;
526&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;LISP.&nbsp;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
526&nbsp;&nbsp;
527&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
527&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;single&nbsp;argument&nbsp;to&nbsp;`DEFINE`&nbsp;should&nbsp;be&nbsp;an&nbsp;association&nbsp;list&nbsp;of&nbsp;symbols&nbsp;to
528&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;single&nbsp;argument&nbsp;to&nbsp;`DEFINE`&nbsp;should&nbsp;be&nbsp;an&nbsp;association&nbsp;list&nbsp;of&nbsp;symbols&nbsp;to
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
528&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lambda&nbsp;functions.&nbsp;See&nbsp;page&nbsp;58&nbsp;of&nbsp;the&nbsp;manual.&quot;
529&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lambda&nbsp;functions.&nbsp;See&nbsp;page&nbsp;58&nbsp;of&nbsp;the&nbsp;manual.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
529&nbsp;&nbsp;&nbsp;&nbsp;[a-list]
530&nbsp;&nbsp;&nbsp;&nbsp;[a-list]
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
530&nbsp;&nbsp;&nbsp;&nbsp;(DEFLIST&nbsp;a-list&nbsp;&#x27;EXPR))
531&nbsp;&nbsp;&nbsp;&nbsp;(DEFLIST&nbsp;a-list&nbsp;&#x27;EXPR))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
531&nbsp;&nbsp;
532&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
532&nbsp;&nbsp;(defn&nbsp;SET
533&nbsp;&nbsp;(defn&nbsp;SET
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
533&nbsp;&nbsp;&nbsp;&nbsp;&quot;Implementation&nbsp;of&nbsp;SET&nbsp;in&nbsp;Clojure.&nbsp;Add&nbsp;to&nbsp;the&nbsp;`oblist`&nbsp;a&nbsp;binding&nbsp;of&nbsp;the
534&nbsp;&nbsp;&nbsp;&nbsp;&quot;Implementation&nbsp;of&nbsp;SET&nbsp;in&nbsp;Clojure.&nbsp;Add&nbsp;to&nbsp;the&nbsp;`oblist`&nbsp;a&nbsp;binding&nbsp;of&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
534&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;of&nbsp;`var`&nbsp;to&nbsp;the&nbsp;value&nbsp;of&nbsp;`val`.&nbsp;NOTE&nbsp;WELL:&nbsp;this&nbsp;is&nbsp;not&nbsp;SETQ!&quot;
535&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;of&nbsp;`var`&nbsp;to&nbsp;the&nbsp;value&nbsp;of&nbsp;`val`.&nbsp;NOTE&nbsp;WELL:&nbsp;this&nbsp;is&nbsp;not&nbsp;SETQ!&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
535&nbsp;&nbsp;&nbsp;&nbsp;[symbol&nbsp;val]
536&nbsp;&nbsp;&nbsp;&nbsp;[symbol&nbsp;val]
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
536&nbsp;&nbsp;&nbsp;&nbsp;(PUT&nbsp;symbol&nbsp;&#x27;APVAL&nbsp;val))
537&nbsp;&nbsp;&nbsp;&nbsp;(PUT&nbsp;symbol&nbsp;&#x27;APVAL&nbsp;val))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
537&nbsp;&nbsp;
538&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
538&nbsp;&nbsp;;;;;&nbsp;TRACE&nbsp;and&nbsp;friends&nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
539&nbsp;&nbsp;;;;;&nbsp;TRACE&nbsp;and&nbsp;friends&nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
539&nbsp;&nbsp;
540&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
540&nbsp;&nbsp;(def&nbsp;traced-symbols
541&nbsp;&nbsp;(def&nbsp;traced-symbols
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
541&nbsp;&nbsp;&nbsp;&nbsp;&quot;Symbols&nbsp;currently&nbsp;being&nbsp;traced.&quot;
542&nbsp;&nbsp;&nbsp;&nbsp;&quot;Symbols&nbsp;currently&nbsp;being&nbsp;traced.&quot;
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
542&nbsp;&nbsp;&nbsp;&nbsp;(atom&nbsp;#{}))
543&nbsp;&nbsp;&nbsp;&nbsp;(atom&nbsp;#{}))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
543&nbsp;&nbsp;
544&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
544&nbsp;&nbsp;(defn&nbsp;traced?
545&nbsp;&nbsp;(defn&nbsp;traced?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
545&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;iff&nbsp;`s`&nbsp;is&nbsp;a&nbsp;symbol&nbsp;currently&nbsp;being&nbsp;traced,&nbsp;else&nbsp;`nil`.&quot;
546&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;iff&nbsp;`s`&nbsp;is&nbsp;a&nbsp;symbol&nbsp;currently&nbsp;being&nbsp;traced,&nbsp;else&nbsp;`nil`.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
546&nbsp;&nbsp;&nbsp;&nbsp;[s]
547&nbsp;&nbsp;&nbsp;&nbsp;[s]
</span><br/>
<span class="partial" title="7 out of 8 forms covered">
547&nbsp;&nbsp;&nbsp;&nbsp;(try&nbsp;(contains?&nbsp;@traced-symbols&nbsp;s)
548&nbsp;&nbsp;&nbsp;&nbsp;(try&nbsp;(contains?&nbsp;@traced-symbols&nbsp;s)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
548&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Throwable&nbsp;_&nbsp;nil)))
549&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Throwable&nbsp;_&nbsp;nil)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
549&nbsp;&nbsp;
550&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
550&nbsp;&nbsp;(defn&nbsp;TRACE
551&nbsp;&nbsp;(defn&nbsp;TRACE
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
551&nbsp;&nbsp;&nbsp;&nbsp;&quot;Add&nbsp;this&nbsp;`s`&nbsp;to&nbsp;the&nbsp;set&nbsp;of&nbsp;symbols&nbsp;currently&nbsp;being&nbsp;traced.&nbsp;If&nbsp;`s`
552&nbsp;&nbsp;&nbsp;&nbsp;&quot;Add&nbsp;this&nbsp;`s`&nbsp;to&nbsp;the&nbsp;set&nbsp;of&nbsp;symbols&nbsp;currently&nbsp;being&nbsp;traced.&nbsp;If&nbsp;`s`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
552&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;not&nbsp;a&nbsp;symbol&nbsp;or&nbsp;sequence&nbsp;of&nbsp;symbols,&nbsp;does&nbsp;nothing.&quot;
553&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;not&nbsp;a&nbsp;symbol&nbsp;or&nbsp;sequence&nbsp;of&nbsp;symbols,&nbsp;does&nbsp;nothing.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
553&nbsp;&nbsp;&nbsp;&nbsp;[s]
554&nbsp;&nbsp;&nbsp;&nbsp;[s]
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
554&nbsp;&nbsp;&nbsp;&nbsp;(swap!&nbsp;traced-symbols
555&nbsp;&nbsp;&nbsp;&nbsp;(swap!&nbsp;traced-symbols
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
555&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(cond
556&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(cond
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
556&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(symbol?&nbsp;s)&nbsp;(conj&nbsp;%&nbsp;s)
557&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(symbol?&nbsp;s)&nbsp;(conj&nbsp;%&nbsp;s)
</span><br/>
<span class="not-covered" title="0 out of 17 forms covered">
557&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(seq?&nbsp;s)&nbsp;(every?&nbsp;symbol?&nbsp;s))&nbsp;(union&nbsp;%&nbsp;(set&nbsp;s))
558&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(seq?&nbsp;s)&nbsp;(every?&nbsp;symbol?&nbsp;s))&nbsp;(union&nbsp;%&nbsp;(set&nbsp;s))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
558&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;%)))
559&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;%)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
559&nbsp;&nbsp;
560&nbsp;&nbsp;
</span><br/>
<span class="partial" title="1 out of 3 forms covered">
560&nbsp;&nbsp;(defn&nbsp;UNTRACE
561&nbsp;&nbsp;(defn&nbsp;UNTRACE
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
561&nbsp;&nbsp;&nbsp;&nbsp;&quot;Remove&nbsp;this&nbsp;`s`&nbsp;from&nbsp;the&nbsp;set&nbsp;of&nbsp;symbols&nbsp;currently&nbsp;being&nbsp;traced.&nbsp;If&nbsp;`s`
562&nbsp;&nbsp;&nbsp;&nbsp;&quot;Remove&nbsp;this&nbsp;`s`&nbsp;from&nbsp;the&nbsp;set&nbsp;of&nbsp;symbols&nbsp;currently&nbsp;being&nbsp;traced.&nbsp;If&nbsp;`s`
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
562&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;not&nbsp;a&nbsp;symbol&nbsp;or&nbsp;sequence&nbsp;of&nbsp;symbols,&nbsp;does&nbsp;nothing.&quot;
563&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;not&nbsp;a&nbsp;symbol&nbsp;or&nbsp;sequence&nbsp;of&nbsp;symbols,&nbsp;does&nbsp;nothing.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
563&nbsp;&nbsp;&nbsp;&nbsp;[s]
564&nbsp;&nbsp;&nbsp;&nbsp;[s]
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
564&nbsp;&nbsp;&nbsp;&nbsp;(cond
565&nbsp;&nbsp;&nbsp;&nbsp;(cond
</span><br/>
<span class="not-covered" title="0 out of 16 forms covered">
565&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(symbol?&nbsp;s)&nbsp;(swap!&nbsp;traced-symbols&nbsp;#(set&nbsp;(remove&nbsp;(fn&nbsp;[x]&nbsp;(=&nbsp;s&nbsp;x))&nbsp;%)))
566&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(symbol?&nbsp;s)&nbsp;(swap!&nbsp;traced-symbols&nbsp;#(set&nbsp;(remove&nbsp;(fn&nbsp;[x]&nbsp;(=&nbsp;s&nbsp;x))&nbsp;%)))
</span><br/>
<span class="not-covered" title="0 out of 15 forms covered">
566&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(seq?&nbsp;s)&nbsp;(every?&nbsp;symbol?&nbsp;s))&nbsp;(map&nbsp;UNTRACE&nbsp;s))
567&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(seq?&nbsp;s)&nbsp;(every?&nbsp;symbol?&nbsp;s))&nbsp;(map&nbsp;UNTRACE&nbsp;s))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
567&nbsp;&nbsp;&nbsp;&nbsp;@traced-symbols)
568&nbsp;&nbsp;&nbsp;&nbsp;@traced-symbols)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
568&nbsp;&nbsp;
569&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
569&nbsp;&nbsp;;;;;&nbsp;Extensions&nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
570&nbsp;&nbsp;;;;;&nbsp;Extensions&nbsp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
570&nbsp;&nbsp;
571&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
571&nbsp;&nbsp;(defn&nbsp;DOC
572&nbsp;&nbsp;(defn&nbsp;DOC
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
572&nbsp;&nbsp;&nbsp;&nbsp;&quot;Open&nbsp;the&nbsp;page&nbsp;for&nbsp;this&nbsp;`symbol`&nbsp;in&nbsp;the&nbsp;Lisp&nbsp;1.5&nbsp;manual,&nbsp;if&nbsp;known,&nbsp;in&nbsp;the&nbsp;
573&nbsp;&nbsp;&nbsp;&nbsp;&quot;Open&nbsp;the&nbsp;page&nbsp;for&nbsp;this&nbsp;`symbol`&nbsp;in&nbsp;the&nbsp;Lisp&nbsp;1.5&nbsp;manual,&nbsp;if&nbsp;known,&nbsp;in&nbsp;the&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
573&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;web&nbsp;browser.
574&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;web&nbsp;browser.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
574&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
575&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
575&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;this&nbsp;is&nbsp;an&nbsp;extension&nbsp;function,&nbsp;not&nbsp;available&nbsp;in&nbsp;strct&nbsp;mode.&quot;
576&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;this&nbsp;is&nbsp;an&nbsp;extension&nbsp;function,&nbsp;not&nbsp;available&nbsp;in&nbsp;strct&nbsp;mode.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
576&nbsp;&nbsp;&nbsp;&nbsp;[symbol]
577&nbsp;&nbsp;&nbsp;&nbsp;[symbol]
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
577&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(lax?&nbsp;&#x27;DOC)
578&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(lax?&nbsp;&#x27;DOC)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
578&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(open-doc&nbsp;symbol)))
579&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(open-doc&nbsp;symbol)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
579&nbsp;&nbsp;
580&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
580&nbsp;&nbsp;(defn&nbsp;CONSP
581&nbsp;&nbsp;(defn&nbsp;CONSP
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
581&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`T`&nbsp;if&nbsp;object&nbsp;`o`&nbsp;is&nbsp;a&nbsp;cons&nbsp;cell,&nbsp;else&nbsp;`F`.
582&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`T`&nbsp;if&nbsp;object&nbsp;`o`&nbsp;is&nbsp;a&nbsp;cons&nbsp;cell,&nbsp;else&nbsp;`F`.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
582&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
583&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
583&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;this&nbsp;is&nbsp;an&nbsp;extension&nbsp;function,&nbsp;not&nbsp;available&nbsp;in&nbsp;strct&nbsp;mode.&nbsp;
584&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;this&nbsp;is&nbsp;an&nbsp;extension&nbsp;function,&nbsp;not&nbsp;available&nbsp;in&nbsp;strct&nbsp;mode.&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
584&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;believe&nbsp;that&nbsp;Lisp&nbsp;1.5&nbsp;did&nbsp;not&nbsp;have&nbsp;any&nbsp;mechanism&nbsp;for&nbsp;testing&nbsp;whether&nbsp;an
585&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;believe&nbsp;that&nbsp;Lisp&nbsp;1.5&nbsp;did&nbsp;not&nbsp;have&nbsp;any&nbsp;mechanism&nbsp;for&nbsp;testing&nbsp;whether&nbsp;an
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
585&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argument&nbsp;was,&nbsp;or&nbsp;was&nbsp;not,&nbsp;a&nbsp;cons&nbsp;cell.&quot;
586&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;argument&nbsp;was,&nbsp;or&nbsp;was&nbsp;not,&nbsp;a&nbsp;cons&nbsp;cell.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
586&nbsp;&nbsp;&nbsp;&nbsp;[o]
587&nbsp;&nbsp;&nbsp;&nbsp;[o]
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
587&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(lax?&nbsp;&#x27;CONSP)
588&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(lax?&nbsp;&#x27;CONSP)
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
588&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(instance?&nbsp;ConsCell&nbsp;o)&nbsp;&#x27;T&nbsp;&#x27;F)))
589&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(instance?&nbsp;ConsCell&nbsp;o)&nbsp;&#x27;T&nbsp;&#x27;F)))
</span><br/>
</body>
</html>

View file

@ -67,20 +67,20 @@
</tr>
<tr>
<td><a href="beowulf/host.clj.html">beowulf.host</a></td><td class="with-bar"><div class="covered"
style="width:46.61776691116545%;
float:left;"> 1144 </div><div class="not-covered"
style="width:53.38223308883455%;
float:left;"> 1310 </div></td>
<td class="with-number">46.62 %</td>
style="width:56.44047135310849%;
float:left;"> 1389 </div><div class="not-covered"
style="width:43.55952864689151%;
float:left;"> 1072 </div></td>
<td class="with-number">56.44 %</td>
<td class="with-bar"><div class="covered"
style="width:61.97718631178707%;
float:left;"> 163 </div><div class="partial"
style="width:14.068441064638783%;
float:left;"> 37 </div><div class="not-covered"
style="width:23.954372623574145%;
float:left;"> 63 </div></td>
<td class="with-number">76.05 %</td>
<td class="with-number">588</td><td class="with-number">67</td><td class="with-number">263</td>
style="width:75.37878787878788%;
float:left;"> 199 </div><div class="partial"
style="width:12.121212121212121%;
float:left;"> 32 </div><div class="not-covered"
style="width:12.5%;
float:left;"> 33 </div></td>
<td class="with-number">87.50 %</td>
<td class="with-number">589</td><td class="with-number">67</td><td class="with-number">264</td>
</tr>
<tr>
<td><a href="beowulf/interop.clj.html">beowulf.interop</a></td><td class="with-bar"><div class="covered"
@ -236,9 +236,9 @@
</tr>
<tr><td>Totals:</td>
<td class="with-bar"></td>
<td class="with-number">65.64 %</td>
<td class="with-number">68.60 %</td>
<td class="with-bar"></td>
<td class="with-number">75.70 %</td>
<td class="with-number">77.76 %</td>
</tr>
</table>
</body>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,17 +1,19 @@
<!DOCTYPE html PUBLIC ""
"">
<html><head><meta charset="UTF-8" /><title>Further Reading</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><link rel="icon" type="image/x-icon" href="../img/beowulf_logo_favicon.png" /></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Beowulf</span> <span class="project-version">0.3.1-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 current"><a href="further_reading.html"><div class="inner"><span>Further Reading</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>beowulf</span></div></a></li><li class="depth-1 "><a href="mexpr.html"><div class="inner"><span>Interpreting M-Expressions</span></div></a></li><li class="depth-1 "><a href="values.html"><div class="inner"><span>The properties of the system, and their values</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>beowulf</span></div></div></li><li class="depth-2 branch"><a href="beowulf.bootstrap.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>bootstrap</span></div></a></li><li class="depth-2 branch"><a href="beowulf.cons-cell.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cons-cell</span></div></a></li><li class="depth-2 branch"><a href="beowulf.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-2 branch"><a href="beowulf.gendoc.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>gendoc</span></div></a></li><li class="depth-2 branch"><a href="beowulf.host.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>host</span></div></a></li><li class="depth-2 branch"><a href="beowulf.interop.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>interop</span></div></a></li><li class="depth-2 branch"><a href="beowulf.io.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>io</span></div></a></li><li class="depth-2 branch"><a href="beowulf.manual.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>manual</span></div></a></li><li class="depth-2 branch"><a href="beowulf.oblist.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>oblist</span></div></a></li><li class="depth-2 branch"><a href="beowulf.read.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>read</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>reader</span></div></div></li><li class="depth-3 branch"><a href="beowulf.reader.char-reader.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>char-reader</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.generate.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>generate</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.macros.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>macros</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="beowulf.reader.simplify.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>simplify</span></div></a></li><li class="depth-2"><a href="beowulf.scratch.html"><div class="inner"><span class="tree" style="top: -176px;"><span class="top" style="height: 185px;"></span><span class="bottom"></span></span><span>scratch</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#further-reading" name="further-reading"></a>Further Reading</h1>
<html><head><meta charset="UTF-8" /><title>Further Reading</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><link rel="icon" type="image/x-icon" href="../img/beowulf_logo_favicon.png" /></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Beowulf</span> <span class="project-version">0.3.1-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 current"><a href="further_reading.html"><div class="inner"><span>Further Reading</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>beowulf</span></div></a></li><li class="depth-1 "><a href="mexpr.html"><div class="inner"><span>Interpreting M-Expressions</span></div></a></li><li class="depth-1 "><a href="values.html"><div class="inner"><span>The properties of the system, and their values</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>beowulf</span></div></div></li><li class="depth-2 branch"><a href="beowulf.bootstrap.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>bootstrap</span></div></a></li><li class="depth-2 branch"><a href="beowulf.cons-cell.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>cons-cell</span></div></a></li><li class="depth-2 branch"><a href="beowulf.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-2 branch"><a href="beowulf.gendoc.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>gendoc</span></div></a></li><li class="depth-2 branch"><a href="beowulf.host.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>host</span></div></a></li><li class="depth-2 branch"><a href="beowulf.interop.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>interop</span></div></a></li><li class="depth-2 branch"><a href="beowulf.io.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>io</span></div></a></li><li class="depth-2 branch"><a href="beowulf.manual.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>manual</span></div></a></li><li class="depth-2 branch"><a href="beowulf.oblist.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>oblist</span></div></a></li><li class="depth-2 branch"><a href="beowulf.read.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>read</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>reader</span></div></div></li><li class="depth-3 branch"><a href="beowulf.reader.char-reader.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>char-reader</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.generate.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>generate</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.macros.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>macros</span></div></a></li><li class="depth-3 branch"><a href="beowulf.reader.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="beowulf.reader.simplify.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>simplify</span></div></a></li><li class="depth-2"><a href="beowulf.scratch.html"><div class="inner"><span class="tree" style="top: -176px;"><span class="top" style="height: 185px;"></span><span class="bottom"></span></span><span>scratch</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#further-reading" id="further-reading"></a>Further Reading</h1>
<ol>
<li><a href="http://bitsavers.org/pdf/mit/computer_center/Coding_for_the_MIT-IBM_704_Computer_Oct57.pdf">CODING for the MIT-IBM 704 COMPUTER, October 1957</a> This paper is not about Lisp. But it is about the particular individual computer on which Lisp was first implemented, and it is written in part by members of the Lisp team. I have found it useful in understanding the software environment in which, and the constraints under which, Lisp was written.</li>
<li><a href="https://www.softwarepreservation.org/projects/LISP/MIT/AIM-001.pdf">MIT AI Memo 1, John McCarthy, September 1958</a> This is, as far as I can find, the earliest specification document of the Lisp project.</li>
<li><a href="https://bitsavers.org/pdf/mit/rle_lisp/LISP_I_Programmers_Manual_Mar60.pdf">Lisp 1 Programmers Manual, Phyllis Fox, March 1960</a></li>
<li><a href="https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf#page=81">Lisp 1.5 Programmers Manual, Michael I. Levin, August 1962</a> This book is essential reading: it documents in some detail the first fully realised Lisp language system.</li>
<li><a href="https://dl.acm.org/doi/pdf/10.1145/800055.802047#page=3">Early LISP History (1956 - 1959), Herbert Stoyan, August 1984</a></li>
<li>
<p><a href="http://www.paulgraham.com/rootsoflisp.html">The Roots of Lisp, Paul Graham, 2001</a></p></li>
<li>
<p><a href="http://www.paulgraham.com/icad.html">The Revenge of the Nerds, Paul Graham, 2002</a> This is mainly about why to use Lisp as a language for modern commercial software, but has useful insights into where it comes from.</p>
<blockquote>
<p>So the short explanation of why this 1950s language is not obsolete is that it was not technology but math, and math doesnt get stale.</p>
</blockquote></li>
</ol></div></div></div></body></html>
<li><a href="http://bitsavers.org/pdf/mit/computer_center/Coding_for_the_MIT-IBM_704_Computer_Oct57.pdf">CODING for the MIT-IBM 704 COMPUTER, October 1957</a> This paper is not about Lisp. But it is about the particular individual computer on which Lisp was first implemented, and it is written in part by members of the Lisp team. I have found it useful in understanding the software environment in which, and the constraints under which, Lisp was written.</li>
<li><a href="https://www.softwarepreservation.org/projects/LISP/MIT/AIM-001.pdf">MIT AI Memo 1, John McCarthy, September 1958</a> This is, as far as I can find, the earliest specification document of the Lisp project.</li>
<li><a href="https://bitsavers.org/pdf/mit/rle_lisp/LISP_I_Programmers_Manual_Mar60.pdf">Lisp 1 Programmers Manual, Phyllis Fox, March 1960</a></li>
<li><a href="https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf#page=81">Lisp 1.5 Programmers Manual, Michael I. Levin, August 1962</a> This book is essential reading: it documents in some detail the first fully realised Lisp language system.</li>
<li><a href="https://dl.acm.org/doi/pdf/10.1145/800055.802047#page=3">Early LISP History (1956 - 1959), Herbert Stoyan, August 1984</a></li>
<li>
<p><a href="http://www.paulgraham.com/rootsoflisp.html">The Roots of Lisp, Paul Graham, 2001</a></p>
</li>
<li><a href="http://www.paulgraham.com/icad.html">The Revenge of the Nerds, Paul Graham, 2002</a> This is mainly about why to use Lisp as a language for modern commercial software, but has useful insights into where it comes from.
<blockquote>
<p>So the short explanation of why this 1950s language is not obsolete is that it was not technology but math, and math doesnt get stale.</p>
</blockquote>
</li>
</ol>
</div></div></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -19,11 +19,12 @@
[environ "1.2.0"]
[instaparse "1.4.12"]
[org.jline/jline "3.23.0"]
[rhizome "0.2.9"] ;; not needed in production builds
[com.github.seancorfield/expectations "2.0.165"]
;; [rhizome "0.2.9"] ;; not needed in production builds
]
:main beowulf.core
:plugins [[lein-cloverage "1.2.2"]
[lein-codox "0.10.7"]
[lein-codox "0.10.8"]
[lein-environ "1.1.0"]]
:profiles {:jar {:aot :all}
:uberjar {:aot :all}

View file

@ -441,7 +441,7 @@
recurse down the list two entries at a time to avoid confusing names
with values."
[target plist]
(if (and (instance? ConsCell plist)(even? (count plist)))
(if (and (instance? ConsCell plist) (even? (count plist)))
(cond (= plist NIL) NIL
(= (first plist) target) plist
:else (hit-or-miss-assoc target (CDDR plist)))
@ -516,9 +516,10 @@
`indicator` of the symbol which is the first element of the pair to the
value which is the second element of the pair. See page 58 of the manual."
[a-list indicator]
(map
#(PUT (CAR %) indicator (CDR %))
a-list))
(doall
(map
#(when (PUT (CAR %) indicator (CDR %)) (CAR %))
a-list)))
(defn DEFINE
"Bootstrap-only version of `DEFINE` which, post boostrap, can be overwritten

View file

@ -1,11 +1,14 @@
(ns beowulf.host-test
(:require [beowulf.cons-cell :refer [F make-beowulf-list T]]
[beowulf.host :refer [CDR DIFFERENCE GENSYM GET NUMBERP PLUS PUT
RPLACA RPLACD TIMES]]
(:require [beowulf.cons-cell :refer [F make-beowulf-list make-cons-cell T]]
[beowulf.host :refer [ADD1 AND CADDDR CAR CDR DEFINE DIFFERENCE
ERROR FIXP GREATERP lax? LESSP NILP NULL
NUMBERP OR PLUS RPLACA RPLACD SUB1 TIMES uaf]]
[beowulf.io :refer [SYSIN]]
[beowulf.oblist :refer [NIL]]
[beowulf.oblist :refer [*options* NIL]]
[beowulf.read :refer [gsp]]
[clojure.test :refer [deftest is testing use-fixtures]]))
[clojure.test :refer [deftest is testing use-fixtures]]
[expectations.clojure.test
:refer [defexpect expect more-> more-of]]))
(use-fixtures :once (fn [f]
(try (when (SYSIN "resources/lisp1.5.lsp")
@ -20,31 +23,44 @@
(deftest destructive-change-test
(testing "RPLACA"
(let
[l (make-beowulf-list '(A B C D E))
target (CDR l)
expected "(A F C D E)"
actual (do (RPLACA target 'F) (print-str l))]
[l (make-beowulf-list '(A B C D E))
target (CDR l)
expected "(A F C D E)"
actual (do (RPLACA target 'F) (print-str l))]
(is (= actual expected)))
(is (thrown-with-msg?
Exception
#"Un-ġefōg þing in RPLACA.*"
(RPLACA (make-beowulf-list '(A B C D E)) "F"))
Exception
#"Un-ġefōg þing in RPLACA.*"
(RPLACA (make-beowulf-list '(A B C D E)) "F"))
"You can't represent a string in Lisp 1.5")
(is (thrown-with-msg?
Exception
#"Uncynlic miercels in RPLACA.*"
(RPLACA '(A B C D E) 'F))
"You can't RPLACA into anything which isn't a MutableSequence.")
)
(testing "RPLACA"
Exception
#"Uncynlic miercels in RPLACA.*"
(RPLACA '(A B C D E) 'F))
"You can't RPLACA into anything which isn't a MutableSequence."))
(testing "RPLACD"
(let
[l (make-beowulf-list '(A B C D E))
target (CDR l)
expected "(A B . F)"
actual (do (RPLACD target 'F) (print-str l))]
[l (make-beowulf-list '(A B C D E))
target (CDR l)
expected "(A B . F)"
actual (do (RPLACD target 'F) (print-str l))]
(is (= actual expected)))
)
)
(let
[l (make-beowulf-list '(A B C D E))
target (CDR l)
expected "(A B)"
actual (do (RPLACD target NIL) (print-str l))]
(is (= actual expected)))
(is (thrown-with-msg?
Exception
#"Un-ġefōg þing in RPLACD.*"
(RPLACD (make-beowulf-list '(A B C D E)) :a))
"You can't represent a keyword in Lisp 1.5")
(is (thrown-with-msg?
Exception
#"Uncynlic miercels in RPLACD.*"
(RPLACD "ABCDE" 'F))
"You can't RPLACD into anything which isn't a MutableSequence.")))
(deftest numberp-tests
(testing "NUMBERP"
@ -71,13 +87,171 @@
(let [expected 3.5
actual (PLUS 1.25 9/4)]
(is (= actual expected))
(is (float? actual)))
(let [expected 3.5
actual (PLUS -2.5 6)]
(is (= actual expected) "Negative numbers are cool.")
(is (float? actual))))
(testing "TIMES"
(let [expected 6
actual (TIMES 2 3)]
(is (= actual expected)))
(let [expected 2.5
actual (TIMES 5 0.5)]
(is (= actual expected))))
(testing "DIFFERENCE"
(let [expected -1
actual (DIFFERENCE 1 2)]
(is (= actual expected)))
(let [expected (float 0.1)
actual (DIFFERENCE -0.1 -0.2)]
(is (= actual expected))))
(testing "ADD1"
(let [expected -1
actual (ADD1 -2)]
(is (= actual expected)))
(let [expected (float 3.5)
actual (ADD1 2.5)]
(is (= actual expected))))
(testing "SUB1"
(let [expected -3
actual (SUB1 -2)]
(is (= actual expected)))
(let [expected (float 1.5)
actual (SUB1 2.5)]
(is (= actual expected)))))
(deftest laxness
(testing "lax"
(let [expected true
actual (lax? 'Test)]
(is (= actual expected) "Pass, the Queen's Cat, and all's well")))
(testing "strict"
(binding [*options* (assoc *options* :strict true)]
(is (thrown-with-msg? Exception #".*ne āfand innan Lisp 1.5" (lax? 'Test))))))
(deftest access-tests
(testing "primitive access"
(let [cell (make-cons-cell 1 7)]
(let [expected 1
actual (CAR cell)]
(is (= actual expected)))
(let [expected 7
actual (CDR cell)]
(is (= actual expected))))
(is (thrown-with-msg? Exception #".*Ne can tace CAR of.*" (CAR 7)))
(is (thrown-with-msg? Exception #".*Ne can tace CDR of.*" (CDR 'A)))
(is (thrown-with-msg? Exception #".*Ne liste.*" (CADDDR "Foo")))
(is (thrown-with-msg? Exception #".*uaf: unexpected letter in path.*"
(uaf (make-beowulf-list '(A B C D))
'(\d \a \z \e \d))))))
(deftest misc-predicate-tests
(testing "NULL"
(let [expected T
actual (NULL NIL)]
(is (= actual expected)))
(let [expected F
actual (NULL (make-beowulf-list '(A B C)))]
(is (= actual expected))))
(testing "NILP"
(let [expected T
actual (NILP NIL)]
(is (= actual expected)))
(let [expected NIL
actual (NILP (make-beowulf-list '(A B C)))]
(is (= actual expected))))
(testing "AND"
(let [expected T
actual (AND)]
(is (= actual expected)))
(let [expected T
actual (AND T T)]
(is (= actual expected)))
(let [expected T
actual (AND T T T)]
(is (= actual expected)))
(let [expected T
actual (AND 1 'A (make-beowulf-list '(A B C)))]
(is (= actual expected)))
(let [expected F
actual (AND NIL)]
(is (= actual expected)))
(let [expected F
actual (AND T T F T)]
(is (= actual expected))))
(testing "OR"
(let [expected F
actual (OR)]
(is (= actual expected)))
(let [expected T
actual (OR NIL T)]
(is (= actual expected)))
(let [expected T
actual (OR T F T)]
(is (= actual expected)))
(let [expected T
actual (OR 1 F (make-beowulf-list '(A B C)))]
(is (= actual expected)))
(let [expected F
actual (OR NIL)]
(is (= actual expected)))
(let [expected F
actual (OR NIL F)]
(is (= actual expected))))
(testing "FIXP"
(let [expected F
actual (FIXP NIL)]
(is (= actual expected)))
(let [expected F
actual (FIXP 'A)]
(is (= actual expected)))
(let [expected F
actual (FIXP 3.2)]
(is (= actual expected)))
(let [expected T
actual (FIXP 7)]
(is (= actual expected))))
(testing "LESSP"
(let [expected F
actual (LESSP 7 3)]
(is (= actual expected)))
(let [expected T
actual (LESSP -7 3.5)]
(is (= actual expected)))
(let [expected F
actual (LESSP 3.14 3.14)]
(is (= actual expected))))
(testing "GREATERP"
(let [expected T
actual (GREATERP 7 3)]
(is (= actual expected)))
(let [expected F
actual (GREATERP -7 3.5)]
(is (= actual expected)))
(let [expected F
actual (GREATERP 3.14 3.14)]
(is (= actual expected)))))
;; Really tricky to get DEFINE set up for testing here. It works OK in the
;; REPL, but there's nonsense going on with lazy sequences. Better to
;; reimplement in Lisp.
;; (deftest define-tests
;; (testing "DEFINE"
;; (let [expected "(FF)"
;; actual (str (doall (DEFINE
;; (gsp "((FF LAMBDA (X) (COND ((ATOM X) X) (T (FF (CAR X))))))"))))]
;; (is (= actual expected)))))
(defexpect error-without-code
(expect (more-> clojure.lang.ExceptionInfo type
(more-of {:keys [:phase :function :args :type :code]}
'A1 code) ex-data)
(ERROR)))
(defexpect error-with-code
(let [x 'X1]
(expect (more-> clojure.lang.ExceptionInfo type
(more-of {:keys [:phase :function :args :type :code]}
x code) ex-data)
(ERROR x))))