7#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_CONCOLIC_H_
8#define BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_CONCOLIC_H_
19#include "backends/p4tools/common/lib/model.h"
22#include "ir/visitor.h"
23#include "lib/cstring.h"
24#include "lib/ordered_map.h"
26#include "backends/p4tools/modules/testgen/lib/execution_state.h"
28namespace P4::P4Tools::P4Testgen {
35using ConcolicVariableMap =
36 ordered_map<std::variant<IR::ConcolicVariable, const IR::Expression *>,
const IR::Expression *>;
39class ConcolicMethodImpls {
41 using MethodImpl = std::function<void(
43 const Model &evaluatedModel, ConcolicVariableMap *resolvedConcolicVariables)>;
48 static bool matches(
const std::vector<cstring> ¶mNames,
52 using ImplList = std::list<std::tuple<cstring, std::vector<cstring>, MethodImpl>>;
54 explicit ConcolicMethodImpls(
const ImplList &implList);
56 bool exec(
cstring concolicMethodName,
const IR::ConcolicVariable *var,
58 ConcolicVariableMap *resolvedConcolicVariables)
const;
60 void add(
const ImplList &implList);
63class ConcolicResolver :
public Inspector {
70 ConcolicVariableMap resolvedConcolicVariables);
72 const ConcolicVariableMap *getResolvedConcolicVariables()
const;
75 bool preorder(
const IR::ConcolicVariable *var)
override;
81 const Model &evaluatedModel;
85 ConcolicVariableMap resolvedConcolicVariables;
94 static const ConcolicMethodImpls::ImplList *getCoreConcolicMethodImpls();
Definition ir/vector.h:59
Definition ordered_map.h:32