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