1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
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.
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.
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/>.
17 AT_BANNER([data output (data-out)])
19 AT_SETUP([numeric format output])
20 AT_KEYWORDS([data-out slow])
24 SET CCB='-,[[[,]]],-'.
31 values = """0 2 9.5 27 271 999.95 2718 9999.995 27182 271828
32 2718281 2**39 2**333 2**-21 -2 -9.5 -27 -271 -999.95 -2718 -9999.995
33 -27182 -271828 -2718281 -2**39 -2**333 -2**-21 -0 3.125 31.25 314.125
34 3141.5 31415.875 314159.25 3141592.625 31415926.5 271828182.25
35 3214567890.5 31415926535.875 -3.125 -31.375 -314.125 -3141.5
36 -31415.875 -314159.25 -3141592.625 -31415926.5 -271828182.25
37 -3214567890.5 -31415926535.875""".split()
39 print("""COMPUTE NUM=%s.
41 END CASE.""" % (value, value))
45 END INPUT PROGRAM.""")
47 print("PRINT OUTFILE='output.txt'/EXPR.")
48 for format in 'F COMMA DOT DOLLAR PCT E CCA CCB CCC CCD CCE N Z'.split():
52 if format in ('DOLLAR', 'PCT'):
54 if min_w == 1 and format.startswith('CC'):
59 for w in range(min_w, 41):
60 f = "%s%s.%s" % (format, w, d)
61 print("PRINT OUTFILE='output.txt'/'%s: \"' NUM(%s) '\"'." % (f, f))
62 print("PRINT SPACE OUTFILE='output.txt'.")
65 AT_CHECK([$PYTHON3 num-out.py > num-out.sps])
66 AT_CHECK([pspp -O format=csv num-out.sps])
67 AT_CHECK([inexactify < output.txt > output.inexact])
68 AT_CHECK([gzip -cd < $top_srcdir/tests/data/num-out.expected.cmp.gz > expout.cmp])
69 AT_DATA([num-out-decmp.py],
76 for line in sys.stdin:
77 line = line.rstrip('\r\n')
78 if line.startswith('*'):
81 state[1] = "%s" % (int(state[1]) + 1)
82 state[3] = ' ' + state[3]
83 print(' ' + ''.join(state))
84 elif line.startswith('$'):
86 state[1] = "%s" % (int(state[1]) + 1)
88 print(' ' + ''.join(state))
89 elif line.startswith('^'):
91 state[1] = "%s" % (int(state[1]) + 1)
92 state[4] = c + state[4]
93 print(' ' + ''.join(state))
95 m = re.match(r'^([A-Z]+)(\d+)([^"]+")( *)([^%"]*)(%?")$', line)
97 state = list(m.groups())
100 AT_CHECK([$PYTHON3 num-out-decmp.py < expout.cmp > expout.exact])
101 AT_CHECK([[inexactify < expout.exact > expout.inexact]])
102 AT_DATA([num-out-compare.py],
103 [[#! /usr/bin/python3
112 %s: compare expected and actual numeric formatting output
113 usage: %s [OPTION...] EXPECTED ACTUAL
114 where EXPECTED is the file containing expected output
115 and ACTUAL is the file containing actual output.
117 -e, --exact: Require numbers to be exactly equal.
118 (By default, small differences are permitted.)
119 -s, --spss: Ignore most SPSS formatting bugs in EXPECTED.
120 (A few differences are not compensated)
121 -v, --verbose: Use once to summarize errors and differences.
122 Use twice for details of differences."""
123 % (sys.argv[0], sys.argv[0]))
130 options, args = getopt.gnu_getopt(sys.argv[1:], 'esvh',
131 ['exact', 'spss', 'verbose', 'help'])
132 for key, value in options:
133 if key in ['-e', '--exact']:
135 elif key in ['-s', '--spss']:
137 elif key in ['-v', '--verbose']:
139 elif key in ['-h', '--help']:
144 sys.stderr.write("%s\n" % len(args))
145 sys.stderr.write("exactly two nonoption arguments are required "
146 "(use --help for help)\n")
150 """Returns 'n' incremented by one unit in its final decimal place.
154 for i, c in enumerate(n):
159 if last_digit is None:
162 for i in range(last_digit, -1, -1):
166 elif c in '012345678':
167 n[i] = chr(ord(c) + 1)
181 for a, b in itertools.zip_longest(open(args[0], 'r'),
185 print("Extra lines in %s" % args[0])
189 print("Extra lines in %s" % args[1])
197 if not a.isspace() and ':' not in a:
200 fmt, a_out = re.match(r'^ (.*): "(.*)"$', a).groups()
201 b_fmt, b_out = re.match(r'^ (.*): "(.*)"$', b).groups()
203 assert a_out != b_out
206 if increment(a_out) == b_out or increment(b_out) == a_out:
210 if re.search(r'0.*0', a_out) and not re.search(r'[1-9]', a_out):
213 elif '*' in a_out and len(a_out.strip('*')):
216 elif (expr.startswith('-')
217 and re.fullmatch(r'\*+', a_out)
218 and re.match(r'-\d(\.\d*#*)?E[-+]\d\d\d', b_out)
219 and fmt.startswith('E')):
222 elif (expr.startswith('-')
223 and (('-' not in a_out
224 and re.search(r'[1-9]', a_out)
227 and re.fullmatch(r'\*+', b_out)))):
232 print('%s: %s in %s: expected "%s", got "%s'
233 % (line_number, expr, fmt, a_out, b_out))
236 print("%s exact matches" % n_exact)
237 print("%s errors" % errors)
239 print('%s approximate matches' %approximate)
241 print("%s bad rounds" % bad_round)
242 print("%s SPSS WTF 1" % spss_wtf1)
243 print("%s SPSS WTF 2" % spss_wtf2)
244 print("%s lost signs" % lost_sign)
245 sys.exit(1 if errors else 0)
247 AT_CHECK([$PYTHON3 num-out-compare.py $PSPP_NUM_OUT_COMPARE_FLAGS expout.inexact output.inexact])
250 AT_SETUP([leading zeros in numeric output])
251 AT_KEYWORDS([data-out LEADZERO])
252 AT_DATA([data-out.sps], [dnl
253 DATA LIST LIST NOTABLE/x.
265 PRINT/x (F5.2) x (F5.1).
269 PRINT/x (F5.2) x (F5.1).
272 AT_CHECK([pspp -O format=csv data-out.sps], [0], [dnl
293 AT_SETUP([non-ASCII custom currency formats])
294 AT_KEYWORDS([data-out])
295 AT_DATA([data-out.sps], [dnl
296 SET CCA='«,¥,€,»'.
298 DATA LIST LIST NOTABLE/x.
299 PRINT/x (F8.2) x (CCA10.2).
311 AT_CHECK([pspp -O format=csv data-out.sps], [0], [dnl
312 "data-out.sps:2: note: SHOW: CCA is «,¥,€,»."
324 1.5E+010 ¥2E+010€ @&t@
326 -2E+010«¥2E+010€»
330 AT_SETUP([binary and hexadecimal output])
331 AT_KEYWORDS([data-out])
332 AT_DATA([binhex-out.sps], [dnl
334 SET MXWARNS=10000000.
336 DATA LIST NOTABLE/x 1-10.
407 FILE HANDLE output/NAME='binhex.out'/MODE=IMAGE/LRECL=256.
408 WRITE OUTFILE=output/
409 x(p1.0) x(p2.0) x(p3.0) x(p4.0) /* 000
410 x(p2.1) x(p3.1) x(p4.1) /* 00a
411 x(p3.2) x(p4.2) /* 013
413 x(pk1.0) x(pk2.0) x(pk3.0) x(pk4.0) /* 01e
414 x(pk2.1) x(pk3.1) x(pk4.1) /* 028
415 x(pk3.2) x(pk4.2) /* 031
417 x(ib1.0) x(ib2.0) x(ib3.0) x(ib4.0) /* 03c
418 x(ib1.1) x(ib2.1) x(ib3.1) x(ib4.1) /* 046
419 x(ib1.2) x(ib2.2) x(ib3.2) x(ib4.2) /* 050
420 x(ib1.3) x(ib2.3) x(ib3.3) x(ib4.3) /* 05a
421 x(ib2.4) x(ib3.4) x(ib4.4) /* 064
422 x(ib2.5) x(ib3.5) x(ib4.5) /* 06d
423 x(ib3.6) x(ib4.6) /* 076
424 x(ib3.7) x(ib4.7) /* 07d
425 x(ib3.8) x(ib4.8) /* 084
428 x(pib1.0) x(pib2.0) x(pib3.0) x(pib4.0) /* 093
429 x(pib1.1) x(pib2.1) x(pib3.1) x(pib4.1) /* 09d
430 x(pib1.2) x(pib2.2) x(pib3.2) x(pib4.2) /* 0a7
431 x(pib1.3) x(pib2.3) x(pib3.3) x(pib4.3) /* 0b1
432 x(pib2.4) x(pib3.4) x(pib4.4) /* 0bb
433 x(pib2.5) x(pib3.5) x(pib4.5) /* 0c4
434 x(pib3.6) x(pib4.6) /* 0cd
435 x(pib3.7) x(pib4.7) /* 0d4
436 x(pib3.8) x(pib4.8) /* 0db
439 x(pibhex2) x(pibhex4) /* 0ea
440 x(pibhex6) x(pibhex8). /* 0f0
444 AT_CHECK([pspp -O format=csv binhex-out.sps])
445 AT_CHECK([gzip -cd < $top_srcdir/tests/data/binhex-out.expected.gz > expout])
446 AT_CHECK([cat binhex.out], [0], [expout])
449 AT_SETUP([output valid dates])
450 AT_KEYWORDS([data-out])
451 AT_DATA([date-out.sps], [dnl
453 data list notable /x 1-30 (datetime).
456 30-6-1680 4:50:38.12301
457 24-7-1716 12:31:35.23453
458 19-6-1768 12:47:53.34505
459 2-8-1819 1:26:0.45615
460 27-3-1839 20:58:11.56677
461 19-4-1903 7:36:5.18964
462 25-8-1929 15:43:49.83132
463 29-9-1941 4:25:9.01293
464 19-4-1943 6:49:27.52375
465 7-10-1943 2:57:52.01565
466 17-3-1992 16:45:44.86529
467 25-2-1996 21:30:57.82047
469 19-4-43 6:49:27.10533
470 7-10-43 2:57:52.48229
471 17-3-92 16:45:44.65827
472 25-2-96 21:30:57.58219
473 10-11-2038 22:30:4.18347
474 18-7-2094 1:56:51.59319
476 print outfile='date.out'/x(date9) ' | ' x(date11).
477 print outfile='adate.out'/x(adate8) ' | ' x(adate10).
478 print outfile='edate.out'/x(edate8) ' | ' x(edate10).
479 print outfile='jdate.out'/x(jdate5) ' | ' x(jdate7).
480 print outfile='sdate.out'/x(sdate8) ' | ' x(sdate10).
481 print outfile='qyr.out'/x(qyr6) ' | ' x(qyr8).
482 print outfile='moyr.out'/x(moyr6) ' | ' x(moyr8).
483 print outfile='wkyr.out'/x(wkyr8) ' | ' x(wkyr10).
484 print outfile='datetime17.out'/x(datetime17).
485 print outfile='datetime18.out'/x(datetime18).
486 print outfile='datetime19.out'/x(datetime19).
487 print outfile='datetime20.out'/x(datetime20).
488 print outfile='datetime21.out'/x(datetime21).
489 print outfile='datetime22.out'/x(datetime22).
490 print outfile='datetime22.1.out'/x(datetime22.1).
491 print outfile='datetime23.2.out'/x(datetime23.2).
492 print outfile='datetime24.3.out'/x(datetime24.3).
493 print outfile='datetime25.4.out'/x(datetime25.4).
494 print outfile='datetime26.5.out'/x(datetime26.5).
495 print outfile='ymdhms16.out'/x(ymdhms16).
496 print outfile='ymdhms17.out'/x(ymdhms17).
497 print outfile='ymdhms18.out'/x(ymdhms18).
498 print outfile='ymdhms19.out'/x(ymdhms19).
499 print outfile='ymdhms20.out'/x(ymdhms20).
500 print outfile='ymdhms21.out'/x(ymdhms21).
501 print outfile='ymdhms21.1.out'/x(ymdhms21.1).
502 print outfile='ymdhms22.2.out'/x(ymdhms22.2).
503 print outfile='ymdhms23.3.out'/x(ymdhms23.3).
504 print outfile='ymdhms24.4.out'/x(ymdhms24.4).
505 print outfile='ymdhms25.5.out'/x(ymdhms25.5).
508 AT_CHECK([pspp -O format=csv date-out.sps])
509 AT_CHECK([cat date.out], [0], [dnl
510 ********* | 10-JUN-1648
511 ********* | 30-JUN-1680
512 ********* | 24-JUL-1716
513 ********* | 19-JUN-1768
514 ********* | 02-AUG-1819
515 ********* | 27-MAR-1839
516 ********* | 19-APR-1903
517 ********* | 25-AUG-1929
518 29-SEP-41 | 29-SEP-1941
519 19-APR-43 | 19-APR-1943
520 07-OCT-43 | 07-OCT-1943
521 17-MAR-92 | 17-MAR-1992
522 25-FEB-96 | 25-FEB-1996
523 29-SEP-41 | 29-SEP-1941
524 19-APR-43 | 19-APR-1943
525 07-OCT-43 | 07-OCT-1943
526 17-MAR-92 | 17-MAR-1992
527 25-FEB-96 | 25-FEB-1996
528 ********* | 10-NOV-2038
529 ********* | 18-JUL-2094
531 AT_CHECK([cat adate.out], [0], [dnl
532 ******** | 06/10/1648
533 ******** | 06/30/1680
534 ******** | 07/24/1716
535 ******** | 06/19/1768
536 ******** | 08/02/1819
537 ******** | 03/27/1839
538 ******** | 04/19/1903
539 ******** | 08/25/1929
540 09/29/41 | 09/29/1941
541 04/19/43 | 04/19/1943
542 10/07/43 | 10/07/1943
543 03/17/92 | 03/17/1992
544 02/25/96 | 02/25/1996
545 09/29/41 | 09/29/1941
546 04/19/43 | 04/19/1943
547 10/07/43 | 10/07/1943
548 03/17/92 | 03/17/1992
549 02/25/96 | 02/25/1996
550 ******** | 11/10/2038
551 ******** | 07/18/2094
553 AT_CHECK([cat edate.out], [0], [dnl
554 ******** | 10.06.1648
555 ******** | 30.06.1680
556 ******** | 24.07.1716
557 ******** | 19.06.1768
558 ******** | 02.08.1819
559 ******** | 27.03.1839
560 ******** | 19.04.1903
561 ******** | 25.08.1929
562 29.09.41 | 29.09.1941
563 19.04.43 | 19.04.1943
564 07.10.43 | 07.10.1943
565 17.03.92 | 17.03.1992
566 25.02.96 | 25.02.1996
567 29.09.41 | 29.09.1941
568 19.04.43 | 19.04.1943
569 07.10.43 | 07.10.1943
570 17.03.92 | 17.03.1992
571 25.02.96 | 25.02.1996
572 ******** | 10.11.2038
573 ******** | 18.07.2094
575 AT_CHECK([cat jdate.out], [0], [dnl
597 AT_CHECK([cat sdate.out], [0], [dnl
598 ******** | 1648/06/10
599 ******** | 1680/06/30
600 ******** | 1716/07/24
601 ******** | 1768/06/19
602 ******** | 1819/08/02
603 ******** | 1839/03/27
604 ******** | 1903/04/19
605 ******** | 1929/08/25
606 41/09/29 | 1941/09/29
607 43/04/19 | 1943/04/19
608 43/10/07 | 1943/10/07
609 92/03/17 | 1992/03/17
610 96/02/25 | 1996/02/25
611 41/09/29 | 1941/09/29
612 43/04/19 | 1943/04/19
613 43/10/07 | 1943/10/07
614 92/03/17 | 1992/03/17
615 96/02/25 | 1996/02/25
616 ******** | 2038/11/10
617 ******** | 2094/07/18
619 AT_CHECK([cat qyr.out], [0], [dnl
641 AT_CHECK([cat moyr.out], [0], [dnl
663 AT_CHECK([cat wkyr.out], [0], [dnl
664 ******** | 24 WK 1648
665 ******** | 26 WK 1680
666 ******** | 30 WK 1716
667 ******** | 25 WK 1768
668 ******** | 31 WK 1819
669 ******** | 13 WK 1839
670 ******** | 16 WK 1903
671 ******** | 34 WK 1929
672 39 WK 41 | 39 WK 1941
673 16 WK 43 | 16 WK 1943
674 40 WK 43 | 40 WK 1943
675 11 WK 92 | 11 WK 1992
677 39 WK 41 | 39 WK 1941
678 16 WK 43 | 16 WK 1943
679 40 WK 43 | 40 WK 1943
680 11 WK 92 | 11 WK 1992
682 ******** | 45 WK 2038
683 ******** | 29 WK 2094
685 AT_CHECK([cat datetime17.out], [0], [dnl
707 AT_CHECK([cat datetime18.out], [0], [dnl
729 AT_CHECK([cat datetime19.out], [0], [dnl
751 AT_CHECK([cat datetime20.out], [0], [dnl
773 AT_CHECK([cat datetime21.out], [0], [dnl
795 AT_CHECK([cat datetime22.out], [0], [dnl
817 AT_CHECK([cat datetime22.1.out], [0], [dnl
818 10-JUN-1648 00:00:00.0
819 30-JUN-1680 04:50:38.1
820 24-JUL-1716 12:31:35.2
821 19-JUN-1768 12:47:53.3
822 02-AUG-1819 01:26:00.5
823 27-MAR-1839 20:58:11.6
824 19-APR-1903 07:36:05.2
825 25-AUG-1929 15:43:49.8
826 29-SEP-1941 04:25:09.0
827 19-APR-1943 06:49:27.5
828 07-OCT-1943 02:57:52.0
829 17-MAR-1992 16:45:44.9
830 25-FEB-1996 21:30:57.8
831 29-SEP-1941 04:25:09.2
832 19-APR-1943 06:49:27.1
833 07-OCT-1943 02:57:52.5
834 17-MAR-1992 16:45:44.7
835 25-FEB-1996 21:30:57.6
836 10-NOV-2038 22:30:04.2
837 18-JUL-2094 01:56:51.6
839 AT_CHECK([cat datetime23.2.out], [0], [dnl
840 10-JUN-1648 00:00:00.00
841 30-JUN-1680 04:50:38.12
842 24-JUL-1716 12:31:35.23
843 19-JUN-1768 12:47:53.35
844 02-AUG-1819 01:26:00.46
845 27-MAR-1839 20:58:11.57
846 19-APR-1903 07:36:05.19
847 25-AUG-1929 15:43:49.83
848 29-SEP-1941 04:25:09.01
849 19-APR-1943 06:49:27.52
850 07-OCT-1943 02:57:52.02
851 17-MAR-1992 16:45:44.87
852 25-FEB-1996 21:30:57.82
853 29-SEP-1941 04:25:09.15
854 19-APR-1943 06:49:27.11
855 07-OCT-1943 02:57:52.48
856 17-MAR-1992 16:45:44.66
857 25-FEB-1996 21:30:57.58
858 10-NOV-2038 22:30:04.18
859 18-JUL-2094 01:56:51.59
861 AT_CHECK([cat datetime24.3.out], [0], [dnl
862 10-JUN-1648 00:00:00.000
863 30-JUN-1680 04:50:38.123
864 24-JUL-1716 12:31:35.235
865 19-JUN-1768 12:47:53.345
866 02-AUG-1819 01:26:00.456
867 27-MAR-1839 20:58:11.567
868 19-APR-1903 07:36:05.190
869 25-AUG-1929 15:43:49.831
870 29-SEP-1941 04:25:09.013
871 19-APR-1943 06:49:27.524
872 07-OCT-1943 02:57:52.016
873 17-MAR-1992 16:45:44.865
874 25-FEB-1996 21:30:57.820
875 29-SEP-1941 04:25:09.154
876 19-APR-1943 06:49:27.105
877 07-OCT-1943 02:57:52.482
878 17-MAR-1992 16:45:44.658
879 25-FEB-1996 21:30:57.582
880 10-NOV-2038 22:30:04.183
881 18-JUL-2094 01:56:51.593
883 AT_CHECK([cat datetime25.4.out], [0], [dnl
884 10-JUN-1648 00:00:00.0000
885 30-JUN-1680 04:50:38.1230
886 24-JUL-1716 12:31:35.2345
887 19-JUN-1768 12:47:53.3450
888 02-AUG-1819 01:26:00.4562
889 27-MAR-1839 20:58:11.5668
890 19-APR-1903 07:36:05.1896
891 25-AUG-1929 15:43:49.8313
892 29-SEP-1941 04:25:09.0129
893 19-APR-1943 06:49:27.5238
894 07-OCT-1943 02:57:52.0156
895 17-MAR-1992 16:45:44.8653
896 25-FEB-1996 21:30:57.8205
897 29-SEP-1941 04:25:09.1539
898 19-APR-1943 06:49:27.1053
899 07-OCT-1943 02:57:52.4823
900 17-MAR-1992 16:45:44.6583
901 25-FEB-1996 21:30:57.5822
902 10-NOV-2038 22:30:04.1835
903 18-JUL-2094 01:56:51.5932
905 AT_CHECK([cat datetime26.5.out], [0], [dnl
906 10-JUN-1648 00:00:00.00000
907 30-JUN-1680 04:50:38.12301
908 24-JUL-1716 12:31:35.23453
909 19-JUN-1768 12:47:53.34505
910 02-AUG-1819 01:26:00.45615
911 27-MAR-1839 20:58:11.56677
912 19-APR-1903 07:36:05.18964
913 25-AUG-1929 15:43:49.83132
914 29-SEP-1941 04:25:09.01293
915 19-APR-1943 06:49:27.52375
916 07-OCT-1943 02:57:52.01565
917 17-MAR-1992 16:45:44.86529
918 25-FEB-1996 21:30:57.82047
919 29-SEP-1941 04:25:09.15395
920 19-APR-1943 06:49:27.10533
921 07-OCT-1943 02:57:52.48229
922 17-MAR-1992 16:45:44.65827
923 25-FEB-1996 21:30:57.58219
924 10-NOV-2038 22:30:04.18347
925 18-JUL-2094 01:56:51.59319
927 AT_CHECK([cat ymdhms16.out], [0], [dnl
949 AT_CHECK([cat ymdhms17.out], [0], [dnl
971 AT_CHECK([cat ymdhms18.out], [0], [dnl
993 AT_CHECK([cat ymdhms19.out], [0], [dnl
1015 AT_CHECK([cat ymdhms20.out], [0], [dnl
1037 AT_CHECK([cat ymdhms21.out], [0], [dnl
1059 AT_CHECK([cat ymdhms21.1.out], [0], [dnl
1060 1648-06-10 00:00:00.0
1061 1680-06-30 04:50:38.1
1062 1716-07-24 12:31:35.2
1063 1768-06-19 12:47:53.3
1064 1819-08-02 01:26:00.5
1065 1839-03-27 20:58:11.6
1066 1903-04-19 07:36:05.2
1067 1929-08-25 15:43:49.8
1068 1941-09-29 04:25:09.0
1069 1943-04-19 06:49:27.5
1070 1943-10-07 02:57:52.0
1071 1992-03-17 16:45:44.9
1072 1996-02-25 21:30:57.8
1073 1941-09-29 04:25:09.2
1074 1943-04-19 06:49:27.1
1075 1943-10-07 02:57:52.5
1076 1992-03-17 16:45:44.7
1077 1996-02-25 21:30:57.6
1078 2038-11-10 22:30:04.2
1079 2094-07-18 01:56:51.6
1081 AT_CHECK([cat ymdhms22.2.out], [0], [dnl
1082 1648-06-10 00:00:00.00
1083 1680-06-30 04:50:38.12
1084 1716-07-24 12:31:35.23
1085 1768-06-19 12:47:53.35
1086 1819-08-02 01:26:00.46
1087 1839-03-27 20:58:11.57
1088 1903-04-19 07:36:05.19
1089 1929-08-25 15:43:49.83
1090 1941-09-29 04:25:09.01
1091 1943-04-19 06:49:27.52
1092 1943-10-07 02:57:52.02
1093 1992-03-17 16:45:44.87
1094 1996-02-25 21:30:57.82
1095 1941-09-29 04:25:09.15
1096 1943-04-19 06:49:27.11
1097 1943-10-07 02:57:52.48
1098 1992-03-17 16:45:44.66
1099 1996-02-25 21:30:57.58
1100 2038-11-10 22:30:04.18
1101 2094-07-18 01:56:51.59
1103 AT_CHECK([cat ymdhms23.3.out], [0], [dnl
1104 1648-06-10 00:00:00.000
1105 1680-06-30 04:50:38.123
1106 1716-07-24 12:31:35.235
1107 1768-06-19 12:47:53.345
1108 1819-08-02 01:26:00.456
1109 1839-03-27 20:58:11.567
1110 1903-04-19 07:36:05.190
1111 1929-08-25 15:43:49.831
1112 1941-09-29 04:25:09.013
1113 1943-04-19 06:49:27.524
1114 1943-10-07 02:57:52.016
1115 1992-03-17 16:45:44.865
1116 1996-02-25 21:30:57.820
1117 1941-09-29 04:25:09.154
1118 1943-04-19 06:49:27.105
1119 1943-10-07 02:57:52.482
1120 1992-03-17 16:45:44.658
1121 1996-02-25 21:30:57.582
1122 2038-11-10 22:30:04.183
1123 2094-07-18 01:56:51.593
1125 AT_CHECK([cat ymdhms24.4.out], [0], [dnl
1126 1648-06-10 00:00:00.0000
1127 1680-06-30 04:50:38.1230
1128 1716-07-24 12:31:35.2345
1129 1768-06-19 12:47:53.3450
1130 1819-08-02 01:26:00.4562
1131 1839-03-27 20:58:11.5668
1132 1903-04-19 07:36:05.1896
1133 1929-08-25 15:43:49.8313
1134 1941-09-29 04:25:09.0129
1135 1943-04-19 06:49:27.5238
1136 1943-10-07 02:57:52.0156
1137 1992-03-17 16:45:44.8653
1138 1996-02-25 21:30:57.8205
1139 1941-09-29 04:25:09.1539
1140 1943-04-19 06:49:27.1053
1141 1943-10-07 02:57:52.4823
1142 1992-03-17 16:45:44.6583
1143 1996-02-25 21:30:57.5822
1144 2038-11-10 22:30:04.1835
1145 2094-07-18 01:56:51.5932
1147 AT_CHECK([cat ymdhms25.5.out], [0], [dnl
1148 1648-06-10 00:00:00.00000
1149 1680-06-30 04:50:38.12301
1150 1716-07-24 12:31:35.23453
1151 1768-06-19 12:47:53.34505
1152 1819-08-02 01:26:00.45615
1153 1839-03-27 20:58:11.56677
1154 1903-04-19 07:36:05.18964
1155 1929-08-25 15:43:49.83132
1156 1941-09-29 04:25:09.01293
1157 1943-04-19 06:49:27.52375
1158 1943-10-07 02:57:52.01565
1159 1992-03-17 16:45:44.86529
1160 1996-02-25 21:30:57.82047
1161 1941-09-29 04:25:09.15395
1162 1943-04-19 06:49:27.10533
1163 1943-10-07 02:57:52.48229
1164 1992-03-17 16:45:44.65827
1165 1996-02-25 21:30:57.58219
1166 2038-11-10 22:30:04.18347
1167 2094-07-18 01:56:51.59319
1171 AT_SETUP([output invalid dates])
1172 AT_KEYWORDS([data-out])
1173 AT_DATA([bad-date.sps], [dnl
1176 data list list notable/x.
1182 print outfile='bad-date.out'/x(date9) ' | ' x(date11).
1183 print outfile='bad-date.out'/x(adate8) ' | ' x(adate10).
1184 print outfile='bad-date.out'/x(edate8) ' | ' x(edate10).
1185 print outfile='bad-date.out'/x(jdate5) ' | ' x(jdate7).
1186 print outfile='bad-date.out'/x(sdate8) ' | ' x(sdate10).
1187 print outfile='bad-date.out'/x(qyr6) ' | ' x(qyr8).
1188 print outfile='bad-date.out'/x(moyr6) ' | ' x(moyr8).
1189 print outfile='bad-date.out'/x(wkyr8) ' | ' x(wkyr10).
1190 print outfile='bad-date.out'/x(datetime17).
1191 print outfile='bad-date.out'/x(datetime18).
1192 print outfile='bad-date.out'/x(datetime19).
1193 print outfile='bad-date.out'/x(datetime20).
1194 print outfile='bad-date.out'/x(datetime21).
1195 print outfile='bad-date.out'/x(datetime22).
1196 print outfile='bad-date.out'/x(datetime22.1).
1197 print outfile='bad-date.out'/x(datetime23.2).
1198 print outfile='bad-date.out'/x(datetime24.3).
1199 print outfile='bad-date.out'/x(datetime25.4).
1200 print outfile='bad-date.out'/x(datetime26.5).
1203 AT_CHECK([pspp -O format=csv bad-date.sps])
1204 AT_CHECK([cat bad-date.out], [0], [dnl
1243 ********* | ***********
1244 ******** | **********
1245 ******** | **********
1247 ******** | **********
1250 ******** | **********
1254 28-MAY-**** 05:20:00
1255 28-MAY-**** 05:20:00
1256 28-MAY-**** 05:20:00
1257 28-MAY-**** 05:20:00.0
1258 28-MAY-**** 05:20:00.00
1259 28-MAY-**** 05:20:00.000
1260 28-MAY-**** 05:20:00.0000
1261 28-MAY-**** 05:20:00.00000
1265 AT_SETUP([time output])
1266 AT_KEYWORDS([data-out])
1267 AT_DATA([time-out.sps], [dnl
1269 data list notable /x 1-30 (dtime).
1472 print outfile='time5.out'/x(time5).
1473 print outfile='time6.out'/x(time6).
1474 print outfile='time7.out'/x(time7).
1475 print outfile='time8.out'/x(time8).
1476 print outfile='time9.out'/x(time9).
1477 print outfile='time10.out'/x(time10).
1478 print outfile='time10.1.out'/x(time10.1).
1479 print outfile='time11.out'/x(time11).
1480 print outfile='time11.1.out'/x(time11.1).
1481 print outfile='time11.2.out'/x(time11.2).
1482 print outfile='time12.out'/x(time12).
1483 print outfile='time12.1.out'/x(time12.1).
1484 print outfile='time12.2.out'/x(time12.2).
1485 print outfile='time12.3.out'/x(time12.3).
1486 print outfile='time13.out'/x(time13).
1487 print outfile='time13.1.out'/x(time13.1).
1488 print outfile='time13.2.out'/x(time13.2).
1489 print outfile='time13.3.out'/x(time13.3).
1490 print outfile='time13.4.out'/x(time13.4).
1491 print outfile='time14.out'/x(time14).
1492 print outfile='time14.1.out'/x(time14.1).
1493 print outfile='time14.2.out'/x(time14.2).
1494 print outfile='time14.3.out'/x(time14.3).
1495 print outfile='time14.4.out'/x(time14.4).
1496 print outfile='time14.5.out'/x(time14.5).
1497 print outfile='time15.out'/x(time15).
1498 print outfile='time15.1.out'/x(time15.1).
1499 print outfile='time15.2.out'/x(time15.2).
1500 print outfile='time15.3.out'/x(time15.3).
1501 print outfile='time15.4.out'/x(time15.4).
1502 print outfile='time15.5.out'/x(time15.5).
1503 print outfile='time15.6.out'/x(time15.6).
1504 print outfile='dtime8.out'/x(dtime8).
1505 print outfile='dtime9.out'/x(dtime9).
1506 print outfile='dtime10.out'/x(dtime10).
1507 print outfile='dtime11.out'/x(dtime11).
1508 print outfile='dtime12.out'/x(dtime12).
1509 print outfile='dtime13.out'/x(dtime13).
1510 print outfile='dtime13.1.out'/x(dtime13.1).
1511 print outfile='dtime14.out'/x(dtime14).
1512 print outfile='dtime14.1.out'/x(dtime14.1).
1513 print outfile='dtime14.2.out'/x(dtime14.2).
1514 print outfile='dtime15.out'/x(dtime15).
1515 print outfile='dtime15.1.out'/x(dtime15.1).
1516 print outfile='dtime15.2.out'/x(dtime15.2).
1517 print outfile='dtime15.3.out'/x(dtime15.3).
1518 print outfile='dtime16.out'/x(dtime16).
1519 print outfile='dtime16.1.out'/x(dtime16.1).
1520 print outfile='dtime16.2.out'/x(dtime16.2).
1521 print outfile='dtime16.3.out'/x(dtime16.3).
1522 print outfile='dtime16.4.out'/x(dtime16.4).
1523 print outfile='dtime17.out'/x(dtime17).
1524 print outfile='dtime17.1.out'/x(dtime17.1).
1525 print outfile='dtime17.2.out'/x(dtime17.2).
1526 print outfile='dtime17.3.out'/x(dtime17.3).
1527 print outfile='dtime17.4.out'/x(dtime17.4).
1528 print outfile='dtime17.5.out'/x(dtime17.5).
1529 print outfile='dtime18.out'/x(dtime18).
1530 print outfile='dtime18.1.out'/x(dtime18.1).
1531 print outfile='dtime18.2.out'/x(dtime18.2).
1532 print outfile='dtime18.3.out'/x(dtime18.3).
1533 print outfile='dtime18.4.out'/x(dtime18.4).
1534 print outfile='dtime18.5.out'/x(dtime18.5).
1535 print outfile='dtime18.6.out'/x(dtime18.6).
1536 print outfile='mtime5.out'/x(mtime5).
1537 print outfile='mtime6.out'/x(mtime6).
1538 print outfile='mtime7.out'/x(mtime7).
1539 print outfile='mtime7.1.out'/x(mtime7.1).
1540 print outfile='mtime8.out'/x(mtime8).
1541 print outfile='mtime8.1.out'/x(mtime8.1).
1542 print outfile='mtime8.2.out'/x(mtime8.2).
1543 print outfile='mtime9.out'/x(mtime9).
1544 print outfile='mtime9.1.out'/x(mtime9.1).
1545 print outfile='mtime9.2.out'/x(mtime9.2).
1546 print outfile='mtime9.3.out'/x(mtime9.3).
1547 print outfile='mtime10.out'/x(mtime10).
1548 print outfile='mtime10.1.out'/x(mtime10.1).
1549 print outfile='mtime10.2.out'/x(mtime10.2).
1550 print outfile='mtime10.3.out'/x(mtime10.3).
1551 print outfile='mtime10.4.out'/x(mtime10.4).
1552 print outfile='mtime11.out'/x(mtime11).
1553 print outfile='mtime11.1.out'/x(mtime11.1).
1554 print outfile='mtime11.2.out'/x(mtime11.2).
1555 print outfile='mtime11.3.out'/x(mtime11.3).
1556 print outfile='mtime11.4.out'/x(mtime11.4).
1557 print outfile='mtime11.5.out'/x(mtime11.5).
1558 print outfile='mtime12.5.out'/x(mtime12.5).
1559 print outfile='mtime13.5.out'/x(mtime13.5).
1560 print outfile='mtime14.5.out'/x(mtime14.5).
1561 print outfile='mtime15.5.out'/x(mtime15.5).
1562 print outfile='mtime16.5.out'/x(mtime16.5).
1565 AT_CHECK([pspp -O format=csv time-out.sps])
1566 AT_CHECK([cat time5.out], [0], [dnl
1768 AT_CHECK([cat time6.out], [0], [dnl
1970 AT_CHECK([cat time7.out], [0], [dnl
2172 AT_CHECK([cat time8.out], [0], [dnl
2374 AT_CHECK([cat time9.out], [0], [dnl
2576 AT_CHECK([cat time10.out], [0], [dnl
2778 AT_CHECK([cat time10.1.out], [0], [dnl
2980 AT_CHECK([cat time11.out], [0], [dnl
3182 AT_CHECK([cat time11.1.out], [0], [dnl
3384 AT_CHECK([cat time11.2.out], [0], [dnl
3586 AT_CHECK([cat time12.out], [0], [dnl
3788 AT_CHECK([cat time12.1.out], [0], [dnl
3990 AT_CHECK([cat time12.2.out], [0], [dnl
4192 AT_CHECK([cat time12.3.out], [0], [dnl
4394 AT_CHECK([cat time13.out], [0], [dnl
4596 AT_CHECK([cat time13.1.out], [0], [dnl
4798 AT_CHECK([cat time13.2.out], [0], [dnl
5000 AT_CHECK([cat time13.3.out], [0], [dnl
5202 AT_CHECK([cat time13.4.out], [0], [dnl
5404 AT_CHECK([cat time14.out], [0], [dnl
5606 AT_CHECK([cat time14.1.out], [0], [dnl
5808 AT_CHECK([cat time14.2.out], [0], [dnl
6010 AT_CHECK([cat time14.3.out], [0], [dnl
6212 AT_CHECK([cat time14.4.out], [0], [dnl
6414 AT_CHECK([cat time14.5.out], [0], [dnl
6616 AT_CHECK([cat time15.out], [0], [dnl
6818 AT_CHECK([cat time15.1.out], [0], [dnl
7020 AT_CHECK([cat time15.2.out], [0], [dnl
7222 AT_CHECK([cat time15.3.out], [0], [dnl
7424 AT_CHECK([cat time15.4.out], [0], [dnl
7626 AT_CHECK([cat time15.5.out], [0], [dnl
7828 AT_CHECK([cat time15.6.out], [0], [dnl
8030 AT_CHECK([cat dtime8.out], [0], [dnl
8232 AT_CHECK([cat dtime9.out], [0], [dnl
8434 AT_CHECK([cat dtime10.out], [0], [dnl
8636 AT_CHECK([cat dtime11.out], [0], [dnl
8838 AT_CHECK([cat dtime12.out], [0], [dnl
9040 AT_CHECK([cat dtime13.out], [0], [dnl
9242 AT_CHECK([cat dtime13.1.out], [0], [dnl
9444 AT_CHECK([cat dtime14.out], [0], [dnl
9646 AT_CHECK([cat dtime14.1.out], [0], [dnl
9848 AT_CHECK([cat dtime14.2.out], [0], [dnl
10050 AT_CHECK([cat dtime15.out], [0], [dnl
10252 AT_CHECK([cat dtime15.1.out], [0], [dnl
10454 AT_CHECK([cat dtime15.2.out], [0], [dnl
10656 AT_CHECK([cat dtime15.3.out], [0], [dnl
10858 AT_CHECK([cat dtime16.out], [0], [dnl
11060 AT_CHECK([cat dtime16.1.out], [0], [dnl
11262 AT_CHECK([cat dtime16.2.out], [0], [dnl
11464 AT_CHECK([cat dtime16.3.out], [0], [dnl
11666 AT_CHECK([cat dtime16.4.out], [0], [dnl
11868 AT_CHECK([cat dtime17.out], [0], [dnl
12070 AT_CHECK([cat dtime17.1.out], [0], [dnl
12272 AT_CHECK([cat dtime17.2.out], [0], [dnl
12474 AT_CHECK([cat dtime17.3.out], [0], [dnl
12676 AT_CHECK([cat dtime17.4.out], [0], [dnl
12878 AT_CHECK([cat dtime17.5.out], [0], [dnl
13080 AT_CHECK([cat dtime18.out], [0], [dnl
13282 AT_CHECK([cat dtime18.1.out], [0], [dnl
13484 AT_CHECK([cat dtime18.2.out], [0], [dnl
13686 AT_CHECK([cat dtime18.3.out], [0], [dnl
13888 AT_CHECK([cat dtime18.4.out], [0], [dnl
14090 AT_CHECK([cat dtime18.5.out], [0], [dnl
14292 AT_CHECK([cat dtime18.6.out], [0], [dnl
14494 AT_CHECK([cat mtime5.out], [0], [dnl
14696 AT_CHECK([cat mtime6.out], [0], [dnl
14898 AT_CHECK([cat mtime7.out], [0], [dnl
15100 AT_CHECK([cat mtime7.1.out], [0], [dnl
15302 AT_CHECK([cat mtime8.out], [0], [dnl
15504 AT_CHECK([cat mtime8.1.out], [0], [dnl
15706 AT_CHECK([cat mtime8.2.out], [0], [dnl
15908 AT_CHECK([cat mtime9.out], [0], [dnl
16110 AT_CHECK([cat mtime9.1.out], [0], [dnl
16312 AT_CHECK([cat mtime9.2.out], [0], [dnl
16514 AT_CHECK([cat mtime9.3.out], [0], [dnl
16716 AT_CHECK([cat mtime10.out], [0], [dnl
16918 AT_CHECK([cat mtime10.1.out], [0], [dnl
17120 AT_CHECK([cat mtime10.2.out], [0], [dnl
17322 AT_CHECK([cat mtime10.3.out], [0], [dnl
17524 AT_CHECK([cat mtime10.4.out], [0], [dnl
17726 AT_CHECK([cat mtime11.out], [0], [dnl
17928 AT_CHECK([cat mtime11.1.out], [0], [dnl
18130 AT_CHECK([cat mtime11.2.out], [0], [dnl
18332 AT_CHECK([cat mtime11.3.out], [0], [dnl
18534 AT_CHECK([cat mtime11.4.out], [0], [dnl
18736 AT_CHECK([cat mtime11.5.out], [0], [dnl
18938 AT_CHECK([cat mtime12.5.out], [0], [dnl
19140 AT_CHECK([cat mtime13.5.out], [0], [dnl
19342 AT_CHECK([cat mtime14.5.out], [0], [dnl
19544 AT_CHECK([cat mtime15.5.out], [0], [dnl
19746 AT_CHECK([cat mtime16.5.out], [0], [dnl
19950 AT_SETUP([MONTH output])
19951 AT_KEYWORDS([data-out])
19952 AT_DATA([month-out.sps], [dnl
19954 set mxwarns=10000000.
19955 data list notable/x 1-10.
19981 print outfile='month-out.out'/x(month3).
19982 print outfile='month-out.out'/x(month4).
19983 print outfile='month-out.out'/x(month5).
19984 print outfile='month-out.out'/x(month6).
19985 print outfile='month-out.out'/x(month7).
19986 print outfile='month-out.out'/x(month8).
19987 print outfile='month-out.out'/x(month9).
19988 print outfile='month-out.out'/x(month10).
19989 print outfile='month-out.out'/x(month11).
19990 print outfile='month-out.out'/x(month12).
19991 print outfile='month-out.out'/x(month13).
19992 print outfile='month-out.out'/x(month14).
19993 print outfile='month-out.out'/x(month15).
19994 print outfile='month-out.out'/x(month16).
19995 print outfile='month-out.out'/x(month17).
19996 print outfile='month-out.out'/x(month18).
19997 print outfile='month-out.out'/x(month19).
19998 print outfile='month-out.out'/x(month20).
19999 print outfile='month-out.out'/x(month21).
20000 print outfile='month-out.out'/x(month22).
20001 print outfile='month-out.out'/x(month23).
20002 print outfile='month-out.out'/x(month24).
20003 print outfile='month-out.out'/x(month25).
20004 print outfile='month-out.out'/x(month26).
20005 print outfile='month-out.out'/x(month27).
20006 print outfile='month-out.out'/x(month28).
20007 print outfile='month-out.out'/x(month29).
20008 print outfile='month-out.out'/x(month30).
20009 print outfile='month-out.out'/x(month31).
20010 print outfile='month-out.out'/x(month32).
20011 print outfile='month-out.out'/x(month33).
20012 print outfile='month-out.out'/x(month34).
20013 print outfile='month-out.out'/x(month35).
20014 print outfile='month-out.out'/x(month36).
20015 print outfile='month-out.out'/x(month37).
20016 print outfile='month-out.out'/x(month38).
20017 print outfile='month-out.out'/x(month39).
20018 print outfile='month-out.out'/x(month40).
20021 AT_CHECK([pspp -O format=csv month-out.sps], [1], [stdout])
20022 AT_CHECK([[sed '/^ *
\r*$/d' stdout | sort | uniq -c | sed 's/^[ ]*//']], [0],
20024 38 error: Month number 0.000000 is not between 1 and 12.
20025 38 error: Month number 0.500000 is not between 1 and 12.
20026 38 error: Month number 0.900000 is not between 1 and 12.
20027 38 error: Month number 13.000000 is not between 1 and 12.
20029 AT_CHECK([cat month-out.out], [0], [dnl
20907 AT_SETUP([WKDAY output])
20908 AT_KEYWORDS([data-out])
20909 AT_DATA([wkday-out.sps], [dnl
20910 set mxwarns=10000000.
20911 set mxerrs=10000000.
20912 data list notable/x 1-10.
20933 do repeat format=wkday2 to wkday40.
20934 print outfile='wkday-out.out'/x(format).
20938 AT_CHECK([pspp -O format=csv wkday-out.sps], [1], [stdout])
20939 AT_CHECK([[sed '/^ *
\r*$/d' stdout | sort | uniq -c | sed 's/^[ ]*//']], [0],
20941 39 error: Weekday number 0.000000 is not between 1 and 7.
20942 39 error: Weekday number 0.500000 is not between 1 and 7.
20943 39 error: Weekday number 0.900000 is not between 1 and 7.
20944 39 error: Weekday number 8.000000 is not between 1 and 7.
20946 AT_CHECK([cat wkday-out.out], [0], [dnl
21652 dnl This checks for a regression where AHEX output would crash due to
21653 dnl dereferencing string data as a pointer, for string widths between
21654 dnl 5 and 8, inclusive.
21655 AT_SETUP([AHEX output bug])
21656 AT_KEYWORDS([data-out])
21657 AT_DATA([ahex.sps], [
21658 DATA LIST NOTABLE /s (a8).
21662 FORMATS s (AHEX16).
21665 AT_CHECK([pspp -O format=csv ahex.sps], [0], [dnl