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 +--------+-------------------------------------------+--------+
393 |b |Format: F8.2 | 2|
394 +--------+-------------------------------------------+--------+
397 +--------+-------------------------------------------+--------+
400 +--------+-------------------------------------------+--------+
403 +--------+-------------------------------------------+--------+
404 |RFR001 |RFRACTION of a | 6|
406 +--------+-------------------------------------------+--------+
407 |RFR002 |RFRACTION of b | 7|
409 +--------+-------------------------------------------+--------+
412 +--------+-------------------------------------------+--------+
413 a b count Ra Rb RFR001 RFR002 Nb
414 -------- -------- ------ --------- --------- ------ ------ ------
415 .00 24.00 10 10.000 8.000 1.0000 .8889 9
416 1.00 32.00 10 9.000 4.000 .9000 .4444 9
417 2.00 31.00 10 8.000 5.000 .8000 .5556 9
418 2.00 32.00 10 8.000 4.000 .8000 .4444 9
419 4.00 30.00 10 6.000 6.000 .6000 .6667 9
420 5.00 29.00 10 5.000 7.000 .5000 .7778 9
421 6.00 1.00 10 4.000 9.000 .4000 1.0000 9
422 7.00 43.00 10 3.000 2.000 .3000 .2222 9
423 8.00 . 10 2.000 . .2000 . .
424 9.00 45.00 10 1.000 1.000 .1000 .1111 9
425 Test variable name fallback
426 Variables Created By RANK
427 foo into RAN001(RANK of foo)
429 +--------+-------------------------------------------+--------+
430 |Variable|Description |Position|
431 #========#===========================================#========#
432 |foo |Format: F8.2 | 1|
433 +--------+-------------------------------------------+--------+
434 |rfoo |Format: F8.2 | 2|
435 +--------+-------------------------------------------+--------+
436 |ran003 |Format: F8.2 | 3|
437 +--------+-------------------------------------------+--------+
438 |RAN001 |RANK of foo | 4|
440 +--------+-------------------------------------------+--------+
441 Variables Created By RANK
442 a into Sa(SAVAGE of a)
443 a into Pa(PERCENT of a)
444 a into PRO001(PROPORTION of a using BLOM)
445 a into Na(NTILES of a)
446 a into NOR001(NORMAL of a using BLOM)
447 a b Sa Pa PRO001 Na NOR001
448 -------- -------- -------- ------ ------ --- ------
449 .00 24.00 -.9000 10.00 .0610 1 -1.547
450 1.00 32.00 -.7889 20.00 .1585 1 -1.000
451 2.00 31.00 -.5925 30.00 .2561 2 -.6554
452 2.00 32.00 -.5925 30.00 .2561 2 -.6554
453 4.00 30.00 -.3544 40.00 .3537 2 -.3755
454 5.00 29.00 -.1544 50.00 .4512 2 -.1226
455 6.00 1.00 .0956 60.00 .5488 3 .1226
456 7.00 43.00 .4290 70.00 .6463 3 .3755
457 8.00 8.00 .9290 80.00 .7439 3 .6554
458 9.00 45.00 1.9290 90.00 .8415 4 1.0005
459 Variables Created By RANK
460 a into Ra(RANK of a BY g2 g1)
461 a into Na(NORMAL of a using RANKIT BY g2 g1)
462 Variables Created By RANK
463 a into RAN001(RANK of a BY g2)
464 a into NOR001(NORMAL of a using RANKIT BY g2)
465 a g1 g2 Ra Na RAN001 NOR001
466 -------- -------- -------- --------- ------ --------- ------
467 2.00 1.00 2.00 8.000 .9674 4.000 .5244
468 2.00 1.00 2.00 8.000 .9674 4.000 .5244
469 3.00 1.00 2.00 7.000 .5895 3.000 .0000
470 4.00 1.00 2.00 6.000 .2822 2.000 -.5244
471 5.00 1.00 2.00 5.000 .0000 1.000 -1.282
472 1.00 .00 2.00 8.000 1.5341 8.000 1.5341
473 2.00 .00 2.00 7.000 .8871 7.000 .8871
474 3.00 .00 2.00 6.000 .4888 6.000 .4888
475 4.00 .00 2.00 5.000 .1573 5.000 .1573
476 5.00 .00 2.00 4.000 -.1573 4.000 -.1573
477 6.00 .00 2.00 3.000 -.4888 3.000 -.4888
478 7.00 .00 2.00 2.000 -.8871 2.000 -.8871
479 8.00 .00 2.00 1.000 -1.534 1.000 -1.534
480 6.00 1.00 2.00 4.000 -.2822 4.000 1.1503
481 7.00 1.00 2.00 2.000 -.9674 2.000 -.3186
482 7.00 1.00 2.00 2.000 -.9674 2.000 -.3186
483 8.00 1.00 2.00 1.000 -1.593 1.000 -1.150
484 9.00 1.00 1.00 1.000 .0000 1.000 .0000
485 fractional ranks ( including small ones for special case of SAVAGE ranks)
486 Variables Created By RANK
487 a into Pa(PROPORTION of a using TUKEY)
488 a into Sa(SAVAGE of a)
490 -------- -------- ------ --------
491 1.00 1.50 .1285 -.8016
492 2.00 .20 .1776 -.6905
493 3.00 .10 .1986 -.6905
494 4.00 1.00 .3458 -.5305
495 5.00 1.00 .4860 -.2905
496 6.00 1.00 .6262 .0262
497 7.00 1.00 .7664 .4929
498 8.00 1.00 .9065 1.3929
499 test all the ties cases with low caseweight values
500 Variables Created By RANK
502 Variables Created By RANK
504 Variables Created By RANK
506 Variables Created By RANK
507 x into Nx(NORMAL of x using VW)
509 -------- -------- --------- --------- --------- ------
510 1.00 .10 .000 .100 1.000 -1.938
511 2.00 .10 .100 .200 2.000 -1.412
512 3.00 .10 .200 .300 3.000 -1.119
513 4.00 .20 .300 .500 4.000 -.8046
514 5.00 .10 .500 .600 5.000 -.5549
515 6.00 .10 .600 .700 6.000 -.4067
516 7.00 .10 .700 .800 7.000 -.2670
517 8.00 .10 .800 .900 8.000 -.1323
519 if [ $? -ne 0 ] ; then fail ; fi
523 # A test to make sure that variable name creation is really robust
524 activity="create file 4"
525 cat > $TESTFILE <<EOF
526 DATA LIST LIST notable /x * rx * ran001 TO ran999.
539 DELETE VAR ran001 TO ran999.
544 if [ $? -ne 0 ] ; then no_result ; fi
546 activity="run program 4"
547 $SUPERVISOR $PSPP --testing-mode -o raw-ascii -e /dev/null $TESTFILE
548 if [ $? -ne 0 ] ; then fail ; fi
551 activity="compare output 4"
552 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
553 diff -b $TEMPDIR/pspp.list - << EOF
554 Variables Created By RANK
555 x into RNKRA01(RANK of x)
557 -------- -------- ---------
566 if [ $? -ne 0 ] ; then fail ; fi