1#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_TARGETS_PNA_TEST_SPEC_H_
2#define BACKENDS_P4TOOLS_MODULES_TESTGEN_TARGETS_PNA_TEST_SPEC_H_
9#include "backends/p4tools/common/lib/model.h"
10#include "ir/declaration.h"
12#include "lib/cstring.h"
14#include "backends/p4tools/modules/testgen/lib/test_object.h"
15#include "backends/p4tools/modules/testgen/lib/test_spec.h"
23class PnaDpdkRegisterCondition :
public TestObject {
31 explicit PnaDpdkRegisterCondition(
const IR::Expression *
index,
const IR::Expression *
value);
41 [[nodiscard]]
const PnaDpdkRegisterCondition *
evaluate(
const Model &model,
42 bool doComplete)
const override;
46 DECLARE_TYPEINFO(PnaDpdkRegisterCondition, TestObject);
57class PnaDpdkRegisterValue :
public TestObject {
61 const IR::Expression *initialValue;
64 std::vector<PnaDpdkRegisterCondition> registerConditions;
67 explicit PnaDpdkRegisterValue(
const IR::Expression *initialValue);
79 const IR::Expression *
getCurrentValue(
const IR::Expression *index)
const;
85 [[nodiscard]]
const PnaDpdkRegisterValue *
evaluate(
const Model &model,
86 bool doComplete)
const override;
88 DECLARE_TYPEINFO(PnaDpdkRegisterValue, TestObject);
94class PnaDpdkActionProfile :
public TestObject {
97 std::vector<std::pair<cstring, std::vector<ActionArg>>> actions;
108 [[nodiscard]]
const std::vector<std::pair<cstring, std::vector<ActionArg>>> *
getActions()
const;
119 [[nodiscard]]
const PnaDpdkActionProfile *
evaluate(
const Model &model,
120 bool doComplete)
const override;
122 DECLARE_TYPEINFO(PnaDpdkActionProfile, TestObject);
128class PnaDpdkActionSelector :
public TestObject {
148 [[nodiscard]]
const PnaDpdkActionSelector *
evaluate(
const Model &model,
149 bool doComplete)
const override;
151 DECLARE_TYPEINFO(PnaDpdkActionSelector, TestObject);
157class MetadataCollection :
public TestObject {
159 std::map<cstring, const IR::Literal *> metadataFields;
162 MetadataCollection();
166 [[nodiscard]]
const MetadataCollection *
evaluate(
const Model & ,
167 bool doComplete)
const override;
170 [[nodiscard]]
const std::map<cstring, const IR::Literal *> &
getMetadataFields()
const;
172 void addMetaDataField(
cstring name,
const IR::Literal *metadataField);
174 const IR::Literal *getMetadataField(
cstring name);
176 DECLARE_TYPEINFO(MetadataCollection, TestObject);
183class Optional :
public TableMatch {
186 const IR::Expression *value;
192 explicit Optional(
const IR::KeyElement *key,
const IR::Expression *value,
bool addMatch);
194 const Optional *
evaluate(
const Model &model,
bool doComplete)
const override;
205 DECLARE_TYPEINFO(Optional, TableMatch);
208class Range :
public TableMatch {
211 const IR::Expression *low;
214 const IR::Expression *high;
217 explicit Range(
const IR::KeyElement *key,
const IR::Expression *low,
218 const IR::Expression *high);
220 const Range *
evaluate(
const Model &model,
bool doComplete)
const override;
232 DECLARE_TYPEINFO(Range, TableMatch);
The Declaration interface, representing objects with names.
Definition declaration.h:26