Skip to content

Commit

Permalink
more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
borkdude committed Oct 10, 2024
1 parent bca55a2 commit b2d8c55
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 18 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ SCI is used in [babashka](https://github.com/babashka/babashka),
## Unreleased

- Fix [#917](https://github.com/babashka/sci/issues/917): support new Clojure 1.12 Java interop: `String/new`, `String/.length` and `Integer/parseInt` as fns
- Fix [#925](https://github.com/babashka/sci/issues/925): support new Clojure 1.12 array notation: `String/1`, `byte/2`
- Fix [#926](https://github.com/babashka/sci/issues/926): Support `add-watch` on vars in CLJS
- Support `aset` on primitive array using reflection
- Fix [#928](https://github.com/babashka/sci/issues/928): record constructor supports optional meta + ext map
Expand Down
4 changes: 2 additions & 2 deletions src/sci/impl/interop.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -161,11 +161,11 @@
#?(:clj
(def ->array-class
(memoize (fn [clazz dim]
(class (make-array clazz dim))))))
(class (apply make-array clazz (vec (repeat dim 0))))))))

#?(:clj
(defn resolve-array-class [ctx sym-ns ^String sym-name-str]
(when-let [clazz (or (resolve-class ctx sym-ns)
(get prim->class sym-ns))]
(let [dim (- (int (.charAt sym-name-str 0)) 49)]
(let [dim (- (int (.charAt sym-name-str 0)) 48)]
(->array-class clazz dim)))))
2 changes: 1 addition & 1 deletion src/sci/impl/parser.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@
#?(:clj (when (and (= 1 (.length sym-name))
(Character/isDigit (.charAt sym-name 0)))
(when-let [clazz ^Class (interop/resolve-array-class ctx sym-ns sym-name)]
(symbol (.getName (.getComponentType clazz)) sym-name))))
(symbol (pr-str clazz)))))
(let [nss (get env :namespaces)]
(if (get nss sym-ns)
sym
Expand Down
34 changes: 19 additions & 15 deletions test/sci/interop_test.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -128,21 +128,25 @@

#?(:clj
(deftest clojure-1_12-array-test
(is (= (class (make-array Long/TYPE 0)) (eval* "long/1") ))
(is (= (class (make-array Integer/TYPE 0)) (eval* "int/1")))
(is (= (class (make-array Double/TYPE 0)) (eval* "double/1") ))
(is (= (class (make-array Short/TYPE 0)) (eval* "short/1") ))
(is (= (class (make-array Boolean/TYPE 0)) (eval* "boolean/1")))
(is (= (class (make-array Byte/TYPE 0)) (eval* "byte/1")))
(is (= (class (make-array Float/TYPE 0)) (eval* "float/1")))
(is (= (class (make-array String 0)) (eval* "String/1")))
(is (= (class (make-array String 0)) (eval* "java.lang.String/1")))
(is (= (symbol "byte/1") (eval* "`byte/1")))
(is (= (symbol "byte/3") (eval* "`byte/3")))
(is (= (symbol "java.util.UUID/1") (eval* "`java.util.UUID/1")))
(is (= (symbol "java.lang.String/1") (eval* "`String/1")))
(is (= (symbol "java.lang.String/1") (eval* "`java.lang.String/1")))
(is (= [(symbol "long/2")] (eval* "['long/2]") (eval* "`[~'long/2]")))))
(let [byte-1 (class (make-array Byte/TYPE 0))
byte-3 (class (make-array Byte/TYPE 0 0 0))
String-1 (class (make-array String 0))]
(is (= (class (make-array Long/TYPE 0)) (eval* "long/1")))
(is (= (class (make-array Long/TYPE 0 0)) (eval* "long/2") ))
(is (= (class (make-array Integer/TYPE 0)) (eval* "int/1")))
(is (= (class (make-array Double/TYPE 0)) (eval* "double/1") ))
(is (= (class (make-array Short/TYPE 0)) (eval* "short/1") ))
(is (= (class (make-array Boolean/TYPE 0)) (eval* "boolean/1")))
(is (= byte-1 (eval* "byte/1")))
(is (= (class (make-array Float/TYPE 0)) (eval* "float/1")))
(is (= (class (make-array String 0)) (eval* "String/1")))
(is (= String-1 (eval* "java.lang.String/1")))
(is (= (symbol (pr-str byte-1)) (eval* "`byte/1")))
(is (= (symbol (pr-str byte-3)) (eval* "`byte/3")))
(is (= (symbol "java.util.UUID/1") (eval* "`java.util.UUID/1")))
(is (= (symbol (pr-str String-1)) (eval* "`String/1")))
(is (= (symbol (pr-str String-1)) (eval* "`java.lang.String/1")))
(is (= [(symbol "long/2")] (eval* "['long/2]") (eval* "`[~'long/2]"))))))

(when-not tu/native?
(deftest exception-data
Expand Down

0 comments on commit b2d8c55

Please sign in to comment.