Merge commit 'origin/stable'
[pspp-builds.git] / tests / command / match-files.sh
index 77fb3ce5c536fc2cd26ef0507f6ab74d35e0bf32..9726b065c7da65d9bf09a13e188da46d062d8ad8 100755 (executable)
@@ -6,18 +6,27 @@ TEMPDIR=/tmp/pspp-tst-$$
 TESTFILE=$TEMPDIR/match-files.pspp
 
 
-here=`pwd`;
+# ensure that top_builddir  are absolute
+if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
+if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
+top_builddir=`cd $top_builddir; pwd`
+PSPP=$top_builddir/src/ui/terminal/pspp
 
 # ensure that top_srcdir is absolute
-cd $top_srcdir; top_srcdir=`pwd`
+top_srcdir=`cd $top_srcdir; pwd`
 
 
-export STAT_CONFIG_PATH=$top_srcdir/config
+STAT_CONFIG_PATH=$top_srcdir/config
+export STAT_CONFIG_PATH
 
 cleanup()
 {
+     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
+       echo "NOT cleaning $TEMPDIR" 
+       return ; 
+     fi
+    cd /
     rm -rf $TEMPDIR
-    :
 }
 
 
@@ -50,19 +59,19 @@ cd $TEMPDIR
 
 activity="data create"
 cat > a.data <<EOF
-0aA
 1aB
-1aC
-2aD
+8aM
 3aE
-4aF
 5aG
+0aA
 5aH
 6aI
 7aJ
+2aD
 7aK
+1aC
 7aL
-8aM
+4aF
 EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 cat > b.data <<EOF
@@ -76,40 +85,40 @@ EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 
 cat > ff.out <<EOF
-A B C D INA INB
-- - - - --- ---
-0 a A     1   0
-1 a B N   1   1
-1 a C     1   0
-2 a D     1   0
-3 a E O   1   1
-4 a F P   1   1
-5 a G     1   0
-5 a H     1   0
-6 a I Q   1   1
-7 a J R   1   1
-7 a K     1   0
-7 a L     1   0
-8 a M     1   0
-9 b   S   0   1
+A B C D INA INB FIRST LAST
+- - - - --- --- ----- ----
+0 a A     1   0     1    1
+1 a B N   1   1     1    0
+1 a C     1   0     0    1
+2 a D     1   0     1    1
+3 a E O   1   1     1    1
+4 a F P   1   1     1    1
+5 a G     1   0     1    0
+5 a H     1   0     0    1
+6 a I Q   1   1     1    1
+7 a J R   1   1     1    0
+7 a K     1   0     0    0
+7 a L     1   0     0    1
+8 a M     1   0     1    1
+9 b   S   0   1     1    1
 EOF
 
 cat > ft.out <<EOF
-A B C D INA INB
-- - - - --- ---
-0 a A     1   0
-1 a B N   1   1
-1 a C N   1   1
-2 a D     1   0
-3 a E O   1   1
-4 a F P   1   1
-5 a G     1   0
-5 a H     1   0
-6 a I Q   1   1
-7 a J R   1   1
-7 a K R   1   1
-7 a L R   1   1
-8 a M     1   0
+A B C D INA INB FIRST LAST
+- - - - --- --- ----- ----
+0 a A     1   0     1    1
+1 a B N   1   1     1    0
+1 a C N   1   1     0    1
+2 a D     1   0     1    1
+3 a E O   1   1     1    1
+4 a F P   1   1     1    1
+5 a G     1   0     1    0
+5 a H     1   0     0    1
+6 a I Q   1   1     1    1
+7 a J R   1   1     1    0
+7 a K R   1   1     0    0
+7 a L R   1   1     0    1
+8 a M     1   0     1    1
 EOF
 
 # Test nonparallel match and table lookup.
@@ -134,21 +143,27 @@ $dla
 $sa
 $dlb
 $sb
-match files $type1='a.sys' /in=INA /$type2='b.sys' /in=INB /rename c=D /by a.
+match files $type1='a.sys' /in=INA /sort
+           /$type2='b.sys' /in=INB /rename c=D
+           /by a /first=FIRST /last=LAST.
 EOF
            elif [ $sources = sa ]; then
                cat <<EOF
 $dla
 $sa
 $dlb
-match files $type1='a.sys' /in=INA /$type2=* /in=INB /rename c=D /by a.
+match files $type1='a.sys' /in=INA /sort
+           /$type2=* /in=INB /rename c=D
+           /by a /first=FIRST /last=LAST.
 EOF
            elif [ $sources = as ]; then
                cat <<EOF
 $dlb
 $sb
 $dla
-match files $type1=* /in=INA /$type2='b.sys' /in=INB /rename c=D /by a.
+match files $type1=* /in=INA /sort
+           /$type2='b.sys' /in=INB /rename c=D
+           /by a /first=FIRST /last=LAST.
 EOF
            else
                activity="internal error"
@@ -159,11 +174,13 @@ EOF
        if [ $? -ne 0 ] ; then no_result ; fi
 
        activity="run $name.pspp"
-       $SUPERVISOR $here/../src/pspp -o raw-ascii $name.pspp >/dev/null 2>&1
+       $SUPERVISOR $PSPP --testing-mode -e /dev/null $name.pspp 
        if [ $? -ne 0 ] ; then no_result ; fi
 
        activity="check $name output"
-       diff -b -w -B pspp.list $types.out
+       perl -pi -e 's/^\s*$//g' pspp.list
+       perl -pi -e 's/^\s*$//g' $types.out
+       diff -b -w pspp.list $types.out
        if [ $? -ne 0 ] ; then fail ; fi
     done
 done
@@ -182,27 +199,68 @@ EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="run $name.pspp"
-$SUPERVISOR $here/../src/pspp -o raw-ascii $name.pspp >/dev/null 2>&1
+$SUPERVISOR $PSPP --testing-mode -e /dev/null $name.pspp 
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="check $name output"
-diff -b -w -B - pspp.list <<EOF
+perl -pi -e 's/^\s*$//g' pspp.list
+diff -b -w - pspp.list <<EOF
 A B C D E F
 - - - - - -
-0 a A 1 b N
-1 a B 3 b O
-1 a C 4 b P
-2 a D 6 b Q
-3 a E 7 b R
-4 a F 9 b S
-5 a G
-5 a H
+1 a B 1 b N
+8 a M 3 b O
+3 a E 4 b P
+5 a G 6 b Q
+0 a A 7 b R
+5 a H 9 b S
 6 a I
 7 a J
+2 a D
 7 a K
+1 a C
 7 a L
-8 a M
+4 a F
+EOF
+if [ $? -ne 0 ] ; then fail ; fi
+
+# Test bug handling TABLE from active file found by John Darrington.
+name="active-table"
+activity="create $name.pspp"
+cat > $name.pspp <<EOF
+DATA LIST LIST NOTABLE /x * y *.
+BEGIN DATA
+3 30
+2 21
+1 22
+END DATA.
+
+SAVE OUTFILE='bar.sav'.
+
+DATA LIST LIST NOTABLE /x * z *.
+BEGIN DATA
+3 8
+2 9
+END DATA.
+
+MATCH FILES TABLE=* /FILE='bar.sav' /BY=x.
+LIST.
+EOF
+if [ $? -ne 0 ] ; then no_result ; fi
+
+activity="run $name.pspp"
+$SUPERVISOR $PSPP --testing-mode -e /dev/null $name.pspp 
+if [ $? -ne 0 ] ; then no_result ; fi
+
+activity="check $name output"
+perl -pi -e 's/^\s*$//g' pspp.list
+diff -b -w - pspp.list <<EOF | perl -e 's/^\s*$//g'
+        x        z        y
+ -------- -------- --------
+     3.00     8.00    30.00 
+     2.00      .      21.00 
+     1.00      .      22.00 
 EOF
 if [ $? -ne 0 ] ; then fail ; fi
 
+
 pass;