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