-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathNajaVerilogTest6.cpp
125 lines (113 loc) · 4.83 KB
/
NajaVerilogTest6.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// SPDX-FileCopyrightText: 2023 The Naja verilog authors <https://github.com/najaeda/naja-verilog/blob/main/AUTHORS>
//
// SPDX-License-Identifier: Apache-2.0
#include "gtest/gtest.h"
#include <filesystem>
#include <fstream>
#include "VerilogConstructor.h"
using namespace naja::verilog;
#include "VerilogConstructorTest.h"
#ifndef NAJA_VERILOG_BENCHMARKS
#define NAJA_VERILOG_BENCHMARKS "Undefined"
#endif
TEST(NajaVerilogTest6, test) {
VerilogConstructorTest constructor;
std::filesystem::path test6Path(
std::filesystem::path(NAJA_VERILOG_BENCHMARKS)
/ std::filesystem::path("benchmarks")
/ std::filesystem::path("test6.v"));
constructor.parse(test6Path);
ASSERT_EQ(1, constructor.modules_.size());
auto test = constructor.modules_[0];
EXPECT_EQ("test", test->identifier_.name_);
EXPECT_EQ(1, constructor.modules_.size());
{
auto mod = constructor.modules_[0];
EXPECT_TRUE(mod->assigns_.empty());
}
constructor.setFirstPass(false);
constructor.parse(test6Path);
EXPECT_EQ(1, constructor.modules_.size());
auto mod = constructor.modules_[0];
EXPECT_FALSE(mod->assigns_.empty());
EXPECT_EQ(4, mod->assigns_.size());
{
auto assign = mod->assigns_[0];
EXPECT_EQ(1, assign.identifiers_.size());
auto identifier = assign.identifiers_[0];
EXPECT_EQ("n0", identifier.identifier_.name_);
EXPECT_FALSE(identifier.range_.valid_);
auto expression = assign.expression_;
EXPECT_TRUE(expression.valid_);
EXPECT_EQ(naja::verilog::Expression::Type::RANGEIDENTIFIER, expression.value_.index());
auto leftId = std::get<naja::verilog::Expression::Type::RANGEIDENTIFIER>(expression.value_);
EXPECT_EQ("n1", leftId.identifier_.name_);
EXPECT_FALSE(leftId.range_.valid_);
}
{
auto assign = mod->assigns_[1];
EXPECT_EQ(1, assign.identifiers_.size());
auto identifier = assign.identifiers_[0];
EXPECT_EQ("n1", identifier.identifier_.name_);
EXPECT_FALSE(identifier.range_.valid_);
auto expression = assign.expression_;
EXPECT_TRUE(expression.valid_);
EXPECT_EQ(naja::verilog::Expression::Type::NUMBER, expression.value_.index());
auto leftId = std::get<naja::verilog::Expression::Type::NUMBER>(expression.value_);
EXPECT_TRUE(leftId.sign_);
EXPECT_EQ(naja::verilog::Number::BASED, leftId.value_.index());
auto leftBaseNumber = std::get<naja::verilog::Number::BASED>(leftId.value_);
EXPECT_FALSE(leftBaseNumber.signed_);
EXPECT_EQ(naja::verilog::BasedNumber::BINARY, leftBaseNumber.base_);
EXPECT_EQ(1, leftBaseNumber.size_);
EXPECT_EQ("0", leftBaseNumber.digits_);
}
{
auto assign = mod->assigns_[2];
EXPECT_EQ(2, assign.identifiers_.size());
auto id0 = assign.identifiers_[0];
EXPECT_EQ("n2", id0.identifier_.name_);
EXPECT_TRUE(id0.range_.valid_);
EXPECT_EQ(3, id0.range_.msb_);
EXPECT_EQ(2, id0.range_.lsb_);
auto id1 = assign.identifiers_[1];
EXPECT_EQ("n2", id1.identifier_.name_);
EXPECT_TRUE(id1.range_.valid_);
EXPECT_EQ(1, id1.range_.msb_);
EXPECT_EQ(0, id1.range_.lsb_);
auto expression = assign.expression_;
EXPECT_TRUE(expression.valid_);
EXPECT_EQ(naja::verilog::Expression::Type::CONCATENATION, expression.value_.index());
auto concatenation = std::get<naja::verilog::Expression::Type::CONCATENATION>(expression.value_);
EXPECT_EQ(3, concatenation.expressions_.size());
EXPECT_TRUE(concatenation.expressions_[2].valid_);
auto constant = concatenation.expressions_[2];
EXPECT_EQ(naja::verilog::Expression::NUMBER, constant.value_.index());
auto constantValue = std::get<naja::verilog::Expression::NUMBER>(constant.value_);
EXPECT_TRUE(constantValue.sign_);
EXPECT_EQ(naja::verilog::Number::BASED, constantValue.value_.index());
auto constantNumber = std::get<naja::verilog::Number::BASED>(constantValue.value_);
EXPECT_FALSE(constantNumber.signed_);
EXPECT_EQ(naja::verilog::BasedNumber::HEX, constantNumber.base_);
EXPECT_EQ(2, constantNumber.size_);
EXPECT_EQ("2", constantNumber.digits_);
}
{
auto assign = mod->assigns_[3];
EXPECT_EQ(1, assign.identifiers_.size());
auto identifier = assign.identifiers_[0];
EXPECT_EQ("n3", identifier.identifier_.name_);
EXPECT_FALSE(identifier.range_.valid_);
auto expression = assign.expression_;
EXPECT_TRUE(expression.valid_);
EXPECT_EQ(naja::verilog::Expression::Type::NUMBER, expression.value_.index());
auto leftId = std::get<naja::verilog::Expression::Type::NUMBER>(expression.value_);
EXPECT_TRUE(leftId.sign_);
EXPECT_EQ(naja::verilog::Number::BASED, leftId.value_.index());
auto leftBaseNumber = std::get<naja::verilog::Number::BASED>(leftId.value_);
EXPECT_TRUE(leftBaseNumber.signed_);
EXPECT_EQ(naja::verilog::BasedNumber::HEX, leftBaseNumber.base_);
EXPECT_EQ(4, leftBaseNumber.size_);
EXPECT_EQ("F", leftBaseNumber.digits_);
}
}