X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Flanguage%2Fdata-io%2Finpt-pgm.at;h=0e93ed654a042cc5795acfd827ea5d659b126c6f;hb=b531990f665ed1ad4c0c46d7de174f9aaff5a697;hp=f0ce9395279bd5a520c7d2bddae7648195d4a50a;hpb=5a6b751888278c8c849ab0f4adf99f1be610e610;p=pspp diff --git a/tests/language/data-io/inpt-pgm.at b/tests/language/data-io/inpt-pgm.at index f0ce939527..0e93ed654a 100644 --- a/tests/language/data-io/inpt-pgm.at +++ b/tests/language/data-io/inpt-pgm.at @@ -1,6 +1,22 @@ +dnl PSPP - a program for statistical analysis. +dnl Copyright (C) 2017 Free Software Foundation, Inc. +dnl +dnl This program is free software: you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation, either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program. If not, see . +dnl AT_BANNER([INPUT PROGRAM]) -dnl Tests for a bug which caused a crash when +dnl Tests for a bug which caused a crash when dnl reading invalid INPUT PROGRAM syntax. AT_SETUP([INPUT PROGRAM invalid syntax crash]) AT_DATA([input-program.sps], [dnl @@ -13,14 +29,10 @@ END INPUT PROGRAM. ]) AT_CHECK([pspp -O format=csv input-program.sps], [1], [dnl input-program.sps:3: error: BEGIN DATA: BEGIN DATA is not allowed inside INPUT PROGRAM. - -input-program.sps:4: error: Unknown command `123456789'. - -input-program.sps:5: error: Unknown command `END DATA'. ]) AT_CLEANUP -dnl Tests for bug #21108, a crash when +dnl Tests for bug #21108, a crash when dnl reading invalid INPUT PROGRAM syntax. AT_SETUP([INPUT PROGRAM invalid syntax crash]) AT_DATA([input-program.sps], [dnl @@ -32,6 +44,301 @@ END INPUT PROGRAM. DESCRIPTIVES x. ]) AT_CHECK([pspp -O format=csv input-program.sps], [1], [dnl -error: DESCRIPTIVES: Syntax error at end of file: expecting `BEGIN'. +error: DESCRIPTIVES: Syntax error at end of input: expecting BEGIN. +]) +AT_CLEANUP + +dnl Tests for bug #38782, an infinite loop processing an empty input program. +AT_SETUP([INPUT PROGRAM infinite loop]) +AT_DATA([input-program.sps], [dnl +INPUT PROGRAM. +STRING firstname lastname (a24) / address (a80). +END INPUT PROGRAM. +EXECUTE. +]) +AT_CHECK([pspp -O format=csv input-program.sps], [1], [dnl +input-program.sps:3: error: INPUT PROGRAM: Input program must contain DATA LIST or END FILE. + +input-program.sps:4: error: EXECUTE: EXECUTE is allowed only after the active dataset has been defined. ]) AT_CLEANUP + +dnl Tests for bug #39097, a bug when an INPUT PROGRAM used VECTOR, was +dnl followed immediately by a call to proc_execute() (here via DATASET +dnl COPY), and then the input was actually used. +AT_SETUP([INPUT PROGRAM with VECTOR and EXECUTE]) +AT_DATA([input-program.sps], [dnl +INPUT PROGRAM. +VECTOR vec(5). +LOOP #c = 1 to 10. + LOOP #v = 1 to 5. + COMPUTE vec(#v) = #v. + END LOOP. + END CASE. +END LOOP. +END FILE. +END INPUT PROGRAM. +DATASET COPY x. +LIST. +]) +AT_CHECK([pspp -O format=csv input-program.sps], [0], [dnl +Table: Data List +vec1,vec2,vec3,vec4,vec5 +1.00,2.00,3.00,4.00,5.00 +1.00,2.00,3.00,4.00,5.00 +1.00,2.00,3.00,4.00,5.00 +1.00,2.00,3.00,4.00,5.00 +1.00,2.00,3.00,4.00,5.00 +1.00,2.00,3.00,4.00,5.00 +1.00,2.00,3.00,4.00,5.00 +1.00,2.00,3.00,4.00,5.00 +1.00,2.00,3.00,4.00,5.00 +1.00,2.00,3.00,4.00,5.00 +]) +AT_CLEANUP + +AT_SETUP([INPUT PROGRAM taking shorter of two files]) +AT_DATA([input-program.sps], [dnl +INPUT PROGRAM. + DATA LIST NOTABLE FILE='a.txt'/X 1-10. + DATA LIST NOTABLE FILE='b.txt'/Y 1-10. +END INPUT PROGRAM. +LIST. +]) +AT_DATA([short.txt], [dnl +1 +2 +3 +]) +AT_DATA([long.txt], [dnl +4 +5 +6 +7 +]) + +cp short.txt a.txt +cp long.txt b.txt +AT_CHECK([pspp -O format=csv input-program.sps], 0, [dnl +Table: Data List +X,Y +1,4 +2,5 +3,6 +]) + +cp short.txt b.txt +cp long.txt a.txt +AT_CHECK([pspp -O format=csv input-program.sps], 0, [dnl +Table: Data List +X,Y +4,1 +5,2 +6,3 +]) +AT_CLEANUP + +AT_SETUP([INPUT PROGRAM taking longer of two files]) +AT_DATA([input-program.sps], [dnl +INPUT PROGRAM. + NUMERIC #A #B. + + DO IF NOT #A. + DATA LIST NOTABLE END=#A FILE='a.txt'/X 1-10. + END IF. + DO IF NOT #B. + DATA LIST NOTABLE END=#B FILE='b.txt'/Y 1-10. + END IF. + DO IF #A AND #B. + END FILE. + END IF. + END CASE. +END INPUT PROGRAM. +LIST. +]) +AT_DATA([short.txt], [dnl +1 +2 +3 +]) +AT_DATA([long.txt], [dnl +4 +5 +6 +7 +8 +]) + +cp short.txt a.txt +cp long.txt b.txt +AT_CHECK([pspp -O format=csv input-program.sps], 0, [dnl +Table: Data List +X,Y +1,4 +2,5 +3,6 +.,7 +.,8 +]) + +cp short.txt b.txt +cp long.txt a.txt +AT_CHECK([pspp -O format=csv input-program.sps], 0, [dnl +Table: Data List +X,Y +4,1 +5,2 +6,3 +7,. +8,. +]) +AT_CLEANUP + +AT_SETUP([INPUT PROGRAM concatenating two files - version 1]) +AT_DATA([input-program.sps], [dnl +INPUT PROGRAM. + NUMERIC #A #B. + + DO IF #A. + DATA LIST NOTABLE END=#B FILE='b.txt'/X 1-10. + DO IF #B. + END FILE. + ELSE. + END CASE. + END IF. + ELSE. + DATA LIST NOTABLE END=#A FILE='a.txt'/X 1-10. + DO IF NOT #A. + END CASE. + END IF. + END IF. +END INPUT PROGRAM. +LIST. +]) +AT_DATA([a.txt], [dnl +1 +2 +3 +]) +AT_DATA([b.txt], [dnl +4 +5 +6 +7 +8 +]) + +AT_CHECK([pspp -O format=csv input-program.sps], 0, [dnl +Table: Data List +X +1 +2 +3 +4 +5 +6 +7 +8 +]) +AT_CLEANUP + +AT_SETUP([INPUT PROGRAM concatenating two files - version 2]) +AT_DATA([input-program.sps], [dnl +INPUT PROGRAM. + NUMERIC #EOF. + + LOOP IF NOT #EOF. + DATA LIST NOTABLE END=#EOF FILE='a.txt'/X 1-10. + DO IF NOT #EOF. + END CASE. + END IF. + END LOOP. + + COMPUTE #EOF = 0. + LOOP IF NOT #EOF. + DATA LIST NOTABLE END=#EOF FILE='b.txt'/X 1-10. + DO IF NOT #EOF. + END CASE. + END IF. + END LOOP. + + END FILE. +END INPUT PROGRAM. +LIST. +]) +AT_DATA([a.txt], [dnl +1 +2 +3 +]) +AT_DATA([b.txt], [dnl +4 +5 +6 +7 +8 +]) + +AT_CHECK([pspp -O format=csv input-program.sps], 0, [dnl +Table: Data List +X +1 +2 +3 +4 +5 +6 +7 +8 +]) +AT_CLEANUP + +AT_SETUP([INPUT PROGRAM generating data]) +AT_DATA([input-program.sps], [dnl +INPUT PROGRAM. + LOOP #I=1 TO 10. + COMPUTE X=#I. + END CASE. + END LOOP. + END FILE. +END INPUT PROGRAM. +FORMAT X(F2). +LIST. +]) +AT_CHECK([pspp -O format=csv input-program.sps], 0, [dnl +Table: Data List +X +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +]) +AT_CLEANUP + +AT_SETUP([INPUT PROGRAM unexpected end of file]) +AT_DATA([input-program.sps], [dnl +INPUT PROGRAM. +]) +AT_CHECK([pspp input-program.sps], 1, [dnl +error: INPUT PROGRAM: Unexpected end-of-file within INPUT PROGRAM. +]) +AT_CLEANUP + + +AT_SETUP([INPUT PROGRAM no variables]) +AT_DATA([input-program.sps], [dnl +INPUT PROGRAM. +END FILE. +END INPUT PROGRAM. +]) +AT_CHECK([pspp input-program.sps], 1, [dnl +input-program.sps:3: error: INPUT PROGRAM: Input program did not create any +variables. +]) +AT_CLEANUP \ No newline at end of file