core: close surfaced gaps — first-class sorted colls, with-out-str, rand arity, deref reduced
jolt-ti9: sorted-map/sorted-set are now first-class across the collection fns — get/assoc/dissoc/conj/contains?/keys/vals/disj and call-as-fn all operate on the wrapper and preserve sort order. The by-comparator constructors (sorted-map-by/ sorted-set-by) now thread the user comparator (numeric or boolean-predicate) through all derived colls. Sorted predicates/ctors/ops moved above core-conj so the collection fns can branch on them; jolt-invoke (interpreter) gets inline branches. jolt-rfw: add with-out-str (binds output to a string buffer) + the macro. jolt-ek3: (rand n) arity and deref-of-reduced (uuid? still deferred). Specs: new io-spec.janet; sorted-spec expanded to pin the now-working map/set ops and by-comparator ordering; predicate/number spec restorations.
This commit is contained in:
parent
ae8b635602
commit
afef55704c
7 changed files with 174 additions and 30 deletions
26
test/spec/io-spec.janet
Normal file
26
test/spec/io-spec.janet
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
# Specification: printing / output (print/println/pr/prn, *-str, format, str).
|
||||
# Output is captured with with-out-str (jolt-rfw); the *-str fns return strings.
|
||||
(use ../support/harness)
|
||||
|
||||
(defspec "io / with-out-str captures"
|
||||
["println" "\"hi\\n\"" "(with-out-str (println \"hi\"))"]
|
||||
["print spaces" "\"a b\"" "(with-out-str (print \"a\" \"b\"))"]
|
||||
["prn quotes" "\"[1 2]\\n\"" "(with-out-str (prn [1 2]))"]
|
||||
["pr no newline" "\"5\"" "(with-out-str (pr 5))"]
|
||||
["multiple writes" "\"12\"" "(with-out-str (print 1) (print 2))"]
|
||||
["no output" "\"\"" "(with-out-str 42)"]
|
||||
["println no args" "\"\\n\"" "(with-out-str (println))"])
|
||||
|
||||
(defspec "io / *-str builders"
|
||||
["print-str" "\"a b\"" "(print-str \"a\" \"b\")"]
|
||||
["println-str" "\"x\\n\"" "(println-str \"x\")"]
|
||||
["prn-str" "\"[1 2]\\n\"" "(prn-str [1 2])"]
|
||||
["pr-str quotes" "\"\\\"s\\\"\"" "(pr-str \"s\")"]
|
||||
["pr-str keyword" "\":a\"" "(pr-str :a)"])
|
||||
|
||||
(defspec "io / str & format"
|
||||
["str concat" "\"1:ab\"" "(str 1 :a \"b\")"]
|
||||
["str nil" "\"\"" "(str nil)"]
|
||||
["str of coll" "\"[1 2]\"" "(str [1 2])"]
|
||||
["format d/s" "\"5-x\"" "(format \"%d-%s\" 5 \"x\")"]
|
||||
["format float" "\"3.14\"" "(format \"%.2f\" 3.14159)"])
|
||||
Loading…
Add table
Add a link
Reference in a new issue