| 40 | |
| 41 | namespace { |
| 42 | TEST(CompileExpression, ExprFromParseTree1) { |
| 43 | CompileHelper helper; |
| 44 | ParserHarness pharness; |
| 45 | CompilerHarness charness; |
| 46 | std::unique_ptr<CompileDesign> compileDesign = charness.createCompileDesign(); |
| 47 | // Cannot use parameters assignments in next expression, there is no |
| 48 | // elaboration performed here! |
| 49 | auto fC = pharness.parse( |
| 50 | "module top();" |
| 51 | "parameter p1 = 1 << 4;" |
| 52 | "parameter p2 = (1 << 8) >> 4;" |
| 53 | "parameter p3 = (16 * 4) / 4;" |
| 54 | "parameter p4 = 32 - 16;" |
| 55 | "parameter p5 = 2 ** 4;" |
| 56 | "parameter p6 = (1'b1) ? 16 : 15;" |
| 57 | "parameter p7 = (1'b0) ? 15 : 16;" |
| 58 | "endmodule"); |
| 59 | NodeId root = fC->getRootNode(); |
| 60 | std::vector<NodeId> assigns = |
| 61 | fC->sl_collect_all(root, VObjectType::paParam_assignment); |
| 62 | EXPECT_EQ(assigns.size(), 7); |
| 63 | for (NodeId param_assign : assigns) { |
| 64 | NodeId param = fC->Child(param_assign); |
| 65 | NodeId rhs = fC->Sibling(param); |
| 66 | const UHDM::expr *exp = (UHDM::expr *)helper.compileExpression( |
| 67 | nullptr, fC.get(), rhs, compileDesign.get(), Reduce::Yes, nullptr, |
| 68 | nullptr, true); |
| 69 | EXPECT_EQ(exp->UhdmType(), UHDM::uhdmconstant); |
| 70 | bool invalidValue = false; |
| 71 | UHDM::ExprEval eval; |
| 72 | EXPECT_EQ(eval.get_value(invalidValue, exp), 16); |
| 73 | } |
| 74 | } |
| 75 | TEST(CompileExpression, ExprFromParseTree2) { |
| 76 | CompileHelper helper; |
| 77 | ParserHarness pharness; |
nothing calls this directly
no test coverage detected