e2f70e09d3fd67ca7556f977ea70bda6da279261
[pspp] / evaluate.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
3 dnl 
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl 
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl 
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 dnl m4_define([CHECK_EXPR_EVAL],
17   [AT_SETUP([expressions - $1])
18    AT_DATA([evaluate.sps],
19      [set mxwarn 1000.
20 set mxerr 1000.
21 set epoch 1940.
22 m4_foreach([check], [m4_shift($@)],
23                  [DEBUG EVALUATE NOOPT m4_argn(4, check)/[]m4_car(check).
24 DEBUG EVALUATE m4_argn(4, check)/[]m4_car(check).
25 ])])
26    AT_CAPTURE_FILE([evaluate.sps])
27    m4_pushdef([i], [3])
28    AT_CHECK([pspp --testing-mode --error-file=- --no-output evaluate.sps], 
29      [m4_if(m4_bregexp([m4_foreach([check], [m4_shift($@)], [m4_argn(3, check)])], [error:]), [-1], [0], [1])], 
30      [stdout])
31    # Use sed to transform "file:line.column:" into plain "file:line:",
32    # because column numbers change between opt and noopt versions.
33    AT_CHECK([[sed 's/\(evaluate.sps:[0-9]\{1,\}\)\.[0-9]\{1,\}:/\1:/' stdout]],
34      [0],
35      [m4_foreach([check], [m4_shift($@)],
36         [m4_define([i], m4_incr(i))dnl
37 m4_if(m4_argn(3, check), [], [], [evaluate.sps:[]i[]: m4_argn(3, check)
38 ])dnl
39 m4_argn(2, check)
40 m4_define([i], m4_incr(i))dnl
41 m4_if(m4_argn(3, check), [], [], [evaluate.sps:[]i[]: m4_argn(3, check)
42 ])dnl
43 m4_argn(2, check)
44 ])], [])
45    m4_popdef([i])
46    AT_CLEANUP])
47
48 AT_BANNER([expressions])
49
50 CHECK_EXPR_EVAL([numeric syntax],
51   [[1e2], [100.00]],
52   [[1e+2], [100.00]],
53   [[1e-2], [0.01]],
54   [[1e-99], [0.00]])
55
56 CHECK_EXPR_EVAL([coercion to/from Boolean],
57   [[0 AND 1], [false]],
58   [[$true AND 1], [true]],
59   [[1 OR $false], [true]],
60   [[1 OR $sysmis], [true]],
61   [[2 OR $sysmis], [sysmis],
62    [error: DEBUG EVALUATE: An operand of the logical disjunction (`OR') operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
63   [[2 AND $sysmis], [false],
64    [error: DEBUG EVALUATE: An operand of the logical conjunction (`AND') operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
65   [['string' AND $sysmis], [error],
66    [error: DEBUG EVALUATE: Type mismatch while applying logical conjunction (`AND') operator: cannot convert string to boolean.]],
67   [[0 AND $sysmis], [false]],
68   [[(1>2) + 1], [1.00]],
69   [[$true + $false], [1.00]])
70
71 CHECK_EXPR_EVAL([addition and subtraction],
72   [[1 + 2], [3.00]],
73   [[1 + $true], [2.00]],
74   [[$sysmis + 1], [sysmis]],
75   [[7676 + $sysmis], [sysmis]],
76   [[('foo') + 5], [error],
77    [error: DEBUG EVALUATE: Type mismatch while applying addition (`+') operator: cannot convert string to number.]],
78   dnl Arithmetic concatenation requires CONCAT:
79   [[('foo') + ('bar')], [error],
80    [error: DEBUG EVALUATE: Type mismatch while applying addition (`+') operator: cannot convert string to number.]],
81   dnl Lexical concatenation succeeds:
82   [['foo' + 'bar'], ["foobar"]],
83   [[1 +3 - 2 +4 -5], [1.00]],
84   [[1 - $true], [0.00]],
85   [[$true - 4/3], [-0.33]],
86   [['string' - 1e10], [error],
87    [error: DEBUG EVALUATE: Type mismatch while applying subtraction (`-') operator: cannot convert string to number.]],
88   [[9.5 - ''], [error],
89    [error: DEBUG EVALUATE: Type mismatch while applying subtraction (`-') operator: cannot convert string to number.]],
90   [[1 - 2], [-1.00]],
91   [[52 -23], [29.00]])
92
93 CHECK_EXPR_EVAL([multiplication and division],
94   [[5 * 10], [50.00]],
95   [[10 * $true], [10.00]],
96   [[$true * 5], [5.00]],
97   [[1.5 * $true], [1.50]],
98   [[5 * $sysmis], [sysmis]],
99   [[$sysmis * 15], [sysmis]],
100   [[2 * 5 / 10], [1.00]],
101   [[1 / 2], [0.50]],
102   [[2 / 5], [0.40]],
103   [[12 / 3 / 2], [2.00]])
104
105 CHECK_EXPR_EVAL([exponentiation],
106   [[2**8], [256.00]],
107   [[(2**3)**4], [4096.00]],
108   [[2**3**4], [4096.00],
109    [warning: DEBUG EVALUATE: The exponentiation operator (`**') is left-associative, even though right-associative semantics are more useful.  That is, `a**b**c' equals `(a**b)**c', not as `a**(b**c)'.  To disable this warning, insert parentheses.]])
110
111 CHECK_EXPR_EVAL([unary minus],
112   [[2+-3], [-1.00]],
113   [[2*-3], [-6.00]],
114   [[-3**2], [-9.00]],
115   [[(-3)**2], [9.00]],
116   [[2**-1], [0.50]],
117   [[0**0], [sysmis]],
118   [[0**-1], [sysmis]],
119   [[(-3)**1.5], [sysmis]])
120
121 CHECK_EXPR_EVAL([AND truth table],
122   [[$false AND $false], [false]],
123   [[$false AND $true], [false]],
124   [[$false AND $sysmis], [false]],
125   [[$true AND $false], [false]],
126   [[$true AND $true], [true]],
127   [[$true AND $sysmis], [sysmis]],
128   [[$sysmis AND $false], [false]],
129   [[$sysmis AND $true], [sysmis]],
130   [[$sysmis AND $sysmis], [sysmis]],
131   [[$false & $false], [false]],
132   [[$false & $true], [false]],
133   [[$false & $sysmis], [false]],
134   [[$true & $false], [false]],
135   [[$true & $true], [true]],
136   [[$true & $sysmis], [sysmis]],
137   [[$sysmis & $false], [false]],
138   [[$sysmis & $true], [sysmis]],
139   [[$sysmis & $sysmis], [sysmis]])
140
141 CHECK_EXPR_EVAL([OR truth table],
142   [[$false OR $false], [false]],
143   [[$false OR $true], [true]],
144   [[$false OR $sysmis], [sysmis]],
145   [[$true OR $false], [true]],
146   [[$true OR $true], [true]],
147   [[$true OR $sysmis], [true]],
148   [[$sysmis OR $false], [sysmis]],
149   [[$sysmis OR $true], [true]],
150   [[$sysmis OR $sysmis], [sysmis]],
151   [[$false | $false], [false]],
152   [[$false | $true], [true]],
153   [[$false | $sysmis], [sysmis]],
154   [[$true | $false], [true]],
155   [[$true | $true], [true]],
156   [[$true | $sysmis], [true]],
157   [[$sysmis | $false], [sysmis]],
158   [[$sysmis | $true], [true]],
159   [[$sysmis | $sysmis], [sysmis]])
160
161 CHECK_EXPR_EVAL([NOT truth table],
162   [[not $false], [true]],
163   [[not 0], [true]],
164   [[not 2.5], [true],
165    [error: DEBUG EVALUATE: An operand of the logical negation (`NOT') operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
166   [[not $true], [false]],
167   [[not 1], [false]],
168   [[not $sysmis], [sysmis]],
169   [[~ $false], [true]],
170   [[~ 0], [true]],
171   [[~ 2.5], [true],
172    [error: DEBUG EVALUATE: An operand of the logical negation (`NOT') operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
173   [[~ $true], [false]],
174   [[~ 1], [false]],
175   [[~ $sysmis], [sysmis]])
176
177 CHECK_EXPR_EVAL([= <= <],
178   [[1 eq 1], [true]],
179   [[1 = 1], [true]],
180   [[1 eq 2], [false]],
181   [[2 = 3], [false]],
182   [[1 eq 'foobar'], [error],
183    [error: DEBUG EVALUATE: Type mismatch while applying numeric equality (`EQ') operator: cannot convert string to number.]],
184   [[5 eq 'foobar'], [error],
185    [error: DEBUG EVALUATE: Type mismatch while applying numeric equality (`EQ') operator: cannot convert string to number.]],
186   [['baz' = 10], [error],
187    [error: DEBUG EVALUATE: Type mismatch while applying string equality (`=') operator: cannot convert number to string.]],
188   [['quux' = 5.55], [error],
189    [error: DEBUG EVALUATE: Type mismatch while applying string equality (`=') operator: cannot convert number to string.]],
190   [['foobar' = 'foobar'], [true]],
191   [['quux' = 'bar'], [false]],
192   [['bar   ' = 'bar'], [true]],
193   [['asdf         ' = 'asdf  '], [true]],
194   [['asdfj   ' = 'asdf'], [false]],
195 dnl Check precedence:
196   [[1 + 2 = 3], [true]],
197   [[1 >= 2 = 2 ge 3], [false],
198    [warning: DEBUG EVALUATE: Chaining relational operators (e.g. `a < b < c') will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b < c').  If chaining is really intended, parentheses will disable this warning (e.g. `(a < b) < c'.)]],
199 dnl Mathematically true:
200   [[3 ne 2 ~= 1], [false],
201    [warning: DEBUG EVALUATE: Chaining relational operators (e.g. `a < b < c') will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b < c').  If chaining is really intended, parentheses will disable this warning (e.g. `(a < b) < c'.)]],
202   [[3 > 2 > 1], [false],
203    [warning: DEBUG EVALUATE: Chaining relational operators (e.g. `a < b < c') will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b < c').  If chaining is really intended, parentheses will disable this warning (e.g. `(a < b) < c'.)]],
204
205   [[1 <= 2], [true]],
206   [[2.5 <= 1.5], [false]],
207   [[1 le 2], [true]],
208   [[2 <= 2], [true]],
209   [[2 le 2], [true]],
210 dnl Make sure <= token can't be split:
211   [[2 < = 2], [error],
212    [error: DEBUG EVALUATE: Syntax error at `='.]],
213   [[1 <= 'foobar'], [error],
214    [error: DEBUG EVALUATE: Type mismatch while applying numeric less-than-or-equal-to (`<=') operator: cannot convert string to number.]],
215   [[5 <= 'foobar'], [error],
216    [error: DEBUG EVALUATE: Type mismatch while applying numeric less-than-or-equal-to (`<=') operator: cannot convert string to number.]],
217   [['baz' <= 10], [error],
218    [error: DEBUG EVALUATE: Type mismatch while applying string less-than-or-equal-to (`<=') operator: cannot convert number to string.]],
219   [['quux' <= 5.55], [error],
220    [error: DEBUG EVALUATE: Type mismatch while applying string less-than-or-equal-to (`<=') operator: cannot convert number to string.]],
221   [['0123' <= '0123'], [true]],
222   [['0123' <= '0124'], [true]],
223   [['0124' le '0123'], [false]],
224   [['0123  ' <= '0123'], [true]],
225   [['0123' le '0123  '], [true]],
226
227   [[1 < 2], [true]],
228   [[2.5 < 1.5], [false]],
229   [[3.5 lt 4], [true]],
230   [[4 lt 3.5], [false]],
231   [[1 lt 'foobar'], [error],
232    [error: DEBUG EVALUATE: Type mismatch while applying numeric less than (`<') operator: cannot convert string to number.]],
233   [[5 lt 'foobar'], [error],
234    [error: DEBUG EVALUATE: Type mismatch while applying numeric less than (`<') operator: cannot convert string to number.]],
235   [['baz' < 10], [error],
236    [error: DEBUG EVALUATE: Type mismatch while applying string less than (`<') operator: cannot convert number to string.]],
237   [['quux' < 5.55], [error],
238    [error: DEBUG EVALUATE: Type mismatch while applying string less than (`<') operator: cannot convert number to string.]],
239   [['0123' lt '0123'], [false]],
240   [['0123' < '0124'], [true]],
241   [['0124' lt '0123'], [false]],
242   [['0123  ' < '0123'], [false]],
243   [['0123' lt '0123  '], [false]])
244
245 CHECK_EXPR_EVAL([>= > <>],
246   [[1 >= 2], [false]],
247   [[2.5 >= 1.5], [true]],
248   [[1 ge 2], [false]],
249   [[2 >= 2], [true]],
250   [[2 ge 2], [true]],
251 dnl Make sure >= token can't be split:
252   [[2 > = 2], [error],
253    [error: DEBUG EVALUATE: Syntax error at `='.]],
254   [[1 >= 'foobar'], [error],
255    [error: DEBUG EVALUATE: Type mismatch while applying numeric greater-than-or-equal-to (`>=') operator: cannot convert string to number.]],
256   [[5 ge 'foobar'], [error],
257    [error: DEBUG EVALUATE: Type mismatch while applying numeric greater-than-or-equal-to (`>=') operator: cannot convert string to number.]],
258   [['baz' ge 10], [error],
259    [error: DEBUG EVALUATE: Type mismatch while applying string greater-than-or-equal-to (`>=') operator: cannot convert number to string.]],
260   [['quux' >= 5.55], [error],
261    [error: DEBUG EVALUATE: Type mismatch while applying string greater-than-or-equal-to (`>=') operator: cannot convert number to string.]],
262   [['0123' ge '0123'], [true]],
263   [['0123' >= '0124'], [false]],
264   [['0124' >= '0123'], [true]],
265   [['0123  ' ge '0123'], [true]],
266   [['0123' >= '0123  '], [true]],
267
268   [[1 > 2], [false]],
269   [[2.5 > 1.5], [true]],
270   [[3.5 gt 4], [false]],
271   [[4 gt 3.5], [true]],
272   [[1 gt 'foobar'], [error],
273    [error: DEBUG EVALUATE: Type mismatch while applying numeric greater than (`>') operator: cannot convert string to number.]],
274   [[5 gt 'foobar'], [error],
275    [error: DEBUG EVALUATE: Type mismatch while applying numeric greater than (`>') operator: cannot convert string to number.]],
276   [['baz' > 10], [error],
277    [error: DEBUG EVALUATE: Type mismatch while applying string greater than (`>') operator: cannot convert number to string.]],
278   [['quux' > 5.55], [error],
279    [error: DEBUG EVALUATE: Type mismatch while applying string greater than (`>') operator: cannot convert number to string.]],
280   [['0123' gt '0123'], [false]],
281   [['0123' > '0124'], [false]],
282   [['0124' gt '0123'], [true]],
283   [['0123  ' > '0123'], [false]],
284   [['0123' gt '0123  '], [false]],
285
286   [[1 ne 1], [false]],
287   [[1 ~= 1], [false]],
288   [[1 <> 2], [true]],
289   [[2 ne 3], [true]],
290   [[1 ~= 'foobar'], [error],
291    [error: DEBUG EVALUATE: Type mismatch while applying numeric inequality (`<>') operator: cannot convert string to number.]],
292   [[5 <> 'foobar'], [error],
293    [error: DEBUG EVALUATE: Type mismatch while applying numeric inequality (`<>') operator: cannot convert string to number.]],
294   [['baz' ne 10], [error],
295    [error: DEBUG EVALUATE: Type mismatch while applying string inequality (`<>') operator: cannot convert number to string.]],
296   [['quux' ~= 5.55], [error],
297    [error: DEBUG EVALUATE: Type mismatch while applying string inequality (`<>') operator: cannot convert number to string.]],
298   [['foobar' <> 'foobar'], [false]],
299   [['quux' ne 'bar'], [true]],
300   [['bar   ' <> 'bar'], [false]],
301   [['asdf         ' ~= 'asdf  '], [false]],
302   [['asdfj   ' ne 'asdf'], [true]],
303 dnl <> token can't be split:
304   [[1 < > 1], [error],
305    [error: DEBUG EVALUATE: Syntax error at `>'.]],
306 dnl # ~= token can't be split:
307   [[1 ~ = 1], [error],
308    [error: DEBUG EVALUATE: Syntax error at `~': expecting end of command.]])
309
310 CHECK_EXPR_EVAL([exp lg10 ln sqrt abs mod mod10 rnd trunc],
311   [[exp(10)], [22026.47]],
312   [[exp('x')], [error],
313    [error: DEBUG EVALUATE: Type mismatch invoking EXP(number) as exp(string).]],
314
315   [[lg10(500)], [2.70]],
316   [[lg10('x')], [error],
317    [error: DEBUG EVALUATE: Type mismatch invoking LG10(number) as lg10(string).]],
318
319   [[ln(10)], [2.30]],
320   [[ln('x')], [error],
321    [error: DEBUG EVALUATE: Type mismatch invoking LN(number) as ln(string).]],
322
323   [[sqrt(500)], [22.36]],
324   [[sqrt('x')], [error],
325    [error: DEBUG EVALUATE: Type mismatch invoking SQRT(number) as sqrt(string).]],
326
327   [[abs(-10.5)], [10.50]],
328   [[abs(-55.79)], [55.79]],
329   [[abs(22)], [22.00]],
330   [[abs(0)], [0.00]],
331
332   [[mod(55.5, 2)], [1.50]],
333   [[mod(-55.5, 2)], [-1.50]],
334   [[mod(55.5, -2)], [1.50]],
335   [[mod(-55.5, -2)], [-1.50]],
336   [[mod('a', 2)], [error],
337    [error: DEBUG EVALUATE: Type mismatch invoking MOD(number, number) as mod(string, number).]],
338   [[mod(2, 'a')], [error],
339    [error: DEBUG EVALUATE: Type mismatch invoking MOD(number, number) as mod(number, string).]],
340   [[mod('a', 'b')], [error],
341    [error: DEBUG EVALUATE: Type mismatch invoking MOD(number, number) as mod(string, string).]],
342
343   [[mod10(55.5)], [5.50]],
344   [[mod10(-55.5)], [-5.50]],
345   [[mod10('x')], [error],
346    [error: DEBUG EVALUATE: Type mismatch invoking MOD10(number) as mod10(string).]],
347
348   [[rnd(5.4)], [5.00]],
349   [[rnd(5.6)], [6.00]],
350   [[rnd(-5.4)], [-5.00]],
351   [[rnd(-5.6)], [-6.00]],
352   [[rnd(5.56, .1)], [5.60]],
353   [[rnd(-5.56, .1)], [-5.60]],
354   [[rnd(.5)], [1.00]],
355   [[rnd(.5 - 2**-53)], [1.00]],
356   [[rnd(.5 - 2**-52)], [1.00]],
357   [[rnd(.5 - 2**-51)], [1.00]],
358   [[rnd(.5 - 2**-45)], [0.00]],
359   [[rnd(.5 - 2**-45, 1, 10)], [1.00]],
360   [[rnd('x')], [error],
361    [error: DEBUG EVALUATE: Function invocation rnd(string) does not match any known function.  Candidates are:
362 RND(number)
363 RND(number, number)
364 RND(number, number, number).]],
365
366   [[trunc(1.2)], [1.00]],
367   [[trunc(1.9)], [1.00]],
368   [[trunc(-1.2)], [-1.00]],
369   [[trunc(-1.9)], [-1.00]],
370   [[trunc(5.06, .1)], [5.00]],
371   [[trunc(-5.06, .1)], [-5.00]],
372   [[trunc(1)], [1.00]],
373   [[trunc(1 - 2**-53)], [1.00]],
374   [[trunc(1 - 2**-52)], [1.00]],
375   [[trunc(1 - 2**-51)], [1.00]],
376   [[trunc(1 - 2**-45)], [0.00]],
377   [[trunc(1 - 2**-45, 1, 10)], [1.00]],
378   [[trunc('x')], [error],
379    [error: DEBUG EVALUATE: Function invocation trunc(string) does not match any known function.  Candidates are:
380 TRUNC(number)
381 TRUNC(number, number)
382 TRUNC(number, number, number).]])
383
384 CHECK_EXPR_EVAL([acos arsin artan cos sin tan],
385   [[acos(.5) / 3.14159 * 180], [60.00]],
386   [[arcos(.75) / 3.14159 * 180], [41.41]],
387   [[arcos(-.5) / 3.14159 * 180], [120.00]],
388   [[acos(-.75) / 3.14159 * 180], [138.59]],
389   [[acos(-1) / 3.14159 * 180], [180.00]],
390   [[arcos(1) / 3.14159 * 180], [0.00]],
391   [[acos(-1.01)], [sysmis]],
392   [[arcos(1.01)], [sysmis]],
393   [[acos('x')], [error],
394    [error: DEBUG EVALUATE: Type mismatch invoking ACOS(number) as acos(string).]],
395
396   [[arsin(.5) / 3.14159 * 180], [30.00]],
397   [[asin(.25) / 3.14159 * 180], [14.48]],
398   [[arsin(-.5) / 3.14159 * 180], [-30.00]],
399   [[asin(-.25) / 3.14159 * 180], [-14.48]],
400   [[arsin(-1.01)], [sysmis]],
401   [[asin(1.01)], [sysmis]],
402   [[arsin('x')], [error],
403    [error: DEBUG EVALUATE: Type mismatch invoking ARSIN(number) as arsin(string).]],
404
405   [[artan(1) / 3.14159 * 180], [45.00]],
406   [[atan(10) / 3.14159 * 180], [84.29]],
407   [[artan(-1) / 3.14159 * 180], [-45.00]],
408   [[atan(-10) / 3.14159 * 180], [-84.29]],
409   [[artan('x')], [error],
410    [error: DEBUG EVALUATE: Type mismatch invoking ARTAN(number) as artan(string).]],
411
412   [[cos(60 / 180 * 3.14159)], [0.50]],
413   [[cos(45 / 180 * 3.14159)], [0.71]],
414   [[cos(30 / 180 * 3.14159)], [0.87]],
415   [[cos(15 / 180 * 3.14159)], [0.97]],
416   [[cos(-60 / 180 * 3.14159)], [0.50]],
417   [[cos(-45 / 180 * 3.14159)], [0.71]],
418   [[cos(-30 / 180 * 3.14159)], [0.87]],
419   [[cos(-15 / 180 * 3.14159)], [0.97]],
420   [[cos(123 / 180 * 3.14159)], [-0.54]],
421   [[cos(321 / 180 * 3.14159)], [0.78]],
422   [[cos('x')], [error],
423    [error: DEBUG EVALUATE: Type mismatch invoking COS(number) as cos(string).]],
424
425   [[sin(60 / 180 * 3.14159)], [0.87]],
426   [[sin(45 / 180 * 3.14159)], [0.71]],
427   [[sin(30 / 180 * 3.14159)], [0.50]],
428   [[sin(15 / 180 * 3.14159)], [0.26]],
429   [[sin(-60 / 180 * 3.14159)], [-0.87]],
430   [[sin(-45 / 180 * 3.14159)], [-0.71]],
431   [[sin(-30 / 180 * 3.14159)], [-0.50]],
432   [[sin(-15 / 180 * 3.14159)], [-0.26]],
433   [[sin(123 / 180 * 3.14159)], [0.84]],
434   [[sin(321 / 180 * 3.14159)], [-0.63]],
435   [[sin('x')], [error],
436    [error: DEBUG EVALUATE: Type mismatch invoking SIN(number) as sin(string).]],
437
438   [[tan(60 / 180 * 3.14159)], [1.73]],
439   [[tan(45 / 180 * 3.14159)], [1.00]],
440   [[tan(30 / 180 * 3.14159)], [0.58]],
441   [[tan(15 / 180 * 3.14159)], [0.27]],
442   [[tan(-60 / 180 * 3.14159)], [-1.73]],
443   [[tan(-45 / 180 * 3.14159)], [-1.00]],
444   [[tan(-30 / 180 * 3.14159)], [-0.58]],
445   [[tan(-15 / 180 * 3.14159)], [-0.27]],
446   [[tan(123 / 180 * 3.14159)], [-1.54]],
447   [[tan(321 / 180 * 3.14159)], [-0.81]],
448   [[tan('x')], [error],
449    [error: DEBUG EVALUATE: Type mismatch invoking TAN(number) as tan(string).]])
450 # FIXME: a variable name as the argument to SYSMIS is a special case
451 # that we don't yet test.  We also can't test VALUE this way.
452 CHECK_EXPR_EVAL([missing nmiss nvalid sysmis any range max min],
453   [[missing(10)], [false]],
454   [[missing($sysmis)], [true]],
455   [[missing(asin(1.01))], [true]],
456   [[missing(asin(.5))], [false]],
457   [[missing('    ')], [error],
458    [error: DEBUG EVALUATE: Type mismatch invoking MISSING(number) as missing(string).]],
459
460   [[nmiss($sysmis)], [1.00]],
461   [[nmiss(0)], [0.00]],
462   [[nmiss($sysmis, $sysmis, $sysmis)], [3.00]],
463   [[nmiss(1, 2, 3, 4)], [0.00]],
464   [[nmiss(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4)], [4.00]],
465
466   [[nvalid($sysmis)], [0.00]],
467   [[nvalid(0)], [1.00]],
468   [[nvalid($sysmis, $sysmis, $sysmis)], [0.00]],
469   [[nvalid(1, 2, 3, 4)], [4.00]],
470   [[nvalid(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4)], [5.00]],
471
472   [[sysmis(10)], [false]],
473   [[sysmis($sysmis)], [true]],
474   [[sysmis(asin(1.01))], [true]],
475   [[sysmis(asin(.5))], [false]],
476   [[sysmis('    ')], [error],
477    [error: DEBUG EVALUATE: Function invocation sysmis(string) does not match any known function.  Candidates are:
478 SYSMIS(num_variable)
479 SYSMIS(number).]],
480
481   [[any($sysmis, 1, $sysmis, 3)], [sysmis]],
482   [[any(1, 1, 2, 3)], [true]],
483   [[any(1, $true, 2, 3)], [true]],
484   [[any(1, $false, 2, 3)], [false]],
485   [[any(2, 1, 2, 3)], [true]],
486   [[any(3, 1, 2, 3)], [true]],
487   [[any(5, 1, 2, 3)], [false]],
488   [[any(1, 1, 1, 1)], [true]],
489   [[any($sysmis, 1, 1, 1)], [sysmis]],
490   [[any(1, $sysmis, $sysmis, $sysmis)], [sysmis]],
491   [[any($sysmis, $sysmis, $sysmis, $sysmis)], [sysmis]],
492   [[any(1)], [error],
493    [error: DEBUG EVALUATE: Function invocation any(number) does not match any known function.  Candidates are:
494 ANY(number, number[, number]...)
495 ANY(string, string[, string]...).]],
496   [[any('1', 2, 3, 4)], [error],
497    [error: DEBUG EVALUATE: Function invocation any(string, number, number, number) does not match any known function.  Candidates are:
498 ANY(number, number[, number]...)
499 ANY(string, string[, string]...).]],
500   [[any(1, '2', 3, 4)], [error],
501    [error: DEBUG EVALUATE: Function invocation any(number, string, number, number) does not match any known function.  Candidates are:
502 ANY(number, number[, number]...)
503 ANY(string, string[, string]...).]],
504   [[any(1, 2, '3', 4)], [error],
505    [error: DEBUG EVALUATE: Function invocation any(number, number, string, number) does not match any known function.  Candidates are:
506 ANY(number, number[, number]...)
507 ANY(string, string[, string]...).]],
508   [[any(1, 2, 3, '4')], [error],
509    [error: DEBUG EVALUATE: Function invocation any(number, number, number, string) does not match any known function.  Candidates are:
510 ANY(number, number[, number]...)
511 ANY(string, string[, string]...).]],
512
513   [[any('', 'a', '', 'c')], [true]],
514   [[any('a', 'a', 'b', 'c')], [true]],
515   [[any('b', 'a', 'b', 'c')], [true]],
516   [[any('c', 'a', 'b', 'c')], [true]],
517   [[any('e', 'a', 'b', 'c')], [false]],
518   [[any('a', 'a', 'a', 'a')], [true]],
519   [[any('', 'a', 'a', 'a')], [false]],
520   [[any('a', '', '', '')], [false]],
521   [[any('a')], [error],
522    [error: DEBUG EVALUATE: Function invocation any(string) does not match any known function.  Candidates are:
523 ANY(number, number[, number]...)
524 ANY(string, string[, string]...).]],
525   [[any('a', 'a  ', 'b', 'c')], [true]],
526   [[any('b   ', 'a', 'b', 'c')], [true]],
527   [[any('c   ', 'a', 'b', 'c     ')], [true]],
528   [[any(a10, 'b', 'c', 'd')], [error],
529    [error: DEBUG EVALUATE: Function invocation any(format, string, string, string) does not match any known function.  Candidates are:
530 ANY(number, number[, number]...)
531 ANY(string, string[, string]...).]],
532   [[any('a', b, 'c', 'd')], [error],
533    [error: DEBUG EVALUATE: Unknown identifier b.]],
534   [[any('a', 'b', c, 'd')], [error],
535    [error: DEBUG EVALUATE: Unknown identifier c.]],
536   [[any('a', 'b', 'c', d)], [error],
537    [error: DEBUG EVALUATE: Unknown identifier d.]],
538
539   [[range(5, 1, 10)], [true]],
540   [[range(1, 1, 10)], [true]],
541   [[range(10, 1, 10)], [true]],
542   [[range(-1, 1, 10)], [false]],
543   [[range(12, 1, 10)], [false]],
544   [[range($sysmis, 1, 10)], [sysmis]],
545   [[range(5, 1, $sysmis)], [sysmis]],
546   [[range(5, $sysmis, 10)], [sysmis]],
547   [[range($sysmis, $sysmis, 10)], [sysmis ]],
548   [[range($sysmis, 1, $sysmis)], [sysmis]],
549   [[range($sysmis, $sysmis, $sysmis)], [sysmis]],
550   [[range(0, 1, 8, 10, 18)], [false]],
551   [[range(1, 1, 8, 10, 18)], [true]],
552   [[range(6, 1, 8, 10, 18)], [true]],
553   [[range(8, 1, 8, 10, 18)], [true]],
554   [[range(9, 1, 8, 10, 18)], [false]],
555   [[range(10, 1, 8, 10, 18)], [true]],
556   [[range(13, 1, 8, 10, 18)], [true]],
557   [[range(16, 1, 8, 10, 18)], [true]],
558   [[range(18, 1, 8, 10, 18)], [true]],
559   [[range(20, 1, 8, 10, 18)], [false]],
560   [[range(1)], [error],
561    [error: DEBUG EVALUATE: Function invocation range(number) does not match any known function.  Candidates are:
562 RANGE(number, number, number[, number, number]...)
563 RANGE(string, string, string[, string, string]...).]],
564   [[range(1, 2)], [error],
565    [error: DEBUG EVALUATE: RANGE(number, number, number[, number, number]...) must have an even number of arguments in list.]],
566   [[range(1, 2, 3, 4)], [error],
567    [error: DEBUG EVALUATE: RANGE(number, number, number[, number, number]...) must have an even number of arguments in list.]],
568   [[range(1, 2, 3, 4, 5, 6)], [error],
569    [error: DEBUG EVALUATE: RANGE(number, number, number[, number, number]...) must have an even number of arguments in list.]],
570   [[range('1', 2, 3)], [error],
571    [error: DEBUG EVALUATE: Function invocation range(string, number, number) does not match any known function.  Candidates are:
572 RANGE(number, number, number[, number, number]...)
573 RANGE(string, string, string[, string, string]...).]],
574   [[range(1, '2', 3)], [error],
575    [error: DEBUG EVALUATE: Function invocation range(number, string, number) does not match any known function.  Candidates are:
576 RANGE(number, number, number[, number, number]...)
577 RANGE(string, string, string[, string, string]...).]],
578   [[range(1, 2, '3')], [error],
579    [error: DEBUG EVALUATE: Function invocation range(number, number, string) does not match any known function.  Candidates are:
580 RANGE(number, number, number[, number, number]...)
581 RANGE(string, string, string[, string, string]...).]],
582
583   [[range('123', '111', '888')], [true]],
584   [[range('111', '111', '888')], [true]],
585   [[range('888', '111', '888')], [true]],
586   [[range('110', '111', '888')], [false]],
587   [[range('889', '111', '888')], [false]],
588   [[range('000', '111', '888')], [false]],
589   [[range('999', '111', '888')], [false]],
590   [[range('123   ', '111', '888')], [true]],
591   [[range('123', '111   ', '888')], [true]],
592   [[range('123', '111', '888   ')], [true]],
593   [[range('123', '111    ', '888   ')], [true]],
594   [[range('00', '01', '08', '10', '18')], [false]],
595   [[range('01', '01', '08', '10', '18')], [true]],
596   [[range('06', '01', '08', '10', '18')], [true]],
597   [[range('08', '01', '08', '10', '18')], [true]],
598   [[range('09', '01', '08', '10', '18')], [false]],
599   [[range('10', '01', '08', '10', '18')], [true]],
600   [[range('15', '01', '08', '10', '18')], [true]],
601   [[range('18', '01', '08', '10', '18')], [true]],
602   [[range('19', '01', '08', '10', '18')], [false]],
603   [[range('1')], [error],
604    [error: DEBUG EVALUATE: Function invocation range(string) does not match any known function.  Candidates are:
605 RANGE(number, number, number[, number, number]...)
606 RANGE(string, string, string[, string, string]...).]],
607   [[range('1', '2')], [error],
608    [error: DEBUG EVALUATE: RANGE(string, string, string[, string, string]...) must have an even number of arguments in list.]],
609   [[range('1', '2', '3', '4')], [error],
610    [error: DEBUG EVALUATE: RANGE(string, string, string[, string, string]...) must have an even number of arguments in list.]],
611   [[range('1', '2', '3', '4', '5', '6')], [error],
612    [error: DEBUG EVALUATE: RANGE(string, string, string[, string, string]...) must have an even number of arguments in list.]],
613   [[range(1, '2', '3')], [error],
614    [error: DEBUG EVALUATE: Function invocation range(number, string, string) does not match any known function.  Candidates are:
615 RANGE(number, number, number[, number, number]...)
616 RANGE(string, string, string[, string, string]...).]],
617   [[range('1', 2, '3')], [error],
618    [error: DEBUG EVALUATE: Function invocation range(string, number, string) does not match any known function.  Candidates are:
619 RANGE(number, number, number[, number, number]...)
620 RANGE(string, string, string[, string, string]...).]],
621   [[range('1', '2', 3)], [error],
622    [error: DEBUG EVALUATE: Function invocation range(string, string, number) does not match any known function.  Candidates are:
623 RANGE(number, number, number[, number, number]...)
624 RANGE(string, string, string[, string, string]...).]],
625
626   [[max(1, 2, 3, 4, 5)], [5.00]],
627   [[max(1, $sysmis, 2, 3, $sysmis, 4, 5)], [5.00]],
628   [[max(1, 2)], [2.00]],
629   [[max()], [error],
630    [error: DEBUG EVALUATE: Function invocation max() does not match any known function.  Candidates are:
631 MAX(number[, number]...)
632 MAX(string[, string]...).]],
633   [[max(1)], [1.00]],
634   [[max(1, $sysmis)], [1.00]],
635   [[max(1, 2, 3, $sysmis)], [3.00]],
636   [[max.4(1, 2, 3, $sysmis)], [sysmis]],
637   [[max.4(1, 2, 3)], [error],
638    [error: DEBUG EVALUATE: With MAX(number[, number]...), using minimum valid argument count of 4 does not make sense when passing only 3 arguments in list.]],
639
640   [[max("2", "3", "5", "1", "4")], ["5"]],
641   [[max("1", "2")], ["2"]],
642   [[max("1")], ["1"]],
643
644   [[min(1, 2, 3, 4, 5)], [1.00]],
645   [[min(1, $sysmis, 2, 3, $sysmis, 4, 5)], [1.00]],
646   [[min(1, 2)], [1.00]],
647   [[min()], [error],
648    [error: DEBUG EVALUATE: Function invocation min() does not match any known function.  Candidates are:
649 MIN(number[, number]...)
650 MIN(string[, string]...).]],
651   [[min(1)], [1.00]],
652   [[min(1, $sysmis)], [1.00]],
653   [[min(1, 2, 3, $sysmis)], [1.00]],
654   [[min.4(1, 2, 3, $sysmis)], [sysmis]],
655   [[min.4(1, 2, 3)], [error],
656    [error: DEBUG EVALUATE: With MIN(number[, number]...), using minimum valid argument count of 4 does not make sense when passing only 3 arguments in list.]],
657
658   [[min("2", "3", "5", "1", "4")], ["1"]],
659   [[min("1", "2")], ["1"]],
660   [[min("1")], ["1"]])
661
662 CHECK_EXPR_EVAL([cfvar mean median sd sum variance],
663   [[cfvar(1, 2, 3, 4, 5)], [0.53]],
664   [[cfvar(1, $sysmis, 2, 3, $sysmis, 4, 5)], [0.53]],
665   [[cfvar(1, 2)], [0.47]],
666   [[cfvar(1)], [error],
667    [error: DEBUG EVALUATE: Type mismatch invoking CFVAR(number, number[, number]...) as cfvar(number).]],
668   [[cfvar(1, $sysmis)], [sysmis]],
669   [[cfvar(1, 2, 3, $sysmis)], [0.50]],
670   [[cfvar.4(1, 2, 3, $sysmis)], [sysmis]],
671   [[cfvar.4(1, 2, 3)], [error],
672    [error: DEBUG EVALUATE: With CFVAR(number, number[, number]...), using minimum valid argument count of 4 does not make sense when passing only 3 arguments in list.]],
673   [[cfvar('x')], [error],
674    [error: DEBUG EVALUATE: Type mismatch invoking CFVAR(number, number[, number]...) as cfvar(string).]],
675   [[cfvar('x', 1, 2, 3)], [error],
676    [error: DEBUG EVALUATE: Type mismatch invoking CFVAR(number, number[, number]...) as cfvar(string, number, number, number).]],
677
678   [[mean(1, 2, 3, 4, 5)], [3.00]],
679   [[mean(1, $sysmis, 2, 3, $sysmis, 4, 5)], [3.00]],
680   [[mean(1, 2)], [1.50]],
681   [[mean()], [error],
682    [error: DEBUG EVALUATE: Type mismatch invoking MEAN(number[, number]...) as mean().]],
683   [[mean(1)], [1.00]],
684   [[mean(1, $sysmis)], [1.00]],
685   [[mean(1, 2, 3, $sysmis)], [2.00]],
686   [[mean.4(1, 2, 3, $sysmis)], [sysmis]],
687   [[mean.4(1, 2, 3)], [error],
688    [error: DEBUG EVALUATE: With MEAN(number[, number]...), using minimum valid argument count of 4 does not make sense when passing only 3 arguments in list.]],
689
690   [[median(1, 2, 3, 4, 5)], [3.00]],
691   [[median(2, 3, 4, 5, 1)], [3.00]],
692   [[median(2, 3, 4, 1, 5)], [3.00]],
693   [[median(2, 1, 4, 5, 3)], [3.00]],
694   [[median(1, 2, 3, 4)], [2.50]],
695   [[median(2, 3, 1, 4)], [2.50]],
696   [[median(2, 3, 4, 1)], [2.50]],
697   [[median(2, 1, 4, 3)], [2.50]],
698   [[median(1, $sysmis, 3, 4, 5)], [3.50]],
699   [[median(2, 3, 4, 5, $sysmis, 1)], [3.00]],
700   [[median($sysmis, $sysmis, $sysmis, 2, 3, 4, 1, 5)], [3.00]],
701   [[median(1, 2, 3)], [2.00]],
702   [[median(1)], [1.00]],
703   [[median(1, 2)], [1.50]],
704   [[median(1, 2, $sysmis)], [1.50]],
705   [[median(1, $sysmis, $sysmis)], [1.00]],
706   [[median($sysmis, $sysmis, $sysmis)], [sysmis]],
707   [[median.3(1, 2, $sysmis)], [sysmis]],
708   [[median.2(1, $sysmis)], [sysmis]],
709
710   [[sd(1, 2, 3, 4, 5)], [1.58]],
711   [[sd(1, $sysmis, 2, 3, $sysmis, 4, 5)], [1.58]],
712   [[sd(1, 2)], [0.71]],
713   [[sd(1)], [error],
714    [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(number).]],
715   [[sd(1, $sysmis)], [sysmis]],
716   [[sd(1, 2, 3, $sysmis)], [1.00]],
717   [[sd.4(1, 2, 3, $sysmis)], [sysmis]],
718   [[sd.4(1, 2, 3)], [error],
719    [error: DEBUG EVALUATE: With SD(number, number[, number]...), using minimum valid argument count of 4 does not make sense when passing only 3 arguments in list.]],
720   [[sd('x')], [error],
721    [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(string).]],
722   [[sd('x', 1, 2, 3)], [error],
723    [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(string, number, number, number).]],
724
725   [[sum(1, 2, 3, 4, 5)], [15.00]],
726   [[sum(1, $sysmis, 2, 3, $sysmis, 4, 5)], [15.00]],
727   [[sum(1, 2)], [3.00]],
728   [[sum()], [error],
729    [error: DEBUG EVALUATE: Type mismatch invoking SUM(number[, number]...) as sum().]],
730   [[sum(1)], [1.00]],
731   [[sum(1, $sysmis)], [1.00]],
732   [[sum(1, 2, 3, $sysmis)], [6.00]],
733   [[sum.4(1, 2, 3, $sysmis)], [sysmis]],
734   [[sum.4(1, 2, 3)], [error],
735    [error: DEBUG EVALUATE: With SUM(number[, number]...), using minimum valid argument count of 4 does not make sense when passing only 3 arguments in list.]],
736
737   [[variance(1, 2, 3, 4, 5)], [2.50]],
738   [[variance(1, $sysmis, 2, 3, $sysmis, 4, 5)], [2.50]],
739   [[variance(1, 2)], [0.50]],
740   [[variance(1)], [error],
741    [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(number).]],
742   [[variance(1, $sysmis)], [sysmis]],
743   [[variance(1, 2, 3, $sysmis)], [1.00]],
744   [[variance.4(1, 2, 3, $sysmis)], [sysmis]],
745   [[variance.4(1, 2, 3)], [error],
746    [error: DEBUG EVALUATE: With VARIANCE(number, number[, number]...), using minimum valid argument count of 4 does not make sense when passing only 3 arguments in list.]],
747   [[variance('x')], [error],
748    [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(string).]],
749   [[variance('x', 1, 2, 3)], [error],
750    [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(string, number, number, number).]])
751
752 CHECK_EXPR_EVAL([concat index rindex length lower],
753   [[concat('')], [""]],
754   [[concat('a', 'b')], ["ab"]],
755   [[concat('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')], ["abcdefgh"]],
756   [[concat('abcdefgh', 'ijklmnopq')], ["abcdefghijklmnopq"]],
757   [[concat('a', 1)], [error],
758    [error: DEBUG EVALUATE: Type mismatch invoking CONCAT(string[, string]...) as concat(string, number).]],
759   [[concat(1, 2)], [error],
760    [error: DEBUG EVALUATE: Type mismatch invoking CONCAT(string[, string]...) as concat(number, number).]],
761
762   [[index('abcbcde', 'bc')], [2.00]],
763   [[index('abcbcde', 'bcd')], [4.00]],
764   [[index('abcbcde', 'bcbc')], [2.00]],
765   [[index('abcdefgh', 'abc')], [1.00]],
766   [[index('abcdefgh', 'bcd')], [2.00]],
767   [[index('abcdefgh', 'cde')], [3.00]],
768   [[index('abcdefgh', 'def')], [4.00]],
769   [[index('abcdefgh', 'efg')], [5.00]],
770   [[index('abcdefgh', 'fgh')], [6.00]],
771   [[index('abcdefgh', 'fghi')], [0.00]],
772   [[index('abcdefgh', 'x')], [0.00]],
773   [[index('abcdefgh', 'abch')], [0.00]],
774   [[index('banana', 'na')], [3.00]],
775   [[index('banana', 'ana')], [2.00]],
776   [[index('', 'x')], [0.00]],
777   [[index('', '')], [sysmis]],
778   [[index('abcdefgh', '')], [sysmis]],
779   [[index('abcdefgh', 'alkjsfdjlskalkjfa')], [0.00]],
780
781   [[index('abcbcde', 'bc', 1)], [2.00]],
782   [[index('abcbcde', 'dc', 1)], [3.00]],
783   [[index('abcbcde', 'abc', 1)], [1.00]],
784   [[index('abcbcde', 'bc', 2)], [2.00]],
785   [[index('abcbcde', 'dc', 2)], [0.00]],
786   [[index('abcbcde', 'abc', 1)], [1.00]],
787   [[index('abcbcde', 'bccb', 2)], [2.00]],
788   [[index('abcbcde', 'bcbc', 2)], [2.00]],
789   [[index('abcbcde', 'bcbc', $sysmis)], [sysmis]],
790
791   [[rindex('abcbcde', 'bc')], [4.00]],
792   [[rindex('abcbcde', 'bcd')], [4.00]],
793   [[rindex('abcbcde', 'bcbc')], [2.00]],
794   [[rindex('abcdefgh', 'abc')], [1.00]],
795   [[rindex('abcdefgh', 'bcd')], [2.00]],
796   [[rindex('abcdefgh', 'cde')], [3.00]],
797   [[rindex('abcdefgh', 'def')], [4.00]],
798   [[rindex('abcdefgh', 'efg')], [5.00]],
799   [[rindex('abcdefgh', 'fgh')], [6.00]],
800   [[rindex('abcdefgh', 'fghi')], [0.00]],
801   [[rindex('abcdefgh', 'x')], [0.00]],
802   [[rindex('abcdefgh', 'abch')], [0.00]],
803   [[rindex('banana', 'na')], [5.00]],
804   [[rindex('banana', 'ana')], [4.00]],
805   [[rindex('', 'x')], [0.00]],
806   [[rindex('', '')], [sysmis]],
807   [[rindex('abcdefgh', '')], [sysmis]],
808   [[rindex('abcdefgh', 'alkjsfdjlskalkjfa')], [0.00]],
809
810   [[rindex('abcbcde', 'bc', 1)], [5.00]],
811   [[rindex('abcbcde', 'dc', 1)], [6.00]],
812   [[rindex('abcbcde', 'abc', 1)], [5.00]],
813   [[rindex('abcbcde', 'bc', 2)], [4.00]],
814   [[rindex('abcbcde', 'dc', 2)], [0.00]],
815   [[rindex('abcbcde', 'abc', 1)], [5.00]],
816   [[rindex('abcbcde', 'bccb', 2)], [4.00]],
817   [[rindex('abcbcde', 'bcbc', 2)], [4.00]],
818   [[rindex('abcbcde', 'bcbc', 0)], [sysmis]],
819   [[rindex('abcbcde', 'bcbc', $sysmis)], [sysmis]],
820   [[rindex('abcbcde', 'bcbcg', 2)], [sysmis]],
821   [[rindex('abcbcde', 'bcbcg', $sysmis)], [sysmis]],
822   [[rindex('abcbcde', 'bcbcg', 'x')], [error],
823    [error: DEBUG EVALUATE: Function invocation rindex(string, string, string) does not match any known function.  Candidates are:
824 RINDEX(string, string)
825 RINDEX(string, string, number).]],
826   [[rindex(1, 'bcdfkjl', 2)], [error],
827    [error: DEBUG EVALUATE: Function invocation rindex(number, string, number) does not match any known function.  Candidates are:
828 RINDEX(string, string)
829 RINDEX(string, string, number).]],
830   [[rindex('aksj', 2, 2)], [error],
831    [error: DEBUG EVALUATE: Function invocation rindex(string, number, number) does not match any known function.  Candidates are:
832 RINDEX(string, string)
833 RINDEX(string, string, number).]],
834   [[rindex(1, 2, 3)], [error],
835    [error: DEBUG EVALUATE: Function invocation rindex(number, number, number) does not match any known function.  Candidates are:
836 RINDEX(string, string)
837 RINDEX(string, string, number).]],
838   [[rindex(1, 2, '3')], [error],
839    [error: DEBUG EVALUATE: Function invocation rindex(number, number, string) does not match any known function.  Candidates are:
840 RINDEX(string, string)
841 RINDEX(string, string, number).]],
842
843   [[length('')], [0.00]],
844   [[length('a')], [1.00]],
845   [[length('xy')], [2.00]],
846   [[length('adsf    ')], [8.00]],
847   [[length('abcdefghijkl')], [12.00]],
848   [[length(0)], [error],
849    [error: DEBUG EVALUATE: Type mismatch invoking LENGTH(string) as length(number).]],
850   [[length($sysmis)], [error],
851    [error: DEBUG EVALUATE: Type mismatch invoking LENGTH(string) as length(number).]],
852
853   [[lower('ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089')], ["abcdefghijklmnopqrstuvwxyz!@%&*089"]],
854   [[lower('')], [""]],
855   [[lower(1)], [error],
856    [error: DEBUG EVALUATE: Type mismatch invoking LOWER(string) as lower(number).]])
857
858 CHECK_EXPR_EVAL([replace],
859   [[replace('banana', 'an', 'AN')], ["bANANa"]],
860   [[replace('banana', 'an', 'a')], ["baaa"]],
861   [[replace('banana', 'an', '')], ["ba"]],
862   [[replace('banana', 'na', '')], ["ba"]],
863   [[replace('banana', 'ba', 'BA')], ["BAnana"]],
864   [[replace('banana', 'na', 'xyzzy')], ["baxyzzyxyzzy"]],
865   [[replace('banana', 'an', 'xyzzy', 1)], ["bxyzzyana"]],
866   [[replace('banana', 'an', 'xyzzy', 1.5)], ["bxyzzyana"]],
867   [[replace('banana', 'bananana', 'xyzzy')], ["banana"]],
868   [[replace('banana', '', 'xyzzy')], ["banana"]],
869   [[replace('banana', 'ba', '', 0)], ["banana"]],
870   [[replace('banana', 'ba', '', -1)], ["banana"]],
871   [[replace('banana', 'ba', '', $sysmis)], ["banana"]])
872
873 CHECK_EXPR_EVAL([lpad number ltrim lpad rtrim rpad string strunc substr upcase],
874   [[lpad('abc', -1)], [""]],
875   [[lpad('abc', 0)], ["abc"]],
876   [[lpad('abc', 2)], ["abc"]],
877   [[lpad('abc', 3)], ["abc"]],
878   [[lpad('abc', 10)], ["       abc"]],
879   [[lpad('abc', 32768)], [""]],
880   [[lpad('abc', $sysmis)], [""]],
881   [[lpad('abc', -1, '*')], [""]],
882   [[lpad('abc', 0, '*')], ["abc"]],
883   [[lpad('abc', 2, '*')], ["abc"]],
884   [[lpad('abc', 3, '*')], ["abc"]],
885   [[lpad('abc', 10, '*')], ["*******abc"]],
886   [[lpad('abc', 32768, '*')], [""]],
887   [[lpad('abc', $sysmis, '*')], [""]],
888   [[lpad('abc', $sysmis, '')], [""]],
889   [[lpad('abc', $sysmis, 'xy')], [""]],
890   [[lpad(0, 10)], [error],
891    [error: DEBUG EVALUATE: Function invocation lpad(number, number) does not match any known function.  Candidates are:
892 LPAD(string, number)
893 LPAD(string, number, string).]],
894   [[lpad('abc', 'def')], [error],
895    [error: DEBUG EVALUATE: Function invocation lpad(string, string) does not match any known function.  Candidates are:
896 LPAD(string, number)
897 LPAD(string, number, string).]],
898   [[lpad(0, 10, ' ')], [error],
899    [error: DEBUG EVALUATE: Function invocation lpad(number, number, string) does not match any known function.  Candidates are:
900 LPAD(string, number)
901 LPAD(string, number, string).]],
902   [[lpad('abc', 'def', ' ')], [error],
903    [error: DEBUG EVALUATE: Function invocation lpad(string, string, string) does not match any known function.  Candidates are:
904 LPAD(string, number)
905 LPAD(string, number, string).]],
906   [[lpad('x', 5, 0)], [error],
907    [error: DEBUG EVALUATE: Function invocation lpad(string, number, number) does not match any known function.  Candidates are:
908 LPAD(string, number)
909 LPAD(string, number, string).]],
910   [[lpad('x', 5, 2)], [error],
911    [error: DEBUG EVALUATE: Function invocation lpad(string, number, number) does not match any known function.  Candidates are:
912 LPAD(string, number)
913 LPAD(string, number, string).]],
914
915   [[number("123", f3.0)], [123.00]],
916   [[number(" 123", f3.0)], [12.00]],
917   [[number("123", f3.1)], [12.30]],
918   [[number("   ", f3.1)], [sysmis]],
919   [[number("123", a8)], [error],
920    [error: DEBUG EVALUATE: Type mismatch invoking NUMBER(string, num_input_format) as number(string, format).]],
921 dnl CCA is not an input format:
922   [[number("123", cca1.2)], [error],
923    [error: DEBUG EVALUATE: Type mismatch invoking NUMBER(string, num_input_format) as number(string, format).]],
924
925   [[ltrim('   abc')], ["abc"]],
926   [[rtrim('   abc   ')], ["   abc"]],
927   [[ltrim('abc')], ["abc"]],
928   [[ltrim('     abc')], ["      abc"]],
929   [[ltrim('    ')], [""]],
930   [[ltrim('')], [""]],
931   [[ltrim(8)], [error],
932    [error: DEBUG EVALUATE: Function invocation ltrim(number) does not match any known function.  Candidates are:
933 LTRIM(string)
934 LTRIM(string, string).]],
935   [[ltrim('***abc', '*')], ["abc"]],
936   [[ltrim('abc', '*')], ["abc"]],
937   [[ltrim('*abc', '*')], ["abc"]],
938   [[ltrim('', '*')], [""]],
939   [[ltrim(8, '*')], [error],
940    [error: DEBUG EVALUATE: Function invocation ltrim(number, string) does not match any known function.  Candidates are:
941 LTRIM(string)
942 LTRIM(string, string).]],
943   [[ltrim(' x', 8)], [error],
944    [error: DEBUG EVALUATE: Function invocation ltrim(string, number) does not match any known function.  Candidates are:
945 LTRIM(string)
946 LTRIM(string, string).]],
947   [[ltrim(8, 9)], [error],
948    [error: DEBUG EVALUATE: Function invocation ltrim(number, number) does not match any known function.  Candidates are:
949 LTRIM(string)
950 LTRIM(string, string).]],
951
952   [[rpad('abc', -1)], [""]],
953   [[rpad('abc', 0)], ["abc"]],
954   [[rpad('abc', 2)], ["abc"]],
955   [[rpad('abc', 3)], ["abc"]],
956   [[rpad('abc', 10)], ["abc       "]],
957   [[rpad('abc', 32768)], [""]],
958   [[rpad('abc', $sysmis)], [""]],
959   [[rpad('abc', -1, '*')], [""]],
960   [[rpad('abc', 0, '*')], ["abc"]],
961   [[rpad('abc', 2, '*')], ["abc"]],
962   [[rpad('abc', 3, '*')], ["abc"]],
963   [[rpad('abc', 10, '*')], ["abc*******"]],
964   [[rpad('abc', 32768, '*')], [""]],
965   [[rpad('abc', $sysmis, '*')], [""]],
966   [[rpad('abc', $sysmis, '')], [""]],
967   [[rpad('abc', $sysmis, 'xy')], [""]],
968   [[rpad(0, 10)], [error],
969    [error: DEBUG EVALUATE: Function invocation rpad(number, number) does not match any known function.  Candidates are:
970 RPAD(string, number)
971 RPAD(string, number, string).]],
972   [[rpad('abc', 'def')], [error],
973    [error: DEBUG EVALUATE: Function invocation rpad(string, string) does not match any known function.  Candidates are:
974 RPAD(string, number)
975 RPAD(string, number, string).]],
976   [[rpad(0, 10, ' ')], [error],
977    [error: DEBUG EVALUATE: Function invocation rpad(number, number, string) does not match any known function.  Candidates are:
978 RPAD(string, number)
979 RPAD(string, number, string).]],
980   [[rpad('abc', 'def', ' ')], [error],
981    [error: DEBUG EVALUATE: Function invocation rpad(string, string, string) does not match any known function.  Candidates are:
982 RPAD(string, number)
983 RPAD(string, number, string).]],
984   [[rpad('x', 5, 0)], [error],
985    [error: DEBUG EVALUATE: Function invocation rpad(string, number, number) does not match any known function.  Candidates are:
986 RPAD(string, number)
987 RPAD(string, number, string).]],
988   [[rpad('x', 5, 2)], [error],
989    [error: DEBUG EVALUATE: Function invocation rpad(string, number, number) does not match any known function.  Candidates are:
990 RPAD(string, number)
991 RPAD(string, number, string).]],
992
993   [[rtrim('abc   ')], ["abc"]],
994   [[rtrim('   abc   ')], ["   abc"]],
995   [[rtrim('abc')], ["abc"]],
996   [[rtrim('abc  ')], ["abc      "]],
997   [[rtrim('    ')], [""]],
998   [[rtrim('')], [""]],
999   [[rtrim(8)], [error],
1000    [error: DEBUG EVALUATE: Function invocation rtrim(number) does not match any known function.  Candidates are:
1001 RTRIM(string)
1002 RTRIM(string, string).]],
1003   [[rtrim('abc***', '*')], ["abc"]],
1004   [[rtrim('abc', '*')], ["abc"]],
1005   [[rtrim('abc*', '*')], ["abc"]],
1006   [[rtrim('', '*')], [""]],
1007   [[rtrim(8, '*')], [error],
1008    [error: DEBUG EVALUATE: Function invocation rtrim(number, string) does not match any known function.  Candidates are:
1009 RTRIM(string)
1010 RTRIM(string, string).]],
1011   [[rtrim(' x', 8)], [error],
1012    [error: DEBUG EVALUATE: Function invocation rtrim(string, number) does not match any known function.  Candidates are:
1013 RTRIM(string)
1014 RTRIM(string, string).]],
1015   [[rtrim(8, 9)], [error],
1016    [error: DEBUG EVALUATE: Function invocation rtrim(number, number) does not match any known function.  Candidates are:
1017 RTRIM(string)
1018 RTRIM(string, string).]],
1019
1020   [[string(123.56, f5.1)], ["123.6"]],
1021   [[string($sysmis, f5.1)], ["   . "]],
1022   [[string("abc", A5)], [error],
1023    [error: DEBUG EVALUATE: Type mismatch invoking STRING(number, num_output_format) as string(string, format).]],
1024 dnl E has a minimum width of 6 on output:
1025   [[string(123, e1)], [error],
1026    [error: DEBUG EVALUATE: Type mismatch invoking STRING(number, num_output_format) as string(number, format).]],
1027   [[string(123, e6.0)], ["1E+002"]],
1028
1029   [[strunc('a c   ', 9)], ["a c"]],
1030   [[strunc('a c   ', 7)], ["a c"]],
1031   [[strunc('a c   ', 6)], ["a c"]],
1032   [[strunc('a c   ', 5)], ["a c"]],
1033   [[strunc('a c   ', 4)], ["a c"]],
1034   [[strunc('a c   ', 3)], ["a c"]],
1035   [[strunc('a c   ', 2)], ["a"]],
1036   [[strunc('a c   ', 1)], ["a"]],
1037   [[strunc('a c   ', 0)], [""]],
1038   [[strunc('a c   ', -1)], [""]],
1039   [[strunc('a c   ', $sysmis)], [""]],
1040   [[strunc('  abc  ', 9)], ["  abc"]],
1041   [[strunc('  abc  ', 8)], ["  abc"]],
1042   [[strunc('  abc  ', 7)], ["  abc"]],
1043   [[strunc('  abc  ', 6)], ["  abc"]],
1044   [[strunc('  abc  ', 5)], ["  abc"]],
1045   [[strunc('  abc  ', 4)], ["  ab"]],
1046   [[strunc('  abc  ', 3)], ["  a"]],
1047   [[strunc('  abc  ', 2)], [""]],
1048   [[strunc('  abc  ', 1)], [""]],
1049   [[strunc('  abc  ', -1)], [""]],
1050   [[strunc('  abc  ', $sysmis)], [""]],
1051
1052   [[substr('abcdefgh', -5)], [""]],
1053   [[substr('abcdefgh', 0)], [""]],
1054   [[substr('abcdefgh', 1)], ["abcdefgh"]],
1055   [[substr('abcdefgh', 3)], ["cdefgh"]],
1056   [[substr('abcdefgh', 5)], ["efgh"]],
1057   [[substr('abcdefgh', 6)], ["fgh"]],
1058   [[substr('abcdefgh', 7)], ["gh"]],
1059   [[substr('abcdefgh', 8)], ["h"]],
1060   [[substr('abcdefgh', 9)], [""]],
1061   [[substr('abcdefgh', 10)], [""]],
1062   [[substr('abcdefgh', 20)], [""]],
1063   [[substr('abcdefgh', $sysmis)], [""]],
1064   [[substr(0, 10)], [error],
1065    [error: DEBUG EVALUATE: Function invocation substr(number, number) does not match any known function.  Candidates are:
1066 SUBSTR(string, number)
1067 SUBSTR(string, number, number).]],
1068   [[substr('abcd', 'abc')], [error],
1069    [error: DEBUG EVALUATE: Function invocation substr(string, string) does not match any known function.  Candidates are:
1070 SUBSTR(string, number)
1071 SUBSTR(string, number, number).]],
1072   [[substr(0, 'abc')], [error],
1073    [error: DEBUG EVALUATE: Function invocation substr(number, string) does not match any known function.  Candidates are:
1074 SUBSTR(string, number)
1075 SUBSTR(string, number, number).]],
1076
1077   [[substr('abcdefgh', 0, 0)], [""]],
1078   [[substr('abcdefgh', 3, 0)], [""]],
1079   [[substr('abcdefgh', 5, 0)], [""]],
1080   [[substr('abcdefgh', 9, 0)], [""]],
1081   [[substr('abcdefgh', 0, 1)], [""]],
1082   [[substr('abcdefgh', 0, 5)], [""]],
1083   [[substr('abcdefgh', 1, 8)], ["abcdefgh"]],
1084   [[substr('abcdefgh', 1, 10)], ["abcdefgh"]],
1085   [[substr('abcdefgh', 1, 20)], ["abcdefgh"]],
1086   [[substr('abcdefgh', 3, 4)], ["cdef"]],
1087   [[substr('abcdefgh', 5, 2)], ["ef"]],
1088   [[substr('abcdefgh', 6, 1)], ["f"]],
1089   [[substr('abcdefgh', 7, 10)], ["gh"]],
1090   [[substr('abcdefgh', 8, 1)], ["h"]],
1091   [[substr('abcdefgh', 8, 2)], ["h"]],
1092   [[substr('abcdefgh', 9, 11)], [""]],
1093   [[substr('abcdefgh', 10, 52)], [""]],
1094   [[substr('abcdefgh', 20, 1)], [""]],
1095   [[substr('abcdefgh', $sysmis, 2)], [""]],
1096   [[substr('abcdefgh', 9, $sysmis)], [""]],
1097   [[substr('abcdefgh', $sysmis, $sysmis)], [""]],
1098   [[substr('abc', 1, 'x')], [error],
1099    [error: DEBUG EVALUATE: Function invocation substr(string, number, string) does not match any known function.  Candidates are:
1100 SUBSTR(string, number)
1101 SUBSTR(string, number, number).]],
1102   [[substr(0, 10, 1)], [error],
1103    [error: DEBUG EVALUATE: Function invocation substr(number, number, number) does not match any known function.  Candidates are:
1104 SUBSTR(string, number)
1105 SUBSTR(string, number, number).]],
1106   [[substr(0, 10, 'x')], [error],
1107    [error: DEBUG EVALUATE: Function invocation substr(number, number, string) does not match any known function.  Candidates are:
1108 SUBSTR(string, number)
1109 SUBSTR(string, number, number).]],
1110   [[substr('abcd', 'abc', 0)], [error],
1111    [error: DEBUG EVALUATE: Function invocation substr(string, string, number) does not match any known function.  Candidates are:
1112 SUBSTR(string, number)
1113 SUBSTR(string, number, number).]],
1114   [[substr('abcd', 'abc', 'j')], [error],
1115    [error: DEBUG EVALUATE: Function invocation substr(string, string, string) does not match any known function.  Candidates are:
1116 SUBSTR(string, number)
1117 SUBSTR(string, number, number).]],
1118   [[substr(0, 'abc', 4)], [error],
1119    [error: DEBUG EVALUATE: Function invocation substr(number, string, number) does not match any known function.  Candidates are:
1120 SUBSTR(string, number)
1121 SUBSTR(string, number, number).]],
1122   [[substr(0, 'abc', 'k')], [error],
1123    [error: DEBUG EVALUATE: Function invocation substr(number, string, string) does not match any known function.  Candidates are:
1124 SUBSTR(string, number)
1125 SUBSTR(string, number, number).]],
1126
1127   [[upcase('abcdefghijklmnopqrstuvwxyz!@%&*089')], ["ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089"]],
1128   [[upcase('')], [""]],
1129   [[upcase(1)], [error],
1130    [error: DEBUG EVALUATE: Type mismatch invoking UPCASE(string) as upcase(number).]])
1131
1132 CHECK_EXPR_EVAL([time ctime date yrmoda],
1133   [[time.days(1)], [86400.00]],
1134   [[time.days(-1)], [-86400.00]],
1135   [[time.days(0.5)], [43200.00]],
1136   [[time.days('x')], [error],
1137    [error: DEBUG EVALUATE: Type mismatch invoking TIME.DAYS(number) as time.days(string).]],
1138   [[time.days($sysmis)], [sysmis]],
1139
1140   [[time.hms(4,50,38)], [17438.00]],
1141   [[time.hms(12,31,35)], [45095.00]],
1142   [[time.hms(12,47,53)], [46073.00]],
1143   [[time.hms(1,26,0)], [5160.00]],
1144   [[time.hms(20,58,11)], [75491.00]],
1145   [[time.hms(7,36,5)], [27365.00]],
1146   [[time.hms(15,43,49)], [56629.00]],
1147   [[time.hms(4,25,9)], [15909.00]],
1148   [[time.hms(6,49,27)], [24567.00]],
1149   [[time.hms(2,57,52)], [10672.00]],
1150   [[time.hms(16,45,44)], [60344.00]],
1151   [[time.hms(21,30,57)], [77457.00]],
1152   [[time.hms(22,30,4)], [81004.00]],
1153   [[time.hms(1,56,51)], [7011.00]],
1154   [[time.hms(5, 6, 7)], [18367.00]],
1155   [[time.hms(5, 6, 0)], [18360.00]],
1156   [[time.hms(5, 0, 7)], [18007.00]],
1157   [[time.hms(0, 6, 7)], [367.00]],
1158   [[time.hms(-5, 6, -7)], [sysmis],
1159    [warning: DEBUG EVALUATE: TIME.HMS cannot mix positive and negative arguments.]],
1160   [[time.hms(-5, 5, -7)], [sysmis],
1161    [warning: DEBUG EVALUATE: TIME.HMS cannot mix positive and negative arguments.]],
1162   [[time.hms($sysmis, 6, 7)], [sysmis]],
1163   [[time.hms(5, $sysmis, 7)], [sysmis]],
1164   [[time.hms(5, $sysmis, 7)], [sysmis]],
1165   [[time.hms($sysmis, $sysmis, 7)], [sysmis]],
1166   [[time.hms(5, $sysmis, $sysmis)], [sysmis]],
1167   [[time.hms($sysmis, $sysmis, 7)], [sysmis]],
1168   [[time.hms($sysmis, $sysmis, $sysmis)], [sysmis]],
1169
1170   [[ctime.days(106272)], [1.23]],
1171   [[ctime.hours(106272)], [29.52]],
1172   [[ctime.minutes(106272)], [1771.20]],
1173   [[ctime.seconds(106272)], [106272.00]],
1174   [[ctime.days(-106272)], [-1.23]],
1175   [[ctime.hours(-106272)], [-29.52]],
1176   [[ctime.minutes(-106272)], [-1771.20]],
1177   [[ctime.seconds(-106272)], [-106272.00]],
1178   [[ctime.days($sysmis)], [sysmis]],
1179   [[ctime.hours($sysmis)], [sysmis]],
1180   [[ctime.minutes($sysmis)], [sysmis]],
1181   [[ctime.seconds($sysmis)], [sysmis]],
1182   [[ctime.days('a')], [error],
1183    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.DAYS(number) as ctime.days(string).]],
1184   [[ctime.hours('b')], [error],
1185    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.HOURS(number) as ctime.hours(string).]],
1186   [[ctime.minutes('c')], [error],
1187    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.MINUTES(number) as ctime.minutes(string).]],
1188   [[ctime.seconds('d')], [error],
1189    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.SECONDS(number) as ctime.seconds(string).]],
1190
1191   [[ctime.days(date.dmy(15,10,1582))], [1.00]],
1192   [[ctime.days(date.dmy(6,9,1719))], [50000.00]],
1193   [[ctime.days(date.dmy(24,1,1583))], [102.00]],
1194   [[ctime.days(date.dmy(14,12,1585))], [1157.00]],
1195   [[ctime.days(date.dmy(26,11,1621))], [14288.00]],
1196   [[ctime.days(date.dmy(25,12,1821))], [87365.00]],
1197   [[ctime.days(date.dmy(3,12,1882))], [109623.00]],
1198   [[ctime.days(date.dmy(6,4,2002))], [153211.00]],
1199   [[ctime.days(date.dmy(19,12,1999))], [152372.00]],
1200   [[ctime.days(date.dmy(1,10,1978))], [144623.00]],
1201   [[ctime.days(date.dmy(0,10,1978))], [144622.00]],
1202   [[ctime.days(date.dmy(32,10,1978))], [sysmis],
1203    [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
1204   [[ctime.days(date.dmy(31,0,1978))], [144349.00]],
1205   [[ctime.days(date.dmy(31,13,1978))], [144745.00]],
1206   [[ctime.days(date.dmy($sysmis,10,1978))], [sysmis]],
1207   [[ctime.days(date.dmy(31,$sysmis,1978))], [sysmis]],
1208   [[ctime.days(date.dmy(31,10,$sysmis))], [sysmis]],
1209   [[ctime.days(date.dmy($sysmis,$sysmis,1978))], [sysmis]],
1210   [[ctime.days(date.dmy(31,$sysmis,$sysmis))], [sysmis]],
1211   [[ctime.days(date.dmy($sysmis,10,$sysmis))], [sysmis]],
1212   [[ctime.days(date.dmy($sysmis,$sysmis,$sysmis))], [sysmis]],
1213   [[date.dmy('a',1,2)], [error],
1214    [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(string, number, number).]],
1215   [[date.dmy(1,'a',2)], [error],
1216    [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(number, string, number).]],
1217   [[date.dmy(1,2,'a')], [error],
1218    [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(number, number, string).]],
1219 dnl FIXME: check out-of-range and nearly out-of-range values
1220 dnl
1221   [[yrmoda(1582,10,15)], [1.00]],
1222   [[yrmoda(1719,9,6)], [50000.00]],
1223   [[yrmoda(1583,1,24)], [102.00]],
1224   [[yrmoda(1585,12,14)], [1157.00]],
1225   [[yrmoda(1621,11,26)], [14288.00]],
1226   [[yrmoda(1821,12,25)], [87365.00]],
1227   [[yrmoda(1882,12,3)], [109623.00]],
1228   [[yrmoda(2002,4,6)], [153211.00]],
1229   [[yrmoda(1999,12,19)], [152372.00]],
1230   [[yrmoda(1978,10,1)], [144623.00]],
1231   [[yrmoda(1978,10,0)], [144622.00]],
1232   [[yrmoda(1978,10,32)], [sysmis],
1233    [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
1234   [[yrmoda(1978,0,31)], [144349.00]],
1235   [[yrmoda(1978,13,31)], [144745.00]],
1236   [[yrmoda(1978,10,$sysmis)], [sysmis]],
1237   [[yrmoda(1978,$sysmis,31)], [sysmis]],
1238   [[yrmoda($sysmis,10,31)], [sysmis]],
1239   [[yrmoda(1978,$sysmis,$sysmis)], [sysmis]],
1240   [[yrmoda($sysmis,$sysmis,31)], [sysmis]],
1241   [[yrmoda($sysmis,10,$sysmis)], [sysmis]],
1242   [[yrmoda($sysmis,$sysmis,$sysmis)], [sysmis]],
1243   [[yrmoda('a',1,2)], [error],
1244    [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(string, number, number).]],
1245   [[yrmoda(1,'a',2)], [error],
1246    [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(number, string, number).]],
1247   [[yrmoda(1,2,'a')], [error],
1248    [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(number, number, string).]],
1249 dnl FIXME: check out-of-range and nearly out-of-range values
1250 dnl
1251   [[ctime.days(date.mdy(6,10,1648)) + 577735], [601716.00]],
1252   [[ctime.days(date.mdy(6,30,1680)) + 577735], [613424.00]],
1253   [[ctime.days(date.mdy(7,24,1716)) + 577735], [626596.00]],
1254   [[ctime.days(date.mdy(6,19,1768)) + 577735], [645554.00]],
1255   [[ctime.days(date.mdy(8,2,1819)) + 577735], [664224.00]],
1256   [[ctime.days(date.mdy(3,27,1839)) + 577735], [671401.00]],
1257   [[ctime.days(date.mdy(4,19,1903)) + 577735], [694799.00]],
1258   [[ctime.days(date.mdy(8,25,1929)) + 577735], [704424.00]],
1259   [[ctime.days(date.mdy(9,29,1941)) + 577735], [708842.00]],
1260   [[ctime.days(date.mdy(4,19,1943)) + 577735], [709409.00]],
1261   [[ctime.days(date.mdy(10,7,1943)) + 577735], [709580.00]],
1262   [[ctime.days(date.mdy(3,17,1992)) + 577735], [727274.00]],
1263   [[ctime.days(date.mdy(2,25,1996)) + 577735], [728714.00]],
1264   [[ctime.days(date.mdy(11,10,2038)) + 577735], [744313.00]],
1265   [[ctime.days(date.mdy(7,18,2094)) + 577735], [764652.00]],
1266 dnl FIXME: check out-of-range and nearly out-of-range values
1267 dnl
1268   [[ctime.days(date.mdy(10,15,1582))], [1.00]],
1269   [[ctime.days(date.mdy(9,6,1719))], [50000.00]],
1270   [[ctime.days(date.mdy(1,24,1583))], [102.00]],
1271   [[ctime.days(date.mdy(12,14,1585))], [1157.00]],
1272   [[ctime.days(date.mdy(11,26,1621))], [14288.00]],
1273   [[ctime.days(date.mdy(12,25,1821))], [87365.00]],
1274   [[ctime.days(date.mdy(12,3,1882))], [109623.00]],
1275   [[ctime.days(date.mdy(4,6,2002))], [153211.00]],
1276   [[ctime.days(date.mdy(12,19,1999))], [152372.00]],
1277   [[ctime.days(date.mdy(10,1,1978))], [144623.00]],
1278   [[ctime.days(date.mdy(10,0,1978))], [144622.00]],
1279   [[ctime.days(date.mdy(10,32,1978))], [sysmis],
1280    [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
1281   [[ctime.days(date.mdy(0,31,1978))], [144349.00]],
1282   [[ctime.days(date.mdy(13,31,1978))], [144745.00]],
1283   [[ctime.days(date.mdy(10,$sysmis,1978))], [sysmis]],
1284   [[ctime.days(date.mdy($sysmis,31,1978))], [sysmis]],
1285   [[ctime.days(date.mdy(10,31,$sysmis))], [sysmis]],
1286   [[ctime.days(date.mdy($sysmis,$sysmis,1978))], [sysmis]],
1287   [[ctime.days(date.mdy($sysmis,31,$sysmis))], [sysmis]],
1288   [[ctime.days(date.mdy(10,$sysmis,$sysmis))], [sysmis]],
1289   [[ctime.days(date.mdy($sysmis,$sysmis,$sysmis))], [sysmis]],
1290   [[date.mdy('a',1,2)], [error],
1291    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(string, number, number).]],
1292   [[date.mdy(1,'a',2)], [error],
1293    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(number, string, number).]],
1294   [[date.mdy(1,2,'a')], [error],
1295    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(number, number, string).]],
1296   [[ctime.days(date.mdy(0,0,0))], [152353.00]],
1297   [[ctime.days(date.mdy(0,0,999))], [sysmis],
1298    [error: DEBUG EVALUATE: Date 0998-12-0 is before the earliest acceptable date of 1582-10-15.]],
1299   [[date.mdy(1,1,1582)], [sysmis],
1300    [error: DEBUG EVALUATE: Date 1582-1-1 is before the earliest acceptable date of 1582-10-15.]],
1301   [[date.mdy(10,14,1582)], [sysmis],
1302    [error: DEBUG EVALUATE: Date 1582-10-14 is before the earliest acceptable date of 1582-10-15.]],
1303   [[date.mdy(10,15,1582)], [86400.00]],
1304
1305   [[ctime.days(date.moyr(1,2000))], [152385.00]],
1306   [[ctime.days(date.moyr(2,2000))], [152416.00]],
1307   [[ctime.days(date.moyr(3,2000))], [152445.00]],
1308   [[ctime.days(date.moyr(4,2000))], [152476.00]],
1309   [[ctime.days(date.moyr(5,2000))], [152506.00]],
1310   [[ctime.days(date.moyr(13,2000))], [152751.00]],
1311   [[ctime.days(date.moyr(14,2000))], [sysmis],
1312    [error: DEBUG EVALUATE: Month 14 is not in acceptable range of 0 to 13.]],
1313   [[ctime.days(date.moyr($sysmis,2000))], [sysmis]],
1314   [[ctime.days(date.moyr(1,$sysmis))], [sysmis]],
1315   [[ctime.days(date.moyr($sysmis,$sysmis))], [sysmis]],
1316   [[date.moyr('a',2000)], [error],
1317    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(string, number).]],
1318   [[date.moyr(5,'a')], [error],
1319    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(number, string).]],
1320   [[date.moyr('a','b')], [error],
1321    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(string, string).]],
1322
1323   [[ctime.days(date.qyr(1,2000))], [152385.00]],
1324   [[ctime.days(date.qyr(2,2000))], [152476.00]],
1325   [[ctime.days(date.qyr(5,2000))], [sysmis],
1326    [warning: DEBUG EVALUATE: The first argument to DATE.QYR must be 1, 2, 3, or 4.]],
1327   [[ctime.days(date.qyr(6,2000))], [sysmis],
1328    [warning: DEBUG EVALUATE: The first argument to DATE.QYR must be 1, 2, 3, or 4.]],
1329   [[ctime.days(date.qyr($sysmis,2000))], [sysmis]],
1330   [[ctime.days(date.qyr(1,$sysmis))], [sysmis]],
1331   [[ctime.days(date.qyr($sysmis,$sysmis))], [sysmis]],
1332   [[date.qyr('a',2000)], [error],
1333    [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(string, number).]],
1334   [[date.qyr(5,'a')], [error],
1335    [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(number, string).]],
1336   [[date.qyr('a','b')], [error],
1337    [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(string, string).]],
1338
1339   [[ctime.days(date.wkyr(1,2000))], [152385.00]],
1340   [[ctime.days(date.wkyr(15,1999))], [152118.00]],
1341   [[ctime.days(date.wkyr(36,1999))], [152265.00]],
1342   [[ctime.days(date.wkyr(54,1999))], [sysmis],
1343    [error: DEBUG EVALUATE: The week argument to DATE.WKYR is outside the acceptable range of 1 to 53.  The result will be system-missing.]],
1344   [[ctime.days(date.wkyr($sysmis,1999))], [sysmis]],
1345   [[ctime.days(date.wkyr(1,$sysmis))], [sysmis]],
1346   [[ctime.days(date.wkyr($sysmis,$sysmis))], [sysmis]],
1347   [[date.wkyr('a',1999)], [error],
1348    [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(string, number).]],
1349   [[date.wkyr(5,'a')], [error],
1350    [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(number, string).]],
1351   [[date.wkyr('a','b')], [error],
1352    [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(string, string).]],
1353
1354   [[ctime.days(date.yrday(2000,1))], [152385.00]],
1355   [[ctime.days(date.yrday(2000,100))], [152484.00]],
1356   [[ctime.days(date.yrday(2000,253))], [152637.00]],
1357   [[ctime.days(date.yrday(2000,500))], [sysmis],
1358    [error: DEBUG EVALUATE: The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  The result will be system-missing.]],
1359   [[ctime.days(date.yrday(2000,-100))], [sysmis],
1360    [error: DEBUG EVALUATE: The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  The result will be system-missing.]],
1361   [[ctime.days(date.yrday(1999,$sysmis))], [sysmis]],
1362   [[ctime.days(date.yrday($sysmis,1))], [sysmis]],
1363   [[ctime.days(date.yrday($sysmis,$sysmis))], [sysmis]],
1364   [[date.yrday(1999,'a')], [error],
1365    [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(number, string).]],
1366   [[date.yrday('a',5)], [error],
1367    [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(string, number).]],
1368   [[date.yrday('a','b')], [error],
1369    [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(string, string).]])
1370
1371 CHECK_EXPR_EVAL([xdate],
1372   [[xdate.date(date.mdy(6,10,1648) + time.hms(0,0,0)) / 86400], [23981.00]],
1373   [[xdate.date(date.mdy(6,30,1680) + time.hms(4,50,38)) / 86400], [35689.00]],
1374   [[xdate.date(date.mdy(7,24,1716) + time.hms(12,31,35)) / 86400], [48861.00]],
1375   [[xdate.date(date.mdy(6,19,1768) + time.hms(12,47,53)) / 86400], [67819.00]],
1376   [[xdate.date(date.mdy(8,2,1819) + time.hms(1,26,0)) / 86400], [86489.00]],
1377   [[xdate.date(date.mdy(3,27,1839) + time.hms(20,58,11)) / 86400], [93666.00]],
1378   [[xdate.date(date.mdy(4,19,1903) + time.hms(7,36,5)) / 86400], [117064.00]],
1379   [[xdate.date(date.mdy(8,25,1929) + time.hms(15,43,49)) / 86400], [126689.00]],
1380   [[xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400], [131107.00]],
1381   [[xdate.date(date.mdy(4,19,1943) + time.hms(6,49,27)) / 86400], [131674.00]],
1382   [[xdate.date(date.mdy(10,7,1943) + time.hms(2,57,52)) / 86400], [131845.00]],
1383   [[xdate.date(date.mdy(3,17,1992) + time.hms(16,45,44)) / 86400], [149539.00]],
1384   [[xdate.date(date.mdy(2,25,1996) + time.hms(21,30,57)) / 86400], [150979.00]],
1385   [[xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400], [131107.00]],
1386   [[xdate.date(date.mdy(4,19,43) + time.hms(6,49,27)) / 86400], [131674.00]],
1387   [[xdate.date(date.mdy(10,7,43) + time.hms(2,57,52)) / 86400], [131845.00]],
1388   [[xdate.date(date.mdy(3,17,92) + time.hms(16,45,44)) / 86400], [149539.00]],
1389   [[xdate.date(date.mdy(2,25,96) + time.hms(21,30,57)) / 86400], [150979.00]],
1390   [[xdate.date(date.mdy(11,10,2038) + time.hms(22,30,4)) / 86400], [166578.00]],
1391   [[xdate.date(date.mdy(7,18,2094) + time.hms(1,56,51)) / 86400], [186917.00]],
1392   [[xdate.date(123.4)], [0.00]],
1393   [[xdate.date('')], [error],
1394    [error: DEBUG EVALUATE: Type mismatch invoking XDATE.DATE(number) as xdate.date(string).]],
1395
1396   [[xdate.hour(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
1397   [[xdate.hour(date.mdy(6,30,1680) + time.hms(4,50,38))], [4.00]],
1398   [[xdate.hour(date.mdy(7,24,1716) + time.hms(12,31,35))], [12.00]],
1399   [[xdate.hour(date.mdy(6,19,1768) + time.hms(12,47,53))], [12.00]],
1400   [[xdate.hour(date.mdy(8,2,1819) + time.hms(1,26,0))], [1.00]],
1401   [[xdate.hour(date.mdy(3,27,1839) + time.hms(20,58,11))], [20.00]],
1402   [[xdate.hour(date.mdy(4,19,1903) + time.hms(7,36,5))], [7.00]],
1403   [[xdate.hour(date.mdy(8,25,1929) + time.hms(15,43,49))], [15.00]],
1404   [[xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9))], [4.00]],
1405   [[xdate.hour(date.mdy(4,19,1943) + time.hms(6,49,27))], [6.00]],
1406   [[xdate.hour(date.mdy(10,7,1943) + time.hms(2,57,52))], [2.00]],
1407   [[xdate.hour(date.mdy(3,17,1992) + time.hms(16,45,44))], [16.00]],
1408   [[xdate.hour(date.mdy(2,25,1996) + time.hms(21,30,57))], [21.00]],
1409   [[xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9))], [4.00]],
1410   [[xdate.hour(date.mdy(4,19,43) + time.hms(6,49,27))], [6.00]],
1411   [[xdate.hour(date.mdy(10,7,43) + time.hms(2,57,52))], [2.00]],
1412   [[xdate.hour(date.mdy(3,17,92) + time.hms(16,45,44))], [16.00]],
1413   [[xdate.hour(date.mdy(2,25,96) + time.hms(21,30,57))], [21.00]],
1414   [[xdate.hour(date.mdy(11,10,2038) + time.hms(22,30,4))], [22.00]],
1415   [[xdate.hour(date.mdy(7,18,2094) + time.hms(1,56,51))], [1.00]],
1416   [[xdate.hour(-1)], [-1.00]],
1417   [[xdate.hour(1)], [0.00]],
1418   [[xdate.hour($sysmis)], [sysmis]],
1419   [[xdate.hour('')], [error],
1420    [error: DEBUG EVALUATE: Type mismatch invoking XDATE.HOUR(number) as xdate.hour(string).]],
1421
1422   [[xdate.jday(date.mdy(6,10,1648) + time.hms(0,0,0))], [162.00]],
1423   [[xdate.jday(date.mdy(6,30,1680) + time.hms(4,50,38))], [182.00]],
1424   [[xdate.jday(date.mdy(7,24,1716) + time.hms(12,31,35))], [206.00]],
1425   [[xdate.jday(date.mdy(6,19,1768) + time.hms(12,47,53))], [171.00]],
1426   [[xdate.jday(date.mdy(8,2,1819) + time.hms(1,26,0))], [214.00]],
1427   [[xdate.jday(date.mdy(3,27,1839) + time.hms(20,58,11))], [86.00]],
1428   [[xdate.jday(date.mdy(4,19,1903) + time.hms(7,36,5))], [109.00]],
1429   [[xdate.jday(date.mdy(8,25,1929) + time.hms(15,43,49))], [237.00]],
1430   [[xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9))], [272.00]],
1431   [[xdate.jday(date.mdy(4,19,1943) + time.hms(6,49,27))], [109.00]],
1432   [[xdate.jday(date.mdy(10,7,1943) + time.hms(2,57,52))], [280.00]],
1433   [[xdate.jday(date.mdy(3,17,1992) + time.hms(16,45,44))], [77.00]],
1434   [[xdate.jday(date.mdy(2,25,1996) + time.hms(21,30,57))], [56.00]],
1435   [[xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9))], [272.00]],
1436   [[xdate.jday(date.mdy(4,19,43) + time.hms(6,49,27))], [109.00]],
1437   [[xdate.jday(date.mdy(10,7,43) + time.hms(2,57,52))], [280.00]],
1438   [[xdate.jday(date.mdy(3,17,92) + time.hms(16,45,44))], [77.00]],
1439   [[xdate.jday(date.mdy(2,25,96) + time.hms(21,30,57))], [56.00]],
1440   [[xdate.jday(date.mdy(11,10,2038) + time.hms(22,30,4))], [314.00]],
1441   [[xdate.jday(date.mdy(7,18,2094) + time.hms(1,56,51))], [199.00]],
1442   [[xdate.jday(0)], [sysmis]],
1443   [[xdate.jday(1)], [sysmis]],
1444   [[xdate.jday(86400)], [288.00]],
1445
1446   [[xdate.mday(date.mdy(6,10,1648) + time.hms(0,0,0))], [10.00]],
1447   [[xdate.mday(date.mdy(6,30,1680) + time.hms(4,50,38))], [30.00]],
1448   [[xdate.mday(date.mdy(7,24,1716) + time.hms(12,31,35))], [24.00]],
1449   [[xdate.mday(date.mdy(6,19,1768) + time.hms(12,47,53))], [19.00]],
1450   [[xdate.mday(date.mdy(8,2,1819) + time.hms(1,26,0))], [2.00]],
1451   [[xdate.mday(date.mdy(3,27,1839) + time.hms(20,58,11))], [27.00]],
1452   [[xdate.mday(date.mdy(4,19,1903) + time.hms(7,36,5))], [19.00]],
1453   [[xdate.mday(date.mdy(8,25,1929) + time.hms(15,43,49))], [25.00]],
1454   [[xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9))], [29.00]],
1455   [[xdate.mday(date.mdy(4,19,1943) + time.hms(6,49,27))], [19.00]],
1456   [[xdate.mday(date.mdy(10,7,1943) + time.hms(2,57,52))], [7.00]],
1457   [[xdate.mday(date.mdy(3,17,1992) + time.hms(16,45,44))], [17.00]],
1458   [[xdate.mday(date.mdy(2,25,1996) + time.hms(21,30,57))], [25.00]],
1459   [[xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9))], [29.00]],
1460   [[xdate.mday(date.mdy(4,19,43) + time.hms(6,49,27))], [19.00]],
1461   [[xdate.mday(date.mdy(10,7,43) + time.hms(2,57,52))], [7.00]],
1462   [[xdate.mday(date.mdy(3,17,92) + time.hms(16,45,44))], [17.00]],
1463   [[xdate.mday(date.mdy(2,25,96) + time.hms(21,30,57))], [25.00]],
1464   [[xdate.mday(date.mdy(11,10,2038) + time.hms(22,30,4))], [10.00]],
1465   [[xdate.mday(date.mdy(7,18,2094) + time.hms(1,56,51))], [18.00]],
1466
1467   [[xdate.minute(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
1468   [[xdate.minute(date.mdy(6,30,1680) + time.hms(4,50,38))], [50.00]],
1469   [[xdate.minute(date.mdy(7,24,1716) + time.hms(12,31,35))], [31.00]],
1470   [[xdate.minute(date.mdy(6,19,1768) + time.hms(12,47,53))], [47.00]],
1471   [[xdate.minute(date.mdy(8,2,1819) + time.hms(1,26,0))], [26.00]],
1472   [[xdate.minute(date.mdy(3,27,1839) + time.hms(20,58,11))], [58.00]],
1473   [[xdate.minute(date.mdy(4,19,1903) + time.hms(7,36,5))], [36.00]],
1474   [[xdate.minute(date.mdy(8,25,1929) + time.hms(15,43,49))], [43.00]],
1475   [[xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9))], [25.00]],
1476   [[xdate.minute(date.mdy(4,19,1943) + time.hms(6,49,27))], [49.00]],
1477   [[xdate.minute(date.mdy(10,7,1943) + time.hms(2,57,52))], [57.00]],
1478   [[xdate.minute(date.mdy(3,17,1992) + time.hms(16,45,44))], [45.00]],
1479   [[xdate.minute(date.mdy(2,25,1996) + time.hms(21,30,57))], [30.00]],
1480   [[xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9))], [25.00]],
1481   [[xdate.minute(date.mdy(4,19,43) + time.hms(6,49,27))], [49.00]],
1482   [[xdate.minute(date.mdy(10,7,43) + time.hms(2,57,52))], [57.00]],
1483   [[xdate.minute(date.mdy(3,17,92) + time.hms(16,45,44))], [45.00]],
1484   [[xdate.minute(date.mdy(2,25,96) + time.hms(21,30,57))], [30.00]],
1485   [[xdate.minute(date.mdy(11,10,2038) + time.hms(22,30,4))], [30.00]],
1486   [[xdate.minute(date.mdy(7,18,2094) + time.hms(1,56,51))], [56.00]],
1487
1488   [[xdate.month(date.mdy(6,10,1648) + time.hms(0,0,0))], [6.00]],
1489   [[xdate.month(date.mdy(6,30,1680) + time.hms(4,50,38))], [6.00]],
1490   [[xdate.month(date.mdy(7,24,1716) + time.hms(12,31,35))], [7.00]],
1491   [[xdate.month(date.mdy(6,19,1768) + time.hms(12,47,53))], [6.00]],
1492   [[xdate.month(date.mdy(8,2,1819) + time.hms(1,26,0))], [8.00]],
1493   [[xdate.month(date.mdy(3,27,1839) + time.hms(20,58,11))], [3.00]],
1494   [[xdate.month(date.mdy(4,19,1903) + time.hms(7,36,5))], [4.00]],
1495   [[xdate.month(date.mdy(8,25,1929) + time.hms(15,43,49))], [8.00]],
1496   [[xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
1497   [[xdate.month(date.mdy(4,19,1943) + time.hms(6,49,27))], [4.00]],
1498   [[xdate.month(date.mdy(10,7,1943) + time.hms(2,57,52))], [10.00]],
1499   [[xdate.month(date.mdy(3,17,1992) + time.hms(16,45,44))], [3.00]],
1500   [[xdate.month(date.mdy(2,25,1996) + time.hms(21,30,57))], [2.00]],
1501   [[xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
1502   [[xdate.month(date.mdy(4,19,43) + time.hms(6,49,27))], [4.00]],
1503   [[xdate.month(date.mdy(10,7,43) + time.hms(2,57,52))], [10.00]],
1504   [[xdate.month(date.mdy(3,17,92) + time.hms(16,45,44))], [3.00]],
1505   [[xdate.month(date.mdy(2,25,96) + time.hms(21,30,57))], [2.00]],
1506   [[xdate.month(date.mdy(11,10,2038) + time.hms(22,30,4))], [11.00]],
1507   [[xdate.month(date.mdy(7,18,2094) + time.hms(1,56,51))], [7.00]],
1508
1509   [[xdate.quarter(date.mdy(6,10,1648) + time.hms(0,0,0))], [2.00]],
1510   [[xdate.quarter(date.mdy(6,30,1680) + time.hms(4,50,38))], [2.00]],
1511   [[xdate.quarter(date.mdy(7,24,1716) + time.hms(12,31,35))], [3.00]],
1512   [[xdate.quarter(date.mdy(6,19,1768) + time.hms(12,47,53))], [2.00]],
1513   [[xdate.quarter(date.mdy(8,2,1819) + time.hms(1,26,0))], [3.00]],
1514   [[xdate.quarter(date.mdy(3,27,1839) + time.hms(20,58,11))], [1.00]],
1515   [[xdate.quarter(date.mdy(4,19,1903) + time.hms(7,36,5))], [2.00]],
1516   [[xdate.quarter(date.mdy(8,25,1929) + time.hms(15,43,49))], [3.00]],
1517   [[xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9))], [3.00]],
1518   [[xdate.quarter(date.mdy(4,19,1943) + time.hms(6,49,27))], [2.00]],
1519   [[xdate.quarter(date.mdy(10,7,1943) + time.hms(2,57,52))], [4.00]],
1520   [[xdate.quarter(date.mdy(3,17,1992) + time.hms(16,45,44))], [1.00]],
1521   [[xdate.quarter(date.mdy(2,25,1996) + time.hms(21,30,57))], [1.00]],
1522   [[xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9))], [3.00]],
1523   [[xdate.quarter(date.mdy(4,19,43) + time.hms(6,49,27))], [2.00]],
1524   [[xdate.quarter(date.mdy(10,7,43) + time.hms(2,57,52))], [4.00]],
1525   [[xdate.quarter(date.mdy(3,17,92) + time.hms(16,45,44))], [1.00]],
1526   [[xdate.quarter(date.mdy(2,25,96) + time.hms(21,30,57))], [1.00]],
1527   [[xdate.quarter(date.mdy(11,10,2038) + time.hms(22,30,4))], [4.00]],
1528   [[xdate.quarter(date.mdy(7,18,2094) + time.hms(1,56,51))], [3.00]],
1529
1530   [[xdate.second(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
1531   [[xdate.second(date.mdy(6,30,1680) + time.hms(4,50,38))], [38.00]],
1532   [[xdate.second(date.mdy(7,24,1716) + time.hms(12,31,35))], [35.00]],
1533   [[xdate.second(date.mdy(6,19,1768) + time.hms(12,47,53))], [53.00]],
1534   [[xdate.second(date.mdy(8,2,1819) + time.hms(1,26,0))], [0.00]],
1535   [[xdate.second(date.mdy(3,27,1839) + time.hms(20,58,11))], [11.00]],
1536   [[xdate.second(date.mdy(4,19,1903) + time.hms(7,36,5))], [5.00]],
1537   [[xdate.second(date.mdy(8,25,1929) + time.hms(15,43,49))], [49.00]],
1538   [[xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
1539   [[xdate.second(date.mdy(4,19,1943) + time.hms(6,49,27))], [27.00]],
1540   [[xdate.second(date.mdy(10,7,1943) + time.hms(2,57,52))], [52.00]],
1541   [[xdate.second(date.mdy(3,17,1992) + time.hms(16,45,44))], [44.00]],
1542   [[xdate.second(date.mdy(2,25,1996) + time.hms(21,30,57))], [57.00]],
1543   [[xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
1544   [[xdate.second(date.mdy(4,19,43) + time.hms(6,49,27))], [27.00]],
1545   [[xdate.second(date.mdy(10,7,43) + time.hms(2,57,52))], [52.00]],
1546   [[xdate.second(date.mdy(3,17,92) + time.hms(16,45,44))], [44.00]],
1547   [[xdate.second(date.mdy(2,25,96) + time.hms(21,30,57))], [57.00]],
1548   [[xdate.second(date.mdy(11,10,2038) + time.hms(22,30,4))], [4.00]],
1549   [[xdate.second(date.mdy(7,18,2094) + time.hms(1,56,51))], [51.00]],
1550
1551   [[xdate.tday(date.mdy(6,10,1648) + time.hms(0,0,0))], [23981.00]],
1552   [[xdate.tday(date.mdy(6,30,1680) + time.hms(4,50,38))], [35689.00]],
1553   [[xdate.tday(date.mdy(7,24,1716) + time.hms(12,31,35))], [48861.00]],
1554   [[xdate.tday(date.mdy(6,19,1768) + time.hms(12,47,53))], [67819.00]],
1555   [[xdate.tday(date.mdy(8,2,1819) + time.hms(1,26,0))], [86489.00]],
1556   [[xdate.tday(date.mdy(3,27,1839) + time.hms(20,58,11))], [93666.00]],
1557   [[xdate.tday(date.mdy(4,19,1903) + time.hms(7,36,5))], [117064.00]],
1558   [[xdate.tday(date.mdy(8,25,1929) + time.hms(15,43,49))], [126689.00]],
1559   [[xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9))], [131107.00]],
1560   [[xdate.tday(date.mdy(4,19,1943) + time.hms(6,49,27))], [131674.00]],
1561   [[xdate.tday(date.mdy(10,7,1943) + time.hms(2,57,52))], [131845.00]],
1562   [[xdate.tday(date.mdy(3,17,1992) + time.hms(16,45,44))], [149539.00]],
1563   [[xdate.tday(date.mdy(2,25,1996) + time.hms(21,30,57))], [150979.00]],
1564   [[xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9))], [131107.00]],
1565   [[xdate.tday(date.mdy(4,19,43) + time.hms(6,49,27))], [131674.00]],
1566   [[xdate.tday(date.mdy(10,7,43) + time.hms(2,57,52))], [131845.00]],
1567   [[xdate.tday(date.mdy(3,17,92) + time.hms(16,45,44))], [149539.00]],
1568   [[xdate.tday(date.mdy(2,25,96) + time.hms(21,30,57))], [150979.00]],
1569   [[xdate.tday(date.mdy(11,10,2038) + time.hms(22,30,4))], [166578.00]],
1570   [[xdate.tday(date.mdy(7,18,2094) + time.hms(1,56,51))], [186917.00]],
1571
1572   [[xdate.time(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
1573   [[xdate.time(date.mdy(6,30,1680) + time.hms(4,50,38))], [17438.00]],
1574   [[xdate.time(date.mdy(7,24,1716) + time.hms(12,31,35))], [45095.00]],
1575   [[xdate.time(date.mdy(6,19,1768) + time.hms(12,47,53))], [46073.00]],
1576   [[xdate.time(date.mdy(8,2,1819) + time.hms(1,26,0))], [5160.00]],
1577   [[xdate.time(date.mdy(3,27,1839) + time.hms(20,58,11))], [75491.00]],
1578   [[xdate.time(date.mdy(4,19,1903) + time.hms(7,36,5))], [27365.00]],
1579   [[xdate.time(date.mdy(8,25,1929) + time.hms(15,43,49))], [56629.00]],
1580   [[xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9))], [15909.00]],
1581   [[xdate.time(date.mdy(4,19,1943) + time.hms(6,49,27))], [24567.00]],
1582   [[xdate.time(date.mdy(10,7,1943) + time.hms(2,57,52))], [10672.00]],
1583   [[xdate.time(date.mdy(3,17,1992) + time.hms(16,45,44))], [60344.00]],
1584   [[xdate.time(date.mdy(2,25,1996) + time.hms(21,30,57))], [77457.00]],
1585   [[xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9))], [15909.00]],
1586   [[xdate.time(date.mdy(4,19,43) + time.hms(6,49,27))], [24567.00]],
1587   [[xdate.time(date.mdy(10,7,43) + time.hms(2,57,52))], [10672.00]],
1588   [[xdate.time(date.mdy(3,17,92) + time.hms(16,45,44))], [60344.00]],
1589   [[xdate.time(date.mdy(2,25,96) + time.hms(21,30,57))], [77457.00]],
1590   [[xdate.time(date.mdy(11,10,2038) + time.hms(22,30,4))], [81004.00]],
1591   [[xdate.time(date.mdy(7,18,2094) + time.hms(1,56,51))], [7011.00]],
1592
1593   [[xdate.week(date.mdy(6,10,1648) + time.hms(0,0,0))], [24.00]],
1594   [[xdate.week(date.mdy(6,30,1680) + time.hms(4,50,38))], [26.00]],
1595   [[xdate.week(date.mdy(7,24,1716) + time.hms(12,31,35))], [30.00]],
1596   [[xdate.week(date.mdy(6,19,1768) + time.hms(12,47,53))], [25.00]],
1597   [[xdate.week(date.mdy(8,2,1819) + time.hms(1,26,0))], [31.00]],
1598   [[xdate.week(date.mdy(3,27,1839) + time.hms(20,58,11))], [13.00]],
1599   [[xdate.week(date.mdy(4,19,1903) + time.hms(7,36,5))], [16.00]],
1600   [[xdate.week(date.mdy(8,25,1929) + time.hms(15,43,49))], [34.00]],
1601   [[xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9))], [39.00]],
1602   [[xdate.week(date.mdy(4,19,1943) + time.hms(6,49,27))], [16.00]],
1603   [[xdate.week(date.mdy(10,7,1943) + time.hms(2,57,52))], [40.00]],
1604   [[xdate.week(date.mdy(3,17,1992) + time.hms(16,45,44))], [11.00]],
1605   [[xdate.week(date.mdy(2,25,1996) + time.hms(21,30,57))], [8.00]],
1606   [[xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9))], [39.00]],
1607   [[xdate.week(date.mdy(4,19,43) + time.hms(6,49,27))], [16.00]],
1608   [[xdate.week(date.mdy(10,7,43) + time.hms(2,57,52))], [40.00]],
1609   [[xdate.week(date.mdy(3,17,92) + time.hms(16,45,44))], [11.00]],
1610   [[xdate.week(date.mdy(2,25,96) + time.hms(21,30,57))], [8.00]],
1611   [[xdate.week(date.mdy(11,10,2038) + time.hms(22,30,4))], [45.00]],
1612   [[xdate.week(date.mdy(7,18,2094) + time.hms(1,56,51))], [29.00]],
1613
1614   [[xdate.wkday(date.mdy(6,10,1648))], [4.00]],
1615   [[xdate.wkday(date.mdy(6,30,1680))], [1.00]],
1616   [[xdate.wkday(date.mdy(7,24,1716))], [6.00]],
1617   [[xdate.wkday(date.mdy(6,19,1768))], [1.00]],
1618   [[xdate.wkday(date.mdy(8,2,1819))], [2.00]],
1619   [[xdate.wkday(date.mdy(3,27,1839))], [4.00]],
1620   [[xdate.wkday(date.mdy(4,19,1903))], [1.00]],
1621   [[xdate.wkday(date.mdy(8,25,1929))], [1.00]],
1622   [[xdate.wkday(date.mdy(9,29,1941))], [2.00]],
1623   [[xdate.wkday(date.mdy(4,19,1943))], [2.00]],
1624   [[xdate.wkday(date.mdy(10,7,1943))], [5.00]],
1625   [[xdate.wkday(date.mdy(3,17,1992))], [3.00]],
1626   [[xdate.wkday(date.mdy(2,25,1996))], [1.00]],
1627   [[xdate.wkday(date.mdy(9,29,1941))], [2.00]],
1628   [[xdate.wkday(date.mdy(4,19,43))], [2.00]],
1629   [[xdate.wkday(date.mdy(10,7,43))], [5.00]],
1630   [[xdate.wkday(date.mdy(3,17,92))], [3.00]],
1631   [[xdate.wkday(date.mdy(2,25,96))], [1.00]],
1632   [[xdate.wkday(date.mdy(11,10,2038))], [4.00]],
1633   [[xdate.wkday(date.mdy(7,18,2094))], [1.00]],
1634
1635   [[xdate.year(date.mdy(6,10,1648) + time.hms(0,0,0))], [1648.00]],
1636   [[xdate.year(date.mdy(6,30,1680) + time.hms(4,50,38))], [1680.00]],
1637   [[xdate.year(date.mdy(7,24,1716) + time.hms(12,31,35))], [1716.00]],
1638   [[xdate.year(date.mdy(6,19,1768) + time.hms(12,47,53))], [1768.00]],
1639   [[xdate.year(date.mdy(8,2,1819) + time.hms(1,26,0))], [1819.00]],
1640   [[xdate.year(date.mdy(3,27,1839) + time.hms(20,58,11))], [1839.00]],
1641   [[xdate.year(date.mdy(4,19,1903) + time.hms(7,36,5))], [1903.00]],
1642   [[xdate.year(date.mdy(8,25,1929) + time.hms(15,43,49))], [1929.00]],
1643   [[xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9))], [1941.00]],
1644   [[xdate.year(date.mdy(4,19,1943) + time.hms(6,49,27))], [1943.00]],
1645   [[xdate.year(date.mdy(10,7,1943) + time.hms(2,57,52))], [1943.00]],
1646   [[xdate.year(date.mdy(3,17,1992) + time.hms(16,45,44))], [1992.00]],
1647   [[xdate.year(date.mdy(2,25,1996) + time.hms(21,30,57))], [1996.00]],
1648   [[xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9))], [1941.00]],
1649   [[xdate.year(date.mdy(4,19,43) + time.hms(6,49,27))], [1943.00]],
1650   [[xdate.year(date.mdy(10,7,43) + time.hms(2,57,52))], [1943.00]],
1651   [[xdate.year(date.mdy(3,17,92) + time.hms(16,45,44))], [1992.00]],
1652   [[xdate.year(date.mdy(2,25,96) + time.hms(21,30,57))], [1996.00]],
1653   [[xdate.year(date.mdy(11,10,2038) + time.hms(22,30,4))], [2038.00]],
1654   [[xdate.year(date.mdy(7,18,2094) + time.hms(1,56,51))], [2094.00]])
1655
1656 CHECK_EXPR_EVAL([datediff],
1657   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'years')], [-32.00]],
1658   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'years')], [-36.00]],
1659   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'years')], [-51.00]],
1660   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'years')], [-51.00]],
1661   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'years')], [-19.00]],
1662   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'years')], [-64.00]],
1663   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'years')], [-26.00]],
1664   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'years')], [-12.00]],
1665   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'years')], [-1.00]],
1666   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'years')], [0.00]],
1667   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'years')], [-48.00]],
1668   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'years')], [-3.00]],
1669   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'years')], [-54.00]],
1670   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'years')], [-1.00]],
1671   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'years')], [0.00]],
1672   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'years')], [-48.00]],
1673   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'years')], [-3.00]],
1674   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'years')], [-42.00]],
1675   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'years')], [-55.00]],
1676   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'years')], [-3.00]],
1677   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'years')], [-4.00]],
1678   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'years')], [-2.00]],
1679
1680   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'quarters')], [-128.00]],
1681   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'quarters')], [-144.00]],
1682   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'quarters')], [-207.00]],
1683   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'quarters')], [-204.00]],
1684   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'quarters')], [-78.00]],
1685   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'quarters')], [-256.00]],
1686   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'quarters')], [-105.00]],
1687   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'quarters')], [-48.00]],
1688   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'quarters')], [-6.00]],
1689   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'quarters')], [-1.00]],
1690   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'quarters')], [-193.00]],
1691   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'quarters')], [-15.00]],
1692   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'quarters')], [-217.00]],
1693   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'quarters')], [-6.00]],
1694   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'quarters')], [-1.00]],
1695   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'quarters')], [-193.00]],
1696   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'quarters')], [-15.00]],
1697   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'quarters')], [-170.00]],
1698   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'quarters')], [-222.00]],
1699   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'quarters')], [-15.00]],
1700   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'quarters')], [-16.00]],
1701   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'quarters')], [-11.00]],
1702
1703   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'months')], [-384.00]],
1704   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'months')], [-432.00]],
1705   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'months')], [-622.00]],
1706   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'months')], [-613.00]],
1707   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'months')], [-235.00]],
1708   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'months')], [-768.00]],
1709   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'months')], [-316.00]],
1710   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'months')], [-145.00]],
1711   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'months')], [-18.00]],
1712   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'months')], [-5.00]],
1713   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'months')], [-581.00]],
1714   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'months')], [-47.00]],
1715   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'months')], [-652.00]],
1716   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'months')], [-18.00]],
1717   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'months')], [-5.00]],
1718   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'months')], [-581.00]],
1719   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'months')], [-47.00]],
1720   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'months')], [-512.00]],
1721   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'months')], [-668.00]],
1722   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'months')], [-47.00]],
1723   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'months')], [-48.00]],
1724   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'months')], [-35.00]],
1725
1726   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'weeks')], [-1672.00]],
1727   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'weeks')], [-1881.00]],
1728   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'weeks')], [-2708.00]],
1729   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'weeks')], [-2667.00]],
1730   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'weeks')], [-1025.00]],
1731   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'weeks')], [-3342.00]],
1732   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'weeks')], [-1375.00]],
1733   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'weeks')], [-631.00]],
1734   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'weeks')], [-81.00]],
1735   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'weeks')], [-24.00]],
1736   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'weeks')], [-2527.00]],
1737   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'weeks')], [-205.00]],
1738   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'weeks')], [-2838.00]],
1739   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'weeks')], [-81.00]],
1740   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'weeks')], [-24.00]],
1741   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'weeks')], [-2527.00]],
1742   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'weeks')], [-205.00]],
1743   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'weeks')], [-2228.00]],
1744   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'weeks')], [-2905.00]],
1745   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'weeks')], [-208.00]],
1746   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'weeks')], [-208.00]],
1747   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'weeks')], [-156.00]],
1748
1749   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'days')], [-11708.00]],
1750   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'days')], [-13172.00]],
1751   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'days')], [-18958.00]],
1752   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'days')], [-18670.00]],
1753   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'days')], [-7177.00]],
1754   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'days')], [-23398.00]],
1755   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'days')], [-9625.00]],
1756   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'days')], [-4418.00]],
1757   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'days')], [-567.00]],
1758   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'days')], [-171.00]],
1759   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'days')], [-17694.00]],
1760   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'days')], [-1440.00]],
1761   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'days')], [-19872.00]],
1762   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'days')], [-567.00]],
1763   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'days')], [-171.00]],
1764   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'days')], [-17694.00]],
1765   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'days')], [-1440.00]],
1766   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'days')], [-15599.00]],
1767   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'days')], [-20339.00]],
1768   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'days')], [-1460.00]],
1769   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'days')], [-1461.00]],
1770   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'days')], [-1094.00]],
1771
1772   [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'years')], [32.00]],
1773   [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'years')], [36.00]],
1774   [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'years')], [51.00]],
1775   [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'years')], [51.00]],
1776   [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'years')], [19.00]],
1777   [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'years')], [64.00]],
1778   [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'years')], [26.00]],
1779   [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'years')], [12.00]],
1780   [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'years')], [1.00]],
1781   [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'years')], [0.00]],
1782   [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'years')], [48.00]],
1783   [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'years')], [3.00]],
1784   [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'years')], [54.00]],
1785   [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'years')], [1.00]],
1786   [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'years')], [0.00]],
1787   [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'years')], [48.00]],
1788   [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'years')], [3.00]],
1789   [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'years')], [42.00]],
1790   [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'years')], [55.00]],
1791   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'years')], [3.00]],
1792   [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'years')], [4.00]],
1793   [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'years')], [2.00]],
1794
1795   [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'months')], [384.00]],
1796   [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'months')], [432.00]],
1797   [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'months')], [622.00]],
1798   [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'months')], [613.00]],
1799   [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'months')], [235.00]],
1800   [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'months')], [768.00]],
1801   [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'months')], [316.00]],
1802   [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'months')], [145.00]],
1803   [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'months')], [18.00]],
1804   [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'months')], [5.00]],
1805   [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'months')], [581.00]],
1806   [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'months')], [47.00]],
1807   [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'months')], [652.00]],
1808   [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'months')], [18.00]],
1809   [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'months')], [5.00]],
1810   [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'months')], [581.00]],
1811   [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'months')], [47.00]],
1812   [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'months')], [512.00]],
1813   [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'months')], [668.00]],
1814   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'months')], [47.00]],
1815   [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'months')], [48.00]],
1816   [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'months')], [35.00]],
1817
1818   [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'quarters')], [128.00]],
1819   [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'quarters')], [144.00]],
1820   [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'quarters')], [207.00]],
1821   [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'quarters')], [204.00]],
1822   [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'quarters')], [78.00]],
1823   [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'quarters')], [256.00]],
1824   [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'quarters')], [105.00]],
1825   [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'quarters')], [48.00]],
1826   [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'quarters')], [6.00]],
1827   [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'quarters')], [1.00]],
1828   [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'quarters')], [193.00]],
1829   [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'quarters')], [15.00]],
1830   [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'quarters')], [217.00]],
1831   [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'quarters')], [6.00]],
1832   [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'quarters')], [1.00]],
1833   [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'quarters')], [193.00]],
1834   [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'quarters')], [15.00]],
1835   [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'quarters')], [170.00]],
1836   [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'quarters')], [222.00]],
1837   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'quarters')], [15.00]],
1838   [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'quarters')], [16.00]],
1839   [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'quarters')], [11.00]],
1840
1841 dnl time of day is significant for DATEDIFF
1842   [[datediff(date.mdy(10,15,1910) + 234, date.mdy(10,10,1910) + 123, 'days')],
1843     [5.00]],
1844   [[datediff(date.mdy(10,15,1910) + 123, date.mdy(10,10,1910) + 234, 'days')],
1845     [4.00]],
1846   [[datediff(date.mdy(10,24,1910) + 234, date.mdy(10,10,1910) + 123, 'weeks')],
1847     [2.00]],
1848   [[datediff(date.mdy(10,24,1910) + 123, date.mdy(10,10,1910) + 234, 'weeks')],
1849     [1.00]],
1850   [[datediff(date.mdy(10,10,1910) + 234, date.mdy(5,10,1910) + 123, 'months')],
1851     [5.00]],
1852   [[datediff(date.mdy(10,10,1910) + 123, date.mdy(5,10,1910) + 234, 'months')],
1853     [4.00]],
1854   [[datediff(date.mdy(5,10,1919) + 234, date.mdy(5,10,1910) + 123, 'years')],
1855     [9.00]],
1856   [[datediff(date.mdy(5,10,1919) + 123, date.mdy(5,10,1910) + 234, 'years')],
1857     [8.00]],
1858
1859   [[datediff(date.mdy(10,10,1910) + 123, date.mdy(10,15,1910) + 234, 'days')],
1860     [-5.00]],
1861   [[datediff(date.mdy(10,10,1910) + 234, date.mdy(10,15,1910) + 123, 'days')],
1862     [-4.00]],
1863   [[datediff(date.mdy(10,10,1910) + 123, date.mdy(10,24,1910) + 234, 'weeks')],
1864     [-2.00]],
1865   [[datediff(date.mdy(10,10,1910) + 234, date.mdy(10,24,1910) + 123, 'weeks')],
1866     [-1.00]],
1867   [[datediff(date.mdy(5,10,1910) + 123, date.mdy(10,10,1910) + 234, 'months')],
1868     [-5.00]],
1869   [[datediff(date.mdy(5,10,1910) + 234, date.mdy(10,10,1910) + 123, 'months')],
1870     [-4.00]],
1871   [[datediff(date.mdy(5,10,1910) + 123, date.mdy(5,10,1919) + 234, 'years')],
1872     [-9.00]],
1873   [[datediff(date.mdy(5,10,1910) + 234, date.mdy(5,10,1919) + 123, 'years')],
1874     [-8.00]])
1875
1876 CHECK_EXPR_EVAL([datesum],
1877 dnl DATESUM with non-leap year
1878   [[ctime.days(datesum(date.mdy(1,31,1900), 1, 'months') - date.mdy(1,1,1900))], [58.00]],
1879   [[ctime.days(datesum(date.mdy(1,31,1900), 2, 'months') - date.mdy(1,1,1900))], [89.00]],
1880   [[ctime.days(datesum(date.mdy(1,31,1900), 3, 'months') - date.mdy(1,1,1900))], [119.00]],
1881   [[ctime.days(datesum(date.mdy(1,31,1900), 4, 'months') - date.mdy(1,1,1900))], [150.00]],
1882   [[ctime.days(datesum(date.mdy(1,31,1900), 5.4, 'months') - date.mdy(1,1,1900))], [180.00]],
1883   [[ctime.days(datesum(date.mdy(1,31,1900), 6, 'months') - date.mdy(1,1,1900))], [211.00]],
1884   [[ctime.days(datesum(date.mdy(1,31,1900), 7, 'months') - date.mdy(1,1,1900))], [242.00]],
1885   [[ctime.days(datesum(date.mdy(1,31,1900), 8, 'months') - date.mdy(1,1,1900))], [272.00]],
1886   [[ctime.days(datesum(date.mdy(1,31,1900), 9, 'months') - date.mdy(1,1,1900))], [303.00]],
1887   [[ctime.days(datesum(date.mdy(1,31,1900), 10, 'months') - date.mdy(1,1,1900))], [333.00]],
1888   [[ctime.days(datesum(date.mdy(1,31,1900), 11, 'months') - date.mdy(1,1,1900))], [364.00]],
1889   [[ctime.days(datesum(date.mdy(1,31,1900), 12, 'months') - date.mdy(1,1,1900))], [395.00]],
1890   [[ctime.days(datesum(date.mdy(1,31,1900), 13.9, 'months') - date.mdy(1,1,1900))], [423.00]],
1891   [[ctime.days(datesum(date.mdy(1,31,1900), 1, 'months', 'rollover') - date.mdy(1,1,1900))], [61.00]],
1892   [[ctime.days(datesum(date.mdy(1,31,1900), 2, 'months', 'rollover') - date.mdy(1,1,1900))], [89.00]],
1893   [[ctime.days(datesum(date.mdy(1,31,1900), 3.2, 'months', 'rollover') - date.mdy(1,1,1900))], [120.00]],
1894   [[ctime.days(datesum(date.mdy(1,31,1900), 4, 'months', 'rollover') - date.mdy(1,1,1900))], [150.00]],
1895   [[ctime.days(datesum(date.mdy(1,31,1900), 5, 'months', 'rollover') - date.mdy(1,1,1900))], [181.00]],
1896   [[ctime.days(datesum(date.mdy(1,31,1900), 6, 'months', 'rollover') - date.mdy(1,1,1900))], [211.00]],
1897   [[ctime.days(datesum(date.mdy(1,31,1900), 7, 'months', 'rollover') - date.mdy(1,1,1900))], [242.00]],
1898   [[ctime.days(datesum(date.mdy(1,31,1900), 8, 'months', 'rollover') - date.mdy(1,1,1900))], [273.00]],
1899   [[ctime.days(datesum(date.mdy(1,31,1900), 9, 'months', 'rollover') - date.mdy(1,1,1900))], [303.00]],
1900   [[ctime.days(datesum(date.mdy(1,31,1900), 10, 'months', 'rollover') - date.mdy(1,1,1900))], [334.00]],
1901   [[ctime.days(datesum(date.mdy(1,31,1900), 11, 'months', 'rollover') - date.mdy(1,1,1900))], [364.00]],
1902   [[ctime.days(datesum(date.mdy(1,31,1900), 12, 'months', 'rollover') - date.mdy(1,1,1900))], [395.00]],
1903   [[ctime.days(datesum(date.mdy(1,31,1900), 13, 'months', 'rollover') - date.mdy(1,1,1900))], [426.00]],
1904
1905 dnl DATESUM with leap year
1906   [[ctime.days(datesum(date.mdy(1,31,1904), 1, 'months') - date.mdy(1,1,1904))], [59.00]],
1907   [[ctime.days(datesum(date.mdy(1,31,1904), 2.5, 'months') - date.mdy(1,1,1904))], [90.00]],
1908   [[ctime.days(datesum(date.mdy(1,31,1904), 3, 'months') - date.mdy(1,1,1904))], [120.00]],
1909   [[ctime.days(datesum(date.mdy(1,31,1904), 4.9, 'months') - date.mdy(1,1,1904))], [151.00]],
1910   [[ctime.days(datesum(date.mdy(1,31,1904), 5.1, 'months') - date.mdy(1,1,1904))], [181.00]],
1911   [[ctime.days(datesum(date.mdy(1,31,1904), 6, 'months') - date.mdy(1,1,1904))], [212.00]],
1912   [[ctime.days(datesum(date.mdy(1,31,1904), 7, 'months') - date.mdy(1,1,1904))], [243.00]],
1913   [[ctime.days(datesum(date.mdy(1,31,1904), 8, 'months') - date.mdy(1,1,1904))], [273.00]],
1914   [[ctime.days(datesum(date.mdy(1,31,1904), 9, 'months') - date.mdy(1,1,1904))], [304.00]],
1915   [[ctime.days(datesum(date.mdy(1,31,1904), 10, 'months') - date.mdy(1,1,1904))], [334.00]],
1916   [[ctime.days(datesum(date.mdy(1,31,1904), 11, 'months') - date.mdy(1,1,1904))], [365.00]],
1917   [[ctime.days(datesum(date.mdy(1,31,1904), 12, 'months') - date.mdy(1,1,1904))], [396.00]],
1918   [[ctime.days(datesum(date.mdy(1,31,1904), 13, 'months') - date.mdy(1,1,1904))], [424.00]],
1919   [[ctime.days(datesum(date.mdy(1,31,1904), 1, 'months', 'rollover') - date.mdy(1,1,1904))], [61.00]],
1920   [[ctime.days(datesum(date.mdy(1,31,1904), 2, 'months', 'rollover') - date.mdy(1,1,1904))], [90.00]],
1921   [[ctime.days(datesum(date.mdy(1,31,1904), 3, 'months', 'rollover') - date.mdy(1,1,1904))], [121.00]],
1922   [[ctime.days(datesum(date.mdy(1,31,1904), 4, 'months', 'rollover') - date.mdy(1,1,1904))], [151.00]],
1923   [[ctime.days(datesum(date.mdy(1,31,1904), 5, 'months', 'rollover') - date.mdy(1,1,1904))], [182.00]],
1924   [[ctime.days(datesum(date.mdy(1,31,1904), 6, 'months', 'rollover') - date.mdy(1,1,1904))], [212.00]],
1925   [[ctime.days(datesum(date.mdy(1,31,1904), 7, 'months', 'rollover') - date.mdy(1,1,1904))], [243.00]],
1926   [[ctime.days(datesum(date.mdy(1,31,1904), 8, 'months', 'rollover') - date.mdy(1,1,1904))], [274.00]],
1927   [[ctime.days(datesum(date.mdy(1,31,1904), 9, 'months', 'rollover') - date.mdy(1,1,1904))], [304.00]],
1928   [[ctime.days(datesum(date.mdy(1,31,1904), 10, 'months', 'rollover') - date.mdy(1,1,1904))], [335.00]],
1929   [[ctime.days(datesum(date.mdy(1,31,1904), 11, 'months', 'rollover') - date.mdy(1,1,1904))], [365.00]],
1930   [[ctime.days(datesum(date.mdy(1,31,1904), 12, 'months', 'rollover') - date.mdy(1,1,1904))], [396.00]],
1931   [[ctime.days(datesum(date.mdy(1,31,1904), 13, 'months', 'rollover') - date.mdy(1,1,1904))], [427.00]],
1932
1933   [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'weeks') - date.mdy(6,10,1648))], [7.00]],
1934   [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'weeks') - date.mdy(6,30,1680))], [17.50]],
1935   [[ctime.days(datesum(date.mdy(7,24,1716), -3, 'weeks') - date.mdy(7,24,1716))], [-21.00]],
1936   [[ctime.days(datesum(date.mdy(6,19,1768), 4, 'weeks') - date.mdy(6,19,1768))], [28.00]],
1937   [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'weeks') - date.mdy(8,2,1819))], [35.00]],
1938
1939   [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'days') - date.mdy(6,10,1648))], [1.00]],
1940   [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'days') - date.mdy(6,30,1680))], [2.50]],
1941   [[ctime.days(datesum(date.mdy(7,24,1716), -3, 'days') - date.mdy(7,24,1716))], [-3.00]],
1942   [[ctime.days(datesum(date.mdy(6,19,1768), 4, 'days') - date.mdy(6,19,1768))], [4.00]],
1943   [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'days') - date.mdy(8,2,1819))], [5.00]],
1944   [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'hours') - date.mdy(6,10,1648))], [0.04]],
1945   [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'hours') - date.mdy(6,30,1680))], [0.10]],
1946   [[ctime.days(datesum(date.mdy(6,19,1768), -4, 'hours') - date.mdy(6,19,1768))], [-0.17]],
1947   [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'hours') - date.mdy(8,2,1819))], [0.21]],
1948
1949 dnl DATESUM preserves time-of-day for units of days and longer.
1950   [[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]],
1951   [[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]],
1952   [[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]],
1953   [[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]])
1954
1955 CHECK_EXPR_EVAL([miscellaneous],
1956 dnl These test values are from Applied Statistics, Algorithm AS 310.
1957   [[1000 * ncdf.beta(.868,10,20,150)], [937.66]],
1958   [[1000 * ncdf.beta(.9,10,10,120)], [730.68]],
1959   [[1000 * ncdf.beta(.88,15,5,80)], [160.43]],
1960   [[1000 * ncdf.beta(.85,20,10,110)], [186.75]],
1961   [[1000 * ncdf.beta(.66,20,30,65)], [655.94]],
1962   [[1000 * ncdf.beta(.72,20,50,130)], [979.69]],
1963   [[1000 * ncdf.beta(.72,30,20,80)], [116.24]],
1964   [[1000 * ncdf.beta(.8,30,40,130)], [993.04]],
1965
1966 dnl FIXME: LAG
1967 dnl
1968   [[X], [1.00], [], [(X = 1.00)]],
1969   [[SYSMIS(1)], [false]],
1970   [[SYSMIS($SYSMIS)], [true]],
1971   [[SYSMIS(1 + $SYSMIS)], [true]],
1972
1973 dnl FIXME: out-of-range and nearly out-of-range values on dates
1974 dnl
1975 dnl Tests correctness of generic optimizations in optimize_tree().
1976   [[x + 0], [10.00], [], [(X = 10.00)]],
1977   [[x - 0], [-3.00], [], [(X = -3.00)]],
1978   [[0 + x], [5.00], [], [(X = 5.00)]],
1979   [[x * 1], [10.00], [], [(X = 10.00)]],
1980   [[1 * x], [-3.00], [], [(X = -3.00)]],
1981   [[x / 1], [5.00], [], [(X = 5.00)]],
1982   [[0 * x], [0.00], [], [(X = 10.00)]],
1983   [[x * 0], [0.00], [], [(X = -3.00)]],
1984   [[0 / x], [0.00], [], [(X = 5.00)]],
1985   [[mod(0, x)], [0.00], [], [(X = 5.00)]],
1986   [[x ** 1], [5.00], [], [(X = 5.00)]],
1987   [[x ** 2], [25.00], [], [(X = 5.00)]])
1988
1989 AT_SETUP([LAG function])
1990 AT_DATA([lag.sps], [dnl
1991 data list /W 1.
1992 begin data.
1993 1
1994 2
1995 3
1996 4
1997 5
1998 end data.
1999
2000 compute X=lag(w,1).
2001 compute Y=lag(x).
2002 compute Z=lag(w,2).
2003 list.
2004 ])
2005 AT_CHECK([pspp -o pspp.csv lag.sps])
2006 AT_CHECK([cat pspp.csv], [0], [dnl
2007 Table: Reading 1 record from INLINE.
2008 Variable,Record,Columns,Format
2009 W,1,1-  1,F1.0
2010
2011 Table: Data List
2012 W,X,Y,Z
2013 1,.  ,.  ,.  @&t@
2014 2,1.00,.  ,.  @&t@
2015 3,2.00,1.00,1.00
2016 4,3.00,2.00,2.00
2017 5,4.00,3.00,3.00
2018 ])
2019 AT_CLEANUP
2020
2021 AT_SETUP([LAG crash bug])
2022 AT_DATA([lag.sps], [dnl
2023 DATA LIST LIST /x.
2024 BEGIN DATA
2025
2026
2027 END DATA.
2028
2029 DO IF (x <> LAG(x) ).
2030         ECHO 'hello'.
2031 END IF.
2032
2033 EXECUTE.
2034 ])
2035 AT_CHECK([pspp -o pspp.csv lag.sps])
2036 AT_CHECK([cat pspp.csv], [0], [dnl
2037 Table: Reading free-form data from INLINE.
2038 Variable,Format
2039 x,F8.0
2040
2041 hello
2042 ])
2043 AT_CLEANUP
2044
2045 dnl Tests for a bug which caused UNIFORM(x) to always return zero.
2046 AT_SETUP([UNIFORM function])
2047 AT_DATA([uniform.sps], [dnl
2048 set seed=10.
2049 input program.
2050 + loop #i = 1 to 20.
2051 +    do repeat response=R1.
2052 +       compute response = uniform(10).
2053 +    end repeat.
2054 +    end case.
2055 + end loop.
2056 + end file.
2057 end input program.
2058
2059 list.
2060 ])
2061 AT_CHECK([pspp -o pspp.csv uniform.sps])
2062 AT_CHECK([cat pspp.csv], [0], [dnl
2063 Table: Data List
2064 R1
2065 7.71
2066 2.99
2067 .21
2068 4.95
2069 6.34
2070 4.43
2071 7.49
2072 8.32
2073 4.99
2074 5.83
2075 2.25
2076 .25
2077 1.98
2078 7.09
2079 7.61
2080 2.66
2081 1.69
2082 2.64
2083 .88
2084 1.50
2085 ])
2086 AT_CLEANUP
2087
2088 AT_SETUP([VALUELABEL function])
2089 AT_DATA([valuelabel.sps], [dnl
2090 DATA LIST notable /n 1 s 2(a).
2091 VALUE LABELS /n 0 'Very dissatisfied'
2092                 1 'Dissatisfied'
2093                 1.5 'Slightly Peeved'
2094                 2 'Neutral'
2095                 3 'Satisfied'
2096                 4 'Very satisfied'.
2097 VALUE LABELS /s 'a' 'Wouldn''t buy again'
2098                 'b' 'Unhappy'
2099                 'c' 'Bored'
2100                 'd' 'Satiated'
2101                 'e' 'Elated'.
2102 STRING nlabel slabel(a10).
2103 COMPUTE nlabel = VALUELABEL(n).
2104 COMPUTE slabel = VALUELABEL(s).
2105 LIST.
2106 BEGIN DATA.
2107
2108 0a
2109 1b
2110 2c
2111 3d
2112 4e
2113 5f
2114 6g
2115 END DATA.
2116 ])
2117 AT_CHECK([pspp -o pspp.csv valuelabel.sps])
2118 AT_CHECK([cat pspp.csv], [0], [dnl
2119 Table: Data List
2120 n,s,nlabel,slabel
2121 .,,,
2122 0,a,Very dissa,Wouldn't b
2123 1,b,Dissatisfi,Unhappy   @&t@
2124 2,c,Neutral   ,Bored     @&t@
2125 3,d,Satisfied ,Satiated  @&t@
2126 4,e,Very satis,Elated    @&t@
2127 5,f,,
2128 6,g,,
2129 ])
2130 AT_CLEANUP
2131
2132 AT_SETUP([variables in expressions])
2133 AT_DATA([variables.sps], [dnl
2134 DATA LIST NOTABLE/N1 TO N5 1-5.
2135 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
2136 BEGIN DATA.
2137 12345
2138 6789 
2139 END DATA.
2140
2141 COMPUTE P1=N1.
2142 COMPUTE P2=N2.
2143 COMPUTE P3=N3.
2144 COMPUTE P4=N4.
2145 COMPUTE P5=N5.
2146
2147 COMPUTE MC=NMISS(N1 TO N5).
2148 COMPUTE VC=NVALID(N1 TO N5).
2149
2150 COMPUTE S1=SYSMIS(N1).
2151 COMPUTE S2=SYSMIS(N2).
2152 COMPUTE S3=SYSMIS(N3).
2153 COMPUTE S4=SYSMIS(N4).
2154 COMPUTE S5=SYSMIS(N5).
2155
2156 COMPUTE M1=MISSING(N1).
2157 COMPUTE M2=MISSING(N2).
2158 COMPUTE M3=MISSING(N3).
2159 COMPUTE M4=MISSING(N4).
2160 COMPUTE M5=MISSING(N5).
2161
2162 COMPUTE V1=VALUE(N1).
2163 COMPUTE V2=VALUE(N2).
2164 COMPUTE V3=VALUE(N3).
2165 COMPUTE V4=VALUE(N4).
2166 COMPUTE V5=VALUE(N5).
2167
2168 FORMATS ALL (F1).
2169
2170 LIST.
2171 ])
2172 AT_CHECK([pspp -o pspp.csv variables.sps])
2173 AT_CHECK([cat pspp.csv], [0], [dnl
2174 Table: Data List
2175 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
2176 1,2,3,4,5,.,2,.,.,.,4,1,0,0,0,0,0,1,0,1,1,1,1,2,3,4,5
2177 6,7,8,9,.,6,7,8,9,.,1,4,0,0,0,0,1,0,0,0,0,1,6,7,8,9,.
2178 ])
2179 AT_CLEANUP
2180
2181 AT_SETUP([vectors in expressions])
2182 AT_DATA([vectors.sps], [dnl
2183 DATA LIST NOTABLE /N1 TO N5 1-5.
2184 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
2185 BEGIN DATA.
2186 12345
2187 6789 
2188 END DATA.
2189
2190 VECTOR N=N1 TO N5.
2191 VECTOR X(5).
2192 LOOP I=1 TO 5.
2193 COMPUTE X(I)=N(I) + 1.
2194 END LOOP.
2195
2196 FORMATS ALL (F2).
2197
2198 LIST.
2199 ])
2200 AT_CHECK([pspp -o pspp.csv vectors.sps])
2201 AT_CHECK([cat pspp.csv], [0], [dnl
2202 Table: Data List
2203 N1,N2,N3,N4,N5,X1,X2,X3,X4,X5,I
2204 1,2,3,4,5,.,3,.,.,.,5
2205 6,7,8,9,.,7,8,9,10,.,5
2206 ])
2207 AT_CLEANUP