(use ../src/jolt/api) (use ../src/jolt/reader) (use ../src/jolt/evaluator) (defn ct-eval [ctx s] (eval-string ctx s)) (defn load-clj [ctx filepath] (def source (slurp filepath)) (var remaining source) (while (> (length (string/trim remaining)) 0) (def fr (parse-next remaining)) (def form (fr 0)) (set remaining (fr 1)) (when (not (nil? form)) (eval-form ctx @{} form)))) (print "40: clojure.string...") (let [ctx (init)] (load-clj ctx "src/jolt/clojure/string.clj") (assert (= true (ct-eval ctx "(blank? nil)")) "blank? nil") (assert (= true (ct-eval ctx "(blank? \" \")")) "blank? whitespace") (assert (= false (ct-eval ctx "(blank? \"a\")")) "blank? non-empty") (assert (= "Abc" (ct-eval ctx "(capitalize \"abc\")")) "capitalize") (assert (= "hello" (ct-eval ctx "(lower-case \"HELLO\")")) "lower-case") (assert (= "HELLO" (ct-eval ctx "(upper-case \"hello\")")) "upper-case") (assert (= true (ct-eval ctx "(includes? \"hello\" \"ell\")")) "includes? true") (assert (= "foo" (ct-eval ctx "(trim \"foo\")")) "trim") (assert (= true (ct-eval ctx "(starts-with? \"hello\" \"he\")")) "starts-with? true") (assert (= true (ct-eval ctx "(ends-with? \"hello\" \"lo\")")) "ends-with? true")) (print " passed") (print "41: clojure.set...") (let [ctx (init)] (load-clj ctx "src/jolt/clojure/set.clj") (assert (= 3 (ct-eval ctx "(count (union #{1 2} #{2 3}))")) "union") (assert (= 1 (ct-eval ctx "(count (intersection #{1 2} #{2 3}))")) "intersection") (assert (= 1 (ct-eval ctx "(count (difference #{1 2} #{2 3}))")) "difference") (assert (= true (ct-eval ctx "(subset? #{1} #{1 2 3})")) "subset? true") (assert (= true (ct-eval ctx "(superset? #{1 2 3} #{1})")) "superset? true")) (print " passed") (print "42: clojure.walk/zip — modules loadable") (let [ctx (init)] (load-clj ctx "src/jolt/clojure/walk.clj") (print " walk: loaded")) (let [ctx (init)] (load-clj ctx "src/jolt/clojure/zip.clj") (print " zip: loaded")) (print " passed") (print "43: stdlib summary") (print " clojure.string — 19 functions") (print " clojure.set — 10 functions") (print " clojure.walk — 7 functions") (print " clojure.zip — zipper data structure") (print " clojure.edn — EDN reader/writer stubs") (print " clojure.java-io — file I/O wrappers") (print " jolt.interop — Janet interop") (print " jolt.shell — shell command execution") (print " jolt.http — HTTP client") (print " passed") (print "All Phase 10 tests passed!")