Comprehensive spec (#19)
* core: fix jolt-265 — syntax-quote fully-qualifies core syms to clojure.core/ Re-attempt of the deferred gap, now unblocked. The earlier uberscript break wasn't qualification itself but an aliased-ref resolution bug it exposed: resolve-var looked up ns-aliases (e.g. g/foo) against the analyzer's REBOUND ctx-current-ns (jolt.analyzer, since the analyzer runs interpreted in its own ns) instead of the namespace being compiled. A user's aliased refs failed mid-compile (g/hello -> nil in the bundled standalone). - resolve-var resolves aliases against :compile-ns when set (same ns h-current-ns uses), falling back to ctx-current-ns — correct for both modes. - sq-symbol qualifies a resolved clojure.core name to clojure.core/<name> (Clojure hygiene); special forms stay bare; unresolved syms -> current ns. Tests updated to the qualified behavior (features-test, reader-forms-spec). * test: comprehensive spec — regex + sorted colls + random/predicate gaps Filling the biggest untested clojure.core areas found in a coverage audit (168 of 506 provided fns had no spec). New + expanded suites: - regex-spec.janet (20): #"…" literals, regex?, re-find/re-matches/re-seq (match/no-match/groups), re-pattern, and clojure.string split/replace with regex (incl $1 backrefs). Whole area was previously unspecced. - sorted-spec.janet (14): sorted-map/sorted-set construction + ordering, sorted?, subseq/rsubseq. Pins the working subset — get/conj/assoc/keys/vals on sorted colls and the by-comparator ctors are not yet first-class (jolt-ti9). - predicates-spec +14: seqable?, integer?, reduced?/unreduced, not-empty. - numbers-spec +5: rand/rand-int/rand-nth invariants. Fix: sorted? was bound to core-sorted-map? so it returned false for sorted-sets; now true for both sorted maps and sets (core-sorted?). Filed: jolt-ti9 (sorted collections incomplete: get/conj/assoc/keys/vals don't operate on the sorted wrapper; sorted-*-by ignore the comparator). Gate green incl full jpm build + jpm test. * 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. * remove old doc * core: fix stale comment — by-comparator sorted ctors are implemented --------- Co-authored-by: Yogthos <yogthos@gmail.com>
This commit is contained in:
parent
afb7d17352
commit
3e9fe8d0fb
9 changed files with 254 additions and 462 deletions
|
|
@ -113,3 +113,20 @@
|
|||
["not= differs" "true" "(not= [1 2] [1 3])"]
|
||||
["identical? same kw" "true" "(identical? :a :a)"]
|
||||
["compare strings" "-1" "(compare \"a\" \"b\")"])
|
||||
|
||||
(defspec "predicates / seqable, reduced & emptiness"
|
||||
["seqable? vector" "true" "(seqable? [1])"]
|
||||
["seqable? map" "true" "(seqable? {:a 1})"]
|
||||
["seqable? string" "true" "(seqable? \"s\")"]
|
||||
["seqable? nil" "true" "(seqable? nil)"]
|
||||
["seqable? number" "false" "(seqable? 5)"]
|
||||
["integer? int" "true" "(integer? 5)"]
|
||||
["integer? fraction" "false" "(integer? 5.5)"]
|
||||
["reduced? wrapped" "true" "(reduced? (reduced 1))"]
|
||||
["reduced? plain" "false" "(reduced? 1)"]
|
||||
["deref reduced" "9" "(deref (reduced 9))"]
|
||||
["unreduced wrapped" "9" "(unreduced (reduced 9))"]
|
||||
["unreduced plain" "9" "(unreduced 9)"]
|
||||
["not-empty full" "[1]" "(not-empty [1])"]
|
||||
["not-empty empty" "nil" "(not-empty [])"]
|
||||
["not-empty string" "nil" "(not-empty \"\")"])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue