Skip to content

Commit 3c76b02

Browse files
committed
Add print-length test code
1 parent 3e25e57 commit 3c76b02

File tree

1 file changed

+164
-0
lines changed

1 file changed

+164
-0
lines changed

test/print-length.l

+164
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
(require :unittest "lib/llib/unittest.l")
2+
3+
(init-unit-test)
4+
5+
;; extended from `ansi-test' example
6+
;; https://gitlab.common-lisp.net/ansi-test/ansi-test
7+
8+
(defmacro print-test (form result &rest bindings)
9+
`(let ,bindings
10+
(assert
11+
(string=
12+
(prin1-to-string ,form)
13+
,result))))
14+
15+
16+
;; LISTS
17+
18+
(deftest print-length-list.1 ()
19+
(let ((x '(|A| |B| |C| |D| |E| |F|))
20+
(res (list
21+
"(...)"
22+
"(A ...)"
23+
"(A B ...)"
24+
"(A B C ...)"
25+
"(A B C D ...)"
26+
"(A B C D E ...)"
27+
"(A B C D E F)"
28+
"(A B C D E F)"
29+
"(A B C D E F)")))
30+
(let ((*print-case* :upcase)
31+
(*print-length* nil))
32+
(dotimes (i 9)
33+
(print-test x (pop res) (*print-length* i))))))
34+
35+
(deftest print-length-list.2 ()
36+
(let ((seq (make-list 100000 :initial-element 0))
37+
(*print-length* nil))
38+
(assert
39+
(equal seq (read-from-string (prin1-to-string seq))))))
40+
41+
(deftest print-length-list.3 ()
42+
(print-test '(1) "(1)" (*print-length* nil)))
43+
44+
(deftest print-length-list.4 ()
45+
(print-test '(1 . 2) "(1 . 2)" (*print-length* 1)))
46+
47+
(deftest print-length-list.5 ()
48+
(print-test '(1) "(1)" (*print-length* (1+ most-positive-fixnum))))
49+
50+
51+
;; VECTORS
52+
53+
(deftest print-length-vector.1 ()
54+
(let ((x #(|A| |B| |C| |D| |E| |F|))
55+
(res (list
56+
"#(...)"
57+
"#(A ...)"
58+
"#(A B ...)"
59+
"#(A B C ...)"
60+
"#(A B C D ...)"
61+
"#(A B C D E ...)"
62+
"#(A B C D E F)"
63+
"#(A B C D E F)"
64+
"#(A B C D E F)")))
65+
(let ((*print-case* :upcase)
66+
(*print-length* nil))
67+
(dotimes (i 9)
68+
(print-test x (pop res) (*print-length* i))))))
69+
70+
(deftest print-length-vector.2 ()
71+
(let ((seq (make-array 100000 :initial-element 0))
72+
(*print-length* nil))
73+
(assert
74+
(equal seq (read-from-string (prin1-to-string seq))))))
75+
76+
77+
;; FLOAT VECTORS
78+
79+
(deftest print-length-float-vector.1 ()
80+
(let ((x #f(1 2 3 4 5 6))
81+
(res (list
82+
"#f(...)"
83+
"#f(1.0 ...)"
84+
"#f(1.0 2.0 ...)"
85+
"#f(1.0 2.0 3.0 ...)"
86+
"#f(1.0 2.0 3.0 4.0 ...)"
87+
"#f(1.0 2.0 3.0 4.0 5.0 ...)"
88+
"#f(1.0 2.0 3.0 4.0 5.0 6.0)"
89+
"#f(1.0 2.0 3.0 4.0 5.0 6.0)"
90+
"#f(1.0 2.0 3.0 4.0 5.0 6.0)")))
91+
(let (*print-length*)
92+
(dotimes (i 9)
93+
(print-test x (pop res) (*print-length* i))))))
94+
95+
(deftest print-length-float-vector.2 ()
96+
(let ((seq (make-array 100000 :element-type float-vector))
97+
(*print-length* nil))
98+
(assert
99+
(equal seq (read-from-string (prin1-to-string seq))))))
100+
101+
102+
;; INTEGER VECTORS
103+
104+
(deftest print-length-integer-vector.1 ()
105+
(let ((x #i(1 2 3 4 5 6))
106+
(res (list
107+
"#i(...)"
108+
"#i(1 ...)"
109+
"#i(1 2 ...)"
110+
"#i(1 2 3 ...)"
111+
"#i(1 2 3 4 ...)"
112+
"#i(1 2 3 4 5 ...)"
113+
"#i(1 2 3 4 5 6)"
114+
"#i(1 2 3 4 5 6)"
115+
"#i(1 2 3 4 5 6)")))
116+
(let (*print-length*)
117+
(dotimes (i 9)
118+
(print-test x (pop res) (*print-length* i))))))
119+
120+
(deftest print-length-integer-vector.2 ()
121+
(let ((seq (make-array 100000 :element-type integer-vector))
122+
(*print-length* nil))
123+
(assert
124+
(equal seq (read-from-string (prin1-to-string seq))))))
125+
126+
127+
;; BIT VECTORS
128+
(deftest print-length-bitvector.1 ()
129+
(print-test #*00110101100011 "#*00110101100011" (*print-length* 0)))
130+
131+
132+
;; STRUCTURES
133+
134+
(defstruct print-length-struct foo)
135+
136+
(deftest print-length-structure.1
137+
(let ((*print-case* :upcase)
138+
(*print-structure* t)
139+
(s (instantiate print-length-struct))
140+
acc)
141+
(send s :set-val 'foo 17)
142+
(dotimes (i 5)
143+
(let ((*print-length* i))
144+
(push (prin1-to-string s) acc)))
145+
(assert
146+
(member (nreverse acc)
147+
'(("#s(...)"
148+
"#s(PRINT-LENGTH-STRUCT ...)"
149+
"#s(PRINT-LENGTH-STRUCT FOO ...)"
150+
"#s(PRINT-LENGTH-STRUCT FOO 17)"
151+
"#s(PRINT-LENGTH-STRUCT FOO 17)")
152+
("#s(PRINT-LENGTH-STRUCT ...)"
153+
"#s(PRINT-LENGTH-STRUCT FOO 17)"
154+
"#s(PRINT-LENGTH-STRUCT FOO 17)"
155+
"#s(PRINT-LENGTH-STRUCT FOO 17)"
156+
"#s(PRINT-LENGTH-STRUCT FOO 17)"))
157+
:test 'equal))))
158+
159+
160+
;; RUN TESTS
161+
162+
(eval-when (load eval)
163+
(run-all-tests)
164+
(exit))

0 commit comments

Comments
 (0)