Fix gc test
This commit is contained in:
parent
ea4f56886d
commit
267646fbe7
7 changed files with 11 additions and 21 deletions
2
deps.edn
2
deps.edn
|
|
@ -20,7 +20,7 @@
|
||||||
"reify/src"],
|
"reify/src"],
|
||||||
:deps {org.clojure/clojure {:mvn/version "1.11.1"},
|
:deps {org.clojure/clojure {:mvn/version "1.11.1"},
|
||||||
org.babashka/sci {:local/root "sci"}
|
org.babashka/sci {:local/root "sci"}
|
||||||
org.babashka/babashka.impl.reify {:mvn/version "0.1.2"}
|
org.babashka/babashka.impl.reify {:mvn/version "0.1.3"}
|
||||||
org.babashka/sci.impl.types {:mvn/version "0.0.2"}
|
org.babashka/sci.impl.types {:mvn/version "0.0.2"}
|
||||||
babashka/babashka.curl {:local/root "babashka.curl"}
|
babashka/babashka.curl {:local/root "babashka.curl"}
|
||||||
babashka/fs {:local/root "fs"}
|
babashka/fs {:local/root "fs"}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
[nrepl/bencode "1.1.0"]
|
[nrepl/bencode "1.1.0"]
|
||||||
[borkdude/sci.impl.reflector "0.0.1"]
|
[borkdude/sci.impl.reflector "0.0.1"]
|
||||||
[org.babashka/sci.impl.types "0.0.2"]
|
[org.babashka/sci.impl.types "0.0.2"]
|
||||||
[org.babashka/babashka.impl.reify "0.1.2"]
|
[org.babashka/babashka.impl.reify "0.1.3"]
|
||||||
[org.clojure/core.async "1.5.648"]
|
[org.clojure/core.async "1.5.648"]
|
||||||
[org.clojure/test.check "1.1.1"]
|
[org.clojure/test.check "1.1.1"]
|
||||||
[com.github.clj-easy/graal-build-time "0.1.0"]
|
[com.github.clj-easy/graal-build-time "0.1.0"]
|
||||||
|
|
|
||||||
2
reify/bb.edn
Normal file
2
reify/bb.edn
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
{:tasks {install (clojure "-T:build install")
|
||||||
|
deploy (clojure "-T:build deploy")}}
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
[clojure.tools.build.api :as b]))
|
[clojure.tools.build.api :as b]))
|
||||||
|
|
||||||
(def lib 'org.babashka/babashka.impl.reify)
|
(def lib 'org.babashka/babashka.impl.reify)
|
||||||
(def version "0.1.2")
|
(def version "0.1.3")
|
||||||
(def class-dir "target/classes")
|
(def class-dir "target/classes")
|
||||||
(def basis (b/create-basis {:project "deps.edn"}))
|
(def basis (b/create-basis {:project "deps.edn"}))
|
||||||
(def jar-file (format "target/%s-%s.jar" (name lib) version))
|
(def jar-file (format "target/%s-%s.jar" (name lib) version))
|
||||||
|
|
|
||||||
|
|
@ -61,19 +61,6 @@
|
||||||
java.lang.Object
|
java.lang.Object
|
||||||
(toString [this] (toString-fn this)))))
|
(toString [this] (toString-fn this)))))
|
||||||
|
|
||||||
(defn reify-runnable [m]
|
|
||||||
(let [methods (:methods m)
|
|
||||||
run-fn (or (get methods 'run)
|
|
||||||
(fn [_]))]
|
|
||||||
(reify
|
|
||||||
sci.impl.types.IReified
|
|
||||||
(getMethods [_] (:methods m))
|
|
||||||
(getInterfaces [_] (:interfaces m))
|
|
||||||
(getProtocols [_] (:protocols m))
|
|
||||||
java.lang.Runnable
|
|
||||||
(run [this] (run-fn this))))
|
|
||||||
)
|
|
||||||
|
|
||||||
(defmacro gen-reify-fn []
|
(defmacro gen-reify-fn []
|
||||||
`(fn [~'m]
|
`(fn [~'m]
|
||||||
(when (> (count (:interfaces ~'m)) 1)
|
(when (> (count (:interfaces ~'m)) 1)
|
||||||
|
|
@ -91,9 +78,7 @@
|
||||||
["clojure.lang.IFn"
|
["clojure.lang.IFn"
|
||||||
`(reify-ifn ~'m)
|
`(reify-ifn ~'m)
|
||||||
"java.lang.Object"
|
"java.lang.Object"
|
||||||
`(reify-object ~'m)
|
`(reify-object ~'m)]
|
||||||
"java.lang.Runnable"
|
|
||||||
`(reify-runnable ~'m)]
|
|
||||||
(for [i interfaces]
|
(for [i interfaces]
|
||||||
(let [in (.getName ^Class i)]
|
(let [in (.getName ^Class i)]
|
||||||
[in
|
[in
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
clojure.lang.Reversible
|
clojure.lang.Reversible
|
||||||
clojure.lang.Seqable
|
clojure.lang.Seqable
|
||||||
java.lang.Iterable
|
java.lang.Iterable
|
||||||
|
java.lang.Runnable
|
||||||
java.net.http.WebSocket$Listener
|
java.net.http.WebSocket$Listener
|
||||||
java.util.Iterator
|
java.util.Iterator
|
||||||
java.util.function.Consumer
|
java.util.function.Consumer
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
(:require
|
(:require
|
||||||
[babashka.test-utils :as test-utils]
|
[babashka.test-utils :as test-utils]
|
||||||
[clojure.edn :as edn]
|
[clojure.edn :as edn]
|
||||||
|
[clojure.string :as str]
|
||||||
[clojure.test :as test :refer [deftest is testing]]))
|
[clojure.test :as test :refer [deftest is testing]]))
|
||||||
|
|
||||||
(defn bb [input & args]
|
(defn bb [input & args]
|
||||||
|
|
@ -52,7 +53,7 @@
|
||||||
|
|
||||||
(deftest reify-object
|
(deftest reify-object
|
||||||
(testing "empty methods"
|
(testing "empty methods"
|
||||||
(is (clojure.string/starts-with?
|
(is (str/starts-with?
|
||||||
(bb nil "
|
(bb nil "
|
||||||
(str (reify Object))")
|
(str (reify Object))")
|
||||||
"babashka.impl.reify")))
|
"babashka.impl.reify")))
|
||||||
|
|
@ -144,7 +145,8 @@
|
||||||
(let [t (atom (Object.))
|
(let [t (atom (Object.))
|
||||||
wr (java.lang.ref.WeakReference. @t)]
|
wr (java.lang.ref.WeakReference. @t)]
|
||||||
(reset! t nil)
|
(reset! t nil)
|
||||||
(while (.get wr)
|
(while (or (.get wr)
|
||||||
|
(not @deleted?))
|
||||||
(System/gc)
|
(System/gc)
|
||||||
(System/runFinalization))))
|
(System/runFinalization))))
|
||||||
(make-cleanable-ref)
|
(make-cleanable-ref)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue