3 # Tests guessing of data formats from data.
5 TEMPDIR=/tmp/pspp-tst-$$
7 # ensure that top_builddir are absolute
8 if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
9 if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
10 top_builddir=`cd $top_builddir; pwd`
11 PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
13 # ensure that top_srcdir is absolute
14 top_srcdir=`cd $top_srcdir; pwd`
16 STAT_CONFIG_PATH=$top_srcdir/config
17 export STAT_CONFIG_PATH
22 if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then
23 echo "NOT cleaning $TEMPDIR"
57 activity="create test data"
58 sed -ne 's/#.*//;/^[ ]*$/!p' > $TEMPDIR/test-list <<'EOF'
81 "1,123" => COMMA5.0 # Is , is grouping or decimal? Assume grouping.
82 "1.123" => F5.3 # Ditto.
83 "1,12" => F4.2 # Not a group of 3, so last delim must be decimal.
84 "1.12" => F4.2 # Ditto.
85 "1,1234" => F6.4 # Not a group of 3, so last delim must be decimal.
86 "1.1234" => F6.4 # Ditto.
87 "$1.234" => DOLLAR6.3 # Dollar sign means decimal has to be '.'.
88 "$1,234" => DOLLAR6.0 # Ditto.
89 "1.234%" => PCT6.3 # Percent sign means decimal has to be '.'.
90 "1,234%" => PCT6.0 # Ditto.
91 "1,123.456" => COMMA9.3 # Both '.' and ',', so last delim must be decimal.
92 "1.123,456" => DOT9.3 # Ditto.
93 "1,123,456.45" => COMMA12.2 # Ditto.
94 "1.123.456,45" => DOT12.2 # Ditto.
95 "1,123,456" => COMMA9.0 # Ditto.
96 "1.123.456" => DOT9.0 # Ditto.
98 # Date and time formats.
99 "01-OCT-1978" => DATE11
100 "01-x-1978" => EDATE9 # Roman numeral for month.
102 "1-13-99" => ADATE7 (ADATE8)
104 "13-1-99" => EDATE7 (EDATE8)
105 "32-1-1" => SDATE6 (SDATE8)
116 "1-1-01 1:2" => A10 # Minute needs at least two digits.
117 "1-1-01 1:02" => DATETIME11.0 (DATETIME17.0)
118 "1-1-01 1:02:3" => A13 # Second needs at least two digits.
119 "1-1-01 1:02:03" => DATETIME20.0
120 "1-1-01 1:02:03.1" => DATETIME20.1 (DATETIME22.1)
121 "1-1-01 +1:02:03.1" => DATETIME20.1 (DATETIME22.1)
122 "1-1-01 -1:02:03.1" => DATETIME20.1 (DATETIME22.1)
123 "1:30" => TIME4.0 (TIME5.0)
127 "-1:30:15" => TIME8.0
128 "+1:30:15" => TIME8.0
129 "-1:30:15.5" => TIME10.1
130 "+1:30:15.75" => TIME11.2
131 "1 1:30" => DTIME6.0 (DTIME8.0)
132 "+1 1:30" => DTIME7.0 (DTIME8.0)
133 "-1 1:30" => DTIME7.0 (DTIME8.0)
137 "1:00:01.03" => TIME10.2 (TIME11.2)
138 "12 1:00:01.3" => DTIME12.1 (DTIME13.1)
142 "i" => A1 # Not detected as MONTH format.
157 "september" => MONTH9
164 "wedensday" => WKDAY9
170 # Ambiguous; bias in favor of more sensible DD/MM/YY format:
174 # Several ambiguous dates can be clarified by one unambiguous example:
175 "1/1/1978" "1/2/1978" "1/3/1978" "1/13/1978" => ADATE9 # MM/DD/YY
176 "01/01/01" "02/01/01" "03/01/01" "13/01/01" => EDATE8 # DD/MM/YY
177 "01/01/01" "02/01/01" "03/01/01" "2013/01/01" => SDATE10 # YY/MM/DD
179 if [ $? -ne 0 ] ; then no_result ; fi
181 activity="create syntax file"
183 echo "SET DECIMAL=DOT." &&
184 sed < $TEMPDIR/test-list -e 's#^\(.*\)=> \(.*\)$#DEBUG FORMAT GUESSER \1.#'
185 } > $TEMPDIR/test.stat
186 if [ $? -ne 0 ] ; then no_result ; fi
188 activity="run program"
189 $SUPERVISOR $PSPP --testing-mode -o pspp.csv \
190 $TEMPDIR/test.stat >$TEMPDIR/test.err 2> $TEMPDIR/test.out
192 activity="compare output"
193 perl -pi -e 's/^\s*$//g' $TEMPDIR/test-list $TEMPDIR/test.out
194 diff -b $TEMPDIR/test-list $TEMPDIR/test.out
195 if [ $? -ne 0 ] ; then fail ; fi