babashka/test-resources/lib_tests/helins/binf/test/base64.cljc

80 lines
2.9 KiB
Clojure

;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at https://mozilla.org/MPL/2.0/.
(ns helins.binf.test.base64
{:author "Adam Helins"}
(:require [clojure.test :as t]
[clojure.test.check.clojure-test :as tc.ct]
[clojure.test.check.generators :as tc.gen]
[clojure.test.check.properties :as tc.prop]
[helins.binf :as binf]
[helins.binf.base64 :as binf.base64]
[helins.binf.buffer :as binf.buffer]
[helins.binf.gen :as binf.gen]))
;;;;;;;;;;
(t/deftest main
(let [buffer (binf.buffer/alloc 64)
view (binf/view buffer)
#?@(:cljs [buffer-shared (binf.buffer/alloc-shared 64)
view-shared (binf/view buffer-shared)])]
(dotimes [i 64]
(binf/wr-b8 view
i)
#?(:cljs (binf/wr-b8 view-shared
i)))
(t/is (= (seq buffer)
(seq (-> buffer
binf.base64/encode
binf.base64/decode
binf/backing-buffer))
#?(:cljs (seq (-> buffer-shared
binf.base64/encode
(binf.base64/decode binf.buffer/alloc-shared)
binf/backing-buffer))))
"Without offset nor lenght")
(t/is (= (drop 5
(seq buffer))
(seq (-> buffer
(binf.base64/encode 5)
binf.base64/decode
binf/backing-buffer))
#?(:cljs (seq (-> buffer-shared
(binf.base64/encode 5)
(binf.base64/decode binf.buffer/alloc-shared)
binf/backing-buffer))))
"With offset without length")
(t/is (= (->> (seq buffer)
(drop 5)
(take 20))
(seq (-> buffer
(binf.base64/encode 5
20)
binf.base64/decode
binf/backing-buffer))
#?(:cljs (seq (-> buffer-shared
(binf.base64/encode 5
20)
(binf.base64/decode binf.buffer/alloc-shared)
binf/backing-buffer))))
"With offset and length")))
(tc.ct/defspec gen
(tc.prop/for-all [buffer binf.gen/buffer]
(= (seq buffer)
(let [view (-> buffer
binf.base64/encode
binf.base64/decode)]
(seq (binf/rr-buffer view
(binf/limit view)))))))