P4C
The P4 Compiler
Loading...
Searching...
No Matches
final_state.h
1/*
2 * SPDX-FileCopyrightText: 2022 The P4 Language Consortium
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_FINAL_STATE_H_
8#define BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_FINAL_STATE_H_
9
10#include <functional>
11#include <optional>
12#include <vector>
13
14#include "backends/p4tools/common/lib/model.h"
15#include "backends/p4tools/common/lib/trace_event.h"
16#include "ir/solver.h"
17#include "midend/coverage.h"
18
19#include "backends/p4tools/modules/testgen/lib/concolic.h"
20#include "backends/p4tools/modules/testgen/lib/execution_state.h"
21
22namespace P4::P4Tools::P4Testgen {
23
26 private:
29 std::reference_wrapper<AbstractSolver> solver;
30
32 std::reference_wrapper<const ExecutionState> state;
33
35 std::reference_wrapper<const Model> finalModel;
36
38 std::vector<std::reference_wrapper<const TraceEvent>> trace;
39
43 static void calculatePayload(const ExecutionState &executionState, Model &evaluatedModel);
44
48 static Model &processModel(const ExecutionState &finalState, Model &model,
49 bool postProcess = true);
50
51 public:
55
57 FinalState(AbstractSolver &solver, const ExecutionState &finalState, const Model &finalModel);
58
65 [[nodiscard]] std::optional<std::reference_wrapper<const FinalState>> computeConcolicState(
66 const ConcolicVariableMap &resolvedConcolicVariables) const;
67
69 [[nodiscard]] const Model &getFinalModel() const;
70
72 [[nodiscard]] AbstractSolver &getSolver() const;
73
75 [[nodiscard]] const ExecutionState *getExecutionState() const;
76
78 [[nodiscard]] const std::vector<std::reference_wrapper<const TraceEvent>> *getTraces() const;
79
81 [[nodiscard]] const P4::Coverage::CoverageSet &getVisited() const;
82};
83
84} // namespace P4::P4Tools::P4Testgen
85
86#endif /* BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_FINAL_STATE_H_ */
Provides a higher-level interface for an SMT solver.
Definition solver.h:30
Definition backends/p4tools/common/lib/model.h:24
Represents state of execution after having reached a program point.
Definition execution_state.h:40
const std::vector< std::reference_wrapper< const TraceEvent > > * getTraces() const
Definition final_state.cpp:118
std::optional< std::reference_wrapper< const FinalState > > computeConcolicState(const ConcolicVariableMap &resolvedConcolicVariables) const
Definition final_state.cpp:70
FinalState(AbstractSolver &solver, const ExecutionState &finalState)
Definition final_state.cpp:28
const Model & getFinalModel() const
Definition final_state.cpp:112
const ExecutionState * getExecutionState() const
Definition final_state.cpp:116
AbstractSolver & getSolver() const
Definition final_state.cpp:114
const P4::Coverage::CoverageSet & getVisited() const
Definition final_state.cpp:122
std::set< const IR::Node *, SourceIdCmp > CoverageSet
Definition coverage.h:47
Definition phv/solver/action_constraint_solver.cpp:33