1#!/bin/sh
2#
3#  NOTE:  all tests duplicated in q_test.bat
4if ! which qconvex >/dev/null 2>&1; then
5    if [ ! -d bin ]; then
6	echo 'eg/q_test: Run eg/q_test from the Qhull directory with bin/qconvex, or add qconvex/etc. to $PATH'
7        exit 1
8    fi
9    if [ ! -e bin/qconvex -a ! -e bin/qconvex.exe ]; then
10        echo 'eg/q_test: Build qhull first.  qconvex is missing from bin/ directory and $PATH'
11        exit 1
12    fi
13    echo 'eg/q_test: Temporarily add "$PWD/bin" to $PATH for access to qconvex,etc.'
14    PATH=$PWD/bin:$PATH
15    if ! which qconvex >/dev/null 2>&1; then
16	echo 'eg/q_test: PATH=... failed.  Please execute "export PATH=$PWD/bin:$PATH" and repeat'
17	exit 1
18    fi
19fi
20if ! user_eg >/dev/null; then
21    echo eg/q_test: user_eg failed to run.  It uses the shared qhull library
22    echo 'On Linux, export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH'
23    echo 'On Windows with mingw, cp -p lib/libqhull_r.dll bin/'
24fi
25echo ==============================
26echo ========= eg/q_test ==========
27echo == Check qhull programs ======
28echo ==============================
29echo
30echo "qhull => $(qhull -V)"
31echo "qconvex => $(qconvex -V)"
32echo "qvoronoi => $(qconvex -V)"
33echo "qdelaunay => $(qdelaunay -V)"
34echo "qhalf => $(qhalf -V)"
35echo
36echo ==============================
37echo == check user_eg, user_eg2, and user_eg3
38echo == errors if 'user_eg' and 'user_eg2' not found
39echo ==============================
40set -v # echo commands to stdout
41user_eg  'QR1 p n Qt'  'v p'  'Fp'
42user_eg2 'QR1 p'       'v p'  'Fp'
43user_eg3 rbox '10 D2'  's r 5 D2'  qhull 's p'
44echo === check front ends and examples ${d:-`date`} ==================
45qconvex -
46qconvex .
47qconvex -? # [mar'19] isatty does not work for Git for Windows
48rbox c D3 | qconvex s n Qt
49rbox c D2 | qconvex s i
50rbox c D2 | qconvex s n
51rbox c D2 | qconvex o
52rbox 1000 s | qconvex s Tv FA
53rbox c d D2 | qconvex s Qc Fx
54rbox y 1000 W0 | qconvex Qc s n
55rbox y 1000 W0 | qconvex s QJ
56rbox d G1 D12 | qconvex QR0 FA
57rbox c D6 | qconvex s FA TF500
58rbox c D7 | qconvex s FA TF1000
59rbox d G1 D12 | qconvex QR0 FA Pp
60rbox c P0 d D2 | qconvex p Fa Fc FP FI Fn FN FS Fv Fx
61rbox c d D2 | qconvex s i QV0
62rbox c | qconvex Q0
63qvoronoi -
64qvoronoi .
65qvoronoi -? # [mar'19] isatty does not work for Git for Windows
66rbox c P0 D2 | qvoronoi s o
67rbox c P0 D2 | qvoronoi Fi Tv
68rbox c P0 D2 | qvoronoi Fo Tv
69rbox c P0 D2 | qvoronoi Fv
70rbox c P0 D2 | qvoronoi s Qu Fv
71rbox c P0 D2 | qvoronoi s Qu Qt Fv
72rbox c P0 D2 | qvoronoi Qu Fo
73rbox c G1 d D2 | qvoronoi s p
74rbox c G1 d D2 | qvoronoi QJ p
75rbox c P-0.1 P+0.1 P+0.1 D2 | qvoronoi s Fc FP FQ Fn FN
76rbox P0 c D2 | qvoronoi s Fv QV0
77qdelaunay -
78qdelaunay .
79qdelaunay -? # [mar'19] isatty does not work for Git for Windows
80rbox c P0 D2 | qdelaunay s o
81rbox c P0 D2 | qdelaunay i
82rbox c P0 D2 | qdelaunay Fv
83rbox c P0 D2 | qdelaunay s Qu Qt Fv
84rbox c G1 d D2 | qdelaunay s i
85rbox c G1 d D2 | qhull d Qbb Ft
86rbox c G1 d D2 | qhull d Qbb QJ s Ft
87rbox M3,4 z 100 D2 | qdelaunay s
88rbox c P-0.1 P+0.1 P+0.1 D2 | qdelaunay s Fx Fa Fc FP FQ Fn FN
89rbox P0 P0 c D2 | qdelaunay s FP QV0
90qhalf -
91qhalf .
92qhalf -? # [mar'19] isatty does not work for Git for Windows
93rbox d | qhull FQ n | qhalf s Qt H0,0,0 Fp
94rbox c | qhull FQ FV n | qhalf s i
95rbox c | qhull FQ FV n | qhalf o
96rbox d D2 | qhull FQ n | qhalf s H0 Fc FP Fn FN FQ Fv Fx
97# qhull - printed at end
98qhull .
99qhull -? # [mar'19] isatty does not work for Git for Windows
100rbox 1000 s | qhull Tv s FA
101rbox 10 D2 | qhull d QJ s i TO q_test.log.1
102cat q_test.log.1
103rbox 10 D2 | qhull v Qbb Qt p
104rbox 10 D2 | qhull d Qu QJ m
105rbox 10 D2 | qhull v Qu QJ o
106rbox c d D2 | qhull Qc s f Fx
107rbox c | qhull FV n | qhull H Fp
108rbox d D12 | qhull QR0 FA
109rbox c D7 | qhull FA TF1000
110rbox y 1000 W0 | qhull Qc
111rbox c | qhull n
112rbox c | qhull TA1
113rbox 10 s | qhull C1e-5 T1P-1f
114
115echo === check quality of Qhull for ${d:-`hostname`} ${d:-`date`}
116rbox 1000 W0 | qhull QR2 QJ s Fs Tv
117rbox 1000 W0 | qhull QR2 s Fs Tv
118rbox 1000 s | qhull C0.02 Qc Tv
119rbox 500 s D4 | qhull C0.01 Qc Tv
120rbox 1000 s | qhull C-0.02 Qc Tv
121rbox 1000 s D4 | qhull C-0.01 Qc Tv
122rbox 200 s D5 | qhull C-0.01 Qx Qc Tv
123rbox 100 s D6 | qhull C-0.001 Qx Qc Tv
124rbox 1000 W1e-4 | qhull C-1e-6 Qc Tv
125rbox 1000 W5e-4 D4 | qhull C-1e-5 Qc Tv
126rbox 400 W1e-3 D5 | qhull C-1e-5 Qx Qc Tv
127echo === check input format etc. ${d:-`date`}
128qhull <<EOF
1292 4 input comment
1301 0 1 1 1 2  0 0
131EOF
132qhull <<EOF
1332 4 input comment
1341 0 1 1 1 2  0 0 0
135EOF
136qhull Qa <<EOF
1372 4 input comment
1381 0 1 1 1 2  0 0 0
139EOF
140qhull <<EOF
1412 4 input comment
1421 0 1 1 1 2  0
143EOF
144qhull Qa <<EOF
1452 4 input comment
1461 0 1 1 1 2  0
147EOF
148qhull <<EOF
1492 
1504 input comment
1511 #another comment
1520 1 1 1 2  0
153EOF
154qhull <<EOF
1552 4  1 0  1 1  1 2  0 0
156EOF
157qhull d Qz <<EOF
1582 5  1 0  1 1  0 1  0 0  0
159EOF
160qhull d Q8 Qz <<EOF
1612 5  1 0  1 1  0 1  0 0  0
162EOF
163rbox d h | qhull Fd FV n FD Tcv | qhull Fd H Fp Tcv
164rbox 10 h | qhull Fd FD p Tcv | qhull Fd d Tcv
165
166echo === check rbox ${d:-`date`}
167rbox 3 n D2
168rbox 3 D2
169rbox 3 h D2
170rbox 3 z D2
171rbox 3 z h D2
172rbox 3 B10 D2
173rbox 3 B10 D2 C2,1E-13,1
174rbox 3 z B10 D2
175rbox 4 L2 r D2
176rbox 8 L2 r D2
177rbox 8 L2 D2 C1,1E-13,2
178rbox 4 L4 r D3
179rbox 4 L4 s D5 W1e-3
180rbox 4 L4 s D5 W1e-3 C1,1E-12
181rbox y
182rbox 10 M3,4
183rbox 10 M3,4 C1,1E-14
184rbox 27 M1,0,1
185rbox 10 L4 r D3 | qhull Tcv
186rbox 10 L4 s D5 W1e-3 | qhull Tcv
187rbox 10 L4 s D5 W1e-3 C1,1E-12 | qhull Tcv
188rbox 10 L6 D3 | qhull Tcv
189rbox 10 L1.1 s D4 | qhull Tcv
190rbox y r 100 W0 O0.5 | qhull s p Tcv
191rbox x r 100 W0 O0.5 | qhull s Tcv
192rbox 12 D8 | qhull Tcv
193rbox 12 D9 | qhull Tcv
194rbox 1000 D4 | qhull s i A-0.97 C0.2 A0.7 Tcv
195rbox 3 D2 | qhull Qb0B1:-2 p
196rbox 100 r D2 | qhull Pd0:0.7 PD0:0.8 Pg n Tcv
197rbox 1000 s | qhull  C0.05 Tcv
198rbox 1000 s t | qhull Qm C0.05 Tcv
199rbox 500 D2 | qhull n A-0.95 C0.1 Tcv
200rbox 500 s P1,1,1 | qhull QgG0 Pp Tcv
201rbox d | qhull m
202rbox d | qhull FM
203rbox c D2 | qhull Tcv Q0
204rbox d D2 | qhull Tcv
205rbox c D3 | qhull Tcv Q0
206rbox d D3 | qhull Tcv
207rbox c D4 | qhull Tcv Q0
208rbox d D4 | qhull Tcv
209rbox c D5 | qhull Tcv Q0
210rbox d D5 | qhull Tcv
211rbox c D6 | qhull Tcv Q0
212rbox d D6 | qhull Tcv
213rbox d D7 | qhull Tcv
214rbox c D2 | qhull Tcv C-0
215rbox c D3 | qhull Tcv C-0
216rbox c D4 | qhull Tcv C-0
217rbox c D5 | qhull Tcv C-0
218rbox c D6 | qhull Tcv C-0
219rbox c D7 | qhull Tv C-0
220rbox 20 l D3 | qhull Tcv
221rbox 100 s D2 | qhull Tcv
222rbox 100 s D3 | qhull Tcv
223rbox 100 s D4 | qhull Tcv
224rbox 100 s c D4 | qhull Tcv
225rbox 100 s d G1.5 D4 | qhull Tcv
226rbox 100 s W1e-2 | qhull Tcv
227rbox 100 | qhull Tcv
228rbox 100 W1e-3 | qhull Tcv
229rbox 100 r D2 | qhull Tcv
230rbox 100 r s Z1 | qhull Tcv
231rbox 100 r s Z1 G0.1 | qhull Tcv C-0
232rbox 100 s Z1 G0.1 | qhull Tcv
233rbox 100 s Z1e-5 G0.1 | qhull Tc Pp
234
235echo === check qhull option errors ${d:-`date`}
236
237rbox 10 | qhull d H0
238rbox 10 | qhull Zza
239rbox 10 | qhull Zza Qw
240rbox 10 | qhull Q999
241rbox 10 | qhull Q999 Qw
242qhull TIxyzlkajdfhwh
243rbox 10 >r.x
244qhull TIr.x
245qhull p TI    r.x TO x.x
246cat x.x
247
248echo === check qhull output formats ${d:-`date`}
249rbox 5 r s D2 | qhull Tcv
250rbox 5 r s D2 | qhull s
251rbox 5 r s D2 | qhull s o
252rbox 5 r s D2 | qhull f
253rbox 5 r s D2 | qhull i
254rbox 5 r s D2 | qhull m
255rbox 5 r s D2 | qhull FM
256rbox 5 r s D2 | qhull n
257rbox 5 r s D2 | qhull p
258rbox 5 r s D2 | qhull o
259rbox 5 r s D2 | qhull Ft
260rbox 5 r s D2 | qhull Fx
261rbox 5 r s D2 | qhull p n i p p
262rbox 10 D3 | qhull f Tcv
263rbox 10 D3 | qhull i
264rbox 10 D3 | qhull p
265rbox 10 D3 | qhull o
266rbox 10 D3 | qhull Fx
267rbox 27 M1,0,1 | qhull Qc
268rbox 50 D3 s | qhull C0.1 Qc Pd0d1d2 Pg s p Tcv
269rbox 10 D2 P0 P1e-15 | qhull d Qc FP s Tcv
270rbox 100 s | qhull C-0.003 Qc FP s
271rbox 100 s D2 | qhull C0.1 i Fx Tcv
272rbox 4 s D3 | qhull Qc Ghipv Tcv
273rbox 6 D4 | qhull f Tcv
274rbox 6 D4 | qhull i
275rbox 6 D4 | qhull p
276rbox 6 D4 | qhull o
277rbox 1000 s D2 | qhull FA Tcv
278rbox 1000 s | qhull FA Tcv
279rbox c D4 | qhull FA Tcv
280rbox c D5 | qhull FA Tcv
281rbox c D5 | qhull FA Qt Tcv
282rbox 10 D2 | qhull d FA Tcv
283rbox 10 D2 | qhull d Qu FA Tcv
284rbox 10 D2 | qhull FA Tcv
285rbox 10 c D2 | qhull Fx Tcv
286rbox 1000 s | qhull FS Tcv
287rbox 10 W0 D2 | qhull p Qc FcC Tcv
288rbox 4 z h s D2 | qhull Fd s n FD Tcv
289rbox 6 s D3 | qhull C-0.1 Qc FF s FQ Fi n Fo FQ FI Fm Fn FN FO FO FQ Fs FS FV Fv Tcv
290rbox P0.5,0.5 P0.5,0.5 W0 5 D2 | qhull d FN Qc
291rbox 10 D3 | qhull Fa PA5
292rbox 10 D3 | qhull Fa PF0.4
293
294echo === test Qt ${d:-`date`}
295rbox c | qhull Qt s o Tcv
296rbox c | qhull Qt f i
297rbox c | qhull Qt m FM n
298rbox c | qhull Qt p o
299rbox c | qhull Qt Fx
300rbox c | qhull Qt FA s Fa
301rbox 6 r s c G0.1 D2 | qhull Qt d FA Tcv
302rbox 6 r s c G0.1 D2 | qhull d FA Tcv
303rbox 6 r s c G0.1 D2 | qhull Qt v p Tcv
304rbox c | qhull Qt C-0.1 Qc FF s FQ Fi n Fo FQ FI Fm Fn FN FO FO FQ Fs FS FV Fv Tcv
305rbox 6 r s c G0.1 D2 P0.1,0.1 | qhull s FP d FO Qt
306rbox 100 W0 | qhull Tv Q11 FO
307
308echo === test unbounded intersection ${d:-`date`}
309rbox c | qhull PD0:0.5 n | qhull H0 Fp Tcv
310rbox 1000 W1e-3 D3 | qhull PA8 Fa FS s n Tcv
311rbox 1000 W1e-3 D3 | qhull C-0.01 PM10 Fm n Tcv Qc
312rbox 1000 W1e-3 D3 | qhull C-0.01 PA8 PG n Tcv Qc
313rbox 10 | qhull FO Tz TO q_test.log.1
314cat q_test.log.1
315
316echo === check Delaunay/Voronoi ${d:-`date`}
317rbox 10 D2 | qhull d Tcv
318rbox 10 D2 | qhull d Qz Tcv
319rbox 10 D3 | qhull d Tcv
320rbox c | qhull d Qz Ft Tcv
321rbox 10 s D2 c | qhull d Tcv
322rbox 10 s D2 | qhull d Tcv Qz Q8
323rbox 10 D2 | qhull d Tcv p
324rbox 10 D2 | qhull d Tcv i
325rbox 10 D2 | qhull d Tcv o
326rbox 10 D2 | qhull v Tcv o
327rbox 10 D2 | qhull v Tcv p
328rbox 10 D2 | qhull v Tcv G
329rbox 10 D2 | qhull v Tcv Fv
330rbox 10 D2 | qhull v Tcv Fi
331rbox 10 D2 | qhull v Tcv Fo
332rbox 10 D2 | qhull v Qu o Fv Fi Fo Tcv
333rbox 10 D3 | qhull v Fv Tcv
334rbox 10 D3 | qhull v Fi Tcv
335rbox 10 D3 | qhull v Fo Tcv
336rbox 10 D3 | qhull v Qu o Fv Fi Fo Tcv
337rbox 5 D2 | qhull v f FnN o
338
339echo === check Halfspace and Qhull identity pipeline, showing the input ${d:-`date`}
340echo === the Qhull pipeline recreates 100 4-D cospherical points with the same area and volume
341rbox 100 s D4 | qhull FA FV s n | head
342rbox 100 s D4 | qhull FQ FA FV n s | qhull s H Fp | head
343rbox 100 s D4 | qhull FQ FA FV n s Tcv | qhull FQ s H Fp Tcv | qhull FA Tcv
344echo === the Qhull pipeline recreates a 3-D tetrahedron
345rbox d D3 | qhull n FD
346rbox d D3 | qhull s n FD Tcv | qhull s Fd H0.1,0.1 Fp Tcv
347echo === the Qhull pipeline recreates a regular 2-D pentagon
348rbox 5 r D2 | qhull FQ n
349rbox 5 r D2 | qhull s FQ n Tcv | qhull s H0 Fp Tcv
350
351echo === check qhull ${d:-`date`}
352rbox 10 s D3 | qhull Tcv
353rbox 10 s D3 | qhull f Pd0:0.5 Pd2 Pg Tcv
354rbox 10 s D3 | qhull f Tcv PD2:-0.5 Pg
355rbox 10 s D3 | qhull QR-1
356rbox 10 s D3 | qhull QR-40
357rbox 1000 D3 | qhull Tcvs
358# Test tracing 'Tn', combine stderr/stdout 'Tz', flush fprintf 'Tf'
359rbox 100 D3 | qhull T1 Tz Tf TA1 TO q_test.log.1
360tail -n -10 q_test.log.1
361rm q_test.log.1
362rbox 100 s D3 | qhull TcvA10
363rbox 100 s D3 | qhull TcvV-2
364rbox 100 s D3 | qhull TcvC2
365rbox 100 s D3 | qhull TcvV2
366rbox 100 s D3 | qhull T1cvV2P2
367rbox 100 s D3 | qhull TcvF100
368rbox 100 s D3 | qhull Qf Tcv
369rbox 100 D3 | qhull Tcv
370rbox 100 D3 | qhull Qs Tcv
371rbox 100 D5 | qhull Qs Tcv
372rbox 100 D3 | qhull Qr Tcv
373rbox 100 D3 | qhull Qxv Tcv
374rbox 100 D3 | qhull Qi f Pd0 Pd1 Pd2 Pg Tcv
375rbox c d | qhull Qc f Tcv
376rbox c d | qhull Qc p Tcv
377rbox 100 D3 | qhull QbB FO Tcv
378rbox 1000 D2 B1e6 | qhull d Qbb FO Tcv
379rbox 10 D3 | qhull QbB p Tcv
380rbox 10 D3 | qhull Qbb p Tcv
381rbox 10 D3 | qhull Qb0:-10B2:20 p Tcv
382rbox 10 D3 | qhull Qb0:-10B2:20 p Tcv | qhull QbB p Tcv
383rbox 10 D3 | qhull Qb1:0B1:0 d Tcv Q8
384rbox 10 D3 | qhull Qb1:0B1:0B2:0 d Tcv Q8
385rbox 10 D3 | qhull Qb1:0 d Tcv
386rbox 10 D3 | qhull Qb1:0B1:0  Tcv
387echo "== next command will error ${d:-`date`} =="
388rbox 10 D2 | qhull Qb1:1B1:1 Tcv
389rbox 200 L20 D2 t | qhull FO Tcv C-0
390rbox 1000 L20 t | qhull FO Tcv C-0
391rbox 200 L20 D4 t | qhull FO Tcv C-0
392rbox 200 L20 D5 t | qhull FO Tcv Qx
393rbox 1000 W1e-3 s D2 t | qhull d FO Tcv Qu Q0
394rbox 1000 W1e-3 s D2 t | qhull d FO Tcv Qu C-0
395
396echo === check joggle and TRn ${d:-`date`}
397rbox 100 W0 | qhull QJ1e-14 Qc TR100 Tv
398rbox 100 W0 | qhull QJ1e-13 Qc TR100 Tv
399rbox 100 W0 | qhull QJ1e-12 Qc TR100 Tv
400rbox 100 W0 | qhull QJ1e-11 Qc TR100 Tv
401rbox 100 W0 | qhull QJ1e-10 Qc TR100 Tv
402rbox 100 | qhull d QJ Qb0:1e4 QB0:1e5 Qb1:1e4 QB1:1e6 Qb2:1e5 QB2:1e7 FO Tv
403
404echo === check precision options ${d:-`date`}
405rbox 100 D3 s | qhull E0.01 Qx Tcv FO
406rbox 100 D3 W1e-1 | qhull W1e-3 Tcv
407rbox 100 D3 W1e-1 | qhull W1e-2 Tcv Q0
408rbox 100 D3 W1e-1 | qhull W1e-2 Tcv
409rbox 100 D3 W1e-1 | qhull W1e-1 Tcv
410rbox 15 D2 P0 P1e-14,1e-14 | qhull d Quc Tcv
411rbox 15 D3 P0 P1e-12,1e-14,1e-14 | qhull d Qcu Tcv
412rbox 1000 s D3 | qhull C-0.01 Tcv Qc
413rbox 1000 s D3 | qhull C-0.01 V0 Qc Tcv
414rbox 1000 s D3 | qhull C-0.01 U0 Qc Tcv
415rbox 1000 s D3 | qhull C-0.01 V0 Qcm Tcv
416rbox 1000 s D3 | qhull C-0.01 Qcm Tcv
417rbox 1000 s D3 | qhull C-0.01 Q1 FO Tcv Qc
418rbox 1000 s D3 | qhull C-0.01 Q2 FO Tcv Qc
419rbox 1000 s D3 | qhull C-0.01 Q3 FO Tcv Qc
420rbox 1000 s D3 | qhull C-0.01 Q4 FO Tcv Qc
421echo === this may generate an error ${d:-`date`}
422rbox 1000 s D3 | qhull C-0.01 Q5 FO Tcv
423echo === this should generate an error ${d:-`date`}
424rbox 1000 s D3 | qhull C-0.01 Q6 FO Po Tcv Qc
425rbox 1000 s D3 | qhull C-0.01 Q7 FO Tcv Qc
426rbox 1000 s D3 | qhull C-0.01 Qx Tcv Qc
427echo === this may generate an error e.g., t1263080158 ${d:-`date`}
428rbox 100 s D3 t | qhull R1e-3 Tcv Qc
429rbox 100 s D3 t | qhull R1e-2 Tcv Qc
430rbox 500 s D3 t | qhull R0.05 A-1 Tcv Qc
431rbox 100 W0 D3 t | qhull R1e-3 Tcv Qc
432rbox 100 W0 D3 t | qhull R1e-3 Qx Tcv Qc
433rbox 100 W0 D3 t | qhull R1e-2 Tcv Qc
434rbox 100 W0 D3 t | qhull R1e-2 Qx Tcv Qc
435rbox 500 W0 D3 t | qhull R0.05 A-1 Tcv Qc
436rbox 500 W0 D3 t | qhull R0.05 Qx Tcv Qc
437rbox 1000 W1e-20 t | qhull Tcv Qc
438rbox 1000 W1e-20 D4 t | qhull Tcv Qc
439rbox 500 W1e-20 D5 t | qhull Tv Qc
440rbox 100 W1e-20 D6 t | qhull Tv Qc
441rbox 50 W1e-20 D6 t | qhull Qv Tv Qc
442rbox 10000 D4 t | qhull QR0 Qc C-0.01 A0.3 Tv
443rbox 1000 D2 t | qhull d QR0 Qc C-1e-8 Qu Tv
444rbox 300 D5 t |qhull A-0.999 Qx Qc Tcv
445rbox 100 D6 t |qhull A-0.9999 Qx Qc Tcv
446rbox 50 D7 t |qhull A-0.99999 Qx Qc Tcv W0.1
447
448echo =======================================================
449echo === The following commands may cause errors ${d:-`date`}
450echo =======================================================
451
452echo === check bad cases for Qhull ${d:-`date`}
453rbox 1000 L100000 s G1e-6 t | qhull Tv
454rbox 1000 L100000 s G1e-6 t | qhull Tv Q10
455rbox 1000 s Z1 G1e-13 t | qhull Tv
456rbox 1000 s W1e-13 P0 t | qhull d Qbb Qc Q12 Tv
457rbox 1000 s W1e-13 t | qhull d Q12 Tv
458rbox 1000 s W1e-13 t D2 | qhull d Tv
459
460echo === check Qhull without merging Q0 ${d:-`date`}
461rbox c D7 | qhull Q0 Tcv
462rbox 100 s D3 | qhull Q0 E1e-3 Tc Po
463rbox 100 s D3 | qhull Q0 E1e-2 Tc Po
464rbox 100 s D3 | qhull Q0 E1e-1 Tc Po
465rbox 100 s D3 | qhull Q0 R1e-3 Tc Po
466rbox 100 s D3 | qhull Q0 R1e-2 Tc Po
467rbox 100 s D3 | qhull Q0 R0.05 Tc
468rbox 100 s D3 | qhull Q0 R0.05 Tc Po
469rbox 1000 W1e-7 | qhull Q0 Tc Po
470rbox 50 s | qhull Q0 V0.05 W0.01 Tc Po
471rbox 100 s D5 | qhull Q0 R1e-2 Tc Po
472
473echo === check nearly incident points ${d:-`date`}
474rbox L100 2000 D4 s C1,1e-13 t2 | qhull
475rbox L100 2000 D4 s C1,1e-13 t2 | qhull Q12
476rbox 50 C1,1E-13 t1447644703 | qhull d
477rbox 50 C1,1E-13 t1447644703 | qhull d Q12
478rbox 50 C1,1E-13 t1447644703 | qhull d Q14
479
480qhull -
481rbox
482cat html/qhull.txt html/rbox.txt
483
484# end of q_test
485