lots of tests
[pspp] / tests / language / expressions / evaluate.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
3 dnl
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 AT_BANNER([expressions])
17
18 AT_SETUP([expressions - numeric syntax])
19 AT_KEYWORDS([expression expressions evaluate])
20 AT_DATA([evaluate-base.sps], [
21 DEBUG EVALUATE SET opt.
22 DEBUG EVALUATE /1e2.
23 DEBUG EVALUATE /1e+2.
24 DEBUG EVALUATE /1e-2.
25 DEBUG EVALUATE /1e-99.
26 ])
27
28 for opt in OPT NOOPT; do
29     AS_BOX([$opt])
30     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
31     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
32 1e2 => 100.00
33
34 1e+2 => 100.00
35
36 1e-2 => 0.01
37
38 1e-99 => 0.00
39 ])
40 done
41 AT_CLEANUP
42
43 AT_SETUP([expressions - coercion to and from Boolean])
44 AT_KEYWORDS([expression expressions evaluate])
45 AT_DATA([evaluate-base.sps], [
46 DEBUG EVALUATE SET opt.
47 DEBUG EVALUATE/0 AND 1.
48 DEBUG EVALUATE/$true AND 1.
49 DEBUG EVALUATE/1 OR $false.
50 DEBUG EVALUATE/1 OR $sysmis.
51 DEBUG EVALUATE/2 OR $sysmis.
52 DEBUG EVALUATE/1 AND 3.
53 ])
54
55 for opt in OPT NOOPT; do
56     AS_BOX([$opt])
57     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
58     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
59 0 AND 1 => false
60
61 $true AND 1 => true
62
63 1 OR $false => true
64
65 1 OR $sysmis => true
66
67 evaluate.sps:7.16-7.27: error: DEBUG EVALUATE: The operands of OR must have
68 value 0 or 1.
69     7 | DEBUG EVALUATE/2 OR $sysmis.
70       |                ^~~~~~~~~~~~
71
72 evaluate.sps:7.16: note: DEBUG EVALUATE: This operand with unexpected value 2
73 will be treated as 0.
74     7 | DEBUG EVALUATE/2 OR $sysmis.
75       |                ^
76
77 2 OR $sysmis => sysmis
78
79 evaluate.sps:8.16-8.22: error: DEBUG EVALUATE: The operands of AND must have
80 value 0 or 1.
81     8 | DEBUG EVALUATE/1 AND 3.
82       |                ^~~~~~~
83
84 evaluate.sps:8.22: note: DEBUG EVALUATE: This operand with unexpected value 3
85 will be treated as 0.
86     8 | DEBUG EVALUATE/1 AND 3.
87       |                      ^
88
89 1 AND 3 => false
90 ])
91 done
92 AT_CLEANUP
93
94 AT_SETUP([expressions - addition and subtraction])
95 AT_KEYWORDS([expression expressions evaluate])
96 AT_DATA([evaluate-base.sps], [
97 DEBUG EVALUATE SET opt.
98 DEBUG EVALUATE /1 + $true.
99 DEBUG EVALUATE /$sysmis + 1.
100 DEBUG EVALUATE /7676 + $sysmis.
101 DEBUG EVALUATE /1 +3 - 2 +4 - 5.
102 DEBUG EVALUATE /$true - 4/3.
103 DEBUG EVALUATE /1 - 2.
104 DEBUG EVALUATE /52 -23.
105
106 DEBUG EVALUATE /('foo') + 5.
107 DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
108 DEBUG EVALUATE /'foo' + 'bar'.       /* Lexical concatenation succeeds.
109
110 DEBUG EVALUATE /'string' - 1e10.
111 DEBUG EVALUATE /9.5 - ''.
112
113 DEBUG EVALUATE /F2.0 + 3.
114 ])
115
116 for opt in OPT NOOPT; do
117     AS_BOX([$opt])
118     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
119     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
120 1 + $true => 2.00
121
122 $sysmis + 1 => sysmis
123
124 7676 + $sysmis => sysmis
125
126 1 +3 - 2 +4 - 5 => 1.00
127
128 $true - 4/3 => -0.33
129
130 1 - 2 => -1.00
131
132 52 -23 => 29.00
133
134 evaluate.sps:11.18-11.27: error: DEBUG EVALUATE: Both operands of + must be
135 numeric.
136    11 | DEBUG EVALUATE /('foo') + 5.
137       |                  ^~~~~~~~~~
138
139 evaluate.sps:11.18-11.22: note: DEBUG EVALUATE: This operand has type 'string'.
140    11 | DEBUG EVALUATE /('foo') + 5.
141       |                  ^~~~~
142
143 evaluate.sps:11.27: note: DEBUG EVALUATE: This operand has type 'number'.
144    11 | DEBUG EVALUATE /('foo') + 5.
145       |                           ^
146
147 ('foo') + 5 => error
148
149 evaluate.sps:12.18-12.32: error: DEBUG EVALUATE: Both operands of + must be
150 numeric.
151    12 | DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
152       |                  ^~~~~~~~~~~~~~~
153
154 evaluate.sps:12.18-12.22: note: DEBUG EVALUATE: This operand has type 'string'.
155    12 | DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
156       |                  ^~~~~
157
158 evaluate.sps:12.28-12.32: note: DEBUG EVALUATE: This operand has type 'string'.
159    12 | DEBUG EVALUATE /('foo') + ('bar').   /* Concatenation requires CONCAT.
160       |                            ^~~~~
161
162 ('foo') + ('bar') => error
163
164 'foo' + 'bar' => "foobar"
165
166 evaluate.sps:15.17-15.31: error: DEBUG EVALUATE: Both operands of - must be
167 numeric.
168    15 | DEBUG EVALUATE /'string' - 1e10.
169       |                 ^~~~~~~~~~~~~~~
170
171 evaluate.sps:15.17-15.24: note: DEBUG EVALUATE: This operand has type 'string'.
172    15 | DEBUG EVALUATE /'string' - 1e10.
173       |                 ^~~~~~~~
174
175 evaluate.sps:15.26-15.31: note: DEBUG EVALUATE: This operand has type 'number'.
176    15 | DEBUG EVALUATE /'string' - 1e10.
177       |                          ^~~~~~
178
179 'string' - 1e10 => error
180
181 evaluate.sps:16.17-16.24: error: DEBUG EVALUATE: Both operands of - must be
182 numeric.
183    16 | DEBUG EVALUATE /9.5 - ''.
184       |                 ^~~~~~~~
185
186 evaluate.sps:16.17-16.19: note: DEBUG EVALUATE: This operand has type 'number'.
187    16 | DEBUG EVALUATE /9.5 - ''.
188       |                 ^~~
189
190 evaluate.sps:16.23-16.24: note: DEBUG EVALUATE: This operand has type 'string'.
191    16 | DEBUG EVALUATE /9.5 - ''.
192       |                       ^~
193
194 9.5 - '' => error
195
196 evaluate.sps:18.17-18.24: error: DEBUG EVALUATE: Both operands of + must be
197 numeric.
198    18 | DEBUG EVALUATE /F2.0 + 3.
199       |                 ^~~~~~~~
200
201 evaluate.sps:18.17-18.20: note: DEBUG EVALUATE: This operand has type 'format'.
202    18 | DEBUG EVALUATE /F2.0 + 3.
203       |                 ^~~~
204
205 evaluate.sps:18.24: note: DEBUG EVALUATE: This operand has type 'number'.
206    18 | DEBUG EVALUATE /F2.0 + 3.
207       |                        ^
208
209 F2.0 + 3 => error
210 ])
211 done
212 AT_CLEANUP
213
214 AT_SETUP([expressions - multiplication and division])
215 AT_KEYWORDS([expression expressions evaluate])
216 AT_DATA([evaluate-base.sps], [
217 DEBUG EVALUATE SET opt.
218 DEBUG EVALUATE /5 * 10.
219 DEBUG EVALUATE /10 * $true.
220 DEBUG EVALUATE /$true * 5.
221 DEBUG EVALUATE /1.5 * $true.
222 DEBUG EVALUATE /$sysmis * 15.
223 DEBUG EVALUATE /8.5 / $sysmis.
224 DEBUG EVALUATE /2 * 5 / 10.
225 DEBUG EVALUATE /1 / 2.
226 DEBUG EVALUATE /2 / 5.
227 DEBUG EVALUATE /12 / 3 / 2.
228
229 DEBUG EVALUATE /'x' * 1.
230 DEBUG EVALUATE /2 / 'x'.
231 ])
232
233 for opt in OPT NOOPT; do
234     AS_BOX([$opt])
235     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
236     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
237 5 * 10 => 50.00
238
239 10 * $true => 10.00
240
241 $true * 5 => 5.00
242
243 1.5 * $true => 1.50
244
245 $sysmis * 15 => sysmis
246
247 8.5 / $sysmis => sysmis
248
249 2 * 5 / 10 => 1.00
250
251 1 / 2 => 0.50
252
253 2 / 5 => 0.40
254
255 12 / 3 / 2 => 2.00
256
257 evaluate.sps:14.17-14.23: error: DEBUG EVALUATE: Both operands of * must be
258 numeric.
259    14 | DEBUG EVALUATE /'x' * 1.
260       |                 ^~~~~~~
261
262 evaluate.sps:14.17-14.19: note: DEBUG EVALUATE: This operand has type 'string'.
263    14 | DEBUG EVALUATE /'x' * 1.
264       |                 ^~~
265
266 evaluate.sps:14.23: note: DEBUG EVALUATE: This operand has type 'number'.
267    14 | DEBUG EVALUATE /'x' * 1.
268       |                       ^
269
270 'x' * 1 => error
271
272 evaluate.sps:15.17-15.23: error: DEBUG EVALUATE: Both operands of / must be
273 numeric.
274    15 | DEBUG EVALUATE /2 / 'x'.
275       |                 ^~~~~~~
276
277 evaluate.sps:15.17: note: DEBUG EVALUATE: This operand has type 'number'.
278    15 | DEBUG EVALUATE /2 / 'x'.
279       |                 ^
280
281 evaluate.sps:15.21-15.23: note: DEBUG EVALUATE: This operand has type 'string'.
282    15 | DEBUG EVALUATE /2 / 'x'.
283       |                     ^~~
284
285 2 / 'x' => error
286 ])
287 done
288 AT_CLEANUP
289
290 AT_SETUP([expressions - exponentiation])
291 AT_KEYWORDS([expression expressions evaluate])
292 AT_DATA([evaluate-base.sps], [
293 DEBUG EVALUATE SET opt.
294 DEBUG EVALUATE /2**8.
295 DEBUG EVALUATE /(2**3)**4.
296 DEBUG EVALUATE /2**3**4.
297 DEBUG EVALUATE /-2**2.
298 DEBUG EVALUATE /-2**-3**-4.
299 DEBUG EVALUATE /-((2**-3)**-4).
300 ])
301
302 for opt in OPT NOOPT; do
303     AS_BOX([$opt])
304     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
305     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
306 2**8 => 256.00
307
308 (2**3)**4 => 4096.00
309
310 evaluate.sps:5.17-5.23: warning: DEBUG EVALUATE: The exponentiation operator
311 (`**') is left-associative: `a**b**c' equals `(a**b)**c', not `a**(b**c)'.  To
312 disable this warning, insert parentheses.
313     5 | DEBUG EVALUATE /2**3**4.
314       |                 ^~~~~~~
315
316 2**3**4 => 4096.00
317
318 -2**2 => -4.00
319
320 evaluate.sps:7.17-7.26: warning: DEBUG EVALUATE: The exponentiation operator
321 (`**') is left-associative: `a**b**c' equals `(a**b)**c', not `a**(b**c)'.  To
322 disable this warning, insert parentheses.
323     7 | DEBUG EVALUATE /-2**-3**-4.
324       |                 ^~~~~~~~~~
325
326 -2**-3**-4 => -4096.00
327
328 -((2**-3)**-4) => -4096.00
329 ])
330 done
331 AT_CLEANUP
332
333 AT_SETUP([expressions - unary minus])
334 AT_KEYWORDS([expression expressions evaluate])
335 AT_DATA([evaluate-base.sps], [
336 DEBUG EVALUATE SET opt.
337 DEBUG EVALUATE /2+-3.
338 DEBUG EVALUATE /2*-3.
339 DEBUG EVALUATE /-3**2.
340 DEBUG EVALUATE /(-3)**2.
341 DEBUG EVALUATE /-(3**2).
342 DEBUG EVALUATE /2**-1.
343 DEBUG EVALUATE /0**0.
344 DEBUG EVALUATE /0**-1.
345 DEBUG EVALUATE /(-3)**1.5.
346 ])
347
348 for opt in OPT NOOPT; do
349     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
350     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
351 2+-3 => -1.00
352
353 2*-3 => -6.00
354
355 -3**2 => -9.00
356
357 (-3)**2 => 9.00
358
359 -(3**2) => -9.00
360
361 2**-1 => 0.50
362
363 0**0 => sysmis
364
365 0**-1 => sysmis
366
367 (-3)**1.5 => sysmis
368 ])
369 done
370 AT_CLEANUP
371
372 AT_SETUP([expressions - AND truth table])
373 AT_KEYWORDS([expression expressions evaluate])
374 AT_DATA([evaluate-base.sps], [
375 DEBUG EVALUATE SET opt.
376 DEBUG EVALUATE /$false AND $false.
377 DEBUG EVALUATE /$false AND $true.
378 DEBUG EVALUATE /$false AND $sysmis.
379 DEBUG EVALUATE /$true AND $false.
380 DEBUG EVALUATE /$true AND $true.
381 DEBUG EVALUATE /$true AND $sysmis.
382 DEBUG EVALUATE /$sysmis AND $false.
383 DEBUG EVALUATE /$sysmis AND $true.
384 DEBUG EVALUATE /$sysmis AND $sysmis.
385 DEBUG EVALUATE /$false & $false.
386 DEBUG EVALUATE /$false & $true.
387 DEBUG EVALUATE /$false & $sysmis.
388 DEBUG EVALUATE /$true & $false.
389 DEBUG EVALUATE /$true & $true.
390 DEBUG EVALUATE /$true & $sysmis.
391 DEBUG EVALUATE /$sysmis & $false.
392 DEBUG EVALUATE /$sysmis & $true.
393 DEBUG EVALUATE /$sysmis & $sysmis.
394 ])
395
396 for opt in OPT NOOPT; do
397     AS_BOX([$opt])
398     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
399     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
400 $false AND $false => false
401
402 $false AND $true => false
403
404 $false AND $sysmis => false
405
406 $true AND $false => false
407
408 $true AND $true => true
409
410 $true AND $sysmis => sysmis
411
412 $sysmis AND $false => false
413
414 $sysmis AND $true => sysmis
415
416 $sysmis AND $sysmis => sysmis
417
418 $false & $false => false
419
420 $false & $true => false
421
422 $false & $sysmis => false
423
424 $true & $false => false
425
426 $true & $true => true
427
428 $true & $sysmis => sysmis
429
430 $sysmis & $false => false
431
432 $sysmis & $true => sysmis
433
434 $sysmis & $sysmis => sysmis
435 ])
436 done
437 AT_CLEANUP
438
439 AT_SETUP([expressions - OR truth table])
440 AT_KEYWORDS([expression expressions evaluate])
441 AT_DATA([evaluate-base.sps], [
442 DEBUG EVALUATE SET opt.
443 DEBUG EVALUATE /$false OR $false.
444 DEBUG EVALUATE /$false OR $true.
445 DEBUG EVALUATE /$false OR $sysmis.
446 DEBUG EVALUATE /$true OR $false.
447 DEBUG EVALUATE /$true OR $true.
448 DEBUG EVALUATE /$true OR $sysmis.
449 DEBUG EVALUATE /$sysmis OR $false.
450 DEBUG EVALUATE /$sysmis OR $true.
451 DEBUG EVALUATE /$sysmis OR $sysmis.
452 DEBUG EVALUATE /$false | $false.
453 DEBUG EVALUATE /$false | $true.
454 DEBUG EVALUATE /$false | $sysmis.
455 DEBUG EVALUATE /$true | $false.
456 DEBUG EVALUATE /$true | $true.
457 DEBUG EVALUATE /$true | $sysmis.
458 DEBUG EVALUATE /$sysmis | $false.
459 DEBUG EVALUATE /$sysmis | $true.
460 DEBUG EVALUATE /$sysmis | $sysmis.
461 ])
462
463 for opt in OPT NOOPT; do
464     AS_BOX([$opt])
465     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
466     AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
467 $false OR $false => false
468
469 $false OR $true => true
470
471 $false OR $sysmis => sysmis
472
473 $true OR $false => true
474
475 $true OR $true => true
476
477 $true OR $sysmis => true
478
479 $sysmis OR $false => sysmis
480
481 $sysmis OR $true => true
482
483 $sysmis OR $sysmis => sysmis
484
485 $false | $false => false
486
487 $false | $true => true
488
489 $false | $sysmis => sysmis
490
491 $true | $false => true
492
493 $true | $true => true
494
495 $true | $sysmis => true
496
497 $sysmis | $false => sysmis
498
499 $sysmis | $true => true
500
501 $sysmis | $sysmis => sysmis
502 ])
503 done
504 AT_CLEANUP
505
506 AT_SETUP([expressions - NOT truth table])
507 AT_KEYWORDS([expression expressions evaluate])
508 AT_DATA([evaluate-base.sps], [
509 DEBUG EVALUATE SET opt.
510 DEBUG EVALUATE /not $false.
511 DEBUG EVALUATE /not 0.
512 DEBUG EVALUATE /not 2.5.
513 DEBUG EVALUATE /not $true.
514 DEBUG EVALUATE /not 1.
515 DEBUG EVALUATE /not $sysmis.
516 DEBUG EVALUATE /~ $false.
517 DEBUG EVALUATE /~ 0.
518 DEBUG EVALUATE /~ 2.5.
519 DEBUG EVALUATE /~ $true.
520 DEBUG EVALUATE /~ 1.
521 DEBUG EVALUATE /~ $sysmis.
522 ])
523
524 for opt in OPT NOOPT; do
525     AS_BOX([$opt])
526     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
527     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
528 not $false => true
529
530 not 0 => true
531
532 evaluate.sps:5.17-5.23: error: DEBUG EVALUATE: The operand of NOT must have
533 value 0 or 1.
534     5 | DEBUG EVALUATE /not 2.5.
535       |                 ^~~~~~~
536
537 evaluate.sps:5.21-5.23: note: DEBUG EVALUATE: This operand with unexpected
538 value 2.5 will be treated as 0.
539     5 | DEBUG EVALUATE /not 2.5.
540       |                     ^~~
541
542 not 2.5 => true
543
544 not $true => false
545
546 not 1 => false
547
548 not $sysmis => sysmis
549
550 ~ $false => true
551
552 ~ 0 => true
553
554 evaluate.sps:11.17-11.21: error: DEBUG EVALUATE: The operand of NOT must have
555 value 0 or 1.
556    11 | DEBUG EVALUATE /~ 2.5.
557       |                 ^~~~~
558
559 evaluate.sps:11.19-11.21: note: DEBUG EVALUATE: This operand with unexpected
560 value 2.5 will be treated as 0.
561    11 | DEBUG EVALUATE /~ 2.5.
562       |                   ^~~
563
564 ~ 2.5 => true
565
566 ~ $true => false
567
568 ~ 1 => false
569
570 ~ $sysmis => sysmis
571 ])
572 done
573 AT_CLEANUP
574
575 AT_SETUP([expressions - = <= <])
576 AT_KEYWORDS([expression expressions evaluate eq le lt])
577 AT_DATA([evaluate-base.sps], [
578 DEBUG EVALUATE SET opt.
579 DEBUG EVALUATE /1 eq 1.
580 DEBUG EVALUATE /1 = 1.
581 DEBUG EVALUATE /1 eq 2.
582 DEBUG EVALUATE /2 = 3.
583 DEBUG EVALUATE /1 eq 'foobar'.
584 DEBUG EVALUATE /'baz' = 10.
585 DEBUG EVALUATE /'baz' = f8.2.
586 DEBUG EVALUATE /'baz' = 'baz'.
587 DEBUG EVALUATE /'quux' = 'bar'.
588 DEBUG EVALUATE /'bar  ' = 'bar'.
589 DEBUG EVALUATE /'asdf     ' = 'asdf  '.
590 DEBUG EVALUATE /'asdfj     ' = 'asdf'.
591 DEBUG EVALUATE /1 + 2 = 3.
592 DEBUG EVALUATE /1 >= 2 = 2 ge 3.
593 DEBUG EVALUATE /3 ne 2 != 1.
594 DEBUG EVALUATE /3 > 2 > 1.
595
596 DEBUG EVALUATE /1 <= 2.
597 DEBUG EVALUATE /2.5 <= 1.5.
598 DEBUG EVALUATE /1 le 2.
599 DEBUG EVALUATE /2 <= 2.
600 DEBUG EVALUATE /2 le 2.
601 DEBUG EVALUATE /2 < = 2.
602 DEBUG EVALUATE /1 <= 'foobar'.
603 DEBUG EVALUATE /'baz' <= 10.
604 DEBUG EVALUATE /'quux' <= 5.55.
605 DEBUG EVALUATE /'0123' <= '0123'.
606 DEBUG EVALUATE /'0123' <= '0124'.
607 DEBUG EVALUATE /'0124' le '0123'.
608 DEBUG EVALUATE /'0123  ' <= '0123'.
609 DEBUG EVALUATE /'0123' le '0123  '.
610
611 DEBUG EVALUATE /1 < 2.
612 DEBUG EVALUATE /2.5 < 1.5.
613 DEBUG EVALUATE /3.5 lt 4.
614 DEBUG EVALUATE /4 lt 3.5
615 DEBUG EVALUATE /1 lt 'foobar'.
616 DEBUG EVALUATE /5 lt 'foobar'.
617 DEBUG EVALUATE /'baz' < 10.
618 DEBUG EVALUATE /'quux' < 5.55.
619 DEBUG EVALUATE /'0123' lt '0123'.
620 DEBUG EVALUATE /'0123' < '0124'.
621 DEBUG EVALUATE /'0124' lt '0123'.
622 DEBUG EVALUATE /'0123  ' < '0123'.
623 DEBUG EVALUATE /'0123' lt '0123  '.
624 ])
625
626 for opt in OPT NOOPT; do
627     AS_BOX([$opt])
628     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
629     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
630 1 eq 1 => true
631
632 1 = 1 => true
633
634 1 eq 2 => false
635
636 2 = 3 => false
637
638 evaluate.sps:7.17-7.29: error: DEBUG EVALUATE: Both operands of EQ must have
639 the same type.
640     7 | DEBUG EVALUATE /1 eq 'foobar'.
641       |                 ^~~~~~~~~~~~~
642
643 evaluate.sps:7.17: note: DEBUG EVALUATE: This operand has type 'number'.
644     7 | DEBUG EVALUATE /1 eq 'foobar'.
645       |                 ^
646
647 evaluate.sps:7.22-7.29: note: DEBUG EVALUATE: This operand has type 'string'.
648     7 | DEBUG EVALUATE /1 eq 'foobar'.
649       |                      ^~~~~~~~
650
651 1 eq 'foobar' => error
652
653 evaluate.sps:8.17-8.26: error: DEBUG EVALUATE: Both operands of = must have the
654 same type.
655     8 | DEBUG EVALUATE /'baz' = 10.
656       |                 ^~~~~~~~~~
657
658 evaluate.sps:8.17-8.21: note: DEBUG EVALUATE: This operand has type 'string'.
659     8 | DEBUG EVALUATE /'baz' = 10.
660       |                 ^~~~~
661
662 evaluate.sps:8.25-8.26: note: DEBUG EVALUATE: This operand has type 'number'.
663     8 | DEBUG EVALUATE /'baz' = 10.
664       |                         ^~
665
666 'baz' = 10 => error
667
668 evaluate.sps:9.17-9.28: error: DEBUG EVALUATE: Both operands of = must have the
669 same type.
670     9 | DEBUG EVALUATE /'baz' = f8.2.
671       |                 ^~~~~~~~~~~~
672
673 evaluate.sps:9.17-9.21: note: DEBUG EVALUATE: This operand has type 'string'.
674     9 | DEBUG EVALUATE /'baz' = f8.2.
675       |                 ^~~~~
676
677 evaluate.sps:9.25-9.28: note: DEBUG EVALUATE: This operand has type 'format'.
678     9 | DEBUG EVALUATE /'baz' = f8.2.
679       |                         ^~~~
680
681 'baz' = f8.2 => error
682
683 'baz' = 'baz' => true
684
685 'quux' = 'bar' => false
686
687 'bar  ' = 'bar' => true
688
689 'asdf     ' = 'asdf  ' => true
690
691 'asdfj     ' = 'asdf' => false
692
693 1 + 2 = 3 => true
694
695 evaluate.sps:16.17-16.31: warning: DEBUG EVALUATE: Chaining relational
696 operators (e.g. `a < b < c') will not produce the mathematically expected
697 result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b <
698 c').  To disable this warning, insert parentheses.
699    16 | DEBUG EVALUATE /1 >= 2 = 2 ge 3.
700       |                 ^~~~~~~~~~~~~~~
701
702 1 >= 2 = 2 ge 3 => false
703
704 evaluate.sps:17.24: error: DEBUG EVALUATE: Syntax error at `!': expecting end
705 of command.
706
707 3 ne 2 != 1 => error
708
709 evaluate.sps:18.17-18.25: warning: DEBUG EVALUATE: Chaining relational
710 operators (e.g. `a < b < c') will not produce the mathematically expected
711 result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b <
712 c').  To disable this warning, insert parentheses.
713    18 | DEBUG EVALUATE /3 > 2 > 1.
714       |                 ^~~~~~~~~
715
716 3 > 2 > 1 => false
717
718 1 <= 2 => true
719
720 2.5 <= 1.5 => false
721
722 1 le 2 => true
723
724 2 <= 2 => true
725
726 2 le 2 => true
727
728 evaluate.sps:25.21: error: DEBUG EVALUATE: Syntax error at `='.
729
730 2 < = 2 => error
731
732 evaluate.sps:26.17-26.29: error: DEBUG EVALUATE: Both operands of <= must have
733 the same type.
734    26 | DEBUG EVALUATE /1 <= 'foobar'.
735       |                 ^~~~~~~~~~~~~
736
737 evaluate.sps:26.17: note: DEBUG EVALUATE: This operand has type 'number'.
738    26 | DEBUG EVALUATE /1 <= 'foobar'.
739       |                 ^
740
741 evaluate.sps:26.22-26.29: note: DEBUG EVALUATE: This operand has type 'string'.
742    26 | DEBUG EVALUATE /1 <= 'foobar'.
743       |                      ^~~~~~~~
744
745 1 <= 'foobar' => error
746
747 evaluate.sps:27.17-27.27: error: DEBUG EVALUATE: Both operands of <= must have
748 the same type.
749    27 | DEBUG EVALUATE /'baz' <= 10.
750       |                 ^~~~~~~~~~~
751
752 evaluate.sps:27.17-27.21: note: DEBUG EVALUATE: This operand has type 'string'.
753    27 | DEBUG EVALUATE /'baz' <= 10.
754       |                 ^~~~~
755
756 evaluate.sps:27.26-27.27: note: DEBUG EVALUATE: This operand has type 'number'.
757    27 | DEBUG EVALUATE /'baz' <= 10.
758       |                          ^~
759
760 'baz' <= 10 => error
761
762 evaluate.sps:28.17-28.30: error: DEBUG EVALUATE: Both operands of <= must have
763 the same type.
764    28 | DEBUG EVALUATE /'quux' <= 5.55.
765       |                 ^~~~~~~~~~~~~~
766
767 evaluate.sps:28.17-28.22: note: DEBUG EVALUATE: This operand has type 'string'.
768    28 | DEBUG EVALUATE /'quux' <= 5.55.
769       |                 ^~~~~~
770
771 evaluate.sps:28.27-28.30: note: DEBUG EVALUATE: This operand has type 'number'.
772    28 | DEBUG EVALUATE /'quux' <= 5.55.
773       |                           ^~~~
774
775 'quux' <= 5.55 => error
776
777 '0123' <= '0123' => true
778
779 '0123' <= '0124' => true
780
781 '0124' le '0123' => false
782
783 '0123  ' <= '0123' => true
784
785 '0123' le '0123  ' => true
786
787 1 < 2 => true
788
789 2.5 < 1.5 => false
790
791 3.5 lt 4 => true
792
793 4 lt 3.5 => false
794
795 evaluate.sps:39.17-39.29: error: DEBUG EVALUATE: Both operands of < must have
796 the same type.
797    39 | DEBUG EVALUATE /1 lt 'foobar'.
798       |                 ^~~~~~~~~~~~~
799
800 evaluate.sps:39.17: note: DEBUG EVALUATE: This operand has type 'number'.
801    39 | DEBUG EVALUATE /1 lt 'foobar'.
802       |                 ^
803
804 evaluate.sps:39.22-39.29: note: DEBUG EVALUATE: This operand has type 'string'.
805    39 | DEBUG EVALUATE /1 lt 'foobar'.
806       |                      ^~~~~~~~
807
808 1 lt 'foobar' => error
809
810 evaluate.sps:40.17-40.29: error: DEBUG EVALUATE: Both operands of < must have
811 the same type.
812    40 | DEBUG EVALUATE /5 lt 'foobar'.
813       |                 ^~~~~~~~~~~~~
814
815 evaluate.sps:40.17: note: DEBUG EVALUATE: This operand has type 'number'.
816    40 | DEBUG EVALUATE /5 lt 'foobar'.
817       |                 ^
818
819 evaluate.sps:40.22-40.29: note: DEBUG EVALUATE: This operand has type 'string'.
820    40 | DEBUG EVALUATE /5 lt 'foobar'.
821       |                      ^~~~~~~~
822
823 5 lt 'foobar' => error
824
825 evaluate.sps:41.17-41.26: error: DEBUG EVALUATE: Both operands of < must have
826 the same type.
827    41 | DEBUG EVALUATE /'baz' < 10.
828       |                 ^~~~~~~~~~
829
830 evaluate.sps:41.17-41.21: note: DEBUG EVALUATE: This operand has type 'string'.
831    41 | DEBUG EVALUATE /'baz' < 10.
832       |                 ^~~~~
833
834 evaluate.sps:41.25-41.26: note: DEBUG EVALUATE: This operand has type 'number'.
835    41 | DEBUG EVALUATE /'baz' < 10.
836       |                         ^~
837
838 'baz' < 10 => error
839
840 evaluate.sps:42.17-42.29: error: DEBUG EVALUATE: Both operands of < must have
841 the same type.
842    42 | DEBUG EVALUATE /'quux' < 5.55.
843       |                 ^~~~~~~~~~~~~
844
845 evaluate.sps:42.17-42.22: note: DEBUG EVALUATE: This operand has type 'string'.
846    42 | DEBUG EVALUATE /'quux' < 5.55.
847       |                 ^~~~~~
848
849 evaluate.sps:42.26-42.29: note: DEBUG EVALUATE: This operand has type 'number'.
850    42 | DEBUG EVALUATE /'quux' < 5.55.
851       |                          ^~~~
852
853 'quux' < 5.55 => error
854
855 '0123' lt '0123' => false
856
857 '0123' < '0124' => true
858
859 '0124' lt '0123' => false
860
861 '0123  ' < '0123' => false
862
863 '0123' lt '0123  ' => false
864 ])
865 done
866 AT_CLEANUP
867
868 AT_SETUP([expressions - >= > <>])
869 AT_KEYWORDS([expression expressions evaluate ge gt ne])
870 AT_DATA([evaluate-base.sps], [
871 DEBUG EVALUATE SET opt.
872 DEBUG EVALUATE /1 >= 2.
873 DEBUG EVALUATE /2.5 >= 1.5
874 DEBUG EVALUATE /1 ge 2.
875 DEBUG EVALUATE /2 >= 2.
876 DEBUG EVALUATE /2 ge 2.
877 DEBUG EVALUATE /2 > = 2.
878 DEBUG EVALUATE /1 >= 'foobar'.
879 DEBUG EVALUATE /5 ge 'foobar'.
880 DEBUG EVALUATE /'baz' ge 10.
881 DEBUG EVALUATE /'0123' ge '0123'.
882 DEBUG EVALUATE /'0123' >= '0124'.
883 DEBUG EVALUATE /'0124' >= '0123'.
884 DEBUG EVALUATE /'0123  ' ge '0123'.
885 DEBUG EVALUATE /'0123' >= '0123 '.
886
887 DEBUG EVALUATE /1 > 2.
888 DEBUG EVALUATE /2.5 > 1.5
889 DEBUG EVALUATE /3.5 gt 4.
890 DEBUG EVALUATE /4 gt 3.5
891 DEBUG EVALUATE /1 gt 'foobar'.
892 DEBUG EVALUATE /'baz' > 10.
893 DEBUG EVALUATE /'0123' > '0123'.
894 DEBUG EVALUATE /'0123' > '0124'.
895 DEBUG EVALUATE /'0124' > '0123'.
896 DEBUG EVALUATE /'0123   ' > '0123'.
897 DEBUG EVALUATE /'0123    ' > '0123 '.
898
899 DEBUG EVALUATE /1 ne 1.
900 DEBUG EVALUATE /1 ~= 1.
901 DEBUG EVALUATE /1 <> 2.
902 DEBUG EVALUATE /2 ne 3.
903 DEBUG EVALUATE /1 ~= 'foobar'.
904 DEBUG EVALUATE /'baz' ne 10.
905 DEBUG EVALUATE /'quux' ~= 5.55.
906 DEBUG EVALUATE /'foobar' <> 'foobar'.
907 DEBUG EVALUATE /'quux' ne 'bar'.
908 DEBUG EVALUATE /'bar   ' <> 'bar'.
909 DEBUG EVALUATE /'asdf       ' ~= "asdf   ".
910 DEBUG EVALUATE /1 < > 1.
911 DEBUG EVALUATE /1 ~ = 1.
912 ])
913
914 for opt in OPT NOOPT; do
915     AS_BOX([$opt])
916     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
917     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
918 1 >= 2 => false
919
920 2.5 >= 1.5 => true
921
922 1 ge 2 => false
923
924 2 >= 2 => true
925
926 2 ge 2 => true
927
928 evaluate.sps:8.21: error: DEBUG EVALUATE: Syntax error at `='.
929
930 2 > = 2 => error
931
932 evaluate.sps:9.17-9.29: error: DEBUG EVALUATE: Both operands of >= must have
933 the same type.
934     9 | DEBUG EVALUATE /1 >= 'foobar'.
935       |                 ^~~~~~~~~~~~~
936
937 evaluate.sps:9.17: note: DEBUG EVALUATE: This operand has type 'number'.
938     9 | DEBUG EVALUATE /1 >= 'foobar'.
939       |                 ^
940
941 evaluate.sps:9.22-9.29: note: DEBUG EVALUATE: This operand has type 'string'.
942     9 | DEBUG EVALUATE /1 >= 'foobar'.
943       |                      ^~~~~~~~
944
945 1 >= 'foobar' => error
946
947 evaluate.sps:10.17-10.29: error: DEBUG EVALUATE: Both operands of >= must have
948 the same type.
949    10 | DEBUG EVALUATE /5 ge 'foobar'.
950       |                 ^~~~~~~~~~~~~
951
952 evaluate.sps:10.17: note: DEBUG EVALUATE: This operand has type 'number'.
953    10 | DEBUG EVALUATE /5 ge 'foobar'.
954       |                 ^
955
956 evaluate.sps:10.22-10.29: note: DEBUG EVALUATE: This operand has type 'string'.
957    10 | DEBUG EVALUATE /5 ge 'foobar'.
958       |                      ^~~~~~~~
959
960 5 ge 'foobar' => error
961
962 evaluate.sps:11.17-11.27: error: DEBUG EVALUATE: Both operands of >= must have
963 the same type.
964    11 | DEBUG EVALUATE /'baz' ge 10.
965       |                 ^~~~~~~~~~~
966
967 evaluate.sps:11.17-11.21: note: DEBUG EVALUATE: This operand has type 'string'.
968    11 | DEBUG EVALUATE /'baz' ge 10.
969       |                 ^~~~~
970
971 evaluate.sps:11.26-11.27: note: DEBUG EVALUATE: This operand has type 'number'.
972    11 | DEBUG EVALUATE /'baz' ge 10.
973       |                          ^~
974
975 'baz' ge 10 => error
976
977 '0123' ge '0123' => true
978
979 '0123' >= '0124' => false
980
981 '0124' >= '0123' => true
982
983 '0123  ' ge '0123' => true
984
985 '0123' >= '0123 ' => true
986
987 1 > 2 => false
988
989 2.5 > 1.5 => true
990
991 3.5 gt 4 => false
992
993 4 gt 3.5 => true
994
995 evaluate.sps:22.17-22.29: error: DEBUG EVALUATE: Both operands of > must have
996 the same type.
997    22 | DEBUG EVALUATE /1 gt 'foobar'.
998       |                 ^~~~~~~~~~~~~
999
1000 evaluate.sps:22.17: note: DEBUG EVALUATE: This operand has type 'number'.
1001    22 | DEBUG EVALUATE /1 gt 'foobar'.
1002       |                 ^
1003
1004 evaluate.sps:22.22-22.29: note: DEBUG EVALUATE: This operand has type 'string'.
1005    22 | DEBUG EVALUATE /1 gt 'foobar'.
1006       |                      ^~~~~~~~
1007
1008 1 gt 'foobar' => error
1009
1010 evaluate.sps:23.17-23.26: error: DEBUG EVALUATE: Both operands of > must have
1011 the same type.
1012    23 | DEBUG EVALUATE /'baz' > 10.
1013       |                 ^~~~~~~~~~
1014
1015 evaluate.sps:23.17-23.21: note: DEBUG EVALUATE: This operand has type 'string'.
1016    23 | DEBUG EVALUATE /'baz' > 10.
1017       |                 ^~~~~
1018
1019 evaluate.sps:23.25-23.26: note: DEBUG EVALUATE: This operand has type 'number'.
1020    23 | DEBUG EVALUATE /'baz' > 10.
1021       |                         ^~
1022
1023 'baz' > 10 => error
1024
1025 '0123' > '0123' => false
1026
1027 '0123' > '0124' => false
1028
1029 '0124' > '0123' => true
1030
1031 '0123   ' > '0123' => false
1032
1033 '0123    ' > '0123 ' => false
1034
1035 1 ne 1 => false
1036
1037 1 ~= 1 => false
1038
1039 1 <> 2 => true
1040
1041 2 ne 3 => true
1042
1043 evaluate.sps:34.17-34.29: error: DEBUG EVALUATE: Both operands of ~= must have
1044 the same type.
1045    34 | DEBUG EVALUATE /1 ~= 'foobar'.
1046       |                 ^~~~~~~~~~~~~
1047
1048 evaluate.sps:34.17: note: DEBUG EVALUATE: This operand has type 'number'.
1049    34 | DEBUG EVALUATE /1 ~= 'foobar'.
1050       |                 ^
1051
1052 evaluate.sps:34.22-34.29: note: DEBUG EVALUATE: This operand has type 'string'.
1053    34 | DEBUG EVALUATE /1 ~= 'foobar'.
1054       |                      ^~~~~~~~
1055
1056 1 ~= 'foobar' => error
1057
1058 evaluate.sps:35.17-35.27: error: DEBUG EVALUATE: Both operands of ~= must have
1059 the same type.
1060    35 | DEBUG EVALUATE /'baz' ne 10.
1061       |                 ^~~~~~~~~~~
1062
1063 evaluate.sps:35.17-35.21: note: DEBUG EVALUATE: This operand has type 'string'.
1064    35 | DEBUG EVALUATE /'baz' ne 10.
1065       |                 ^~~~~
1066
1067 evaluate.sps:35.26-35.27: note: DEBUG EVALUATE: This operand has type 'number'.
1068    35 | DEBUG EVALUATE /'baz' ne 10.
1069       |                          ^~
1070
1071 'baz' ne 10 => error
1072
1073 evaluate.sps:36.17-36.30: error: DEBUG EVALUATE: Both operands of ~= must have
1074 the same type.
1075    36 | DEBUG EVALUATE /'quux' ~= 5.55.
1076       |                 ^~~~~~~~~~~~~~
1077
1078 evaluate.sps:36.17-36.22: note: DEBUG EVALUATE: This operand has type 'string'.
1079    36 | DEBUG EVALUATE /'quux' ~= 5.55.
1080       |                 ^~~~~~
1081
1082 evaluate.sps:36.27-36.30: note: DEBUG EVALUATE: This operand has type 'number'.
1083    36 | DEBUG EVALUATE /'quux' ~= 5.55.
1084       |                           ^~~~
1085
1086 'quux' ~= 5.55 => error
1087
1088 'foobar' <> 'foobar' => false
1089
1090 'quux' ne 'bar' => true
1091
1092 'bar   ' <> 'bar' => false
1093
1094 'asdf       ' ~= "asdf   " => false
1095
1096 evaluate.sps:41.21: error: DEBUG EVALUATE: Syntax error at `>'.
1097
1098 1 < > 1 => error
1099
1100 evaluate.sps:42.19: error: DEBUG EVALUATE: Syntax error at `~': expecting end
1101 of command.
1102
1103 1 ~ = 1 => error
1104 ])
1105 done
1106 AT_CLEANUP
1107
1108 AT_SETUP([expressions - EXP LG10 LN SQRT ABS MOD MOD10 RND TRUNC])
1109 AT_KEYWORDS([expression expressions evaluate])
1110 AT_DATA([evaluate-base.sps], [
1111 DEBUG EVALUATE SET opt.
1112 DEBUG EVALUATE /EXP(10).
1113 DEBUG EVALUATE /EXP('x').
1114
1115 DEBUG EVALUATE /LG10(500).
1116 DEBUG EVALUATE /LG10('x').
1117
1118 DEBUG EVALUATE /SQRT(500).
1119 DEBUG EVALUATE /SQRT(-1).
1120
1121 DEBUG EVALUATE /ABS(-10.5).
1122 DEBUG EVALUATE /ABS(55.79).
1123 DEBUG EVALUATE /ABS(0).
1124 DEBUG EVALUATE /ABS(-0).
1125
1126 DEBUG EVALUATE /MOD(55.5, 2).
1127 DEBUG EVALUATE /MOD(-55.5, 2).
1128 DEBUG EVALUATE /MOD(55.5, -2).
1129 DEBUG EVALUATE /MOD(-55.5, -2).
1130 DEBUG EVALUATE /MOD('a', 2).
1131 DEBUG EVALUATE /MOD(2, 'a').
1132 DEBUG EVALUATE /MOD('a', 'b').
1133
1134 DEBUG EVALUATE /MOD10(55.5).
1135 DEBUG EVALUATE /MOD10(-55.5).
1136
1137 DEBUG EVALUATE /RND(5.4).
1138 DEBUG EVALUATE /RND(5.6).
1139 DEBUG EVALUATE /RND(-5.4).
1140 DEBUG EVALUATE /RND(-5.6).
1141 DEBUG EVALUATE /RND(5.56, .1).
1142 DEBUG EVALUATE /RND(-5.56, .1)
1143 DEBUG EVALUATE /RND(.5).
1144 DEBUG EVALUATE /RND(.5 - 2**-53).
1145 DEBUG EVALUATE /RND(.5 - 2**-52).
1146 DEBUG EVALUATE /RND(.5 - 2**-51).
1147 DEBUG EVALUATE /RND(.5 - 2**-45).
1148 DEBUG EVALUATE /RND(.5 - 2**-45, 1, 10).
1149 DEBUG EVALUATE /RND('x').
1150
1151 DEBUG EVALUATE /TRUNC(1.2).
1152 DEBUG EVALUATE /TRUNC(1.9).
1153 DEBUG EVALUATE /TRUNC(-1.2).
1154 DEBUG EVALUATE /TRUNC(-1.9).
1155 DEBUG EVALUATE /TRUNC(5.06, .1).
1156 DEBUG EVALUATE /TRUNC(-5.06, .1).
1157 DEBUG EVALUATE /TRUNC(1).
1158 DEBUG EVALUATE /TRUNC(1 - 2**-53).
1159 DEBUG EVALUATE /TRUNC(1 - 2**-52).
1160 DEBUG EVALUATE /TRUNC(1 - 2**-51).
1161 DEBUG EVALUATE /TRUNC(1 - 2**-45).
1162 DEBUG EVALUATE /TRUNC(1 - 2**-45, 1, 10).
1163 DEBUG EVALUATE /TRUNC('x').
1164 ])
1165
1166 for opt in OPT NOOPT; do
1167     AS_BOX([$opt])
1168     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1169     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1170 EXP(10) => 22026.47
1171
1172 evaluate.sps:4.17-4.24: error: DEBUG EVALUATE: Type mismatch invoking
1173 EXP(number) as EXP(string).
1174     4 | DEBUG EVALUATE /EXP('x').
1175       |                 ^~~~~~~~
1176
1177 EXP('x') => error
1178
1179 LG10(500) => 2.70
1180
1181 evaluate.sps:7.17-7.25: error: DEBUG EVALUATE: Type mismatch invoking
1182 LG10(number) as LG10(string).
1183     7 | DEBUG EVALUATE /LG10('x').
1184       |                 ^~~~~~~~~
1185
1186 LG10('x') => error
1187
1188 SQRT(500) => 22.36
1189
1190 SQRT(-1) => sysmis
1191
1192 ABS(-10.5) => 10.50
1193
1194 ABS(55.79) => 55.79
1195
1196 ABS(0) => 0.00
1197
1198 ABS(-0) => 0.00
1199
1200 MOD(55.5, 2) => 1.50
1201
1202 MOD(-55.5, 2) => -1.50
1203
1204 MOD(55.5, -2) => 1.50
1205
1206 MOD(-55.5, -2) => -1.50
1207
1208 evaluate.sps:21.17-21.27: error: DEBUG EVALUATE: Type mismatch invoking
1209 MOD(number, number) as MOD(string, number).
1210    21 | DEBUG EVALUATE /MOD('a', 2).
1211       |                 ^~~~~~~~~~~
1212
1213 MOD('a', 2) => error
1214
1215 evaluate.sps:22.17-22.27: error: DEBUG EVALUATE: Type mismatch invoking
1216 MOD(number, number) as MOD(number, string).
1217    22 | DEBUG EVALUATE /MOD(2, 'a').
1218       |                 ^~~~~~~~~~~
1219
1220 MOD(2, 'a') => error
1221
1222 evaluate.sps:23.17-23.29: error: DEBUG EVALUATE: Type mismatch invoking
1223 MOD(number, number) as MOD(string, string).
1224    23 | DEBUG EVALUATE /MOD('a', 'b').
1225       |                 ^~~~~~~~~~~~~
1226
1227 MOD('a', 'b') => error
1228
1229 MOD10(55.5) => 5.50
1230
1231 MOD10(-55.5) => -5.50
1232
1233 RND(5.4) => 5.00
1234
1235 RND(5.6) => 6.00
1236
1237 RND(-5.4) => -5.00
1238
1239 RND(-5.6) => -6.00
1240
1241 RND(5.56, .1) => 5.60
1242
1243 RND(-5.56, .1) => -5.60
1244
1245 RND(.5) => 1.00
1246
1247 RND(.5 - 2**-53) => 1.00
1248
1249 RND(.5 - 2**-52) => 1.00
1250
1251 RND(.5 - 2**-51) => 1.00
1252
1253 RND(.5 - 2**-45) => 0.00
1254
1255 RND(.5 - 2**-45, 1, 10) => 1.00
1256
1257 evaluate.sps:40.17-40.24: error: DEBUG EVALUATE: Function invocation
1258 RND(string) does not match any known function.  Candidates are:
1259 RND(number)
1260 RND(number, number)
1261 RND(number, number, number).
1262    40 | DEBUG EVALUATE /RND('x').
1263       |                 ^~~~~~~~
1264
1265 RND('x') => error
1266
1267 TRUNC(1.2) => 1.00
1268
1269 TRUNC(1.9) => 1.00
1270
1271 TRUNC(-1.2) => -1.00
1272
1273 TRUNC(-1.9) => -1.00
1274
1275 TRUNC(5.06, .1) => 5.00
1276
1277 TRUNC(-5.06, .1) => -5.00
1278
1279 TRUNC(1) => 1.00
1280
1281 TRUNC(1 - 2**-53) => 1.00
1282
1283 TRUNC(1 - 2**-52) => 1.00
1284
1285 TRUNC(1 - 2**-51) => 1.00
1286
1287 TRUNC(1 - 2**-45) => 0.00
1288
1289 TRUNC(1 - 2**-45, 1, 10) => 1.00
1290
1291 evaluate.sps:54.17-54.26: error: DEBUG EVALUATE: Function invocation
1292 TRUNC(string) does not match any known function.  Candidates are:
1293 TRUNC(number)
1294 TRUNC(number, number)
1295 TRUNC(number, number, number).
1296    54 | DEBUG EVALUATE /TRUNC('x').
1297       |                 ^~~~~~~~~~
1298
1299 TRUNC('x') => error
1300 ])
1301 done
1302 AT_CLEANUP
1303
1304 AT_SETUP([expressions - ACOS ARSIN ARTAN COS SIN TAN])
1305 AT_KEYWORDS([expression expressions evaluate])
1306 AT_DATA([evaluate-base.sps], [
1307 DEBUG EVALUATE SET opt.
1308 DEBUG EVALUATE /ACOS(.5) / 3.14159 * 180.
1309 DEBUG EVALUATE /ARCOS(.75) / 3.14159 * 180.
1310 DEBUG EVALUATE /ARCOS(-.5) / 3.14159 * 180.
1311 DEBUG EVALUATE /ACOS(-.75) / 3.14159 * 180.
1312 DEBUG EVALUATE /ACOS(-1) / 3.14159 * 180.
1313 DEBUG EVALUATE /ARCOS(1) / 3.14159 * 180.
1314 DEBUG EVALUATE /ACOS(-1.01) / 3.14159 * 180.
1315 DEBUG EVALUATE /ARCOS(1.01) / 3.14159 * 180.
1316 DEBUG EVALUATE /ACOS('x') / 3.14159 * 180.
1317
1318 DEBUG EVALUATE /ASIN(.5) / 3.14159 * 180.
1319 DEBUG EVALUATE /ARSIN(.25) / 3.14159 * 180.
1320 DEBUG EVALUATE /ARSIN(-.5) / 3.14159 * 180.
1321 DEBUG EVALUATE /ASIN(-.25) / 3.14159 * 180.
1322 DEBUG EVALUATE /ASIN(-1.01) / 3.14159 * 180.
1323 DEBUG EVALUATE /ARSIN(1.01) / 3.14159 * 180.
1324 DEBUG EVALUATE /ASIN('x') / 3.14159 * 180.
1325
1326 DEBUG EVALUATE /ATAN(1) / 3.14159 * 180.
1327 DEBUG EVALUATE /ARTAN(10) / 3.14159 * 180.
1328 DEBUG EVALUATE /ARTAN(-1) / 3.14159 * 180.
1329 DEBUG EVALUATE /ATAN(-10) / 3.14159 * 180.
1330 DEBUG EVALUATE /ATAN('x') / 3.14159 * 180.
1331
1332 DEBUG EVALUATE /COS(60 / 180 * 3.14159).
1333 DEBUG EVALUATE /COS(45 / 180 * 3.14159).
1334 DEBUG EVALUATE /COS(30 / 180 * 3.14159).
1335 DEBUG EVALUATE /COS(15 / 180 * 3.14159).
1336 DEBUG EVALUATE /COS(-60 / 180 * 3.14159).
1337 DEBUG EVALUATE /COS(-45 / 180 * 3.14159).
1338 DEBUG EVALUATE /COS(-30 / 180 * 3.14159).
1339 DEBUG EVALUATE /COS(-15 / 180 * 3.14159).
1340 DEBUG EVALUATE /COS(123 / 180 * 3.14159).
1341 DEBUG EVALUATE /COS(321 / 180 * 3.14159).
1342 DEBUG EVALUATE /COS('x').
1343
1344 DEBUG EVALUATE /SIN(60 / 180 * 3.14159).
1345 DEBUG EVALUATE /SIN(45 / 180 * 3.14159).
1346 DEBUG EVALUATE /SIN(30 / 180 * 3.14159).
1347 DEBUG EVALUATE /SIN(15 / 180 * 3.14159).
1348 DEBUG EVALUATE /SIN(-60 / 180 * 3.14159).
1349 DEBUG EVALUATE /SIN(-45 / 180 * 3.14159).
1350 DEBUG EVALUATE /SIN(-30 / 180 * 3.14159).
1351 DEBUG EVALUATE /SIN(-15 / 180 * 3.14159).
1352 DEBUG EVALUATE /SIN(123 / 180 * 3.14159).
1353 DEBUG EVALUATE /SIN(321 / 180 * 3.14159).
1354 DEBUG EVALUATE /SIN('x').
1355
1356 DEBUG EVALUATE /TAN(60 / 180 * 3.14159).
1357 DEBUG EVALUATE /TAN(45 / 180 * 3.14159).
1358 DEBUG EVALUATE /TAN(30 / 180 * 3.14159).
1359 DEBUG EVALUATE /TAN(15 / 180 * 3.14159).
1360 DEBUG EVALUATE /TAN(-60 / 180 * 3.14159).
1361 DEBUG EVALUATE /TAN(-45 / 180 * 3.14159).
1362 DEBUG EVALUATE /TAN(-30 / 180 * 3.14159).
1363 DEBUG EVALUATE /TAN(-15 / 180 * 3.14159).
1364 DEBUG EVALUATE /TAN(123 / 180 * 3.14159).
1365 DEBUG EVALUATE /TAN(321 / 180 * 3.14159).
1366 DEBUG EVALUATE /TAN('x').
1367 ])
1368
1369 for opt in OPT NOOPT; do
1370     AS_BOX([$opt])
1371     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1372     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1373 ACOS(.5) / 3.14159 * 180 => 60.00
1374
1375 ARCOS(.75) / 3.14159 * 180 => 41.41
1376
1377 ARCOS(-.5) / 3.14159 * 180 => 120.00
1378
1379 ACOS(-.75) / 3.14159 * 180 => 138.59
1380
1381 ACOS(-1) / 3.14159 * 180 => 180.00
1382
1383 ARCOS(1) / 3.14159 * 180 => 0.00
1384
1385 ACOS(-1.01) / 3.14159 * 180 => sysmis
1386
1387 ARCOS(1.01) / 3.14159 * 180 => sysmis
1388
1389 evaluate.sps:11.17-11.25: error: DEBUG EVALUATE: Type mismatch invoking
1390 ACOS(number) as ACOS(string).
1391    11 | DEBUG EVALUATE /ACOS('x') / 3.14159 * 180.
1392       |                 ^~~~~~~~~
1393
1394 ACOS('x') / 3.14159 * 180 => error
1395
1396 ASIN(.5) / 3.14159 * 180 => 30.00
1397
1398 ARSIN(.25) / 3.14159 * 180 => 14.48
1399
1400 ARSIN(-.5) / 3.14159 * 180 => -30.00
1401
1402 ASIN(-.25) / 3.14159 * 180 => -14.48
1403
1404 ASIN(-1.01) / 3.14159 * 180 => sysmis
1405
1406 ARSIN(1.01) / 3.14159 * 180 => sysmis
1407
1408 evaluate.sps:19.17-19.25: error: DEBUG EVALUATE: Type mismatch invoking
1409 ASIN(number) as ASIN(string).
1410    19 | DEBUG EVALUATE /ASIN('x') / 3.14159 * 180.
1411       |                 ^~~~~~~~~
1412
1413 ASIN('x') / 3.14159 * 180 => error
1414
1415 ATAN(1) / 3.14159 * 180 => 45.00
1416
1417 ARTAN(10) / 3.14159 * 180 => 84.29
1418
1419 ARTAN(-1) / 3.14159 * 180 => -45.00
1420
1421 ATAN(-10) / 3.14159 * 180 => -84.29
1422
1423 evaluate.sps:25.17-25.25: error: DEBUG EVALUATE: Type mismatch invoking
1424 ATAN(number) as ATAN(string).
1425    25 | DEBUG EVALUATE /ATAN('x') / 3.14159 * 180.
1426       |                 ^~~~~~~~~
1427
1428 ATAN('x') / 3.14159 * 180 => error
1429
1430 COS(60 / 180 * 3.14159) => 0.50
1431
1432 COS(45 / 180 * 3.14159) => 0.71
1433
1434 COS(30 / 180 * 3.14159) => 0.87
1435
1436 COS(15 / 180 * 3.14159) => 0.97
1437
1438 COS(-60 / 180 * 3.14159) => 0.50
1439
1440 COS(-45 / 180 * 3.14159) => 0.71
1441
1442 COS(-30 / 180 * 3.14159) => 0.87
1443
1444 COS(-15 / 180 * 3.14159) => 0.97
1445
1446 COS(123 / 180 * 3.14159) => -0.54
1447
1448 COS(321 / 180 * 3.14159) => 0.78
1449
1450 evaluate.sps:37.17-37.24: error: DEBUG EVALUATE: Type mismatch invoking
1451 COS(number) as COS(string).
1452    37 | DEBUG EVALUATE /COS('x').
1453       |                 ^~~~~~~~
1454
1455 COS('x') => error
1456
1457 SIN(60 / 180 * 3.14159) => 0.87
1458
1459 SIN(45 / 180 * 3.14159) => 0.71
1460
1461 SIN(30 / 180 * 3.14159) => 0.50
1462
1463 SIN(15 / 180 * 3.14159) => 0.26
1464
1465 SIN(-60 / 180 * 3.14159) => -0.87
1466
1467 SIN(-45 / 180 * 3.14159) => -0.71
1468
1469 SIN(-30 / 180 * 3.14159) => -0.50
1470
1471 SIN(-15 / 180 * 3.14159) => -0.26
1472
1473 SIN(123 / 180 * 3.14159) => 0.84
1474
1475 SIN(321 / 180 * 3.14159) => -0.63
1476
1477 evaluate.sps:49.17-49.24: error: DEBUG EVALUATE: Type mismatch invoking
1478 SIN(number) as SIN(string).
1479    49 | DEBUG EVALUATE /SIN('x').
1480       |                 ^~~~~~~~
1481
1482 SIN('x') => error
1483
1484 TAN(60 / 180 * 3.14159) => 1.73
1485
1486 TAN(45 / 180 * 3.14159) => 1.00
1487
1488 TAN(30 / 180 * 3.14159) => 0.58
1489
1490 TAN(15 / 180 * 3.14159) => 0.27
1491
1492 TAN(-60 / 180 * 3.14159) => -1.73
1493
1494 TAN(-45 / 180 * 3.14159) => -1.00
1495
1496 TAN(-30 / 180 * 3.14159) => -0.58
1497
1498 TAN(-15 / 180 * 3.14159) => -0.27
1499
1500 TAN(123 / 180 * 3.14159) => -1.54
1501
1502 TAN(321 / 180 * 3.14159) => -0.81
1503
1504 evaluate.sps:61.17-61.24: error: DEBUG EVALUATE: Type mismatch invoking
1505 TAN(number) as TAN(string).
1506    61 | DEBUG EVALUATE /TAN('x').
1507       |                 ^~~~~~~~
1508
1509 TAN('x') => error
1510 ])
1511 done
1512 AT_CLEANUP
1513
1514 AT_SETUP([expressions - vector indexing])
1515 AT_KEYWORDS([expression expressions evaluate])
1516 AT_DATA([evaluate-base.sps], [
1517 DEBUG EVALUATE SET opt.
1518
1519 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(1).
1520 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(2).
1521 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(3).
1522 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v($sysmis).
1523 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(0).
1524 DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(4).
1525
1526 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(1).
1527 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(2).
1528 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(3).
1529 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v($sysmis).
1530 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(0).
1531 DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(4).
1532
1533 ])
1534
1535 for opt in OPT NOOPT; do
1536     AS_BOX([$opt])
1537     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1538     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1539 v(1) => 11.00
1540
1541 v(2) => 22.00
1542
1543 v(3) => 33.00
1544
1545 evaluate.sps:7.42-7.51: error: DEBUG EVALUATE: Index outside valid range 1 to
1546 3, inclusive, for vector V.  The value will be treated as system-missing.
1547     7 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v($sysmis).
1548       |                                          ^~~~~~~~~~
1549
1550 evaluate.sps:7.44-7.50: note: DEBUG EVALUATE: The index is system-missing.
1551     7 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v($sysmis).
1552       |                                            ^~~~~~~
1553
1554 v($sysmis) => sysmis
1555
1556 evaluate.sps:8.42-8.45: error: DEBUG EVALUATE: Index outside valid range 1 to
1557 3, inclusive, for vector V.  The value will be treated as system-missing.
1558     8 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(0).
1559       |                                          ^~~~
1560
1561 evaluate.sps:8.44: note: DEBUG EVALUATE: The index has value 0.
1562     8 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(0).
1563       |                                            ^
1564
1565 v(0) => sysmis
1566
1567 evaluate.sps:9.42-9.45: error: DEBUG EVALUATE: Index outside valid range 1 to
1568 3, inclusive, for vector V.  The value will be treated as system-missing.
1569     9 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(4).
1570       |                                          ^~~~
1571
1572 evaluate.sps:9.44: note: DEBUG EVALUATE: The index has value 4.
1573     9 | DEBUG EVALUATE (a=11)(b=22)(c=33) VECTOR/v(4).
1574       |                                            ^
1575
1576 v(4) => sysmis
1577
1578 v(1) => "abc"
1579
1580 v(2) => "def"
1581
1582 v(3) => "ghi"
1583
1584 evaluate.sps:14.51-14.60: error: DEBUG EVALUATE: Index outside valid range 1 to
1585 3, inclusive, for vector V.  The value will be treated as system-missing.
1586    14 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v($sysmis).
1587       |                                                   ^~~~~~~~~~
1588
1589 evaluate.sps:14.53-14.59: note: DEBUG EVALUATE: The index is system-missing.
1590    14 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v($sysmis).
1591       |                                                     ^~~~~~~
1592
1593 v($sysmis) => ""
1594
1595 evaluate.sps:15.51-15.54: error: DEBUG EVALUATE: Index outside valid range 1 to
1596 3, inclusive, for vector V.  The value will be treated as system-missing.
1597    15 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(0).
1598       |                                                   ^~~~
1599
1600 evaluate.sps:15.53: note: DEBUG EVALUATE: The index has value 0.
1601    15 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(0).
1602       |                                                     ^
1603
1604 v(0) => ""
1605
1606 evaluate.sps:16.51-16.54: error: DEBUG EVALUATE: Index outside valid range 1 to
1607 3, inclusive, for vector V.  The value will be treated as system-missing.
1608    16 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(4).
1609       |                                                   ^~~~
1610
1611 evaluate.sps:16.53: note: DEBUG EVALUATE: The index has value 4.
1612    16 | DEBUG EVALUATE (a='abc')(b='def')(c='ghi') VECTOR/v(4).
1613       |                                                     ^
1614
1615 v(4) => ""
1616 ])
1617 done
1618 AT_CLEANUP
1619
1620 AT_SETUP([expressions - MISSING NMISS NVALID SYSMIS])
1621 AT_KEYWORDS([expression expressions evaluate])
1622 AT_DATA([evaluate-base.sps], [
1623 DEBUG EVALUATE SET opt.
1624 DEBUG EVALUATE /MISSING(10).
1625 DEBUG EVALUATE /MISSING($SYSMIS).
1626 DEBUG EVALUATE /MISSING(ASIN(1.01)).
1627 DEBUG EVALUATE /MISSING(ASIN(.5)).
1628 DEBUG EVALUATE /MISSING('    ').
1629
1630 DEBUG EVALUATE (x=5)/x.
1631 DEBUG EVALUATE (x=5 MISSING)/x.
1632 DEBUG EVALUATE (x=5 MISSING)/x + 1.
1633 DEBUG EVALUATE (x=SYSMIS)/x.
1634
1635 DEBUG EVALUATE (x=5) VECTOR/v(1).
1636 DEBUG EVALUATE (x=5 MISSING) VECTOR/v(1).
1637 DEBUG EVALUATE (x=5 MISSING) VECTOR/v(1) + 1.
1638 DEBUG EVALUATE (x=SYSMIS) VECTOR/v(1).
1639
1640 DEBUG EVALUATE (x=5)/VALUE(x).
1641 DEBUG EVALUATE (x=5 MISSING)/VALUE(x).
1642 DEBUG EVALUATE (x=SYSMIS)/VALUE(x).
1643
1644 DEBUG EVALUATE (x=5) VECTOR/VALUE(v(1)).
1645 DEBUG EVALUATE (x=5 MISSING) VECTOR/VALUE(v(1)).
1646 DEBUG EVALUATE (x=SYSMIS) VECTOR/VALUE(v(1)).
1647
1648 DEBUG EVALUATE (x=5)/MISSING(x).
1649 DEBUG EVALUATE (x=5 MISSING)/MISSING(x).
1650 DEBUG EVALUATE (x=SYSMIS)/MISSING(x).
1651
1652 DEBUG EVALUATE (x=5)/SYSMIS(x).
1653 DEBUG EVALUATE (x=5 MISSING)/SYSMIS(x).
1654 DEBUG EVALUATE (x=SYSMIS)/SYSMIS(x).
1655
1656 DEBUG EVALUATE /NMISS($sysmis).
1657 DEBUG EVALUATE /NMISS(0).
1658 DEBUG EVALUATE /NMISS($sysmis, $sysmis, $sysmis).
1659 DEBUG EVALUATE /NMISS(1, 2, 3, 4).
1660 DEBUG EVALUATE /NMISS(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4).
1661 DEBUG EVALUATE (a=1 MISSING) (b=2) (c=3 MISSING) (d=4)/NMISS(a, b, c, d).
1662
1663 DEBUG EVALUATE /NVALID($sysmis).
1664 DEBUG EVALUATE /NVALID(0).
1665 DEBUG EVALUATE /NVALID($sysmis, $sysmis, $sysmis).
1666 DEBUG EVALUATE /NVALID(1, 2, 3, 4).
1667 DEBUG EVALUATE /NVALID(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4).
1668 DEBUG EVALUATE (a=1 MISSING) (b=2) (c=3 MISSING) (d=4)/NVALID(a, b, c, d).
1669
1670 DEBUG EVALUATE /SYSMIS(1).
1671 DEBUG EVALUATE /SYSMIS($SYSMIS).
1672 DEBUG EVALUATE /SYSMIS(1 + $SYSMIS).
1673 ])
1674
1675 for opt in OPT NOOPT; do
1676     AS_BOX([$opt])
1677     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1678     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1679 MISSING(10) => false
1680
1681 MISSING($SYSMIS) => true
1682
1683 MISSING(ASIN(1.01)) => true
1684
1685 MISSING(ASIN(.5)) => false
1686
1687 evaluate.sps:7.17-7.31: error: DEBUG EVALUATE: Type mismatch invoking
1688 MISSING(number) as MISSING(string).
1689     7 | DEBUG EVALUATE /MISSING('    ').
1690       |                 ^~~~~~~~~~~~~~~
1691
1692 MISSING('    ') => error
1693
1694 x => 5.00
1695
1696 x => sysmis
1697
1698 x + 1 => sysmis
1699
1700 x => sysmis
1701
1702 v(1) => 5.00
1703
1704 v(1) => sysmis
1705
1706 v(1) + 1 => sysmis
1707
1708 v(1) => sysmis
1709
1710 VALUE(x) => 5.00
1711
1712 VALUE(x) => 5.00
1713
1714 VALUE(x) => sysmis
1715
1716 VALUE(v(1)) => 5.00
1717
1718 VALUE(v(1)) => 5.00
1719
1720 VALUE(v(1)) => sysmis
1721
1722 MISSING(x) => false
1723
1724 MISSING(x) => true
1725
1726 MISSING(x) => true
1727
1728 SYSMIS(x) => false
1729
1730 SYSMIS(x) => false
1731
1732 SYSMIS(x) => true
1733
1734 NMISS($sysmis) => 1.00
1735
1736 NMISS(0) => 0.00
1737
1738 NMISS($sysmis, $sysmis, $sysmis) => 3.00
1739
1740 NMISS(1, 2, 3, 4) => 0.00
1741
1742 NMISS(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4) => 4.00
1743
1744 NMISS(a, b, c, d) => 2.00
1745
1746 NVALID($sysmis) => 0.00
1747
1748 NVALID(0) => 1.00
1749
1750 NVALID($sysmis, $sysmis, $sysmis) => 0.00
1751
1752 NVALID(1, 2, 3, 4) => 4.00
1753
1754 NVALID(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4) => 5.00
1755
1756 NVALID(a, b, c, d) => 2.00
1757
1758 SYSMIS(1) => false
1759
1760 SYSMIS($SYSMIS) => true
1761
1762 SYSMIS(1 + $SYSMIS) => true
1763 ])
1764 done
1765 AT_CLEANUP
1766
1767 AT_SETUP([expressions - ANY])
1768 AT_KEYWORDS([expression expressions evaluate])
1769 AT_DATA([evaluate-base.sps], [
1770 DEBUG EVALUATE SET opt.
1771
1772 DEBUG EVALUATE /any(1, 1, 2, 3).
1773 DEBUG EVALUATE /any(1, $true, 2, 3).
1774 DEBUG EVALUATE /any(1, $false, 2, 3).
1775 DEBUG EVALUATE /any(2, 1, 2, 3).
1776 DEBUG EVALUATE /any(3, 1, 2, 3).
1777 DEBUG EVALUATE /any(5, 1, 2, 3).
1778 DEBUG EVALUATE /any(1, 1, 1, 1).
1779 DEBUG EVALUATE /any($sysmis, 1, 1, 1).
1780 DEBUG EVALUATE /any($sysmis, 1, $sysmis, 3).
1781 DEBUG EVALUATE /any(1, 1, $sysmis, $sysmis).
1782 DEBUG EVALUATE /any(1, $sysmis, $sysmis, $sysmis).
1783 DEBUG EVALUATE /any($sysmis, $sysmis, $sysmis, $sysmis).
1784
1785 DEBUG EVALUATE /any(1).
1786 DEBUG EVALUATE /any('1', 2, 3, 4).
1787 DEBUG EVALUATE /any(1, '2', 3, 4).
1788 DEBUG EVALUATE /any(1, 2, '3', 4).
1789 DEBUG EVALUATE /any(1, 2, 3, '4').
1790
1791 DEBUG EVALUATE /any('', 'a', '', 'c').
1792 DEBUG EVALUATE /any('a', 'a', 'b', 'c').
1793 DEBUG EVALUATE /any('b', 'a', 'b', 'c').
1794 DEBUG EVALUATE /any('c', 'a', 'b', 'c').
1795 DEBUG EVALUATE /any('e', 'a', 'b', 'c').
1796 DEBUG EVALUATE /any('a', 'a', 'a', 'a').
1797 DEBUG EVALUATE /any('', 'a', 'a', 'a').
1798 DEBUG EVALUATE /any('a', '', '', '').
1799 DEBUG EVALUATE /any('a').
1800
1801 DEBUG EVALUATE /any('a', 'a  ', 'b', 'c').
1802 DEBUG EVALUATE /any('b   ', 'a', 'b', 'c').
1803 DEBUG EVALUATE /any('c   ', 'a', 'b', 'c     ').
1804 DEBUG EVALUATE /any(a10, 'b', 'c', 'd').
1805 DEBUG EVALUATE /any('a', b, 'c', 'd').
1806 DEBUG EVALUATE /any('a', 'b', c, 'd').
1807 DEBUG EVALUATE /any('a', 'b', 'c', d).
1808 ])
1809
1810 for opt in OPT NOOPT; do
1811     AS_BOX([$opt])
1812     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1813     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
1814 [[any(1, 1, 2, 3) => true
1815
1816 any(1, $true, 2, 3) => true
1817
1818 any(1, $false, 2, 3) => false
1819
1820 any(2, 1, 2, 3) => true
1821
1822 any(3, 1, 2, 3) => true
1823
1824 any(5, 1, 2, 3) => false
1825
1826 any(1, 1, 1, 1) => true
1827
1828 any($sysmis, 1, 1, 1) => sysmis
1829
1830 any($sysmis, 1, $sysmis, 3) => sysmis
1831
1832 any(1, 1, $sysmis, $sysmis) => true
1833
1834 any(1, $sysmis, $sysmis, $sysmis) => sysmis
1835
1836 any($sysmis, $sysmis, $sysmis, $sysmis) => sysmis
1837
1838 evaluate.sps:17.17-17.22: error: DEBUG EVALUATE: Function invocation
1839 any(number) does not match any known function.  Candidates are:
1840 ANY(number, number[, number]...)
1841 ANY(string, string[, string]...).
1842    17 | DEBUG EVALUATE /any(1).
1843       |                 ^~~~~~
1844
1845 any(1) => error
1846
1847 evaluate.sps:18.17-18.33: error: DEBUG EVALUATE: Function invocation
1848 any(string, number, number, number) does not match any known function.
1849 Candidates are:
1850 ANY(number, number[, number]...)
1851 ANY(string, string[, string]...).
1852    18 | DEBUG EVALUATE /any('1', 2, 3, 4).
1853       |                 ^~~~~~~~~~~~~~~~~
1854
1855 any('1', 2, 3, 4) => error
1856
1857 evaluate.sps:19.17-19.33: error: DEBUG EVALUATE: Function invocation
1858 any(number, string, number, number) does not match any known function.
1859 Candidates are:
1860 ANY(number, number[, number]...)
1861 ANY(string, string[, string]...).
1862    19 | DEBUG EVALUATE /any(1, '2', 3, 4).
1863       |                 ^~~~~~~~~~~~~~~~~
1864
1865 any(1, '2', 3, 4) => error
1866
1867 evaluate.sps:20.17-20.33: error: DEBUG EVALUATE: Function invocation
1868 any(number, number, string, number) does not match any known function.
1869 Candidates are:
1870 ANY(number, number[, number]...)
1871 ANY(string, string[, string]...).
1872    20 | DEBUG EVALUATE /any(1, 2, '3', 4).
1873       |                 ^~~~~~~~~~~~~~~~~
1874
1875 any(1, 2, '3', 4) => error
1876
1877 evaluate.sps:21.17-21.33: error: DEBUG EVALUATE: Function invocation
1878 any(number, number, number, string) does not match any known function.
1879 Candidates are:
1880 ANY(number, number[, number]...)
1881 ANY(string, string[, string]...).
1882    21 | DEBUG EVALUATE /any(1, 2, 3, '4').
1883       |                 ^~~~~~~~~~~~~~~~~
1884
1885 any(1, 2, 3, '4') => error
1886
1887 any('', 'a', '', 'c') => true
1888
1889 any('a', 'a', 'b', 'c') => true
1890
1891 any('b', 'a', 'b', 'c') => true
1892
1893 any('c', 'a', 'b', 'c') => true
1894
1895 any('e', 'a', 'b', 'c') => false
1896
1897 any('a', 'a', 'a', 'a') => true
1898
1899 any('', 'a', 'a', 'a') => false
1900
1901 any('a', '', '', '') => false
1902
1903 evaluate.sps:31.17-31.24: error: DEBUG EVALUATE: Function invocation
1904 any(string) does not match any known function.  Candidates are:
1905 ANY(number, number[, number]...)
1906 ANY(string, string[, string]...).
1907    31 | DEBUG EVALUATE /any('a').
1908       |                 ^~~~~~~~
1909
1910 any('a') => error
1911
1912 any('a', 'a  ', 'b', 'c') => true
1913
1914 any('b   ', 'a', 'b', 'c') => true
1915
1916 any('c   ', 'a', 'b', 'c     ') => true
1917
1918 evaluate.sps:36.17-36.39: error: DEBUG EVALUATE: Function invocation
1919 any(format, string, string, string) does not match any known function.
1920 Candidates are:
1921 ANY(number, number[, number]...)
1922 ANY(string, string[, string]...).
1923    36 | DEBUG EVALUATE /any(a10, 'b', 'c', 'd').
1924       |                 ^~~~~~~~~~~~~~~~~~~~~~~
1925
1926 any(a10, 'b', 'c', 'd') => error
1927
1928 evaluate.sps:37: error: DEBUG EVALUATE: Unknown identifier b.
1929
1930 any('a', b, 'c', 'd') => error
1931
1932 evaluate.sps:38: error: DEBUG EVALUATE: Unknown identifier c.
1933
1934 any('a', 'b', c, 'd') => error
1935
1936 evaluate.sps:39: error: DEBUG EVALUATE: Unknown identifier d.
1937
1938 any('a', 'b', 'c', d) => error
1939 ]])
1940 done
1941 AT_CLEANUP
1942
1943 AT_SETUP([expressions - RANGE])
1944 AT_KEYWORDS([expression expressions evaluate])
1945 AT_DATA([evaluate-base.sps], [
1946 DEBUG EVALUATE SET opt.
1947
1948 DEBUG EVALUATE /range(5, 1, 10).
1949 DEBUG EVALUATE /range(1, 1, 10).
1950 DEBUG EVALUATE /range(10, 1, 10).
1951 DEBUG EVALUATE /range(-1, 1, 10).
1952 DEBUG EVALUATE /range(12, 1, 10).
1953
1954 DEBUG EVALUATE /range(5, $sysmis, 6, 1, 10).
1955 DEBUG EVALUATE /range(5, $sysmis, $sysmis, 1, 10).
1956 DEBUG EVALUATE /range(1, 1, 10, 6, $sysmis).
1957 DEBUG EVALUATE /range(1, 1, 10, $sysmis, $sysmis).
1958
1959 DEBUG EVALUATE /range(5, 5, 10, 3, 7).
1960 DEBUG EVALUATE /range(5, 10, 5, 3, 7).
1961 DEBUG EVALUATE /range(5, 3, 7, 5, 10).
1962 DEBUG EVALUATE /range(5, 3, 7, 10, 5).
1963
1964 DEBUG EVALUATE /range($sysmis, 1, 10).
1965 DEBUG EVALUATE /range(5, 1, $sysmis).
1966 DEBUG EVALUATE /range(5, $sysmis, 10).
1967 DEBUG EVALUATE /range(1, 1, $sysmis).
1968 DEBUG EVALUATE /range(10, $sysmis, 10).
1969 DEBUG EVALUATE /range(5, 10, 5).
1970 DEBUG EVALUATE /range($sysmis, $sysmis, 10).
1971 DEBUG EVALUATE /range($sysmis, 1, $sysmis).
1972 DEBUG EVALUATE /range($sysmis, $sysmis, $sysmis).
1973
1974 DEBUG EVALUATE /range(0, 1, 8, 10, 18).
1975 DEBUG EVALUATE /range(1, 1, 8, 10, 18).
1976 DEBUG EVALUATE /range(6, 1, 8, 10, 18).
1977 DEBUG EVALUATE /range(8, 1, 8, 10, 18).
1978 DEBUG EVALUATE /range(9, 1, 8, 10, 18).
1979 DEBUG EVALUATE /range(10, 1, 8, 10, 18).
1980 DEBUG EVALUATE /range(13, 1, 8, 10, 18).
1981 DEBUG EVALUATE /range(16, 1, 8, 10, 18).
1982 DEBUG EVALUATE /range(18, 1, 8, 10, 18).
1983 DEBUG EVALUATE /range(20, 1, 8, 10, 18).
1984 DEBUG EVALUATE /range(1).
1985 DEBUG EVALUATE /range(1, 2).
1986 DEBUG EVALUATE /range(1, 2, 3, 4).
1987 DEBUG EVALUATE /range(1, 2, 3, 4, 5, 6).
1988 DEBUG EVALUATE /range('1', 2, 3).
1989 DEBUG EVALUATE /range(1, '2', 3).
1990 DEBUG EVALUATE /range(1, 2, '3').
1991
1992 DEBUG EVALUATE /range('123', '111', '888').
1993 DEBUG EVALUATE /range('111', '111', '888').
1994 DEBUG EVALUATE /range('888', '111', '888').
1995 DEBUG EVALUATE /range('110', '111', '888').
1996 DEBUG EVALUATE /range('889', '111', '888').
1997 DEBUG EVALUATE /range('000', '111', '888').
1998 DEBUG EVALUATE /range('999', '111', '888').
1999
2000 DEBUG EVALUATE /range('123   ', '111', '888').
2001 DEBUG EVALUATE /range('123', '111   ', '888').
2002 DEBUG EVALUATE /range('123', '111', '888   ').
2003 DEBUG EVALUATE /range('123', '111    ', '888   ').
2004
2005 DEBUG EVALUATE /range('00', '01', '08', '10', '18').
2006 DEBUG EVALUATE /range('01', '01', '08', '10', '18').
2007 DEBUG EVALUATE /range('06', '01', '08', '10', '18').
2008 DEBUG EVALUATE /range('08', '01', '08', '10', '18').
2009 DEBUG EVALUATE /range('09', '01', '08', '10', '18').
2010 DEBUG EVALUATE /range('10', '01', '08', '10', '18').
2011 DEBUG EVALUATE /range('15', '01', '08', '10', '18').
2012 DEBUG EVALUATE /range('18', '01', '08', '10', '18').
2013 DEBUG EVALUATE /range('19', '01', '08', '10', '18').
2014
2015 DEBUG EVALUATE /range('07', '01', '08', '18', '10').
2016 DEBUG EVALUATE /range('12', '08', '01', '10', '18').
2017
2018 DEBUG EVALUATE /range('1').
2019 DEBUG EVALUATE /range('1', '2').
2020 DEBUG EVALUATE /range('1', '2', '3', '4').
2021 DEBUG EVALUATE /range('1', '2', '3', '4', '5', '6').
2022 DEBUG EVALUATE /range(1, '2', '3').
2023 DEBUG EVALUATE /range('1', 2, '3').
2024 DEBUG EVALUATE /range('1', '2', 3).
2025 ])
2026
2027 for opt in OPT NOOPT; do
2028     AS_BOX([$opt])
2029     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2030     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
2031 [[range(5, 1, 10) => true
2032
2033 range(1, 1, 10) => true
2034
2035 range(10, 1, 10) => true
2036
2037 range(-1, 1, 10) => false
2038
2039 range(12, 1, 10) => false
2040
2041 range(5, $sysmis, 6, 1, 10) => true
2042
2043 range(5, $sysmis, $sysmis, 1, 10) => true
2044
2045 range(1, 1, 10, 6, $sysmis) => true
2046
2047 range(1, 1, 10, $sysmis, $sysmis) => true
2048
2049 range(5, 5, 10, 3, 7) => true
2050
2051 range(5, 10, 5, 3, 7) => sysmis
2052
2053 range(5, 3, 7, 5, 10) => true
2054
2055 range(5, 3, 7, 10, 5) => sysmis
2056
2057 range($sysmis, 1, 10) => sysmis
2058
2059 range(5, 1, $sysmis) => sysmis
2060
2061 range(5, $sysmis, 10) => sysmis
2062
2063 range(1, 1, $sysmis) => sysmis
2064
2065 range(10, $sysmis, 10) => sysmis
2066
2067 range(5, 10, 5) => sysmis
2068
2069 range($sysmis, $sysmis, 10) => sysmis
2070
2071 range($sysmis, 1, $sysmis) => sysmis
2072
2073 range($sysmis, $sysmis, $sysmis) => sysmis
2074
2075 range(0, 1, 8, 10, 18) => false
2076
2077 range(1, 1, 8, 10, 18) => true
2078
2079 range(6, 1, 8, 10, 18) => true
2080
2081 range(8, 1, 8, 10, 18) => true
2082
2083 range(9, 1, 8, 10, 18) => false
2084
2085 range(10, 1, 8, 10, 18) => true
2086
2087 range(13, 1, 8, 10, 18) => true
2088
2089 range(16, 1, 8, 10, 18) => true
2090
2091 range(18, 1, 8, 10, 18) => true
2092
2093 range(20, 1, 8, 10, 18) => false
2094
2095 evaluate.sps:40.17-40.24: error: DEBUG EVALUATE: Function invocation
2096 range(number) does not match any known function.  Candidates are:
2097 RANGE(number, number, number[, number, number]...)
2098 RANGE(string, string, string[, string, string]...).
2099    40 | DEBUG EVALUATE /range(1).
2100       |                 ^~~~~~~~
2101
2102 range(1) => error
2103
2104 evaluate.sps:41.17-41.27: error: DEBUG EVALUATE: RANGE(number, number, number[,
2105 number, number]...) must have an odd number of arguments.
2106    41 | DEBUG EVALUATE /range(1, 2).
2107       |                 ^~~~~~~~~~~
2108
2109 range(1, 2) => error
2110
2111 evaluate.sps:42.17-42.33: error: DEBUG EVALUATE: RANGE(number, number, number[,
2112 number, number]...) must have an odd number of arguments.
2113    42 | DEBUG EVALUATE /range(1, 2, 3, 4).
2114       |                 ^~~~~~~~~~~~~~~~~
2115
2116 range(1, 2, 3, 4) => error
2117
2118 evaluate.sps:43.17-43.39: error: DEBUG EVALUATE: RANGE(number, number, number[,
2119 number, number]...) must have an odd number of arguments.
2120    43 | DEBUG EVALUATE /range(1, 2, 3, 4, 5, 6).
2121       |                 ^~~~~~~~~~~~~~~~~~~~~~~
2122
2123 range(1, 2, 3, 4, 5, 6) => error
2124
2125 evaluate.sps:44.17-44.32: error: DEBUG EVALUATE: Function invocation
2126 range(string, number, number) does not match any known function.  Candidates
2127 are:
2128 RANGE(number, number, number[, number, number]...)
2129 RANGE(string, string, string[, string, string]...).
2130    44 | DEBUG EVALUATE /range('1', 2, 3).
2131       |                 ^~~~~~~~~~~~~~~~
2132
2133 range('1', 2, 3) => error
2134
2135 evaluate.sps:45.17-45.32: error: DEBUG EVALUATE: Function invocation
2136 range(number, string, number) does not match any known function.  Candidates
2137 are:
2138 RANGE(number, number, number[, number, number]...)
2139 RANGE(string, string, string[, string, string]...).
2140    45 | DEBUG EVALUATE /range(1, '2', 3).
2141       |                 ^~~~~~~~~~~~~~~~
2142
2143 range(1, '2', 3) => error
2144
2145 evaluate.sps:46.17-46.32: error: DEBUG EVALUATE: Function invocation
2146 range(number, number, string) does not match any known function.  Candidates
2147 are:
2148 RANGE(number, number, number[, number, number]...)
2149 RANGE(string, string, string[, string, string]...).
2150    46 | DEBUG EVALUATE /range(1, 2, '3').
2151       |                 ^~~~~~~~~~~~~~~~
2152
2153 range(1, 2, '3') => error
2154
2155 range('123', '111', '888') => true
2156
2157 range('111', '111', '888') => true
2158
2159 range('888', '111', '888') => true
2160
2161 range('110', '111', '888') => false
2162
2163 range('889', '111', '888') => false
2164
2165 range('000', '111', '888') => false
2166
2167 range('999', '111', '888') => false
2168
2169 range('123   ', '111', '888') => true
2170
2171 range('123', '111   ', '888') => true
2172
2173 range('123', '111', '888   ') => true
2174
2175 range('123', '111    ', '888   ') => true
2176
2177 range('00', '01', '08', '10', '18') => false
2178
2179 range('01', '01', '08', '10', '18') => true
2180
2181 range('06', '01', '08', '10', '18') => true
2182
2183 range('08', '01', '08', '10', '18') => true
2184
2185 range('09', '01', '08', '10', '18') => false
2186
2187 range('10', '01', '08', '10', '18') => true
2188
2189 range('15', '01', '08', '10', '18') => true
2190
2191 range('18', '01', '08', '10', '18') => true
2192
2193 range('19', '01', '08', '10', '18') => false
2194
2195 range('07', '01', '08', '18', '10') => sysmis
2196
2197 range('12', '08', '01', '10', '18') => sysmis
2198
2199 evaluate.sps:74.17-74.26: error: DEBUG EVALUATE: Function invocation
2200 range(string) does not match any known function.  Candidates are:
2201 RANGE(number, number, number[, number, number]...)
2202 RANGE(string, string, string[, string, string]...).
2203    74 | DEBUG EVALUATE /range('1').
2204       |                 ^~~~~~~~~~
2205
2206 range('1') => error
2207
2208 evaluate.sps:75.17-75.31: error: DEBUG EVALUATE: RANGE(string, string, string[,
2209 string, string]...) must have an odd number of arguments.
2210    75 | DEBUG EVALUATE /range('1', '2').
2211       |                 ^~~~~~~~~~~~~~~
2212
2213 range('1', '2') => error
2214
2215 evaluate.sps:76.17-76.41: error: DEBUG EVALUATE: RANGE(string, string, string[,
2216 string, string]...) must have an odd number of arguments.
2217    76 | DEBUG EVALUATE /range('1', '2', '3', '4').
2218       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
2219
2220 range('1', '2', '3', '4') => error
2221
2222 evaluate.sps:77.17-77.51: error: DEBUG EVALUATE: RANGE(string, string, string[,
2223 string, string]...) must have an odd number of arguments.
2224    77 | DEBUG EVALUATE /range('1', '2', '3', '4', '5', '6').
2225       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2226
2227 range('1', '2', '3', '4', '5', '6') => error
2228
2229 evaluate.sps:78.17-78.34: error: DEBUG EVALUATE: Function invocation
2230 range(number, string, string) does not match any known function.  Candidates
2231 are:
2232 RANGE(number, number, number[, number, number]...)
2233 RANGE(string, string, string[, string, string]...).
2234    78 | DEBUG EVALUATE /range(1, '2', '3').
2235       |                 ^~~~~~~~~~~~~~~~~~
2236
2237 range(1, '2', '3') => error
2238
2239 evaluate.sps:79.17-79.34: error: DEBUG EVALUATE: Function invocation
2240 range(string, number, string) does not match any known function.  Candidates
2241 are:
2242 RANGE(number, number, number[, number, number]...)
2243 RANGE(string, string, string[, string, string]...).
2244    79 | DEBUG EVALUATE /range('1', 2, '3').
2245       |                 ^~~~~~~~~~~~~~~~~~
2246
2247 range('1', 2, '3') => error
2248
2249 evaluate.sps:80.17-80.34: error: DEBUG EVALUATE: Function invocation
2250 range(string, string, number) does not match any known function.  Candidates
2251 are:
2252 RANGE(number, number, number[, number, number]...)
2253 RANGE(string, string, string[, string, string]...).
2254    80 | DEBUG EVALUATE /range('1', '2', 3).
2255       |                 ^~~~~~~~~~~~~~~~~~
2256
2257 range('1', '2', 3) => error
2258 ]])
2259 done
2260 AT_CLEANUP
2261
2262 AT_SETUP([expressions - MAX MIN])
2263 AT_KEYWORDS([expression expressions evaluate])
2264 AT_DATA([evaluate-base.sps], [
2265 DEBUG EVALUATE SET opt.
2266 DEBUG EVALUATE /max(1, 2, 3, 4, 5).
2267 DEBUG EVALUATE /max(1, $sysmis, 2, 3, $sysmis, 4, 5).
2268 DEBUG EVALUATE /max(1, 2).
2269 DEBUG EVALUATE /max().
2270 DEBUG EVALUATE /max(1).
2271 DEBUG EVALUATE /max(1, $sysmis).
2272 DEBUG EVALUATE /max(1, 2, 3, $sysmis).
2273 DEBUG EVALUATE /max.4(1, 2, 3, $sysmis).
2274 DEBUG EVALUATE /max.4(1, 2, 3).
2275
2276 DEBUG EVALUATE /max("2", "3", "5", "1", "4").
2277 DEBUG EVALUATE /max("1", "2").
2278 DEBUG EVALUATE /max("1").
2279
2280 DEBUG EVALUATE /min(1, 2, 3, 4, 5).
2281 DEBUG EVALUATE /min(1, $sysmis, 2, 3, $sysmis, 4, 5).
2282 DEBUG EVALUATE /min(1, 2).
2283 DEBUG EVALUATE /min().
2284 DEBUG EVALUATE /min(1).
2285 DEBUG EVALUATE /min(1, $sysmis).
2286 DEBUG EVALUATE /min(1, 2, 3, $sysmis).
2287 DEBUG EVALUATE /min.4(1, 2, 3, $sysmis).
2288 DEBUG EVALUATE /min.4(1, 2, 3).
2289
2290 DEBUG EVALUATE /min("2", "3", "5", "1", "4").
2291 DEBUG EVALUATE /min("1", "2").
2292 DEBUG EVALUATE /min("1").
2293 ])
2294
2295 for opt in OPT NOOPT; do
2296     AS_BOX([$opt])
2297     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2298     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
2299 [[max(1, 2, 3, 4, 5) => 5.00
2300
2301 max(1, $sysmis, 2, 3, $sysmis, 4, 5) => 5.00
2302
2303 max(1, 2) => 2.00
2304
2305 evaluate.sps:6.17-6.20: error: DEBUG EVALUATE: Function invocation max() does
2306 not match any known function.  Candidates are:
2307 MAX(number[, number]...)
2308 MAX(string[, string]...).
2309     6 | DEBUG EVALUATE /max().
2310       |                 ^~~~
2311
2312 max() => error
2313
2314 max(1) => 1.00
2315
2316 max(1, $sysmis) => 1.00
2317
2318 max(1, 2, 3, $sysmis) => 3.00
2319
2320 max.4(1, 2, 3, $sysmis) => sysmis
2321
2322 evaluate.sps:11.17-11.30: error: DEBUG EVALUATE: For MAX(number[, number]...)
2323 with 3 arguments, at most 3 (not 4) may be required to be valid.
2324    11 | DEBUG EVALUATE /max.4(1, 2, 3).
2325       |                 ^~~~~~~~~~~~~~
2326
2327 max.4(1, 2, 3) => error
2328
2329 max("2", "3", "5", "1", "4") => "5"
2330
2331 max("1", "2") => "2"
2332
2333 max("1") => "1"
2334
2335 min(1, 2, 3, 4, 5) => 1.00
2336
2337 min(1, $sysmis, 2, 3, $sysmis, 4, 5) => 1.00
2338
2339 min(1, 2) => 1.00
2340
2341 evaluate.sps:20.17-20.20: error: DEBUG EVALUATE: Function invocation min() does
2342 not match any known function.  Candidates are:
2343 MIN(number[, number]...)
2344 MIN(string[, string]...).
2345    20 | DEBUG EVALUATE /min().
2346       |                 ^~~~
2347
2348 min() => error
2349
2350 min(1) => 1.00
2351
2352 min(1, $sysmis) => 1.00
2353
2354 min(1, 2, 3, $sysmis) => 1.00
2355
2356 min.4(1, 2, 3, $sysmis) => sysmis
2357
2358 evaluate.sps:25.17-25.30: error: DEBUG EVALUATE: For MIN(number[, number]...)
2359 with 3 arguments, at most 3 (not 4) may be required to be valid.
2360    25 | DEBUG EVALUATE /min.4(1, 2, 3).
2361       |                 ^~~~~~~~~~~~~~
2362
2363 min.4(1, 2, 3) => error
2364
2365 min("2", "3", "5", "1", "4") => "1"
2366
2367 min("1", "2") => "1"
2368
2369 min("1") => "1"
2370 ]])
2371 done
2372 AT_CLEANUP
2373
2374 AT_SETUP([expressions - CFVAR MEAN MEDIAN])
2375 AT_KEYWORDS([expression expressions evaluate])
2376 AT_DATA([evaluate-base.sps], [
2377 DEBUG EVALUATE SET opt.
2378
2379 DEBUG EVALUATE /cfvar(1, 2, 3, 4, 5).
2380 DEBUG EVALUATE /cfvar(1, $sysmis, 2, 3, $sysmis, 4, 5).
2381 DEBUG EVALUATE /cfvar(1, 2).
2382 DEBUG EVALUATE /cfvar(1).
2383 DEBUG EVALUATE /cfvar(1, $sysmis).
2384 DEBUG EVALUATE /cfvar(1, 2, 3, $sysmis).
2385 DEBUG EVALUATE /cfvar.4(1, 2, 3, $sysmis).
2386 DEBUG EVALUATE /cfvar.4(1, 2, 3).
2387 DEBUG EVALUATE /cfvar('x').
2388 DEBUG EVALUATE /cfvar('x', 1, 2, 3).
2389
2390 DEBUG EVALUATE /mean(1, 2, 3, 4, 5).
2391 DEBUG EVALUATE /mean(1, $sysmis, 2, 3, $sysmis, 4, 5).
2392 DEBUG EVALUATE /mean(1, 2).
2393 DEBUG EVALUATE /mean().
2394 DEBUG EVALUATE /mean(1).
2395 DEBUG EVALUATE /mean(1, $sysmis).
2396 DEBUG EVALUATE /mean(1, 2, 3, $sysmis).
2397 DEBUG EVALUATE /mean.4(1, 2, 3, $sysmis).
2398 DEBUG EVALUATE /mean.4(1, 2, 3).
2399
2400 DEBUG EVALUATE /median(1, 2, 3, 4, 5).
2401 DEBUG EVALUATE /median(2, 3, 4, 5, 1).
2402 DEBUG EVALUATE /median(2, 3, 4, 1, 5).
2403 DEBUG EVALUATE /median(2, 1, 4, 5, 3).
2404 DEBUG EVALUATE /median(1, 2, 3, 4).
2405 DEBUG EVALUATE /median(2, 3, 1, 4).
2406 DEBUG EVALUATE /median(2, 3, 4, 1).
2407 DEBUG EVALUATE /median(2, 1, 4, 3).
2408 DEBUG EVALUATE /median(1, $sysmis, 3, 4, 5).
2409 DEBUG EVALUATE /median(2, 3, 4, 5, $sysmis, 1).
2410 DEBUG EVALUATE /median($sysmis, $sysmis, $sysmis, 2, 3, 4, 1, 5).
2411 DEBUG EVALUATE /median(1, 2, 3).
2412 DEBUG EVALUATE /median(1).
2413 DEBUG EVALUATE /median(1, 2).
2414 DEBUG EVALUATE /median(1, 2, $sysmis).
2415 DEBUG EVALUATE /median(1, $sysmis, $sysmis).
2416 DEBUG EVALUATE /median($sysmis, $sysmis, $sysmis).
2417 DEBUG EVALUATE /median.3(1, 2, $sysmis).
2418 DEBUG EVALUATE /median.2(1, $sysmis).
2419 ])
2420
2421 for opt in OPT NOOPT; do
2422     AS_BOX([$opt])
2423     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2424     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
2425 [[cfvar(1, 2, 3, 4, 5) => 0.53
2426
2427 cfvar(1, $sysmis, 2, 3, $sysmis, 4, 5) => 0.53
2428
2429 cfvar(1, 2) => 0.47
2430
2431 evaluate.sps:7.17-7.24: error: DEBUG EVALUATE: Type mismatch invoking
2432 CFVAR(number, number[, number]...) as cfvar(number).
2433     7 | DEBUG EVALUATE /cfvar(1).
2434       |                 ^~~~~~~~
2435
2436 cfvar(1) => error
2437
2438 cfvar(1, $sysmis) => sysmis
2439
2440 cfvar(1, 2, 3, $sysmis) => 0.50
2441
2442 cfvar.4(1, 2, 3, $sysmis) => sysmis
2443
2444 evaluate.sps:11.17-11.32: error: DEBUG EVALUATE: For CFVAR(number, number[,
2445 number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.
2446    11 | DEBUG EVALUATE /cfvar.4(1, 2, 3).
2447       |                 ^~~~~~~~~~~~~~~~
2448
2449 cfvar.4(1, 2, 3) => error
2450
2451 evaluate.sps:12.17-12.26: error: DEBUG EVALUATE: Type mismatch invoking
2452 CFVAR(number, number[, number]...) as cfvar(string).
2453    12 | DEBUG EVALUATE /cfvar('x').
2454       |                 ^~~~~~~~~~
2455
2456 cfvar('x') => error
2457
2458 evaluate.sps:13.17-13.35: error: DEBUG EVALUATE: Type mismatch invoking
2459 CFVAR(number, number[, number]...) as cfvar(string, number, number, number).
2460    13 | DEBUG EVALUATE /cfvar('x', 1, 2, 3).
2461       |                 ^~~~~~~~~~~~~~~~~~~
2462
2463 cfvar('x', 1, 2, 3) => error
2464
2465 mean(1, 2, 3, 4, 5) => 3.00
2466
2467 mean(1, $sysmis, 2, 3, $sysmis, 4, 5) => 3.00
2468
2469 mean(1, 2) => 1.50
2470
2471 evaluate.sps:18.17-18.21: error: DEBUG EVALUATE: Type mismatch invoking
2472 MEAN(number[, number]...) as mean().
2473    18 | DEBUG EVALUATE /mean().
2474       |                 ^~~~~
2475
2476 mean() => error
2477
2478 mean(1) => 1.00
2479
2480 mean(1, $sysmis) => 1.00
2481
2482 mean(1, 2, 3, $sysmis) => 2.00
2483
2484 mean.4(1, 2, 3, $sysmis) => sysmis
2485
2486 evaluate.sps:23.17-23.31: error: DEBUG EVALUATE: For MEAN(number[, number]...)
2487 with 3 arguments, at most 3 (not 4) may be required to be valid.
2488    23 | DEBUG EVALUATE /mean.4(1, 2, 3).
2489       |                 ^~~~~~~~~~~~~~~
2490
2491 mean.4(1, 2, 3) => error
2492
2493 median(1, 2, 3, 4, 5) => 3.00
2494
2495 median(2, 3, 4, 5, 1) => 3.00
2496
2497 median(2, 3, 4, 1, 5) => 3.00
2498
2499 median(2, 1, 4, 5, 3) => 3.00
2500
2501 median(1, 2, 3, 4) => 2.50
2502
2503 median(2, 3, 1, 4) => 2.50
2504
2505 median(2, 3, 4, 1) => 2.50
2506
2507 median(2, 1, 4, 3) => 2.50
2508
2509 median(1, $sysmis, 3, 4, 5) => 3.50
2510
2511 median(2, 3, 4, 5, $sysmis, 1) => 3.00
2512
2513 median($sysmis, $sysmis, $sysmis, 2, 3, 4, 1, 5) => 3.00
2514
2515 median(1, 2, 3) => 2.00
2516
2517 median(1) => 1.00
2518
2519 median(1, 2) => 1.50
2520
2521 median(1, 2, $sysmis) => 1.50
2522
2523 median(1, $sysmis, $sysmis) => 1.00
2524
2525 median($sysmis, $sysmis, $sysmis) => sysmis
2526
2527 median.3(1, 2, $sysmis) => sysmis
2528
2529 median.2(1, $sysmis) => sysmis
2530 ]])
2531 done
2532 AT_CLEANUP
2533
2534 AT_SETUP([expressions - SD SUM VARIANCE])
2535 AT_KEYWORDS([expression expressions evaluate])
2536 AT_DATA([evaluate-base.sps], [
2537 DEBUG EVALUATE SET opt.
2538
2539 DEBUG EVALUATE /sd(1, 2, 3, 4, 5).
2540 DEBUG EVALUATE /sd(1, $sysmis, 2, 3, $sysmis, 4, 5).
2541 DEBUG EVALUATE /sd(1, 2).
2542 DEBUG EVALUATE /sd(1).
2543 DEBUG EVALUATE /sd(1, $sysmis).
2544 DEBUG EVALUATE /sd(1, 2, 3, $sysmis).
2545 DEBUG EVALUATE /sd.4(1, 2, 3, $sysmis).
2546 DEBUG EVALUATE /sd.4(1, 2, 3).
2547 DEBUG EVALUATE /sd('x').
2548 DEBUG EVALUATE /sd('x', 1, 2, 3).
2549 DEBUG EVALUATE (a=1)(b=2)(c=3)(d=4)(e=5)(f=6)(g=7)/sd(a TO c).
2550
2551 DEBUG EVALUATE /sum(1, 2, 3, 4, 5).
2552 DEBUG EVALUATE /sum(1, $sysmis, 2, 3, $sysmis, 4, 5).
2553 DEBUG EVALUATE /sum(1, 2).
2554 DEBUG EVALUATE /sum().
2555 DEBUG EVALUATE /sum(1).
2556 DEBUG EVALUATE /sum(1, $sysmis).
2557 DEBUG EVALUATE /sum(1, 2, 3, $sysmis).
2558 DEBUG EVALUATE /sum.4(1, 2, 3, $sysmis).
2559 DEBUG EVALUATE /sum.4(1, 2, 3).
2560 DEBUG EVALUATE (a=1)(b=2)(c=3)(d=4)(e=5)(f=6)(g=7)/sum(b TO F).
2561
2562 DEBUG EVALUATE /variance(1, 2, 3, 4, 5).
2563 DEBUG EVALUATE /variance(1, $sysmis, 2, 3, $sysmis, 4, 5).
2564 DEBUG EVALUATE /variance(1, 2).
2565 DEBUG EVALUATE /variance(1).
2566 DEBUG EVALUATE /variance(1, $sysmis).
2567 DEBUG EVALUATE /variance(1, 2, 3, $sysmis).
2568 DEBUG EVALUATE /variance.4(1, 2, 3, $sysmis).
2569 DEBUG EVALUATE /variance.4(1, 2, 3).
2570 DEBUG EVALUATE /variance('x').
2571 DEBUG EVALUATE /variance('x', 1, 2, 3).
2572 DEBUG EVALUATE (a=1)(b=2)(c=3)(d=4)(e=5)(f=6)(g=7)/variance(a TO e).
2573 ])
2574
2575 for opt in OPT NOOPT; do
2576     AS_BOX([$opt])
2577     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2578     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
2579 [[sd(1, 2, 3, 4, 5) => 1.58
2580
2581 sd(1, $sysmis, 2, 3, $sysmis, 4, 5) => 1.58
2582
2583 sd(1, 2) => 0.71
2584
2585 evaluate.sps:7.17-7.21: error: DEBUG EVALUATE: Type mismatch invoking
2586 SD(number, number[, number]...) as sd(number).
2587     7 | DEBUG EVALUATE /sd(1).
2588       |                 ^~~~~
2589
2590 sd(1) => error
2591
2592 sd(1, $sysmis) => sysmis
2593
2594 sd(1, 2, 3, $sysmis) => 1.00
2595
2596 sd.4(1, 2, 3, $sysmis) => sysmis
2597
2598 evaluate.sps:11.17-11.29: error: DEBUG EVALUATE: For SD(number, number[,
2599 number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.
2600    11 | DEBUG EVALUATE /sd.4(1, 2, 3).
2601       |                 ^~~~~~~~~~~~~
2602
2603 sd.4(1, 2, 3) => error
2604
2605 evaluate.sps:12.17-12.23: error: DEBUG EVALUATE: Type mismatch invoking
2606 SD(number, number[, number]...) as sd(string).
2607    12 | DEBUG EVALUATE /sd('x').
2608       |                 ^~~~~~~
2609
2610 sd('x') => error
2611
2612 evaluate.sps:13.17-13.32: error: DEBUG EVALUATE: Type mismatch invoking
2613 SD(number, number[, number]...) as sd(string, number, number, number).
2614    13 | DEBUG EVALUATE /sd('x', 1, 2, 3).
2615       |                 ^~~~~~~~~~~~~~~~
2616
2617 sd('x', 1, 2, 3) => error
2618
2619 sd(a TO c) => 1.00
2620
2621 sum(1, 2, 3, 4, 5) => 15.00
2622
2623 sum(1, $sysmis, 2, 3, $sysmis, 4, 5) => 15.00
2624
2625 sum(1, 2) => 3.00
2626
2627 evaluate.sps:19.17-19.20: error: DEBUG EVALUATE: Type mismatch invoking
2628 SUM(number[, number]...) as sum().
2629    19 | DEBUG EVALUATE /sum().
2630       |                 ^~~~
2631
2632 sum() => error
2633
2634 sum(1) => 1.00
2635
2636 sum(1, $sysmis) => 1.00
2637
2638 sum(1, 2, 3, $sysmis) => 6.00
2639
2640 sum.4(1, 2, 3, $sysmis) => sysmis
2641
2642 evaluate.sps:24.17-24.30: error: DEBUG EVALUATE: For SUM(number[, number]...)
2643 with 3 arguments, at most 3 (not 4) may be required to be valid.
2644    24 | DEBUG EVALUATE /sum.4(1, 2, 3).
2645       |                 ^~~~~~~~~~~~~~
2646
2647 sum.4(1, 2, 3) => error
2648
2649 sum(b TO F) => 20.00
2650
2651 variance(1, 2, 3, 4, 5) => 2.50
2652
2653 variance(1, $sysmis, 2, 3, $sysmis, 4, 5) => 2.50
2654
2655 variance(1, 2) => 0.50
2656
2657 evaluate.sps:30.17-30.27: error: DEBUG EVALUATE: Type mismatch invoking
2658 VARIANCE(number, number[, number]...) as variance(number).
2659    30 | DEBUG EVALUATE /variance(1).
2660       |                 ^~~~~~~~~~~
2661
2662 variance(1) => error
2663
2664 variance(1, $sysmis) => sysmis
2665
2666 variance(1, 2, 3, $sysmis) => 1.00
2667
2668 variance.4(1, 2, 3, $sysmis) => sysmis
2669
2670 evaluate.sps:34.17-34.35: error: DEBUG EVALUATE: For VARIANCE(number, number[,
2671 number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.
2672    34 | DEBUG EVALUATE /variance.4(1, 2, 3).
2673       |                 ^~~~~~~~~~~~~~~~~~~
2674
2675 variance.4(1, 2, 3) => error
2676
2677 evaluate.sps:35.17-35.29: error: DEBUG EVALUATE: Type mismatch invoking
2678 VARIANCE(number, number[, number]...) as variance(string).
2679    35 | DEBUG EVALUATE /variance('x').
2680       |                 ^~~~~~~~~~~~~
2681
2682 variance('x') => error
2683
2684 evaluate.sps:36.17-36.38: error: DEBUG EVALUATE: Type mismatch invoking
2685 VARIANCE(number, number[, number]...) as variance(string, number, number,
2686 number).
2687    36 | DEBUG EVALUATE /variance('x', 1, 2, 3).
2688       |                 ^~~~~~~~~~~~~~~~~~~~~~
2689
2690 variance('x', 1, 2, 3) => error
2691
2692 variance(a TO e) => 2.50
2693 ]])
2694 done
2695 AT_CLEANUP
2696
2697 AT_SETUP([expressions - CONCAT])
2698 AT_KEYWORDS([expression expressions evaluate])
2699 AT_DATA([evaluate-base.sps], [
2700 DEBUG EVALUATE SET opt.
2701
2702 DEBUG EVALUATE /concat('').
2703 DEBUG EVALUATE /concat('a', 'b').
2704 DEBUG EVALUATE /concat('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h').
2705 DEBUG EVALUATE /concat('abcdefgh', 'ijklmnopq').
2706 DEBUG EVALUATE /concat('a', 1).
2707 DEBUG EVALUATE /concat(1, 2).
2708 ])
2709
2710 for opt in OPT NOOPT; do
2711     AS_BOX([$opt])
2712     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2713     AT_CHECK([pspp --testing-mode evaluate.sps], [1],
2714 [[concat('') => ""
2715
2716 concat('a', 'b') => "ab"
2717
2718 concat('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') => "abcdefgh"
2719
2720 concat('abcdefgh', 'ijklmnopq') => "abcdefghijklmnopq"
2721
2722 evaluate.sps:8.17-8.30: error: DEBUG EVALUATE: Type mismatch invoking
2723 CONCAT(string[, string]...) as concat(string, number).
2724     8 | DEBUG EVALUATE /concat('a', 1).
2725       |                 ^~~~~~~~~~~~~~
2726
2727 concat('a', 1) => error
2728
2729 evaluate.sps:9.17-9.28: error: DEBUG EVALUATE: Type mismatch invoking
2730 CONCAT(string[, string]...) as concat(number, number).
2731     9 | DEBUG EVALUATE /concat(1, 2).
2732       |                 ^~~~~~~~~~~~
2733
2734 concat(1, 2) => error
2735 ]])
2736 done
2737 AT_CLEANUP
2738
2739 AT_SETUP([expressions - INDEX])
2740 AT_KEYWORDS([expression expressions evaluate])
2741 AT_DATA([evaluate-base.sps], [
2742 DEBUG EVALUATE SET opt.
2743
2744 DEBUG EVALUATE /index('abcbcde', 'bc').
2745 DEBUG EVALUATE /index('abcbcde', 'bcd').
2746 DEBUG EVALUATE /index('abcbcde', 'bcbc').
2747 DEBUG EVALUATE /index('abcdefgh', 'abc').
2748 DEBUG EVALUATE /index('abcdefgh', 'bcd').
2749 DEBUG EVALUATE /index('abcdefgh', 'cde').
2750 DEBUG EVALUATE /index('abcdefgh', 'def').
2751 DEBUG EVALUATE /index('abcdefgh', 'efg').
2752 DEBUG EVALUATE /index('abcdefgh', 'fgh').
2753 DEBUG EVALUATE /index('abcdefgh', 'fghi').
2754 DEBUG EVALUATE /index('abcdefgh', 'x').
2755 DEBUG EVALUATE /index('abcdefgh', 'abch').
2756 DEBUG EVALUATE /index('banana', 'na').
2757 DEBUG EVALUATE /index('banana', 'ana').
2758 DEBUG EVALUATE /index('', 'x').
2759 DEBUG EVALUATE /index('', '').
2760 DEBUG EVALUATE /index('abcdefgh', '').
2761 DEBUG EVALUATE /index('abcdefgh', 'alkjsfdjlskalkjfa').
2762
2763 DEBUG EVALUATE /index('abcbcde', 'bc', 1).
2764 DEBUG EVALUATE /index('abcbcde', 'dc', 1).
2765 DEBUG EVALUATE /index('abcbcde', 'abc', 1).
2766 DEBUG EVALUATE /index('abcbcde', 'bc', 2).
2767 DEBUG EVALUATE /index('abcbcde', 'dc', 2).
2768 DEBUG EVALUATE /index('abcbcde', 'abc', 1).
2769 DEBUG EVALUATE /index('abcbcde', 'bccb', 2).
2770 DEBUG EVALUATE /index('abcbcde', 'bcbc', 2).
2771 DEBUG EVALUATE /index('abcbcde', 'bcbc', $sysmis).
2772 DEBUG EVALUATE /index('abcbcde', 'bcbc', 3).
2773 ])
2774
2775 for opt in OPT NOOPT; do
2776     AS_BOX([$opt])
2777     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2778     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
2779 index('abcbcde', 'bc') => 2.00
2780
2781 index('abcbcde', 'bcd') => 4.00
2782
2783 index('abcbcde', 'bcbc') => 2.00
2784
2785 index('abcdefgh', 'abc') => 1.00
2786
2787 index('abcdefgh', 'bcd') => 2.00
2788
2789 index('abcdefgh', 'cde') => 3.00
2790
2791 index('abcdefgh', 'def') => 4.00
2792
2793 index('abcdefgh', 'efg') => 5.00
2794
2795 index('abcdefgh', 'fgh') => 6.00
2796
2797 index('abcdefgh', 'fghi') => 0.00
2798
2799 index('abcdefgh', 'x') => 0.00
2800
2801 index('abcdefgh', 'abch') => 0.00
2802
2803 index('banana', 'na') => 3.00
2804
2805 index('banana', 'ana') => 2.00
2806
2807 index('', 'x') => 0.00
2808
2809 index('', '') => 1.00
2810
2811 index('abcdefgh', '') => 1.00
2812
2813 index('abcdefgh', 'alkjsfdjlskalkjfa') => 0.00
2814
2815 index('abcbcde', 'bc', 1) => 2.00
2816
2817 index('abcbcde', 'dc', 1) => 3.00
2818
2819 index('abcbcde', 'abc', 1) => 1.00
2820
2821 index('abcbcde', 'bc', 2) => 2.00
2822
2823 index('abcbcde', 'dc', 2) => 0.00
2824
2825 index('abcbcde', 'abc', 1) => 1.00
2826
2827 index('abcbcde', 'bccb', 2) => 2.00
2828
2829 index('abcbcde', 'bcbc', 2) => 2.00
2830
2831 index('abcbcde', 'bcbc', $sysmis) => sysmis
2832
2833 evaluate.sps:32.17-32.43: error: DEBUG EVALUATE: INDEX needle length argument
2834 must evenly divide the length of the needles argument.
2835    32 | DEBUG EVALUATE /index('abcbcde', 'bcbc', 3).
2836       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
2837
2838 evaluate.sps:32.34-32.39: note: DEBUG EVALUATE: The needles argument has length
2839 4.
2840    32 | DEBUG EVALUATE /index('abcbcde', 'bcbc', 3).
2841       |                                  ^~~~~~
2842
2843 evaluate.sps:32.42: note: DEBUG EVALUATE: The needle length argument has value
2844 3.
2845    32 | DEBUG EVALUATE /index('abcbcde', 'bcbc', 3).
2846       |                                          ^
2847
2848 index('abcbcde', 'bcbc', 3) => sysmis
2849 ])
2850 done
2851 AT_CLEANUP
2852
2853 AT_SETUP([expressions - RINDEX])
2854 AT_KEYWORDS([expression expressions evaluate])
2855 AT_DATA([evaluate-base.sps], [
2856 DEBUG EVALUATE SET opt.
2857
2858 DEBUG EVALUATE /rindex('abcbcde', 'bc').
2859 DEBUG EVALUATE /rindex('abcbcde', 'bcd').
2860 DEBUG EVALUATE /rindex('abcbcde', 'bcbc').
2861 DEBUG EVALUATE /rindex('abcdefgh', 'abc').
2862 DEBUG EVALUATE /rindex('abcdefgh', 'bcd').
2863 DEBUG EVALUATE /rindex('abcdefgh', 'cde').
2864 DEBUG EVALUATE /rindex('abcdefgh', 'def').
2865 DEBUG EVALUATE /rindex('abcdefgh', 'efg').
2866 DEBUG EVALUATE /rindex('abcdefgh', 'fgh').
2867 DEBUG EVALUATE /rindex('abcdefgh', 'fghi').
2868 DEBUG EVALUATE /rindex('abcdefgh', 'x').
2869 DEBUG EVALUATE /rindex('abcdefgh', 'abch').
2870 DEBUG EVALUATE /rindex('banana', 'na').
2871 DEBUG EVALUATE /rindex('banana', 'ana').
2872 DEBUG EVALUATE /rindex('', 'x').
2873 DEBUG EVALUATE /rindex('', '').
2874 DEBUG EVALUATE /rindex('abcdefgh', '').
2875 DEBUG EVALUATE /rindex('abcdefgh', 'alkjsfdjlskalkjfa').
2876
2877 DEBUG EVALUATE /rindex('abcbcde', 'bc', 1).
2878 DEBUG EVALUATE /rindex('abcbcde', 'dc', 1).
2879 DEBUG EVALUATE /rindex('abcbcde', 'abc', 1).
2880 DEBUG EVALUATE /rindex('abcbcde', 'bc', 2).
2881 DEBUG EVALUATE /rindex('abcbcde', 'dc', 2).
2882 DEBUG EVALUATE /rindex('abcbcde', 'abc', 1).
2883 DEBUG EVALUATE /rindex('abcbcde', 'bccb', 2).
2884 DEBUG EVALUATE /rindex('abcbcde', 'bcbc', 2).
2885 DEBUG EVALUATE /rindex('abcbcde', 'bcbc', 0).
2886 DEBUG EVALUATE /rindex('abcbcde', 'bcbc', $sysmis).
2887 DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 2).
2888 DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', $sysmis).
2889 DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 'x').
2890 DEBUG EVALUATE /rindex(1, 'bcdfkjl', 2).
2891 DEBUG EVALUATE /rindex('aksj', 2, 2).
2892 DEBUG EVALUATE /rindex(1, 2, 3).
2893 DEBUG EVALUATE /rindex(1, 2, '3').
2894 ])
2895
2896 for opt in OPT NOOPT; do
2897     AS_BOX([$opt])
2898     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
2899     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
2900 rindex('abcbcde', 'bc') => 4.00
2901
2902 rindex('abcbcde', 'bcd') => 4.00
2903
2904 rindex('abcbcde', 'bcbc') => 2.00
2905
2906 rindex('abcdefgh', 'abc') => 1.00
2907
2908 rindex('abcdefgh', 'bcd') => 2.00
2909
2910 rindex('abcdefgh', 'cde') => 3.00
2911
2912 rindex('abcdefgh', 'def') => 4.00
2913
2914 rindex('abcdefgh', 'efg') => 5.00
2915
2916 rindex('abcdefgh', 'fgh') => 6.00
2917
2918 rindex('abcdefgh', 'fghi') => 0.00
2919
2920 rindex('abcdefgh', 'x') => 0.00
2921
2922 rindex('abcdefgh', 'abch') => 0.00
2923
2924 rindex('banana', 'na') => 5.00
2925
2926 rindex('banana', 'ana') => 4.00
2927
2928 rindex('', 'x') => 0.00
2929
2930 rindex('', '') => 1.00
2931
2932 rindex('abcdefgh', '') => 9.00
2933
2934 rindex('abcdefgh', 'alkjsfdjlskalkjfa') => 0.00
2935
2936 rindex('abcbcde', 'bc', 1) => 5.00
2937
2938 rindex('abcbcde', 'dc', 1) => 6.00
2939
2940 rindex('abcbcde', 'abc', 1) => 5.00
2941
2942 rindex('abcbcde', 'bc', 2) => 4.00
2943
2944 rindex('abcbcde', 'dc', 2) => 0.00
2945
2946 rindex('abcbcde', 'abc', 1) => 5.00
2947
2948 rindex('abcbcde', 'bccb', 2) => 4.00
2949
2950 rindex('abcbcde', 'bcbc', 2) => 4.00
2951
2952 evaluate.sps:31.17-31.44: error: DEBUG EVALUATE: RINDEX needle length argument
2953 must evenly divide the length of the needles argument.
2954    31 | DEBUG EVALUATE /rindex('abcbcde', 'bcbc', 0).
2955       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
2956
2957 evaluate.sps:31.35-31.40: note: DEBUG EVALUATE: The needles argument has length
2958 4.
2959    31 | DEBUG EVALUATE /rindex('abcbcde', 'bcbc', 0).
2960       |                                   ^~~~~~
2961
2962 evaluate.sps:31.43: note: DEBUG EVALUATE: The needle length argument has value
2963 0.
2964    31 | DEBUG EVALUATE /rindex('abcbcde', 'bcbc', 0).
2965       |                                           ^
2966
2967 rindex('abcbcde', 'bcbc', 0) => sysmis
2968
2969 rindex('abcbcde', 'bcbc', $sysmis) => sysmis
2970
2971 evaluate.sps:33.17-33.45: error: DEBUG EVALUATE: RINDEX needle length argument
2972 must evenly divide the length of the needles argument.
2973    33 | DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 2).
2974       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2975
2976 evaluate.sps:33.35-33.41: note: DEBUG EVALUATE: The needles argument has length
2977 5.
2978    33 | DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 2).
2979       |                                   ^~~~~~~
2980
2981 evaluate.sps:33.44: note: DEBUG EVALUATE: The needle length argument has value
2982 2.
2983    33 | DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 2).
2984       |                                            ^
2985
2986 rindex('abcbcde', 'bcbcg', 2) => sysmis
2987
2988 rindex('abcbcde', 'bcbcg', $sysmis) => sysmis
2989
2990 evaluate.sps:35.17-35.47: error: DEBUG EVALUATE: Function invocation
2991 rindex(string, string, string) does not match any known function.  Candidates
2992 are:
2993 RINDEX(string, string)
2994 RINDEX(string, string, integer).
2995    35 | DEBUG EVALUATE /rindex('abcbcde', 'bcbcg', 'x').
2996       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2997
2998 rindex('abcbcde', 'bcbcg', 'x') => error
2999
3000 evaluate.sps:36.17-36.39: error: DEBUG EVALUATE: Function invocation
3001 rindex(number, string, number) does not match any known function.  Candidates
3002 are:
3003 RINDEX(string, string)
3004 RINDEX(string, string, integer).
3005    36 | DEBUG EVALUATE /rindex(1, 'bcdfkjl', 2).
3006       |                 ^~~~~~~~~~~~~~~~~~~~~~~
3007
3008 rindex(1, 'bcdfkjl', 2) => error
3009
3010 evaluate.sps:37.17-37.36: error: DEBUG EVALUATE: Function invocation
3011 rindex(string, number, number) does not match any known function.  Candidates
3012 are:
3013 RINDEX(string, string)
3014 RINDEX(string, string, integer).
3015    37 | DEBUG EVALUATE /rindex('aksj', 2, 2).
3016       |                 ^~~~~~~~~~~~~~~~~~~~
3017
3018 rindex('aksj', 2, 2) => error
3019
3020 evaluate.sps:38.17-38.31: error: DEBUG EVALUATE: Function invocation
3021 rindex(number, number, number) does not match any known function.  Candidates
3022 are:
3023 RINDEX(string, string)
3024 RINDEX(string, string, integer).
3025    38 | DEBUG EVALUATE /rindex(1, 2, 3).
3026       |                 ^~~~~~~~~~~~~~~
3027
3028 rindex(1, 2, 3) => error
3029
3030 evaluate.sps:39.17-39.33: error: DEBUG EVALUATE: Function invocation
3031 rindex(number, number, string) does not match any known function.  Candidates
3032 are:
3033 RINDEX(string, string)
3034 RINDEX(string, string, integer).
3035    39 | DEBUG EVALUATE /rindex(1, 2, '3').
3036       |                 ^~~~~~~~~~~~~~~~~
3037
3038 rindex(1, 2, '3') => error
3039 ])
3040 done
3041 AT_CLEANUP
3042
3043 AT_SETUP([expressions - LENGTH])
3044 AT_KEYWORDS([expression expressions evaluate])
3045 AT_DATA([evaluate-base.sps], [
3046 DEBUG EVALUATE SET opt.
3047
3048 DEBUG EVALUATE /length('').
3049 DEBUG EVALUATE /length('a').
3050 DEBUG EVALUATE /length('xy').
3051 DEBUG EVALUATE /length('adsf    ').
3052 DEBUG EVALUATE /length('abcdefghijkl').
3053 DEBUG EVALUATE /length(0).
3054 DEBUG EVALUATE /length($sysmis).
3055 ])
3056
3057 for opt in OPT NOOPT; do
3058     AS_BOX([$opt])
3059     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3060     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3061 length('') => 0.00
3062
3063 length('a') => 1.00
3064
3065 length('xy') => 2.00
3066
3067 length('adsf    ') => 8.00
3068
3069 length('abcdefghijkl') => 12.00
3070
3071 evaluate.sps:9.17-9.25: error: DEBUG EVALUATE: Type mismatch invoking
3072 LENGTH(string) as length(number).
3073     9 | DEBUG EVALUATE /length(0).
3074       |                 ^~~~~~~~~
3075
3076 length(0) => error
3077
3078 evaluate.sps:10.17-10.31: error: DEBUG EVALUATE: Type mismatch invoking
3079 LENGTH(string) as length(number).
3080    10 | DEBUG EVALUATE /length($sysmis).
3081       |                 ^~~~~~~~~~~~~~~
3082
3083 length($sysmis) => error
3084 ])
3085 done
3086 AT_CLEANUP
3087
3088 AT_SETUP([expressions - LOWER])
3089 AT_KEYWORDS([expression expressions evaluate])
3090 AT_DATA([evaluate-base.sps], [
3091 DEBUG EVALUATE SET opt.
3092
3093 DEBUG EVALUATE /lower('ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089').
3094 DEBUG EVALUATE /lower('').
3095 DEBUG EVALUATE /lower(1).
3096 ])
3097
3098 for opt in OPT NOOPT; do
3099     AS_BOX([$opt])
3100     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3101     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3102 lower('ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089') => "abcdefghijklmnopqrstuvwxyz!@
3103 %&*089"
3104
3105 lower('') => ""
3106
3107 evaluate.sps:6.17-6.24: error: DEBUG EVALUATE: Type mismatch invoking
3108 LOWER(string) as lower(number).
3109     6 | DEBUG EVALUATE /lower(1).
3110       |                 ^~~~~~~~
3111
3112 lower(1) => error
3113 ])
3114 done
3115 AT_CLEANUP
3116
3117 AT_SETUP([expressions - REPLACE])
3118 AT_KEYWORDS([expression expressions evaluate])
3119 AT_DATA([evaluate-base.sps], [
3120 DEBUG EVALUATE SET opt.
3121 DEBUG EVALUATE /replace('banana', 'an', 'AN').
3122 DEBUG EVALUATE /replace('banana', 'an', 'a').
3123 DEBUG EVALUATE /replace('banana', 'an', '').
3124 DEBUG EVALUATE /replace('banana', 'na', '').
3125 DEBUG EVALUATE /replace('banana', 'ba', 'BA').
3126 DEBUG EVALUATE /replace('banana', 'na', 'xyzzy').
3127 DEBUG EVALUATE /replace('banana', 'an', 'xyzzy', 1).
3128 DEBUG EVALUATE /replace('banana', 'an', 'xyzzy', 1.5).
3129 DEBUG EVALUATE /replace('banana', 'bananana', 'xyzzy').
3130 DEBUG EVALUATE /replace('banana', '', 'xyzzy').
3131 DEBUG EVALUATE /replace('banana', 'ba', '', 0).
3132 DEBUG EVALUATE /replace('banana', 'ba', '', -1).
3133 DEBUG EVALUATE /replace('banana', 'ba', '', $sysmis).
3134 ])
3135
3136 for opt in OPT NOOPT; do
3137     AS_BOX([$opt])
3138     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3139     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3140 replace('banana', 'an', 'AN') => "bANANa"
3141
3142 replace('banana', 'an', 'a') => "baaa"
3143
3144 replace('banana', 'an', '') => "ba"
3145
3146 replace('banana', 'na', '') => "ba"
3147
3148 replace('banana', 'ba', 'BA') => "BAnana"
3149
3150 replace('banana', 'na', 'xyzzy') => "baxyzzyxyzzy"
3151
3152 replace('banana', 'an', 'xyzzy', 1) => "bxyzzyana"
3153
3154 evaluate.sps:10.50-10.52: error: DEBUG EVALUATE: Treating unexpected non-
3155 integer value 1.5 as missing.
3156    10 | DEBUG EVALUATE /replace('banana', 'an', 'xyzzy', 1.5).
3157       |                                                  ^~~
3158
3159 replace('banana', 'an', 'xyzzy', 1.5) => "banana"
3160
3161 replace('banana', 'bananana', 'xyzzy') => "banana"
3162
3163 replace('banana', '', 'xyzzy') => "banana"
3164
3165 replace('banana', 'ba', '', 0) => "banana"
3166
3167 replace('banana', 'ba', '', -1) => "banana"
3168
3169 replace('banana', 'ba', '', $sysmis) => "banana"
3170 ])
3171 done
3172 AT_CLEANUP
3173
3174 AT_SETUP([expressions - LPAD])
3175 AT_KEYWORDS([expression expressions evaluate])
3176 AT_DATA([evaluate-base.sps], [dnl
3177 DEBUG EVALUATE SET opt.
3178
3179 DEBUG EVALUATE /lpad('abc', 0).
3180 DEBUG EVALUATE /lpad('abc', 2).
3181 DEBUG EVALUATE /lpad('abc', 3).
3182 DEBUG EVALUATE /lpad('abc', 10).
3183
3184 DEBUG EVALUATE /lpad('abc', -1).
3185 DEBUG EVALUATE /lpad('abc', 32768).
3186 DEBUG EVALUATE /lpad('abc', $sysmis).
3187
3188 DEBUG EVALUATE /lpad('abc', -1, '*').
3189 DEBUG EVALUATE /lpad('abc', 0, '*').
3190 DEBUG EVALUATE /lpad('abc', 2, '*').
3191 DEBUG EVALUATE /lpad('abc', 3, '*').
3192 DEBUG EVALUATE /lpad('abc', 10, '*').
3193
3194 DEBUG EVALUATE /lpad('abc', 5, 'de').
3195 DEBUG EVALUATE /lpad('abc', 6, 'de').
3196 DEBUG EVALUATE /lpad('abc', 7, 'de').
3197 DEBUG EVALUATE /lpad('abc', 8, 'de').
3198 DEBUG EVALUATE /lpad('abc', 9, 'de').
3199
3200 DEBUG EVALUATE /lpad('abc', 32768, '*').
3201 DEBUG EVALUATE /lpad('abc', $sysmis, '*').
3202 DEBUG EVALUATE /lpad('abc', $sysmis, '').
3203 DEBUG EVALUATE /lpad('abc', $sysmis, 'xy').
3204 DEBUG EVALUATE /lpad(0, 10).
3205 DEBUG EVALUATE /lpad('abc', 'def').
3206 DEBUG EVALUATE /lpad(0, 10, ' ').
3207 DEBUG EVALUATE /lpad('abc', 'def', ' ').
3208 DEBUG EVALUATE /lpad('x', 5, 0).
3209 DEBUG EVALUATE /lpad('x', 5, 2).
3210 ])
3211
3212 for opt in OPT NOOPT; do
3213     AS_BOX([$opt])
3214     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3215     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3216 lpad('abc', 0) => "abc"
3217
3218 lpad('abc', 2) => "abc"
3219
3220 lpad('abc', 3) => "abc"
3221
3222 lpad('abc', 10) => "       abc"
3223
3224 evaluate.sps:8.17-8.31: error: DEBUG EVALUATE: The length argument to LPAD must
3225 be between 0 and 32767.
3226     8 | DEBUG EVALUATE /lpad('abc', -1).
3227       |                 ^~~~~~~~~~~~~~~
3228
3229 evaluate.sps:8.29-8.30: note: DEBUG EVALUATE: The length argument is -1.
3230     8 | DEBUG EVALUATE /lpad('abc', -1).
3231       |                             ^~
3232
3233 lpad('abc', -1) => "abc"
3234
3235 evaluate.sps:9.17-9.34: error: DEBUG EVALUATE: The length argument to LPAD must
3236 be between 0 and 32767.
3237     9 | DEBUG EVALUATE /lpad('abc', 32768).
3238       |                 ^~~~~~~~~~~~~~~~~~
3239
3240 evaluate.sps:9.29-9.33: note: DEBUG EVALUATE: The length argument is 32768.
3241     9 | DEBUG EVALUATE /lpad('abc', 32768).
3242       |                             ^~~~~
3243
3244 lpad('abc', 32768) => "abc"
3245
3246 lpad('abc', $sysmis) => "abc"
3247
3248 evaluate.sps:12.17-12.36: error: DEBUG EVALUATE: The length argument to LPAD
3249 must be between 0 and 32767.
3250    12 | DEBUG EVALUATE /lpad('abc', -1, '*').
3251       |                 ^~~~~~~~~~~~~~~~~~~~
3252
3253 evaluate.sps:12.29-12.30: note: DEBUG EVALUATE: The length argument is -1.
3254    12 | DEBUG EVALUATE /lpad('abc', -1, '*').
3255       |                             ^~
3256
3257 lpad('abc', -1, '*') => "abc"
3258
3259 lpad('abc', 0, '*') => "abc"
3260
3261 lpad('abc', 2, '*') => "abc"
3262
3263 lpad('abc', 3, '*') => "abc"
3264
3265 lpad('abc', 10, '*') => "*******abc"
3266
3267 lpad('abc', 5, 'de') => "deabc"
3268
3269 lpad('abc', 6, 'de') => "deabc"
3270
3271 lpad('abc', 7, 'de') => "dedeabc"
3272
3273 lpad('abc', 8, 'de') => "dedeabc"
3274
3275 lpad('abc', 9, 'de') => "dededeabc"
3276
3277 evaluate.sps:24.17-24.39: error: DEBUG EVALUATE: The length argument to LPAD
3278 must be between 0 and 32767.
3279    24 | DEBUG EVALUATE /lpad('abc', 32768, '*').
3280       |                 ^~~~~~~~~~~~~~~~~~~~~~~
3281
3282 evaluate.sps:24.29-24.33: note: DEBUG EVALUATE: The length argument is 32768.
3283    24 | DEBUG EVALUATE /lpad('abc', 32768, '*').
3284       |                             ^~~~~
3285
3286 lpad('abc', 32768, '*') => "abc"
3287
3288 lpad('abc', $sysmis, '*') => "abc"
3289
3290 lpad('abc', $sysmis, '') => "abc"
3291
3292 lpad('abc', $sysmis, 'xy') => "abc"
3293
3294 evaluate.sps:28.17-28.27: error: DEBUG EVALUATE: Function invocation
3295 lpad(number, number) does not match any known function.  Candidates are:
3296 LPAD(string, integer)
3297 LPAD(string, integer, string).
3298    28 | DEBUG EVALUATE /lpad(0, 10).
3299       |                 ^~~~~~~~~~~
3300
3301 lpad(0, 10) => error
3302
3303 evaluate.sps:29.17-29.34: error: DEBUG EVALUATE: Function invocation
3304 lpad(string, string) does not match any known function.  Candidates are:
3305 LPAD(string, integer)
3306 LPAD(string, integer, string).
3307    29 | DEBUG EVALUATE /lpad('abc', 'def').
3308       |                 ^~~~~~~~~~~~~~~~~~
3309
3310 lpad('abc', 'def') => error
3311
3312 evaluate.sps:30.17-30.32: error: DEBUG EVALUATE: Function invocation
3313 lpad(number, number, string) does not match any known function.  Candidates
3314 are:
3315 LPAD(string, integer)
3316 LPAD(string, integer, string).
3317    30 | DEBUG EVALUATE /lpad(0, 10, ' ').
3318       |                 ^~~~~~~~~~~~~~~~
3319
3320 lpad(0, 10, ' ') => error
3321
3322 evaluate.sps:31.17-31.39: error: DEBUG EVALUATE: Function invocation
3323 lpad(string, string, string) does not match any known function.  Candidates
3324 are:
3325 LPAD(string, integer)
3326 LPAD(string, integer, string).
3327    31 | DEBUG EVALUATE /lpad('abc', 'def', ' ').
3328       |                 ^~~~~~~~~~~~~~~~~~~~~~~
3329
3330 lpad('abc', 'def', ' ') => error
3331
3332 evaluate.sps:32.17-32.31: error: DEBUG EVALUATE: Function invocation
3333 lpad(string, number, number) does not match any known function.  Candidates
3334 are:
3335 LPAD(string, integer)
3336 LPAD(string, integer, string).
3337    32 | DEBUG EVALUATE /lpad('x', 5, 0).
3338       |                 ^~~~~~~~~~~~~~~
3339
3340 lpad('x', 5, 0) => error
3341
3342 evaluate.sps:33.17-33.31: error: DEBUG EVALUATE: Function invocation
3343 lpad(string, number, number) does not match any known function.  Candidates
3344 are:
3345 LPAD(string, integer)
3346 LPAD(string, integer, string).
3347    33 | DEBUG EVALUATE /lpad('x', 5, 2).
3348       |                 ^~~~~~~~~~~~~~~
3349
3350 lpad('x', 5, 2) => error
3351 ])
3352 done
3353 AT_CLEANUP
3354
3355 AT_SETUP([expressions - NUMBER])
3356 AT_KEYWORDS([expression expressions evaluate])
3357 AT_DATA([evaluate-base.sps], [
3358 DEBUG EVALUATE SET opt.
3359 DEBUG EVALUATE /number("123", f3.0).
3360 DEBUG EVALUATE /number(" 123", f3.0).
3361 DEBUG EVALUATE /number("123", f3.1).
3362 DEBUG EVALUATE /number("   ", f3.1).
3363 DEBUG EVALUATE /number("123", a8).
3364 dnl CCA is not an input format:
3365 DEBUG EVALUATE /number("123", cca1.2).
3366 ])
3367
3368 for opt in OPT NOOPT; do
3369     AS_BOX([$opt])
3370     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3371     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3372 number("123", f3.0) => 123.00
3373
3374 number(" 123", f3.0) => 12.00
3375
3376 number("123", f3.1) => 12.30
3377
3378 number("   ", f3.1) => sysmis
3379
3380 evaluate.sps:7.17-7.33: error: DEBUG EVALUATE: Type mismatch invoking
3381 NUMBER(string, num_input_format) as number(string, format).
3382     7 | DEBUG EVALUATE /number("123", a8).
3383       |                 ^~~~~~~~~~~~~~~~~
3384
3385 number("123", a8) => error
3386
3387 evaluate.sps:8.17-8.37: error: DEBUG EVALUATE: Type mismatch invoking
3388 NUMBER(string, num_input_format) as number(string, format).
3389     8 | DEBUG EVALUATE /number("123", cca1.2).
3390       |                 ^~~~~~~~~~~~~~~~~~~~~
3391
3392 number("123", cca1.2) => error
3393 ])
3394 done
3395 AT_CLEANUP
3396
3397 AT_SETUP([expressions - LTRIM])
3398 AT_KEYWORDS([expression expressions evaluate])
3399 AT_DATA([evaluate-base.sps], [
3400 DEBUG EVALUATE SET opt.
3401 DEBUG EVALUATE /ltrim('   abc').
3402 DEBUG EVALUATE /rtrim('   abc   ').
3403 DEBUG EVALUATE /ltrim('abc').
3404 * The following string contains a tab.
3405 DEBUG EVALUATE /ltrim(' abc').
3406 DEBUG EVALUATE /ltrim('    ').
3407 DEBUG EVALUATE /ltrim('').
3408 DEBUG EVALUATE /ltrim(8).
3409
3410 DEBUG EVALUATE /ltrim('***abc', '*').
3411 DEBUG EVALUATE /ltrim('abc', '*').
3412 DEBUG EVALUATE /ltrim('*abc', '*').
3413 DEBUG EVALUATE /ltrim('', '*').
3414
3415 DEBUG EVALUATE /ltrim('abc', 'xy').
3416 DEBUG EVALUATE /ltrim('xyabc', 'xy').
3417 DEBUG EVALUATE /ltrim('xyxyabc', 'xy').
3418
3419 DEBUG EVALUATE /ltrim(8, '*').
3420 DEBUG EVALUATE /ltrim(' x', 8).
3421 DEBUG EVALUATE /ltrim(8, 9).
3422 ])
3423
3424 for opt in OPT NOOPT; do
3425     AS_BOX([$opt])
3426     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3427     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3428 ltrim('   abc') => "abc"
3429
3430 rtrim('   abc   ') => "   abc"
3431
3432 ltrim('abc') => "abc"
3433
3434 ltrim(' abc') => "      abc"
3435
3436 ltrim('    ') => ""
3437
3438 ltrim('') => ""
3439
3440 evaluate.sps:10.17-10.24: error: DEBUG EVALUATE: Function invocation
3441 ltrim(number) does not match any known function.  Candidates are:
3442 LTRIM(string)
3443 LTRIM(string, string).
3444    10 | DEBUG EVALUATE /ltrim(8).
3445       |                 ^~~~~~~~
3446
3447 ltrim(8) => error
3448
3449 ltrim('***abc', '*') => "abc"
3450
3451 ltrim('abc', '*') => "abc"
3452
3453 ltrim('*abc', '*') => "abc"
3454
3455 ltrim('', '*') => ""
3456
3457 ltrim('abc', 'xy') => "abc"
3458
3459 ltrim('xyabc', 'xy') => "abc"
3460
3461 ltrim('xyxyabc', 'xy') => "abc"
3462
3463 evaluate.sps:21.17-21.29: error: DEBUG EVALUATE: Function invocation
3464 ltrim(number, string) does not match any known function.  Candidates are:
3465 LTRIM(string)
3466 LTRIM(string, string).
3467    21 | DEBUG EVALUATE /ltrim(8, '*').
3468       |                 ^~~~~~~~~~~~~
3469
3470 ltrim(8, '*') => error
3471
3472 evaluate.sps:22.17-22.30: error: DEBUG EVALUATE: Function invocation
3473 ltrim(string, number) does not match any known function.  Candidates are:
3474 LTRIM(string)
3475 LTRIM(string, string).
3476    22 | DEBUG EVALUATE /ltrim(' x', 8).
3477       |                 ^~~~~~~~~~~~~~
3478
3479 ltrim(' x', 8) => error
3480
3481 evaluate.sps:23.17-23.27: error: DEBUG EVALUATE: Function invocation
3482 ltrim(number, number) does not match any known function.  Candidates are:
3483 LTRIM(string)
3484 LTRIM(string, string).
3485    23 | DEBUG EVALUATE /ltrim(8, 9).
3486       |                 ^~~~~~~~~~~
3487
3488 ltrim(8, 9) => error
3489 ])
3490 done
3491 AT_CLEANUP
3492
3493 AT_SETUP([expressions - RPAD])
3494 AT_KEYWORDS([expression expressions evaluate])
3495 AT_DATA([evaluate-base.sps], [dnl
3496 DEBUG EVALUATE SET opt.
3497
3498 DEBUG EVALUATE /rpad('abc', 0).
3499 DEBUG EVALUATE /rpad('abc', 2).
3500 DEBUG EVALUATE /rpad('abc', 3).
3501 DEBUG EVALUATE /rpad('abc', 10).
3502
3503 DEBUG EVALUATE /rpad('abc', -1).
3504 DEBUG EVALUATE /rpad('abc', 32768).
3505 DEBUG EVALUATE /rpad('abc', $sysmis).
3506
3507 DEBUG EVALUATE /rpad('abc', -1, '*').
3508 DEBUG EVALUATE /rpad('abc', 0, '*').
3509 DEBUG EVALUATE /rpad('abc', 2, '*').
3510 DEBUG EVALUATE /rpad('abc', 3, '*').
3511 DEBUG EVALUATE /rpad('abc', 10, '*').
3512
3513 DEBUG EVALUATE /rpad('abc', 5, 'de').
3514 DEBUG EVALUATE /rpad('abc', 6, 'de').
3515 DEBUG EVALUATE /rpad('abc', 7, 'de').
3516 DEBUG EVALUATE /rpad('abc', 8, 'de').
3517 DEBUG EVALUATE /rpad('abc', 9, 'de').
3518
3519 DEBUG EVALUATE /rpad('abc', 32768, '*').
3520 DEBUG EVALUATE /rpad('abc', $sysmis, '*').
3521 DEBUG EVALUATE /rpad('abc', $sysmis, '').
3522 DEBUG EVALUATE /rpad('abc', $sysmis, 'xy').
3523 DEBUG EVALUATE /rpad(0, 10).
3524 DEBUG EVALUATE /rpad('abc', 'def').
3525 DEBUG EVALUATE /rpad(0, 10, ' ').
3526 DEBUG EVALUATE /rpad('abc', 'def', ' ').
3527 DEBUG EVALUATE /rpad('x', 5, 0).
3528 DEBUG EVALUATE /rpad('x', 5, 2).
3529 ])
3530
3531 for opt in OPT NOOPT; do
3532     AS_BOX([$opt])
3533     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3534     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3535 rpad('abc', 0) => "abc"
3536
3537 rpad('abc', 2) => "abc"
3538
3539 rpad('abc', 3) => "abc"
3540
3541 rpad('abc', 10) => "abc       "
3542
3543 evaluate.sps:8.17-8.31: error: DEBUG EVALUATE: The length argument to RPAD must
3544 be between 0 and 32767.
3545     8 | DEBUG EVALUATE /rpad('abc', -1).
3546       |                 ^~~~~~~~~~~~~~~
3547
3548 evaluate.sps:8.29-8.30: note: DEBUG EVALUATE: The length argument is -1.
3549     8 | DEBUG EVALUATE /rpad('abc', -1).
3550       |                             ^~
3551
3552 rpad('abc', -1) => "abc"
3553
3554 evaluate.sps:9.17-9.34: error: DEBUG EVALUATE: The length argument to RPAD must
3555 be between 0 and 32767.
3556     9 | DEBUG EVALUATE /rpad('abc', 32768).
3557       |                 ^~~~~~~~~~~~~~~~~~
3558
3559 evaluate.sps:9.29-9.33: note: DEBUG EVALUATE: The length argument is 32768.
3560     9 | DEBUG EVALUATE /rpad('abc', 32768).
3561       |                             ^~~~~
3562
3563 rpad('abc', 32768) => "abc"
3564
3565 rpad('abc', $sysmis) => "abc"
3566
3567 evaluate.sps:12.17-12.36: error: DEBUG EVALUATE: The length argument to RPAD
3568 must be between 0 and 32767.
3569    12 | DEBUG EVALUATE /rpad('abc', -1, '*').
3570       |                 ^~~~~~~~~~~~~~~~~~~~
3571
3572 evaluate.sps:12.29-12.30: note: DEBUG EVALUATE: The length argument is -1.
3573    12 | DEBUG EVALUATE /rpad('abc', -1, '*').
3574       |                             ^~
3575
3576 rpad('abc', -1, '*') => "abc"
3577
3578 rpad('abc', 0, '*') => "abc"
3579
3580 rpad('abc', 2, '*') => "abc"
3581
3582 rpad('abc', 3, '*') => "abc"
3583
3584 rpad('abc', 10, '*') => "abc*******"
3585
3586 rpad('abc', 5, 'de') => "abcde"
3587
3588 rpad('abc', 6, 'de') => "abcde"
3589
3590 rpad('abc', 7, 'de') => "abcdede"
3591
3592 rpad('abc', 8, 'de') => "abcdede"
3593
3594 rpad('abc', 9, 'de') => "abcdedede"
3595
3596 evaluate.sps:24.17-24.39: error: DEBUG EVALUATE: The length argument to RPAD
3597 must be between 0 and 32767.
3598    24 | DEBUG EVALUATE /rpad('abc', 32768, '*').
3599       |                 ^~~~~~~~~~~~~~~~~~~~~~~
3600
3601 evaluate.sps:24.29-24.33: note: DEBUG EVALUATE: The length argument is 32768.
3602    24 | DEBUG EVALUATE /rpad('abc', 32768, '*').
3603       |                             ^~~~~
3604
3605 rpad('abc', 32768, '*') => "abc"
3606
3607 rpad('abc', $sysmis, '*') => "abc"
3608
3609 rpad('abc', $sysmis, '') => "abc"
3610
3611 rpad('abc', $sysmis, 'xy') => "abc"
3612
3613 evaluate.sps:28.17-28.27: error: DEBUG EVALUATE: Function invocation
3614 rpad(number, number) does not match any known function.  Candidates are:
3615 RPAD(string, integer)
3616 RPAD(string, integer, string).
3617    28 | DEBUG EVALUATE /rpad(0, 10).
3618       |                 ^~~~~~~~~~~
3619
3620 rpad(0, 10) => error
3621
3622 evaluate.sps:29.17-29.34: error: DEBUG EVALUATE: Function invocation
3623 rpad(string, string) does not match any known function.  Candidates are:
3624 RPAD(string, integer)
3625 RPAD(string, integer, string).
3626    29 | DEBUG EVALUATE /rpad('abc', 'def').
3627       |                 ^~~~~~~~~~~~~~~~~~
3628
3629 rpad('abc', 'def') => error
3630
3631 evaluate.sps:30.17-30.32: error: DEBUG EVALUATE: Function invocation
3632 rpad(number, number, string) does not match any known function.  Candidates
3633 are:
3634 RPAD(string, integer)
3635 RPAD(string, integer, string).
3636    30 | DEBUG EVALUATE /rpad(0, 10, ' ').
3637       |                 ^~~~~~~~~~~~~~~~
3638
3639 rpad(0, 10, ' ') => error
3640
3641 evaluate.sps:31.17-31.39: error: DEBUG EVALUATE: Function invocation
3642 rpad(string, string, string) does not match any known function.  Candidates
3643 are:
3644 RPAD(string, integer)
3645 RPAD(string, integer, string).
3646    31 | DEBUG EVALUATE /rpad('abc', 'def', ' ').
3647       |                 ^~~~~~~~~~~~~~~~~~~~~~~
3648
3649 rpad('abc', 'def', ' ') => error
3650
3651 evaluate.sps:32.17-32.31: error: DEBUG EVALUATE: Function invocation
3652 rpad(string, number, number) does not match any known function.  Candidates
3653 are:
3654 RPAD(string, integer)
3655 RPAD(string, integer, string).
3656    32 | DEBUG EVALUATE /rpad('x', 5, 0).
3657       |                 ^~~~~~~~~~~~~~~
3658
3659 rpad('x', 5, 0) => error
3660
3661 evaluate.sps:33.17-33.31: error: DEBUG EVALUATE: Function invocation
3662 rpad(string, number, number) does not match any known function.  Candidates
3663 are:
3664 RPAD(string, integer)
3665 RPAD(string, integer, string).
3666    33 | DEBUG EVALUATE /rpad('x', 5, 2).
3667       |                 ^~~~~~~~~~~~~~~
3668
3669 rpad('x', 5, 2) => error
3670 ])
3671 done
3672 AT_CLEANUP
3673
3674 AT_SETUP([expressions - RTRIM])
3675 AT_KEYWORDS([expression expressions evaluate])
3676 AT_DATA([evaluate-base.sps], [
3677 DEBUG EVALUATE SET opt.
3678 DEBUG EVALUATE /rtrim('abc   ').
3679 DEBUG EVALUATE /rtrim('   abc   ').
3680 DEBUG EVALUATE /rtrim('abc').
3681 * The following string contains a tab.
3682 DEBUG EVALUATE /rtrim('abc      ').
3683 DEBUG EVALUATE /rtrim('    ').
3684 DEBUG EVALUATE /rtrim('').
3685 DEBUG EVALUATE /rtrim(8).
3686
3687 DEBUG EVALUATE /rtrim('abc***', '*').
3688 DEBUG EVALUATE /rtrim('abc', '*').
3689 DEBUG EVALUATE /rtrim('abc*', '*').
3690 DEBUG EVALUATE /rtrim('', '*').
3691
3692 DEBUG EVALUATE /rtrim('abc', 'xy').
3693 DEBUG EVALUATE /rtrim('abcxy', 'xy').
3694 DEBUG EVALUATE /rtrim('abcxyxy', 'xy').
3695
3696 DEBUG EVALUATE /rtrim(8, '*').
3697 DEBUG EVALUATE /rtrim('x ', 8).
3698 DEBUG EVALUATE /rtrim(8, 9).
3699 ])
3700
3701 for opt in OPT NOOPT; do
3702     AS_BOX([$opt])
3703     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3704     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3705 rtrim('abc   ') => "abc"
3706
3707 rtrim('   abc   ') => "   abc"
3708
3709 rtrim('abc') => "abc"
3710
3711 rtrim('abc      ') => "abc      "
3712
3713 rtrim('    ') => ""
3714
3715 rtrim('') => ""
3716
3717 evaluate.sps:10.17-10.24: error: DEBUG EVALUATE: Function invocation
3718 rtrim(number) does not match any known function.  Candidates are:
3719 RTRIM(string)
3720 RTRIM(string, string).
3721    10 | DEBUG EVALUATE /rtrim(8).
3722       |                 ^~~~~~~~
3723
3724 rtrim(8) => error
3725
3726 rtrim('abc***', '*') => "abc"
3727
3728 rtrim('abc', '*') => "abc"
3729
3730 rtrim('abc*', '*') => "abc"
3731
3732 rtrim('', '*') => ""
3733
3734 rtrim('abc', 'xy') => "abc"
3735
3736 rtrim('abcxy', 'xy') => "abc"
3737
3738 rtrim('abcxyxy', 'xy') => "abc"
3739
3740 evaluate.sps:21.17-21.29: error: DEBUG EVALUATE: Function invocation
3741 rtrim(number, string) does not match any known function.  Candidates are:
3742 RTRIM(string)
3743 RTRIM(string, string).
3744    21 | DEBUG EVALUATE /rtrim(8, '*').
3745       |                 ^~~~~~~~~~~~~
3746
3747 rtrim(8, '*') => error
3748
3749 evaluate.sps:22.17-22.30: error: DEBUG EVALUATE: Function invocation
3750 rtrim(string, number) does not match any known function.  Candidates are:
3751 RTRIM(string)
3752 RTRIM(string, string).
3753    22 | DEBUG EVALUATE /rtrim('x ', 8).
3754       |                 ^~~~~~~~~~~~~~
3755
3756 rtrim('x ', 8) => error
3757
3758 evaluate.sps:23.17-23.27: error: DEBUG EVALUATE: Function invocation
3759 rtrim(number, number) does not match any known function.  Candidates are:
3760 RTRIM(string)
3761 RTRIM(string, string).
3762    23 | DEBUG EVALUATE /rtrim(8, 9).
3763       |                 ^~~~~~~~~~~
3764
3765 rtrim(8, 9) => error
3766 ])
3767 done
3768 AT_CLEANUP
3769
3770 AT_SETUP([expressions - STRING])
3771 AT_KEYWORDS([expression expressions evaluate])
3772 AT_DATA([evaluate-base.sps], [
3773 DEBUG EVALUATE SET opt.
3774 DEBUG EVALUATE /string(123.56, f5.1).
3775 DEBUG EVALUATE /string($sysmis, f5.1).
3776 DEBUG EVALUATE /string("abc", A5).
3777 dnl E has a minimum width of 6 on output:
3778 DEBUG EVALUATE /string(123, e1).
3779 DEBUG EVALUATE /string(123, e6.0).
3780 ])
3781
3782 for opt in OPT NOOPT; do
3783     AS_BOX([$opt])
3784     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3785     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3786 ])
3787 done
3788 AT_CLEANUP
3789
3790 AT_SETUP([expressions - STRUNC])
3791 AT_KEYWORDS([expression expressions evaluate])
3792 AT_DATA([evaluate-base.sps], [
3793 DEBUG EVALUATE SET opt.
3794 DEBUG EVALUATE /strunc('a c   ', 9).
3795 DEBUG EVALUATE /strunc('a c   ', 7).
3796 DEBUG EVALUATE /strunc('a c   ', 6).
3797 DEBUG EVALUATE /strunc('a c   ', 5).
3798 DEBUG EVALUATE /strunc('a c   ', 4).
3799 DEBUG EVALUATE /strunc('a c   ', 3).
3800 DEBUG EVALUATE /strunc('a c   ', 2).
3801 DEBUG EVALUATE /strunc('a c   ', 1).
3802 DEBUG EVALUATE /strunc('a c   ', 0).
3803 DEBUG EVALUATE /strunc('a c   ', -1).
3804 DEBUG EVALUATE /strunc('a c   ', $sysmis).
3805 DEBUG EVALUATE /strunc('  abc  ', 9).
3806 DEBUG EVALUATE /strunc('  abc  ', 8).
3807 DEBUG EVALUATE /strunc('  abc  ', 7).
3808 DEBUG EVALUATE /strunc('  abc  ', 6).
3809 DEBUG EVALUATE /strunc('  abc  ', 5).
3810 DEBUG EVALUATE /strunc('  abc  ', 4).
3811 DEBUG EVALUATE /strunc('  abc  ', 3).
3812 DEBUG EVALUATE /strunc('  abc  ', 2).
3813 DEBUG EVALUATE /strunc('  abc  ', 1).
3814 DEBUG EVALUATE /strunc('  abc  ', -1).
3815 DEBUG EVALUATE /strunc('  abc  ', $sysmis).
3816 ])
3817
3818 for opt in OPT NOOPT; do
3819     AS_BOX([$opt])
3820     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3821     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3822 ])
3823 done
3824 AT_CLEANUP
3825
3826 AT_SETUP([expressions - SUBSTR])
3827 AT_KEYWORDS([expression expressions evaluate])
3828 AT_DATA([evaluate-base.sps], [
3829 DEBUG EVALUATE SET opt.
3830 DEBUG EVALUATE /substr('abcdefgh', -5).
3831 DEBUG EVALUATE /substr('abcdefgh', 0).
3832 DEBUG EVALUATE /substr('abcdefgh', 1).
3833 DEBUG EVALUATE /substr('abcdefgh', 3).
3834 DEBUG EVALUATE /substr('abcdefgh', 5).
3835 DEBUG EVALUATE /substr('abcdefgh', 6).
3836 DEBUG EVALUATE /substr('abcdefgh', 7).
3837 DEBUG EVALUATE /substr('abcdefgh', 8).
3838 DEBUG EVALUATE /substr('abcdefgh', 9).
3839 DEBUG EVALUATE /substr('abcdefgh', 10).
3840 DEBUG EVALUATE /substr('abcdefgh', 20).
3841 DEBUG EVALUATE /substr('abcdefgh', $sysmis).
3842 DEBUG EVALUATE /substr(0, 10).
3843 DEBUG EVALUATE /substr('abcd', 'abc').
3844 DEBUG EVALUATE /substr(0, 'abc').
3845
3846 DEBUG EVALUATE /substr('abcdefgh', 0, 0).
3847 DEBUG EVALUATE /substr('abcdefgh', 3, 0).
3848 DEBUG EVALUATE /substr('abcdefgh', 5, 0).
3849 DEBUG EVALUATE /substr('abcdefgh', 9, 0).
3850 DEBUG EVALUATE /substr('abcdefgh', 0, 1).
3851 DEBUG EVALUATE /substr('abcdefgh', 0, 5).
3852 DEBUG EVALUATE /substr('abcdefgh', 1, 8).
3853 DEBUG EVALUATE /substr('abcdefgh', 1, 10).
3854 DEBUG EVALUATE /substr('abcdefgh', 1, 20).
3855 DEBUG EVALUATE /substr('abcdefgh', 3, 4).
3856 DEBUG EVALUATE /substr('abcdefgh', 5, 2).
3857 DEBUG EVALUATE /substr('abcdefgh', 6, 1).
3858 DEBUG EVALUATE /substr('abcdefgh', 7, 10).
3859 DEBUG EVALUATE /substr('abcdefgh', 8, 1).
3860 DEBUG EVALUATE /substr('abcdefgh', 8, 2).
3861 DEBUG EVALUATE /substr('abcdefgh', 9, 11).
3862 DEBUG EVALUATE /substr('abcdefgh', 10, 52).
3863 DEBUG EVALUATE /substr('abcdefgh', 20, 1).
3864 DEBUG EVALUATE /substr('abcdefgh', $sysmis, 2).
3865 DEBUG EVALUATE /substr('abcdefgh', 9, $sysmis).
3866 DEBUG EVALUATE /substr('abcdefgh', $sysmis, $sysmis).
3867 DEBUG EVALUATE /substr('abc', 1, 'x').
3868 DEBUG EVALUATE /substr(0, 10, 1).
3869 DEBUG EVALUATE /substr(0, 10, 'x').
3870 DEBUG EVALUATE /substr('abcd', 'abc', 0).
3871 DEBUG EVALUATE /substr('abcd', 'abc', 'j').
3872 DEBUG EVALUATE /substr(0, 'abc', 4).
3873 DEBUG EVALUATE /substr(0, 'abc', 'k').
3874 ])
3875
3876 for opt in OPT NOOPT; do
3877     AS_BOX([$opt])
3878     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3879     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3880 ])
3881 done
3882 AT_CLEANUP
3883
3884 AT_SETUP([expressions - UPCASE])
3885 AT_KEYWORDS([expression expressions evaluate])
3886 AT_DATA([evaluate-base.sps], [
3887 DEBUG EVALUATE SET opt.
3888 DEBUG EVALUATE /upcase('abcdefghijklmnopqrstuvwxyz!@%&*089').
3889 DEBUG EVALUATE /upcase('').
3890 DEBUG EVALUATE /upcase(1).
3891 ])
3892
3893 for opt in OPT NOOPT; do
3894     AS_BOX([$opt])
3895     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3896     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3897 ])
3898 done
3899 AT_CLEANUP
3900
3901 AT_SETUP([expressions - TIME.DAYS])
3902 AT_KEYWORDS([expression expressions evaluate])
3903 AT_DATA([evaluate-base.sps], [
3904 DEBUG EVALUATE SET opt.
3905 DEBUG EVALUATE /time.days(1).
3906 DEBUG EVALUATE /time.days(-1).
3907 DEBUG EVALUATE /time.days(0.5).
3908 DEBUG EVALUATE /time.days('x').
3909 DEBUG EVALUATE /time.days($sysmis).
3910 ])
3911
3912 for opt in OPT NOOPT; do
3913     AS_BOX([$opt])
3914     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3915     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3916 ])
3917 done
3918 AT_CLEANUP
3919
3920 AT_SETUP([expressions - TIME.HMS])
3921 AT_KEYWORDS([expression expressions evaluate])
3922 AT_DATA([evaluate-base.sps], [
3923 DEBUG EVALUATE SET opt.
3924 DEBUG EVALUATE /time.hms(4,50,38).
3925 DEBUG EVALUATE /time.hms(12,31,35).
3926 DEBUG EVALUATE /time.hms(12,47,53).
3927 DEBUG EVALUATE /time.hms(1,26,0).
3928 DEBUG EVALUATE /time.hms(20,58,11).
3929 DEBUG EVALUATE /time.hms(7,36,5).
3930 DEBUG EVALUATE /time.hms(15,43,49).
3931 DEBUG EVALUATE /time.hms(4,25,9).
3932 DEBUG EVALUATE /time.hms(6,49,27).
3933 DEBUG EVALUATE /time.hms(2,57,52).
3934 DEBUG EVALUATE /time.hms(16,45,44).
3935 DEBUG EVALUATE /time.hms(21,30,57).
3936 DEBUG EVALUATE /time.hms(22,30,4).
3937 DEBUG EVALUATE /time.hms(1,56,51).
3938 DEBUG EVALUATE /time.hms(5, 6, 7).
3939 DEBUG EVALUATE /time.hms(5, 6, 0).
3940 DEBUG EVALUATE /time.hms(5, 0, 7).
3941 DEBUG EVALUATE /time.hms(0, 6, 7).
3942 DEBUG EVALUATE /time.hms(-5, 6, -7).
3943 DEBUG EVALUATE /time.hms(-5, 5, -7).
3944 DEBUG EVALUATE /time.hms($sysmis, 6, 7).
3945 DEBUG EVALUATE /time.hms(5, $sysmis, 7).
3946 DEBUG EVALUATE /time.hms(5, $sysmis, 7).
3947 DEBUG EVALUATE /time.hms($sysmis, $sysmis, 7).
3948 DEBUG EVALUATE /time.hms(5, $sysmis, $sysmis).
3949 DEBUG EVALUATE /time.hms($sysmis, $sysmis, 7).
3950 DEBUG EVALUATE /time.hms($sysmis, $sysmis, $sysmis).
3951 ])
3952
3953 for opt in OPT NOOPT; do
3954     AS_BOX([$opt])
3955     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
3956     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
3957 ])
3958 done
3959 AT_CLEANUP
3960
3961 AT_SETUP([expressions - CTIME.*])
3962 AT_KEYWORDS([expression expressions evaluate ctime])
3963 AT_DATA([evaluate-base.sps], [
3964 DEBUG EVALUATE SET opt.
3965 DEBUG EVALUATE /ctime.days(106272).
3966 DEBUG EVALUATE /ctime.hours(106272).
3967 DEBUG EVALUATE /ctime.minutes(106272).
3968 DEBUG EVALUATE /ctime.seconds(106272).
3969 DEBUG EVALUATE /ctime.days(-106272).
3970 DEBUG EVALUATE /ctime.hours(-106272).
3971 DEBUG EVALUATE /ctime.minutes(-106272).
3972 DEBUG EVALUATE /ctime.seconds(-106272).
3973 DEBUG EVALUATE /ctime.days($sysmis).
3974 DEBUG EVALUATE /ctime.hours($sysmis).
3975 DEBUG EVALUATE /ctime.minutes($sysmis).
3976 DEBUG EVALUATE /ctime.seconds($sysmis).
3977 DEBUG EVALUATE /ctime.days('a').
3978 DEBUG EVALUATE /ctime.hours('b').
3979 DEBUG EVALUATE /ctime.minutes('c').
3980 DEBUG EVALUATE /ctime.seconds('d').
3981
3982 DEBUG EVALUATE /ctime.days(date.dmy(15,10,1582)).
3983 DEBUG EVALUATE /ctime.days(date.dmy(6,9,1719)).
3984 DEBUG EVALUATE /ctime.days(date.dmy(24,1,1583)).
3985 DEBUG EVALUATE /ctime.days(date.dmy(14,12,1585)).
3986 DEBUG EVALUATE /ctime.days(date.dmy(26,11,1621)).
3987 DEBUG EVALUATE /ctime.days(date.dmy(25,12,1821)).
3988 DEBUG EVALUATE /ctime.days(date.dmy(3,12,1882)).
3989 DEBUG EVALUATE /ctime.days(date.dmy(6,4,2002)).
3990 DEBUG EVALUATE /ctime.days(date.dmy(19,12,1999)).
3991 DEBUG EVALUATE /ctime.days(date.dmy(1,10,1978)).
3992 DEBUG EVALUATE /ctime.days(date.dmy(0,10,1978)).
3993 DEBUG EVALUATE /ctime.days(date.dmy(32,10,1978)).
3994 DEBUG EVALUATE /ctime.days(date.dmy(31,0,1978)).
3995 DEBUG EVALUATE /ctime.days(date.dmy(31,13,1978)).
3996 DEBUG EVALUATE /ctime.days(date.dmy($sysmis,10,1978)).
3997 DEBUG EVALUATE /ctime.days(date.dmy(31,$sysmis,1978)).
3998 DEBUG EVALUATE /ctime.days(date.dmy(31,10,$sysmis)).
3999 DEBUG EVALUATE /ctime.days(date.dmy($sysmis,$sysmis,1978)).
4000 DEBUG EVALUATE /ctime.days(date.dmy(31,$sysmis,$sysmis)).
4001 DEBUG EVALUATE /ctime.days(date.dmy($sysmis,10,$sysmis)).
4002 DEBUG EVALUATE /ctime.days(date.dmy($sysmis,$sysmis,$sysmis)).
4003 ])
4004
4005 for opt in OPT NOOPT; do
4006     AS_BOX([$opt])
4007     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4008     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4009 ])
4010 done
4011 AT_CLEANUP
4012
4013 AT_SETUP([expressions - DATE.DMY])
4014 AT_KEYWORDS([expression expressions evaluate])
4015 AT_DATA([evaluate-base.sps], [
4016 DEBUG EVALUATE SET opt.
4017 DEBUG EVALUATE /date.dmy('a',1,2).
4018 DEBUG EVALUATE /date.dmy(1,'a',2).
4019 DEBUG EVALUATE /date.dmy(1,2,'a').
4020 ])
4021
4022 for opt in OPT NOOPT; do
4023     AS_BOX([$opt])
4024     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4025     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4026 ])
4027 done
4028 AT_CLEANUP
4029
4030 AT_SETUP([expressions - YRMOD])
4031 AT_KEYWORDS([expression expressions evaluate])
4032 AT_DATA([evaluate-base.sps], [
4033 DEBUG EVALUATE SET opt.
4034 dnl FIXME: check out-of-range and nearly out-of-range values
4035 DEBUG EVALUATE /yrmoda(1582,10,15).
4036 DEBUG EVALUATE /yrmoda(1719,9,6).
4037 DEBUG EVALUATE /yrmoda(1583,1,24).
4038 DEBUG EVALUATE /yrmoda(1585,12,14).
4039 DEBUG EVALUATE /yrmoda(1621,11,26).
4040 DEBUG EVALUATE /yrmoda(1821,12,25).
4041 DEBUG EVALUATE /yrmoda(1882,12,3).
4042 DEBUG EVALUATE /yrmoda(2002,4,6).
4043 DEBUG EVALUATE /yrmoda(1999,12,19).
4044 DEBUG EVALUATE /yrmoda(1978,10,1).
4045 DEBUG EVALUATE /yrmoda(1978,10,0).
4046 DEBUG EVALUATE /yrmoda(1978,10,32).
4047 DEBUG EVALUATE /yrmoda(1978,0,31).
4048 DEBUG EVALUATE /yrmoda(1978,13,31).
4049 DEBUG EVALUATE /yrmoda(1978,10,$sysmis).
4050 DEBUG EVALUATE /yrmoda(1978,$sysmis,31).
4051 DEBUG EVALUATE /yrmoda($sysmis,10,31).
4052 DEBUG EVALUATE /yrmoda(1978,$sysmis,$sysmis).
4053 DEBUG EVALUATE /yrmoda($sysmis,$sysmis,31).
4054 DEBUG EVALUATE /yrmoda($sysmis,10,$sysmis).
4055 DEBUG EVALUATE /yrmoda($sysmis,$sysmis,$sysmis).
4056 DEBUG EVALUATE /yrmoda('a',1,2).
4057 DEBUG EVALUATE /yrmoda(1,'a',2).
4058 DEBUG EVALUATE /yrmoda(1,2,'a').
4059 ])
4060
4061 for opt in OPT NOOPT; do
4062     AS_BOX([$opt])
4063     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4064     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4065 ])
4066 done
4067 AT_CLEANUP
4068
4069 AT_SETUP([expressions - DATE.MDY])
4070 AT_KEYWORDS([expression expressions evaluate])
4071 AT_DATA([evaluate-base.sps], [
4072 DEBUG EVALUATE SET opt.
4073 ])
4074
4075 for opt in OPT NOOPT; do
4076     AS_BOX([$opt])
4077     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4078     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4079 dnl FIXME: check out-of-range and nearly out-of-range values
4080 DEBUG EVALUATE /ctime.days(date.mdy(6,10,1648)) + 577735.
4081 DEBUG EVALUATE /ctime.days(date.mdy(6,30,1680)) + 577735.
4082 DEBUG EVALUATE /ctime.days(date.mdy(7,24,1716)) + 577735.
4083 DEBUG EVALUATE /ctime.days(date.mdy(6,19,1768)) + 577735.
4084 DEBUG EVALUATE /ctime.days(date.mdy(8,2,1819)) + 577735.
4085 DEBUG EVALUATE /ctime.days(date.mdy(3,27,1839)) + 577735.
4086 DEBUG EVALUATE /ctime.days(date.mdy(4,19,1903)) + 577735.
4087 DEBUG EVALUATE /ctime.days(date.mdy(8,25,1929)) + 577735.
4088 DEBUG EVALUATE /ctime.days(date.mdy(9,29,1941)) + 577735.
4089 DEBUG EVALUATE /ctime.days(date.mdy(4,19,1943)) + 577735.
4090 DEBUG EVALUATE /ctime.days(date.mdy(10,7,1943)) + 577735.
4091 DEBUG EVALUATE /ctime.days(date.mdy(3,17,1992)) + 577735.
4092 DEBUG EVALUATE /ctime.days(date.mdy(2,25,1996)) + 577735.
4093 DEBUG EVALUATE /ctime.days(date.mdy(11,10,2038)) + 577735.
4094 DEBUG EVALUATE /ctime.days(date.mdy(7,18,2094)) + 577735.
4095 dnl FIXME: check out-of-range and nearly out-of-range values
4096 dnl
4097 DEBUG EVALUATE /ctime.days(date.mdy(10,15,1582)).
4098 DEBUG EVALUATE /ctime.days(date.mdy(9,6,1719)).
4099 DEBUG EVALUATE /ctime.days(date.mdy(1,24,1583)).
4100 DEBUG EVALUATE /ctime.days(date.mdy(12,14,1585)).
4101 DEBUG EVALUATE /ctime.days(date.mdy(11,26,1621)).
4102 DEBUG EVALUATE /ctime.days(date.mdy(12,25,1821)).
4103 DEBUG EVALUATE /ctime.days(date.mdy(12,3,1882)).
4104 DEBUG EVALUATE /ctime.days(date.mdy(4,6,2002)).
4105 DEBUG EVALUATE /ctime.days(date.mdy(12,19,1999)).
4106 DEBUG EVALUATE /ctime.days(date.mdy(10,1,1978)).
4107 DEBUG EVALUATE /ctime.days(date.mdy(10,0,1978)).
4108 DEBUG EVALUATE /ctime.days(date.mdy(10,32,1978)).
4109 DEBUG EVALUATE /ctime.days(date.mdy(0,31,1978)).
4110 DEBUG EVALUATE /ctime.days(date.mdy(13,31,1978)).
4111 DEBUG EVALUATE /ctime.days(date.mdy(10,$sysmis,1978)).
4112 DEBUG EVALUATE /ctime.days(date.mdy($sysmis,31,1978)).
4113 DEBUG EVALUATE /ctime.days(date.mdy(10,31,$sysmis)).
4114 DEBUG EVALUATE /ctime.days(date.mdy($sysmis,$sysmis,1978)).
4115 DEBUG EVALUATE /ctime.days(date.mdy($sysmis,31,$sysmis)).
4116 DEBUG EVALUATE /ctime.days(date.mdy(10,$sysmis,$sysmis)).
4117 DEBUG EVALUATE /ctime.days(date.mdy($sysmis,$sysmis,$sysmis)).
4118 DEBUG EVALUATE /date.mdy('a',1,2).
4119 DEBUG EVALUATE /date.mdy(1,'a',2).
4120 DEBUG EVALUATE /date.mdy(1,2,'a').
4121 DEBUG EVALUATE /ctime.days(date.mdy(0,0,0)).
4122 DEBUG EVALUATE /ctime.days(date.mdy(0,0,999)).
4123 DEBUG EVALUATE /date.mdy(1,1,1582).
4124 DEBUG EVALUATE /date.mdy(10,14,1582).
4125 DEBUG EVALUATE /date.mdy(10,15,1582).
4126 ])
4127 done
4128 AT_CLEANUP
4129
4130 AT_SETUP([expressions - DATE.MOYR])
4131 AT_KEYWORDS([expression expressions evaluate])
4132 AT_DATA([evaluate-base.sps], [
4133 DEBUG EVALUATE SET opt.
4134 DEBUG EVALUATE /ctime.days(date.moyr(1,2000)).
4135 DEBUG EVALUATE /ctime.days(date.moyr(2,2000)).
4136 DEBUG EVALUATE /ctime.days(date.moyr(3,2000)).
4137 DEBUG EVALUATE /ctime.days(date.moyr(4,2000)).
4138 DEBUG EVALUATE /ctime.days(date.moyr(5,2000)).
4139 DEBUG EVALUATE /ctime.days(date.moyr(13,2000)).
4140 DEBUG EVALUATE /ctime.days(date.moyr(14,2000)).
4141 DEBUG EVALUATE /ctime.days(date.moyr($sysmis,2000)).
4142 DEBUG EVALUATE /ctime.days(date.moyr(1,$sysmis)).
4143 DEBUG EVALUATE /ctime.days(date.moyr($sysmis,$sysmis)).
4144 DEBUG EVALUATE /date.moyr('a',2000).
4145 DEBUG EVALUATE /date.moyr(5,'a').
4146 DEBUG EVALUATE /date.moyr('a','b').
4147 ])
4148
4149 for opt in OPT NOOPT; do
4150     AS_BOX([$opt])
4151     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4152     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4153 ])
4154 done
4155 AT_CLEANUP
4156
4157 AT_SETUP([expressions - DATE.QYR])
4158 AT_KEYWORDS([expression expressions evaluate])
4159 AT_DATA([evaluate-base.sps], [
4160 DEBUG EVALUATE SET opt.
4161 DEBUG EVALUATE /ctime.days(date.qyr(1,2000)).
4162 DEBUG EVALUATE /ctime.days(date.qyr(2,2000)).
4163 DEBUG EVALUATE /ctime.days(date.qyr(5,2000)).
4164 DEBUG EVALUATE /ctime.days(date.qyr(6,2000)).
4165 DEBUG EVALUATE /ctime.days(date.qyr($sysmis,2000)).
4166 DEBUG EVALUATE /ctime.days(date.qyr(1,$sysmis)).
4167 DEBUG EVALUATE /ctime.days(date.qyr($sysmis,$sysmis)).
4168 DEBUG EVALUATE /date.qyr('a',2000).
4169 DEBUG EVALUATE /date.qyr(5,'a').
4170 DEBUG EVALUATE /date.qyr('a','b').
4171 ])
4172
4173 for opt in OPT NOOPT; do
4174     AS_BOX([$opt])
4175     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4176     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4177 ])
4178 done
4179 AT_CLEANUP
4180
4181 AT_SETUP([expressions - DATE.WKYR])
4182 AT_KEYWORDS([expression expressions evaluate])
4183 AT_DATA([evaluate-base.sps], [
4184 DEBUG EVALUATE SET opt.
4185 DEBUG EVALUATE /ctime.days(date.wkyr(1,2000)).
4186 DEBUG EVALUATE /ctime.days(date.wkyr(15,1999)).
4187 DEBUG EVALUATE /ctime.days(date.wkyr(36,1999)).
4188 DEBUG EVALUATE /ctime.days(date.wkyr(54,1999)).
4189 DEBUG EVALUATE /ctime.days(date.wkyr($sysmis,1999)).
4190 DEBUG EVALUATE /ctime.days(date.wkyr(1,$sysmis)).
4191 DEBUG EVALUATE /ctime.days(date.wkyr($sysmis,$sysmis)).
4192 DEBUG EVALUATE /date.wkyr('a',1999).
4193 DEBUG EVALUATE /date.wkyr(5,'a').
4194 DEBUG EVALUATE /date.wkyr('a','b').
4195 ])
4196
4197 for opt in OPT NOOPT; do
4198     AS_BOX([$opt])
4199     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4200     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4201 ])
4202 done
4203 AT_CLEANUP
4204
4205 AT_SETUP([expressions - DATE.YRDAY])
4206 AT_KEYWORDS([expression expressions evaluate])
4207 AT_DATA([evaluate-base.sps], [
4208 DEBUG EVALUATE SET opt.
4209 DEBUG EVALUATE /ctime.days(date.yrday(2000,1)).
4210 DEBUG EVALUATE /ctime.days(date.yrday(2000,100)).
4211 DEBUG EVALUATE /ctime.days(date.yrday(2000,253)).
4212 DEBUG EVALUATE /ctime.days(date.yrday(2000,500)).
4213 DEBUG EVALUATE /ctime.days(date.yrday(2000,-100)).
4214 DEBUG EVALUATE /ctime.days(date.yrday(1999,$sysmis)).
4215 DEBUG EVALUATE /ctime.days(date.yrday($sysmis,1)).
4216 DEBUG EVALUATE /ctime.days(date.yrday($sysmis,$sysmis)).
4217 DEBUG EVALUATE /date.yrday(1999,'a').
4218 DEBUG EVALUATE /date.yrday('a',5).
4219 DEBUG EVALUATE /date.yrday('a','b').
4220 ])
4221
4222 for opt in OPT NOOPT; do
4223     AS_BOX([$opt])
4224     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4225     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4226 ])
4227 done
4228 AT_CLEANUP
4229
4230 AT_SETUP([expressions - XDATE.DATE])
4231 AT_KEYWORDS([expression expressions evaluate])
4232 AT_DATA([evaluate-base.sps], [
4233 DEBUG EVALUATE SET opt.
4234 DEBUG EVALUATE /xdate.date(date.mdy(6,10,1648) + time.hms(0,0,0)) / 86400.
4235 DEBUG EVALUATE /xdate.date(date.mdy(6,30,1680) + time.hms(4,50,38)) / 86400.
4236 DEBUG EVALUATE /xdate.date(date.mdy(7,24,1716) + time.hms(12,31,35)) / 86400.
4237 DEBUG EVALUATE /xdate.date(date.mdy(6,19,1768) + time.hms(12,47,53)) / 86400.
4238 DEBUG EVALUATE /xdate.date(date.mdy(8,2,1819) + time.hms(1,26,0)) / 86400.
4239 DEBUG EVALUATE /xdate.date(date.mdy(3,27,1839) + time.hms(20,58,11)) / 86400.
4240 DEBUG EVALUATE /xdate.date(date.mdy(4,19,1903) + time.hms(7,36,5)) / 86400.
4241 DEBUG EVALUATE /xdate.date(date.mdy(8,25,1929) + time.hms(15,43,49)) / 86400.
4242 DEBUG EVALUATE /xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400.
4243 DEBUG EVALUATE /xdate.date(date.mdy(4,19,1943) + time.hms(6,49,27)) / 86400.
4244 DEBUG EVALUATE /xdate.date(date.mdy(10,7,1943) + time.hms(2,57,52)) / 86400.
4245 DEBUG EVALUATE /xdate.date(date.mdy(3,17,1992) + time.hms(16,45,44)) / 86400.
4246 DEBUG EVALUATE /xdate.date(date.mdy(2,25,1996) + time.hms(21,30,57)) / 86400.
4247 DEBUG EVALUATE /xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400.
4248 DEBUG EVALUATE /xdate.date(date.mdy(4,19,43) + time.hms(6,49,27)) / 86400.
4249 DEBUG EVALUATE /xdate.date(date.mdy(10,7,43) + time.hms(2,57,52)) / 86400.
4250 DEBUG EVALUATE /xdate.date(date.mdy(3,17,92) + time.hms(16,45,44)) / 86400.
4251 DEBUG EVALUATE /xdate.date(date.mdy(2,25,96) + time.hms(21,30,57)) / 86400.
4252 DEBUG EVALUATE /xdate.date(date.mdy(11,10,2038) + time.hms(22,30,4)) / 86400.
4253 DEBUG EVALUATE /xdate.date(date.mdy(7,18,2094) + time.hms(1,56,51)) / 86400.
4254 DEBUG EVALUATE /xdate.date(123.4).
4255 DEBUG EVALUATE /xdate.date('').
4256 ])
4257
4258 for opt in OPT NOOPT; do
4259     AS_BOX([$opt])
4260     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4261     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4262 ])
4263 done
4264 AT_CLEANUP
4265
4266 AT_SETUP([expressions - XDATE.HOUR])
4267 AT_KEYWORDS([expression expressions evaluate])
4268 AT_DATA([evaluate-base.sps], [
4269 DEBUG EVALUATE SET opt.
4270 DEBUG EVALUATE /xdate.hour(date.mdy(6,10,1648) + time.hms(0,0,0)).
4271 DEBUG EVALUATE /xdate.hour(date.mdy(6,30,1680) + time.hms(4,50,38)).
4272 DEBUG EVALUATE /xdate.hour(date.mdy(7,24,1716) + time.hms(12,31,35)).
4273 DEBUG EVALUATE /xdate.hour(date.mdy(6,19,1768) + time.hms(12,47,53)).
4274 DEBUG EVALUATE /xdate.hour(date.mdy(8,2,1819) + time.hms(1,26,0)).
4275 DEBUG EVALUATE /xdate.hour(date.mdy(3,27,1839) + time.hms(20,58,11)).
4276 DEBUG EVALUATE /xdate.hour(date.mdy(4,19,1903) + time.hms(7,36,5)).
4277 DEBUG EVALUATE /xdate.hour(date.mdy(8,25,1929) + time.hms(15,43,49)).
4278 DEBUG EVALUATE /xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9)).
4279 DEBUG EVALUATE /xdate.hour(date.mdy(4,19,1943) + time.hms(6,49,27)).
4280 DEBUG EVALUATE /xdate.hour(date.mdy(10,7,1943) + time.hms(2,57,52)).
4281 DEBUG EVALUATE /xdate.hour(date.mdy(3,17,1992) + time.hms(16,45,44)).
4282 DEBUG EVALUATE /xdate.hour(date.mdy(2,25,1996) + time.hms(21,30,57)).
4283 DEBUG EVALUATE /xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9)).
4284 DEBUG EVALUATE /xdate.hour(date.mdy(4,19,43) + time.hms(6,49,27)).
4285 DEBUG EVALUATE /xdate.hour(date.mdy(10,7,43) + time.hms(2,57,52)).
4286 DEBUG EVALUATE /xdate.hour(date.mdy(3,17,92) + time.hms(16,45,44)).
4287 DEBUG EVALUATE /xdate.hour(date.mdy(2,25,96) + time.hms(21,30,57)).
4288 DEBUG EVALUATE /xdate.hour(date.mdy(11,10,2038) + time.hms(22,30,4)).
4289 DEBUG EVALUATE /xdate.hour(date.mdy(7,18,2094) + time.hms(1,56,51)).
4290 DEBUG EVALUATE /xdate.hour(-1).
4291 DEBUG EVALUATE /xdate.hour(1).
4292 DEBUG EVALUATE /xdate.hour($sysmis).
4293 DEBUG EVALUATE /xdate.hour('').
4294 ])
4295
4296 for opt in OPT NOOPT; do
4297     AS_BOX([$opt])
4298     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4299     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4300 ])
4301 done
4302 AT_CLEANUP
4303
4304 AT_SETUP([expressions - XDATE.JDAY])
4305 AT_KEYWORDS([expression expressions evaluate])
4306 AT_DATA([evaluate-base.sps], [
4307 DEBUG EVALUATE SET opt.
4308 DEBUG EVALUATE /xdate.jday(date.mdy(6,10,1648) + time.hms(0,0,0)).
4309 DEBUG EVALUATE /xdate.jday(date.mdy(6,30,1680) + time.hms(4,50,38)).
4310 DEBUG EVALUATE /xdate.jday(date.mdy(7,24,1716) + time.hms(12,31,35)).
4311 DEBUG EVALUATE /xdate.jday(date.mdy(6,19,1768) + time.hms(12,47,53)).
4312 DEBUG EVALUATE /xdate.jday(date.mdy(8,2,1819) + time.hms(1,26,0)).
4313 DEBUG EVALUATE /xdate.jday(date.mdy(3,27,1839) + time.hms(20,58,11)).
4314 DEBUG EVALUATE /xdate.jday(date.mdy(4,19,1903) + time.hms(7,36,5)).
4315 DEBUG EVALUATE /xdate.jday(date.mdy(8,25,1929) + time.hms(15,43,49)).
4316 DEBUG EVALUATE /xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9)).
4317 DEBUG EVALUATE /xdate.jday(date.mdy(4,19,1943) + time.hms(6,49,27)).
4318 DEBUG EVALUATE /xdate.jday(date.mdy(10,7,1943) + time.hms(2,57,52)).
4319 DEBUG EVALUATE /xdate.jday(date.mdy(3,17,1992) + time.hms(16,45,44)).
4320 DEBUG EVALUATE /xdate.jday(date.mdy(2,25,1996) + time.hms(21,30,57)).
4321 DEBUG EVALUATE /xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9)).
4322 DEBUG EVALUATE /xdate.jday(date.mdy(4,19,43) + time.hms(6,49,27)).
4323 DEBUG EVALUATE /xdate.jday(date.mdy(10,7,43) + time.hms(2,57,52)).
4324 DEBUG EVALUATE /xdate.jday(date.mdy(3,17,92) + time.hms(16,45,44)).
4325 DEBUG EVALUATE /xdate.jday(date.mdy(2,25,96) + time.hms(21,30,57)).
4326 DEBUG EVALUATE /xdate.jday(date.mdy(11,10,2038) + time.hms(22,30,4)).
4327 DEBUG EVALUATE /xdate.jday(date.mdy(7,18,2094) + time.hms(1,56,51)).
4328 DEBUG EVALUATE /xdate.jday(0).
4329 DEBUG EVALUATE /xdate.jday(1).
4330 DEBUG EVALUATE /xdate.jday(86400).
4331 ])
4332
4333 for opt in OPT NOOPT; do
4334     AS_BOX([$opt])
4335     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4336     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4337 ])
4338 done
4339 AT_CLEANUP
4340
4341 AT_SETUP([expressions - XDATE.MDAY])
4342 AT_KEYWORDS([expression expressions evaluate])
4343 AT_DATA([evaluate-base.sps], [
4344 DEBUG EVALUATE SET opt.
4345 DEBUG EVALUATE /xdate.mday(date.mdy(6,10,1648) + time.hms(0,0,0)).
4346 DEBUG EVALUATE /xdate.mday(date.mdy(6,30,1680) + time.hms(4,50,38)).
4347 DEBUG EVALUATE /xdate.mday(date.mdy(7,24,1716) + time.hms(12,31,35)).
4348 DEBUG EVALUATE /xdate.mday(date.mdy(6,19,1768) + time.hms(12,47,53)).
4349 DEBUG EVALUATE /xdate.mday(date.mdy(8,2,1819) + time.hms(1,26,0)).
4350 DEBUG EVALUATE /xdate.mday(date.mdy(3,27,1839) + time.hms(20,58,11)).
4351 DEBUG EVALUATE /xdate.mday(date.mdy(4,19,1903) + time.hms(7,36,5)).
4352 DEBUG EVALUATE /xdate.mday(date.mdy(8,25,1929) + time.hms(15,43,49)).
4353 DEBUG EVALUATE /xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9)).
4354 DEBUG EVALUATE /xdate.mday(date.mdy(4,19,1943) + time.hms(6,49,27)).
4355 DEBUG EVALUATE /xdate.mday(date.mdy(10,7,1943) + time.hms(2,57,52)).
4356 DEBUG EVALUATE /xdate.mday(date.mdy(3,17,1992) + time.hms(16,45,44)).
4357 DEBUG EVALUATE /xdate.mday(date.mdy(2,25,1996) + time.hms(21,30,57)).
4358 DEBUG EVALUATE /xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9)).
4359 DEBUG EVALUATE /xdate.mday(date.mdy(4,19,43) + time.hms(6,49,27)).
4360 DEBUG EVALUATE /xdate.mday(date.mdy(10,7,43) + time.hms(2,57,52)).
4361 DEBUG EVALUATE /xdate.mday(date.mdy(3,17,92) + time.hms(16,45,44)).
4362 DEBUG EVALUATE /xdate.mday(date.mdy(2,25,96) + time.hms(21,30,57)).
4363 DEBUG EVALUATE /xdate.mday(date.mdy(11,10,2038) + time.hms(22,30,4)).
4364 DEBUG EVALUATE /xdate.mday(date.mdy(7,18,2094) + time.hms(1,56,51)).
4365 ])
4366
4367 for opt in OPT NOOPT; do
4368     AS_BOX([$opt])
4369     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4370     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4371 ])
4372 done
4373 AT_CLEANUP
4374
4375 AT_SETUP([expressions - XDATE.MINUTE])
4376 AT_KEYWORDS([expression expressions evaluate])
4377 AT_DATA([evaluate-base.sps], [
4378 DEBUG EVALUATE SET opt.
4379 DEBUG EVALUATE /xdate.minute(date.mdy(6,10,1648) + time.hms(0,0,0)).
4380 DEBUG EVALUATE /xdate.minute(date.mdy(6,30,1680) + time.hms(4,50,38)).
4381 DEBUG EVALUATE /xdate.minute(date.mdy(7,24,1716) + time.hms(12,31,35)).
4382 DEBUG EVALUATE /xdate.minute(date.mdy(6,19,1768) + time.hms(12,47,53)).
4383 DEBUG EVALUATE /xdate.minute(date.mdy(8,2,1819) + time.hms(1,26,0)).
4384 DEBUG EVALUATE /xdate.minute(date.mdy(3,27,1839) + time.hms(20,58,11)).
4385 DEBUG EVALUATE /xdate.minute(date.mdy(4,19,1903) + time.hms(7,36,5)).
4386 DEBUG EVALUATE /xdate.minute(date.mdy(8,25,1929) + time.hms(15,43,49)).
4387 DEBUG EVALUATE /xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9)).
4388 DEBUG EVALUATE /xdate.minute(date.mdy(4,19,1943) + time.hms(6,49,27)).
4389 DEBUG EVALUATE /xdate.minute(date.mdy(10,7,1943) + time.hms(2,57,52)).
4390 DEBUG EVALUATE /xdate.minute(date.mdy(3,17,1992) + time.hms(16,45,44)).
4391 DEBUG EVALUATE /xdate.minute(date.mdy(2,25,1996) + time.hms(21,30,57)).
4392 DEBUG EVALUATE /xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9)).
4393 DEBUG EVALUATE /xdate.minute(date.mdy(4,19,43) + time.hms(6,49,27)).
4394 DEBUG EVALUATE /xdate.minute(date.mdy(10,7,43) + time.hms(2,57,52)).
4395 DEBUG EVALUATE /xdate.minute(date.mdy(3,17,92) + time.hms(16,45,44)).
4396 DEBUG EVALUATE /xdate.minute(date.mdy(2,25,96) + time.hms(21,30,57)).
4397 DEBUG EVALUATE /xdate.minute(date.mdy(11,10,2038) + time.hms(22,30,4)).
4398 DEBUG EVALUATE /xdate.minute(date.mdy(7,18,2094) + time.hms(1,56,51)).
4399 ])
4400
4401 for opt in OPT NOOPT; do
4402     AS_BOX([$opt])
4403     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4404     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4405 ])
4406 done
4407 AT_CLEANUP
4408
4409 AT_SETUP([expressions - XDATE.MONTH])
4410 AT_KEYWORDS([expression expressions evaluate])
4411 AT_DATA([evaluate-base.sps], [
4412 DEBUG EVALUATE SET opt.
4413 DEBUG EVALUATE /xdate.month(date.mdy(6,10,1648) + time.hms(0,0,0)).
4414 DEBUG EVALUATE /xdate.month(date.mdy(6,30,1680) + time.hms(4,50,38)).
4415 DEBUG EVALUATE /xdate.month(date.mdy(7,24,1716) + time.hms(12,31,35)).
4416 DEBUG EVALUATE /xdate.month(date.mdy(6,19,1768) + time.hms(12,47,53)).
4417 DEBUG EVALUATE /xdate.month(date.mdy(8,2,1819) + time.hms(1,26,0)).
4418 DEBUG EVALUATE /xdate.month(date.mdy(3,27,1839) + time.hms(20,58,11)).
4419 DEBUG EVALUATE /xdate.month(date.mdy(4,19,1903) + time.hms(7,36,5)).
4420 DEBUG EVALUATE /xdate.month(date.mdy(8,25,1929) + time.hms(15,43,49)).
4421 DEBUG EVALUATE /xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9)).
4422 DEBUG EVALUATE /xdate.month(date.mdy(4,19,1943) + time.hms(6,49,27)).
4423 DEBUG EVALUATE /xdate.month(date.mdy(10,7,1943) + time.hms(2,57,52)).
4424 DEBUG EVALUATE /xdate.month(date.mdy(3,17,1992) + time.hms(16,45,44)).
4425 DEBUG EVALUATE /xdate.month(date.mdy(2,25,1996) + time.hms(21,30,57)).
4426 DEBUG EVALUATE /xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9)).
4427 DEBUG EVALUATE /xdate.month(date.mdy(4,19,43) + time.hms(6,49,27)).
4428 DEBUG EVALUATE /xdate.month(date.mdy(10,7,43) + time.hms(2,57,52)).
4429 DEBUG EVALUATE /xdate.month(date.mdy(3,17,92) + time.hms(16,45,44)).
4430 DEBUG EVALUATE /xdate.month(date.mdy(2,25,96) + time.hms(21,30,57)).
4431 DEBUG EVALUATE /xdate.month(date.mdy(11,10,2038) + time.hms(22,30,4)).
4432 DEBUG EVALUATE /xdate.month(date.mdy(7,18,2094) + time.hms(1,56,51)).
4433 ])
4434
4435 for opt in OPT NOOPT; do
4436     AS_BOX([$opt])
4437     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4438     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4439 ])
4440 done
4441 AT_CLEANUP
4442
4443 AT_SETUP([expressions - XDATE.QUARTER])
4444 AT_KEYWORDS([expression expressions evaluate])
4445 AT_DATA([evaluate-base.sps], [
4446 DEBUG EVALUATE SET opt.
4447 DEBUG EVALUATE /xdate.quarter(date.mdy(6,10,1648) + time.hms(0,0,0)).
4448 DEBUG EVALUATE /xdate.quarter(date.mdy(6,30,1680) + time.hms(4,50,38)).
4449 DEBUG EVALUATE /xdate.quarter(date.mdy(7,24,1716) + time.hms(12,31,35)).
4450 DEBUG EVALUATE /xdate.quarter(date.mdy(6,19,1768) + time.hms(12,47,53)).
4451 DEBUG EVALUATE /xdate.quarter(date.mdy(8,2,1819) + time.hms(1,26,0)).
4452 DEBUG EVALUATE /xdate.quarter(date.mdy(3,27,1839) + time.hms(20,58,11)).
4453 DEBUG EVALUATE /xdate.quarter(date.mdy(4,19,1903) + time.hms(7,36,5)).
4454 DEBUG EVALUATE /xdate.quarter(date.mdy(8,25,1929) + time.hms(15,43,49)).
4455 DEBUG EVALUATE /xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9)).
4456 DEBUG EVALUATE /xdate.quarter(date.mdy(4,19,1943) + time.hms(6,49,27)).
4457 DEBUG EVALUATE /xdate.quarter(date.mdy(10,7,1943) + time.hms(2,57,52)).
4458 DEBUG EVALUATE /xdate.quarter(date.mdy(3,17,1992) + time.hms(16,45,44)).
4459 DEBUG EVALUATE /xdate.quarter(date.mdy(2,25,1996) + time.hms(21,30,57)).
4460 DEBUG EVALUATE /xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9)).
4461 DEBUG EVALUATE /xdate.quarter(date.mdy(4,19,43) + time.hms(6,49,27)).
4462 DEBUG EVALUATE /xdate.quarter(date.mdy(10,7,43) + time.hms(2,57,52)).
4463 DEBUG EVALUATE /xdate.quarter(date.mdy(3,17,92) + time.hms(16,45,44)).
4464 DEBUG EVALUATE /xdate.quarter(date.mdy(2,25,96) + time.hms(21,30,57)).
4465 DEBUG EVALUATE /xdate.quarter(date.mdy(11,10,2038) + time.hms(22,30,4)).
4466 DEBUG EVALUATE /xdate.quarter(date.mdy(7,18,2094) + time.hms(1,56,51)).
4467 ])
4468
4469 for opt in OPT NOOPT; do
4470     AS_BOX([$opt])
4471     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4472     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4473 ])
4474 done
4475 AT_CLEANUP
4476
4477 AT_SETUP([expressions - XDATE.SECOND])
4478 AT_KEYWORDS([expression expressions evaluate])
4479 AT_DATA([evaluate-base.sps], [
4480 DEBUG EVALUATE SET opt.
4481 DEBUG EVALUATE /xdate.second(date.mdy(6,10,1648) + time.hms(0,0,0)).
4482 DEBUG EVALUATE /xdate.second(date.mdy(6,30,1680) + time.hms(4,50,38)).
4483 DEBUG EVALUATE /xdate.second(date.mdy(7,24,1716) + time.hms(12,31,35)).
4484 DEBUG EVALUATE /xdate.second(date.mdy(6,19,1768) + time.hms(12,47,53)).
4485 DEBUG EVALUATE /xdate.second(date.mdy(8,2,1819) + time.hms(1,26,0)).
4486 DEBUG EVALUATE /xdate.second(date.mdy(3,27,1839) + time.hms(20,58,11)).
4487 DEBUG EVALUATE /xdate.second(date.mdy(4,19,1903) + time.hms(7,36,5)).
4488 DEBUG EVALUATE /xdate.second(date.mdy(8,25,1929) + time.hms(15,43,49)).
4489 DEBUG EVALUATE /xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9)).
4490 DEBUG EVALUATE /xdate.second(date.mdy(4,19,1943) + time.hms(6,49,27)).
4491 DEBUG EVALUATE /xdate.second(date.mdy(10,7,1943) + time.hms(2,57,52)).
4492 DEBUG EVALUATE /xdate.second(date.mdy(3,17,1992) + time.hms(16,45,44)).
4493 DEBUG EVALUATE /xdate.second(date.mdy(2,25,1996) + time.hms(21,30,57)).
4494 DEBUG EVALUATE /xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9)).
4495 DEBUG EVALUATE /xdate.second(date.mdy(4,19,43) + time.hms(6,49,27)).
4496 DEBUG EVALUATE /xdate.second(date.mdy(10,7,43) + time.hms(2,57,52)).
4497 DEBUG EVALUATE /xdate.second(date.mdy(3,17,92) + time.hms(16,45,44)).
4498 DEBUG EVALUATE /xdate.second(date.mdy(2,25,96) + time.hms(21,30,57)).
4499 DEBUG EVALUATE /xdate.second(date.mdy(11,10,2038) + time.hms(22,30,4)).
4500 DEBUG EVALUATE /xdate.second(date.mdy(7,18,2094) + time.hms(1,56,51)).
4501 ])
4502
4503 for opt in OPT NOOPT; do
4504     AS_BOX([$opt])
4505     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4506     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4507 ])
4508 done
4509 AT_CLEANUP
4510
4511 AT_SETUP([expressions - XDATE.TDAY])
4512 AT_KEYWORDS([expression expressions evaluate])
4513 AT_DATA([evaluate-base.sps], [
4514 DEBUG EVALUATE SET opt.
4515 DEBUG EVALUATE /xdate.tday(date.mdy(6,10,1648) + time.hms(0,0,0)).
4516 DEBUG EVALUATE /xdate.tday(date.mdy(6,30,1680) + time.hms(4,50,38)).
4517 DEBUG EVALUATE /xdate.tday(date.mdy(7,24,1716) + time.hms(12,31,35)).
4518 DEBUG EVALUATE /xdate.tday(date.mdy(6,19,1768) + time.hms(12,47,53)).
4519 DEBUG EVALUATE /xdate.tday(date.mdy(8,2,1819) + time.hms(1,26,0)).
4520 DEBUG EVALUATE /xdate.tday(date.mdy(3,27,1839) + time.hms(20,58,11)).
4521 DEBUG EVALUATE /xdate.tday(date.mdy(4,19,1903) + time.hms(7,36,5)).
4522 DEBUG EVALUATE /xdate.tday(date.mdy(8,25,1929) + time.hms(15,43,49)).
4523 DEBUG EVALUATE /xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9)).
4524 DEBUG EVALUATE /xdate.tday(date.mdy(4,19,1943) + time.hms(6,49,27)).
4525 DEBUG EVALUATE /xdate.tday(date.mdy(10,7,1943) + time.hms(2,57,52)).
4526 DEBUG EVALUATE /xdate.tday(date.mdy(3,17,1992) + time.hms(16,45,44)).
4527 DEBUG EVALUATE /xdate.tday(date.mdy(2,25,1996) + time.hms(21,30,57)).
4528 DEBUG EVALUATE /xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9)).
4529 DEBUG EVALUATE /xdate.tday(date.mdy(4,19,43) + time.hms(6,49,27)).
4530 DEBUG EVALUATE /xdate.tday(date.mdy(10,7,43) + time.hms(2,57,52)).
4531 DEBUG EVALUATE /xdate.tday(date.mdy(3,17,92) + time.hms(16,45,44)).
4532 DEBUG EVALUATE /xdate.tday(date.mdy(2,25,96) + time.hms(21,30,57)).
4533 DEBUG EVALUATE /xdate.tday(date.mdy(11,10,2038) + time.hms(22,30,4)).
4534 DEBUG EVALUATE /xdate.tday(date.mdy(7,18,2094) + time.hms(1,56,51)).
4535 ])
4536
4537 for opt in OPT NOOPT; do
4538     AS_BOX([$opt])
4539     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4540     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4541 ])
4542 done
4543 AT_CLEANUP
4544
4545 AT_SETUP([expressions - XDATE.TIME])
4546 AT_KEYWORDS([expression expressions evaluate])
4547 AT_DATA([evaluate-base.sps], [
4548 DEBUG EVALUATE SET opt.
4549 DEBUG EVALUATE /xdate.time(date.mdy(6,10,1648) + time.hms(0,0,0)).
4550 DEBUG EVALUATE /xdate.time(date.mdy(6,30,1680) + time.hms(4,50,38)).
4551 DEBUG EVALUATE /xdate.time(date.mdy(7,24,1716) + time.hms(12,31,35)).
4552 DEBUG EVALUATE /xdate.time(date.mdy(6,19,1768) + time.hms(12,47,53)).
4553 DEBUG EVALUATE /xdate.time(date.mdy(8,2,1819) + time.hms(1,26,0)).
4554 DEBUG EVALUATE /xdate.time(date.mdy(3,27,1839) + time.hms(20,58,11)).
4555 DEBUG EVALUATE /xdate.time(date.mdy(4,19,1903) + time.hms(7,36,5)).
4556 DEBUG EVALUATE /xdate.time(date.mdy(8,25,1929) + time.hms(15,43,49)).
4557 DEBUG EVALUATE /xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9)).
4558 DEBUG EVALUATE /xdate.time(date.mdy(4,19,1943) + time.hms(6,49,27)).
4559 DEBUG EVALUATE /xdate.time(date.mdy(10,7,1943) + time.hms(2,57,52)).
4560 DEBUG EVALUATE /xdate.time(date.mdy(3,17,1992) + time.hms(16,45,44)).
4561 DEBUG EVALUATE /xdate.time(date.mdy(2,25,1996) + time.hms(21,30,57)).
4562 DEBUG EVALUATE /xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9)).
4563 DEBUG EVALUATE /xdate.time(date.mdy(4,19,43) + time.hms(6,49,27)).
4564 DEBUG EVALUATE /xdate.time(date.mdy(10,7,43) + time.hms(2,57,52)).
4565 DEBUG EVALUATE /xdate.time(date.mdy(3,17,92) + time.hms(16,45,44)).
4566 DEBUG EVALUATE /xdate.time(date.mdy(2,25,96) + time.hms(21,30,57)).
4567 DEBUG EVALUATE /xdate.time(date.mdy(11,10,2038) + time.hms(22,30,4)).
4568 DEBUG EVALUATE /xdate.time(date.mdy(7,18,2094) + time.hms(1,56,51)).
4569 ])
4570
4571 for opt in OPT NOOPT; do
4572     AS_BOX([$opt])
4573     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4574     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4575 ])
4576 done
4577 AT_CLEANUP
4578
4579 AT_SETUP([expressions - XDATE.WEEK])
4580 AT_KEYWORDS([expression expressions evaluate])
4581 AT_DATA([evaluate-base.sps], [
4582 DEBUG EVALUATE SET opt.
4583 DEBUG EVALUATE /xdate.week(date.mdy(6,10,1648) + time.hms(0,0,0)).
4584 DEBUG EVALUATE /xdate.week(date.mdy(6,30,1680) + time.hms(4,50,38)).
4585 DEBUG EVALUATE /xdate.week(date.mdy(7,24,1716) + time.hms(12,31,35)).
4586 DEBUG EVALUATE /xdate.week(date.mdy(6,19,1768) + time.hms(12,47,53)).
4587 DEBUG EVALUATE /xdate.week(date.mdy(8,2,1819) + time.hms(1,26,0)).
4588 DEBUG EVALUATE /xdate.week(date.mdy(3,27,1839) + time.hms(20,58,11)).
4589 DEBUG EVALUATE /xdate.week(date.mdy(4,19,1903) + time.hms(7,36,5)).
4590 DEBUG EVALUATE /xdate.week(date.mdy(8,25,1929) + time.hms(15,43,49)).
4591 DEBUG EVALUATE /xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9)).
4592 DEBUG EVALUATE /xdate.week(date.mdy(4,19,1943) + time.hms(6,49,27)).
4593 DEBUG EVALUATE /xdate.week(date.mdy(10,7,1943) + time.hms(2,57,52)).
4594 DEBUG EVALUATE /xdate.week(date.mdy(3,17,1992) + time.hms(16,45,44)).
4595 DEBUG EVALUATE /xdate.week(date.mdy(2,25,1996) + time.hms(21,30,57)).
4596 DEBUG EVALUATE /xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9)).
4597 DEBUG EVALUATE /xdate.week(date.mdy(4,19,43) + time.hms(6,49,27)).
4598 DEBUG EVALUATE /xdate.week(date.mdy(10,7,43) + time.hms(2,57,52)).
4599 DEBUG EVALUATE /xdate.week(date.mdy(3,17,92) + time.hms(16,45,44)).
4600 DEBUG EVALUATE /xdate.week(date.mdy(2,25,96) + time.hms(21,30,57)).
4601 DEBUG EVALUATE /xdate.week(date.mdy(11,10,2038) + time.hms(22,30,4)).
4602 DEBUG EVALUATE /xdate.week(date.mdy(7,18,2094) + time.hms(1,56,51)).
4603 ])
4604
4605 for opt in OPT NOOPT; do
4606     AS_BOX([$opt])
4607     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4608     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4609 ])
4610 done
4611 AT_CLEANUP
4612
4613 AT_SETUP([expressions - XDATE.WKDAY])
4614 AT_KEYWORDS([expression expressions evaluate])
4615 AT_DATA([evaluate-base.sps], [
4616 DEBUG EVALUATE SET opt.
4617 DEBUG EVALUATE /xdate.wkday(date.mdy(6,10,1648)).
4618 DEBUG EVALUATE /xdate.wkday(date.mdy(6,30,1680)).
4619 DEBUG EVALUATE /xdate.wkday(date.mdy(7,24,1716)).
4620 DEBUG EVALUATE /xdate.wkday(date.mdy(6,19,1768)).
4621 DEBUG EVALUATE /xdate.wkday(date.mdy(8,2,1819)).
4622 DEBUG EVALUATE /xdate.wkday(date.mdy(3,27,1839)).
4623 DEBUG EVALUATE /xdate.wkday(date.mdy(4,19,1903)).
4624 DEBUG EVALUATE /xdate.wkday(date.mdy(8,25,1929)).
4625 DEBUG EVALUATE /xdate.wkday(date.mdy(9,29,1941)).
4626 DEBUG EVALUATE /xdate.wkday(date.mdy(4,19,1943)).
4627 DEBUG EVALUATE /xdate.wkday(date.mdy(10,7,1943)).
4628 DEBUG EVALUATE /xdate.wkday(date.mdy(3,17,1992)).
4629 DEBUG EVALUATE /xdate.wkday(date.mdy(2,25,1996)).
4630 DEBUG EVALUATE /xdate.wkday(date.mdy(9,29,1941)).
4631 DEBUG EVALUATE /xdate.wkday(date.mdy(4,19,43)).
4632 DEBUG EVALUATE /xdate.wkday(date.mdy(10,7,43)).
4633 DEBUG EVALUATE /xdate.wkday(date.mdy(3,17,92)).
4634 DEBUG EVALUATE /xdate.wkday(date.mdy(2,25,96)).
4635 DEBUG EVALUATE /xdate.wkday(date.mdy(11,10,2038)).
4636 DEBUG EVALUATE /xdate.wkday(date.mdy(7,18,2094)).
4637 ])
4638
4639 for opt in OPT NOOPT; do
4640     AS_BOX([$opt])
4641     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4642     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4643 ])
4644 done
4645 AT_CLEANUP
4646
4647 AT_SETUP([expressions - XDATE.YEAR])
4648 AT_KEYWORDS([expression expressions evaluate])
4649 AT_DATA([evaluate-base.sps], [
4650 DEBUG EVALUATE SET opt.
4651 DEBUG EVALUATE /xdate.year(date.mdy(6,10,1648) + time.hms(0,0,0)).
4652 DEBUG EVALUATE /xdate.year(date.mdy(6,30,1680) + time.hms(4,50,38)).
4653 DEBUG EVALUATE /xdate.year(date.mdy(7,24,1716) + time.hms(12,31,35)).
4654 DEBUG EVALUATE /xdate.year(date.mdy(6,19,1768) + time.hms(12,47,53)).
4655 DEBUG EVALUATE /xdate.year(date.mdy(8,2,1819) + time.hms(1,26,0)).
4656 DEBUG EVALUATE /xdate.year(date.mdy(3,27,1839) + time.hms(20,58,11)).
4657 DEBUG EVALUATE /xdate.year(date.mdy(4,19,1903) + time.hms(7,36,5)).
4658 DEBUG EVALUATE /xdate.year(date.mdy(8,25,1929) + time.hms(15,43,49)).
4659 DEBUG EVALUATE /xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9)).
4660 DEBUG EVALUATE /xdate.year(date.mdy(4,19,1943) + time.hms(6,49,27)).
4661 DEBUG EVALUATE /xdate.year(date.mdy(10,7,1943) + time.hms(2,57,52)).
4662 DEBUG EVALUATE /xdate.year(date.mdy(3,17,1992) + time.hms(16,45,44)).
4663 DEBUG EVALUATE /xdate.year(date.mdy(2,25,1996) + time.hms(21,30,57)).
4664 DEBUG EVALUATE /xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9)).
4665 DEBUG EVALUATE /xdate.year(date.mdy(4,19,43) + time.hms(6,49,27)).
4666 DEBUG EVALUATE /xdate.year(date.mdy(10,7,43) + time.hms(2,57,52)).
4667 DEBUG EVALUATE /xdate.year(date.mdy(3,17,92) + time.hms(16,45,44)).
4668 DEBUG EVALUATE /xdate.year(date.mdy(2,25,96) + time.hms(21,30,57)).
4669 DEBUG EVALUATE /xdate.year(date.mdy(11,10,2038) + time.hms(22,30,4)).
4670 DEBUG EVALUATE /xdate.year(date.mdy(7,18,2094) + time.hms(1,56,51)).
4671 ])
4672
4673 for opt in OPT NOOPT; do
4674     AS_BOX([$opt])
4675     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4676     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4677 ])
4678 done
4679 AT_CLEANUP
4680
4681 AT_SETUP([expressions - DATEDIFF])
4682 AT_KEYWORDS([expression expressions evaluate])
4683 AT_DATA([evaluate-base.sps], [
4684 DEBUG EVALUATE SET opt.
4685 DEBUG EVALUATE /datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'years').
4686 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'years').
4687 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'years').
4688 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'years').
4689 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'years').
4690 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'years').
4691 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'years').
4692 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'years').
4693 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'years').
4694 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'years').
4695 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'years').
4696 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'years').
4697 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'years').
4698 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'years').
4699 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'years').
4700 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'years').
4701 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'years').
4702 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'years').
4703 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'years').
4704 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'years').
4705 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'years').
4706 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'years').
4707
4708 DEBUG EVALUATE /datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'quarters').
4709 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'quarters').
4710 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'quarters').
4711 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'quarters').
4712 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'quarters').
4713 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'quarters').
4714 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'quarters').
4715 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'quarters').
4716 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'quarters').
4717 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'quarters').
4718 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'quarters').
4719 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'quarters').
4720 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'quarters').
4721 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'quarters').
4722 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'quarters').
4723 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'quarters').
4724 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'quarters').
4725 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'quarters').
4726 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'quarters').
4727 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'quarters').
4728 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'quarters').
4729 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'quarters').
4730
4731 DEBUG EVALUATE /datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'months').
4732 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'months').
4733 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'months').
4734 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'months').
4735 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'months').
4736 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'months').
4737 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'months').
4738 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'months').
4739 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'months').
4740 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'months').
4741 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'months').
4742 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'months').
4743 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'months').
4744 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'months').
4745 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'months').
4746 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'months').
4747 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'months').
4748 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'months').
4749 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'months').
4750 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'months').
4751 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'months').
4752 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'months').
4753
4754 DEBUG EVALUATE /datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'weeks').
4755 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'weeks').
4756 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'weeks').
4757 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'weeks').
4758 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'weeks').
4759 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'weeks').
4760 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'weeks').
4761 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'weeks').
4762 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'weeks').
4763 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'weeks').
4764 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'weeks').
4765 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'weeks').
4766 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'weeks').
4767 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'weeks').
4768 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'weeks').
4769 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'weeks').
4770 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'weeks').
4771 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'weeks').
4772 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'weeks').
4773 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'weeks').
4774 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'weeks').
4775 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'weeks').
4776
4777 DEBUG EVALUATE /datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'days').
4778 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'days').
4779 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'days').
4780 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'days').
4781 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'days').
4782 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'days').
4783 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'days').
4784 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'days').
4785 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'days').
4786 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'days').
4787 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'days').
4788 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'days').
4789 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'days').
4790 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'days').
4791 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'days').
4792 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'days').
4793 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'days').
4794 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'days').
4795 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'days').
4796 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'days').
4797 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'days').
4798 DEBUG EVALUATE /datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'days').
4799
4800 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'years').
4801 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'years').
4802 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'years').
4803 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'years').
4804 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'years').
4805 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'years').
4806 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'years').
4807 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'years').
4808 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'years').
4809 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'years').
4810 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'years').
4811 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'years').
4812 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'years').
4813 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'years').
4814 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'years').
4815 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'years').
4816 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'years').
4817 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'years').
4818 DEBUG EVALUATE /datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'years').
4819 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'years').
4820 DEBUG EVALUATE /datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'years').
4821 DEBUG EVALUATE /datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'years').
4822
4823 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'months').
4824 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'months').
4825 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'months').
4826 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'months').
4827 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'months').
4828 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'months').
4829 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'months').
4830 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'months').
4831 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'months').
4832 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'months').
4833 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'months').
4834 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'months').
4835 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'months').
4836 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'months').
4837 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'months').
4838 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'months').
4839 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'months').
4840 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'months').
4841 DEBUG EVALUATE /datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'months').
4842 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'months').
4843 DEBUG EVALUATE /datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'months').
4844 DEBUG EVALUATE /datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'months').
4845
4846 DEBUG EVALUATE /datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'quarters').
4847 DEBUG EVALUATE /datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'quarters').
4848 DEBUG EVALUATE /datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'quarters').
4849 DEBUG EVALUATE /datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'quarters').
4850 DEBUG EVALUATE /datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'quarters').
4851 DEBUG EVALUATE /datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'quarters').
4852 DEBUG EVALUATE /datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'quarters').
4853 DEBUG EVALUATE /datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'quarters').
4854 DEBUG EVALUATE /datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'quarters').
4855 DEBUG EVALUATE /datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'quarters').
4856 DEBUG EVALUATE /datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'quarters').
4857 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'quarters').
4858 DEBUG EVALUATE /datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'quarters').
4859 DEBUG EVALUATE /datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'quarters').
4860 DEBUG EVALUATE /datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'quarters').
4861 DEBUG EVALUATE /datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'quarters').
4862 DEBUG EVALUATE /datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'quarters').
4863 DEBUG EVALUATE /datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'quarters').
4864 DEBUG EVALUATE /datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'quarters').
4865 DEBUG EVALUATE /datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'quarters').
4866 DEBUG EVALUATE /datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'quarters').
4867 DEBUG EVALUATE /datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'quarters').
4868
4869 dnl time of day is significant for DATEDIFF
4870 DEBUG EVALUATE /datediff(date.mdy(10,15,1910) + 234, date.mdy(10,10,1910) + 123, 'days').
4871 DEBUG EVALUATE /datediff(date.mdy(10,15,1910) + 123, date.mdy(10,10,1910) + 234, 'days').
4872 DEBUG EVALUATE /datediff(date.mdy(10,24,1910) + 234, date.mdy(10,10,1910) + 123, 'weeks').
4873 DEBUG EVALUATE /datediff(date.mdy(10,24,1910) + 123, date.mdy(10,10,1910) + 234, 'weeks').
4874 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 234, date.mdy(5,10,1910) + 123, 'months').
4875 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 123, date.mdy(5,10,1910) + 234, 'months').
4876 DEBUG EVALUATE /datediff(date.mdy(5,10,1919) + 234, date.mdy(5,10,1910) + 123, 'years').
4877 DEBUG EVALUATE /datediff(date.mdy(5,10,1919) + 123, date.mdy(5,10,1910) + 234, 'years').
4878
4879 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 123, date.mdy(10,15,1910) + 234, 'days').
4880 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 234, date.mdy(10,15,1910) + 123, 'days').
4881 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 123, date.mdy(10,24,1910) + 234, 'weeks').
4882 DEBUG EVALUATE /datediff(date.mdy(10,10,1910) + 234, date.mdy(10,24,1910) + 123, 'weeks').
4883 DEBUG EVALUATE /datediff(date.mdy(5,10,1910) + 123, date.mdy(10,10,1910) + 234, 'months').
4884 DEBUG EVALUATE /datediff(date.mdy(5,10,1910) + 234, date.mdy(10,10,1910) + 123, 'months').
4885 DEBUG EVALUATE /datediff(date.mdy(5,10,1910) + 123, date.mdy(5,10,1919) + 234, 'years').
4886 DEBUG EVALUATE /datediff(date.mdy(5,10,1910) + 234, date.mdy(5,10,1919) + 123, 'years').
4887 ])
4888
4889 for opt in OPT NOOPT; do
4890     AS_BOX([$opt])
4891     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4892     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4893 ])
4894 done
4895 AT_CLEANUP
4896
4897 AT_SETUP([expressions - DATESUM with non-leap year])
4898 AT_KEYWORDS([expression expressions evaluate])
4899 AT_DATA([evaluate-base.sps], [
4900 DEBUG EVALUATE SET opt.
4901 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 1, 'months') - date.mdy(1,1,1900)).
4902 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 2, 'months') - date.mdy(1,1,1900)).
4903 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 3, 'months') - date.mdy(1,1,1900)).
4904 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 4, 'months') - date.mdy(1,1,1900)).
4905 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 5.4, 'months') - date.mdy(1,1,1900)).
4906 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 6, 'months') - date.mdy(1,1,1900)).
4907 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 7, 'months') - date.mdy(1,1,1900)).
4908 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 8, 'months') - date.mdy(1,1,1900)).
4909 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 9, 'months') - date.mdy(1,1,1900)).
4910 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 10, 'months') - date.mdy(1,1,1900)).
4911 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 11, 'months') - date.mdy(1,1,1900)).
4912 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 12, 'months') - date.mdy(1,1,1900)).
4913 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 13.9, 'months') - date.mdy(1,1,1900)).
4914 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 1, 'months', 'rollover') - date.mdy(1,1,1900)).
4915 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 2, 'months', 'rollover') - date.mdy(1,1,1900)).
4916 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 3.2, 'months', 'rollover') - date.mdy(1,1,1900)).
4917 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 4, 'months', 'rollover') - date.mdy(1,1,1900)).
4918 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 5, 'months', 'rollover') - date.mdy(1,1,1900)).
4919 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 6, 'months', 'rollover') - date.mdy(1,1,1900)).
4920 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 7, 'months', 'rollover') - date.mdy(1,1,1900)).
4921 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 8, 'months', 'rollover') - date.mdy(1,1,1900)).
4922 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 9, 'months', 'rollover') - date.mdy(1,1,1900)).
4923 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 10, 'months', 'rollover') - date.mdy(1,1,1900)).
4924 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 11, 'months', 'rollover') - date.mdy(1,1,1900)).
4925 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 12, 'months', 'rollover') - date.mdy(1,1,1900)).
4926 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1900), 13, 'months', 'rollover') - date.mdy(1,1,1900)).
4927 ])
4928
4929 for opt in OPT NOOPT; do
4930     AS_BOX([$opt])
4931     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4932     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4933 ])
4934 done
4935 AT_CLEANUP
4936
4937 AT_SETUP([expressions - DATESUM with leap year])
4938 AT_KEYWORDS([expression expressions evaluate])
4939 AT_DATA([evaluate-base.sps], [
4940 DEBUG EVALUATE SET opt.
4941 ])
4942
4943 for opt in OPT NOOPT; do
4944     AS_BOX([$opt])
4945     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
4946     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
4947 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 1, 'months') - date.mdy(1,1,1904)).
4948 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 2.5, 'months') - date.mdy(1,1,1904)).
4949 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 3, 'months') - date.mdy(1,1,1904)).
4950 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 4.9, 'months') - date.mdy(1,1,1904)).
4951 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 5.1, 'months') - date.mdy(1,1,1904)).
4952 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 6, 'months') - date.mdy(1,1,1904)).
4953 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 7, 'months') - date.mdy(1,1,1904)).
4954 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 8, 'months') - date.mdy(1,1,1904)).
4955 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 9, 'months') - date.mdy(1,1,1904)).
4956 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 10, 'months') - date.mdy(1,1,1904)).
4957 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 11, 'months') - date.mdy(1,1,1904)).
4958 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 12, 'months') - date.mdy(1,1,1904)).
4959 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 13, 'months') - date.mdy(1,1,1904)).
4960 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 1, 'months', 'rollover') - date.mdy(1,1,1904)).
4961 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 2, 'months', 'rollover') - date.mdy(1,1,1904)).
4962 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 3, 'months', 'rollover') - date.mdy(1,1,1904)).
4963 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 4, 'months', 'rollover') - date.mdy(1,1,1904)).
4964 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 5, 'months', 'rollover') - date.mdy(1,1,1904)).
4965 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 6, 'months', 'rollover') - date.mdy(1,1,1904)).
4966 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 7, 'months', 'rollover') - date.mdy(1,1,1904)).
4967 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 8, 'months', 'rollover') - date.mdy(1,1,1904)).
4968 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 9, 'months', 'rollover') - date.mdy(1,1,1904)).
4969 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 10, 'months', 'rollover') - date.mdy(1,1,1904)).
4970 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 11, 'months', 'rollover') - date.mdy(1,1,1904)).
4971 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 12, 'months', 'rollover') - date.mdy(1,1,1904)).
4972 DEBUG EVALUATE /ctime.days(datesum(date.mdy(1,31,1904), 13, 'months', 'rollover') - date.mdy(1,1,1904)).
4973 ])
4974 done
4975 AT_CLEANUP
4976
4977 AT_SETUP([expressions - DATESUM])
4978 AT_KEYWORDS([expression expressions evaluate])
4979 AT_DATA([evaluate-base.sps], [
4980 DEBUG EVALUATE SET opt.
4981 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,10,1648), 1, 'weeks') - date.mdy(6,10,1648)).
4982 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'weeks') - date.mdy(6,30,1680)).
4983 DEBUG EVALUATE /ctime.days(datesum(date.mdy(7,24,1716), -3, 'weeks') - date.mdy(7,24,1716)).
4984 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,19,1768), 4, 'weeks') - date.mdy(6,19,1768)).
4985 DEBUG EVALUATE /ctime.days(datesum(date.mdy(8,2,1819), 5, 'weeks') - date.mdy(8,2,1819)).
4986
4987 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,10,1648), 1, 'days') - date.mdy(6,10,1648)).
4988 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'days') - date.mdy(6,30,1680)).
4989 DEBUG EVALUATE /ctime.days(datesum(date.mdy(7,24,1716), -3, 'days') - date.mdy(7,24,1716)).
4990 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,19,1768), 4, 'days') - date.mdy(6,19,1768)).
4991 DEBUG EVALUATE /ctime.days(datesum(date.mdy(8,2,1819), 5, 'days') - date.mdy(8,2,1819)).
4992 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,10,1648), 1, 'hours') - date.mdy(6,10,1648)).
4993 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'hours') - date.mdy(6,30,1680)).
4994 DEBUG EVALUATE /ctime.days(datesum(date.mdy(6,19,1768), -4, 'hours') - date.mdy(6,19,1768)).
4995 DEBUG EVALUATE /ctime.days(datesum(date.mdy(8,2,1819), 5, 'hours') - date.mdy(8,2,1819)).
4996 ])
4997
4998 for opt in OPT NOOPT; do
4999     AS_BOX([$opt])
5000     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5001     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
5002 ])
5003 done
5004 AT_CLEANUP
5005
5006 AT_SETUP([expressions - DATESUM preserves time of day for units of days and longer])
5007 AT_KEYWORDS([expression expressions evaluate])
5008 AT_DATA([evaluate-base.sps], [
5009 DEBUG EVALUATE SET opt.
5010 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))).
5011 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))).
5012 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))).
5013 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))).
5014 ])
5015
5016 for opt in OPT NOOPT; do
5017     AS_BOX([$opt])
5018     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5019     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
5020 ])
5021 done
5022 AT_CLEANUP
5023
5024 dnl These test values are from Applied Statistics, Algorithm AS 310.
5025 AT_SETUP([expressions - NCDF.BETA])
5026 AT_KEYWORDS([expression expressions evaluate])
5027 AT_DATA([evaluate-base.sps], [
5028 DEBUG EVALUATE SET opt.
5029 DEBUG EVALUATE /1000 * ncdf.beta(.868,10,20,150).
5030 DEBUG EVALUATE /1000 * ncdf.beta(.9,10,10,120).
5031 DEBUG EVALUATE /1000 * ncdf.beta(.88,15,5,80).
5032 DEBUG EVALUATE /1000 * ncdf.beta(.85,20,10,110).
5033 DEBUG EVALUATE /1000 * ncdf.beta(.66,20,30,65).
5034 DEBUG EVALUATE /1000 * ncdf.beta(.72,20,50,130).
5035 DEBUG EVALUATE /1000 * ncdf.beta(.72,30,20,80).
5036 DEBUG EVALUATE /1000 * ncdf.beta(.8,30,40,130).
5037 ])
5038
5039 for opt in OPT NOOPT; do
5040     AS_BOX([$opt])
5041     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5042     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
5043 ])
5044 done
5045 AT_CLEANUP
5046
5047 dnl FIXME: LAG
5048 dnl
5049   [[X], [1.00], [], [(X = 1.00)]],
5050
5051 dnl FIXME: out-of-range and nearly out-of-range values on dates
5052 dnl
5053 dnl Tests correctness of generic optimizations in optimize_tree().
5054 AT_SETUP([expressions - generic tree optimizations])
5055 AT_KEYWORDS([expression expressions evaluate])
5056 AT_DATA([evaluate-base.sps], [
5057 DEBUG EVALUATE SET opt.
5058 DEBUG EVALUATE (x=10) /x + 0.
5059 DEBUG EVALUATE (x=-3) /x - 0.
5060 DEBUG EVALUATE (x=5) /0 + x.
5061 DEBUG EVALUATE (x=10) /x * 1.
5062 DEBUG EVALUATE (x=-3) /1 * x.
5063 DEBUG EVALUATE (x=5) /x / 1.
5064 DEBUG EVALUATE (x=10) /0 * x.
5065 DEBUG EVALUATE (x=-3) /x * 0.
5066 DEBUG EVALUATE (x=5) /0 / x.
5067 DEBUG EVALUATE (x=5) /mod(0, x).
5068 DEBUG EVALUATE (x=5) /x ** 1.
5069 DEBUG EVALUATE (x=5) /x ** 2.
5070 ])
5071
5072 for opt in OPT NOOPT; do
5073     AS_BOX([$opt])
5074     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5075     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
5076 ])
5077 done
5078 AT_CLEANUP
5079
5080 AT_SETUP([expressions - negative checks])
5081 AT_KEYWORDS([expression expressions evaluate])
5082 AT_DATA([evaluate-base.sps], [
5083 DEBUG EVALUATE SET opt.
5084 DEBUG EVALUATE /$nonexistent.
5085 DEBUG EVALUATE /RANGE(1, 2).
5086 DEBUG EVALUATE /CONCAT.1('a', 'b').
5087 DEBUG EVALUATE /foobar(x).
5088 DEBUG EVALUATE /CONCAT.1('a' b).
5089 DEBUG EVALUATE /NCDF.CHISQ(1, 2, 3).
5090 ])
5091
5092 for opt in OPT NOOPT; do
5093     AS_BOX([$opt])
5094     sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
5095     AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
5096 ])
5097 done
5098 AT_CLEANUP
5099
5100 AT_SETUP([expressions - LAG])
5101 AT_DATA([lag.sps], [dnl
5102 data list /W 1.
5103 begin data.
5104 1
5105 2
5106 3
5107 4
5108 5
5109 end data.
5110
5111 compute X=lag(w,1).
5112 compute Y=lag(x).
5113 compute Z=lag(w,2).
5114 list.
5115 ])
5116 AT_CHECK([pspp -o pspp.csv lag.sps])
5117 AT_CHECK([cat pspp.csv], [0], [dnl
5118 Table: Reading 1 record from INLINE.
5119 Variable,Record,Columns,Format
5120 W,1,1-1,F1.0
5121
5122 Table: Data List
5123 W,X,Y,Z
5124 1,.  ,.  ,.  @&t@
5125 2,1.00,.  ,.  @&t@
5126 3,2.00,1.00,1.00
5127 4,3.00,2.00,2.00
5128 5,4.00,3.00,3.00
5129 ])
5130 AT_CLEANUP
5131
5132 AT_SETUP([expression - LAG crash])
5133 AT_DATA([lag.sps], [dnl
5134 DATA LIST LIST /x.
5135 BEGIN DATA
5136 1
5137 2
5138 END DATA.
5139
5140 DO IF (x <> LAG(x) ).
5141         ECHO 'hello'.
5142 END IF.
5143
5144 EXECUTE.
5145 ])
5146 AT_CHECK([pspp -o pspp.csv lag.sps])
5147 AT_CHECK([cat pspp.csv], [0], [dnl
5148 Table: Reading free-form data from INLINE.
5149 Variable,Format
5150 x,F8.0
5151
5152 hello
5153 ])
5154 AT_CLEANUP
5155
5156 dnl Tests for a bug which caused UNIFORM(x) to always return zero.
5157 AT_SETUP([expressions - UNIFORM])
5158 AT_DATA([uniform.sps], [dnl
5159 set seed=10.
5160 input program.
5161 + loop #i = 1 to 20.
5162 +    do repeat response=R1.
5163 +       compute response = uniform(10).
5164 +    end repeat.
5165 +    end case.
5166 + end loop.
5167 + end file.
5168 end input program.
5169
5170 list.
5171 ])
5172 AT_CHECK([pspp -o pspp.csv uniform.sps])
5173 AT_CHECK([cat pspp.csv], [0], [dnl
5174 Table: Data List
5175 R1
5176 7.71
5177 2.99
5178 .21
5179 4.95
5180 6.34
5181 4.43
5182 7.49
5183 8.32
5184 4.99
5185 5.83
5186 2.25
5187 .25
5188 1.98
5189 7.09
5190 7.61
5191 2.66
5192 1.69
5193 2.64
5194 .88
5195 1.50
5196 ])
5197 AT_CLEANUP
5198
5199 AT_SETUP([expressions - VALUELABEL])
5200 AT_DATA([valuelabel.sps], [dnl
5201 DATA LIST notable /n 1 s 2(a).
5202 VALUE LABELS /n 0 'Very dissatisfied'
5203                 1 'Dissatisfied'
5204                 1.5 'Slightly Peeved'
5205                 2 'Neutral'
5206                 3 'Satisfied'
5207                 4 'Very satisfied'.
5208 VALUE LABELS /s 'a' 'Wouldn''t buy again'
5209                 'b' 'Unhappy'
5210                 'c' 'Bored'
5211                 'd' 'Satiated'
5212                 'e' 'Elated'.
5213 STRING nlabel slabel(a10).
5214 COMPUTE nlabel = VALUELABEL(n).
5215 COMPUTE slabel = VALUELABEL(s).
5216 LIST.
5217 BEGIN DATA.
5218
5219 0a
5220 1b
5221 2c
5222 3d
5223 4e
5224 5f
5225 6g
5226 END DATA.
5227 ])
5228 AT_CHECK([pspp -o pspp.csv valuelabel.sps])
5229 AT_CHECK([cat pspp.csv], [0], [dnl
5230 Table: Data List
5231 n,s,nlabel,slabel
5232 .,,,
5233 0,a,Very dissa,Wouldn't b
5234 1,b,Dissatisfi,Unhappy
5235 2,c,Neutral,Bored
5236 3,d,Satisfied,Satiated
5237 4,e,Very satis,Elated
5238 5,f,,
5239 6,g,,
5240 ])
5241 AT_CLEANUP
5242
5243 AT_SETUP([expressions - variables])
5244 AT_DATA([variables.sps], [dnl
5245 DATA LIST NOTABLE/N1 TO N5 1-5.
5246 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
5247 BEGIN DATA.
5248 12345
5249 6789
5250 END DATA.
5251
5252 COMPUTE P1=N1.
5253 COMPUTE P2=N2.
5254 COMPUTE P3=N3.
5255 COMPUTE P4=N4.
5256 COMPUTE P5=N5.
5257
5258 COMPUTE MC=NMISS(N1 TO N5).
5259 COMPUTE VC=NVALID(N1 TO N5).
5260
5261 COMPUTE S1=SYSMIS(N1).
5262 COMPUTE S2=SYSMIS(N2).
5263 COMPUTE S3=SYSMIS(N3).
5264 COMPUTE S4=SYSMIS(N4).
5265 COMPUTE S5=SYSMIS(N5).
5266
5267 COMPUTE M1=MISSING(N1).
5268 COMPUTE M2=MISSING(N2).
5269 COMPUTE M3=MISSING(N3).
5270 COMPUTE M4=MISSING(N4).
5271 COMPUTE M5=MISSING(N5).
5272
5273 COMPUTE V1=VALUE(N1).
5274 COMPUTE V2=VALUE(N2).
5275 COMPUTE V3=VALUE(N3).
5276 COMPUTE V4=VALUE(N4).
5277 COMPUTE V5=VALUE(N5).
5278
5279 FORMATS ALL (F1).
5280
5281 LIST.
5282 ])
5283 AT_CHECK([pspp -o pspp.csv variables.sps])
5284 AT_CHECK([cat pspp.csv], [0], [dnl
5285 Table: Data List
5286 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
5287 1,2,3,4,5,.,2,.,.,.,4,1,0,0,0,0,0,1,0,1,1,1,1,2,3,4,5
5288 6,7,8,9,.,6,7,8,9,.,1,4,0,0,0,0,1,0,0,0,0,1,6,7,8,9,.
5289 ])
5290 AT_CLEANUP
5291
5292 AT_SETUP([expressions - vectors])
5293 AT_DATA([vectors.sps], [dnl
5294 DATA LIST NOTABLE /N1 TO N5 1-5.
5295 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
5296 BEGIN DATA.
5297 12345
5298 6789
5299 END DATA.
5300
5301 VECTOR N=N1 TO N5.
5302 VECTOR X(5).
5303 LOOP I=1 TO 5.
5304 COMPUTE X(I)=N(I) + 1.
5305 END LOOP.
5306
5307 FORMATS ALL (F2).
5308
5309 LIST.
5310 ])
5311 AT_CHECK([pspp -o pspp.csv vectors.sps])
5312 AT_CHECK([cat pspp.csv], [0], [dnl
5313 Table: Data List
5314 N1,N2,N3,N4,N5,X1,X2,X3,X4,X5,I
5315 1,2,3,4,5,.,3,.,.,.,5
5316 6,7,8,9,.,7,8,9,10,.,5
5317 ])
5318 AT_CLEANUP