P4C
The P4 Compiler
Loading...
Searching...
No Matches
targets/pna/test_spec.h
1/*
2 * SPDX-FileCopyrightText: 2023 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_TARGETS_PNA_TEST_SPEC_H_
8#define BACKENDS_P4TOOLS_MODULES_TESTGEN_TARGETS_PNA_TEST_SPEC_H_
9
10#include <cstddef>
11#include <map>
12#include <utility>
13#include <vector>
14
15#include "backends/p4tools/common/lib/model.h"
16#include "ir/declaration.h"
17#include "ir/ir.h"
18#include "lib/cstring.h"
19
20#include "backends/p4tools/modules/testgen/lib/test_object.h"
21#include "backends/p4tools/modules/testgen/lib/test_spec.h"
22
24
25/* =========================================================================================
26 * PnaDpdkRegister
27 * ========================================================================================= */
28
29class PnaDpdkRegisterCondition : public TestObject {
30 public:
32 const IR::Expression *index;
33
35 const IR::Expression *value;
36
37 explicit PnaDpdkRegisterCondition(const IR::Expression *index, const IR::Expression *value);
38
41 [[nodiscard]] const IR::Constant *getEvaluatedIndex() const;
42
45 [[nodiscard]] const IR::Constant *getEvaluatedValue() const;
46
47 [[nodiscard]] const PnaDpdkRegisterCondition *evaluate(const Model &model,
48 bool doComplete) const override;
49
50 [[nodiscard]] cstring getObjectName() const override;
51
52 DECLARE_TYPEINFO(PnaDpdkRegisterCondition, TestObject);
53};
54
63class PnaDpdkRegisterValue : public TestObject {
64 private:
67 const IR::Expression *initialValue;
68
70 std::vector<PnaDpdkRegisterCondition> registerConditions;
71
72 public:
73 explicit PnaDpdkRegisterValue(const IR::Expression *initialValue);
74
75 [[nodiscard]] cstring getObjectName() const override;
76
79
81 [[nodiscard]] const IR::Expression *getInitialValue() const;
82
85 const IR::Expression *getCurrentValue(const IR::Expression *index) const;
86
89 [[nodiscard]] const IR::Constant *getEvaluatedValue() const;
90
91 [[nodiscard]] const PnaDpdkRegisterValue *evaluate(const Model &model,
92 bool doComplete) const override;
93
94 DECLARE_TYPEINFO(PnaDpdkRegisterValue, TestObject);
95};
96
97/* =========================================================================================
98 * PnaDpdkActionProfile
99 * ========================================================================================= */
100class PnaDpdkActionProfile : public TestObject {
101 private:
103 std::vector<std::pair<cstring, std::vector<ActionArg>>> actions;
104
106 const IR::IDeclaration *profileDecl;
107
108 public:
109 explicit PnaDpdkActionProfile(const IR::IDeclaration *profileDecl);
110
111 [[nodiscard]] cstring getObjectName() const override;
112
114 [[nodiscard]] const std::vector<std::pair<cstring, std::vector<ActionArg>>> *getActions() const;
115
117 [[nodiscard]] const IR::IDeclaration *getProfileDecl() const;
118
120 size_t getActionMapSize() const;
121
123 void addToActionMap(cstring actionName, std::vector<ActionArg> actionArgs);
124
125 [[nodiscard]] const PnaDpdkActionProfile *evaluate(const Model &model,
126 bool doComplete) const override;
127
128 DECLARE_TYPEINFO(PnaDpdkActionProfile, TestObject);
129};
130
131/* =========================================================================================
132 * ActionSelector
133 * ========================================================================================= */
134class PnaDpdkActionSelector : public TestObject {
135 private:
137 const IR::IDeclaration *selectorDecl;
138
140 const PnaDpdkActionProfile *actionProfile;
141
142 public:
143 explicit PnaDpdkActionSelector(const IR::IDeclaration *selectorDecl,
144 const PnaDpdkActionProfile *actionProfile);
145
146 [[nodiscard]] cstring getObjectName() const override;
147
149 [[nodiscard]] const IR::IDeclaration *getSelectorDecl() const;
150
152 [[nodiscard]] const PnaDpdkActionProfile *getActionProfile() const;
153
154 [[nodiscard]] const PnaDpdkActionSelector *evaluate(const Model &model,
155 bool doComplete) const override;
156
157 DECLARE_TYPEINFO(PnaDpdkActionSelector, TestObject);
158};
159
160/* =========================================================================================
161 * MetadataCollection
162 * ========================================================================================= */
163class MetadataCollection : public TestObject {
164 private:
165 std::map<cstring, const IR::Literal *> metadataFields;
166
167 public:
168 MetadataCollection();
169
170 [[nodiscard]] cstring getObjectName() const override;
171
172 [[nodiscard]] const MetadataCollection *evaluate(const Model & /*model*/,
173 bool doComplete) const override;
174
176 [[nodiscard]] const std::map<cstring, const IR::Literal *> &getMetadataFields() const;
177
178 void addMetaDataField(cstring name, const IR::Literal *metadataField);
179
180 const IR::Literal *getMetadataField(cstring name);
181
182 DECLARE_TYPEINFO(MetadataCollection, TestObject);
183};
184
185/* =========================================================================================
186 * Table Key Match Types
187 * ========================================================================================= */
188
189class Optional : public TableMatch {
190 private:
192 const IR::Expression *value;
193
195 bool addMatch;
196
197 public:
198 explicit Optional(const IR::KeyElement *key, const IR::Expression *value, bool addMatch);
199
200 const Optional *evaluate(const Model &model, bool doComplete) const override;
201
202 cstring getObjectName() const override;
203
206 const IR::Constant *getEvaluatedValue() const;
207
209 bool addAsExactMatch() const;
210
211 DECLARE_TYPEINFO(Optional, TableMatch);
212};
213
214class Range : public TableMatch {
215 private:
217 const IR::Expression *low;
218
220 const IR::Expression *high;
221
222 public:
223 explicit Range(const IR::KeyElement *key, const IR::Expression *low,
224 const IR::Expression *high);
225
226 const Range *evaluate(const Model &model, bool doComplete) const override;
227
228 cstring getObjectName() const override;
229
232 const IR::Constant *getEvaluatedLow() const;
233
236 const IR::Constant *getEvaluatedHigh() const;
237
238 DECLARE_TYPEINFO(Range, TableMatch);
239};
240
241} // namespace P4::P4Tools::P4Testgen::Pna
242
243#endif /* BACKENDS_P4TOOLS_MODULES_TESTGEN_TARGETS_PNA_TEST_SPEC_H_ */
The Declaration interface, representing objects with names.
Definition declaration.h:17
Definition backends/p4tools/common/lib/model.h:24
const std::map< cstring, const IR::Literal * > & getMetadataFields() const
Definition targets/pna/test_spec.cpp:210
const MetadataCollection * evaluate(const Model &, bool doComplete) const override
Definition targets/pna/test_spec.cpp:205
cstring getObjectName() const override
Definition targets/pna/test_spec.cpp:203
bool addAsExactMatch() const
Definition targets/pna/test_spec.cpp:168
const IR::Constant * getEvaluatedValue() const
Definition targets/pna/test_spec.cpp:152
const Optional * evaluate(const Model &model, bool doComplete) const override
Definition targets/pna/test_spec.cpp:161
cstring getObjectName() const override
Definition targets/pna/test_spec.cpp:166
Definition targets/pna/test_spec.h:100
const PnaDpdkActionProfile * evaluate(const Model &model, bool doComplete) const override
Definition targets/pna/test_spec.cpp:108
const std::vector< std::pair< cstring, std::vector< ActionArg > > > * getActions() const
Definition targets/pna/test_spec.cpp:91
size_t getActionMapSize() const
Definition targets/pna/test_spec.cpp:106
cstring getObjectName() const override
Definition targets/pna/test_spec.cpp:99
void addToActionMap(cstring actionName, std::vector< ActionArg > actionArgs)
Add an action (its name) and the arguments to the action map of this profile.
Definition targets/pna/test_spec.cpp:103
const IR::IDeclaration * getProfileDecl() const
Definition targets/pna/test_spec.cpp:101
const PnaDpdkActionProfile * getActionProfile() const
Definition targets/pna/test_spec.cpp:135
const IR::IDeclaration * getSelectorDecl() const
Definition targets/pna/test_spec.cpp:133
const PnaDpdkActionSelector * evaluate(const Model &model, bool doComplete) const override
Definition targets/pna/test_spec.cpp:139
cstring getObjectName() const override
Definition targets/pna/test_spec.cpp:131
Definition targets/pna/test_spec.h:29
const PnaDpdkRegisterCondition * evaluate(const Model &model, bool doComplete) const override
Definition targets/pna/test_spec.cpp:78
const IR::Expression * index
The register index.
Definition targets/pna/test_spec.h:32
const IR::Expression * value
The register value.
Definition targets/pna/test_spec.h:35
cstring getObjectName() const override
Definition targets/pna/test_spec.cpp:85
const IR::Constant * getEvaluatedValue() const
Definition targets/pna/test_spec.cpp:64
const IR::Constant * getEvaluatedIndex() const
Definition targets/pna/test_spec.cpp:71
cstring getObjectName() const override
Definition targets/pna/test_spec.cpp:29
const IR::Expression * getCurrentValue(const IR::Expression *index) const
Definition targets/pna/test_spec.cpp:31
void addRegisterCondition(PnaDpdkRegisterCondition cond)
Each element is an API name paired with a match rule.
Definition targets/pna/test_spec.cpp:23
const IR::Constant * getEvaluatedValue() const
Definition targets/pna/test_spec.cpp:42
const IR::Expression * getInitialValue() const
Definition targets/pna/test_spec.cpp:27
const PnaDpdkRegisterValue * evaluate(const Model &model, bool doComplete) const override
Definition targets/pna/test_spec.cpp:49
const IR::Constant * getEvaluatedLow() const
Definition targets/pna/test_spec.cpp:173
const IR::Constant * getEvaluatedHigh() const
Definition targets/pna/test_spec.cpp:182
const Range * evaluate(const Model &model, bool doComplete) const override
Definition targets/pna/test_spec.cpp:191
cstring getObjectName() const override
Definition targets/pna/test_spec.cpp:222
Definition cstring.h:85
Inja.
Definition pna/backend/metadata/metadata.cpp:28