3 # Tests the expression optimizer and evaluator.
5 TEMPDIR=/tmp/pspp-tst-$$
9 # ensure that top_srcdir is absolute
10 cd $top_srcdir; top_srcdir=`pwd`
12 STAT_CONFIG_PATH=$top_srcdir/config
13 export STAT_CONFIG_PATH
49 activity="create expressions list"
50 sed -ne 's/#.*//;/^[ ]*$/!p' > $TEMPDIR/expr-list <<'EOF'
58 # Test using numeric/string values as Booleans and vice-versa
63 2 OR $sysmis => sysmis
64 2 AND $sysmis => false
65 'string' AND $sysmis => error
66 0 AND $sysmis => false
68 $true + $false => 1.00
70 # Addition and subtraction.
74 7676 + $sysmis => sysmis
76 ('foo') + ('bar') => error # Arithmetic concatenation requires CONCAT.
77 'foo' + 'bar' => "foobar" # Lexical concatentation succeeds.
78 1 +3 - 2 +4 -5 => 1.00
81 'string' - 1e10 => error
86 # Multiplication and division
92 $sysmis * 15 => sysmis
100 (2**3)**4 => 4096.00 # Irritating, but compatible.
114 $false AND $false => false
115 $false AND $true => false
116 $false AND $sysmis => false
117 $true AND $false => false
118 $true AND $true => true
119 $true AND $sysmis => sysmis
120 $sysmis AND $false => false
121 $sysmis AND $true => sysmis
122 $sysmis AND $sysmis => sysmis
123 $false & $false => false
124 $false & $true => false
125 $false & $sysmis => false
126 $true & $false => false
127 $true & $true => true
128 $true & $sysmis => sysmis
129 $sysmis & $false => false
130 $sysmis & $true => sysmis
131 $sysmis & $sysmis => sysmis
134 $false OR $false => false
135 $false OR $true => true
136 $false OR $sysmis => sysmis
137 $true OR $false => true
138 $true OR $true => true
139 $true OR $sysmis => true
140 $sysmis OR $false => sysmis
141 $sysmis OR $true => true
142 $sysmis OR $sysmis => sysmis
143 $false | $false => false
144 $false | $true => true
145 $false | $sysmis => sysmis
146 $true | $false => true
147 $true | $true => true
148 $true | $sysmis => true
149 $sysmis | $false => sysmis
150 $sysmis | $true => true
151 $sysmis | $sysmis => sysmis
159 not $sysmis => sysmis
167 # Relational operators.
172 1 eq 'foobar' => error
173 5 eq 'foobar' => error
175 'quux' = 5.55 => error
176 'foobar' = 'foobar' => true
177 'quux' = 'bar' => false
178 'bar ' = 'bar' => true
179 'asdf ' = 'asdf ' => true
180 'asdfj ' = 'asdf' => false
181 1 + 2 = 3 => true # Check precedence.
182 1 >= 2 = 2 ge 3 => false # Check precedence.
183 3 ne 2 ~= 1 => false # Mathematically true.
184 3 > 2 > 1 => false # Mathematically true.
191 2 < = 2 => error # Make sure <= token can't be split.
192 1 <= 'foobar' => error
193 5 <= 'foobar' => error
195 'quux' <= 5.55 => error
196 '0123' <= '0123' => true
197 '0123' <= '0124' => true
198 '0124' le '0123' => false
199 '0123 ' <= '0123' => true
200 '0123' le '0123 ' => true
206 1 lt 'foobar' => error
207 5 lt 'foobar' => error
209 'quux' < 5.55 => error
210 '0123' lt '0123' => false
211 '0123' < '0124' => true
212 '0124' lt '0123' => false
213 '0123 ' < '0123' => false
214 '0123' lt '0123 ' => false
221 2 > = 2 => error # Make sure >= token can't be split.
222 1 >= 'foobar' => error
223 5 ge 'foobar' => error
225 'quux' >= 5.55 => error
226 '0123' ge '0123' => true
227 '0123' >= '0124' => false
228 '0124' >= '0123' => true
229 '0123 ' ge '0123' => true
230 '0123' >= '0123 ' => true
236 1 gt 'foobar' => error
237 5 gt 'foobar' => error
239 'quux' > 5.55 => error
240 '0123' gt '0123' => false
241 '0123' > '0124' => false
242 '0124' gt '0123' => true
243 '0123 ' > '0123' => false
244 '0123' gt '0123 ' => false
250 1 ~= 'foobar' => error
251 5 <> 'foobar' => error
253 'quux' ~= 5.55 => error
254 'foobar' <> 'foobar' => false
255 'quux' ne 'bar' => true
256 'bar ' <> 'bar' => false
257 'asdf ' ~= 'asdf ' => false
258 'asdfj ' ne 'asdf' => true
259 1 < > 1 => error # <> token can't be split
260 1 ~ = 1 => error # ~= token can't be split
280 mod(-55.5, 2) => -1.50
281 mod(55.5, -2) => 1.50
282 mod(-55.5, -2) => -1.50
285 mod('a', 'b') => error
288 mod10(-55.5) => -5.50
303 acos(.5) / 3.14159 * 180 => 60.00
304 arcos(.75) / 3.14159 * 180 => 41.41
305 arcos(-.5) / 3.14159 * 180 => 120.00
306 acos(-.75) / 3.14159 * 180 => 138.59
307 acos(-1) / 3.14159 * 180 => 180.00
308 arcos(1) / 3.14159 * 180 => 0.00
309 acos(-1.01) => sysmis
310 arcos(1.01) => sysmis
313 arsin(.5) / 3.14159 * 180 => 30.00
314 asin(.25) / 3.14159 * 180 => 14.48
315 arsin(-.5) / 3.14159 * 180 => -30.00
316 asin(-.25) / 3.14159 * 180 => -14.48
317 arsin(-1.01) => sysmis
321 artan(1) / 3.14159 * 180 => 45.00
322 atan(10) / 3.14159 * 180 => 84.29
323 artan(-1) / 3.14159 * 180 => -45.00
324 atan(-10) / 3.14159 * 180 => -84.29
327 cos(60 / 180 * 3.14159) => 0.50
328 cos(45 / 180 * 3.14159) => 0.71
329 cos(30 / 180 * 3.14159) => 0.87
330 cos(15 / 180 * 3.14159) => 0.97
331 cos(-60 / 180 * 3.14159) => 0.50
332 cos(-45 / 180 * 3.14159) => 0.71
333 cos(-30 / 180 * 3.14159) => 0.87
334 cos(-15 / 180 * 3.14159) => 0.97
335 cos(123 / 180 * 3.14159) => -0.54
336 cos(321 / 180 * 3.14159) => 0.78
339 sin(60 / 180 * 3.14159) => 0.87
340 sin(45 / 180 * 3.14159) => 0.71
341 sin(30 / 180 * 3.14159) => 0.50
342 sin(15 / 180 * 3.14159) => 0.26
343 sin(-60 / 180 * 3.14159) => -0.87
344 sin(-45 / 180 * 3.14159) => -0.71
345 sin(-30 / 180 * 3.14159) => -0.50
346 sin(-15 / 180 * 3.14159) => -0.26
347 sin(123 / 180 * 3.14159) => 0.84
348 sin(321 / 180 * 3.14159) => -0.63
351 tan(60 / 180 * 3.14159) => 1.73
352 tan(45 / 180 * 3.14159) => 1.00
353 tan(30 / 180 * 3.14159) => 0.58
354 tan(15 / 180 * 3.14159) => 0.27
355 tan(-60 / 180 * 3.14159) => -1.73
356 tan(-45 / 180 * 3.14159) => -1.00
357 tan(-30 / 180 * 3.14159) => -0.58
358 tan(-15 / 180 * 3.14159) => -0.27
359 tan(123 / 180 * 3.14159) => -1.54
360 tan(321 / 180 * 3.14159) => -0.81
363 # FIXME: a variable name as the argument to SYSMIS is a special case
364 # that we don't yet test. We also can't test VALUE this way.
366 missing($sysmis) => true
367 missing(asin(1.01)) => true
368 missing(asin(.5)) => false
369 missing(' ') => error
370 nmiss($sysmis) => 1.00
372 nmiss($sysmis, $sysmis, $sysmis) => 3.00
373 nmiss(1, 2, 3, 4) => 0.00
374 nmiss(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4) => 4.00
375 nvalid($sysmis) => 0.00
377 nvalid($sysmis, $sysmis, $sysmis) => 0.00
378 nvalid(1, 2, 3, 4) => 4.00
379 nvalid(1, $sysmis, $sysmis, 2, 2, $sysmis, $sysmis, 3, 4) => 5.00
381 sysmis($sysmis) => true
382 sysmis(asin(1.01)) => true
383 sysmis(asin(.5)) => false
386 any($sysmis, 1, $sysmis, 3) => sysmis
387 any(1, 1, 2, 3) => true
388 any(2, 1, 2, 3) => true
389 any(3, 1, 2, 3) => true
390 any(5, 1, 2, 3) => false
391 any(1, 1, 1, 1) => true
392 any($sysmis, 1, 1, 1) => sysmis
393 any(1, $sysmis, $sysmis, $sysmis) => sysmis
394 any($sysmis, $sysmis, $sysmis, $sysmis) => sysmis
396 any('1', 2, 3, 4) => error
397 any(1, '2', 3, 4) => error
398 any(1, 2, '3', 4) => error
399 any(1, 2, 3, '4') => error
401 any('', 'a', '', 'c') => true
402 any('a', 'a', 'b', 'c') => true
403 any('b', 'a', 'b', 'c') => true
404 any('c', 'a', 'b', 'c') => true
405 any('e', 'a', 'b', 'c') => false
406 any('a', 'a', 'a', 'a') => true
407 any('', 'a', 'a', 'a') => false
408 any('a', '', '', '') => false
410 any('a', 'a ', 'b', 'c') => true
411 any('b ', 'a', 'b', 'c') => true
412 any('c ', 'a', 'b', 'c ') => true
413 any(a, 'b', 'c', 'd') => error
414 any('a', b, 'c', 'd') => error
415 any('a', 'b', c, 'd') => error
416 any('a', 'b', 'c', d) => error
418 range(5, 1, 10) => true
419 range(1, 1, 10) => true
420 range(10, 1, 10) => true
421 range(-1, 1, 10) => false
422 range(12, 1, 10) => false
423 range($sysmis, 1, 10) => sysmis
424 range(5, 1, $sysmis) => sysmis
425 range(5, $sysmis, 10) => sysmis
426 range($sysmis, $sysmis, 10) => sysmis
427 range($sysmis, 1, $sysmis) => sysmis
428 range($sysmis, $sysmis, $sysmis) => sysmis
429 range(0, 1, 8, 10, 18) => false
430 range(1, 1, 8, 10, 18) => true
431 range(6, 1, 8, 10, 18) => true
432 range(8, 1, 8, 10, 18) => true
433 range(9, 1, 8, 10, 18) => false
434 range(10, 1, 8, 10, 18) => true
435 range(13, 1, 8, 10, 18) => true
436 range(16, 1, 8, 10, 18) => true
437 range(18, 1, 8, 10, 18) => true
438 range(20, 1, 8, 10, 18) => false
441 range(1, 2, 3, 4) => error
442 range(1, 2, 3, 4, 5, 6) => error
443 range('1', 2, 3) => error
444 range(1, '2', 3) => error
445 range(1, 2, '3') => error
447 range('123', '111', '888') => true
448 range('111', '111', '888') => true
449 range('888', '111', '888') => true
450 range('110', '111', '888') => false
451 range('889', '111', '888') => false
452 range('000', '111', '888') => false
453 range('999', '111', '888') => false
454 range('123 ', '111', '888') => true
455 range('123', '111 ', '888') => true
456 range('123', '111', '888 ') => true
457 range('123', '111 ', '888 ') => true
458 range('00', '01', '08', '10', '18') => false
459 range('01', '01', '08', '10', '18') => true
460 range('06', '01', '08', '10', '18') => true
461 range('08', '01', '08', '10', '18') => true
462 range('09', '01', '08', '10', '18') => false
463 range('10', '01', '08', '10', '18') => true
464 range('15', '01', '08', '10', '18') => true
465 range('18', '01', '08', '10', '18') => true
466 range('19', '01', '08', '10', '18') => false
468 range('1', '2') => error
469 range('1', '2', '3', '4') => error
470 range('1', '2', '3', '4', '5', '6') => error
471 range(1, '2', '3') => error
472 range('1', 2, '3') => error
473 range('1', '2', 3) => error
475 cfvar(1, 2, 3, 4, 5) => 0.53
476 cfvar(1, $sysmis, 2, 3, $sysmis, 4, 5) => 0.53
479 cfvar(1, $sysmis) => sysmis
480 cfvar(1, 2, 3, $sysmis) => 0.50
481 cfvar.4(1, 2, 3, $sysmis) => sysmis
482 cfvar.4(1, 2, 3) => error
484 cfvar('x', 1, 2, 3) => error
486 max(1, 2, 3, 4, 5) => 5.00
487 max(1, $sysmis, 2, 3, $sysmis, 4, 5) => 5.00
491 max(1, $sysmis) => 1.00
492 max(1, 2, 3, $sysmis) => 3.00
493 max.4(1, 2, 3, $sysmis) => sysmis
494 max.4(1, 2, 3) => error
496 max("2", "3", "5", "1", "4") => "5"
500 mean(1, 2, 3, 4, 5) => 3.00
501 mean(1, $sysmis, 2, 3, $sysmis, 4, 5) => 3.00
505 mean(1, $sysmis) => 1.00
506 mean(1, 2, 3, $sysmis) => 2.00
507 mean.4(1, 2, 3, $sysmis) => sysmis
508 mean.4(1, 2, 3) => error
510 min(1, 2, 3, 4, 5) => 1.00
511 min(1, $sysmis, 2, 3, $sysmis, 4, 5) => 1.00
515 min(1, $sysmis) => 1.00
516 min(1, 2, 3, $sysmis) => 1.00
517 min.4(1, 2, 3, $sysmis) => sysmis
518 min.4(1, 2, 3) => error
520 min("2", "3", "5", "1", "4") => "1"
524 sd(1, 2, 3, 4, 5) => 1.58
525 sd(1, $sysmis, 2, 3, $sysmis, 4, 5) => 1.58
528 sd(1, $sysmis) => sysmis
529 sd(1, 2, 3, $sysmis) => 1.00
530 sd.4(1, 2, 3, $sysmis) => sysmis
531 sd.4(1, 2, 3) => error
533 sd('x', 1, 2, 3) => error
535 sum(1, 2, 3, 4, 5) => 15.00
536 sum(1, $sysmis, 2, 3, $sysmis, 4, 5) => 15.00
540 sum(1, $sysmis) => 1.00
541 sum(1, 2, 3, $sysmis) => 6.00
542 sum.4(1, 2, 3, $sysmis) => sysmis
543 sum.4(1, 2, 3) => error
545 variance(1, 2, 3, 4, 5) => 2.50
546 variance(1, $sysmis, 2, 3, $sysmis, 4, 5) => 2.50
547 variance(1, 2) => 0.50
549 variance(1, $sysmis) => sysmis
550 variance(1, 2, 3, $sysmis) => 1.00
551 variance.4(1, 2, 3, $sysmis) => sysmis
552 variance.4(1, 2, 3) => error
553 variance('x') => error
554 variance('x', 1, 2, 3) => error
557 concat('a', 'b') => "ab"
558 concat('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') => "abcdefgh"
559 concat('abcdefgh', 'ijklmnopq') => "abcdefghijklmnopq"
560 concat('a', 1) => error
561 concat(1, 2) => error
563 index('abcbcde', 'bc') => 2.00
564 index('abcbcde', 'bcd') => 4.00
565 index('abcbcde', 'bcbc') => 2.00
566 index('abcdefgh', 'abc') => 1.00
567 index('abcdefgh', 'bcd') => 2.00
568 index('abcdefgh', 'cde') => 3.00
569 index('abcdefgh', 'def') => 4.00
570 index('abcdefgh', 'efg') => 5.00
571 index('abcdefgh', 'fgh') => 6.00
572 index('abcdefgh', 'fghi') => 0.00
573 index('abcdefgh', 'x') => 0.00
574 index('abcdefgh', 'abch') => 0.00
575 index('banana', 'na') => 3.00
576 index('banana', 'ana') => 2.00
577 index('', 'x') => 0.00
578 index('', '') => sysmis
579 index('abcdefgh', '') => sysmis
580 index('abcdefgh', 'alkjsfdjlskalkjfa') => 0.00
582 index('abcbcde', 'bc', 1) => 2.00
583 index('abcbcde', 'dc', 1) => 3.00
584 index('abcbcde', 'abc', 1) => 1.00
585 index('abcbcde', 'bc', 2) => 2.00
586 index('abcbcde', 'dc', 2) => 0.00
587 index('abcbcde', 'abc', 1) => 1.00
588 index('abcbcde', 'bccb', 2) => 2.00
589 index('abcbcde', 'bcbc', 2) => 2.00
590 index('abcbcde', 'bcbc', $sysmis) => sysmis
592 rindex('abcbcde', 'bc') => 4.00
593 rindex('abcbcde', 'bcd') => 4.00
594 rindex('abcbcde', 'bcbc') => 2.00
595 rindex('abcdefgh', 'abc') => 1.00
596 rindex('abcdefgh', 'bcd') => 2.00
597 rindex('abcdefgh', 'cde') => 3.00
598 rindex('abcdefgh', 'def') => 4.00
599 rindex('abcdefgh', 'efg') => 5.00
600 rindex('abcdefgh', 'fgh') => 6.00
601 rindex('abcdefgh', 'fghi') => 0.00
602 rindex('abcdefgh', 'x') => 0.00
603 rindex('abcdefgh', 'abch') => 0.00
604 rindex('banana', 'na') => 5.00
605 rindex('banana', 'ana') => 4.00
606 rindex('', 'x') => 0.00
607 rindex('', '') => sysmis
608 rindex('abcdefgh', '') => sysmis
609 rindex('abcdefgh', 'alkjsfdjlskalkjfa') => 0.00
611 rindex('abcbcde', 'bc', 1) => 5.00
612 rindex('abcbcde', 'dc', 1) => 6.00
613 rindex('abcbcde', 'abc', 1) => 5.00
614 rindex('abcbcde', 'bc', 2) => 4.00
615 rindex('abcbcde', 'dc', 2) => 0.00
616 rindex('abcbcde', 'abc', 1) => 5.00
617 rindex('abcbcde', 'bccb', 2) => 4.00
618 rindex('abcbcde', 'bcbc', 2) => 4.00
619 rindex('abcbcde', 'bcbc', $sysmis) => sysmis
620 rindex('abcbcde', 'bcbcg', 2) => sysmis
621 rindex('abcbcde', 'bcbcg', $sysmis) => sysmis
622 rindex('abcbcde', 'bcbcg', 'x') => error
623 rindex(1, 'bcdfkjl', 2) => error
624 rindex('aksj', 2, 2) => error
625 rindex(1, 2, 3) => error
626 rindex(1, 2, '3') => error
631 length('adsf ') => 8.00
632 length('abcdefghijkl') => 12.00
634 length($sysmis) => error
636 lower('ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*(089') => "abcdefghijklmnopqrstuvwxyz!@%&*(089"
640 lpad('abc', -1) => ""
641 lpad('abc', 0) => "abc"
642 lpad('abc', 2) => "abc"
643 lpad('abc', 3) => "abc"
644 lpad('abc', 10) => " abc"
645 lpad('abc', 256) => ""
646 lpad('abc', $sysmis) => ""
647 lpad('abc', -1, '*') => ""
648 lpad('abc', 0, '*') => "abc"
649 lpad('abc', 2, '*') => "abc"
650 lpad('abc', 3, '*') => "abc"
651 lpad('abc', 10, '*') => "*******abc"
652 lpad('abc', 256, '*') => ""
653 lpad('abc', $sysmis, '*') => ""
654 lpad('abc', $sysmis, '') => ""
655 lpad('abc', $sysmis, 'xy') => ""
657 lpad('abc', 'def') => error
658 lpad(0, 10, ' ') => error
659 lpad('abc', 'def', ' ') => error
660 lpad('x', 5, 0) => error
661 lpad('x', 5, 2) => error
663 number("123", f3.0) => 123.00
664 number(" 123", f3.0) => 12.00
665 number("123", f3.1) => 12.30
666 number(" ", f3.1) => sysmis
668 ltrim(' abc') => "abc"
669 rtrim(' abc ') => " abc"
670 ltrim('abc') => "abc"
671 ltrim(' abc') => " abc"
675 ltrim('***abc', '*') => "abc"
676 ltrim('abc', '*') => "abc"
677 ltrim('*abc', '*') => "abc"
679 ltrim(8, '*') => error
680 ltrim(' x', 8) => error
683 rpad('abc', -1) => ""
684 rpad('abc', 0) => "abc"
685 rpad('abc', 2) => "abc"
686 rpad('abc', 3) => "abc"
687 rpad('abc', 10) => "abc "
688 rpad('abc', 256) => ""
689 rpad('abc', $sysmis) => ""
690 rpad('abc', -1, '*') => ""
691 rpad('abc', 0, '*') => "abc"
692 rpad('abc', 2, '*') => "abc"
693 rpad('abc', 3, '*') => "abc"
694 rpad('abc', 10, '*') => "abc*******"
695 rpad('abc', 256, '*') => ""
696 rpad('abc', $sysmis, '*') => ""
697 rpad('abc', $sysmis, '') => ""
698 rpad('abc', $sysmis, 'xy') => ""
700 rpad('abc', 'def') => error
701 rpad(0, 10, ' ') => error
702 rpad('abc', 'def', ' ') => error
703 rpad('x', 5, 0) => error
704 rpad('x', 5, 2) => error
706 rtrim('abc ') => "abc"
707 rtrim(' abc ') => " abc"
708 rtrim('abc') => "abc"
709 rtrim('abc ') => "abc "
713 rtrim('abc***', '*') => "abc"
714 rtrim('abc', '*') => "abc"
715 rtrim('abc*', '*') => "abc"
717 rtrim(8, '*') => error
718 rtrim(' x', 8) => error
721 string(123.56, f5.1) => "123.6"
722 string($sysmis, f5.1) => " . "
723 string("abc", A5) => error
725 substr('abcdefgh', -5) => ""
726 substr('abcdefgh', 0) => ""
727 substr('abcdefgh', 1) => "abcdefgh"
728 substr('abcdefgh', 3) => "cdefgh"
729 substr('abcdefgh', 5) => "efgh"
730 substr('abcdefgh', 6) => "fgh"
731 substr('abcdefgh', 7) => "gh"
732 substr('abcdefgh', 8) => "h"
733 substr('abcdefgh', 9) => ""
734 substr('abcdefgh', 10) => ""
735 substr('abcdefgh', 20) => ""
736 substr('abcdefgh', $sysmis) => ""
737 substr(0, 10) => error
738 substr('abcd', 'abc') => error
739 substr(0, 'abc') => error
741 substr('abcdefgh', 0, 0) => ""
742 substr('abcdefgh', 3, 0) => ""
743 substr('abcdefgh', 5, 0) => ""
744 substr('abcdefgh', 9, 0) => ""
745 substr('abcdefgh', 0, 1) => ""
746 substr('abcdefgh', 0, 5) => ""
747 substr('abcdefgh', 1, 8) => "abcdefgh"
748 substr('abcdefgh', 1, 10) => "abcdefgh"
749 substr('abcdefgh', 1, 20) => "abcdefgh"
750 substr('abcdefgh', 3, 4) => "cdef"
751 substr('abcdefgh', 5, 2) => "ef"
752 substr('abcdefgh', 6, 1) => "f"
753 substr('abcdefgh', 7, 10) => "gh"
754 substr('abcdefgh', 8, 1) => "h"
755 substr('abcdefgh', 8, 2) => "h"
756 substr('abcdefgh', 9, 11) => ""
757 substr('abcdefgh', 10, 52) => ""
758 substr('abcdefgh', 20, 1) => ""
759 substr('abcdefgh', $sysmis, 2) => ""
760 substr('abcdefgh', 9, $sysmis) => ""
761 substr('abcdefgh', $sysmis, $sysmis) => ""
762 substr('abc', 1, 'x') => error
763 substr(0, 10, 1) => error
764 substr(0, 10, 'x') => error
765 substr('abcd', 'abc', 0) => error
766 substr('abcd', 'abc', 'j') => error
767 substr(0, 'abc', 4) => error
768 substr(0, 'abc', 'k') => error
770 upcase('abcdefghijklmnopqrstuvwxyz!@%&*(089') => "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@%&*(089"
774 time.days(1) => 86400.00
775 time.days(-1) => -86400.00
776 time.days(0.5) => 43200.00
777 time.days('x') => error
778 time.days($sysmis) => sysmis
780 time.hms(5, 6, 7) => 18367.00
781 time.hms(5, 6, 0) => 18360.00
782 time.hms(5, 0, 7) => 18007.00
783 time.hms(0, 6, 7) => 367.00
784 time.hms(-5, 6, -7) => sysmis
785 time.hms(-5, 5, -7) => sysmis
786 time.hms($sysmis, 6, 7) => sysmis
787 time.hms(5, $sysmis, 7) => sysmis
788 time.hms(5, $sysmis, 7) => sysmis
789 time.hms($sysmis, $sysmis, 7) => sysmis
790 time.hms(5, $sysmis, $sysmis) => sysmis
791 time.hms($sysmis, $sysmis, 7) => sysmis
792 time.hms($sysmis, $sysmis, $sysmis) => sysmis
794 ctime.days(106272) => 1.23
795 ctime.hours(106272) => 29.52
796 ctime.minutes(106272) => 1771.20
797 ctime.seconds(106272) => 106272.00
798 ctime.days(-106272) => -1.23
799 ctime.hours(-106272) => -29.52
800 ctime.minutes(-106272) => -1771.20
801 ctime.seconds(-106272) => -106272.00
802 ctime.days($sysmis) => sysmis
803 ctime.hours($sysmis) => sysmis
804 ctime.minutes($sysmis) => sysmis
805 ctime.seconds($sysmis) => sysmis
806 ctime.days('a') => error
807 ctime.hours('b') => error
808 ctime.minutes('c') => error
809 ctime.seconds('d') => error
811 ctime.days(date.dmy(15,10,1582)) => 1.00
812 ctime.days(date.dmy(6,9,1719)) => 50000.00
813 ctime.days(date.dmy(24,1,1583)) => 102.00
814 ctime.days(date.dmy(14,12,1585)) => 1157.00
815 ctime.days(date.dmy(26,11,1621)) => 14288.00
816 ctime.days(date.dmy(25,12,1821)) => 87365.00
817 ctime.days(date.dmy(3,12,1882)) => 109623.00
818 ctime.days(date.dmy(6,4,2002)) => 153211.00
819 ctime.days(date.dmy(19,12,1999)) => 152372.00
820 ctime.days(date.dmy(1,10,1978)) => 144623.00
821 ctime.days(date.dmy(0,10,1978)) => 144622.00
822 ctime.days(date.dmy(32,10,1978)) => sysmis
823 ctime.days(date.dmy(31,0,1978)) => 144349.00
824 ctime.days(date.dmy(31,13,1978)) => 144745.00
825 ctime.days(date.dmy($sysmis,10,1978)) => sysmis
826 ctime.days(date.dmy(31,$sysmis,1978)) => sysmis
827 ctime.days(date.dmy(31,10,$sysmis)) => sysmis
828 ctime.days(date.dmy($sysmis,$sysmis,1978)) => sysmis
829 ctime.days(date.dmy(31,$sysmis,$sysmis)) => sysmis
830 ctime.days(date.dmy($sysmis,10,$sysmis)) => sysmis
831 ctime.days(date.dmy($sysmis,$sysmis,$sysmis)) => sysmis
832 date.dmy('a',1,2) => error
833 date.dmy(1,'a',2) => error
834 date.dmy(1,2,'a') => error
836 ctime.days(date.mdy(10,15,1582)) => 1.00
837 ctime.days(date.mdy(9,6,1719)) => 50000.00
838 ctime.days(date.mdy(1,24,1583)) => 102.00
839 ctime.days(date.mdy(12,14,1585)) => 1157.00
840 ctime.days(date.mdy(11,26,1621)) => 14288.00
841 ctime.days(date.mdy(12,25,1821)) => 87365.00
842 ctime.days(date.mdy(12,3,1882)) => 109623.00
843 ctime.days(date.mdy(4,6,2002)) => 153211.00
844 ctime.days(date.mdy(12,19,1999)) => 152372.00
845 ctime.days(date.mdy(10,1,1978)) => 144623.00
846 ctime.days(date.mdy(10,0,1978)) => 144622.00
847 ctime.days(date.mdy(10,32,1978)) => sysmis
848 ctime.days(date.mdy(0,31,1978)) => 144349.00
849 ctime.days(date.mdy(13,31,1978)) => 144745.00
850 ctime.days(date.mdy(10,$sysmis,1978)) => sysmis
851 ctime.days(date.mdy($sysmis,31,1978)) => sysmis
852 ctime.days(date.mdy(10,31,$sysmis)) => sysmis
853 ctime.days(date.mdy($sysmis,$sysmis,1978)) => sysmis
854 ctime.days(date.mdy($sysmis,31,$sysmis)) => sysmis
855 ctime.days(date.mdy(10,$sysmis,$sysmis)) => sysmis
856 ctime.days(date.mdy($sysmis,$sysmis,$sysmis)) => sysmis
857 date.mdy('a',1,2) => error
858 date.mdy(1,'a',2) => error
859 date.mdy(1,2,'a') => error
861 ctime.days(date.moyr(1,2000)) => 152385.00
862 ctime.days(date.moyr(2,2000)) => 152416.00
863 ctime.days(date.moyr(3,2000)) => 152445.00
864 ctime.days(date.moyr(4,2000)) => 152476.00
865 ctime.days(date.moyr(5,2000)) => 152506.00
866 ctime.days(date.moyr(13,2000)) => 152751.00
867 ctime.days(date.moyr(14,2000)) => sysmis
868 ctime.days(date.moyr($sysmis,2000)) => sysmis
869 ctime.days(date.moyr(1,$sysmis)) => sysmis
870 ctime.days(date.moyr($sysmis,$sysmis)) => sysmis
871 date.moyr('a',2000) => error
872 date.moyr(5,'a') => error
873 date.moyr('a','b') => error
875 ctime.days(date.qyr(1,2000)) => 152385.00
876 ctime.days(date.qyr(2,2000)) => 152476.00
877 ctime.days(date.qyr(5,2000)) => 152751.00
878 ctime.days(date.qyr(6,2000)) => sysmis
879 ctime.days(date.qyr($sysmis,2000)) => sysmis
880 ctime.days(date.qyr(1,$sysmis)) => sysmis
881 ctime.days(date.qyr($sysmis,$sysmis)) => sysmis
882 date.qyr('a',2000) => error
883 date.qyr(5,'a') => error
884 date.qyr('a','b') => error
886 ctime.days(date.wkyr(1,2000)) => 152385.00
887 ctime.days(date.wkyr(15,1999)) => 152118.00
888 ctime.days(date.wkyr(36,1999)) => 152265.00
889 ctime.days(date.wkyr(54,1999)) => sysmis
890 ctime.days(date.wkyr($sysmis,1999)) => sysmis
891 ctime.days(date.wkyr(1,$sysmis)) => sysmis
892 ctime.days(date.wkyr($sysmis,$sysmis)) => sysmis
893 date.wkyr('a',1999) => error
894 date.wkyr(5,'a') => error
895 date.wkyr('a','b') => error
897 ctime.days(date.yrday(2000,1)) => 152385.00
898 ctime.days(date.yrday(2000,100)) => 152484.00
899 ctime.days(date.yrday(2000,253)) => 152637.00
900 ctime.days(date.yrday(2000,500)) => 152884.00
901 ctime.days(date.yrday(2000,-100)) => 152284.00
902 ctime.days(date.yrday(1999,$sysmis)) => sysmis
903 ctime.days(date.yrday($sysmis,1)) => sysmis
904 ctime.days(date.yrday($sysmis,$sysmis)) => sysmis
905 date.yrday(1999,'a') => error
906 date.yrday('a',5) => error
907 date.yrday('a','b') => error
909 # FIXME: XDATE.* functions
913 if [ $? -ne 0 ] ; then no_result ; fi
915 activity="create optimizing input"
916 echo 'set mxwarn 1000.
917 set mxerr 1000.' > $TEMPDIR/expr-opt.stat
918 sed < $TEMPDIR/expr-list >> $TEMPDIR/expr-opt.stat \
919 -e 's#^\(.*\) => \(.*\)$#DEBUG EVALUATE/\1.#'
920 if [ $? -ne 0 ] ; then no_result ; fi
922 activity="run optimizing program"
923 $SUPERVISOR $here/../src/pspp --testing-mode -o raw-ascii \
924 $TEMPDIR/expr-opt.stat >$TEMPDIR/expr-opt.err 2> $TEMPDIR/expr-opt.out
926 activity="compare optimizing output"
927 diff -B -b $TEMPDIR/expr-list $TEMPDIR/expr-opt.out
928 if [ $? -ne 0 ] ; then fail ; fi
930 activity="create non-optimizing input"
931 echo 'set mxwarn 1000.
932 set mxerr 1000.' > $TEMPDIR/expr-noopt.stat
933 sed < $TEMPDIR/expr-list >> $TEMPDIR/expr-noopt.stat \
934 -e 's#^\(.*\) => \(.*\)$#DEBUG EVALUATE NOOPTIMIZE/\1.#'
935 if [ $? -ne 0 ] ; then no_result ; fi
937 activity="run non-optimizing program"
938 $SUPERVISOR $here/../src/pspp --testing-mode -o raw-ascii \
939 $TEMPDIR/expr-noopt.stat >$TEMPDIR/expr-noopt.err 2> $TEMPDIR/expr-noopt.out
941 activity="compare non-optimizing output"
942 diff -B -b $TEMPDIR/expr-list $TEMPDIR/expr-noopt.out
943 if [ $? -ne 0 ] ; then fail ; fi