Fix crash calling RINDEX with a zero needle length
[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 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
665   [[sd(1, 2, 3, 4, 5)], [1.58]],
666   [[sd(1, $sysmis, 2, 3, $sysmis, 4, 5)], [1.58]],
667   [[sd(1, 2)], [0.71]],
668   [[sd(1)], [error],
669    [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(number).]],
670   [[sd(1, $sysmis)], [sysmis]],
671   [[sd(1, 2, 3, $sysmis)], [1.00]],
672   [[sd.4(1, 2, 3, $sysmis)], [sysmis]],
673   [[sd.4(1, 2, 3)], [error],
674    [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.]],
675   [[sd('x')], [error],
676    [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(string).]],
677   [[sd('x', 1, 2, 3)], [error],
678    [error: DEBUG EVALUATE: Type mismatch invoking SD(number, number[, number]...) as sd(string, number, number, number).]],
679
680   [[sum(1, 2, 3, 4, 5)], [15.00]],
681   [[sum(1, $sysmis, 2, 3, $sysmis, 4, 5)], [15.00]],
682   [[sum(1, 2)], [3.00]],
683   [[sum()], [error],
684    [error: DEBUG EVALUATE: Type mismatch invoking SUM(number[, number]...) as sum().]],
685   [[sum(1)], [1.00]],
686   [[sum(1, $sysmis)], [1.00]],
687   [[sum(1, 2, 3, $sysmis)], [6.00]],
688   [[sum.4(1, 2, 3, $sysmis)], [sysmis]],
689   [[sum.4(1, 2, 3)], [error],
690    [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.]],
691
692   [[variance(1, 2, 3, 4, 5)], [2.50]],
693   [[variance(1, $sysmis, 2, 3, $sysmis, 4, 5)], [2.50]],
694   [[variance(1, 2)], [0.50]],
695   [[variance(1)], [error],
696    [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(number).]],
697   [[variance(1, $sysmis)], [sysmis]],
698   [[variance(1, 2, 3, $sysmis)], [1.00]],
699   [[variance.4(1, 2, 3, $sysmis)], [sysmis]],
700   [[variance.4(1, 2, 3)], [error],
701    [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.]],
702   [[variance('x')], [error],
703    [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(string).]],
704   [[variance('x', 1, 2, 3)], [error],
705    [error: DEBUG EVALUATE: Type mismatch invoking VARIANCE(number, number[, number]...) as variance(string, number, number, number).]])
706
707 CHECK_EXPR_EVAL([concat index rindex length lower],
708   [[concat('')], [""]],
709   [[concat('a', 'b')], ["ab"]],
710   [[concat('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')], ["abcdefgh"]],
711   [[concat('abcdefgh', 'ijklmnopq')], ["abcdefghijklmnopq"]],
712   [[concat('a', 1)], [error],
713    [error: DEBUG EVALUATE: Type mismatch invoking CONCAT(string[, string]...) as concat(string, number).]],
714   [[concat(1, 2)], [error],
715    [error: DEBUG EVALUATE: Type mismatch invoking CONCAT(string[, string]...) as concat(number, number).]],
716
717   [[index('abcbcde', 'bc')], [2.00]],
718   [[index('abcbcde', 'bcd')], [4.00]],
719   [[index('abcbcde', 'bcbc')], [2.00]],
720   [[index('abcdefgh', 'abc')], [1.00]],
721   [[index('abcdefgh', 'bcd')], [2.00]],
722   [[index('abcdefgh', 'cde')], [3.00]],
723   [[index('abcdefgh', 'def')], [4.00]],
724   [[index('abcdefgh', 'efg')], [5.00]],
725   [[index('abcdefgh', 'fgh')], [6.00]],
726   [[index('abcdefgh', 'fghi')], [0.00]],
727   [[index('abcdefgh', 'x')], [0.00]],
728   [[index('abcdefgh', 'abch')], [0.00]],
729   [[index('banana', 'na')], [3.00]],
730   [[index('banana', 'ana')], [2.00]],
731   [[index('', 'x')], [0.00]],
732   [[index('', '')], [sysmis]],
733   [[index('abcdefgh', '')], [sysmis]],
734   [[index('abcdefgh', 'alkjsfdjlskalkjfa')], [0.00]],
735
736   [[index('abcbcde', 'bc', 1)], [2.00]],
737   [[index('abcbcde', 'dc', 1)], [3.00]],
738   [[index('abcbcde', 'abc', 1)], [1.00]],
739   [[index('abcbcde', 'bc', 2)], [2.00]],
740   [[index('abcbcde', 'dc', 2)], [0.00]],
741   [[index('abcbcde', 'abc', 1)], [1.00]],
742   [[index('abcbcde', 'bccb', 2)], [2.00]],
743   [[index('abcbcde', 'bcbc', 2)], [2.00]],
744   [[index('abcbcde', 'bcbc', $sysmis)], [sysmis]],
745
746   [[rindex('abcbcde', 'bc')], [4.00]],
747   [[rindex('abcbcde', 'bcd')], [4.00]],
748   [[rindex('abcbcde', 'bcbc')], [2.00]],
749   [[rindex('abcdefgh', 'abc')], [1.00]],
750   [[rindex('abcdefgh', 'bcd')], [2.00]],
751   [[rindex('abcdefgh', 'cde')], [3.00]],
752   [[rindex('abcdefgh', 'def')], [4.00]],
753   [[rindex('abcdefgh', 'efg')], [5.00]],
754   [[rindex('abcdefgh', 'fgh')], [6.00]],
755   [[rindex('abcdefgh', 'fghi')], [0.00]],
756   [[rindex('abcdefgh', 'x')], [0.00]],
757   [[rindex('abcdefgh', 'abch')], [0.00]],
758   [[rindex('banana', 'na')], [5.00]],
759   [[rindex('banana', 'ana')], [4.00]],
760   [[rindex('', 'x')], [0.00]],
761   [[rindex('', '')], [sysmis]],
762   [[rindex('abcdefgh', '')], [sysmis]],
763   [[rindex('abcdefgh', 'alkjsfdjlskalkjfa')], [0.00]],
764
765   [[rindex('abcbcde', 'bc', 1)], [5.00]],
766   [[rindex('abcbcde', 'dc', 1)], [6.00]],
767   [[rindex('abcbcde', 'abc', 1)], [5.00]],
768   [[rindex('abcbcde', 'bc', 2)], [4.00]],
769   [[rindex('abcbcde', 'dc', 2)], [0.00]],
770   [[rindex('abcbcde', 'abc', 1)], [5.00]],
771   [[rindex('abcbcde', 'bccb', 2)], [4.00]],
772   [[rindex('abcbcde', 'bcbc', 2)], [4.00]],
773   [[rindex('abcbcde', 'bcbc', 0)], [sysmis]],
774   [[rindex('abcbcde', 'bcbc', $sysmis)], [sysmis]],
775   [[rindex('abcbcde', 'bcbcg', 2)], [sysmis]],
776   [[rindex('abcbcde', 'bcbcg', $sysmis)], [sysmis]],
777   [[rindex('abcbcde', 'bcbcg', 'x')], [error],
778    [error: DEBUG EVALUATE: Function invocation rindex(string, string, string) does not match any known function.  Candidates are:
779 RINDEX(string, string)
780 RINDEX(string, string, number).]],
781   [[rindex(1, 'bcdfkjl', 2)], [error],
782    [error: DEBUG EVALUATE: Function invocation rindex(number, string, number) does not match any known function.  Candidates are:
783 RINDEX(string, string)
784 RINDEX(string, string, number).]],
785   [[rindex('aksj', 2, 2)], [error],
786    [error: DEBUG EVALUATE: Function invocation rindex(string, number, number) does not match any known function.  Candidates are:
787 RINDEX(string, string)
788 RINDEX(string, string, number).]],
789   [[rindex(1, 2, 3)], [error],
790    [error: DEBUG EVALUATE: Function invocation rindex(number, number, number) does not match any known function.  Candidates are:
791 RINDEX(string, string)
792 RINDEX(string, string, number).]],
793   [[rindex(1, 2, '3')], [error],
794    [error: DEBUG EVALUATE: Function invocation rindex(number, number, string) does not match any known function.  Candidates are:
795 RINDEX(string, string)
796 RINDEX(string, string, number).]],
797
798   [[length('')], [0.00]],
799   [[length('a')], [1.00]],
800   [[length('xy')], [2.00]],
801   [[length('adsf    ')], [8.00]],
802   [[length('abcdefghijkl')], [12.00]],
803   [[length(0)], [error],
804    [error: DEBUG EVALUATE: Type mismatch invoking LENGTH(string) as length(number).]],
805   [[length($sysmis)], [error],
806    [error: DEBUG EVALUATE: Type mismatch invoking LENGTH(string) as length(number).]],
807
808   [[lower('ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089')], ["abcdefghijklmnopqrstuvwxyz!@%&*089"]],
809   [[lower('')], [""]],
810   [[lower(1)], [error],
811    [error: DEBUG EVALUATE: Type mismatch invoking LOWER(string) as lower(number).]])
812
813 CHECK_EXPR_EVAL([lpad number ltrim lpad rtrim rpad string substr upcase],
814   [[lpad('abc', -1)], [""]],
815   [[lpad('abc', 0)], ["abc"]],
816   [[lpad('abc', 2)], ["abc"]],
817   [[lpad('abc', 3)], ["abc"]],
818   [[lpad('abc', 10)], ["       abc"]],
819   [[lpad('abc', 32768)], [""]],
820   [[lpad('abc', $sysmis)], [""]],
821   [[lpad('abc', -1, '*')], [""]],
822   [[lpad('abc', 0, '*')], ["abc"]],
823   [[lpad('abc', 2, '*')], ["abc"]],
824   [[lpad('abc', 3, '*')], ["abc"]],
825   [[lpad('abc', 10, '*')], ["*******abc"]],
826   [[lpad('abc', 32768, '*')], [""]],
827   [[lpad('abc', $sysmis, '*')], [""]],
828   [[lpad('abc', $sysmis, '')], [""]],
829   [[lpad('abc', $sysmis, 'xy')], [""]],
830   [[lpad(0, 10)], [error],
831    [error: DEBUG EVALUATE: Function invocation lpad(number, number) does not match any known function.  Candidates are:
832 LPAD(string, number)
833 LPAD(string, number, string).]],
834   [[lpad('abc', 'def')], [error],
835    [error: DEBUG EVALUATE: Function invocation lpad(string, string) does not match any known function.  Candidates are:
836 LPAD(string, number)
837 LPAD(string, number, string).]],
838   [[lpad(0, 10, ' ')], [error],
839    [error: DEBUG EVALUATE: Function invocation lpad(number, number, string) does not match any known function.  Candidates are:
840 LPAD(string, number)
841 LPAD(string, number, string).]],
842   [[lpad('abc', 'def', ' ')], [error],
843    [error: DEBUG EVALUATE: Function invocation lpad(string, string, string) does not match any known function.  Candidates are:
844 LPAD(string, number)
845 LPAD(string, number, string).]],
846   [[lpad('x', 5, 0)], [error],
847    [error: DEBUG EVALUATE: Function invocation lpad(string, number, number) does not match any known function.  Candidates are:
848 LPAD(string, number)
849 LPAD(string, number, string).]],
850   [[lpad('x', 5, 2)], [error],
851    [error: DEBUG EVALUATE: Function invocation lpad(string, number, number) does not match any known function.  Candidates are:
852 LPAD(string, number)
853 LPAD(string, number, string).]],
854
855   [[number("123", f3.0)], [123.00]],
856   [[number(" 123", f3.0)], [12.00]],
857   [[number("123", f3.1)], [12.30]],
858   [[number("   ", f3.1)], [sysmis]],
859   [[number("123", a8)], [error],
860    [error: DEBUG EVALUATE: Type mismatch invoking NUMBER(string, num_input_format) as number(string, format).]],
861 dnl CCA is not an input format:
862   [[number("123", cca1.2)], [error],
863    [error: DEBUG EVALUATE: Type mismatch invoking NUMBER(string, num_input_format) as number(string, format).]],
864
865   [[ltrim('   abc')], ["abc"]],
866   [[rtrim('   abc   ')], ["   abc"]],
867   [[ltrim('abc')], ["abc"]],
868   [[ltrim('     abc')], ["      abc"]],
869   [[ltrim('    ')], [""]],
870   [[ltrim('')], [""]],
871   [[ltrim(8)], [error],
872    [error: DEBUG EVALUATE: Function invocation ltrim(number) does not match any known function.  Candidates are:
873 LTRIM(string)
874 LTRIM(string, string).]],
875   [[ltrim('***abc', '*')], ["abc"]],
876   [[ltrim('abc', '*')], ["abc"]],
877   [[ltrim('*abc', '*')], ["abc"]],
878   [[ltrim('', '*')], [""]],
879   [[ltrim(8, '*')], [error],
880    [error: DEBUG EVALUATE: Function invocation ltrim(number, string) does not match any known function.  Candidates are:
881 LTRIM(string)
882 LTRIM(string, string).]],
883   [[ltrim(' x', 8)], [error],
884    [error: DEBUG EVALUATE: Function invocation ltrim(string, number) does not match any known function.  Candidates are:
885 LTRIM(string)
886 LTRIM(string, string).]],
887   [[ltrim(8, 9)], [error],
888    [error: DEBUG EVALUATE: Function invocation ltrim(number, number) does not match any known function.  Candidates are:
889 LTRIM(string)
890 LTRIM(string, string).]],
891
892   [[rpad('abc', -1)], [""]],
893   [[rpad('abc', 0)], ["abc"]],
894   [[rpad('abc', 2)], ["abc"]],
895   [[rpad('abc', 3)], ["abc"]],
896   [[rpad('abc', 10)], ["abc       "]],
897   [[rpad('abc', 32768)], [""]],
898   [[rpad('abc', $sysmis)], [""]],
899   [[rpad('abc', -1, '*')], [""]],
900   [[rpad('abc', 0, '*')], ["abc"]],
901   [[rpad('abc', 2, '*')], ["abc"]],
902   [[rpad('abc', 3, '*')], ["abc"]],
903   [[rpad('abc', 10, '*')], ["abc*******"]],
904   [[rpad('abc', 32768, '*')], [""]],
905   [[rpad('abc', $sysmis, '*')], [""]],
906   [[rpad('abc', $sysmis, '')], [""]],
907   [[rpad('abc', $sysmis, 'xy')], [""]],
908   [[rpad(0, 10)], [error],
909    [error: DEBUG EVALUATE: Function invocation rpad(number, number) does not match any known function.  Candidates are:
910 RPAD(string, number)
911 RPAD(string, number, string).]],
912   [[rpad('abc', 'def')], [error],
913    [error: DEBUG EVALUATE: Function invocation rpad(string, string) does not match any known function.  Candidates are:
914 RPAD(string, number)
915 RPAD(string, number, string).]],
916   [[rpad(0, 10, ' ')], [error],
917    [error: DEBUG EVALUATE: Function invocation rpad(number, number, string) does not match any known function.  Candidates are:
918 RPAD(string, number)
919 RPAD(string, number, string).]],
920   [[rpad('abc', 'def', ' ')], [error],
921    [error: DEBUG EVALUATE: Function invocation rpad(string, string, string) does not match any known function.  Candidates are:
922 RPAD(string, number)
923 RPAD(string, number, string).]],
924   [[rpad('x', 5, 0)], [error],
925    [error: DEBUG EVALUATE: Function invocation rpad(string, number, number) does not match any known function.  Candidates are:
926 RPAD(string, number)
927 RPAD(string, number, string).]],
928   [[rpad('x', 5, 2)], [error],
929    [error: DEBUG EVALUATE: Function invocation rpad(string, number, number) does not match any known function.  Candidates are:
930 RPAD(string, number)
931 RPAD(string, number, string).]],
932
933   [[rtrim('abc   ')], ["abc"]],
934   [[rtrim('   abc   ')], ["   abc"]],
935   [[rtrim('abc')], ["abc"]],
936   [[rtrim('abc  ')], ["abc      "]],
937   [[rtrim('    ')], [""]],
938   [[rtrim('')], [""]],
939   [[rtrim(8)], [error],
940    [error: DEBUG EVALUATE: Function invocation rtrim(number) does not match any known function.  Candidates are:
941 RTRIM(string)
942 RTRIM(string, string).]],
943   [[rtrim('abc***', '*')], ["abc"]],
944   [[rtrim('abc', '*')], ["abc"]],
945   [[rtrim('abc*', '*')], ["abc"]],
946   [[rtrim('', '*')], [""]],
947   [[rtrim(8, '*')], [error],
948    [error: DEBUG EVALUATE: Function invocation rtrim(number, string) does not match any known function.  Candidates are:
949 RTRIM(string)
950 RTRIM(string, string).]],
951   [[rtrim(' x', 8)], [error],
952    [error: DEBUG EVALUATE: Function invocation rtrim(string, number) does not match any known function.  Candidates are:
953 RTRIM(string)
954 RTRIM(string, string).]],
955   [[rtrim(8, 9)], [error],
956    [error: DEBUG EVALUATE: Function invocation rtrim(number, number) does not match any known function.  Candidates are:
957 RTRIM(string)
958 RTRIM(string, string).]],
959
960   [[string(123.56, f5.1)], ["123.6"]],
961   [[string($sysmis, f5.1)], ["   . "]],
962   [[string("abc", A5)], [error],
963    [error: DEBUG EVALUATE: Type mismatch invoking STRING(number, num_output_format) as string(string, format).]],
964 dnl E has a minimum width of 6 on output:
965   [[string(123, e1)], [error],
966    [error: DEBUG EVALUATE: Type mismatch invoking STRING(number, num_output_format) as string(number, format).]],
967   [[string(123, e6.0)], ["1E+002"]],
968
969   [[substr('abcdefgh', -5)], [""]],
970   [[substr('abcdefgh', 0)], [""]],
971   [[substr('abcdefgh', 1)], ["abcdefgh"]],
972   [[substr('abcdefgh', 3)], ["cdefgh"]],
973   [[substr('abcdefgh', 5)], ["efgh"]],
974   [[substr('abcdefgh', 6)], ["fgh"]],
975   [[substr('abcdefgh', 7)], ["gh"]],
976   [[substr('abcdefgh', 8)], ["h"]],
977   [[substr('abcdefgh', 9)], [""]],
978   [[substr('abcdefgh', 10)], [""]],
979   [[substr('abcdefgh', 20)], [""]],
980   [[substr('abcdefgh', $sysmis)], [""]],
981   [[substr(0, 10)], [error],
982    [error: DEBUG EVALUATE: Function invocation substr(number, number) does not match any known function.  Candidates are:
983 SUBSTR(string, number)
984 SUBSTR(string, number, number).]],
985   [[substr('abcd', 'abc')], [error],
986    [error: DEBUG EVALUATE: Function invocation substr(string, string) does not match any known function.  Candidates are:
987 SUBSTR(string, number)
988 SUBSTR(string, number, number).]],
989   [[substr(0, 'abc')], [error],
990    [error: DEBUG EVALUATE: Function invocation substr(number, string) does not match any known function.  Candidates are:
991 SUBSTR(string, number)
992 SUBSTR(string, number, number).]],
993
994   [[substr('abcdefgh', 0, 0)], [""]],
995   [[substr('abcdefgh', 3, 0)], [""]],
996   [[substr('abcdefgh', 5, 0)], [""]],
997   [[substr('abcdefgh', 9, 0)], [""]],
998   [[substr('abcdefgh', 0, 1)], [""]],
999   [[substr('abcdefgh', 0, 5)], [""]],
1000   [[substr('abcdefgh', 1, 8)], ["abcdefgh"]],
1001   [[substr('abcdefgh', 1, 10)], ["abcdefgh"]],
1002   [[substr('abcdefgh', 1, 20)], ["abcdefgh"]],
1003   [[substr('abcdefgh', 3, 4)], ["cdef"]],
1004   [[substr('abcdefgh', 5, 2)], ["ef"]],
1005   [[substr('abcdefgh', 6, 1)], ["f"]],
1006   [[substr('abcdefgh', 7, 10)], ["gh"]],
1007   [[substr('abcdefgh', 8, 1)], ["h"]],
1008   [[substr('abcdefgh', 8, 2)], ["h"]],
1009   [[substr('abcdefgh', 9, 11)], [""]],
1010   [[substr('abcdefgh', 10, 52)], [""]],
1011   [[substr('abcdefgh', 20, 1)], [""]],
1012   [[substr('abcdefgh', $sysmis, 2)], [""]],
1013   [[substr('abcdefgh', 9, $sysmis)], [""]],
1014   [[substr('abcdefgh', $sysmis, $sysmis)], [""]],
1015   [[substr('abc', 1, 'x')], [error],
1016    [error: DEBUG EVALUATE: Function invocation substr(string, number, string) does not match any known function.  Candidates are:
1017 SUBSTR(string, number)
1018 SUBSTR(string, number, number).]],
1019   [[substr(0, 10, 1)], [error],
1020    [error: DEBUG EVALUATE: Function invocation substr(number, number, number) does not match any known function.  Candidates are:
1021 SUBSTR(string, number)
1022 SUBSTR(string, number, number).]],
1023   [[substr(0, 10, 'x')], [error],
1024    [error: DEBUG EVALUATE: Function invocation substr(number, number, string) does not match any known function.  Candidates are:
1025 SUBSTR(string, number)
1026 SUBSTR(string, number, number).]],
1027   [[substr('abcd', 'abc', 0)], [error],
1028    [error: DEBUG EVALUATE: Function invocation substr(string, string, number) does not match any known function.  Candidates are:
1029 SUBSTR(string, number)
1030 SUBSTR(string, number, number).]],
1031   [[substr('abcd', 'abc', 'j')], [error],
1032    [error: DEBUG EVALUATE: Function invocation substr(string, string, string) does not match any known function.  Candidates are:
1033 SUBSTR(string, number)
1034 SUBSTR(string, number, number).]],
1035   [[substr(0, 'abc', 4)], [error],
1036    [error: DEBUG EVALUATE: Function invocation substr(number, string, number) does not match any known function.  Candidates are:
1037 SUBSTR(string, number)
1038 SUBSTR(string, number, number).]],
1039   [[substr(0, 'abc', 'k')], [error],
1040    [error: DEBUG EVALUATE: Function invocation substr(number, string, string) does not match any known function.  Candidates are:
1041 SUBSTR(string, number)
1042 SUBSTR(string, number, number).]],
1043
1044   [[upcase('abcdefghijklmnopqrstuvwxyz!@%&*089')], ["ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*089"]],
1045   [[upcase('')], [""]],
1046   [[upcase(1)], [error],
1047    [error: DEBUG EVALUATE: Type mismatch invoking UPCASE(string) as upcase(number).]])
1048
1049 CHECK_EXPR_EVAL([time ctime date yrmoda],
1050   [[time.days(1)], [86400.00]],
1051   [[time.days(-1)], [-86400.00]],
1052   [[time.days(0.5)], [43200.00]],
1053   [[time.days('x')], [error],
1054    [error: DEBUG EVALUATE: Type mismatch invoking TIME.DAYS(number) as time.days(string).]],
1055   [[time.days($sysmis)], [sysmis]],
1056
1057   [[time.hms(4,50,38)], [17438.00]],
1058   [[time.hms(12,31,35)], [45095.00]],
1059   [[time.hms(12,47,53)], [46073.00]],
1060   [[time.hms(1,26,0)], [5160.00]],
1061   [[time.hms(20,58,11)], [75491.00]],
1062   [[time.hms(7,36,5)], [27365.00]],
1063   [[time.hms(15,43,49)], [56629.00]],
1064   [[time.hms(4,25,9)], [15909.00]],
1065   [[time.hms(6,49,27)], [24567.00]],
1066   [[time.hms(2,57,52)], [10672.00]],
1067   [[time.hms(16,45,44)], [60344.00]],
1068   [[time.hms(21,30,57)], [77457.00]],
1069   [[time.hms(22,30,4)], [81004.00]],
1070   [[time.hms(1,56,51)], [7011.00]],
1071   [[time.hms(5, 6, 7)], [18367.00]],
1072   [[time.hms(5, 6, 0)], [18360.00]],
1073   [[time.hms(5, 0, 7)], [18007.00]],
1074   [[time.hms(0, 6, 7)], [367.00]],
1075   [[time.hms(-5, 6, -7)], [sysmis],
1076    [warning: DEBUG EVALUATE: TIME.HMS cannot mix positive and negative arguments.]],
1077   [[time.hms(-5, 5, -7)], [sysmis],
1078    [warning: DEBUG EVALUATE: TIME.HMS cannot mix positive and negative arguments.]],
1079   [[time.hms($sysmis, 6, 7)], [sysmis]],
1080   [[time.hms(5, $sysmis, 7)], [sysmis]],
1081   [[time.hms(5, $sysmis, 7)], [sysmis]],
1082   [[time.hms($sysmis, $sysmis, 7)], [sysmis]],
1083   [[time.hms(5, $sysmis, $sysmis)], [sysmis]],
1084   [[time.hms($sysmis, $sysmis, 7)], [sysmis]],
1085   [[time.hms($sysmis, $sysmis, $sysmis)], [sysmis]],
1086
1087   [[ctime.days(106272)], [1.23]],
1088   [[ctime.hours(106272)], [29.52]],
1089   [[ctime.minutes(106272)], [1771.20]],
1090   [[ctime.seconds(106272)], [106272.00]],
1091   [[ctime.days(-106272)], [-1.23]],
1092   [[ctime.hours(-106272)], [-29.52]],
1093   [[ctime.minutes(-106272)], [-1771.20]],
1094   [[ctime.seconds(-106272)], [-106272.00]],
1095   [[ctime.days($sysmis)], [sysmis]],
1096   [[ctime.hours($sysmis)], [sysmis]],
1097   [[ctime.minutes($sysmis)], [sysmis]],
1098   [[ctime.seconds($sysmis)], [sysmis]],
1099   [[ctime.days('a')], [error],
1100    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.DAYS(number) as ctime.days(string).]],
1101   [[ctime.hours('b')], [error],
1102    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.HOURS(number) as ctime.hours(string).]],
1103   [[ctime.minutes('c')], [error],
1104    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.MINUTES(number) as ctime.minutes(string).]],
1105   [[ctime.seconds('d')], [error],
1106    [error: DEBUG EVALUATE: Type mismatch invoking CTIME.SECONDS(number) as ctime.seconds(string).]],
1107
1108   [[ctime.days(date.dmy(15,10,1582))], [1.00]],
1109   [[ctime.days(date.dmy(6,9,1719))], [50000.00]],
1110   [[ctime.days(date.dmy(24,1,1583))], [102.00]],
1111   [[ctime.days(date.dmy(14,12,1585))], [1157.00]],
1112   [[ctime.days(date.dmy(26,11,1621))], [14288.00]],
1113   [[ctime.days(date.dmy(25,12,1821))], [87365.00]],
1114   [[ctime.days(date.dmy(3,12,1882))], [109623.00]],
1115   [[ctime.days(date.dmy(6,4,2002))], [153211.00]],
1116   [[ctime.days(date.dmy(19,12,1999))], [152372.00]],
1117   [[ctime.days(date.dmy(1,10,1978))], [144623.00]],
1118   [[ctime.days(date.dmy(0,10,1978))], [144622.00]],
1119   [[ctime.days(date.dmy(32,10,1978))], [sysmis],
1120    [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
1121   [[ctime.days(date.dmy(31,0,1978))], [144349.00]],
1122   [[ctime.days(date.dmy(31,13,1978))], [144745.00]],
1123   [[ctime.days(date.dmy($sysmis,10,1978))], [sysmis]],
1124   [[ctime.days(date.dmy(31,$sysmis,1978))], [sysmis]],
1125   [[ctime.days(date.dmy(31,10,$sysmis))], [sysmis]],
1126   [[ctime.days(date.dmy($sysmis,$sysmis,1978))], [sysmis]],
1127   [[ctime.days(date.dmy(31,$sysmis,$sysmis))], [sysmis]],
1128   [[ctime.days(date.dmy($sysmis,10,$sysmis))], [sysmis]],
1129   [[ctime.days(date.dmy($sysmis,$sysmis,$sysmis))], [sysmis]],
1130   [[date.dmy('a',1,2)], [error],
1131    [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(string, number, number).]],
1132   [[date.dmy(1,'a',2)], [error],
1133    [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(number, string, number).]],
1134   [[date.dmy(1,2,'a')], [error],
1135    [error: DEBUG EVALUATE: Type mismatch invoking DATE.DMY(number, number, number) as date.dmy(number, number, string).]],
1136 dnl FIXME: check out-of-range and nearly out-of-range values
1137 dnl
1138   [[yrmoda(1582,10,15)], [1.00]],
1139   [[yrmoda(1719,9,6)], [50000.00]],
1140   [[yrmoda(1583,1,24)], [102.00]],
1141   [[yrmoda(1585,12,14)], [1157.00]],
1142   [[yrmoda(1621,11,26)], [14288.00]],
1143   [[yrmoda(1821,12,25)], [87365.00]],
1144   [[yrmoda(1882,12,3)], [109623.00]],
1145   [[yrmoda(2002,4,6)], [153211.00]],
1146   [[yrmoda(1999,12,19)], [152372.00]],
1147   [[yrmoda(1978,10,1)], [144623.00]],
1148   [[yrmoda(1978,10,0)], [144622.00]],
1149   [[yrmoda(1978,10,32)], [sysmis],
1150    [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
1151   [[yrmoda(1978,0,31)], [144349.00]],
1152   [[yrmoda(1978,13,31)], [144745.00]],
1153   [[yrmoda(1978,10,$sysmis)], [sysmis]],
1154   [[yrmoda(1978,$sysmis,31)], [sysmis]],
1155   [[yrmoda($sysmis,10,31)], [sysmis]],
1156   [[yrmoda(1978,$sysmis,$sysmis)], [sysmis]],
1157   [[yrmoda($sysmis,$sysmis,31)], [sysmis]],
1158   [[yrmoda($sysmis,10,$sysmis)], [sysmis]],
1159   [[yrmoda($sysmis,$sysmis,$sysmis)], [sysmis]],
1160   [[yrmoda('a',1,2)], [error],
1161    [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(string, number, number).]],
1162   [[yrmoda(1,'a',2)], [error],
1163    [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(number, string, number).]],
1164   [[yrmoda(1,2,'a')], [error],
1165    [error: DEBUG EVALUATE: Type mismatch invoking YRMODA(number, number, number) as yrmoda(number, number, string).]],
1166 dnl FIXME: check out-of-range and nearly out-of-range values
1167 dnl
1168   [[ctime.days(date.mdy(6,10,1648)) + 577735], [601716.00]],
1169   [[ctime.days(date.mdy(6,30,1680)) + 577735], [613424.00]],
1170   [[ctime.days(date.mdy(7,24,1716)) + 577735], [626596.00]],
1171   [[ctime.days(date.mdy(6,19,1768)) + 577735], [645554.00]],
1172   [[ctime.days(date.mdy(8,2,1819)) + 577735], [664224.00]],
1173   [[ctime.days(date.mdy(3,27,1839)) + 577735], [671401.00]],
1174   [[ctime.days(date.mdy(4,19,1903)) + 577735], [694799.00]],
1175   [[ctime.days(date.mdy(8,25,1929)) + 577735], [704424.00]],
1176   [[ctime.days(date.mdy(9,29,1941)) + 577735], [708842.00]],
1177   [[ctime.days(date.mdy(4,19,1943)) + 577735], [709409.00]],
1178   [[ctime.days(date.mdy(10,7,1943)) + 577735], [709580.00]],
1179   [[ctime.days(date.mdy(3,17,1992)) + 577735], [727274.00]],
1180   [[ctime.days(date.mdy(2,25,1996)) + 577735], [728714.00]],
1181   [[ctime.days(date.mdy(11,10,2038)) + 577735], [744313.00]],
1182   [[ctime.days(date.mdy(7,18,2094)) + 577735], [764652.00]],
1183 dnl FIXME: check out-of-range and nearly out-of-range values
1184 dnl
1185   [[ctime.days(date.mdy(10,15,1582))], [1.00]],
1186   [[ctime.days(date.mdy(9,6,1719))], [50000.00]],
1187   [[ctime.days(date.mdy(1,24,1583))], [102.00]],
1188   [[ctime.days(date.mdy(12,14,1585))], [1157.00]],
1189   [[ctime.days(date.mdy(11,26,1621))], [14288.00]],
1190   [[ctime.days(date.mdy(12,25,1821))], [87365.00]],
1191   [[ctime.days(date.mdy(12,3,1882))], [109623.00]],
1192   [[ctime.days(date.mdy(4,6,2002))], [153211.00]],
1193   [[ctime.days(date.mdy(12,19,1999))], [152372.00]],
1194   [[ctime.days(date.mdy(10,1,1978))], [144623.00]],
1195   [[ctime.days(date.mdy(10,0,1978))], [144622.00]],
1196   [[ctime.days(date.mdy(10,32,1978))], [sysmis],
1197    [error: DEBUG EVALUATE: Day 32 is not in acceptable range of 0 to 31.]],
1198   [[ctime.days(date.mdy(0,31,1978))], [144349.00]],
1199   [[ctime.days(date.mdy(13,31,1978))], [144745.00]],
1200   [[ctime.days(date.mdy(10,$sysmis,1978))], [sysmis]],
1201   [[ctime.days(date.mdy($sysmis,31,1978))], [sysmis]],
1202   [[ctime.days(date.mdy(10,31,$sysmis))], [sysmis]],
1203   [[ctime.days(date.mdy($sysmis,$sysmis,1978))], [sysmis]],
1204   [[ctime.days(date.mdy($sysmis,31,$sysmis))], [sysmis]],
1205   [[ctime.days(date.mdy(10,$sysmis,$sysmis))], [sysmis]],
1206   [[ctime.days(date.mdy($sysmis,$sysmis,$sysmis))], [sysmis]],
1207   [[date.mdy('a',1,2)], [error],
1208    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(string, number, number).]],
1209   [[date.mdy(1,'a',2)], [error],
1210    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(number, string, number).]],
1211   [[date.mdy(1,2,'a')], [error],
1212    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MDY(number, number, number) as date.mdy(number, number, string).]],
1213   [[ctime.days(date.mdy(0,0,0))], [152353.00]],
1214   [[ctime.days(date.mdy(0,0,999))], [sysmis],
1215    [error: DEBUG EVALUATE: Date 0998-12-0 is before the earliest acceptable date of 1582-10-15.]],
1216   [[date.mdy(1,1,1582)], [sysmis],
1217    [error: DEBUG EVALUATE: Date 1582-1-1 is before the earliest acceptable date of 1582-10-15.]],
1218   [[date.mdy(10,14,1582)], [sysmis],
1219    [error: DEBUG EVALUATE: Date 1582-10-14 is before the earliest acceptable date of 1582-10-15.]],
1220   [[date.mdy(10,15,1582)], [86400.00]],
1221
1222   [[ctime.days(date.moyr(1,2000))], [152385.00]],
1223   [[ctime.days(date.moyr(2,2000))], [152416.00]],
1224   [[ctime.days(date.moyr(3,2000))], [152445.00]],
1225   [[ctime.days(date.moyr(4,2000))], [152476.00]],
1226   [[ctime.days(date.moyr(5,2000))], [152506.00]],
1227   [[ctime.days(date.moyr(13,2000))], [152751.00]],
1228   [[ctime.days(date.moyr(14,2000))], [sysmis],
1229    [error: DEBUG EVALUATE: Month 14 is not in acceptable range of 0 to 13.]],
1230   [[ctime.days(date.moyr($sysmis,2000))], [sysmis]],
1231   [[ctime.days(date.moyr(1,$sysmis))], [sysmis]],
1232   [[ctime.days(date.moyr($sysmis,$sysmis))], [sysmis]],
1233   [[date.moyr('a',2000)], [error],
1234    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(string, number).]],
1235   [[date.moyr(5,'a')], [error],
1236    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(number, string).]],
1237   [[date.moyr('a','b')], [error],
1238    [error: DEBUG EVALUATE: Type mismatch invoking DATE.MOYR(number, number) as date.moyr(string, string).]],
1239
1240   [[ctime.days(date.qyr(1,2000))], [152385.00]],
1241   [[ctime.days(date.qyr(2,2000))], [152476.00]],
1242   [[ctime.days(date.qyr(5,2000))], [sysmis],
1243    [warning: DEBUG EVALUATE: The first argument to DATE.QYR must be 1, 2, 3, or 4.]],
1244   [[ctime.days(date.qyr(6,2000))], [sysmis],
1245    [warning: DEBUG EVALUATE: The first argument to DATE.QYR must be 1, 2, 3, or 4.]],
1246   [[ctime.days(date.qyr($sysmis,2000))], [sysmis]],
1247   [[ctime.days(date.qyr(1,$sysmis))], [sysmis]],
1248   [[ctime.days(date.qyr($sysmis,$sysmis))], [sysmis]],
1249   [[date.qyr('a',2000)], [error],
1250    [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(string, number).]],
1251   [[date.qyr(5,'a')], [error],
1252    [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(number, string).]],
1253   [[date.qyr('a','b')], [error],
1254    [error: DEBUG EVALUATE: Type mismatch invoking DATE.QYR(number, number) as date.qyr(string, string).]],
1255
1256   [[ctime.days(date.wkyr(1,2000))], [152385.00]],
1257   [[ctime.days(date.wkyr(15,1999))], [152118.00]],
1258   [[ctime.days(date.wkyr(36,1999))], [152265.00]],
1259   [[ctime.days(date.wkyr(54,1999))], [sysmis],
1260    [error: DEBUG EVALUATE: The week argument to DATE.WKYR is outside the acceptable range of 1 to 53.  The result will be system-missing.]],
1261   [[ctime.days(date.wkyr($sysmis,1999))], [sysmis]],
1262   [[ctime.days(date.wkyr(1,$sysmis))], [sysmis]],
1263   [[ctime.days(date.wkyr($sysmis,$sysmis))], [sysmis]],
1264   [[date.wkyr('a',1999)], [error],
1265    [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(string, number).]],
1266   [[date.wkyr(5,'a')], [error],
1267    [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(number, string).]],
1268   [[date.wkyr('a','b')], [error],
1269    [error: DEBUG EVALUATE: Type mismatch invoking DATE.WKYR(number, number) as date.wkyr(string, string).]],
1270
1271   [[ctime.days(date.yrday(2000,1))], [152385.00]],
1272   [[ctime.days(date.yrday(2000,100))], [152484.00]],
1273   [[ctime.days(date.yrday(2000,253))], [152637.00]],
1274   [[ctime.days(date.yrday(2000,500))], [sysmis],
1275    [error: DEBUG EVALUATE: The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  The result will be system-missing.]],
1276   [[ctime.days(date.yrday(2000,-100))], [sysmis],
1277    [error: DEBUG EVALUATE: The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  The result will be system-missing.]],
1278   [[ctime.days(date.yrday(1999,$sysmis))], [sysmis]],
1279   [[ctime.days(date.yrday($sysmis,1))], [sysmis]],
1280   [[ctime.days(date.yrday($sysmis,$sysmis))], [sysmis]],
1281   [[date.yrday(1999,'a')], [error],
1282    [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(number, string).]],
1283   [[date.yrday('a',5)], [error],
1284    [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(string, number).]],
1285   [[date.yrday('a','b')], [error],
1286    [error: DEBUG EVALUATE: Type mismatch invoking DATE.YRDAY(number, number) as date.yrday(string, string).]])
1287
1288 CHECK_EXPR_EVAL([xdate],
1289   [[xdate.date(date.mdy(6,10,1648) + time.hms(0,0,0)) / 86400], [23981.00]],
1290   [[xdate.date(date.mdy(6,30,1680) + time.hms(4,50,38)) / 86400], [35689.00]],
1291   [[xdate.date(date.mdy(7,24,1716) + time.hms(12,31,35)) / 86400], [48861.00]],
1292   [[xdate.date(date.mdy(6,19,1768) + time.hms(12,47,53)) / 86400], [67819.00]],
1293   [[xdate.date(date.mdy(8,2,1819) + time.hms(1,26,0)) / 86400], [86489.00]],
1294   [[xdate.date(date.mdy(3,27,1839) + time.hms(20,58,11)) / 86400], [93666.00]],
1295   [[xdate.date(date.mdy(4,19,1903) + time.hms(7,36,5)) / 86400], [117064.00]],
1296   [[xdate.date(date.mdy(8,25,1929) + time.hms(15,43,49)) / 86400], [126689.00]],
1297   [[xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400], [131107.00]],
1298   [[xdate.date(date.mdy(4,19,1943) + time.hms(6,49,27)) / 86400], [131674.00]],
1299   [[xdate.date(date.mdy(10,7,1943) + time.hms(2,57,52)) / 86400], [131845.00]],
1300   [[xdate.date(date.mdy(3,17,1992) + time.hms(16,45,44)) / 86400], [149539.00]],
1301   [[xdate.date(date.mdy(2,25,1996) + time.hms(21,30,57)) / 86400], [150979.00]],
1302   [[xdate.date(date.mdy(9,29,1941) + time.hms(4,25,9)) / 86400], [131107.00]],
1303   [[xdate.date(date.mdy(4,19,43) + time.hms(6,49,27)) / 86400], [131674.00]],
1304   [[xdate.date(date.mdy(10,7,43) + time.hms(2,57,52)) / 86400], [131845.00]],
1305   [[xdate.date(date.mdy(3,17,92) + time.hms(16,45,44)) / 86400], [149539.00]],
1306   [[xdate.date(date.mdy(2,25,96) + time.hms(21,30,57)) / 86400], [150979.00]],
1307   [[xdate.date(date.mdy(11,10,2038) + time.hms(22,30,4)) / 86400], [166578.00]],
1308   [[xdate.date(date.mdy(7,18,2094) + time.hms(1,56,51)) / 86400], [186917.00]],
1309   [[xdate.date(123.4)], [0.00]],
1310   [[xdate.date('')], [error],
1311    [error: DEBUG EVALUATE: Type mismatch invoking XDATE.DATE(number) as xdate.date(string).]],
1312
1313   [[xdate.hour(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
1314   [[xdate.hour(date.mdy(6,30,1680) + time.hms(4,50,38))], [4.00]],
1315   [[xdate.hour(date.mdy(7,24,1716) + time.hms(12,31,35))], [12.00]],
1316   [[xdate.hour(date.mdy(6,19,1768) + time.hms(12,47,53))], [12.00]],
1317   [[xdate.hour(date.mdy(8,2,1819) + time.hms(1,26,0))], [1.00]],
1318   [[xdate.hour(date.mdy(3,27,1839) + time.hms(20,58,11))], [20.00]],
1319   [[xdate.hour(date.mdy(4,19,1903) + time.hms(7,36,5))], [7.00]],
1320   [[xdate.hour(date.mdy(8,25,1929) + time.hms(15,43,49))], [15.00]],
1321   [[xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9))], [4.00]],
1322   [[xdate.hour(date.mdy(4,19,1943) + time.hms(6,49,27))], [6.00]],
1323   [[xdate.hour(date.mdy(10,7,1943) + time.hms(2,57,52))], [2.00]],
1324   [[xdate.hour(date.mdy(3,17,1992) + time.hms(16,45,44))], [16.00]],
1325   [[xdate.hour(date.mdy(2,25,1996) + time.hms(21,30,57))], [21.00]],
1326   [[xdate.hour(date.mdy(9,29,1941) + time.hms(4,25,9))], [4.00]],
1327   [[xdate.hour(date.mdy(4,19,43) + time.hms(6,49,27))], [6.00]],
1328   [[xdate.hour(date.mdy(10,7,43) + time.hms(2,57,52))], [2.00]],
1329   [[xdate.hour(date.mdy(3,17,92) + time.hms(16,45,44))], [16.00]],
1330   [[xdate.hour(date.mdy(2,25,96) + time.hms(21,30,57))], [21.00]],
1331   [[xdate.hour(date.mdy(11,10,2038) + time.hms(22,30,4))], [22.00]],
1332   [[xdate.hour(date.mdy(7,18,2094) + time.hms(1,56,51))], [1.00]],
1333   [[xdate.hour(-1)], [-1.00]],
1334   [[xdate.hour(1)], [0.00]],
1335   [[xdate.hour($sysmis)], [sysmis]],
1336   [[xdate.hour('')], [error],
1337    [error: DEBUG EVALUATE: Type mismatch invoking XDATE.HOUR(number) as xdate.hour(string).]],
1338
1339   [[xdate.jday(date.mdy(6,10,1648) + time.hms(0,0,0))], [162.00]],
1340   [[xdate.jday(date.mdy(6,30,1680) + time.hms(4,50,38))], [182.00]],
1341   [[xdate.jday(date.mdy(7,24,1716) + time.hms(12,31,35))], [206.00]],
1342   [[xdate.jday(date.mdy(6,19,1768) + time.hms(12,47,53))], [171.00]],
1343   [[xdate.jday(date.mdy(8,2,1819) + time.hms(1,26,0))], [214.00]],
1344   [[xdate.jday(date.mdy(3,27,1839) + time.hms(20,58,11))], [86.00]],
1345   [[xdate.jday(date.mdy(4,19,1903) + time.hms(7,36,5))], [109.00]],
1346   [[xdate.jday(date.mdy(8,25,1929) + time.hms(15,43,49))], [237.00]],
1347   [[xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9))], [272.00]],
1348   [[xdate.jday(date.mdy(4,19,1943) + time.hms(6,49,27))], [109.00]],
1349   [[xdate.jday(date.mdy(10,7,1943) + time.hms(2,57,52))], [280.00]],
1350   [[xdate.jday(date.mdy(3,17,1992) + time.hms(16,45,44))], [77.00]],
1351   [[xdate.jday(date.mdy(2,25,1996) + time.hms(21,30,57))], [56.00]],
1352   [[xdate.jday(date.mdy(9,29,1941) + time.hms(4,25,9))], [272.00]],
1353   [[xdate.jday(date.mdy(4,19,43) + time.hms(6,49,27))], [109.00]],
1354   [[xdate.jday(date.mdy(10,7,43) + time.hms(2,57,52))], [280.00]],
1355   [[xdate.jday(date.mdy(3,17,92) + time.hms(16,45,44))], [77.00]],
1356   [[xdate.jday(date.mdy(2,25,96) + time.hms(21,30,57))], [56.00]],
1357   [[xdate.jday(date.mdy(11,10,2038) + time.hms(22,30,4))], [314.00]],
1358   [[xdate.jday(date.mdy(7,18,2094) + time.hms(1,56,51))], [199.00]],
1359   [[xdate.jday(0)], [sysmis]],
1360   [[xdate.jday(1)], [sysmis]],
1361   [[xdate.jday(86400)], [288.00]],
1362
1363   [[xdate.mday(date.mdy(6,10,1648) + time.hms(0,0,0))], [10.00]],
1364   [[xdate.mday(date.mdy(6,30,1680) + time.hms(4,50,38))], [30.00]],
1365   [[xdate.mday(date.mdy(7,24,1716) + time.hms(12,31,35))], [24.00]],
1366   [[xdate.mday(date.mdy(6,19,1768) + time.hms(12,47,53))], [19.00]],
1367   [[xdate.mday(date.mdy(8,2,1819) + time.hms(1,26,0))], [2.00]],
1368   [[xdate.mday(date.mdy(3,27,1839) + time.hms(20,58,11))], [27.00]],
1369   [[xdate.mday(date.mdy(4,19,1903) + time.hms(7,36,5))], [19.00]],
1370   [[xdate.mday(date.mdy(8,25,1929) + time.hms(15,43,49))], [25.00]],
1371   [[xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9))], [29.00]],
1372   [[xdate.mday(date.mdy(4,19,1943) + time.hms(6,49,27))], [19.00]],
1373   [[xdate.mday(date.mdy(10,7,1943) + time.hms(2,57,52))], [7.00]],
1374   [[xdate.mday(date.mdy(3,17,1992) + time.hms(16,45,44))], [17.00]],
1375   [[xdate.mday(date.mdy(2,25,1996) + time.hms(21,30,57))], [25.00]],
1376   [[xdate.mday(date.mdy(9,29,1941) + time.hms(4,25,9))], [29.00]],
1377   [[xdate.mday(date.mdy(4,19,43) + time.hms(6,49,27))], [19.00]],
1378   [[xdate.mday(date.mdy(10,7,43) + time.hms(2,57,52))], [7.00]],
1379   [[xdate.mday(date.mdy(3,17,92) + time.hms(16,45,44))], [17.00]],
1380   [[xdate.mday(date.mdy(2,25,96) + time.hms(21,30,57))], [25.00]],
1381   [[xdate.mday(date.mdy(11,10,2038) + time.hms(22,30,4))], [10.00]],
1382   [[xdate.mday(date.mdy(7,18,2094) + time.hms(1,56,51))], [18.00]],
1383
1384   [[xdate.minute(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
1385   [[xdate.minute(date.mdy(6,30,1680) + time.hms(4,50,38))], [50.00]],
1386   [[xdate.minute(date.mdy(7,24,1716) + time.hms(12,31,35))], [31.00]],
1387   [[xdate.minute(date.mdy(6,19,1768) + time.hms(12,47,53))], [47.00]],
1388   [[xdate.minute(date.mdy(8,2,1819) + time.hms(1,26,0))], [26.00]],
1389   [[xdate.minute(date.mdy(3,27,1839) + time.hms(20,58,11))], [58.00]],
1390   [[xdate.minute(date.mdy(4,19,1903) + time.hms(7,36,5))], [36.00]],
1391   [[xdate.minute(date.mdy(8,25,1929) + time.hms(15,43,49))], [43.00]],
1392   [[xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9))], [25.00]],
1393   [[xdate.minute(date.mdy(4,19,1943) + time.hms(6,49,27))], [49.00]],
1394   [[xdate.minute(date.mdy(10,7,1943) + time.hms(2,57,52))], [57.00]],
1395   [[xdate.minute(date.mdy(3,17,1992) + time.hms(16,45,44))], [45.00]],
1396   [[xdate.minute(date.mdy(2,25,1996) + time.hms(21,30,57))], [30.00]],
1397   [[xdate.minute(date.mdy(9,29,1941) + time.hms(4,25,9))], [25.00]],
1398   [[xdate.minute(date.mdy(4,19,43) + time.hms(6,49,27))], [49.00]],
1399   [[xdate.minute(date.mdy(10,7,43) + time.hms(2,57,52))], [57.00]],
1400   [[xdate.minute(date.mdy(3,17,92) + time.hms(16,45,44))], [45.00]],
1401   [[xdate.minute(date.mdy(2,25,96) + time.hms(21,30,57))], [30.00]],
1402   [[xdate.minute(date.mdy(11,10,2038) + time.hms(22,30,4))], [30.00]],
1403   [[xdate.minute(date.mdy(7,18,2094) + time.hms(1,56,51))], [56.00]],
1404
1405   [[xdate.month(date.mdy(6,10,1648) + time.hms(0,0,0))], [6.00]],
1406   [[xdate.month(date.mdy(6,30,1680) + time.hms(4,50,38))], [6.00]],
1407   [[xdate.month(date.mdy(7,24,1716) + time.hms(12,31,35))], [7.00]],
1408   [[xdate.month(date.mdy(6,19,1768) + time.hms(12,47,53))], [6.00]],
1409   [[xdate.month(date.mdy(8,2,1819) + time.hms(1,26,0))], [8.00]],
1410   [[xdate.month(date.mdy(3,27,1839) + time.hms(20,58,11))], [3.00]],
1411   [[xdate.month(date.mdy(4,19,1903) + time.hms(7,36,5))], [4.00]],
1412   [[xdate.month(date.mdy(8,25,1929) + time.hms(15,43,49))], [8.00]],
1413   [[xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
1414   [[xdate.month(date.mdy(4,19,1943) + time.hms(6,49,27))], [4.00]],
1415   [[xdate.month(date.mdy(10,7,1943) + time.hms(2,57,52))], [10.00]],
1416   [[xdate.month(date.mdy(3,17,1992) + time.hms(16,45,44))], [3.00]],
1417   [[xdate.month(date.mdy(2,25,1996) + time.hms(21,30,57))], [2.00]],
1418   [[xdate.month(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
1419   [[xdate.month(date.mdy(4,19,43) + time.hms(6,49,27))], [4.00]],
1420   [[xdate.month(date.mdy(10,7,43) + time.hms(2,57,52))], [10.00]],
1421   [[xdate.month(date.mdy(3,17,92) + time.hms(16,45,44))], [3.00]],
1422   [[xdate.month(date.mdy(2,25,96) + time.hms(21,30,57))], [2.00]],
1423   [[xdate.month(date.mdy(11,10,2038) + time.hms(22,30,4))], [11.00]],
1424   [[xdate.month(date.mdy(7,18,2094) + time.hms(1,56,51))], [7.00]],
1425
1426   [[xdate.quarter(date.mdy(6,10,1648) + time.hms(0,0,0))], [2.00]],
1427   [[xdate.quarter(date.mdy(6,30,1680) + time.hms(4,50,38))], [2.00]],
1428   [[xdate.quarter(date.mdy(7,24,1716) + time.hms(12,31,35))], [3.00]],
1429   [[xdate.quarter(date.mdy(6,19,1768) + time.hms(12,47,53))], [2.00]],
1430   [[xdate.quarter(date.mdy(8,2,1819) + time.hms(1,26,0))], [3.00]],
1431   [[xdate.quarter(date.mdy(3,27,1839) + time.hms(20,58,11))], [1.00]],
1432   [[xdate.quarter(date.mdy(4,19,1903) + time.hms(7,36,5))], [2.00]],
1433   [[xdate.quarter(date.mdy(8,25,1929) + time.hms(15,43,49))], [3.00]],
1434   [[xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9))], [3.00]],
1435   [[xdate.quarter(date.mdy(4,19,1943) + time.hms(6,49,27))], [2.00]],
1436   [[xdate.quarter(date.mdy(10,7,1943) + time.hms(2,57,52))], [4.00]],
1437   [[xdate.quarter(date.mdy(3,17,1992) + time.hms(16,45,44))], [1.00]],
1438   [[xdate.quarter(date.mdy(2,25,1996) + time.hms(21,30,57))], [1.00]],
1439   [[xdate.quarter(date.mdy(9,29,1941) + time.hms(4,25,9))], [3.00]],
1440   [[xdate.quarter(date.mdy(4,19,43) + time.hms(6,49,27))], [2.00]],
1441   [[xdate.quarter(date.mdy(10,7,43) + time.hms(2,57,52))], [4.00]],
1442   [[xdate.quarter(date.mdy(3,17,92) + time.hms(16,45,44))], [1.00]],
1443   [[xdate.quarter(date.mdy(2,25,96) + time.hms(21,30,57))], [1.00]],
1444   [[xdate.quarter(date.mdy(11,10,2038) + time.hms(22,30,4))], [4.00]],
1445   [[xdate.quarter(date.mdy(7,18,2094) + time.hms(1,56,51))], [3.00]],
1446
1447   [[xdate.second(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
1448   [[xdate.second(date.mdy(6,30,1680) + time.hms(4,50,38))], [38.00]],
1449   [[xdate.second(date.mdy(7,24,1716) + time.hms(12,31,35))], [35.00]],
1450   [[xdate.second(date.mdy(6,19,1768) + time.hms(12,47,53))], [53.00]],
1451   [[xdate.second(date.mdy(8,2,1819) + time.hms(1,26,0))], [0.00]],
1452   [[xdate.second(date.mdy(3,27,1839) + time.hms(20,58,11))], [11.00]],
1453   [[xdate.second(date.mdy(4,19,1903) + time.hms(7,36,5))], [5.00]],
1454   [[xdate.second(date.mdy(8,25,1929) + time.hms(15,43,49))], [49.00]],
1455   [[xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
1456   [[xdate.second(date.mdy(4,19,1943) + time.hms(6,49,27))], [27.00]],
1457   [[xdate.second(date.mdy(10,7,1943) + time.hms(2,57,52))], [52.00]],
1458   [[xdate.second(date.mdy(3,17,1992) + time.hms(16,45,44))], [44.00]],
1459   [[xdate.second(date.mdy(2,25,1996) + time.hms(21,30,57))], [57.00]],
1460   [[xdate.second(date.mdy(9,29,1941) + time.hms(4,25,9))], [9.00]],
1461   [[xdate.second(date.mdy(4,19,43) + time.hms(6,49,27))], [27.00]],
1462   [[xdate.second(date.mdy(10,7,43) + time.hms(2,57,52))], [52.00]],
1463   [[xdate.second(date.mdy(3,17,92) + time.hms(16,45,44))], [44.00]],
1464   [[xdate.second(date.mdy(2,25,96) + time.hms(21,30,57))], [57.00]],
1465   [[xdate.second(date.mdy(11,10,2038) + time.hms(22,30,4))], [4.00]],
1466   [[xdate.second(date.mdy(7,18,2094) + time.hms(1,56,51))], [51.00]],
1467
1468   [[xdate.tday(date.mdy(6,10,1648) + time.hms(0,0,0))], [23981.00]],
1469   [[xdate.tday(date.mdy(6,30,1680) + time.hms(4,50,38))], [35689.00]],
1470   [[xdate.tday(date.mdy(7,24,1716) + time.hms(12,31,35))], [48861.00]],
1471   [[xdate.tday(date.mdy(6,19,1768) + time.hms(12,47,53))], [67819.00]],
1472   [[xdate.tday(date.mdy(8,2,1819) + time.hms(1,26,0))], [86489.00]],
1473   [[xdate.tday(date.mdy(3,27,1839) + time.hms(20,58,11))], [93666.00]],
1474   [[xdate.tday(date.mdy(4,19,1903) + time.hms(7,36,5))], [117064.00]],
1475   [[xdate.tday(date.mdy(8,25,1929) + time.hms(15,43,49))], [126689.00]],
1476   [[xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9))], [131107.00]],
1477   [[xdate.tday(date.mdy(4,19,1943) + time.hms(6,49,27))], [131674.00]],
1478   [[xdate.tday(date.mdy(10,7,1943) + time.hms(2,57,52))], [131845.00]],
1479   [[xdate.tday(date.mdy(3,17,1992) + time.hms(16,45,44))], [149539.00]],
1480   [[xdate.tday(date.mdy(2,25,1996) + time.hms(21,30,57))], [150979.00]],
1481   [[xdate.tday(date.mdy(9,29,1941) + time.hms(4,25,9))], [131107.00]],
1482   [[xdate.tday(date.mdy(4,19,43) + time.hms(6,49,27))], [131674.00]],
1483   [[xdate.tday(date.mdy(10,7,43) + time.hms(2,57,52))], [131845.00]],
1484   [[xdate.tday(date.mdy(3,17,92) + time.hms(16,45,44))], [149539.00]],
1485   [[xdate.tday(date.mdy(2,25,96) + time.hms(21,30,57))], [150979.00]],
1486   [[xdate.tday(date.mdy(11,10,2038) + time.hms(22,30,4))], [166578.00]],
1487   [[xdate.tday(date.mdy(7,18,2094) + time.hms(1,56,51))], [186917.00]],
1488
1489   [[xdate.time(date.mdy(6,10,1648) + time.hms(0,0,0))], [0.00]],
1490   [[xdate.time(date.mdy(6,30,1680) + time.hms(4,50,38))], [17438.00]],
1491   [[xdate.time(date.mdy(7,24,1716) + time.hms(12,31,35))], [45095.00]],
1492   [[xdate.time(date.mdy(6,19,1768) + time.hms(12,47,53))], [46073.00]],
1493   [[xdate.time(date.mdy(8,2,1819) + time.hms(1,26,0))], [5160.00]],
1494   [[xdate.time(date.mdy(3,27,1839) + time.hms(20,58,11))], [75491.00]],
1495   [[xdate.time(date.mdy(4,19,1903) + time.hms(7,36,5))], [27365.00]],
1496   [[xdate.time(date.mdy(8,25,1929) + time.hms(15,43,49))], [56629.00]],
1497   [[xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9))], [15909.00]],
1498   [[xdate.time(date.mdy(4,19,1943) + time.hms(6,49,27))], [24567.00]],
1499   [[xdate.time(date.mdy(10,7,1943) + time.hms(2,57,52))], [10672.00]],
1500   [[xdate.time(date.mdy(3,17,1992) + time.hms(16,45,44))], [60344.00]],
1501   [[xdate.time(date.mdy(2,25,1996) + time.hms(21,30,57))], [77457.00]],
1502   [[xdate.time(date.mdy(9,29,1941) + time.hms(4,25,9))], [15909.00]],
1503   [[xdate.time(date.mdy(4,19,43) + time.hms(6,49,27))], [24567.00]],
1504   [[xdate.time(date.mdy(10,7,43) + time.hms(2,57,52))], [10672.00]],
1505   [[xdate.time(date.mdy(3,17,92) + time.hms(16,45,44))], [60344.00]],
1506   [[xdate.time(date.mdy(2,25,96) + time.hms(21,30,57))], [77457.00]],
1507   [[xdate.time(date.mdy(11,10,2038) + time.hms(22,30,4))], [81004.00]],
1508   [[xdate.time(date.mdy(7,18,2094) + time.hms(1,56,51))], [7011.00]],
1509
1510   [[xdate.week(date.mdy(6,10,1648) + time.hms(0,0,0))], [24.00]],
1511   [[xdate.week(date.mdy(6,30,1680) + time.hms(4,50,38))], [26.00]],
1512   [[xdate.week(date.mdy(7,24,1716) + time.hms(12,31,35))], [30.00]],
1513   [[xdate.week(date.mdy(6,19,1768) + time.hms(12,47,53))], [25.00]],
1514   [[xdate.week(date.mdy(8,2,1819) + time.hms(1,26,0))], [31.00]],
1515   [[xdate.week(date.mdy(3,27,1839) + time.hms(20,58,11))], [13.00]],
1516   [[xdate.week(date.mdy(4,19,1903) + time.hms(7,36,5))], [16.00]],
1517   [[xdate.week(date.mdy(8,25,1929) + time.hms(15,43,49))], [34.00]],
1518   [[xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9))], [39.00]],
1519   [[xdate.week(date.mdy(4,19,1943) + time.hms(6,49,27))], [16.00]],
1520   [[xdate.week(date.mdy(10,7,1943) + time.hms(2,57,52))], [40.00]],
1521   [[xdate.week(date.mdy(3,17,1992) + time.hms(16,45,44))], [11.00]],
1522   [[xdate.week(date.mdy(2,25,1996) + time.hms(21,30,57))], [8.00]],
1523   [[xdate.week(date.mdy(9,29,1941) + time.hms(4,25,9))], [39.00]],
1524   [[xdate.week(date.mdy(4,19,43) + time.hms(6,49,27))], [16.00]],
1525   [[xdate.week(date.mdy(10,7,43) + time.hms(2,57,52))], [40.00]],
1526   [[xdate.week(date.mdy(3,17,92) + time.hms(16,45,44))], [11.00]],
1527   [[xdate.week(date.mdy(2,25,96) + time.hms(21,30,57))], [8.00]],
1528   [[xdate.week(date.mdy(11,10,2038) + time.hms(22,30,4))], [45.00]],
1529   [[xdate.week(date.mdy(7,18,2094) + time.hms(1,56,51))], [29.00]],
1530
1531   [[xdate.wkday(date.mdy(6,10,1648))], [4.00]],
1532   [[xdate.wkday(date.mdy(6,30,1680))], [1.00]],
1533   [[xdate.wkday(date.mdy(7,24,1716))], [6.00]],
1534   [[xdate.wkday(date.mdy(6,19,1768))], [1.00]],
1535   [[xdate.wkday(date.mdy(8,2,1819))], [2.00]],
1536   [[xdate.wkday(date.mdy(3,27,1839))], [4.00]],
1537   [[xdate.wkday(date.mdy(4,19,1903))], [1.00]],
1538   [[xdate.wkday(date.mdy(8,25,1929))], [1.00]],
1539   [[xdate.wkday(date.mdy(9,29,1941))], [2.00]],
1540   [[xdate.wkday(date.mdy(4,19,1943))], [2.00]],
1541   [[xdate.wkday(date.mdy(10,7,1943))], [5.00]],
1542   [[xdate.wkday(date.mdy(3,17,1992))], [3.00]],
1543   [[xdate.wkday(date.mdy(2,25,1996))], [1.00]],
1544   [[xdate.wkday(date.mdy(9,29,1941))], [2.00]],
1545   [[xdate.wkday(date.mdy(4,19,43))], [2.00]],
1546   [[xdate.wkday(date.mdy(10,7,43))], [5.00]],
1547   [[xdate.wkday(date.mdy(3,17,92))], [3.00]],
1548   [[xdate.wkday(date.mdy(2,25,96))], [1.00]],
1549   [[xdate.wkday(date.mdy(11,10,2038))], [4.00]],
1550   [[xdate.wkday(date.mdy(7,18,2094))], [1.00]],
1551
1552   [[xdate.year(date.mdy(6,10,1648) + time.hms(0,0,0))], [1648.00]],
1553   [[xdate.year(date.mdy(6,30,1680) + time.hms(4,50,38))], [1680.00]],
1554   [[xdate.year(date.mdy(7,24,1716) + time.hms(12,31,35))], [1716.00]],
1555   [[xdate.year(date.mdy(6,19,1768) + time.hms(12,47,53))], [1768.00]],
1556   [[xdate.year(date.mdy(8,2,1819) + time.hms(1,26,0))], [1819.00]],
1557   [[xdate.year(date.mdy(3,27,1839) + time.hms(20,58,11))], [1839.00]],
1558   [[xdate.year(date.mdy(4,19,1903) + time.hms(7,36,5))], [1903.00]],
1559   [[xdate.year(date.mdy(8,25,1929) + time.hms(15,43,49))], [1929.00]],
1560   [[xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9))], [1941.00]],
1561   [[xdate.year(date.mdy(4,19,1943) + time.hms(6,49,27))], [1943.00]],
1562   [[xdate.year(date.mdy(10,7,1943) + time.hms(2,57,52))], [1943.00]],
1563   [[xdate.year(date.mdy(3,17,1992) + time.hms(16,45,44))], [1992.00]],
1564   [[xdate.year(date.mdy(2,25,1996) + time.hms(21,30,57))], [1996.00]],
1565   [[xdate.year(date.mdy(9,29,1941) + time.hms(4,25,9))], [1941.00]],
1566   [[xdate.year(date.mdy(4,19,43) + time.hms(6,49,27))], [1943.00]],
1567   [[xdate.year(date.mdy(10,7,43) + time.hms(2,57,52))], [1943.00]],
1568   [[xdate.year(date.mdy(3,17,92) + time.hms(16,45,44))], [1992.00]],
1569   [[xdate.year(date.mdy(2,25,96) + time.hms(21,30,57))], [1996.00]],
1570   [[xdate.year(date.mdy(11,10,2038) + time.hms(22,30,4))], [2038.00]],
1571   [[xdate.year(date.mdy(7,18,2094) + time.hms(1,56,51))], [2094.00]])
1572
1573 CHECK_EXPR_EVAL([datediff],
1574   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'years')], [-32.00]],
1575   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'years')], [-36.00]],
1576   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'years')], [-51.00]],
1577   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'years')], [-51.00]],
1578   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'years')], [-19.00]],
1579   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'years')], [-64.00]],
1580   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'years')], [-26.00]],
1581   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'years')], [-12.00]],
1582   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'years')], [-1.00]],
1583   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'years')], [0.00]],
1584   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'years')], [-48.00]],
1585   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'years')], [-3.00]],
1586   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'years')], [-54.00]],
1587   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'years')], [-1.00]],
1588   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'years')], [0.00]],
1589   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'years')], [-48.00]],
1590   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'years')], [-3.00]],
1591   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'years')], [-42.00]],
1592   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'years')], [-55.00]],
1593   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'years')], [-3.00]],
1594   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'years')], [-4.00]],
1595   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'years')], [-2.00]],
1596
1597   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'quarters')], [-128.00]],
1598   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'quarters')], [-144.00]],
1599   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'quarters')], [-207.00]],
1600   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'quarters')], [-204.00]],
1601   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'quarters')], [-78.00]],
1602   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'quarters')], [-256.00]],
1603   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'quarters')], [-105.00]],
1604   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'quarters')], [-48.00]],
1605   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'quarters')], [-6.00]],
1606   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'quarters')], [-1.00]],
1607   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'quarters')], [-193.00]],
1608   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'quarters')], [-15.00]],
1609   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'quarters')], [-217.00]],
1610   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'quarters')], [-6.00]],
1611   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'quarters')], [-1.00]],
1612   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'quarters')], [-193.00]],
1613   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'quarters')], [-15.00]],
1614   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'quarters')], [-170.00]],
1615   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'quarters')], [-222.00]],
1616   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'quarters')], [-15.00]],
1617   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'quarters')], [-16.00]],
1618   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'quarters')], [-11.00]],
1619
1620   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'months')], [-384.00]],
1621   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'months')], [-432.00]],
1622   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'months')], [-622.00]],
1623   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'months')], [-613.00]],
1624   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'months')], [-235.00]],
1625   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'months')], [-768.00]],
1626   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'months')], [-316.00]],
1627   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'months')], [-145.00]],
1628   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'months')], [-18.00]],
1629   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'months')], [-5.00]],
1630   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'months')], [-581.00]],
1631   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'months')], [-47.00]],
1632   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'months')], [-652.00]],
1633   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'months')], [-18.00]],
1634   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'months')], [-5.00]],
1635   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'months')], [-581.00]],
1636   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'months')], [-47.00]],
1637   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'months')], [-512.00]],
1638   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'months')], [-668.00]],
1639   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'months')], [-47.00]],
1640   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'months')], [-48.00]],
1641   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'months')], [-35.00]],
1642
1643   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'weeks')], [-1672.00]],
1644   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'weeks')], [-1881.00]],
1645   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'weeks')], [-2708.00]],
1646   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'weeks')], [-2667.00]],
1647   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'weeks')], [-1025.00]],
1648   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'weeks')], [-3342.00]],
1649   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'weeks')], [-1375.00]],
1650   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'weeks')], [-631.00]],
1651   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'weeks')], [-81.00]],
1652   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'weeks')], [-24.00]],
1653   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'weeks')], [-2527.00]],
1654   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'weeks')], [-205.00]],
1655   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'weeks')], [-2838.00]],
1656   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'weeks')], [-81.00]],
1657   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'weeks')], [-24.00]],
1658   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'weeks')], [-2527.00]],
1659   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'weeks')], [-205.00]],
1660   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'weeks')], [-2228.00]],
1661   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'weeks')], [-2905.00]],
1662   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'weeks')], [-208.00]],
1663   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'weeks')], [-208.00]],
1664   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'weeks')], [-156.00]],
1665
1666   [[datediff(date.mdy(6,10,1648), date.mdy(6,30,1680), 'days')], [-11708.00]],
1667   [[datediff(date.mdy(6,30,1680), date.mdy(7,24,1716), 'days')], [-13172.00]],
1668   [[datediff(date.mdy(7,24,1716), date.mdy(6,19,1768), 'days')], [-18958.00]],
1669   [[datediff(date.mdy(6,19,1768), date.mdy(8,2,1819), 'days')], [-18670.00]],
1670   [[datediff(date.mdy(8,2,1819), date.mdy(3,27,1839), 'days')], [-7177.00]],
1671   [[datediff(date.mdy(3,27,1839), date.mdy(4,19,1903), 'days')], [-23398.00]],
1672   [[datediff(date.mdy(4,19,1903), date.mdy(8,25,1929), 'days')], [-9625.00]],
1673   [[datediff(date.mdy(8,25,1929), date.mdy(9,29,1941), 'days')], [-4418.00]],
1674   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,1943), 'days')], [-567.00]],
1675   [[datediff(date.mdy(4,19,1943), date.mdy(10,7,1943), 'days')], [-171.00]],
1676   [[datediff(date.mdy(10,7,1943), date.mdy(3,17,1992), 'days')], [-17694.00]],
1677   [[datediff(date.mdy(3,17,1992), date.mdy(2,25,1996), 'days')], [-1440.00]],
1678   [[datediff(date.mdy(9,29,1941), date.mdy(2,25,1996), 'days')], [-19872.00]],
1679   [[datediff(date.mdy(9,29,1941), date.mdy(4,19,43), 'days')], [-567.00]],
1680   [[datediff(date.mdy(4,19,43), date.mdy(10,7,43), 'days')], [-171.00]],
1681   [[datediff(date.mdy(10,7,43), date.mdy(3,17,92), 'days')], [-17694.00]],
1682   [[datediff(date.mdy(3,17,92), date.mdy(2,25,96), 'days')], [-1440.00]],
1683   [[datediff(date.mdy(2,25,96), date.mdy(11,10,2038), 'days')], [-15599.00]],
1684   [[datediff(date.mdy(11,10,2038), date.mdy(7,18,2094), 'days')], [-20339.00]],
1685   [[datediff(date.mdy(2,29,1900), date.mdy(2,29,1904), 'days')], [-1460.00]],
1686   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1908), 'days')], [-1461.00]],
1687   [[datediff(date.mdy(2,29,1900), date.mdy(2,28,1903), 'days')], [-1094.00]],
1688
1689   [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'years')], [32.00]],
1690   [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'years')], [36.00]],
1691   [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'years')], [51.00]],
1692   [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'years')], [51.00]],
1693   [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'years')], [19.00]],
1694   [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'years')], [64.00]],
1695   [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'years')], [26.00]],
1696   [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'years')], [12.00]],
1697   [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'years')], [1.00]],
1698   [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'years')], [0.00]],
1699   [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'years')], [48.00]],
1700   [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'years')], [3.00]],
1701   [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'years')], [54.00]],
1702   [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'years')], [1.00]],
1703   [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'years')], [0.00]],
1704   [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'years')], [48.00]],
1705   [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'years')], [3.00]],
1706   [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'years')], [42.00]],
1707   [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'years')], [55.00]],
1708   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'years')], [3.00]],
1709   [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'years')], [4.00]],
1710   [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'years')], [2.00]],
1711
1712   [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'months')], [384.00]],
1713   [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'months')], [432.00]],
1714   [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'months')], [622.00]],
1715   [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'months')], [613.00]],
1716   [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'months')], [235.00]],
1717   [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'months')], [768.00]],
1718   [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'months')], [316.00]],
1719   [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'months')], [145.00]],
1720   [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'months')], [18.00]],
1721   [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'months')], [5.00]],
1722   [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'months')], [581.00]],
1723   [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'months')], [47.00]],
1724   [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'months')], [652.00]],
1725   [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'months')], [18.00]],
1726   [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'months')], [5.00]],
1727   [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'months')], [581.00]],
1728   [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'months')], [47.00]],
1729   [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'months')], [512.00]],
1730   [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'months')], [668.00]],
1731   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'months')], [47.00]],
1732   [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'months')], [48.00]],
1733   [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'months')], [35.00]],
1734
1735   [[datediff(date.mdy(6,30,1680), date.mdy(6,10,1648), 'quarters')], [128.00]],
1736   [[datediff(date.mdy(7,24,1716), date.mdy(6,30,1680), 'quarters')], [144.00]],
1737   [[datediff(date.mdy(6,19,1768), date.mdy(7,24,1716), 'quarters')], [207.00]],
1738   [[datediff(date.mdy(8,2,1819), date.mdy(6,19,1768), 'quarters')], [204.00]],
1739   [[datediff(date.mdy(3,27,1839), date.mdy(8,2,1819), 'quarters')], [78.00]],
1740   [[datediff(date.mdy(4,19,1903), date.mdy(3,27,1839), 'quarters')], [256.00]],
1741   [[datediff(date.mdy(8,25,1929), date.mdy(4,19,1903), 'quarters')], [105.00]],
1742   [[datediff(date.mdy(9,29,1941), date.mdy(8,25,1929), 'quarters')], [48.00]],
1743   [[datediff(date.mdy(4,19,1943), date.mdy(9,29,1941), 'quarters')], [6.00]],
1744   [[datediff(date.mdy(10,7,1943), date.mdy(4,19,1943), 'quarters')], [1.00]],
1745   [[datediff(date.mdy(3,17,1992), date.mdy(10,7,1943), 'quarters')], [193.00]],
1746   [[datediff(date.mdy(2,25,1996), date.mdy(3,17,1992), 'quarters')], [15.00]],
1747   [[datediff(date.mdy(2,25,1996), date.mdy(9,29,1941), 'quarters')], [217.00]],
1748   [[datediff(date.mdy(4,19,43), date.mdy(9,29,1941), 'quarters')], [6.00]],
1749   [[datediff(date.mdy(10,7,43), date.mdy(4,19,43), 'quarters')], [1.00]],
1750   [[datediff(date.mdy(3,17,92), date.mdy(10,7,43), 'quarters')], [193.00]],
1751   [[datediff(date.mdy(2,25,96), date.mdy(3,17,92), 'quarters')], [15.00]],
1752   [[datediff(date.mdy(11,10,2038), date.mdy(2,25,96), 'quarters')], [170.00]],
1753   [[datediff(date.mdy(7,18,2094), date.mdy(11,10,2038), 'quarters')], [222.00]],
1754   [[datediff(date.mdy(2,29,1904), date.mdy(2,29,1900), 'quarters')], [15.00]],
1755   [[datediff(date.mdy(2,29,1908), date.mdy(2,29,1904), 'quarters')], [16.00]],
1756   [[datediff(date.mdy(2,28,1903), date.mdy(2,29,1900), 'quarters')], [11.00]],
1757
1758 dnl time of day is significant for DATEDIFF
1759   [[datediff(date.mdy(10,15,1910) + 234, date.mdy(10,10,1910) + 123, 'days')],
1760     [5.00]],
1761   [[datediff(date.mdy(10,15,1910) + 123, date.mdy(10,10,1910) + 234, 'days')],
1762     [4.00]],
1763   [[datediff(date.mdy(10,24,1910) + 234, date.mdy(10,10,1910) + 123, 'weeks')],
1764     [2.00]],
1765   [[datediff(date.mdy(10,24,1910) + 123, date.mdy(10,10,1910) + 234, 'weeks')],
1766     [1.00]],
1767   [[datediff(date.mdy(10,10,1910) + 234, date.mdy(5,10,1910) + 123, 'months')],
1768     [5.00]],
1769   [[datediff(date.mdy(10,10,1910) + 123, date.mdy(5,10,1910) + 234, 'months')],
1770     [4.00]],
1771   [[datediff(date.mdy(5,10,1919) + 234, date.mdy(5,10,1910) + 123, 'years')],
1772     [9.00]],
1773   [[datediff(date.mdy(5,10,1919) + 123, date.mdy(5,10,1910) + 234, 'years')],
1774     [8.00]],
1775
1776   [[datediff(date.mdy(10,10,1910) + 123, date.mdy(10,15,1910) + 234, 'days')],
1777     [-5.00]],
1778   [[datediff(date.mdy(10,10,1910) + 234, date.mdy(10,15,1910) + 123, 'days')],
1779     [-4.00]],
1780   [[datediff(date.mdy(10,10,1910) + 123, date.mdy(10,24,1910) + 234, 'weeks')],
1781     [-2.00]],
1782   [[datediff(date.mdy(10,10,1910) + 234, date.mdy(10,24,1910) + 123, 'weeks')],
1783     [-1.00]],
1784   [[datediff(date.mdy(5,10,1910) + 123, date.mdy(10,10,1910) + 234, 'months')],
1785     [-5.00]],
1786   [[datediff(date.mdy(5,10,1910) + 234, date.mdy(10,10,1910) + 123, 'months')],
1787     [-4.00]],
1788   [[datediff(date.mdy(5,10,1910) + 123, date.mdy(5,10,1919) + 234, 'years')],
1789     [-9.00]],
1790   [[datediff(date.mdy(5,10,1910) + 234, date.mdy(5,10,1919) + 123, 'years')],
1791     [-8.00]])
1792
1793 CHECK_EXPR_EVAL([datesum],
1794 dnl DATESUM with non-leap year
1795   [[ctime.days(datesum(date.mdy(1,31,1900), 1, 'months') - date.mdy(1,1,1900))], [58.00]],
1796   [[ctime.days(datesum(date.mdy(1,31,1900), 2, 'months') - date.mdy(1,1,1900))], [89.00]],
1797   [[ctime.days(datesum(date.mdy(1,31,1900), 3, 'months') - date.mdy(1,1,1900))], [119.00]],
1798   [[ctime.days(datesum(date.mdy(1,31,1900), 4, 'months') - date.mdy(1,1,1900))], [150.00]],
1799   [[ctime.days(datesum(date.mdy(1,31,1900), 5.4, 'months') - date.mdy(1,1,1900))], [180.00]],
1800   [[ctime.days(datesum(date.mdy(1,31,1900), 6, 'months') - date.mdy(1,1,1900))], [211.00]],
1801   [[ctime.days(datesum(date.mdy(1,31,1900), 7, 'months') - date.mdy(1,1,1900))], [242.00]],
1802   [[ctime.days(datesum(date.mdy(1,31,1900), 8, 'months') - date.mdy(1,1,1900))], [272.00]],
1803   [[ctime.days(datesum(date.mdy(1,31,1900), 9, 'months') - date.mdy(1,1,1900))], [303.00]],
1804   [[ctime.days(datesum(date.mdy(1,31,1900), 10, 'months') - date.mdy(1,1,1900))], [333.00]],
1805   [[ctime.days(datesum(date.mdy(1,31,1900), 11, 'months') - date.mdy(1,1,1900))], [364.00]],
1806   [[ctime.days(datesum(date.mdy(1,31,1900), 12, 'months') - date.mdy(1,1,1900))], [395.00]],
1807   [[ctime.days(datesum(date.mdy(1,31,1900), 13.9, 'months') - date.mdy(1,1,1900))], [423.00]],
1808   [[ctime.days(datesum(date.mdy(1,31,1900), 1, 'months', 'rollover') - date.mdy(1,1,1900))], [61.00]],
1809   [[ctime.days(datesum(date.mdy(1,31,1900), 2, 'months', 'rollover') - date.mdy(1,1,1900))], [89.00]],
1810   [[ctime.days(datesum(date.mdy(1,31,1900), 3.2, 'months', 'rollover') - date.mdy(1,1,1900))], [120.00]],
1811   [[ctime.days(datesum(date.mdy(1,31,1900), 4, 'months', 'rollover') - date.mdy(1,1,1900))], [150.00]],
1812   [[ctime.days(datesum(date.mdy(1,31,1900), 5, 'months', 'rollover') - date.mdy(1,1,1900))], [181.00]],
1813   [[ctime.days(datesum(date.mdy(1,31,1900), 6, 'months', 'rollover') - date.mdy(1,1,1900))], [211.00]],
1814   [[ctime.days(datesum(date.mdy(1,31,1900), 7, 'months', 'rollover') - date.mdy(1,1,1900))], [242.00]],
1815   [[ctime.days(datesum(date.mdy(1,31,1900), 8, 'months', 'rollover') - date.mdy(1,1,1900))], [273.00]],
1816   [[ctime.days(datesum(date.mdy(1,31,1900), 9, 'months', 'rollover') - date.mdy(1,1,1900))], [303.00]],
1817   [[ctime.days(datesum(date.mdy(1,31,1900), 10, 'months', 'rollover') - date.mdy(1,1,1900))], [334.00]],
1818   [[ctime.days(datesum(date.mdy(1,31,1900), 11, 'months', 'rollover') - date.mdy(1,1,1900))], [364.00]],
1819   [[ctime.days(datesum(date.mdy(1,31,1900), 12, 'months', 'rollover') - date.mdy(1,1,1900))], [395.00]],
1820   [[ctime.days(datesum(date.mdy(1,31,1900), 13, 'months', 'rollover') - date.mdy(1,1,1900))], [426.00]],
1821
1822 dnl DATESUM with leap year
1823   [[ctime.days(datesum(date.mdy(1,31,1904), 1, 'months') - date.mdy(1,1,1904))], [59.00]],
1824   [[ctime.days(datesum(date.mdy(1,31,1904), 2.5, 'months') - date.mdy(1,1,1904))], [90.00]],
1825   [[ctime.days(datesum(date.mdy(1,31,1904), 3, 'months') - date.mdy(1,1,1904))], [120.00]],
1826   [[ctime.days(datesum(date.mdy(1,31,1904), 4.9, 'months') - date.mdy(1,1,1904))], [151.00]],
1827   [[ctime.days(datesum(date.mdy(1,31,1904), 5.1, 'months') - date.mdy(1,1,1904))], [181.00]],
1828   [[ctime.days(datesum(date.mdy(1,31,1904), 6, 'months') - date.mdy(1,1,1904))], [212.00]],
1829   [[ctime.days(datesum(date.mdy(1,31,1904), 7, 'months') - date.mdy(1,1,1904))], [243.00]],
1830   [[ctime.days(datesum(date.mdy(1,31,1904), 8, 'months') - date.mdy(1,1,1904))], [273.00]],
1831   [[ctime.days(datesum(date.mdy(1,31,1904), 9, 'months') - date.mdy(1,1,1904))], [304.00]],
1832   [[ctime.days(datesum(date.mdy(1,31,1904), 10, 'months') - date.mdy(1,1,1904))], [334.00]],
1833   [[ctime.days(datesum(date.mdy(1,31,1904), 11, 'months') - date.mdy(1,1,1904))], [365.00]],
1834   [[ctime.days(datesum(date.mdy(1,31,1904), 12, 'months') - date.mdy(1,1,1904))], [396.00]],
1835   [[ctime.days(datesum(date.mdy(1,31,1904), 13, 'months') - date.mdy(1,1,1904))], [424.00]],
1836   [[ctime.days(datesum(date.mdy(1,31,1904), 1, 'months', 'rollover') - date.mdy(1,1,1904))], [61.00]],
1837   [[ctime.days(datesum(date.mdy(1,31,1904), 2, 'months', 'rollover') - date.mdy(1,1,1904))], [90.00]],
1838   [[ctime.days(datesum(date.mdy(1,31,1904), 3, 'months', 'rollover') - date.mdy(1,1,1904))], [121.00]],
1839   [[ctime.days(datesum(date.mdy(1,31,1904), 4, 'months', 'rollover') - date.mdy(1,1,1904))], [151.00]],
1840   [[ctime.days(datesum(date.mdy(1,31,1904), 5, 'months', 'rollover') - date.mdy(1,1,1904))], [182.00]],
1841   [[ctime.days(datesum(date.mdy(1,31,1904), 6, 'months', 'rollover') - date.mdy(1,1,1904))], [212.00]],
1842   [[ctime.days(datesum(date.mdy(1,31,1904), 7, 'months', 'rollover') - date.mdy(1,1,1904))], [243.00]],
1843   [[ctime.days(datesum(date.mdy(1,31,1904), 8, 'months', 'rollover') - date.mdy(1,1,1904))], [274.00]],
1844   [[ctime.days(datesum(date.mdy(1,31,1904), 9, 'months', 'rollover') - date.mdy(1,1,1904))], [304.00]],
1845   [[ctime.days(datesum(date.mdy(1,31,1904), 10, 'months', 'rollover') - date.mdy(1,1,1904))], [335.00]],
1846   [[ctime.days(datesum(date.mdy(1,31,1904), 11, 'months', 'rollover') - date.mdy(1,1,1904))], [365.00]],
1847   [[ctime.days(datesum(date.mdy(1,31,1904), 12, 'months', 'rollover') - date.mdy(1,1,1904))], [396.00]],
1848   [[ctime.days(datesum(date.mdy(1,31,1904), 13, 'months', 'rollover') - date.mdy(1,1,1904))], [427.00]],
1849
1850   [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'weeks') - date.mdy(6,10,1648))], [7.00]],
1851   [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'weeks') - date.mdy(6,30,1680))], [17.50]],
1852   [[ctime.days(datesum(date.mdy(7,24,1716), -3, 'weeks') - date.mdy(7,24,1716))], [-21.00]],
1853   [[ctime.days(datesum(date.mdy(6,19,1768), 4, 'weeks') - date.mdy(6,19,1768))], [28.00]],
1854   [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'weeks') - date.mdy(8,2,1819))], [35.00]],
1855
1856   [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'days') - date.mdy(6,10,1648))], [1.00]],
1857   [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'days') - date.mdy(6,30,1680))], [2.50]],
1858   [[ctime.days(datesum(date.mdy(7,24,1716), -3, 'days') - date.mdy(7,24,1716))], [-3.00]],
1859   [[ctime.days(datesum(date.mdy(6,19,1768), 4, 'days') - date.mdy(6,19,1768))], [4.00]],
1860   [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'days') - date.mdy(8,2,1819))], [5.00]],
1861   [[ctime.days(datesum(date.mdy(6,10,1648), 1, 'hours') - date.mdy(6,10,1648))], [0.04]],
1862   [[ctime.days(datesum(date.mdy(6,30,1680), 2.5, 'hours') - date.mdy(6,30,1680))], [0.10]],
1863   [[ctime.days(datesum(date.mdy(6,19,1768), -4, 'hours') - date.mdy(6,19,1768))], [-0.17]],
1864   [[ctime.days(datesum(date.mdy(8,2,1819), 5, 'hours') - date.mdy(8,2,1819))], [0.21]],
1865
1866 dnl DATESUM preserves time-of-day for units of days and longer.
1867   [[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]],
1868   [[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]],
1869   [[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]],
1870   [[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]])
1871
1872 CHECK_EXPR_EVAL([miscellaneous],
1873 dnl These test values are from Applied Statistics, Algorithm AS 310.
1874   [[1000 * ncdf.beta(.868,10,20,150)], [937.66]],
1875   [[1000 * ncdf.beta(.9,10,10,120)], [730.68]],
1876   [[1000 * ncdf.beta(.88,15,5,80)], [160.43]],
1877   [[1000 * ncdf.beta(.85,20,10,110)], [186.75]],
1878   [[1000 * ncdf.beta(.66,20,30,65)], [655.94]],
1879   [[1000 * ncdf.beta(.72,20,50,130)], [979.69]],
1880   [[1000 * ncdf.beta(.72,30,20,80)], [116.24]],
1881   [[1000 * ncdf.beta(.8,30,40,130)], [993.04]],
1882
1883 dnl FIXME: LAG
1884 dnl
1885   [[X], [1.00], [], [(X = 1.00)]],
1886   [[SYSMIS(1)], [false]],
1887   [[SYSMIS($SYSMIS)], [true]],
1888   [[SYSMIS(1 + $SYSMIS)], [true]],
1889
1890 dnl FIXME: out-of-range and nearly out-of-range values on dates
1891 dnl
1892 dnl Tests correctness of generic optimizations in optimize_tree().
1893   [[x + 0], [10.00], [], [(X = 10.00)]],
1894   [[x - 0], [-3.00], [], [(X = -3.00)]],
1895   [[0 + x], [5.00], [], [(X = 5.00)]],
1896   [[x * 1], [10.00], [], [(X = 10.00)]],
1897   [[1 * x], [-3.00], [], [(X = -3.00)]],
1898   [[x / 1], [5.00], [], [(X = 5.00)]],
1899   [[0 * x], [0.00], [], [(X = 10.00)]],
1900   [[x * 0], [0.00], [], [(X = -3.00)]],
1901   [[0 / x], [0.00], [], [(X = 5.00)]],
1902   [[mod(0, x)], [0.00], [], [(X = 5.00)]],
1903   [[x ** 1], [5.00], [], [(X = 5.00)]],
1904   [[x ** 2], [25.00], [], [(X = 5.00)]])
1905
1906 AT_SETUP([LAG function])
1907 AT_DATA([lag.sps], [dnl
1908 data list /W 1.
1909 begin data.
1910 1
1911 2
1912 3
1913 4
1914 5
1915 end data.
1916
1917 compute X=lag(w,1).
1918 compute Y=lag(x).
1919 compute Z=lag(w,2).
1920 list.
1921 ])
1922 AT_CHECK([pspp -o pspp.csv lag.sps])
1923 AT_CHECK([cat pspp.csv], [0], [dnl
1924 Table: Reading 1 record from INLINE.
1925 Variable,Record,Columns,Format
1926 W,1,1-  1,F1.0
1927
1928 Table: Data List
1929 W,X,Y,Z
1930 1,.  ,.  ,.  @&t@
1931 2,1.00,.  ,.  @&t@
1932 3,2.00,1.00,1.00
1933 4,3.00,2.00,2.00
1934 5,4.00,3.00,3.00
1935 ])
1936 AT_CLEANUP
1937
1938 AT_SETUP([LAG crash bug])
1939 AT_DATA([lag.sps], [dnl
1940 DATA LIST LIST /x.
1941 BEGIN DATA
1942
1943
1944 END DATA.
1945
1946 DO IF (x <> LAG(x) ).
1947         ECHO 'hello'.
1948 END IF.
1949
1950 EXECUTE.
1951 ])
1952 AT_CHECK([pspp -o pspp.csv lag.sps])
1953 AT_CHECK([cat pspp.csv], [0], [dnl
1954 Table: Reading free-form data from INLINE.
1955 Variable,Format
1956 x,F8.0
1957
1958 hello
1959 ])
1960 AT_CLEANUP
1961
1962 dnl Tests for a bug which caused UNIFORM(x) to always return zero.
1963 AT_SETUP([UNIFORM function])
1964 AT_DATA([uniform.sps], [dnl
1965 set seed=10.
1966 input program.
1967 + loop #i = 1 to 20.
1968 +    do repeat response=R1.
1969 +       compute response = uniform(10).
1970 +    end repeat.
1971 +    end case.
1972 + end loop.
1973 + end file.
1974 end input program.
1975
1976 list.
1977 ])
1978 AT_CHECK([pspp -o pspp.csv uniform.sps])
1979 AT_CHECK([cat pspp.csv], [0], [dnl
1980 Table: Data List
1981 R1
1982 7.71
1983 2.99
1984 .21
1985 4.95
1986 6.34
1987 4.43
1988 7.49
1989 8.32
1990 4.99
1991 5.83
1992 2.25
1993 .25
1994 1.98
1995 7.09
1996 7.61
1997 2.66
1998 1.69
1999 2.64
2000 .88
2001 1.50
2002 ])
2003 AT_CLEANUP
2004
2005 AT_SETUP([VALUELABEL function])
2006 AT_DATA([valuelabel.sps], [dnl
2007 DATA LIST notable /n 1 s 2(a).
2008 VALUE LABELS /n 0 'Very dissatisfied'
2009                 1 'Dissatisfied'
2010                 1.5 'Slightly Peeved'
2011                 2 'Neutral'
2012                 3 'Satisfied'
2013                 4 'Very satisfied'.
2014 VALUE LABELS /s 'a' 'Wouldn''t buy again'
2015                 'b' 'Unhappy'
2016                 'c' 'Bored'
2017                 'd' 'Satiated'
2018                 'e' 'Elated'.
2019 STRING nlabel slabel(a10).
2020 COMPUTE nlabel = VALUELABEL(n).
2021 COMPUTE slabel = VALUELABEL(s).
2022 LIST.
2023 BEGIN DATA.
2024
2025 0a
2026 1b
2027 2c
2028 3d
2029 4e
2030 5f
2031 6g
2032 END DATA.
2033 ])
2034 AT_CHECK([pspp -o pspp.csv valuelabel.sps])
2035 AT_CHECK([cat pspp.csv], [0], [dnl
2036 Table: Data List
2037 n,s,nlabel,slabel
2038 .,,,
2039 0,a,Very dissa,Wouldn't b
2040 1,b,Dissatisfi,Unhappy   @&t@
2041 2,c,Neutral   ,Bored     @&t@
2042 3,d,Satisfied ,Satiated  @&t@
2043 4,e,Very satis,Elated    @&t@
2044 5,f,,
2045 6,g,,
2046 ])
2047 AT_CLEANUP
2048
2049 AT_SETUP([variables in expressions])
2050 AT_DATA([variables.sps], [dnl
2051 DATA LIST NOTABLE/N1 TO N5 1-5.
2052 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
2053 BEGIN DATA.
2054 12345
2055 6789 
2056 END DATA.
2057
2058 COMPUTE P1=N1.
2059 COMPUTE P2=N2.
2060 COMPUTE P3=N3.
2061 COMPUTE P4=N4.
2062 COMPUTE P5=N5.
2063
2064 COMPUTE MC=NMISS(N1 TO N5).
2065 COMPUTE VC=NVALID(N1 TO N5).
2066
2067 COMPUTE S1=SYSMIS(N1).
2068 COMPUTE S2=SYSMIS(N2).
2069 COMPUTE S3=SYSMIS(N3).
2070 COMPUTE S4=SYSMIS(N4).
2071 COMPUTE S5=SYSMIS(N5).
2072
2073 COMPUTE M1=MISSING(N1).
2074 COMPUTE M2=MISSING(N2).
2075 COMPUTE M3=MISSING(N3).
2076 COMPUTE M4=MISSING(N4).
2077 COMPUTE M5=MISSING(N5).
2078
2079 COMPUTE V1=VALUE(N1).
2080 COMPUTE V2=VALUE(N2).
2081 COMPUTE V3=VALUE(N3).
2082 COMPUTE V4=VALUE(N4).
2083 COMPUTE V5=VALUE(N5).
2084
2085 FORMATS ALL (F1).
2086
2087 LIST.
2088 ])
2089 AT_CHECK([pspp -o pspp.csv variables.sps])
2090 AT_CHECK([cat pspp.csv], [0], [dnl
2091 Table: Data List
2092 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
2093 1,2,3,4,5,.,2,.,.,.,4,1,0,0,0,0,0,1,0,1,1,1,1,2,3,4,5
2094 6,7,8,9,.,6,7,8,9,.,1,4,0,0,0,0,1,0,0,0,0,1,6,7,8,9,.
2095 ])
2096 AT_CLEANUP
2097
2098 AT_SETUP([vectors in expressions])
2099 AT_DATA([vectors.sps], [dnl
2100 DATA LIST NOTABLE /N1 TO N5 1-5.
2101 MISSING VALUES N1 TO N5 (3 THRU 5, 1).
2102 BEGIN DATA.
2103 12345
2104 6789 
2105 END DATA.
2106
2107 VECTOR N=N1 TO N5.
2108 VECTOR X(5).
2109 LOOP I=1 TO 5.
2110 COMPUTE X(I)=N(I) + 1.
2111 END LOOP.
2112
2113 FORMATS ALL (F2).
2114
2115 LIST.
2116 ])
2117 AT_CHECK([pspp -o pspp.csv vectors.sps])
2118 AT_CHECK([cat pspp.csv], [0], [dnl
2119 Table: Data List
2120 N1,N2,N3,N4,N5,X1,X2,X3,X4,X5,I
2121 1,2,3,4,5,.,3,.,.,.,5
2122 6,7,8,9,.,7,8,9,10,.,5
2123 ])
2124 AT_CLEANUP