Coverage report: /home/ellis/comp/core/ffi/zstd/tests.lisp

KindCoveredAll%
expression011 0.0
branch00nil
Key
Not instrumented
Conditionalized out
Executed
Not executed
 
Both branches taken
One branch taken
Neither branch taken
1
 ;;; zstd/tests.lisp --- Zstd FFI tests
2
 
3
 ;;
4
 
5
 ;;; Code:
6
 (defpackage :zstd/tests 
7
   (:use :cl :std :rt :zstd :sb-alien :log))
8
 
9
 (in-package :zstd/tests)
10
 
11
 (defsuite :zstd)
12
 (in-suite :zstd)
13
 
14
 (load-zstd)
15
 
16
 (deftest sanity ()
17
   (mapc (lambda (x)
18
           (is (= (car x) (cdr x))))
19
         `((,+zstd-clevel-default+ . ,(zstd::zstd-defaultclevel))
20
           (,+zstd-magicnumber+ . -47205080)
21
           (,+zstd-magic-skippable-start+ . 407710288)
22
           (,+zstd-blocksizelog-max+ . 17)
23
           (,+zstd-blocksize-max+ . 131072)
24
           (,+zstd-contentsize-unknown+ . -1)
25
           (,+zstd-contentsize-error+ . -2)
26
           (,+zstd-max-input-size+ . -71777214294589696)
27
           (,+zstd-version-number+ . ,(zstd::zstd-versionnumber))
28
           (,+zstd-magic-dictionary+ . -332356553))))
29
 
30
 (deftest simple ()
31
   "Test the Zstd Simple API functions - ZSTD-COMPRESS and ZSTD-DECOMPRESS."
32
   (let ((dst-capacity 8096)
33
         (src-size 4096))
34
     (with-alien ((dst (* (unsigned 8)) (make-alien (unsigned 8) dst-capacity))
35
                  (src (* (unsigned 8)) (make-alien (unsigned 8) src-size))
36
                  (clevel int (zstd-defaultclevel)))
37
       (let ((csize (zstd-compress dst dst-capacity src src-size clevel)))
38
         (is (zerop (zstd-iserror (zstd-decompress src src-size dst csize)))))))
39
   (let* ((octets (make-octets 4000 :initial-element (random 255)))
40
          (compressed (zstd:zstdc octets)))
41
     (is (equalp (zstdd compressed) octets))))
42
 
43
 (deftest streaming ()
44
   "Test the Zstd v1 Streaming API."
45
   (is (< (zstd-cstreaminsize) (zstd-cstreamoutsize)))
46
   (with-alien ((in (* zstd-inbuffer) (zstd::allocate-zstd-inbuffer))
47
                (out (* zstd-outbuffer) (zstd::allocate-zstd-outbuffer)))
48
     (let* ((str "this is a test yad ayd ay aya dayd ayd ada"))
49
       (setf (zstd::zstd-inbuffer-src in) (make-alien-string str)
50
             (zstd::zstd-inbuffer-size in) (zstd-cstreaminsize))
51
       (with-zstd-cstream (cs)
52
         (is (zerop (zstd::zstd-initcstream cs (zstd-defaultclevel))))
53
         (with-zstd-dstream (ds)
54
           ;; (setf (zstd::zstd-outbuffer-dst out) (make-alien-string str))
55
           (setf (zstd::zstd-outbuffer-size out) (zstd-cstreamoutsize))
56
           (zstd-compressstream cs out in)
57
           (zstd::zstd-flushstream cs out)
58
           (zstd::zstd-endstream cs out)
59
           (zstd-decompressstream ds out in)
60
           (is (string-equal
61
                (cast (zstd::zstd-inbuffer-src in)
62
                      c-string)
63
                str)))))))
64
 
65
 (deftest streaming2 ()
66
   "Test the Zstd v2 Streaming API."
67
   (let ((test "test 1 2 3"))
68
     (with-zstd-buffers (in out :src (make-alien-string test))
69
       (with-zstd-streams (cs ds)
70
         (zstd-compressstream2 cs out in 0)
71
         (zstd-compressstream2 cs out in 1)
72
         (is (zerop (zstd-iserror (zstd-compressstream2 cs out in 2))))
73
         (zstd::zstd-flushstream cs out)
74
         (is (zerop (zstd-iserror (zstd::zstd-endstream cs out))))
75
         (zstd-decompressstream ds out in)
76
         (is (string-equal
77
              (cast (zstd::zstd-inbuffer-src in) c-string)
78
              test))))))
79
 
80
 (deftest simple-dictionary ()
81
   (let ((test "test 1 2 3"))
82
     (with-alien ((dict (* t))
83
                  (dst (array (unsigned 8) 100)))
84
       (with-zstd-buffers (in out :src (cast (make-alien-string test) (* t)) :dst (cast dst (* t)) :dst-size 100)
85
         (is (= 100 (zstd::zstd-outbuffer-size out)))
86
         (with-zstd-streams (cs ds)
87
           (is 
88
            (zerop
89
             (zstd-iserror
90
              (zstd::zstd-compress-usingdict 
91
               cs 
92
               (zstd::zstd-outbuffer-dst out) (zstd::zstd-outbuffer-size out) 
93
               (zstd::zstd-inbuffer-src in) (zstd::zstd-inbuffer-size in)
94
               dict (length test) (zstd-defaultclevel)))))
95
           (is
96
            (zerop
97
             (zstd-iserror
98
              (zstd::zstd-decompress-usingdict 
99
               ds
100
               (zstd::zstd-outbuffer-dst out) (zstd::zstd-outbuffer-size out) 
101
               (zstd::zstd-inbuffer-src in) (zstd::zstd-inbuffer-size in)
102
               dict (length test))))))))))
103
 
104
 (deftest bulk-dictionary ()
105
   (let ((test (make-array 4 :element-type '(unsigned-byte 8) :initial-contents #(1 2 3 4))))
106
     (with-alien ((dict (* t))
107
                  (dst (array (unsigned 8) 100)))
108
       (with-zstd-buffers (in out :src (octets-to-alien test) :dst (cast dst (* t)) :dst-size 100)
109
         (with-zstd-streams (cs ds)
110
             (with-zstd-cdict (cd :buffer test :size (length test))
111
               (is (typep cd '(alien (* (struct zstd::zstd-cdict-s)))))
112
               (is (zerop
113
                    (zstd-iserror
114
                     (zstd::zstd-compress-usingcdict cs (zstd::zstd-outbuffer-dst out) (zstd::zstd-outbuffer-size out)
115
                                                     (zstd::zstd-inbuffer-src in) (zstd::zstd-inbuffer-size in)
116
                                                     cd)))))
117
           (with-zstd-ddict (dd :buffer test :size (length test))
118
             (is (typep dd '(alien (* (struct zstd::zstd-ddict-s)))))
119
             (is (zerop
120
                  (zstd-iserror
121
                   (zstd::zstd-decompress-usingddict 
122
                    ds (zstd::zstd-outbuffer-dst out) (zstd::zstd-outbuffer-size out)
123
                    (zstd::zstd-inbuffer-src in) (zstd::zstd-inbuffer-size in) dd))))))))))