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