diff options
author | Piotr Szarmanski | 2023-08-25 19:09:50 +0200 |
---|---|---|
committer | Piotr Szarmanski | 2023-08-25 19:09:50 +0200 |
commit | fed34b8df2b19ba996ef810f44d5666437c90fb7 (patch) | |
tree | 6d5aac31bbfb7eab265490c8e37856382ebdd2ba /tests/encode-parallel.lisp | |
parent | da0e1aa69defa7cbc87209966c751918f523f1fb (diff) |
Add the parallel encoder.
Diffstat (limited to 'tests/encode-parallel.lisp')
-rw-r--r-- | tests/encode-parallel.lisp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/encode-parallel.lisp b/tests/encode-parallel.lisp new file mode 100644 index 0000000..4bc6c23 --- /dev/null +++ b/tests/encode-parallel.lisp @@ -0,0 +1,58 @@ +;; This file is part of eris-cl. +;; Copyright (C) 2023 Piotr SzarmaĆski + +;; eris-cl is free software: you can redistribute it and/or modify it under the +;; terms of the GNU Lesser General Public License as published by the Free +;; Software Foundation, either version 3 of the License, or (at your option) any +;; later version. + +;; eris-cl is distributed in the hope that it will be useful, but WITHOUT ANY +;; WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +;; A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License along with +;; eris-cl. If not, see <https://www.gnu.org/licenses/>. + +(in-package :eris/test) + +(def-suite* parallel-encoding-tests :in eris-tests) + +(defmacro with-lp-kernel (threads &body expr ) + `(let ((lparallel:*kernel* (lparallel:make-kernel ,threads))) + (unwind-protect (progn ,@expr) + (lparallel:end-kernel)))) + +(defmacro test-p/file-backend (array &optional (secret null-secret)) + `(let ((tmpdir (make-temporary-dir))) + (unwind-protect + (let* ((backend (make-instance 'file-backend :directory tmpdir)) + (array ,array) + (file (merge-pathnames (crypto:byte-array-to-hex-string (crypto:random-data 16)) tmpdir))) + (with-open-file (f file :direction :output :element-type 'serapeum:octet) + (write-sequence ,array f)) + (let ((list + (list + (read-capability-to-octets + (store-data array backend :secret ,secret)) + (read-capability-to-octets + (p/store-data array backend :secret ,secret)) + (read-capability-to-octets + (p/store-data file backend :secret ,secret))))) + (is (apply #'serapeum:equalp* list)))) + (uiop:delete-directory-tree tmpdir :validate t)))) + + +(test simple-parallel-tests + (with-lp-kernel 2 + (test-p/file-backend (make-octets 1023 :element 1) (make-octets 32 :element 1)) + (test-p/file-backend (make-octets 1025 :element 2) (make-octets 32 :element 2)) + (test-p/file-backend (make-octets 16383 :element 3) (make-octets 32 :element 3)) + (test-p/file-backend (make-octets 16384 :element 4) (make-octets 32 :element 4)) + (test-p/file-backend (make-octets 1 :element 5) (make-octets 32 :element 5)) + (test-p/file-backend (make-octets 16834 :element 5) (make-octets 32 :element 6)) + (test-p/file-backend (make-octets 96000 :element 5) (make-octets 32 :element 7)))) + +(test simple-parallel-tests2 + (with-lp-kernel 3 + (for-all ((buffer (gen-buffer :length (gen-integer :min 1 :max 130000)))) + (test-p/file-backend buffer)))) |