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 *.
280 ECHO 'fractional ranks ( including small ones for special case of SAVAGE ranks)'
282 DATA LIST LIST NOTABLE /a * w * .
305 ECHO 'test all the ties cases with low caseweight values'.
308 DATA LIST LIST NOTABLE /x * w *.
344 if [ $? -ne 0 ] ; then no_result ; fi
347 activity="run program 3"
348 $SUPERVISOR $PSPP --testing-mode -o raw-ascii $TESTFILE
349 if [ $? -ne 0 ] ; then no_result ; fi
352 activity="compare output 3"
353 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
354 diff -b $TEMPDIR/pspp.list - <<EOF
355 Simple example using defaults
356 Variables Created By RANK
367 Variables Created By RANK
370 a into RFR001(RFRACTION of a)
371 b into RFR002(RFRACTION of b)
375 +--------+-------------------------------------------+--------+
376 |Variable|Description |Position|
377 #========#===========================================#========#
378 |a |Format: F8.2 | 1|
379 +--------+-------------------------------------------+--------+
380 |b |Format: F8.2 | 2|
381 +--------+-------------------------------------------+--------+
384 +--------+-------------------------------------------+--------+
387 +--------+-------------------------------------------+--------+
390 +--------+-------------------------------------------+--------+
391 |RFR001 |RFRACTION of a | 6|
393 +--------+-------------------------------------------+--------+
394 |RFR002 |RFRACTION of b | 7|
396 +--------+-------------------------------------------+--------+
399 +--------+-------------------------------------------+--------+
400 a b count Ra Rb RFR001 RFR002 Nb
401 -------- -------- ------ --------- --------- ------ ------ ------
402 .00 24.00 10 10.000 8.000 1.0000 .8889 9
403 1.00 32.00 10 9.000 4.000 .9000 .4444 9
404 2.00 31.00 10 8.000 5.000 .8000 .5556 9
405 2.00 32.00 10 8.000 4.000 .8000 .4444 9
406 4.00 30.00 10 6.000 6.000 .6000 .6667 9
407 5.00 29.00 10 5.000 7.000 .5000 .7778 9
408 6.00 1.00 10 4.000 9.000 .4000 1.0000 9
409 7.00 43.00 10 3.000 2.000 .3000 .2222 9
410 8.00 . 10 2.000 . .2000 . .
411 9.00 45.00 10 1.000 1.000 .1000 .1111 9
412 Test variable name fallback
413 Variables Created By RANK
414 foo into RAN001(RANK of foo)
416 +--------+-------------------------------------------+--------+
417 |Variable|Description |Position|
418 #========#===========================================#========#
419 |foo |Format: F8.2 | 1|
420 +--------+-------------------------------------------+--------+
421 |rfoo |Format: F8.2 | 2|
422 +--------+-------------------------------------------+--------+
423 |ran003 |Format: F8.2 | 3|
424 +--------+-------------------------------------------+--------+
425 |RAN001 |RANK of foo | 4|
427 +--------+-------------------------------------------+--------+
428 Variables Created By RANK
429 a into Sa(SAVAGE of a)
430 a into Pa(PERCENT of a)
431 a into PRO001(PROPORTION of a using BLOM)
432 a into Na(NTILES of a)
433 a into NOR001(NORMAL of a using BLOM)
434 a b Sa Pa PRO001 Na NOR001
435 -------- -------- -------- ------ ------ --- ------
436 .00 24.00 -.9000 10.00 .0610 1 -1.547
437 1.00 32.00 -.7889 20.00 .1585 1 -1.000
438 2.00 31.00 -.5925 30.00 .2561 2 -.6554
439 2.00 32.00 -.5925 30.00 .2561 2 -.6554
440 4.00 30.00 -.3544 40.00 .3537 2 -.3755
441 5.00 29.00 -.1544 50.00 .4512 2 -.1226
442 6.00 1.00 .0956 60.00 .5488 3 .1226
443 7.00 43.00 .4290 70.00 .6463 3 .3755
444 8.00 8.00 .9290 80.00 .7439 3 .6554
445 9.00 45.00 1.9290 90.00 .8415 4 1.0005
446 Variables Created By RANK
447 a into Ra(RANK of a BY g2 g1)
448 a into Na(NORMAL of a using RANKIT BY g2 g1)
450 -------- -------- -------- --------- ------
451 1.00 .00 2.00 8.000 1.5341
452 2.00 .00 2.00 7.000 .8871
453 3.00 .00 2.00 6.000 .4888
454 4.00 .00 2.00 5.000 .1573
455 5.00 .00 2.00 4.000 -.1573
456 6.00 .00 2.00 3.000 -.4888
457 7.00 .00 2.00 2.000 -.8871
458 8.00 .00 2.00 1.000 -1.534
459 2.00 1.00 2.00 8.000 .9674
460 2.00 1.00 2.00 8.000 .9674
461 3.00 1.00 2.00 7.000 .5895
462 4.00 1.00 2.00 6.000 .2822
463 5.00 1.00 2.00 5.000 .0000
464 6.00 1.00 2.00 4.000 -.2822
465 7.00 1.00 2.00 2.000 -.9674
466 7.00 1.00 2.00 2.000 -.9674
467 8.00 1.00 2.00 1.000 -1.593
468 9.00 1.00 1.00 1.000 .0000
469 fractional ranks ( including small ones for special case of SAVAGE ranks)
470 Variables Created By RANK
471 a into Pa(PROPORTION of a using TUKEY)
472 a into Sa(SAVAGE of a)
474 -------- -------- ------ --------
475 1.00 1.50 .1285 -.8016
476 2.00 .20 .1776 -.6905
477 3.00 .10 .1986 -.6905
478 4.00 1.00 .3458 -.5305
479 5.00 1.00 .4860 -.2905
480 6.00 1.00 .6262 .0262
481 7.00 1.00 .7664 .4929
482 8.00 1.00 .9065 1.3929
483 test all the ties cases with low caseweight values
484 Variables Created By RANK
486 Variables Created By RANK
488 Variables Created By RANK
490 Variables Created By RANK
491 x into Nx(NORMAL of x using VW)
493 -------- -------- --------- --------- --------- ------
494 1.00 .10 .000 .100 1.000 -1.938
495 2.00 .10 .100 .200 2.000 -1.412
496 3.00 .10 .200 .300 3.000 -1.119
497 4.00 .20 .300 .500 4.000 -.8046
498 5.00 .10 .500 .600 5.000 -.5549
499 6.00 .10 .600 .700 6.000 -.4067
500 7.00 .10 .700 .800 7.000 -.2670
501 8.00 .10 .800 .900 8.000 -.1323
503 if [ $? -ne 0 ] ; then fail ; fi
507 # A test to make sure that variable name creation is really robust
508 activity="create file 4"
509 cat > $TESTFILE <<EOF
510 DATA LIST LIST notable /x * rx * ran001 TO ran999.
523 DELETE VAR ran001 TO ran999.
528 if [ $? -ne 0 ] ; then no_result ; fi
530 activity="run program 4"
531 $SUPERVISOR $PSPP --testing-mode -o raw-ascii -e /dev/null $TESTFILE
532 if [ $? -ne 0 ] ; then fail ; fi
535 activity="compare output 4"
536 perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.list
537 diff -b $TEMPDIR/pspp.list - << EOF
538 Variables Created By RANK
539 x into RNKRA01(RANK of x)
541 -------- -------- ---------
550 if [ $? -ne 0 ] ; then fail ; fi