20#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_TARGETS_TOFINO_TEST_SPEC_H_
21#define BACKENDS_P4TOOLS_MODULES_TESTGEN_TARGETS_TOFINO_TEST_SPEC_H_
27#include "backends/p4tools/common/lib/model.h"
29#include "lib/cstring.h"
31#include "backends/p4tools/modules/testgen/lib/test_spec.h"
33namespace P4::P4Tools::P4Testgen::Tofino {
41class IndexExpression :
public TestObject {
44 const IR::Expression *index;
47 const IR::Expression *value;
50 explicit IndexExpression(
const IR::Expression *index,
const IR::Expression *value);
61 [[nodiscard]]
const IR::Expression *
getIndex()
const;
64 [[nodiscard]]
const IR::Expression *
getValue()
const;
66 [[nodiscard]]
const IndexExpression *
evaluate(
const Model &model,
67 bool doComplete)
const override;
71 DECLARE_TYPEINFO(IndexExpression, TestObject);
78class IndexMap :
public TestObject {
90 void writeToIndex(
const IR::Expression *index,
const IR::Expression *value);
97 [[nodiscard]]
const IR::Expression *
getValueAtIndex(
const IR::Expression *index)
const;
104 [[nodiscard]] std::map<big_int, std::pair<int, const IR::Constant *>>
unravelMap()
const;
106 DECLARE_TYPEINFO(IndexMap, TestObject);
120class TofinoRegisterValue :
public IndexMap {
123 const IR::Declaration_Instance *decl;
126 const IR::Expression *initialIndex;
129 explicit TofinoRegisterValue(
const IR::Declaration_Instance *decl,
131 const IR::Expression *initialIndex);
135 [[nodiscard]]
const TofinoRegisterValue *
evaluate(
const Model &model,
136 bool doComplete)
const override;
144 DECLARE_TYPEINFO(TofinoRegisterValue, TestObject);
151class TofinoDirectRegisterValue :
public TestObject {
154 const IR::Expression *initialValue;
157 const IR::Declaration_Instance *decl;
160 const IR::P4Table *table;
163 explicit TofinoDirectRegisterValue(
const IR::Declaration_Instance *decl,
164 const IR::Expression *initialValue,
165 const IR::P4Table *table);
169 [[nodiscard]]
const TofinoDirectRegisterValue *
evaluate(
const Model &model,
170 bool doComplete)
const override;
184 DECLARE_TYPEINFO(TofinoDirectRegisterValue, TestObject);
191class TofinoRegisterParam :
public TestObject {
194 const IR::Declaration_Instance *decl;
197 const IR::Expression *initialValue;
200 explicit TofinoRegisterParam(
const IR::Declaration_Instance *decl,
201 const IR::Expression *initialValue);
205 [[nodiscard]]
const TofinoRegisterParam *
evaluate(
const Model &model,
206 bool doComplete)
const override;
216 DECLARE_TYPEINFO(TofinoRegisterParam, TestObject);
222class TofinoActionProfile :
public TestObject {
225 std::vector<std::pair<cstring, std::vector<ActionArg>>> actions;
236 const std::vector<std::pair<cstring, std::vector<ActionArg>>> *
getActions()
const;
247 const TofinoActionProfile *
evaluate(
const Model &model,
bool doComplete)
const override;
249 DECLARE_TYPEINFO(TofinoActionProfile, TestObject);
255class TofinoActionSelector :
public TestObject {
275 const TofinoActionSelector *
evaluate(
const Model &model,
bool doComplete)
const override;
277 DECLARE_TYPEINFO(TofinoActionSelector, TestObject);
284class Range :
public TableMatch {
287 const IR::Expression *low;
290 const IR::Expression *high;
293 explicit Range(
const IR::KeyElement *key,
const IR::Expression *low,
294 const IR::Expression *high);
296 const Range *
evaluate(
const Model &model,
bool doComplete)
const override;
308 DECLARE_TYPEINFO(Range, TableMatch);
The Declaration interface, representing objects with names.
Definition declaration.h:26