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