3 # This program tests the RANK command.
5 TEMPDIR=/tmp/pspp-tst-$$
6 TESTFILE=$TEMPDIR/`basename $0`.sps
8 # ensure that top_srcdir and top_builddir are absolute
9 if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
10 if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
11 top_srcdir=`cd $top_srcdir; pwd`
12 top_builddir=`cd $top_builddir; pwd`
14 PSPP=$top_builddir/src/ui/terminal/pspp
16 STAT_CONFIG_PATH=$top_srcdir/config
17 export STAT_CONFIG_PATH
25 if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then
26 echo "NOT cleaning $TEMPDIR"
61 # Some tests for proper behaviour in the face of invalid input.
62 activity="create file 1"
64 DATA LIST LIST NOTABLE /x * a (a2).
80 if [ $? -ne 0 ] ; then no_result ; fi
82 # Check that it properly handles failed transformations.
83 activity="run program 1"
84 $SUPERVISOR $PSPP --testing-mode -o raw-ascii -e $TEMPDIR/err $TESTFILE
85 if [ $? -ne 1 ] ; then fail ; fi
88 perl -pi -e 's/^\s*$//g' $TEMPDIR/err
89 diff -b $TEMPDIR/err - <<EOF
90 $TEMPDIR/rank.sh.sps:14: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
92 if [ $? -ne 0 ] ; then fail ; fi
95 #Now for some general error conditions.
96 activity="create file 2"
98 DATA LIST LIST NOTABLE /x * a (a2).
109 * invalid NTILES (no parameter)
114 * invalid NTILES (not an integer)
120 * destination variable already exists
125 * Too many variables in INTO
127 /RANK INTO foo bar wiz.
129 if [ $? -ne 0 ] ; then no_result ; fi
132 activity="run program (syntax errors)"
133 $SUPERVISOR $PSPP --testing-mode -o raw-ascii -e $TEMPDIR/errs $TESTFILE
134 if [ $? -ne 1 ] ; then fail ; fi
136 activity="compare errors"
137 perl -pi -e 's/^\s*$//g' $TEMPDIR/errs
138 diff -b $TEMPDIR/errs - << EOF
139 $TEMPDIR/rank.sh.sps:15: error: RANK: Syntax error expecting \`(' at end of command.
140 $TEMPDIR/rank.sh.sps:19: error: RANK: Syntax error expecting integer at \`d'.
141 $TEMPDIR/rank.sh.sps:25: error: RANK: Variable x already exists.
142 $TEMPDIR/rank.sh.sps:30: error: RANK: Too many variables in INTO clause.
144 if [ $? -ne 0 ] ; then fail ; fi
146 # Now some real tests.
148 activity="create file 3"
149 cat > $TESTFILE <<EOF
150 DATA LIST LIST NOTABLE /x (f8).
161 ECHO 'Simple example using defaults'.
168 DATA LIST LIST NOTABLE /a * b *.
195 ECHO 'Test variable name fallback'.
198 DATA LIST LIST NOTABLE /foo * rfoo * ran003 *.
219 DATA LIST LIST NOTABLE /a * b *.
246 DATA LIST LIST NOTABLE /a * g1 g2 *.
293 ECHO 'fractional ranks ( including small ones for special case of SAVAGE ranks)'
295 DATA LIST LIST NOTABLE /a * w * .
318 ECHO 'test all the ties cases with low caseweight values'.
321 DATA LIST LIST NOTABLE /x * w *.
357 if [ $? -ne 0 ] ; then no_result ; fi
360 activity="run program 3"
361 $SUPERVISOR $PSPP --testing-mode -o raw-ascii $TESTFILE
362 if [ $? -ne 0 ] ; then no_result ; fi
365 activity="compare output 3"
366 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
367 diff -b $TEMPDIR/pspp.list - <<EOF
368 Simple example using defaults
369 Variables Created By RANK
380 Variables Created By RANK
383 a into RFR001(RFRACTION of a)
384 b into RFR002(RFRACTION of b)
388 +--------+-------------------------------------------+--------+
389 |Variable|Description |Position|
390 #========#===========================================#========#
391 |a |Format: F8.2 | 1|
392 | |Measure: Scale | |
393 | |Display Alignment: Right | |
394 | |Display Width: 8 | |
395 +--------+-------------------------------------------+--------+
396 |b |Format: F8.2 | 2|
397 | |Measure: Scale | |
398 | |Display Alignment: Right | |
399 | |Display Width: 8 | |
400 +--------+-------------------------------------------+--------+
403 | |Measure: Scale | |
404 | |Display Alignment: Right | |
405 | |Display Width: 8 | |
406 +--------+-------------------------------------------+--------+
409 | |Measure: Scale | |
410 | |Display Alignment: Right | |
411 | |Display Width: 8 | |
412 +--------+-------------------------------------------+--------+
415 | |Measure: Scale | |
416 | |Display Alignment: Right | |
417 | |Display Width: 8 | |
418 +--------+-------------------------------------------+--------+
419 |RFR001 |RFRACTION of a | 6|
421 | |Measure: Scale | |
422 | |Display Alignment: Right | |
423 | |Display Width: 8 | |
424 +--------+-------------------------------------------+--------+
425 |RFR002 |RFRACTION of b | 7|
427 | |Measure: Scale | |
428 | |Display Alignment: Right | |
429 | |Display Width: 8 | |
430 +--------+-------------------------------------------+--------+
433 | |Measure: Scale | |
434 | |Display Alignment: Right | |
435 | |Display Width: 8 | |
436 +--------+-------------------------------------------+--------+
437 a b count Ra Rb RFR001 RFR002 Nb
438 -------- -------- ------ --------- --------- ------ ------ ------
439 .00 24.00 10 10.000 8.000 1.0000 .8889 9
440 1.00 32.00 10 9.000 4.000 .9000 .4444 9
441 2.00 31.00 10 8.000 5.000 .8000 .5556 9
442 2.00 32.00 10 8.000 4.000 .8000 .4444 9
443 4.00 30.00 10 6.000 6.000 .6000 .6667 9
444 5.00 29.00 10 5.000 7.000 .5000 .7778 9
445 6.00 1.00 10 4.000 9.000 .4000 1.0000 9
446 7.00 43.00 10 3.000 2.000 .3000 .2222 9
447 8.00 . 10 2.000 . .2000 . .
448 9.00 45.00 10 1.000 1.000 .1000 .1111 9
449 Test variable name fallback
450 Variables Created By RANK
451 foo into RAN001(RANK of foo)
453 +--------+-------------------------------------------+--------+
454 |Variable|Description |Position|
455 #========#===========================================#========#
456 |foo |Format: F8.2 | 1|
457 | |Measure: Scale | |
458 | |Display Alignment: Right | |
459 | |Display Width: 8 | |
460 +--------+-------------------------------------------+--------+
461 |rfoo |Format: F8.2 | 2|
462 | |Measure: Scale | |
463 | |Display Alignment: Right | |
464 | |Display Width: 8 | |
465 +--------+-------------------------------------------+--------+
466 |ran003 |Format: F8.2 | 3|
467 | |Measure: Scale | |
468 | |Display Alignment: Right | |
469 | |Display Width: 8 | |
470 +--------+-------------------------------------------+--------+
471 |RAN001 |RANK of foo | 4|
473 | |Measure: Scale | |
474 | |Display Alignment: Right | |
475 | |Display Width: 8 | |
476 +--------+-------------------------------------------+--------+
477 Variables Created By RANK
478 a into Sa(SAVAGE of a)
479 a into Pa(PERCENT of a)
480 a into PRO001(PROPORTION of a using BLOM)
481 a into Na(NTILES of a)
482 a into NOR001(NORMAL of a using BLOM)
483 a b Sa Pa PRO001 Na NOR001
484 -------- -------- -------- ------ ------ --- ------
485 .00 24.00 -.9000 10.00 .0610 1 -1.547
486 1.00 32.00 -.7889 20.00 .1585 1 -1.000
487 2.00 31.00 -.5925 30.00 .2561 2 -.6554
488 2.00 32.00 -.5925 30.00 .2561 2 -.6554
489 4.00 30.00 -.3544 40.00 .3537 2 -.3755
490 5.00 29.00 -.1544 50.00 .4512 2 -.1226
491 6.00 1.00 .0956 60.00 .5488 3 .1226
492 7.00 43.00 .4290 70.00 .6463 3 .3755
493 8.00 8.00 .9290 80.00 .7439 3 .6554
494 9.00 45.00 1.9290 90.00 .8415 4 1.0005
495 Variables Created By RANK
496 a into Ra(RANK of a BY g2 g1)
497 a into Na(NORMAL of a using RANKIT BY g2 g1)
498 Variables Created By RANK
499 a into RAN001(RANK of a BY g2)
500 a into NOR001(NORMAL of a using RANKIT BY g2)
501 a g1 g2 Ra Na RAN001 NOR001
502 -------- -------- -------- --------- ------ --------- ------
503 2.00 1.00 2.00 8.000 .9674 4.000 .5244
504 2.00 1.00 2.00 8.000 .9674 4.000 .5244
505 3.00 1.00 2.00 7.000 .5895 3.000 .0000
506 4.00 1.00 2.00 6.000 .2822 2.000 -.5244
507 5.00 1.00 2.00 5.000 .0000 1.000 -1.282
508 1.00 .00 2.00 8.000 1.5341 8.000 1.5341
509 2.00 .00 2.00 7.000 .8871 7.000 .8871
510 3.00 .00 2.00 6.000 .4888 6.000 .4888
511 4.00 .00 2.00 5.000 .1573 5.000 .1573
512 5.00 .00 2.00 4.000 -.1573 4.000 -.1573
513 6.00 .00 2.00 3.000 -.4888 3.000 -.4888
514 7.00 .00 2.00 2.000 -.8871 2.000 -.8871
515 8.00 .00 2.00 1.000 -1.534 1.000 -1.534
516 6.00 1.00 2.00 4.000 -.2822 4.000 1.1503
517 7.00 1.00 2.00 2.000 -.9674 2.000 -.3186
518 7.00 1.00 2.00 2.000 -.9674 2.000 -.3186
519 8.00 1.00 2.00 1.000 -1.593 1.000 -1.150
520 9.00 1.00 1.00 1.000 .0000 1.000 .0000
521 fractional ranks ( including small ones for special case of SAVAGE ranks)
522 Variables Created By RANK
523 a into Pa(PROPORTION of a using TUKEY)
524 a into Sa(SAVAGE of a)
526 -------- -------- ------ --------
527 1.00 1.50 .1285 -.8016
528 2.00 .20 .1776 -.6905
529 3.00 .10 .1986 -.6905
530 4.00 1.00 .3458 -.5305
531 5.00 1.00 .4860 -.2905
532 6.00 1.00 .6262 .0262
533 7.00 1.00 .7664 .4929
534 8.00 1.00 .9065 1.3929
535 test all the ties cases with low caseweight values
536 Variables Created By RANK
538 Variables Created By RANK
540 Variables Created By RANK
542 Variables Created By RANK
543 x into Nx(NORMAL of x using VW)
545 -------- -------- --------- --------- --------- ------
546 1.00 .10 .000 .100 1.000 -1.938
547 2.00 .10 .100 .200 2.000 -1.412
548 3.00 .10 .200 .300 3.000 -1.119
549 4.00 .20 .300 .500 4.000 -.8046
550 5.00 .10 .500 .600 5.000 -.5549
551 6.00 .10 .600 .700 6.000 -.4067
552 7.00 .10 .700 .800 7.000 -.2670
553 8.00 .10 .800 .900 8.000 -.1323
555 if [ $? -ne 0 ] ; then fail ; fi
559 # A test to make sure that variable name creation is really robust
560 activity="create file 4"
561 cat > $TESTFILE <<EOF
562 DATA LIST LIST notable /x * rx * ran001 TO ran999.
575 DELETE VAR ran001 TO ran999.
580 if [ $? -ne 0 ] ; then no_result ; fi
582 activity="run program 4"
583 $SUPERVISOR $PSPP --testing-mode -o raw-ascii -e /dev/null $TESTFILE
584 if [ $? -ne 0 ] ; then fail ; fi
587 activity="compare output 4"
588 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
589 diff -b $TEMPDIR/pspp.list - << EOF
590 Variables Created By RANK
591 x into RNKRA01(RANK of x)
593 -------- -------- ---------
602 if [ $? -ne 0 ] ; then fail ; fi