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