-
Notifications
You must be signed in to change notification settings - Fork 4
/
bench.lisp
122 lines (115 loc) · 4.65 KB
/
bench.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
(in-package 3bz)
#++(ql:quickload '(3bz salza2 flexi-streams chipz deoxybyte-gzip))
(defvar *foo* nil)
(defvar *chipz* nil)
(defvar *3bz* nil)
#++
(prog1 nil
(push *foo* *chipz*))
#++
(prog1 nil
(push *foo* *3bz*))
(defvar *zzz* nil)
(let* ((d (time
(alexandria:read-file-into-byte-vector "e:/tmp/t/linux-2.2.26.tar"))
#++(setf *foo*
(time
(map-into (make-array (expt 2 24) :element-type 'octet)
(lambda () (random 225))))))
(tmp (make-array (length d) :element-type 'octet
:initial-element 0))
(v #++(time
(salza2:compress-data d 'salza2:deflate-compressor))
(or *zzz*
(setf *zzz*
(time
(multiple-value-bind (x r w)
(gz:deflate-vector d tmp :compression 9
:suppress-header t)
(declare (ignore r))
(subseq x 0 w))))))
(c (make-instance 'octet-vector-context
:octet-vector v
:boxes (make-context-boxes :end (length v))))
(state (make-deflate-state :output-buffer tmp)))
#++(time (dump-deflate v "-sirqq"))
#++(time (dump-deflate v "-sir"))
(format t "chipz:~%")
(fill tmp 0)
(with-simple-restart (continue "continue")
(let ((x (time (chipz:decompress tmp 'chipz:deflate v))))
(declare (ignore x))
(assert (equalp d tmp))))
(fill tmp 0)
(format t "3bz:~%") ;; 0.36
(let ((x (time (decompress c state))))
(assert (not (ds-output-overflow state)))
(assert (ds-finished state))
(assert (equalp (typecase x
(cons
(time (apply 'concatenate 'octet-vector x)))
(vector x)
(number
(subseq tmp 0 x)))
d)))
(fill tmp 0)
(format t "3bz/pointer:~%") ;; 0.36
(cffi:with-pointer-to-vector-data (p v)
(with-octet-pointer (op p (length v))
(let ((x (time (decompress (make-instance 'octet-pointer-context
:pointer p :op op
:boxes (make-context-boxes :end (length v)))
(make-deflate-state :output-buffer tmp)))))
(assert (equalp (if (consp x)
(time (apply 'concatenate 'octet-vector x))
(subseq tmp 0 x))
d)))))
(fill tmp 0)
(format t "3bz/stream:~%")
(flex:with-input-from-sequence (s v)
(let ((x (time (decompress (make-instance 'octet-stream-context
:octet-stream s
:boxes (make-context-boxes :end (length v)))
(make-deflate-state :output-buffer tmp)))))
(assert (equalp (if (consp x)
(time (apply 'concatenate 'octet-vector x))
(subseq tmp 0 x))
d))))
(fill tmp 0)
(format t "gz:~%")
(let ((x (time (gz:inflate-vector v tmp :suppress-header t))))
(assert (equalp x d)))
(print (length v))
nil)
(let* ((d (time
(alexandria:read-file-into-byte-vector "e:/tmp/t/linux-2.2.26.tar")))
(tmp (make-array (length d) :element-type 'octet
:initial-element 0))
(v (or *zzz*
(setf *zzz*
(time
(multiple-value-bind (x r w)
(gz:deflate-vector d tmp :compression 9
:suppress-header t)
(declare (ignore r))
(subseq x 0 w)))))))
(fill tmp 0)
(format t "3bz:~%") ;; 0.33
(let ((x (time (decompress (make-instance 'octet-vector-context
:octet-vector v
:boxes (make-context-boxes
:end (length v)))
(make-deflate-state :output-buffer tmp)))))
(assert (equalp (if (consp x)
(time (apply 'concatenate 'octet-vector x))
(subseq tmp 0 x))
d)))
(format t " x10:~%")
(time
(loop repeat 10
do (decompress (make-instance 'octet-vector-context
:octet-vector v
:boxes (make-context-boxes
:end (length v)))
(make-deflate-state :output-buffer tmp))))
nil)