1 // Copyright 2017-2019 VMware, Inc.
2 // SPDX-License-Identifier: BSD-2-Clause
3 //
4 // The BSD-2 license (the License) set forth below applies to all parts of the
5 // Cascade project.  You may not use this file except in compliance with the
6 // License.
7 //
8 // BSD-2 License
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are met:
12 //
13 // 1. Redistributions of source code must retain the above copyright notice, this
14 // list of conditions and the following disclaimer.
15 //
16 // 2. Redistributions in binary form must reproduce the above copyright notice,
17 // this list of conditions and the following disclaimer in the documentation
18 // and/or other materials provided with the distribution.
19 //
20 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND
21 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 #include "gtest/gtest.h"
32 #include "test/harness.h"
33 
34 using namespace cascade;
35 
TEST(simple,arithmetic_divide)36 TEST(simple, arithmetic_divide) {
37   run_code("regression/minimal","share/cascade/test/regression/simple/arithmetic_divide.v", "2");
38 }
TEST(simple,arithmetic_minus)39 TEST(simple, arithmetic_minus) {
40   run_code("regression/minimal","share/cascade/test/regression/simple/arithmetic_minus.v", "0");
41 }
TEST(simple,arithmetic_mod)42 TEST(simple, arithmetic_mod) {
43   run_code("regression/minimal","share/cascade/test/regression/simple/arithmetic_mod.v", "3");
44 }
TEST(simple,arithmetic_multiply)45 TEST(simple, arithmetic_multiply) {
46   run_code("regression/minimal","share/cascade/test/regression/simple/arithmetic_multiply.v", "56");
47 }
TEST(simple,arithmetic_plus)48 TEST(simple, arithmetic_plus) {
49   run_code("regression/minimal","share/cascade/test/regression/simple/arithmetic_plus.v", "12");
50 }
TEST(simple,arithmetic_pow)51 TEST(simple, arithmetic_pow) {
52   run_code("regression/minimal","share/cascade/test/regression/simple/arithmetic_pow.v", "16");
53 }
TEST(simple,array_1)54 TEST(simple, array_1) {
55   run_code("regression/minimal","share/cascade/test/regression/simple/array_1.v", "0123");
56 }
TEST(simple,array_2)57 TEST(simple, array_2) {
58   run_code("regression/minimal","share/cascade/test/regression/simple/array_2.v", "0255");
59 }
TEST(simple,array_3)60 TEST(simple, array_3) {
61   run_code("regression/minimal","share/cascade/test/regression/simple/array_3.v", "10");
62 }
TEST(simple,array_4)63 TEST(simple, array_4) {
64   run_code("regression/minimal","share/cascade/test/regression/simple/array_4.v", "2550");
65 }
TEST(simple,assign_1)66 TEST(simple, assign_1) {
67   run_code("regression/minimal","share/cascade/test/regression/simple/assign_1.v", "1");
68 }
TEST(simple,assign_2)69 TEST(simple, assign_2) {
70   run_code("regression/minimal","share/cascade/test/regression/simple/assign_2.v", "1");
71 }
TEST(simple,assign_3)72 TEST(simple, assign_3) {
73   run_code("regression/minimal","share/cascade/test/regression/simple/assign_3.v", "1");
74 }
TEST(simple,assign_4)75 TEST(simple, assign_4) {
76   run_code("regression/minimal","share/cascade/test/regression/simple/assign_4.v", "1");
77 }
TEST(simple,assign_5)78 TEST(simple, assign_5) {
79   run_code("regression/minimal","share/cascade/test/regression/simple/assign_5.v", "1");
80 }
TEST(simple,assign_6)81 TEST(simple, assign_6) {
82   run_code("regression/minimal","share/cascade/test/regression/simple/assign_6.v", "1");
83 }
TEST(simple,assign_7)84 TEST(simple, assign_7) {
85   run_code("regression/minimal","share/cascade/test/regression/simple/assign_7.v", "170");
86 }
TEST(simple,bitwise_and)87 TEST(simple, bitwise_and) {
88   run_code("regression/minimal","share/cascade/test/regression/simple/bitwise_and.v", "1");
89 }
TEST(simple,bitwise_or)90 TEST(simple, bitwise_or) {
91   run_code("regression/minimal","share/cascade/test/regression/simple/bitwise_or.v", "7");
92 }
TEST(simple,bitwise_sll)93 TEST(simple, bitwise_sll) {
94   run_code("regression/minimal","share/cascade/test/regression/simple/bitwise_sll.v", "6");
95 }
TEST(simple,bitwise_slr)96 TEST(simple, bitwise_slr) {
97   run_code("regression/minimal","share/cascade/test/regression/simple/bitwise_slr.v", "1");
98 }
TEST(simple,bitwise_xnor)99 TEST(simple, bitwise_xnor) {
100   run_code("regression/minimal","share/cascade/test/regression/simple/bitwise_xnor.v", "9");
101 }
TEST(simple,bitwise_not)102 TEST(simple, bitwise_not) {
103   run_code("regression/minimal","share/cascade/test/regression/simple/bitwise_not.v", "12");
104 }
TEST(simple,bitwise_xor)105 TEST(simple, bitwise_xor) {
106   run_code("regression/minimal","share/cascade/test/regression/simple/bitwise_xor.v", "6");
107 }
TEST(simple,case_1)108 TEST(simple, case_1) {
109   run_code("regression/minimal","share/cascade/test/regression/simple/case_1.v", "yes");
110 }
TEST(simple,case_2)111 TEST(simple, case_2) {
112   run_code("regression/minimal","share/cascade/test/regression/simple/case_2.v", "yes");
113 }
TEST(simple,case_3)114 TEST(simple, case_3) {
115   run_code("regression/minimal","share/cascade/test/regression/simple/case_3.v", "123");
116 }
TEST(simple,concat_1)117 TEST(simple, concat_1) {
118   run_code("regression/minimal","share/cascade/test/regression/simple/concat_1.v", "170");
119 }
TEST(simple,concat_2)120 TEST(simple, concat_2) {
121   run_code("regression/minimal","share/cascade/test/regression/simple/concat_2.v", "170");
122 }
TEST(simple,concat_3)123 TEST(simple, concat_3) {
124   run_code("regression/minimal","share/cascade/test/regression/simple/concat_3.v", "ffffffffffffffff");
125 }
TEST(simple,cond_1)126 TEST(simple, cond_1) {
127   run_code("regression/minimal","share/cascade/test/regression/simple/cond_1.v", "123");
128 }
TEST(simple,declaration_1)129 TEST(simple, declaration_1) {
130   run_code("regression/minimal","share/cascade/test/regression/simple/declaration_1.v", "8");
131 }
TEST(simple,define_1)132 TEST(simple, define_1) {
133   run_code("regression/minimal","share/cascade/test/regression/simple/define_1.v", "22");
134 }
TEST(simple,fifo_1)135 TEST(simple, fifo_1) {
136   run_code("regression/minimal","share/cascade/test/regression/simple/fifo_1.v", "1000000001100200300410");
137 }
TEST(simple,finish_1)138 TEST(simple, finish_1) {
139   run_code("regression/minimal","share/cascade/test/regression/simple/finish_1.v", "Hello World");
140 }
TEST(simple,for_1)141 TEST(simple, for_1) {
142   run_code("regression/minimal","share/cascade/test/regression/simple/for_1.v", "333");
143 }
TEST(simple,for_2)144 TEST(simple, for_2) {
145   run_code("regression/minimal","share/cascade/test/regression/simple/for_2.v", "012458");
146 }
TEST(simple,generate_1)147 TEST(simple, generate_1) {
148   run_code("regression/minimal","share/cascade/test/regression/simple/generate_1.v", "01234567");
149 }
TEST(simple,generate_2)150 TEST(simple, generate_2) {
151   run_code("regression/minimal","share/cascade/test/regression/simple/generate_2.v", "32");
152 }
TEST(simple,generate_3)153 TEST(simple, generate_3) {
154   run_code("regression/minimal","share/cascade/test/regression/simple/generate_3.v", "1357");
155 }
TEST(simple,generate_4)156 TEST(simple, generate_4) {
157   run_code("regression/minimal","share/cascade/test/regression/simple/generate_4.v", "10");
158 }
TEST(simple,hello_1)159 TEST(simple, hello_1) {
160   run_code("regression/minimal","share/cascade/test/regression/simple/hello_1.v", "Hello World");
161 }
TEST(simple,hello_2)162 TEST(simple, hello_2) {
163   run_code("regression/minimal","share/cascade/test/regression/simple/hello_2.v", "Hello World");
164 }
TEST(simple,hello_3)165 TEST(simple, hello_3) {
166   run_code("regression/minimal","share/cascade/test/regression/simple/hello_3.v", "Hello World");
167 }
TEST(simple,ifdef_1)168 TEST(simple, ifdef_1) {
169   run_code("regression/minimal","share/cascade/test/regression/simple/ifdef_1.v", "1234567");
170 }
TEST(simple,include_1)171 TEST(simple, include_1) {
172   run_code("regression/minimal","share/cascade/test/regression/simple/include_1.v", "once");
173 }
TEST(simple,inst_1)174 TEST(simple, inst_1) {
175   run_code("regression/minimal","share/cascade/test/regression/simple/inst_1.v", "");
176 }
TEST(simple,inst_2)177 TEST(simple, inst_2) {
178   run_code("regression/minimal","share/cascade/test/regression/simple/inst_2.v", "2");
179 }
TEST(simple,inst_3)180 TEST(simple, inst_3) {
181   run_code("regression/minimal","share/cascade/test/regression/simple/inst_3.v", "1");
182 }
TEST(simple,io_1)183 TEST(simple, io_1) {
184   run_code("regression/minimal","share/cascade/test/regression/simple/io_1.v", "1234512345");
185 }
TEST(simple,io_2)186 TEST(simple, io_2) {
187   run_code("regression/minimal","share/cascade/test/regression/simple/io_2.v", "ffff -1 c Hello 5.55");
188 }
TEST(simple,io_3)189 TEST(simple, io_3) {
190   run_code("regression/minimal","share/cascade/test/regression/simple/io_3.v", "97.00aa97-97");
191 }
TEST(simple,io_4)192 TEST(simple, io_4) {
193   run_code("regression/minimal","share/cascade/test/regression/simple/io_4.v", "32 65535 -1");
194 }
TEST(simple,issue_20a)195 TEST(simple, issue_20a) {
196   run_code("regression/minimal","share/cascade/test/regression/simple/issue_20a.v", "");
197 }
TEST(simple,issue_41a)198 TEST(simple, issue_41a) {
199   run_code("regression/minimal","share/cascade/test/regression/simple/issue_41a.v", "-1");
200 }
TEST(simple,issue_41b)201 TEST(simple, issue_41b) {
202   run_code("regression/minimal","share/cascade/test/regression/simple/issue_41b.v", "-4");
203 }
TEST(simple,issue_47a)204 TEST(simple, issue_47a) {
205   run_code("regression/minimal","share/cascade/test/regression/simple/issue_47a.v", "00254");
206 }
TEST(simple,issue_47b)207 TEST(simple, issue_47b) {
208   run_code("regression/minimal","share/cascade/test/regression/simple/issue_47b.v", "00254");
209 }
TEST(simple,issue_47c)210 TEST(simple, issue_47c) {
211   run_code("regression/minimal","share/cascade/test/regression/simple/issue_47c.v", "000");
212 }
TEST(simple,issue_47d)213 TEST(simple, issue_47d) {
214   run_code("regression/minimal","share/cascade/test/regression/simple/issue_47d.v", "000");
215 }
TEST(simple,issue_54a)216 TEST(simple, issue_54a) {
217   run_code("regression/minimal","share/cascade/test/regression/simple/issue_54a.v", "1");
218 }
TEST(simple,issue_54b)219 TEST(simple, issue_54b) {
220   run_code("regression/minimal","share/cascade/test/regression/simple/issue_54b.v", "2");
221 }
TEST(simple,issue_54c)222 TEST(simple, issue_54c) {
223   run_code("regression/minimal","share/cascade/test/regression/simple/issue_54c.v", "00000000");
224 }
TEST(simple,issue_81a)225 TEST(simple, issue_81a) {
226   run_code("regression/minimal","share/cascade/test/regression/simple/issue_81a.v", "0123");
227 }
TEST(simple,issue_81b)228 TEST(simple, issue_81b) {
229   run_code("regression/minimal","share/cascade/test/regression/simple/issue_81b.v", "0123");
230 }
TEST(simple,issue_152)231 TEST(simple, issue_152) {
232   run_code("regression/minimal","share/cascade/test/regression/simple/issue_152.v", "7bcb43d769f764 >> 86 = 00000000000000\n");
233 }
TEST(simple,issue_195)234 TEST(simple, issue_195) {
235   run_code("regression/minimal","share/cascade/test/regression/simple/issue_195.v", "012012");
236 }
TEST(simple,issue_228)237 TEST(simple, issue_228) {
238   run_code("regression/minimal","share/cascade/test/regression/simple/issue_228.v", "");
239 }
TEST(simple,logical_and)240 TEST(simple, logical_and) {
241   run_code("regression/minimal","share/cascade/test/regression/simple/logical_and.v", "011");
242 }
TEST(simple,logical_eq)243 TEST(simple, logical_eq) {
244   run_code("regression/minimal","share/cascade/test/regression/simple/logical_eq.v", "01");
245 }
TEST(simple,logical_gt)246 TEST(simple, logical_gt) {
247   run_code("regression/minimal","share/cascade/test/regression/simple/logical_gt.v", "10");
248 }
TEST(simple,logical_gte)249 TEST(simple, logical_gte) {
250   run_code("regression/minimal","share/cascade/test/regression/simple/logical_gte.v", "10");
251 }
TEST(simple,logical_lt)252 TEST(simple, logical_lt) {
253   run_code("regression/minimal","share/cascade/test/regression/simple/logical_lt.v", "10");
254 }
TEST(simple,logical_lte)255 TEST(simple, logical_lte) {
256   run_code("regression/minimal","share/cascade/test/regression/simple/logical_lte.v", "10");
257 }
TEST(simple,logical_ne)258 TEST(simple, logical_ne) {
259   run_code("regression/minimal","share/cascade/test/regression/simple/logical_ne.v", "10");
260 }
TEST(simple,logical_not)261 TEST(simple, logical_not) {
262   run_code("regression/minimal","share/cascade/test/regression/simple/logical_not.v", "01");
263 }
TEST(simple,logical_or)264 TEST(simple, logical_or) {
265   run_code("regression/minimal","share/cascade/test/regression/simple/logical_or.v", "110");
266 }
TEST(simple,mem_1)267 TEST(simple, mem_1) {
268   run_code("regression/minimal","share/cascade/test/regression/simple/mem_1.v", "0011223344556677");
269 }
TEST(simple,mem_2)270 TEST(simple, mem_2) {
271   run_code("regression/minimal","share/cascade/test/regression/simple/mem_2.v", "0001020304050607");
272 }
TEST(simple,nested_1)273 TEST(simple, nested_1) {
274   run_code("regression/minimal","share/cascade/test/regression/simple/nested_1.v", "8");
275 }
TEST(simple,nonblock_1)276 TEST(simple, nonblock_1) {
277   run_code("regression/minimal","share/cascade/test/regression/simple/nonblock_1.v", "01");
278 }
TEST(simple,nonblock_2)279 TEST(simple, nonblock_2) {
280   run_code("regression/minimal","share/cascade/test/regression/simple/nonblock_2.v", "3");
281 }
TEST(simple,nonblock_3)282 TEST(simple, nonblock_3) {
283   run_code("regression/minimal","share/cascade/test/regression/simple/nonblock_3.v", "0 1 2 4 8 ");
284 }
TEST(simple,pipeline_1)285 TEST(simple, pipeline_1) {
286   run_code("regression/minimal","share/cascade/test/regression/simple/pipeline_1.v", "0123456789");
287 }
TEST(simple,pipeline_2)288 TEST(simple, pipeline_2) {
289   run_code("regression/minimal","share/cascade/test/regression/simple/pipeline_2.v", "0123456789");
290 }
TEST(simple,precedence)291 TEST(simple, precedence) {
292   run_code("regression/minimal","share/cascade/test/regression/simple/precedence.v", "7");
293 }
TEST(simple,range_1)294 TEST(simple, range_1) {
295   run_code("regression/minimal","share/cascade/test/regression/simple/range_1.v", "7");
296 }
TEST(simple,range_2)297 TEST(simple, range_2) {
298   run_code("regression/minimal","share/cascade/test/regression/simple/range_2.v", "7");
299 }
TEST(simple,range_3)300 TEST(simple, range_3) {
301   run_code("regression/minimal","share/cascade/test/regression/simple/range_3.v", "7");
302 }
TEST(simple,real_1)303 TEST(simple, real_1) {
304   run_code("regression/minimal","share/cascade/test/regression/simple/real_1.v", "269488144269488144");
305 }
TEST(simple,real_2)306 TEST(simple, real_2) {
307   run_code("regression/minimal","share/cascade/test/regression/simple/real_2.v", "11111111111");
308 }
TEST(simple,reduce_and)309 TEST(simple, reduce_and) {
310   run_code("regression/minimal","share/cascade/test/regression/simple/reduce_and.v", "10");
311 }
TEST(simple,reduce_nand)312 TEST(simple, reduce_nand) {
313   run_code("regression/minimal","share/cascade/test/regression/simple/reduce_nand.v", "01");
314 }
TEST(simple,reduce_or)315 TEST(simple, reduce_or) {
316   run_code("regression/minimal","share/cascade/test/regression/simple/reduce_or.v", "10");
317 }
TEST(simple,reduce_nor)318 TEST(simple, reduce_nor) {
319   run_code("regression/minimal","share/cascade/test/regression/simple/reduce_nor.v", "01");
320 }
TEST(simple,reduce_xor)321 TEST(simple, reduce_xor) {
322   run_code("regression/minimal","share/cascade/test/regression/simple/reduce_xor.v", "10");
323 }
TEST(simple,reduce_xnor)324 TEST(simple, reduce_xnor) {
325   run_code("regression/minimal","share/cascade/test/regression/simple/reduce_xnor.v", "01");
326 }
TEST(simple,repeat_1)327 TEST(simple, repeat_1) {
328   run_code("regression/minimal","share/cascade/test/regression/simple/repeat_1.v", "122");
329 }
TEST(simple,repeat_2)330 TEST(simple, repeat_2) {
331   run_code("regression/minimal","share/cascade/test/regression/simple/repeat_2.v", "666666");
332 }
TEST(simple,repeat_3)333 TEST(simple, repeat_3) {
334   run_code("regression/minimal","share/cascade/test/regression/simple/repeat_3.v", "999999999");
335 }
TEST(simple,seq_1)336 TEST(simple, seq_1) {
337   run_code("regression/minimal","share/cascade/test/regression/simple/seq_1.v", "12");
338 }
TEST(simple,sign_1)339 TEST(simple, sign_1) {
340   run_code("regression/minimal","share/cascade/test/regression/simple/sign_1.v", "-41431655761-416553221841143165576165532-41");
341 }
TEST(simple,sign_2)342 TEST(simple, sign_2) {
343   run_code("regression/minimal","share/cascade/test/regression/simple/sign_2.v", "0000000000");
344 }
TEST(simple,string)345 TEST(simple, string) {
346   run_code("regression/minimal","share/cascade/test/regression/simple/string.v", "   Hello world is stored as 00000048656c6c6f20776f726c64\nHello world!!! is stored as 48656c6c6f20776f726c64212121\n");
347 }
TEST(simple,while_1)348 TEST(simple, while_1) {
349   run_code("regression/minimal","share/cascade/test/regression/simple/while_1.v", "333");
350 }
TEST(simple,while_2)351 TEST(simple, while_2) {
352   run_code("regression/minimal","share/cascade/test/regression/simple/while_2.v", "012345");
353 }
354