1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
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.
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.
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
16 m4_define([CHECK_EXPR_EVAL],
17 [AT_SETUP([expressions - $1])
18 AT_KEYWORDS([expression])
19 AT_DATA([evaluate.sps],
23 m4_foreach([check], [m4_shift($@)],
24 [DEBUG EVALUATE NOOPT m4_argn(4, check)/[]m4_car(check).
25 DEBUG EVALUATE m4_argn(4, check)/[]m4_car(check).
27 AT_CAPTURE_FILE([evaluate.sps])
29 AT_CHECK([pspp --testing-mode -O format=csv evaluate.sps],
30 [m4_if(m4_bregexp([m4_foreach([check], [m4_shift($@)], [m4_argn(3, check)])], [error:]), [-1], [0], [1])],
32 AT_DATA([expout], [m4_foreach([check], [m4_shift($@)],
33 [m4_define([i], m4_incr(i))dnl
34 m4_if(m4_argn(3, check), [], [], [evaluate.sps:[]i[]: m4_argn(3, check)
37 m4_define([i], m4_incr(i))dnl
38 m4_if(m4_argn(3, check), [], [], [evaluate.sps:[]i[]: m4_argn(3, check)
43 # Transform "file:line.column:" into plain "file:line:",
44 # because column numbers change between opt and noopt versions.
45 s/\(evaluate.sps:[0-9]\{1,\}\)\.[0-9]\{1,\}:/\1:/
47 # Remove leading or trailing quotes and un-double CSV quotes.
59 AT_BANNER([expressions])
61 AT_SETUP([expressions - numeric syntax])
62 AT_KEYWORDS([expression expressions evaluate])
63 AT_DATA([evaluate-base.sps], [
64 DEBUG EVALUATE SET opt.
68 DEBUG EVALUATE /1e-99.
71 for opt in OPT NOOPT; do
73 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
74 AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
86 AT_SETUP([expressions - coercion to and from Boolean])
87 AT_KEYWORDS([expression expressions evaluate])
88 AT_DATA([evaluate-base.sps], [
89 DEBUG EVALUATE SET opt.
90 DEBUG EVALUATE/0 AND 1.
91 DEBUG EVALUATE/$true AND 1.
92 DEBUG EVALUATE/1 OR $false.
93 DEBUG EVALUATE/1 OR $sysmis.
94 DEBUG EVALUATE/2 OR $sysmis.
95 DEBUG EVALUATE/1 AND 3.
98 for opt in OPT NOOPT; do
100 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
101 AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
110 evaluate.sps:7.16-7.27: error: DEBUG EVALUATE: The operands of OR must have
112 7 | DEBUG EVALUATE/2 OR $sysmis.
115 evaluate.sps:7.16: note: DEBUG EVALUATE: This operand with unexpected value 2
116 will be treated as 0.
117 7 | DEBUG EVALUATE/2 OR $sysmis.
120 2 OR $sysmis => sysmis
122 evaluate.sps:8.16-8.22: error: DEBUG EVALUATE: The operands of AND must have
124 8 | DEBUG EVALUATE/1 AND 3.
127 evaluate.sps:8.22: note: DEBUG EVALUATE: This operand with unexpected value 3
128 will be treated as 0.
129 8 | DEBUG EVALUATE/1 AND 3.
137 AT_SETUP([expressions - addition and subtraction])
138 AT_KEYWORDS([expression expressions evaluate])
139 AT_DATA([evaluate-base.sps], [
140 DEBUG EVALUATE SET opt.
141 DEBUG EVALUATE /1 + $true.
142 DEBUG EVALUATE /$sysmis + 1.
143 DEBUG EVALUATE /7676 + $sysmis.
144 DEBUG EVALUATE /1 +3 - 2 +4 - 5.
145 DEBUG EVALUATE /$true - 4/3.
146 DEBUG EVALUATE /1 - 2.
147 DEBUG EVALUATE /52 -23.
149 DEBUG EVALUATE /('foo') + 5.
150 DEBUG EVALUATE /('foo') + ('bar'). /* Concatenation requires CONCAT.
151 DEBUG EVALUATE /'foo' + 'bar'. /* Lexical concatenation succeeds.
153 DEBUG EVALUATE /'string' - 1e10.
154 DEBUG EVALUATE /9.5 - ''.
156 DEBUG EVALUATE /F2.0 + 3.
159 for opt in OPT NOOPT; do
161 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
162 AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
165 $sysmis + 1 => sysmis
167 7676 + $sysmis => sysmis
169 1 +3 - 2 +4 - 5 => 1.00
177 evaluate.sps:11.18-11.27: error: DEBUG EVALUATE: Both operands of + must be
179 11 | DEBUG EVALUATE /('foo') + 5.
182 evaluate.sps:11.18-11.22: note: DEBUG EVALUATE: This operand has type 'string'.
183 11 | DEBUG EVALUATE /('foo') + 5.
186 evaluate.sps:11.27: note: DEBUG EVALUATE: This operand has type 'number'.
187 11 | DEBUG EVALUATE /('foo') + 5.
192 evaluate.sps:12.18-12.32: error: DEBUG EVALUATE: Both operands of + must be
194 12 | DEBUG EVALUATE /('foo') + ('bar'). /* Concatenation requires CONCAT.
197 evaluate.sps:12.18-12.22: note: DEBUG EVALUATE: This operand has type 'string'.
198 12 | DEBUG EVALUATE /('foo') + ('bar'). /* Concatenation requires CONCAT.
201 evaluate.sps:12.28-12.32: note: DEBUG EVALUATE: This operand has type 'string'.
202 12 | DEBUG EVALUATE /('foo') + ('bar'). /* Concatenation requires CONCAT.
205 ('foo') + ('bar') => error
207 'foo' + 'bar' => "foobar"
209 evaluate.sps:15.17-15.31: error: DEBUG EVALUATE: Both operands of - must be
211 15 | DEBUG EVALUATE /'string' - 1e10.
214 evaluate.sps:15.17-15.24: note: DEBUG EVALUATE: This operand has type 'string'.
215 15 | DEBUG EVALUATE /'string' - 1e10.
218 evaluate.sps:15.26-15.31: note: DEBUG EVALUATE: This operand has type 'number'.
219 15 | DEBUG EVALUATE /'string' - 1e10.
222 'string' - 1e10 => error
224 evaluate.sps:16.17-16.24: error: DEBUG EVALUATE: Both operands of - must be
226 16 | DEBUG EVALUATE /9.5 - ''.
229 evaluate.sps:16.17-16.19: note: DEBUG EVALUATE: This operand has type 'number'.
230 16 | DEBUG EVALUATE /9.5 - ''.
233 evaluate.sps:16.23-16.24: note: DEBUG EVALUATE: This operand has type 'string'.
234 16 | DEBUG EVALUATE /9.5 - ''.
239 evaluate.sps:18.17-18.24: error: DEBUG EVALUATE: Both operands of + must be
241 18 | DEBUG EVALUATE /F2.0 + 3.
244 evaluate.sps:18.17-18.20: note: DEBUG EVALUATE: This operand has type 'format'.
245 18 | DEBUG EVALUATE /F2.0 + 3.
248 evaluate.sps:18.24: note: DEBUG EVALUATE: This operand has type 'number'.
249 18 | DEBUG EVALUATE /F2.0 + 3.
257 AT_SETUP([expressions - multiplication and division])
258 AT_KEYWORDS([expression expressions evaluate])
259 AT_DATA([evaluate-base.sps], [
260 DEBUG EVALUATE SET opt.
261 DEBUG EVALUATE /5 * 10.
262 DEBUG EVALUATE /10 * $true.
263 DEBUG EVALUATE /$true * 5.
264 DEBUG EVALUATE /1.5 * $true.
265 DEBUG EVALUATE /$sysmis * 15.
266 DEBUG EVALUATE /8.5 / $sysmis.
267 DEBUG EVALUATE /2 * 5 / 10.
268 DEBUG EVALUATE /1 / 2.
269 DEBUG EVALUATE /2 / 5.
270 DEBUG EVALUATE /12 / 3 / 2.
272 DEBUG EVALUATE /'x' * 1.
273 DEBUG EVALUATE /2 / 'x'.
276 for opt in OPT NOOPT; do
278 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
279 AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
288 $sysmis * 15 => sysmis
290 8.5 / $sysmis => sysmis
300 evaluate.sps:14.17-14.23: error: DEBUG EVALUATE: Both operands of * must be
302 14 | DEBUG EVALUATE /'x' * 1.
305 evaluate.sps:14.17-14.19: note: DEBUG EVALUATE: This operand has type 'string'.
306 14 | DEBUG EVALUATE /'x' * 1.
309 evaluate.sps:14.23: note: DEBUG EVALUATE: This operand has type 'number'.
310 14 | DEBUG EVALUATE /'x' * 1.
315 evaluate.sps:15.17-15.23: error: DEBUG EVALUATE: Both operands of / must be
317 15 | DEBUG EVALUATE /2 / 'x'.
320 evaluate.sps:15.17: note: DEBUG EVALUATE: This operand has type 'number'.
321 15 | DEBUG EVALUATE /2 / 'x'.
324 evaluate.sps:15.21-15.23: note: DEBUG EVALUATE: This operand has type 'string'.
325 15 | DEBUG EVALUATE /2 / 'x'.
333 AT_SETUP([expressions - exponentiation])
334 AT_KEYWORDS([expression expressions evaluate])
335 AT_DATA([evaluate-base.sps], [
336 DEBUG EVALUATE SET opt.
337 DEBUG EVALUATE /2**8.
338 DEBUG EVALUATE /(2**3)**4.
339 DEBUG EVALUATE /2**3**4.
340 DEBUG EVALUATE /-2**2.
341 DEBUG EVALUATE /-2**-3**-4.
342 DEBUG EVALUATE /-((2**-3)**-4).
345 for opt in OPT NOOPT; do
347 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
348 AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
353 evaluate.sps:5.17-5.23: warning: DEBUG EVALUATE: The exponentiation operator
354 (`**') is left-associative: `a**b**c' equals `(a**b)**c', not `a**(b**c)'. To
355 disable this warning, insert parentheses.
356 5 | DEBUG EVALUATE /2**3**4.
363 evaluate.sps:7.17-7.26: warning: DEBUG EVALUATE: The exponentiation operator
364 (`**') is left-associative: `a**b**c' equals `(a**b)**c', not `a**(b**c)'. To
365 disable this warning, insert parentheses.
366 7 | DEBUG EVALUATE /-2**-3**-4.
369 -2**-3**-4 => -4096.00
371 -((2**-3)**-4) => -4096.00
376 AT_SETUP([expressions - unary minus])
377 AT_KEYWORDS([expression expressions evaluate])
378 AT_DATA([evaluate-base.sps], [
379 DEBUG EVALUATE SET opt.
380 DEBUG EVALUATE /2+-3.
381 DEBUG EVALUATE /2*-3.
382 DEBUG EVALUATE /-3**2.
383 DEBUG EVALUATE /(-3)**2.
384 DEBUG EVALUATE /-(3**2).
385 DEBUG EVALUATE /2**-1.
386 DEBUG EVALUATE /0**0.
387 DEBUG EVALUATE /0**-1.
388 DEBUG EVALUATE /(-3)**1.5.
391 for opt in OPT NOOPT; do
392 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
393 AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
415 AT_SETUP([expressions - AND truth table])
416 AT_KEYWORDS([expression expressions evaluate])
417 AT_DATA([evaluate-base.sps], [
418 DEBUG EVALUATE SET opt.
419 DEBUG EVALUATE /$false AND $false.
420 DEBUG EVALUATE /$false AND $true.
421 DEBUG EVALUATE /$false AND $sysmis.
422 DEBUG EVALUATE /$true AND $false.
423 DEBUG EVALUATE /$true AND $true.
424 DEBUG EVALUATE /$true AND $sysmis.
425 DEBUG EVALUATE /$sysmis AND $false.
426 DEBUG EVALUATE /$sysmis AND $true.
427 DEBUG EVALUATE /$sysmis AND $sysmis.
428 DEBUG EVALUATE /$false & $false.
429 DEBUG EVALUATE /$false & $true.
430 DEBUG EVALUATE /$false & $sysmis.
431 DEBUG EVALUATE /$true & $false.
432 DEBUG EVALUATE /$true & $true.
433 DEBUG EVALUATE /$true & $sysmis.
434 DEBUG EVALUATE /$sysmis & $false.
435 DEBUG EVALUATE /$sysmis & $true.
436 DEBUG EVALUATE /$sysmis & $sysmis.
439 for opt in OPT NOOPT; do
441 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
442 AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
443 $false AND $false => false
445 $false AND $true => false
447 $false AND $sysmis => false
449 $true AND $false => false
451 $true AND $true => true
453 $true AND $sysmis => sysmis
455 $sysmis AND $false => false
457 $sysmis AND $true => sysmis
459 $sysmis AND $sysmis => sysmis
461 $false & $false => false
463 $false & $true => false
465 $false & $sysmis => false
467 $true & $false => false
469 $true & $true => true
471 $true & $sysmis => sysmis
473 $sysmis & $false => false
475 $sysmis & $true => sysmis
477 $sysmis & $sysmis => sysmis
482 AT_SETUP([expressions - OR truth table])
483 AT_KEYWORDS([expression expressions evaluate])
484 AT_DATA([evaluate-base.sps], [
485 DEBUG EVALUATE SET opt.
486 DEBUG EVALUATE /$false OR $false.
487 DEBUG EVALUATE /$false OR $true.
488 DEBUG EVALUATE /$false OR $sysmis.
489 DEBUG EVALUATE /$true OR $false.
490 DEBUG EVALUATE /$true OR $true.
491 DEBUG EVALUATE /$true OR $sysmis.
492 DEBUG EVALUATE /$sysmis OR $false.
493 DEBUG EVALUATE /$sysmis OR $true.
494 DEBUG EVALUATE /$sysmis OR $sysmis.
495 DEBUG EVALUATE /$false | $false.
496 DEBUG EVALUATE /$false | $true.
497 DEBUG EVALUATE /$false | $sysmis.
498 DEBUG EVALUATE /$true | $false.
499 DEBUG EVALUATE /$true | $true.
500 DEBUG EVALUATE /$true | $sysmis.
501 DEBUG EVALUATE /$sysmis | $false.
502 DEBUG EVALUATE /$sysmis | $true.
503 DEBUG EVALUATE /$sysmis | $sysmis.
506 for opt in OPT NOOPT; do
508 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
509 AT_CHECK([pspp --testing-mode evaluate.sps], [0], [dnl
510 $false OR $false => false
512 $false OR $true => true
514 $false OR $sysmis => sysmis
516 $true OR $false => true
518 $true OR $true => true
520 $true OR $sysmis => true
522 $sysmis OR $false => sysmis
524 $sysmis OR $true => true
526 $sysmis OR $sysmis => sysmis
528 $false | $false => false
530 $false | $true => true
532 $false | $sysmis => sysmis
534 $true | $false => true
536 $true | $true => true
538 $true | $sysmis => true
540 $sysmis | $false => sysmis
542 $sysmis | $true => true
544 $sysmis | $sysmis => sysmis
549 AT_SETUP([expressions - NOT truth table])
550 AT_KEYWORDS([expression expressions evaluate])
551 AT_DATA([evaluate-base.sps], [
552 DEBUG EVALUATE SET opt.
553 DEBUG EVALUATE /not $false.
554 DEBUG EVALUATE /not 0.
555 DEBUG EVALUATE /not 2.5.
556 DEBUG EVALUATE /not $true.
557 DEBUG EVALUATE /not 1.
558 DEBUG EVALUATE /not $sysmis.
559 DEBUG EVALUATE /~ $false.
561 DEBUG EVALUATE /~ 2.5.
562 DEBUG EVALUATE /~ $true.
564 DEBUG EVALUATE /~ $sysmis.
567 for opt in OPT NOOPT; do
569 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
570 AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
575 evaluate.sps:5.17-5.23: error: DEBUG EVALUATE: The operand of NOT must have
577 5 | DEBUG EVALUATE /not 2.5.
580 evaluate.sps:5.21-5.23: note: DEBUG EVALUATE: This operand with unexpected
581 value 2.5 will be treated as 0.
582 5 | DEBUG EVALUATE /not 2.5.
591 not $sysmis => sysmis
597 evaluate.sps:11.17-11.21: error: DEBUG EVALUATE: The operand of NOT must have
599 11 | DEBUG EVALUATE /~ 2.5.
602 evaluate.sps:11.19-11.21: note: DEBUG EVALUATE: This operand with unexpected
603 value 2.5 will be treated as 0.
604 11 | DEBUG EVALUATE /~ 2.5.
618 AT_SETUP([expressions - = <= <])
619 AT_KEYWORDS([expression expressions evaluate eq le lt])
620 AT_DATA([evaluate-base.sps], [
621 DEBUG EVALUATE SET opt.
622 DEBUG EVALUATE /1 eq 1.
623 DEBUG EVALUATE /1 = 1.
624 DEBUG EVALUATE /1 eq 2.
625 DEBUG EVALUATE /2 = 3.
626 DEBUG EVALUATE /1 eq 'foobar'.
627 DEBUG EVALUATE /'baz' = 10.
628 DEBUG EVALUATE /'baz' = f8.2.
629 DEBUG EVALUATE /'baz' = 'baz'.
630 DEBUG EVALUATE /'quux' = 'bar'.
631 DEBUG EVALUATE /'bar ' = 'bar'.
632 DEBUG EVALUATE /'asdf ' = 'asdf '.
633 DEBUG EVALUATE /'asdfj ' = 'asdf'.
634 DEBUG EVALUATE /1 + 2 = 3.
635 DEBUG EVALUATE /1 >= 2 = 2 ge 3.
636 DEBUG EVALUATE /3 ne 2 != 1.
637 DEBUG EVALUATE /3 > 2 > 1.
639 DEBUG EVALUATE /1 <= 2.
640 DEBUG EVALUATE /2.5 <= 1.5.
641 DEBUG EVALUATE /1 le 2.
642 DEBUG EVALUATE /2 <= 2.
643 DEBUG EVALUATE /2 le 2.
644 DEBUG EVALUATE /2 < = 2.
645 DEBUG EVALUATE /1 <= 'foobar'.
646 DEBUG EVALUATE /'baz' <= 10.
647 DEBUG EVALUATE /'quux' <= 5.55.
648 DEBUG EVALUATE /'0123' <= '0123'.
649 DEBUG EVALUATE /'0123' <= '0124'.
650 DEBUG EVALUATE /'0124' le '0123'.
651 DEBUG EVALUATE /'0123 ' <= '0123'.
652 DEBUG EVALUATE /'0123' le '0123 '.
654 DEBUG EVALUATE /1 < 2.
655 DEBUG EVALUATE /2.5 < 1.5.
656 DEBUG EVALUATE /3.5 lt 4.
657 DEBUG EVALUATE /4 lt 3.5
658 DEBUG EVALUATE /1 lt 'foobar'.
659 DEBUG EVALUATE /5 lt 'foobar'.
660 DEBUG EVALUATE /'baz' < 10.
661 DEBUG EVALUATE /'quux' < 5.55.
662 DEBUG EVALUATE /'0123' lt '0123'.
663 DEBUG EVALUATE /'0123' < '0124'.
664 DEBUG EVALUATE /'0124' lt '0123'.
665 DEBUG EVALUATE /'0123 ' < '0123'.
666 DEBUG EVALUATE /'0123' lt '0123 '.
669 for opt in OPT NOOPT; do
671 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
672 AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
681 evaluate.sps:7.17-7.29: error: DEBUG EVALUATE: Both operands of EQ must have
683 7 | DEBUG EVALUATE /1 eq 'foobar'.
686 evaluate.sps:7.17: note: DEBUG EVALUATE: This operand has type 'number'.
687 7 | DEBUG EVALUATE /1 eq 'foobar'.
690 evaluate.sps:7.22-7.29: note: DEBUG EVALUATE: This operand has type 'string'.
691 7 | DEBUG EVALUATE /1 eq 'foobar'.
694 1 eq 'foobar' => error
696 evaluate.sps:8.17-8.26: error: DEBUG EVALUATE: Both operands of = must have the
698 8 | DEBUG EVALUATE /'baz' = 10.
701 evaluate.sps:8.17-8.21: note: DEBUG EVALUATE: This operand has type 'string'.
702 8 | DEBUG EVALUATE /'baz' = 10.
705 evaluate.sps:8.25-8.26: note: DEBUG EVALUATE: This operand has type 'number'.
706 8 | DEBUG EVALUATE /'baz' = 10.
711 evaluate.sps:9.17-9.28: error: DEBUG EVALUATE: Both operands of = must have the
713 9 | DEBUG EVALUATE /'baz' = f8.2.
716 evaluate.sps:9.17-9.21: note: DEBUG EVALUATE: This operand has type 'string'.
717 9 | DEBUG EVALUATE /'baz' = f8.2.
720 evaluate.sps:9.25-9.28: note: DEBUG EVALUATE: This operand has type 'format'.
721 9 | DEBUG EVALUATE /'baz' = f8.2.
724 'baz' = f8.2 => error
726 'baz' = 'baz' => true
728 'quux' = 'bar' => false
730 'bar ' = 'bar' => true
732 'asdf ' = 'asdf ' => true
734 'asdfj ' = 'asdf' => false
738 evaluate.sps:16.17-16.31: warning: DEBUG EVALUATE: Chaining relational
739 operators (e.g. `a < b < c') will not produce the mathematically expected
740 result. Use the AND logical operator to fix the problem (e.g. `a < b AND b <
741 c'). To disable this warning, insert parentheses.
742 16 | DEBUG EVALUATE /1 >= 2 = 2 ge 3.
745 1 >= 2 = 2 ge 3 => false
747 evaluate.sps:17.24: error: DEBUG EVALUATE: Syntax error at `!': expecting end
752 evaluate.sps:18.17-18.25: warning: DEBUG EVALUATE: Chaining relational
753 operators (e.g. `a < b < c') will not produce the mathematically expected
754 result. Use the AND logical operator to fix the problem (e.g. `a < b AND b <
755 c'). To disable this warning, insert parentheses.
756 18 | DEBUG EVALUATE /3 > 2 > 1.
771 evaluate.sps:25.21: error: DEBUG EVALUATE: Syntax error at `='.
775 evaluate.sps:26.17-26.29: error: DEBUG EVALUATE: Both operands of <= must have
777 26 | DEBUG EVALUATE /1 <= 'foobar'.
780 evaluate.sps:26.17: note: DEBUG EVALUATE: This operand has type 'number'.
781 26 | DEBUG EVALUATE /1 <= 'foobar'.
784 evaluate.sps:26.22-26.29: note: DEBUG EVALUATE: This operand has type 'string'.
785 26 | DEBUG EVALUATE /1 <= 'foobar'.
788 1 <= 'foobar' => error
790 evaluate.sps:27.17-27.27: error: DEBUG EVALUATE: Both operands of <= must have
792 27 | DEBUG EVALUATE /'baz' <= 10.
795 evaluate.sps:27.17-27.21: note: DEBUG EVALUATE: This operand has type 'string'.
796 27 | DEBUG EVALUATE /'baz' <= 10.
799 evaluate.sps:27.26-27.27: note: DEBUG EVALUATE: This operand has type 'number'.
800 27 | DEBUG EVALUATE /'baz' <= 10.
805 evaluate.sps:28.17-28.30: error: DEBUG EVALUATE: Both operands of <= must have
807 28 | DEBUG EVALUATE /'quux' <= 5.55.
810 evaluate.sps:28.17-28.22: note: DEBUG EVALUATE: This operand has type 'string'.
811 28 | DEBUG EVALUATE /'quux' <= 5.55.
814 evaluate.sps:28.27-28.30: note: DEBUG EVALUATE: This operand has type 'number'.
815 28 | DEBUG EVALUATE /'quux' <= 5.55.
818 'quux' <= 5.55 => error
820 '0123' <= '0123' => true
822 '0123' <= '0124' => true
824 '0124' le '0123' => false
826 '0123 ' <= '0123' => true
828 '0123' le '0123 ' => true
838 evaluate.sps:39.17-39.29: error: DEBUG EVALUATE: Both operands of < must have
840 39 | DEBUG EVALUATE /1 lt 'foobar'.
843 evaluate.sps:39.17: note: DEBUG EVALUATE: This operand has type 'number'.
844 39 | DEBUG EVALUATE /1 lt 'foobar'.
847 evaluate.sps:39.22-39.29: note: DEBUG EVALUATE: This operand has type 'string'.
848 39 | DEBUG EVALUATE /1 lt 'foobar'.
851 1 lt 'foobar' => error
853 evaluate.sps:40.17-40.29: error: DEBUG EVALUATE: Both operands of < must have
855 40 | DEBUG EVALUATE /5 lt 'foobar'.
858 evaluate.sps:40.17: note: DEBUG EVALUATE: This operand has type 'number'.
859 40 | DEBUG EVALUATE /5 lt 'foobar'.
862 evaluate.sps:40.22-40.29: note: DEBUG EVALUATE: This operand has type 'string'.
863 40 | DEBUG EVALUATE /5 lt 'foobar'.
866 5 lt 'foobar' => error
868 evaluate.sps:41.17-41.26: error: DEBUG EVALUATE: Both operands of < must have
870 41 | DEBUG EVALUATE /'baz' < 10.
873 evaluate.sps:41.17-41.21: note: DEBUG EVALUATE: This operand has type 'string'.
874 41 | DEBUG EVALUATE /'baz' < 10.
877 evaluate.sps:41.25-41.26: note: DEBUG EVALUATE: This operand has type 'number'.
878 41 | DEBUG EVALUATE /'baz' < 10.
883 evaluate.sps:42.17-42.29: error: DEBUG EVALUATE: Both operands of < must have
885 42 | DEBUG EVALUATE /'quux' < 5.55.
888 evaluate.sps:42.17-42.22: note: DEBUG EVALUATE: This operand has type 'string'.
889 42 | DEBUG EVALUATE /'quux' < 5.55.
892 evaluate.sps:42.26-42.29: note: DEBUG EVALUATE: This operand has type 'number'.
893 42 | DEBUG EVALUATE /'quux' < 5.55.
896 'quux' < 5.55 => error
898 '0123' lt '0123' => false
900 '0123' < '0124' => true
902 '0124' lt '0123' => false
904 '0123 ' < '0123' => false
906 '0123' lt '0123 ' => false
911 AT_SETUP([expressions - >= > <>])
912 AT_KEYWORDS([expression expressions evaluate ge gt ne])
913 AT_DATA([evaluate-base.sps], [
914 DEBUG EVALUATE SET opt.
915 DEBUG EVALUATE /1 >= 2.
916 DEBUG EVALUATE /2.5 >= 1.5
917 DEBUG EVALUATE /1 ge 2.
918 DEBUG EVALUATE /2 >= 2.
919 DEBUG EVALUATE /2 ge 2.
920 DEBUG EVALUATE /2 > = 2.
921 DEBUG EVALUATE /1 >= 'foobar'.
922 DEBUG EVALUATE /5 ge 'foobar'.
923 DEBUG EVALUATE /'baz' ge 10.
924 DEBUG EVALUATE /'0123' ge '0123'.
925 DEBUG EVALUATE /'0123' >= '0124'.
926 DEBUG EVALUATE /'0124' >= '0123'.
927 DEBUG EVALUATE /'0123 ' ge '0123'.
928 DEBUG EVALUATE /'0123' >= '0123 '.
930 DEBUG EVALUATE /1 > 2.
931 DEBUG EVALUATE /2.5 > 1.5
932 DEBUG EVALUATE /3.5 gt 4.
933 DEBUG EVALUATE /4 gt 3.5
934 DEBUG EVALUATE /1 gt 'foobar'.
935 DEBUG EVALUATE /'baz' > 10.
936 DEBUG EVALUATE /'0123' > '0123'.
937 DEBUG EVALUATE /'0123' > '0124'.
938 DEBUG EVALUATE /'0124' > '0123'.
939 DEBUG EVALUATE /'0123 ' > '0123'.
940 DEBUG EVALUATE /'0123 ' > '0123 '.
942 DEBUG EVALUATE /1 ne 1.
943 DEBUG EVALUATE /1 ~= 1.
944 DEBUG EVALUATE /1 <> 2.
945 DEBUG EVALUATE /2 ne 3.
946 DEBUG EVALUATE /1 ~= 'foobar'.
947 DEBUG EVALUATE /'baz' ne 10.
948 DEBUG EVALUATE /'quux' ~= 5.55.
949 DEBUG EVALUATE /'foobar' <> 'foobar'.
950 DEBUG EVALUATE /'quux' ne 'bar'.
951 DEBUG EVALUATE /'bar ' <> 'bar'.
952 DEBUG EVALUATE /'asdf ' ~= "asdf ".
953 DEBUG EVALUATE /1 < > 1.
954 DEBUG EVALUATE /1 ~ = 1.
957 for opt in OPT NOOPT; do
959 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
960 AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
971 evaluate.sps:8.21: error: DEBUG EVALUATE: Syntax error at `='.
975 evaluate.sps:9.17-9.29: error: DEBUG EVALUATE: Both operands of >= must have
977 9 | DEBUG EVALUATE /1 >= 'foobar'.
980 evaluate.sps:9.17: note: DEBUG EVALUATE: This operand has type 'number'.
981 9 | DEBUG EVALUATE /1 >= 'foobar'.
984 evaluate.sps:9.22-9.29: note: DEBUG EVALUATE: This operand has type 'string'.
985 9 | DEBUG EVALUATE /1 >= 'foobar'.
988 1 >= 'foobar' => error
990 evaluate.sps:10.17-10.29: error: DEBUG EVALUATE: Both operands of >= must have
992 10 | DEBUG EVALUATE /5 ge 'foobar'.
995 evaluate.sps:10.17: note: DEBUG EVALUATE: This operand has type 'number'.
996 10 | DEBUG EVALUATE /5 ge 'foobar'.
999 evaluate.sps:10.22-10.29: note: DEBUG EVALUATE: This operand has type 'string'.
1000 10 | DEBUG EVALUATE /5 ge 'foobar'.
1003 5 ge 'foobar' => error
1005 evaluate.sps:11.17-11.27: error: DEBUG EVALUATE: Both operands of >= must have
1007 11 | DEBUG EVALUATE /'baz' ge 10.
1010 evaluate.sps:11.17-11.21: note: DEBUG EVALUATE: This operand has type 'string'.
1011 11 | DEBUG EVALUATE /'baz' ge 10.
1014 evaluate.sps:11.26-11.27: note: DEBUG EVALUATE: This operand has type 'number'.
1015 11 | DEBUG EVALUATE /'baz' ge 10.
1018 'baz' ge 10 => error
1020 '0123' ge '0123' => true
1022 '0123' >= '0124' => false
1024 '0124' >= '0123' => true
1026 '0123 ' ge '0123' => true
1028 '0123' >= '0123 ' => true
1038 evaluate.sps:22.17-22.29: error: DEBUG EVALUATE: Both operands of > must have
1040 22 | DEBUG EVALUATE /1 gt 'foobar'.
1043 evaluate.sps:22.17: note: DEBUG EVALUATE: This operand has type 'number'.
1044 22 | DEBUG EVALUATE /1 gt 'foobar'.
1047 evaluate.sps:22.22-22.29: note: DEBUG EVALUATE: This operand has type 'string'.
1048 22 | DEBUG EVALUATE /1 gt 'foobar'.
1051 1 gt 'foobar' => error
1053 evaluate.sps:23.17-23.26: error: DEBUG EVALUATE: Both operands of > must have
1055 23 | DEBUG EVALUATE /'baz' > 10.
1058 evaluate.sps:23.17-23.21: note: DEBUG EVALUATE: This operand has type 'string'.
1059 23 | DEBUG EVALUATE /'baz' > 10.
1062 evaluate.sps:23.25-23.26: note: DEBUG EVALUATE: This operand has type 'number'.
1063 23 | DEBUG EVALUATE /'baz' > 10.
1068 '0123' > '0123' => false
1070 '0123' > '0124' => false
1072 '0124' > '0123' => true
1074 '0123 ' > '0123' => false
1076 '0123 ' > '0123 ' => false
1086 evaluate.sps:34.17-34.29: error: DEBUG EVALUATE: Both operands of ~= must have
1088 34 | DEBUG EVALUATE /1 ~= 'foobar'.
1091 evaluate.sps:34.17: note: DEBUG EVALUATE: This operand has type 'number'.
1092 34 | DEBUG EVALUATE /1 ~= 'foobar'.
1095 evaluate.sps:34.22-34.29: note: DEBUG EVALUATE: This operand has type 'string'.
1096 34 | DEBUG EVALUATE /1 ~= 'foobar'.
1099 1 ~= 'foobar' => error
1101 evaluate.sps:35.17-35.27: error: DEBUG EVALUATE: Both operands of ~= must have
1103 35 | DEBUG EVALUATE /'baz' ne 10.
1106 evaluate.sps:35.17-35.21: note: DEBUG EVALUATE: This operand has type 'string'.
1107 35 | DEBUG EVALUATE /'baz' ne 10.
1110 evaluate.sps:35.26-35.27: note: DEBUG EVALUATE: This operand has type 'number'.
1111 35 | DEBUG EVALUATE /'baz' ne 10.
1114 'baz' ne 10 => error
1116 evaluate.sps:36.17-36.30: error: DEBUG EVALUATE: Both operands of ~= must have
1118 36 | DEBUG EVALUATE /'quux' ~= 5.55.
1121 evaluate.sps:36.17-36.22: note: DEBUG EVALUATE: This operand has type 'string'.
1122 36 | DEBUG EVALUATE /'quux' ~= 5.55.
1125 evaluate.sps:36.27-36.30: note: DEBUG EVALUATE: This operand has type 'number'.
1126 36 | DEBUG EVALUATE /'quux' ~= 5.55.
1129 'quux' ~= 5.55 => error
1131 'foobar' <> 'foobar' => false
1133 'quux' ne 'bar' => true
1135 'bar ' <> 'bar' => false
1137 'asdf ' ~= "asdf " => false
1139 evaluate.sps:41.21: error: DEBUG EVALUATE: Syntax error at `>'.
1143 evaluate.sps:42.19: error: DEBUG EVALUATE: Syntax error at `~': expecting end
1151 AT_SETUP([expressions - EXP LG10 LN SQRT ABS MOD MOD10 RND TRUNC])
1152 AT_KEYWORDS([expression expressions evaluate])
1153 AT_DATA([evaluate-base.sps], [
1154 DEBUG EVALUATE SET opt.
1155 DEBUG EVALUATE /EXP(10).
1156 DEBUG EVALUATE /EXP('x').
1158 DEBUG EVALUATE /LG10(500).
1159 DEBUG EVALUATE /LG10('x').
1161 DEBUG EVALUATE /SQRT(500).
1162 DEBUG EVALUATE /SQRT(-1).
1164 DEBUG EVALUATE /ABS(-10.5).
1165 DEBUG EVALUATE /ABS(55.79).
1166 DEBUG EVALUATE /ABS(0).
1167 DEBUG EVALUATE /ABS(-0).
1169 DEBUG EVALUATE /MOD(55.5, 2).
1170 DEBUG EVALUATE /MOD(-55.5, 2).
1171 DEBUG EVALUATE /MOD(55.5, -2).
1172 DEBUG EVALUATE /MOD(-55.5, -2).
1173 DEBUG EVALUATE /MOD('a', 2).
1174 DEBUG EVALUATE /MOD(2, 'a').
1175 DEBUG EVALUATE /MOD('a', 'b').
1177 DEBUG EVALUATE /MOD10(55.5).
1178 DEBUG EVALUATE /MOD10(-55.5).
1180 DEBUG EVALUATE /RND(5.4).
1181 DEBUG EVALUATE /RND(5.6).
1182 DEBUG EVALUATE /RND(-5.4).
1183 DEBUG EVALUATE /RND(-5.6).
1184 DEBUG EVALUATE /RND(5.56, .1).
1185 DEBUG EVALUATE /RND(-5.56, .1)
1186 DEBUG EVALUATE /RND(.5).
1187 DEBUG EVALUATE /RND(.5 - 2**-53).
1188 DEBUG EVALUATE /RND(.5 - 2**-52).
1189 DEBUG EVALUATE /RND(.5 - 2**-51).
1190 DEBUG EVALUATE /RND(.5 - 2**-45).
1191 DEBUG EVALUATE /RND(.5 - 2**-45, 1, 10).
1192 DEBUG EVALUATE /RND('x').
1194 DEBUG EVALUATE /TRUNC(1.2).
1195 DEBUG EVALUATE /TRUNC(1.9).
1196 DEBUG EVALUATE /TRUNC(-1.2).
1197 DEBUG EVALUATE /TRUNC(-1.9).
1198 DEBUG EVALUATE /TRUNC(5.06, .1).
1199 DEBUG EVALUATE /TRUNC(-5.06, .1).
1200 DEBUG EVALUATE /TRUNC(1).
1201 DEBUG EVALUATE /TRUNC(1 - 2**-53).
1202 DEBUG EVALUATE /TRUNC(1 - 2**-52).
1203 DEBUG EVALUATE /TRUNC(1 - 2**-51).
1204 DEBUG EVALUATE /TRUNC(1 - 2**-45).
1205 DEBUG EVALUATE /TRUNC(1 - 2**-45, 1, 10).
1206 DEBUG EVALUATE /TRUNC('x').
1209 for opt in OPT NOOPT; do
1211 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1212 AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1215 evaluate.sps:4.17-4.24: error: DEBUG EVALUATE: Type mismatch invoking
1216 EXP(number) as EXP(string).
1217 4 | DEBUG EVALUATE /EXP('x').
1224 evaluate.sps:7.17-7.25: error: DEBUG EVALUATE: Type mismatch invoking
1225 LG10(number) as LG10(string).
1226 7 | DEBUG EVALUATE /LG10('x').
1243 MOD(55.5, 2) => 1.50
1245 MOD(-55.5, 2) => -1.50
1247 MOD(55.5, -2) => 1.50
1249 MOD(-55.5, -2) => -1.50
1251 evaluate.sps:21.17-21.27: error: DEBUG EVALUATE: Type mismatch invoking
1252 MOD(number, number) as MOD(string, number).
1253 21 | DEBUG EVALUATE /MOD('a', 2).
1256 MOD('a', 2) => error
1258 evaluate.sps:22.17-22.27: error: DEBUG EVALUATE: Type mismatch invoking
1259 MOD(number, number) as MOD(number, string).
1260 22 | DEBUG EVALUATE /MOD(2, 'a').
1263 MOD(2, 'a') => error
1265 evaluate.sps:23.17-23.29: error: DEBUG EVALUATE: Type mismatch invoking
1266 MOD(number, number) as MOD(string, string).
1267 23 | DEBUG EVALUATE /MOD('a', 'b').
1270 MOD('a', 'b') => error
1274 MOD10(-55.5) => -5.50
1284 RND(5.56, .1) => 5.60
1286 RND(-5.56, .1) => -5.60
1290 RND(.5 - 2**-53) => 1.00
1292 RND(.5 - 2**-52) => 1.00
1294 RND(.5 - 2**-51) => 1.00
1296 RND(.5 - 2**-45) => 0.00
1298 RND(.5 - 2**-45, 1, 10) => 1.00
1300 evaluate.sps:40.17-40.24: error: DEBUG EVALUATE: Function invocation
1301 RND(string) does not match any known function. Candidates are:
1304 RND(number, number, number).
1305 40 | DEBUG EVALUATE /RND('x').
1314 TRUNC(-1.2) => -1.00
1316 TRUNC(-1.9) => -1.00
1318 TRUNC(5.06, .1) => 5.00
1320 TRUNC(-5.06, .1) => -5.00
1324 TRUNC(1 - 2**-53) => 1.00
1326 TRUNC(1 - 2**-52) => 1.00
1328 TRUNC(1 - 2**-51) => 1.00
1330 TRUNC(1 - 2**-45) => 0.00
1332 TRUNC(1 - 2**-45, 1, 10) => 1.00
1334 evaluate.sps:54.17-54.26: error: DEBUG EVALUATE: Function invocation
1335 TRUNC(string) does not match any known function. Candidates are:
1337 TRUNC(number, number)
1338 TRUNC(number, number, number).
1339 54 | DEBUG EVALUATE /TRUNC('x').
1347 AT_SETUP([expressions - ACOS ARSIN ARTAN COS SIN TAN])
1348 AT_KEYWORDS([expression expressions evaluate])
1349 AT_DATA([evaluate-base.sps], [
1350 DEBUG EVALUATE SET opt.
1351 DEBUG EVALUATE /ACOS(.5) / 3.14159 * 180.
1352 DEBUG EVALUATE /ARCOS(.75) / 3.14159 * 180.
1353 DEBUG EVALUATE /ARCOS(-.5) / 3.14159 * 180.
1354 DEBUG EVALUATE /ACOS(-.75) / 3.14159 * 180.
1355 DEBUG EVALUATE /ACOS(-1) / 3.14159 * 180.
1356 DEBUG EVALUATE /ARCOS(1) / 3.14159 * 180.
1357 DEBUG EVALUATE /ACOS(-1.01) / 3.14159 * 180.
1358 DEBUG EVALUATE /ARCOS(1.01) / 3.14159 * 180.
1359 DEBUG EVALUATE /ACOS('x') / 3.14159 * 180.
1361 DEBUG EVALUATE /ASIN(.5) / 3.14159 * 180.
1362 DEBUG EVALUATE /ARSIN(.25) / 3.14159 * 180.
1363 DEBUG EVALUATE /ARSIN(-.5) / 3.14159 * 180.
1364 DEBUG EVALUATE /ASIN(-.25) / 3.14159 * 180.
1365 DEBUG EVALUATE /ASIN(-1.01) / 3.14159 * 180.
1366 DEBUG EVALUATE /ARSIN(1.01) / 3.14159 * 180.
1367 DEBUG EVALUATE /ASIN('x') / 3.14159 * 180.
1369 DEBUG EVALUATE /ATAN(1) / 3.14159 * 180.
1370 DEBUG EVALUATE /ARTAN(10) / 3.14159 * 180.
1371 DEBUG EVALUATE /ARTAN(-1) / 3.14159 * 180.
1372 DEBUG EVALUATE /ATAN(-10) / 3.14159 * 180.
1373 DEBUG EVALUATE /ATAN('x') / 3.14159 * 180.
1375 DEBUG EVALUATE /COS(60 / 180 * 3.14159).
1376 DEBUG EVALUATE /COS(45 / 180 * 3.14159).
1377 DEBUG EVALUATE /COS(30 / 180 * 3.14159).
1378 DEBUG EVALUATE /COS(15 / 180 * 3.14159).
1379 DEBUG EVALUATE /COS(-60 / 180 * 3.14159).
1380 DEBUG EVALUATE /COS(-45 / 180 * 3.14159).
1381 DEBUG EVALUATE /COS(-30 / 180 * 3.14159).
1382 DEBUG EVALUATE /COS(-15 / 180 * 3.14159).
1383 DEBUG EVALUATE /COS(123 / 180 * 3.14159).
1384 DEBUG EVALUATE /COS(321 / 180 * 3.14159).
1385 DEBUG EVALUATE /COS('x').
1387 DEBUG EVALUATE /SIN(60 / 180 * 3.14159).
1388 DEBUG EVALUATE /SIN(45 / 180 * 3.14159).
1389 DEBUG EVALUATE /SIN(30 / 180 * 3.14159).
1390 DEBUG EVALUATE /SIN(15 / 180 * 3.14159).
1391 DEBUG EVALUATE /SIN(-60 / 180 * 3.14159).
1392 DEBUG EVALUATE /SIN(-45 / 180 * 3.14159).
1393 DEBUG EVALUATE /SIN(-30 / 180 * 3.14159).
1394 DEBUG EVALUATE /SIN(-15 / 180 * 3.14159).
1395 DEBUG EVALUATE /SIN(123 / 180 * 3.14159).
1396 DEBUG EVALUATE /SIN(321 / 180 * 3.14159).
1397 DEBUG EVALUATE /SIN('x').
1399 DEBUG EVALUATE /TAN(60 / 180 * 3.14159).
1400 DEBUG EVALUATE /TAN(45 / 180 * 3.14159).
1401 DEBUG EVALUATE /TAN(30 / 180 * 3.14159).
1402 DEBUG EVALUATE /TAN(15 / 180 * 3.14159).
1403 DEBUG EVALUATE /TAN(-60 / 180 * 3.14159).
1404 DEBUG EVALUATE /TAN(-45 / 180 * 3.14159).
1405 DEBUG EVALUATE /TAN(-30 / 180 * 3.14159).
1406 DEBUG EVALUATE /TAN(-15 / 180 * 3.14159).
1407 DEBUG EVALUATE /TAN(123 / 180 * 3.14159).
1408 DEBUG EVALUATE /TAN(321 / 180 * 3.14159).
1409 DEBUG EVALUATE /TAN('x').
1412 for opt in OPT NOOPT; do
1414 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1415 AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1416 ACOS(.5) / 3.14159 * 180 => 60.00
1418 ARCOS(.75) / 3.14159 * 180 => 41.41
1420 ARCOS(-.5) / 3.14159 * 180 => 120.00
1422 ACOS(-.75) / 3.14159 * 180 => 138.59
1424 ACOS(-1) / 3.14159 * 180 => 180.00
1426 ARCOS(1) / 3.14159 * 180 => 0.00
1428 ACOS(-1.01) / 3.14159 * 180 => sysmis
1430 ARCOS(1.01) / 3.14159 * 180 => sysmis
1432 evaluate.sps:11.17-11.25: error: DEBUG EVALUATE: Type mismatch invoking
1433 ACOS(number) as ACOS(string).
1434 11 | DEBUG EVALUATE /ACOS('x') / 3.14159 * 180.
1437 ACOS('x') / 3.14159 * 180 => error
1439 ASIN(.5) / 3.14159 * 180 => 30.00
1441 ARSIN(.25) / 3.14159 * 180 => 14.48
1443 ARSIN(-.5) / 3.14159 * 180 => -30.00
1445 ASIN(-.25) / 3.14159 * 180 => -14.48
1447 ASIN(-1.01) / 3.14159 * 180 => sysmis
1449 ARSIN(1.01) / 3.14159 * 180 => sysmis
1451 evaluate.sps:19.17-19.25: error: DEBUG EVALUATE: Type mismatch invoking
1452 ASIN(number) as ASIN(string).
1453 19 | DEBUG EVALUATE /ASIN('x') / 3.14159 * 180.
1456 ASIN('x') / 3.14159 * 180 => error
1458 ATAN(1) / 3.14159 * 180 => 45.00
1460 ARTAN(10) / 3.14159 * 180 => 84.29
1462 ARTAN(-1) / 3.14159 * 180 => -45.00
1464 ATAN(-10) / 3.14159 * 180 => -84.29
1466 evaluate.sps:25.17-25.25: error: DEBUG EVALUATE: Type mismatch invoking
1467 ATAN(number) as ATAN(string).
1468 25 | DEBUG EVALUATE /ATAN('x') / 3.14159 * 180.
1471 ATAN('x') / 3.14159 * 180 => error
1473 COS(60 / 180 * 3.14159) => 0.50
1475 COS(45 / 180 * 3.14159) => 0.71
1477 COS(30 / 180 * 3.14159) => 0.87
1479 COS(15 / 180 * 3.14159) => 0.97
1481 COS(-60 / 180 * 3.14159) => 0.50
1483 COS(-45 / 180 * 3.14159) => 0.71
1485 COS(-30 / 180 * 3.14159) => 0.87
1487 COS(-15 / 180 * 3.14159) => 0.97
1489 COS(123 / 180 * 3.14159) => -0.54
1491 COS(321 / 180 * 3.14159) => 0.78
1493 evaluate.sps:37.17-37.24: error: DEBUG EVALUATE: Type mismatch invoking
1494 COS(number) as COS(string).
1495 37 | DEBUG EVALUATE /COS('x').
1500 SIN(60 / 180 * 3.14159) => 0.87
1502 SIN(45 / 180 * 3.14159) => 0.71
1504 SIN(30 / 180 * 3.14159) => 0.50
1506 SIN(15 / 180 * 3.14159) => 0.26
1508 SIN(-60 / 180 * 3.14159) => -0.87
1510 SIN(-45 / 180 * 3.14159) => -0.71
1512 SIN(-30 / 180 * 3.14159) => -0.50
1514 SIN(-15 / 180 * 3.14159) => -0.26
1516 SIN(123 / 180 * 3.14159) => 0.84
1518 SIN(321 / 180 * 3.14159) => -0.63
1520 evaluate.sps:49.17-49.24: error: DEBUG EVALUATE: Type mismatch invoking
1521 SIN(number) as SIN(string).
1522 49 | DEBUG EVALUATE /SIN('x').
1527 TAN(60 / 180 * 3.14159) => 1.73
1529 TAN(45 / 180 * 3.14159) => 1.00
1531 TAN(30 / 180 * 3.14159) => 0.58
1533 TAN(15 / 180 * 3.14159) => 0.27
1535 TAN(-60 / 180 * 3.14159) => -1.73
1537 TAN(-45 / 180 * 3.14159) => -1.00
1539 TAN(-30 / 180 * 3.14159) => -0.58
1541 TAN(-15 / 180 * 3.14159) => -0.27
1543 TAN(123 / 180 * 3.14159) => -1.54
1545 TAN(321 / 180 * 3.14159) => -0.81
1547 evaluate.sps:61.17-61.24: error: DEBUG EVALUATE: Type mismatch invoking
1548 TAN(number) as TAN(string).
1549 61 | DEBUG EVALUATE /TAN('x').
1557 AT_SETUP([expressions - MISSING NMISS NVALID SYSMIS ANY RANGE MAX MIN])
1558 AT_KEYWORDS([expression expressions evaluate])
1559 AT_DATA([evaluate-base.sps], [
1560 DEBUG EVALUATE SET opt.
1561 DEBUG EVALUATE /MISSING(10).
1562 DEBUG EVALUATE /MISSING($SYSMIS).
1563 DEBUG EVALUATE /MISSING(ASIN(1.01)).
1564 DEBUG EVALUATE /MISSING(ASIN(.5)).
1565 DEBUG EVALUATE /MISSING(' ').
1567 DEBUG EVALUATE (x=5)/x.
1568 DEBUG EVALUATE (x=5 MISSING)/x.
1569 DEBUG EVALUATE (x=SYSMIS)/x.
1571 DEBUG EVALUATE (x=5) VECTOR/v(1).
1572 DEBUG EVALUATE (x=5 MISSING) VECTOR/v(1).
1573 DEBUG EVALUATE (x=SYSMIS) VECTOR/v(1).
1575 DEBUG EVALUATE (x=5)/VALUE(x).
1576 DEBUG EVALUATE (x=5 MISSING)/VALUE(x).
1577 DEBUG EVALUATE (x=SYSMIS)/VALUE(x).
1579 DEBUG EVALUATE (x=5) VECTOR/VALUE(v(1)).
1580 DEBUG EVALUATE (x=5 MISSING) VECTOR/VALUE(v(1)).
1581 DEBUG EVALUATE (x=SYSMIS) VECTOR/VALUE(v(1)).
1583 DEBUG EVALUATE (x=5)/MISSING(x).
1584 DEBUG EVALUATE (x=5 MISSING)/MISSING(x).
1585 DEBUG EVALUATE (x=SYSMIS)/MISSING(x).
1587 DEBUG EVALUATE (x=5)/SYSMIS(x).
1588 DEBUG EVALUATE (x=5 MISSING)/SYSMIS(x).
1589 DEBUG EVALUATE (x=SYSMIS)/SYSMIS(x).
1592 for opt in OPT NOOPT; do
1594 sed "s/opt/$opt/" < evaluate-base.sps > evaluate.sps
1595 AT_CHECK([pspp --testing-mode evaluate.sps], [1], [dnl
1600 # FIXME: a variable name as the argument to SYSMIS is a special case
1601 # that we don't yet test. We also can't test VALUE this way.
1602 CHECK_EXPR_EVAL([missing nmiss nvalid sysmis any range max min],
1603 [[missing(10)], [false]],
1604 [[missing($sysmis)], [true]],
1605 [[missing(asin(1.01))], [true]],
1606 [[missing(asin(.5))], [false]],
1607 [[missing(' ')], [error],
1608 [error: DEBUG EVALUATE: Type mismatch invoking MISSING(number) as missing(string).]],
1610 [[nmiss($sysmis)], [1.00]],
1611 [[nmiss(0)], [0.00]],
1612 [[nmiss($sysmis, $sysmis, $sysmis)], [3.00]],
1613 [[nmiss(1, 2, 3, 4)], [0.00]],
1614 [[nmiss(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4)], [4.00]],
1616 [[nvalid($sysmis)], [0.00]],
1617 [[nvalid(0)], [1.00]],
1618 [[nvalid($sysmis, $sysmis, $sysmis)], [0.00]],
1619 [[nvalid(1, 2, 3, 4)], [4.00]],
1620 [[nvalid(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4)], [5.00]],
1622 [[sysmis(10)], [false]],
1623 [[sysmis($sysmis)], [true]],
1624 [[sysmis(asin(1.01))], [true]],
1625 [[sysmis(asin(.5))], [false]],
1626 [[sysmis(' ')], [error],
1627 [error: DEBUG EVALUATE: Function invocation sysmis(string) does not match any known function. Candidates are:
1628 SYSMIS(num_variable)
1631 [[any($sysmis, 1, $sysmis, 3)], [sysmis]],
1632 [[any(1, 1, 2, 3)], [true]],
1633 [[any(1, $true, 2, 3)], [true]],
1634 [[any(1, $false, 2, 3)], [false]],
1635 [[any(2, 1, 2, 3)], [true]],
1636 [[any(3, 1, 2, 3)], [true]],
1637 [[any(5, 1, 2, 3)], [false]],
1638 [[any(1, 1, 1, 1)], [true]],
1639 [[any($sysmis, 1, 1, 1)], [sysmis]],
1640 [[any(1, $sysmis, $sysmis, $sysmis)], [sysmis]],
1641 [[any($sysmis, $sysmis, $sysmis, $sysmis)], [sysmis]],
1643 [error: DEBUG EVALUATE: Function invocation any(number) does not match any known function. Candidates are:
1644 ANY(number, number[, number]...)
1645 ANY(string, string[, string]...).]],
1646 [[any('1', 2, 3, 4)], [error],
1647 [error: DEBUG EVALUATE: Function invocation any(string, number, number, number) does not match any known function. Candidates are:
1648 ANY(number, number[, number]...)
1649 ANY(string, string[, string]...).]],
1650 [[any(1, '2', 3, 4)], [error],
1651 [error: DEBUG EVALUATE: Function invocation any(number, string, number, number) does not match any known function. Candidates are:
1652 ANY(number, number[, number]...)
1653 ANY(string, string[, string]...).]],
1654 [[any(1, 2, '3', 4)], [error],
1655 [error: DEBUG EVALUATE: Function invocation any(number, number, string, number) does not match any known function. Candidates are:
1656 ANY(number, number[, number]...)
1657 ANY(string, string[, string]...).]],
1658 [[any(1, 2, 3, '4')], [error],
1659 [error: DEBUG EVALUATE: Function invocation any(number, number, number, string) does not match any known function. Candidates are:
1660 ANY(number, number[, number]...)
1661 ANY(string, string[, string]...).]],
1663 [[any('', 'a', '', 'c')], [true]],
1664 [[any('a', 'a', 'b', 'c')], [true]],
1665 [[any('b', 'a', 'b', 'c')], [true]],
1666 [[any('c', 'a', 'b', 'c')], [true]],
1667 [[any('e', 'a', 'b', 'c')], [false]],
1668 [[any('a', 'a', 'a', 'a')], [true]],
1669 [[any('', 'a', 'a', 'a')], [false]],
1670 [[any('a', '', '', '')], [false]],
1671 [[any('a')], [error],
1672 [error: DEBUG EVALUATE: Function invocation any(string) does not match any known function. Candidates are:
1673 ANY(number, number[, number]...)
1674 ANY(string, string[, string]...).]],
1675 [[any('a', 'a ', 'b', 'c')], [true]],
1676 [[any('b ', 'a', 'b', 'c')], [true]],
1677 [[any('c ', 'a', 'b', 'c ')], [true]],
1678 [[any(a10, 'b', 'c', 'd')], [error],
1679 [error: DEBUG EVALUATE: Function invocation any(format, string, string, string) does not match any known function. Candidates are:
1680 ANY(number, number[, number]...)
1681 ANY(string, string[, string]...).]],
1682 [[any('a', b, 'c', 'd')], [error],
1683 [error: DEBUG EVALUATE: Unknown identifier b.]],
1684 [[any('a', 'b', c, 'd')], [error],
1685 [error: DEBUG EVALUATE: Unknown identifier c.]],
1686 [[any('a', 'b', 'c', d)], [error],
1687 [error: DEBUG EVALUATE: Unknown identifier d.]],
1689 [[range(5, 1, 10)], [true]],
1690 [[range(1, 1, 10)], [true]],
1691 [[range(10, 1, 10)], [true]],
1692 [[range(-1, 1, 10)], [false]],
1693 [[range(12, 1, 10)], [false]],
1694 [[range($sysmis, 1, 10)], [sysmis]],
1695 [[range(5, 1, $sysmis)], [sysmis]],
1696 [[range(5, $sysmis, 10)], [sysmis]],
1697 [[range($sysmis, $sysmis, 10)], [sysmis ]],
1698 [[range($sysmis, 1, $sysmis)], [sysmis]],
1699 [[range($sysmis, $sysmis, $sysmis)], [sysmis]],
1700 [[range(0, 1, 8, 10, 18)], [false]],
1701 [[range(1, 1, 8, 10, 18)], [true]],
1702 [[range(6, 1, 8, 10, 18)], [true]],
1703 [[range(8, 1, 8, 10, 18)], [true]],
1704 [[range(9, 1, 8, 10, 18)], [false]],
1705 [[range(10, 1, 8, 10, 18)], [true]],
1706 [[range(13, 1, 8, 10, 18)], [true]],
1707 [[range(16, 1, 8, 10, 18)], [true]],
1708 [[range(18, 1, 8, 10, 18)], [true]],
1709 [[range(20, 1, 8, 10, 18)], [false]],
1710 [[range(1)], [error],
1711 [error: DEBUG EVALUATE: Function invocation range(number) does not match any known function. Candidates are:
1712 RANGE(number, number, number[, number, number]...)
1713 RANGE(string, string, string[, string, string]...).]],
1714 [[range(1, 2)], [error],
1715 [error: DEBUG EVALUATE: RANGE(number, number, number[, number, number]...) must have an odd number of arguments.]],
1716 [[range(1, 2, 3, 4)], [error],
1717 [error: DEBUG EVALUATE: RANGE(number, number, number[, number, number]...) must have an odd number of arguments.]],
1718 [[range(1, 2, 3, 4, 5, 6)], [error],
1719 [error: DEBUG EVALUATE: RANGE(number, number, number[, number, number]...) must have an odd number of arguments.]],
1720 [[range('1', 2, 3)], [error],
1721 [error: DEBUG EVALUATE: Function invocation range(string, number, number) does not match any known function. Candidates are:
1722 RANGE(number, number, number[, number, number]...)
1723 RANGE(string, string, string[, string, string]...).]],
1724 [[range(1, '2', 3)], [error],
1725 [error: DEBUG EVALUATE: Function invocation range(number, string, number) does not match any known function. Candidates are:
1726 RANGE(number, number, number[, number, number]...)
1727 RANGE(string, string, string[, string, string]...).]],
1728 [[range(1, 2, '3')], [error],
1729 [error: DEBUG EVALUATE: Function invocation range(number, number, string) does not match any known function. Candidates are:
1730 RANGE(number, number, number[, number, number]...)
1731 RANGE(string, string, string[, string, string]...).]],
1733 [[range('123', '111', '888')], [true]],
1734 [[range('111', '111', '888')], [true]],
1735 [[range('888', '111', '888')], [true]],
1736 [[range('110', '111', '888')], [false]],
1737 [[range('889', '111', '888')], [false]],
1738 [[range('000', '111', '888')], [false]],
1739 [[range('999', '111', '888')], [false]],
1740 [[range('123 ', '111', '888')], [true]],
1741 [[range('123', '111 ', '888')], [true]],
1742 [[range('123', '111', '888 ')], [true]],
1743 [[range('123', '111 ', '888 ')], [true]],
1744 [[range('00', '01', '08', '10', '18')], [false]],
1745 [[range('01', '01', '08', '10', '18')], [true]],
1746 [[range('06', '01', '08', '10', '18')], [true]],
1747 [[range('08', '01', '08', '10', '18')], [true]],
1748 [[range('09', '01', '08', '10', '18')], [false]],
1749 [[range('10', '01', '08', '10', '18')], [true]],
1750 [[range('15', '01', '08', '10', '18')], [true]],
1751 [[range('18', '01', '08', '10', '18')], [true]],
1752 [[range('19', '01', '08', '10', '18')], [false]],
1753 [[range('1')], [error],
1754 [error: DEBUG EVALUATE: Function invocation range(string) does not match any known function. Candidates are:
1755 RANGE(number, number, number[, number, number]...)
1756 RANGE(string, string, string[, string, string]...).]],
1757 [[range('1', '2')], [error],
1758 [error: DEBUG EVALUATE: RANGE(string, string, string[, string, string]...) must have an odd number of arguments.]],
1759 [[range('1', '2', '3', '4')], [error],
1760 [error: DEBUG EVALUATE: RANGE(string, string, string[, string, string]...) must have an odd number of arguments.]],
1761 [[range('1', '2', '3', '4', '5', '6')], [error],
1762 [error: DEBUG EVALUATE: RANGE(string, string, string[, string, string]...) must have an odd number of arguments.]],
1763 [[range(1, '2', '3')], [error],
1764 [error: DEBUG EVALUATE: Function invocation range(number, string, string) does not match any known function. Candidates are:
1765 RANGE(number, number, number[, number, number]...)
1766 RANGE(string, string, string[, string, string]...).]],
1767 [[range('1', 2, '3')], [error],
1768 [error: DEBUG EVALUATE: Function invocation range(string, number, string) does not match any known function. Candidates are:
1769 RANGE(number, number, number[, number, number]...)
1770 RANGE(string, string, string[, string, string]...).]],
1771 [[range('1', '2', 3)], [error],
1772 [error: DEBUG EVALUATE: Function invocation range(string, string, number) does not match any known function. Candidates are:
1773 RANGE(number, number, number[, number, number]...)
1774 RANGE(string, string, string[, string, string]...).]],
1776 [[max(1, 2, 3, 4, 5)], [5.00]],
1777 [[max(1, $sysmis, 2, 3, $sysmis, 4, 5)], [5.00]],
1778 [[max(1, 2)], [2.00]],
1780 [error: DEBUG EVALUATE: Function invocation max() does not match any known function. Candidates are:
1781 MAX(number[, number]...)
1782 MAX(string[, string]...).]],
1784 [[max(1, $sysmis)], [1.00]],
1785 [[max(1, 2, 3, $sysmis)], [3.00]],
1786 [[max.4(1, 2, 3, $sysmis)], [sysmis]],
1787 [[max.4(1, 2, 3)], [error],
1788 [error: DEBUG EVALUATE: For MAX(number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1790 [[max("2", "3", "5", "1", "4")], ["5"]],
1791 [[max("1", "2")], ["2"]],
1792 [[max("1")], ["1"]],
1794 [[min(1, 2, 3, 4, 5)], [1.00]],
1795 [[min(1, $sysmis, 2, 3, $sysmis, 4, 5)], [1.00]],
1796 [[min(1, 2)], [1.00]],
1798 [error: DEBUG EVALUATE: Function invocation min() does not match any known function. Candidates are:
1799 MIN(number[, number]...)
1800 MIN(string[, string]...).]],
1802 [[min(1, $sysmis)], [1.00]],
1803 [[min(1, 2, 3, $sysmis)], [1.00]],
1804 [[min.4(1, 2, 3, $sysmis)], [sysmis]],
1805 [[min.4(1, 2, 3)], [error],
1806 [error: DEBUG EVALUATE: For MIN(number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1808 [[min("2", "3", "5", "1", "4")], ["1"]],
1809 [[min("1", "2")], ["1"]],
1810 [[min("1")], ["1"]])
1812 CHECK_EXPR_EVAL([cfvar mean median sd sum variance],
1813 [[cfvar(1, 2, 3, 4, 5)], [0.53]],
1814 [[cfvar(1, $sysmis, 2, 3, $sysmis, 4, 5)], [0.53]],
1815 [[cfvar(1, 2)], [0.47]],
1816 [[cfvar(1)], [error],
1817 [error: DEBUG EVALUATE: Type mismatch invoking CFVAR(number, number[, number]...) as cfvar(number).]],
1818 [[cfvar(1, $sysmis)], [sysmis]],
1819 [[cfvar(1, 2, 3, $sysmis)], [0.50]],
1820 [[cfvar.4(1, 2, 3, $sysmis)], [sysmis]],
1821 [[cfvar.4(1, 2, 3)], [error],
1822 [error: DEBUG EVALUATE: For CFVAR(number, number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1823 [[cfvar('x')], [error],
1824 [error: DEBUG EVALUATE: Type mismatch invoking CFVAR(number, number[, number]...) as cfvar(string).]],
1825 [[cfvar('x', 1, 2, 3)], [error],
1826 [error: DEBUG EVALUATE: Type mismatch invoking CFVAR(number, number[, number]...) as cfvar(string, number, number, number).]],
1828 [[mean(1, 2, 3, 4, 5)], [3.00]],
1829 [[mean(1, $sysmis, 2, 3, $sysmis, 4, 5)], [3.00]],
1830 [[mean(1, 2)], [1.50]],
1832 [error: DEBUG EVALUATE: Type mismatch invoking MEAN(number[, number]...) as mean().]],
1833 [[mean(1)], [1.00]],
1834 [[mean(1, $sysmis)], [1.00]],
1835 [[mean(1, 2, 3, $sysmis)], [2.00]],
1836 [[mean.4(1, 2, 3, $sysmis)], [sysmis]],
1837 [[mean.4(1, 2, 3)], [error],
1838 [error: DEBUG EVALUATE: For MEAN(number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1840 [[median(1, 2, 3, 4, 5)], [3.00]],
1841 [[median(2, 3, 4, 5, 1)], [3.00]],
1842 [[median(2, 3, 4, 1, 5)], [3.00]],
1843 [[median(2, 1, 4, 5, 3)], [3.00]],
1844 [[median(1, 2, 3, 4)], [2.50]],
1845 [[median(2, 3, 1, 4)], [2.50]],
1846 [[median(2, 3, 4, 1)], [2.50]],
1847 [[median(2, 1, 4, 3)], [2.50]],
1848 [[median(1, $sysmis, 3, 4, 5)], [3.50]],
1849 [[median(2, 3, 4, 5, $sysmis, 1)], [3.00]],
1850 [[median($sysmis, $sysmis, $sysmis, 2, 3, 4, 1, 5)], [3.00]],
1851 [[median(1, 2, 3)], [2.00]],
1852 [[median(1)], [1.00]],
1853 [[median(1, 2)], [1.50]],
1854 [[median(1, 2, $sysmis)], [1.50]],
1855 [[median(1, $sysmis, $sysmis)], [1.00]],
1856 [[median($sysmis, $sysmis, $sysmis)], [sysmis]],
1857 [[median.3(1, 2, $sysmis)], [sysmis]],
1858 [[median.2(1, $sysmis)], [sysmis]],
1860 [[sd(1, 2, 3, 4, 5)], [1.58]],
1861 [[sd(1, $sysmis, 2, 3, $sysmis, 4, 5)], [1.58]],
1862 [[sd(1, 2)], [0.71]],
1864 [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(number).]],
1865 [[sd(1, $sysmis)], [sysmis]],
1866 [[sd(1, 2, 3, $sysmis)], [1.00]],
1867 [[sd.4(1, 2, 3, $sysmis)], [sysmis]],
1868 [[sd.4(1, 2, 3)], [error],
1869 [error: DEBUG EVALUATE: For SD(number, number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1870 [[sd('x')], [error],
1871 [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(string).]],
1872 [[sd('x', 1, 2, 3)], [error],
1873 [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(string, number, number, number).]],
1875 [[sum(1, 2, 3, 4, 5)], [15.00]],
1876 [[sum(1, $sysmis, 2, 3, $sysmis, 4, 5)], [15.00]],
1877 [[sum(1, 2)], [3.00]],
1879 [error: DEBUG EVALUATE: Type mismatch invoking SUM(number[, number]...) as sum().]],
1881 [[sum(1, $sysmis)], [1.00]],
1882 [[sum(1, 2, 3, $sysmis)], [6.00]],
1883 [[sum.4(1, 2, 3, $sysmis)], [sysmis]],
1884 [[sum.4(1, 2, 3)], [error],
1885 [error: DEBUG EVALUATE: For SUM(number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1887 [[variance(1, 2, 3, 4, 5)], [2.50]],
1888 [[variance(1, $sysmis, 2, 3, $sysmis, 4, 5)], [2.50]],
1889 [[variance(1, 2)], [0.50]],
1890 [[variance(1)], [error],
1891 [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(number).]],
1892 [[variance(1, $sysmis)], [sysmis]],
1893 [[variance(1, 2, 3, $sysmis)], [1.00]],
1894 [[variance.4(1, 2, 3, $sysmis)], [sysmis]],
1895 [[variance.4(1, 2, 3)], [error],
1896 [error: DEBUG EVALUATE: For VARIANCE(number, number[, number]...) with 3 arguments, at most 3 (not 4) may be required to be valid.]],
1897 [[variance('x')], [error],
1898 [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(string).]],
1899 [[variance('x', 1, 2, 3)], [error],
1900 [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(string, number, number, number).]])
1902 CHECK_EXPR_EVAL([concat index rindex length lower],
1903 [[concat('')], [""]],
1904 [[concat('a', 'b')], ["ab"]],
1905 [[concat('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')], ["abcdefgh"]],
1906 [[concat('abcdefgh', 'ijklmnopq')], ["abcdefghijklmnopq"]],
1907 [[concat('a', 1)], [error],
1908 [error: DEBUG EVALUATE: Type mismatch invoking CONCAT(string[, string]...) as concat(string, number).]],
1909 [[concat(1, 2)], [error],
1910 [error: DEBUG EVALUATE: Type mismatch invoking CONCAT(string[, string]...) as concat(number, number).]],
1912 [[index('abcbcde', 'bc')], [2.00]],
1913 [[index('abcbcde', 'bcd')], [4.00]],
1914 [[index('abcbcde', 'bcbc')], [2.00]],
1915 [[index('abcdefgh', 'abc')], [1.00]],
1916 [[index('abcdefgh', 'bcd')], [2.00]],
1917 [[index('abcdefgh', 'cde')], [3.00]],
1918 [[index('abcdefgh', 'def')], [4.00]],
1919 [[index('abcdefgh', 'efg')], [5.00]],
1920 [[index('abcdefgh', 'fgh')], [6.00]],
1921 [[index('abcdefgh', 'fghi')], [0.00]],
1922 [[index('abcdefgh', 'x')], [0.00]],
1923 [[index('abcdefgh', 'abch')], [0.00]],
1924 [[index('banana', 'na')], [3.00]],
1925 [[index('banana', 'ana')], [2.00]],
1926 [[index('', 'x')], [0.00]],
1927 [[index('', '')], [sysmis]],
1928 [[index('abcdefgh', '')], [sysmis]],
1929 [[index('abcdefgh', 'alkjsfdjlskalkjfa')], [0.00]],
1931 [[index('abcbcde', 'bc', 1)], [2.00]],
1932 [[index('abcbcde', 'dc', 1)], [3.00]],
1933 [[index('abcbcde', 'abc', 1)], [1.00]],
1934 [[index('abcbcde', 'bc', 2)], [2.00]],
1935 [[index('abcbcde', 'dc', 2)], [0.00]],
1936 [[index('abcbcde', 'abc', 1)], [1.00]],
1937 [[index('abcbcde', 'bccb', 2)], [2.00]],
1938 [[index('abcbcde', 'bcbc', 2)], [2.00]],
1939 [[index('abcbcde', 'bcbc', $sysmis)], [sysmis]],
1941 [[rindex('abcbcde', 'bc')], [4.00]],
1942 [[rindex('abcbcde', 'bcd')], [4.00]],
1943 [[rindex('abcbcde', 'bcbc')], [2.00]],
1944 [[rindex('abcdefgh', 'abc')], [1.00]],
1945 [[rindex('abcdefgh', 'bcd')], [2.00]],
1946 [[rindex('abcdefgh', 'cde')], [3.00]],
1947 [[rindex('abcdefgh', 'def')], [4.00]],
1948 [[rindex('abcdefgh', 'efg')], [5.00]],
1949 [[rindex('abcdefgh', 'fgh')], [6.00]],
1950 [[rindex('abcdefgh', 'fghi')], [0.00]],
1951 [[rindex('abcdefgh', 'x')], [0.00]],
1952 [[rindex('abcdefgh', 'abch')], [0.00]],
1953 [[rindex('banana', 'na')], [5.00]],
1954 [[rindex('banana', 'ana')], [4.00]],
1955 [[rindex('', 'x')], [0.00]],
1956 [[rindex('', '')], [sysmis]],
1957 [[rindex('abcdefgh', '')], [sysmis]],
1958 [[rindex('abcdefgh', 'alkjsfdjlskalkjfa')], [0.00]],
1960 [[rindex('abcbcde', 'bc', 1)], [5.00]],
1961 [[rindex('abcbcde', 'dc', 1)], [6.00]],
1962 [[rindex('abcbcde', 'abc', 1)], [5.00]],
1963 [[rindex('abcbcde', 'bc', 2)], [4.00]],
1964 [[rindex('abcbcde', 'dc', 2)], [0.00]],
1965 [[rindex('abcbcde', 'abc', 1)], [5.00]],
1966 [[rindex('abcbcde', 'bccb', 2)], [4.00]],
1967 [[rindex('abcbcde', 'bcbc', 2)], [4.00]],
1968 [[rindex('abcbcde', 'bcbc', 0)], [sysmis]],
1969 [[rindex('abcbcde', 'bcbc', $sysmis)], [sysmis]],
1970 [[rindex('abcbcde', 'bcbcg', 2)], [sysmis]],
1971 [[rindex('abcbcde', 'bcbcg', $sysmis)], [sysmis]],
1972 [[rindex('abcbcde', 'bcbcg', 'x')], [error],
1973 [error: DEBUG EVALUATE: Function invocation rindex(string, string, string) does not match any known function. Candidates are:
1974 RINDEX(string, string)
1975 RINDEX(string, string, number).]],
1976 [[rindex(1, 'bcdfkjl', 2)], [error],
1977 [error: DEBUG EVALUATE: Function invocation rindex(number, string, number) does not match any known function. Candidates are:
1978 RINDEX(string, string)
1979 RINDEX(string, string, number).]],
1980 [[rindex('aksj', 2, 2)], [error],
1981 [error: DEBUG EVALUATE: Function invocation rindex(string, number, number) does not match any known function. Candidates are:
1982 RINDEX(string, string)
1983 RINDEX(string, string, number).]],
1984 [[rindex(1, 2, 3)], [error],
1985 [error: DEBUG EVALUATE: Function invocation rindex(number, number, number) does not match any known function. Candidates are:
1986 RINDEX(string, string)
1987 RINDEX(string, string, number).]],
1988 [[rindex(1, 2, '3')], [error],
1989 [error: DEBUG EVALUATE: Function invocation rindex(number, number, string) does not match any known function. Candidates are:
1990 RINDEX(string, string)
1991 RINDEX(string, string, number).]],
1993 [[length('')], [0.00]],
1994 [[length('a')], [1.00]],
1995 [[length('xy')], [2.00]],
1996 [[length('adsf ')], [8.00]],
1997 [[length('abcdefghijkl')], [12.00]],
1998 [[length(0)], [error],
1999 [error: DEBUG EVALUATE: Type mismatch invoking LENGTH(string) as length(number).]],
2000 [[length($sysmis)], [error],
2001 [error: DEBUG EVALUATE: Type mismatch invoking LENGTH(string) as length(number).]],
2003 [[lower('ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089')], ["abcdefghijklmnopqrstuvwxyz!@%&*089"]],
2004 [[lower('')], [""]],
2005 [[lower(1)], [error],
2006 [error: DEBUG EVALUATE: Type mismatch invoking LOWER(string) as lower(number).]])
2008 CHECK_EXPR_EVAL([replace],
2009 [[replace('banana', 'an', 'AN')], ["bANANa"]],
2010 [[replace('banana', 'an', 'a')], ["baaa"]],
2011 [[replace('banana', 'an', '')], ["ba"]],
2012 [[replace('banana', 'na', '')], ["ba"]],
2013 [[replace('banana', 'ba', 'BA')], ["BAnana"]],
2014 [[replace('banana', 'na', 'xyzzy')], ["baxyzzyxyzzy"]],
2015 [[replace('banana', 'an', 'xyzzy', 1)], ["bxyzzyana"]],
2016 [[replace('banana', 'an', 'xyzzy', 1.5)], ["bxyzzyana"]],
2017 [[replace('banana', 'bananana', 'xyzzy')], ["banana"]],
2018 [[replace('banana', '', 'xyzzy')], ["banana"]],
2019 [[replace('banana', 'ba', '', 0)], ["banana"]],
2020 [[replace('banana', 'ba', '', -1)], ["banana"]],
2021 [[replace('banana', 'ba', '', $sysmis)], ["banana"]])
2023 CHECK_EXPR_EVAL([lpad number ltrim lpad rtrim rpad string strunc substr upcase],
2024 [[lpad('abc', -1)], [""]],
2025 [[lpad('abc', 0)], ["abc"]],
2026 [[lpad('abc', 2)], ["abc"]],
2027 [[lpad('abc', 3)], ["abc"]],
2028 [[lpad('abc', 10)], [" abc"]],
2029 [[lpad('abc', 32768)], [""]],
2030 [[lpad('abc', $sysmis)], [""]],
2031 [[lpad('abc', -1, '*')], [""]],
2032 [[lpad('abc', 0, '*')], ["abc"]],
2033 [[lpad('abc', 2, '*')], ["abc"]],
2034 [[lpad('abc', 3, '*')], ["abc"]],
2035 [[lpad('abc', 10, '*')], ["*******abc"]],
2036 [[lpad('abc', 32768, '*')], [""]],
2037 [[lpad('abc', $sysmis, '*')], [""]],
2038 [[lpad('abc', $sysmis, '')], [""]],
2039 [[lpad('abc', $sysmis, 'xy')], [""]],
2040 [[lpad(0, 10)], [error],
2041 [error: DEBUG EVALUATE: Function invocation lpad(number, number) does not match any known function. Candidates are:
2042 LPAD(string, number)
2043 LPAD(string, number, string).]],
2044 [[lpad('abc', 'def')], [error],
2045 [error: DEBUG EVALUATE: Function invocation lpad(string, string) does not match any known function. Candidates are:
2046 LPAD(string, number)
2047 LPAD(string, number, string).]],
2048 [[lpad(0, 10, ' ')], [error],
2049 [error: DEBUG EVALUATE: Function invocation lpad(number, number, string) does not match any known function. Candidates are:
2050 LPAD(string, number)
2051 LPAD(string, number, string).]],
2052 [[lpad('abc', 'def', ' ')], [error],
2053 [error: DEBUG EVALUATE: Function invocation lpad(string, string, string) does not match any known function. Candidates are:
2054 LPAD(string, number)
2055 LPAD(string, number, string).]],
2056 [[lpad('x', 5, 0)], [error],
2057 [error: DEBUG EVALUATE: Function invocation lpad(string, number, number) does not match any known function. Candidates are:
2058 LPAD(string, number)
2059 LPAD(string, number, string).]],
2060 [[lpad('x', 5, 2)], [error],
2061 [error: DEBUG EVALUATE: Function invocation lpad(string, number, number) does not match any known function. Candidates are:
2062 LPAD(string, number)
2063 LPAD(string, number, string).]],
2065 [[number("123", f3.0)], [123.00]],
2066 [[number(" 123", f3.0)], [12.00]],
2067 [[number("123", f3.1)], [12.30]],
2068 [[number(" ", f3.1)], [sysmis]],
2069 [[number("123", a8)], [error],
2070 [error: DEBUG EVALUATE: Type mismatch invoking NUMBER(string, num_input_format) as number(string, format).]],
2071 dnl CCA is not an input format:
2072 [[number("123", cca1.2)], [error],
2073 [error: DEBUG EVALUATE: Type mismatch invoking NUMBER(string, num_input_format) as number(string, format).]],
2075 [[ltrim(' abc')], ["abc"]],
2076 [[rtrim(' abc ')], [" abc"]],
2077 [[ltrim('abc')], ["abc"]],
2078 [[ltrim(' abc')], [" abc"]],
2079 [[ltrim(' ')], [""]],
2080 [[ltrim('')], [""]],
2081 [[ltrim(8)], [error],
2082 [error: DEBUG EVALUATE: Function invocation ltrim(number) does not match any known function. Candidates are:
2084 LTRIM(string, string).]],
2085 [[ltrim('***abc', '*')], ["abc"]],
2086 [[ltrim('abc', '*')], ["abc"]],
2087 [[ltrim('*abc', '*')], ["abc"]],
2088 [[ltrim('', '*')], [""]],
2089 [[ltrim(8, '*')], [error],
2090 [error: DEBUG EVALUATE: Function invocation ltrim(number, string) does not match any known function. Candidates are:
2092 LTRIM(string, string).]],
2093 [[ltrim(' x', 8)], [error],
2094 [error: DEBUG EVALUATE: Function invocation ltrim(string, number) does not match any known function. Candidates are:
2096 LTRIM(string, string).]],
2097 [[ltrim(8, 9)], [error],
2098 [error: DEBUG EVALUATE: Function invocation ltrim(number, number) does not match any known function. Candidates are:
2100 LTRIM(string, string).]],
2102 [[rpad('abc', -1)], [""]],
2103 [[rpad('abc', 0)], ["abc"]],
2104 [[rpad('abc', 2)], ["abc"]],
2105 [[rpad('abc', 3)], ["abc"]],
2106 [[rpad('abc', 10)], ["abc "]],
2107 [[rpad('abc', 32768)], [""]],
2108 [[rpad('abc', $sysmis)], [""]],
2109 [[rpad('abc', -1, '*')], [""]],
2110 [[rpad('abc', 0, '*')], ["abc"]],
2111 [[rpad('abc', 2, '*')], ["abc"]],
2112 [[rpad('abc', 3, '*')], ["abc"]],
2113 [[rpad('abc', 10, '*')], ["abc*******"]],
2114 [[rpad('abc', 32768, '*')], [""]],
2115 [[rpad('abc', $sysmis, '*')], [""]],
2116 [[rpad('abc', $sysmis, '')], [""]],
2117 [[rpad('abc', $sysmis, 'xy')], [""]],
2118 [[rpad(0, 10)], [error],
2119 [error: DEBUG EVALUATE: Function invocation rpad(number, number) does not match any known function. Candidates are:
2120 RPAD(string, number)
2121 RPAD(string, number, string).]],
2122 [[rpad('abc', 'def')], [error],
2123 [error: DEBUG EVALUATE: Function invocation rpad(string, string) does not match any known function. Candidates are:
2124 RPAD(string, number)
2125 RPAD(string, number, string).]],
2126 [[rpad(0, 10, ' ')], [error],
2127 [error: DEBUG EVALUATE: Function invocation rpad(number, number, string) does not match any known function. Candidates are:
2128 RPAD(string, number)
2129 RPAD(string, number, string).]],
2130 [[rpad('abc', 'def', ' ')], [error],
2131 [error: DEBUG EVALUATE: Function invocation rpad(string, string, string) does not match any known function. Candidates are:
2132 RPAD(string, number)
2133 RPAD(string, number, string).]],
2134 [[rpad('x', 5, 0)], [error],
2135 [error: DEBUG EVALUATE: Function invocation rpad(string, number, number) does not match any known function. Candidates are:
2136 RPAD(string, number)
2137 RPAD(string, number, string).]],
2138 [[rpad('x', 5, 2)], [error],
2139 [error: DEBUG EVALUATE: Function invocation rpad(string, number, number) does not match any known function. Candidates are:
2140 RPAD(string, number)
2141 RPAD(string, number, string).]],
2143 [[rtrim('abc ')], ["abc"]],
2144 [[rtrim(' abc ')], [" abc"]],
2145 [[rtrim('abc')], ["abc"]],
2146 [[rtrim('abc ')], ["abc "]],
2147 [[rtrim(' ')], [""]],
2148 [[rtrim('')], [""]],
2149 [[rtrim(8)], [error],
2150 [error: DEBUG EVALUATE: Function invocation rtrim(number) does not match any known function. Candidates are:
2152 RTRIM(string, string).]],
2153 [[rtrim('abc***', '*')], ["abc"]],
2154 [[rtrim('abc', '*')], ["abc"]],
2155 [[rtrim('abc*', '*')], ["abc"]],
2156 [[rtrim('', '*')], [""]],
2157 [[rtrim(8, '*')], [error],
2158 [error: DEBUG EVALUATE: Function invocation rtrim(number, string) does not match any known function. Candidates are:
2160 RTRIM(string, string).]],
2161 [[rtrim(' x', 8)], [error],
2162 [error: DEBUG EVALUATE: Function invocation rtrim(string, number) does not match any known function. Candidates are:
2164 RTRIM(string, string).]],
2165 [[rtrim(8, 9)], [error],
2166 [error: DEBUG EVALUATE: Function invocation rtrim(number, number) does not match any known function. Candidates are:
2168 RTRIM(string, string).]],
2170 [[string(123.56, f5.1)], ["123.6"]],
2171 [[string($sysmis, f5.1)], [" . "]],
2172 [[string("abc", A5)], [error],
2173 [error: DEBUG EVALUATE: Type mismatch invoking STRING(number, num_output_format) as string(string, format).]],
2174 dnl E has a minimum width of 6 on output:
2175 [[string(123, e1)], [error],
2176 [error: DEBUG EVALUATE: Type mismatch invoking STRING(number, num_output_format) as string(number, format).]],
2177 [[string(123, e6.0)], ["1E+002"]],
2179 [[strunc('a c ', 9)], ["a c"]],
2180 [[strunc('a c ', 7)], ["a c"]],
2181 [[strunc('a c ', 6)], ["a c"]],
2182 [[strunc('a c ', 5)], ["a c"]],
2183 [[strunc('a c ', 4)], ["a c"]],
2184 [[strunc('a c ', 3)], ["a c"]],
2185 [[strunc('a c ', 2)], ["a"]],
2186 [[strunc('a c ', 1)], ["a"]],
2187 [[strunc('a c ', 0)], [""]],
2188 [[strunc('a c ', -1)], [""]],
2189 [[strunc('a c ', $sysmis)], [""]],
2190 [[strunc(' abc ', 9)], [" abc"]],
2191 [[strunc(' abc ', 8)], [" abc"]],
2192 [[strunc(' abc ', 7)], [" abc"]],
2193 [[strunc(' abc ', 6)], [" abc"]],
2194 [[strunc(' abc ', 5)], [" abc"]],
2195 [[strunc(' abc ', 4)], [" ab"]],
2196 [[strunc(' abc ', 3)], [" a"]],
2197 [[strunc(' abc ', 2)], [""]],
2198 [[strunc(' abc ', 1)], [""]],
2199 [[strunc(' abc ', -1)], [""]],
2200 [[strunc(' abc ', $sysmis)], [""]],
2202 [[substr('abcdefgh', -5)], [""]],
2203 [[substr('abcdefgh', 0)], [""]],
2204 [[substr('abcdefgh', 1)], ["abcdefgh"]],
2205 [[substr('abcdefgh', 3)], ["cdefgh"]],
2206 [[substr('abcdefgh', 5)], ["efgh"]],
2207 [[substr('abcdefgh', 6)], ["fgh"]],
2208 [[substr('abcdefgh', 7)], ["gh"]],
2209 [[substr('abcdefgh', 8)], ["h"]],
2210 [[substr('abcdefgh', 9)], [""]],
2211 [[substr('abcdefgh', 10)], [""]],
2212 [[substr('abcdefgh', 20)], [""]],
2213 [[substr('abcdefgh', $sysmis)], [""]],
2214 [[substr(0, 10)], [error],
2215 [error: DEBUG EVALUATE: Function invocation substr(number, number) does not match any known function. Candidates are:
2216 SUBSTR(string, number)
2217 SUBSTR(string, number, number).]],
2218 [[substr('abcd', 'abc')], [error],
2219 [error: DEBUG EVALUATE: Function invocation substr(string, string) does not match any known function. Candidates are:
2220 SUBSTR(string, number)
2221 SUBSTR(string, number, number).]],
2222 [[substr(0, 'abc')], [error],
2223 [error: DEBUG EVALUATE: Function invocation substr(number, string) does not match any known function. Candidates are:
2224 SUBSTR(string, number)
2225 SUBSTR(string, number, number).]],
2227 [[substr('abcdefgh', 0, 0)], [""]],
2228 [[substr('abcdefgh', 3, 0)], [""]],
2229 [[substr('abcdefgh', 5, 0)], [""]],
2230 [[substr('abcdefgh', 9, 0)], [""]],
2231 [[substr('abcdefgh', 0, 1)], [""]],
2232 [[substr('abcdefgh', 0, 5)], [""]],
2233 [[substr('abcdefgh', 1, 8)], ["abcdefgh"]],
2234 [[substr('abcdefgh', 1, 10)], ["abcdefgh"]],
2235 [[substr('abcdefgh', 1, 20)], ["abcdefgh"]],
2236 [[substr('abcdefgh', 3, 4)], ["cdef"]],
2237 [[substr('abcdefgh', 5, 2)], ["ef"]],
2238 [[substr('abcdefgh', 6, 1)], ["f"]],
2239 [[substr('abcdefgh', 7, 10)], ["gh"]],
2240 [[substr('abcdefgh', 8, 1)], ["h"]],
2241 [[substr('abcdefgh', 8, 2)], ["h"]],
2242 [[substr('abcdefgh', 9, 11)], [""]],
2243 [[substr('abcdefgh', 10, 52)], [""]],
2244 [[substr('abcdefgh', 20, 1)], [""]],
2245 [[substr('abcdefgh', $sysmis, 2)], [""]],
2246 [[substr('abcdefgh', 9, $sysmis)], [""]],
2247 [[substr('abcdefgh', $sysmis, $sysmis)], [""]],
2248 [[substr('abc', 1, 'x')], [error],
2249 [error: DEBUG EVALUATE: Function invocation substr(string, number, string) does not match any known function. Candidates are:
2250 SUBSTR(string, number)
2251 SUBSTR(string, number, number).]],
2252 [[substr(0, 10, 1)], [error],
2253 [error: DEBUG EVALUATE: Function invocation substr(number, number, number) does not match any known function. Candidates are:
2254 SUBSTR(string, number)
2255 SUBSTR(string, number, number).]],
2256 [[substr(0, 10, 'x')], [error],
2257 [error: DEBUG EVALUATE: Function invocation substr(number, number, string) does not match any known function. Candidates are:
2258 SUBSTR(string, number)
2259 SUBSTR(string, number, number).]],
2260 [[substr('abcd', 'abc', 0)], [error],
2261 [error: DEBUG EVALUATE: Function invocation substr(string, string, number) does not match any known function. Candidates are:
2262 SUBSTR(string, number)
2263 SUBSTR(string, number, number).]],
2264 [[substr('abcd', 'abc', 'j')], [error],
2265 [error: DEBUG EVALUATE: Function invocation substr(string, string, string) does not match any known function. Candidates are:
2266 SUBSTR(string, number)
2267 SUBSTR(string, number, number).]],
2268 [[substr(0, 'abc', 4)], [error],
2269 [error: DEBUG EVALUATE: Function invocation substr(number, string, number) does not match any known function. Candidates are:
2270 SUBSTR(string, number)
2271 SUBSTR(string, number, number).]],
2272 [[substr(0, 'abc', 'k')], [error],
2273 [error: DEBUG EVALUATE: Function invocation substr(number, string, string) does not match any known function. Candidates are:
2274 SUBSTR(string, number)
2275 SUBSTR(string, number, number).]],
2277 [[upcase('abcdefghijklmnopqrstuvwxyz!@%&*089')], ["ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089"]],
2278 [[upcase('')], [""]],
2279 [[upcase(1)], [error],
2280 [error: DEBUG EVALUATE: Type mismatch invoking UPCASE(string) as upcase(number).]])
2282 CHECK_EXPR_EVAL([time ctime date yrmoda],
2283 [[time.days(1)], [86400.00]],
2284 [[time.days(-1)], [-86400.00]],
2285 [[time.days(0.5)], [43200.00]],
2286 [[time.days('x')], [error],
2287 [error: DEBUG EVALUATE: Type mismatch invoking TIME.DAYS(number) as time.days(string).]],
2288 [[time.days($sysmis)], [sysmis]],
2290 [[time.hms(4,50,38)], [17438.00]],
2291 [[time.hms(12,31,35)], [45095.00]],
2292 [[time.hms(12,47,53)], [46073.00]],
2293 [[time.hms(1,26,0)], [5160.00]],
2294 [[time.hms(20,58,11)], [75491.00]],
2295 [[time.hms(7,36,5)], [27365.00]],
2296 [[time.hms(15,43,49)], [56629.00]],
2297 [[time.hms(4,25,9)], [15909.00]],
2298 [[time.hms(6,49,27)], [24567.00]],
2299 [[time.hms(2,57,52)], [10672.00]],
2300 [[time.hms(16,45,44)], [60344.00]],
2301 [[time.hms(21,30,57)], [77457.00]],
2302 [[time.hms(22,30,4)], [81004.00]],
2303 [[time.hms(1,56,51)], [7011.00]],
2304 [[time.hms(5, 6, 7)], [18367.00]],
2305 [[time.hms(5, 6, 0)], [18360.00]],
2306 [[time.hms(5, 0, 7)], [18007.00]],
2307 [[time.hms(0, 6, 7)], [367.00]],
2308 [[time.hms(-5, 6, -7)], [sysmis],
2309 [warning: DEBUG EVALUATE: TIME.HMS cannot mix positive and negative arguments.]],
2310 [[time.hms(-5, 5, -7)], [sysmis],
2311 [warning: DEBUG EVALUATE: TIME.HMS cannot mix positive and negative arguments.]],
2312 [[time.hms($sysmis, 6, 7)], [sysmis]],
2313 [[time.hms(5, $sysmis, 7)], [sysmis]],
2314 [[time.hms(5, $sysmis, 7)], [sysmis]],
2315 [[time.hms($sysmis, $sysmis, 7)], [sysmis]],
2316 [[time.hms(5, $sysmis, $sysmis)], [sysmis]],
2317 [[time.hms($sysmis, $sysmis, 7)], [sysmis]],
2318 [[time.hms($sysmis, $sysmis, $sysmis)], [sysmis]],
2320 [[ctime.days(106272)], [1.23]],
2321 [[ctime.hours(106272)], [29.52]],
2322 [[ctime.minutes(106272)], [1771.20]],
2323 [[ctime.seconds(106272)], [106272.00]],
2324 [[ctime.days(-106272)], [-1.23]],
2325 [[ctime.hours(-106272)], [-29.52]],
2326 [[ctime.minutes(-106272)], [-1771.20]],
2327 [[ctime.seconds(-106272)], [-106272.00]],
2328 [[ctime.days($sysmis)], [sysmis]],
2329 [[ctime.hours($sysmis)], [sysmis]],
2330 [[ctime.minutes($sysmis)], [sysmis]],
2331 [[ctime.seconds($sysmis)], [sysmis]],
2332 [[ctime.days('a')], [error],
2333 [error: DEBUG EVALUATE: Type mismatch invoking CTIME.DAYS(number) as ctime.days(string).]],
2334 [[ctime.hours('b')], [error],
2335 [error: DEBUG EVALUATE: Type mismatch invoking CTIME.HOURS(number) as ctime.hours(string).]],
2336 [[ctime.minutes('c')], [error],
2337 [error: DEBUG EVALUATE: Type mismatch invoking CTIME.MINUTES(number) as ctime.minutes(string).]],
2338 [[ctime.seconds('d')], [error],
2339 [error: DEBUG EVALUATE: Type mismatch invoking CTIME.SECONDS(number) as ctime.seconds(string).]],
2341 [[ctime.days(date.dmy(15,10,1582))], [1.00]],
2342 [[ctime.days(date.dmy(6,9,1719))], [50000.00]],
2343 [[ctime.days(date.dmy(24,1,1583))], [102.00]],
2344 [[ctime.days(date.dmy(14,12,1585))], [1157.00]],
2345 [[ctime.days(date.dmy(26,11,1621))], [14288.00]],
2346 [[ctime.days(date.dmy(25,12,1821))], [87365.00]],
2347 [[ctime.days(date.dmy(3,12,1882))], [109623.00]],
2348 [[ctime.days(date.dmy(6,4,2002))], [153211.00]],
2349 [[ctime.days(date.dmy(19,12,1999))], [152372.00]],
2350 [[ctime.days(date.dmy(1,10,1978))], [144623.00]],
2351 [[ctime.days(date.dmy(0,10,1978))], [144622.00]],
2352 [[ctime.days(date.dmy(32,10,1978))], [sysmis],
2353 [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
2354 [[ctime.days(date.dmy(31,0,1978))], [144349.00]],
2355 [[ctime.days(date.dmy(31,13,1978))], [144745.00]],
2356 [[ctime.days(date.dmy($sysmis,10,1978))], [sysmis]],
2357 [[ctime.days(date.dmy(31,$sysmis,1978))], [sysmis]],
2358 [[ctime.days(date.dmy(31,10,$sysmis))], [sysmis]],
2359 [[ctime.days(date.dmy($sysmis,$sysmis,1978))], [sysmis]],
2360 [[ctime.days(date.dmy(31,$sysmis,$sysmis))], [sysmis]],
2361 [[ctime.days(date.dmy($sysmis,10,$sysmis))], [sysmis]],
2362 [[ctime.days(date.dmy($sysmis,$sysmis,$sysmis))], [sysmis]],
2363 [[date.dmy('a',1,2)], [error],
2364 [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(string, number, number).]],
2365 [[date.dmy(1,'a',2)], [error],
2366 [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(number, string, number).]],
2367 [[date.dmy(1,2,'a')], [error],
2368 [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(number, number, string).]],
2369 dnl FIXME: check out-of-range and nearly out-of-range values
2371 [[yrmoda(1582,10,15)], [1.00]],
2372 [[yrmoda(1719,9,6)], [50000.00]],
2373 [[yrmoda(1583,1,24)], [102.00]],
2374 [[yrmoda(1585,12,14)], [1157.00]],
2375 [[yrmoda(1621,11,26)], [14288.00]],
2376 [[yrmoda(1821,12,25)], [87365.00]],
2377 [[yrmoda(1882,12,3)], [109623.00]],
2378 [[yrmoda(2002,4,6)], [153211.00]],
2379 [[yrmoda(1999,12,19)], [152372.00]],
2380 [[yrmoda(1978,10,1)], [144623.00]],
2381 [[yrmoda(1978,10,0)], [144622.00]],
2382 [[yrmoda(1978,10,32)], [sysmis],
2383 [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
2384 [[yrmoda(1978,0,31)], [144349.00]],
2385 [[yrmoda(1978,13,31)], [144745.00]],
2386 [[yrmoda(1978,10,$sysmis)], [sysmis]],
2387 [[yrmoda(1978,$sysmis,31)], [sysmis]],
2388 [[yrmoda($sysmis,10,31)], [sysmis]],
2389 [[yrmoda(1978,$sysmis,$sysmis)], [sysmis]],
2390 [[yrmoda($sysmis,$sysmis,31)], [sysmis]],
2391 [[yrmoda($sysmis,10,$sysmis)], [sysmis]],
2392 [[yrmoda($sysmis,$sysmis,$sysmis)], [sysmis]],
2393 [[yrmoda('a',1,2)], [error],
2394 [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(string, number, number).]],
2395 [[yrmoda(1,'a',2)], [error],
2396 [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(number, string, number).]],
2397 [[yrmoda(1,2,'a')], [error],
2398 [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(number, number, string).]],
2399 dnl FIXME: check out-of-range and nearly out-of-range values
2401 [[ctime.days(date.mdy(6,10,1648)) + 577735], [601716.00]],
2402 [[ctime.days(date.mdy(6,30,1680)) + 577735], [613424.00]],
2403 [[ctime.days(date.mdy(7,24,1716)) + 577735], [626596.00]],
2404 [[ctime.days(date.mdy(6,19,1768)) + 577735], [645554.00]],
2405 [[ctime.days(date.mdy(8,2,1819)) + 577735], [664224.00]],
2406 [[ctime.days(date.mdy(3,27,1839)) + 577735], [671401.00]],
2407 [[ctime.days(date.mdy(4,19,1903)) + 577735], [694799.00]],
2408 [[ctime.days(date.mdy(8,25,1929)) + 577735], [704424.00]],
2409 [[ctime.days(date.mdy(9,29,1941)) + 577735], [708842.00]],
2410 [[ctime.days(date.mdy(4,19,1943)) + 577735], [709409.00]],
2411 [[ctime.days(date.mdy(10,7,1943)) + 577735], [709580.00]],
2412 [[ctime.days(date.mdy(3,17,1992)) + 577735], [727274.00]],
2413 [[ctime.days(date.mdy(2,25,1996)) + 577735], [728714.00]],
2414 [[ctime.days(date.mdy(11,10,2038)) + 577735], [744313.00]],
2415 [[ctime.days(date.mdy(7,18,2094)) + 577735], [764652.00]],
2416 dnl FIXME: check out-of-range and nearly out-of-range values
2418 [[ctime.days(date.mdy(10,15,1582))], [1.00]],
2419 [[ctime.days(date.mdy(9,6,1719))], [50000.00]],
2420 [[ctime.days(date.mdy(1,24,1583))], [102.00]],
2421 [[ctime.days(date.mdy(12,14,1585))], [1157.00]],
2422 [[ctime.days(date.mdy(11,26,1621))], [14288.00]],
2423 [[ctime.days(date.mdy(12,25,1821))], [87365.00]],
2424 [[ctime.days(date.mdy(12,3,1882))], [109623.00]],
2425 [[ctime.days(date.mdy(4,6,2002))], [153211.00]],
2426 [[ctime.days(date.mdy(12,19,1999))], [152372.00]],
2427 [[ctime.days(date.mdy(10,1,1978))], [144623.00]],
2428 [[ctime.days(date.mdy(10,0,1978))], [144622.00]],
2429 [[ctime.days(date.mdy(10,32,1978))], [sysmis],
2430 [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
2431 [[ctime.days(date.mdy(0,31,1978))], [144349.00]],
2432 [[ctime.days(date.mdy(13,31,1978))], [144745.00]],
2433 [[ctime.days(date.mdy(10,$sysmis,1978))], [sysmis]],
2434 [[ctime.days(date.mdy($sysmis,31,1978))], [sysmis]],
2435 [[ctime.days(date.mdy(10,31,$sysmis))], [sysmis]],
2436 [[ctime.days(date.mdy($sysmis,$sysmis,1978))], [sysmis]],
2437 [[ctime.days(date.mdy($sysmis,31,$sysmis))], [sysmis]],
2438 [[ctime.days(date.mdy(10,$sysmis,$sysmis))], [sysmis]],
2439 [[ctime.days(date.mdy($sysmis,$sysmis,$sysmis))], [sysmis]],
2440 [[date.mdy('a',1,2)], [error],
2441 [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(string, number, number).]],
2442 [[date.mdy(1,'a',2)], [error],
2443 [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(number, string, number).]],
2444 [[date.mdy(1,2,'a')], [error],
2445 [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(number, number, string).]],
2446 [[ctime.days(date.mdy(0,0,0))], [152353.00]],
2447 [[ctime.days(date.mdy(0,0,999))], [sysmis],
2448 [error: DEBUG EVALUATE: Date 0998-12-0 is before the earliest acceptable date of 1582-10-15.]],
2449 [[date.mdy(1,1,1582)], [sysmis],
2450 [error: DEBUG EVALUATE: Date 1582-1-1 is before the earliest acceptable date of 1582-10-15.]],
2451 [[date.mdy(10,14,1582)], [sysmis],
2452 [error: DEBUG EVALUATE: Date 1582-10-14 is before the earliest acceptable date of 1582-10-15.]],
2453 [[date.mdy(10,15,1582)], [86400.00]],
2455 [[ctime.days(date.moyr(1,2000))], [152385.00]],
2456 [[ctime.days(date.moyr(2,2000))], [152416.00]],
2457 [[ctime.days(date.moyr(3,2000))], [152445.00]],
2458 [[ctime.days(date.moyr(4,2000))], [152476.00]],
2459 [[ctime.days(date.moyr(5,2000))], [152506.00]],
2460 [[ctime.days(date.moyr(13,2000))], [152751.00]],
2461 [[ctime.days(date.moyr(14,2000))], [sysmis],
2462 [error: DEBUG EVALUATE: Month 14 is not in acceptable range of 0 to 13.]],
2463 [[ctime.days(date.moyr($sysmis,2000))], [sysmis]],
2464 [[ctime.days(date.moyr(1,$sysmis))], [sysmis]],
2465 [[ctime.days(date.moyr($sysmis,$sysmis))], [sysmis]],
2466 [[date.moyr('a',2000)], [error],
2467 [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(string, number).]],
2468 [[date.moyr(5,'a')], [error],
2469 [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(number, string).]],
2470 [[date.moyr('a','b')], [error],
2471 [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(string, string).]],
2473 [[ctime.days(date.qyr(1,2000))], [152385.00]],
2474 [[ctime.days(date.qyr(2,2000))], [152476.00]],
2475 [[ctime.days(date.qyr(5,2000))], [sysmis],
2476 [warning: DEBUG EVALUATE: The first argument to DATE.QYR must be 1, 2, 3, or 4.]],
2477 [[ctime.days(date.qyr(6,2000))], [sysmis],
2478 [warning: DEBUG EVALUATE: The first argument to DATE.QYR must be 1, 2, 3, or 4.]],
2479 [[ctime.days(date.qyr($sysmis,2000))], [sysmis]],
2480 [[ctime.days(date.qyr(1,$sysmis))], [sysmis]],
2481 [[ctime.days(date.qyr($sysmis,$sysmis))], [sysmis]],
2482 [[date.qyr('a',2000)], [error],
2483 [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(string, number).]],
2484 [[date.qyr(5,'a')], [error],
2485 [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(number, string).]],
2486 [[date.qyr('a','b')], [error],
2487 [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(string, string).]],
2489 [[ctime.days(date.wkyr(1,2000))], [152385.00]],
2490 [[ctime.days(date.wkyr(15,1999))], [152118.00]],
2491 [[ctime.days(date.wkyr(36,1999))], [152265.00]],
2492 [[ctime.days(date.wkyr(54,1999))], [sysmis],
2493 [error: DEBUG EVALUATE: The week argument to DATE.WKYR is outside the acceptable range of 1 to 53. The result will be system-missing.]],
2494 [[ctime.days(date.wkyr($sysmis,1999))], [sysmis]],
2495 [[ctime.days(date.wkyr(1,$sysmis))], [sysmis]],
2496 [[ctime.days(date.wkyr($sysmis,$sysmis))], [sysmis]],
2497 [[date.wkyr('a',1999)], [error],
2498 [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(string, number).]],
2499 [[date.wkyr(5,'a')], [error],
2500 [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(number, string).]],
2501 [[date.wkyr('a','b')], [error],
2502 [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(string, string).]],
2504 [[ctime.days(date.yrday(2000,1))], [152385.00]],
2505 [[ctime.days(date.yrday(2000,100))], [152484.00]],
2506 [[ctime.days(date.yrday(2000,253))], [152637.00]],
2507 [[ctime.days(date.yrday(2000,500))], [sysmis],
2508 [error: DEBUG EVALUATE: The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366. The result will be system-missing.]],
2509 [[ctime.days(date.yrday(2000,-100))], [sysmis],
2510 [error: DEBUG EVALUATE: The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366. The result will be system-missing.]],
2511 [[ctime.days(date.yrday(1999,$sysmis))], [sysmis]],
2512 [[ctime.days(date.yrday($sysmis,1))], [sysmis]],
2513 [[ctime.days(date.yrday($sysmis,$sysmis))], [sysmis]],
2514 [[date.yrday(1999,'a')], [error],
2515 [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(number, string).]],
2516 [[date.yrday('a',5)], [error],
2517 [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(string, number).]],
2518 [[date.yrday('a','b')], [error],
2519 [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(string, string).]])
2521 CHECK_EXPR_EVAL([xdate],
2522 [[xdate.date(date.mdy(6,10,1648) + time.hms(0,0,0)) / 86400], [23981.00]],
2523 [[xdate.date(date.mdy(6,30,1680) + time.hms(4,50,38)) / 86400], [35689.00]],
2524 [[xdate.date(date.mdy(7,24,1716) + time.hms(12,31,35)) / 86400], [48861.00]],
2525 [[xdate.date(date.mdy(6,19,1768) + time.hms(12,47,53)) / 86400], [67819.00]],
2526 [[xdate.date(date.mdy(8,2,1819) + time.hms(1,26,0)) / 86400], [86489.00]],
2527 [[xdate.date(date.mdy(3,27,1839) + time.hms(20,58,11)) / 86400], [93666.00]],
2528 [[xdate.date(date.mdy(4,19,1903) + time.hms(7,36,5)) / 86400], [117064.00]],
2529 [[xdate.date(date.mdy(8,25,1929) + time.hms(15,43,49)) / 86400], [126689.00]],
2530 [[xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400], [131107.00]],
2531 [[xdate.date(date.mdy(4,19,1943) + time.hms(6,49,27)) / 86400], [131674.00]],
2532 [[xdate.date(date.mdy(10,7,1943) + time.hms(2,57,52)) / 86400], [131845.00]],
2533 [[xdate.date(date.mdy(3,17,1992) + time.hms(16,45,44)) / 86400], [149539.00]],
2534 [[xdate.date(date.mdy(2,25,1996) + time.hms(21,30,57)) / 86400], [150979.00]],
2535 [[xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400], [131107.00]],
2536 [[xdate.date(date.mdy(4,19,43) + time.hms(6,49,27)) / 86400], [131674.00]],
2537 [[xdate.date(date.mdy(10,7,43) + time.hms(2,57,52)) / 86400], [131845.00]],
2538 [[xdate.date(date.mdy(3,17,92) + time.hms(16,45,44)) / 86400], [149539.00]],
2539 [[xdate.date(date.mdy(2,25,96) + time.hms(21,30,57)) / 86400], [150979.00]],
2540 [[xdate.date(date.mdy(11,10,2038) + time.hms(22,30,4)) / 86400], [166578.00]],
2541 [[xdate.date(date.mdy(7,18,2094) + time.hms(1,56,51)) / 86400], [186917.00]],
2542 [[xdate.date(123.4)], [0.00]],
2543 [[xdate.date('')], [error],
2544 [error: DEBUG EVALUATE: Type mismatch invoking XDATE.DATE(number) as xdate.date(string).]],
2546 [[xdate.hour(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
2547 [[xdate.hour(date.mdy(6,30,1680) + time.hms(4,50,38))], [4.00]],
2548 [[xdate.hour(date.mdy(7,24,1716) + time.hms(12,31,35))], [12.00]],
2549 [[xdate.hour(date.mdy(6,19,1768) + time.hms(12,47,53))], [12.00]],
2550 [[xdate.hour(date.mdy(8,2,1819) + time.hms(1,26,0))], [1.00]],
2551 [[xdate.hour(date.mdy(3,27,1839) + time.hms(20,58,11))], [20.00]],
2552 [[xdate.hour(date.mdy(4,19,1903) + time.hms(7,36,5))], [7.00]],
2553 [[xdate.hour(date.mdy(8,25,1929) + time.hms(15,43,49))], [15.00]],
2554 [[xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9))], [4.00]],
2555 [[xdate.hour(date.mdy(4,19,1943) + time.hms(6,49,27))], [6.00]],
2556 [[xdate.hour(date.mdy(10,7,1943) + time.hms(2,57,52))], [2.00]],
2557 [[xdate.hour(date.mdy(3,17,1992) + time.hms(16,45,44))], [16.00]],
2558 [[xdate.hour(date.mdy(2,25,1996) + time.hms(21,30,57))], [21.00]],
2559 [[xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9))], [4.00]],
2560 [[xdate.hour(date.mdy(4,19,43) + time.hms(6,49,27))], [6.00]],
2561 [[xdate.hour(date.mdy(10,7,43) + time.hms(2,57,52))], [2.00]],
2562 [[xdate.hour(date.mdy(3,17,92) + time.hms(16,45,44))], [16.00]],
2563 [[xdate.hour(date.mdy(2,25,96) + time.hms(21,30,57))], [21.00]],
2564 [[xdate.hour(date.mdy(11,10,2038) + time.hms(22,30,4))], [22.00]],
2565 [[xdate.hour(date.mdy(7,18,2094) + time.hms(1,56,51))], [1.00]],
2566 [[xdate.hour(-1)], [-1.00]],
2567 [[xdate.hour(1)], [0.00]],
2568 [[xdate.hour($sysmis)], [sysmis]],
2569 [[xdate.hour('')], [error],
2570 [error: DEBUG EVALUATE: Type mismatch invoking XDATE.HOUR(number) as xdate.hour(string).]],
2572 [[xdate.jday(date.mdy(6,10,1648) + time.hms(0,0,0))], [162.00]],
2573 [[xdate.jday(date.mdy(6,30,1680) + time.hms(4,50,38))], [182.00]],
2574 [[xdate.jday(date.mdy(7,24,1716) + time.hms(12,31,35))], [206.00]],
2575 [[xdate.jday(date.mdy(6,19,1768) + time.hms(12,47,53))], [171.00]],
2576 [[xdate.jday(date.mdy(8,2,1819) + time.hms(1,26,0))], [214.00]],
2577 [[xdate.jday(date.mdy(3,27,1839) + time.hms(20,58,11))], [86.00]],
2578 [[xdate.jday(date.mdy(4,19,1903) + time.hms(7,36,5))], [109.00]],
2579 [[xdate.jday(date.mdy(8,25,1929) + time.hms(15,43,49))], [237.00]],
2580 [[xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9))], [272.00]],
2581 [[xdate.jday(date.mdy(4,19,1943) + time.hms(6,49,27))], [109.00]],
2582 [[xdate.jday(date.mdy(10,7,1943) + time.hms(2,57,52))], [280.00]],
2583 [[xdate.jday(date.mdy(3,17,1992) + time.hms(16,45,44))], [77.00]],
2584 [[xdate.jday(date.mdy(2,25,1996) + time.hms(21,30,57))], [56.00]],
2585 [[xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9))], [272.00]],
2586 [[xdate.jday(date.mdy(4,19,43) + time.hms(6,49,27))], [109.00]],
2587 [[xdate.jday(date.mdy(10,7,43) + time.hms(2,57,52))], [280.00]],
2588 [[xdate.jday(date.mdy(3,17,92) + time.hms(16,45,44))], [77.00]],
2589 [[xdate.jday(date.mdy(2,25,96) + time.hms(21,30,57))], [56.00]],
2590 [[xdate.jday(date.mdy(11,10,2038) + time.hms(22,30,4))], [314.00]],
2591 [[xdate.jday(date.mdy(7,18,2094) + time.hms(1,56,51))], [199.00]],
2592 [[xdate.jday(0)], [sysmis]],
2593 [[xdate.jday(1)], [sysmis]],
2594 [[xdate.jday(86400)], [288.00]],
2596 [[xdate.mday(date.mdy(6,10,1648) + time.hms(0,0,0))], [10.00]],
2597 [[xdate.mday(date.mdy(6,30,1680) + time.hms(4,50,38))], [30.00]],
2598 [[xdate.mday(date.mdy(7,24,1716) + time.hms(12,31,35))], [24.00]],
2599 [[xdate.mday(date.mdy(6,19,1768) + time.hms(12,47,53))], [19.00]],
2600 [[xdate.mday(date.mdy(8,2,1819) + time.hms(1,26,0))], [2.00]],
2601 [[xdate.mday(date.mdy(3,27,1839) + time.hms(20,58,11))], [27.00]],
2602 [[xdate.mday(date.mdy(4,19,1903) + time.hms(7,36,5))], [19.00]],
2603 [[xdate.mday(date.mdy(8,25,1929) + time.hms(15,43,49))], [25.00]],
2604 [[xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9))], [29.00]],
2605 [[xdate.mday(date.mdy(4,19,1943) + time.hms(6,49,27))], [19.00]],
2606 [[xdate.mday(date.mdy(10,7,1943) + time.hms(2,57,52))], [7.00]],
2607 [[xdate.mday(date.mdy(3,17,1992) + time.hms(16,45,44))], [17.00]],
2608 [[xdate.mday(date.mdy(2,25,1996) + time.hms(21,30,57))], [25.00]],
2609 [[xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9))], [29.00]],
2610 [[xdate.mday(date.mdy(4,19,43) + time.hms(6,49,27))], [19.00]],
2611 [[xdate.mday(date.mdy(10,7,43) + time.hms(2,57,52))], [7.00]],
2612 [[xdate.mday(date.mdy(3,17,92) + time.hms(16,45,44))], [17.00]],
2613 [[xdate.mday(date.mdy(2,25,96) + time.hms(21,30,57))], [25.00]],
2614 [[xdate.mday(date.mdy(11,10,2038) + time.hms(22,30,4))], [10.00]],
2615 [[xdate.mday(date.mdy(7,18,2094) + time.hms(1,56,51))], [18.00]],
2617 [[xdate.minute(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
2618 [[xdate.minute(date.mdy(6,30,1680) + time.hms(4,50,38))], [50.00]],
2619 [[xdate.minute(date.mdy(7,24,1716) + time.hms(12,31,35))], [31.00]],
2620 [[xdate.minute(date.mdy(6,19,1768) + time.hms(12,47,53))], [47.00]],
2621 [[xdate.minute(date.mdy(8,2,1819) + time.hms(1,26,0))], [26.00]],
2622 [[xdate.minute(date.mdy(3,27,1839) + time.hms(20,58,11))], [58.00]],
2623 [[xdate.minute(date.mdy(4,19,1903) + time.hms(7,36,5))], [36.00]],
2624 [[xdate.minute(date.mdy(8,25,1929) + time.hms(15,43,49))], [43.00]],
2625 [[xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9))], [25.00]],
2626 [[xdate.minute(date.mdy(4,19,1943) + time.hms(6,49,27))], [49.00]],
2627 [[xdate.minute(date.mdy(10,7,1943) + time.hms(2,57,52))], [57.00]],
2628 [[xdate.minute(date.mdy(3,17,1992) + time.hms(16,45,44))], [45.00]],
2629 [[xdate.minute(date.mdy(2,25,1996) + time.hms(21,30,57))], [30.00]],
2630 [[xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9))], [25.00]],
2631 [[xdate.minute(date.mdy(4,19,43) + time.hms(6,49,27))], [49.00]],
2632 [[xdate.minute(date.mdy(10,7,43) + time.hms(2,57,52))], [57.00]],
2633 [[xdate.minute(date.mdy(3,17,92) + time.hms(16,45,44))], [45.00]],
2634 [[xdate.minute(date.mdy(2,25,96) + time.hms(21,30,57))], [30.00]],
2635 [[xdate.minute(date.mdy(11,10,2038) + time.hms(22,30,4))], [30.00]],
2636 [[xdate.minute(date.mdy(7,18,2094) + time.hms(1,56,51))], [56.00]],
2638 [[xdate.month(date.mdy(6,10,1648) + time.hms(0,0,0))], [6.00]],
2639 [[xdate.month(date.mdy(6,30,1680) + time.hms(4,50,38))], [6.00]],
2640 [[xdate.month(date.mdy(7,24,1716) + time.hms(12,31,35))], [7.00]],
2641 [[xdate.month(date.mdy(6,19,1768) + time.hms(12,47,53))], [6.00]],
2642 [[xdate.month(date.mdy(8,2,1819) + time.hms(1,26,0))], [8.00]],
2643 [[xdate.month(date.mdy(3,27,1839) + time.hms(20,58,11))], [3.00]],
2644 [[xdate.month(date.mdy(4,19,1903) + time.hms(7,36,5))], [4.00]],
2645 [[xdate.month(date.mdy(8,25,1929) + time.hms(15,43,49))], [8.00]],
2646 [[xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
2647 [[xdate.month(date.mdy(4,19,1943) + time.hms(6,49,27))], [4.00]],
2648 [[xdate.month(date.mdy(10,7,1943) + time.hms(2,57,52))], [10.00]],
2649 [[xdate.month(date.mdy(3,17,1992) + time.hms(16,45,44))], [3.00]],
2650 [[xdate.month(date.mdy(2,25,1996) + time.hms(21,30,57))], [2.00]],
2651 [[xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
2652 [[xdate.month(date.mdy(4,19,43) + time.hms(6,49,27))], [4.00]],
2653 [[xdate.month(date.mdy(10,7,43) + time.hms(2,57,52))], [10.00]],
2654 [[xdate.month(date.mdy(3,17,92) + time.hms(16,45,44))], [3.00]],
2655 [[xdate.month(date.mdy(2,25,96) + time.hms(21,30,57))], [2.00]],
2656 [[xdate.month(date.mdy(11,10,2038) + time.hms(22,30,4))], [11.00]],
2657 [[xdate.month(date.mdy(7,18,2094) + time.hms(1,56,51))], [7.00]],
2659 [[xdate.quarter(date.mdy(6,10,1648) + time.hms(0,0,0))], [2.00]],
2660 [[xdate.quarter(date.mdy(6,30,1680) + time.hms(4,50,38))], [2.00]],
2661 [[xdate.quarter(date.mdy(7,24,1716) + time.hms(12,31,35))], [3.00]],
2662 [[xdate.quarter(date.mdy(6,19,1768) + time.hms(12,47,53))], [2.00]],
2663 [[xdate.quarter(date.mdy(8,2,1819) + time.hms(1,26,0))], [3.00]],
2664 [[xdate.quarter(date.mdy(3,27,1839) + time.hms(20,58,11))], [1.00]],
2665 [[xdate.quarter(date.mdy(4,19,1903) + time.hms(7,36,5))], [2.00]],
2666 [[xdate.quarter(date.mdy(8,25,1929) + time.hms(15,43,49))], [3.00]],
2667 [[xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9))], [3.00]],
2668 [[xdate.quarter(date.mdy(4,19,1943) + time.hms(6,49,27))], [2.00]],
2669 [[xdate.quarter(date.mdy(10,7,1943) + time.hms(2,57,52))], [4.00]],
2670 [[xdate.quarter(date.mdy(3,17,1992) + time.hms(16,45,44))], [1.00]],
2671 [[xdate.quarter(date.mdy(2,25,1996) + time.hms(21,30,57))], [1.00]],
2672 [[xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9))], [3.00]],
2673 [[xdate.quarter(date.mdy(4,19,43) + time.hms(6,49,27))], [2.00]],
2674 [[xdate.quarter(date.mdy(10,7,43) + time.hms(2,57,52))], [4.00]],
2675 [[xdate.quarter(date.mdy(3,17,92) + time.hms(16,45,44))], [1.00]],
2676 [[xdate.quarter(date.mdy(2,25,96) + time.hms(21,30,57))], [1.00]],
2677 [[xdate.quarter(date.mdy(11,10,2038) + time.hms(22,30,4))], [4.00]],
2678 [[xdate.quarter(date.mdy(7,18,2094) + time.hms(1,56,51))], [3.00]],
2680 [[xdate.second(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
2681 [[xdate.second(date.mdy(6,30,1680) + time.hms(4,50,38))], [38.00]],
2682 [[xdate.second(date.mdy(7,24,1716) + time.hms(12,31,35))], [35.00]],
2683 [[xdate.second(date.mdy(6,19,1768) + time.hms(12,47,53))], [53.00]],
2684 [[xdate.second(date.mdy(8,2,1819) + time.hms(1,26,0))], [0.00]],
2685 [[xdate.second(date.mdy(3,27,1839) + time.hms(20,58,11))], [11.00]],
2686 [[xdate.second(date.mdy(4,19,1903) + time.hms(7,36,5))], [5.00]],
2687 [[xdate.second(date.mdy(8,25,1929) + time.hms(15,43,49))], [49.00]],
2688 [[xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
2689 [[xdate.second(date.mdy(4,19,1943) + time.hms(6,49,27))], [27.00]],
2690 [[xdate.second(date.mdy(10,7,1943) + time.hms(2,57,52))], [52.00]],
2691 [[xdate.second(date.mdy(3,17,1992) + time.hms(16,45,44))], [44.00]],
2692 [[xdate.second(date.mdy(2,25,1996) + time.hms(21,30,57))], [57.00]],
2693 [[xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
2694 [[xdate.second(date.mdy(4,19,43) + time.hms(6,49,27))], [27.00]],
2695 [[xdate.second(date.mdy(10,7,43) + time.hms(2,57,52))], [52.00]],
2696 [[xdate.second(date.mdy(3,17,92) + time.hms(16,45,44))], [44.00]],
2697 [[xdate.second(date.mdy(2,25,96) + time.hms(21,30,57))], [57.00]],
2698 [[xdate.second(date.mdy(11,10,2038) + time.hms(22,30,4))], [4.00]],
2699 [[xdate.second(date.mdy(7,18,2094) + time.hms(1,56,51))], [51.00]],
2701 [[xdate.tday(date.mdy(6,10,1648) + time.hms(0,0,0))], [23981.00]],
2702 [[xdate.tday(date.mdy(6,30,1680) + time.hms(4,50,38))], [35689.00]],
2703 [[xdate.tday(date.mdy(7,24,1716) + time.hms(12,31,35))], [48861.00]],
2704 [[xdate.tday(date.mdy(6,19,1768) + time.hms(12,47,53))], [67819.00]],
2705 [[xdate.tday(date.mdy(8,2,1819) + time.hms(1,26,0))], [86489.00]],
2706 [[xdate.tday(date.mdy(3,27,1839) + time.hms(20,58,11))], [93666.00]],
2707 [[xdate.tday(date.mdy(4,19,1903) + time.hms(7,36,5))], [117064.00]],
2708 [[xdate.tday(date.mdy(8,25,1929) + time.hms(15,43,49))], [126689.00]],
2709 [[xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9))], [131107.00]],
2710 [[xdate.tday(date.mdy(4,19,1943) + time.hms(6,49,27))], [131674.00]],
2711 [[xdate.tday(date.mdy(10,7,1943) + time.hms(2,57,52))], [131845.00]],
2712 [[xdate.tday(date.mdy(3,17,1992) + time.hms(16,45,44))], [149539.00]],
2713 [[xdate.tday(date.mdy(2,25,1996) + time.hms(21,30,57))], [150979.00]],
2714 [[xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9))], [131107.00]],
2715 [[xdate.tday(date.mdy(4,19,43) + time.hms(6,49,27))], [131674.00]],
2716 [[xdate.tday(date.mdy(10,7,43) + time.hms(2,57,52))], [131845.00]],
2717 [[xdate.tday(date.mdy(3,17,92) + time.hms(16,45,44))], [149539.00]],
2718 [[xdate.tday(date.mdy(2,25,96) + time.hms(21,30,57))], [150979.00]],
2719 [[xdate.tday(date.mdy(11,10,2038) + time.hms(22,30,4))], [166578.00]],
2720 [[xdate.tday(date.mdy(7,18,2094) + time.hms(1,56,51))], [186917.00]],
2722 [[xdate.time(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
2723 [[xdate.time(date.mdy(6,30,1680) + time.hms(4,50,38))], [17438.00]],
2724 [[xdate.time(date.mdy(7,24,1716) + time.hms(12,31,35))], [45095.00]],
2725 [[xdate.time(date.mdy(6,19,1768) + time.hms(12,47,53))], [46073.00]],
2726 [[xdate.time(date.mdy(8,2,1819) + time.hms(1,26,0))], [5160.00]],
2727 [[xdate.time(date.mdy(3,27,1839) + time.hms(20,58,11))], [75491.00]],
2728 [[xdate.time(date.mdy(4,19,1903) + time.hms(7,36,5))], [27365.00]],
2729 [[xdate.time(date.mdy(8,25,1929) + time.hms(15,43,49))], [56629.00]],
2730 [[xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9))], [15909.00]],
2731 [[xdate.time(date.mdy(4,19,1943) + time.hms(6,49,27))], [24567.00]],
2732 [[xdate.time(date.mdy(10,7,1943) + time.hms(2,57,52))], [10672.00]],
2733 [[xdate.time(date.mdy(3,17,1992) + time.hms(16,45,44))], [60344.00]],
2734 [[xdate.time(date.mdy(2,25,1996) + time.hms(21,30,57))], [77457.00]],
2735 [[xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9))], [15909.00]],
2736 [[xdate.time(date.mdy(4,19,43) + time.hms(6,49,27))], [24567.00]],
2737 [[xdate.time(date.mdy(10,7,43) + time.hms(2,57,52))], [10672.00]],
2738 [[xdate.time(date.mdy(3,17,92) + time.hms(16,45,44))], [60344.00]],
2739 [[xdate.time(date.mdy(2,25,96) + time.hms(21,30,57))], [77457.00]],
2740 [[xdate.time(date.mdy(11,10,2038) + time.hms(22,30,4))], [81004.00]],
2741 [[xdate.time(date.mdy(7,18,2094) + time.hms(1,56,51))], [7011.00]],
2743 [[xdate.week(date.mdy(6,10,1648) + time.hms(0,0,0))], [24.00]],
2744 [[xdate.week(date.mdy(6,30,1680) + time.hms(4,50,38))], [26.00]],
2745 [[xdate.week(date.mdy(7,24,1716) + time.hms(12,31,35))], [30.00]],
2746 [[xdate.week(date.mdy(6,19,1768) + time.hms(12,47,53))], [25.00]],
2747 [[xdate.week(date.mdy(8,2,1819) + time.hms(1,26,0))], [31.00]],
2748 [[xdate.week(date.mdy(3,27,1839) + time.hms(20,58,11))], [13.00]],
2749 [[xdate.week(date.mdy(4,19,1903) + time.hms(7,36,5))], [16.00]],
2750 [[xdate.week(date.mdy(8,25,1929) + time.hms(15,43,49))], [34.00]],
2751 [[xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9))], [39.00]],
2752 [[xdate.week(date.mdy(4,19,1943) + time.hms(6,49,27))], [16.00]],
2753 [[xdate.week(date.mdy(10,7,1943) + time.hms(2,57,52))], [40.00]],
2754 [[xdate.week(date.mdy(3,17,1992) + time.hms(16,45,44))], [11.00]],
2755 [[xdate.week(date.mdy(2,25,1996) + time.hms(21,30,57))], [8.00]],
2756 [[xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9))], [39.00]],
2757 [[xdate.week(date.mdy(4,19,43) + time.hms(6,49,27))], [16.00]],
2758 [[xdate.week(date.mdy(10,7,43) + time.hms(2,57,52))], [40.00]],
2759 [[xdate.week(date.mdy(3,17,92) + time.hms(16,45,44))], [11.00]],
2760 [[xdate.week(date.mdy(2,25,96) + time.hms(21,30,57))], [8.00]],
2761 [[xdate.week(date.mdy(11,10,2038) + time.hms(22,30,4))], [45.00]],
2762 [[xdate.week(date.mdy(7,18,2094) + time.hms(1,56,51))], [29.00]],
2764 [[xdate.wkday(date.mdy(6,10,1648))], [4.00]],
2765 [[xdate.wkday(date.mdy(6,30,1680))], [1.00]],
2766 [[xdate.wkday(date.mdy(7,24,1716))], [6.00]],
2767 [[xdate.wkday(date.mdy(6,19,1768))], [1.00]],
2768 [[xdate.wkday(date.mdy(8,2,1819))], [2.00]],
2769 [[xdate.wkday(date.mdy(3,27,1839))], [4.00]],
2770 [[xdate.wkday(date.mdy(4,19,1903))], [1.00]],
2771 [[xdate.wkday(date.mdy(8,25,1929))], [1.00]],
2772 [[xdate.wkday(date.mdy(9,29,1941))], [2.00]],
2773 [[xdate.wkday(date.mdy(4,19,1943))], [2.00]],
2774 [[xdate.wkday(date.mdy(10,7,1943))], [5.00]],
2775 [[xdate.wkday(date.mdy(3,17,1992))], [3.00]],
2776 [[xdate.wkday(date.mdy(2,25,1996))], [1.00]],
2777 [[xdate.wkday(date.mdy(9,29,1941))], [2.00]],
2778 [[xdate.wkday(date.mdy(4,19,43))], [2.00]],
2779 [[xdate.wkday(date.mdy(10,7,43))], [5.00]],
2780 [[xdate.wkday(date.mdy(3,17,92))], [3.00]],
2781 [[xdate.wkday(date.mdy(2,25,96))], [1.00]],
2782 [[xdate.wkday(date.mdy(11,10,2038))], [4.00]],
2783 [[xdate.wkday(date.mdy(7,18,2094))], [1.00]],
2785 [[xdate.year(date.mdy(6,10,1648) + time.hms(0,0,0))], [1648.00]],
2786 [[xdate.year(date.mdy(6,30,1680) + time.hms(4,50,38))], [1680.00]],
2787 [[xdate.year(date.mdy(7,24,1716) + time.hms(12,31,35))], [1716.00]],
2788 [[xdate.year(date.mdy(6,19,1768) + time.hms(12,47,53))], [1768.00]],
2789 [[xdate.year(date.mdy(8,2,1819) + time.hms(1,26,0))], [1819.00]],
2790 [[xdate.year(date.mdy(3,27,1839) + time.hms(20,58,11))], [1839.00]],
2791 [[xdate.year(date.mdy(4,19,1903) + time.hms(7,36,5))], [1903.00]],
2792 [[xdate.year(date.mdy(8,25,1929) + time.hms(15,43,49))], [1929.00]],
2793 [[xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9))], [1941.00]],
2794 [[xdate.year(date.mdy(4,19,1943) + time.hms(6,49,27))], [1943.00]],
2795 [[xdate.year(date.mdy(10,7,1943) + time.hms(2,57,52))], [1943.00]],
2796 [[xdate.year(date.mdy(3,17,1992) + time.hms(16,45,44))], [1992.00]],
2797 [[xdate.year(date.mdy(2,25,1996) + time.hms(21,30,57))], [1996.00]],
2798 [[xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9))], [1941.00]],
2799 [[xdate.year(date.mdy(4,19,43) + time.hms(6,49,27))], [1943.00]],
2800 [[xdate.year(date.mdy(10,7,43) + time.hms(2,57,52))], [1943.00]],
2801 [[xdate.year(date.mdy(3,17,92) + time.hms(16,45,44))], [1992.00]],
2802 [[xdate.year(date.mdy(2,25,96) + time.hms(21,30,57))], [1996.00]],
2803 [[xdate.year(date.mdy(11,10,2038) + time.hms(22,30,4))], [2038.00]],
2804 [[xdate.year(date.mdy(7,18,2094) + time.hms(1,56,51))], [2094.00]])
2806 CHECK_EXPR_EVAL([datediff],
2807 [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'years')], [-32.00]],
2808 [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'years')], [-36.00]],
2809 [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'years')], [-51.00]],
2810 [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'years')], [-51.00]],
2811 [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'years')], [-19.00]],
2812 [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'years')], [-64.00]],
2813 [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'years')], [-26.00]],
2814 [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'years')], [-12.00]],
2815 [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'years')], [-1.00]],
2816 [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'years')], [0.00]],
2817 [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'years')], [-48.00]],
2818 [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'years')], [-3.00]],
2819 [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'years')], [-54.00]],
2820 [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'years')], [-1.00]],
2821 [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'years')], [0.00]],
2822 [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'years')], [-48.00]],
2823 [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'years')], [-3.00]],
2824 [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'years')], [-42.00]],
2825 [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'years')], [-55.00]],
2826 [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'years')], [-3.00]],
2827 [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'years')], [-4.00]],
2828 [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'years')], [-2.00]],
2830 [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'quarters')], [-128.00]],
2831 [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'quarters')], [-144.00]],
2832 [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'quarters')], [-207.00]],
2833 [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'quarters')], [-204.00]],
2834 [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'quarters')], [-78.00]],
2835 [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'quarters')], [-256.00]],
2836 [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'quarters')], [-105.00]],
2837 [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'quarters')], [-48.00]],
2838 [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'quarters')], [-6.00]],
2839 [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'quarters')], [-1.00]],
2840 [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'quarters')], [-193.00]],
2841 [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'quarters')], [-15.00]],
2842 [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'quarters')], [-217.00]],
2843 [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'quarters')], [-6.00]],
2844 [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'quarters')], [-1.00]],
2845 [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'quarters')], [-193.00]],
2846 [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'quarters')], [-15.00]],
2847 [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'quarters')], [-170.00]],
2848 [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'quarters')], [-222.00]],
2849 [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'quarters')], [-15.00]],
2850 [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'quarters')], [-16.00]],
2851 [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'quarters')], [-11.00]],
2853 [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'months')], [-384.00]],
2854 [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'months')], [-432.00]],
2855 [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'months')], [-622.00]],
2856 [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'months')], [-613.00]],
2857 [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'months')], [-235.00]],
2858 [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'months')], [-768.00]],
2859 [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'months')], [-316.00]],
2860 [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'months')], [-145.00]],
2861 [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'months')], [-18.00]],
2862 [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'months')], [-5.00]],
2863 [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'months')], [-581.00]],
2864 [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'months')], [-47.00]],
2865 [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'months')], [-652.00]],
2866 [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'months')], [-18.00]],
2867 [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'months')], [-5.00]],
2868 [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'months')], [-581.00]],
2869 [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'months')], [-47.00]],
2870 [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'months')], [-512.00]],
2871 [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'months')], [-668.00]],
2872 [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'months')], [-47.00]],
2873 [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'months')], [-48.00]],
2874 [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'months')], [-35.00]],
2876 [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'weeks')], [-1672.00]],
2877 [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'weeks')], [-1881.00]],
2878 [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'weeks')], [-2708.00]],
2879 [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'weeks')], [-2667.00]],
2880 [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'weeks')], [-1025.00]],
2881 [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'weeks')], [-3342.00]],
2882 [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'weeks')], [-1375.00]],
2883 [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'weeks')], [-631.00]],
2884 [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'weeks')], [-81.00]],
2885 [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'weeks')], [-24.00]],
2886 [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'weeks')], [-2527.00]],
2887 [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'weeks')], [-205.00]],
2888 [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'weeks')], [-2838.00]],
2889 [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'weeks')], [-81.00]],
2890 [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'weeks')], [-24.00]],
2891 [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'weeks')], [-2527.00]],
2892 [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'weeks')], [-205.00]],
2893 [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'weeks')], [-2228.00]],
2894 [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'weeks')], [-2905.00]],
2895 [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'weeks')], [-208.00]],
2896 [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'weeks')], [-208.00]],
2897 [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'weeks')], [-156.00]],
2899 [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'days')], [-11708.00]],
2900 [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'days')], [-13172.00]],
2901 [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'days')], [-18958.00]],
2902 [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'days')], [-18670.00]],
2903 [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'days')], [-7177.00]],
2904 [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'days')], [-23398.00]],
2905 [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'days')], [-9625.00]],
2906 [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'days')], [-4418.00]],
2907 [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'days')], [-567.00]],
2908 [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'days')], [-171.00]],
2909 [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'days')], [-17694.00]],
2910 [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'days')], [-1440.00]],
2911 [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'days')], [-19872.00]],
2912 [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'days')], [-567.00]],
2913 [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'days')], [-171.00]],
2914 [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'days')], [-17694.00]],
2915 [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'days')], [-1440.00]],
2916 [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'days')], [-15599.00]],
2917 [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'days')], [-20339.00]],
2918 [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'days')], [-1460.00]],
2919 [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'days')], [-1461.00]],
2920 [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'days')], [-1094.00]],
2922 [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'years')], [32.00]],
2923 [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'years')], [36.00]],
2924 [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'years')], [51.00]],
2925 [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'years')], [51.00]],
2926 [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'years')], [19.00]],
2927 [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'years')], [64.00]],
2928 [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'years')], [26.00]],
2929 [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'years')], [12.00]],
2930 [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'years')], [1.00]],
2931 [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'years')], [0.00]],
2932 [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'years')], [48.00]],
2933 [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'years')], [3.00]],
2934 [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'years')], [54.00]],
2935 [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'years')], [1.00]],
2936 [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'years')], [0.00]],
2937 [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'years')], [48.00]],
2938 [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'years')], [3.00]],
2939 [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'years')], [42.00]],
2940 [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'years')], [55.00]],
2941 [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'years')], [3.00]],
2942 [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'years')], [4.00]],
2943 [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'years')], [2.00]],
2945 [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'months')], [384.00]],
2946 [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'months')], [432.00]],
2947 [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'months')], [622.00]],
2948 [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'months')], [613.00]],
2949 [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'months')], [235.00]],
2950 [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'months')], [768.00]],
2951 [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'months')], [316.00]],
2952 [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'months')], [145.00]],
2953 [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'months')], [18.00]],
2954 [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'months')], [5.00]],
2955 [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'months')], [581.00]],
2956 [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'months')], [47.00]],
2957 [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'months')], [652.00]],
2958 [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'months')], [18.00]],
2959 [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'months')], [5.00]],
2960 [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'months')], [581.00]],
2961 [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'months')], [47.00]],
2962 [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'months')], [512.00]],
2963 [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'months')], [668.00]],
2964 [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'months')], [47.00]],
2965 [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'months')], [48.00]],
2966 [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'months')], [35.00]],
2968 [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'quarters')], [128.00]],
2969 [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'quarters')], [144.00]],
2970 [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'quarters')], [207.00]],
2971 [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'quarters')], [204.00]],
2972 [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'quarters')], [78.00]],
2973 [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'quarters')], [256.00]],
2974 [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'quarters')], [105.00]],
2975 [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'quarters')], [48.00]],
2976 [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'quarters')], [6.00]],
2977 [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'quarters')], [1.00]],
2978 [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'quarters')], [193.00]],
2979 [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'quarters')], [15.00]],
2980 [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'quarters')], [217.00]],
2981 [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'quarters')], [6.00]],
2982 [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'quarters')], [1.00]],
2983 [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'quarters')], [193.00]],
2984 [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'quarters')], [15.00]],
2985 [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'quarters')], [170.00]],
2986 [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'quarters')], [222.00]],
2987 [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'quarters')], [15.00]],
2988 [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'quarters')], [16.00]],
2989 [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'quarters')], [11.00]],
2991 dnl time of day is significant for DATEDIFF
2992 [[datediff(date.mdy(10,15,1910) + 234, date.mdy(10,10,1910) + 123, 'days')],
2994 [[datediff(date.mdy(10,15,1910) + 123, date.mdy(10,10,1910) + 234, 'days')],
2996 [[datediff(date.mdy(10,24,1910) + 234, date.mdy(10,10,1910) + 123, 'weeks')],
2998 [[datediff(date.mdy(10,24,1910) + 123, date.mdy(10,10,1910) + 234, 'weeks')],
3000 [[datediff(date.mdy(10,10,1910) + 234, date.mdy(5,10,1910) + 123, 'months')],
3002 [[datediff(date.mdy(10,10,1910) + 123, date.mdy(5,10,1910) + 234, 'months')],
3004 [[datediff(date.mdy(5,10,1919) + 234, date.mdy(5,10,1910) + 123, 'years')],
3006 [[datediff(date.mdy(5,10,1919) + 123, date.mdy(5,10,1910) + 234, 'years')],
3009 [[datediff(date.mdy(10,10,1910) + 123, date.mdy(10,15,1910) + 234, 'days')],
3011 [[datediff(date.mdy(10,10,1910) + 234, date.mdy(10,15,1910) + 123, 'days')],
3013 [[datediff(date.mdy(10,10,1910) + 123, date.mdy(10,24,1910) + 234, 'weeks')],
3015 [[datediff(date.mdy(10,10,1910) + 234, date.mdy(10,24,1910) + 123, 'weeks')],
3017 [[datediff(date.mdy(5,10,1910) + 123, date.mdy(10,10,1910) + 234, 'months')],
3019 [[datediff(date.mdy(5,10,1910) + 234, date.mdy(10,10,1910) + 123, 'months')],
3021 [[datediff(date.mdy(5,10,1910) + 123, date.mdy(5,10,1919) + 234, 'years')],
3023 [[datediff(date.mdy(5,10,1910) + 234, date.mdy(5,10,1919) + 123, 'years')],
3026 CHECK_EXPR_EVAL([datesum],
3027 dnl DATESUM with non-leap year
3028 [[ctime.days(datesum(date.mdy(1,31,1900), 1, 'months') - date.mdy(1,1,1900))], [58.00]],
3029 [[ctime.days(datesum(date.mdy(1,31,1900), 2, 'months') - date.mdy(1,1,1900))], [89.00]],
3030 [[ctime.days(datesum(date.mdy(1,31,1900), 3, 'months') - date.mdy(1,1,1900))], [119.00]],
3031 [[ctime.days(datesum(date.mdy(1,31,1900), 4, 'months') - date.mdy(1,1,1900))], [150.00]],
3032 [[ctime.days(datesum(date.mdy(1,31,1900), 5.4, 'months') - date.mdy(1,1,1900))], [180.00]],
3033 [[ctime.days(datesum(date.mdy(1,31,1900), 6, 'months') - date.mdy(1,1,1900))], [211.00]],
3034 [[ctime.days(datesum(date.mdy(1,31,1900), 7, 'months') - date.mdy(1,1,1900))], [242.00]],
3035 [[ctime.days(datesum(date.mdy(1,31,1900), 8, 'months') - date.mdy(1,1,1900))], [272.00]],
3036 [[ctime.days(datesum(date.mdy(1,31,1900), 9, 'months') - date.mdy(1,1,1900))], [303.00]],
3037 [[ctime.days(datesum(date.mdy(1,31,1900), 10, 'months') - date.mdy(1,1,1900))], [333.00]],
3038 [[ctime.days(datesum(date.mdy(1,31,1900), 11, 'months') - date.mdy(1,1,1900))], [364.00]],
3039 [[ctime.days(datesum(date.mdy(1,31,1900), 12, 'months') - date.mdy(1,1,1900))], [395.00]],
3040 [[ctime.days(datesum(date.mdy(1,31,1900), 13.9, 'months') - date.mdy(1,1,1900))], [423.00]],
3041 [[ctime.days(datesum(date.mdy(1,31,1900), 1, 'months', 'rollover') - date.mdy(1,1,1900))], [61.00]],
3042 [[ctime.days(datesum(date.mdy(1,31,1900), 2, 'months', 'rollover') - date.mdy(1,1,1900))], [89.00]],
3043 [[ctime.days(datesum(date.mdy(1,31,1900), 3.2, 'months', 'rollover') - date.mdy(1,1,1900))], [120.00]],
3044 [[ctime.days(datesum(date.mdy(1,31,1900), 4, 'months', 'rollover') - date.mdy(1,1,1900))], [150.00]],
3045 [[ctime.days(datesum(date.mdy(1,31,1900), 5, 'months', 'rollover') - date.mdy(1,1,1900))], [181.00]],
3046 [[ctime.days(datesum(date.mdy(1,31,1900), 6, 'months', 'rollover') - date.mdy(1,1,1900))], [211.00]],
3047 [[ctime.days(datesum(date.mdy(1,31,1900), 7, 'months', 'rollover') - date.mdy(1,1,1900))], [242.00]],
3048 [[ctime.days(datesum(date.mdy(1,31,1900), 8, 'months', 'rollover') - date.mdy(1,1,1900))], [273.00]],
3049 [[ctime.days(datesum(date.mdy(1,31,1900), 9, 'months', 'rollover') - date.mdy(1,1,1900))], [303.00]],
3050 [[ctime.days(datesum(date.mdy(1,31,1900), 10, 'months', 'rollover') - date.mdy(1,1,1900))], [334.00]],
3051 [[ctime.days(datesum(date.mdy(1,31,1900), 11, 'months', 'rollover') - date.mdy(1,1,1900))], [364.00]],
3052 [[ctime.days(datesum(date.mdy(1,31,1900), 12, 'months', 'rollover') - date.mdy(1,1,1900))], [395.00]],
3053 [[ctime.days(datesum(date.mdy(1,31,1900), 13, 'months', 'rollover') - date.mdy(1,1,1900))], [426.00]],
3055 dnl DATESUM with leap year
3056 [[ctime.days(datesum(date.mdy(1,31,1904), 1, 'months') - date.mdy(1,1,1904))], [59.00]],
3057 [[ctime.days(datesum(date.mdy(1,31,1904), 2.5, 'months') - date.mdy(1,1,1904))], [90.00]],
3058 [[ctime.days(datesum(date.mdy(1,31,1904), 3, 'months') - date.mdy(1,1,1904))], [120.00]],
3059 [[ctime.days(datesum(date.mdy(1,31,1904), 4.9, 'months') - date.mdy(1,1,1904))], [151.00]],
3060 [[ctime.days(datesum(date.mdy(1,31,1904), 5.1, 'months') - date.mdy(1,1,1904))], [181.00]],
3061 [[ctime.days(datesum(date.mdy(1,31,1904), 6, 'months') - date.mdy(1,1,1904))], [212.00]],
3062 [[ctime.days(datesum(date.mdy(1,31,1904), 7, 'months') - date.mdy(1,1,1904))], [243.00]],
3063 [[ctime.days(datesum(date.mdy(1,31,1904), 8, 'months') - date.mdy(1,1,1904))], [273.00]],
3064 [[ctime.days(datesum(date.mdy(1,31,1904), 9, 'months') - date.mdy(1,1,1904))], [304.00]],
3065 [[ctime.days(datesum(date.mdy(1,31,1904), 10, 'months') - date.mdy(1,1,1904))], [334.00]],
3066 [[ctime.days(datesum(date.mdy(1,31,1904), 11, 'months') - date.mdy(1,1,1904))], [365.00]],
3067 [[ctime.days(datesum(date.mdy(1,31,1904), 12, 'months') - date.mdy(1,1,1904))], [396.00]],
3068 [[ctime.days(datesum(date.mdy(1,31,1904), 13, 'months') - date.mdy(1,1,1904))], [424.00]],
3069 [[ctime.days(datesum(date.mdy(1,31,1904), 1, 'months', 'rollover') - date.mdy(1,1,1904))], [61.00]],
3070 [[ctime.days(datesum(date.mdy(1,31,1904), 2, 'months', 'rollover') - date.mdy(1,1,1904))], [90.00]],
3071 [[ctime.days(datesum(date.mdy(1,31,1904), 3, 'months', 'rollover') - date.mdy(1,1,1904))], [121.00]],
3072 [[ctime.days(datesum(date.mdy(1,31,1904), 4, 'months', 'rollover') - date.mdy(1,1,1904))], [151.00]],
3073 [[ctime.days(datesum(date.mdy(1,31,1904), 5, 'months', 'rollover') - date.mdy(1,1,1904))], [182.00]],
3074 [[ctime.days(datesum(date.mdy(1,31,1904), 6, 'months', 'rollover') - date.mdy(1,1,1904))], [212.00]],
3075 [[ctime.days(datesum(date.mdy(1,31,1904), 7, 'months', 'rollover') - date.mdy(1,1,1904))], [243.00]],
3076 [[ctime.days(datesum(date.mdy(1,31,1904), 8, 'months', 'rollover') - date.mdy(1,1,1904))], [274.00]],
3077 [[ctime.days(datesum(date.mdy(1,31,1904), 9, 'months', 'rollover') - date.mdy(1,1,1904))], [304.00]],
3078 [[ctime.days(datesum(date.mdy(1,31,1904), 10, 'months', 'rollover') - date.mdy(1,1,1904))], [335.00]],
3079 [[ctime.days(datesum(date.mdy(1,31,1904), 11, 'months', 'rollover') - date.mdy(1,1,1904))], [365.00]],
3080 [[ctime.days(datesum(date.mdy(1,31,1904), 12, 'months', 'rollover') - date.mdy(1,1,1904))], [396.00]],
3081 [[ctime.days(datesum(date.mdy(1,31,1904), 13, 'months', 'rollover') - date.mdy(1,1,1904))], [427.00]],
3083 [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'weeks') - date.mdy(6,10,1648))], [7.00]],
3084 [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'weeks') - date.mdy(6,30,1680))], [17.50]],
3085 [[ctime.days(datesum(date.mdy(7,24,1716), -3, 'weeks') - date.mdy(7,24,1716))], [-21.00]],
3086 [[ctime.days(datesum(date.mdy(6,19,1768), 4, 'weeks') - date.mdy(6,19,1768))], [28.00]],
3087 [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'weeks') - date.mdy(8,2,1819))], [35.00]],
3089 [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'days') - date.mdy(6,10,1648))], [1.00]],
3090 [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'days') - date.mdy(6,30,1680))], [2.50]],
3091 [[ctime.days(datesum(date.mdy(7,24,1716), -3, 'days') - date.mdy(7,24,1716))], [-3.00]],
3092 [[ctime.days(datesum(date.mdy(6,19,1768), 4, 'days') - date.mdy(6,19,1768))], [4.00]],
3093 [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'days') - date.mdy(8,2,1819))], [5.00]],
3094 [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'hours') - date.mdy(6,10,1648))], [0.04]],
3095 [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'hours') - date.mdy(6,30,1680))], [0.10]],
3096 [[ctime.days(datesum(date.mdy(6,19,1768), -4, 'hours') - date.mdy(6,19,1768))], [-0.17]],
3097 [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'hours') - date.mdy(8,2,1819))], [0.21]],
3099 dnl DATESUM preserves time-of-day for units of days and longer.
3100 [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'days') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [5.00]],
3101 [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'weeks') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [35.00]],
3102 [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'months') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [153.00]],
3103 [[ctime.days(datesum(date.mdy(8,2,1819) + time.hms(1,2,3), 5, 'years') - (date.mdy(8,2,1819) + time.hms(1,2,3)))], [1827.00]])
3105 CHECK_EXPR_EVAL([miscellaneous],
3106 dnl These test values are from Applied Statistics, Algorithm AS 310.
3107 [[1000 * ncdf.beta(.868,10,20,150)], [937.66]],
3108 [[1000 * ncdf.beta(.9,10,10,120)], [730.68]],
3109 [[1000 * ncdf.beta(.88,15,5,80)], [160.43]],
3110 [[1000 * ncdf.beta(.85,20,10,110)], [186.75]],
3111 [[1000 * ncdf.beta(.66,20,30,65)], [655.94]],
3112 [[1000 * ncdf.beta(.72,20,50,130)], [979.69]],
3113 [[1000 * ncdf.beta(.72,30,20,80)], [116.24]],
3114 [[1000 * ncdf.beta(.8,30,40,130)], [993.04]],
3118 [[X], [1.00], [], [(X = 1.00)]],
3119 [[SYSMIS(1)], [false]],
3120 [[SYSMIS($SYSMIS)], [true]],
3121 [[SYSMIS(1 + $SYSMIS)], [true]],
3123 dnl FIXME: out-of-range and nearly out-of-range values on dates
3125 dnl Tests correctness of generic optimizations in optimize_tree().
3126 [[x + 0], [10.00], [], [(X = 10.00)]],
3127 [[x - 0], [-3.00], [], [(X = -3.00)]],
3128 [[0 + x], [5.00], [], [(X = 5.00)]],
3129 [[x * 1], [10.00], [], [(X = 10.00)]],
3130 [[1 * x], [-3.00], [], [(X = -3.00)]],
3131 [[x / 1], [5.00], [], [(X = 5.00)]],
3132 [[0 * x], [0.00], [], [(X = 10.00)]],
3133 [[x * 0], [0.00], [], [(X = -3.00)]],
3134 [[0 / x], [0.00], [], [(X = 5.00)]],
3135 [[mod(0, x)], [0.00], [], [(X = 5.00)]],
3136 [[x ** 1], [5.00], [], [(X = 5.00)]],
3137 [[x ** 2], [25.00], [], [(X = 5.00)]])
3139 CHECK_EXPR_EVAL([negative checks],
3140 [[$nonexistent], [error], [error: DEBUG EVALUATE: Unknown system variable $nonexistent.]],
3141 [[RANGE(1, 2)], [error], [error: DEBUG EVALUATE: RANGE(number, number, number[, number, number]...) must have an odd number of arguments.]],
3142 [[CONCAT.1('a', 'b')], [error], [error: DEBUG EVALUATE: CONCAT(string[, string]...) function cannot accept suffix .1 to specify the minimum number of valid arguments.]],
3143 [[foobar(x)], [error], [error: DEBUG EVALUATE: No function or vector named foobar.]],
3144 [[CONCAT.1('a' b)], [error], [error: DEBUG EVALUATE: Syntax error at `b': expecting `,' or `)'.]],
3145 [[NCDF.CHISQ(1, 2, 3)], [error], [error: DEBUG EVALUATE: NCDF.CHISQ(number, number, number) is not available in this version of PSPP.]])
3147 AT_SETUP([LAG function])
3148 AT_DATA([lag.sps], [dnl
3163 AT_CHECK([pspp -o pspp.csv lag.sps])
3164 AT_CHECK([cat pspp.csv], [0], [dnl
3165 Table: Reading 1 record from INLINE.
3166 Variable,Record,Columns,Format
3179 AT_SETUP([LAG crash bug])
3180 AT_DATA([lag.sps], [dnl
3187 DO IF (x <> LAG(x) ).
3193 AT_CHECK([pspp -o pspp.csv lag.sps])
3194 AT_CHECK([cat pspp.csv], [0], [dnl
3195 Table: Reading free-form data from INLINE.
3203 dnl Tests for a bug which caused UNIFORM(x) to always return zero.
3204 AT_SETUP([UNIFORM function])
3205 AT_DATA([uniform.sps], [dnl
3208 + loop #i = 1 to 20.
3209 + do repeat response=R1.
3210 + compute response = uniform(10).
3219 AT_CHECK([pspp -o pspp.csv uniform.sps])
3220 AT_CHECK([cat pspp.csv], [0], [dnl
3246 AT_SETUP([VALUELABEL function])
3247 AT_DATA([valuelabel.sps], [dnl
3248 DATA LIST notable /n 1 s 2(a).
3249 VALUE LABELS /n 0 'Very dissatisfied'
3251 1.5 'Slightly Peeved'
3255 VALUE LABELS /s 'a' 'Wouldn''t buy again'
3260 STRING nlabel slabel(a10).
3261 COMPUTE nlabel = VALUELABEL(n).
3262 COMPUTE slabel = VALUELABEL(s).
3275 AT_CHECK([pspp -o pspp.csv valuelabel.sps])
3276 AT_CHECK([cat pspp.csv], [0], [dnl
3280 0,a,Very dissa,Wouldn't b
3281 1,b,Dissatisfi,Unhappy
3283 3,d,Satisfied,Satiated
3284 4,e,Very satis,Elated
3290 AT_SETUP([variables in expressions])
3291 AT_DATA([variables.sps], [dnl
3292 DATA LIST NOTABLE/N1 TO N5 1-5.
3293 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
3305 COMPUTE MC=NMISS(N1 TO N5).
3306 COMPUTE VC=NVALID(N1 TO N5).
3308 COMPUTE S1=SYSMIS(N1).
3309 COMPUTE S2=SYSMIS(N2).
3310 COMPUTE S3=SYSMIS(N3).
3311 COMPUTE S4=SYSMIS(N4).
3312 COMPUTE S5=SYSMIS(N5).
3314 COMPUTE M1=MISSING(N1).
3315 COMPUTE M2=MISSING(N2).
3316 COMPUTE M3=MISSING(N3).
3317 COMPUTE M4=MISSING(N4).
3318 COMPUTE M5=MISSING(N5).
3320 COMPUTE V1=VALUE(N1).
3321 COMPUTE V2=VALUE(N2).
3322 COMPUTE V3=VALUE(N3).
3323 COMPUTE V4=VALUE(N4).
3324 COMPUTE V5=VALUE(N5).
3330 AT_CHECK([pspp -o pspp.csv variables.sps])
3331 AT_CHECK([cat pspp.csv], [0], [dnl
3333 N1,N2,N3,N4,N5,P1,P2,P3,P4,P5,MC,VC,S1,S2,S3,S4,S5,M1,M2,M3,M4,M5,V1,V2,V3,V4,V5
3334 1,2,3,4,5,.,2,.,.,.,4,1,0,0,0,0,0,1,0,1,1,1,1,2,3,4,5
3335 6,7,8,9,.,6,7,8,9,.,1,4,0,0,0,0,1,0,0,0,0,1,6,7,8,9,.
3339 AT_SETUP([vectors in expressions])
3340 AT_DATA([vectors.sps], [dnl
3341 DATA LIST NOTABLE /N1 TO N5 1-5.
3342 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
3351 COMPUTE X(I)=N(I) + 1.
3358 AT_CHECK([pspp -o pspp.csv vectors.sps])
3359 AT_CHECK([cat pspp.csv], [0], [dnl
3361 N1,N2,N3,N4,N5,X1,X2,X3,X4,X5,I
3362 1,2,3,4,5,.,3,.,.,.,5
3363 6,7,8,9,.,7,8,9,10,.,5