@@ -27,6 +27,7 @@ namespace analysis {
27
27
namespace {
28
28
29
29
using verible::LintTestCase;
30
+ using verible::RunConfiguredLintTestCases;
30
31
using verible::RunLintTestCases;
31
32
32
33
// Tests that ProperParameterDeclarationRule does not report a violation when
@@ -41,20 +42,28 @@ TEST(ProperParameterDeclarationRuleTest, BasicTests) {
41
42
RunLintTestCases<VerilogAnalyzer, ProperParameterDeclarationRule>(kTestCases );
42
43
}
43
44
44
- // Tests that the expected number of parameter usage violations are found.
45
- TEST (ProperParameterDeclarationRuleTest, ParameterTests ) {
45
+ // Tests rejection of package parameters and allow package localparams
46
+ TEST (ProperParameterDeclarationRuleTest, RejectPackageParameters ) {
46
47
const std::initializer_list<LintTestCase> kTestCases = {
47
48
{" parameter int Foo = 1;" },
48
- {" package foo; parameter int Bar = 1; endpackage" },
49
- {" package foo; parameter int Bar = 1; parameter int Bar2 = 2; "
49
+ {" package foo; " ,
50
+ {TK_parameter, " parameter" },
51
+ " int Bar = 1; endpackage" },
52
+ {" package foo; " ,
53
+ {TK_parameter, " parameter" },
54
+ " int Bar = 1; " ,
55
+ {TK_parameter, " parameter" },
56
+ " int Bar2 = 2; "
50
57
" endpackage" },
51
58
{" module foo #(parameter int Bar = 1); endmodule" },
52
59
{" module foo #(int Bar = 1); endmodule" },
53
60
{" class foo #(parameter int Bar = 1); endclass" },
54
61
{" module foo #(parameter type Foo); endmodule" },
55
62
{" module foo; " , {TK_parameter, " parameter" }, " int Bar = 1; endmodule" },
56
63
{" class foo; " , {TK_parameter, " parameter" }, " int Bar = 1; endclass" },
57
- {" package foo; class bar; endclass parameter int HelloWorld = 1; "
64
+ {" package foo; class bar; endclass " ,
65
+ {TK_parameter, " parameter" },
66
+ " int HelloWorld = 1; "
58
67
" endpackage" },
59
68
{" package foo; class bar; " ,
60
69
{TK_parameter, " parameter" },
@@ -69,8 +78,20 @@ TEST(ProperParameterDeclarationRuleTest, ParameterTests) {
69
78
{" module foo #(parameter type Bar); " ,
70
79
{TK_parameter, " parameter" },
71
80
" type Bar2; endmodule" },
81
+ {" module foo #(parameter type Bar);"
82
+ " module innerFoo #("
83
+ " parameter type innerBar," ,
84
+ " localparam int j = 2)();" ,
85
+ {TK_parameter, " parameter" },
86
+ " int i = 1;"
87
+ " localparam int j = 2;"
88
+ " endmodule "
89
+ " endmodule" },
72
90
};
73
- RunLintTestCases<VerilogAnalyzer, ProperParameterDeclarationRule>(kTestCases );
91
+
92
+ RunConfiguredLintTestCases<VerilogAnalyzer, ProperParameterDeclarationRule>(
93
+ kTestCases ,
94
+ " package_allow_parameter:false;package_allow_localparam:true" );
74
95
}
75
96
76
97
// Tests that the expected number of localparam usage violations are found.
@@ -83,18 +104,17 @@ TEST(ProperParameterDeclarationRuleTest, LocalParamTests) {
83
104
{" module foo #(localparam int Bar = 1); endmodule" },
84
105
{" module foo #(localparam type Bar); endmodule" },
85
106
{" class foo #(localparam int Bar = 1); endclass" },
86
- {{TK_localparam, " localparam" }, " int Bar = 1;" },
87
- {" package foo; " ,
88
- {TK_localparam, " localparam" },
89
- " int Bar = 1; endpackage" },
90
- {" package foo; class bar; endclass " ,
91
- {TK_localparam, " localparam" },
92
- " int HelloWorld = 1; "
107
+ {{TK_localparam, " localparam" },
108
+ " int Bar = 1;" }, // localparam defined outside a module or package
109
+ {" package foo; localparam int Bar = 1; endpackage" },
110
+ {" package foo; class bar; endclass localparam int HelloWorld = 1; "
93
111
" endpackage" },
94
112
{" package foo; class bar; localparam int HelloWorld = 1; endclass "
95
113
" endpackage" },
96
114
};
97
- RunLintTestCases<VerilogAnalyzer, ProperParameterDeclarationRule>(kTestCases );
115
+ RunConfiguredLintTestCases<VerilogAnalyzer, ProperParameterDeclarationRule>(
116
+ kTestCases ,
117
+ " package_allow_parameter:false;package_allow_localparam:true" );
98
118
}
99
119
100
120
// Tests that the expected number of localparam and parameter usage violations
@@ -104,9 +124,10 @@ TEST(ProperParameterDeclarationRuleTest, CombinationParametersTest) {
104
124
{" parameter int Foo = 1; " ,
105
125
{TK_localparam, " localparam" },
106
126
" int Bar = 1;" },
107
- {" package foo; parameter int Bar = 1; " ,
108
- {TK_localparam, " localparam" },
109
- " int Bar2 = 2; "
127
+ {" package foo; " ,
128
+ {TK_parameter, " parameter" },
129
+ " int Bar = 1; " ,
130
+ " localparam int Bar2 = 2; "
110
131
" endpackage" },
111
132
{" module foo #(parameter int Bar = 1); localparam int Bar2 = 2; "
112
133
" endmodule" },
@@ -121,17 +142,85 @@ TEST(ProperParameterDeclarationRuleTest, CombinationParametersTest) {
121
142
{" class foo; " ,
122
143
{TK_parameter, " parameter" },
123
144
" int Bar = 1; localparam int Bar2 = 2; endclass" },
124
- {" package foo; class bar; localparam int Bar2 = 2; endclass parameter "
125
- " int HelloWorld = 1; "
145
+ {" package foo; class bar; localparam int Bar2 = 2; endclass " ,
146
+ {TK_parameter, " parameter" },
147
+ " int HelloWorld = 1; "
126
148
" endpackage" },
127
149
{" package foo; " ,
128
- {TK_localparam, " localparam" },
129
- " int Bar2 = 2; class bar; endclass parameter "
130
- " int HelloWorld = 1; "
150
+ " localparam" ,
151
+ " int Bar2 = 2; class bar; endclass " ,
152
+ {TK_parameter, " parameter" },
153
+ " int HelloWorld = 1; "
131
154
" endpackage" },
132
155
{" parameter int Foo = 1; module bar; localparam int Bar2 = 2; "
133
156
" endmodule" },
134
157
};
158
+ RunConfiguredLintTestCases<VerilogAnalyzer, ProperParameterDeclarationRule>(
159
+ kTestCases ,
160
+ " package_allow_parameter:false;package_allow_localparam:true" );
161
+ }
162
+
163
+ // package parameters allowed, package localparam's are rejected
164
+ TEST (ProperParameterDeclarationRuleTest, AllowPackageParameters) {
165
+ const std::initializer_list<LintTestCase> kTestCases = {
166
+ {" parameter int Foo = 1;" },
167
+ {" package foo; parameter int Bar = 1; endpackage" },
168
+ {" package foo; " ,
169
+ {TK_localparam, " localparam" },
170
+ " int Bar = 1; endpackage" },
171
+ {" package foo; parameter int Bar = 1; "
172
+ " parameter int Bar2 = 2; "
173
+ " endpackage" },
174
+ {" module foo #(parameter int Bar = 1); endmodule" },
175
+ {" module foo #(int Bar = 1); endmodule" },
176
+ {" class foo #(parameter int Bar = 1); endclass" },
177
+ {" module foo #(parameter type Foo); endmodule" },
178
+ {" module foo; " , {TK_parameter, " parameter" }, " int Bar = 1; endmodule" },
179
+ {" class foo; " , {TK_parameter, " parameter" }, " int Bar = 1; endclass" },
180
+ {" package foo; class bar; endclass " ,
181
+ " parameter int HelloWorld = 1; "
182
+ " endpackage" },
183
+ {" package foo; class bar; " ,
184
+ {TK_parameter, " parameter" },
185
+ " int HelloWorld = 1; endclass "
186
+ " endpackage" },
187
+ {" module foo #(parameter int Bar = 1); " ,
188
+ {TK_parameter, " parameter" },
189
+ " int HelloWorld = 1; "
190
+ " endmodule" },
191
+ {" module foo #(parameter type Foo, parameter int Bar = 1); "
192
+ " endmodule" },
193
+ {" module foo #(parameter type Bar); " ,
194
+ {TK_parameter, " parameter" },
195
+ " type Bar2; endmodule" },
196
+ {" module foo #(parameter type Bar);"
197
+ " module innerFoo #("
198
+ " parameter type innerBar," ,
199
+ " localparam int j = 2)();" ,
200
+ {TK_parameter, " parameter" },
201
+ " int i = 1;"
202
+ " localparam int j = 2;"
203
+ " endmodule "
204
+ " endmodule" },
205
+ {" module foo; localparam int Bar = 1; endmodule" },
206
+ {" class foo; localparam int Bar = 1; endclass" },
207
+ {" module foo; localparam int Bar = 1; localparam int Bar2 = 2; "
208
+ " endmodule" },
209
+ {" module foo #(localparam int Bar = 1); endmodule" },
210
+ {" module foo #(localparam type Bar); endmodule" },
211
+ {" class foo #(localparam int Bar = 1); endclass" },
212
+ {{TK_localparam, " localparam" }, " int Bar = 1;" },
213
+ {" package foo; " ,
214
+ {TK_localparam, " localparam" },
215
+ " int Bar = 1; endpackage" },
216
+ {" package foo; class bar; endclass " ,
217
+ {TK_localparam, " localparam" },
218
+ " int HelloWorld = 1; "
219
+ " endpackage" },
220
+ {" package foo; class bar; localparam int HelloWorld = 1; endclass "
221
+ " endpackage" },
222
+ };
223
+
135
224
RunLintTestCases<VerilogAnalyzer, ProperParameterDeclarationRule>(kTestCases );
136
225
}
137
226
0 commit comments