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