lexer: Fix memory leak merging tokens only some of which come from macros.
[pspp] / tests / output / ascii.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
3 dnl
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 dnl
17 AT_BANNER([ASCII driver -- rendering corner cases])
18
19 AT_SETUP([ASCII driver overwriting single-width text])
20 AT_KEYWORDS([render rendering])
21 AT_DATA([input], [dnl
22 ## overwriting rest of line
23 # plain
24 0 0 0 abc
25 1 0 0 BCD
26 # emphasized over plain
27 0 1 0 efg
28 1 1 1 FGH
29 # plain over emphasized
30 0 2 1 ijk
31 1 2 0 JKL
32 # emphasized over emphasized
33 0 3 1 mno
34 1 3 1 NOP
35
36 ## overwriting partial line
37 # plain
38 0 5 0 abcdef
39 0 5 0 A
40 2 5 0 CDE
41 # emphasized over plain
42 0 6 0 ghijkl
43 0 6 1 G
44 2 6 1 IJK
45 # plain over emphasized
46 0 7 1 mnopqr
47 0 7 0 M
48 2 7 0 OPQ
49 # emphasized over emphasized
50 0 8 1 stuvwx
51 0 8 1 S
52 2 8 1 UVW
53
54 ## overwriting rest of line with double-width characters
55 # plain
56 0 10 0 kakiku
57 2 10 0 きくけ
58 # emphasized over plain
59 0 11 0 kakiku
60 2 11 1 きくけ
61 # plain over emphasized
62 0 12 1 kakiku
63 2 12 0 きくけ
64 # emphasized over emphasized
65 0 13 1 kakiku
66 2 13 1 きくけ
67
68 ## overwriting partial line with double-width characters
69 # plain
70 0 15 0 kakikukeko
71 0 15 0 か
72 4 15 0 くけ
73 # emphasized over plain
74 0 16 0 kakikukeko
75 0 16 1 か
76 4 16 1 くけ
77 # plain over emphasized
78 0 17 1 kakikukeko
79 0 17 0 か
80 4 17 0 くけ
81 # emphasized over emphasized
82 0 18 1 kakikukeko
83 0 18 1 か
84 4 18 1 くけ
85 ])
86 AT_CHECK([ascii-test --emph=none input], [0], [dnl
87 aBCD
88 eFGH
89 iJKL
90 mNOP
91
92 AbCDEf
93 GhIJKl
94 MnOPQr
95 StUVWx
96
97 kaきくけ
98 kaきくけ
99 kaきくけ
100 kaきくけ
101
102 かkiくけko
103 かkiくけko
104 かkiくけko
105 かkiくけko
106 ])
107 AT_CHECK([ascii-test --emph=bold input], [0], [dnl
108 aBCD
109 eF\bFG\bGH\bH
110 i\biJKL
111 m\bmN\bNO\bOP\bP
112
113 AbCDEf
114 G\bGhI\bIJ\bJK\bKl
115 Mn\bnOPQr\br
116 S\bSt\btU\bUV\bVW\bWx\bx
117
118 kaきくけ
119 kaき\bきく\bくけ\b
120 k\bka\baきくけ
121 k\bka\baき\bきく\bくけ\b
122
123 かkiくけko
124\bかkiく\bくけ\bけko
125 かk\bki\biくけk\bko\bo
126\bかk\bki\biく\bくけ\bけk\bko\bo
127 ])
128 AT_CHECK([ascii-test --emph=underline input], [0], [dnl
129 aBCD
130 e_\bF_\bG_\bH
131 _\biJKL
132 _\bm_\bN_\bO_\bP
133
134 AbCDEf
135 _\bGh_\bI_\bJ_\bKl
136 M_\bnOPQ_\br
137 _\bS_\bt_\bU_\bV_\bW_\bx
138
139 kaきくけ
140 ka_\bき_\bく_\b
141 _\bk_\baきくけ
142 _\bk_\ba_\bき_\bく_\b
143
144 かkiくけko
145 _\bかki_\bく_\bけko
146 か_\bk_\biくけ_\bk_\bo
147 _\bか_\bk_\bi_\bく_\bけ_\bk_\bo
148 ])
149 AT_CLEANUP
150
151 AT_SETUP([ASCII driver overwriting double-width text])
152 AT_KEYWORDS([render rendering])
153 AT_DATA([input], [dnl
154 ## overwrite rest of line, aligned double-width over double-width
155 # plain
156 0 0 0 あいう
157 2 0 0 きくけ
158 # emphasized over plain
159 0 1 0 あいう
160 2 1 1 きくけ
161 # plain over emphasized
162 0 2 1 あいう
163 2 2 0 きくけ
164 # emphasized over emphasized
165 0 3 1 あいう
166 2 3 1 きくけ
167
168 ## overwrite rest of line, misaligned double-width over double-width
169 # plain
170 0 5 0 あいう
171 3 5 0 きくけ
172 # emphasized over plain
173 0 6 0 あいう
174 3 6 1 きくけ
175 # plain over emphasized
176 0 7 1 あいう
177 3 7 0 きくけ
178 # emphasized over emphasized
179 0 8 1 あいう
180 3 8 1 きくけ
181
182 ## overwrite partial line, aligned double-width over double-width
183 # plain
184 0 10 0 あいうえお
185 0 10 0 か
186 4 10 0 くけ
187 # emphasized over plain
188 0 11 0 あいうえお
189 0 11 1 か
190 4 11 1 くけ
191 # plain over emphasized
192 0 12 1 あいうえお
193 0 12 0 か
194 4 12 0 くけ
195 # emphasized over emphasized
196 0 13 1 あいうえお
197 0 13 1 か
198 4 13 1 くけ
199
200 ## overwrite partial line, misaligned double-width over double-width
201 # plain
202 0 15 0 あいうえおさ
203 1 15 0 か
204 5 15 0 くけ
205 # emphasized over plain
206 0 16 0 あいうえおさ
207 1 16 1 か
208 5 16 1 くけ
209 # plain over emphasized
210 0 17 1 あいうえおさ
211 1 17 0 か
212 5 17 0 くけ
213 # emphasized over emphasized
214 0 18 1 あいうえおさ
215 1 18 1 か
216 5 18 1 くけ
217
218 ## overwrite rest of line, aligned single-width over double-width
219 # plain
220 0 20 0 あいう
221 2 20 0 kikuko
222 # emphasized over plain
223 0 21 0 あいう
224 2 21 1 kikuko
225 # plain over emphasized
226 0 22 1 あいう
227 2 22 0 kikuko
228 # emphasized over emphasized
229 0 23 1 あいう
230 2 23 1 kikuko
231
232 ## overwrite rest of line, misaligned single-width over double-width
233 # plain
234 0 25 0 あいう
235 3 25 0 kikuko
236 # emphasized over plain
237 0 26 0 あいう
238 3 26 1 kikuko
239 # plain over emphasized
240 0 27 1 あいう
241 3 27 0 kikuko
242 # emphasized over emphasized
243 0 28 1 あいう
244 3 28 1 kikuko
245
246 ## overwrite partial line, aligned single-width over double-width
247 # plain
248 0 30 0 あいうえお
249 0 30 0 ka
250 4 30 0 kuke
251 # emphasized over plain
252 0 31 0 あいうえお
253 0 31 1 ka
254 4 31 1 kuke
255 # plain over emphasized
256 0 32 1 あいうえお
257 0 32 0 ka
258 4 32 0 kuke
259 # emphasized over emphasized
260 0 33 1 あいうえお
261 0 33 1 ka
262 4 33 1 kuke
263
264 ## overwrite partial line, misaligned single-width over double-width
265 # plain
266 0 35 0 あいうえおさ
267 1 35 0 a
268 5 35 0 kuke
269 # emphasized over plain
270 0 36 0 あいうえおさ
271 1 36 1 a
272 5 36 1 kuke
273 # plain over emphasized
274 0 37 1 あいうえおさ
275 1 37 0 a
276 5 37 0 kuke
277 # emphasized over emphasized
278 0 38 1 あいうえおさ
279 1 38 1 a
280 5 38 1 kuke
281 ])
282 AT_CHECK([ascii-test --emph=none input], [0], [dnl
283 あきくけ
284 あきくけ
285 あきくけ
286 あきくけ
287
288 あ?きくけ
289 あ?きくけ
290 あ?きくけ
291 あ?きくけ
292
293 かいくけお
294 かいくけお
295 かいくけお
296 かいくけお
297
298 ?か??くけ?さ
299 ?か??くけ?さ
300 ?か??くけ?さ
301 ?か??くけ?さ
302
303 あkikuko
304 あkikuko
305 あkikuko
306 あkikuko
307
308 あ?kikuko
309 あ?kikuko
310 あ?kikuko
311 あ?kikuko
312
313 kaいkukeお
314 kaいkukeお
315 kaいkukeお
316 kaいkukeお
317
318 ?aい?kuke?さ
319 ?aい?kuke?さ
320 ?aい?kuke?さ
321 ?aい?kuke?さ
322 ])
323 AT_CHECK([ascii-test --emph=bold input], [0], [dnl
324 あきくけ
325 あき\bきく\bくけ\b
326\bあきくけ
327\bあき\bきく\bくけ\b
328
329 あ?きくけ
330 あ?き\bきく\bくけ\b
331\bあ?きくけ
332\bあ?き\bきく\bくけ\b
333
334 かいくけお
335\bかいく\bくけ\bけお
336 かい\bいくけお\b
337\bかい\bいく\bくけ\bけお\b
338
339 ?か??くけ?さ
340 ?か\bか??く\bくけ\bけ?さ
341 ?か??くけ?さ\b
342 ?か\bか??く\bくけ\bけ?さ\b
343
344 あkikuko
345 あk\bki\bik\bku\buk\bko\bo
346\bあkikuko
347\bあk\bki\bik\bku\buk\bko\bo
348
349 あ?kikuko
350 あ?k\bki\bik\bku\buk\bko\bo
351\bあ?kikuko
352\bあ?k\bki\bik\bku\buk\bko\bo
353
354 kaいkukeお
355 k\bka\baいk\bku\buk\bke\beお
356 kaい\bいkukeお\b
357 k\bka\baい\bいk\bku\buk\bke\beお\b
358
359 ?aい?kuke?さ
360 ?a\baい?k\bku\buk\bke\be?さ
361 ?aい\bい?kuke?さ\b
362 ?a\baい\bい?k\bku\buk\bke\be?さ\b
363 ])
364 AT_CHECK([ascii-test --emph=underline input], [0], [dnl
365 あきくけ
366 あ_\bき_\bく_\b
367 _\bあきくけ
368 _\bあ_\bき_\bく_\b
369
370 あ?きくけ
371 あ?_\bき_\bく_\b
372 _\bあ?きくけ
373 _\bあ?_\bき_\bく_\b
374
375 かいくけお
376 _\bかい_\bく_\bけお
377 か_\bいくけ_\b
378 _\bか_\bい_\bく_\bけ_\b
379
380 ?か??くけ?さ
381 ?_\bか??_\bく_\bけ?さ
382 ?か??くけ?_\b
383 ?_\bか??_\bく_\bけ?_\b
384
385 あkikuko
386 あ_\bk_\bi_\bk_\bu_\bk_\bo
387 _\bあkikuko
388 _\bあ_\bk_\bi_\bk_\bu_\bk_\bo
389
390 あ?kikuko
391 あ?_\bk_\bi_\bk_\bu_\bk_\bo
392 _\bあ?kikuko
393 _\bあ?_\bk_\bi_\bk_\bu_\bk_\bo
394
395 kaいkukeお
396 _\bk_\baい_\bk_\bu_\bk_\beお
397 ka_\bいkuke_\b
398 _\bk_\ba_\bい_\bk_\bu_\bk_\be_\b
399
400 ?aい?kuke?さ
401 ?_\baい?_\bk_\bu_\bk_\be?さ
402 ?a_\bい?kuke?_\b
403 ?_\ba_\bい?_\bk_\bu_\bk_\be?_\b
404 ])
405 AT_CLEANUP
406
407 AT_SETUP([ASCII driver overwriting combining characters])
408 AT_KEYWORDS([render rendering])
409 AT_DATA([input], [dnl
410 ## overwriting rest of line, ordinary over combining
411 # plain
412 0 0 0 àéî
413 1 0 0 xyz
414 # emphasized over plain
415 0 1 0 àéî
416 1 1 1 xyz
417 # plain over emphasized
418 0 2 1 àéî
419 1 2 0 xyz
420 # emphasized over emphasized
421 0 3 1 àéî
422 1 3 1 xyz
423
424 ## overwriting rest of line, combining over ordinary
425 # plain
426 0 5 0 xyz
427 1 5 0 àéî
428 # emphasized over plain
429 0 6 0 xyz
430 1 6 1 àéî
431 # plain over emphasized
432 0 7 1 xyz
433 1 7 0 àéî
434 # emphasized over emphasized
435 0 8 1 xyz
436 1 8 1 àéî
437
438 ## overwriting partial line, ordinary over combining
439 # plain
440 0 10 0 àéîo̧ũẙ
441 0 10 0 a
442 2 10 0 iou
443 # emphasized over plain
444 0 11 0 àéîo̧ũẙ
445 0 11 1 a
446 2 11 1 iou
447 # plain over emphasized
448 0 12 1 àéîo̧ũẙ
449 0 12 0 a
450 2 12 0 iou
451 # emphasized over emphasized
452 0 13 1 àéîo̧ũẙ
453 0 13 1 a
454 2 13 1 iou
455
456 ## overwriting partial line, combining over ordinary
457 # plain
458 0 15 0 aeiouy
459 0 15 0 à
460 2 15 0 îo̧ũ
461 # emphasized over plain
462 0 16 0 aeiouy
463 0 16 1 à
464 2 16 1 îo̧ũ
465 # plain over emphasized
466 0 17 1 aeiouy
467 0 17 0 à
468 2 17 0 îo̧ũ
469 # emphasized over emphasized
470 0 18 1 aeiouy
471 0 18 1 à
472 2 18 1 îo̧ũ
473 ])
474 AT_CHECK([ascii-test --emph=none input], [0], [dnl
475 àxyz
476 àxyz
477 àxyz
478 àxyz
479
480 xàéî
481 xàéî
482 xàéî
483 xàéî
484
485 aéiouẙ
486 aéiouẙ
487 aéiouẙ
488 aéiouẙ
489
490 àeîo̧ũy
491 àeîo̧ũy
492 àeîo̧ũy
493 àeîo̧ũy
494 ])
495 AT_CHECK([ascii-test --emph=bold input], [0], [dnl
496 àxyz
497 àx\bxy\byz\bz
498 a\bàxyz
499 a\bàx\bxy\byz\bz
500
501 xàéî
502 xa\bàe\béi\b
503 x\bxàéî
504 x\bxa\bàe\béi\b
505
506 aéiouẙ
507 a\baéi\bio\bou\buẙ
508 ae\béiouy\b
509 a\bae\béi\bio\bou\buy\b
510
511 àeîo̧ũy
512 a\bàei\bîo\bo̧u\bũy
513 àe\beîo̧ũy\by
514 a\bàe\bei\bîo\bo̧u\bũy\by
515 ])
516 AT_CHECK([ascii-test --emph=underline input], [0], [dnl
517 àxyz
518 à_\bx_\by_\bz
519 _\bàxyz
520 _\bà_\bx_\by_\bz
521
522 xàéî
523 x_\bà_\bé_\b
524 _\bxàéî
525 _\bx_\bà_\bé_\b
526
527 aéiouẙ
528 _\baé_\bi_\bo_\buẙ
529 a_\béiou_\b
530 _\ba_\bé_\bi_\bo_\bu_\b
531
532 àeîo̧ũy
533 _\bàe_\bî_\bo̧_\bũy
534 à_\beîo̧ũ_\by
535 _\bà_\be_\bî_\bo̧_\bũ_\by
536 ])
537 AT_CLEANUP
538
539 AT_SETUP([ASCII driver u8_line_set_length])
540 AT_KEYWORDS([render rendering])
541 AT_DATA([input], [dnl
542 0 0 0 àéî
543 0 1 0 àéî
544 0 2 0 àéî
545 0 3 0 àéî
546 0 4 0 àéî
547 set-length 0 4
548 set-length 1 3
549 set-length 2 2
550 set-length 3 1
551 set-length 4 0
552
553 0 5 0 あい
554 0 6 0 あい
555 0 7 0 あい
556 0 8 0 あい
557 0 9 0 あい
558 0 10 0 あい
559 set-length 5 5
560 set-length 6 4
561 set-length 7 3
562 set-length 8 2
563 set-length 9 1
564 set-length 10 0
565 ])
566 AT_CHECK([ascii-test input], [0], [dnl
567 àéî
568 àéî
569 àé
570
571
572 あい
573 あい
574 あ?
575
576 ?
577 ])
578 AT_CLEANUP
579
580 AT_SETUP([ASCII driver syntax printback])
581 AT_DATA([ascii.sps], [dnl
582 SET PRINTBACK=ON.
583 DATA LIST LIST /x * y * a (a23).
584 BEGIN DATA.
585 1 11 One
586 2 22 Two
587 3 33 Three
588 END DATA.
589
590 REGRESSION
591 /VARIABLES= a
592 /DEPENDENT= x y
593 /STATISTICS=COEFF R ANOVA.
594 ])
595 AT_CHECK([pspp ascii.sps], [0], [dnl
596 SET PRINTBACK=ON.
597
598 DATA LIST LIST /x * y * a (a23).
599
600 Reading free-form data from INLINE.
601 +--------+------+
602 |Variable|Format|
603 +--------+------+
604 |x       |F8.0  |
605 |y       |F8.0  |
606 |a       |A23   |
607 +--------+------+
608
609 BEGIN DATA.
610 1 11 One
611 2 22 Two
612 3 33 Three
613 END DATA.
614
615 REGRESSION
616 /VARIABLES= a
617
618 ascii.sps:11: warning: REGRESSION: a is not a numeric variable.  It will not be
619 included in the variable list.
620
621 /DEPENDENT= x y
622 /STATISTICS=COEFF R ANOVA.
623 ])
624
625 AT_CLEANUP
626
627 AT_SETUP([ASCII unicode box chars])
628
629 AT_DATA([uc.sps], [dnl
630 SET FORMAT=F8.4.
631 DATA LIST NOTABLE LIST /x * .
632 BEGIN DATA.
633 1
634 2
635 3
636 END DATA.
637
638 DESCRIPTIVES X.
639 ])
640
641
642 AT_CHECK([pspp -O box=unicode uc.sps], [0], [dnl
643                  Descriptive Statistics
644 ╭────────────────────┬─┬──────┬───────┬───────┬───────╮
645 │                    │N│ Mean │Std Dev│Minimum│Maximum│
646 ├────────────────────┼─┼──────┼───────┼───────┼───────┤
647 │x                   │3│2.0000│ 1.0000│ 1.0000│ 3.0000│
648 │Valid N (listwise)  │3│      │       │       │       │
649 │Missing N (listwise)│0│      │       │       │       │
650 ╰────────────────────┴─┴──────┴───────┴───────┴───────╯
651 ])
652
653 AT_CLEANUP
654
655 AT_SETUP([ASCII crash on empty line])
656
657 AT_DATA([print.sps], [dnl
658 data list notable /x y 1-2.
659 begin data.
660 12
661 end data.
662
663 print.
664
665 execute.
666 ])
667
668 AT_CHECK([pspp print.sps], [0], [ignore])
669
670 AT_CLEANUP
671
672
673
674 dnl A crash has been observed when the first character
675 dnl of a string is U+0008
676 AT_SETUP([ASCII crash on non-printables])
677
678 AT_DATA([nonprint.sps], [dnl
679 DATA LIST FREE /s8 (a8).
680 BEGIN DATA.
681 xxxxxx zzz  \ba qqq
682 END DATA.
683
684 LIST.
685 ])
686
687 AT_CHECK([pspp nonprint.sps], [0], [ignore])
688
689 AT_CLEANUP