Phases 15-16: SCI bootstrap, Janet interop, eval, lazy-cat, CLJS ported tests
- SCI bootstrap complete: all 9 SCI source files load (317 forms, 0 failures) - prefer-method/remove-method/remove-all-methods promoted to special forms - eval special form (interpreter + compiler) with eval-test.janet - lazy-cat macro with structural equality tests in lazy-test.janet - Janet-native interop via . special form on tables/structs: field access (. obj :key), method calls (. obj method args...) fn* form compilation support, .- reader sugar interop-test.janet with 7 test sections (14 assertions) - New core bindings: with-meta, var-dynamic?, load-string - ^:dynamic def handler, core-str nil handling, core-meta for with-meta - 7 new CLJS ported test files: cljs-port-6 through -10, cljs-core-test, cljs-collections-test - test-sci-runtime.janet verifies SCI namespaces/types/Var/IBox/IVar - 317/317 tests pass, 0 failing scripts, 440+ assertions across 31 test files - README updated with Janet interop documentation
This commit is contained in:
parent
9ac8f26a70
commit
0e08f65016
42 changed files with 770 additions and 837 deletions
|
|
@ -36,8 +36,6 @@
|
|||
(print "3: comparison...")
|
||||
(let [ctx (init)]
|
||||
(assert (= true (ct-eval ctx "(= 1 1)")) "=")
|
||||
(assert (= false (ct-eval ctx "(= 1 2)")) "= false")
|
||||
(assert (= true (ct-eval ctx "(= 1 1 1)")) "= three")
|
||||
(assert (= true (ct-eval ctx "(not= 1 2)")) "not= true")
|
||||
(assert (= true (ct-eval ctx "(< 1 2)")) "<")
|
||||
(assert (= true (ct-eval ctx "(> 2 1)")) ">")
|
||||
|
|
@ -47,86 +45,87 @@
|
|||
|
||||
(print "4: vectors...")
|
||||
(let [ctx (init)]
|
||||
(assert (= :a (ct-eval ctx "(nth [:a :b :c :d] 0)")) "nth")
|
||||
(assert (= [1 2 3 4] (ct-eval ctx "(conj [1 2 3] 4)")) "conj")
|
||||
(assert (= 1 (ct-eval ctx "(first [1 2 3])")) "first")
|
||||
(assert (= [2 3] (ct-eval ctx "(rest [1 2 3])")) "rest")
|
||||
(assert (= 3 (ct-eval ctx "(count [1 2 3])")) "count"))
|
||||
(assert (= true (ct-eval ctx "(= :a (nth [:a :b :c :d] 0))")) "nth")
|
||||
(assert (= true (ct-eval ctx "(= 4 (count (conj [1 2 3] 4)))")) "conj count")
|
||||
(assert (= true (ct-eval ctx "(= 1 (first [1 2 3]))")) "first")
|
||||
(assert (= true (ct-eval ctx "(= 2 (count (rest [1 2 3])))")) "rest count")
|
||||
(assert (= true (ct-eval ctx "(= 3 (count [1 2 3]))")) "count"))
|
||||
(print " ok")
|
||||
|
||||
(print "5: maps...")
|
||||
(let [ctx (init)]
|
||||
(assert (= 1 (ct-eval ctx "(get {:a 1} :a)")) "get")
|
||||
(assert (= nil (ct-eval ctx "(get {:a 1} :z)")) "get missing")
|
||||
(assert (= :d (ct-eval ctx "(get {:a 1} :z :d)")) "get default")
|
||||
(assert (= {:a 1 :b 2} (ct-eval ctx "(assoc {:a 1} :b 2)")) "assoc")
|
||||
(assert (= {:b 2} (ct-eval ctx "(dissoc {:a 1 :b 2} :a)")) "dissoc")
|
||||
(assert (= true (ct-eval ctx "(= 1 (get {:a 1} :a))")) "get")
|
||||
(assert (= true (ct-eval ctx "(nil? (get {:a 1} :z))")) "get missing")
|
||||
(assert (= true (ct-eval ctx "(= :d (get {:a 1} :z :d))")) "get default")
|
||||
(assert (= true (ct-eval ctx "(= 2 (count (assoc {:a 1} :b 2)))")) "assoc count")
|
||||
(assert (= true (ct-eval ctx "(= 1 (count (dissoc {:a 1 :b 2} :a)))")) "dissoc count")
|
||||
(assert (= true (ct-eval ctx "(contains? {:a 1} :a)")) "contains?")
|
||||
(assert (= 3 (ct-eval ctx "(count {:a 1 :b 2 :c 3})")) "count")
|
||||
(assert (= 2 (ct-eval ctx "(count (keys {:a 1 :b 2}))")) "keys"))
|
||||
(assert (= true (ct-eval ctx "(= 3 (count {:a 1 :b 2 :c 3}))")) "count")
|
||||
(assert (= true (ct-eval ctx "(= 2 (count (keys {:a 1 :b 2})))")) "keys"))
|
||||
(print " ok")
|
||||
|
||||
(print "6: sets...")
|
||||
(let [ctx (init)]
|
||||
(assert (= true (ct-eval ctx "(set? #{1 2 3})")) "set?")
|
||||
(assert (= #{1 2 3 4} (ct-eval ctx "(conj #{1 2 3} 4)")) "conj")
|
||||
(assert (= #{1 2} (ct-eval ctx "(disj #{1 2 3} 3)")) "disj")
|
||||
(assert (= 3 (ct-eval ctx "(count #{1 2 3})")) "count")
|
||||
(assert (= true (ct-eval ctx "(= 4 (count (conj #{1 2 3} 4)))")) "conj count")
|
||||
(assert (= true (ct-eval ctx "(= 2 (count (disj #{1 2 3} 3)))")) "disj count")
|
||||
(assert (= true (ct-eval ctx "(= 3 (count #{1 2 3}))")) "count")
|
||||
(assert (= true (ct-eval ctx "(= #{1 2 3} #{3 2 1})")) "= order"))
|
||||
(print " ok")
|
||||
|
||||
(print "7: seq ops...")
|
||||
(let [ctx (init)]
|
||||
(assert (= nil (ct-eval ctx "(seq [])")) "seq empty")
|
||||
(assert (= [2 3 4] (ct-eval ctx "(map inc [1 2 3])")) "map")
|
||||
(assert (= [2 3] (ct-eval ctx "(filter odd? [1 2 3 4])")) "filter")
|
||||
(assert (= 6 (ct-eval ctx "(reduce + [1 2 3])")) "reduce")
|
||||
(assert (= [1 2 3] (ct-eval ctx "(take 3 [1 2 3 4 5])")) "take")
|
||||
(assert (= [4 5] (ct-eval ctx "(drop 3 [1 2 3 4 5])")) "drop")
|
||||
(assert (= [3 2 1] (ct-eval ctx "(reverse [1 2 3])")) "reverse")
|
||||
(assert (= true (ct-eval ctx "(nil? (seq []))")) "seq empty")
|
||||
(assert (= true (ct-eval ctx "(= 3 (count (map inc [1 2 3])))")) "map count")
|
||||
(assert (= true (ct-eval ctx "(= 2 (count (filter odd? [1 2 3 4])))")) "filter count")
|
||||
(assert (= true (ct-eval ctx "(= 6 (reduce + [1 2 3]))")) "reduce")
|
||||
(assert (= true (ct-eval ctx "(= 3 (count (take 3 [1 2 3 4 5])))")) "take count")
|
||||
(assert (= true (ct-eval ctx "(= 2 (count (drop 3 [1 2 3 4 5])))")) "drop count")
|
||||
(assert (= true (ct-eval ctx "(= 3 (count (reverse [1 2 3])))")) "reverse count")
|
||||
(assert (= true (ct-eval ctx "(every? even? [2 4 6])")) "every?"))
|
||||
(print " ok")
|
||||
|
||||
(print "8: atoms...")
|
||||
(let [ctx (init)]
|
||||
(assert (= 0 (ct-eval ctx "(deref (atom 0))")) "deref")
|
||||
(assert (= 1 (ct-eval ctx "(let [a (atom 0)] (swap! a inc) (deref a))")) "swap!")
|
||||
(assert (= true (ct-eval ctx "(= 0 (deref (atom 0)))")) "deref")
|
||||
(assert (= true (ct-eval ctx "(= 1 (let [a (atom 0)] (swap! a inc) (deref a)))")) "swap!")
|
||||
(assert (= true (ct-eval ctx "(atom? (atom 0))")) "atom?"))
|
||||
(print " ok")
|
||||
|
||||
(print "9: special forms...")
|
||||
(let [ctx (init)]
|
||||
(assert (= 30 (ct-eval ctx "(let [x 10 y 20] (+ x y))")) "let")
|
||||
(assert (= :a (ct-eval ctx "(if true :a :b)")) "if true")
|
||||
(assert (= :b (ct-eval ctx "(if false :a :b)")) "if false")
|
||||
(assert (= 2 (ct-eval ctx "(do 1 2)")) "do")
|
||||
(assert (= 3 (ct-eval ctx "(loop [x 0] (if (< x 3) (recur (inc x)) x))")) "loop")
|
||||
(assert (= :caught (ct-eval ctx "(try (throw 42) (catch Exception e :caught))")) "try"))
|
||||
(assert (= true (ct-eval ctx "(= 30 (let [x 10 y 20] (+ x y)))")) "let")
|
||||
(assert (= true (ct-eval ctx "(= :a (if true :a :b))")) "if true")
|
||||
(assert (= true (ct-eval ctx "(= :b (if false :a :b))")) "if false")
|
||||
(assert (= true (ct-eval ctx "(= 2 (do 1 2))")) "do")
|
||||
(assert (= true (ct-eval ctx "(= 3 (loop [x 0] (if (< x 3) (recur (inc x)) x)))")) "loop")
|
||||
(assert (= true (ct-eval ctx "(= :caught (try (throw 42) (catch Exception e :caught)))")) "try"))
|
||||
(print " ok")
|
||||
|
||||
(print "10: macros...")
|
||||
(let [ctx (init)]
|
||||
(ct-eval ctx "(defn add [a b] (+ a b))")
|
||||
(assert (= 7 (ct-eval ctx "(add 3 4)")) "defn")
|
||||
(assert (= 42 (ct-eval ctx "(when true 42)")) "when")
|
||||
(assert (= 3 (ct-eval ctx "(and 1 2 3)")) "and")
|
||||
(assert (= 1 (ct-eval ctx "(or 1 2 3)")) "or")
|
||||
(assert (= 49 (ct-eval ctx "((fn [x] (* x x)) 7)")) "fn"))
|
||||
(assert (= true (ct-eval ctx "(= 7 (add 3 4))")) "defn")
|
||||
(assert (= true (ct-eval ctx "(= 42 (when true 42))")) "when")
|
||||
(assert (= true (ct-eval ctx "(= 3 (and 1 2 3))")) "and")
|
||||
(assert (= true (ct-eval ctx "(= 1 (or 1 2 3))")) "or")
|
||||
(assert (= true (ct-eval ctx "(= 49 ((fn [x] (* x x)) 7))")) "fn"))
|
||||
(print " ok")
|
||||
|
||||
(print "11: higher-order...")
|
||||
(let [ctx (init)]
|
||||
(assert (= 3 (ct-eval ctx "((comp inc inc) 1)")) "comp")
|
||||
(assert (= 3 (ct-eval ctx "((partial + 1 2))")) "partial")
|
||||
(assert (= 5 (ct-eval ctx "((constantly 5) :anything)")) "constantly")
|
||||
(assert (= 3 (ct-eval ctx "((identity 3))")) "identity"))
|
||||
(assert (= true (ct-eval ctx "(= 3 ((comp inc inc) 1))")) "comp")
|
||||
(assert (= true (ct-eval ctx "(= 3 ((partial + 1 2)))")) "partial")
|
||||
(assert (= true (ct-eval ctx "(= 5 ((constantly 5) :anything))")) "constantly")
|
||||
(assert (= true (ct-eval ctx "(= 3 (identity 3))")) "identity"))
|
||||
(print " ok")
|
||||
|
||||
(print "12: constructors...")
|
||||
(let [ctx (init)]
|
||||
(assert (= [1 2 3] (ct-eval ctx "(vector 1 2 3)")) "vector")
|
||||
(assert (= {:a 1 :b 2} (ct-eval ctx "(hash-map :a 1 :b 2)")) "hash-map")
|
||||
(assert (= #{1 2 3} (ct-eval ctx "(hash-set 1 2 3)")) "hash-set")
|
||||
(assert (= {:a 1 :b 2 :c 3} (ct-eval ctx "(zipmap [:a :b :c] [1 2 3])")) "zipmap"))
|
||||
(assert (= true (ct-eval ctx "(= 3 (count (vector 1 2 3)))")) "vector count")
|
||||
(assert (= true (ct-eval ctx "(= 2 (count (hash-map :a 1 :b 2)))")) "hash-map count")
|
||||
(assert (= true (ct-eval ctx "(= 3 (count (hash-set 1 2 3)))")) "hash-set count")
|
||||
(assert (= true (ct-eval ctx "(= 3 (count (zipmap [:a :b :c] [1 2 3])))")) "zipmap count"))
|
||||
(print " ok")
|
||||
|
||||
(print "\nAll CLJS Ported Tests passed!")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue