diff --git a/script/lib_tests/clojure_data_generators_test b/script/lib_tests/clojure_data_generators_test new file mode 100755 index 00000000..5e34432d --- /dev/null +++ b/script/lib_tests/clojure_data_generators_test @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +set -eo pipefail + +if [ "$BABASHKA_TEST_ENV" = "native" ]; then + BB_CMD="./bb" +else + BB_CMD="lein bb" +fi + +export BABASHKA_CLASSPATH +BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {org.clojure/data.generators {:mvn/version "1.0.0"}}}' -Spath) + +$BB_CMD -cp "$BABASHKA_CLASSPATH:test-resources/lib_tests" -e " +(require '[clojure.data.generators-test]) +(require '[clojure.test :as t]) +(let [{:keys [:test :pass :fail :error]} (t/run-tests 'clojure.data.generators-test)] + (when-not (pos? test) + (System/exit 1)) + (System/exit (+ fail error))) +" diff --git a/script/run_lib_tests b/script/run_lib_tests index 6b26c20a..02206f74 100755 --- a/script/run_lib_tests +++ b/script/run_lib_tests @@ -26,3 +26,4 @@ script/lib_tests/clojure_data_zip_test script/lib_tests/cljc_java_time_test script/lib_tests/camel_snake_kebab_test script/lib_tests/aero_test +script/lib_tests/clojure_data_generators_test diff --git a/src/babashka/impl/classes.clj b/src/babashka/impl/classes.clj index 543dc89a..5236468c 100644 --- a/src/babashka/impl/classes.clj +++ b/src/babashka/impl/classes.clj @@ -121,6 +121,7 @@ java.lang.ProcessBuilder$Redirect java.lang.Runtime java.lang.RuntimeException + java.lang.Short java.lang.String java.lang.StringBuilder java.lang.System @@ -194,6 +195,7 @@ java.util.jar.JarFile java.util.jar.JarEntry java.util.jar.JarFile$JarFileEntry + java.util.Random java.util.regex.Pattern java.util.Base64 java.util.Base64$Decoder diff --git a/src/babashka/main.clj b/src/babashka/main.clj index f338965f..5fffaac8 100644 --- a/src/babashka/main.clj +++ b/src/babashka/main.clj @@ -400,6 +400,7 @@ If neither -e, -f, or --socket-repl are specified, then the first argument that '{ArithmeticException java.lang.ArithmeticException AssertionError java.lang.AssertionError BigDecimal java.math.BigDecimal + BigInteger java.math.BigInteger Boolean java.lang.Boolean Byte java.lang.Byte Character java.lang.Character @@ -421,6 +422,7 @@ If neither -e, -f, or --socket-repl are specified, then the first argument that RuntimeException java.lang.RuntimeException Process java.lang.Process ProcessBuilder java.lang.ProcessBuilder + Short java.lang.Short String java.lang.String StringBuilder java.lang.StringBuilder System java.lang.System diff --git a/test-resources/lib_tests/clojure/data/generators_test.clj b/test-resources/lib_tests/clojure/data/generators_test.clj new file mode 100644 index 00000000..8fa89e88 --- /dev/null +++ b/test-resources/lib_tests/clojure/data/generators_test.clj @@ -0,0 +1,35 @@ +(ns clojure.data.generators-test + (:require [clojure.data.generators :as gen] + [clojure.test :refer (deftest is)])) + +(defn print-read-roundtrip + [o] + (binding [*print-length* nil + *print-level* nil] + (-> o pr-str read-string))) + +(defn check-print-read-roundtrip + [o] + (let [o2 (print-read-roundtrip o)] + (when-not (= o o2) + (throw (ex-info "Value cannot roundtrip, see ex-data" {:value o :roundtrip o2}))))) + +(deftest test-print-read-roundtrip + (dotimes [_ 50] + (check-print-read-roundtrip (gen/anything)))) + +(deftest test-shuffle + (dotimes [_ 50] + (let [coll (gen/vec gen/anything) + shuf (gen/shuffle coll)] + (is (= (into #{} coll) + (into #{} shuf)))))) + +(deftest test-reservoir-sample-consistency + (dotimes [n 50] + (let [coll (range 100) + sample-1 (binding [gen/*rnd* (java.util.Random. n)] + (gen/reservoir-sample 10 coll)) + sample-2 (binding [gen/*rnd* (java.util.Random. n)] + (gen/reservoir-sample 10 coll))] + (is (= sample-1 sample-2))))) \ No newline at end of file