changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/ffi/zstd/tests.lisp

changeset 698: 96958d3eb5b0
parent: 804b5ee20a46
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
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-array 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 #(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))))))))))
124