expressions: Minor error message improvement.
[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 AT_BANNER([expressions])
17
18 AT_SETUP([expressions - numeric syntax])
19 AT_KEYWORDS([expression expressions evaluate])
20 AT_DATA([evaluate-base.sps], [dnl
21 SET EPOCH 1940.
22 DEBUG EVALUATE SET opt.
23 DEBUG EVALUATE /1e2.
24 DEBUG EVALUATE /1e+2.
25 DEBUG EVALUATE /1e-2.
26 DEBUG EVALUATE /1e-99.
27 ])
28
29 for opt in OPT NOOPT; do
30     AS_BOX([$opt])
31     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
32     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
33 1e2 => 100.00
34
35 1e+2 => 100.00
36
37 1e-2 => 0.01
38
39 1e-99 => 0.00
40 ])
41 done
42 AT_CLEANUP
43
44 AT_SETUP([expressions - coercion to and from Boolean])
45 AT_KEYWORDS([expression expressions evaluate])
46 AT_DATA([evaluate-base.sps], [dnl
47 SET EPOCH 1940.
48 DEBUG EVALUATE SET opt.
49 DEBUG EVALUATE/0 AND 1.
50 DEBUG EVALUATE/$true AND 1.
51 DEBUG EVALUATE/1 OR $false.
52 DEBUG EVALUATE/1 OR $sysmis.
53 DEBUG EVALUATE/2 OR $sysmis.
54 DEBUG EVALUATE/1 AND 3.
55 ])
56
57 for opt in OPT NOOPT; do
58     AS_BOX([$opt])
59     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
60     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
61 0 AND 1 => false
62
63 $true AND 1 => true
64
65 1 OR $false => true
66
67 1 OR $sysmis => true
68
69 evaluate.sps:7.16-7.27: error: DEBUG EVALUATE: The operands of OR must have
70 value 0 or 1.
71     7 | DEBUG EVALUATE/2 OR $sysmis.
72       |                ^~~~~~~~~~~~
73
74 evaluate.sps:7.16: note: DEBUG EVALUATE: This operand with unexpected value 2
75 will be treated as 0.
76     7 | DEBUG EVALUATE/2 OR $sysmis.
77       |                ^
78
79 2 OR $sysmis => sysmis
80
81 evaluate.sps:8.16-8.22: error: DEBUG EVALUATE: The operands of AND must have
82 value 0 or 1.
83     8 | DEBUG EVALUATE/1 AND 3.
84       |                ^~~~~~~
85
86 evaluate.sps:8.22: note: DEBUG EVALUATE: This operand with unexpected value 3
87 will be treated as 0.
88     8 | DEBUG EVALUATE/1 AND 3.
89       |                      ^
90
91 1 AND 3 => false
92 ])
93 done
94 AT_CLEANUP
95
96 AT_SETUP([expressions - addition and subtraction])
97 AT_KEYWORDS([expression expressions evaluate])
98 AT_DATA([evaluate-base.sps], [dnl
99 SET EPOCH 1940.
100 DEBUG EVALUATE SET opt.
101 DEBUG EVALUATE /1 + $true.
102 DEBUG EVALUATE /$sysmis + 1.
103 DEBUG EVALUATE /7676 + $sysmis.
104 DEBUG EVALUATE /1 +3 - 2 +4 - 5.
105 DEBUG EVALUATE /$true - 4/3.
106 DEBUG EVALUATE /1 - 2.
107 DEBUG EVALUATE /52 -23.
108
109 DEBUG EVALUATE /('foo') + 5.
110 DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
111 DEBUG EVALUATE /'foo' + 'bar'.       /* Lexical concatenation succeeds.
112
113 DEBUG EVALUATE /'string' - 1e10.
114 DEBUG EVALUATE /9.5 - ''.
115
116 DEBUG EVALUATE /F2.0 + 3.
117
118 /* Bug #62557.
119 DEBUG EVALUATE (y=3)(x=2) /(1 - y) + (1 - x).
120 DEBUG EVALUATE (y=3)(x=2) /((1 - y) + (1 - x)).
121 DEBUG EVALUATE (y=3)(x=2) /(1-y) + (1-x).
122 DEBUG EVALUATE (y=3)(x=2) /( (1-y) + (1-x) ).
123 ])
124
125 for opt in OPT NOOPT; do
126     AS_BOX([$opt])
127     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
128     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
129 1 + $true => 2.00
130
131 $sysmis + 1 => sysmis
132
133 7676 + $sysmis => sysmis
134
135 1 +3 - 2 +4 - 5 => 1.00
136
137 $true - 4/3 => -0.33
138
139 1 - 2 => -1.00
140
141 52 -23 => 29.00
142
143 evaluate.sps:11.18-11.27: error: DEBUG EVALUATE: Both operands of + must be
144 numeric.
145    11 | DEBUG EVALUATE /('foo') + 5.
146       |                  ^~~~~~~~~~
147
148 evaluate.sps:11.18-11.22: note: DEBUG EVALUATE: This operand has type 'string'.
149    11 | DEBUG EVALUATE /('foo') + 5.
150       |                  ^~~~~
151
152 evaluate.sps:11.27: note: DEBUG EVALUATE: This operand has type 'number'.
153    11 | DEBUG EVALUATE /('foo') + 5.
154       |                           ^
155
156 ('foo') + 5 => error
157
158 evaluate.sps:12.18-12.32: error: DEBUG EVALUATE: Both operands of + must be
159 numeric.
160    12 | DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
161       |                  ^~~~~~~~~~~~~~~
162
163 evaluate.sps:12.18-12.22: note: DEBUG EVALUATE: This operand has type 'string'.
164    12 | DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
165       |                  ^~~~~
166
167 evaluate.sps:12.28-12.32: note: DEBUG EVALUATE: This operand has type 'string'.
168    12 | DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
169       |                            ^~~~~
170
171 ('foo') + ('bar') => error
172
173 'foo' + 'bar' => "foobar"
174
175 evaluate.sps:15.17-15.31: error: DEBUG EVALUATE: Both operands of - must be
176 numeric.
177    15 | DEBUG EVALUATE /'string' - 1e10.
178       |                 ^~~~~~~~~~~~~~~
179
180 evaluate.sps:15.17-15.24: note: DEBUG EVALUATE: This operand has type 'string'.
181    15 | DEBUG EVALUATE /'string' - 1e10.
182       |                 ^~~~~~~~
183
184 evaluate.sps:15.26-15.31: note: DEBUG EVALUATE: This operand has type 'number'.
185    15 | DEBUG EVALUATE /'string' - 1e10.
186       |                          ^~~~~~
187
188 'string' - 1e10 => error
189
190 evaluate.sps:16.17-16.24: error: DEBUG EVALUATE: Both operands of - must be
191 numeric.
192    16 | DEBUG EVALUATE /9.5 - ''.
193       |                 ^~~~~~~~
194
195 evaluate.sps:16.17-16.19: note: DEBUG EVALUATE: This operand has type 'number'.
196    16 | DEBUG EVALUATE /9.5 - ''.
197       |                 ^~~
198
199 evaluate.sps:16.23-16.24: note: DEBUG EVALUATE: This operand has type 'string'.
200    16 | DEBUG EVALUATE /9.5 - ''.
201       |                       ^~
202
203 9.5 - '' => error
204
205 evaluate.sps:18.17-18.24: error: DEBUG EVALUATE: Both operands of + must be
206 numeric.
207    18 | DEBUG EVALUATE /F2.0 + 3.
208       |                 ^~~~~~~~
209
210 evaluate.sps:18.17-18.20: note: DEBUG EVALUATE: This operand has type 'format'.
211    18 | DEBUG EVALUATE /F2.0 + 3.
212       |                 ^~~~
213
214 evaluate.sps:18.24: note: DEBUG EVALUATE: This operand has type 'number'.
215    18 | DEBUG EVALUATE /F2.0 + 3.
216       |                        ^
217
218 F2.0 + 3 => error
219
220 (1 - y) + (1 - x) => -3.00
221
222 ((1 - y) + (1 - x)) => -3.00
223
224 (1-y) + (1-x) => -3.00
225
226 ( (1-y) + (1-x) ) => -3.00
227 ])
228 done
229 AT_CLEANUP
230
231 AT_SETUP([expressions - multiplication and division])
232 AT_KEYWORDS([expression expressions evaluate])
233 AT_DATA([evaluate-base.sps], [dnl
234 SET EPOCH 1940.
235 DEBUG EVALUATE SET opt.
236 DEBUG EVALUATE /5 * 10.
237 DEBUG EVALUATE /10 * $true.
238 DEBUG EVALUATE /$true * 5.
239 DEBUG EVALUATE /1.5 * $true.
240 DEBUG EVALUATE /$sysmis * 15.
241 DEBUG EVALUATE /8.5 / $sysmis.
242 DEBUG EVALUATE /2 * 5 / 10.
243 DEBUG EVALUATE /1 / 2.
244 DEBUG EVALUATE /2 / 5.
245 DEBUG EVALUATE /12 / 3 / 2.
246
247 DEBUG EVALUATE /'x' * 1.
248 DEBUG EVALUATE /2 / 'x'.
249 ])
250
251 for opt in OPT NOOPT; do
252     AS_BOX([$opt])
253     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
254     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
255 5 * 10 => 50.00
256
257 10 * $true => 10.00
258
259 $true * 5 => 5.00
260
261 1.5 * $true => 1.50
262
263 $sysmis * 15 => sysmis
264
265 8.5 / $sysmis => sysmis
266
267 2 * 5 / 10 => 1.00
268
269 1 / 2 => 0.50
270
271 2 / 5 => 0.40
272
273 12 / 3 / 2 => 2.00
274
275 evaluate.sps:14.17-14.23: error: DEBUG EVALUATE: Both operands of * must be
276 numeric.
277    14 | DEBUG EVALUATE /'x' * 1.
278       |                 ^~~~~~~
279
280 evaluate.sps:14.17-14.19: note: DEBUG EVALUATE: This operand has type 'string'.
281    14 | DEBUG EVALUATE /'x' * 1.
282       |                 ^~~
283
284 evaluate.sps:14.23: note: DEBUG EVALUATE: This operand has type 'number'.
285    14 | DEBUG EVALUATE /'x' * 1.
286       |                       ^
287
288 'x' * 1 => error
289
290 evaluate.sps:15.17-15.23: error: DEBUG EVALUATE: Both operands of / must be
291 numeric.
292    15 | DEBUG EVALUATE /2 / 'x'.
293       |                 ^~~~~~~
294
295 evaluate.sps:15.17: note: DEBUG EVALUATE: This operand has type 'number'.
296    15 | DEBUG EVALUATE /2 / 'x'.
297       |                 ^
298
299 evaluate.sps:15.21-15.23: note: DEBUG EVALUATE: This operand has type 'string'.
300    15 | DEBUG EVALUATE /2 / 'x'.
301       |                     ^~~
302
303 2 / 'x' => error
304 ])
305 done
306 AT_CLEANUP
307
308 AT_SETUP([expressions - exponentiation])
309 AT_KEYWORDS([expression expressions evaluate])
310 AT_DATA([evaluate-base.sps], [dnl
311 SET EPOCH 1940.
312 DEBUG EVALUATE SET opt.
313 DEBUG EVALUATE /2**8.
314 DEBUG EVALUATE /(2**3)**4.
315 DEBUG EVALUATE /2**3**4.
316 DEBUG EVALUATE /-2**2.
317 DEBUG EVALUATE /-2**-3**-4.
318 DEBUG EVALUATE /-((2**-3)**-4).
319 ])
320
321 for opt in OPT NOOPT; do
322     AS_BOX([$opt])
323     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
324     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
325 2**8 => 256.00
326
327 (2**3)**4 => 4096.00
328
329 evaluate.sps:5.17-5.23: warning: DEBUG EVALUATE: The exponentiation operator
330 (`**') is left-associative: `a**b**c' equals `(a**b)**c', not `a**(b**c)'.  To
331 disable this warning, insert parentheses.
332     5 | DEBUG EVALUATE /2**3**4.
333       |                 ^~~~~~~
334
335 2**3**4 => 4096.00
336
337 -2**2 => -4.00
338
339 evaluate.sps:7.17-7.26: warning: DEBUG EVALUATE: The exponentiation operator
340 (`**') is left-associative: `a**b**c' equals `(a**b)**c', not `a**(b**c)'.  To
341 disable this warning, insert parentheses.
342     7 | DEBUG EVALUATE /-2**-3**-4.
343       |                 ^~~~~~~~~~
344
345 -2**-3**-4 => -4096.00
346
347 -((2**-3)**-4) => -4096.00
348 ])
349 done
350 AT_CLEANUP
351
352 AT_SETUP([expressions - unary minus])
353 AT_KEYWORDS([expression expressions evaluate])
354 AT_DATA([evaluate-base.sps], [dnl
355 SET EPOCH 1940.
356 DEBUG EVALUATE SET opt.
357 DEBUG EVALUATE /2+-3.
358 DEBUG EVALUATE /2*-3.
359 DEBUG EVALUATE /-3**2.
360 DEBUG EVALUATE /(-3)**2.
361 DEBUG EVALUATE /-(3**2).
362 DEBUG EVALUATE /2**-1.
363 DEBUG EVALUATE /0**0.
364 DEBUG EVALUATE /0**-1.
365 DEBUG EVALUATE /(-3)**1.5.
366 ])
367
368 for opt in OPT NOOPT; do
369     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
370     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
371 2+-3 => -1.00
372
373 2*-3 => -6.00
374
375 -3**2 => -9.00
376
377 (-3)**2 => 9.00
378
379 -(3**2) => -9.00
380
381 2**-1 => 0.50
382
383 0**0 => sysmis
384
385 0**-1 => sysmis
386
387 (-3)**1.5 => sysmis
388 ])
389 done
390 AT_CLEANUP
391
392 AT_SETUP([expressions - AND truth table])
393 AT_KEYWORDS([expression expressions evaluate])
394 AT_DATA([evaluate-base.sps], [dnl
395 SET EPOCH 1940.
396 DEBUG EVALUATE SET opt.
397 DEBUG EVALUATE /$false AND $false.
398 DEBUG EVALUATE /$false AND $true.
399 DEBUG EVALUATE /$false AND $sysmis.
400 DEBUG EVALUATE /$true AND $false.
401 DEBUG EVALUATE /$true AND $true.
402 DEBUG EVALUATE /$true AND $sysmis.
403 DEBUG EVALUATE /$sysmis AND $false.
404 DEBUG EVALUATE /$sysmis AND $true.
405 DEBUG EVALUATE /$sysmis AND $sysmis.
406 DEBUG EVALUATE /$false & $false.
407 DEBUG EVALUATE /$false & $true.
408 DEBUG EVALUATE /$false & $sysmis.
409 DEBUG EVALUATE /$true & $false.
410 DEBUG EVALUATE /$true & $true.
411 DEBUG EVALUATE /$true & $sysmis.
412 DEBUG EVALUATE /$sysmis & $false.
413 DEBUG EVALUATE /$sysmis & $true.
414 DEBUG EVALUATE /$sysmis & $sysmis.
415 ])
416
417 for opt in OPT NOOPT; do
418     AS_BOX([$opt])
419     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
420     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
421 $false AND $false => false
422
423 $false AND $true => false
424
425 $false AND $sysmis => false
426
427 $true AND $false => false
428
429 $true AND $true => true
430
431 $true AND $sysmis => sysmis
432
433 $sysmis AND $false => false
434
435 $sysmis AND $true => sysmis
436
437 $sysmis AND $sysmis => sysmis
438
439 $false & $false => false
440
441 $false & $true => false
442
443 $false & $sysmis => false
444
445 $true & $false => false
446
447 $true & $true => true
448
449 $true & $sysmis => sysmis
450
451 $sysmis & $false => false
452
453 $sysmis & $true => sysmis
454
455 $sysmis & $sysmis => sysmis
456 ])
457 done
458 AT_CLEANUP
459
460 AT_SETUP([expressions - OR truth table])
461 AT_KEYWORDS([expression expressions evaluate])
462 AT_DATA([evaluate-base.sps], [dnl
463 SET EPOCH 1940.
464 DEBUG EVALUATE SET opt.
465 DEBUG EVALUATE /$false OR $false.
466 DEBUG EVALUATE /$false OR $true.
467 DEBUG EVALUATE /$false OR $sysmis.
468 DEBUG EVALUATE /$true OR $false.
469 DEBUG EVALUATE /$true OR $true.
470 DEBUG EVALUATE /$true OR $sysmis.
471 DEBUG EVALUATE /$sysmis OR $false.
472 DEBUG EVALUATE /$sysmis OR $true.
473 DEBUG EVALUATE /$sysmis OR $sysmis.
474 DEBUG EVALUATE /$false | $false.
475 DEBUG EVALUATE /$false | $true.
476 DEBUG EVALUATE /$false | $sysmis.
477 DEBUG EVALUATE /$true | $false.
478 DEBUG EVALUATE /$true | $true.
479 DEBUG EVALUATE /$true | $sysmis.
480 DEBUG EVALUATE /$sysmis | $false.
481 DEBUG EVALUATE /$sysmis | $true.
482 DEBUG EVALUATE /$sysmis | $sysmis.
483 ])
484
485 for opt in OPT NOOPT; do
486     AS_BOX([$opt])
487     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
488     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
489 $false OR $false => false
490
491 $false OR $true => true
492
493 $false OR $sysmis => sysmis
494
495 $true OR $false => true
496
497 $true OR $true => true
498
499 $true OR $sysmis => true
500
501 $sysmis OR $false => sysmis
502
503 $sysmis OR $true => true
504
505 $sysmis OR $sysmis => sysmis
506
507 $false | $false => false
508
509 $false | $true => true
510
511 $false | $sysmis => sysmis
512
513 $true | $false => true
514
515 $true | $true => true
516
517 $true | $sysmis => true
518
519 $sysmis | $false => sysmis
520
521 $sysmis | $true => true
522
523 $sysmis | $sysmis => sysmis
524 ])
525 done
526 AT_CLEANUP
527
528 AT_SETUP([expressions - NOT truth table])
529 AT_KEYWORDS([expression expressions evaluate])
530 AT_DATA([evaluate-base.sps], [dnl
531 SET EPOCH 1940.
532 DEBUG EVALUATE SET opt.
533 DEBUG EVALUATE /not $false.
534 DEBUG EVALUATE /not 0.
535 DEBUG EVALUATE /not 2.5.
536 DEBUG EVALUATE /not $true.
537 DEBUG EVALUATE /not 1.
538 DEBUG EVALUATE /not $sysmis.
539 DEBUG EVALUATE /~ $false.
540 DEBUG EVALUATE /~ 0.
541 DEBUG EVALUATE /~ 2.5.
542 DEBUG EVALUATE /~ $true.
543 DEBUG EVALUATE /~ 1.
544 DEBUG EVALUATE /~ $sysmis.
545 ])
546
547 for opt in OPT NOOPT; do
548     AS_BOX([$opt])
549     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
550     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
551 not $false => true
552
553 not 0 => true
554
555 evaluate.sps:5.17-5.23: error: DEBUG EVALUATE: The operand of NOT must have
556 value 0 or 1.
557     5 | DEBUG EVALUATE /not 2.5.
558       |                 ^~~~~~~
559
560 evaluate.sps:5.21-5.23: note: DEBUG EVALUATE: This operand with unexpected
561 value 2.5 will be treated as 0.
562     5 | DEBUG EVALUATE /not 2.5.
563       |                     ^~~
564
565 not 2.5 => true
566
567 not $true => false
568
569 not 1 => false
570
571 not $sysmis => sysmis
572
573 ~ $false => true
574
575 ~ 0 => true
576
577 evaluate.sps:11.17-11.21: error: DEBUG EVALUATE: The operand of NOT must have
578 value 0 or 1.
579    11 | DEBUG EVALUATE /~ 2.5.
580       |                 ^~~~~
581
582 evaluate.sps:11.19-11.21: note: DEBUG EVALUATE: This operand with unexpected
583 value 2.5 will be treated as 0.
584    11 | DEBUG EVALUATE /~ 2.5.
585       |                   ^~~
586
587 ~ 2.5 => true
588
589 ~ $true => false
590
591 ~ 1 => false
592
593 ~ $sysmis => sysmis
594 ])
595 done
596 AT_CLEANUP
597
598 AT_SETUP([expressions - = <= <])
599 AT_KEYWORDS([expression expressions evaluate eq le lt])
600 AT_DATA([evaluate-base.sps], [dnl
601 SET EPOCH 1940.
602 DEBUG EVALUATE SET opt.
603 DEBUG EVALUATE /1 eq 1.
604 DEBUG EVALUATE /1 = 1.
605 DEBUG EVALUATE /1 eq 2.
606 DEBUG EVALUATE /2 = 3.
607 DEBUG EVALUATE /1 eq 'foobar'.
608 DEBUG EVALUATE /'baz' = 10.
609 DEBUG EVALUATE /'baz' = f8.2.
610 DEBUG EVALUATE /'baz' = 'baz'.
611 DEBUG EVALUATE /'quux' = 'bar'.
612 DEBUG EVALUATE /'bar  ' = 'bar'.
613 DEBUG EVALUATE /'asdf     ' = 'asdf  '.
614 DEBUG EVALUATE /'asdfj     ' = 'asdf'.
615 DEBUG EVALUATE /1 + 2 = 3.
616 DEBUG EVALUATE /1 >= 2 = 2 ge 3.
617 DEBUG EVALUATE /3 ne 2 != 1.
618 DEBUG EVALUATE /3 > 2 > 1.
619
620 DEBUG EVALUATE /1 <= 2.
621 DEBUG EVALUATE /2.5 <= 1.5.
622 DEBUG EVALUATE /1 le 2.
623 DEBUG EVALUATE /2 <= 2.
624 DEBUG EVALUATE /2 le 2.
625 DEBUG EVALUATE /2 < = 2.
626 DEBUG EVALUATE /1 <= 'foobar'.
627 DEBUG EVALUATE /'baz' <= 10.
628 DEBUG EVALUATE /'quux' <= 5.55.
629 DEBUG EVALUATE /'0123' <= '0123'.
630 DEBUG EVALUATE /'0123' <= '0124'.
631 DEBUG EVALUATE /'0124' le '0123'.
632 DEBUG EVALUATE /'0123  ' <= '0123'.
633 DEBUG EVALUATE /'0123' le '0123  '.
634
635 DEBUG EVALUATE /1 < 2.
636 DEBUG EVALUATE /2.5 < 1.5.
637 DEBUG EVALUATE /3.5 lt 4.
638 DEBUG EVALUATE /4 lt 3.5
639 DEBUG EVALUATE /1 lt 'foobar'.
640 DEBUG EVALUATE /5 lt 'foobar'.
641 DEBUG EVALUATE /'baz' < 10.
642 DEBUG EVALUATE /'quux' < 5.55.
643 DEBUG EVALUATE /'0123' lt '0123'.
644 DEBUG EVALUATE /'0123' < '0124'.
645 DEBUG EVALUATE /'0124' lt '0123'.
646 DEBUG EVALUATE /'0123  ' < '0123'.
647 DEBUG EVALUATE /'0123' lt '0123  '.
648 ])
649
650 for opt in OPT NOOPT; do
651     AS_BOX([$opt])
652     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
653     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
654 1 eq 1 => true
655
656 1 = 1 => true
657
658 1 eq 2 => false
659
660 2 = 3 => false
661
662 evaluate.sps:7.17-7.29: error: DEBUG EVALUATE: Both operands of EQ must have
663 the same type.
664     7 | DEBUG EVALUATE /1 eq 'foobar'.
665       |                 ^~~~~~~~~~~~~
666
667 evaluate.sps:7.17: note: DEBUG EVALUATE: This operand has type 'number'.
668     7 | DEBUG EVALUATE /1 eq 'foobar'.
669       |                 ^
670
671 evaluate.sps:7.22-7.29: note: DEBUG EVALUATE: This operand has type 'string'.
672     7 | DEBUG EVALUATE /1 eq 'foobar'.
673       |                      ^~~~~~~~
674
675 1 eq 'foobar' => error
676
677 evaluate.sps:8.17-8.26: error: DEBUG EVALUATE: Both operands of = must have the
678 same type.
679     8 | DEBUG EVALUATE /'baz' = 10.
680       |                 ^~~~~~~~~~
681
682 evaluate.sps:8.17-8.21: note: DEBUG EVALUATE: This operand has type 'string'.
683     8 | DEBUG EVALUATE /'baz' = 10.
684       |                 ^~~~~
685
686 evaluate.sps:8.25-8.26: note: DEBUG EVALUATE: This operand has type 'number'.
687     8 | DEBUG EVALUATE /'baz' = 10.
688       |                         ^~
689
690 'baz' = 10 => error
691
692 evaluate.sps:9.17-9.28: error: DEBUG EVALUATE: Both operands of = must have the
693 same type.
694     9 | DEBUG EVALUATE /'baz' = f8.2.
695       |                 ^~~~~~~~~~~~
696
697 evaluate.sps:9.17-9.21: note: DEBUG EVALUATE: This operand has type 'string'.
698     9 | DEBUG EVALUATE /'baz' = f8.2.
699       |                 ^~~~~
700
701 evaluate.sps:9.25-9.28: note: DEBUG EVALUATE: This operand has type 'format'.
702     9 | DEBUG EVALUATE /'baz' = f8.2.
703       |                         ^~~~
704
705 'baz' = f8.2 => error
706
707 'baz' = 'baz' => true
708
709 'quux' = 'bar' => false
710
711 'bar  ' = 'bar' => true
712
713 'asdf     ' = 'asdf  ' => true
714
715 'asdfj     ' = 'asdf' => false
716
717 1 + 2 = 3 => true
718
719 evaluate.sps:16.17-16.31: warning: DEBUG EVALUATE: Chaining relational
720 operators (e.g. `a < b < c') will not produce the mathematically expected
721 result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b <
722 c').  To disable this warning, insert parentheses.
723    16 | DEBUG EVALUATE /1 >= 2 = 2 ge 3.
724       |                 ^~~~~~~~~~~~~~~
725
726 1 >= 2 = 2 ge 3 => false
727
728 evaluate.sps:17.24: error: DEBUG EVALUATE: Syntax error expecting end of
729 command.
730    17 | DEBUG EVALUATE /3 ne 2 != 1.
731       |                        ^
732
733 3 ne 2 != 1 => error
734
735 evaluate.sps:18.17-18.25: warning: DEBUG EVALUATE: Chaining relational
736 operators (e.g. `a < b < c') will not produce the mathematically expected
737 result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b <
738 c').  To disable this warning, insert parentheses.
739    18 | DEBUG EVALUATE /3 > 2 > 1.
740       |                 ^~~~~~~~~
741
742 3 > 2 > 1 => false
743
744 1 <= 2 => true
745
746 2.5 <= 1.5 => false
747
748 1 le 2 => true
749
750 2 <= 2 => true
751
752 2 le 2 => true
753
754 evaluate.sps:25.21: error: DEBUG EVALUATE: Syntax error parsing expression.
755    25 | DEBUG EVALUATE /2 < = 2.
756       |                     ^
757
758 2 < = 2 => error
759
760 evaluate.sps:26.17-26.29: error: DEBUG EVALUATE: Both operands of <= must have
761 the same type.
762    26 | DEBUG EVALUATE /1 <= 'foobar'.
763       |                 ^~~~~~~~~~~~~
764
765 evaluate.sps:26.17: note: DEBUG EVALUATE: This operand has type 'number'.
766    26 | DEBUG EVALUATE /1 <= 'foobar'.
767       |                 ^
768
769 evaluate.sps:26.22-26.29: note: DEBUG EVALUATE: This operand has type 'string'.
770    26 | DEBUG EVALUATE /1 <= 'foobar'.
771       |                      ^~~~~~~~
772
773 1 <= 'foobar' => error
774
775 evaluate.sps:27.17-27.27: error: DEBUG EVALUATE: Both operands of <= must have
776 the same type.
777    27 | DEBUG EVALUATE /'baz' <= 10.
778       |                 ^~~~~~~~~~~
779
780 evaluate.sps:27.17-27.21: note: DEBUG EVALUATE: This operand has type 'string'.
781    27 | DEBUG EVALUATE /'baz' <= 10.
782       |                 ^~~~~
783
784 evaluate.sps:27.26-27.27: note: DEBUG EVALUATE: This operand has type 'number'.
785    27 | DEBUG EVALUATE /'baz' <= 10.
786       |                          ^~
787
788 'baz' <= 10 => error
789
790 evaluate.sps:28.17-28.30: error: DEBUG EVALUATE: Both operands of <= must have
791 the same type.
792    28 | DEBUG EVALUATE /'quux' <= 5.55.
793       |                 ^~~~~~~~~~~~~~
794
795 evaluate.sps:28.17-28.22: note: DEBUG EVALUATE: This operand has type 'string'.
796    28 | DEBUG EVALUATE /'quux' <= 5.55.
797       |                 ^~~~~~
798
799 evaluate.sps:28.27-28.30: note: DEBUG EVALUATE: This operand has type 'number'.
800    28 | DEBUG EVALUATE /'quux' <= 5.55.
801       |                           ^~~~
802
803 'quux' <= 5.55 => error
804
805 '0123' <= '0123' => true
806
807 '0123' <= '0124' => true
808
809 '0124' le '0123' => false
810
811 '0123  ' <= '0123' => true
812
813 '0123' le '0123  ' => true
814
815 1 < 2 => true
816
817 2.5 < 1.5 => false
818
819 3.5 lt 4 => true
820
821 4 lt 3.5 => false
822
823 evaluate.sps:39.17-39.29: error: DEBUG EVALUATE: Both operands of < must have
824 the same type.
825    39 | DEBUG EVALUATE /1 lt 'foobar'.
826       |                 ^~~~~~~~~~~~~
827
828 evaluate.sps:39.17: note: DEBUG EVALUATE: This operand has type 'number'.
829    39 | DEBUG EVALUATE /1 lt 'foobar'.
830       |                 ^
831
832 evaluate.sps:39.22-39.29: note: DEBUG EVALUATE: This operand has type 'string'.
833    39 | DEBUG EVALUATE /1 lt 'foobar'.
834       |                      ^~~~~~~~
835
836 1 lt 'foobar' => error
837
838 evaluate.sps:40.17-40.29: error: DEBUG EVALUATE: Both operands of < must have
839 the same type.
840    40 | DEBUG EVALUATE /5 lt 'foobar'.
841       |                 ^~~~~~~~~~~~~
842
843 evaluate.sps:40.17: note: DEBUG EVALUATE: This operand has type 'number'.
844    40 | DEBUG EVALUATE /5 lt 'foobar'.
845       |                 ^
846
847 evaluate.sps:40.22-40.29: note: DEBUG EVALUATE: This operand has type 'string'.
848    40 | DEBUG EVALUATE /5 lt 'foobar'.
849       |                      ^~~~~~~~
850
851 5 lt 'foobar' => error
852
853 evaluate.sps:41.17-41.26: error: DEBUG EVALUATE: Both operands of < must have
854 the same type.
855    41 | DEBUG EVALUATE /'baz' < 10.
856       |                 ^~~~~~~~~~
857
858 evaluate.sps:41.17-41.21: note: DEBUG EVALUATE: This operand has type 'string'.
859    41 | DEBUG EVALUATE /'baz' < 10.
860       |                 ^~~~~
861
862 evaluate.sps:41.25-41.26: note: DEBUG EVALUATE: This operand has type 'number'.
863    41 | DEBUG EVALUATE /'baz' < 10.
864       |                         ^~
865
866 'baz' < 10 => error
867
868 evaluate.sps:42.17-42.29: error: DEBUG EVALUATE: Both operands of < must have
869 the same type.
870    42 | DEBUG EVALUATE /'quux' < 5.55.
871       |                 ^~~~~~~~~~~~~
872
873 evaluate.sps:42.17-42.22: note: DEBUG EVALUATE: This operand has type 'string'.
874    42 | DEBUG EVALUATE /'quux' < 5.55.
875       |                 ^~~~~~
876
877 evaluate.sps:42.26-42.29: note: DEBUG EVALUATE: This operand has type 'number'.
878    42 | DEBUG EVALUATE /'quux' < 5.55.
879       |                          ^~~~
880
881 'quux' < 5.55 => error
882
883 '0123' lt '0123' => false
884
885 '0123' < '0124' => true
886
887 '0124' lt '0123' => false
888
889 '0123  ' < '0123' => false
890
891 '0123' lt '0123  ' => false
892 ])
893 done
894 AT_CLEANUP
895
896 AT_SETUP([expressions - >= > <>])
897 AT_KEYWORDS([expression expressions evaluate ge gt ne])
898 AT_DATA([evaluate-base.sps], [dnl
899 SET EPOCH 1940.
900 DEBUG EVALUATE SET opt.
901 DEBUG EVALUATE /1 >= 2.
902 DEBUG EVALUATE /2.5 >= 1.5
903 DEBUG EVALUATE /1 ge 2.
904 DEBUG EVALUATE /2 >= 2.
905 DEBUG EVALUATE /2 ge 2.
906 DEBUG EVALUATE /2 > = 2.
907 DEBUG EVALUATE /1 >= 'foobar'.
908 DEBUG EVALUATE /5 ge 'foobar'.
909 DEBUG EVALUATE /'baz' ge 10.
910 DEBUG EVALUATE /'0123' ge '0123'.
911 DEBUG EVALUATE /'0123' >= '0124'.
912 DEBUG EVALUATE /'0124' >= '0123'.
913 DEBUG EVALUATE /'0123  ' ge '0123'.
914 DEBUG EVALUATE /'0123' >= '0123 '.
915
916 DEBUG EVALUATE /1 > 2.
917 DEBUG EVALUATE /2.5 > 1.5
918 DEBUG EVALUATE /3.5 gt 4.
919 DEBUG EVALUATE /4 gt 3.5
920 DEBUG EVALUATE /1 gt 'foobar'.
921 DEBUG EVALUATE /'baz' > 10.
922 DEBUG EVALUATE /'0123' > '0123'.
923 DEBUG EVALUATE /'0123' > '0124'.
924 DEBUG EVALUATE /'0124' > '0123'.
925 DEBUG EVALUATE /'0123   ' > '0123'.
926 DEBUG EVALUATE /'0123    ' > '0123 '.
927
928 DEBUG EVALUATE /1 ne 1.
929 DEBUG EVALUATE /1 ~= 1.
930 DEBUG EVALUATE /1 <> 2.
931 DEBUG EVALUATE /2 ne 3.
932 DEBUG EVALUATE /1 ~= 'foobar'.
933 DEBUG EVALUATE /'baz' ne 10.
934 DEBUG EVALUATE /'quux' ~= 5.55.
935 DEBUG EVALUATE /'foobar' <> 'foobar'.
936 DEBUG EVALUATE /'quux' ne 'bar'.
937 DEBUG EVALUATE /'bar   ' <> 'bar'.
938 DEBUG EVALUATE /'asdf       ' ~= "asdf   ".
939 DEBUG EVALUATE /1 < > 1.
940 DEBUG EVALUATE /1 ~ = 1.
941 ])
942
943 for opt in OPT NOOPT; do
944     AS_BOX([$opt])
945     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
946     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
947 1 >= 2 => false
948
949 2.5 >= 1.5 => true
950
951 1 ge 2 => false
952
953 2 >= 2 => true
954
955 2 ge 2 => true
956
957 evaluate.sps:8.21: error: DEBUG EVALUATE: Syntax error parsing expression.
958     8 | DEBUG EVALUATE /2 > = 2.
959       |                     ^
960
961 2 > = 2 => error
962
963 evaluate.sps:9.17-9.29: error: DEBUG EVALUATE: Both operands of >= must have
964 the same type.
965     9 | DEBUG EVALUATE /1 >= 'foobar'.
966       |                 ^~~~~~~~~~~~~
967
968 evaluate.sps:9.17: note: DEBUG EVALUATE: This operand has type 'number'.
969     9 | DEBUG EVALUATE /1 >= 'foobar'.
970       |                 ^
971
972 evaluate.sps:9.22-9.29: note: DEBUG EVALUATE: This operand has type 'string'.
973     9 | DEBUG EVALUATE /1 >= 'foobar'.
974       |                      ^~~~~~~~
975
976 1 >= 'foobar' => error
977
978 evaluate.sps:10.17-10.29: error: DEBUG EVALUATE: Both operands of >= must have
979 the same type.
980    10 | DEBUG EVALUATE /5 ge 'foobar'.
981       |                 ^~~~~~~~~~~~~
982
983 evaluate.sps:10.17: note: DEBUG EVALUATE: This operand has type 'number'.
984    10 | DEBUG EVALUATE /5 ge 'foobar'.
985       |                 ^
986
987 evaluate.sps:10.22-10.29: note: DEBUG EVALUATE: This operand has type 'string'.
988    10 | DEBUG EVALUATE /5 ge 'foobar'.
989       |                      ^~~~~~~~
990
991 5 ge 'foobar' => error
992
993 evaluate.sps:11.17-11.27: error: DEBUG EVALUATE: Both operands of >= must have
994 the same type.
995    11 | DEBUG EVALUATE /'baz' ge 10.
996       |                 ^~~~~~~~~~~
997
998 evaluate.sps:11.17-11.21: note: DEBUG EVALUATE: This operand has type 'string'.
999    11 | DEBUG EVALUATE /'baz' ge 10.
1000       |                 ^~~~~
1001
1002 evaluate.sps:11.26-11.27: note: DEBUG EVALUATE: This operand has type 'number'.
1003    11 | DEBUG EVALUATE /'baz' ge 10.
1004       |                          ^~
1005
1006 'baz' ge 10 => error
1007
1008 '0123' ge '0123' => true
1009
1010 '0123' >= '0124' => false
1011
1012 '0124' >= '0123' => true
1013
1014 '0123  ' ge '0123' => true
1015
1016 '0123' >= '0123 ' => true
1017
1018 1 > 2 => false
1019
1020 2.5 > 1.5 => true
1021
1022 3.5 gt 4 => false
1023
1024 4 gt 3.5 => true
1025
1026 evaluate.sps:22.17-22.29: error: DEBUG EVALUATE: Both operands of > must have
1027 the same type.
1028    22 | DEBUG EVALUATE /1 gt 'foobar'.
1029       |                 ^~~~~~~~~~~~~
1030
1031 evaluate.sps:22.17: note: DEBUG EVALUATE: This operand has type 'number'.
1032    22 | DEBUG EVALUATE /1 gt 'foobar'.
1033       |                 ^
1034
1035 evaluate.sps:22.22-22.29: note: DEBUG EVALUATE: This operand has type 'string'.
1036    22 | DEBUG EVALUATE /1 gt 'foobar'.
1037       |                      ^~~~~~~~
1038
1039 1 gt 'foobar' => error
1040
1041 evaluate.sps:23.17-23.26: error: DEBUG EVALUATE: Both operands of > must have
1042 the same type.
1043    23 | DEBUG EVALUATE /'baz' > 10.
1044       |                 ^~~~~~~~~~
1045
1046 evaluate.sps:23.17-23.21: note: DEBUG EVALUATE: This operand has type 'string'.
1047    23 | DEBUG EVALUATE /'baz' > 10.
1048       |                 ^~~~~
1049
1050 evaluate.sps:23.25-23.26: note: DEBUG EVALUATE: This operand has type 'number'.
1051    23 | DEBUG EVALUATE /'baz' > 10.
1052       |                         ^~
1053
1054 'baz' > 10 => error
1055
1056 '0123' > '0123' => false
1057
1058 '0123' > '0124' => false
1059
1060 '0124' > '0123' => true
1061
1062 '0123   ' > '0123' => false
1063
1064 '0123    ' > '0123 ' => false
1065
1066 1 ne 1 => false
1067
1068 1 ~= 1 => false
1069
1070 1 <> 2 => true
1071
1072 2 ne 3 => true
1073
1074 evaluate.sps:34.17-34.29: error: DEBUG EVALUATE: Both operands of ~= must have
1075 the same type.
1076    34 | DEBUG EVALUATE /1 ~= 'foobar'.
1077       |                 ^~~~~~~~~~~~~
1078
1079 evaluate.sps:34.17: note: DEBUG EVALUATE: This operand has type 'number'.
1080    34 | DEBUG EVALUATE /1 ~= 'foobar'.
1081       |                 ^
1082
1083 evaluate.sps:34.22-34.29: note: DEBUG EVALUATE: This operand has type 'string'.
1084    34 | DEBUG EVALUATE /1 ~= 'foobar'.
1085       |                      ^~~~~~~~
1086
1087 1 ~= 'foobar' => error
1088
1089 evaluate.sps:35.17-35.27: error: DEBUG EVALUATE: Both operands of ~= must have
1090 the same type.
1091    35 | DEBUG EVALUATE /'baz' ne 10.
1092       |                 ^~~~~~~~~~~
1093
1094 evaluate.sps:35.17-35.21: note: DEBUG EVALUATE: This operand has type 'string'.
1095    35 | DEBUG EVALUATE /'baz' ne 10.
1096       |                 ^~~~~
1097
1098 evaluate.sps:35.26-35.27: note: DEBUG EVALUATE: This operand has type 'number'.
1099    35 | DEBUG EVALUATE /'baz' ne 10.
1100       |                          ^~
1101
1102 'baz' ne 10 => error
1103
1104 evaluate.sps:36.17-36.30: error: DEBUG EVALUATE: Both operands of ~= must have
1105 the same type.
1106    36 | DEBUG EVALUATE /'quux' ~= 5.55.
1107       |                 ^~~~~~~~~~~~~~
1108
1109 evaluate.sps:36.17-36.22: note: DEBUG EVALUATE: This operand has type 'string'.
1110    36 | DEBUG EVALUATE /'quux' ~= 5.55.
1111       |                 ^~~~~~
1112
1113 evaluate.sps:36.27-36.30: note: DEBUG EVALUATE: This operand has type 'number'.
1114    36 | DEBUG EVALUATE /'quux' ~= 5.55.
1115       |                           ^~~~
1116
1117 'quux' ~= 5.55 => error
1118
1119 'foobar' <> 'foobar' => false
1120
1121 'quux' ne 'bar' => true
1122
1123 'bar   ' <> 'bar' => false
1124
1125 'asdf       ' ~= "asdf   " => false
1126
1127 evaluate.sps:41.21: error: DEBUG EVALUATE: Syntax error parsing expression.
1128    41 | DEBUG EVALUATE /1 < > 1.
1129       |                     ^
1130
1131 1 < > 1 => error
1132
1133 evaluate.sps:42.19: error: DEBUG EVALUATE: Syntax error expecting end of
1134 command.
1135    42 | DEBUG EVALUATE /1 ~ = 1.
1136       |                   ^
1137
1138 1 ~ = 1 => error
1139 ])
1140 done
1141 AT_CLEANUP
1142
1143 AT_SETUP([expressions - EXP LG10 LN SQRT ABS MOD MOD10 RND TRUNC])
1144 AT_KEYWORDS([expression expressions evaluate])
1145 AT_DATA([evaluate-base.sps], [dnl
1146 SET EPOCH 1940.
1147 DEBUG EVALUATE SET opt.
1148 DEBUG EVALUATE /EXP(10).
1149 DEBUG EVALUATE /EXP('x').
1150
1151 DEBUG EVALUATE /LG10(500).
1152 DEBUG EVALUATE /LG10('x').
1153
1154 DEBUG EVALUATE /SQRT(500).
1155 DEBUG EVALUATE /SQRT(-1).
1156
1157 DEBUG EVALUATE /ABS(-10.5).
1158 DEBUG EVALUATE /ABS(55.79).
1159 DEBUG EVALUATE /ABS(0).
1160 DEBUG EVALUATE /ABS(-0).
1161
1162 DEBUG EVALUATE /MOD(55.5, 2).
1163 DEBUG EVALUATE /MOD(-55.5, 2).
1164 DEBUG EVALUATE /MOD(55.5, -2).
1165 DEBUG EVALUATE /MOD(-55.5, -2).
1166 DEBUG EVALUATE /MOD('a', 2).
1167 DEBUG EVALUATE /MOD(2, 'a').
1168 DEBUG EVALUATE /MOD('a', 'b').
1169
1170 DEBUG EVALUATE /MOD10(55.5).
1171 DEBUG EVALUATE /MOD10(-55.5).
1172
1173 DEBUG EVALUATE /RND(5.4).
1174 DEBUG EVALUATE /RND(5.6).
1175 DEBUG EVALUATE /RND(-5.4).
1176 DEBUG EVALUATE /RND(-5.6).
1177 DEBUG EVALUATE /RND(5.56, .1).
1178 DEBUG EVALUATE /RND(-5.56, .1)
1179 DEBUG EVALUATE /RND(.5).
1180 DEBUG EVALUATE /RND(.5 - 2**-53).
1181 DEBUG EVALUATE /RND(.5 - 2**-52).
1182 DEBUG EVALUATE /RND(.5 - 2**-51).
1183 DEBUG EVALUATE /RND(.5 - 2**-45).
1184 DEBUG EVALUATE /RND(.5 - 2**-45, 1, 10).
1185 DEBUG EVALUATE /RND('x').
1186
1187 DEBUG EVALUATE /TRUNC(1.2).
1188 DEBUG EVALUATE /TRUNC(1.9).
1189 DEBUG EVALUATE /TRUNC(-1.2).
1190 DEBUG EVALUATE /TRUNC(-1.9).
1191 DEBUG EVALUATE /TRUNC(5.06, .1).
1192 DEBUG EVALUATE /TRUNC(-5.06, .1).
1193 DEBUG EVALUATE /TRUNC(1).
1194 DEBUG EVALUATE /TRUNC(1 - 2**-53).
1195 DEBUG EVALUATE /TRUNC(1 - 2**-52).
1196 DEBUG EVALUATE /TRUNC(1 - 2**-51).
1197 DEBUG EVALUATE /TRUNC(1 - 2**-45).
1198 DEBUG EVALUATE /TRUNC(1 - 2**-45, 1, 10).
1199 DEBUG EVALUATE /TRUNC('x').
1200 ])
1201
1202 for opt in OPT NOOPT; do
1203     AS_BOX([$opt])
1204     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1205     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1206 EXP(10) => 22026.47
1207
1208 evaluate.sps:4.17-4.24: error: DEBUG EVALUATE: Type mismatch invoking
1209 EXP(number) as EXP(string).
1210     4 | DEBUG EVALUATE /EXP('x').
1211       |                 ^~~~~~~~
1212
1213 evaluate.sps:4.21-4.23: note: DEBUG EVALUATE: This argument has type 'string'
1214 but 'number' is required.
1215     4 | DEBUG EVALUATE /EXP('x').
1216       |                     ^~~
1217
1218 EXP('x') => error
1219
1220 LG10(500) => 2.70
1221
1222 evaluate.sps:7.17-7.25: error: DEBUG EVALUATE: Type mismatch invoking
1223 LG10(number) as LG10(string).
1224     7 | DEBUG EVALUATE /LG10('x').
1225       |                 ^~~~~~~~~
1226
1227 evaluate.sps:7.22-7.24: note: DEBUG EVALUATE: This argument has type 'string'
1228 but 'number' is required.
1229     7 | DEBUG EVALUATE /LG10('x').
1230       |                      ^~~
1231
1232 LG10('x') => error
1233
1234 SQRT(500) => 22.36
1235
1236 SQRT(-1) => sysmis
1237
1238 ABS(-10.5) => 10.50
1239
1240 ABS(55.79) => 55.79
1241
1242 ABS(0) => 0.00
1243
1244 ABS(-0) => 0.00
1245
1246 MOD(55.5, 2) => 1.50
1247
1248 MOD(-55.5, 2) => -1.50
1249
1250 MOD(55.5, -2) => 1.50
1251
1252 MOD(-55.5, -2) => -1.50
1253
1254 evaluate.sps:21.17-21.27: error: DEBUG EVALUATE: Type mismatch invoking
1255 MOD(number, number) as MOD(string, number).
1256    21 | DEBUG EVALUATE /MOD('a', 2).
1257       |                 ^~~~~~~~~~~
1258
1259 evaluate.sps:21.21-21.23: note: DEBUG EVALUATE: This argument has type 'string'
1260 but 'number' is required.
1261    21 | DEBUG EVALUATE /MOD('a', 2).
1262       |                     ^~~
1263
1264 MOD('a', 2) => error
1265
1266 evaluate.sps:22.17-22.27: error: DEBUG EVALUATE: Type mismatch invoking
1267 MOD(number, number) as MOD(number, string).
1268    22 | DEBUG EVALUATE /MOD(2, 'a').
1269       |                 ^~~~~~~~~~~
1270
1271 evaluate.sps:22.24-22.26: note: DEBUG EVALUATE: This argument has type 'string'
1272 but 'number' is required.
1273    22 | DEBUG EVALUATE /MOD(2, 'a').
1274       |                        ^~~
1275
1276 MOD(2, 'a') => error
1277
1278 evaluate.sps:23.17-23.29: error: DEBUG EVALUATE: Type mismatch invoking
1279 MOD(number, number) as MOD(string, string).
1280    23 | DEBUG EVALUATE /MOD('a', 'b').
1281       |                 ^~~~~~~~~~~~~
1282
1283 evaluate.sps:23.21-23.23: note: DEBUG EVALUATE: This argument has type 'string'
1284 but 'number' is required.
1285    23 | DEBUG EVALUATE /MOD('a', 'b').
1286       |                     ^~~
1287
1288 evaluate.sps:23.26-23.28: note: DEBUG EVALUATE: This argument has type 'string'
1289 but 'number' is required.
1290    23 | DEBUG EVALUATE /MOD('a', 'b').
1291       |                          ^~~
1292
1293 MOD('a', 'b') => error
1294
1295 MOD10(55.5) => 5.50
1296
1297 MOD10(-55.5) => -5.50
1298
1299 RND(5.4) => 5.00
1300
1301 RND(5.6) => 6.00
1302
1303 RND(-5.4) => -5.00
1304
1305 RND(-5.6) => -6.00
1306
1307 RND(5.56, .1) => 5.60
1308
1309 RND(-5.56, .1) => -5.60
1310
1311 RND(.5) => 1.00
1312
1313 RND(.5 - 2**-53) => 1.00
1314
1315 RND(.5 - 2**-52) => 1.00
1316
1317 RND(.5 - 2**-51) => 1.00
1318
1319 RND(.5 - 2**-45) => 0.00
1320
1321 RND(.5 - 2**-45, 1, 10) => 1.00
1322
1323 evaluate.sps:40.17-40.24: error: DEBUG EVALUATE: Function invocation
1324 RND(string) does not match any known function.  Candidates are:
1325 RND(number)
1326 RND(number, number)
1327 RND(number, number, number).
1328    40 | DEBUG EVALUATE /RND('x').
1329       |                 ^~~~~~~~
1330
1331 RND('x') => error
1332
1333 TRUNC(1.2) => 1.00
1334
1335 TRUNC(1.9) => 1.00
1336
1337 TRUNC(-1.2) => -1.00
1338
1339 TRUNC(-1.9) => -1.00
1340
1341 TRUNC(5.06, .1) => 5.00
1342
1343 TRUNC(-5.06, .1) => -5.00
1344
1345 TRUNC(1) => 1.00
1346
1347 TRUNC(1 - 2**-53) => 1.00
1348
1349 TRUNC(1 - 2**-52) => 1.00
1350
1351 TRUNC(1 - 2**-51) => 1.00
1352
1353 TRUNC(1 - 2**-45) => 0.00
1354
1355 TRUNC(1 - 2**-45, 1, 10) => 1.00
1356
1357 evaluate.sps:54.17-54.26: error: DEBUG EVALUATE: Function invocation
1358 TRUNC(string) does not match any known function.  Candidates are:
1359 TRUNC(number)
1360 TRUNC(number, number)
1361 TRUNC(number, number, number).
1362    54 | DEBUG EVALUATE /TRUNC('x').
1363       |                 ^~~~~~~~~~
1364
1365 TRUNC('x') => error
1366 ])
1367 done
1368 AT_CLEANUP
1369
1370 AT_SETUP([expressions - ACOS ARSIN ARTAN COS SIN TAN])
1371 AT_KEYWORDS([expression expressions evaluate])
1372 AT_DATA([evaluate-base.sps], [dnl
1373 SET EPOCH 1940.
1374 DEBUG EVALUATE SET opt.
1375 DEBUG EVALUATE /ACOS(.5) / 3.14159 * 180.
1376 DEBUG EVALUATE /ARCOS(.75) / 3.14159 * 180.
1377 DEBUG EVALUATE /ARCOS(-.5) / 3.14159 * 180.
1378 DEBUG EVALUATE /ACOS(-.75) / 3.14159 * 180.
1379 DEBUG EVALUATE /ACOS(-1) / 3.14159 * 180.
1380 DEBUG EVALUATE /ARCOS(1) / 3.14159 * 180.
1381 DEBUG EVALUATE /ACOS(-1.01) / 3.14159 * 180.
1382 DEBUG EVALUATE /ARCOS(1.01) / 3.14159 * 180.
1383 DEBUG EVALUATE /ACOS('x') / 3.14159 * 180.
1384
1385 DEBUG EVALUATE /ASIN(.5) / 3.14159 * 180.
1386 DEBUG EVALUATE /ARSIN(.25) / 3.14159 * 180.
1387 DEBUG EVALUATE /ARSIN(-.5) / 3.14159 * 180.
1388 DEBUG EVALUATE /ASIN(-.25) / 3.14159 * 180.
1389 DEBUG EVALUATE /ASIN(-1.01) / 3.14159 * 180.
1390 DEBUG EVALUATE /ARSIN(1.01) / 3.14159 * 180.
1391 DEBUG EVALUATE /ASIN('x') / 3.14159 * 180.
1392
1393 DEBUG EVALUATE /ATAN(1) / 3.14159 * 180.
1394 DEBUG EVALUATE /ARTAN(10) / 3.14159 * 180.
1395 DEBUG EVALUATE /ARTAN(-1) / 3.14159 * 180.
1396 DEBUG EVALUATE /ATAN(-10) / 3.14159 * 180.
1397 DEBUG EVALUATE /ATAN('x') / 3.14159 * 180.
1398
1399 DEBUG EVALUATE /COS(60 / 180 * 3.14159).
1400 DEBUG EVALUATE /COS(45 / 180 * 3.14159).
1401 DEBUG EVALUATE /COS(30 / 180 * 3.14159).
1402 DEBUG EVALUATE /COS(15 / 180 * 3.14159).
1403 DEBUG EVALUATE /COS(-60 / 180 * 3.14159).
1404 DEBUG EVALUATE /COS(-45 / 180 * 3.14159).
1405 DEBUG EVALUATE /COS(-30 / 180 * 3.14159).
1406 DEBUG EVALUATE /COS(-15 / 180 * 3.14159).
1407 DEBUG EVALUATE /COS(123 / 180 * 3.14159).
1408 DEBUG EVALUATE /COS(321 / 180 * 3.14159).
1409 DEBUG EVALUATE /COS('x').
1410
1411 DEBUG EVALUATE /SIN(60 / 180 * 3.14159).
1412 DEBUG EVALUATE /SIN(45 / 180 * 3.14159).
1413 DEBUG EVALUATE /SIN(30 / 180 * 3.14159).
1414 DEBUG EVALUATE /SIN(15 / 180 * 3.14159).
1415 DEBUG EVALUATE /SIN(-60 / 180 * 3.14159).
1416 DEBUG EVALUATE /SIN(-45 / 180 * 3.14159).
1417 DEBUG EVALUATE /SIN(-30 / 180 * 3.14159).
1418 DEBUG EVALUATE /SIN(-15 / 180 * 3.14159).
1419 DEBUG EVALUATE /SIN(123 / 180 * 3.14159).
1420 DEBUG EVALUATE /SIN(321 / 180 * 3.14159).
1421 DEBUG EVALUATE /SIN('x').
1422
1423 DEBUG EVALUATE /TAN(60 / 180 * 3.14159).
1424 DEBUG EVALUATE /TAN(45 / 180 * 3.14159).
1425 DEBUG EVALUATE /TAN(30 / 180 * 3.14159).
1426 DEBUG EVALUATE /TAN(15 / 180 * 3.14159).
1427 DEBUG EVALUATE /TAN(-60 / 180 * 3.14159).
1428 DEBUG EVALUATE /TAN(-45 / 180 * 3.14159).
1429 DEBUG EVALUATE /TAN(-30 / 180 * 3.14159).
1430 DEBUG EVALUATE /TAN(-15 / 180 * 3.14159).
1431 DEBUG EVALUATE /TAN(123 / 180 * 3.14159).
1432 DEBUG EVALUATE /TAN(321 / 180 * 3.14159).
1433 DEBUG EVALUATE /TAN('x').
1434 ])
1435
1436 for opt in OPT NOOPT; do
1437     AS_BOX([$opt])
1438     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1439     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1440 ACOS(.5) / 3.14159 * 180 => 60.00
1441
1442 ARCOS(.75) / 3.14159 * 180 => 41.41
1443
1444 ARCOS(-.5) / 3.14159 * 180 => 120.00
1445
1446 ACOS(-.75) / 3.14159 * 180 => 138.59
1447
1448 ACOS(-1) / 3.14159 * 180 => 180.00
1449
1450 ARCOS(1) / 3.14159 * 180 => 0.00
1451
1452 ACOS(-1.01) / 3.14159 * 180 => sysmis
1453
1454 ARCOS(1.01) / 3.14159 * 180 => sysmis
1455
1456 evaluate.sps:11.17-11.25: error: DEBUG EVALUATE: Type mismatch invoking
1457 ACOS(number) as ACOS(string).
1458    11 | DEBUG EVALUATE /ACOS('x') / 3.14159 * 180.
1459       |                 ^~~~~~~~~
1460
1461 evaluate.sps:11.22-11.24: note: DEBUG EVALUATE: This argument has type 'string'
1462 but 'number' is required.
1463    11 | DEBUG EVALUATE /ACOS('x') / 3.14159 * 180.
1464       |                      ^~~
1465
1466 ACOS('x') / 3.14159 * 180 => error
1467
1468 ASIN(.5) / 3.14159 * 180 => 30.00
1469
1470 ARSIN(.25) / 3.14159 * 180 => 14.48
1471
1472 ARSIN(-.5) / 3.14159 * 180 => -30.00
1473
1474 ASIN(-.25) / 3.14159 * 180 => -14.48
1475
1476 ASIN(-1.01) / 3.14159 * 180 => sysmis
1477
1478 ARSIN(1.01) / 3.14159 * 180 => sysmis
1479
1480 evaluate.sps:19.17-19.25: error: DEBUG EVALUATE: Type mismatch invoking
1481 ASIN(number) as ASIN(string).
1482    19 | DEBUG EVALUATE /ASIN('x') / 3.14159 * 180.
1483       |                 ^~~~~~~~~
1484
1485 evaluate.sps:19.22-19.24: note: DEBUG EVALUATE: This argument has type 'string'
1486 but 'number' is required.
1487    19 | DEBUG EVALUATE /ASIN('x') / 3.14159 * 180.
1488       |                      ^~~
1489
1490 ASIN('x') / 3.14159 * 180 => error
1491
1492 ATAN(1) / 3.14159 * 180 => 45.00
1493
1494 ARTAN(10) / 3.14159 * 180 => 84.29
1495
1496 ARTAN(-1) / 3.14159 * 180 => -45.00
1497
1498 ATAN(-10) / 3.14159 * 180 => -84.29
1499
1500 evaluate.sps:25.17-25.25: error: DEBUG EVALUATE: Type mismatch invoking
1501 ATAN(number) as ATAN(string).
1502    25 | DEBUG EVALUATE /ATAN('x') / 3.14159 * 180.
1503       |                 ^~~~~~~~~
1504
1505 evaluate.sps:25.22-25.24: note: DEBUG EVALUATE: This argument has type 'string'
1506 but 'number' is required.
1507    25 | DEBUG EVALUATE /ATAN('x') / 3.14159 * 180.
1508       |                      ^~~
1509
1510 ATAN('x') / 3.14159 * 180 => error
1511
1512 COS(60 / 180 * 3.14159) => 0.50
1513
1514 COS(45 / 180 * 3.14159) => 0.71
1515
1516 COS(30 / 180 * 3.14159) => 0.87
1517
1518 COS(15 / 180 * 3.14159) => 0.97
1519
1520 COS(-60 / 180 * 3.14159) => 0.50
1521
1522 COS(-45 / 180 * 3.14159) => 0.71
1523
1524 COS(-30 / 180 * 3.14159) => 0.87
1525
1526 COS(-15 / 180 * 3.14159) => 0.97
1527
1528 COS(123 / 180 * 3.14159) => -0.54
1529
1530 COS(321 / 180 * 3.14159) => 0.78
1531
1532 evaluate.sps:37.17-37.24: error: DEBUG EVALUATE: Type mismatch invoking
1533 COS(number) as COS(string).
1534    37 | DEBUG EVALUATE /COS('x').
1535       |                 ^~~~~~~~
1536
1537 evaluate.sps:37.21-37.23: note: DEBUG EVALUATE: This argument has type 'string'
1538 but 'number' is required.
1539    37 | DEBUG EVALUATE /COS('x').
1540       |                     ^~~
1541
1542 COS('x') => error
1543
1544 SIN(60 / 180 * 3.14159) => 0.87
1545
1546 SIN(45 / 180 * 3.14159) => 0.71
1547
1548 SIN(30 / 180 * 3.14159) => 0.50
1549
1550 SIN(15 / 180 * 3.14159) => 0.26
1551
1552 SIN(-60 / 180 * 3.14159) => -0.87
1553
1554 SIN(-45 / 180 * 3.14159) => -0.71
1555
1556 SIN(-30 / 180 * 3.14159) => -0.50
1557
1558 SIN(-15 / 180 * 3.14159) => -0.26
1559
1560 SIN(123 / 180 * 3.14159) => 0.84
1561
1562 SIN(321 / 180 * 3.14159) => -0.63
1563
1564 evaluate.sps:49.17-49.24: error: DEBUG EVALUATE: Type mismatch invoking
1565 SIN(number) as SIN(string).
1566    49 | DEBUG EVALUATE /SIN('x').
1567       |                 ^~~~~~~~
1568
1569 evaluate.sps:49.21-49.23: note: DEBUG EVALUATE: This argument has type 'string'
1570 but 'number' is required.
1571    49 | DEBUG EVALUATE /SIN('x').
1572       |                     ^~~
1573
1574 SIN('x') => error
1575
1576 TAN(60 / 180 * 3.14159) => 1.73
1577
1578 TAN(45 / 180 * 3.14159) => 1.00
1579
1580 TAN(30 / 180 * 3.14159) => 0.58
1581
1582 TAN(15 / 180 * 3.14159) => 0.27
1583
1584 TAN(-60 / 180 * 3.14159) => -1.73
1585
1586 TAN(-45 / 180 * 3.14159) => -1.00
1587
1588 TAN(-30 / 180 * 3.14159) => -0.58
1589
1590 TAN(-15 / 180 * 3.14159) => -0.27
1591
1592 TAN(123 / 180 * 3.14159) => -1.54
1593
1594 TAN(321 / 180 * 3.14159) => -0.81
1595
1596 evaluate.sps:61.17-61.24: error: DEBUG EVALUATE: Type mismatch invoking
1597 TAN(number) as TAN(string).
1598    61 | DEBUG EVALUATE /TAN('x').
1599       |                 ^~~~~~~~
1600
1601 evaluate.sps:61.21-61.23: note: DEBUG EVALUATE: This argument has type 'string'
1602 but 'number' is required.
1603    61 | DEBUG EVALUATE /TAN('x').
1604       |                     ^~~
1605
1606 TAN('x') => error
1607 ])
1608 done
1609 AT_CLEANUP
1610
1611 AT_SETUP([expressions - vector indexing])
1612 AT_KEYWORDS([expression expressions evaluate])
1613 AT_DATA([evaluate-base.sps], [dnl
1614 SET EPOCH 1940.
1615 DEBUG EVALUATE SET opt.
1616
1617 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(1).
1618 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(2).
1619 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(3).
1620 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v($sysmis).
1621 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(0).
1622 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(4).
1623
1624 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(1).
1625 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(2).
1626 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(3).
1627 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v($sysmis).
1628 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(0).
1629 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(4).
1630
1631 ])
1632
1633 for opt in OPT NOOPT; do
1634     AS_BOX([$opt])
1635     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1636     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1637 v(1) => 11.00
1638
1639 v(2) => 22.00
1640
1641 v(3) => 33.00
1642
1643 evaluate.sps:7.42-7.51: error: DEBUG EVALUATE: Index outside valid range 1 to
1644 3, inclusive, for vector V.  The value will be treated as system-missing.
1645     7 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v($sysmis).
1646       |                                          ^~~~~~~~~~
1647
1648 evaluate.sps:7.44-7.50: note: DEBUG EVALUATE: The index is system-missing.
1649     7 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v($sysmis).
1650       |                                            ^~~~~~~
1651
1652 v($sysmis) => sysmis
1653
1654 evaluate.sps:8.42-8.45: error: DEBUG EVALUATE: Index outside valid range 1 to
1655 3, inclusive, for vector V.  The value will be treated as system-missing.
1656     8 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(0).
1657       |                                          ^~~~
1658
1659 evaluate.sps:8.44: note: DEBUG EVALUATE: The index has value 0.
1660     8 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(0).
1661       |                                            ^
1662
1663 v(0) => sysmis
1664
1665 evaluate.sps:9.42-9.45: error: DEBUG EVALUATE: Index outside valid range 1 to
1666 3, inclusive, for vector V.  The value will be treated as system-missing.
1667     9 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(4).
1668       |                                          ^~~~
1669
1670 evaluate.sps:9.44: note: DEBUG EVALUATE: The index has value 4.
1671     9 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(4).
1672       |                                            ^
1673
1674 v(4) => sysmis
1675
1676 v(1) => "abc"
1677
1678 v(2) => "def"
1679
1680 v(3) => "ghi"
1681
1682 evaluate.sps:14.51-14.60: error: DEBUG EVALUATE: Index outside valid range 1 to
1683 3, inclusive, for vector V.  The value will be treated as system-missing.
1684    14 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v($sysmis).
1685       |                                                   ^~~~~~~~~~
1686
1687 evaluate.sps:14.53-14.59: note: DEBUG EVALUATE: The index is system-missing.
1688    14 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v($sysmis).
1689       |                                                     ^~~~~~~
1690
1691 v($sysmis) => ""
1692
1693 evaluate.sps:15.51-15.54: error: DEBUG EVALUATE: Index outside valid range 1 to
1694 3, inclusive, for vector V.  The value will be treated as system-missing.
1695    15 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(0).
1696       |                                                   ^~~~
1697
1698 evaluate.sps:15.53: note: DEBUG EVALUATE: The index has value 0.
1699    15 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(0).
1700       |                                                     ^
1701
1702 v(0) => ""
1703
1704 evaluate.sps:16.51-16.54: error: DEBUG EVALUATE: Index outside valid range 1 to
1705 3, inclusive, for vector V.  The value will be treated as system-missing.
1706    16 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(4).
1707       |                                                   ^~~~
1708
1709 evaluate.sps:16.53: note: DEBUG EVALUATE: The index has value 4.
1710    16 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(4).
1711       |                                                     ^
1712
1713 v(4) => ""
1714 ])
1715 done
1716 AT_CLEANUP
1717
1718 AT_SETUP([expressions - MISSING NMISS NVALID SYSMIS])
1719 AT_KEYWORDS([expression expressions evaluate])
1720 AT_DATA([evaluate-base.sps], [dnl
1721 SET EPOCH 1940.
1722 DEBUG EVALUATE SET opt.
1723 DEBUG EVALUATE /MISSING(10).
1724 DEBUG EVALUATE /MISSING($SYSMIS).
1725 DEBUG EVALUATE /MISSING(ASIN(1.01)).
1726 DEBUG EVALUATE /MISSING(ASIN(.5)).
1727 DEBUG EVALUATE /MISSING('    ').
1728
1729 DEBUG EVALUATE (x=5)/x.
1730 DEBUG EVALUATE (x=5 MISSING)/x.
1731 DEBUG EVALUATE (x=5 MISSING)/x + 1.
1732 DEBUG EVALUATE (x=SYSMIS)/x.
1733
1734 DEBUG EVALUATE (x=5) VECTOR/v(1).
1735 DEBUG EVALUATE (x=5 MISSING) VECTOR/v(1).
1736 DEBUG EVALUATE (x=5 MISSING) VECTOR/v(1) + 1.
1737 DEBUG EVALUATE (x=SYSMIS) VECTOR/v(1).
1738
1739 DEBUG EVALUATE (x=5)/VALUE(x).
1740 DEBUG EVALUATE (x=5 MISSING)/VALUE(x).
1741 DEBUG EVALUATE (x=SYSMIS)/VALUE(x).
1742
1743 DEBUG EVALUATE (x=5) VECTOR/VALUE(v(1)).
1744 DEBUG EVALUATE (x=5 MISSING) VECTOR/VALUE(v(1)).
1745 DEBUG EVALUATE (x=SYSMIS) VECTOR/VALUE(v(1)).
1746
1747 DEBUG EVALUATE (x=5)/MISSING(x).
1748 DEBUG EVALUATE (x=5 MISSING)/MISSING(x).
1749 DEBUG EVALUATE (x=SYSMIS)/MISSING(x).
1750
1751 DEBUG EVALUATE (x=5)/SYSMIS(x).
1752 DEBUG EVALUATE (x=5 MISSING)/SYSMIS(x).
1753 DEBUG EVALUATE (x=SYSMIS)/SYSMIS(x).
1754
1755 DEBUG EVALUATE /NMISS($sysmis).
1756 DEBUG EVALUATE /NMISS(0).
1757 DEBUG EVALUATE /NMISS($sysmis, $sysmis, $sysmis).
1758 DEBUG EVALUATE /NMISS(1, 2, 3, 4).
1759 DEBUG EVALUATE /NMISS(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4).
1760 DEBUG EVALUATE (a=1 MISSING) (b=2) (c=3 MISSING) (d=4)/NMISS(a, b, c, d).
1761
1762 DEBUG EVALUATE /NVALID($sysmis).
1763 DEBUG EVALUATE /NVALID(0).
1764 DEBUG EVALUATE /NVALID($sysmis, $sysmis, $sysmis).
1765 DEBUG EVALUATE /NVALID(1, 2, 3, 4).
1766 DEBUG EVALUATE /NVALID(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4).
1767 DEBUG EVALUATE (a=1 MISSING) (b=2) (c=3 MISSING) (d=4)/NVALID(a, b, c, d).
1768
1769 DEBUG EVALUATE /SYSMIS(1).
1770 DEBUG EVALUATE /SYSMIS($SYSMIS).
1771 DEBUG EVALUATE /SYSMIS(1 + $SYSMIS).
1772 ])
1773
1774 for opt in OPT NOOPT; do
1775     AS_BOX([$opt])
1776     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1777     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1778 MISSING(10) => false
1779
1780 MISSING($SYSMIS) => true
1781
1782 MISSING(ASIN(1.01)) => true
1783
1784 MISSING(ASIN(.5)) => false
1785
1786 evaluate.sps:7.17-7.31: error: DEBUG EVALUATE: Type mismatch invoking
1787 MISSING(number) as MISSING(string).
1788     7 | DEBUG EVALUATE /MISSING('    ').
1789       |                 ^~~~~~~~~~~~~~~
1790
1791 evaluate.sps:7.25-7.30: note: DEBUG EVALUATE: This argument has type 'string'
1792 but 'number' is required.
1793     7 | DEBUG EVALUATE /MISSING('    ').
1794       |                         ^~~~~~
1795
1796 MISSING('    ') => error
1797
1798 x => 5.00
1799
1800 x => sysmis
1801
1802 x + 1 => sysmis
1803
1804 x => sysmis
1805
1806 v(1) => 5.00
1807
1808 v(1) => sysmis
1809
1810 v(1) + 1 => sysmis
1811
1812 v(1) => sysmis
1813
1814 VALUE(x) => 5.00
1815
1816 VALUE(x) => 5.00
1817
1818 VALUE(x) => sysmis
1819
1820 VALUE(v(1)) => 5.00
1821
1822 VALUE(v(1)) => 5.00
1823
1824 VALUE(v(1)) => sysmis
1825
1826 MISSING(x) => false
1827
1828 MISSING(x) => true
1829
1830 MISSING(x) => true
1831
1832 SYSMIS(x) => false
1833
1834 SYSMIS(x) => false
1835
1836 SYSMIS(x) => true
1837
1838 NMISS($sysmis) => 1.00
1839
1840 NMISS(0) => 0.00
1841
1842 NMISS($sysmis, $sysmis, $sysmis) => 3.00
1843
1844 NMISS(1, 2, 3, 4) => 0.00
1845
1846 NMISS(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4) => 4.00
1847
1848 NMISS(a, b, c, d) => 2.00
1849
1850 NVALID($sysmis) => 0.00
1851
1852 NVALID(0) => 1.00
1853
1854 NVALID($sysmis, $sysmis, $sysmis) => 0.00
1855
1856 NVALID(1, 2, 3, 4) => 4.00
1857
1858 NVALID(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4) => 5.00
1859
1860 NVALID(a, b, c, d) => 2.00
1861
1862 SYSMIS(1) => false
1863
1864 SYSMIS($SYSMIS) => true
1865
1866 SYSMIS(1 + $SYSMIS) => true
1867 ])
1868 done
1869 AT_CLEANUP
1870
1871 AT_SETUP([expressions - ANY])
1872 AT_KEYWORDS([expression expressions evaluate])
1873 AT_DATA([evaluate-base.sps], [dnl
1874 SET EPOCH 1940.
1875 DEBUG EVALUATE SET opt.
1876
1877 DEBUG EVALUATE /any(1, 1, 2, 3).
1878 DEBUG EVALUATE /any(1, $true, 2, 3).
1879 DEBUG EVALUATE /any(1, $false, 2, 3).
1880 DEBUG EVALUATE /any(2, 1, 2, 3).
1881 DEBUG EVALUATE /any(3, 1, 2, 3).
1882 DEBUG EVALUATE /any(5, 1, 2, 3).
1883 DEBUG EVALUATE /any(1, 1, 1, 1).
1884 DEBUG EVALUATE /any($sysmis, 1, 1, 1).
1885 DEBUG EVALUATE /any($sysmis, 1, $sysmis, 3).
1886 DEBUG EVALUATE /any(1, 1, $sysmis, $sysmis).
1887 DEBUG EVALUATE /any(1, $sysmis, $sysmis, $sysmis).
1888 DEBUG EVALUATE /any($sysmis, $sysmis, $sysmis, $sysmis).
1889
1890 DEBUG EVALUATE /any(1).
1891 DEBUG EVALUATE /any('1', 2, 3, 4).
1892 DEBUG EVALUATE /any(1, '2', 3, 4).
1893 DEBUG EVALUATE /any(1, 2, '3', 4).
1894 DEBUG EVALUATE /any(1, 2, 3, '4').
1895
1896 DEBUG EVALUATE /any('', 'a', '', 'c').
1897 DEBUG EVALUATE /any('a', 'a', 'b', 'c').
1898 DEBUG EVALUATE /any('b', 'a', 'b', 'c').
1899 DEBUG EVALUATE /any('c', 'a', 'b', 'c').
1900 DEBUG EVALUATE /any('e', 'a', 'b', 'c').
1901 DEBUG EVALUATE /any('a', 'a', 'a', 'a').
1902 DEBUG EVALUATE /any('', 'a', 'a', 'a').
1903 DEBUG EVALUATE /any('a', '', '', '').
1904 DEBUG EVALUATE /any('a').
1905
1906 DEBUG EVALUATE /any('a', 'a  ', 'b', 'c').
1907 DEBUG EVALUATE /any('b   ', 'a', 'b', 'c').
1908 DEBUG EVALUATE /any('c   ', 'a', 'b', 'c     ').
1909 DEBUG EVALUATE /any(a10, 'b', 'c', 'd').
1910 DEBUG EVALUATE /any('a', b, 'c', 'd').
1911 DEBUG EVALUATE /any('a', 'b', c, 'd').
1912 DEBUG EVALUATE /any('a', 'b', 'c', d).
1913 ])
1914
1915 for opt in OPT NOOPT; do
1916     AS_BOX([$opt])
1917     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1918     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
1919 [[any(1, 1, 2, 3) => true
1920
1921 any(1, $true, 2, 3) => true
1922
1923 any(1, $false, 2, 3) => false
1924
1925 any(2, 1, 2, 3) => true
1926
1927 any(3, 1, 2, 3) => true
1928
1929 any(5, 1, 2, 3) => false
1930
1931 any(1, 1, 1, 1) => true
1932
1933 any($sysmis, 1, 1, 1) => sysmis
1934
1935 any($sysmis, 1, $sysmis, 3) => sysmis
1936
1937 any(1, 1, $sysmis, $sysmis) => true
1938
1939 any(1, $sysmis, $sysmis, $sysmis) => sysmis
1940
1941 any($sysmis, $sysmis, $sysmis, $sysmis) => sysmis
1942
1943 evaluate.sps:17.17-17.22: error: DEBUG EVALUATE: Function invocation
1944 any(number) does not match any known function.  Candidates are:
1945 ANY(number, number[, number]...)
1946 ANY(string, string[, string]...).
1947    17 | DEBUG EVALUATE /any(1).
1948       |                 ^~~~~~
1949
1950 any(1) => error
1951
1952 evaluate.sps:18.17-18.33: error: DEBUG EVALUATE: Function invocation
1953 any(string, number, number, number) does not match any known function.
1954 Candidates are:
1955 ANY(number, number[, number]...)
1956 ANY(string, string[, string]...).
1957    18 | DEBUG EVALUATE /any('1', 2, 3, 4).
1958       |                 ^~~~~~~~~~~~~~~~~
1959
1960 any('1', 2, 3, 4) => error
1961
1962 evaluate.sps:19.17-19.33: error: DEBUG EVALUATE: Function invocation
1963 any(number, string, number, number) does not match any known function.
1964 Candidates are:
1965 ANY(number, number[, number]...)
1966 ANY(string, string[, string]...).
1967    19 | DEBUG EVALUATE /any(1, '2', 3, 4).
1968       |                 ^~~~~~~~~~~~~~~~~
1969
1970 any(1, '2', 3, 4) => error
1971
1972 evaluate.sps:20.17-20.33: error: DEBUG EVALUATE: Function invocation
1973 any(number, number, string, number) does not match any known function.
1974 Candidates are:
1975 ANY(number, number[, number]...)
1976 ANY(string, string[, string]...).
1977    20 | DEBUG EVALUATE /any(1, 2, '3', 4).
1978       |                 ^~~~~~~~~~~~~~~~~
1979
1980 any(1, 2, '3', 4) => error
1981
1982 evaluate.sps:21.17-21.33: error: DEBUG EVALUATE: Function invocation
1983 any(number, number, number, string) does not match any known function.
1984 Candidates are:
1985 ANY(number, number[, number]...)
1986 ANY(string, string[, string]...).
1987    21 | DEBUG EVALUATE /any(1, 2, 3, '4').
1988       |                 ^~~~~~~~~~~~~~~~~
1989
1990 any(1, 2, 3, '4') => error
1991
1992 any('', 'a', '', 'c') => true
1993
1994 any('a', 'a', 'b', 'c') => true
1995
1996 any('b', 'a', 'b', 'c') => true
1997
1998 any('c', 'a', 'b', 'c') => true
1999
2000 any('e', 'a', 'b', 'c') => false
2001
2002 any('a', 'a', 'a', 'a') => true
2003
2004 any('', 'a', 'a', 'a') => false
2005
2006 any('a', '', '', '') => false
2007
2008 evaluate.sps:31.17-31.24: error: DEBUG EVALUATE: Function invocation
2009 any(string) does not match any known function.  Candidates are:
2010 ANY(number, number[, number]...)
2011 ANY(string, string[, string]...).
2012    31 | DEBUG EVALUATE /any('a').
2013       |                 ^~~~~~~~
2014
2015 any('a') => error
2016
2017 any('a', 'a  ', 'b', 'c') => true
2018
2019 any('b   ', 'a', 'b', 'c') => true
2020
2021 any('c   ', 'a', 'b', 'c     ') => true
2022
2023 evaluate.sps:36.17-36.39: error: DEBUG EVALUATE: Function invocation
2024 any(format, string, string, string) does not match any known function.
2025 Candidates are:
2026 ANY(number, number[, number]...)
2027 ANY(string, string[, string]...).
2028    36 | DEBUG EVALUATE /any(a10, 'b', 'c', 'd').
2029       |                 ^~~~~~~~~~~~~~~~~~~~~~~
2030
2031 any(a10, 'b', 'c', 'd') => error
2032
2033 evaluate.sps:37.26: error: DEBUG EVALUATE: Unknown identifier b.
2034    37 | DEBUG EVALUATE /any('a', b, 'c', 'd').
2035       |                          ^
2036
2037 any('a', b, 'c', 'd') => error
2038
2039 evaluate.sps:38.31: error: DEBUG EVALUATE: Unknown identifier c.
2040    38 | DEBUG EVALUATE /any('a', 'b', c, 'd').
2041       |                               ^
2042
2043 any('a', 'b', c, 'd') => error
2044
2045 evaluate.sps:39.36: error: DEBUG EVALUATE: Unknown identifier d.
2046    39 | DEBUG EVALUATE /any('a', 'b', 'c', d).
2047       |                                    ^
2048
2049 any('a', 'b', 'c', d) => error
2050 ]])
2051 done
2052 AT_CLEANUP
2053
2054 AT_SETUP([expressions - RANGE])
2055 AT_KEYWORDS([expression expressions evaluate])
2056 AT_DATA([evaluate-base.sps], [dnl
2057 SET EPOCH 1940.
2058 DEBUG EVALUATE SET opt.
2059
2060 DEBUG EVALUATE /range(5, 1, 10).
2061 DEBUG EVALUATE /range(1, 1, 10).
2062 DEBUG EVALUATE /range(10, 1, 10).
2063 DEBUG EVALUATE /range(-1, 1, 10).
2064 DEBUG EVALUATE /range(12, 1, 10).
2065
2066 DEBUG EVALUATE /range(5, $sysmis, 6, 1, 10).
2067 DEBUG EVALUATE /range(5, $sysmis, $sysmis, 1, 10).
2068 DEBUG EVALUATE /range(1, 1, 10, 6, $sysmis).
2069 DEBUG EVALUATE /range(1, 1, 10, $sysmis, $sysmis).
2070
2071 DEBUG EVALUATE /range(5, 5, 10, 3, 7).
2072 DEBUG EVALUATE /range(5, 10, 5, 3, 7).
2073 DEBUG EVALUATE /range(5, 3, 7, 5, 10).
2074 DEBUG EVALUATE /range(5, 3, 7, 10, 5).
2075
2076 DEBUG EVALUATE /range($sysmis, 1, 10).
2077 DEBUG EVALUATE /range(5, 1, $sysmis).
2078 DEBUG EVALUATE /range(5, $sysmis, 10).
2079 DEBUG EVALUATE /range(1, 1, $sysmis).
2080 DEBUG EVALUATE /range(10, $sysmis, 10).
2081 DEBUG EVALUATE /range(5, 10, 5).
2082 DEBUG EVALUATE /range($sysmis, $sysmis, 10).
2083 DEBUG EVALUATE /range($sysmis, 1, $sysmis).
2084 DEBUG EVALUATE /range($sysmis, $sysmis, $sysmis).
2085
2086 DEBUG EVALUATE /range(0, 1, 8, 10, 18).
2087 DEBUG EVALUATE /range(1, 1, 8, 10, 18).
2088 DEBUG EVALUATE /range(6, 1, 8, 10, 18).
2089 DEBUG EVALUATE /range(8, 1, 8, 10, 18).
2090 DEBUG EVALUATE /range(9, 1, 8, 10, 18).
2091 DEBUG EVALUATE /range(10, 1, 8, 10, 18).
2092 DEBUG EVALUATE /range(13, 1, 8, 10, 18).
2093 DEBUG EVALUATE /range(16, 1, 8, 10, 18).
2094 DEBUG EVALUATE /range(18, 1, 8, 10, 18).
2095 DEBUG EVALUATE /range(20, 1, 8, 10, 18).
2096 DEBUG EVALUATE /range(1).
2097 DEBUG EVALUATE /range(1, 2).
2098 DEBUG EVALUATE /range(1, 2, 3, 4).
2099 DEBUG EVALUATE /range(1, 2, 3, 4, 5, 6).
2100 DEBUG EVALUATE /range('1', 2, 3).
2101 DEBUG EVALUATE /range(1, '2', 3).
2102 DEBUG EVALUATE /range(1, 2, '3').
2103
2104 DEBUG EVALUATE /range('123', '111', '888').
2105 DEBUG EVALUATE /range('111', '111', '888').
2106 DEBUG EVALUATE /range('888', '111', '888').
2107 DEBUG EVALUATE /range('110', '111', '888').
2108 DEBUG EVALUATE /range('889', '111', '888').
2109 DEBUG EVALUATE /range('000', '111', '888').
2110 DEBUG EVALUATE /range('999', '111', '888').
2111
2112 DEBUG EVALUATE /range('123   ', '111', '888').
2113 DEBUG EVALUATE /range('123', '111   ', '888').
2114 DEBUG EVALUATE /range('123', '111', '888   ').
2115 DEBUG EVALUATE /range('123', '111    ', '888   ').
2116
2117 DEBUG EVALUATE /range('00', '01', '08', '10', '18').
2118 DEBUG EVALUATE /range('01', '01', '08', '10', '18').
2119 DEBUG EVALUATE /range('06', '01', '08', '10', '18').
2120 DEBUG EVALUATE /range('08', '01', '08', '10', '18').
2121 DEBUG EVALUATE /range('09', '01', '08', '10', '18').
2122 DEBUG EVALUATE /range('10', '01', '08', '10', '18').
2123 DEBUG EVALUATE /range('15', '01', '08', '10', '18').
2124 DEBUG EVALUATE /range('18', '01', '08', '10', '18').
2125 DEBUG EVALUATE /range('19', '01', '08', '10', '18').
2126
2127 DEBUG EVALUATE /range('07', '01', '08', '18', '10').
2128 DEBUG EVALUATE /range('12', '08', '01', '10', '18').
2129
2130 DEBUG EVALUATE /range('1').
2131 DEBUG EVALUATE /range('1', '2').
2132 DEBUG EVALUATE /range('1', '2', '3', '4').
2133 DEBUG EVALUATE /range('1', '2', '3', '4', '5', '6').
2134 DEBUG EVALUATE /range(1, '2', '3').
2135 DEBUG EVALUATE /range('1', 2, '3').
2136 DEBUG EVALUATE /range('1', '2', 3).
2137 ])
2138
2139 for opt in OPT NOOPT; do
2140     AS_BOX([$opt])
2141     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2142     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
2143 [[range(5, 1, 10) => true
2144
2145 range(1, 1, 10) => true
2146
2147 range(10, 1, 10) => true
2148
2149 range(-1, 1, 10) => false
2150
2151 range(12, 1, 10) => false
2152
2153 range(5, $sysmis, 6, 1, 10) => true
2154
2155 range(5, $sysmis, $sysmis, 1, 10) => true
2156
2157 range(1, 1, 10, 6, $sysmis) => true
2158
2159 range(1, 1, 10, $sysmis, $sysmis) => true
2160
2161 range(5, 5, 10, 3, 7) => true
2162
2163 range(5, 10, 5, 3, 7) => sysmis
2164
2165 range(5, 3, 7, 5, 10) => true
2166
2167 range(5, 3, 7, 10, 5) => sysmis
2168
2169 range($sysmis, 1, 10) => sysmis
2170
2171 range(5, 1, $sysmis) => sysmis
2172
2173 range(5, $sysmis, 10) => sysmis
2174
2175 range(1, 1, $sysmis) => sysmis
2176
2177 range(10, $sysmis, 10) => sysmis
2178
2179 range(5, 10, 5) => sysmis
2180
2181 range($sysmis, $sysmis, 10) => sysmis
2182
2183 range($sysmis, 1, $sysmis) => sysmis
2184
2185 range($sysmis, $sysmis, $sysmis) => sysmis
2186
2187 range(0, 1, 8, 10, 18) => false
2188
2189 range(1, 1, 8, 10, 18) => true
2190
2191 range(6, 1, 8, 10, 18) => true
2192
2193 range(8, 1, 8, 10, 18) => true
2194
2195 range(9, 1, 8, 10, 18) => false
2196
2197 range(10, 1, 8, 10, 18) => true
2198
2199 range(13, 1, 8, 10, 18) => true
2200
2201 range(16, 1, 8, 10, 18) => true
2202
2203 range(18, 1, 8, 10, 18) => true
2204
2205 range(20, 1, 8, 10, 18) => false
2206
2207 evaluate.sps:40.17-40.24: error: DEBUG EVALUATE: Function invocation
2208 range(number) does not match any known function.  Candidates are:
2209 RANGE(number, number, number[, number, number]...)
2210 RANGE(string, string, string[, string, string]...).
2211    40 | DEBUG EVALUATE /range(1).
2212       |                 ^~~~~~~~
2213
2214 range(1) => error
2215
2216 evaluate.sps:41.17-41.27: error: DEBUG EVALUATE: RANGE(number, number, number[,
2217 number, number]...) must have an odd number of arguments.
2218    41 | DEBUG EVALUATE /range(1, 2).
2219       |                 ^~~~~~~~~~~
2220
2221 range(1, 2) => error
2222
2223 evaluate.sps:42.17-42.33: error: DEBUG EVALUATE: RANGE(number, number, number[,
2224 number, number]...) must have an odd number of arguments.
2225    42 | DEBUG EVALUATE /range(1, 2, 3, 4).
2226       |                 ^~~~~~~~~~~~~~~~~
2227
2228 range(1, 2, 3, 4) => error
2229
2230 evaluate.sps:43.17-43.39: error: DEBUG EVALUATE: RANGE(number, number, number[,
2231 number, number]...) must have an odd number of arguments.
2232    43 | DEBUG EVALUATE /range(1, 2, 3, 4, 5, 6).
2233       |                 ^~~~~~~~~~~~~~~~~~~~~~~
2234
2235 range(1, 2, 3, 4, 5, 6) => error
2236
2237 evaluate.sps:44.17-44.32: error: DEBUG EVALUATE: Function invocation
2238 range(string, number, number) does not match any known function.  Candidates
2239 are:
2240 RANGE(number, number, number[, number, number]...)
2241 RANGE(string, string, string[, string, string]...).
2242    44 | DEBUG EVALUATE /range('1', 2, 3).
2243       |                 ^~~~~~~~~~~~~~~~
2244
2245 range('1', 2, 3) => error
2246
2247 evaluate.sps:45.17-45.32: error: DEBUG EVALUATE: Function invocation
2248 range(number, string, number) does not match any known function.  Candidates
2249 are:
2250 RANGE(number, number, number[, number, number]...)
2251 RANGE(string, string, string[, string, string]...).
2252    45 | DEBUG EVALUATE /range(1, '2', 3).
2253       |                 ^~~~~~~~~~~~~~~~
2254
2255 range(1, '2', 3) => error
2256
2257 evaluate.sps:46.17-46.32: error: DEBUG EVALUATE: Function invocation
2258 range(number, number, string) does not match any known function.  Candidates
2259 are:
2260 RANGE(number, number, number[, number, number]...)
2261 RANGE(string, string, string[, string, string]...).
2262    46 | DEBUG EVALUATE /range(1, 2, '3').
2263       |                 ^~~~~~~~~~~~~~~~
2264
2265 range(1, 2, '3') => error
2266
2267 range('123', '111', '888') => true
2268
2269 range('111', '111', '888') => true
2270
2271 range('888', '111', '888') => true
2272
2273 range('110', '111', '888') => false
2274
2275 range('889', '111', '888') => false
2276
2277 range('000', '111', '888') => false
2278
2279 range('999', '111', '888') => false
2280
2281 range('123   ', '111', '888') => true
2282
2283 range('123', '111   ', '888') => true
2284
2285 range('123', '111', '888   ') => true
2286
2287 range('123', '111    ', '888   ') => true
2288
2289 range('00', '01', '08', '10', '18') => false
2290
2291 range('01', '01', '08', '10', '18') => true
2292
2293 range('06', '01', '08', '10', '18') => true
2294
2295 range('08', '01', '08', '10', '18') => true
2296
2297 range('09', '01', '08', '10', '18') => false
2298
2299 range('10', '01', '08', '10', '18') => true
2300
2301 range('15', '01', '08', '10', '18') => true
2302
2303 range('18', '01', '08', '10', '18') => true
2304
2305 range('19', '01', '08', '10', '18') => false
2306
2307 range('07', '01', '08', '18', '10') => sysmis
2308
2309 range('12', '08', '01', '10', '18') => sysmis
2310
2311 evaluate.sps:74.17-74.26: error: DEBUG EVALUATE: Function invocation
2312 range(string) does not match any known function.  Candidates are:
2313 RANGE(number, number, number[, number, number]...)
2314 RANGE(string, string, string[, string, string]...).
2315    74 | DEBUG EVALUATE /range('1').
2316       |                 ^~~~~~~~~~
2317
2318 range('1') => error
2319
2320 evaluate.sps:75.17-75.31: error: DEBUG EVALUATE: RANGE(string, string, string[,
2321 string, string]...) must have an odd number of arguments.
2322    75 | DEBUG EVALUATE /range('1', '2').
2323       |                 ^~~~~~~~~~~~~~~
2324
2325 range('1', '2') => error
2326
2327 evaluate.sps:76.17-76.41: error: DEBUG EVALUATE: RANGE(string, string, string[,
2328 string, string]...) must have an odd number of arguments.
2329    76 | DEBUG EVALUATE /range('1', '2', '3', '4').
2330       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
2331
2332 range('1', '2', '3', '4') => error
2333
2334 evaluate.sps:77.17-77.51: error: DEBUG EVALUATE: RANGE(string, string, string[,
2335 string, string]...) must have an odd number of arguments.
2336    77 | DEBUG EVALUATE /range('1', '2', '3', '4', '5', '6').
2337       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2338
2339 range('1', '2', '3', '4', '5', '6') => error
2340
2341 evaluate.sps:78.17-78.34: error: DEBUG EVALUATE: Function invocation
2342 range(number, string, string) does not match any known function.  Candidates
2343 are:
2344 RANGE(number, number, number[, number, number]...)
2345 RANGE(string, string, string[, string, string]...).
2346    78 | DEBUG EVALUATE /range(1, '2', '3').
2347       |                 ^~~~~~~~~~~~~~~~~~
2348
2349 range(1, '2', '3') => error
2350
2351 evaluate.sps:79.17-79.34: error: DEBUG EVALUATE: Function invocation
2352 range(string, number, string) does not match any known function.  Candidates
2353 are:
2354 RANGE(number, number, number[, number, number]...)
2355 RANGE(string, string, string[, string, string]...).
2356    79 | DEBUG EVALUATE /range('1', 2, '3').
2357       |                 ^~~~~~~~~~~~~~~~~~
2358
2359 range('1', 2, '3') => error
2360
2361 evaluate.sps:80.17-80.34: error: DEBUG EVALUATE: Function invocation
2362 range(string, string, number) does not match any known function.  Candidates
2363 are:
2364 RANGE(number, number, number[, number, number]...)
2365 RANGE(string, string, string[, string, string]...).
2366    80 | DEBUG EVALUATE /range('1', '2', 3).
2367       |                 ^~~~~~~~~~~~~~~~~~
2368
2369 range('1', '2', 3) => error
2370 ]])
2371 done
2372 AT_CLEANUP
2373
2374 AT_SETUP([expressions - MAX MIN])
2375 AT_KEYWORDS([expression expressions evaluate])
2376 AT_DATA([evaluate-base.sps], [dnl
2377 SET EPOCH 1940.
2378 DEBUG EVALUATE SET opt.
2379 DEBUG EVALUATE /max(1, 2, 3, 4, 5).
2380 DEBUG EVALUATE /max(1, $sysmis, 2, 3, $sysmis, 4, 5).
2381 DEBUG EVALUATE /max(1, 2).
2382 DEBUG EVALUATE /max().
2383 DEBUG EVALUATE /max(1).
2384 DEBUG EVALUATE /max(1, $sysmis).
2385 DEBUG EVALUATE /max(1, 2, 3, $sysmis).
2386 DEBUG EVALUATE /max.4(1, 2, 3, $sysmis).
2387 DEBUG EVALUATE /max.4(1, 2, 3).
2388
2389 DEBUG EVALUATE /max("2", "3", "5", "1", "4").
2390 DEBUG EVALUATE /max("1", "2").
2391 DEBUG EVALUATE /max("1").
2392
2393 DEBUG EVALUATE /min(1, 2, 3, 4, 5).
2394 DEBUG EVALUATE /min(1, $sysmis, 2, 3, $sysmis, 4, 5).
2395 DEBUG EVALUATE /min(1, 2).
2396 DEBUG EVALUATE /min().
2397 DEBUG EVALUATE /min(1).
2398 DEBUG EVALUATE /min(1, $sysmis).
2399 DEBUG EVALUATE /min(1, 2, 3, $sysmis).
2400 DEBUG EVALUATE /min.4(1, 2, 3, $sysmis).
2401 DEBUG EVALUATE /min.4(1, 2, 3).
2402
2403 DEBUG EVALUATE /min("2", "3", "5", "1", "4").
2404 DEBUG EVALUATE /min("1", "2").
2405 DEBUG EVALUATE /min("1").
2406 ])
2407
2408 for opt in OPT NOOPT; do
2409     AS_BOX([$opt])
2410     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2411     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
2412 [[max(1, 2, 3, 4, 5) => 5.00
2413
2414 max(1, $sysmis, 2, 3, $sysmis, 4, 5) => 5.00
2415
2416 max(1, 2) => 2.00
2417
2418 evaluate.sps:6.17-6.20: error: DEBUG EVALUATE: Function invocation max() does
2419 not match any known function.  Candidates are:
2420 MAX(number[, number]...)
2421 MAX(string[, string]...).
2422     6 | DEBUG EVALUATE /max().
2423       |                 ^~~~
2424
2425 max() => error
2426
2427 max(1) => 1.00
2428
2429 max(1, $sysmis) => 1.00
2430
2431 max(1, 2, 3, $sysmis) => 3.00
2432
2433 max.4(1, 2, 3, $sysmis) => sysmis
2434
2435 evaluate.sps:11.17-11.30: error: DEBUG EVALUATE: For MAX(number[, number]...)
2436 with 3 arguments, at most 3 (not 4) may be required to be valid.
2437    11 | DEBUG EVALUATE /max.4(1, 2, 3).
2438       |                 ^~~~~~~~~~~~~~
2439
2440 max.4(1, 2, 3) => error
2441
2442 max("2", "3", "5", "1", "4") => "5"
2443
2444 max("1", "2") => "2"
2445
2446 max("1") => "1"
2447
2448 min(1, 2, 3, 4, 5) => 1.00
2449
2450 min(1, $sysmis, 2, 3, $sysmis, 4, 5) => 1.00
2451
2452 min(1, 2) => 1.00
2453
2454 evaluate.sps:20.17-20.20: error: DEBUG EVALUATE: Function invocation min() does
2455 not match any known function.  Candidates are:
2456 MIN(number[, number]...)
2457 MIN(string[, string]...).
2458    20 | DEBUG EVALUATE /min().
2459       |                 ^~~~
2460
2461 min() => error
2462
2463 min(1) => 1.00
2464
2465 min(1, $sysmis) => 1.00
2466
2467 min(1, 2, 3, $sysmis) => 1.00
2468
2469 min.4(1, 2, 3, $sysmis) => sysmis
2470
2471 evaluate.sps:25.17-25.30: error: DEBUG EVALUATE: For MIN(number[, number]...)
2472 with 3 arguments, at most 3 (not 4) may be required to be valid.
2473    25 | DEBUG EVALUATE /min.4(1, 2, 3).
2474       |                 ^~~~~~~~~~~~~~
2475
2476 min.4(1, 2, 3) => error
2477
2478 min("2", "3", "5", "1", "4") => "1"
2479
2480 min("1", "2") => "1"
2481
2482 min("1") => "1"
2483 ]])
2484 done
2485 AT_CLEANUP
2486
2487 AT_SETUP([expressions - CFVAR MEAN MEDIAN])
2488 AT_KEYWORDS([expression expressions evaluate])
2489 AT_DATA([evaluate-base.sps], [dnl
2490 SET EPOCH 1940.
2491 DEBUG EVALUATE SET opt.
2492
2493 DEBUG EVALUATE /cfvar(1, 2, 3, 4, 5).
2494 DEBUG EVALUATE /cfvar(1, $sysmis, 2, 3, $sysmis, 4, 5).
2495 DEBUG EVALUATE /cfvar(1, 2).
2496 DEBUG EVALUATE /cfvar(1).
2497 DEBUG EVALUATE /cfvar(1, $sysmis).
2498 DEBUG EVALUATE /cfvar(1, 2, 3, $sysmis).
2499 DEBUG EVALUATE /cfvar.4(1, 2, 3, $sysmis).
2500 DEBUG EVALUATE /cfvar.4(1, 2, 3).
2501 DEBUG EVALUATE /cfvar('x').
2502 DEBUG EVALUATE /cfvar('x', 1, 2, 3).
2503
2504 DEBUG EVALUATE /mean(1, 2, 3, 4, 5).
2505 DEBUG EVALUATE /mean(1, $sysmis, 2, 3, $sysmis, 4, 5).
2506 DEBUG EVALUATE /mean(1, 2).
2507 DEBUG EVALUATE /mean().
2508 DEBUG EVALUATE /mean(1).
2509 DEBUG EVALUATE /mean(1, $sysmis).
2510 DEBUG EVALUATE /mean(1, 2, 3, $sysmis).
2511 DEBUG EVALUATE /mean.4(1, 2, 3, $sysmis).
2512 DEBUG EVALUATE /mean.4(1, 2, 3).
2513
2514 DEBUG EVALUATE /median(1, 2, 3, 4, 5).
2515 DEBUG EVALUATE /median(2, 3, 4, 5, 1).
2516 DEBUG EVALUATE /median(2, 3, 4, 1, 5).
2517 DEBUG EVALUATE /median(2, 1, 4, 5, 3).
2518 DEBUG EVALUATE /median(1, 2, 3, 4).
2519 DEBUG EVALUATE /median(2, 3, 1, 4).
2520 DEBUG EVALUATE /median(2, 3, 4, 1).
2521 DEBUG EVALUATE /median(2, 1, 4, 3).
2522 DEBUG EVALUATE /median(1, $sysmis, 3, 4, 5).
2523 DEBUG EVALUATE /median(2, 3, 4, 5, $sysmis, 1).
2524 DEBUG EVALUATE /median($sysmis, $sysmis, $sysmis, 2, 3, 4, 1, 5).
2525 DEBUG EVALUATE /median(1, 2, 3).
2526 DEBUG EVALUATE /median(1).
2527 DEBUG EVALUATE /median(1, 2).
2528 DEBUG EVALUATE /median(1, 2, $sysmis).
2529 DEBUG EVALUATE /median(1, $sysmis, $sysmis).
2530 DEBUG EVALUATE /median($sysmis, $sysmis, $sysmis).
2531 DEBUG EVALUATE /median.3(1, 2, $sysmis).
2532 DEBUG EVALUATE /median.2(1, $sysmis).
2533 ])
2534
2535 for opt in OPT NOOPT; do
2536     AS_BOX([$opt])
2537     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2538     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
2539 [[cfvar(1, 2, 3, 4, 5) => 0.53
2540
2541 cfvar(1, $sysmis, 2, 3, $sysmis, 4, 5) => 0.53
2542
2543 cfvar(1, 2) => 0.47
2544
2545 evaluate.sps:7.17-7.24: error: DEBUG EVALUATE: Type mismatch invoking
2546 CFVAR(number, number[, number]...) as cfvar(number).
2547     7 | DEBUG EVALUATE /cfvar(1).
2548       |                 ^~~~~~~~
2549
2550 cfvar(1) => error
2551
2552 cfvar(1, $sysmis) => sysmis
2553
2554 cfvar(1, 2, 3, $sysmis) => 0.50
2555
2556 cfvar.4(1, 2, 3, $sysmis) => sysmis
2557
2558 evaluate.sps:11.17-11.32: error: DEBUG EVALUATE: For CFVAR(number, number[,
2559 number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.
2560    11 | DEBUG EVALUATE /cfvar.4(1, 2, 3).
2561       |                 ^~~~~~~~~~~~~~~~
2562
2563 cfvar.4(1, 2, 3) => error
2564
2565 evaluate.sps:12.17-12.26: error: DEBUG EVALUATE: Type mismatch invoking
2566 CFVAR(number, number[, number]...) as cfvar(string).
2567    12 | DEBUG EVALUATE /cfvar('x').
2568       |                 ^~~~~~~~~~
2569
2570 evaluate.sps:12.23-12.25: note: DEBUG EVALUATE: This argument has type 'string'
2571 but 'number' is required.
2572    12 | DEBUG EVALUATE /cfvar('x').
2573       |                       ^~~
2574
2575 cfvar('x') => error
2576
2577 evaluate.sps:13.17-13.35: error: DEBUG EVALUATE: Type mismatch invoking
2578 CFVAR(number, number[, number]...) as cfvar(string, number, number, number).
2579    13 | DEBUG EVALUATE /cfvar('x', 1, 2, 3).
2580       |                 ^~~~~~~~~~~~~~~~~~~
2581
2582 cfvar('x', 1, 2, 3) => error
2583
2584 mean(1, 2, 3, 4, 5) => 3.00
2585
2586 mean(1, $sysmis, 2, 3, $sysmis, 4, 5) => 3.00
2587
2588 mean(1, 2) => 1.50
2589
2590 evaluate.sps:18.17-18.21: error: DEBUG EVALUATE: Type mismatch invoking
2591 MEAN(number[, number]...) as mean().
2592    18 | DEBUG EVALUATE /mean().
2593       |                 ^~~~~
2594
2595 mean() => error
2596
2597 mean(1) => 1.00
2598
2599 mean(1, $sysmis) => 1.00
2600
2601 mean(1, 2, 3, $sysmis) => 2.00
2602
2603 mean.4(1, 2, 3, $sysmis) => sysmis
2604
2605 evaluate.sps:23.17-23.31: error: DEBUG EVALUATE: For MEAN(number[, number]...)
2606 with 3 arguments, at most 3 (not 4) may be required to be valid.
2607    23 | DEBUG EVALUATE /mean.4(1, 2, 3).
2608       |                 ^~~~~~~~~~~~~~~
2609
2610 mean.4(1, 2, 3) => error
2611
2612 median(1, 2, 3, 4, 5) => 3.00
2613
2614 median(2, 3, 4, 5, 1) => 3.00
2615
2616 median(2, 3, 4, 1, 5) => 3.00
2617
2618 median(2, 1, 4, 5, 3) => 3.00
2619
2620 median(1, 2, 3, 4) => 2.50
2621
2622 median(2, 3, 1, 4) => 2.50
2623
2624 median(2, 3, 4, 1) => 2.50
2625
2626 median(2, 1, 4, 3) => 2.50
2627
2628 median(1, $sysmis, 3, 4, 5) => 3.50
2629
2630 median(2, 3, 4, 5, $sysmis, 1) => 3.00
2631
2632 median($sysmis, $sysmis, $sysmis, 2, 3, 4, 1, 5) => 3.00
2633
2634 median(1, 2, 3) => 2.00
2635
2636 median(1) => 1.00
2637
2638 median(1, 2) => 1.50
2639
2640 median(1, 2, $sysmis) => 1.50
2641
2642 median(1, $sysmis, $sysmis) => 1.00
2643
2644 median($sysmis, $sysmis, $sysmis) => sysmis
2645
2646 median.3(1, 2, $sysmis) => sysmis
2647
2648 median.2(1, $sysmis) => sysmis
2649 ]])
2650 done
2651 AT_CLEANUP
2652
2653 AT_SETUP([expressions - SD SUM VARIANCE])
2654 AT_KEYWORDS([expression expressions evaluate])
2655 AT_DATA([evaluate-base.sps], [dnl
2656 SET EPOCH 1940.
2657 DEBUG EVALUATE SET opt.
2658
2659 DEBUG EVALUATE /sd(1, 2, 3, 4, 5).
2660 DEBUG EVALUATE /sd(1, $sysmis, 2, 3, $sysmis, 4, 5).
2661 DEBUG EVALUATE /sd(1, 2).
2662 DEBUG EVALUATE /sd(1).
2663 DEBUG EVALUATE /sd(1, $sysmis).
2664 DEBUG EVALUATE /sd(1, 2, 3, $sysmis).
2665 DEBUG EVALUATE /sd.4(1, 2, 3, $sysmis).
2666 DEBUG EVALUATE /sd.4(1, 2, 3).
2667 DEBUG EVALUATE /sd('x').
2668 DEBUG EVALUATE /sd('x', 1, 2, 3).
2669 DEBUG EVALUATE (a=1)(b=2)(c=3)(d=4)(e=5)(f=6)(g=7)/sd(a TO c).
2670
2671 DEBUG EVALUATE /sum(1, 2, 3, 4, 5).
2672 DEBUG EVALUATE /sum(1, $sysmis, 2, 3, $sysmis, 4, 5).
2673 DEBUG EVALUATE /sum(1, 2).
2674 DEBUG EVALUATE /sum().
2675 DEBUG EVALUATE /sum(1).
2676 DEBUG EVALUATE /sum(1, $sysmis).
2677 DEBUG EVALUATE /sum(1, 2, 3, $sysmis).
2678 DEBUG EVALUATE /sum.4(1, 2, 3, $sysmis).
2679 DEBUG EVALUATE /sum.4(1, 2, 3).
2680 DEBUG EVALUATE (a=1)(b=2)(c=3)(d=4)(e=5)(f=6)(g=7)/sum(b TO F).
2681
2682 DEBUG EVALUATE /variance(1, 2, 3, 4, 5).
2683 DEBUG EVALUATE /variance(1, $sysmis, 2, 3, $sysmis, 4, 5).
2684 DEBUG EVALUATE /variance(1, 2).
2685 DEBUG EVALUATE /variance(1).
2686 DEBUG EVALUATE /variance(1, $sysmis).
2687 DEBUG EVALUATE /variance(1, 2, 3, $sysmis).
2688 DEBUG EVALUATE /variance.4(1, 2, 3, $sysmis).
2689 DEBUG EVALUATE /variance.4(1, 2, 3).
2690 DEBUG EVALUATE /variance('x').
2691 DEBUG EVALUATE /variance('x', 1, 2, 3).
2692 DEBUG EVALUATE (a=1)(b=2)(c=3)(d=4)(e=5)(f=6)(g=7)/variance(a TO e).
2693 ])
2694
2695 for opt in OPT NOOPT; do
2696     AS_BOX([$opt])
2697     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2698     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
2699 [[sd(1, 2, 3, 4, 5) => 1.58
2700
2701 sd(1, $sysmis, 2, 3, $sysmis, 4, 5) => 1.58
2702
2703 sd(1, 2) => 0.71
2704
2705 evaluate.sps:7.17-7.21: error: DEBUG EVALUATE: Type mismatch invoking
2706 SD(number, number[, number]...) as sd(number).
2707     7 | DEBUG EVALUATE /sd(1).
2708       |                 ^~~~~
2709
2710 sd(1) => error
2711
2712 sd(1, $sysmis) => sysmis
2713
2714 sd(1, 2, 3, $sysmis) => 1.00
2715
2716 sd.4(1, 2, 3, $sysmis) => sysmis
2717
2718 evaluate.sps:11.17-11.29: error: DEBUG EVALUATE: For SD(number, number[,
2719 number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.
2720    11 | DEBUG EVALUATE /sd.4(1, 2, 3).
2721       |                 ^~~~~~~~~~~~~
2722
2723 sd.4(1, 2, 3) => error
2724
2725 evaluate.sps:12.17-12.23: error: DEBUG EVALUATE: Type mismatch invoking
2726 SD(number, number[, number]...) as sd(string).
2727    12 | DEBUG EVALUATE /sd('x').
2728       |                 ^~~~~~~
2729
2730 evaluate.sps:12.20-12.22: note: DEBUG EVALUATE: This argument has type 'string'
2731 but 'number' is required.
2732    12 | DEBUG EVALUATE /sd('x').
2733       |                    ^~~
2734
2735 sd('x') => error
2736
2737 evaluate.sps:13.17-13.32: error: DEBUG EVALUATE: Type mismatch invoking
2738 SD(number, number[, number]...) as sd(string, number, number, number).
2739    13 | DEBUG EVALUATE /sd('x', 1, 2, 3).
2740       |                 ^~~~~~~~~~~~~~~~
2741
2742 sd('x', 1, 2, 3) => error
2743
2744 sd(a TO c) => 1.00
2745
2746 sum(1, 2, 3, 4, 5) => 15.00
2747
2748 sum(1, $sysmis, 2, 3, $sysmis, 4, 5) => 15.00
2749
2750 sum(1, 2) => 3.00
2751
2752 evaluate.sps:19.17-19.20: error: DEBUG EVALUATE: Type mismatch invoking
2753 SUM(number[, number]...) as sum().
2754    19 | DEBUG EVALUATE /sum().
2755       |                 ^~~~
2756
2757 sum() => error
2758
2759 sum(1) => 1.00
2760
2761 sum(1, $sysmis) => 1.00
2762
2763 sum(1, 2, 3, $sysmis) => 6.00
2764
2765 sum.4(1, 2, 3, $sysmis) => sysmis
2766
2767 evaluate.sps:24.17-24.30: error: DEBUG EVALUATE: For SUM(number[, number]...)
2768 with 3 arguments, at most 3 (not 4) may be required to be valid.
2769    24 | DEBUG EVALUATE /sum.4(1, 2, 3).
2770       |                 ^~~~~~~~~~~~~~
2771
2772 sum.4(1, 2, 3) => error
2773
2774 sum(b TO F) => 20.00
2775
2776 variance(1, 2, 3, 4, 5) => 2.50
2777
2778 variance(1, $sysmis, 2, 3, $sysmis, 4, 5) => 2.50
2779
2780 variance(1, 2) => 0.50
2781
2782 evaluate.sps:30.17-30.27: error: DEBUG EVALUATE: Type mismatch invoking
2783 VARIANCE(number, number[, number]...) as variance(number).
2784    30 | DEBUG EVALUATE /variance(1).
2785       |                 ^~~~~~~~~~~
2786
2787 variance(1) => error
2788
2789 variance(1, $sysmis) => sysmis
2790
2791 variance(1, 2, 3, $sysmis) => 1.00
2792
2793 variance.4(1, 2, 3, $sysmis) => sysmis
2794
2795 evaluate.sps:34.17-34.35: error: DEBUG EVALUATE: For VARIANCE(number, number[,
2796 number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.
2797    34 | DEBUG EVALUATE /variance.4(1, 2, 3).
2798       |                 ^~~~~~~~~~~~~~~~~~~
2799
2800 variance.4(1, 2, 3) => error
2801
2802 evaluate.sps:35.17-35.29: error: DEBUG EVALUATE: Type mismatch invoking
2803 VARIANCE(number, number[, number]...) as variance(string).
2804    35 | DEBUG EVALUATE /variance('x').
2805       |                 ^~~~~~~~~~~~~
2806
2807 evaluate.sps:35.26-35.28: note: DEBUG EVALUATE: This argument has type 'string'
2808 but 'number' is required.
2809    35 | DEBUG EVALUATE /variance('x').
2810       |                          ^~~
2811
2812 variance('x') => error
2813
2814 evaluate.sps:36.17-36.38: error: DEBUG EVALUATE: Type mismatch invoking
2815 VARIANCE(number, number[, number]...) as variance(string, number, number,
2816 number).
2817    36 | DEBUG EVALUATE /variance('x', 1, 2, 3).
2818       |                 ^~~~~~~~~~~~~~~~~~~~~~
2819
2820 variance('x', 1, 2, 3) => error
2821
2822 variance(a TO e) => 2.50
2823 ]])
2824 done
2825 AT_CLEANUP
2826
2827 AT_SETUP([expressions - CONCAT])
2828 AT_KEYWORDS([expression expressions evaluate])
2829 AT_DATA([evaluate-base.sps], [dnl
2830 SET EPOCH 1940.
2831 DEBUG EVALUATE SET opt.
2832
2833 DEBUG EVALUATE /concat('').
2834 DEBUG EVALUATE /concat('a', 'b').
2835 DEBUG EVALUATE /concat('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h').
2836 DEBUG EVALUATE /concat('abcdefgh', 'ijklmnopq').
2837 DEBUG EVALUATE /concat('a', 1).
2838 DEBUG EVALUATE /concat(1, 2).
2839 ])
2840
2841 for opt in OPT NOOPT; do
2842     AS_BOX([$opt])
2843     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2844     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
2845 [[concat('') => ""
2846
2847 concat('a', 'b') => "ab"
2848
2849 concat('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') => "abcdefgh"
2850
2851 concat('abcdefgh', 'ijklmnopq') => "abcdefghijklmnopq"
2852
2853 evaluate.sps:8.17-8.30: error: DEBUG EVALUATE: Type mismatch invoking
2854 CONCAT(string[, string]...) as concat(string, number).
2855     8 | DEBUG EVALUATE /concat('a', 1).
2856       |                 ^~~~~~~~~~~~~~
2857
2858 concat('a', 1) => error
2859
2860 evaluate.sps:9.17-9.28: error: DEBUG EVALUATE: Type mismatch invoking
2861 CONCAT(string[, string]...) as concat(number, number).
2862     9 | DEBUG EVALUATE /concat(1, 2).
2863       |                 ^~~~~~~~~~~~
2864
2865 concat(1, 2) => error
2866 ]])
2867 done
2868 AT_CLEANUP
2869
2870 AT_SETUP([expressions - INDEX])
2871 AT_KEYWORDS([expression expressions evaluate])
2872 AT_DATA([evaluate-base.sps], [dnl
2873 SET EPOCH 1940.
2874 DEBUG EVALUATE SET opt.
2875
2876 DEBUG EVALUATE /index('abcbcde', 'bc').
2877 DEBUG EVALUATE /index('abcbcde', 'bcd').
2878 DEBUG EVALUATE /index('abcbcde', 'bcbc').
2879 DEBUG EVALUATE /index('abcdefgh', 'abc').
2880 DEBUG EVALUATE /index('abcdefgh', 'bcd').
2881 DEBUG EVALUATE /index('abcdefgh', 'cde').
2882 DEBUG EVALUATE /index('abcdefgh', 'def').
2883 DEBUG EVALUATE /index('abcdefgh', 'efg').
2884 DEBUG EVALUATE /index('abcdefgh', 'fgh').
2885 DEBUG EVALUATE /index('abcdefgh', 'fghi').
2886 DEBUG EVALUATE /index('abcdefgh', 'x').
2887 DEBUG EVALUATE /index('abcdefgh', 'abch').
2888 DEBUG EVALUATE /index('banana', 'na').
2889 DEBUG EVALUATE /index('banana', 'ana').
2890 DEBUG EVALUATE /index('', 'x').
2891 DEBUG EVALUATE /index('x', '').
2892 DEBUG EVALUATE /index('', '').
2893 DEBUG EVALUATE /index('abcdefgh', '').
2894 DEBUG EVALUATE /index('abcdefgh', 'alkjsfdjlskalkjfa').
2895
2896 DEBUG EVALUATE /index('abcbcde', 'bc', 1).
2897 DEBUG EVALUATE /index('abcbcde', 'dc', 1).
2898 DEBUG EVALUATE /index('abcbcde', 'abc', 1).
2899 DEBUG EVALUATE /index('abcbcde', 'bc', 2).
2900 DEBUG EVALUATE /index('abcbcde', 'dc', 2).
2901 DEBUG EVALUATE /index('abcbcde', 'abc', 1).
2902 DEBUG EVALUATE /index('abcbcde', 'bccb', 2).
2903 DEBUG EVALUATE /index('abcbcde', 'bcbc', 2).
2904 DEBUG EVALUATE /index('abcbcde', 'bcbc', $sysmis).
2905 DEBUG EVALUATE /index('abcbcde', 'bcbc', 3).
2906 DEBUG EVALUATE /index('abcbcde', '', 1).
2907 DEBUG EVALUATE /index('', '', 1).
2908 ])
2909
2910 for opt in OPT NOOPT; do
2911     AS_BOX([$opt])
2912     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2913     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
2914 index('abcbcde', 'bc') => 2.00
2915
2916 index('abcbcde', 'bcd') => 4.00
2917
2918 index('abcbcde', 'bcbc') => 2.00
2919
2920 index('abcdefgh', 'abc') => 1.00
2921
2922 index('abcdefgh', 'bcd') => 2.00
2923
2924 index('abcdefgh', 'cde') => 3.00
2925
2926 index('abcdefgh', 'def') => 4.00
2927
2928 index('abcdefgh', 'efg') => 5.00
2929
2930 index('abcdefgh', 'fgh') => 6.00
2931
2932 index('abcdefgh', 'fghi') => 0.00
2933
2934 index('abcdefgh', 'x') => 0.00
2935
2936 index('abcdefgh', 'abch') => 0.00
2937
2938 index('banana', 'na') => 3.00
2939
2940 index('banana', 'ana') => 2.00
2941
2942 index('', 'x') => 0.00
2943
2944 index('x', '') => 1.00
2945
2946 index('', '') => 1.00
2947
2948 index('abcdefgh', '') => 1.00
2949
2950 index('abcdefgh', 'alkjsfdjlskalkjfa') => 0.00
2951
2952 index('abcbcde', 'bc', 1) => 2.00
2953
2954 index('abcbcde', 'dc', 1) => 3.00
2955
2956 index('abcbcde', 'abc', 1) => 1.00
2957
2958 index('abcbcde', 'bc', 2) => 2.00
2959
2960 index('abcbcde', 'dc', 2) => 0.00
2961
2962 index('abcbcde', 'abc', 1) => 1.00
2963
2964 index('abcbcde', 'bccb', 2) => 2.00
2965
2966 index('abcbcde', 'bcbc', 2) => 2.00
2967
2968 index('abcbcde', 'bcbc', $sysmis) => sysmis
2969
2970 evaluate.sps:33.17-33.43: error: DEBUG EVALUATE: INDEX needle length argument
2971 must evenly divide the length of the needles argument.
2972    33 | DEBUG EVALUATE /index('abcbcde', 'bcbc', 3).
2973       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
2974
2975 evaluate.sps:33.34-33.39: note: DEBUG EVALUATE: The needles argument has length
2976 4.
2977    33 | DEBUG EVALUATE /index('abcbcde', 'bcbc', 3).
2978       |                                  ^~~~~~
2979
2980 evaluate.sps:33.42: note: DEBUG EVALUATE: The needle length argument has value
2981 3.
2982    33 | DEBUG EVALUATE /index('abcbcde', 'bcbc', 3).
2983       |                                          ^
2984
2985 index('abcbcde', 'bcbc', 3) => sysmis
2986
2987 index('abcbcde', '', 1) => 0.00
2988
2989 index('', '', 1) => 0.00
2990 ])
2991 done
2992 AT_CLEANUP
2993
2994 AT_SETUP([expressions - RINDEX])
2995 AT_KEYWORDS([expression expressions evaluate])
2996 AT_DATA([evaluate-base.sps], [dnl
2997 SET EPOCH 1940.
2998 DEBUG EVALUATE SET opt.
2999
3000 DEBUG EVALUATE /rindex('abcbcde', 'bc').
3001 DEBUG EVALUATE /rindex('abcbcde', 'bcd').
3002 DEBUG EVALUATE /rindex('abcbcde', 'bcbc').
3003 DEBUG EVALUATE /rindex('abcdefgh', 'abc').
3004 DEBUG EVALUATE /rindex('abcdefgh', 'bcd').
3005 DEBUG EVALUATE /rindex('abcdefgh', 'cde').
3006 DEBUG EVALUATE /rindex('abcdefgh', 'def').
3007 DEBUG EVALUATE /rindex('abcdefgh', 'efg').
3008 DEBUG EVALUATE /rindex('abcdefgh', 'fgh').
3009 DEBUG EVALUATE /rindex('abcdefgh', 'fghi').
3010 DEBUG EVALUATE /rindex('abcdefgh', 'x').
3011 DEBUG EVALUATE /rindex('abcdefgh', 'abch').
3012 DEBUG EVALUATE /rindex('banana', 'na').
3013 DEBUG EVALUATE /rindex('banana', 'ana').
3014 DEBUG EVALUATE /rindex('', 'x').
3015 DEBUG EVALUATE /rindex('x', '').
3016 DEBUG EVALUATE /rindex('', '').
3017 DEBUG EVALUATE /rindex('abcdefgh', '').
3018 DEBUG EVALUATE /rindex('abcdefgh', 'alkjsfdjlskalkjfa').
3019
3020 DEBUG EVALUATE /rindex('abcbcde', 'bc', 1).
3021 DEBUG EVALUATE /rindex('abcbcde', 'dc', 1).
3022 DEBUG EVALUATE /rindex('abcbcde', 'abc', 1).
3023 DEBUG EVALUATE /rindex('abcbcde', 'bc', 2).
3024 DEBUG EVALUATE /rindex('abcbcde', 'dc', 2).
3025 DEBUG EVALUATE /rindex('abcbcde', 'abc', 1).
3026 DEBUG EVALUATE /rindex('abcbcde', 'bccb', 2).
3027 DEBUG EVALUATE /rindex('abcbcde', 'bcbc', 2).
3028 DEBUG EVALUATE /rindex('abcbcde', 'bcbc', 0).
3029 DEBUG EVALUATE /rindex('abcbcde', 'bcbc', $sysmis).
3030 DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 2).
3031 DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', $sysmis).
3032 DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 'x').
3033 DEBUG EVALUATE /rindex(1, 'bcdfkjl', 2).
3034 DEBUG EVALUATE /rindex('aksj', 2, 2).
3035 DEBUG EVALUATE /rindex(1, 2, 3).
3036 DEBUG EVALUATE /rindex(1, 2, '3').
3037 DEBUG EVALUATE /rindex('abcbcde', '', 1).
3038 DEBUG EVALUATE /rindex('', '', 1).
3039 ])
3040
3041 for opt in OPT NOOPT; do
3042     AS_BOX([$opt])
3043     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3044     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3045 rindex('abcbcde', 'bc') => 4.00
3046
3047 rindex('abcbcde', 'bcd') => 4.00
3048
3049 rindex('abcbcde', 'bcbc') => 2.00
3050
3051 rindex('abcdefgh', 'abc') => 1.00
3052
3053 rindex('abcdefgh', 'bcd') => 2.00
3054
3055 rindex('abcdefgh', 'cde') => 3.00
3056
3057 rindex('abcdefgh', 'def') => 4.00
3058
3059 rindex('abcdefgh', 'efg') => 5.00
3060
3061 rindex('abcdefgh', 'fgh') => 6.00
3062
3063 rindex('abcdefgh', 'fghi') => 0.00
3064
3065 rindex('abcdefgh', 'x') => 0.00
3066
3067 rindex('abcdefgh', 'abch') => 0.00
3068
3069 rindex('banana', 'na') => 5.00
3070
3071 rindex('banana', 'ana') => 4.00
3072
3073 rindex('', 'x') => 0.00
3074
3075 rindex('x', '') => 2.00
3076
3077 rindex('', '') => 1.00
3078
3079 rindex('abcdefgh', '') => 9.00
3080
3081 rindex('abcdefgh', 'alkjsfdjlskalkjfa') => 0.00
3082
3083 rindex('abcbcde', 'bc', 1) => 5.00
3084
3085 rindex('abcbcde', 'dc', 1) => 6.00
3086
3087 rindex('abcbcde', 'abc', 1) => 5.00
3088
3089 rindex('abcbcde', 'bc', 2) => 4.00
3090
3091 rindex('abcbcde', 'dc', 2) => 0.00
3092
3093 rindex('abcbcde', 'abc', 1) => 5.00
3094
3095 rindex('abcbcde', 'bccb', 2) => 4.00
3096
3097 rindex('abcbcde', 'bcbc', 2) => 4.00
3098
3099 evaluate.sps:32.17-32.44: error: DEBUG EVALUATE: RINDEX needle length argument
3100 must evenly divide the length of the needles argument.
3101    32 | DEBUG EVALUATE /rindex('abcbcde', 'bcbc', 0).
3102       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
3103
3104 evaluate.sps:32.35-32.40: note: DEBUG EVALUATE: The needles argument has length
3105 4.
3106    32 | DEBUG EVALUATE /rindex('abcbcde', 'bcbc', 0).
3107       |                                   ^~~~~~
3108
3109 evaluate.sps:32.43: note: DEBUG EVALUATE: The needle length argument has value
3110 0.
3111    32 | DEBUG EVALUATE /rindex('abcbcde', 'bcbc', 0).
3112       |                                           ^
3113
3114 rindex('abcbcde', 'bcbc', 0) => sysmis
3115
3116 rindex('abcbcde', 'bcbc', $sysmis) => sysmis
3117
3118 evaluate.sps:34.17-34.45: error: DEBUG EVALUATE: RINDEX needle length argument
3119 must evenly divide the length of the needles argument.
3120    34 | DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 2).
3121       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3122
3123 evaluate.sps:34.35-34.41: note: DEBUG EVALUATE: The needles argument has length
3124 5.
3125    34 | DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 2).
3126       |                                   ^~~~~~~
3127
3128 evaluate.sps:34.44: note: DEBUG EVALUATE: The needle length argument has value
3129 2.
3130    34 | DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 2).
3131       |                                            ^
3132
3133 rindex('abcbcde', 'bcbcg', 2) => sysmis
3134
3135 rindex('abcbcde', 'bcbcg', $sysmis) => sysmis
3136
3137 evaluate.sps:36.17-36.47: error: DEBUG EVALUATE: Function invocation
3138 rindex(string, string, string) does not match any known function.  Candidates
3139 are:
3140 RINDEX(string, string)
3141 RINDEX(string, string, integer).
3142    36 | DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 'x').
3143       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3144
3145 rindex('abcbcde', 'bcbcg', 'x') => error
3146
3147 evaluate.sps:37.17-37.39: error: DEBUG EVALUATE: Function invocation
3148 rindex(number, string, number) does not match any known function.  Candidates
3149 are:
3150 RINDEX(string, string)
3151 RINDEX(string, string, integer).
3152    37 | DEBUG EVALUATE /rindex(1, 'bcdfkjl', 2).
3153       |                 ^~~~~~~~~~~~~~~~~~~~~~~
3154
3155 rindex(1, 'bcdfkjl', 2) => error
3156
3157 evaluate.sps:38.17-38.36: error: DEBUG EVALUATE: Function invocation
3158 rindex(string, number, number) does not match any known function.  Candidates
3159 are:
3160 RINDEX(string, string)
3161 RINDEX(string, string, integer).
3162    38 | DEBUG EVALUATE /rindex('aksj', 2, 2).
3163       |                 ^~~~~~~~~~~~~~~~~~~~
3164
3165 rindex('aksj', 2, 2) => error
3166
3167 evaluate.sps:39.17-39.31: error: DEBUG EVALUATE: Function invocation
3168 rindex(number, number, number) does not match any known function.  Candidates
3169 are:
3170 RINDEX(string, string)
3171 RINDEX(string, string, integer).
3172    39 | DEBUG EVALUATE /rindex(1, 2, 3).
3173       |                 ^~~~~~~~~~~~~~~
3174
3175 rindex(1, 2, 3) => error
3176
3177 evaluate.sps:40.17-40.33: error: DEBUG EVALUATE: Function invocation
3178 rindex(number, number, string) does not match any known function.  Candidates
3179 are:
3180 RINDEX(string, string)
3181 RINDEX(string, string, integer).
3182    40 | DEBUG EVALUATE /rindex(1, 2, '3').
3183       |                 ^~~~~~~~~~~~~~~~~
3184
3185 rindex(1, 2, '3') => error
3186
3187 rindex('abcbcde', '', 1) => 0.00
3188
3189 rindex('', '', 1) => 0.00
3190 ])
3191 done
3192 AT_CLEANUP
3193
3194 AT_SETUP([expressions - LENGTH])
3195 AT_KEYWORDS([expression expressions evaluate])
3196 AT_DATA([evaluate-base.sps], [dnl
3197 SET EPOCH 1940.
3198 DEBUG EVALUATE SET opt.
3199
3200 DEBUG EVALUATE /length('').
3201 DEBUG EVALUATE /length('a').
3202 DEBUG EVALUATE /length('xy').
3203 DEBUG EVALUATE /length('adsf    ').
3204 DEBUG EVALUATE /length('abcdefghijkl').
3205 DEBUG EVALUATE /length(0).
3206 DEBUG EVALUATE /length($sysmis).
3207 ])
3208
3209 for opt in OPT NOOPT; do
3210     AS_BOX([$opt])
3211     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3212     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3213 length('') => 0.00
3214
3215 length('a') => 1.00
3216
3217 length('xy') => 2.00
3218
3219 length('adsf    ') => 8.00
3220
3221 length('abcdefghijkl') => 12.00
3222
3223 evaluate.sps:9.17-9.25: error: DEBUG EVALUATE: Type mismatch invoking
3224 LENGTH(string) as length(number).
3225     9 | DEBUG EVALUATE /length(0).
3226       |                 ^~~~~~~~~
3227
3228 evaluate.sps:9.24: note: DEBUG EVALUATE: This argument has type 'number' but
3229 'string' is required.
3230     9 | DEBUG EVALUATE /length(0).
3231       |                        ^
3232
3233 length(0) => error
3234
3235 evaluate.sps:10.17-10.31: error: DEBUG EVALUATE: Type mismatch invoking
3236 LENGTH(string) as length(number).
3237    10 | DEBUG EVALUATE /length($sysmis).
3238       |                 ^~~~~~~~~~~~~~~
3239
3240 evaluate.sps:10.24-10.30: note: DEBUG EVALUATE: This argument has type 'number'
3241 but 'string' is required.
3242    10 | DEBUG EVALUATE /length($sysmis).
3243       |                        ^~~~~~~
3244
3245 length($sysmis) => error
3246 ])
3247 done
3248 AT_CLEANUP
3249
3250 AT_SETUP([expressions - LOWER])
3251 AT_KEYWORDS([expression expressions evaluate])
3252 AT_DATA([evaluate-base.sps], [dnl
3253 SET EPOCH 1940.
3254 DEBUG EVALUATE SET opt.
3255
3256 DEBUG EVALUATE /lower('ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089').
3257 DEBUG EVALUATE /lower('').
3258 DEBUG EVALUATE /lower(1).
3259 ])
3260
3261 for opt in OPT NOOPT; do
3262     AS_BOX([$opt])
3263     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3264     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3265 lower('ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089') => "abcdefghijklmnopqrstuvwxyz!
3266 @%&*089"
3267
3268 lower('') => ""
3269
3270 evaluate.sps:6.17-6.24: error: DEBUG EVALUATE: Type mismatch invoking
3271 LOWER(string) as lower(number).
3272     6 | DEBUG EVALUATE /lower(1).
3273       |                 ^~~~~~~~
3274
3275 evaluate.sps:6.23: note: DEBUG EVALUATE: This argument has type 'number' but
3276 'string' is required.
3277     6 | DEBUG EVALUATE /lower(1).
3278       |                       ^
3279
3280 lower(1) => error
3281 ])
3282 done
3283 AT_CLEANUP
3284
3285 AT_SETUP([expressions - REPLACE])
3286 AT_KEYWORDS([expression expressions evaluate])
3287 AT_DATA([evaluate-base.sps], [dnl
3288 SET EPOCH 1940.
3289 DEBUG EVALUATE SET opt.
3290 DEBUG EVALUATE /replace('banana', 'an', 'AN').
3291 DEBUG EVALUATE /replace('banana', 'an', 'a').
3292 DEBUG EVALUATE /replace('banana', 'an', '').
3293 DEBUG EVALUATE /replace('banana', 'na', '').
3294 DEBUG EVALUATE /replace('banana', 'ba', 'BA').
3295 DEBUG EVALUATE /replace('banana', 'na', 'xyzzy').
3296 DEBUG EVALUATE /replace('banana', 'an', 'xyzzy', 1).
3297 DEBUG EVALUATE /replace('banana', 'an', 'xyzzy', 1.5).
3298 DEBUG EVALUATE /replace('banana', 'bananana', 'xyzzy').
3299 DEBUG EVALUATE /replace('banana', '', 'xyzzy').
3300 DEBUG EVALUATE /replace('banana', 'ba', '', 0).
3301 DEBUG EVALUATE /replace('banana', 'ba', '', -1).
3302 DEBUG EVALUATE /replace('banana', 'ba', '', $sysmis).
3303 ])
3304
3305 for opt in OPT NOOPT; do
3306     AS_BOX([$opt])
3307     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3308     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3309 replace('banana', 'an', 'AN') => "bANANa"
3310
3311 replace('banana', 'an', 'a') => "baaa"
3312
3313 replace('banana', 'an', '') => "ba"
3314
3315 replace('banana', 'na', '') => "ba"
3316
3317 replace('banana', 'ba', 'BA') => "BAnana"
3318
3319 replace('banana', 'na', 'xyzzy') => "baxyzzyxyzzy"
3320
3321 replace('banana', 'an', 'xyzzy', 1) => "bxyzzyana"
3322
3323 evaluate.sps:10.50-10.52: error: DEBUG EVALUATE: Treating unexpected non-
3324 integer value 1.5 as missing.
3325    10 | DEBUG EVALUATE /replace('banana', 'an', 'xyzzy', 1.5).
3326       |                                                  ^~~
3327
3328 replace('banana', 'an', 'xyzzy', 1.5) => "banana"
3329
3330 replace('banana', 'bananana', 'xyzzy') => "banana"
3331
3332 replace('banana', '', 'xyzzy') => "banana"
3333
3334 replace('banana', 'ba', '', 0) => "banana"
3335
3336 replace('banana', 'ba', '', -1) => "banana"
3337
3338 replace('banana', 'ba', '', $sysmis) => "banana"
3339 ])
3340 done
3341 AT_CLEANUP
3342
3343 AT_SETUP([expressions - LPAD])
3344 AT_KEYWORDS([expression expressions evaluate])
3345 AT_DATA([evaluate-base.sps], [dnl
3346 SET EPOCH 1940.
3347 DEBUG EVALUATE SET opt.
3348
3349 DEBUG EVALUATE /lpad('abc', 0).
3350 DEBUG EVALUATE /lpad('abc', 2).
3351 DEBUG EVALUATE /lpad('abc', 3).
3352 DEBUG EVALUATE /lpad('abc', 10).
3353
3354 DEBUG EVALUATE /lpad('abc', -1).
3355 DEBUG EVALUATE /lpad('abc', 32768).
3356 DEBUG EVALUATE /lpad('abc', $sysmis).
3357
3358 DEBUG EVALUATE /lpad('abc', -1, '*').
3359 DEBUG EVALUATE /lpad('abc', 0, '*').
3360 DEBUG EVALUATE /lpad('abc', 2, '*').
3361 DEBUG EVALUATE /lpad('abc', 3, '*').
3362 DEBUG EVALUATE /lpad('abc', 10, '*').
3363
3364 DEBUG EVALUATE /lpad('abc', 5, 'de').
3365 DEBUG EVALUATE /lpad('abc', 6, 'de').
3366 DEBUG EVALUATE /lpad('abc', 7, 'de').
3367 DEBUG EVALUATE /lpad('abc', 8, 'de').
3368 DEBUG EVALUATE /lpad('abc', 9, 'de').
3369
3370 DEBUG EVALUATE /lpad('abc', 32768, '*').
3371 DEBUG EVALUATE /lpad('abc', $sysmis, '*').
3372 DEBUG EVALUATE /lpad('abc', $sysmis, '').
3373 DEBUG EVALUATE /lpad('abc', $sysmis, 'xy').
3374 DEBUG EVALUATE /lpad(0, 10).
3375 DEBUG EVALUATE /lpad('abc', 'def').
3376 DEBUG EVALUATE /lpad(0, 10, ' ').
3377 DEBUG EVALUATE /lpad('abc', 'def', ' ').
3378 DEBUG EVALUATE /lpad('x', 5, 0).
3379 DEBUG EVALUATE /lpad('x', 5, 2).
3380 ])
3381
3382 for opt in OPT NOOPT; do
3383     AS_BOX([$opt])
3384     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3385     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3386 lpad('abc', 0) => "abc"
3387
3388 lpad('abc', 2) => "abc"
3389
3390 lpad('abc', 3) => "abc"
3391
3392 lpad('abc', 10) => "       abc"
3393
3394 evaluate.sps:9.17-9.31: error: DEBUG EVALUATE: The length argument to LPAD must
3395 be between 0 and 32767.
3396     9 | DEBUG EVALUATE /lpad('abc', -1).
3397       |                 ^~~~~~~~~~~~~~~
3398
3399 evaluate.sps:9.29-9.30: note: DEBUG EVALUATE: The length argument is -1.
3400     9 | DEBUG EVALUATE /lpad('abc', -1).
3401       |                             ^~
3402
3403 lpad('abc', -1) => "abc"
3404
3405 evaluate.sps:10.17-10.34: error: DEBUG EVALUATE: The length argument to LPAD
3406 must be between 0 and 32767.
3407    10 | DEBUG EVALUATE /lpad('abc', 32768).
3408       |                 ^~~~~~~~~~~~~~~~~~
3409
3410 evaluate.sps:10.29-10.33: note: DEBUG EVALUATE: The length argument is 32768.
3411    10 | DEBUG EVALUATE /lpad('abc', 32768).
3412       |                             ^~~~~
3413
3414 lpad('abc', 32768) => "abc"
3415
3416 lpad('abc', $sysmis) => "abc"
3417
3418 evaluate.sps:13.17-13.36: error: DEBUG EVALUATE: The length argument to LPAD
3419 must be between 0 and 32767.
3420    13 | DEBUG EVALUATE /lpad('abc', -1, '*').
3421       |                 ^~~~~~~~~~~~~~~~~~~~
3422
3423 evaluate.sps:13.29-13.30: note: DEBUG EVALUATE: The length argument is -1.
3424    13 | DEBUG EVALUATE /lpad('abc', -1, '*').
3425       |                             ^~
3426
3427 lpad('abc', -1, '*') => "abc"
3428
3429 lpad('abc', 0, '*') => "abc"
3430
3431 lpad('abc', 2, '*') => "abc"
3432
3433 lpad('abc', 3, '*') => "abc"
3434
3435 lpad('abc', 10, '*') => "*******abc"
3436
3437 lpad('abc', 5, 'de') => "deabc"
3438
3439 lpad('abc', 6, 'de') => "deabc"
3440
3441 lpad('abc', 7, 'de') => "dedeabc"
3442
3443 lpad('abc', 8, 'de') => "dedeabc"
3444
3445 lpad('abc', 9, 'de') => "dededeabc"
3446
3447 evaluate.sps:25.17-25.39: error: DEBUG EVALUATE: The length argument to LPAD
3448 must be between 0 and 32767.
3449    25 | DEBUG EVALUATE /lpad('abc', 32768, '*').
3450       |                 ^~~~~~~~~~~~~~~~~~~~~~~
3451
3452 evaluate.sps:25.29-25.33: note: DEBUG EVALUATE: The length argument is 32768.
3453    25 | DEBUG EVALUATE /lpad('abc', 32768, '*').
3454       |                             ^~~~~
3455
3456 lpad('abc', 32768, '*') => "abc"
3457
3458 lpad('abc', $sysmis, '*') => "abc"
3459
3460 lpad('abc', $sysmis, '') => "abc"
3461
3462 lpad('abc', $sysmis, 'xy') => "abc"
3463
3464 evaluate.sps:29.17-29.27: error: DEBUG EVALUATE: Function invocation
3465 lpad(number, number) does not match any known function.  Candidates are:
3466 LPAD(string, integer)
3467 LPAD(string, integer, string).
3468    29 | DEBUG EVALUATE /lpad(0, 10).
3469       |                 ^~~~~~~~~~~
3470
3471 lpad(0, 10) => error
3472
3473 evaluate.sps:30.17-30.34: error: DEBUG EVALUATE: Function invocation
3474 lpad(string, string) does not match any known function.  Candidates are:
3475 LPAD(string, integer)
3476 LPAD(string, integer, string).
3477    30 | DEBUG EVALUATE /lpad('abc', 'def').
3478       |                 ^~~~~~~~~~~~~~~~~~
3479
3480 lpad('abc', 'def') => error
3481
3482 evaluate.sps:31.17-31.32: error: DEBUG EVALUATE: Function invocation
3483 lpad(number, number, string) does not match any known function.  Candidates
3484 are:
3485 LPAD(string, integer)
3486 LPAD(string, integer, string).
3487    31 | DEBUG EVALUATE /lpad(0, 10, ' ').
3488       |                 ^~~~~~~~~~~~~~~~
3489
3490 lpad(0, 10, ' ') => error
3491
3492 evaluate.sps:32.17-32.39: error: DEBUG EVALUATE: Function invocation
3493 lpad(string, string, string) does not match any known function.  Candidates
3494 are:
3495 LPAD(string, integer)
3496 LPAD(string, integer, string).
3497    32 | DEBUG EVALUATE /lpad('abc', 'def', ' ').
3498       |                 ^~~~~~~~~~~~~~~~~~~~~~~
3499
3500 lpad('abc', 'def', ' ') => error
3501
3502 evaluate.sps:33.17-33.31: error: DEBUG EVALUATE: Function invocation
3503 lpad(string, number, number) does not match any known function.  Candidates
3504 are:
3505 LPAD(string, integer)
3506 LPAD(string, integer, string).
3507    33 | DEBUG EVALUATE /lpad('x', 5, 0).
3508       |                 ^~~~~~~~~~~~~~~
3509
3510 lpad('x', 5, 0) => error
3511
3512 evaluate.sps:34.17-34.31: error: DEBUG EVALUATE: Function invocation
3513 lpad(string, number, number) does not match any known function.  Candidates
3514 are:
3515 LPAD(string, integer)
3516 LPAD(string, integer, string).
3517    34 | DEBUG EVALUATE /lpad('x', 5, 2).
3518       |                 ^~~~~~~~~~~~~~~
3519
3520 lpad('x', 5, 2) => error
3521 ])
3522 done
3523 AT_CLEANUP
3524
3525 AT_SETUP([expressions - NUMBER])
3526 AT_KEYWORDS([expression expressions evaluate])
3527 AT_DATA([evaluate-base.sps], [dnl
3528 SET EPOCH 1940.
3529 DEBUG EVALUATE SET opt.
3530 DEBUG EVALUATE /number("123", f3.0).
3531 DEBUG EVALUATE /number(" 123", f3.0).
3532 DEBUG EVALUATE /number("123", f3.1).
3533 DEBUG EVALUATE /number("   ", f3.1).
3534 DEBUG EVALUATE /number("123", a8).
3535 dnl CCA is not an input format:
3536 DEBUG EVALUATE /number("123", cca1.2).
3537 ])
3538
3539 for opt in OPT NOOPT; do
3540     AS_BOX([$opt])
3541     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3542     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3543 number("123", f3.0) => 123.00
3544
3545 number(" 123", f3.0) => 12.00
3546
3547 number("123", f3.1) => 12.30
3548
3549 number("   ", f3.1) => sysmis
3550
3551 evaluate.sps:7.17-7.33: error: DEBUG EVALUATE: Type mismatch invoking
3552 NUMBER(string, num_input_format) as number(string, format).
3553     7 | DEBUG EVALUATE /number("123", a8).
3554       |                 ^~~~~~~~~~~~~~~~~
3555
3556 evaluate.sps:7.31-7.32: note: DEBUG EVALUATE: Numeric variables are not
3557 compatible with string format A8.
3558     7 | DEBUG EVALUATE /number("123", a8).
3559       |                               ^~
3560
3561 number("123", a8) => error
3562
3563 evaluate.sps:8.17-8.37: error: DEBUG EVALUATE: Type mismatch invoking
3564 NUMBER(string, num_input_format) as number(string, format).
3565     8 | DEBUG EVALUATE /number("123", cca1.2).
3566       |                 ^~~~~~~~~~~~~~~~~~~~~
3567
3568 evaluate.sps:8.31-8.36: note: DEBUG EVALUATE: Format CCA1.2 may not be used for
3569 input.
3570     8 | DEBUG EVALUATE /number("123", cca1.2).
3571       |                               ^~~~~~
3572
3573 number("123", cca1.2) => error
3574 ])
3575 done
3576 AT_CLEANUP
3577
3578 AT_SETUP([expressions - LTRIM])
3579 AT_KEYWORDS([expression expressions evaluate])
3580 AT_DATA([evaluate-base.sps], [dnl
3581 SET EPOCH 1940.
3582 DEBUG EVALUATE SET opt.
3583 DEBUG EVALUATE /ltrim('   abc').
3584 DEBUG EVALUATE /rtrim('   abc   ').
3585 DEBUG EVALUATE /ltrim('abc').
3586 * The following string contains a tab.
3587 DEBUG EVALUATE /ltrim(' abc').
3588 DEBUG EVALUATE /ltrim('    ').
3589 DEBUG EVALUATE /ltrim('').
3590 DEBUG EVALUATE /ltrim(8).
3591
3592 DEBUG EVALUATE /ltrim('***abc', '*').
3593 DEBUG EVALUATE /ltrim('abc', '*').
3594 DEBUG EVALUATE /ltrim('*abc', '*').
3595 DEBUG EVALUATE /ltrim('', '*').
3596
3597 DEBUG EVALUATE /ltrim('abc', 'xy').
3598 DEBUG EVALUATE /ltrim('xyabc', 'xy').
3599 DEBUG EVALUATE /ltrim('xyxyabc', 'xy').
3600
3601 DEBUG EVALUATE /ltrim(8, '*').
3602 DEBUG EVALUATE /ltrim(' x', 8).
3603 DEBUG EVALUATE /ltrim(8, 9).
3604 ])
3605
3606 for opt in OPT NOOPT; do
3607     AS_BOX([$opt])
3608     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3609     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3610 ltrim('   abc') => "abc"
3611
3612 rtrim('   abc   ') => "   abc"
3613
3614 ltrim('abc') => "abc"
3615
3616 ltrim(' abc') => "      abc"
3617
3618 ltrim('    ') => ""
3619
3620 ltrim('') => ""
3621
3622 evaluate.sps:10.17-10.24: error: DEBUG EVALUATE: Function invocation
3623 ltrim(number) does not match any known function.  Candidates are:
3624 LTRIM(string)
3625 LTRIM(string, string).
3626    10 | DEBUG EVALUATE /ltrim(8).
3627       |                 ^~~~~~~~
3628
3629 ltrim(8) => error
3630
3631 ltrim('***abc', '*') => "abc"
3632
3633 ltrim('abc', '*') => "abc"
3634
3635 ltrim('*abc', '*') => "abc"
3636
3637 ltrim('', '*') => ""
3638
3639 ltrim('abc', 'xy') => "abc"
3640
3641 ltrim('xyabc', 'xy') => "abc"
3642
3643 ltrim('xyxyabc', 'xy') => "abc"
3644
3645 evaluate.sps:21.17-21.29: error: DEBUG EVALUATE: Function invocation
3646 ltrim(number, string) does not match any known function.  Candidates are:
3647 LTRIM(string)
3648 LTRIM(string, string).
3649    21 | DEBUG EVALUATE /ltrim(8, '*').
3650       |                 ^~~~~~~~~~~~~
3651
3652 ltrim(8, '*') => error
3653
3654 evaluate.sps:22.17-22.30: error: DEBUG EVALUATE: Function invocation
3655 ltrim(string, number) does not match any known function.  Candidates are:
3656 LTRIM(string)
3657 LTRIM(string, string).
3658    22 | DEBUG EVALUATE /ltrim(' x', 8).
3659       |                 ^~~~~~~~~~~~~~
3660
3661 ltrim(' x', 8) => error
3662
3663 evaluate.sps:23.17-23.27: error: DEBUG EVALUATE: Function invocation
3664 ltrim(number, number) does not match any known function.  Candidates are:
3665 LTRIM(string)
3666 LTRIM(string, string).
3667    23 | DEBUG EVALUATE /ltrim(8, 9).
3668       |                 ^~~~~~~~~~~
3669
3670 ltrim(8, 9) => error
3671 ])
3672 done
3673 AT_CLEANUP
3674
3675 AT_SETUP([expressions - RPAD])
3676 AT_KEYWORDS([expression expressions evaluate])
3677 AT_DATA([evaluate-base.sps], [dnl
3678 SET EPOCH 1940.
3679 DEBUG EVALUATE SET opt.
3680
3681 DEBUG EVALUATE /rpad('abc', 0).
3682 DEBUG EVALUATE /rpad('abc', 2).
3683 DEBUG EVALUATE /rpad('abc', 3).
3684 DEBUG EVALUATE /rpad('abc', 10).
3685
3686 DEBUG EVALUATE /rpad('abc', -1).
3687 DEBUG EVALUATE /rpad('abc', 32768).
3688 DEBUG EVALUATE /rpad('abc', $sysmis).
3689
3690 DEBUG EVALUATE /rpad('abc', -1, '*').
3691 DEBUG EVALUATE /rpad('abc', 0, '*').
3692 DEBUG EVALUATE /rpad('abc', 2, '*').
3693 DEBUG EVALUATE /rpad('abc', 3, '*').
3694 DEBUG EVALUATE /rpad('abc', 10, '*').
3695
3696 DEBUG EVALUATE /rpad('abc', 5, 'de').
3697 DEBUG EVALUATE /rpad('abc', 6, 'de').
3698 DEBUG EVALUATE /rpad('abc', 7, 'de').
3699 DEBUG EVALUATE /rpad('abc', 8, 'de').
3700 DEBUG EVALUATE /rpad('abc', 9, 'de').
3701
3702 DEBUG EVALUATE /rpad('abc', 32768, '*').
3703 DEBUG EVALUATE /rpad('abc', $sysmis, '*').
3704 DEBUG EVALUATE /rpad('abc', $sysmis, '').
3705 DEBUG EVALUATE /rpad('abc', $sysmis, 'xy').
3706 DEBUG EVALUATE /rpad(0, 10).
3707 DEBUG EVALUATE /rpad('abc', 'def').
3708 DEBUG EVALUATE /rpad(0, 10, ' ').
3709 DEBUG EVALUATE /rpad('abc', 'def', ' ').
3710 DEBUG EVALUATE /rpad('x', 5, 0).
3711 DEBUG EVALUATE /rpad('x', 5, 2).
3712 ])
3713
3714 for opt in OPT NOOPT; do
3715     AS_BOX([$opt])
3716     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3717     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3718 rpad('abc', 0) => "abc"
3719
3720 rpad('abc', 2) => "abc"
3721
3722 rpad('abc', 3) => "abc"
3723
3724 rpad('abc', 10) => "abc       "
3725
3726 evaluate.sps:9.17-9.31: error: DEBUG EVALUATE: The length argument to RPAD must
3727 be between 0 and 32767.
3728     9 | DEBUG EVALUATE /rpad('abc', -1).
3729       |                 ^~~~~~~~~~~~~~~
3730
3731 evaluate.sps:9.29-9.30: note: DEBUG EVALUATE: The length argument is -1.
3732     9 | DEBUG EVALUATE /rpad('abc', -1).
3733       |                             ^~
3734
3735 rpad('abc', -1) => "abc"
3736
3737 evaluate.sps:10.17-10.34: error: DEBUG EVALUATE: The length argument to RPAD
3738 must be between 0 and 32767.
3739    10 | DEBUG EVALUATE /rpad('abc', 32768).
3740       |                 ^~~~~~~~~~~~~~~~~~
3741
3742 evaluate.sps:10.29-10.33: note: DEBUG EVALUATE: The length argument is 32768.
3743    10 | DEBUG EVALUATE /rpad('abc', 32768).
3744       |                             ^~~~~
3745
3746 rpad('abc', 32768) => "abc"
3747
3748 rpad('abc', $sysmis) => "abc"
3749
3750 evaluate.sps:13.17-13.36: error: DEBUG EVALUATE: The length argument to RPAD
3751 must be between 0 and 32767.
3752    13 | DEBUG EVALUATE /rpad('abc', -1, '*').
3753       |                 ^~~~~~~~~~~~~~~~~~~~
3754
3755 evaluate.sps:13.29-13.30: note: DEBUG EVALUATE: The length argument is -1.
3756    13 | DEBUG EVALUATE /rpad('abc', -1, '*').
3757       |                             ^~
3758
3759 rpad('abc', -1, '*') => "abc"
3760
3761 rpad('abc', 0, '*') => "abc"
3762
3763 rpad('abc', 2, '*') => "abc"
3764
3765 rpad('abc', 3, '*') => "abc"
3766
3767 rpad('abc', 10, '*') => "abc*******"
3768
3769 rpad('abc', 5, 'de') => "abcde"
3770
3771 rpad('abc', 6, 'de') => "abcde"
3772
3773 rpad('abc', 7, 'de') => "abcdede"
3774
3775 rpad('abc', 8, 'de') => "abcdede"
3776
3777 rpad('abc', 9, 'de') => "abcdedede"
3778
3779 evaluate.sps:25.17-25.39: error: DEBUG EVALUATE: The length argument to RPAD
3780 must be between 0 and 32767.
3781    25 | DEBUG EVALUATE /rpad('abc', 32768, '*').
3782       |                 ^~~~~~~~~~~~~~~~~~~~~~~
3783
3784 evaluate.sps:25.29-25.33: note: DEBUG EVALUATE: The length argument is 32768.
3785    25 | DEBUG EVALUATE /rpad('abc', 32768, '*').
3786       |                             ^~~~~
3787
3788 rpad('abc', 32768, '*') => "abc"
3789
3790 rpad('abc', $sysmis, '*') => "abc"
3791
3792 rpad('abc', $sysmis, '') => "abc"
3793
3794 rpad('abc', $sysmis, 'xy') => "abc"
3795
3796 evaluate.sps:29.17-29.27: error: DEBUG EVALUATE: Function invocation
3797 rpad(number, number) does not match any known function.  Candidates are:
3798 RPAD(string, integer)
3799 RPAD(string, integer, string).
3800    29 | DEBUG EVALUATE /rpad(0, 10).
3801       |                 ^~~~~~~~~~~
3802
3803 rpad(0, 10) => error
3804
3805 evaluate.sps:30.17-30.34: error: DEBUG EVALUATE: Function invocation
3806 rpad(string, string) does not match any known function.  Candidates are:
3807 RPAD(string, integer)
3808 RPAD(string, integer, string).
3809    30 | DEBUG EVALUATE /rpad('abc', 'def').
3810       |                 ^~~~~~~~~~~~~~~~~~
3811
3812 rpad('abc', 'def') => error
3813
3814 evaluate.sps:31.17-31.32: error: DEBUG EVALUATE: Function invocation
3815 rpad(number, number, string) does not match any known function.  Candidates
3816 are:
3817 RPAD(string, integer)
3818 RPAD(string, integer, string).
3819    31 | DEBUG EVALUATE /rpad(0, 10, ' ').
3820       |                 ^~~~~~~~~~~~~~~~
3821
3822 rpad(0, 10, ' ') => error
3823
3824 evaluate.sps:32.17-32.39: error: DEBUG EVALUATE: Function invocation
3825 rpad(string, string, string) does not match any known function.  Candidates
3826 are:
3827 RPAD(string, integer)
3828 RPAD(string, integer, string).
3829    32 | DEBUG EVALUATE /rpad('abc', 'def', ' ').
3830       |                 ^~~~~~~~~~~~~~~~~~~~~~~
3831
3832 rpad('abc', 'def', ' ') => error
3833
3834 evaluate.sps:33.17-33.31: error: DEBUG EVALUATE: Function invocation
3835 rpad(string, number, number) does not match any known function.  Candidates
3836 are:
3837 RPAD(string, integer)
3838 RPAD(string, integer, string).
3839    33 | DEBUG EVALUATE /rpad('x', 5, 0).
3840       |                 ^~~~~~~~~~~~~~~
3841
3842 rpad('x', 5, 0) => error
3843
3844 evaluate.sps:34.17-34.31: error: DEBUG EVALUATE: Function invocation
3845 rpad(string, number, number) does not match any known function.  Candidates
3846 are:
3847 RPAD(string, integer)
3848 RPAD(string, integer, string).
3849    34 | DEBUG EVALUATE /rpad('x', 5, 2).
3850       |                 ^~~~~~~~~~~~~~~
3851
3852 rpad('x', 5, 2) => error
3853 ])
3854 done
3855 AT_CLEANUP
3856
3857 AT_SETUP([expressions - RTRIM])
3858 AT_KEYWORDS([expression expressions evaluate])
3859 AT_DATA([evaluate-base.sps], [dnl
3860 SET EPOCH 1940.
3861 DEBUG EVALUATE SET opt.
3862 DEBUG EVALUATE /rtrim('abc   ').
3863 DEBUG EVALUATE /rtrim('   abc   ').
3864 DEBUG EVALUATE /rtrim('abc').
3865 * The following string contains a tab.
3866 DEBUG EVALUATE /rtrim('abc      ').
3867 DEBUG EVALUATE /rtrim('    ').
3868 DEBUG EVALUATE /rtrim('').
3869 DEBUG EVALUATE /rtrim(8).
3870
3871 DEBUG EVALUATE /rtrim('abc***', '*').
3872 DEBUG EVALUATE /rtrim('abc', '*').
3873 DEBUG EVALUATE /rtrim('abc*', '*').
3874 DEBUG EVALUATE /rtrim('', '*').
3875
3876 DEBUG EVALUATE /rtrim('abc', 'xy').
3877 DEBUG EVALUATE /rtrim('abcxy', 'xy').
3878 DEBUG EVALUATE /rtrim('abcxyxy', 'xy').
3879
3880 DEBUG EVALUATE /rtrim(8, '*').
3881 DEBUG EVALUATE /rtrim('x ', 8).
3882 DEBUG EVALUATE /rtrim(8, 9).
3883 ])
3884
3885 for opt in OPT NOOPT; do
3886     AS_BOX([$opt])
3887     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3888     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3889 rtrim('abc   ') => "abc"
3890
3891 rtrim('   abc   ') => "   abc"
3892
3893 rtrim('abc') => "abc"
3894
3895 rtrim('abc      ') => "abc      "
3896
3897 rtrim('    ') => ""
3898
3899 rtrim('') => ""
3900
3901 evaluate.sps:10.17-10.24: error: DEBUG EVALUATE: Function invocation
3902 rtrim(number) does not match any known function.  Candidates are:
3903 RTRIM(string)
3904 RTRIM(string, string).
3905    10 | DEBUG EVALUATE /rtrim(8).
3906       |                 ^~~~~~~~
3907
3908 rtrim(8) => error
3909
3910 rtrim('abc***', '*') => "abc"
3911
3912 rtrim('abc', '*') => "abc"
3913
3914 rtrim('abc*', '*') => "abc"
3915
3916 rtrim('', '*') => ""
3917
3918 rtrim('abc', 'xy') => "abc"
3919
3920 rtrim('abcxy', 'xy') => "abc"
3921
3922 rtrim('abcxyxy', 'xy') => "abc"
3923
3924 evaluate.sps:21.17-21.29: error: DEBUG EVALUATE: Function invocation
3925 rtrim(number, string) does not match any known function.  Candidates are:
3926 RTRIM(string)
3927 RTRIM(string, string).
3928    21 | DEBUG EVALUATE /rtrim(8, '*').
3929       |                 ^~~~~~~~~~~~~
3930
3931 rtrim(8, '*') => error
3932
3933 evaluate.sps:22.17-22.30: error: DEBUG EVALUATE: Function invocation
3934 rtrim(string, number) does not match any known function.  Candidates are:
3935 RTRIM(string)
3936 RTRIM(string, string).
3937    22 | DEBUG EVALUATE /rtrim('x ', 8).
3938       |                 ^~~~~~~~~~~~~~
3939
3940 rtrim('x ', 8) => error
3941
3942 evaluate.sps:23.17-23.27: error: DEBUG EVALUATE: Function invocation
3943 rtrim(number, number) does not match any known function.  Candidates are:
3944 RTRIM(string)
3945 RTRIM(string, string).
3946    23 | DEBUG EVALUATE /rtrim(8, 9).
3947       |                 ^~~~~~~~~~~
3948
3949 rtrim(8, 9) => error
3950 ])
3951 done
3952 AT_CLEANUP
3953
3954 AT_SETUP([expressions - STRING])
3955 AT_KEYWORDS([expression expressions evaluate])
3956 AT_DATA([evaluate-base.sps], [dnl
3957 SET EPOCH 1940.
3958 DEBUG EVALUATE SET opt.
3959 DEBUG EVALUATE /string(123.56, f5.1).
3960 DEBUG EVALUATE /string($sysmis, f5.1).
3961 DEBUG EVALUATE /string("abc", A5).
3962 dnl E has a minimum width of 6 on output:
3963 DEBUG EVALUATE /string(123, e1).
3964 DEBUG EVALUATE /string(123, e6.0).
3965 ])
3966
3967 for opt in OPT NOOPT; do
3968     AS_BOX([$opt])
3969     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3970     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3971 string(123.56, f5.1) => "123.6"
3972
3973 string($sysmis, f5.1) => "   . "
3974
3975 evaluate.sps:5.17-5.33: error: DEBUG EVALUATE: Type mismatch invoking
3976 STRING(number, num_output_format) as string(string, format).
3977     5 | DEBUG EVALUATE /string("abc", A5).
3978       |                 ^~~~~~~~~~~~~~~~~
3979
3980 evaluate.sps:5.24-5.28: note: DEBUG EVALUATE: This argument has type 'string'
3981 but 'number' is required.
3982     5 | DEBUG EVALUATE /string("abc", A5).
3983       |                        ^~~~~
3984
3985 evaluate.sps:5.31-5.32: note: DEBUG EVALUATE: Numeric variables are not
3986 compatible with string format A5.
3987     5 | DEBUG EVALUATE /string("abc", A5).
3988       |                               ^~
3989
3990 string("abc", A5) => error
3991
3992 evaluate.sps:6.17-6.31: error: DEBUG EVALUATE: Type mismatch invoking
3993 STRING(number, num_output_format) as string(number, format).
3994     6 | DEBUG EVALUATE /string(123, e1).
3995       |                 ^~~~~~~~~~~~~~~
3996
3997 evaluate.sps:6.29-6.30: note: DEBUG EVALUATE: Output format E1.0 specifies
3998 width 1, but E requires a width between 6 and 40.
3999     6 | DEBUG EVALUATE /string(123, e1).
4000       |                             ^~
4001
4002 string(123, e1) => error
4003
4004 string(123, e6.0) => "1E+002"
4005 ])
4006 done
4007 AT_CLEANUP
4008
4009 AT_SETUP([expressions - STRUNC])
4010 AT_KEYWORDS([expression expressions evaluate])
4011 AT_DATA([evaluate-base.sps], [dnl
4012 SET EPOCH 1940.
4013 DEBUG EVALUATE SET opt.
4014 DEBUG EVALUATE /strunc('a c   ', 9).
4015 DEBUG EVALUATE /strunc('a c   ', 7).
4016 DEBUG EVALUATE /strunc('a c   ', 6).
4017 DEBUG EVALUATE /strunc('a c   ', 5).
4018 DEBUG EVALUATE /strunc('a c   ', 4).
4019 DEBUG EVALUATE /strunc('a c   ', 3).
4020 DEBUG EVALUATE /strunc('a c   ', 2).
4021 DEBUG EVALUATE /strunc('a c   ', 1).
4022 DEBUG EVALUATE /strunc('a c   ', 0).
4023
4024 DEBUG EVALUATE /strunc('a c   ', 0.75).
4025 DEBUG EVALUATE /strunc('a c   ', -1).
4026 DEBUG EVALUATE /strunc('a c   ', $sysmis).
4027
4028 DEBUG EVALUATE /strunc('  abc  ', 9).
4029 DEBUG EVALUATE /strunc('  abc  ', 8).
4030 DEBUG EVALUATE /strunc('  abc  ', 7).
4031 DEBUG EVALUATE /strunc('  abc  ', 6).
4032 DEBUG EVALUATE /strunc('  abc  ', 5).
4033 DEBUG EVALUATE /strunc('  abc  ', 4).
4034 DEBUG EVALUATE /strunc('  abc  ', 3).
4035 DEBUG EVALUATE /strunc('  abc  ', 2).
4036 DEBUG EVALUATE /strunc('  abc  ', 1).
4037
4038 DEBUG EVALUATE /strunc('  abc  ', 1.5).
4039 DEBUG EVALUATE /strunc('  abc  ', -1).
4040 DEBUG EVALUATE /strunc('  abc  ', $sysmis).
4041 ])
4042
4043 for opt in OPT NOOPT; do
4044     AS_BOX([$opt])
4045     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4046     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4047 strunc('a c   ', 9) => "a c"
4048
4049 strunc('a c   ', 7) => "a c"
4050
4051 strunc('a c   ', 6) => "a c"
4052
4053 strunc('a c   ', 5) => "a c"
4054
4055 strunc('a c   ', 4) => "a c"
4056
4057 strunc('a c   ', 3) => "a c"
4058
4059 strunc('a c   ', 2) => "a"
4060
4061 strunc('a c   ', 1) => "a"
4062
4063 strunc('a c   ', 0) => ""
4064
4065 evaluate.sps:13.34-13.37: error: DEBUG EVALUATE: Treating unexpected non-
4066 integer value 0.75 as missing.
4067    13 | DEBUG EVALUATE /strunc('a c   ', 0.75).
4068       |                                  ^~~~
4069
4070 strunc('a c   ', 0.75) => "a c   "
4071
4072 strunc('a c   ', -1) => ""
4073
4074 strunc('a c   ', $sysmis) => "a c   "
4075
4076 strunc('  abc  ', 9) => "  abc"
4077
4078 strunc('  abc  ', 8) => "  abc"
4079
4080 strunc('  abc  ', 7) => "  abc"
4081
4082 strunc('  abc  ', 6) => "  abc"
4083
4084 strunc('  abc  ', 5) => "  abc"
4085
4086 strunc('  abc  ', 4) => "  ab"
4087
4088 strunc('  abc  ', 3) => "  a"
4089
4090 strunc('  abc  ', 2) => ""
4091
4092 strunc('  abc  ', 1) => ""
4093
4094 evaluate.sps:27.35-27.37: error: DEBUG EVALUATE: Treating unexpected non-
4095 integer value 1.5 as missing.
4096    27 | DEBUG EVALUATE /strunc('  abc  ', 1.5).
4097       |                                   ^~~
4098
4099 strunc('  abc  ', 1.5) => "  abc  "
4100
4101 strunc('  abc  ', -1) => ""
4102
4103 strunc('  abc  ', $sysmis) => "  abc  "
4104 ])
4105 done
4106 AT_CLEANUP
4107
4108 AT_SETUP([expressions - SUBSTR])
4109 AT_KEYWORDS([expression expressions evaluate])
4110 AT_DATA([evaluate-base.sps], [dnl
4111 DEBUG EVALUATE SET opt.
4112 DEBUG EVALUATE /substr('abcdefgh', 1).
4113 DEBUG EVALUATE /substr('abcdefgh', 3).
4114 DEBUG EVALUATE /substr('abcdefgh', 5).
4115 DEBUG EVALUATE /substr('abcdefgh', 6).
4116 DEBUG EVALUATE /substr('abcdefgh', 7).
4117 DEBUG EVALUATE /substr('abcdefgh', 8).
4118 DEBUG EVALUATE /substr('abcdefgh', 9).
4119 DEBUG EVALUATE /substr('abcdefgh', 10).
4120 DEBUG EVALUATE /substr('abcdefgh', 20).
4121 DEBUG EVALUATE /substr('abcdefgh', $sysmis).
4122 DEBUG EVALUATE /substr('abcdefgh', -5).
4123 DEBUG EVALUATE /substr('abcdefgh', 0).
4124 DEBUG EVALUATE /substr(0, 10).
4125 DEBUG EVALUATE /substr('abcd', 'abc').
4126 DEBUG EVALUATE /substr(0, 'abc').
4127
4128 DEBUG EVALUATE /substr('abcdefgh', 0, 0).
4129 DEBUG EVALUATE /substr('abcdefgh', 3, 0).
4130 DEBUG EVALUATE /substr('abcdefgh', 5, 0).
4131 DEBUG EVALUATE /substr('abcdefgh', 9, 0).
4132 DEBUG EVALUATE /substr('abcdefgh', 0, 1).
4133 DEBUG EVALUATE /substr('abcdefgh', 0, 5).
4134 DEBUG EVALUATE /substr('abcdefgh', 1, 8).
4135 DEBUG EVALUATE /substr('abcdefgh', 1, 10).
4136 DEBUG EVALUATE /substr('abcdefgh', 1, 20).
4137 DEBUG EVALUATE /substr('abcdefgh', 3, 4).
4138 DEBUG EVALUATE /substr('abcdefgh', 5, 2).
4139 DEBUG EVALUATE /substr('abcdefgh', 6, 1).
4140 DEBUG EVALUATE /substr('abcdefgh', 7, 10).
4141 DEBUG EVALUATE /substr('abcdefgh', 8, 1).
4142 DEBUG EVALUATE /substr('abcdefgh', 8, 2).
4143 DEBUG EVALUATE /substr('abcdefgh', 9, 11).
4144 DEBUG EVALUATE /substr('abcdefgh', 10, 52).
4145 DEBUG EVALUATE /substr('abcdefgh', 20, 1).
4146 DEBUG EVALUATE /substr('abcdefgh', $sysmis, 2).
4147 DEBUG EVALUATE /substr('abcdefgh', 9, $sysmis).
4148 DEBUG EVALUATE /substr('abcdefgh', $sysmis, $sysmis).
4149 DEBUG EVALUATE /substr('abc', 1, 'x').
4150 DEBUG EVALUATE /substr(0, 10, 1).
4151 DEBUG EVALUATE /substr(0, 10, 'x').
4152 DEBUG EVALUATE /substr('abcd', 'abc', 0).
4153 DEBUG EVALUATE /substr('abcd', 'abc', 'j').
4154 DEBUG EVALUATE /substr(0, 'abc', 4).
4155 DEBUG EVALUATE /substr(0, 'abc', 'k').
4156 ])
4157
4158 for opt in OPT NOOPT; do
4159     AS_BOX([$opt])
4160     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4161     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4162 substr('abcdefgh', 1) => "abcdefgh"
4163
4164 substr('abcdefgh', 3) => "cdefgh"
4165
4166 substr('abcdefgh', 5) => "efgh"
4167
4168 substr('abcdefgh', 6) => "fgh"
4169
4170 substr('abcdefgh', 7) => "gh"
4171
4172 substr('abcdefgh', 8) => "h"
4173
4174 substr('abcdefgh', 9) => ""
4175
4176 substr('abcdefgh', 10) => ""
4177
4178 substr('abcdefgh', 20) => ""
4179
4180 substr('abcdefgh', $sysmis) => ""
4181
4182 substr('abcdefgh', -5) => ""
4183
4184 substr('abcdefgh', 0) => ""
4185
4186 evaluate.sps:14.17-14.29: error: DEBUG EVALUATE: Function invocation
4187 substr(number, number) does not match any known function.  Candidates are:
4188 SUBSTR(string, integer)
4189 SUBSTR(string, integer, integer).
4190    14 | DEBUG EVALUATE /substr(0, 10).
4191       |                 ^~~~~~~~~~~~~
4192
4193 substr(0, 10) => error
4194
4195 evaluate.sps:15.17-15.37: error: DEBUG EVALUATE: Function invocation
4196 substr(string, string) does not match any known function.  Candidates are:
4197 SUBSTR(string, integer)
4198 SUBSTR(string, integer, integer).
4199    15 | DEBUG EVALUATE /substr('abcd', 'abc').
4200       |                 ^~~~~~~~~~~~~~~~~~~~~
4201
4202 substr('abcd', 'abc') => error
4203
4204 evaluate.sps:16.17-16.32: error: DEBUG EVALUATE: Function invocation
4205 substr(number, string) does not match any known function.  Candidates are:
4206 SUBSTR(string, integer)
4207 SUBSTR(string, integer, integer).
4208    16 | DEBUG EVALUATE /substr(0, 'abc').
4209       |                 ^~~~~~~~~~~~~~~~
4210
4211 substr(0, 'abc') => error
4212
4213 substr('abcdefgh', 0, 0) => ""
4214
4215 substr('abcdefgh', 3, 0) => ""
4216
4217 substr('abcdefgh', 5, 0) => ""
4218
4219 substr('abcdefgh', 9, 0) => ""
4220
4221 substr('abcdefgh', 0, 1) => ""
4222
4223 substr('abcdefgh', 0, 5) => ""
4224
4225 substr('abcdefgh', 1, 8) => "abcdefgh"
4226
4227 substr('abcdefgh', 1, 10) => "abcdefgh"
4228
4229 substr('abcdefgh', 1, 20) => "abcdefgh"
4230
4231 substr('abcdefgh', 3, 4) => "cdef"
4232
4233 substr('abcdefgh', 5, 2) => "ef"
4234
4235 substr('abcdefgh', 6, 1) => "f"
4236
4237 substr('abcdefgh', 7, 10) => "gh"
4238
4239 substr('abcdefgh', 8, 1) => "h"
4240
4241 substr('abcdefgh', 8, 2) => "h"
4242
4243 substr('abcdefgh', 9, 11) => ""
4244
4245 substr('abcdefgh', 10, 52) => ""
4246
4247 substr('abcdefgh', 20, 1) => ""
4248
4249 substr('abcdefgh', $sysmis, 2) => ""
4250
4251 substr('abcdefgh', 9, $sysmis) => ""
4252
4253 substr('abcdefgh', $sysmis, $sysmis) => ""
4254
4255 evaluate.sps:39.17-39.37: error: DEBUG EVALUATE: Function invocation
4256 substr(string, number, string) does not match any known function.  Candidates
4257 are:
4258 SUBSTR(string, integer)
4259 SUBSTR(string, integer, integer).
4260    39 | DEBUG EVALUATE /substr('abc', 1, 'x').
4261       |                 ^~~~~~~~~~~~~~~~~~~~~
4262
4263 substr('abc', 1, 'x') => error
4264
4265 evaluate.sps:40.17-40.32: error: DEBUG EVALUATE: Function invocation
4266 substr(number, number, number) does not match any known function.  Candidates
4267 are:
4268 SUBSTR(string, integer)
4269 SUBSTR(string, integer, integer).
4270    40 | DEBUG EVALUATE /substr(0, 10, 1).
4271       |                 ^~~~~~~~~~~~~~~~
4272
4273 substr(0, 10, 1) => error
4274
4275 evaluate.sps:41.17-41.34: error: DEBUG EVALUATE: Function invocation
4276 substr(number, number, string) does not match any known function.  Candidates
4277 are:
4278 SUBSTR(string, integer)
4279 SUBSTR(string, integer, integer).
4280    41 | DEBUG EVALUATE /substr(0, 10, 'x').
4281       |                 ^~~~~~~~~~~~~~~~~~
4282
4283 substr(0, 10, 'x') => error
4284
4285 evaluate.sps:42.17-42.40: error: DEBUG EVALUATE: Function invocation
4286 substr(string, string, number) does not match any known function.  Candidates
4287 are:
4288 SUBSTR(string, integer)
4289 SUBSTR(string, integer, integer).
4290    42 | DEBUG EVALUATE /substr('abcd', 'abc', 0).
4291       |                 ^~~~~~~~~~~~~~~~~~~~~~~~
4292
4293 substr('abcd', 'abc', 0) => error
4294
4295 evaluate.sps:43.17-43.42: error: DEBUG EVALUATE: Function invocation
4296 substr(string, string, string) does not match any known function.  Candidates
4297 are:
4298 SUBSTR(string, integer)
4299 SUBSTR(string, integer, integer).
4300    43 | DEBUG EVALUATE /substr('abcd', 'abc', 'j').
4301       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
4302
4303 substr('abcd', 'abc', 'j') => error
4304
4305 evaluate.sps:44.17-44.35: error: DEBUG EVALUATE: Function invocation
4306 substr(number, string, number) does not match any known function.  Candidates
4307 are:
4308 SUBSTR(string, integer)
4309 SUBSTR(string, integer, integer).
4310    44 | DEBUG EVALUATE /substr(0, 'abc', 4).
4311       |                 ^~~~~~~~~~~~~~~~~~~
4312
4313 substr(0, 'abc', 4) => error
4314
4315 evaluate.sps:45.17-45.37: error: DEBUG EVALUATE: Function invocation
4316 substr(number, string, string) does not match any known function.  Candidates
4317 are:
4318 SUBSTR(string, integer)
4319 SUBSTR(string, integer, integer).
4320    45 | DEBUG EVALUATE /substr(0, 'abc', 'k').
4321       |                 ^~~~~~~~~~~~~~~~~~~~~
4322
4323 substr(0, 'abc', 'k') => error
4324 ])
4325 done
4326 AT_CLEANUP
4327
4328 AT_SETUP([expressions - UPCASE])
4329 AT_KEYWORDS([expression expressions evaluate])
4330 AT_DATA([evaluate-base.sps], [dnl
4331 DEBUG EVALUATE SET opt.
4332 DEBUG EVALUATE /upcase('abcdefghijklmnopqrstuvwxyz!@%&*089').
4333 DEBUG EVALUATE /upcase('').
4334 DEBUG EVALUATE /upcase(1).
4335 ])
4336
4337 for opt in OPT NOOPT; do
4338     AS_BOX([$opt])
4339     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4340     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4341 upcase('abcdefghijklmnopqrstuvwxyz!@%&*089') => "ABCDEFGHIJKLMNOPQRSTUVWXYZ!
4342 @%&*089"
4343
4344 upcase('') => ""
4345
4346 evaluate.sps:4.17-4.25: error: DEBUG EVALUATE: Type mismatch invoking
4347 UPCASE(string) as upcase(number).
4348     4 | DEBUG EVALUATE /upcase(1).
4349       |                 ^~~~~~~~~
4350
4351 evaluate.sps:4.24: note: DEBUG EVALUATE: This argument has type 'number' but
4352 'string' is required.
4353     4 | DEBUG EVALUATE /upcase(1).
4354       |                        ^
4355
4356 upcase(1) => error
4357 ])
4358 done
4359 AT_CLEANUP
4360
4361 AT_SETUP([expressions - TIME.DAYS])
4362 AT_KEYWORDS([expression expressions evaluate])
4363 AT_DATA([evaluate-base.sps], [dnl
4364 SET EPOCH 1940.
4365 DEBUG EVALUATE SET opt.
4366 DEBUG EVALUATE /time.days(1).
4367 DEBUG EVALUATE /time.days(-1).
4368 DEBUG EVALUATE /time.days(0.5).
4369 DEBUG EVALUATE /time.days('x').
4370 DEBUG EVALUATE /time.days($sysmis).
4371 ])
4372
4373 for opt in OPT NOOPT; do
4374     AS_BOX([$opt])
4375     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4376     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4377 time.days(1) => 86400.00
4378
4379 time.days(-1) => -86400.00
4380
4381 time.days(0.5) => 43200.00
4382
4383 evaluate.sps:6.17-6.30: error: DEBUG EVALUATE: Type mismatch invoking TIME.
4384 DAYS(number) as time.days(string).
4385     6 | DEBUG EVALUATE /time.days('x').
4386       |                 ^~~~~~~~~~~~~~
4387
4388 evaluate.sps:6.27-6.29: note: DEBUG EVALUATE: This argument has type 'string'
4389 but 'number' is required.
4390     6 | DEBUG EVALUATE /time.days('x').
4391       |                           ^~~
4392
4393 time.days('x') => error
4394
4395 time.days($sysmis) => sysmis
4396 ])
4397 done
4398 AT_CLEANUP
4399
4400 AT_SETUP([expressions - TIME.HMS])
4401 AT_KEYWORDS([expression expressions evaluate])
4402 AT_DATA([evaluate-base.sps], [dnl
4403 SET EPOCH 1940.
4404 DEBUG EVALUATE SET opt.
4405 DEBUG EVALUATE /time.hms(4,50,38).
4406 DEBUG EVALUATE /time.hms(12,31,35).
4407 DEBUG EVALUATE /time.hms(12,47,53).
4408 DEBUG EVALUATE /time.hms(1,26,0).
4409 DEBUG EVALUATE /time.hms(20,58,11).
4410 DEBUG EVALUATE /time.hms(7,36,5).
4411 DEBUG EVALUATE /time.hms(15,43,49).
4412 DEBUG EVALUATE /time.hms(4,25,9).
4413 DEBUG EVALUATE /time.hms(6,49,27).
4414 DEBUG EVALUATE /time.hms(2,57,52).
4415 DEBUG EVALUATE /time.hms(16,45,44).
4416 DEBUG EVALUATE /time.hms(21,30,57).
4417 DEBUG EVALUATE /time.hms(22,30,4).
4418 DEBUG EVALUATE /time.hms(1,56,51).
4419 DEBUG EVALUATE /time.hms(5, 6, 7).
4420 DEBUG EVALUATE /time.hms(5, 6, 0).
4421 DEBUG EVALUATE /time.hms(5, 0, 7).
4422 DEBUG EVALUATE /time.hms(0, 6, 7).
4423 DEBUG EVALUATE /time.hms(-5, 6, -7).
4424 DEBUG EVALUATE /time.hms(-5, 5, -7).
4425 DEBUG EVALUATE /time.hms($sysmis, 6, 7).
4426 DEBUG EVALUATE /time.hms(5, $sysmis, 7).
4427 DEBUG EVALUATE /time.hms(5, $sysmis, 7).
4428 DEBUG EVALUATE /time.hms($sysmis, $sysmis, 7).
4429 DEBUG EVALUATE /time.hms(5, $sysmis, $sysmis).
4430 DEBUG EVALUATE /time.hms($sysmis, $sysmis, 7).
4431 DEBUG EVALUATE /time.hms($sysmis, $sysmis, $sysmis).
4432 ])
4433
4434 for opt in OPT NOOPT; do
4435     AS_BOX([$opt])
4436     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4437     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
4438 time.hms(4,50,38) => 17438.00
4439
4440 time.hms(12,31,35) => 45095.00
4441
4442 time.hms(12,47,53) => 46073.00
4443
4444 time.hms(1,26,0) => 5160.00
4445
4446 time.hms(20,58,11) => 75491.00
4447
4448 time.hms(7,36,5) => 27365.00
4449
4450 time.hms(15,43,49) => 56629.00
4451
4452 time.hms(4,25,9) => 15909.00
4453
4454 time.hms(6,49,27) => 24567.00
4455
4456 time.hms(2,57,52) => 10672.00
4457
4458 time.hms(16,45,44) => 60344.00
4459
4460 time.hms(21,30,57) => 77457.00
4461
4462 time.hms(22,30,4) => 81004.00
4463
4464 time.hms(1,56,51) => 7011.00
4465
4466 time.hms(5, 6, 7) => 18367.00
4467
4468 time.hms(5, 6, 0) => 18360.00
4469
4470 time.hms(5, 0, 7) => 18007.00
4471
4472 time.hms(0, 6, 7) => 367.00
4473
4474 evaluate.sps:21.17-21.35: warning: DEBUG EVALUATE: TIME.HMS cannot accept a mix
4475 of positive and negative arguments.
4476    21 | DEBUG EVALUATE /time.hms(-5, 6, -7).
4477       |                 ^~~~~~~~~~~~~~~~~~~
4478
4479 evaluate.sps:21.26-21.27: note: DEBUG EVALUATE: This argument has negative
4480 value -5.
4481    21 | DEBUG EVALUATE /time.hms(-5, 6, -7).
4482       |                          ^~
4483
4484 evaluate.sps:21.30: note: DEBUG EVALUATE: This argument has positive value 6.
4485    21 | DEBUG EVALUATE /time.hms(-5, 6, -7).
4486       |                              ^
4487
4488 evaluate.sps:21.33-21.34: note: DEBUG EVALUATE: This argument has negative
4489 value -7.
4490    21 | DEBUG EVALUATE /time.hms(-5, 6, -7).
4491       |                                 ^~
4492
4493 time.hms(-5, 6, -7) => sysmis
4494
4495 evaluate.sps:22.17-22.35: warning: DEBUG EVALUATE: TIME.HMS cannot accept a mix
4496 of positive and negative arguments.
4497    22 | DEBUG EVALUATE /time.hms(-5, 5, -7).
4498       |                 ^~~~~~~~~~~~~~~~~~~
4499
4500 evaluate.sps:22.26-22.27: note: DEBUG EVALUATE: This argument has negative
4501 value -5.
4502    22 | DEBUG EVALUATE /time.hms(-5, 5, -7).
4503       |                          ^~
4504
4505 evaluate.sps:22.30: note: DEBUG EVALUATE: This argument has positive value 5.
4506    22 | DEBUG EVALUATE /time.hms(-5, 5, -7).
4507       |                              ^
4508
4509 evaluate.sps:22.33-22.34: note: DEBUG EVALUATE: This argument has negative
4510 value -7.
4511    22 | DEBUG EVALUATE /time.hms(-5, 5, -7).
4512       |                                 ^~
4513
4514 time.hms(-5, 5, -7) => sysmis
4515
4516 time.hms($sysmis, 6, 7) => sysmis
4517
4518 time.hms(5, $sysmis, 7) => sysmis
4519
4520 time.hms(5, $sysmis, 7) => sysmis
4521
4522 time.hms($sysmis, $sysmis, 7) => sysmis
4523
4524 time.hms(5, $sysmis, $sysmis) => sysmis
4525
4526 time.hms($sysmis, $sysmis, 7) => sysmis
4527
4528 time.hms($sysmis, $sysmis, $sysmis) => sysmis
4529 ])
4530 done
4531 AT_CLEANUP
4532
4533 AT_SETUP([expressions - CTIME.*])
4534 AT_KEYWORDS([expression expressions evaluate ctime])
4535 AT_DATA([evaluate-base.sps], [dnl
4536 SET EPOCH 1940.
4537 DEBUG EVALUATE SET opt.
4538 DEBUG EVALUATE /ctime.days(106272).
4539 DEBUG EVALUATE /ctime.hours(106272).
4540 DEBUG EVALUATE /ctime.minutes(106272).
4541 DEBUG EVALUATE /ctime.seconds(106272).
4542 DEBUG EVALUATE /ctime.days(-106272).
4543 DEBUG EVALUATE /ctime.hours(-106272).
4544 DEBUG EVALUATE /ctime.minutes(-106272).
4545 DEBUG EVALUATE /ctime.seconds(-106272).
4546 DEBUG EVALUATE /ctime.days($sysmis).
4547 DEBUG EVALUATE /ctime.hours($sysmis).
4548 DEBUG EVALUATE /ctime.minutes($sysmis).
4549 DEBUG EVALUATE /ctime.seconds($sysmis).
4550 DEBUG EVALUATE /ctime.days('a').
4551 DEBUG EVALUATE /ctime.hours('b').
4552 DEBUG EVALUATE /ctime.minutes('c').
4553 DEBUG EVALUATE /ctime.seconds('d').
4554
4555 DEBUG EVALUATE /ctime.days(date.dmy(15,10,1582)).
4556 DEBUG EVALUATE /ctime.days(date.dmy(6,9,1719)).
4557 DEBUG EVALUATE /ctime.days(date.dmy(24,1,1583)).
4558 DEBUG EVALUATE /ctime.days(date.dmy(14,12,1585)).
4559 DEBUG EVALUATE /ctime.days(date.dmy(26,11,1621)).
4560 DEBUG EVALUATE /ctime.days(date.dmy(25,12,1821)).
4561 DEBUG EVALUATE /ctime.days(date.dmy(3,12,1882)).
4562 DEBUG EVALUATE /ctime.days(date.dmy(6,4,2002)).
4563 DEBUG EVALUATE /ctime.days(date.dmy(19,12,1999)).
4564 DEBUG EVALUATE /ctime.days(date.dmy(1,10,1978)).
4565 DEBUG EVALUATE /ctime.days(date.dmy(0,10,1978)).
4566 DEBUG EVALUATE /ctime.days(date.dmy(32,10,1978)).
4567 DEBUG EVALUATE /ctime.days(date.dmy(31,0,1978)).
4568 DEBUG EVALUATE /ctime.days(date.dmy(31,13,1978)).
4569 DEBUG EVALUATE /ctime.days(date.dmy($sysmis,10,1978)).
4570 DEBUG EVALUATE /ctime.days(date.dmy(31,$sysmis,1978)).
4571 DEBUG EVALUATE /ctime.days(date.dmy(31,10,$sysmis)).
4572 DEBUG EVALUATE /ctime.days(date.dmy($sysmis,$sysmis,1978)).
4573 DEBUG EVALUATE /ctime.days(date.dmy(31,$sysmis,$sysmis)).
4574 DEBUG EVALUATE /ctime.days(date.dmy($sysmis,10,$sysmis)).
4575 DEBUG EVALUATE /ctime.days(date.dmy($sysmis,$sysmis,$sysmis)).
4576 ])
4577
4578 for opt in OPT NOOPT; do
4579     AS_BOX([$opt])
4580     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4581     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4582 ctime.days(106272) => 1.23
4583
4584 ctime.hours(106272) => 29.52
4585
4586 ctime.minutes(106272) => 1771.20
4587
4588 ctime.seconds(106272) => 106272.00
4589
4590 ctime.days(-106272) => -1.23
4591
4592 ctime.hours(-106272) => -29.52
4593
4594 ctime.minutes(-106272) => -1771.20
4595
4596 ctime.seconds(-106272) => -106272.00
4597
4598 ctime.days($sysmis) => sysmis
4599
4600 ctime.hours($sysmis) => sysmis
4601
4602 ctime.minutes($sysmis) => sysmis
4603
4604 ctime.seconds($sysmis) => sysmis
4605
4606 evaluate.sps:15.17-15.31: error: DEBUG EVALUATE: Type mismatch invoking CTIME.
4607 DAYS(number) as ctime.days(string).
4608    15 | DEBUG EVALUATE /ctime.days('a').
4609       |                 ^~~~~~~~~~~~~~~
4610
4611 evaluate.sps:15.28-15.30: note: DEBUG EVALUATE: This argument has type 'string'
4612 but 'number' is required.
4613    15 | DEBUG EVALUATE /ctime.days('a').
4614       |                            ^~~
4615
4616 ctime.days('a') => error
4617
4618 evaluate.sps:16.17-16.32: error: DEBUG EVALUATE: Type mismatch invoking CTIME.
4619 HOURS(number) as ctime.hours(string).
4620    16 | DEBUG EVALUATE /ctime.hours('b').
4621       |                 ^~~~~~~~~~~~~~~~
4622
4623 evaluate.sps:16.29-16.31: note: DEBUG EVALUATE: This argument has type 'string'
4624 but 'number' is required.
4625    16 | DEBUG EVALUATE /ctime.hours('b').
4626       |                             ^~~
4627
4628 ctime.hours('b') => error
4629
4630 evaluate.sps:17.17-17.34: error: DEBUG EVALUATE: Type mismatch invoking CTIME.
4631 MINUTES(number) as ctime.minutes(string).
4632    17 | DEBUG EVALUATE /ctime.minutes('c').
4633       |                 ^~~~~~~~~~~~~~~~~~
4634
4635 evaluate.sps:17.31-17.33: note: DEBUG EVALUATE: This argument has type 'string'
4636 but 'number' is required.
4637    17 | DEBUG EVALUATE /ctime.minutes('c').
4638       |                               ^~~
4639
4640 ctime.minutes('c') => error
4641
4642 evaluate.sps:18.17-18.34: error: DEBUG EVALUATE: Type mismatch invoking CTIME.
4643 SECONDS(number) as ctime.seconds(string).
4644    18 | DEBUG EVALUATE /ctime.seconds('d').
4645       |                 ^~~~~~~~~~~~~~~~~~
4646
4647 evaluate.sps:18.31-18.33: note: DEBUG EVALUATE: This argument has type 'string'
4648 but 'number' is required.
4649    18 | DEBUG EVALUATE /ctime.seconds('d').
4650       |                               ^~~
4651
4652 ctime.seconds('d') => error
4653
4654 ctime.days(date.dmy(15,10,1582)) => 1.00
4655
4656 ctime.days(date.dmy(6,9,1719)) => 50000.00
4657
4658 ctime.days(date.dmy(24,1,1583)) => 102.00
4659
4660 ctime.days(date.dmy(14,12,1585)) => 1157.00
4661
4662 ctime.days(date.dmy(26,11,1621)) => 14288.00
4663
4664 ctime.days(date.dmy(25,12,1821)) => 87365.00
4665
4666 ctime.days(date.dmy(3,12,1882)) => 109623.00
4667
4668 ctime.days(date.dmy(6,4,2002)) => 153211.00
4669
4670 ctime.days(date.dmy(19,12,1999)) => 152372.00
4671
4672 ctime.days(date.dmy(1,10,1978)) => 144623.00
4673
4674 ctime.days(date.dmy(0,10,1978)) => 144622.00
4675
4676 evaluate.sps:31.28-31.47: error: DEBUG EVALUATE: Invalid arguments to DATE.DMY
4677 function.
4678    31 | DEBUG EVALUATE /ctime.days(date.dmy(32,10,1978)).
4679       |                            ^~~~~~~~~~~~~~~~~~~~
4680
4681 evaluate.sps:31.37-31.38: note: DEBUG EVALUATE: Day 32 is not in the acceptable
4682 range of 0 to 31.
4683    31 | DEBUG EVALUATE /ctime.days(date.dmy(32,10,1978)).
4684       |                                     ^~
4685
4686 ctime.days(date.dmy(32,10,1978)) => sysmis
4687
4688 ctime.days(date.dmy(31,0,1978)) => 144349.00
4689
4690 ctime.days(date.dmy(31,13,1978)) => 144745.00
4691
4692 ctime.days(date.dmy($sysmis,10,1978)) => sysmis
4693
4694 ctime.days(date.dmy(31,$sysmis,1978)) => sysmis
4695
4696 ctime.days(date.dmy(31,10,$sysmis)) => sysmis
4697
4698 ctime.days(date.dmy($sysmis,$sysmis,1978)) => sysmis
4699
4700 ctime.days(date.dmy(31,$sysmis,$sysmis)) => sysmis
4701
4702 ctime.days(date.dmy($sysmis,10,$sysmis)) => sysmis
4703
4704 ctime.days(date.dmy($sysmis,$sysmis,$sysmis)) => sysmis
4705 ])
4706 done
4707 AT_CLEANUP
4708
4709 AT_SETUP([expressions - DATE.DMY])
4710 AT_KEYWORDS([expression expressions evaluate])
4711 AT_DATA([evaluate-base.sps], [dnl
4712 SET EPOCH 1940.
4713 DEBUG EVALUATE SET opt.
4714 DEBUG EVALUATE /date.dmy('a',1,2).
4715 DEBUG EVALUATE /date.dmy(1,'a',2).
4716 DEBUG EVALUATE /date.dmy(1,2,'a').
4717 ])
4718
4719 for opt in OPT NOOPT; do
4720     AS_BOX([$opt])
4721     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4722     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4723 evaluate.sps:3.17-3.33: error: DEBUG EVALUATE: Type mismatch invoking DATE.
4724 DMY(integer, integer, integer) as date.dmy(string, number, number).
4725     3 | DEBUG EVALUATE /date.dmy('a',1,2).
4726       |                 ^~~~~~~~~~~~~~~~~
4727
4728 evaluate.sps:3.26-3.28: note: DEBUG EVALUATE: This argument has type 'string'
4729 but 'integer' is required.
4730     3 | DEBUG EVALUATE /date.dmy('a',1,2).
4731       |                          ^~~
4732
4733 date.dmy('a',1,2) => error
4734
4735 evaluate.sps:4.17-4.33: error: DEBUG EVALUATE: Type mismatch invoking DATE.
4736 DMY(integer, integer, integer) as date.dmy(number, string, number).
4737     4 | DEBUG EVALUATE /date.dmy(1,'a',2).
4738       |                 ^~~~~~~~~~~~~~~~~
4739
4740 evaluate.sps:4.28-4.30: note: DEBUG EVALUATE: This argument has type 'string'
4741 but 'integer' is required.
4742     4 | DEBUG EVALUATE /date.dmy(1,'a',2).
4743       |                            ^~~
4744
4745 date.dmy(1,'a',2) => error
4746
4747 evaluate.sps:5.17-5.33: error: DEBUG EVALUATE: Type mismatch invoking DATE.
4748 DMY(integer, integer, integer) as date.dmy(number, number, string).
4749     5 | DEBUG EVALUATE /date.dmy(1,2,'a').
4750       |                 ^~~~~~~~~~~~~~~~~
4751
4752 evaluate.sps:5.30-5.32: note: DEBUG EVALUATE: This argument has type 'string'
4753 but 'integer' is required.
4754     5 | DEBUG EVALUATE /date.dmy(1,2,'a').
4755       |                              ^~~
4756
4757 date.dmy(1,2,'a') => error
4758 ])
4759 done
4760 AT_CLEANUP
4761
4762 AT_SETUP([expressions - YRMODA])
4763 AT_KEYWORDS([expression expressions evaluate])
4764 AT_DATA([evaluate-base.sps], [dnl
4765 SET EPOCH 1940.
4766 DEBUG EVALUATE SET opt.
4767 dnl FIXME: check out-of-range and nearly out-of-range values
4768 DEBUG EVALUATE /yrmoda(1582,10,15).
4769 DEBUG EVALUATE /yrmoda(1719,9,6).
4770 DEBUG EVALUATE /yrmoda(1583,1,24).
4771 DEBUG EVALUATE /yrmoda(1585,12,14).
4772 DEBUG EVALUATE /yrmoda(1621,11,26).
4773 DEBUG EVALUATE /yrmoda(1821,12,25).
4774 DEBUG EVALUATE /yrmoda(1882,12,3).
4775 DEBUG EVALUATE /yrmoda(2002,4,6).
4776 DEBUG EVALUATE /yrmoda(1999,12,19).
4777 DEBUG EVALUATE /yrmoda(1978,10,1).
4778 DEBUG EVALUATE /yrmoda(1978,10,0).
4779 DEBUG EVALUATE /yrmoda(1978,10,32).
4780 DEBUG EVALUATE /yrmoda(1978,0,31).
4781 DEBUG EVALUATE /yrmoda(1978,13,31).
4782 DEBUG EVALUATE /yrmoda(1978,10,$sysmis).
4783 DEBUG EVALUATE /yrmoda(1978,$sysmis,31).
4784 DEBUG EVALUATE /yrmoda($sysmis,10,31).
4785 DEBUG EVALUATE /yrmoda(1978,$sysmis,$sysmis).
4786 DEBUG EVALUATE /yrmoda($sysmis,$sysmis,31).
4787 DEBUG EVALUATE /yrmoda($sysmis,10,$sysmis).
4788 DEBUG EVALUATE /yrmoda($sysmis,$sysmis,$sysmis).
4789 DEBUG EVALUATE /yrmoda('a',1,2).
4790 DEBUG EVALUATE /yrmoda(1,'a',2).
4791 DEBUG EVALUATE /yrmoda(1,2,'a').
4792 ])
4793
4794 for opt in OPT NOOPT; do
4795     AS_BOX([$opt])
4796     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4797     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4798 yrmoda(1582,10,15) => 1.00
4799
4800 yrmoda(1719,9,6) => 50000.00
4801
4802 yrmoda(1583,1,24) => 102.00
4803
4804 yrmoda(1585,12,14) => 1157.00
4805
4806 yrmoda(1621,11,26) => 14288.00
4807
4808 yrmoda(1821,12,25) => 87365.00
4809
4810 yrmoda(1882,12,3) => 109623.00
4811
4812 yrmoda(2002,4,6) => 153211.00
4813
4814 yrmoda(1999,12,19) => 152372.00
4815
4816 yrmoda(1978,10,1) => 144623.00
4817
4818 yrmoda(1978,10,0) => 144622.00
4819
4820 evaluate.sps:14.17-14.34: error: DEBUG EVALUATE: Invalid arguments to YRMODA
4821 function.
4822    14 | DEBUG EVALUATE /yrmoda(1978,10,32).
4823       |                 ^~~~~~~~~~~~~~~~~~
4824
4825 evaluate.sps:14.32-14.33: note: DEBUG EVALUATE: Day 32 is not in the acceptable
4826 range of 0 to 31.
4827    14 | DEBUG EVALUATE /yrmoda(1978,10,32).
4828       |                                ^~
4829
4830 yrmoda(1978,10,32) => sysmis
4831
4832 yrmoda(1978,0,31) => 144349.00
4833
4834 yrmoda(1978,13,31) => 144745.00
4835
4836 yrmoda(1978,10,$sysmis) => sysmis
4837
4838 yrmoda(1978,$sysmis,31) => sysmis
4839
4840 yrmoda($sysmis,10,31) => sysmis
4841
4842 yrmoda(1978,$sysmis,$sysmis) => sysmis
4843
4844 yrmoda($sysmis,$sysmis,31) => sysmis
4845
4846 yrmoda($sysmis,10,$sysmis) => sysmis
4847
4848 yrmoda($sysmis,$sysmis,$sysmis) => sysmis
4849
4850 evaluate.sps:24.17-24.31: error: DEBUG EVALUATE: Type mismatch invoking
4851 YRMODA(integer, integer, integer) as yrmoda(string, number, number).
4852    24 | DEBUG EVALUATE /yrmoda('a',1,2).
4853       |                 ^~~~~~~~~~~~~~~
4854
4855 evaluate.sps:24.24-24.26: note: DEBUG EVALUATE: This argument has type 'string'
4856 but 'integer' is required.
4857    24 | DEBUG EVALUATE /yrmoda('a',1,2).
4858       |                        ^~~
4859
4860 yrmoda('a',1,2) => error
4861
4862 evaluate.sps:25.17-25.31: error: DEBUG EVALUATE: Type mismatch invoking
4863 YRMODA(integer, integer, integer) as yrmoda(number, string, number).
4864    25 | DEBUG EVALUATE /yrmoda(1,'a',2).
4865       |                 ^~~~~~~~~~~~~~~
4866
4867 evaluate.sps:25.26-25.28: note: DEBUG EVALUATE: This argument has type 'string'
4868 but 'integer' is required.
4869    25 | DEBUG EVALUATE /yrmoda(1,'a',2).
4870       |                          ^~~
4871
4872 yrmoda(1,'a',2) => error
4873
4874 evaluate.sps:26.17-26.31: error: DEBUG EVALUATE: Type mismatch invoking
4875 YRMODA(integer, integer, integer) as yrmoda(number, number, string).
4876    26 | DEBUG EVALUATE /yrmoda(1,2,'a').
4877       |                 ^~~~~~~~~~~~~~~
4878
4879 evaluate.sps:26.28-26.30: note: DEBUG EVALUATE: This argument has type 'string'
4880 but 'integer' is required.
4881    26 | DEBUG EVALUATE /yrmoda(1,2,'a').
4882       |                            ^~~
4883
4884 yrmoda(1,2,'a') => error
4885 ])
4886 done
4887 AT_CLEANUP
4888
4889 AT_SETUP([expressions - DATE.MDY])
4890 AT_KEYWORDS([expression expressions evaluate])
4891 AT_DATA([evaluate-base.sps], [dnl
4892 SET EPOCH 1940.
4893 DEBUG EVALUATE SET opt.
4894
4895 dnl FIXME: check out-of-range and nearly out-of-range values
4896 DEBUG EVALUATE /ctime.days(date.mdy(6,10,1648)) + 577735.
4897 DEBUG EVALUATE /ctime.days(date.mdy(6,30,1680)) + 577735.
4898 DEBUG EVALUATE /ctime.days(date.mdy(7,24,1716)) + 577735.
4899 DEBUG EVALUATE /ctime.days(date.mdy(6,19,1768)) + 577735.
4900 DEBUG EVALUATE /ctime.days(date.mdy(8,2,1819)) + 577735.
4901 DEBUG EVALUATE /ctime.days(date.mdy(3,27,1839)) + 577735.
4902 DEBUG EVALUATE /ctime.days(date.mdy(4,19,1903)) + 577735.
4903 DEBUG EVALUATE /ctime.days(date.mdy(8,25,1929)) + 577735.
4904 DEBUG EVALUATE /ctime.days(date.mdy(9,29,1941)) + 577735.
4905 DEBUG EVALUATE /ctime.days(date.mdy(4,19,1943)) + 577735.
4906 DEBUG EVALUATE /ctime.days(date.mdy(10,7,1943)) + 577735.
4907 DEBUG EVALUATE /ctime.days(date.mdy(3,17,1992)) + 577735.
4908 DEBUG EVALUATE /ctime.days(date.mdy(2,25,1996)) + 577735.
4909 DEBUG EVALUATE /ctime.days(date.mdy(11,10,2038)) + 577735.
4910 DEBUG EVALUATE /ctime.days(date.mdy(7,18,2094)) + 577735.
4911
4912 dnl FIXME: check out-of-range and nearly out-of-range values
4913 DEBUG EVALUATE /ctime.days(date.mdy(10,15,1582)).
4914 DEBUG EVALUATE /ctime.days(date.mdy(9,6,1719)).
4915 DEBUG EVALUATE /ctime.days(date.mdy(1,24,1583)).
4916 DEBUG EVALUATE /ctime.days(date.mdy(12,14,1585)).
4917 DEBUG EVALUATE /ctime.days(date.mdy(11,26,1621)).
4918 DEBUG EVALUATE /ctime.days(date.mdy(12,25,1821)).
4919 DEBUG EVALUATE /ctime.days(date.mdy(12,3,1882)).
4920 DEBUG EVALUATE /ctime.days(date.mdy(4,6,2002)).
4921 DEBUG EVALUATE /ctime.days(date.mdy(12,19,1999)).
4922 DEBUG EVALUATE /ctime.days(date.mdy(10,1,1978)).
4923 DEBUG EVALUATE /ctime.days(date.mdy(10,0,1978)).
4924 DEBUG EVALUATE /ctime.days(date.mdy(10,32,1978)).
4925 DEBUG EVALUATE /ctime.days(date.mdy(0,31,1978)).
4926 DEBUG EVALUATE /ctime.days(date.mdy(13,31,1978)).
4927 DEBUG EVALUATE /ctime.days(date.mdy(10,$sysmis,1978)).
4928 DEBUG EVALUATE /ctime.days(date.mdy($sysmis,31,1978)).
4929 DEBUG EVALUATE /ctime.days(date.mdy(10,31,$sysmis)).
4930 DEBUG EVALUATE /ctime.days(date.mdy($sysmis,$sysmis,1978)).
4931 DEBUG EVALUATE /ctime.days(date.mdy($sysmis,31,$sysmis)).
4932 DEBUG EVALUATE /ctime.days(date.mdy(10,$sysmis,$sysmis)).
4933 DEBUG EVALUATE /ctime.days(date.mdy($sysmis,$sysmis,$sysmis)).
4934 DEBUG EVALUATE /date.mdy('a',1,2).
4935 DEBUG EVALUATE /date.mdy(1,'a',2).
4936 DEBUG EVALUATE /date.mdy(1,2,'a').
4937 DEBUG EVALUATE /ctime.days(date.mdy(0,0,0)).
4938 DEBUG EVALUATE /ctime.days(date.mdy(0,0,999)).
4939 DEBUG EVALUATE /date.mdy(1,1,1582).
4940 DEBUG EVALUATE /date.mdy(10,14,1582).
4941 DEBUG EVALUATE /date.mdy(10,15,1582).
4942 ])
4943
4944 for opt in OPT NOOPT; do
4945     AS_BOX([$opt])
4946     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4947     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4948 ctime.days(date.mdy(6,10,1648)) + 577735 => 601716.00
4949
4950 ctime.days(date.mdy(6,30,1680)) + 577735 => 613424.00
4951
4952 ctime.days(date.mdy(7,24,1716)) + 577735 => 626596.00
4953
4954 ctime.days(date.mdy(6,19,1768)) + 577735 => 645554.00
4955
4956 ctime.days(date.mdy(8,2,1819)) + 577735 => 664224.00
4957
4958 ctime.days(date.mdy(3,27,1839)) + 577735 => 671401.00
4959
4960 ctime.days(date.mdy(4,19,1903)) + 577735 => 694799.00
4961
4962 ctime.days(date.mdy(8,25,1929)) + 577735 => 704424.00
4963
4964 ctime.days(date.mdy(9,29,1941)) + 577735 => 708842.00
4965
4966 ctime.days(date.mdy(4,19,1943)) + 577735 => 709409.00
4967
4968 ctime.days(date.mdy(10,7,1943)) + 577735 => 709580.00
4969
4970 ctime.days(date.mdy(3,17,1992)) + 577735 => 727274.00
4971
4972 ctime.days(date.mdy(2,25,1996)) + 577735 => 728714.00
4973
4974 ctime.days(date.mdy(11,10,2038)) + 577735 => 744313.00
4975
4976 ctime.days(date.mdy(7,18,2094)) + 577735 => 764652.00
4977
4978 ctime.days(date.mdy(10,15,1582)) => 1.00
4979
4980 ctime.days(date.mdy(9,6,1719)) => 50000.00
4981
4982 ctime.days(date.mdy(1,24,1583)) => 102.00
4983
4984 ctime.days(date.mdy(12,14,1585)) => 1157.00
4985
4986 ctime.days(date.mdy(11,26,1621)) => 14288.00
4987
4988 ctime.days(date.mdy(12,25,1821)) => 87365.00
4989
4990 ctime.days(date.mdy(12,3,1882)) => 109623.00
4991
4992 ctime.days(date.mdy(4,6,2002)) => 153211.00
4993
4994 ctime.days(date.mdy(12,19,1999)) => 152372.00
4995
4996 ctime.days(date.mdy(10,1,1978)) => 144623.00
4997
4998 ctime.days(date.mdy(10,0,1978)) => 144622.00
4999
5000 evaluate.sps:31.28-31.47: error: DEBUG EVALUATE: Invalid arguments to DATE.MDY
5001 function.
5002    31 | DEBUG EVALUATE /ctime.days(date.mdy(10,32,1978)).
5003       |                            ^~~~~~~~~~~~~~~~~~~~
5004
5005 evaluate.sps:31.40-31.41: note: DEBUG EVALUATE: Day 32 is not in the acceptable
5006 range of 0 to 31.
5007    31 | DEBUG EVALUATE /ctime.days(date.mdy(10,32,1978)).
5008       |                                        ^~
5009
5010 ctime.days(date.mdy(10,32,1978)) => sysmis
5011
5012 ctime.days(date.mdy(0,31,1978)) => 144349.00
5013
5014 ctime.days(date.mdy(13,31,1978)) => 144745.00
5015
5016 ctime.days(date.mdy(10,$sysmis,1978)) => sysmis
5017
5018 ctime.days(date.mdy($sysmis,31,1978)) => sysmis
5019
5020 ctime.days(date.mdy(10,31,$sysmis)) => sysmis
5021
5022 ctime.days(date.mdy($sysmis,$sysmis,1978)) => sysmis
5023
5024 ctime.days(date.mdy($sysmis,31,$sysmis)) => sysmis
5025
5026 ctime.days(date.mdy(10,$sysmis,$sysmis)) => sysmis
5027
5028 ctime.days(date.mdy($sysmis,$sysmis,$sysmis)) => sysmis
5029
5030 evaluate.sps:41.17-41.33: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5031 MDY(integer, integer, integer) as date.mdy(string, number, number).
5032    41 | DEBUG EVALUATE /date.mdy('a',1,2).
5033       |                 ^~~~~~~~~~~~~~~~~
5034
5035 evaluate.sps:41.26-41.28: note: DEBUG EVALUATE: This argument has type 'string'
5036 but 'integer' is required.
5037    41 | DEBUG EVALUATE /date.mdy('a',1,2).
5038       |                          ^~~
5039
5040 date.mdy('a',1,2) => error
5041
5042 evaluate.sps:42.17-42.33: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5043 MDY(integer, integer, integer) as date.mdy(number, string, number).
5044    42 | DEBUG EVALUATE /date.mdy(1,'a',2).
5045       |                 ^~~~~~~~~~~~~~~~~
5046
5047 evaluate.sps:42.28-42.30: note: DEBUG EVALUATE: This argument has type 'string'
5048 but 'integer' is required.
5049    42 | DEBUG EVALUATE /date.mdy(1,'a',2).
5050       |                            ^~~
5051
5052 date.mdy(1,'a',2) => error
5053
5054 evaluate.sps:43.17-43.33: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5055 MDY(integer, integer, integer) as date.mdy(number, number, string).
5056    43 | DEBUG EVALUATE /date.mdy(1,2,'a').
5057       |                 ^~~~~~~~~~~~~~~~~
5058
5059 evaluate.sps:43.30-43.32: note: DEBUG EVALUATE: This argument has type 'string'
5060 but 'integer' is required.
5061    43 | DEBUG EVALUATE /date.mdy(1,2,'a').
5062       |                              ^~~
5063
5064 date.mdy(1,2,'a') => error
5065
5066 ctime.days(date.mdy(0,0,0)) => 152353.00
5067
5068 evaluate.sps:45.28-45.44: error: DEBUG EVALUATE: Invalid arguments to DATE.MDY
5069 function.
5070    45 | DEBUG EVALUATE /ctime.days(date.mdy(0,0,999)).
5071       |                            ^~~~~~~~~~~~~~~~~
5072
5073 evaluate.sps:45.41-45.43: note: DEBUG EVALUATE: Date 0998-12-0 is before the
5074 earliest supported date 1582-10-15.
5075    45 | DEBUG EVALUATE /ctime.days(date.mdy(0,0,999)).
5076       |                                         ^~~
5077
5078 ctime.days(date.mdy(0,0,999)) => sysmis
5079
5080 evaluate.sps:46.17-46.34: error: DEBUG EVALUATE: Invalid arguments to DATE.MDY
5081 function.
5082    46 | DEBUG EVALUATE /date.mdy(1,1,1582).
5083       |                 ^~~~~~~~~~~~~~~~~~
5084
5085 evaluate.sps:46.17-46.34: note: DEBUG EVALUATE: Date 1582-1-1 is before the
5086 earliest supported date 1582-10-15.
5087    46 | DEBUG EVALUATE /date.mdy(1,1,1582).
5088       |                 ^~~~~~~~~~~~~~~~~~
5089
5090 date.mdy(1,1,1582) => sysmis
5091
5092 evaluate.sps:47.17-47.36: error: DEBUG EVALUATE: Invalid arguments to DATE.MDY
5093 function.
5094    47 | DEBUG EVALUATE /date.mdy(10,14,1582).
5095       |                 ^~~~~~~~~~~~~~~~~~~~
5096
5097 evaluate.sps:47.17-47.36: note: DEBUG EVALUATE: Date 1582-10-14 is before the
5098 earliest supported date 1582-10-15.
5099    47 | DEBUG EVALUATE /date.mdy(10,14,1582).
5100       |                 ^~~~~~~~~~~~~~~~~~~~
5101
5102 date.mdy(10,14,1582) => sysmis
5103
5104 date.mdy(10,15,1582) => 86400.00
5105 ])
5106 done
5107 AT_CLEANUP
5108
5109 AT_SETUP([expressions - DATE.MOYR])
5110 AT_KEYWORDS([expression expressions evaluate])
5111 AT_DATA([evaluate-base.sps], [dnl
5112 SET EPOCH 1940.
5113 DEBUG EVALUATE SET opt.
5114 DEBUG EVALUATE /ctime.days(date.moyr(1,2000)).
5115 DEBUG EVALUATE /ctime.days(date.moyr(2,2000)).
5116 DEBUG EVALUATE /ctime.days(date.moyr(3,2000)).
5117 DEBUG EVALUATE /ctime.days(date.moyr(4,2000)).
5118 DEBUG EVALUATE /ctime.days(date.moyr(5,2000)).
5119 DEBUG EVALUATE /ctime.days(date.moyr(13,2000)).
5120 DEBUG EVALUATE /ctime.days(date.moyr(14,2000)).
5121 DEBUG EVALUATE /ctime.days(date.moyr($sysmis,2000)).
5122 DEBUG EVALUATE /ctime.days(date.moyr(1,$sysmis)).
5123 DEBUG EVALUATE /ctime.days(date.moyr($sysmis,$sysmis)).
5124 DEBUG EVALUATE /date.moyr('a',2000).
5125 DEBUG EVALUATE /date.moyr(5,'a').
5126 DEBUG EVALUATE /date.moyr('a','b').
5127 ])
5128
5129 for opt in OPT NOOPT; do
5130     AS_BOX([$opt])
5131     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5132     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
5133 ctime.days(date.moyr(1,2000)) => 152385.00
5134
5135 ctime.days(date.moyr(2,2000)) => 152416.00
5136
5137 ctime.days(date.moyr(3,2000)) => 152445.00
5138
5139 ctime.days(date.moyr(4,2000)) => 152476.00
5140
5141 ctime.days(date.moyr(5,2000)) => 152506.00
5142
5143 ctime.days(date.moyr(13,2000)) => 152751.00
5144
5145 evaluate.sps:9.28-9.45: error: DEBUG EVALUATE: Invalid arguments to DATE.MOYR
5146 function.
5147     9 | DEBUG EVALUATE /ctime.days(date.moyr(14,2000)).
5148       |                            ^~~~~~~~~~~~~~~~~~
5149
5150 evaluate.sps:9.38-9.39: note: DEBUG EVALUATE: Month 14 is not in the acceptable
5151 range of 0 to 13.
5152     9 | DEBUG EVALUATE /ctime.days(date.moyr(14,2000)).
5153       |                                      ^~
5154
5155 ctime.days(date.moyr(14,2000)) => sysmis
5156
5157 ctime.days(date.moyr($sysmis,2000)) => sysmis
5158
5159 ctime.days(date.moyr(1,$sysmis)) => sysmis
5160
5161 ctime.days(date.moyr($sysmis,$sysmis)) => sysmis
5162
5163 evaluate.sps:13.17-13.35: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5164 MOYR(integer, integer) as date.moyr(string, number).
5165    13 | DEBUG EVALUATE /date.moyr('a',2000).
5166       |                 ^~~~~~~~~~~~~~~~~~~
5167
5168 evaluate.sps:13.27-13.29: note: DEBUG EVALUATE: This argument has type 'string'
5169 but 'integer' is required.
5170    13 | DEBUG EVALUATE /date.moyr('a',2000).
5171       |                           ^~~
5172
5173 date.moyr('a',2000) => error
5174
5175 evaluate.sps:14.17-14.32: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5176 MOYR(integer, integer) as date.moyr(number, string).
5177    14 | DEBUG EVALUATE /date.moyr(5,'a').
5178       |                 ^~~~~~~~~~~~~~~~
5179
5180 evaluate.sps:14.29-14.31: note: DEBUG EVALUATE: This argument has type 'string'
5181 but 'integer' is required.
5182    14 | DEBUG EVALUATE /date.moyr(5,'a').
5183       |                             ^~~
5184
5185 date.moyr(5,'a') => error
5186
5187 evaluate.sps:15.17-15.34: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5188 MOYR(integer, integer) as date.moyr(string, string).
5189    15 | DEBUG EVALUATE /date.moyr('a','b').
5190       |                 ^~~~~~~~~~~~~~~~~~
5191
5192 evaluate.sps:15.27-15.29: note: DEBUG EVALUATE: This argument has type 'string'
5193 but 'integer' is required.
5194    15 | DEBUG EVALUATE /date.moyr('a','b').
5195       |                           ^~~
5196
5197 evaluate.sps:15.31-15.33: note: DEBUG EVALUATE: This argument has type 'string'
5198 but 'integer' is required.
5199    15 | DEBUG EVALUATE /date.moyr('a','b').
5200       |                               ^~~
5201
5202 date.moyr('a','b') => error
5203 ])
5204 done
5205 AT_CLEANUP
5206
5207 AT_SETUP([expressions - DATE.QYR])
5208 AT_KEYWORDS([expression expressions evaluate])
5209 AT_DATA([evaluate-base.sps], [dnl
5210 SET EPOCH 1940.
5211 DEBUG EVALUATE SET opt.
5212 DEBUG EVALUATE /ctime.days(date.qyr(1,2000)).
5213 DEBUG EVALUATE /ctime.days(date.qyr(2,2000)).
5214 DEBUG EVALUATE /ctime.days(date.qyr(5,2000)).
5215 DEBUG EVALUATE /ctime.days(date.qyr(6,2000)).
5216 DEBUG EVALUATE /ctime.days(date.qyr($sysmis,2000)).
5217 DEBUG EVALUATE /ctime.days(date.qyr(1,$sysmis)).
5218 DEBUG EVALUATE /ctime.days(date.qyr($sysmis,$sysmis)).
5219 DEBUG EVALUATE /date.qyr('a',2000).
5220 DEBUG EVALUATE /date.qyr(5,'a').
5221 DEBUG EVALUATE /date.qyr('a','b').
5222 ])
5223
5224 for opt in OPT NOOPT; do
5225     AS_BOX([$opt])
5226     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5227     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
5228 ctime.days(date.qyr(1,2000)) => 152385.00
5229
5230 ctime.days(date.qyr(2,2000)) => 152476.00
5231
5232 evaluate.sps:5.37: warning: DEBUG EVALUATE: Argument 1 to DATE.QYR must be 1,
5233 2, 3, or 4 (not 5).
5234     5 | DEBUG EVALUATE /ctime.days(date.qyr(5,2000)).
5235       |                                     ^
5236
5237 ctime.days(date.qyr(5,2000)) => sysmis
5238
5239 evaluate.sps:6.37: warning: DEBUG EVALUATE: Argument 1 to DATE.QYR must be 1,
5240 2, 3, or 4 (not 6).
5241     6 | DEBUG EVALUATE /ctime.days(date.qyr(6,2000)).
5242       |                                     ^
5243
5244 ctime.days(date.qyr(6,2000)) => sysmis
5245
5246 ctime.days(date.qyr($sysmis,2000)) => sysmis
5247
5248 ctime.days(date.qyr(1,$sysmis)) => sysmis
5249
5250 ctime.days(date.qyr($sysmis,$sysmis)) => sysmis
5251
5252 evaluate.sps:10.17-10.34: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5253 QYR(integer, integer) as date.qyr(string, number).
5254    10 | DEBUG EVALUATE /date.qyr('a',2000).
5255       |                 ^~~~~~~~~~~~~~~~~~
5256
5257 evaluate.sps:10.26-10.28: note: DEBUG EVALUATE: This argument has type 'string'
5258 but 'integer' is required.
5259    10 | DEBUG EVALUATE /date.qyr('a',2000).
5260       |                          ^~~
5261
5262 date.qyr('a',2000) => error
5263
5264 evaluate.sps:11.17-11.31: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5265 QYR(integer, integer) as date.qyr(number, string).
5266    11 | DEBUG EVALUATE /date.qyr(5,'a').
5267       |                 ^~~~~~~~~~~~~~~
5268
5269 evaluate.sps:11.28-11.30: note: DEBUG EVALUATE: This argument has type 'string'
5270 but 'integer' is required.
5271    11 | DEBUG EVALUATE /date.qyr(5,'a').
5272       |                            ^~~
5273
5274 date.qyr(5,'a') => error
5275
5276 evaluate.sps:12.17-12.33: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5277 QYR(integer, integer) as date.qyr(string, string).
5278    12 | DEBUG EVALUATE /date.qyr('a','b').
5279       |                 ^~~~~~~~~~~~~~~~~
5280
5281 evaluate.sps:12.26-12.28: note: DEBUG EVALUATE: This argument has type 'string'
5282 but 'integer' is required.
5283    12 | DEBUG EVALUATE /date.qyr('a','b').
5284       |                          ^~~
5285
5286 evaluate.sps:12.30-12.32: note: DEBUG EVALUATE: This argument has type 'string'
5287 but 'integer' is required.
5288    12 | DEBUG EVALUATE /date.qyr('a','b').
5289       |                              ^~~
5290
5291 date.qyr('a','b') => error
5292 ])
5293 done
5294 AT_CLEANUP
5295
5296 AT_SETUP([expressions - DATE.WKYR])
5297 AT_KEYWORDS([expression expressions evaluate])
5298 AT_DATA([evaluate-base.sps], [dnl
5299 SET EPOCH 1940.
5300 DEBUG EVALUATE SET opt.
5301 DEBUG EVALUATE /ctime.days(date.wkyr(1,2000)).
5302 DEBUG EVALUATE /ctime.days(date.wkyr(15,1999)).
5303 DEBUG EVALUATE /ctime.days(date.wkyr(36,1999)).
5304 DEBUG EVALUATE /ctime.days(date.wkyr(54,1999)).
5305 DEBUG EVALUATE /ctime.days(date.wkyr($sysmis,1999)).
5306 DEBUG EVALUATE /ctime.days(date.wkyr(1,$sysmis)).
5307 DEBUG EVALUATE /ctime.days(date.wkyr($sysmis,$sysmis)).
5308 DEBUG EVALUATE /date.wkyr('a',1999).
5309 DEBUG EVALUATE /date.wkyr(5,'a').
5310 DEBUG EVALUATE /date.wkyr('a','b').
5311 ])
5312
5313 for opt in OPT NOOPT; do
5314     AS_BOX([$opt])
5315     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5316     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
5317 ctime.days(date.wkyr(1,2000)) => 152385.00
5318
5319 ctime.days(date.wkyr(15,1999)) => 152118.00
5320
5321 ctime.days(date.wkyr(36,1999)) => 152265.00
5322
5323 evaluate.sps:6.38-6.39: error: DEBUG EVALUATE: The week argument to DATE.WKYR
5324 is outside the acceptable range of 1 to 53.  The result will be system-missing.
5325     6 | DEBUG EVALUATE /ctime.days(date.wkyr(54,1999)).
5326       |                                      ^~
5327
5328 ctime.days(date.wkyr(54,1999)) => sysmis
5329
5330 ctime.days(date.wkyr($sysmis,1999)) => sysmis
5331
5332 ctime.days(date.wkyr(1,$sysmis)) => sysmis
5333
5334 ctime.days(date.wkyr($sysmis,$sysmis)) => sysmis
5335
5336 evaluate.sps:10.17-10.35: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5337 WKYR(integer, integer) as date.wkyr(string, number).
5338    10 | DEBUG EVALUATE /date.wkyr('a',1999).
5339       |                 ^~~~~~~~~~~~~~~~~~~
5340
5341 evaluate.sps:10.27-10.29: note: DEBUG EVALUATE: This argument has type 'string'
5342 but 'integer' is required.
5343    10 | DEBUG EVALUATE /date.wkyr('a',1999).
5344       |                           ^~~
5345
5346 date.wkyr('a',1999) => error
5347
5348 evaluate.sps:11.17-11.32: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5349 WKYR(integer, integer) as date.wkyr(number, string).
5350    11 | DEBUG EVALUATE /date.wkyr(5,'a').
5351       |                 ^~~~~~~~~~~~~~~~
5352
5353 evaluate.sps:11.29-11.31: note: DEBUG EVALUATE: This argument has type 'string'
5354 but 'integer' is required.
5355    11 | DEBUG EVALUATE /date.wkyr(5,'a').
5356       |                             ^~~
5357
5358 date.wkyr(5,'a') => error
5359
5360 evaluate.sps:12.17-12.34: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5361 WKYR(integer, integer) as date.wkyr(string, string).
5362    12 | DEBUG EVALUATE /date.wkyr('a','b').
5363       |                 ^~~~~~~~~~~~~~~~~~
5364
5365 evaluate.sps:12.27-12.29: note: DEBUG EVALUATE: This argument has type 'string'
5366 but 'integer' is required.
5367    12 | DEBUG EVALUATE /date.wkyr('a','b').
5368       |                           ^~~
5369
5370 evaluate.sps:12.31-12.33: note: DEBUG EVALUATE: This argument has type 'string'
5371 but 'integer' is required.
5372    12 | DEBUG EVALUATE /date.wkyr('a','b').
5373       |                               ^~~
5374
5375 date.wkyr('a','b') => error
5376 ])
5377 done
5378 AT_CLEANUP
5379
5380 AT_SETUP([expressions - DATE.YRDAY])
5381 AT_KEYWORDS([expression expressions evaluate])
5382 AT_DATA([evaluate-base.sps], [dnl
5383 SET EPOCH 1940.
5384 DEBUG EVALUATE SET opt.
5385 DEBUG EVALUATE /ctime.days(date.yrday(2000,1)).
5386 DEBUG EVALUATE /ctime.days(date.yrday(2000,100)).
5387 DEBUG EVALUATE /ctime.days(date.yrday(2000,253)).
5388 DEBUG EVALUATE /ctime.days(date.yrday(2000,500)).
5389 DEBUG EVALUATE /ctime.days(date.yrday(2000,-100)).
5390 DEBUG EVALUATE /ctime.days(date.yrday(1999,$sysmis)).
5391 DEBUG EVALUATE /ctime.days(date.yrday($sysmis,1)).
5392 DEBUG EVALUATE /ctime.days(date.yrday($sysmis,$sysmis)).
5393 DEBUG EVALUATE /date.yrday(1999,'a').
5394 DEBUG EVALUATE /date.yrday('a',5).
5395 DEBUG EVALUATE /date.yrday('a','b').
5396 ])
5397
5398 for opt in OPT NOOPT; do
5399     AS_BOX([$opt])
5400     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5401     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
5402 ctime.days(date.yrday(2000,1)) => 152385.00
5403
5404 ctime.days(date.yrday(2000,100)) => 152484.00
5405
5406 ctime.days(date.yrday(2000,253)) => 152637.00
5407
5408 evaluate.sps:6.44-6.46: error: DEBUG EVALUATE: The value 500 as day argument to
5409 DATE.YRDAY is outside the acceptable range of 1 to 366.  The result will be
5410 system-missing.
5411     6 | DEBUG EVALUATE /ctime.days(date.yrday(2000,500)).
5412       |                                            ^~~
5413
5414 ctime.days(date.yrday(2000,500)) => sysmis
5415
5416 evaluate.sps:7.44-7.47: error: DEBUG EVALUATE: The value -100 as day argument
5417 to DATE.YRDAY is outside the acceptable range of 1 to 366.  The result will be
5418 system-missing.
5419     7 | DEBUG EVALUATE /ctime.days(date.yrday(2000,-100)).
5420       |                                            ^~~~
5421
5422 ctime.days(date.yrday(2000,-100)) => sysmis
5423
5424 ctime.days(date.yrday(1999,$sysmis)) => sysmis
5425
5426 ctime.days(date.yrday($sysmis,1)) => sysmis
5427
5428 ctime.days(date.yrday($sysmis,$sysmis)) => sysmis
5429
5430 evaluate.sps:11.17-11.36: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5431 YRDAY(integer, integer) as date.yrday(number, string).
5432    11 | DEBUG EVALUATE /date.yrday(1999,'a').
5433       |                 ^~~~~~~~~~~~~~~~~~~~
5434
5435 evaluate.sps:11.33-11.35: note: DEBUG EVALUATE: This argument has type 'string'
5436 but 'integer' is required.
5437    11 | DEBUG EVALUATE /date.yrday(1999,'a').
5438       |                                 ^~~
5439
5440 date.yrday(1999,'a') => error
5441
5442 evaluate.sps:12.17-12.33: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5443 YRDAY(integer, integer) as date.yrday(string, number).
5444    12 | DEBUG EVALUATE /date.yrday('a',5).
5445       |                 ^~~~~~~~~~~~~~~~~
5446
5447 evaluate.sps:12.28-12.30: note: DEBUG EVALUATE: This argument has type 'string'
5448 but 'integer' is required.
5449    12 | DEBUG EVALUATE /date.yrday('a',5).
5450       |                            ^~~
5451
5452 date.yrday('a',5) => error
5453
5454 evaluate.sps:13.17-13.35: error: DEBUG EVALUATE: Type mismatch invoking DATE.
5455 YRDAY(integer, integer) as date.yrday(string, string).
5456    13 | DEBUG EVALUATE /date.yrday('a','b').
5457       |                 ^~~~~~~~~~~~~~~~~~~
5458
5459 evaluate.sps:13.28-13.30: note: DEBUG EVALUATE: This argument has type 'string'
5460 but 'integer' is required.
5461    13 | DEBUG EVALUATE /date.yrday('a','b').
5462       |                            ^~~
5463
5464 evaluate.sps:13.32-13.34: note: DEBUG EVALUATE: This argument has type 'string'
5465 but 'integer' is required.
5466    13 | DEBUG EVALUATE /date.yrday('a','b').
5467       |                                ^~~
5468
5469 date.yrday('a','b') => error
5470 ])
5471 done
5472 AT_CLEANUP
5473
5474 AT_SETUP([expressions - XDATE.DATE])
5475 AT_KEYWORDS([expression expressions evaluate])
5476 AT_DATA([evaluate-base.sps], [dnl
5477 SET EPOCH 1940.
5478 DEBUG EVALUATE SET opt.
5479 DEBUG EVALUATE /xdate.date(date.mdy(6,10,1648) + time.hms(0,0,0)) / 86400.
5480 DEBUG EVALUATE /xdate.date(date.mdy(6,30,1680) + time.hms(4,50,38)) / 86400.
5481 DEBUG EVALUATE /xdate.date(date.mdy(7,24,1716) + time.hms(12,31,35)) / 86400.
5482 DEBUG EVALUATE /xdate.date(date.mdy(6,19,1768) + time.hms(12,47,53)) / 86400.
5483 DEBUG EVALUATE /xdate.date(date.mdy(8,2,1819) + time.hms(1,26,0)) / 86400.
5484 DEBUG EVALUATE /xdate.date(date.mdy(3,27,1839) + time.hms(20,58,11)) / 86400.
5485 DEBUG EVALUATE /xdate.date(date.mdy(4,19,1903) + time.hms(7,36,5)) / 86400.
5486 DEBUG EVALUATE /xdate.date(date.mdy(8,25,1929) + time.hms(15,43,49)) / 86400.
5487 DEBUG EVALUATE /xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400.
5488 DEBUG EVALUATE /xdate.date(date.mdy(4,19,1943) + time.hms(6,49,27)) / 86400.
5489 DEBUG EVALUATE /xdate.date(date.mdy(10,7,1943) + time.hms(2,57,52)) / 86400.
5490 DEBUG EVALUATE /xdate.date(date.mdy(3,17,1992) + time.hms(16,45,44)) / 86400.
5491 DEBUG EVALUATE /xdate.date(date.mdy(2,25,1996) + time.hms(21,30,57)) / 86400.
5492 DEBUG EVALUATE /xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400.
5493 DEBUG EVALUATE /xdate.date(date.mdy(4,19,43) + time.hms(6,49,27)) / 86400.
5494 DEBUG EVALUATE /xdate.date(date.mdy(10,7,43) + time.hms(2,57,52)) / 86400.
5495 DEBUG EVALUATE /xdate.date(date.mdy(3,17,92) + time.hms(16,45,44)) / 86400.
5496 DEBUG EVALUATE /xdate.date(date.mdy(2,25,96) + time.hms(21,30,57)) / 86400.
5497 DEBUG EVALUATE /xdate.date(date.mdy(11,10,2038) + time.hms(22,30,4)) / 86400.
5498 DEBUG EVALUATE /xdate.date(date.mdy(7,18,2094) + time.hms(1,56,51)) / 86400.
5499 DEBUG EVALUATE /xdate.date(123.4).
5500 DEBUG EVALUATE /xdate.date('').
5501 ])
5502
5503 for opt in OPT NOOPT; do
5504     AS_BOX([$opt])
5505     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5506     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
5507 xdate.date(date.mdy(6,10,1648) + time.hms(0,0,0)) / 86400 => 23981.00
5508
5509 xdate.date(date.mdy(6,30,1680) + time.hms(4,50,38)) / 86400 => 35689.00
5510
5511 xdate.date(date.mdy(7,24,1716) + time.hms(12,31,35)) / 86400 => 48861.00
5512
5513 xdate.date(date.mdy(6,19,1768) + time.hms(12,47,53)) / 86400 => 67819.00
5514
5515 xdate.date(date.mdy(8,2,1819) + time.hms(1,26,0)) / 86400 => 86489.00
5516
5517 xdate.date(date.mdy(3,27,1839) + time.hms(20,58,11)) / 86400 => 93666.00
5518
5519 xdate.date(date.mdy(4,19,1903) + time.hms(7,36,5)) / 86400 => 117064.00
5520
5521 xdate.date(date.mdy(8,25,1929) + time.hms(15,43,49)) / 86400 => 126689.00
5522
5523 xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400 => 131107.00
5524
5525 xdate.date(date.mdy(4,19,1943) + time.hms(6,49,27)) / 86400 => 131674.00
5526
5527 xdate.date(date.mdy(10,7,1943) + time.hms(2,57,52)) / 86400 => 131845.00
5528
5529 xdate.date(date.mdy(3,17,1992) + time.hms(16,45,44)) / 86400 => 149539.00
5530
5531 xdate.date(date.mdy(2,25,1996) + time.hms(21,30,57)) / 86400 => 150979.00
5532
5533 xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400 => 131107.00
5534
5535 xdate.date(date.mdy(4,19,43) + time.hms(6,49,27)) / 86400 => 131674.00
5536
5537 xdate.date(date.mdy(10,7,43) + time.hms(2,57,52)) / 86400 => 131845.00
5538
5539 xdate.date(date.mdy(3,17,92) + time.hms(16,45,44)) / 86400 => 149539.00
5540
5541 xdate.date(date.mdy(2,25,96) + time.hms(21,30,57)) / 86400 => 150979.00
5542
5543 xdate.date(date.mdy(11,10,2038) + time.hms(22,30,4)) / 86400 => 166578.00
5544
5545 xdate.date(date.mdy(7,18,2094) + time.hms(1,56,51)) / 86400 => 186917.00
5546
5547 xdate.date(123.4) => 0.00
5548
5549 evaluate.sps:24.17-24.30: error: DEBUG EVALUATE: Type mismatch invoking XDATE.
5550 DATE(number) as xdate.date(string).
5551    24 | DEBUG EVALUATE /xdate.date('').
5552       |                 ^~~~~~~~~~~~~~
5553
5554 evaluate.sps:24.28-24.29: note: DEBUG EVALUATE: This argument has type 'string'
5555 but 'number' is required.
5556    24 | DEBUG EVALUATE /xdate.date('').
5557       |                            ^~
5558
5559 xdate.date('') => error
5560 ])
5561 done
5562 AT_CLEANUP
5563
5564 AT_SETUP([expressions - XDATE.HOUR])
5565 AT_KEYWORDS([expression expressions evaluate])
5566 AT_DATA([evaluate-base.sps], [dnl
5567 SET EPOCH 1940.
5568 DEBUG EVALUATE SET opt.
5569 DEBUG EVALUATE /xdate.hour(date.mdy(6,10,1648) + time.hms(0,0,0)).
5570 DEBUG EVALUATE /xdate.hour(date.mdy(6,30,1680) + time.hms(4,50,38)).
5571 DEBUG EVALUATE /xdate.hour(date.mdy(7,24,1716) + time.hms(12,31,35)).
5572 DEBUG EVALUATE /xdate.hour(date.mdy(6,19,1768) + time.hms(12,47,53)).
5573 DEBUG EVALUATE /xdate.hour(date.mdy(8,2,1819) + time.hms(1,26,0)).
5574 DEBUG EVALUATE /xdate.hour(date.mdy(3,27,1839) + time.hms(20,58,11)).
5575 DEBUG EVALUATE /xdate.hour(date.mdy(4,19,1903) + time.hms(7,36,5)).
5576 DEBUG EVALUATE /xdate.hour(date.mdy(8,25,1929) + time.hms(15,43,49)).
5577 DEBUG EVALUATE /xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9)).
5578 DEBUG EVALUATE /xdate.hour(date.mdy(4,19,1943) + time.hms(6,49,27)).
5579 DEBUG EVALUATE /xdate.hour(date.mdy(10,7,1943) + time.hms(2,57,52)).
5580 DEBUG EVALUATE /xdate.hour(date.mdy(3,17,1992) + time.hms(16,45,44)).
5581 DEBUG EVALUATE /xdate.hour(date.mdy(2,25,1996) + time.hms(21,30,57)).
5582 DEBUG EVALUATE /xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9)).
5583 DEBUG EVALUATE /xdate.hour(date.mdy(4,19,43) + time.hms(6,49,27)).
5584 DEBUG EVALUATE /xdate.hour(date.mdy(10,7,43) + time.hms(2,57,52)).
5585 DEBUG EVALUATE /xdate.hour(date.mdy(3,17,92) + time.hms(16,45,44)).
5586 DEBUG EVALUATE /xdate.hour(date.mdy(2,25,96) + time.hms(21,30,57)).
5587 DEBUG EVALUATE /xdate.hour(date.mdy(11,10,2038) + time.hms(22,30,4)).
5588 DEBUG EVALUATE /xdate.hour(date.mdy(7,18,2094) + time.hms(1,56,51)).
5589 DEBUG EVALUATE /xdate.hour(-1).
5590 DEBUG EVALUATE /xdate.hour(1).
5591 DEBUG EVALUATE /xdate.hour($sysmis).
5592 DEBUG EVALUATE /xdate.hour('').
5593 ])
5594
5595 for opt in OPT NOOPT; do
5596     AS_BOX([$opt])
5597     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5598     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
5599 xdate.hour(date.mdy(6,10,1648) + time.hms(0,0,0)) => 0.00
5600
5601 xdate.hour(date.mdy(6,30,1680) + time.hms(4,50,38)) => 4.00
5602
5603 xdate.hour(date.mdy(7,24,1716) + time.hms(12,31,35)) => 12.00
5604
5605 xdate.hour(date.mdy(6,19,1768) + time.hms(12,47,53)) => 12.00
5606
5607 xdate.hour(date.mdy(8,2,1819) + time.hms(1,26,0)) => 1.00
5608
5609 xdate.hour(date.mdy(3,27,1839) + time.hms(20,58,11)) => 20.00
5610
5611 xdate.hour(date.mdy(4,19,1903) + time.hms(7,36,5)) => 7.00
5612
5613 xdate.hour(date.mdy(8,25,1929) + time.hms(15,43,49)) => 15.00
5614
5615 xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9)) => 4.00
5616
5617 xdate.hour(date.mdy(4,19,1943) + time.hms(6,49,27)) => 6.00
5618
5619 xdate.hour(date.mdy(10,7,1943) + time.hms(2,57,52)) => 2.00
5620
5621 xdate.hour(date.mdy(3,17,1992) + time.hms(16,45,44)) => 16.00
5622
5623 xdate.hour(date.mdy(2,25,1996) + time.hms(21,30,57)) => 21.00
5624
5625 xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9)) => 4.00
5626
5627 xdate.hour(date.mdy(4,19,43) + time.hms(6,49,27)) => 6.00
5628
5629 xdate.hour(date.mdy(10,7,43) + time.hms(2,57,52)) => 2.00
5630
5631 xdate.hour(date.mdy(3,17,92) + time.hms(16,45,44)) => 16.00
5632
5633 xdate.hour(date.mdy(2,25,96) + time.hms(21,30,57)) => 21.00
5634
5635 xdate.hour(date.mdy(11,10,2038) + time.hms(22,30,4)) => 22.00
5636
5637 xdate.hour(date.mdy(7,18,2094) + time.hms(1,56,51)) => 1.00
5638
5639 xdate.hour(-1) => -1.00
5640
5641 xdate.hour(1) => 0.00
5642
5643 xdate.hour($sysmis) => sysmis
5644
5645 evaluate.sps:26.17-26.30: error: DEBUG EVALUATE: Type mismatch invoking XDATE.
5646 HOUR(number) as xdate.hour(string).
5647    26 | DEBUG EVALUATE /xdate.hour('').
5648       |                 ^~~~~~~~~~~~~~
5649
5650 evaluate.sps:26.28-26.29: note: DEBUG EVALUATE: This argument has type 'string'
5651 but 'number' is required.
5652    26 | DEBUG EVALUATE /xdate.hour('').
5653       |                            ^~
5654
5655 xdate.hour('') => error
5656 ])
5657 done
5658 AT_CLEANUP
5659
5660 AT_SETUP([expressions - XDATE.JDAY])
5661 AT_KEYWORDS([expression expressions evaluate])
5662 AT_DATA([evaluate-base.sps], [dnl
5663 SET EPOCH 1940.
5664 DEBUG EVALUATE SET opt.
5665 DEBUG EVALUATE /xdate.jday(date.mdy(6,10,1648) + time.hms(0,0,0)).
5666 DEBUG EVALUATE /xdate.jday(date.mdy(6,30,1680) + time.hms(4,50,38)).
5667 DEBUG EVALUATE /xdate.jday(date.mdy(7,24,1716) + time.hms(12,31,35)).
5668 DEBUG EVALUATE /xdate.jday(date.mdy(6,19,1768) + time.hms(12,47,53)).
5669 DEBUG EVALUATE /xdate.jday(date.mdy(8,2,1819) + time.hms(1,26,0)).
5670 DEBUG EVALUATE /xdate.jday(date.mdy(3,27,1839) + time.hms(20,58,11)).
5671 DEBUG EVALUATE /xdate.jday(date.mdy(4,19,1903) + time.hms(7,36,5)).
5672 DEBUG EVALUATE /xdate.jday(date.mdy(8,25,1929) + time.hms(15,43,49)).
5673 DEBUG EVALUATE /xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9)).
5674 DEBUG EVALUATE /xdate.jday(date.mdy(4,19,1943) + time.hms(6,49,27)).
5675 DEBUG EVALUATE /xdate.jday(date.mdy(10,7,1943) + time.hms(2,57,52)).
5676 DEBUG EVALUATE /xdate.jday(date.mdy(3,17,1992) + time.hms(16,45,44)).
5677 DEBUG EVALUATE /xdate.jday(date.mdy(2,25,1996) + time.hms(21,30,57)).
5678 DEBUG EVALUATE /xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9)).
5679 DEBUG EVALUATE /xdate.jday(date.mdy(4,19,43) + time.hms(6,49,27)).
5680 DEBUG EVALUATE /xdate.jday(date.mdy(10,7,43) + time.hms(2,57,52)).
5681 DEBUG EVALUATE /xdate.jday(date.mdy(3,17,92) + time.hms(16,45,44)).
5682 DEBUG EVALUATE /xdate.jday(date.mdy(2,25,96) + time.hms(21,30,57)).
5683 DEBUG EVALUATE /xdate.jday(date.mdy(11,10,2038) + time.hms(22,30,4)).
5684 DEBUG EVALUATE /xdate.jday(date.mdy(7,18,2094) + time.hms(1,56,51)).
5685 DEBUG EVALUATE /xdate.jday(0).
5686 DEBUG EVALUATE /xdate.jday(1).
5687 DEBUG EVALUATE /xdate.jday(86400).
5688 ])
5689
5690 for opt in OPT NOOPT; do
5691     AS_BOX([$opt])
5692     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5693     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
5694 xdate.jday(date.mdy(6,10,1648) + time.hms(0,0,0)) => 162.00
5695
5696 xdate.jday(date.mdy(6,30,1680) + time.hms(4,50,38)) => 182.00
5697
5698 xdate.jday(date.mdy(7,24,1716) + time.hms(12,31,35)) => 206.00
5699
5700 xdate.jday(date.mdy(6,19,1768) + time.hms(12,47,53)) => 171.00
5701
5702 xdate.jday(date.mdy(8,2,1819) + time.hms(1,26,0)) => 214.00
5703
5704 xdate.jday(date.mdy(3,27,1839) + time.hms(20,58,11)) => 86.00
5705
5706 xdate.jday(date.mdy(4,19,1903) + time.hms(7,36,5)) => 109.00
5707
5708 xdate.jday(date.mdy(8,25,1929) + time.hms(15,43,49)) => 237.00
5709
5710 xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9)) => 272.00
5711
5712 xdate.jday(date.mdy(4,19,1943) + time.hms(6,49,27)) => 109.00
5713
5714 xdate.jday(date.mdy(10,7,1943) + time.hms(2,57,52)) => 280.00
5715
5716 xdate.jday(date.mdy(3,17,1992) + time.hms(16,45,44)) => 77.00
5717
5718 xdate.jday(date.mdy(2,25,1996) + time.hms(21,30,57)) => 56.00
5719
5720 xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9)) => 272.00
5721
5722 xdate.jday(date.mdy(4,19,43) + time.hms(6,49,27)) => 109.00
5723
5724 xdate.jday(date.mdy(10,7,43) + time.hms(2,57,52)) => 280.00
5725
5726 xdate.jday(date.mdy(3,17,92) + time.hms(16,45,44)) => 77.00
5727
5728 xdate.jday(date.mdy(2,25,96) + time.hms(21,30,57)) => 56.00
5729
5730 xdate.jday(date.mdy(11,10,2038) + time.hms(22,30,4)) => 314.00
5731
5732 xdate.jday(date.mdy(7,18,2094) + time.hms(1,56,51)) => 199.00
5733
5734 xdate.jday(0) => sysmis
5735
5736 xdate.jday(1) => sysmis
5737
5738 xdate.jday(86400) => 288.00
5739 ])
5740 done
5741 AT_CLEANUP
5742
5743 AT_SETUP([expressions - XDATE.MDAY])
5744 AT_KEYWORDS([expression expressions evaluate])
5745 AT_DATA([evaluate-base.sps], [dnl
5746 SET EPOCH 1940.
5747 DEBUG EVALUATE SET opt.
5748 DEBUG EVALUATE /xdate.mday(date.mdy(6,10,1648) + time.hms(0,0,0)).
5749 DEBUG EVALUATE /xdate.mday(date.mdy(6,30,1680) + time.hms(4,50,38)).
5750 DEBUG EVALUATE /xdate.mday(date.mdy(7,24,1716) + time.hms(12,31,35)).
5751 DEBUG EVALUATE /xdate.mday(date.mdy(6,19,1768) + time.hms(12,47,53)).
5752 DEBUG EVALUATE /xdate.mday(date.mdy(8,2,1819) + time.hms(1,26,0)).
5753 DEBUG EVALUATE /xdate.mday(date.mdy(3,27,1839) + time.hms(20,58,11)).
5754 DEBUG EVALUATE /xdate.mday(date.mdy(4,19,1903) + time.hms(7,36,5)).
5755 DEBUG EVALUATE /xdate.mday(date.mdy(8,25,1929) + time.hms(15,43,49)).
5756 DEBUG EVALUATE /xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9)).
5757 DEBUG EVALUATE /xdate.mday(date.mdy(4,19,1943) + time.hms(6,49,27)).
5758 DEBUG EVALUATE /xdate.mday(date.mdy(10,7,1943) + time.hms(2,57,52)).
5759 DEBUG EVALUATE /xdate.mday(date.mdy(3,17,1992) + time.hms(16,45,44)).
5760 DEBUG EVALUATE /xdate.mday(date.mdy(2,25,1996) + time.hms(21,30,57)).
5761 DEBUG EVALUATE /xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9)).
5762 DEBUG EVALUATE /xdate.mday(date.mdy(4,19,43) + time.hms(6,49,27)).
5763 DEBUG EVALUATE /xdate.mday(date.mdy(10,7,43) + time.hms(2,57,52)).
5764 DEBUG EVALUATE /xdate.mday(date.mdy(3,17,92) + time.hms(16,45,44)).
5765 DEBUG EVALUATE /xdate.mday(date.mdy(2,25,96) + time.hms(21,30,57)).
5766 DEBUG EVALUATE /xdate.mday(date.mdy(11,10,2038) + time.hms(22,30,4)).
5767 DEBUG EVALUATE /xdate.mday(date.mdy(7,18,2094) + time.hms(1,56,51)).
5768 ])
5769
5770 for opt in OPT NOOPT; do
5771     AS_BOX([$opt])
5772     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5773     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
5774 xdate.mday(date.mdy(6,10,1648) + time.hms(0,0,0)) => 10.00
5775
5776 xdate.mday(date.mdy(6,30,1680) + time.hms(4,50,38)) => 30.00
5777
5778 xdate.mday(date.mdy(7,24,1716) + time.hms(12,31,35)) => 24.00
5779
5780 xdate.mday(date.mdy(6,19,1768) + time.hms(12,47,53)) => 19.00
5781
5782 xdate.mday(date.mdy(8,2,1819) + time.hms(1,26,0)) => 2.00
5783
5784 xdate.mday(date.mdy(3,27,1839) + time.hms(20,58,11)) => 27.00
5785
5786 xdate.mday(date.mdy(4,19,1903) + time.hms(7,36,5)) => 19.00
5787
5788 xdate.mday(date.mdy(8,25,1929) + time.hms(15,43,49)) => 25.00
5789
5790 xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9)) => 29.00
5791
5792 xdate.mday(date.mdy(4,19,1943) + time.hms(6,49,27)) => 19.00
5793
5794 xdate.mday(date.mdy(10,7,1943) + time.hms(2,57,52)) => 7.00
5795
5796 xdate.mday(date.mdy(3,17,1992) + time.hms(16,45,44)) => 17.00
5797
5798 xdate.mday(date.mdy(2,25,1996) + time.hms(21,30,57)) => 25.00
5799
5800 xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9)) => 29.00
5801
5802 xdate.mday(date.mdy(4,19,43) + time.hms(6,49,27)) => 19.00
5803
5804 xdate.mday(date.mdy(10,7,43) + time.hms(2,57,52)) => 7.00
5805
5806 xdate.mday(date.mdy(3,17,92) + time.hms(16,45,44)) => 17.00
5807
5808 xdate.mday(date.mdy(2,25,96) + time.hms(21,30,57)) => 25.00
5809
5810 xdate.mday(date.mdy(11,10,2038) + time.hms(22,30,4)) => 10.00
5811
5812 xdate.mday(date.mdy(7,18,2094) + time.hms(1,56,51)) => 18.00
5813 ])
5814 done
5815 AT_CLEANUP
5816
5817 AT_SETUP([expressions - XDATE.MINUTE])
5818 AT_KEYWORDS([expression expressions evaluate])
5819 AT_DATA([evaluate-base.sps], [dnl
5820 SET EPOCH 1940.
5821 DEBUG EVALUATE SET opt.
5822 DEBUG EVALUATE /xdate.minute(date.mdy(6,10,1648) + time.hms(0,0,0)).
5823 DEBUG EVALUATE /xdate.minute(date.mdy(6,30,1680) + time.hms(4,50,38)).
5824 DEBUG EVALUATE /xdate.minute(date.mdy(7,24,1716) + time.hms(12,31,35)).
5825 DEBUG EVALUATE /xdate.minute(date.mdy(6,19,1768) + time.hms(12,47,53)).
5826 DEBUG EVALUATE /xdate.minute(date.mdy(8,2,1819) + time.hms(1,26,0)).
5827 DEBUG EVALUATE /xdate.minute(date.mdy(3,27,1839) + time.hms(20,58,11)).
5828 DEBUG EVALUATE /xdate.minute(date.mdy(4,19,1903) + time.hms(7,36,5)).
5829 DEBUG EVALUATE /xdate.minute(date.mdy(8,25,1929) + time.hms(15,43,49)).
5830 DEBUG EVALUATE /xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9)).
5831 DEBUG EVALUATE /xdate.minute(date.mdy(4,19,1943) + time.hms(6,49,27)).
5832 DEBUG EVALUATE /xdate.minute(date.mdy(10,7,1943) + time.hms(2,57,52)).
5833 DEBUG EVALUATE /xdate.minute(date.mdy(3,17,1992) + time.hms(16,45,44)).
5834 DEBUG EVALUATE /xdate.minute(date.mdy(2,25,1996) + time.hms(21,30,57)).
5835 DEBUG EVALUATE /xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9)).
5836 DEBUG EVALUATE /xdate.minute(date.mdy(4,19,43) + time.hms(6,49,27)).
5837 DEBUG EVALUATE /xdate.minute(date.mdy(10,7,43) + time.hms(2,57,52)).
5838 DEBUG EVALUATE /xdate.minute(date.mdy(3,17,92) + time.hms(16,45,44)).
5839 DEBUG EVALUATE /xdate.minute(date.mdy(2,25,96) + time.hms(21,30,57)).
5840 DEBUG EVALUATE /xdate.minute(date.mdy(11,10,2038) + time.hms(22,30,4)).
5841 DEBUG EVALUATE /xdate.minute(date.mdy(7,18,2094) + time.hms(1,56,51)).
5842 ])
5843
5844 for opt in OPT NOOPT; do
5845     AS_BOX([$opt])
5846     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5847     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
5848 xdate.minute(date.mdy(6,10,1648) + time.hms(0,0,0)) => 0.00
5849
5850 xdate.minute(date.mdy(6,30,1680) + time.hms(4,50,38)) => 50.00
5851
5852 xdate.minute(date.mdy(7,24,1716) + time.hms(12,31,35)) => 31.00
5853
5854 xdate.minute(date.mdy(6,19,1768) + time.hms(12,47,53)) => 47.00
5855
5856 xdate.minute(date.mdy(8,2,1819) + time.hms(1,26,0)) => 26.00
5857
5858 xdate.minute(date.mdy(3,27,1839) + time.hms(20,58,11)) => 58.00
5859
5860 xdate.minute(date.mdy(4,19,1903) + time.hms(7,36,5)) => 36.00
5861
5862 xdate.minute(date.mdy(8,25,1929) + time.hms(15,43,49)) => 43.00
5863
5864 xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9)) => 25.00
5865
5866 xdate.minute(date.mdy(4,19,1943) + time.hms(6,49,27)) => 49.00
5867
5868 xdate.minute(date.mdy(10,7,1943) + time.hms(2,57,52)) => 57.00
5869
5870 xdate.minute(date.mdy(3,17,1992) + time.hms(16,45,44)) => 45.00
5871
5872 xdate.minute(date.mdy(2,25,1996) + time.hms(21,30,57)) => 30.00
5873
5874 xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9)) => 25.00
5875
5876 xdate.minute(date.mdy(4,19,43) + time.hms(6,49,27)) => 49.00
5877
5878 xdate.minute(date.mdy(10,7,43) + time.hms(2,57,52)) => 57.00
5879
5880 xdate.minute(date.mdy(3,17,92) + time.hms(16,45,44)) => 45.00
5881
5882 xdate.minute(date.mdy(2,25,96) + time.hms(21,30,57)) => 30.00
5883
5884 xdate.minute(date.mdy(11,10,2038) + time.hms(22,30,4)) => 30.00
5885
5886 xdate.minute(date.mdy(7,18,2094) + time.hms(1,56,51)) => 56.00
5887 ])
5888 done
5889 AT_CLEANUP
5890
5891 AT_SETUP([expressions - XDATE.MONTH])
5892 AT_KEYWORDS([expression expressions evaluate])
5893 AT_DATA([evaluate-base.sps], [dnl
5894 SET EPOCH 1940.
5895 DEBUG EVALUATE SET opt.
5896 DEBUG EVALUATE /xdate.month(date.mdy(6,10,1648) + time.hms(0,0,0)).
5897 DEBUG EVALUATE /xdate.month(date.mdy(6,30,1680) + time.hms(4,50,38)).
5898 DEBUG EVALUATE /xdate.month(date.mdy(7,24,1716) + time.hms(12,31,35)).
5899 DEBUG EVALUATE /xdate.month(date.mdy(6,19,1768) + time.hms(12,47,53)).
5900 DEBUG EVALUATE /xdate.month(date.mdy(8,2,1819) + time.hms(1,26,0)).
5901 DEBUG EVALUATE /xdate.month(date.mdy(3,27,1839) + time.hms(20,58,11)).
5902 DEBUG EVALUATE /xdate.month(date.mdy(4,19,1903) + time.hms(7,36,5)).
5903 DEBUG EVALUATE /xdate.month(date.mdy(8,25,1929) + time.hms(15,43,49)).
5904 DEBUG EVALUATE /xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9)).
5905 DEBUG EVALUATE /xdate.month(date.mdy(4,19,1943) + time.hms(6,49,27)).
5906 DEBUG EVALUATE /xdate.month(date.mdy(10,7,1943) + time.hms(2,57,52)).
5907 DEBUG EVALUATE /xdate.month(date.mdy(3,17,1992) + time.hms(16,45,44)).
5908 DEBUG EVALUATE /xdate.month(date.mdy(2,25,1996) + time.hms(21,30,57)).
5909 DEBUG EVALUATE /xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9)).
5910 DEBUG EVALUATE /xdate.month(date.mdy(4,19,43) + time.hms(6,49,27)).
5911 DEBUG EVALUATE /xdate.month(date.mdy(10,7,43) + time.hms(2,57,52)).
5912 DEBUG EVALUATE /xdate.month(date.mdy(3,17,92) + time.hms(16,45,44)).
5913 DEBUG EVALUATE /xdate.month(date.mdy(2,25,96) + time.hms(21,30,57)).
5914 DEBUG EVALUATE /xdate.month(date.mdy(11,10,2038) + time.hms(22,30,4)).
5915 DEBUG EVALUATE /xdate.month(date.mdy(7,18,2094) + time.hms(1,56,51)).
5916 ])
5917
5918 for opt in OPT NOOPT; do
5919     AS_BOX([$opt])
5920     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5921     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
5922 xdate.month(date.mdy(6,10,1648) + time.hms(0,0,0)) => 6.00
5923
5924 xdate.month(date.mdy(6,30,1680) + time.hms(4,50,38)) => 6.00
5925
5926 xdate.month(date.mdy(7,24,1716) + time.hms(12,31,35)) => 7.00
5927
5928 xdate.month(date.mdy(6,19,1768) + time.hms(12,47,53)) => 6.00
5929
5930 xdate.month(date.mdy(8,2,1819) + time.hms(1,26,0)) => 8.00
5931
5932 xdate.month(date.mdy(3,27,1839) + time.hms(20,58,11)) => 3.00
5933
5934 xdate.month(date.mdy(4,19,1903) + time.hms(7,36,5)) => 4.00
5935
5936 xdate.month(date.mdy(8,25,1929) + time.hms(15,43,49)) => 8.00
5937
5938 xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9)) => 9.00
5939
5940 xdate.month(date.mdy(4,19,1943) + time.hms(6,49,27)) => 4.00
5941
5942 xdate.month(date.mdy(10,7,1943) + time.hms(2,57,52)) => 10.00
5943
5944 xdate.month(date.mdy(3,17,1992) + time.hms(16,45,44)) => 3.00
5945
5946 xdate.month(date.mdy(2,25,1996) + time.hms(21,30,57)) => 2.00
5947
5948 xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9)) => 9.00
5949
5950 xdate.month(date.mdy(4,19,43) + time.hms(6,49,27)) => 4.00
5951
5952 xdate.month(date.mdy(10,7,43) + time.hms(2,57,52)) => 10.00
5953
5954 xdate.month(date.mdy(3,17,92) + time.hms(16,45,44)) => 3.00
5955
5956 xdate.month(date.mdy(2,25,96) + time.hms(21,30,57)) => 2.00
5957
5958 xdate.month(date.mdy(11,10,2038) + time.hms(22,30,4)) => 11.00
5959
5960 xdate.month(date.mdy(7,18,2094) + time.hms(1,56,51)) => 7.00
5961 ])
5962 done
5963 AT_CLEANUP
5964
5965 AT_SETUP([expressions - XDATE.QUARTER])
5966 AT_KEYWORDS([expression expressions evaluate])
5967 AT_DATA([evaluate-base.sps], [dnl
5968 SET EPOCH 1940.
5969 DEBUG EVALUATE SET opt.
5970 DEBUG EVALUATE /xdate.quarter(date.mdy(6,10,1648) + time.hms(0,0,0)).
5971 DEBUG EVALUATE /xdate.quarter(date.mdy(6,30,1680) + time.hms(4,50,38)).
5972 DEBUG EVALUATE /xdate.quarter(date.mdy(7,24,1716) + time.hms(12,31,35)).
5973 DEBUG EVALUATE /xdate.quarter(date.mdy(6,19,1768) + time.hms(12,47,53)).
5974 DEBUG EVALUATE /xdate.quarter(date.mdy(8,2,1819) + time.hms(1,26,0)).
5975 DEBUG EVALUATE /xdate.quarter(date.mdy(3,27,1839) + time.hms(20,58,11)).
5976 DEBUG EVALUATE /xdate.quarter(date.mdy(4,19,1903) + time.hms(7,36,5)).
5977 DEBUG EVALUATE /xdate.quarter(date.mdy(8,25,1929) + time.hms(15,43,49)).
5978 DEBUG EVALUATE /xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9)).
5979 DEBUG EVALUATE /xdate.quarter(date.mdy(4,19,1943) + time.hms(6,49,27)).
5980 DEBUG EVALUATE /xdate.quarter(date.mdy(10,7,1943) + time.hms(2,57,52)).
5981 DEBUG EVALUATE /xdate.quarter(date.mdy(3,17,1992) + time.hms(16,45,44)).
5982 DEBUG EVALUATE /xdate.quarter(date.mdy(2,25,1996) + time.hms(21,30,57)).
5983 DEBUG EVALUATE /xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9)).
5984 DEBUG EVALUATE /xdate.quarter(date.mdy(4,19,43) + time.hms(6,49,27)).
5985 DEBUG EVALUATE /xdate.quarter(date.mdy(10,7,43) + time.hms(2,57,52)).
5986 DEBUG EVALUATE /xdate.quarter(date.mdy(3,17,92) + time.hms(16,45,44)).
5987 DEBUG EVALUATE /xdate.quarter(date.mdy(2,25,96) + time.hms(21,30,57)).
5988 DEBUG EVALUATE /xdate.quarter(date.mdy(11,10,2038) + time.hms(22,30,4)).
5989 DEBUG EVALUATE /xdate.quarter(date.mdy(7,18,2094) + time.hms(1,56,51)).
5990 ])
5991
5992 for opt in OPT NOOPT; do
5993     AS_BOX([$opt])
5994     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5995     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
5996 xdate.quarter(date.mdy(6,10,1648) + time.hms(0,0,0)) => 2.00
5997
5998 xdate.quarter(date.mdy(6,30,1680) + time.hms(4,50,38)) => 2.00
5999
6000 xdate.quarter(date.mdy(7,24,1716) + time.hms(12,31,35)) => 3.00
6001
6002 xdate.quarter(date.mdy(6,19,1768) + time.hms(12,47,53)) => 2.00
6003
6004 xdate.quarter(date.mdy(8,2,1819) + time.hms(1,26,0)) => 3.00
6005
6006 xdate.quarter(date.mdy(3,27,1839) + time.hms(20,58,11)) => 1.00
6007
6008 xdate.quarter(date.mdy(4,19,1903) + time.hms(7,36,5)) => 2.00
6009
6010 xdate.quarter(date.mdy(8,25,1929) + time.hms(15,43,49)) => 3.00
6011
6012 xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9)) => 3.00
6013
6014 xdate.quarter(date.mdy(4,19,1943) + time.hms(6,49,27)) => 2.00
6015
6016 xdate.quarter(date.mdy(10,7,1943) + time.hms(2,57,52)) => 4.00
6017
6018 xdate.quarter(date.mdy(3,17,1992) + time.hms(16,45,44)) => 1.00
6019
6020 xdate.quarter(date.mdy(2,25,1996) + time.hms(21,30,57)) => 1.00
6021
6022 xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9)) => 3.00
6023
6024 xdate.quarter(date.mdy(4,19,43) + time.hms(6,49,27)) => 2.00
6025
6026 xdate.quarter(date.mdy(10,7,43) + time.hms(2,57,52)) => 4.00
6027
6028 xdate.quarter(date.mdy(3,17,92) + time.hms(16,45,44)) => 1.00
6029
6030 xdate.quarter(date.mdy(2,25,96) + time.hms(21,30,57)) => 1.00
6031
6032 xdate.quarter(date.mdy(11,10,2038) + time.hms(22,30,4)) => 4.00
6033
6034 xdate.quarter(date.mdy(7,18,2094) + time.hms(1,56,51)) => 3.00
6035 ])
6036 done
6037 AT_CLEANUP
6038
6039 AT_SETUP([expressions - XDATE.SECOND])
6040 AT_KEYWORDS([expression expressions evaluate])
6041 AT_DATA([evaluate-base.sps], [dnl
6042 SET EPOCH 1940.
6043 DEBUG EVALUATE SET opt.
6044 DEBUG EVALUATE /xdate.second(date.mdy(6,10,1648) + time.hms(0,0,0)).
6045 DEBUG EVALUATE /xdate.second(date.mdy(6,30,1680) + time.hms(4,50,38)).
6046 DEBUG EVALUATE /xdate.second(date.mdy(7,24,1716) + time.hms(12,31,35)).
6047 DEBUG EVALUATE /xdate.second(date.mdy(6,19,1768) + time.hms(12,47,53)).
6048 DEBUG EVALUATE /xdate.second(date.mdy(8,2,1819) + time.hms(1,26,0)).
6049 DEBUG EVALUATE /xdate.second(date.mdy(3,27,1839) + time.hms(20,58,11)).
6050 DEBUG EVALUATE /xdate.second(date.mdy(4,19,1903) + time.hms(7,36,5)).
6051 DEBUG EVALUATE /xdate.second(date.mdy(8,25,1929) + time.hms(15,43,49)).
6052 DEBUG EVALUATE /xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9)).
6053 DEBUG EVALUATE /xdate.second(date.mdy(4,19,1943) + time.hms(6,49,27)).
6054 DEBUG EVALUATE /xdate.second(date.mdy(10,7,1943) + time.hms(2,57,52)).
6055 DEBUG EVALUATE /xdate.second(date.mdy(3,17,1992) + time.hms(16,45,44)).
6056 DEBUG EVALUATE /xdate.second(date.mdy(2,25,1996) + time.hms(21,30,57)).
6057 DEBUG EVALUATE /xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9)).
6058 DEBUG EVALUATE /xdate.second(date.mdy(4,19,43) + time.hms(6,49,27)).
6059 DEBUG EVALUATE /xdate.second(date.mdy(10,7,43) + time.hms(2,57,52)).
6060 DEBUG EVALUATE /xdate.second(date.mdy(3,17,92) + time.hms(16,45,44)).
6061 DEBUG EVALUATE /xdate.second(date.mdy(2,25,96) + time.hms(21,30,57)).
6062 DEBUG EVALUATE /xdate.second(date.mdy(11,10,2038) + time.hms(22,30,4)).
6063 DEBUG EVALUATE /xdate.second(date.mdy(7,18,2094) + time.hms(1,56,51)).
6064 ])
6065
6066 for opt in OPT NOOPT; do
6067     AS_BOX([$opt])
6068     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
6069     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
6070 xdate.second(date.mdy(6,10,1648) + time.hms(0,0,0)) => 0.00
6071
6072 xdate.second(date.mdy(6,30,1680) + time.hms(4,50,38)) => 38.00
6073
6074 xdate.second(date.mdy(7,24,1716) + time.hms(12,31,35)) => 35.00
6075
6076 xdate.second(date.mdy(6,19,1768) + time.hms(12,47,53)) => 53.00
6077
6078 xdate.second(date.mdy(8,2,1819) + time.hms(1,26,0)) => 0.00
6079
6080 xdate.second(date.mdy(3,27,1839) + time.hms(20,58,11)) => 11.00
6081
6082 xdate.second(date.mdy(4,19,1903) + time.hms(7,36,5)) => 5.00
6083
6084 xdate.second(date.mdy(8,25,1929) + time.hms(15,43,49)) => 49.00
6085
6086 xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9)) => 9.00
6087
6088 xdate.second(date.mdy(4,19,1943) + time.hms(6,49,27)) => 27.00
6089
6090 xdate.second(date.mdy(10,7,1943) + time.hms(2,57,52)) => 52.00
6091
6092 xdate.second(date.mdy(3,17,1992) + time.hms(16,45,44)) => 44.00
6093
6094 xdate.second(date.mdy(2,25,1996) + time.hms(21,30,57)) => 57.00
6095
6096 xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9)) => 9.00
6097
6098 xdate.second(date.mdy(4,19,43) + time.hms(6,49,27)) => 27.00
6099
6100 xdate.second(date.mdy(10,7,43) + time.hms(2,57,52)) => 52.00
6101
6102 xdate.second(date.mdy(3,17,92) + time.hms(16,45,44)) => 44.00
6103
6104 xdate.second(date.mdy(2,25,96) + time.hms(21,30,57)) => 57.00
6105
6106 xdate.second(date.mdy(11,10,2038) + time.hms(22,30,4)) => 4.00
6107
6108 xdate.second(date.mdy(7,18,2094) + time.hms(1,56,51)) => 51.00
6109 ])
6110 done
6111 AT_CLEANUP
6112
6113 AT_SETUP([expressions - XDATE.TDAY])
6114 AT_KEYWORDS([expression expressions evaluate])
6115 AT_DATA([evaluate-base.sps], [dnl
6116 SET EPOCH 1940.
6117 DEBUG EVALUATE SET opt.
6118 DEBUG EVALUATE /xdate.tday(date.mdy(6,10,1648) + time.hms(0,0,0)).
6119 DEBUG EVALUATE /xdate.tday(date.mdy(6,30,1680) + time.hms(4,50,38)).
6120 DEBUG EVALUATE /xdate.tday(date.mdy(7,24,1716) + time.hms(12,31,35)).
6121 DEBUG EVALUATE /xdate.tday(date.mdy(6,19,1768) + time.hms(12,47,53)).
6122 DEBUG EVALUATE /xdate.tday(date.mdy(8,2,1819) + time.hms(1,26,0)).
6123 DEBUG EVALUATE /xdate.tday(date.mdy(3,27,1839) + time.hms(20,58,11)).
6124 DEBUG EVALUATE /xdate.tday(date.mdy(4,19,1903) + time.hms(7,36,5)).
6125 DEBUG EVALUATE /xdate.tday(date.mdy(8,25,1929) + time.hms(15,43,49)).
6126 DEBUG EVALUATE /xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9)).
6127 DEBUG EVALUATE /xdate.tday(date.mdy(4,19,1943) + time.hms(6,49,27)).
6128 DEBUG EVALUATE /xdate.tday(date.mdy(10,7,1943) + time.hms(2,57,52)).
6129 DEBUG EVALUATE /xdate.tday(date.mdy(3,17,1992) + time.hms(16,45,44)).
6130 DEBUG EVALUATE /xdate.tday(date.mdy(2,25,1996) + time.hms(21,30,57)).
6131 DEBUG EVALUATE /xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9)).
6132 DEBUG EVALUATE /xdate.tday(date.mdy(4,19,43) + time.hms(6,49,27)).
6133 DEBUG EVALUATE /xdate.tday(date.mdy(10,7,43) + time.hms(2,57,52)).
6134 DEBUG EVALUATE /xdate.tday(date.mdy(3,17,92) + time.hms(16,45,44)).
6135 DEBUG EVALUATE /xdate.tday(date.mdy(2,25,96) + time.hms(21,30,57)).
6136 DEBUG EVALUATE /xdate.tday(date.mdy(11,10,2038) + time.hms(22,30,4)).
6137 DEBUG EVALUATE /xdate.tday(date.mdy(7,18,2094) + time.hms(1,56,51)).
6138 ])
6139
6140 for opt in OPT NOOPT; do
6141     AS_BOX([$opt])
6142     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
6143     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
6144 xdate.tday(date.mdy(6,10,1648) + time.hms(0,0,0)) => 23981.00
6145
6146 xdate.tday(date.mdy(6,30,1680) + time.hms(4,50,38)) => 35689.00
6147
6148 xdate.tday(date.mdy(7,24,1716) + time.hms(12,31,35)) => 48861.00
6149
6150 xdate.tday(date.mdy(6,19,1768) + time.hms(12,47,53)) => 67819.00
6151
6152 xdate.tday(date.mdy(8,2,1819) + time.hms(1,26,0)) => 86489.00
6153
6154 xdate.tday(date.mdy(3,27,1839) + time.hms(20,58,11)) => 93666.00
6155
6156 xdate.tday(date.mdy(4,19,1903) + time.hms(7,36,5)) => 117064.00
6157
6158 xdate.tday(date.mdy(8,25,1929) + time.hms(15,43,49)) => 126689.00
6159
6160 xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9)) => 131107.00
6161
6162 xdate.tday(date.mdy(4,19,1943) + time.hms(6,49,27)) => 131674.00
6163
6164 xdate.tday(date.mdy(10,7,1943) + time.hms(2,57,52)) => 131845.00
6165
6166 xdate.tday(date.mdy(3,17,1992) + time.hms(16,45,44)) => 149539.00
6167
6168 xdate.tday(date.mdy(2,25,1996) + time.hms(21,30,57)) => 150979.00
6169
6170 xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9)) => 131107.00
6171
6172 xdate.tday(date.mdy(4,19,43) + time.hms(6,49,27)) => 131674.00
6173
6174 xdate.tday(date.mdy(10,7,43) + time.hms(2,57,52)) => 131845.00
6175
6176 xdate.tday(date.mdy(3,17,92) + time.hms(16,45,44)) => 149539.00
6177
6178 xdate.tday(date.mdy(2,25,96) + time.hms(21,30,57)) => 150979.00
6179
6180 xdate.tday(date.mdy(11,10,2038) + time.hms(22,30,4)) => 166578.00
6181
6182 xdate.tday(date.mdy(7,18,2094) + time.hms(1,56,51)) => 186917.00
6183 ])
6184 done
6185 AT_CLEANUP
6186
6187 AT_SETUP([expressions - XDATE.TIME])
6188 AT_KEYWORDS([expression expressions evaluate])
6189 AT_DATA([evaluate-base.sps], [dnl
6190 SET EPOCH 1940.
6191 DEBUG EVALUATE SET opt.
6192 DEBUG EVALUATE /xdate.time(date.mdy(6,10,1648) + time.hms(0,0,0)).
6193 DEBUG EVALUATE /xdate.time(date.mdy(6,30,1680) + time.hms(4,50,38)).
6194 DEBUG EVALUATE /xdate.time(date.mdy(7,24,1716) + time.hms(12,31,35)).
6195 DEBUG EVALUATE /xdate.time(date.mdy(6,19,1768) + time.hms(12,47,53)).
6196 DEBUG EVALUATE /xdate.time(date.mdy(8,2,1819) + time.hms(1,26,0)).
6197 DEBUG EVALUATE /xdate.time(date.mdy(3,27,1839) + time.hms(20,58,11)).
6198 DEBUG EVALUATE /xdate.time(date.mdy(4,19,1903) + time.hms(7,36,5)).
6199 DEBUG EVALUATE /xdate.time(date.mdy(8,25,1929) + time.hms(15,43,49)).
6200 DEBUG EVALUATE /xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9)).
6201 DEBUG EVALUATE /xdate.time(date.mdy(4,19,1943) + time.hms(6,49,27)).
6202 DEBUG EVALUATE /xdate.time(date.mdy(10,7,1943) + time.hms(2,57,52)).
6203 DEBUG EVALUATE /xdate.time(date.mdy(3,17,1992) + time.hms(16,45,44)).
6204 DEBUG EVALUATE /xdate.time(date.mdy(2,25,1996) + time.hms(21,30,57)).
6205 DEBUG EVALUATE /xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9)).
6206 DEBUG EVALUATE /xdate.time(date.mdy(4,19,43) + time.hms(6,49,27)).
6207 DEBUG EVALUATE /xdate.time(date.mdy(10,7,43) + time.hms(2,57,52)).
6208 DEBUG EVALUATE /xdate.time(date.mdy(3,17,92) + time.hms(16,45,44)).
6209 DEBUG EVALUATE /xdate.time(date.mdy(2,25,96) + time.hms(21,30,57)).
6210 DEBUG EVALUATE /xdate.time(date.mdy(11,10,2038) + time.hms(22,30,4)).
6211 DEBUG EVALUATE /xdate.time(date.mdy(7,18,2094) + time.hms(1,56,51)).
6212 ])
6213
6214 for opt in OPT NOOPT; do
6215     AS_BOX([$opt])
6216     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
6217     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
6218 xdate.time(date.mdy(6,10,1648) + time.hms(0,0,0)) => 0.00
6219
6220 xdate.time(date.mdy(6,30,1680) + time.hms(4,50,38)) => 17438.00
6221
6222 xdate.time(date.mdy(7,24,1716) + time.hms(12,31,35)) => 45095.00
6223
6224 xdate.time(date.mdy(6,19,1768) + time.hms(12,47,53)) => 46073.00
6225
6226 xdate.time(date.mdy(8,2,1819) + time.hms(1,26,0)) => 5160.00
6227
6228 xdate.time(date.mdy(3,27,1839) + time.hms(20,58,11)) => 75491.00
6229
6230 xdate.time(date.mdy(4,19,1903) + time.hms(7,36,5)) => 27365.00
6231
6232 xdate.time(date.mdy(8,25,1929) + time.hms(15,43,49)) => 56629.00
6233
6234 xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9)) => 15909.00
6235
6236 xdate.time(date.mdy(4,19,1943) + time.hms(6,49,27)) => 24567.00
6237
6238 xdate.time(date.mdy(10,7,1943) + time.hms(2,57,52)) => 10672.00
6239
6240 xdate.time(date.mdy(3,17,1992) + time.hms(16,45,44)) => 60344.00
6241
6242 xdate.time(date.mdy(2,25,1996) + time.hms(21,30,57)) => 77457.00
6243
6244 xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9)) => 15909.00
6245
6246 xdate.time(date.mdy(4,19,43) + time.hms(6,49,27)) => 24567.00
6247
6248 xdate.time(date.mdy(10,7,43) + time.hms(2,57,52)) => 10672.00
6249
6250 xdate.time(date.mdy(3,17,92) + time.hms(16,45,44)) => 60344.00
6251
6252 xdate.time(date.mdy(2,25,96) + time.hms(21,30,57)) => 77457.00
6253
6254 xdate.time(date.mdy(11,10,2038) + time.hms(22,30,4)) => 81004.00
6255
6256 xdate.time(date.mdy(7,18,2094) + time.hms(1,56,51)) => 7011.00
6257 ])
6258 done
6259 AT_CLEANUP
6260
6261 AT_SETUP([expressions - XDATE.WEEK])
6262 AT_KEYWORDS([expression expressions evaluate])
6263 AT_DATA([evaluate-base.sps], [dnl
6264 SET EPOCH 1940.
6265 DEBUG EVALUATE SET opt.
6266 DEBUG EVALUATE /xdate.week(date.mdy(6,10,1648) + time.hms(0,0,0)).
6267 DEBUG EVALUATE /xdate.week(date.mdy(6,30,1680) + time.hms(4,50,38)).
6268 DEBUG EVALUATE /xdate.week(date.mdy(7,24,1716) + time.hms(12,31,35)).
6269 DEBUG EVALUATE /xdate.week(date.mdy(6,19,1768) + time.hms(12,47,53)).
6270 DEBUG EVALUATE /xdate.week(date.mdy(8,2,1819) + time.hms(1,26,0)).
6271 DEBUG EVALUATE /xdate.week(date.mdy(3,27,1839) + time.hms(20,58,11)).
6272 DEBUG EVALUATE /xdate.week(date.mdy(4,19,1903) + time.hms(7,36,5)).
6273 DEBUG EVALUATE /xdate.week(date.mdy(8,25,1929) + time.hms(15,43,49)).
6274 DEBUG EVALUATE /xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9)).
6275 DEBUG EVALUATE /xdate.week(date.mdy(4,19,1943) + time.hms(6,49,27)).
6276 DEBUG EVALUATE /xdate.week(date.mdy(10,7,1943) + time.hms(2,57,52)).
6277 DEBUG EVALUATE /xdate.week(date.mdy(3,17,1992) + time.hms(16,45,44)).
6278 DEBUG EVALUATE /xdate.week(date.mdy(2,25,1996) + time.hms(21,30,57)).
6279 DEBUG EVALUATE /xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9)).
6280 DEBUG EVALUATE /xdate.week(date.mdy(4,19,43) + time.hms(6,49,27)).
6281 DEBUG EVALUATE /xdate.week(date.mdy(10,7,43) + time.hms(2,57,52)).
6282 DEBUG EVALUATE /xdate.week(date.mdy(3,17,92) + time.hms(16,45,44)).
6283 DEBUG EVALUATE /xdate.week(date.mdy(2,25,96) + time.hms(21,30,57)).
6284 DEBUG EVALUATE /xdate.week(date.mdy(11,10,2038) + time.hms(22,30,4)).
6285 DEBUG EVALUATE /xdate.week(date.mdy(7,18,2094) + time.hms(1,56,51)).
6286 ])
6287
6288 for opt in OPT NOOPT; do
6289     AS_BOX([$opt])
6290     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
6291     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
6292 xdate.week(date.mdy(6,10,1648) + time.hms(0,0,0)) => 24.00
6293
6294 xdate.week(date.mdy(6,30,1680) + time.hms(4,50,38)) => 26.00
6295
6296 xdate.week(date.mdy(7,24,1716) + time.hms(12,31,35)) => 30.00
6297
6298 xdate.week(date.mdy(6,19,1768) + time.hms(12,47,53)) => 25.00
6299
6300 xdate.week(date.mdy(8,2,1819) + time.hms(1,26,0)) => 31.00
6301
6302 xdate.week(date.mdy(3,27,1839) + time.hms(20,58,11)) => 13.00
6303
6304 xdate.week(date.mdy(4,19,1903) + time.hms(7,36,5)) => 16.00
6305
6306 xdate.week(date.mdy(8,25,1929) + time.hms(15,43,49)) => 34.00
6307
6308 xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9)) => 39.00
6309
6310 xdate.week(date.mdy(4,19,1943) + time.hms(6,49,27)) => 16.00
6311
6312 xdate.week(date.mdy(10,7,1943) + time.hms(2,57,52)) => 40.00
6313
6314 xdate.week(date.mdy(3,17,1992) + time.hms(16,45,44)) => 11.00
6315
6316 xdate.week(date.mdy(2,25,1996) + time.hms(21,30,57)) => 8.00
6317
6318 xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9)) => 39.00
6319
6320 xdate.week(date.mdy(4,19,43) + time.hms(6,49,27)) => 16.00
6321
6322 xdate.week(date.mdy(10,7,43) + time.hms(2,57,52)) => 40.00
6323
6324 xdate.week(date.mdy(3,17,92) + time.hms(16,45,44)) => 11.00
6325
6326 xdate.week(date.mdy(2,25,96) + time.hms(21,30,57)) => 8.00
6327
6328 xdate.week(date.mdy(11,10,2038) + time.hms(22,30,4)) => 45.00
6329
6330 xdate.week(date.mdy(7,18,2094) + time.hms(1,56,51)) => 29.00
6331 ])
6332 done
6333 AT_CLEANUP
6334
6335 AT_SETUP([expressions - XDATE.WKDAY])
6336 AT_KEYWORDS([expression expressions evaluate])
6337 AT_DATA([evaluate-base.sps], [dnl
6338 SET EPOCH 1940.
6339 DEBUG EVALUATE SET opt.
6340 DEBUG EVALUATE /xdate.wkday(date.mdy(6,10,1648)).
6341 DEBUG EVALUATE /xdate.wkday(date.mdy(6,30,1680)).
6342 DEBUG EVALUATE /xdate.wkday(date.mdy(7,24,1716)).
6343 DEBUG EVALUATE /xdate.wkday(date.mdy(6,19,1768)).
6344 DEBUG EVALUATE /xdate.wkday(date.mdy(8,2,1819)).
6345 DEBUG EVALUATE /xdate.wkday(date.mdy(3,27,1839)).
6346 DEBUG EVALUATE /xdate.wkday(date.mdy(4,19,1903)).
6347 DEBUG EVALUATE /xdate.wkday(date.mdy(8,25,1929)).
6348 DEBUG EVALUATE /xdate.wkday(date.mdy(9,29,1941)).
6349 DEBUG EVALUATE /xdate.wkday(date.mdy(4,19,1943)).
6350 DEBUG EVALUATE /xdate.wkday(date.mdy(10,7,1943)).
6351 DEBUG EVALUATE /xdate.wkday(date.mdy(3,17,1992)).
6352 DEBUG EVALUATE /xdate.wkday(date.mdy(2,25,1996)).
6353 DEBUG EVALUATE /xdate.wkday(date.mdy(9,29,1941)).
6354 DEBUG EVALUATE /xdate.wkday(date.mdy(4,19,43)).
6355 DEBUG EVALUATE /xdate.wkday(date.mdy(10,7,43)).
6356 DEBUG EVALUATE /xdate.wkday(date.mdy(3,17,92)).
6357 DEBUG EVALUATE /xdate.wkday(date.mdy(2,25,96)).
6358 DEBUG EVALUATE /xdate.wkday(date.mdy(11,10,2038)).
6359 DEBUG EVALUATE /xdate.wkday(date.mdy(7,18,2094)).
6360 ])
6361
6362 for opt in OPT NOOPT; do
6363     AS_BOX([$opt])
6364     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
6365     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
6366 xdate.wkday(date.mdy(6,10,1648)) => 4.00
6367
6368 xdate.wkday(date.mdy(6,30,1680)) => 1.00
6369
6370 xdate.wkday(date.mdy(7,24,1716)) => 6.00
6371
6372 xdate.wkday(date.mdy(6,19,1768)) => 1.00
6373
6374 xdate.wkday(date.mdy(8,2,1819)) => 2.00
6375
6376 xdate.wkday(date.mdy(3,27,1839)) => 4.00
6377
6378 xdate.wkday(date.mdy(4,19,1903)) => 1.00
6379
6380 xdate.wkday(date.mdy(8,25,1929)) => 1.00
6381
6382 xdate.wkday(date.mdy(9,29,1941)) => 2.00
6383
6384 xdate.wkday(date.mdy(4,19,1943)) => 2.00
6385
6386 xdate.wkday(date.mdy(10,7,1943)) => 5.00
6387
6388 xdate.wkday(date.mdy(3,17,1992)) => 3.00
6389
6390 xdate.wkday(date.mdy(2,25,1996)) => 1.00
6391
6392 xdate.wkday(date.mdy(9,29,1941)) => 2.00
6393
6394 xdate.wkday(date.mdy(4,19,43)) => 2.00
6395
6396 xdate.wkday(date.mdy(10,7,43)) => 5.00
6397
6398 xdate.wkday(date.mdy(3,17,92)) => 3.00
6399
6400 xdate.wkday(date.mdy(2,25,96)) => 1.00
6401
6402 xdate.wkday(date.mdy(11,10,2038)) => 4.00
6403
6404 xdate.wkday(date.mdy(7,18,2094)) => 1.00
6405 ])
6406 done
6407 AT_CLEANUP
6408
6409 AT_SETUP([expressions - XDATE.YEAR])
6410 AT_KEYWORDS([expression expressions evaluate])
6411 AT_DATA([evaluate-base.sps], [dnl
6412 SET EPOCH 1940.
6413 DEBUG EVALUATE SET opt.
6414 DEBUG EVALUATE /xdate.year(date.mdy(6,10,1648) + time.hms(0,0,0)).
6415 DEBUG EVALUATE /xdate.year(date.mdy(6,30,1680) + time.hms(4,50,38)).
6416 DEBUG EVALUATE /xdate.year(date.mdy(7,24,1716) + time.hms(12,31,35)).
6417 DEBUG EVALUATE /xdate.year(date.mdy(6,19,1768) + time.hms(12,47,53)).
6418 DEBUG EVALUATE /xdate.year(date.mdy(8,2,1819) + time.hms(1,26,0)).
6419 DEBUG EVALUATE /xdate.year(date.mdy(3,27,1839) + time.hms(20,58,11)).
6420 DEBUG EVALUATE /xdate.year(date.mdy(4,19,1903) + time.hms(7,36,5)).
6421 DEBUG EVALUATE /xdate.year(date.mdy(8,25,1929) + time.hms(15,43,49)).
6422 DEBUG EVALUATE /xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9)).
6423 DEBUG EVALUATE /xdate.year(date.mdy(4,19,1943) + time.hms(6,49,27)).
6424 DEBUG EVALUATE /xdate.year(date.mdy(10,7,1943) + time.hms(2,57,52)).
6425 DEBUG EVALUATE /xdate.year(date.mdy(3,17,1992) + time.hms(16,45,44)).
6426 DEBUG EVALUATE /xdate.year(date.mdy(2,25,1996) + time.hms(21,30,57)).
6427 DEBUG EVALUATE /xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9)).
6428 DEBUG EVALUATE /xdate.year(date.mdy(4,19,43) + time.hms(6,49,27)).
6429 DEBUG EVALUATE /xdate.year(date.mdy(10,7,43) + time.hms(2,57,52)).
6430 DEBUG EVALUATE /xdate.year(date.mdy(3,17,92) + time.hms(16,45,44)).
6431 DEBUG EVALUATE /xdate.year(date.mdy(2,25,96) + time.hms(21,30,57)).
6432 DEBUG EVALUATE /xdate.year(date.mdy(11,10,2038) + time.hms(22,30,4)).
6433 DEBUG EVALUATE /xdate.year(date.mdy(7,18,2094) + time.hms(1,56,51)).
6434 ])
6435
6436 for opt in OPT NOOPT; do
6437     AS_BOX([$opt])
6438     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
6439     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
6440 xdate.year(date.mdy(6,10,1648) + time.hms(0,0,0)) => 1648.00
6441
6442 xdate.year(date.mdy(6,30,1680) + time.hms(4,50,38)) => 1680.00
6443
6444 xdate.year(date.mdy(7,24,1716) + time.hms(12,31,35)) => 1716.00
6445
6446 xdate.year(date.mdy(6,19,1768) + time.hms(12,47,53)) => 1768.00
6447
6448 xdate.year(date.mdy(8,2,1819) + time.hms(1,26,0)) => 1819.00
6449
6450 xdate.year(date.mdy(3,27,1839) + time.hms(20,58,11)) => 1839.00
6451
6452 xdate.year(date.mdy(4,19,1903) + time.hms(7,36,5)) => 1903.00
6453
6454 xdate.year(date.mdy(8,25,1929) + time.hms(15,43,49)) => 1929.00
6455
6456 xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9)) => 1941.00
6457
6458 xdate.year(date.mdy(4,19,1943) + time.hms(6,49,27)) => 1943.00
6459
6460 xdate.year(date.mdy(10,7,1943) + time.hms(2,57,52)) => 1943.00
6461
6462 xdate.year(date.mdy(3,17,1992) + time.hms(16,45,44)) => 1992.00
6463
6464 xdate.year(date.mdy(2,25,1996) + time.hms(21,30,57)) => 1996.00
6465
6466 xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9)) => 1941.00
6467
6468 xdate.year(date.mdy(4,19,43) + time.hms(6,49,27)) => 1943.00
6469
6470 xdate.year(date.mdy(10,7,43) + time.hms(2,57,52)) => 1943.00
6471
6472 xdate.year(date.mdy(3,17,92) + time.hms(16,45,44)) => 1992.00
6473
6474 xdate.year(date.mdy(2,25,96) + time.hms(21,30,57)) => 1996.00
6475
6476 xdate.year(date.mdy(11,10,2038) + time.hms(22,30,4)) => 2038.00
6477
6478 xdate.year(date.mdy(7,18,2094) + time.hms(1,56,51)) => 2094.00
6479 ])
6480 done
6481 AT_CLEANUP
6482
6483 AT_SETUP([expressions - DATEDIFF years])
6484 AT_KEYWORDS([expression expressions evaluate])
6485 AT_DATA([evaluate-base.sps], [dnl
6486 SET EPOCH 1940.
6487 DEBUG EVALUATE SET opt.
6488
6489 DEBUG EVALUATE /datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'years').
6490 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'years').
6491 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'years').
6492 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'years').
6493 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'years').
6494 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'years').
6495 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'years').
6496 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'years').
6497 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'years').
6498 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'years').
6499 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'years').
6500 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'years').
6501 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'years').
6502 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'years').
6503 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'years').
6504 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'years').
6505 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'years').
6506 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'years').
6507 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'years').
6508 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'years').
6509 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'years').
6510 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'years').
6511
6512 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'years').
6513 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'years').
6514 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'years').
6515 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'years').
6516 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'years').
6517 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'years').
6518 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'years').
6519 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'years').
6520 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'years').
6521 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'years').
6522 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'years').
6523 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'years').
6524 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'years').
6525 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'years').
6526 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'years').
6527 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'years').
6528 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'years').
6529 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'years').
6530 DEBUG EVALUATE /datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'years').
6531 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'years').
6532 DEBUG EVALUATE /datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'years').
6533 DEBUG EVALUATE /datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'years').
6534 ])
6535
6536 for opt in OPT NOOPT; do
6537     AS_BOX([$opt])
6538     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
6539     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
6540 datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'years') => -32.00
6541
6542 datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'years') => -36.00
6543
6544 datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'years') => -51.00
6545
6546 datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'years') => -51.00
6547
6548 datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'years') => -19.00
6549
6550 datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'years') => -64.00
6551
6552 datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'years') => -26.00
6553
6554 datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'years') => -12.00
6555
6556 datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'years') => -1.00
6557
6558 datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'years') => 0.00
6559
6560 datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'years') => -48.00
6561
6562 datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'years') => -3.00
6563
6564 datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'years') => -54.00
6565
6566 datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'years') => -1.00
6567
6568 datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'years') => 0.00
6569
6570 datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'years') => -48.00
6571
6572 datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'years') => -3.00
6573
6574 datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'years') => -42.00
6575
6576 datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'years') => -55.00
6577
6578 datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'years') => -3.00
6579
6580 datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'years') => -4.00
6581
6582 datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'years') => -2.00
6583
6584 datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'years') => 32.00
6585
6586 datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'years') => 36.00
6587
6588 datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'years') => 51.00
6589
6590 datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'years') => 51.00
6591
6592 datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'years') => 19.00
6593
6594 datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'years') => 64.00
6595
6596 datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'years') => 26.00
6597
6598 datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'years') => 12.00
6599
6600 datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'years') => 1.00
6601
6602 datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'years') => 0.00
6603
6604 datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'years') => 48.00
6605
6606 datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'years') => 3.00
6607
6608 datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'years') => 54.00
6609
6610 datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'years') => 1.00
6611
6612 datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'years') => 0.00
6613
6614 datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'years') => 48.00
6615
6616 datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'years') => 3.00
6617
6618 datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'years') => 42.00
6619
6620 datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'years') => 55.00
6621
6622 datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'years') => 3.00
6623
6624 datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'years') => 4.00
6625
6626 datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'years') => 2.00
6627 ])
6628 done
6629 AT_CLEANUP
6630
6631 AT_SETUP([expressions - DATEDIFF quarters])
6632 AT_KEYWORDS([expression expressions evaluate])
6633 AT_DATA([evaluate-base.sps], [dnl
6634 SET EPOCH 1940.
6635 DEBUG EVALUATE SET opt.
6636 DEBUG EVALUATE /datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'quarters').
6637 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'quarters').
6638 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'quarters').
6639 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'quarters').
6640 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'quarters').
6641 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'quarters').
6642 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'quarters').
6643 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'quarters').
6644 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'quarters').
6645 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'quarters').
6646 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'quarters').
6647 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'quarters').
6648 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'quarters').
6649 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'quarters').
6650 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'quarters').
6651 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'quarters').
6652 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'quarters').
6653 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'quarters').
6654 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'quarters').
6655 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'quarters').
6656 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'quarters').
6657 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'quarters').
6658
6659 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'quarters').
6660 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'quarters').
6661 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'quarters').
6662 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'quarters').
6663 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'quarters').
6664 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'quarters').
6665 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'quarters').
6666 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'quarters').
6667 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'quarters').
6668 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'quarters').
6669 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'quarters').
6670 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'quarters').
6671 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'quarters').
6672 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'quarters').
6673 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'quarters').
6674 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'quarters').
6675 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'quarters').
6676 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'quarters').
6677 DEBUG EVALUATE /datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'quarters').
6678 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'quarters').
6679 DEBUG EVALUATE /datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'quarters').
6680 DEBUG EVALUATE /datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'quarters').
6681 ])
6682
6683 for opt in OPT NOOPT; do
6684     AS_BOX([$opt])
6685     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
6686     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
6687 datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'quarters') => -128.00
6688
6689 datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'quarters') => -144.00
6690
6691 datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'quarters') => -207.00
6692
6693 datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'quarters') => -204.00
6694
6695 datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'quarters') => -78.00
6696
6697 datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'quarters') => -256.00
6698
6699 datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'quarters') => -105.00
6700
6701 datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'quarters') => -48.00
6702
6703 datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'quarters') => -6.00
6704
6705 datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'quarters') => -1.00
6706
6707 datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'quarters') => -193.00
6708
6709 datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'quarters') => -15.00
6710
6711 datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'quarters') => -217.00
6712
6713 datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'quarters') => -6.00
6714
6715 datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'quarters') => -1.00
6716
6717 datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'quarters') => -193.00
6718
6719 datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'quarters') => -15.00
6720
6721 datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'quarters') => -170.00
6722
6723 datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'quarters') => -222.00
6724
6725 datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'quarters') => -15.00
6726
6727 datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'quarters') => -16.00
6728
6729 datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'quarters') => -11.00
6730
6731 datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'quarters') => 128.00
6732
6733 datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'quarters') => 144.00
6734
6735 datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'quarters') => 207.00
6736
6737 datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'quarters') => 204.00
6738
6739 datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'quarters') => 78.00
6740
6741 datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'quarters') => 256.00
6742
6743 datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'quarters') => 105.00
6744
6745 datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'quarters') => 48.00
6746
6747 datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'quarters') => 6.00
6748
6749 datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'quarters') => 1.00
6750
6751 datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'quarters') => 193.00
6752
6753 datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'quarters') => 15.00
6754
6755 datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'quarters') => 217.00
6756
6757 datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'quarters') => 6.00
6758
6759 datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'quarters') => 1.00
6760
6761 datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'quarters') => 193.00
6762
6763 datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'quarters') => 15.00
6764
6765 datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'quarters') => 170.00
6766
6767 datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'quarters') => 222.00
6768
6769 datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'quarters') => 15.00
6770
6771 datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'quarters') => 16.00
6772
6773 datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'quarters') => 11.00
6774 ])
6775 done
6776 AT_CLEANUP
6777
6778 AT_SETUP([expressions - DATEDIFF months])
6779 AT_KEYWORDS([expression expressions evaluate])
6780 AT_DATA([evaluate-base.sps], [dnl
6781 SET EPOCH 1940.
6782 DEBUG EVALUATE SET opt.
6783 DEBUG EVALUATE /datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'months').
6784 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'months').
6785 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'months').
6786 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'months').
6787 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'months').
6788 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'months').
6789 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'months').
6790 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'months').
6791 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'months').
6792 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'months').
6793 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'months').
6794 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'months').
6795 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'months').
6796 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'months').
6797 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'months').
6798 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'months').
6799 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'months').
6800 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'months').
6801 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'months').
6802 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'months').
6803 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'months').
6804 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'months').
6805
6806 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'months').
6807 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'months').
6808 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'months').
6809 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'months').
6810 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'months').
6811 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'months').
6812 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'months').
6813 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'months').
6814 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'months').
6815 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'months').
6816 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'months').
6817 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'months').
6818 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'months').
6819 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'months').
6820 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'months').
6821 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'months').
6822 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'months').
6823 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'months').
6824 DEBUG EVALUATE /datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'months').
6825 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'months').
6826 DEBUG EVALUATE /datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'months').
6827 DEBUG EVALUATE /datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'months').
6828 ])
6829
6830 for opt in OPT NOOPT; do
6831     AS_BOX([$opt])
6832     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
6833     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
6834 datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'months') => -384.00
6835
6836 datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'months') => -432.00
6837
6838 datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'months') => -622.00
6839
6840 datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'months') => -613.00
6841
6842 datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'months') => -235.00
6843
6844 datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'months') => -768.00
6845
6846 datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'months') => -316.00
6847
6848 datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'months') => -145.00
6849
6850 datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'months') => -18.00
6851
6852 datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'months') => -5.00
6853
6854 datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'months') => -581.00
6855
6856 datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'months') => -47.00
6857
6858 datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'months') => -652.00
6859
6860 datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'months') => -18.00
6861
6862 datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'months') => -5.00
6863
6864 datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'months') => -581.00
6865
6866 datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'months') => -47.00
6867
6868 datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'months') => -512.00
6869
6870 datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'months') => -668.00
6871
6872 datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'months') => -47.00
6873
6874 datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'months') => -48.00
6875
6876 datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'months') => -35.00
6877
6878 datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'months') => 384.00
6879
6880 datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'months') => 432.00
6881
6882 datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'months') => 622.00
6883
6884 datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'months') => 613.00
6885
6886 datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'months') => 235.00
6887
6888 datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'months') => 768.00
6889
6890 datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'months') => 316.00
6891
6892 datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'months') => 145.00
6893
6894 datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'months') => 18.00
6895
6896 datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'months') => 5.00
6897
6898 datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'months') => 581.00
6899
6900 datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'months') => 47.00
6901
6902 datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'months') => 652.00
6903
6904 datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'months') => 18.00
6905
6906 datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'months') => 5.00
6907
6908 datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'months') => 581.00
6909
6910 datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'months') => 47.00
6911
6912 datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'months') => 512.00
6913
6914 datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'months') => 668.00
6915
6916 datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'months') => 47.00
6917
6918 datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'months') => 48.00
6919
6920 datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'months') => 35.00
6921 ])
6922 done
6923 AT_CLEANUP
6924
6925 AT_SETUP([expressions - DATEDIFF weeks])
6926 AT_KEYWORDS([expression expressions evaluate])
6927 AT_DATA([evaluate-base.sps], [dnl
6928 SET EPOCH 1940.
6929 DEBUG EVALUATE SET opt.
6930 DEBUG EVALUATE /datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'weeks').
6931 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'weeks').
6932 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'weeks').
6933 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'weeks').
6934 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'weeks').
6935 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'weeks').
6936 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'weeks').
6937 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'weeks').
6938 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'weeks').
6939 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'weeks').
6940 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'weeks').
6941 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'weeks').
6942 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'weeks').
6943 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'weeks').
6944 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'weeks').
6945 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'weeks').
6946 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'weeks').
6947 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'weeks').
6948 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'weeks').
6949 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'weeks').
6950 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'weeks').
6951 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'weeks').
6952 ])
6953
6954 for opt in OPT NOOPT; do
6955     AS_BOX([$opt])
6956     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
6957     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
6958 datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'weeks') => -1672.00
6959
6960 datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'weeks') => -1881.00
6961
6962 datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'weeks') => -2708.00
6963
6964 datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'weeks') => -2667.00
6965
6966 datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'weeks') => -1025.00
6967
6968 datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'weeks') => -3342.00
6969
6970 datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'weeks') => -1375.00
6971
6972 datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'weeks') => -631.00
6973
6974 datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'weeks') => -81.00
6975
6976 datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'weeks') => -24.00
6977
6978 datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'weeks') => -2527.00
6979
6980 datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'weeks') => -205.00
6981
6982 datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'weeks') => -2838.00
6983
6984 datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'weeks') => -81.00
6985
6986 datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'weeks') => -24.00
6987
6988 datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'weeks') => -2527.00
6989
6990 datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'weeks') => -205.00
6991
6992 datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'weeks') => -2228.00
6993
6994 datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'weeks') => -2905.00
6995
6996 datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'weeks') => -208.00
6997
6998 datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'weeks') => -208.00
6999
7000 datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'weeks') => -156.00
7001 ])
7002 done
7003 AT_CLEANUP
7004
7005 AT_SETUP([expressions - DATEDIFF days])
7006 AT_KEYWORDS([expression expressions evaluate])
7007 AT_DATA([evaluate-base.sps], [dnl
7008 SET EPOCH 1940.
7009 DEBUG EVALUATE SET opt.
7010 DEBUG EVALUATE /datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'days').
7011 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'days').
7012 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'days').
7013 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'days').
7014 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'days').
7015 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'days').
7016 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'days').
7017 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'days').
7018 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'days').
7019 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'days').
7020 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'days').
7021 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'days').
7022 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'days').
7023 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'days').
7024 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'days').
7025 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'days').
7026 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'days').
7027 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'days').
7028 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'days').
7029 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'days').
7030 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'days').
7031 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'days').
7032 ])
7033
7034 for opt in OPT NOOPT; do
7035     AS_BOX([$opt])
7036     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
7037     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
7038 datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'days') => -11708.00
7039
7040 datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'days') => -13172.00
7041
7042 datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'days') => -18958.00
7043
7044 datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'days') => -18670.00
7045
7046 datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'days') => -7177.00
7047
7048 datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'days') => -23398.00
7049
7050 datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'days') => -9625.00
7051
7052 datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'days') => -4418.00
7053
7054 datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'days') => -567.00
7055
7056 datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'days') => -171.00
7057
7058 datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'days') => -17694.00
7059
7060 datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'days') => -1440.00
7061
7062 datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'days') => -19872.00
7063
7064 datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'days') => -567.00
7065
7066 datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'days') => -171.00
7067
7068 datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'days') => -17694.00
7069
7070 datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'days') => -1440.00
7071
7072 datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'days') => -15599.00
7073
7074 datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'days') => -20339.00
7075
7076 datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'days') => -1460.00
7077
7078 datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'days') => -1461.00
7079
7080 datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'days') => -1094.00
7081 ])
7082 done
7083 AT_CLEANUP
7084
7085 dnl time of day is significant for DATEDIFF
7086 AT_SETUP([expressions - DATEDIFF time of day])
7087 AT_KEYWORDS([expression expressions evaluate])
7088 AT_DATA([evaluate-base.sps], [dnl
7089 SET EPOCH 1940.
7090 DEBUG EVALUATE SET opt.
7091 DEBUG EVALUATE /datediff(date.mdy(10,15,1910) + 234, date.mdy(10,10,1910) + 123, 'days').
7092 DEBUG EVALUATE /datediff(date.mdy(10,15,1910) + 123, date.mdy(10,10,1910) + 234, 'days').
7093 DEBUG EVALUATE /datediff(date.mdy(10,24,1910) + 234, date.mdy(10,10,1910) + 123, 'weeks').
7094 DEBUG EVALUATE /datediff(date.mdy(10,24,1910) + 123, date.mdy(10,10,1910) + 234, 'weeks').
7095 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 234, date.mdy(5,10,1910) + 123, 'months').
7096 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 123, date.mdy(5,10,1910) + 234, 'months').
7097 DEBUG EVALUATE /datediff(date.mdy(5,10,1919) + 234, date.mdy(5,10,1910) + 123, 'years').
7098 DEBUG EVALUATE /datediff(date.mdy(5,10,1919) + 123, date.mdy(5,10,1910) + 234, 'years').
7099
7100 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 123, date.mdy(10,15,1910) + 234, 'days').
7101 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 234, date.mdy(10,15,1910) + 123, 'days').
7102 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 123, date.mdy(10,24,1910) + 234, 'weeks').
7103 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 234, date.mdy(10,24,1910) + 123, 'weeks').
7104 DEBUG EVALUATE /datediff(date.mdy(5,10,1910) + 123, date.mdy(10,10,1910) + 234, 'months').
7105 DEBUG EVALUATE /datediff(date.mdy(5,10,1910) + 234, date.mdy(10,10,1910) + 123, 'months').
7106 DEBUG EVALUATE /datediff(date.mdy(5,10,1910) + 123, date.mdy(5,10,1919) + 234, 'years').
7107 DEBUG EVALUATE /datediff(date.mdy(5,10,1910) + 234, date.mdy(5,10,1919) + 123, 'years').
7108 ])
7109
7110 for opt in OPT NOOPT; do
7111     AS_BOX([$opt])
7112     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
7113     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
7114 datediff(date.mdy(10,15,1910) + 234, date.mdy(10,10,1910) + 123, 'days') =>
7115 5.00
7116
7117 datediff(date.mdy(10,15,1910) + 123, date.mdy(10,10,1910) + 234, 'days') =>
7118 4.00
7119
7120 datediff(date.mdy(10,24,1910) + 234, date.mdy(10,10,1910) + 123, 'weeks') =>
7121 2.00
7122
7123 datediff(date.mdy(10,24,1910) + 123, date.mdy(10,10,1910) + 234, 'weeks') =>
7124 1.00
7125
7126 datediff(date.mdy(10,10,1910) + 234, date.mdy(5,10,1910) + 123, 'months') =>
7127 5.00
7128
7129 datediff(date.mdy(10,10,1910) + 123, date.mdy(5,10,1910) + 234, 'months') =>
7130 4.00
7131
7132 datediff(date.mdy(5,10,1919) + 234, date.mdy(5,10,1910) + 123, 'years') => 9.00
7133
7134 datediff(date.mdy(5,10,1919) + 123, date.mdy(5,10,1910) + 234, 'years') => 8.00
7135
7136 datediff(date.mdy(10,10,1910) + 123, date.mdy(10,15,1910) + 234, 'days') =>
7137 -5.00
7138
7139 datediff(date.mdy(10,10,1910) + 234, date.mdy(10,15,1910) + 123, 'days') =>
7140 -4.00
7141
7142 datediff(date.mdy(10,10,1910) + 123, date.mdy(10,24,1910) + 234, 'weeks') =>
7143 -2.00
7144
7145 datediff(date.mdy(10,10,1910) + 234, date.mdy(10,24,1910) + 123, 'weeks') =>
7146 -1.00
7147
7148 datediff(date.mdy(5,10,1910) + 123, date.mdy(10,10,1910) + 234, 'months') =>
7149 -5.00
7150
7151 datediff(date.mdy(5,10,1910) + 234, date.mdy(10,10,1910) + 123, 'months') =>
7152 -4.00
7153
7154 datediff(date.mdy(5,10,1910) + 123, date.mdy(5,10,1919) + 234, 'years') =>
7155 -9.00
7156
7157 datediff(date.mdy(5,10,1910) + 234, date.mdy(5,10,1919) + 123, 'years') =>
7158 -8.00
7159 ])
7160 done
7161 AT_CLEANUP
7162
7163 AT_SETUP([expressions - DATESUM with non-leap year])
7164 AT_KEYWORDS([expression expressions evaluate])
7165 AT_DATA([evaluate-base.sps], [dnl
7166 SET EPOCH 1940.
7167 DEBUG EVALUATE SET opt.
7168 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 1, 'months') - date.mdy(1,1,1900)).
7169 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 2, 'months') - date.mdy(1,1,1900)).
7170 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 3, 'months') - date.mdy(1,1,1900)).
7171 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 4, 'months') - date.mdy(1,1,1900)).
7172 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 5.4, 'months') - date.mdy(1,1,1900)).
7173 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 6, 'months') - date.mdy(1,1,1900)).
7174 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 7, 'months') - date.mdy(1,1,1900)).
7175 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 8, 'months') - date.mdy(1,1,1900)).
7176 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 9, 'months') - date.mdy(1,1,1900)).
7177 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 10, 'months') - date.mdy(1,1,1900)).
7178 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 11, 'months') - date.mdy(1,1,1900)).
7179 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 12, 'months') - date.mdy(1,1,1900)).
7180 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 13.9, 'months') - date.mdy(1,1,1900)).
7181 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 1, 'months', 'rollover') - date.mdy(1,1,1900)).
7182 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 2, 'months', 'rollover') - date.mdy(1,1,1900)).
7183 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 3.2, 'months', 'rollover') - date.mdy(1,1,1900)).
7184 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 4, 'months', 'rollover') - date.mdy(1,1,1900)).
7185 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 5, 'months', 'rollover') - date.mdy(1,1,1900)).
7186 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 6, 'months', 'rollover') - date.mdy(1,1,1900)).
7187 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 7, 'months', 'rollover') - date.mdy(1,1,1900)).
7188 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 8, 'months', 'rollover') - date.mdy(1,1,1900)).
7189 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 9, 'months', 'rollover') - date.mdy(1,1,1900)).
7190 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 10, 'months', 'rollover') - date.mdy(1,1,1900)).
7191 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 11, 'months', 'rollover') - date.mdy(1,1,1900)).
7192 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 12, 'months', 'rollover') - date.mdy(1,1,1900)).
7193 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 13, 'months', 'rollover') - date.mdy(1,1,1900)).
7194 ])
7195
7196 for opt in OPT NOOPT; do
7197     AS_BOX([$opt])
7198     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
7199     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
7200 ctime.days(datesum(date.mdy(1,31,1900), 1, 'months') - date.mdy(1,1,1900)) =>
7201 58.00
7202
7203 ctime.days(datesum(date.mdy(1,31,1900), 2, 'months') - date.mdy(1,1,1900)) =>
7204 89.00
7205
7206 ctime.days(datesum(date.mdy(1,31,1900), 3, 'months') - date.mdy(1,1,1900)) =>
7207 119.00
7208
7209 ctime.days(datesum(date.mdy(1,31,1900), 4, 'months') - date.mdy(1,1,1900)) =>
7210 150.00
7211
7212 ctime.days(datesum(date.mdy(1,31,1900), 5.4, 'months') - date.mdy(1,1,1900)) =>
7213 180.00
7214
7215 ctime.days(datesum(date.mdy(1,31,1900), 6, 'months') - date.mdy(1,1,1900)) =>
7216 211.00
7217
7218 ctime.days(datesum(date.mdy(1,31,1900), 7, 'months') - date.mdy(1,1,1900)) =>
7219 242.00
7220
7221 ctime.days(datesum(date.mdy(1,31,1900), 8, 'months') - date.mdy(1,1,1900)) =>
7222 272.00
7223
7224 ctime.days(datesum(date.mdy(1,31,1900), 9, 'months') - date.mdy(1,1,1900)) =>
7225 303.00
7226
7227 ctime.days(datesum(date.mdy(1,31,1900), 10, 'months') - date.mdy(1,1,1900)) =>
7228 333.00
7229
7230 ctime.days(datesum(date.mdy(1,31,1900), 11, 'months') - date.mdy(1,1,1900)) =>
7231 364.00
7232
7233 ctime.days(datesum(date.mdy(1,31,1900), 12, 'months') - date.mdy(1,1,1900)) =>
7234 395.00
7235
7236 ctime.days(datesum(date.mdy(1,31,1900), 13.9, 'months') - date.mdy(1,1,1900))
7237 => 423.00
7238
7239 ctime.days(datesum(date.mdy(1,31,1900), 1, 'months', 'rollover') - date.
7240 mdy(1,1,1900)) => 61.00
7241
7242 ctime.days(datesum(date.mdy(1,31,1900), 2, 'months', 'rollover') - date.
7243 mdy(1,1,1900)) => 89.00
7244
7245 ctime.days(datesum(date.mdy(1,31,1900), 3.2, 'months', 'rollover') - date.
7246 mdy(1,1,1900)) => 120.00
7247
7248 ctime.days(datesum(date.mdy(1,31,1900), 4, 'months', 'rollover') - date.
7249 mdy(1,1,1900)) => 150.00
7250
7251 ctime.days(datesum(date.mdy(1,31,1900), 5, 'months', 'rollover') - date.
7252 mdy(1,1,1900)) => 181.00
7253
7254 ctime.days(datesum(date.mdy(1,31,1900), 6, 'months', 'rollover') - date.
7255 mdy(1,1,1900)) => 211.00
7256
7257 ctime.days(datesum(date.mdy(1,31,1900), 7, 'months', 'rollover') - date.
7258 mdy(1,1,1900)) => 242.00
7259
7260 ctime.days(datesum(date.mdy(1,31,1900), 8, 'months', 'rollover') - date.
7261 mdy(1,1,1900)) => 273.00
7262
7263 ctime.days(datesum(date.mdy(1,31,1900), 9, 'months', 'rollover') - date.
7264 mdy(1,1,1900)) => 303.00
7265
7266 ctime.days(datesum(date.mdy(1,31,1900), 10, 'months', 'rollover') - date.
7267 mdy(1,1,1900)) => 334.00
7268
7269 ctime.days(datesum(date.mdy(1,31,1900), 11, 'months', 'rollover') - date.
7270 mdy(1,1,1900)) => 364.00
7271
7272 ctime.days(datesum(date.mdy(1,31,1900), 12, 'months', 'rollover') - date.
7273 mdy(1,1,1900)) => 395.00
7274
7275 ctime.days(datesum(date.mdy(1,31,1900), 13, 'months', 'rollover') - date.
7276 mdy(1,1,1900)) => 426.00
7277 ])
7278 done
7279 AT_CLEANUP
7280
7281 AT_SETUP([expressions - DATESUM with leap year])
7282 AT_KEYWORDS([expression expressions evaluate])
7283 AT_DATA([evaluate-base.sps], [dnl
7284 SET EPOCH 1940.
7285 DEBUG EVALUATE SET opt.
7286 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 1, 'months') - date.mdy(1,1,1904)).
7287 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 2.5, 'months') - date.mdy(1,1,1904)).
7288 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 3, 'months') - date.mdy(1,1,1904)).
7289 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 4.9, 'months') - date.mdy(1,1,1904)).
7290 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 5.1, 'months') - date.mdy(1,1,1904)).
7291 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 6, 'months') - date.mdy(1,1,1904)).
7292 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 7, 'months') - date.mdy(1,1,1904)).
7293 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 8, 'months') - date.mdy(1,1,1904)).
7294 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 9, 'months') - date.mdy(1,1,1904)).
7295 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 10, 'months') - date.mdy(1,1,1904)).
7296 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 11, 'months') - date.mdy(1,1,1904)).
7297 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 12, 'months') - date.mdy(1,1,1904)).
7298 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 13, 'months') - date.mdy(1,1,1904)).
7299 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 1, 'months', 'rollover') - date.mdy(1,1,1904)).
7300 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 2, 'months', 'rollover') - date.mdy(1,1,1904)).
7301 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 3, 'months', 'rollover') - date.mdy(1,1,1904)).
7302 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 4, 'months', 'rollover') - date.mdy(1,1,1904)).
7303 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 5, 'months', 'rollover') - date.mdy(1,1,1904)).
7304 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 6, 'months', 'rollover') - date.mdy(1,1,1904)).
7305 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 7, 'months', 'rollover') - date.mdy(1,1,1904)).
7306 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 8, 'months', 'rollover') - date.mdy(1,1,1904)).
7307 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 9, 'months', 'rollover') - date.mdy(1,1,1904)).
7308 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 10, 'months', 'rollover') - date.mdy(1,1,1904)).
7309 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 11, 'months', 'rollover') - date.mdy(1,1,1904)).
7310 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 12, 'months', 'rollover') - date.mdy(1,1,1904)).
7311 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 13, 'months', 'rollover') - date.mdy(1,1,1904)).
7312 ])
7313
7314 for opt in OPT NOOPT; do
7315     AS_BOX([$opt])
7316     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
7317     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
7318 ctime.days(datesum(date.mdy(1,31,1904), 1, 'months') - date.mdy(1,1,1904)) =>
7319 59.00
7320
7321 ctime.days(datesum(date.mdy(1,31,1904), 2.5, 'months') - date.mdy(1,1,1904)) =>
7322 90.00
7323
7324 ctime.days(datesum(date.mdy(1,31,1904), 3, 'months') - date.mdy(1,1,1904)) =>
7325 120.00
7326
7327 ctime.days(datesum(date.mdy(1,31,1904), 4.9, 'months') - date.mdy(1,1,1904)) =>
7328 151.00
7329
7330 ctime.days(datesum(date.mdy(1,31,1904), 5.1, 'months') - date.mdy(1,1,1904)) =>
7331 181.00
7332
7333 ctime.days(datesum(date.mdy(1,31,1904), 6, 'months') - date.mdy(1,1,1904)) =>
7334 212.00
7335
7336 ctime.days(datesum(date.mdy(1,31,1904), 7, 'months') - date.mdy(1,1,1904)) =>
7337 243.00
7338
7339 ctime.days(datesum(date.mdy(1,31,1904), 8, 'months') - date.mdy(1,1,1904)) =>
7340 273.00
7341
7342 ctime.days(datesum(date.mdy(1,31,1904), 9, 'months') - date.mdy(1,1,1904)) =>
7343 304.00
7344
7345 ctime.days(datesum(date.mdy(1,31,1904), 10, 'months') - date.mdy(1,1,1904)) =>
7346 334.00
7347
7348 ctime.days(datesum(date.mdy(1,31,1904), 11, 'months') - date.mdy(1,1,1904)) =>
7349 365.00
7350
7351 ctime.days(datesum(date.mdy(1,31,1904), 12, 'months') - date.mdy(1,1,1904)) =>
7352 396.00
7353
7354 ctime.days(datesum(date.mdy(1,31,1904), 13, 'months') - date.mdy(1,1,1904)) =>
7355 424.00
7356
7357 ctime.days(datesum(date.mdy(1,31,1904), 1, 'months', 'rollover') - date.
7358 mdy(1,1,1904)) => 61.00
7359
7360 ctime.days(datesum(date.mdy(1,31,1904), 2, 'months', 'rollover') - date.
7361 mdy(1,1,1904)) => 90.00
7362
7363 ctime.days(datesum(date.mdy(1,31,1904), 3, 'months', 'rollover') - date.
7364 mdy(1,1,1904)) => 121.00
7365
7366 ctime.days(datesum(date.mdy(1,31,1904), 4, 'months', 'rollover') - date.
7367 mdy(1,1,1904)) => 151.00
7368
7369 ctime.days(datesum(date.mdy(1,31,1904), 5, 'months', 'rollover') - date.
7370 mdy(1,1,1904)) => 182.00
7371
7372 ctime.days(datesum(date.mdy(1,31,1904), 6, 'months', 'rollover') - date.
7373 mdy(1,1,1904)) => 212.00
7374
7375 ctime.days(datesum(date.mdy(1,31,1904), 7, 'months', 'rollover') - date.
7376 mdy(1,1,1904)) => 243.00
7377
7378 ctime.days(datesum(date.mdy(1,31,1904), 8, 'months', 'rollover') - date.
7379 mdy(1,1,1904)) => 274.00
7380
7381 ctime.days(datesum(date.mdy(1,31,1904), 9, 'months', 'rollover') - date.
7382 mdy(1,1,1904)) => 304.00
7383
7384 ctime.days(datesum(date.mdy(1,31,1904), 10, 'months', 'rollover') - date.
7385 mdy(1,1,1904)) => 335.00
7386
7387 ctime.days(datesum(date.mdy(1,31,1904), 11, 'months', 'rollover') - date.
7388 mdy(1,1,1904)) => 365.00
7389
7390 ctime.days(datesum(date.mdy(1,31,1904), 12, 'months', 'rollover') - date.
7391 mdy(1,1,1904)) => 396.00
7392
7393 ctime.days(datesum(date.mdy(1,31,1904), 13, 'months', 'rollover') - date.
7394 mdy(1,1,1904)) => 427.00
7395 ])
7396 done
7397 AT_CLEANUP
7398
7399 AT_SETUP([expressions - DATESUM])
7400 AT_KEYWORDS([expression expressions evaluate])
7401 AT_DATA([evaluate-base.sps], [dnl
7402 SET EPOCH 1940.
7403 DEBUG EVALUATE SET opt.
7404 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,10,1648), 1, 'weeks') - date.mdy(6,10,1648)).
7405 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'weeks') - date.mdy(6,30,1680)).
7406 DEBUG EVALUATE /ctime.days(datesum(date.mdy(7,24,1716), -3, 'weeks') - date.mdy(7,24,1716)).
7407 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,19,1768), 4, 'weeks') - date.mdy(6,19,1768)).
7408 DEBUG EVALUATE /ctime.days(datesum(date.mdy(8,2,1819), 5, 'weeks') - date.mdy(8,2,1819)).
7409
7410 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,10,1648), 1, 'days') - date.mdy(6,10,1648)).
7411 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'days') - date.mdy(6,30,1680)).
7412 DEBUG EVALUATE /ctime.days(datesum(date.mdy(7,24,1716), -3, 'days') - date.mdy(7,24,1716)).
7413 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,19,1768), 4, 'days') - date.mdy(6,19,1768)).
7414 DEBUG EVALUATE /ctime.days(datesum(date.mdy(8,2,1819), 5, 'days') - date.mdy(8,2,1819)).
7415 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,10,1648), 1, 'hours') - date.mdy(6,10,1648)).
7416 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'hours') - date.mdy(6,30,1680)).
7417 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,19,1768), -4, 'hours') - date.mdy(6,19,1768)).
7418 DEBUG EVALUATE /ctime.days(datesum(date.mdy(8,2,1819), 5, 'hours') - date.mdy(8,2,1819)).
7419 ])
7420
7421 for opt in OPT NOOPT; do
7422     AS_BOX([$opt])
7423     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
7424     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
7425 ctime.days(datesum(date.mdy(6,10,1648), 1, 'weeks') - date.mdy(6,10,1648)) =>
7426 7.00
7427
7428 ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'weeks') - date.mdy(6,30,1680)) =>
7429 17.50
7430
7431 ctime.days(datesum(date.mdy(7,24,1716), -3, 'weeks') - date.mdy(7,24,1716)) =>
7432 -21.00
7433
7434 ctime.days(datesum(date.mdy(6,19,1768), 4, 'weeks') - date.mdy(6,19,1768)) =>
7435 28.00
7436
7437 ctime.days(datesum(date.mdy(8,2,1819), 5, 'weeks') - date.mdy(8,2,1819)) =>
7438 35.00
7439
7440 ctime.days(datesum(date.mdy(6,10,1648), 1, 'days') - date.mdy(6,10,1648)) =>
7441 1.00
7442
7443 ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'days') - date.mdy(6,30,1680)) =>
7444 2.50
7445
7446 ctime.days(datesum(date.mdy(7,24,1716), -3, 'days') - date.mdy(7,24,1716)) =>
7447 -3.00
7448
7449 ctime.days(datesum(date.mdy(6,19,1768), 4, 'days') - date.mdy(6,19,1768)) =>
7450 4.00
7451
7452 ctime.days(datesum(date.mdy(8,2,1819), 5, 'days') - date.mdy(8,2,1819)) => 5.00
7453
7454 ctime.days(datesum(date.mdy(6,10,1648), 1, 'hours') - date.mdy(6,10,1648)) =>
7455 0.04
7456
7457 ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'hours') - date.mdy(6,30,1680)) =>
7458 0.10
7459
7460 ctime.days(datesum(date.mdy(6,19,1768), -4, 'hours') - date.mdy(6,19,1768)) =>
7461 -0.17
7462
7463 ctime.days(datesum(date.mdy(8,2,1819), 5, 'hours') - date.mdy(8,2,1819)) =>
7464 0.21
7465 ])
7466 done
7467 AT_CLEANUP
7468
7469 AT_SETUP([expressions - DATESUM preserves time of day for units of days and longer])
7470 AT_KEYWORDS([expression expressions evaluate])
7471 AT_DATA([evaluate-base.sps], [dnl
7472 SET EPOCH 1940.
7473 DEBUG EVALUATE SET opt.
7474 DEBUG EVALUATE /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))).
7475 DEBUG EVALUATE /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))).
7476 DEBUG EVALUATE /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))).
7477 DEBUG EVALUATE /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))).
7478 ])
7479
7480 for opt in OPT NOOPT; do
7481     AS_BOX([$opt])
7482     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
7483     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
7484 ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'days') - (date.
7485 mdy(8,2,1819) + time.hms(1,2,3))) => 5.00
7486
7487 ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'weeks') - (date.
7488 mdy(8,2,1819) + time.hms(1,2,3))) => 35.00
7489
7490 ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'months') - (date.
7491 mdy(8,2,1819) + time.hms(1,2,3))) => 153.00
7492
7493 ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'years') - (date.
7494 mdy(8,2,1819) + time.hms(1,2,3))) => 1827.00
7495 ])
7496 done
7497 AT_CLEANUP
7498
7499 dnl These test values are from Applied Statistics, Algorithm AS 310.
7500 AT_SETUP([expressions - NCDF.BETA])
7501 AT_KEYWORDS([expression expressions evaluate])
7502 AT_DATA([evaluate-base.sps], [dnl
7503 SET EPOCH 1940.
7504 DEBUG EVALUATE SET opt.
7505 DEBUG EVALUATE /1000 * ncdf.beta(.868,10,20,150).
7506 DEBUG EVALUATE /1000 * ncdf.beta(.9,10,10,120).
7507 DEBUG EVALUATE /1000 * ncdf.beta(.88,15,5,80).
7508 DEBUG EVALUATE /1000 * ncdf.beta(.85,20,10,110).
7509 DEBUG EVALUATE /1000 * ncdf.beta(.66,20,30,65).
7510 DEBUG EVALUATE /1000 * ncdf.beta(.72,20,50,130).
7511 DEBUG EVALUATE /1000 * ncdf.beta(.72,30,20,80).
7512 DEBUG EVALUATE /1000 * ncdf.beta(.8,30,40,130).
7513 ])
7514
7515 for opt in OPT NOOPT; do
7516     AS_BOX([$opt])
7517     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
7518     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
7519 1000 * ncdf.beta(.868,10,20,150) => 937.66
7520
7521 1000 * ncdf.beta(.9,10,10,120) => 730.68
7522
7523 1000 * ncdf.beta(.88,15,5,80) => 160.43
7524
7525 1000 * ncdf.beta(.85,20,10,110) => 186.75
7526
7527 1000 * ncdf.beta(.66,20,30,65) => 655.94
7528
7529 1000 * ncdf.beta(.72,20,50,130) => 979.69
7530
7531 1000 * ncdf.beta(.72,30,20,80) => 116.24
7532
7533 1000 * ncdf.beta(.8,30,40,130) => 993.04
7534 ])
7535 done
7536 AT_CLEANUP
7537
7538 dnl FIXME: LAG
7539 dnl
7540   [[X], [1.00], [], [(X = 1.00)]],
7541
7542 dnl FIXME: out-of-range and nearly out-of-range values on dates
7543 dnl
7544 dnl Tests correctness of generic optimizations in optimize_tree().
7545 AT_SETUP([expressions - generic tree optimizations])
7546 AT_KEYWORDS([expression expressions evaluate])
7547 AT_DATA([evaluate-base.sps], [dnl
7548 SET EPOCH 1940.
7549 DEBUG EVALUATE SET opt.
7550 DEBUG EVALUATE (x=10) /x + 0.
7551 DEBUG EVALUATE (x=-3) /x - 0.
7552 DEBUG EVALUATE (x=5) /0 + x.
7553 DEBUG EVALUATE (x=10) /x * 1.
7554 DEBUG EVALUATE (x=-3) /1 * x.
7555 DEBUG EVALUATE (x=5) /x / 1.
7556 DEBUG EVALUATE (x=10) /0 * x.
7557 DEBUG EVALUATE (x=-3) /x * 0.
7558 DEBUG EVALUATE (x=5) /0 / x.
7559 DEBUG EVALUATE (x=5) /mod(0, x).
7560 DEBUG EVALUATE (x=5) /x ** 1.
7561 DEBUG EVALUATE (x=5) /x ** 2.
7562 ])
7563
7564 for opt in OPT NOOPT; do
7565     AS_BOX([$opt])
7566     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
7567     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
7568 x + 0 => 10.00
7569
7570 x - 0 => -3.00
7571
7572 0 + x => 5.00
7573
7574 x * 1 => 10.00
7575
7576 1 * x => -3.00
7577
7578 x / 1 => 5.00
7579
7580 0 * x => 0.00
7581
7582 x * 0 => 0.00
7583
7584 0 / x => 0.00
7585
7586 mod(0, x) => 0.00
7587
7588 x ** 1 => 5.00
7589
7590 x ** 2 => 25.00
7591 ])
7592 done
7593 AT_CLEANUP
7594
7595 AT_SETUP([expressions - LAG])
7596 AT_DATA([lag.sps], [dnl
7597 data list /W 1.
7598 begin data.
7599 1
7600 2
7601 3
7602 4
7603 5
7604 end data.
7605
7606 compute X=lag(w,1).
7607 compute Y=lag(x).
7608 compute Z=lag(w,2).
7609 list.
7610 ])
7611 AT_CHECK([pspp -o pspp.csv lag.sps])
7612 AT_CHECK([cat pspp.csv], [0], [dnl
7613 Table: Reading 1 record from INLINE.
7614 Variable,Record,Columns,Format
7615 W,1,1-1,F1.0
7616
7617 Table: Data List
7618 W,X,Y,Z
7619 1,.  ,.  ,.  @&t@
7620 2,1.00,.  ,.  @&t@
7621 3,2.00,1.00,1.00
7622 4,3.00,2.00,2.00
7623 5,4.00,3.00,3.00
7624 ])
7625 AT_CLEANUP
7626
7627 AT_SETUP([expression - LAG crash])
7628 AT_DATA([lag.sps], [dnl
7629 DATA LIST LIST /x.
7630 BEGIN DATA
7631 1
7632 2
7633 END DATA.
7634
7635 DO IF (x <> LAG(x) ).
7636         ECHO 'hello'.
7637 END IF.
7638
7639 EXECUTE.
7640 ])
7641 AT_CHECK([pspp -o pspp.csv lag.sps])
7642 AT_CHECK([cat pspp.csv], [0], [dnl
7643 Table: Reading free-form data from INLINE.
7644 Variable,Format
7645 x,F8.0
7646
7647 hello
7648 ])
7649 AT_CLEANUP
7650
7651 dnl Tests for a bug which caused UNIFORM(x) to always return zero.
7652 AT_SETUP([expressions - UNIFORM])
7653 AT_DATA([uniform.sps], [dnl
7654 set seed=10.
7655 input program.
7656 + loop #i = 1 to 20.
7657 +    do repeat response=R1.
7658 +       compute response = uniform(10).
7659 +    end repeat.
7660 +    end case.
7661 + end loop.
7662 + end file.
7663 end input program.
7664
7665 list.
7666 ])
7667 AT_CHECK([pspp -o pspp.csv uniform.sps])
7668 AT_CHECK([cat pspp.csv], [0], [dnl
7669 Table: Data List
7670 R1
7671 7.71
7672 2.99
7673 .21
7674 4.95
7675 6.34
7676 4.43
7677 7.49
7678 8.32
7679 4.99
7680 5.83
7681 2.25
7682 .25
7683 1.98
7684 7.09
7685 7.61
7686 2.66
7687 1.69
7688 2.64
7689 .88
7690 1.50
7691 ])
7692 AT_CLEANUP
7693
7694 AT_SETUP([expressions - VALUELABEL])
7695 AT_DATA([valuelabel.sps], [dnl
7696 DATA LIST notable /n 1 s 2(a).
7697 VALUE LABELS /n 0 'Very dissatisfied'
7698                 1 'Dissatisfied'
7699                 1.5 'Slightly Peeved'
7700                 2 'Neutral'
7701                 3 'Satisfied'
7702                 4 'Very satisfied'.
7703 VALUE LABELS /s 'a' 'Wouldn''t buy again'
7704                 'b' 'Unhappy'
7705                 'c' 'Bored'
7706                 'd' 'Satiated'
7707                 'e' 'Elated'.
7708 STRING nlabel slabel(a10).
7709 COMPUTE nlabel = VALUELABEL(n).
7710 COMPUTE slabel = VALUELABEL(s).
7711 LIST.
7712 BEGIN DATA.
7713
7714 0a
7715 1b
7716 2c
7717 3d
7718 4e
7719 5f
7720 6g
7721 END DATA.
7722 ])
7723 AT_CHECK([pspp -o pspp.csv valuelabel.sps])
7724 AT_CHECK([cat pspp.csv], [0], [dnl
7725 Table: Data List
7726 n,s,nlabel,slabel
7727 .,,,
7728 0,a,Very dissa,Wouldn't b
7729 1,b,Dissatisfi,Unhappy
7730 2,c,Neutral,Bored
7731 3,d,Satisfied,Satiated
7732 4,e,Very satis,Elated
7733 5,f,,
7734 6,g,,
7735 ])
7736 AT_CLEANUP
7737
7738 AT_SETUP([expressions - variables])
7739 AT_DATA([variables.sps], [dnl
7740 DATA LIST NOTABLE/N1 TO N5 1-5.
7741 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
7742 BEGIN DATA.
7743 12345
7744 6789
7745 END DATA.
7746
7747 COMPUTE P1=N1.
7748 COMPUTE P2=N2.
7749 COMPUTE P3=N3.
7750 COMPUTE P4=N4.
7751 COMPUTE P5=N5.
7752
7753 COMPUTE MC=NMISS(N1 TO N5).
7754 COMPUTE VC=NVALID(N1 TO N5).
7755
7756 COMPUTE S1=SYSMIS(N1).
7757 COMPUTE S2=SYSMIS(N2).
7758 COMPUTE S3=SYSMIS(N3).
7759 COMPUTE S4=SYSMIS(N4).
7760 COMPUTE S5=SYSMIS(N5).
7761
7762 COMPUTE M1=MISSING(N1).
7763 COMPUTE M2=MISSING(N2).
7764 COMPUTE M3=MISSING(N3).
7765 COMPUTE M4=MISSING(N4).
7766 COMPUTE M5=MISSING(N5).
7767
7768 COMPUTE V1=VALUE(N1).
7769 COMPUTE V2=VALUE(N2).
7770 COMPUTE V3=VALUE(N3).
7771 COMPUTE V4=VALUE(N4).
7772 COMPUTE V5=VALUE(N5).
7773
7774 FORMATS ALL (F1).
7775
7776 LIST.
7777 ])
7778 AT_CHECK([pspp -o pspp.csv variables.sps])
7779 AT_CHECK([cat pspp.csv], [0], [dnl
7780 Table: Data List
7781 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
7782 1,2,3,4,5,.,2,.,.,.,4,1,0,0,0,0,0,1,0,1,1,1,1,2,3,4,5
7783 6,7,8,9,.,6,7,8,9,.,1,4,0,0,0,0,1,0,0,0,0,1,6,7,8,9,.
7784 ])
7785 AT_CLEANUP
7786
7787 AT_SETUP([expressions - vectors])
7788 AT_DATA([vectors.sps], [dnl
7789 DATA LIST NOTABLE /N1 TO N5 1-5.
7790 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
7791 BEGIN DATA.
7792 12345
7793 6789
7794 END DATA.
7795
7796 VECTOR N=N1 TO N5.
7797 VECTOR X(5).
7798 LOOP I=1 TO 5.
7799 COMPUTE X(I)=N(I) + 1.
7800 END LOOP.
7801
7802 FORMATS ALL (F2).
7803
7804 LIST.
7805 ])
7806 AT_CHECK([pspp -o pspp.csv vectors.sps])
7807 AT_CHECK([cat pspp.csv], [0], [dnl
7808 Table: Data List
7809 N1,N2,N3,N4,N5,X1,X2,X3,X4,X5,I
7810 1,2,3,4,5,.,3,.,.,.,5
7811 6,7,8,9,.,7,8,9,10,.,5
7812 ])
7813 AT_CLEANUP