tests
[pspp] / tests / language / expressions / evaluate.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 m4_define([CHECK_EXPR_EVAL],
17   [AT_SETUP([expressions - $1])
18    AT_KEYWORDS([expression])
19    AT_DATA([evaluate.sps],
20      [set mxwarn 1000.
21 set mxerr 1000.
22 set epoch 1940.
23 m4_foreach([check], [m4_shift($@)],
24                  [DEBUG EVALUATE NOOPT m4_argn(4, check)/[]m4_car(check).
25 DEBUG EVALUATE m4_argn(4, check)/[]m4_car(check).
26 ])])
27    AT_CAPTURE_FILE([evaluate.sps])
28    m4_pushdef([i], [3])
29    AT_CHECK([pspp --testing-mode -O format=csv evaluate.sps],
30      [m4_if(m4_bregexp([m4_foreach([check], [m4_shift($@)], [m4_argn(3, check)])], [error:]), [-1], [0], [1])],
31      [stdout])
32    AT_DATA([expout], [m4_foreach([check], [m4_shift($@)],
33         [m4_define([i], m4_incr(i))dnl
34 m4_if(m4_argn(3, check), [], [], [evaluate.sps:[]i[]: m4_argn(3, check)
35 ])dnl
36 m4_argn(2, check)
37 m4_define([i], m4_incr(i))dnl
38 m4_if(m4_argn(3, check), [], [], [evaluate.sps:[]i[]: m4_argn(3, check)
39 ])dnl
40 m4_argn(2, check)
41 ])])
42    AT_CHECK([[sed '
43 # Transform "file:line.column:" into plain "file:line:",
44 # because column numbers change between opt and noopt versions.
45 s/\(evaluate.sps:[0-9]\{1,\}\)\.[0-9]\{1,\}:/\1:/
46
47 # Remove leading or trailing quotes and un-double CSV quotes.
48 s/^"//
49 s/"$//
50 s/""/"/g
51 # "
52
53 # Delete blank lines
54 /^$/d' stdout]],
55      [0], [expout], [])
56    m4_popdef([i])
57    AT_CLEANUP])
58
59 AT_BANNER([expressions])
60
61 AT_SETUP([expressions - numeric syntax])
62 AT_KEYWORDS([expression expressions evaluate])
63 AT_DATA([evaluate-base.sps], [
64 DEBUG EVALUATE SET opt.
65 DEBUG EVALUATE /1e2.
66 DEBUG EVALUATE /1e+2.
67 DEBUG EVALUATE /1e-2.
68 DEBUG EVALUATE /1e-99.
69 ])
70
71 for opt in OPT NOOPT; do
72     AS_BOX([$opt])
73     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
74     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
75 1e2 => 100.00
76
77 1e+2 => 100.00
78
79 1e-2 => 0.01
80
81 1e-99 => 0.00
82 ])
83 done
84 AT_CLEANUP
85
86 AT_SETUP([expressions - coercion to and from Boolean])
87 AT_KEYWORDS([expression expressions evaluate])
88 AT_DATA([evaluate-base.sps], [
89 DEBUG EVALUATE SET opt.
90 DEBUG EVALUATE/0 AND 1.
91 DEBUG EVALUATE/$true AND 1.
92 DEBUG EVALUATE/1 OR $false.
93 DEBUG EVALUATE/1 OR $sysmis.
94 DEBUG EVALUATE/2 OR $sysmis.
95 DEBUG EVALUATE/1 AND 3.
96 ])
97
98 for opt in OPT NOOPT; do
99     AS_BOX([$opt])
100     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
101     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
102 0 AND 1 => false
103
104 $true AND 1 => true
105
106 1 OR $false => true
107
108 1 OR $sysmis => true
109
110 evaluate.sps:7.16-7.27: error: DEBUG EVALUATE: The operands of OR must have
111 value 0 or 1.
112     7 | DEBUG EVALUATE/2 OR $sysmis.
113       |                ^~~~~~~~~~~~
114
115 evaluate.sps:7.16: note: DEBUG EVALUATE: This operand with unexpected value 2
116 will be treated as 0.
117     7 | DEBUG EVALUATE/2 OR $sysmis.
118       |                ^
119
120 2 OR $sysmis => sysmis
121
122 evaluate.sps:8.16-8.22: error: DEBUG EVALUATE: The operands of AND must have
123 value 0 or 1.
124     8 | DEBUG EVALUATE/1 AND 3.
125       |                ^~~~~~~
126
127 evaluate.sps:8.22: note: DEBUG EVALUATE: This operand with unexpected value 3
128 will be treated as 0.
129     8 | DEBUG EVALUATE/1 AND 3.
130       |                      ^
131
132 1 AND 3 => false
133 ])
134 done
135 AT_CLEANUP
136
137 AT_SETUP([expressions - addition and subtraction])
138 AT_KEYWORDS([expression expressions evaluate])
139 AT_DATA([evaluate-base.sps], [
140 DEBUG EVALUATE SET opt.
141 DEBUG EVALUATE /1 + $true.
142 DEBUG EVALUATE /$sysmis + 1.
143 DEBUG EVALUATE /7676 + $sysmis.
144 DEBUG EVALUATE /1 +3 - 2 +4 - 5.
145 DEBUG EVALUATE /$true - 4/3.
146 DEBUG EVALUATE /1 - 2.
147 DEBUG EVALUATE /52 -23.
148
149 DEBUG EVALUATE /('foo') + 5.
150 DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
151 DEBUG EVALUATE /'foo' + 'bar'.       /* Lexical concatenation succeeds.
152
153 DEBUG EVALUATE /'string' - 1e10.
154 DEBUG EVALUATE /9.5 - ''.
155
156 DEBUG EVALUATE /F2.0 + 3.
157 ])
158
159 for opt in OPT NOOPT; do
160     AS_BOX([$opt])
161     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
162     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
163 1 + $true => 2.00
164
165 $sysmis + 1 => sysmis
166
167 7676 + $sysmis => sysmis
168
169 1 +3 - 2 +4 - 5 => 1.00
170
171 $true - 4/3 => -0.33
172
173 1 - 2 => -1.00
174
175 52 -23 => 29.00
176
177 evaluate.sps:11.18-11.27: error: DEBUG EVALUATE: Both operands of + must be
178 numeric.
179    11 | DEBUG EVALUATE /('foo') + 5.
180       |                  ^~~~~~~~~~
181
182 evaluate.sps:11.18-11.22: note: DEBUG EVALUATE: This operand has type 'string'.
183    11 | DEBUG EVALUATE /('foo') + 5.
184       |                  ^~~~~
185
186 evaluate.sps:11.27: note: DEBUG EVALUATE: This operand has type 'number'.
187    11 | DEBUG EVALUATE /('foo') + 5.
188       |                           ^
189
190 ('foo') + 5 => error
191
192 evaluate.sps:12.18-12.32: error: DEBUG EVALUATE: Both operands of + must be
193 numeric.
194    12 | DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
195       |                  ^~~~~~~~~~~~~~~
196
197 evaluate.sps:12.18-12.22: note: DEBUG EVALUATE: This operand has type 'string'.
198    12 | DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
199       |                  ^~~~~
200
201 evaluate.sps:12.28-12.32: note: DEBUG EVALUATE: This operand has type 'string'.
202    12 | DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
203       |                            ^~~~~
204
205 ('foo') + ('bar') => error
206
207 'foo' + 'bar' => "foobar"
208
209 evaluate.sps:15.17-15.31: error: DEBUG EVALUATE: Both operands of - must be
210 numeric.
211    15 | DEBUG EVALUATE /'string' - 1e10.
212       |                 ^~~~~~~~~~~~~~~
213
214 evaluate.sps:15.17-15.24: note: DEBUG EVALUATE: This operand has type 'string'.
215    15 | DEBUG EVALUATE /'string' - 1e10.
216       |                 ^~~~~~~~
217
218 evaluate.sps:15.26-15.31: note: DEBUG EVALUATE: This operand has type 'number'.
219    15 | DEBUG EVALUATE /'string' - 1e10.
220       |                          ^~~~~~
221
222 'string' - 1e10 => error
223
224 evaluate.sps:16.17-16.24: error: DEBUG EVALUATE: Both operands of - must be
225 numeric.
226    16 | DEBUG EVALUATE /9.5 - ''.
227       |                 ^~~~~~~~
228
229 evaluate.sps:16.17-16.19: note: DEBUG EVALUATE: This operand has type 'number'.
230    16 | DEBUG EVALUATE /9.5 - ''.
231       |                 ^~~
232
233 evaluate.sps:16.23-16.24: note: DEBUG EVALUATE: This operand has type 'string'.
234    16 | DEBUG EVALUATE /9.5 - ''.
235       |                       ^~
236
237 9.5 - '' => error
238
239 evaluate.sps:18.17-18.24: error: DEBUG EVALUATE: Both operands of + must be
240 numeric.
241    18 | DEBUG EVALUATE /F2.0 + 3.
242       |                 ^~~~~~~~
243
244 evaluate.sps:18.17-18.20: note: DEBUG EVALUATE: This operand has type 'format'.
245    18 | DEBUG EVALUATE /F2.0 + 3.
246       |                 ^~~~
247
248 evaluate.sps:18.24: note: DEBUG EVALUATE: This operand has type 'number'.
249    18 | DEBUG EVALUATE /F2.0 + 3.
250       |                        ^
251
252 F2.0 + 3 => error
253 ])
254 done
255 AT_CLEANUP
256
257 AT_SETUP([expressions - multiplication and division])
258 AT_KEYWORDS([expression expressions evaluate])
259 AT_DATA([evaluate-base.sps], [
260 DEBUG EVALUATE SET opt.
261 DEBUG EVALUATE /5 * 10.
262 DEBUG EVALUATE /10 * $true.
263 DEBUG EVALUATE /$true * 5.
264 DEBUG EVALUATE /1.5 * $true.
265 DEBUG EVALUATE /$sysmis * 15.
266 DEBUG EVALUATE /8.5 / $sysmis.
267 DEBUG EVALUATE /2 * 5 / 10.
268 DEBUG EVALUATE /1 / 2.
269 DEBUG EVALUATE /2 / 5.
270 DEBUG EVALUATE /12 / 3 / 2.
271
272 DEBUG EVALUATE /'x' * 1.
273 DEBUG EVALUATE /2 / 'x'.
274 ])
275
276 for opt in OPT NOOPT; do
277     AS_BOX([$opt])
278     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
279     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
280 5 * 10 => 50.00
281
282 10 * $true => 10.00
283
284 $true * 5 => 5.00
285
286 1.5 * $true => 1.50
287
288 $sysmis * 15 => sysmis
289
290 8.5 / $sysmis => sysmis
291
292 2 * 5 / 10 => 1.00
293
294 1 / 2 => 0.50
295
296 2 / 5 => 0.40
297
298 12 / 3 / 2 => 2.00
299
300 evaluate.sps:14.17-14.23: error: DEBUG EVALUATE: Both operands of * must be
301 numeric.
302    14 | DEBUG EVALUATE /'x' * 1.
303       |                 ^~~~~~~
304
305 evaluate.sps:14.17-14.19: note: DEBUG EVALUATE: This operand has type 'string'.
306    14 | DEBUG EVALUATE /'x' * 1.
307       |                 ^~~
308
309 evaluate.sps:14.23: note: DEBUG EVALUATE: This operand has type 'number'.
310    14 | DEBUG EVALUATE /'x' * 1.
311       |                       ^
312
313 'x' * 1 => error
314
315 evaluate.sps:15.17-15.23: error: DEBUG EVALUATE: Both operands of / must be
316 numeric.
317    15 | DEBUG EVALUATE /2 / 'x'.
318       |                 ^~~~~~~
319
320 evaluate.sps:15.17: note: DEBUG EVALUATE: This operand has type 'number'.
321    15 | DEBUG EVALUATE /2 / 'x'.
322       |                 ^
323
324 evaluate.sps:15.21-15.23: note: DEBUG EVALUATE: This operand has type 'string'.
325    15 | DEBUG EVALUATE /2 / 'x'.
326       |                     ^~~
327
328 2 / 'x' => error
329 ])
330 done
331 AT_CLEANUP
332
333 AT_SETUP([expressions - exponentiation])
334 AT_KEYWORDS([expression expressions evaluate])
335 AT_DATA([evaluate-base.sps], [
336 DEBUG EVALUATE SET opt.
337 DEBUG EVALUATE /2**8.
338 DEBUG EVALUATE /(2**3)**4.
339 DEBUG EVALUATE /2**3**4.
340 DEBUG EVALUATE /-2**2.
341 DEBUG EVALUATE /-2**-3**-4.
342 DEBUG EVALUATE /-((2**-3)**-4).
343 ])
344
345 for opt in OPT NOOPT; do
346     AS_BOX([$opt])
347     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
348     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
349 2**8 => 256.00
350
351 (2**3)**4 => 4096.00
352
353 evaluate.sps:5.17-5.23: warning: DEBUG EVALUATE: The exponentiation operator
354 (`**') is left-associative: `a**b**c' equals `(a**b)**c', not `a**(b**c)'.  To
355 disable this warning, insert parentheses.
356     5 | DEBUG EVALUATE /2**3**4.
357       |                 ^~~~~~~
358
359 2**3**4 => 4096.00
360
361 -2**2 => -4.00
362
363 evaluate.sps:7.17-7.26: warning: DEBUG EVALUATE: The exponentiation operator
364 (`**') is left-associative: `a**b**c' equals `(a**b)**c', not `a**(b**c)'.  To
365 disable this warning, insert parentheses.
366     7 | DEBUG EVALUATE /-2**-3**-4.
367       |                 ^~~~~~~~~~
368
369 -2**-3**-4 => -4096.00
370
371 -((2**-3)**-4) => -4096.00
372 ])
373 done
374 AT_CLEANUP
375
376 AT_SETUP([expressions - unary minus])
377 AT_KEYWORDS([expression expressions evaluate])
378 AT_DATA([evaluate-base.sps], [
379 DEBUG EVALUATE SET opt.
380 DEBUG EVALUATE /2+-3.
381 DEBUG EVALUATE /2*-3.
382 DEBUG EVALUATE /-3**2.
383 DEBUG EVALUATE /(-3)**2.
384 DEBUG EVALUATE /-(3**2).
385 DEBUG EVALUATE /2**-1.
386 DEBUG EVALUATE /0**0.
387 DEBUG EVALUATE /0**-1.
388 DEBUG EVALUATE /(-3)**1.5.
389 ])
390
391 for opt in OPT NOOPT; do
392     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
393     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
394 2+-3 => -1.00
395
396 2*-3 => -6.00
397
398 -3**2 => -9.00
399
400 (-3)**2 => 9.00
401
402 -(3**2) => -9.00
403
404 2**-1 => 0.50
405
406 0**0 => sysmis
407
408 0**-1 => sysmis
409
410 (-3)**1.5 => sysmis
411 ])
412 done
413 AT_CLEANUP
414
415 AT_SETUP([expressions - AND truth table])
416 AT_KEYWORDS([expression expressions evaluate])
417 AT_DATA([evaluate-base.sps], [
418 DEBUG EVALUATE SET opt.
419 DEBUG EVALUATE /$false AND $false.
420 DEBUG EVALUATE /$false AND $true.
421 DEBUG EVALUATE /$false AND $sysmis.
422 DEBUG EVALUATE /$true AND $false.
423 DEBUG EVALUATE /$true AND $true.
424 DEBUG EVALUATE /$true AND $sysmis.
425 DEBUG EVALUATE /$sysmis AND $false.
426 DEBUG EVALUATE /$sysmis AND $true.
427 DEBUG EVALUATE /$sysmis AND $sysmis.
428 DEBUG EVALUATE /$false & $false.
429 DEBUG EVALUATE /$false & $true.
430 DEBUG EVALUATE /$false & $sysmis.
431 DEBUG EVALUATE /$true & $false.
432 DEBUG EVALUATE /$true & $true.
433 DEBUG EVALUATE /$true & $sysmis.
434 DEBUG EVALUATE /$sysmis & $false.
435 DEBUG EVALUATE /$sysmis & $true.
436 DEBUG EVALUATE /$sysmis & $sysmis.
437 ])
438
439 for opt in OPT NOOPT; do
440     AS_BOX([$opt])
441     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
442     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
443 $false AND $false => false
444
445 $false AND $true => false
446
447 $false AND $sysmis => false
448
449 $true AND $false => false
450
451 $true AND $true => true
452
453 $true AND $sysmis => sysmis
454
455 $sysmis AND $false => false
456
457 $sysmis AND $true => sysmis
458
459 $sysmis AND $sysmis => sysmis
460
461 $false & $false => false
462
463 $false & $true => false
464
465 $false & $sysmis => false
466
467 $true & $false => false
468
469 $true & $true => true
470
471 $true & $sysmis => sysmis
472
473 $sysmis & $false => false
474
475 $sysmis & $true => sysmis
476
477 $sysmis & $sysmis => sysmis
478 ])
479 done
480 AT_CLEANUP
481
482 AT_SETUP([expressions - OR truth table])
483 AT_KEYWORDS([expression expressions evaluate])
484 AT_DATA([evaluate-base.sps], [
485 DEBUG EVALUATE SET opt.
486 DEBUG EVALUATE /$false OR $false.
487 DEBUG EVALUATE /$false OR $true.
488 DEBUG EVALUATE /$false OR $sysmis.
489 DEBUG EVALUATE /$true OR $false.
490 DEBUG EVALUATE /$true OR $true.
491 DEBUG EVALUATE /$true OR $sysmis.
492 DEBUG EVALUATE /$sysmis OR $false.
493 DEBUG EVALUATE /$sysmis OR $true.
494 DEBUG EVALUATE /$sysmis OR $sysmis.
495 DEBUG EVALUATE /$false | $false.
496 DEBUG EVALUATE /$false | $true.
497 DEBUG EVALUATE /$false | $sysmis.
498 DEBUG EVALUATE /$true | $false.
499 DEBUG EVALUATE /$true | $true.
500 DEBUG EVALUATE /$true | $sysmis.
501 DEBUG EVALUATE /$sysmis | $false.
502 DEBUG EVALUATE /$sysmis | $true.
503 DEBUG EVALUATE /$sysmis | $sysmis.
504 ])
505
506 for opt in OPT NOOPT; do
507     AS_BOX([$opt])
508     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
509     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
510 $false OR $false => false
511
512 $false OR $true => true
513
514 $false OR $sysmis => sysmis
515
516 $true OR $false => true
517
518 $true OR $true => true
519
520 $true OR $sysmis => true
521
522 $sysmis OR $false => sysmis
523
524 $sysmis OR $true => true
525
526 $sysmis OR $sysmis => sysmis
527
528 $false | $false => false
529
530 $false | $true => true
531
532 $false | $sysmis => sysmis
533
534 $true | $false => true
535
536 $true | $true => true
537
538 $true | $sysmis => true
539
540 $sysmis | $false => sysmis
541
542 $sysmis | $true => true
543
544 $sysmis | $sysmis => sysmis
545 ])
546 done
547 AT_CLEANUP
548
549 AT_SETUP([expressions - NOT truth table])
550 AT_KEYWORDS([expression expressions evaluate])
551 AT_DATA([evaluate-base.sps], [
552 DEBUG EVALUATE SET opt.
553 DEBUG EVALUATE /not $false.
554 DEBUG EVALUATE /not 0.
555 DEBUG EVALUATE /not 2.5.
556 DEBUG EVALUATE /not $true.
557 DEBUG EVALUATE /not 1.
558 DEBUG EVALUATE /not $sysmis.
559 DEBUG EVALUATE /~ $false.
560 DEBUG EVALUATE /~ 0.
561 DEBUG EVALUATE /~ 2.5.
562 DEBUG EVALUATE /~ $true.
563 DEBUG EVALUATE /~ 1.
564 DEBUG EVALUATE /~ $sysmis.
565 ])
566
567 for opt in OPT NOOPT; do
568     AS_BOX([$opt])
569     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
570     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
571 not $false => true
572
573 not 0 => true
574
575 evaluate.sps:5.17-5.23: error: DEBUG EVALUATE: The operand of NOT must have
576 value 0 or 1.
577     5 | DEBUG EVALUATE /not 2.5.
578       |                 ^~~~~~~
579
580 evaluate.sps:5.21-5.23: note: DEBUG EVALUATE: This operand with unexpected
581 value 2.5 will be treated as 0.
582     5 | DEBUG EVALUATE /not 2.5.
583       |                     ^~~
584
585 not 2.5 => true
586
587 not $true => false
588
589 not 1 => false
590
591 not $sysmis => sysmis
592
593 ~ $false => true
594
595 ~ 0 => true
596
597 evaluate.sps:11.17-11.21: error: DEBUG EVALUATE: The operand of NOT must have
598 value 0 or 1.
599    11 | DEBUG EVALUATE /~ 2.5.
600       |                 ^~~~~
601
602 evaluate.sps:11.19-11.21: note: DEBUG EVALUATE: This operand with unexpected
603 value 2.5 will be treated as 0.
604    11 | DEBUG EVALUATE /~ 2.5.
605       |                   ^~~
606
607 ~ 2.5 => true
608
609 ~ $true => false
610
611 ~ 1 => false
612
613 ~ $sysmis => sysmis
614 ])
615 done
616 AT_CLEANUP
617
618 AT_SETUP([expressions - = <= <])
619 AT_KEYWORDS([expression expressions evaluate eq le lt])
620 AT_DATA([evaluate-base.sps], [
621 DEBUG EVALUATE SET opt.
622 DEBUG EVALUATE /1 eq 1.
623 DEBUG EVALUATE /1 = 1.
624 DEBUG EVALUATE /1 eq 2.
625 DEBUG EVALUATE /2 = 3.
626 DEBUG EVALUATE /1 eq 'foobar'.
627 DEBUG EVALUATE /'baz' = 10.
628 DEBUG EVALUATE /'baz' = f8.2.
629 DEBUG EVALUATE /'baz' = 'baz'.
630 DEBUG EVALUATE /'quux' = 'bar'.
631 DEBUG EVALUATE /'bar  ' = 'bar'.
632 DEBUG EVALUATE /'asdf     ' = 'asdf  '.
633 DEBUG EVALUATE /'asdfj     ' = 'asdf'.
634 DEBUG EVALUATE /1 + 2 = 3.
635 DEBUG EVALUATE /1 >= 2 = 2 ge 3.
636 DEBUG EVALUATE /3 ne 2 != 1.
637 DEBUG EVALUATE /3 > 2 > 1.
638
639 DEBUG EVALUATE /1 <= 2.
640 DEBUG EVALUATE /2.5 <= 1.5.
641 DEBUG EVALUATE /1 le 2.
642 DEBUG EVALUATE /2 <= 2.
643 DEBUG EVALUATE /2 le 2.
644 DEBUG EVALUATE /2 < = 2.
645 DEBUG EVALUATE /1 <= 'foobar'.
646 DEBUG EVALUATE /'baz' <= 10.
647 DEBUG EVALUATE /'quux' <= 5.55.
648 DEBUG EVALUATE /'0123' <= '0123'.
649 DEBUG EVALUATE /'0123' <= '0124'.
650 DEBUG EVALUATE /'0124' le '0123'.
651 DEBUG EVALUATE /'0123  ' <= '0123'.
652 DEBUG EVALUATE /'0123' le '0123  '.
653
654 DEBUG EVALUATE /1 < 2.
655 DEBUG EVALUATE /2.5 < 1.5.
656 DEBUG EVALUATE /3.5 lt 4.
657 DEBUG EVALUATE /4 lt 3.5
658 DEBUG EVALUATE /1 lt 'foobar'.
659 DEBUG EVALUATE /5 lt 'foobar'.
660 DEBUG EVALUATE /'baz' < 10.
661 DEBUG EVALUATE /'quux' < 5.55.
662 DEBUG EVALUATE /'0123' lt '0123'.
663 DEBUG EVALUATE /'0123' < '0124'.
664 DEBUG EVALUATE /'0124' lt '0123'.
665 DEBUG EVALUATE /'0123  ' < '0123'.
666 DEBUG EVALUATE /'0123' lt '0123  '.
667 ])
668
669 for opt in OPT NOOPT; do
670     AS_BOX([$opt])
671     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
672     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
673 1 eq 1 => true
674
675 1 = 1 => true
676
677 1 eq 2 => false
678
679 2 = 3 => false
680
681 evaluate.sps:7.17-7.29: error: DEBUG EVALUATE: Both operands of EQ must have
682 the same type.
683     7 | DEBUG EVALUATE /1 eq 'foobar'.
684       |                 ^~~~~~~~~~~~~
685
686 evaluate.sps:7.17: note: DEBUG EVALUATE: This operand has type 'number'.
687     7 | DEBUG EVALUATE /1 eq 'foobar'.
688       |                 ^
689
690 evaluate.sps:7.22-7.29: note: DEBUG EVALUATE: This operand has type 'string'.
691     7 | DEBUG EVALUATE /1 eq 'foobar'.
692       |                      ^~~~~~~~
693
694 1 eq 'foobar' => error
695
696 evaluate.sps:8.17-8.26: error: DEBUG EVALUATE: Both operands of = must have the
697 same type.
698     8 | DEBUG EVALUATE /'baz' = 10.
699       |                 ^~~~~~~~~~
700
701 evaluate.sps:8.17-8.21: note: DEBUG EVALUATE: This operand has type 'string'.
702     8 | DEBUG EVALUATE /'baz' = 10.
703       |                 ^~~~~
704
705 evaluate.sps:8.25-8.26: note: DEBUG EVALUATE: This operand has type 'number'.
706     8 | DEBUG EVALUATE /'baz' = 10.
707       |                         ^~
708
709 'baz' = 10 => error
710
711 evaluate.sps:9.17-9.28: error: DEBUG EVALUATE: Both operands of = must have the
712 same type.
713     9 | DEBUG EVALUATE /'baz' = f8.2.
714       |                 ^~~~~~~~~~~~
715
716 evaluate.sps:9.17-9.21: note: DEBUG EVALUATE: This operand has type 'string'.
717     9 | DEBUG EVALUATE /'baz' = f8.2.
718       |                 ^~~~~
719
720 evaluate.sps:9.25-9.28: note: DEBUG EVALUATE: This operand has type 'format'.
721     9 | DEBUG EVALUATE /'baz' = f8.2.
722       |                         ^~~~
723
724 'baz' = f8.2 => error
725
726 'baz' = 'baz' => true
727
728 'quux' = 'bar' => false
729
730 'bar  ' = 'bar' => true
731
732 'asdf     ' = 'asdf  ' => true
733
734 'asdfj     ' = 'asdf' => false
735
736 1 + 2 = 3 => true
737
738 evaluate.sps:16.17-16.31: warning: DEBUG EVALUATE: Chaining relational
739 operators (e.g. `a < b < c') will not produce the mathematically expected
740 result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b <
741 c').  To disable this warning, insert parentheses.
742    16 | DEBUG EVALUATE /1 >= 2 = 2 ge 3.
743       |                 ^~~~~~~~~~~~~~~
744
745 1 >= 2 = 2 ge 3 => false
746
747 evaluate.sps:17.24: error: DEBUG EVALUATE: Syntax error at `!': expecting end
748 of command.
749
750 3 ne 2 != 1 => error
751
752 evaluate.sps:18.17-18.25: warning: DEBUG EVALUATE: Chaining relational
753 operators (e.g. `a < b < c') will not produce the mathematically expected
754 result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b <
755 c').  To disable this warning, insert parentheses.
756    18 | DEBUG EVALUATE /3 > 2 > 1.
757       |                 ^~~~~~~~~
758
759 3 > 2 > 1 => false
760
761 1 <= 2 => true
762
763 2.5 <= 1.5 => false
764
765 1 le 2 => true
766
767 2 <= 2 => true
768
769 2 le 2 => true
770
771 evaluate.sps:25.21: error: DEBUG EVALUATE: Syntax error at `='.
772
773 2 < = 2 => error
774
775 evaluate.sps:26.17-26.29: error: DEBUG EVALUATE: Both operands of <= must have
776 the same type.
777    26 | DEBUG EVALUATE /1 <= 'foobar'.
778       |                 ^~~~~~~~~~~~~
779
780 evaluate.sps:26.17: note: DEBUG EVALUATE: This operand has type 'number'.
781    26 | DEBUG EVALUATE /1 <= 'foobar'.
782       |                 ^
783
784 evaluate.sps:26.22-26.29: note: DEBUG EVALUATE: This operand has type 'string'.
785    26 | DEBUG EVALUATE /1 <= 'foobar'.
786       |                      ^~~~~~~~
787
788 1 <= 'foobar' => error
789
790 evaluate.sps:27.17-27.27: error: DEBUG EVALUATE: Both operands of <= must have
791 the same type.
792    27 | DEBUG EVALUATE /'baz' <= 10.
793       |                 ^~~~~~~~~~~
794
795 evaluate.sps:27.17-27.21: note: DEBUG EVALUATE: This operand has type 'string'.
796    27 | DEBUG EVALUATE /'baz' <= 10.
797       |                 ^~~~~
798
799 evaluate.sps:27.26-27.27: note: DEBUG EVALUATE: This operand has type 'number'.
800    27 | DEBUG EVALUATE /'baz' <= 10.
801       |                          ^~
802
803 'baz' <= 10 => error
804
805 evaluate.sps:28.17-28.30: error: DEBUG EVALUATE: Both operands of <= must have
806 the same type.
807    28 | DEBUG EVALUATE /'quux' <= 5.55.
808       |                 ^~~~~~~~~~~~~~
809
810 evaluate.sps:28.17-28.22: note: DEBUG EVALUATE: This operand has type 'string'.
811    28 | DEBUG EVALUATE /'quux' <= 5.55.
812       |                 ^~~~~~
813
814 evaluate.sps:28.27-28.30: note: DEBUG EVALUATE: This operand has type 'number'.
815    28 | DEBUG EVALUATE /'quux' <= 5.55.
816       |                           ^~~~
817
818 'quux' <= 5.55 => error
819
820 '0123' <= '0123' => true
821
822 '0123' <= '0124' => true
823
824 '0124' le '0123' => false
825
826 '0123  ' <= '0123' => true
827
828 '0123' le '0123  ' => true
829
830 1 < 2 => true
831
832 2.5 < 1.5 => false
833
834 3.5 lt 4 => true
835
836 4 lt 3.5 => false
837
838 evaluate.sps:39.17-39.29: error: DEBUG EVALUATE: Both operands of < must have
839 the same type.
840    39 | DEBUG EVALUATE /1 lt 'foobar'.
841       |                 ^~~~~~~~~~~~~
842
843 evaluate.sps:39.17: note: DEBUG EVALUATE: This operand has type 'number'.
844    39 | DEBUG EVALUATE /1 lt 'foobar'.
845       |                 ^
846
847 evaluate.sps:39.22-39.29: note: DEBUG EVALUATE: This operand has type 'string'.
848    39 | DEBUG EVALUATE /1 lt 'foobar'.
849       |                      ^~~~~~~~
850
851 1 lt 'foobar' => error
852
853 evaluate.sps:40.17-40.29: error: DEBUG EVALUATE: Both operands of < must have
854 the same type.
855    40 | DEBUG EVALUATE /5 lt 'foobar'.
856       |                 ^~~~~~~~~~~~~
857
858 evaluate.sps:40.17: note: DEBUG EVALUATE: This operand has type 'number'.
859    40 | DEBUG EVALUATE /5 lt 'foobar'.
860       |                 ^
861
862 evaluate.sps:40.22-40.29: note: DEBUG EVALUATE: This operand has type 'string'.
863    40 | DEBUG EVALUATE /5 lt 'foobar'.
864       |                      ^~~~~~~~
865
866 5 lt 'foobar' => error
867
868 evaluate.sps:41.17-41.26: error: DEBUG EVALUATE: Both operands of < must have
869 the same type.
870    41 | DEBUG EVALUATE /'baz' < 10.
871       |                 ^~~~~~~~~~
872
873 evaluate.sps:41.17-41.21: note: DEBUG EVALUATE: This operand has type 'string'.
874    41 | DEBUG EVALUATE /'baz' < 10.
875       |                 ^~~~~
876
877 evaluate.sps:41.25-41.26: note: DEBUG EVALUATE: This operand has type 'number'.
878    41 | DEBUG EVALUATE /'baz' < 10.
879       |                         ^~
880
881 'baz' < 10 => error
882
883 evaluate.sps:42.17-42.29: error: DEBUG EVALUATE: Both operands of < must have
884 the same type.
885    42 | DEBUG EVALUATE /'quux' < 5.55.
886       |                 ^~~~~~~~~~~~~
887
888 evaluate.sps:42.17-42.22: note: DEBUG EVALUATE: This operand has type 'string'.
889    42 | DEBUG EVALUATE /'quux' < 5.55.
890       |                 ^~~~~~
891
892 evaluate.sps:42.26-42.29: note: DEBUG EVALUATE: This operand has type 'number'.
893    42 | DEBUG EVALUATE /'quux' < 5.55.
894       |                          ^~~~
895
896 'quux' < 5.55 => error
897
898 '0123' lt '0123' => false
899
900 '0123' < '0124' => true
901
902 '0124' lt '0123' => false
903
904 '0123  ' < '0123' => false
905
906 '0123' lt '0123  ' => false
907 ])
908 done
909 AT_CLEANUP
910
911 AT_SETUP([expressions - >= > <>])
912 AT_KEYWORDS([expression expressions evaluate ge gt ne])
913 AT_DATA([evaluate-base.sps], [
914 DEBUG EVALUATE SET opt.
915 DEBUG EVALUATE /1 >= 2.
916 DEBUG EVALUATE /2.5 >= 1.5
917 DEBUG EVALUATE /1 ge 2.
918 DEBUG EVALUATE /2 >= 2.
919 DEBUG EVALUATE /2 ge 2.
920 DEBUG EVALUATE /2 > = 2.
921 DEBUG EVALUATE /1 >= 'foobar'.
922 DEBUG EVALUATE /5 ge 'foobar'.
923 DEBUG EVALUATE /'baz' ge 10.
924 DEBUG EVALUATE /'0123' ge '0123'.
925 DEBUG EVALUATE /'0123' >= '0124'.
926 DEBUG EVALUATE /'0124' >= '0123'.
927 DEBUG EVALUATE /'0123  ' ge '0123'.
928 DEBUG EVALUATE /'0123' >= '0123 '.
929
930 DEBUG EVALUATE /1 > 2.
931 DEBUG EVALUATE /2.5 > 1.5
932 DEBUG EVALUATE /3.5 gt 4.
933 DEBUG EVALUATE /4 gt 3.5
934 DEBUG EVALUATE /1 gt 'foobar'.
935 DEBUG EVALUATE /'baz' > 10.
936 DEBUG EVALUATE /'0123' > '0123'.
937 DEBUG EVALUATE /'0123' > '0124'.
938 DEBUG EVALUATE /'0124' > '0123'.
939 DEBUG EVALUATE /'0123   ' > '0123'.
940 DEBUG EVALUATE /'0123    ' > '0123 '.
941
942 DEBUG EVALUATE /1 ne 1.
943 DEBUG EVALUATE /1 ~= 1.
944 DEBUG EVALUATE /1 <> 2.
945 DEBUG EVALUATE /2 ne 3.
946 DEBUG EVALUATE /1 ~= 'foobar'.
947 DEBUG EVALUATE /'baz' ne 10.
948 DEBUG EVALUATE /'quux' ~= 5.55.
949 DEBUG EVALUATE /'foobar' <> 'foobar'.
950 DEBUG EVALUATE /'quux' ne 'bar'.
951 DEBUG EVALUATE /'bar   ' <> 'bar'.
952 DEBUG EVALUATE /'asdf       ' ~= "asdf   ".
953 DEBUG EVALUATE /1 < > 1.
954 DEBUG EVALUATE /1 ~ = 1.
955 ])
956
957 for opt in OPT NOOPT; do
958     AS_BOX([$opt])
959     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
960     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
961 1 >= 2 => false
962
963 2.5 >= 1.5 => true
964
965 1 ge 2 => false
966
967 2 >= 2 => true
968
969 2 ge 2 => true
970
971 evaluate.sps:8.21: error: DEBUG EVALUATE: Syntax error at `='.
972
973 2 > = 2 => error
974
975 evaluate.sps:9.17-9.29: error: DEBUG EVALUATE: Both operands of >= must have
976 the same type.
977     9 | DEBUG EVALUATE /1 >= 'foobar'.
978       |                 ^~~~~~~~~~~~~
979
980 evaluate.sps:9.17: note: DEBUG EVALUATE: This operand has type 'number'.
981     9 | DEBUG EVALUATE /1 >= 'foobar'.
982       |                 ^
983
984 evaluate.sps:9.22-9.29: note: DEBUG EVALUATE: This operand has type 'string'.
985     9 | DEBUG EVALUATE /1 >= 'foobar'.
986       |                      ^~~~~~~~
987
988 1 >= 'foobar' => error
989
990 evaluate.sps:10.17-10.29: error: DEBUG EVALUATE: Both operands of >= must have
991 the same type.
992    10 | DEBUG EVALUATE /5 ge 'foobar'.
993       |                 ^~~~~~~~~~~~~
994
995 evaluate.sps:10.17: note: DEBUG EVALUATE: This operand has type 'number'.
996    10 | DEBUG EVALUATE /5 ge 'foobar'.
997       |                 ^
998
999 evaluate.sps:10.22-10.29: note: DEBUG EVALUATE: This operand has type 'string'.
1000    10 | DEBUG EVALUATE /5 ge 'foobar'.
1001       |                      ^~~~~~~~
1002
1003 5 ge 'foobar' => error
1004
1005 evaluate.sps:11.17-11.27: error: DEBUG EVALUATE: Both operands of >= must have
1006 the same type.
1007    11 | DEBUG EVALUATE /'baz' ge 10.
1008       |                 ^~~~~~~~~~~
1009
1010 evaluate.sps:11.17-11.21: note: DEBUG EVALUATE: This operand has type 'string'.
1011    11 | DEBUG EVALUATE /'baz' ge 10.
1012       |                 ^~~~~
1013
1014 evaluate.sps:11.26-11.27: note: DEBUG EVALUATE: This operand has type 'number'.
1015    11 | DEBUG EVALUATE /'baz' ge 10.
1016       |                          ^~
1017
1018 'baz' ge 10 => error
1019
1020 '0123' ge '0123' => true
1021
1022 '0123' >= '0124' => false
1023
1024 '0124' >= '0123' => true
1025
1026 '0123  ' ge '0123' => true
1027
1028 '0123' >= '0123 ' => true
1029
1030 1 > 2 => false
1031
1032 2.5 > 1.5 => true
1033
1034 3.5 gt 4 => false
1035
1036 4 gt 3.5 => true
1037
1038 evaluate.sps:22.17-22.29: error: DEBUG EVALUATE: Both operands of > must have
1039 the same type.
1040    22 | DEBUG EVALUATE /1 gt 'foobar'.
1041       |                 ^~~~~~~~~~~~~
1042
1043 evaluate.sps:22.17: note: DEBUG EVALUATE: This operand has type 'number'.
1044    22 | DEBUG EVALUATE /1 gt 'foobar'.
1045       |                 ^
1046
1047 evaluate.sps:22.22-22.29: note: DEBUG EVALUATE: This operand has type 'string'.
1048    22 | DEBUG EVALUATE /1 gt 'foobar'.
1049       |                      ^~~~~~~~
1050
1051 1 gt 'foobar' => error
1052
1053 evaluate.sps:23.17-23.26: error: DEBUG EVALUATE: Both operands of > must have
1054 the same type.
1055    23 | DEBUG EVALUATE /'baz' > 10.
1056       |                 ^~~~~~~~~~
1057
1058 evaluate.sps:23.17-23.21: note: DEBUG EVALUATE: This operand has type 'string'.
1059    23 | DEBUG EVALUATE /'baz' > 10.
1060       |                 ^~~~~
1061
1062 evaluate.sps:23.25-23.26: note: DEBUG EVALUATE: This operand has type 'number'.
1063    23 | DEBUG EVALUATE /'baz' > 10.
1064       |                         ^~
1065
1066 'baz' > 10 => error
1067
1068 '0123' > '0123' => false
1069
1070 '0123' > '0124' => false
1071
1072 '0124' > '0123' => true
1073
1074 '0123   ' > '0123' => false
1075
1076 '0123    ' > '0123 ' => false
1077
1078 1 ne 1 => false
1079
1080 1 ~= 1 => false
1081
1082 1 <> 2 => true
1083
1084 2 ne 3 => true
1085
1086 evaluate.sps:34.17-34.29: error: DEBUG EVALUATE: Both operands of ~= must have
1087 the same type.
1088    34 | DEBUG EVALUATE /1 ~= 'foobar'.
1089       |                 ^~~~~~~~~~~~~
1090
1091 evaluate.sps:34.17: note: DEBUG EVALUATE: This operand has type 'number'.
1092    34 | DEBUG EVALUATE /1 ~= 'foobar'.
1093       |                 ^
1094
1095 evaluate.sps:34.22-34.29: note: DEBUG EVALUATE: This operand has type 'string'.
1096    34 | DEBUG EVALUATE /1 ~= 'foobar'.
1097       |                      ^~~~~~~~
1098
1099 1 ~= 'foobar' => error
1100
1101 evaluate.sps:35.17-35.27: error: DEBUG EVALUATE: Both operands of ~= must have
1102 the same type.
1103    35 | DEBUG EVALUATE /'baz' ne 10.
1104       |                 ^~~~~~~~~~~
1105
1106 evaluate.sps:35.17-35.21: note: DEBUG EVALUATE: This operand has type 'string'.
1107    35 | DEBUG EVALUATE /'baz' ne 10.
1108       |                 ^~~~~
1109
1110 evaluate.sps:35.26-35.27: note: DEBUG EVALUATE: This operand has type 'number'.
1111    35 | DEBUG EVALUATE /'baz' ne 10.
1112       |                          ^~
1113
1114 'baz' ne 10 => error
1115
1116 evaluate.sps:36.17-36.30: error: DEBUG EVALUATE: Both operands of ~= must have
1117 the same type.
1118    36 | DEBUG EVALUATE /'quux' ~= 5.55.
1119       |                 ^~~~~~~~~~~~~~
1120
1121 evaluate.sps:36.17-36.22: note: DEBUG EVALUATE: This operand has type 'string'.
1122    36 | DEBUG EVALUATE /'quux' ~= 5.55.
1123       |                 ^~~~~~
1124
1125 evaluate.sps:36.27-36.30: note: DEBUG EVALUATE: This operand has type 'number'.
1126    36 | DEBUG EVALUATE /'quux' ~= 5.55.
1127       |                           ^~~~
1128
1129 'quux' ~= 5.55 => error
1130
1131 'foobar' <> 'foobar' => false
1132
1133 'quux' ne 'bar' => true
1134
1135 'bar   ' <> 'bar' => false
1136
1137 'asdf       ' ~= "asdf   " => false
1138
1139 evaluate.sps:41.21: error: DEBUG EVALUATE: Syntax error at `>'.
1140
1141 1 < > 1 => error
1142
1143 evaluate.sps:42.19: error: DEBUG EVALUATE: Syntax error at `~': expecting end
1144 of command.
1145
1146 1 ~ = 1 => error
1147 ])
1148 done
1149 AT_CLEANUP
1150
1151 AT_SETUP([expressions - EXP LG10 LN SQRT ABS MOD MOD10 RND TRUNC])
1152 AT_KEYWORDS([expression expressions evaluate])
1153 AT_DATA([evaluate-base.sps], [
1154 DEBUG EVALUATE SET opt.
1155 DEBUG EVALUATE /EXP(10).
1156 DEBUG EVALUATE /EXP('x').
1157
1158 DEBUG EVALUATE /LG10(500).
1159 DEBUG EVALUATE /LG10('x').
1160
1161 DEBUG EVALUATE /SQRT(500).
1162 DEBUG EVALUATE /SQRT(-1).
1163
1164 DEBUG EVALUATE /ABS(-10.5).
1165 DEBUG EVALUATE /ABS(55.79).
1166 DEBUG EVALUATE /ABS(0).
1167 DEBUG EVALUATE /ABS(-0).
1168
1169 DEBUG EVALUATE /MOD(55.5, 2).
1170 DEBUG EVALUATE /MOD(-55.5, 2).
1171 DEBUG EVALUATE /MOD(55.5, -2).
1172 DEBUG EVALUATE /MOD(-55.5, -2).
1173 DEBUG EVALUATE /MOD('a', 2).
1174 DEBUG EVALUATE /MOD(2, 'a').
1175 DEBUG EVALUATE /MOD('a', 'b').
1176
1177 DEBUG EVALUATE /MOD10(55.5).
1178 DEBUG EVALUATE /MOD10(-55.5).
1179
1180 DEBUG EVALUATE /RND(5.4).
1181 DEBUG EVALUATE /RND(5.6).
1182 DEBUG EVALUATE /RND(-5.4).
1183 DEBUG EVALUATE /RND(-5.6).
1184 DEBUG EVALUATE /RND(5.56, .1).
1185 DEBUG EVALUATE /RND(-5.56, .1)
1186 DEBUG EVALUATE /RND(.5).
1187 DEBUG EVALUATE /RND(.5 - 2**-53).
1188 DEBUG EVALUATE /RND(.5 - 2**-52).
1189 DEBUG EVALUATE /RND(.5 - 2**-51).
1190 DEBUG EVALUATE /RND(.5 - 2**-45).
1191 DEBUG EVALUATE /RND(.5 - 2**-45, 1, 10).
1192 DEBUG EVALUATE /RND('x').
1193
1194 DEBUG EVALUATE /TRUNC(1.2).
1195 DEBUG EVALUATE /TRUNC(1.9).
1196 DEBUG EVALUATE /TRUNC(-1.2).
1197 DEBUG EVALUATE /TRUNC(-1.9).
1198 DEBUG EVALUATE /TRUNC(5.06, .1).
1199 DEBUG EVALUATE /TRUNC(-5.06, .1).
1200 DEBUG EVALUATE /TRUNC(1).
1201 DEBUG EVALUATE /TRUNC(1 - 2**-53).
1202 DEBUG EVALUATE /TRUNC(1 - 2**-52).
1203 DEBUG EVALUATE /TRUNC(1 - 2**-51).
1204 DEBUG EVALUATE /TRUNC(1 - 2**-45).
1205 DEBUG EVALUATE /TRUNC(1 - 2**-45, 1, 10).
1206 DEBUG EVALUATE /TRUNC('x').
1207 ])
1208
1209 for opt in OPT NOOPT; do
1210     AS_BOX([$opt])
1211     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1212     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1213 EXP(10) => 22026.47
1214
1215 evaluate.sps:4.17-4.24: error: DEBUG EVALUATE: Type mismatch invoking
1216 EXP(number) as EXP(string).
1217     4 | DEBUG EVALUATE /EXP('x').
1218       |                 ^~~~~~~~
1219
1220 EXP('x') => error
1221
1222 LG10(500) => 2.70
1223
1224 evaluate.sps:7.17-7.25: error: DEBUG EVALUATE: Type mismatch invoking
1225 LG10(number) as LG10(string).
1226     7 | DEBUG EVALUATE /LG10('x').
1227       |                 ^~~~~~~~~
1228
1229 LG10('x') => error
1230
1231 SQRT(500) => 22.36
1232
1233 SQRT(-1) => sysmis
1234
1235 ABS(-10.5) => 10.50
1236
1237 ABS(55.79) => 55.79
1238
1239 ABS(0) => 0.00
1240
1241 ABS(-0) => 0.00
1242
1243 MOD(55.5, 2) => 1.50
1244
1245 MOD(-55.5, 2) => -1.50
1246
1247 MOD(55.5, -2) => 1.50
1248
1249 MOD(-55.5, -2) => -1.50
1250
1251 evaluate.sps:21.17-21.27: error: DEBUG EVALUATE: Type mismatch invoking
1252 MOD(number, number) as MOD(string, number).
1253    21 | DEBUG EVALUATE /MOD('a', 2).
1254       |                 ^~~~~~~~~~~
1255
1256 MOD('a', 2) => error
1257
1258 evaluate.sps:22.17-22.27: error: DEBUG EVALUATE: Type mismatch invoking
1259 MOD(number, number) as MOD(number, string).
1260    22 | DEBUG EVALUATE /MOD(2, 'a').
1261       |                 ^~~~~~~~~~~
1262
1263 MOD(2, 'a') => error
1264
1265 evaluate.sps:23.17-23.29: error: DEBUG EVALUATE: Type mismatch invoking
1266 MOD(number, number) as MOD(string, string).
1267    23 | DEBUG EVALUATE /MOD('a', 'b').
1268       |                 ^~~~~~~~~~~~~
1269
1270 MOD('a', 'b') => error
1271
1272 MOD10(55.5) => 5.50
1273
1274 MOD10(-55.5) => -5.50
1275
1276 RND(5.4) => 5.00
1277
1278 RND(5.6) => 6.00
1279
1280 RND(-5.4) => -5.00
1281
1282 RND(-5.6) => -6.00
1283
1284 RND(5.56, .1) => 5.60
1285
1286 RND(-5.56, .1) => -5.60
1287
1288 RND(.5) => 1.00
1289
1290 RND(.5 - 2**-53) => 1.00
1291
1292 RND(.5 - 2**-52) => 1.00
1293
1294 RND(.5 - 2**-51) => 1.00
1295
1296 RND(.5 - 2**-45) => 0.00
1297
1298 RND(.5 - 2**-45, 1, 10) => 1.00
1299
1300 evaluate.sps:40.17-40.24: error: DEBUG EVALUATE: Function invocation
1301 RND(string) does not match any known function.  Candidates are:
1302 RND(number)
1303 RND(number, number)
1304 RND(number, number, number).
1305    40 | DEBUG EVALUATE /RND('x').
1306       |                 ^~~~~~~~
1307
1308 RND('x') => error
1309
1310 TRUNC(1.2) => 1.00
1311
1312 TRUNC(1.9) => 1.00
1313
1314 TRUNC(-1.2) => -1.00
1315
1316 TRUNC(-1.9) => -1.00
1317
1318 TRUNC(5.06, .1) => 5.00
1319
1320 TRUNC(-5.06, .1) => -5.00
1321
1322 TRUNC(1) => 1.00
1323
1324 TRUNC(1 - 2**-53) => 1.00
1325
1326 TRUNC(1 - 2**-52) => 1.00
1327
1328 TRUNC(1 - 2**-51) => 1.00
1329
1330 TRUNC(1 - 2**-45) => 0.00
1331
1332 TRUNC(1 - 2**-45, 1, 10) => 1.00
1333
1334 evaluate.sps:54.17-54.26: error: DEBUG EVALUATE: Function invocation
1335 TRUNC(string) does not match any known function.  Candidates are:
1336 TRUNC(number)
1337 TRUNC(number, number)
1338 TRUNC(number, number, number).
1339    54 | DEBUG EVALUATE /TRUNC('x').
1340       |                 ^~~~~~~~~~
1341
1342 TRUNC('x') => error
1343 ])
1344 done
1345 AT_CLEANUP
1346
1347 AT_SETUP([expressions - ACOS ARSIN ARTAN COS SIN TAN])
1348 AT_KEYWORDS([expression expressions evaluate])
1349 AT_DATA([evaluate-base.sps], [
1350 DEBUG EVALUATE SET opt.
1351 DEBUG EVALUATE /ACOS(.5) / 3.14159 * 180.
1352 DEBUG EVALUATE /ARCOS(.75) / 3.14159 * 180.
1353 DEBUG EVALUATE /ARCOS(-.5) / 3.14159 * 180.
1354 DEBUG EVALUATE /ACOS(-.75) / 3.14159 * 180.
1355 DEBUG EVALUATE /ACOS(-1) / 3.14159 * 180.
1356 DEBUG EVALUATE /ARCOS(1) / 3.14159 * 180.
1357 DEBUG EVALUATE /ACOS(-1.01) / 3.14159 * 180.
1358 DEBUG EVALUATE /ARCOS(1.01) / 3.14159 * 180.
1359 DEBUG EVALUATE /ACOS('x') / 3.14159 * 180.
1360
1361 DEBUG EVALUATE /ASIN(.5) / 3.14159 * 180.
1362 DEBUG EVALUATE /ARSIN(.25) / 3.14159 * 180.
1363 DEBUG EVALUATE /ARSIN(-.5) / 3.14159 * 180.
1364 DEBUG EVALUATE /ASIN(-.25) / 3.14159 * 180.
1365 DEBUG EVALUATE /ASIN(-1.01) / 3.14159 * 180.
1366 DEBUG EVALUATE /ARSIN(1.01) / 3.14159 * 180.
1367 DEBUG EVALUATE /ASIN('x') / 3.14159 * 180.
1368
1369 DEBUG EVALUATE /ATAN(1) / 3.14159 * 180.
1370 DEBUG EVALUATE /ARTAN(10) / 3.14159 * 180.
1371 DEBUG EVALUATE /ARTAN(-1) / 3.14159 * 180.
1372 DEBUG EVALUATE /ATAN(-10) / 3.14159 * 180.
1373 DEBUG EVALUATE /ATAN('x') / 3.14159 * 180.
1374
1375 DEBUG EVALUATE /COS(60 / 180 * 3.14159).
1376 DEBUG EVALUATE /COS(45 / 180 * 3.14159).
1377 DEBUG EVALUATE /COS(30 / 180 * 3.14159).
1378 DEBUG EVALUATE /COS(15 / 180 * 3.14159).
1379 DEBUG EVALUATE /COS(-60 / 180 * 3.14159).
1380 DEBUG EVALUATE /COS(-45 / 180 * 3.14159).
1381 DEBUG EVALUATE /COS(-30 / 180 * 3.14159).
1382 DEBUG EVALUATE /COS(-15 / 180 * 3.14159).
1383 DEBUG EVALUATE /COS(123 / 180 * 3.14159).
1384 DEBUG EVALUATE /COS(321 / 180 * 3.14159).
1385 DEBUG EVALUATE /COS('x').
1386
1387 DEBUG EVALUATE /SIN(60 / 180 * 3.14159).
1388 DEBUG EVALUATE /SIN(45 / 180 * 3.14159).
1389 DEBUG EVALUATE /SIN(30 / 180 * 3.14159).
1390 DEBUG EVALUATE /SIN(15 / 180 * 3.14159).
1391 DEBUG EVALUATE /SIN(-60 / 180 * 3.14159).
1392 DEBUG EVALUATE /SIN(-45 / 180 * 3.14159).
1393 DEBUG EVALUATE /SIN(-30 / 180 * 3.14159).
1394 DEBUG EVALUATE /SIN(-15 / 180 * 3.14159).
1395 DEBUG EVALUATE /SIN(123 / 180 * 3.14159).
1396 DEBUG EVALUATE /SIN(321 / 180 * 3.14159).
1397 DEBUG EVALUATE /SIN('x').
1398
1399 DEBUG EVALUATE /TAN(60 / 180 * 3.14159).
1400 DEBUG EVALUATE /TAN(45 / 180 * 3.14159).
1401 DEBUG EVALUATE /TAN(30 / 180 * 3.14159).
1402 DEBUG EVALUATE /TAN(15 / 180 * 3.14159).
1403 DEBUG EVALUATE /TAN(-60 / 180 * 3.14159).
1404 DEBUG EVALUATE /TAN(-45 / 180 * 3.14159).
1405 DEBUG EVALUATE /TAN(-30 / 180 * 3.14159).
1406 DEBUG EVALUATE /TAN(-15 / 180 * 3.14159).
1407 DEBUG EVALUATE /TAN(123 / 180 * 3.14159).
1408 DEBUG EVALUATE /TAN(321 / 180 * 3.14159).
1409 DEBUG EVALUATE /TAN('x').
1410 ])
1411
1412 for opt in OPT NOOPT; do
1413     AS_BOX([$opt])
1414     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1415     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1416 ACOS(.5) / 3.14159 * 180 => 60.00
1417
1418 ARCOS(.75) / 3.14159 * 180 => 41.41
1419
1420 ARCOS(-.5) / 3.14159 * 180 => 120.00
1421
1422 ACOS(-.75) / 3.14159 * 180 => 138.59
1423
1424 ACOS(-1) / 3.14159 * 180 => 180.00
1425
1426 ARCOS(1) / 3.14159 * 180 => 0.00
1427
1428 ACOS(-1.01) / 3.14159 * 180 => sysmis
1429
1430 ARCOS(1.01) / 3.14159 * 180 => sysmis
1431
1432 evaluate.sps:11.17-11.25: error: DEBUG EVALUATE: Type mismatch invoking
1433 ACOS(number) as ACOS(string).
1434    11 | DEBUG EVALUATE /ACOS('x') / 3.14159 * 180.
1435       |                 ^~~~~~~~~
1436
1437 ACOS('x') / 3.14159 * 180 => error
1438
1439 ASIN(.5) / 3.14159 * 180 => 30.00
1440
1441 ARSIN(.25) / 3.14159 * 180 => 14.48
1442
1443 ARSIN(-.5) / 3.14159 * 180 => -30.00
1444
1445 ASIN(-.25) / 3.14159 * 180 => -14.48
1446
1447 ASIN(-1.01) / 3.14159 * 180 => sysmis
1448
1449 ARSIN(1.01) / 3.14159 * 180 => sysmis
1450
1451 evaluate.sps:19.17-19.25: error: DEBUG EVALUATE: Type mismatch invoking
1452 ASIN(number) as ASIN(string).
1453    19 | DEBUG EVALUATE /ASIN('x') / 3.14159 * 180.
1454       |                 ^~~~~~~~~
1455
1456 ASIN('x') / 3.14159 * 180 => error
1457
1458 ATAN(1) / 3.14159 * 180 => 45.00
1459
1460 ARTAN(10) / 3.14159 * 180 => 84.29
1461
1462 ARTAN(-1) / 3.14159 * 180 => -45.00
1463
1464 ATAN(-10) / 3.14159 * 180 => -84.29
1465
1466 evaluate.sps:25.17-25.25: error: DEBUG EVALUATE: Type mismatch invoking
1467 ATAN(number) as ATAN(string).
1468    25 | DEBUG EVALUATE /ATAN('x') / 3.14159 * 180.
1469       |                 ^~~~~~~~~
1470
1471 ATAN('x') / 3.14159 * 180 => error
1472
1473 COS(60 / 180 * 3.14159) => 0.50
1474
1475 COS(45 / 180 * 3.14159) => 0.71
1476
1477 COS(30 / 180 * 3.14159) => 0.87
1478
1479 COS(15 / 180 * 3.14159) => 0.97
1480
1481 COS(-60 / 180 * 3.14159) => 0.50
1482
1483 COS(-45 / 180 * 3.14159) => 0.71
1484
1485 COS(-30 / 180 * 3.14159) => 0.87
1486
1487 COS(-15 / 180 * 3.14159) => 0.97
1488
1489 COS(123 / 180 * 3.14159) => -0.54
1490
1491 COS(321 / 180 * 3.14159) => 0.78
1492
1493 evaluate.sps:37.17-37.24: error: DEBUG EVALUATE: Type mismatch invoking
1494 COS(number) as COS(string).
1495    37 | DEBUG EVALUATE /COS('x').
1496       |                 ^~~~~~~~
1497
1498 COS('x') => error
1499
1500 SIN(60 / 180 * 3.14159) => 0.87
1501
1502 SIN(45 / 180 * 3.14159) => 0.71
1503
1504 SIN(30 / 180 * 3.14159) => 0.50
1505
1506 SIN(15 / 180 * 3.14159) => 0.26
1507
1508 SIN(-60 / 180 * 3.14159) => -0.87
1509
1510 SIN(-45 / 180 * 3.14159) => -0.71
1511
1512 SIN(-30 / 180 * 3.14159) => -0.50
1513
1514 SIN(-15 / 180 * 3.14159) => -0.26
1515
1516 SIN(123 / 180 * 3.14159) => 0.84
1517
1518 SIN(321 / 180 * 3.14159) => -0.63
1519
1520 evaluate.sps:49.17-49.24: error: DEBUG EVALUATE: Type mismatch invoking
1521 SIN(number) as SIN(string).
1522    49 | DEBUG EVALUATE /SIN('x').
1523       |                 ^~~~~~~~
1524
1525 SIN('x') => error
1526
1527 TAN(60 / 180 * 3.14159) => 1.73
1528
1529 TAN(45 / 180 * 3.14159) => 1.00
1530
1531 TAN(30 / 180 * 3.14159) => 0.58
1532
1533 TAN(15 / 180 * 3.14159) => 0.27
1534
1535 TAN(-60 / 180 * 3.14159) => -1.73
1536
1537 TAN(-45 / 180 * 3.14159) => -1.00
1538
1539 TAN(-30 / 180 * 3.14159) => -0.58
1540
1541 TAN(-15 / 180 * 3.14159) => -0.27
1542
1543 TAN(123 / 180 * 3.14159) => -1.54
1544
1545 TAN(321 / 180 * 3.14159) => -0.81
1546
1547 evaluate.sps:61.17-61.24: error: DEBUG EVALUATE: Type mismatch invoking
1548 TAN(number) as TAN(string).
1549    61 | DEBUG EVALUATE /TAN('x').
1550       |                 ^~~~~~~~
1551
1552 TAN('x') => error
1553 ])
1554 done
1555 AT_CLEANUP
1556
1557 AT_SETUP([expressions - MISSING NMISS NVALID SYSMIS ANY RANGE MAX MIN])
1558 AT_KEYWORDS([expression expressions evaluate])
1559 AT_DATA([evaluate-base.sps], [
1560 DEBUG EVALUATE SET opt.
1561 DEBUG EVALUATE /MISSING(10).
1562 DEBUG EVALUATE /MISSING($SYSMIS).
1563 DEBUG EVALUATE /MISSING(ASIN(1.01)).
1564 DEBUG EVALUATE /MISSING(ASIN(.5)).
1565 DEBUG EVALUATE /MISSING('    ').
1566
1567 DEBUG EVALUATE (x=5)/x.
1568 DEBUG EVALUATE (x=5 MISSING)/x.
1569 DEBUG EVALUATE (x=SYSMIS)/x.
1570
1571 DEBUG EVALUATE (x=5) VECTOR/v(1).
1572 DEBUG EVALUATE (x=5 MISSING) VECTOR/v(1).
1573 DEBUG EVALUATE (x=SYSMIS) VECTOR/v(1).
1574
1575 DEBUG EVALUATE (x=5)/VALUE(x).
1576 DEBUG EVALUATE (x=5 MISSING)/VALUE(x).
1577 DEBUG EVALUATE (x=SYSMIS)/VALUE(x).
1578
1579 DEBUG EVALUATE (x=5) VECTOR/VALUE(v(1)).
1580 DEBUG EVALUATE (x=5 MISSING) VECTOR/VALUE(v(1)).
1581 DEBUG EVALUATE (x=SYSMIS) VECTOR/VALUE(v(1)).
1582
1583 DEBUG EVALUATE (x=5)/MISSING(x).
1584 DEBUG EVALUATE (x=5 MISSING)/MISSING(x).
1585 DEBUG EVALUATE (x=SYSMIS)/MISSING(x).
1586
1587 DEBUG EVALUATE (x=5)/SYSMIS(x).
1588 DEBUG EVALUATE (x=5 MISSING)/SYSMIS(x).
1589 DEBUG EVALUATE (x=SYSMIS)/SYSMIS(x).
1590 ])
1591
1592 for opt in OPT NOOPT; do
1593     AS_BOX([$opt])
1594     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1595     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1596 ])
1597 done
1598 AT_CLEANUP
1599
1600 # FIXME: a variable name as the argument to SYSMIS is a special case
1601 # that we don't yet test.  We also can't test VALUE this way.
1602 CHECK_EXPR_EVAL([missing nmiss nvalid sysmis any range max min],
1603   [[missing(10)], [false]],
1604   [[missing($sysmis)], [true]],
1605   [[missing(asin(1.01))], [true]],
1606   [[missing(asin(.5))], [false]],
1607   [[missing('    ')], [error],
1608    [error: DEBUG EVALUATE: Type mismatch invoking MISSING(number) as missing(string).]],
1609
1610   [[nmiss($sysmis)], [1.00]],
1611   [[nmiss(0)], [0.00]],
1612   [[nmiss($sysmis, $sysmis, $sysmis)], [3.00]],
1613   [[nmiss(1, 2, 3, 4)], [0.00]],
1614   [[nmiss(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4)], [4.00]],
1615
1616   [[nvalid($sysmis)], [0.00]],
1617   [[nvalid(0)], [1.00]],
1618   [[nvalid($sysmis, $sysmis, $sysmis)], [0.00]],
1619   [[nvalid(1, 2, 3, 4)], [4.00]],
1620   [[nvalid(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4)], [5.00]],
1621
1622   [[sysmis(10)], [false]],
1623   [[sysmis($sysmis)], [true]],
1624   [[sysmis(asin(1.01))], [true]],
1625   [[sysmis(asin(.5))], [false]],
1626   [[sysmis('    ')], [error],
1627    [error: DEBUG EVALUATE: Function invocation sysmis(string) does not match any known function.  Candidates are:
1628 SYSMIS(num_variable)
1629 SYSMIS(number).]],
1630
1631   [[any($sysmis, 1, $sysmis, 3)], [sysmis]],
1632   [[any(1, 1, 2, 3)], [true]],
1633   [[any(1, $true, 2, 3)], [true]],
1634   [[any(1, $false, 2, 3)], [false]],
1635   [[any(2, 1, 2, 3)], [true]],
1636   [[any(3, 1, 2, 3)], [true]],
1637   [[any(5, 1, 2, 3)], [false]],
1638   [[any(1, 1, 1, 1)], [true]],
1639   [[any($sysmis, 1, 1, 1)], [sysmis]],
1640   [[any(1, $sysmis, $sysmis, $sysmis)], [sysmis]],
1641   [[any($sysmis, $sysmis, $sysmis, $sysmis)], [sysmis]],
1642   [[any(1)], [error],
1643    [error: DEBUG EVALUATE: Function invocation any(number) does not match any known function.  Candidates are:
1644 ANY(number, number[, number]...)
1645 ANY(string, string[, string]...).]],
1646   [[any('1', 2, 3, 4)], [error],
1647    [error: DEBUG EVALUATE: Function invocation any(string, number, number, number) does not match any known function.  Candidates are:
1648 ANY(number, number[, number]...)
1649 ANY(string, string[, string]...).]],
1650   [[any(1, '2', 3, 4)], [error],
1651    [error: DEBUG EVALUATE: Function invocation any(number, string, number, number) does not match any known function.  Candidates are:
1652 ANY(number, number[, number]...)
1653 ANY(string, string[, string]...).]],
1654   [[any(1, 2, '3', 4)], [error],
1655    [error: DEBUG EVALUATE: Function invocation any(number, number, string, number) does not match any known function.  Candidates are:
1656 ANY(number, number[, number]...)
1657 ANY(string, string[, string]...).]],
1658   [[any(1, 2, 3, '4')], [error],
1659    [error: DEBUG EVALUATE: Function invocation any(number, number, number, string) does not match any known function.  Candidates are:
1660 ANY(number, number[, number]...)
1661 ANY(string, string[, string]...).]],
1662
1663   [[any('', 'a', '', 'c')], [true]],
1664   [[any('a', 'a', 'b', 'c')], [true]],
1665   [[any('b', 'a', 'b', 'c')], [true]],
1666   [[any('c', 'a', 'b', 'c')], [true]],
1667   [[any('e', 'a', 'b', 'c')], [false]],
1668   [[any('a', 'a', 'a', 'a')], [true]],
1669   [[any('', 'a', 'a', 'a')], [false]],
1670   [[any('a', '', '', '')], [false]],
1671   [[any('a')], [error],
1672    [error: DEBUG EVALUATE: Function invocation any(string) does not match any known function.  Candidates are:
1673 ANY(number, number[, number]...)
1674 ANY(string, string[, string]...).]],
1675   [[any('a', 'a  ', 'b', 'c')], [true]],
1676   [[any('b   ', 'a', 'b', 'c')], [true]],
1677   [[any('c   ', 'a', 'b', 'c     ')], [true]],
1678   [[any(a10, 'b', 'c', 'd')], [error],
1679    [error: DEBUG EVALUATE: Function invocation any(format, string, string, string) does not match any known function.  Candidates are:
1680 ANY(number, number[, number]...)
1681 ANY(string, string[, string]...).]],
1682   [[any('a', b, 'c', 'd')], [error],
1683    [error: DEBUG EVALUATE: Unknown identifier b.]],
1684   [[any('a', 'b', c, 'd')], [error],
1685    [error: DEBUG EVALUATE: Unknown identifier c.]],
1686   [[any('a', 'b', 'c', d)], [error],
1687    [error: DEBUG EVALUATE: Unknown identifier d.]],
1688
1689   [[range(5, 1, 10)], [true]],
1690   [[range(1, 1, 10)], [true]],
1691   [[range(10, 1, 10)], [true]],
1692   [[range(-1, 1, 10)], [false]],
1693   [[range(12, 1, 10)], [false]],
1694   [[range($sysmis, 1, 10)], [sysmis]],
1695   [[range(5, 1, $sysmis)], [sysmis]],
1696   [[range(5, $sysmis, 10)], [sysmis]],
1697   [[range($sysmis, $sysmis, 10)], [sysmis ]],
1698   [[range($sysmis, 1, $sysmis)], [sysmis]],
1699   [[range($sysmis, $sysmis, $sysmis)], [sysmis]],
1700   [[range(0, 1, 8, 10, 18)], [false]],
1701   [[range(1, 1, 8, 10, 18)], [true]],
1702   [[range(6, 1, 8, 10, 18)], [true]],
1703   [[range(8, 1, 8, 10, 18)], [true]],
1704   [[range(9, 1, 8, 10, 18)], [false]],
1705   [[range(10, 1, 8, 10, 18)], [true]],
1706   [[range(13, 1, 8, 10, 18)], [true]],
1707   [[range(16, 1, 8, 10, 18)], [true]],
1708   [[range(18, 1, 8, 10, 18)], [true]],
1709   [[range(20, 1, 8, 10, 18)], [false]],
1710   [[range(1)], [error],
1711    [error: DEBUG EVALUATE: Function invocation range(number) does not match any known function.  Candidates are:
1712 RANGE(number, number, number[, number, number]...)
1713 RANGE(string, string, string[, string, string]...).]],
1714   [[range(1, 2)], [error],
1715    [error: DEBUG EVALUATE: RANGE(number, number, number[, number, number]...) must have an odd number of arguments.]],
1716   [[range(1, 2, 3, 4)], [error],
1717    [error: DEBUG EVALUATE: RANGE(number, number, number[, number, number]...) must have an odd number of arguments.]],
1718   [[range(1, 2, 3, 4, 5, 6)], [error],
1719    [error: DEBUG EVALUATE: RANGE(number, number, number[, number, number]...) must have an odd number of arguments.]],
1720   [[range('1', 2, 3)], [error],
1721    [error: DEBUG EVALUATE: Function invocation range(string, number, number) does not match any known function.  Candidates are:
1722 RANGE(number, number, number[, number, number]...)
1723 RANGE(string, string, string[, string, string]...).]],
1724   [[range(1, '2', 3)], [error],
1725    [error: DEBUG EVALUATE: Function invocation range(number, string, number) does not match any known function.  Candidates are:
1726 RANGE(number, number, number[, number, number]...)
1727 RANGE(string, string, string[, string, string]...).]],
1728   [[range(1, 2, '3')], [error],
1729    [error: DEBUG EVALUATE: Function invocation range(number, number, string) does not match any known function.  Candidates are:
1730 RANGE(number, number, number[, number, number]...)
1731 RANGE(string, string, string[, string, string]...).]],
1732
1733   [[range('123', '111', '888')], [true]],
1734   [[range('111', '111', '888')], [true]],
1735   [[range('888', '111', '888')], [true]],
1736   [[range('110', '111', '888')], [false]],
1737   [[range('889', '111', '888')], [false]],
1738   [[range('000', '111', '888')], [false]],
1739   [[range('999', '111', '888')], [false]],
1740   [[range('123   ', '111', '888')], [true]],
1741   [[range('123', '111   ', '888')], [true]],
1742   [[range('123', '111', '888   ')], [true]],
1743   [[range('123', '111    ', '888   ')], [true]],
1744   [[range('00', '01', '08', '10', '18')], [false]],
1745   [[range('01', '01', '08', '10', '18')], [true]],
1746   [[range('06', '01', '08', '10', '18')], [true]],
1747   [[range('08', '01', '08', '10', '18')], [true]],
1748   [[range('09', '01', '08', '10', '18')], [false]],
1749   [[range('10', '01', '08', '10', '18')], [true]],
1750   [[range('15', '01', '08', '10', '18')], [true]],
1751   [[range('18', '01', '08', '10', '18')], [true]],
1752   [[range('19', '01', '08', '10', '18')], [false]],
1753   [[range('1')], [error],
1754    [error: DEBUG EVALUATE: Function invocation range(string) does not match any known function.  Candidates are:
1755 RANGE(number, number, number[, number, number]...)
1756 RANGE(string, string, string[, string, string]...).]],
1757   [[range('1', '2')], [error],
1758    [error: DEBUG EVALUATE: RANGE(string, string, string[, string, string]...) must have an odd number of arguments.]],
1759   [[range('1', '2', '3', '4')], [error],
1760    [error: DEBUG EVALUATE: RANGE(string, string, string[, string, string]...) must have an odd number of arguments.]],
1761   [[range('1', '2', '3', '4', '5', '6')], [error],
1762    [error: DEBUG EVALUATE: RANGE(string, string, string[, string, string]...) must have an odd number of arguments.]],
1763   [[range(1, '2', '3')], [error],
1764    [error: DEBUG EVALUATE: Function invocation range(number, string, string) does not match any known function.  Candidates are:
1765 RANGE(number, number, number[, number, number]...)
1766 RANGE(string, string, string[, string, string]...).]],
1767   [[range('1', 2, '3')], [error],
1768    [error: DEBUG EVALUATE: Function invocation range(string, number, string) does not match any known function.  Candidates are:
1769 RANGE(number, number, number[, number, number]...)
1770 RANGE(string, string, string[, string, string]...).]],
1771   [[range('1', '2', 3)], [error],
1772    [error: DEBUG EVALUATE: Function invocation range(string, string, number) does not match any known function.  Candidates are:
1773 RANGE(number, number, number[, number, number]...)
1774 RANGE(string, string, string[, string, string]...).]],
1775
1776   [[max(1, 2, 3, 4, 5)], [5.00]],
1777   [[max(1, $sysmis, 2, 3, $sysmis, 4, 5)], [5.00]],
1778   [[max(1, 2)], [2.00]],
1779   [[max()], [error],
1780    [error: DEBUG EVALUATE: Function invocation max() does not match any known function.  Candidates are:
1781 MAX(number[, number]...)
1782 MAX(string[, string]...).]],
1783   [[max(1)], [1.00]],
1784   [[max(1, $sysmis)], [1.00]],
1785   [[max(1, 2, 3, $sysmis)], [3.00]],
1786   [[max.4(1, 2, 3, $sysmis)], [sysmis]],
1787   [[max.4(1, 2, 3)], [error],
1788    [error: DEBUG EVALUATE: For MAX(number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1789
1790   [[max("2", "3", "5", "1", "4")], ["5"]],
1791   [[max("1", "2")], ["2"]],
1792   [[max("1")], ["1"]],
1793
1794   [[min(1, 2, 3, 4, 5)], [1.00]],
1795   [[min(1, $sysmis, 2, 3, $sysmis, 4, 5)], [1.00]],
1796   [[min(1, 2)], [1.00]],
1797   [[min()], [error],
1798    [error: DEBUG EVALUATE: Function invocation min() does not match any known function.  Candidates are:
1799 MIN(number[, number]...)
1800 MIN(string[, string]...).]],
1801   [[min(1)], [1.00]],
1802   [[min(1, $sysmis)], [1.00]],
1803   [[min(1, 2, 3, $sysmis)], [1.00]],
1804   [[min.4(1, 2, 3, $sysmis)], [sysmis]],
1805   [[min.4(1, 2, 3)], [error],
1806    [error: DEBUG EVALUATE: For MIN(number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1807
1808   [[min("2", "3", "5", "1", "4")], ["1"]],
1809   [[min("1", "2")], ["1"]],
1810   [[min("1")], ["1"]])
1811
1812 CHECK_EXPR_EVAL([cfvar mean median sd sum variance],
1813   [[cfvar(1, 2, 3, 4, 5)], [0.53]],
1814   [[cfvar(1, $sysmis, 2, 3, $sysmis, 4, 5)], [0.53]],
1815   [[cfvar(1, 2)], [0.47]],
1816   [[cfvar(1)], [error],
1817    [error: DEBUG EVALUATE: Type mismatch invoking CFVAR(number, number[, number]...) as cfvar(number).]],
1818   [[cfvar(1, $sysmis)], [sysmis]],
1819   [[cfvar(1, 2, 3, $sysmis)], [0.50]],
1820   [[cfvar.4(1, 2, 3, $sysmis)], [sysmis]],
1821   [[cfvar.4(1, 2, 3)], [error],
1822    [error: DEBUG EVALUATE: For CFVAR(number, number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1823   [[cfvar('x')], [error],
1824    [error: DEBUG EVALUATE: Type mismatch invoking CFVAR(number, number[, number]...) as cfvar(string).]],
1825   [[cfvar('x', 1, 2, 3)], [error],
1826    [error: DEBUG EVALUATE: Type mismatch invoking CFVAR(number, number[, number]...) as cfvar(string, number, number, number).]],
1827
1828   [[mean(1, 2, 3, 4, 5)], [3.00]],
1829   [[mean(1, $sysmis, 2, 3, $sysmis, 4, 5)], [3.00]],
1830   [[mean(1, 2)], [1.50]],
1831   [[mean()], [error],
1832    [error: DEBUG EVALUATE: Type mismatch invoking MEAN(number[, number]...) as mean().]],
1833   [[mean(1)], [1.00]],
1834   [[mean(1, $sysmis)], [1.00]],
1835   [[mean(1, 2, 3, $sysmis)], [2.00]],
1836   [[mean.4(1, 2, 3, $sysmis)], [sysmis]],
1837   [[mean.4(1, 2, 3)], [error],
1838    [error: DEBUG EVALUATE: For MEAN(number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1839
1840   [[median(1, 2, 3, 4, 5)], [3.00]],
1841   [[median(2, 3, 4, 5, 1)], [3.00]],
1842   [[median(2, 3, 4, 1, 5)], [3.00]],
1843   [[median(2, 1, 4, 5, 3)], [3.00]],
1844   [[median(1, 2, 3, 4)], [2.50]],
1845   [[median(2, 3, 1, 4)], [2.50]],
1846   [[median(2, 3, 4, 1)], [2.50]],
1847   [[median(2, 1, 4, 3)], [2.50]],
1848   [[median(1, $sysmis, 3, 4, 5)], [3.50]],
1849   [[median(2, 3, 4, 5, $sysmis, 1)], [3.00]],
1850   [[median($sysmis, $sysmis, $sysmis, 2, 3, 4, 1, 5)], [3.00]],
1851   [[median(1, 2, 3)], [2.00]],
1852   [[median(1)], [1.00]],
1853   [[median(1, 2)], [1.50]],
1854   [[median(1, 2, $sysmis)], [1.50]],
1855   [[median(1, $sysmis, $sysmis)], [1.00]],
1856   [[median($sysmis, $sysmis, $sysmis)], [sysmis]],
1857   [[median.3(1, 2, $sysmis)], [sysmis]],
1858   [[median.2(1, $sysmis)], [sysmis]],
1859
1860   [[sd(1, 2, 3, 4, 5)], [1.58]],
1861   [[sd(1, $sysmis, 2, 3, $sysmis, 4, 5)], [1.58]],
1862   [[sd(1, 2)], [0.71]],
1863   [[sd(1)], [error],
1864    [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(number).]],
1865   [[sd(1, $sysmis)], [sysmis]],
1866   [[sd(1, 2, 3, $sysmis)], [1.00]],
1867   [[sd.4(1, 2, 3, $sysmis)], [sysmis]],
1868   [[sd.4(1, 2, 3)], [error],
1869    [error: DEBUG EVALUATE: For SD(number, number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1870   [[sd('x')], [error],
1871    [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(string).]],
1872   [[sd('x', 1, 2, 3)], [error],
1873    [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(string, number, number, number).]],
1874
1875   [[sum(1, 2, 3, 4, 5)], [15.00]],
1876   [[sum(1, $sysmis, 2, 3, $sysmis, 4, 5)], [15.00]],
1877   [[sum(1, 2)], [3.00]],
1878   [[sum()], [error],
1879    [error: DEBUG EVALUATE: Type mismatch invoking SUM(number[, number]...) as sum().]],
1880   [[sum(1)], [1.00]],
1881   [[sum(1, $sysmis)], [1.00]],
1882   [[sum(1, 2, 3, $sysmis)], [6.00]],
1883   [[sum.4(1, 2, 3, $sysmis)], [sysmis]],
1884   [[sum.4(1, 2, 3)], [error],
1885    [error: DEBUG EVALUATE: For SUM(number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1886
1887   [[variance(1, 2, 3, 4, 5)], [2.50]],
1888   [[variance(1, $sysmis, 2, 3, $sysmis, 4, 5)], [2.50]],
1889   [[variance(1, 2)], [0.50]],
1890   [[variance(1)], [error],
1891    [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(number).]],
1892   [[variance(1, $sysmis)], [sysmis]],
1893   [[variance(1, 2, 3, $sysmis)], [1.00]],
1894   [[variance.4(1, 2, 3, $sysmis)], [sysmis]],
1895   [[variance.4(1, 2, 3)], [error],
1896    [error: DEBUG EVALUATE: For VARIANCE(number, number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1897   [[variance('x')], [error],
1898    [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(string).]],
1899   [[variance('x', 1, 2, 3)], [error],
1900    [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(string, number, number, number).]])
1901
1902 CHECK_EXPR_EVAL([concat index rindex length lower],
1903   [[concat('')], [""]],
1904   [[concat('a', 'b')], ["ab"]],
1905   [[concat('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')], ["abcdefgh"]],
1906   [[concat('abcdefgh', 'ijklmnopq')], ["abcdefghijklmnopq"]],
1907   [[concat('a', 1)], [error],
1908    [error: DEBUG EVALUATE: Type mismatch invoking CONCAT(string[, string]...) as concat(string, number).]],
1909   [[concat(1, 2)], [error],
1910    [error: DEBUG EVALUATE: Type mismatch invoking CONCAT(string[, string]...) as concat(number, number).]],
1911
1912   [[index('abcbcde', 'bc')], [2.00]],
1913   [[index('abcbcde', 'bcd')], [4.00]],
1914   [[index('abcbcde', 'bcbc')], [2.00]],
1915   [[index('abcdefgh', 'abc')], [1.00]],
1916   [[index('abcdefgh', 'bcd')], [2.00]],
1917   [[index('abcdefgh', 'cde')], [3.00]],
1918   [[index('abcdefgh', 'def')], [4.00]],
1919   [[index('abcdefgh', 'efg')], [5.00]],
1920   [[index('abcdefgh', 'fgh')], [6.00]],
1921   [[index('abcdefgh', 'fghi')], [0.00]],
1922   [[index('abcdefgh', 'x')], [0.00]],
1923   [[index('abcdefgh', 'abch')], [0.00]],
1924   [[index('banana', 'na')], [3.00]],
1925   [[index('banana', 'ana')], [2.00]],
1926   [[index('', 'x')], [0.00]],
1927   [[index('', '')], [sysmis]],
1928   [[index('abcdefgh', '')], [sysmis]],
1929   [[index('abcdefgh', 'alkjsfdjlskalkjfa')], [0.00]],
1930
1931   [[index('abcbcde', 'bc', 1)], [2.00]],
1932   [[index('abcbcde', 'dc', 1)], [3.00]],
1933   [[index('abcbcde', 'abc', 1)], [1.00]],
1934   [[index('abcbcde', 'bc', 2)], [2.00]],
1935   [[index('abcbcde', 'dc', 2)], [0.00]],
1936   [[index('abcbcde', 'abc', 1)], [1.00]],
1937   [[index('abcbcde', 'bccb', 2)], [2.00]],
1938   [[index('abcbcde', 'bcbc', 2)], [2.00]],
1939   [[index('abcbcde', 'bcbc', $sysmis)], [sysmis]],
1940
1941   [[rindex('abcbcde', 'bc')], [4.00]],
1942   [[rindex('abcbcde', 'bcd')], [4.00]],
1943   [[rindex('abcbcde', 'bcbc')], [2.00]],
1944   [[rindex('abcdefgh', 'abc')], [1.00]],
1945   [[rindex('abcdefgh', 'bcd')], [2.00]],
1946   [[rindex('abcdefgh', 'cde')], [3.00]],
1947   [[rindex('abcdefgh', 'def')], [4.00]],
1948   [[rindex('abcdefgh', 'efg')], [5.00]],
1949   [[rindex('abcdefgh', 'fgh')], [6.00]],
1950   [[rindex('abcdefgh', 'fghi')], [0.00]],
1951   [[rindex('abcdefgh', 'x')], [0.00]],
1952   [[rindex('abcdefgh', 'abch')], [0.00]],
1953   [[rindex('banana', 'na')], [5.00]],
1954   [[rindex('banana', 'ana')], [4.00]],
1955   [[rindex('', 'x')], [0.00]],
1956   [[rindex('', '')], [sysmis]],
1957   [[rindex('abcdefgh', '')], [sysmis]],
1958   [[rindex('abcdefgh', 'alkjsfdjlskalkjfa')], [0.00]],
1959
1960   [[rindex('abcbcde', 'bc', 1)], [5.00]],
1961   [[rindex('abcbcde', 'dc', 1)], [6.00]],
1962   [[rindex('abcbcde', 'abc', 1)], [5.00]],
1963   [[rindex('abcbcde', 'bc', 2)], [4.00]],
1964   [[rindex('abcbcde', 'dc', 2)], [0.00]],
1965   [[rindex('abcbcde', 'abc', 1)], [5.00]],
1966   [[rindex('abcbcde', 'bccb', 2)], [4.00]],
1967   [[rindex('abcbcde', 'bcbc', 2)], [4.00]],
1968   [[rindex('abcbcde', 'bcbc', 0)], [sysmis]],
1969   [[rindex('abcbcde', 'bcbc', $sysmis)], [sysmis]],
1970   [[rindex('abcbcde', 'bcbcg', 2)], [sysmis]],
1971   [[rindex('abcbcde', 'bcbcg', $sysmis)], [sysmis]],
1972   [[rindex('abcbcde', 'bcbcg', 'x')], [error],
1973    [error: DEBUG EVALUATE: Function invocation rindex(string, string, string) does not match any known function.  Candidates are:
1974 RINDEX(string, string)
1975 RINDEX(string, string, number).]],
1976   [[rindex(1, 'bcdfkjl', 2)], [error],
1977    [error: DEBUG EVALUATE: Function invocation rindex(number, string, number) does not match any known function.  Candidates are:
1978 RINDEX(string, string)
1979 RINDEX(string, string, number).]],
1980   [[rindex('aksj', 2, 2)], [error],
1981    [error: DEBUG EVALUATE: Function invocation rindex(string, number, number) does not match any known function.  Candidates are:
1982 RINDEX(string, string)
1983 RINDEX(string, string, number).]],
1984   [[rindex(1, 2, 3)], [error],
1985    [error: DEBUG EVALUATE: Function invocation rindex(number, number, number) does not match any known function.  Candidates are:
1986 RINDEX(string, string)
1987 RINDEX(string, string, number).]],
1988   [[rindex(1, 2, '3')], [error],
1989    [error: DEBUG EVALUATE: Function invocation rindex(number, number, string) does not match any known function.  Candidates are:
1990 RINDEX(string, string)
1991 RINDEX(string, string, number).]],
1992
1993   [[length('')], [0.00]],
1994   [[length('a')], [1.00]],
1995   [[length('xy')], [2.00]],
1996   [[length('adsf    ')], [8.00]],
1997   [[length('abcdefghijkl')], [12.00]],
1998   [[length(0)], [error],
1999    [error: DEBUG EVALUATE: Type mismatch invoking LENGTH(string) as length(number).]],
2000   [[length($sysmis)], [error],
2001    [error: DEBUG EVALUATE: Type mismatch invoking LENGTH(string) as length(number).]],
2002
2003   [[lower('ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089')], ["abcdefghijklmnopqrstuvwxyz!@%&*089"]],
2004   [[lower('')], [""]],
2005   [[lower(1)], [error],
2006    [error: DEBUG EVALUATE: Type mismatch invoking LOWER(string) as lower(number).]])
2007
2008 CHECK_EXPR_EVAL([replace],
2009   [[replace('banana', 'an', 'AN')], ["bANANa"]],
2010   [[replace('banana', 'an', 'a')], ["baaa"]],
2011   [[replace('banana', 'an', '')], ["ba"]],
2012   [[replace('banana', 'na', '')], ["ba"]],
2013   [[replace('banana', 'ba', 'BA')], ["BAnana"]],
2014   [[replace('banana', 'na', 'xyzzy')], ["baxyzzyxyzzy"]],
2015   [[replace('banana', 'an', 'xyzzy', 1)], ["bxyzzyana"]],
2016   [[replace('banana', 'an', 'xyzzy', 1.5)], ["bxyzzyana"]],
2017   [[replace('banana', 'bananana', 'xyzzy')], ["banana"]],
2018   [[replace('banana', '', 'xyzzy')], ["banana"]],
2019   [[replace('banana', 'ba', '', 0)], ["banana"]],
2020   [[replace('banana', 'ba', '', -1)], ["banana"]],
2021   [[replace('banana', 'ba', '', $sysmis)], ["banana"]])
2022
2023 CHECK_EXPR_EVAL([lpad number ltrim lpad rtrim rpad string strunc substr upcase],
2024   [[lpad('abc', -1)], [""]],
2025   [[lpad('abc', 0)], ["abc"]],
2026   [[lpad('abc', 2)], ["abc"]],
2027   [[lpad('abc', 3)], ["abc"]],
2028   [[lpad('abc', 10)], ["       abc"]],
2029   [[lpad('abc', 32768)], [""]],
2030   [[lpad('abc', $sysmis)], [""]],
2031   [[lpad('abc', -1, '*')], [""]],
2032   [[lpad('abc', 0, '*')], ["abc"]],
2033   [[lpad('abc', 2, '*')], ["abc"]],
2034   [[lpad('abc', 3, '*')], ["abc"]],
2035   [[lpad('abc', 10, '*')], ["*******abc"]],
2036   [[lpad('abc', 32768, '*')], [""]],
2037   [[lpad('abc', $sysmis, '*')], [""]],
2038   [[lpad('abc', $sysmis, '')], [""]],
2039   [[lpad('abc', $sysmis, 'xy')], [""]],
2040   [[lpad(0, 10)], [error],
2041    [error: DEBUG EVALUATE: Function invocation lpad(number, number) does not match any known function.  Candidates are:
2042 LPAD(string, number)
2043 LPAD(string, number, string).]],
2044   [[lpad('abc', 'def')], [error],
2045    [error: DEBUG EVALUATE: Function invocation lpad(string, string) does not match any known function.  Candidates are:
2046 LPAD(string, number)
2047 LPAD(string, number, string).]],
2048   [[lpad(0, 10, ' ')], [error],
2049    [error: DEBUG EVALUATE: Function invocation lpad(number, number, string) does not match any known function.  Candidates are:
2050 LPAD(string, number)
2051 LPAD(string, number, string).]],
2052   [[lpad('abc', 'def', ' ')], [error],
2053    [error: DEBUG EVALUATE: Function invocation lpad(string, string, string) does not match any known function.  Candidates are:
2054 LPAD(string, number)
2055 LPAD(string, number, string).]],
2056   [[lpad('x', 5, 0)], [error],
2057    [error: DEBUG EVALUATE: Function invocation lpad(string, number, number) does not match any known function.  Candidates are:
2058 LPAD(string, number)
2059 LPAD(string, number, string).]],
2060   [[lpad('x', 5, 2)], [error],
2061    [error: DEBUG EVALUATE: Function invocation lpad(string, number, number) does not match any known function.  Candidates are:
2062 LPAD(string, number)
2063 LPAD(string, number, string).]],
2064
2065   [[number("123", f3.0)], [123.00]],
2066   [[number(" 123", f3.0)], [12.00]],
2067   [[number("123", f3.1)], [12.30]],
2068   [[number("   ", f3.1)], [sysmis]],
2069   [[number("123", a8)], [error],
2070    [error: DEBUG EVALUATE: Type mismatch invoking NUMBER(string, num_input_format) as number(string, format).]],
2071 dnl CCA is not an input format:
2072   [[number("123", cca1.2)], [error],
2073    [error: DEBUG EVALUATE: Type mismatch invoking NUMBER(string, num_input_format) as number(string, format).]],
2074
2075   [[ltrim('   abc')], ["abc"]],
2076   [[rtrim('   abc   ')], ["   abc"]],
2077   [[ltrim('abc')], ["abc"]],
2078   [[ltrim('     abc')], ["      abc"]],
2079   [[ltrim('    ')], [""]],
2080   [[ltrim('')], [""]],
2081   [[ltrim(8)], [error],
2082    [error: DEBUG EVALUATE: Function invocation ltrim(number) does not match any known function.  Candidates are:
2083 LTRIM(string)
2084 LTRIM(string, string).]],
2085   [[ltrim('***abc', '*')], ["abc"]],
2086   [[ltrim('abc', '*')], ["abc"]],
2087   [[ltrim('*abc', '*')], ["abc"]],
2088   [[ltrim('', '*')], [""]],
2089   [[ltrim(8, '*')], [error],
2090    [error: DEBUG EVALUATE: Function invocation ltrim(number, string) does not match any known function.  Candidates are:
2091 LTRIM(string)
2092 LTRIM(string, string).]],
2093   [[ltrim(' x', 8)], [error],
2094    [error: DEBUG EVALUATE: Function invocation ltrim(string, number) does not match any known function.  Candidates are:
2095 LTRIM(string)
2096 LTRIM(string, string).]],
2097   [[ltrim(8, 9)], [error],
2098    [error: DEBUG EVALUATE: Function invocation ltrim(number, number) does not match any known function.  Candidates are:
2099 LTRIM(string)
2100 LTRIM(string, string).]],
2101
2102   [[rpad('abc', -1)], [""]],
2103   [[rpad('abc', 0)], ["abc"]],
2104   [[rpad('abc', 2)], ["abc"]],
2105   [[rpad('abc', 3)], ["abc"]],
2106   [[rpad('abc', 10)], ["abc       "]],
2107   [[rpad('abc', 32768)], [""]],
2108   [[rpad('abc', $sysmis)], [""]],
2109   [[rpad('abc', -1, '*')], [""]],
2110   [[rpad('abc', 0, '*')], ["abc"]],
2111   [[rpad('abc', 2, '*')], ["abc"]],
2112   [[rpad('abc', 3, '*')], ["abc"]],
2113   [[rpad('abc', 10, '*')], ["abc*******"]],
2114   [[rpad('abc', 32768, '*')], [""]],
2115   [[rpad('abc', $sysmis, '*')], [""]],
2116   [[rpad('abc', $sysmis, '')], [""]],
2117   [[rpad('abc', $sysmis, 'xy')], [""]],
2118   [[rpad(0, 10)], [error],
2119    [error: DEBUG EVALUATE: Function invocation rpad(number, number) does not match any known function.  Candidates are:
2120 RPAD(string, number)
2121 RPAD(string, number, string).]],
2122   [[rpad('abc', 'def')], [error],
2123    [error: DEBUG EVALUATE: Function invocation rpad(string, string) does not match any known function.  Candidates are:
2124 RPAD(string, number)
2125 RPAD(string, number, string).]],
2126   [[rpad(0, 10, ' ')], [error],
2127    [error: DEBUG EVALUATE: Function invocation rpad(number, number, string) does not match any known function.  Candidates are:
2128 RPAD(string, number)
2129 RPAD(string, number, string).]],
2130   [[rpad('abc', 'def', ' ')], [error],
2131    [error: DEBUG EVALUATE: Function invocation rpad(string, string, string) does not match any known function.  Candidates are:
2132 RPAD(string, number)
2133 RPAD(string, number, string).]],
2134   [[rpad('x', 5, 0)], [error],
2135    [error: DEBUG EVALUATE: Function invocation rpad(string, number, number) does not match any known function.  Candidates are:
2136 RPAD(string, number)
2137 RPAD(string, number, string).]],
2138   [[rpad('x', 5, 2)], [error],
2139    [error: DEBUG EVALUATE: Function invocation rpad(string, number, number) does not match any known function.  Candidates are:
2140 RPAD(string, number)
2141 RPAD(string, number, string).]],
2142
2143   [[rtrim('abc   ')], ["abc"]],
2144   [[rtrim('   abc   ')], ["   abc"]],
2145   [[rtrim('abc')], ["abc"]],
2146   [[rtrim('abc  ')], ["abc      "]],
2147   [[rtrim('    ')], [""]],
2148   [[rtrim('')], [""]],
2149   [[rtrim(8)], [error],
2150    [error: DEBUG EVALUATE: Function invocation rtrim(number) does not match any known function.  Candidates are:
2151 RTRIM(string)
2152 RTRIM(string, string).]],
2153   [[rtrim('abc***', '*')], ["abc"]],
2154   [[rtrim('abc', '*')], ["abc"]],
2155   [[rtrim('abc*', '*')], ["abc"]],
2156   [[rtrim('', '*')], [""]],
2157   [[rtrim(8, '*')], [error],
2158    [error: DEBUG EVALUATE: Function invocation rtrim(number, string) does not match any known function.  Candidates are:
2159 RTRIM(string)
2160 RTRIM(string, string).]],
2161   [[rtrim(' x', 8)], [error],
2162    [error: DEBUG EVALUATE: Function invocation rtrim(string, number) does not match any known function.  Candidates are:
2163 RTRIM(string)
2164 RTRIM(string, string).]],
2165   [[rtrim(8, 9)], [error],
2166    [error: DEBUG EVALUATE: Function invocation rtrim(number, number) does not match any known function.  Candidates are:
2167 RTRIM(string)
2168 RTRIM(string, string).]],
2169
2170   [[string(123.56, f5.1)], ["123.6"]],
2171   [[string($sysmis, f5.1)], ["   . "]],
2172   [[string("abc", A5)], [error],
2173    [error: DEBUG EVALUATE: Type mismatch invoking STRING(number, num_output_format) as string(string, format).]],
2174 dnl E has a minimum width of 6 on output:
2175   [[string(123, e1)], [error],
2176    [error: DEBUG EVALUATE: Type mismatch invoking STRING(number, num_output_format) as string(number, format).]],
2177   [[string(123, e6.0)], ["1E+002"]],
2178
2179   [[strunc('a c   ', 9)], ["a c"]],
2180   [[strunc('a c   ', 7)], ["a c"]],
2181   [[strunc('a c   ', 6)], ["a c"]],
2182   [[strunc('a c   ', 5)], ["a c"]],
2183   [[strunc('a c   ', 4)], ["a c"]],
2184   [[strunc('a c   ', 3)], ["a c"]],
2185   [[strunc('a c   ', 2)], ["a"]],
2186   [[strunc('a c   ', 1)], ["a"]],
2187   [[strunc('a c   ', 0)], [""]],
2188   [[strunc('a c   ', -1)], [""]],
2189   [[strunc('a c   ', $sysmis)], [""]],
2190   [[strunc('  abc  ', 9)], ["  abc"]],
2191   [[strunc('  abc  ', 8)], ["  abc"]],
2192   [[strunc('  abc  ', 7)], ["  abc"]],
2193   [[strunc('  abc  ', 6)], ["  abc"]],
2194   [[strunc('  abc  ', 5)], ["  abc"]],
2195   [[strunc('  abc  ', 4)], ["  ab"]],
2196   [[strunc('  abc  ', 3)], ["  a"]],
2197   [[strunc('  abc  ', 2)], [""]],
2198   [[strunc('  abc  ', 1)], [""]],
2199   [[strunc('  abc  ', -1)], [""]],
2200   [[strunc('  abc  ', $sysmis)], [""]],
2201
2202   [[substr('abcdefgh', -5)], [""]],
2203   [[substr('abcdefgh', 0)], [""]],
2204   [[substr('abcdefgh', 1)], ["abcdefgh"]],
2205   [[substr('abcdefgh', 3)], ["cdefgh"]],
2206   [[substr('abcdefgh', 5)], ["efgh"]],
2207   [[substr('abcdefgh', 6)], ["fgh"]],
2208   [[substr('abcdefgh', 7)], ["gh"]],
2209   [[substr('abcdefgh', 8)], ["h"]],
2210   [[substr('abcdefgh', 9)], [""]],
2211   [[substr('abcdefgh', 10)], [""]],
2212   [[substr('abcdefgh', 20)], [""]],
2213   [[substr('abcdefgh', $sysmis)], [""]],
2214   [[substr(0, 10)], [error],
2215    [error: DEBUG EVALUATE: Function invocation substr(number, number) does not match any known function.  Candidates are:
2216 SUBSTR(string, number)
2217 SUBSTR(string, number, number).]],
2218   [[substr('abcd', 'abc')], [error],
2219    [error: DEBUG EVALUATE: Function invocation substr(string, string) does not match any known function.  Candidates are:
2220 SUBSTR(string, number)
2221 SUBSTR(string, number, number).]],
2222   [[substr(0, 'abc')], [error],
2223    [error: DEBUG EVALUATE: Function invocation substr(number, string) does not match any known function.  Candidates are:
2224 SUBSTR(string, number)
2225 SUBSTR(string, number, number).]],
2226
2227   [[substr('abcdefgh', 0, 0)], [""]],
2228   [[substr('abcdefgh', 3, 0)], [""]],
2229   [[substr('abcdefgh', 5, 0)], [""]],
2230   [[substr('abcdefgh', 9, 0)], [""]],
2231   [[substr('abcdefgh', 0, 1)], [""]],
2232   [[substr('abcdefgh', 0, 5)], [""]],
2233   [[substr('abcdefgh', 1, 8)], ["abcdefgh"]],
2234   [[substr('abcdefgh', 1, 10)], ["abcdefgh"]],
2235   [[substr('abcdefgh', 1, 20)], ["abcdefgh"]],
2236   [[substr('abcdefgh', 3, 4)], ["cdef"]],
2237   [[substr('abcdefgh', 5, 2)], ["ef"]],
2238   [[substr('abcdefgh', 6, 1)], ["f"]],
2239   [[substr('abcdefgh', 7, 10)], ["gh"]],
2240   [[substr('abcdefgh', 8, 1)], ["h"]],
2241   [[substr('abcdefgh', 8, 2)], ["h"]],
2242   [[substr('abcdefgh', 9, 11)], [""]],
2243   [[substr('abcdefgh', 10, 52)], [""]],
2244   [[substr('abcdefgh', 20, 1)], [""]],
2245   [[substr('abcdefgh', $sysmis, 2)], [""]],
2246   [[substr('abcdefgh', 9, $sysmis)], [""]],
2247   [[substr('abcdefgh', $sysmis, $sysmis)], [""]],
2248   [[substr('abc', 1, 'x')], [error],
2249    [error: DEBUG EVALUATE: Function invocation substr(string, number, string) does not match any known function.  Candidates are:
2250 SUBSTR(string, number)
2251 SUBSTR(string, number, number).]],
2252   [[substr(0, 10, 1)], [error],
2253    [error: DEBUG EVALUATE: Function invocation substr(number, number, number) does not match any known function.  Candidates are:
2254 SUBSTR(string, number)
2255 SUBSTR(string, number, number).]],
2256   [[substr(0, 10, 'x')], [error],
2257    [error: DEBUG EVALUATE: Function invocation substr(number, number, string) does not match any known function.  Candidates are:
2258 SUBSTR(string, number)
2259 SUBSTR(string, number, number).]],
2260   [[substr('abcd', 'abc', 0)], [error],
2261    [error: DEBUG EVALUATE: Function invocation substr(string, string, number) does not match any known function.  Candidates are:
2262 SUBSTR(string, number)
2263 SUBSTR(string, number, number).]],
2264   [[substr('abcd', 'abc', 'j')], [error],
2265    [error: DEBUG EVALUATE: Function invocation substr(string, string, string) does not match any known function.  Candidates are:
2266 SUBSTR(string, number)
2267 SUBSTR(string, number, number).]],
2268   [[substr(0, 'abc', 4)], [error],
2269    [error: DEBUG EVALUATE: Function invocation substr(number, string, number) does not match any known function.  Candidates are:
2270 SUBSTR(string, number)
2271 SUBSTR(string, number, number).]],
2272   [[substr(0, 'abc', 'k')], [error],
2273    [error: DEBUG EVALUATE: Function invocation substr(number, string, string) does not match any known function.  Candidates are:
2274 SUBSTR(string, number)
2275 SUBSTR(string, number, number).]],
2276
2277   [[upcase('abcdefghijklmnopqrstuvwxyz!@%&*089')], ["ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089"]],
2278   [[upcase('')], [""]],
2279   [[upcase(1)], [error],
2280    [error: DEBUG EVALUATE: Type mismatch invoking UPCASE(string) as upcase(number).]])
2281
2282 CHECK_EXPR_EVAL([time ctime date yrmoda],
2283   [[time.days(1)], [86400.00]],
2284   [[time.days(-1)], [-86400.00]],
2285   [[time.days(0.5)], [43200.00]],
2286   [[time.days('x')], [error],
2287    [error: DEBUG EVALUATE: Type mismatch invoking TIME.DAYS(number) as time.days(string).]],
2288   [[time.days($sysmis)], [sysmis]],
2289
2290   [[time.hms(4,50,38)], [17438.00]],
2291   [[time.hms(12,31,35)], [45095.00]],
2292   [[time.hms(12,47,53)], [46073.00]],
2293   [[time.hms(1,26,0)], [5160.00]],
2294   [[time.hms(20,58,11)], [75491.00]],
2295   [[time.hms(7,36,5)], [27365.00]],
2296   [[time.hms(15,43,49)], [56629.00]],
2297   [[time.hms(4,25,9)], [15909.00]],
2298   [[time.hms(6,49,27)], [24567.00]],
2299   [[time.hms(2,57,52)], [10672.00]],
2300   [[time.hms(16,45,44)], [60344.00]],
2301   [[time.hms(21,30,57)], [77457.00]],
2302   [[time.hms(22,30,4)], [81004.00]],
2303   [[time.hms(1,56,51)], [7011.00]],
2304   [[time.hms(5, 6, 7)], [18367.00]],
2305   [[time.hms(5, 6, 0)], [18360.00]],
2306   [[time.hms(5, 0, 7)], [18007.00]],
2307   [[time.hms(0, 6, 7)], [367.00]],
2308   [[time.hms(-5, 6, -7)], [sysmis],
2309    [warning: DEBUG EVALUATE: TIME.HMS cannot mix positive and negative arguments.]],
2310   [[time.hms(-5, 5, -7)], [sysmis],
2311    [warning: DEBUG EVALUATE: TIME.HMS cannot mix positive and negative arguments.]],
2312   [[time.hms($sysmis, 6, 7)], [sysmis]],
2313   [[time.hms(5, $sysmis, 7)], [sysmis]],
2314   [[time.hms(5, $sysmis, 7)], [sysmis]],
2315   [[time.hms($sysmis, $sysmis, 7)], [sysmis]],
2316   [[time.hms(5, $sysmis, $sysmis)], [sysmis]],
2317   [[time.hms($sysmis, $sysmis, 7)], [sysmis]],
2318   [[time.hms($sysmis, $sysmis, $sysmis)], [sysmis]],
2319
2320   [[ctime.days(106272)], [1.23]],
2321   [[ctime.hours(106272)], [29.52]],
2322   [[ctime.minutes(106272)], [1771.20]],
2323   [[ctime.seconds(106272)], [106272.00]],
2324   [[ctime.days(-106272)], [-1.23]],
2325   [[ctime.hours(-106272)], [-29.52]],
2326   [[ctime.minutes(-106272)], [-1771.20]],
2327   [[ctime.seconds(-106272)], [-106272.00]],
2328   [[ctime.days($sysmis)], [sysmis]],
2329   [[ctime.hours($sysmis)], [sysmis]],
2330   [[ctime.minutes($sysmis)], [sysmis]],
2331   [[ctime.seconds($sysmis)], [sysmis]],
2332   [[ctime.days('a')], [error],
2333    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.DAYS(number) as ctime.days(string).]],
2334   [[ctime.hours('b')], [error],
2335    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.HOURS(number) as ctime.hours(string).]],
2336   [[ctime.minutes('c')], [error],
2337    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.MINUTES(number) as ctime.minutes(string).]],
2338   [[ctime.seconds('d')], [error],
2339    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.SECONDS(number) as ctime.seconds(string).]],
2340
2341   [[ctime.days(date.dmy(15,10,1582))], [1.00]],
2342   [[ctime.days(date.dmy(6,9,1719))], [50000.00]],
2343   [[ctime.days(date.dmy(24,1,1583))], [102.00]],
2344   [[ctime.days(date.dmy(14,12,1585))], [1157.00]],
2345   [[ctime.days(date.dmy(26,11,1621))], [14288.00]],
2346   [[ctime.days(date.dmy(25,12,1821))], [87365.00]],
2347   [[ctime.days(date.dmy(3,12,1882))], [109623.00]],
2348   [[ctime.days(date.dmy(6,4,2002))], [153211.00]],
2349   [[ctime.days(date.dmy(19,12,1999))], [152372.00]],
2350   [[ctime.days(date.dmy(1,10,1978))], [144623.00]],
2351   [[ctime.days(date.dmy(0,10,1978))], [144622.00]],
2352   [[ctime.days(date.dmy(32,10,1978))], [sysmis],
2353    [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
2354   [[ctime.days(date.dmy(31,0,1978))], [144349.00]],
2355   [[ctime.days(date.dmy(31,13,1978))], [144745.00]],
2356   [[ctime.days(date.dmy($sysmis,10,1978))], [sysmis]],
2357   [[ctime.days(date.dmy(31,$sysmis,1978))], [sysmis]],
2358   [[ctime.days(date.dmy(31,10,$sysmis))], [sysmis]],
2359   [[ctime.days(date.dmy($sysmis,$sysmis,1978))], [sysmis]],
2360   [[ctime.days(date.dmy(31,$sysmis,$sysmis))], [sysmis]],
2361   [[ctime.days(date.dmy($sysmis,10,$sysmis))], [sysmis]],
2362   [[ctime.days(date.dmy($sysmis,$sysmis,$sysmis))], [sysmis]],
2363   [[date.dmy('a',1,2)], [error],
2364    [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(string, number, number).]],
2365   [[date.dmy(1,'a',2)], [error],
2366    [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(number, string, number).]],
2367   [[date.dmy(1,2,'a')], [error],
2368    [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(number, number, string).]],
2369 dnl FIXME: check out-of-range and nearly out-of-range values
2370 dnl
2371   [[yrmoda(1582,10,15)], [1.00]],
2372   [[yrmoda(1719,9,6)], [50000.00]],
2373   [[yrmoda(1583,1,24)], [102.00]],
2374   [[yrmoda(1585,12,14)], [1157.00]],
2375   [[yrmoda(1621,11,26)], [14288.00]],
2376   [[yrmoda(1821,12,25)], [87365.00]],
2377   [[yrmoda(1882,12,3)], [109623.00]],
2378   [[yrmoda(2002,4,6)], [153211.00]],
2379   [[yrmoda(1999,12,19)], [152372.00]],
2380   [[yrmoda(1978,10,1)], [144623.00]],
2381   [[yrmoda(1978,10,0)], [144622.00]],
2382   [[yrmoda(1978,10,32)], [sysmis],
2383    [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
2384   [[yrmoda(1978,0,31)], [144349.00]],
2385   [[yrmoda(1978,13,31)], [144745.00]],
2386   [[yrmoda(1978,10,$sysmis)], [sysmis]],
2387   [[yrmoda(1978,$sysmis,31)], [sysmis]],
2388   [[yrmoda($sysmis,10,31)], [sysmis]],
2389   [[yrmoda(1978,$sysmis,$sysmis)], [sysmis]],
2390   [[yrmoda($sysmis,$sysmis,31)], [sysmis]],
2391   [[yrmoda($sysmis,10,$sysmis)], [sysmis]],
2392   [[yrmoda($sysmis,$sysmis,$sysmis)], [sysmis]],
2393   [[yrmoda('a',1,2)], [error],
2394    [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(string, number, number).]],
2395   [[yrmoda(1,'a',2)], [error],
2396    [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(number, string, number).]],
2397   [[yrmoda(1,2,'a')], [error],
2398    [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(number, number, string).]],
2399 dnl FIXME: check out-of-range and nearly out-of-range values
2400 dnl
2401   [[ctime.days(date.mdy(6,10,1648)) + 577735], [601716.00]],
2402   [[ctime.days(date.mdy(6,30,1680)) + 577735], [613424.00]],
2403   [[ctime.days(date.mdy(7,24,1716)) + 577735], [626596.00]],
2404   [[ctime.days(date.mdy(6,19,1768)) + 577735], [645554.00]],
2405   [[ctime.days(date.mdy(8,2,1819)) + 577735], [664224.00]],
2406   [[ctime.days(date.mdy(3,27,1839)) + 577735], [671401.00]],
2407   [[ctime.days(date.mdy(4,19,1903)) + 577735], [694799.00]],
2408   [[ctime.days(date.mdy(8,25,1929)) + 577735], [704424.00]],
2409   [[ctime.days(date.mdy(9,29,1941)) + 577735], [708842.00]],
2410   [[ctime.days(date.mdy(4,19,1943)) + 577735], [709409.00]],
2411   [[ctime.days(date.mdy(10,7,1943)) + 577735], [709580.00]],
2412   [[ctime.days(date.mdy(3,17,1992)) + 577735], [727274.00]],
2413   [[ctime.days(date.mdy(2,25,1996)) + 577735], [728714.00]],
2414   [[ctime.days(date.mdy(11,10,2038)) + 577735], [744313.00]],
2415   [[ctime.days(date.mdy(7,18,2094)) + 577735], [764652.00]],
2416 dnl FIXME: check out-of-range and nearly out-of-range values
2417 dnl
2418   [[ctime.days(date.mdy(10,15,1582))], [1.00]],
2419   [[ctime.days(date.mdy(9,6,1719))], [50000.00]],
2420   [[ctime.days(date.mdy(1,24,1583))], [102.00]],
2421   [[ctime.days(date.mdy(12,14,1585))], [1157.00]],
2422   [[ctime.days(date.mdy(11,26,1621))], [14288.00]],
2423   [[ctime.days(date.mdy(12,25,1821))], [87365.00]],
2424   [[ctime.days(date.mdy(12,3,1882))], [109623.00]],
2425   [[ctime.days(date.mdy(4,6,2002))], [153211.00]],
2426   [[ctime.days(date.mdy(12,19,1999))], [152372.00]],
2427   [[ctime.days(date.mdy(10,1,1978))], [144623.00]],
2428   [[ctime.days(date.mdy(10,0,1978))], [144622.00]],
2429   [[ctime.days(date.mdy(10,32,1978))], [sysmis],
2430    [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
2431   [[ctime.days(date.mdy(0,31,1978))], [144349.00]],
2432   [[ctime.days(date.mdy(13,31,1978))], [144745.00]],
2433   [[ctime.days(date.mdy(10,$sysmis,1978))], [sysmis]],
2434   [[ctime.days(date.mdy($sysmis,31,1978))], [sysmis]],
2435   [[ctime.days(date.mdy(10,31,$sysmis))], [sysmis]],
2436   [[ctime.days(date.mdy($sysmis,$sysmis,1978))], [sysmis]],
2437   [[ctime.days(date.mdy($sysmis,31,$sysmis))], [sysmis]],
2438   [[ctime.days(date.mdy(10,$sysmis,$sysmis))], [sysmis]],
2439   [[ctime.days(date.mdy($sysmis,$sysmis,$sysmis))], [sysmis]],
2440   [[date.mdy('a',1,2)], [error],
2441    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(string, number, number).]],
2442   [[date.mdy(1,'a',2)], [error],
2443    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(number, string, number).]],
2444   [[date.mdy(1,2,'a')], [error],
2445    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(number, number, string).]],
2446   [[ctime.days(date.mdy(0,0,0))], [152353.00]],
2447   [[ctime.days(date.mdy(0,0,999))], [sysmis],
2448    [error: DEBUG EVALUATE: Date 0998-12-0 is before the earliest acceptable date of 1582-10-15.]],
2449   [[date.mdy(1,1,1582)], [sysmis],
2450    [error: DEBUG EVALUATE: Date 1582-1-1 is before the earliest acceptable date of 1582-10-15.]],
2451   [[date.mdy(10,14,1582)], [sysmis],
2452    [error: DEBUG EVALUATE: Date 1582-10-14 is before the earliest acceptable date of 1582-10-15.]],
2453   [[date.mdy(10,15,1582)], [86400.00]],
2454
2455   [[ctime.days(date.moyr(1,2000))], [152385.00]],
2456   [[ctime.days(date.moyr(2,2000))], [152416.00]],
2457   [[ctime.days(date.moyr(3,2000))], [152445.00]],
2458   [[ctime.days(date.moyr(4,2000))], [152476.00]],
2459   [[ctime.days(date.moyr(5,2000))], [152506.00]],
2460   [[ctime.days(date.moyr(13,2000))], [152751.00]],
2461   [[ctime.days(date.moyr(14,2000))], [sysmis],
2462    [error: DEBUG EVALUATE: Month 14 is not in acceptable range of 0 to 13.]],
2463   [[ctime.days(date.moyr($sysmis,2000))], [sysmis]],
2464   [[ctime.days(date.moyr(1,$sysmis))], [sysmis]],
2465   [[ctime.days(date.moyr($sysmis,$sysmis))], [sysmis]],
2466   [[date.moyr('a',2000)], [error],
2467    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(string, number).]],
2468   [[date.moyr(5,'a')], [error],
2469    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(number, string).]],
2470   [[date.moyr('a','b')], [error],
2471    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(string, string).]],
2472
2473   [[ctime.days(date.qyr(1,2000))], [152385.00]],
2474   [[ctime.days(date.qyr(2,2000))], [152476.00]],
2475   [[ctime.days(date.qyr(5,2000))], [sysmis],
2476    [warning: DEBUG EVALUATE: The first argument to DATE.QYR must be 1, 2, 3, or 4.]],
2477   [[ctime.days(date.qyr(6,2000))], [sysmis],
2478    [warning: DEBUG EVALUATE: The first argument to DATE.QYR must be 1, 2, 3, or 4.]],
2479   [[ctime.days(date.qyr($sysmis,2000))], [sysmis]],
2480   [[ctime.days(date.qyr(1,$sysmis))], [sysmis]],
2481   [[ctime.days(date.qyr($sysmis,$sysmis))], [sysmis]],
2482   [[date.qyr('a',2000)], [error],
2483    [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(string, number).]],
2484   [[date.qyr(5,'a')], [error],
2485    [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(number, string).]],
2486   [[date.qyr('a','b')], [error],
2487    [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(string, string).]],
2488
2489   [[ctime.days(date.wkyr(1,2000))], [152385.00]],
2490   [[ctime.days(date.wkyr(15,1999))], [152118.00]],
2491   [[ctime.days(date.wkyr(36,1999))], [152265.00]],
2492   [[ctime.days(date.wkyr(54,1999))], [sysmis],
2493    [error: DEBUG EVALUATE: The week argument to DATE.WKYR is outside the acceptable range of 1 to 53.  The result will be system-missing.]],
2494   [[ctime.days(date.wkyr($sysmis,1999))], [sysmis]],
2495   [[ctime.days(date.wkyr(1,$sysmis))], [sysmis]],
2496   [[ctime.days(date.wkyr($sysmis,$sysmis))], [sysmis]],
2497   [[date.wkyr('a',1999)], [error],
2498    [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(string, number).]],
2499   [[date.wkyr(5,'a')], [error],
2500    [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(number, string).]],
2501   [[date.wkyr('a','b')], [error],
2502    [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(string, string).]],
2503
2504   [[ctime.days(date.yrday(2000,1))], [152385.00]],
2505   [[ctime.days(date.yrday(2000,100))], [152484.00]],
2506   [[ctime.days(date.yrday(2000,253))], [152637.00]],
2507   [[ctime.days(date.yrday(2000,500))], [sysmis],
2508    [error: DEBUG EVALUATE: The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  The result will be system-missing.]],
2509   [[ctime.days(date.yrday(2000,-100))], [sysmis],
2510    [error: DEBUG EVALUATE: The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  The result will be system-missing.]],
2511   [[ctime.days(date.yrday(1999,$sysmis))], [sysmis]],
2512   [[ctime.days(date.yrday($sysmis,1))], [sysmis]],
2513   [[ctime.days(date.yrday($sysmis,$sysmis))], [sysmis]],
2514   [[date.yrday(1999,'a')], [error],
2515    [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(number, string).]],
2516   [[date.yrday('a',5)], [error],
2517    [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(string, number).]],
2518   [[date.yrday('a','b')], [error],
2519    [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(string, string).]])
2520
2521 CHECK_EXPR_EVAL([xdate],
2522   [[xdate.date(date.mdy(6,10,1648) + time.hms(0,0,0)) / 86400], [23981.00]],
2523   [[xdate.date(date.mdy(6,30,1680) + time.hms(4,50,38)) / 86400], [35689.00]],
2524   [[xdate.date(date.mdy(7,24,1716) + time.hms(12,31,35)) / 86400], [48861.00]],
2525   [[xdate.date(date.mdy(6,19,1768) + time.hms(12,47,53)) / 86400], [67819.00]],
2526   [[xdate.date(date.mdy(8,2,1819) + time.hms(1,26,0)) / 86400], [86489.00]],
2527   [[xdate.date(date.mdy(3,27,1839) + time.hms(20,58,11)) / 86400], [93666.00]],
2528   [[xdate.date(date.mdy(4,19,1903) + time.hms(7,36,5)) / 86400], [117064.00]],
2529   [[xdate.date(date.mdy(8,25,1929) + time.hms(15,43,49)) / 86400], [126689.00]],
2530   [[xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400], [131107.00]],
2531   [[xdate.date(date.mdy(4,19,1943) + time.hms(6,49,27)) / 86400], [131674.00]],
2532   [[xdate.date(date.mdy(10,7,1943) + time.hms(2,57,52)) / 86400], [131845.00]],
2533   [[xdate.date(date.mdy(3,17,1992) + time.hms(16,45,44)) / 86400], [149539.00]],
2534   [[xdate.date(date.mdy(2,25,1996) + time.hms(21,30,57)) / 86400], [150979.00]],
2535   [[xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400], [131107.00]],
2536   [[xdate.date(date.mdy(4,19,43) + time.hms(6,49,27)) / 86400], [131674.00]],
2537   [[xdate.date(date.mdy(10,7,43) + time.hms(2,57,52)) / 86400], [131845.00]],
2538   [[xdate.date(date.mdy(3,17,92) + time.hms(16,45,44)) / 86400], [149539.00]],
2539   [[xdate.date(date.mdy(2,25,96) + time.hms(21,30,57)) / 86400], [150979.00]],
2540   [[xdate.date(date.mdy(11,10,2038) + time.hms(22,30,4)) / 86400], [166578.00]],
2541   [[xdate.date(date.mdy(7,18,2094) + time.hms(1,56,51)) / 86400], [186917.00]],
2542   [[xdate.date(123.4)], [0.00]],
2543   [[xdate.date('')], [error],
2544    [error: DEBUG EVALUATE: Type mismatch invoking XDATE.DATE(number) as xdate.date(string).]],
2545
2546   [[xdate.hour(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
2547   [[xdate.hour(date.mdy(6,30,1680) + time.hms(4,50,38))], [4.00]],
2548   [[xdate.hour(date.mdy(7,24,1716) + time.hms(12,31,35))], [12.00]],
2549   [[xdate.hour(date.mdy(6,19,1768) + time.hms(12,47,53))], [12.00]],
2550   [[xdate.hour(date.mdy(8,2,1819) + time.hms(1,26,0))], [1.00]],
2551   [[xdate.hour(date.mdy(3,27,1839) + time.hms(20,58,11))], [20.00]],
2552   [[xdate.hour(date.mdy(4,19,1903) + time.hms(7,36,5))], [7.00]],
2553   [[xdate.hour(date.mdy(8,25,1929) + time.hms(15,43,49))], [15.00]],
2554   [[xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9))], [4.00]],
2555   [[xdate.hour(date.mdy(4,19,1943) + time.hms(6,49,27))], [6.00]],
2556   [[xdate.hour(date.mdy(10,7,1943) + time.hms(2,57,52))], [2.00]],
2557   [[xdate.hour(date.mdy(3,17,1992) + time.hms(16,45,44))], [16.00]],
2558   [[xdate.hour(date.mdy(2,25,1996) + time.hms(21,30,57))], [21.00]],
2559   [[xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9))], [4.00]],
2560   [[xdate.hour(date.mdy(4,19,43) + time.hms(6,49,27))], [6.00]],
2561   [[xdate.hour(date.mdy(10,7,43) + time.hms(2,57,52))], [2.00]],
2562   [[xdate.hour(date.mdy(3,17,92) + time.hms(16,45,44))], [16.00]],
2563   [[xdate.hour(date.mdy(2,25,96) + time.hms(21,30,57))], [21.00]],
2564   [[xdate.hour(date.mdy(11,10,2038) + time.hms(22,30,4))], [22.00]],
2565   [[xdate.hour(date.mdy(7,18,2094) + time.hms(1,56,51))], [1.00]],
2566   [[xdate.hour(-1)], [-1.00]],
2567   [[xdate.hour(1)], [0.00]],
2568   [[xdate.hour($sysmis)], [sysmis]],
2569   [[xdate.hour('')], [error],
2570    [error: DEBUG EVALUATE: Type mismatch invoking XDATE.HOUR(number) as xdate.hour(string).]],
2571
2572   [[xdate.jday(date.mdy(6,10,1648) + time.hms(0,0,0))], [162.00]],
2573   [[xdate.jday(date.mdy(6,30,1680) + time.hms(4,50,38))], [182.00]],
2574   [[xdate.jday(date.mdy(7,24,1716) + time.hms(12,31,35))], [206.00]],
2575   [[xdate.jday(date.mdy(6,19,1768) + time.hms(12,47,53))], [171.00]],
2576   [[xdate.jday(date.mdy(8,2,1819) + time.hms(1,26,0))], [214.00]],
2577   [[xdate.jday(date.mdy(3,27,1839) + time.hms(20,58,11))], [86.00]],
2578   [[xdate.jday(date.mdy(4,19,1903) + time.hms(7,36,5))], [109.00]],
2579   [[xdate.jday(date.mdy(8,25,1929) + time.hms(15,43,49))], [237.00]],
2580   [[xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9))], [272.00]],
2581   [[xdate.jday(date.mdy(4,19,1943) + time.hms(6,49,27))], [109.00]],
2582   [[xdate.jday(date.mdy(10,7,1943) + time.hms(2,57,52))], [280.00]],
2583   [[xdate.jday(date.mdy(3,17,1992) + time.hms(16,45,44))], [77.00]],
2584   [[xdate.jday(date.mdy(2,25,1996) + time.hms(21,30,57))], [56.00]],
2585   [[xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9))], [272.00]],
2586   [[xdate.jday(date.mdy(4,19,43) + time.hms(6,49,27))], [109.00]],
2587   [[xdate.jday(date.mdy(10,7,43) + time.hms(2,57,52))], [280.00]],
2588   [[xdate.jday(date.mdy(3,17,92) + time.hms(16,45,44))], [77.00]],
2589   [[xdate.jday(date.mdy(2,25,96) + time.hms(21,30,57))], [56.00]],
2590   [[xdate.jday(date.mdy(11,10,2038) + time.hms(22,30,4))], [314.00]],
2591   [[xdate.jday(date.mdy(7,18,2094) + time.hms(1,56,51))], [199.00]],
2592   [[xdate.jday(0)], [sysmis]],
2593   [[xdate.jday(1)], [sysmis]],
2594   [[xdate.jday(86400)], [288.00]],
2595
2596   [[xdate.mday(date.mdy(6,10,1648) + time.hms(0,0,0))], [10.00]],
2597   [[xdate.mday(date.mdy(6,30,1680) + time.hms(4,50,38))], [30.00]],
2598   [[xdate.mday(date.mdy(7,24,1716) + time.hms(12,31,35))], [24.00]],
2599   [[xdate.mday(date.mdy(6,19,1768) + time.hms(12,47,53))], [19.00]],
2600   [[xdate.mday(date.mdy(8,2,1819) + time.hms(1,26,0))], [2.00]],
2601   [[xdate.mday(date.mdy(3,27,1839) + time.hms(20,58,11))], [27.00]],
2602   [[xdate.mday(date.mdy(4,19,1903) + time.hms(7,36,5))], [19.00]],
2603   [[xdate.mday(date.mdy(8,25,1929) + time.hms(15,43,49))], [25.00]],
2604   [[xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9))], [29.00]],
2605   [[xdate.mday(date.mdy(4,19,1943) + time.hms(6,49,27))], [19.00]],
2606   [[xdate.mday(date.mdy(10,7,1943) + time.hms(2,57,52))], [7.00]],
2607   [[xdate.mday(date.mdy(3,17,1992) + time.hms(16,45,44))], [17.00]],
2608   [[xdate.mday(date.mdy(2,25,1996) + time.hms(21,30,57))], [25.00]],
2609   [[xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9))], [29.00]],
2610   [[xdate.mday(date.mdy(4,19,43) + time.hms(6,49,27))], [19.00]],
2611   [[xdate.mday(date.mdy(10,7,43) + time.hms(2,57,52))], [7.00]],
2612   [[xdate.mday(date.mdy(3,17,92) + time.hms(16,45,44))], [17.00]],
2613   [[xdate.mday(date.mdy(2,25,96) + time.hms(21,30,57))], [25.00]],
2614   [[xdate.mday(date.mdy(11,10,2038) + time.hms(22,30,4))], [10.00]],
2615   [[xdate.mday(date.mdy(7,18,2094) + time.hms(1,56,51))], [18.00]],
2616
2617   [[xdate.minute(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
2618   [[xdate.minute(date.mdy(6,30,1680) + time.hms(4,50,38))], [50.00]],
2619   [[xdate.minute(date.mdy(7,24,1716) + time.hms(12,31,35))], [31.00]],
2620   [[xdate.minute(date.mdy(6,19,1768) + time.hms(12,47,53))], [47.00]],
2621   [[xdate.minute(date.mdy(8,2,1819) + time.hms(1,26,0))], [26.00]],
2622   [[xdate.minute(date.mdy(3,27,1839) + time.hms(20,58,11))], [58.00]],
2623   [[xdate.minute(date.mdy(4,19,1903) + time.hms(7,36,5))], [36.00]],
2624   [[xdate.minute(date.mdy(8,25,1929) + time.hms(15,43,49))], [43.00]],
2625   [[xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9))], [25.00]],
2626   [[xdate.minute(date.mdy(4,19,1943) + time.hms(6,49,27))], [49.00]],
2627   [[xdate.minute(date.mdy(10,7,1943) + time.hms(2,57,52))], [57.00]],
2628   [[xdate.minute(date.mdy(3,17,1992) + time.hms(16,45,44))], [45.00]],
2629   [[xdate.minute(date.mdy(2,25,1996) + time.hms(21,30,57))], [30.00]],
2630   [[xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9))], [25.00]],
2631   [[xdate.minute(date.mdy(4,19,43) + time.hms(6,49,27))], [49.00]],
2632   [[xdate.minute(date.mdy(10,7,43) + time.hms(2,57,52))], [57.00]],
2633   [[xdate.minute(date.mdy(3,17,92) + time.hms(16,45,44))], [45.00]],
2634   [[xdate.minute(date.mdy(2,25,96) + time.hms(21,30,57))], [30.00]],
2635   [[xdate.minute(date.mdy(11,10,2038) + time.hms(22,30,4))], [30.00]],
2636   [[xdate.minute(date.mdy(7,18,2094) + time.hms(1,56,51))], [56.00]],
2637
2638   [[xdate.month(date.mdy(6,10,1648) + time.hms(0,0,0))], [6.00]],
2639   [[xdate.month(date.mdy(6,30,1680) + time.hms(4,50,38))], [6.00]],
2640   [[xdate.month(date.mdy(7,24,1716) + time.hms(12,31,35))], [7.00]],
2641   [[xdate.month(date.mdy(6,19,1768) + time.hms(12,47,53))], [6.00]],
2642   [[xdate.month(date.mdy(8,2,1819) + time.hms(1,26,0))], [8.00]],
2643   [[xdate.month(date.mdy(3,27,1839) + time.hms(20,58,11))], [3.00]],
2644   [[xdate.month(date.mdy(4,19,1903) + time.hms(7,36,5))], [4.00]],
2645   [[xdate.month(date.mdy(8,25,1929) + time.hms(15,43,49))], [8.00]],
2646   [[xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
2647   [[xdate.month(date.mdy(4,19,1943) + time.hms(6,49,27))], [4.00]],
2648   [[xdate.month(date.mdy(10,7,1943) + time.hms(2,57,52))], [10.00]],
2649   [[xdate.month(date.mdy(3,17,1992) + time.hms(16,45,44))], [3.00]],
2650   [[xdate.month(date.mdy(2,25,1996) + time.hms(21,30,57))], [2.00]],
2651   [[xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
2652   [[xdate.month(date.mdy(4,19,43) + time.hms(6,49,27))], [4.00]],
2653   [[xdate.month(date.mdy(10,7,43) + time.hms(2,57,52))], [10.00]],
2654   [[xdate.month(date.mdy(3,17,92) + time.hms(16,45,44))], [3.00]],
2655   [[xdate.month(date.mdy(2,25,96) + time.hms(21,30,57))], [2.00]],
2656   [[xdate.month(date.mdy(11,10,2038) + time.hms(22,30,4))], [11.00]],
2657   [[xdate.month(date.mdy(7,18,2094) + time.hms(1,56,51))], [7.00]],
2658
2659   [[xdate.quarter(date.mdy(6,10,1648) + time.hms(0,0,0))], [2.00]],
2660   [[xdate.quarter(date.mdy(6,30,1680) + time.hms(4,50,38))], [2.00]],
2661   [[xdate.quarter(date.mdy(7,24,1716) + time.hms(12,31,35))], [3.00]],
2662   [[xdate.quarter(date.mdy(6,19,1768) + time.hms(12,47,53))], [2.00]],
2663   [[xdate.quarter(date.mdy(8,2,1819) + time.hms(1,26,0))], [3.00]],
2664   [[xdate.quarter(date.mdy(3,27,1839) + time.hms(20,58,11))], [1.00]],
2665   [[xdate.quarter(date.mdy(4,19,1903) + time.hms(7,36,5))], [2.00]],
2666   [[xdate.quarter(date.mdy(8,25,1929) + time.hms(15,43,49))], [3.00]],
2667   [[xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9))], [3.00]],
2668   [[xdate.quarter(date.mdy(4,19,1943) + time.hms(6,49,27))], [2.00]],
2669   [[xdate.quarter(date.mdy(10,7,1943) + time.hms(2,57,52))], [4.00]],
2670   [[xdate.quarter(date.mdy(3,17,1992) + time.hms(16,45,44))], [1.00]],
2671   [[xdate.quarter(date.mdy(2,25,1996) + time.hms(21,30,57))], [1.00]],
2672   [[xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9))], [3.00]],
2673   [[xdate.quarter(date.mdy(4,19,43) + time.hms(6,49,27))], [2.00]],
2674   [[xdate.quarter(date.mdy(10,7,43) + time.hms(2,57,52))], [4.00]],
2675   [[xdate.quarter(date.mdy(3,17,92) + time.hms(16,45,44))], [1.00]],
2676   [[xdate.quarter(date.mdy(2,25,96) + time.hms(21,30,57))], [1.00]],
2677   [[xdate.quarter(date.mdy(11,10,2038) + time.hms(22,30,4))], [4.00]],
2678   [[xdate.quarter(date.mdy(7,18,2094) + time.hms(1,56,51))], [3.00]],
2679
2680   [[xdate.second(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
2681   [[xdate.second(date.mdy(6,30,1680) + time.hms(4,50,38))], [38.00]],
2682   [[xdate.second(date.mdy(7,24,1716) + time.hms(12,31,35))], [35.00]],
2683   [[xdate.second(date.mdy(6,19,1768) + time.hms(12,47,53))], [53.00]],
2684   [[xdate.second(date.mdy(8,2,1819) + time.hms(1,26,0))], [0.00]],
2685   [[xdate.second(date.mdy(3,27,1839) + time.hms(20,58,11))], [11.00]],
2686   [[xdate.second(date.mdy(4,19,1903) + time.hms(7,36,5))], [5.00]],
2687   [[xdate.second(date.mdy(8,25,1929) + time.hms(15,43,49))], [49.00]],
2688   [[xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
2689   [[xdate.second(date.mdy(4,19,1943) + time.hms(6,49,27))], [27.00]],
2690   [[xdate.second(date.mdy(10,7,1943) + time.hms(2,57,52))], [52.00]],
2691   [[xdate.second(date.mdy(3,17,1992) + time.hms(16,45,44))], [44.00]],
2692   [[xdate.second(date.mdy(2,25,1996) + time.hms(21,30,57))], [57.00]],
2693   [[xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
2694   [[xdate.second(date.mdy(4,19,43) + time.hms(6,49,27))], [27.00]],
2695   [[xdate.second(date.mdy(10,7,43) + time.hms(2,57,52))], [52.00]],
2696   [[xdate.second(date.mdy(3,17,92) + time.hms(16,45,44))], [44.00]],
2697   [[xdate.second(date.mdy(2,25,96) + time.hms(21,30,57))], [57.00]],
2698   [[xdate.second(date.mdy(11,10,2038) + time.hms(22,30,4))], [4.00]],
2699   [[xdate.second(date.mdy(7,18,2094) + time.hms(1,56,51))], [51.00]],
2700
2701   [[xdate.tday(date.mdy(6,10,1648) + time.hms(0,0,0))], [23981.00]],
2702   [[xdate.tday(date.mdy(6,30,1680) + time.hms(4,50,38))], [35689.00]],
2703   [[xdate.tday(date.mdy(7,24,1716) + time.hms(12,31,35))], [48861.00]],
2704   [[xdate.tday(date.mdy(6,19,1768) + time.hms(12,47,53))], [67819.00]],
2705   [[xdate.tday(date.mdy(8,2,1819) + time.hms(1,26,0))], [86489.00]],
2706   [[xdate.tday(date.mdy(3,27,1839) + time.hms(20,58,11))], [93666.00]],
2707   [[xdate.tday(date.mdy(4,19,1903) + time.hms(7,36,5))], [117064.00]],
2708   [[xdate.tday(date.mdy(8,25,1929) + time.hms(15,43,49))], [126689.00]],
2709   [[xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9))], [131107.00]],
2710   [[xdate.tday(date.mdy(4,19,1943) + time.hms(6,49,27))], [131674.00]],
2711   [[xdate.tday(date.mdy(10,7,1943) + time.hms(2,57,52))], [131845.00]],
2712   [[xdate.tday(date.mdy(3,17,1992) + time.hms(16,45,44))], [149539.00]],
2713   [[xdate.tday(date.mdy(2,25,1996) + time.hms(21,30,57))], [150979.00]],
2714   [[xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9))], [131107.00]],
2715   [[xdate.tday(date.mdy(4,19,43) + time.hms(6,49,27))], [131674.00]],
2716   [[xdate.tday(date.mdy(10,7,43) + time.hms(2,57,52))], [131845.00]],
2717   [[xdate.tday(date.mdy(3,17,92) + time.hms(16,45,44))], [149539.00]],
2718   [[xdate.tday(date.mdy(2,25,96) + time.hms(21,30,57))], [150979.00]],
2719   [[xdate.tday(date.mdy(11,10,2038) + time.hms(22,30,4))], [166578.00]],
2720   [[xdate.tday(date.mdy(7,18,2094) + time.hms(1,56,51))], [186917.00]],
2721
2722   [[xdate.time(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
2723   [[xdate.time(date.mdy(6,30,1680) + time.hms(4,50,38))], [17438.00]],
2724   [[xdate.time(date.mdy(7,24,1716) + time.hms(12,31,35))], [45095.00]],
2725   [[xdate.time(date.mdy(6,19,1768) + time.hms(12,47,53))], [46073.00]],
2726   [[xdate.time(date.mdy(8,2,1819) + time.hms(1,26,0))], [5160.00]],
2727   [[xdate.time(date.mdy(3,27,1839) + time.hms(20,58,11))], [75491.00]],
2728   [[xdate.time(date.mdy(4,19,1903) + time.hms(7,36,5))], [27365.00]],
2729   [[xdate.time(date.mdy(8,25,1929) + time.hms(15,43,49))], [56629.00]],
2730   [[xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9))], [15909.00]],
2731   [[xdate.time(date.mdy(4,19,1943) + time.hms(6,49,27))], [24567.00]],
2732   [[xdate.time(date.mdy(10,7,1943) + time.hms(2,57,52))], [10672.00]],
2733   [[xdate.time(date.mdy(3,17,1992) + time.hms(16,45,44))], [60344.00]],
2734   [[xdate.time(date.mdy(2,25,1996) + time.hms(21,30,57))], [77457.00]],
2735   [[xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9))], [15909.00]],
2736   [[xdate.time(date.mdy(4,19,43) + time.hms(6,49,27))], [24567.00]],
2737   [[xdate.time(date.mdy(10,7,43) + time.hms(2,57,52))], [10672.00]],
2738   [[xdate.time(date.mdy(3,17,92) + time.hms(16,45,44))], [60344.00]],
2739   [[xdate.time(date.mdy(2,25,96) + time.hms(21,30,57))], [77457.00]],
2740   [[xdate.time(date.mdy(11,10,2038) + time.hms(22,30,4))], [81004.00]],
2741   [[xdate.time(date.mdy(7,18,2094) + time.hms(1,56,51))], [7011.00]],
2742
2743   [[xdate.week(date.mdy(6,10,1648) + time.hms(0,0,0))], [24.00]],
2744   [[xdate.week(date.mdy(6,30,1680) + time.hms(4,50,38))], [26.00]],
2745   [[xdate.week(date.mdy(7,24,1716) + time.hms(12,31,35))], [30.00]],
2746   [[xdate.week(date.mdy(6,19,1768) + time.hms(12,47,53))], [25.00]],
2747   [[xdate.week(date.mdy(8,2,1819) + time.hms(1,26,0))], [31.00]],
2748   [[xdate.week(date.mdy(3,27,1839) + time.hms(20,58,11))], [13.00]],
2749   [[xdate.week(date.mdy(4,19,1903) + time.hms(7,36,5))], [16.00]],
2750   [[xdate.week(date.mdy(8,25,1929) + time.hms(15,43,49))], [34.00]],
2751   [[xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9))], [39.00]],
2752   [[xdate.week(date.mdy(4,19,1943) + time.hms(6,49,27))], [16.00]],
2753   [[xdate.week(date.mdy(10,7,1943) + time.hms(2,57,52))], [40.00]],
2754   [[xdate.week(date.mdy(3,17,1992) + time.hms(16,45,44))], [11.00]],
2755   [[xdate.week(date.mdy(2,25,1996) + time.hms(21,30,57))], [8.00]],
2756   [[xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9))], [39.00]],
2757   [[xdate.week(date.mdy(4,19,43) + time.hms(6,49,27))], [16.00]],
2758   [[xdate.week(date.mdy(10,7,43) + time.hms(2,57,52))], [40.00]],
2759   [[xdate.week(date.mdy(3,17,92) + time.hms(16,45,44))], [11.00]],
2760   [[xdate.week(date.mdy(2,25,96) + time.hms(21,30,57))], [8.00]],
2761   [[xdate.week(date.mdy(11,10,2038) + time.hms(22,30,4))], [45.00]],
2762   [[xdate.week(date.mdy(7,18,2094) + time.hms(1,56,51))], [29.00]],
2763
2764   [[xdate.wkday(date.mdy(6,10,1648))], [4.00]],
2765   [[xdate.wkday(date.mdy(6,30,1680))], [1.00]],
2766   [[xdate.wkday(date.mdy(7,24,1716))], [6.00]],
2767   [[xdate.wkday(date.mdy(6,19,1768))], [1.00]],
2768   [[xdate.wkday(date.mdy(8,2,1819))], [2.00]],
2769   [[xdate.wkday(date.mdy(3,27,1839))], [4.00]],
2770   [[xdate.wkday(date.mdy(4,19,1903))], [1.00]],
2771   [[xdate.wkday(date.mdy(8,25,1929))], [1.00]],
2772   [[xdate.wkday(date.mdy(9,29,1941))], [2.00]],
2773   [[xdate.wkday(date.mdy(4,19,1943))], [2.00]],
2774   [[xdate.wkday(date.mdy(10,7,1943))], [5.00]],
2775   [[xdate.wkday(date.mdy(3,17,1992))], [3.00]],
2776   [[xdate.wkday(date.mdy(2,25,1996))], [1.00]],
2777   [[xdate.wkday(date.mdy(9,29,1941))], [2.00]],
2778   [[xdate.wkday(date.mdy(4,19,43))], [2.00]],
2779   [[xdate.wkday(date.mdy(10,7,43))], [5.00]],
2780   [[xdate.wkday(date.mdy(3,17,92))], [3.00]],
2781   [[xdate.wkday(date.mdy(2,25,96))], [1.00]],
2782   [[xdate.wkday(date.mdy(11,10,2038))], [4.00]],
2783   [[xdate.wkday(date.mdy(7,18,2094))], [1.00]],
2784
2785   [[xdate.year(date.mdy(6,10,1648) + time.hms(0,0,0))], [1648.00]],
2786   [[xdate.year(date.mdy(6,30,1680) + time.hms(4,50,38))], [1680.00]],
2787   [[xdate.year(date.mdy(7,24,1716) + time.hms(12,31,35))], [1716.00]],
2788   [[xdate.year(date.mdy(6,19,1768) + time.hms(12,47,53))], [1768.00]],
2789   [[xdate.year(date.mdy(8,2,1819) + time.hms(1,26,0))], [1819.00]],
2790   [[xdate.year(date.mdy(3,27,1839) + time.hms(20,58,11))], [1839.00]],
2791   [[xdate.year(date.mdy(4,19,1903) + time.hms(7,36,5))], [1903.00]],
2792   [[xdate.year(date.mdy(8,25,1929) + time.hms(15,43,49))], [1929.00]],
2793   [[xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9))], [1941.00]],
2794   [[xdate.year(date.mdy(4,19,1943) + time.hms(6,49,27))], [1943.00]],
2795   [[xdate.year(date.mdy(10,7,1943) + time.hms(2,57,52))], [1943.00]],
2796   [[xdate.year(date.mdy(3,17,1992) + time.hms(16,45,44))], [1992.00]],
2797   [[xdate.year(date.mdy(2,25,1996) + time.hms(21,30,57))], [1996.00]],
2798   [[xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9))], [1941.00]],
2799   [[xdate.year(date.mdy(4,19,43) + time.hms(6,49,27))], [1943.00]],
2800   [[xdate.year(date.mdy(10,7,43) + time.hms(2,57,52))], [1943.00]],
2801   [[xdate.year(date.mdy(3,17,92) + time.hms(16,45,44))], [1992.00]],
2802   [[xdate.year(date.mdy(2,25,96) + time.hms(21,30,57))], [1996.00]],
2803   [[xdate.year(date.mdy(11,10,2038) + time.hms(22,30,4))], [2038.00]],
2804   [[xdate.year(date.mdy(7,18,2094) + time.hms(1,56,51))], [2094.00]])
2805
2806 CHECK_EXPR_EVAL([datediff],
2807   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'years')], [-32.00]],
2808   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'years')], [-36.00]],
2809   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'years')], [-51.00]],
2810   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'years')], [-51.00]],
2811   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'years')], [-19.00]],
2812   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'years')], [-64.00]],
2813   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'years')], [-26.00]],
2814   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'years')], [-12.00]],
2815   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'years')], [-1.00]],
2816   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'years')], [0.00]],
2817   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'years')], [-48.00]],
2818   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'years')], [-3.00]],
2819   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'years')], [-54.00]],
2820   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'years')], [-1.00]],
2821   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'years')], [0.00]],
2822   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'years')], [-48.00]],
2823   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'years')], [-3.00]],
2824   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'years')], [-42.00]],
2825   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'years')], [-55.00]],
2826   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'years')], [-3.00]],
2827   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'years')], [-4.00]],
2828   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'years')], [-2.00]],
2829
2830   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'quarters')], [-128.00]],
2831   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'quarters')], [-144.00]],
2832   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'quarters')], [-207.00]],
2833   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'quarters')], [-204.00]],
2834   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'quarters')], [-78.00]],
2835   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'quarters')], [-256.00]],
2836   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'quarters')], [-105.00]],
2837   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'quarters')], [-48.00]],
2838   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'quarters')], [-6.00]],
2839   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'quarters')], [-1.00]],
2840   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'quarters')], [-193.00]],
2841   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'quarters')], [-15.00]],
2842   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'quarters')], [-217.00]],
2843   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'quarters')], [-6.00]],
2844   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'quarters')], [-1.00]],
2845   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'quarters')], [-193.00]],
2846   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'quarters')], [-15.00]],
2847   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'quarters')], [-170.00]],
2848   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'quarters')], [-222.00]],
2849   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'quarters')], [-15.00]],
2850   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'quarters')], [-16.00]],
2851   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'quarters')], [-11.00]],
2852
2853   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'months')], [-384.00]],
2854   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'months')], [-432.00]],
2855   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'months')], [-622.00]],
2856   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'months')], [-613.00]],
2857   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'months')], [-235.00]],
2858   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'months')], [-768.00]],
2859   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'months')], [-316.00]],
2860   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'months')], [-145.00]],
2861   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'months')], [-18.00]],
2862   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'months')], [-5.00]],
2863   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'months')], [-581.00]],
2864   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'months')], [-47.00]],
2865   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'months')], [-652.00]],
2866   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'months')], [-18.00]],
2867   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'months')], [-5.00]],
2868   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'months')], [-581.00]],
2869   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'months')], [-47.00]],
2870   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'months')], [-512.00]],
2871   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'months')], [-668.00]],
2872   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'months')], [-47.00]],
2873   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'months')], [-48.00]],
2874   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'months')], [-35.00]],
2875
2876   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'weeks')], [-1672.00]],
2877   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'weeks')], [-1881.00]],
2878   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'weeks')], [-2708.00]],
2879   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'weeks')], [-2667.00]],
2880   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'weeks')], [-1025.00]],
2881   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'weeks')], [-3342.00]],
2882   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'weeks')], [-1375.00]],
2883   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'weeks')], [-631.00]],
2884   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'weeks')], [-81.00]],
2885   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'weeks')], [-24.00]],
2886   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'weeks')], [-2527.00]],
2887   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'weeks')], [-205.00]],
2888   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'weeks')], [-2838.00]],
2889   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'weeks')], [-81.00]],
2890   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'weeks')], [-24.00]],
2891   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'weeks')], [-2527.00]],
2892   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'weeks')], [-205.00]],
2893   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'weeks')], [-2228.00]],
2894   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'weeks')], [-2905.00]],
2895   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'weeks')], [-208.00]],
2896   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'weeks')], [-208.00]],
2897   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'weeks')], [-156.00]],
2898
2899   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'days')], [-11708.00]],
2900   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'days')], [-13172.00]],
2901   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'days')], [-18958.00]],
2902   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'days')], [-18670.00]],
2903   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'days')], [-7177.00]],
2904   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'days')], [-23398.00]],
2905   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'days')], [-9625.00]],
2906   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'days')], [-4418.00]],
2907   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'days')], [-567.00]],
2908   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'days')], [-171.00]],
2909   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'days')], [-17694.00]],
2910   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'days')], [-1440.00]],
2911   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'days')], [-19872.00]],
2912   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'days')], [-567.00]],
2913   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'days')], [-171.00]],
2914   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'days')], [-17694.00]],
2915   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'days')], [-1440.00]],
2916   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'days')], [-15599.00]],
2917   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'days')], [-20339.00]],
2918   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'days')], [-1460.00]],
2919   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'days')], [-1461.00]],
2920   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'days')], [-1094.00]],
2921
2922   [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'years')], [32.00]],
2923   [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'years')], [36.00]],
2924   [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'years')], [51.00]],
2925   [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'years')], [51.00]],
2926   [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'years')], [19.00]],
2927   [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'years')], [64.00]],
2928   [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'years')], [26.00]],
2929   [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'years')], [12.00]],
2930   [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'years')], [1.00]],
2931   [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'years')], [0.00]],
2932   [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'years')], [48.00]],
2933   [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'years')], [3.00]],
2934   [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'years')], [54.00]],
2935   [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'years')], [1.00]],
2936   [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'years')], [0.00]],
2937   [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'years')], [48.00]],
2938   [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'years')], [3.00]],
2939   [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'years')], [42.00]],
2940   [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'years')], [55.00]],
2941   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'years')], [3.00]],
2942   [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'years')], [4.00]],
2943   [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'years')], [2.00]],
2944
2945   [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'months')], [384.00]],
2946   [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'months')], [432.00]],
2947   [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'months')], [622.00]],
2948   [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'months')], [613.00]],
2949   [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'months')], [235.00]],
2950   [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'months')], [768.00]],
2951   [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'months')], [316.00]],
2952   [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'months')], [145.00]],
2953   [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'months')], [18.00]],
2954   [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'months')], [5.00]],
2955   [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'months')], [581.00]],
2956   [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'months')], [47.00]],
2957   [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'months')], [652.00]],
2958   [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'months')], [18.00]],
2959   [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'months')], [5.00]],
2960   [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'months')], [581.00]],
2961   [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'months')], [47.00]],
2962   [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'months')], [512.00]],
2963   [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'months')], [668.00]],
2964   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'months')], [47.00]],
2965   [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'months')], [48.00]],
2966   [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'months')], [35.00]],
2967
2968   [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'quarters')], [128.00]],
2969   [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'quarters')], [144.00]],
2970   [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'quarters')], [207.00]],
2971   [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'quarters')], [204.00]],
2972   [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'quarters')], [78.00]],
2973   [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'quarters')], [256.00]],
2974   [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'quarters')], [105.00]],
2975   [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'quarters')], [48.00]],
2976   [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'quarters')], [6.00]],
2977   [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'quarters')], [1.00]],
2978   [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'quarters')], [193.00]],
2979   [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'quarters')], [15.00]],
2980   [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'quarters')], [217.00]],
2981   [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'quarters')], [6.00]],
2982   [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'quarters')], [1.00]],
2983   [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'quarters')], [193.00]],
2984   [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'quarters')], [15.00]],
2985   [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'quarters')], [170.00]],
2986   [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'quarters')], [222.00]],
2987   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'quarters')], [15.00]],
2988   [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'quarters')], [16.00]],
2989   [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'quarters')], [11.00]],
2990
2991 dnl time of day is significant for DATEDIFF
2992   [[datediff(date.mdy(10,15,1910) + 234, date.mdy(10,10,1910) + 123, 'days')],
2993     [5.00]],
2994   [[datediff(date.mdy(10,15,1910) + 123, date.mdy(10,10,1910) + 234, 'days')],
2995     [4.00]],
2996   [[datediff(date.mdy(10,24,1910) + 234, date.mdy(10,10,1910) + 123, 'weeks')],
2997     [2.00]],
2998   [[datediff(date.mdy(10,24,1910) + 123, date.mdy(10,10,1910) + 234, 'weeks')],
2999     [1.00]],
3000   [[datediff(date.mdy(10,10,1910) + 234, date.mdy(5,10,1910) + 123, 'months')],
3001     [5.00]],
3002   [[datediff(date.mdy(10,10,1910) + 123, date.mdy(5,10,1910) + 234, 'months')],
3003     [4.00]],
3004   [[datediff(date.mdy(5,10,1919) + 234, date.mdy(5,10,1910) + 123, 'years')],
3005     [9.00]],
3006   [[datediff(date.mdy(5,10,1919) + 123, date.mdy(5,10,1910) + 234, 'years')],
3007     [8.00]],
3008
3009   [[datediff(date.mdy(10,10,1910) + 123, date.mdy(10,15,1910) + 234, 'days')],
3010     [-5.00]],
3011   [[datediff(date.mdy(10,10,1910) + 234, date.mdy(10,15,1910) + 123, 'days')],
3012     [-4.00]],
3013   [[datediff(date.mdy(10,10,1910) + 123, date.mdy(10,24,1910) + 234, 'weeks')],
3014     [-2.00]],
3015   [[datediff(date.mdy(10,10,1910) + 234, date.mdy(10,24,1910) + 123, 'weeks')],
3016     [-1.00]],
3017   [[datediff(date.mdy(5,10,1910) + 123, date.mdy(10,10,1910) + 234, 'months')],
3018     [-5.00]],
3019   [[datediff(date.mdy(5,10,1910) + 234, date.mdy(10,10,1910) + 123, 'months')],
3020     [-4.00]],
3021   [[datediff(date.mdy(5,10,1910) + 123, date.mdy(5,10,1919) + 234, 'years')],
3022     [-9.00]],
3023   [[datediff(date.mdy(5,10,1910) + 234, date.mdy(5,10,1919) + 123, 'years')],
3024     [-8.00]])
3025
3026 CHECK_EXPR_EVAL([datesum],
3027 dnl DATESUM with non-leap year
3028   [[ctime.days(datesum(date.mdy(1,31,1900), 1, 'months') - date.mdy(1,1,1900))], [58.00]],
3029   [[ctime.days(datesum(date.mdy(1,31,1900), 2, 'months') - date.mdy(1,1,1900))], [89.00]],
3030   [[ctime.days(datesum(date.mdy(1,31,1900), 3, 'months') - date.mdy(1,1,1900))], [119.00]],
3031   [[ctime.days(datesum(date.mdy(1,31,1900), 4, 'months') - date.mdy(1,1,1900))], [150.00]],
3032   [[ctime.days(datesum(date.mdy(1,31,1900), 5.4, 'months') - date.mdy(1,1,1900))], [180.00]],
3033   [[ctime.days(datesum(date.mdy(1,31,1900), 6, 'months') - date.mdy(1,1,1900))], [211.00]],
3034   [[ctime.days(datesum(date.mdy(1,31,1900), 7, 'months') - date.mdy(1,1,1900))], [242.00]],
3035   [[ctime.days(datesum(date.mdy(1,31,1900), 8, 'months') - date.mdy(1,1,1900))], [272.00]],
3036   [[ctime.days(datesum(date.mdy(1,31,1900), 9, 'months') - date.mdy(1,1,1900))], [303.00]],
3037   [[ctime.days(datesum(date.mdy(1,31,1900), 10, 'months') - date.mdy(1,1,1900))], [333.00]],
3038   [[ctime.days(datesum(date.mdy(1,31,1900), 11, 'months') - date.mdy(1,1,1900))], [364.00]],
3039   [[ctime.days(datesum(date.mdy(1,31,1900), 12, 'months') - date.mdy(1,1,1900))], [395.00]],
3040   [[ctime.days(datesum(date.mdy(1,31,1900), 13.9, 'months') - date.mdy(1,1,1900))], [423.00]],
3041   [[ctime.days(datesum(date.mdy(1,31,1900), 1, 'months', 'rollover') - date.mdy(1,1,1900))], [61.00]],
3042   [[ctime.days(datesum(date.mdy(1,31,1900), 2, 'months', 'rollover') - date.mdy(1,1,1900))], [89.00]],
3043   [[ctime.days(datesum(date.mdy(1,31,1900), 3.2, 'months', 'rollover') - date.mdy(1,1,1900))], [120.00]],
3044   [[ctime.days(datesum(date.mdy(1,31,1900), 4, 'months', 'rollover') - date.mdy(1,1,1900))], [150.00]],
3045   [[ctime.days(datesum(date.mdy(1,31,1900), 5, 'months', 'rollover') - date.mdy(1,1,1900))], [181.00]],
3046   [[ctime.days(datesum(date.mdy(1,31,1900), 6, 'months', 'rollover') - date.mdy(1,1,1900))], [211.00]],
3047   [[ctime.days(datesum(date.mdy(1,31,1900), 7, 'months', 'rollover') - date.mdy(1,1,1900))], [242.00]],
3048   [[ctime.days(datesum(date.mdy(1,31,1900), 8, 'months', 'rollover') - date.mdy(1,1,1900))], [273.00]],
3049   [[ctime.days(datesum(date.mdy(1,31,1900), 9, 'months', 'rollover') - date.mdy(1,1,1900))], [303.00]],
3050   [[ctime.days(datesum(date.mdy(1,31,1900), 10, 'months', 'rollover') - date.mdy(1,1,1900))], [334.00]],
3051   [[ctime.days(datesum(date.mdy(1,31,1900), 11, 'months', 'rollover') - date.mdy(1,1,1900))], [364.00]],
3052   [[ctime.days(datesum(date.mdy(1,31,1900), 12, 'months', 'rollover') - date.mdy(1,1,1900))], [395.00]],
3053   [[ctime.days(datesum(date.mdy(1,31,1900), 13, 'months', 'rollover') - date.mdy(1,1,1900))], [426.00]],
3054
3055 dnl DATESUM with leap year
3056   [[ctime.days(datesum(date.mdy(1,31,1904), 1, 'months') - date.mdy(1,1,1904))], [59.00]],
3057   [[ctime.days(datesum(date.mdy(1,31,1904), 2.5, 'months') - date.mdy(1,1,1904))], [90.00]],
3058   [[ctime.days(datesum(date.mdy(1,31,1904), 3, 'months') - date.mdy(1,1,1904))], [120.00]],
3059   [[ctime.days(datesum(date.mdy(1,31,1904), 4.9, 'months') - date.mdy(1,1,1904))], [151.00]],
3060   [[ctime.days(datesum(date.mdy(1,31,1904), 5.1, 'months') - date.mdy(1,1,1904))], [181.00]],
3061   [[ctime.days(datesum(date.mdy(1,31,1904), 6, 'months') - date.mdy(1,1,1904))], [212.00]],
3062   [[ctime.days(datesum(date.mdy(1,31,1904), 7, 'months') - date.mdy(1,1,1904))], [243.00]],
3063   [[ctime.days(datesum(date.mdy(1,31,1904), 8, 'months') - date.mdy(1,1,1904))], [273.00]],
3064   [[ctime.days(datesum(date.mdy(1,31,1904), 9, 'months') - date.mdy(1,1,1904))], [304.00]],
3065   [[ctime.days(datesum(date.mdy(1,31,1904), 10, 'months') - date.mdy(1,1,1904))], [334.00]],
3066   [[ctime.days(datesum(date.mdy(1,31,1904), 11, 'months') - date.mdy(1,1,1904))], [365.00]],
3067   [[ctime.days(datesum(date.mdy(1,31,1904), 12, 'months') - date.mdy(1,1,1904))], [396.00]],
3068   [[ctime.days(datesum(date.mdy(1,31,1904), 13, 'months') - date.mdy(1,1,1904))], [424.00]],
3069   [[ctime.days(datesum(date.mdy(1,31,1904), 1, 'months', 'rollover') - date.mdy(1,1,1904))], [61.00]],
3070   [[ctime.days(datesum(date.mdy(1,31,1904), 2, 'months', 'rollover') - date.mdy(1,1,1904))], [90.00]],
3071   [[ctime.days(datesum(date.mdy(1,31,1904), 3, 'months', 'rollover') - date.mdy(1,1,1904))], [121.00]],
3072   [[ctime.days(datesum(date.mdy(1,31,1904), 4, 'months', 'rollover') - date.mdy(1,1,1904))], [151.00]],
3073   [[ctime.days(datesum(date.mdy(1,31,1904), 5, 'months', 'rollover') - date.mdy(1,1,1904))], [182.00]],
3074   [[ctime.days(datesum(date.mdy(1,31,1904), 6, 'months', 'rollover') - date.mdy(1,1,1904))], [212.00]],
3075   [[ctime.days(datesum(date.mdy(1,31,1904), 7, 'months', 'rollover') - date.mdy(1,1,1904))], [243.00]],
3076   [[ctime.days(datesum(date.mdy(1,31,1904), 8, 'months', 'rollover') - date.mdy(1,1,1904))], [274.00]],
3077   [[ctime.days(datesum(date.mdy(1,31,1904), 9, 'months', 'rollover') - date.mdy(1,1,1904))], [304.00]],
3078   [[ctime.days(datesum(date.mdy(1,31,1904), 10, 'months', 'rollover') - date.mdy(1,1,1904))], [335.00]],
3079   [[ctime.days(datesum(date.mdy(1,31,1904), 11, 'months', 'rollover') - date.mdy(1,1,1904))], [365.00]],
3080   [[ctime.days(datesum(date.mdy(1,31,1904), 12, 'months', 'rollover') - date.mdy(1,1,1904))], [396.00]],
3081   [[ctime.days(datesum(date.mdy(1,31,1904), 13, 'months', 'rollover') - date.mdy(1,1,1904))], [427.00]],
3082
3083   [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'weeks') - date.mdy(6,10,1648))], [7.00]],
3084   [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'weeks') - date.mdy(6,30,1680))], [17.50]],
3085   [[ctime.days(datesum(date.mdy(7,24,1716), -3, 'weeks') - date.mdy(7,24,1716))], [-21.00]],
3086   [[ctime.days(datesum(date.mdy(6,19,1768), 4, 'weeks') - date.mdy(6,19,1768))], [28.00]],
3087   [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'weeks') - date.mdy(8,2,1819))], [35.00]],
3088
3089   [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'days') - date.mdy(6,10,1648))], [1.00]],
3090   [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'days') - date.mdy(6,30,1680))], [2.50]],
3091   [[ctime.days(datesum(date.mdy(7,24,1716), -3, 'days') - date.mdy(7,24,1716))], [-3.00]],
3092   [[ctime.days(datesum(date.mdy(6,19,1768), 4, 'days') - date.mdy(6,19,1768))], [4.00]],
3093   [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'days') - date.mdy(8,2,1819))], [5.00]],
3094   [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'hours') - date.mdy(6,10,1648))], [0.04]],
3095   [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'hours') - date.mdy(6,30,1680))], [0.10]],
3096   [[ctime.days(datesum(date.mdy(6,19,1768), -4, 'hours') - date.mdy(6,19,1768))], [-0.17]],
3097   [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'hours') - date.mdy(8,2,1819))], [0.21]],
3098
3099 dnl DATESUM preserves time-of-day for units of days and longer.
3100   [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'days') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [5.00]],
3101   [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'weeks') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [35.00]],
3102   [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'months') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [153.00]],
3103   [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'years') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [1827.00]])
3104
3105 CHECK_EXPR_EVAL([miscellaneous],
3106 dnl These test values are from Applied Statistics, Algorithm AS 310.
3107   [[1000 * ncdf.beta(.868,10,20,150)], [937.66]],
3108   [[1000 * ncdf.beta(.9,10,10,120)], [730.68]],
3109   [[1000 * ncdf.beta(.88,15,5,80)], [160.43]],
3110   [[1000 * ncdf.beta(.85,20,10,110)], [186.75]],
3111   [[1000 * ncdf.beta(.66,20,30,65)], [655.94]],
3112   [[1000 * ncdf.beta(.72,20,50,130)], [979.69]],
3113   [[1000 * ncdf.beta(.72,30,20,80)], [116.24]],
3114   [[1000 * ncdf.beta(.8,30,40,130)], [993.04]],
3115
3116 dnl FIXME: LAG
3117 dnl
3118   [[X], [1.00], [], [(X = 1.00)]],
3119   [[SYSMIS(1)], [false]],
3120   [[SYSMIS($SYSMIS)], [true]],
3121   [[SYSMIS(1 + $SYSMIS)], [true]],
3122
3123 dnl FIXME: out-of-range and nearly out-of-range values on dates
3124 dnl
3125 dnl Tests correctness of generic optimizations in optimize_tree().
3126   [[x + 0], [10.00], [], [(X = 10.00)]],
3127   [[x - 0], [-3.00], [], [(X = -3.00)]],
3128   [[0 + x], [5.00], [], [(X = 5.00)]],
3129   [[x * 1], [10.00], [], [(X = 10.00)]],
3130   [[1 * x], [-3.00], [], [(X = -3.00)]],
3131   [[x / 1], [5.00], [], [(X = 5.00)]],
3132   [[0 * x], [0.00], [], [(X = 10.00)]],
3133   [[x * 0], [0.00], [], [(X = -3.00)]],
3134   [[0 / x], [0.00], [], [(X = 5.00)]],
3135   [[mod(0, x)], [0.00], [], [(X = 5.00)]],
3136   [[x ** 1], [5.00], [], [(X = 5.00)]],
3137   [[x ** 2], [25.00], [], [(X = 5.00)]])
3138
3139 CHECK_EXPR_EVAL([negative checks],
3140   [[$nonexistent], [error], [error: DEBUG EVALUATE: Unknown system variable $nonexistent.]],
3141   [[RANGE(1, 2)], [error], [error: DEBUG EVALUATE: RANGE(number, number, number[, number, number]...) must have an odd number of arguments.]],
3142   [[CONCAT.1('a', 'b')], [error], [error: DEBUG EVALUATE: CONCAT(string[, string]...) function cannot accept suffix .1 to specify the minimum number of valid arguments.]],
3143   [[foobar(x)], [error], [error: DEBUG EVALUATE: No function or vector named foobar.]],
3144   [[CONCAT.1('a' b)], [error], [error: DEBUG EVALUATE: Syntax error at `b': expecting `,' or `)'.]],
3145   [[NCDF.CHISQ(1, 2, 3)], [error], [error: DEBUG EVALUATE: NCDF.CHISQ(number, number, number) is not available in this version of PSPP.]])
3146
3147 AT_SETUP([LAG function])
3148 AT_DATA([lag.sps], [dnl
3149 data list /W 1.
3150 begin data.
3151 1
3152 2
3153 3
3154 4
3155 5
3156 end data.
3157
3158 compute X=lag(w,1).
3159 compute Y=lag(x).
3160 compute Z=lag(w,2).
3161 list.
3162 ])
3163 AT_CHECK([pspp -o pspp.csv lag.sps])
3164 AT_CHECK([cat pspp.csv], [0], [dnl
3165 Table: Reading 1 record from INLINE.
3166 Variable,Record,Columns,Format
3167 W,1,1-1,F1.0
3168
3169 Table: Data List
3170 W,X,Y,Z
3171 1,.  ,.  ,.  @&t@
3172 2,1.00,.  ,.  @&t@
3173 3,2.00,1.00,1.00
3174 4,3.00,2.00,2.00
3175 5,4.00,3.00,3.00
3176 ])
3177 AT_CLEANUP
3178
3179 AT_SETUP([LAG crash bug])
3180 AT_DATA([lag.sps], [dnl
3181 DATA LIST LIST /x.
3182 BEGIN DATA
3183 1
3184 2
3185 END DATA.
3186
3187 DO IF (x <> LAG(x) ).
3188         ECHO 'hello'.
3189 END IF.
3190
3191 EXECUTE.
3192 ])
3193 AT_CHECK([pspp -o pspp.csv lag.sps])
3194 AT_CHECK([cat pspp.csv], [0], [dnl
3195 Table: Reading free-form data from INLINE.
3196 Variable,Format
3197 x,F8.0
3198
3199 hello
3200 ])
3201 AT_CLEANUP
3202
3203 dnl Tests for a bug which caused UNIFORM(x) to always return zero.
3204 AT_SETUP([UNIFORM function])
3205 AT_DATA([uniform.sps], [dnl
3206 set seed=10.
3207 input program.
3208 + loop #i = 1 to 20.
3209 +    do repeat response=R1.
3210 +       compute response = uniform(10).
3211 +    end repeat.
3212 +    end case.
3213 + end loop.
3214 + end file.
3215 end input program.
3216
3217 list.
3218 ])
3219 AT_CHECK([pspp -o pspp.csv uniform.sps])
3220 AT_CHECK([cat pspp.csv], [0], [dnl
3221 Table: Data List
3222 R1
3223 7.71
3224 2.99
3225 .21
3226 4.95
3227 6.34
3228 4.43
3229 7.49
3230 8.32
3231 4.99
3232 5.83
3233 2.25
3234 .25
3235 1.98
3236 7.09
3237 7.61
3238 2.66
3239 1.69
3240 2.64
3241 .88
3242 1.50
3243 ])
3244 AT_CLEANUP
3245
3246 AT_SETUP([VALUELABEL function])
3247 AT_DATA([valuelabel.sps], [dnl
3248 DATA LIST notable /n 1 s 2(a).
3249 VALUE LABELS /n 0 'Very dissatisfied'
3250                 1 'Dissatisfied'
3251                 1.5 'Slightly Peeved'
3252                 2 'Neutral'
3253                 3 'Satisfied'
3254                 4 'Very satisfied'.
3255 VALUE LABELS /s 'a' 'Wouldn''t buy again'
3256                 'b' 'Unhappy'
3257                 'c' 'Bored'
3258                 'd' 'Satiated'
3259                 'e' 'Elated'.
3260 STRING nlabel slabel(a10).
3261 COMPUTE nlabel = VALUELABEL(n).
3262 COMPUTE slabel = VALUELABEL(s).
3263 LIST.
3264 BEGIN DATA.
3265
3266 0a
3267 1b
3268 2c
3269 3d
3270 4e
3271 5f
3272 6g
3273 END DATA.
3274 ])
3275 AT_CHECK([pspp -o pspp.csv valuelabel.sps])
3276 AT_CHECK([cat pspp.csv], [0], [dnl
3277 Table: Data List
3278 n,s,nlabel,slabel
3279 .,,,
3280 0,a,Very dissa,Wouldn't b
3281 1,b,Dissatisfi,Unhappy
3282 2,c,Neutral,Bored
3283 3,d,Satisfied,Satiated
3284 4,e,Very satis,Elated
3285 5,f,,
3286 6,g,,
3287 ])
3288 AT_CLEANUP
3289
3290 AT_SETUP([variables in expressions])
3291 AT_DATA([variables.sps], [dnl
3292 DATA LIST NOTABLE/N1 TO N5 1-5.
3293 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
3294 BEGIN DATA.
3295 12345
3296 6789
3297 END DATA.
3298
3299 COMPUTE P1=N1.
3300 COMPUTE P2=N2.
3301 COMPUTE P3=N3.
3302 COMPUTE P4=N4.
3303 COMPUTE P5=N5.
3304
3305 COMPUTE MC=NMISS(N1 TO N5).
3306 COMPUTE VC=NVALID(N1 TO N5).
3307
3308 COMPUTE S1=SYSMIS(N1).
3309 COMPUTE S2=SYSMIS(N2).
3310 COMPUTE S3=SYSMIS(N3).
3311 COMPUTE S4=SYSMIS(N4).
3312 COMPUTE S5=SYSMIS(N5).
3313
3314 COMPUTE M1=MISSING(N1).
3315 COMPUTE M2=MISSING(N2).
3316 COMPUTE M3=MISSING(N3).
3317 COMPUTE M4=MISSING(N4).
3318 COMPUTE M5=MISSING(N5).
3319
3320 COMPUTE V1=VALUE(N1).
3321 COMPUTE V2=VALUE(N2).
3322 COMPUTE V3=VALUE(N3).
3323 COMPUTE V4=VALUE(N4).
3324 COMPUTE V5=VALUE(N5).
3325
3326 FORMATS ALL (F1).
3327
3328 LIST.
3329 ])
3330 AT_CHECK([pspp -o pspp.csv variables.sps])
3331 AT_CHECK([cat pspp.csv], [0], [dnl
3332 Table: Data List
3333 N1,N2,N3,N4,N5,P1,P2,P3,P4,P5,MC,VC,S1,S2,S3,S4,S5,M1,M2,M3,M4,M5,V1,V2,V3,V4,V5
3334 1,2,3,4,5,.,2,.,.,.,4,1,0,0,0,0,0,1,0,1,1,1,1,2,3,4,5
3335 6,7,8,9,.,6,7,8,9,.,1,4,0,0,0,0,1,0,0,0,0,1,6,7,8,9,.
3336 ])
3337 AT_CLEANUP
3338
3339 AT_SETUP([vectors in expressions])
3340 AT_DATA([vectors.sps], [dnl
3341 DATA LIST NOTABLE /N1 TO N5 1-5.
3342 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
3343 BEGIN DATA.
3344 12345
3345 6789
3346 END DATA.
3347
3348 VECTOR N=N1 TO N5.
3349 VECTOR X(5).
3350 LOOP I=1 TO 5.
3351 COMPUTE X(I)=N(I) + 1.
3352 END LOOP.
3353
3354 FORMATS ALL (F2).
3355
3356 LIST.
3357 ])
3358 AT_CHECK([pspp -o pspp.csv vectors.sps])
3359 AT_CHECK([cat pspp.csv], [0], [dnl
3360 Table: Data List
3361 N1,N2,N3,N4,N5,X1,X2,X3,X4,X5,I
3362 1,2,3,4,5,.,3,.,.,.,5
3363 6,7,8,9,.,7,8,9,10,.,5
3364 ])
3365 AT_CLEANUP