From 4d82ef18a8bb18317be3e089f432f95b6e5dbd4a Mon Sep 17 00:00:00 2001
From: Piotr Szarmanski
Date: Thu, 22 Sep 2022 11:16:44 +0200
Subject: Implement stream-read-byte

---
 tests/decode-tests.lisp | 43 +++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 41 insertions(+), 2 deletions(-)

(limited to 'tests')

diff --git a/tests/decode-tests.lisp b/tests/decode-tests.lisp
index 2cd359a..af3edb0 100644
--- a/tests/decode-tests.lisp
+++ b/tests/decode-tests.lisp
@@ -83,8 +83,6 @@
                 else
                   do (replace decoded-array buf :start1 (* i s)))))))
 
-(assert-bytes-read-4096 (make-octets 16383 :element 1) 1024 (4096 4096 4096 4095))
-
 (test simple-decoding-1kib
   (assert-array-decode (make-octets 1 :element 1) 1024)
   (assert-array-decode (make-octets 1023 :element 2) 1024)
@@ -204,3 +202,44 @@
   (assert-length (make-array 16384 :element-type '(unsigned-byte 8) :initial-element 2) 1024))
 
 
+(defmacro assert-read-byte (array block-size)
+  `(let* ((*table* (make-hash-table :test #'equalp))
+          (array ,array)
+          (read-capability (eris-encode array ,block-size #'hashtable-encode))
+          (decoded-array (make-array (length array) :element-type '(unsigned-byte 8) :fill-pointer 0))
+          (stream (eris-decode read-capability #'hashtable-decode)))
+     (loop for i = (read-byte stream nil :eof)
+           until (eq i :eof)
+           do (vector-push i decoded-array))
+     (is (equalp decoded-array array))))
+
+(test check-read-byte
+  (assert-read-byte (make-octets 1 :element 2) 1024)
+  (assert-read-byte (make-octets 512 :element 2) 1024)
+  (assert-read-byte (make-octets 1023 :element 2) 1024)
+  (assert-read-byte (make-octets 1024 :element 2) 1024)
+  (assert-read-byte (make-octets 16383 :element 2) 1024)
+  (assert-read-byte (make-octets 16384 :element 2) 1024)
+  (assert-read-byte (make-octets 1024 :element 2) 32kib)
+  (assert-read-byte (make-octets 32767 :element 2) 32kib)
+  (assert-read-byte (make-octets 32768 :element 2) 32kib)
+  (assert-read-byte (make-octets 64000 :element 2) 32kib))
+
+(defmacro assert-read-byte-error (array block-size)
+  `(let* ((*table* (make-hash-table :test #'equalp))
+          (array ,array)
+          (read-capability (eris-encode array ,block-size #'hashtable-encode))
+          (stream (eris-decode read-capability #'hashtable-decode)))
+     (signals end-of-file
+       (loop for i = (read-byte stream t)
+             for n = 0 then (incf n)
+             until (eql n (length array))))))
+
+(test read-byte-eof
+  (assert-read-byte-error (make-octets 1 :element 2) 1024)
+  (assert-read-byte-error (make-octets 1024 :element 2) 1024)
+  (assert-read-byte-error (make-octets 16383 :element 2) 1024)
+  (assert-read-byte-error (make-octets 1024 :element 2) 32kib)
+  (assert-read-byte-error (make-octets 32767 :element 2) 32kib)
+  (assert-read-byte-error (make-octets 32768 :element 2) 32kib))
+
-- 
cgit v1.2.3