VECTOR: Improve error messages and coding style.
[pspp] / tests / language / dictionary / vector.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
3 dnl
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 dnl
17 AT_BANNER([VECTOR])
18
19 AT_SETUP([VECTOR short form])
20 AT_DATA([vector.sps], [dnl
21 data list notable/x 1.
22 vector v(4).
23 display vector.
24 ])
25 AT_CHECK([pspp -o pspp.csv vector.sps])
26 AT_CHECK([cat pspp.csv], [0], [dnl
27 Table: Vectors
28 Vector and Position,,Variable,Print Format
29 v,1,v1,F8.2
30 ,2,v2,F8.2
31 ,3,v3,F8.2
32 ,4,v4,F8.2
33 ])
34 AT_CLEANUP
35
36 AT_SETUP([VECTOR short form with format specification])
37 AT_DATA([vector.sps], [dnl
38 data list notable/x 1.
39 vector #vec(4, comma10.2)
40       /#svec(3, a8).
41 display vector.
42 ])
43 AT_CHECK([pspp -o pspp.csv vector.sps])
44 AT_CHECK([cat pspp.csv], [0], [dnl
45 Table: Vectors
46 Vector and Position,,Variable,Print Format
47 #vec,1,#vec1,COMMA10.2
48 ,2,#vec2,COMMA10.2
49 ,3,#vec3,COMMA10.2
50 ,4,#vec4,COMMA10.2
51 #svec,1,#svec1,A8
52 ,2,#svec2,A8
53 ,3,#svec3,A8
54 ])
55 AT_CLEANUP
56
57 AT_SETUP([VECTOR short form in INPUT PROGRAM])
58 AT_DATA([vector.sps], [dnl
59 input program.
60 vector x(5).
61 data list notable/x5 x2 x3 x1 x4 1-5.
62 end input program.
63 display vector.
64 ])
65 AT_CHECK([pspp -o pspp.csv vector.sps])
66 AT_CHECK([cat pspp.csv], [0], [dnl
67 Table: Vectors
68 Vector and Position,,Variable,Print Format
69 x,1,x1,F8.2
70 ,2,x2,F8.2
71 ,3,x3,F8.2
72 ,4,x4,F8.2
73 ,5,x5,F8.2
74 ])
75 AT_CLEANUP
76
77 AT_SETUP([VECTOR long form])
78 AT_DATA([vector.sps], [dnl
79 data list notable/u w x y z 1-5.
80 vector a=u to y.
81 vector b=x to z.
82 vector c=all.
83 display vector.
84 ])
85 AT_CHECK([pspp -o pspp.csv vector.sps])
86 AT_CHECK([cat pspp.csv], [0], [dnl
87 Table: Vectors
88 Vector and Position,,Variable,Print Format
89 a,1,u,F1.0
90 ,2,w,F1.0
91 ,3,x,F1.0
92 ,4,y,F1.0
93 b,1,x,F1.0
94 ,2,y,F1.0
95 ,3,z,F1.0
96 c,1,u,F1.0
97 ,2,w,F1.0
98 ,3,x,F1.0
99 ,4,y,F1.0
100 ,5,z,F1.0
101 ])
102 AT_CLEANUP
103
104 AT_SETUP([VECTOR syntax errors])
105 AT_DATA([vector.sps], [dnl
106 DATA LIST LIST NOTABLE/x y z.
107 VECTOR **.
108 VECTOR aslkdfjaklsdjfklasdjfklasjdfklasjdfkajsdlkfajsdkfjaksdjfaklsdkasdjfklasdjfklasjdfkldkl.
109 VECTOR dup=x y z.
110 VECTOR dup.
111 VECTOR v v.
112 VECTOR u v=x y z.
113 VECTOR v(1, 2).
114 VECTOR v(0).
115 VECTOR v(F8.2, F8.2).
116 VECTOR v(asdf).
117 VECTOR v(**).
118 VECTOR v(F8.2).
119 VECTOR xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(5).
120 VECTOR v **.
121 ])
122 AT_DATA([insert.sps], [dnl
123 INSERT FILE='vector.sps' ERROR=IGNORE.
124 ])
125 AT_CHECK([pspp --testing-mode -O format=csv insert.sps], [1], [dnl
126 "vector.sps:2.8-2.9: error: VECTOR: Syntax error expecting identifier.
127     2 | VECTOR **.
128       |        ^~"
129
130 "vector.sps:3.8-3.93: error: VECTOR: Identifier `aslkdfjaklsdjfklasdjfklasjdfklasjdfkajsdlkfajsdkfjaksdjfaklsdkasdjfklasdjfklasjdfkldkl' exceeds 64-byte limit.
131     3 | VECTOR aslkdfjaklsdjfklasdjfklasjdfklasjdfkajsdlkfajsdkfjaksdjfaklsdkasdjfklasdjfklasjdfkldkl.
132       |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
133
134 "vector.sps:5.8-5.10: error: VECTOR: A vector named dup already exists.
135     5 | VECTOR dup.
136       |        ^~~"
137
138 "vector.sps:6.8-6.10: error: VECTOR: Vector name v is given twice.
139     6 | VECTOR v v.
140       |        ^~~"
141
142 "vector.sps:7.8-7.11: error: VECTOR: Only a single vector name may be specified when a list of variables is given.
143     7 | VECTOR u v=x y z.
144       |        ^~~~"
145
146 "vector.sps:8.9-8.13: error: VECTOR: Vector length may only be specified once.
147     8 | VECTOR v(1, 2).
148       |         ^~~~~"
149
150 "vector.sps:9.10: error: VECTOR: Syntax error expecting positive integer.
151     9 | VECTOR v(0).
152       |          ^"
153
154 "vector.sps:10.9-10.19: error: VECTOR: Only one format may be specified.
155    10 | VECTOR v(F8.2, F8.2).
156       |         ^~~~~~~~~~~"
157
158 "vector.sps:11.10-11.13: error: VECTOR: Unknown format type `asdf'.
159    11 | VECTOR v(asdf).
160       |          ^~~~"
161
162 "vector.sps:12.10-12.11: error: VECTOR: Syntax error expecting vector length or format.
163    12 | VECTOR v(**).
164       |          ^~"
165
166 "vector.sps:13.9-13.14: error: VECTOR: Vector length is required.
167    13 | VECTOR v(F8.2).
168       |         ^~~~~~"
169
170 "vector.sps:14.8-14.74: error: VECTOR: Identifier `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1' exceeds 64-byte limit.
171    14 | VECTOR xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(5).
172       |        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
173
174 "vector.sps:15.10-15.11: error: VECTOR: Syntax error expecting `=' or `@{:@'.
175    15 | VECTOR v **.
176       |          ^~"
177 ])
178 AT_CLEANUP