FuzzingDefs.h
125 lines
| 3.9 KiB
| text/x-c
|
CLexer
Alexandre Leroux
|
r1200 | #ifndef SCIQLOP_FUZZINGDEFS_H | ||
#define SCIQLOP_FUZZINGDEFS_H | ||||
Alexandre Leroux
|
r1220 | #include <Data/SqpRange.h> | ||
Alexandre Leroux
|
r1201 | #include <QString> | ||
Alexandre Leroux
|
r1235 | #include <QUuid> | ||
Alexandre Leroux
|
r1207 | #include <QVariantHash> | ||
Alexandre Leroux
|
r1220 | #include <memory> | ||
Alexandre Leroux
|
r1235 | #include <set> | ||
Alexandre Leroux
|
r1220 | |||
Alexandre Leroux
|
r1200 | // /////// // | ||
// Aliases // | ||||
// /////// // | ||||
Alexandre Leroux
|
r1207 | using MetadataPool = std::vector<QVariantHash>; | ||
Q_DECLARE_METATYPE(MetadataPool) | ||||
Alexandre Leroux
|
r1200 | using Properties = QVariantHash; | ||
Alexandre Leroux
|
r1201 | // ///////// // | ||
// Constants // | ||||
// ///////// // | ||||
/// Max number of operations to generate | ||||
extern const QString NB_MAX_OPERATIONS_PROPERTY; | ||||
Alexandre Leroux
|
r1237 | |||
/// Max number of sync groups to create through operations | ||||
extern const QString NB_MAX_SYNC_GROUPS_PROPERTY; | ||||
Alexandre Leroux
|
r1201 | |||
/// Max number of variables to manipulate through operations | ||||
extern const QString NB_MAX_VARIABLES_PROPERTY; | ||||
Alexandre Leroux
|
r1204 | /// Set of operations available for the test | ||
extern const QString AVAILABLE_OPERATIONS_PROPERTY; | ||||
Alexandre Leroux
|
r1224 | /// Tolerance used for variable's cache (in ratio) | ||
extern const QString CACHE_TOLERANCE_PROPERTY; | ||||
Alexandre Leroux
|
r1223 | |||
/// Range with which the timecontroller is initialized | ||||
extern const QString INITIAL_RANGE_PROPERTY; | ||||
Alexandre Leroux
|
r1209 | /// Max range that an operation can reach | ||
extern const QString MAX_RANGE_PROPERTY; | ||||
Alexandre Leroux
|
r1207 | /// Set of metadata that can be associated to a variable | ||
extern const QString METADATA_POOL_PROPERTY; | ||||
/// Provider used to retrieve data | ||||
extern const QString PROVIDER_PROPERTY; | ||||
Alexandre Leroux
|
r1243 | /// Min/max times left for an operation to execute | ||
extern const QString OPERATION_DELAY_BOUNDS_PROPERTY; | ||||
Alexandre Leroux
|
r1219 | |||
Alexandre Leroux
|
r1228 | /// Validators used to validate an operation | ||
extern const QString VALIDATORS_PROPERTY; | ||||
Alexandre Leroux
|
r1220 | |||
Alexandre Leroux
|
r1244 | /// Min/max number of operations to execute before calling validation of the current test's state | ||
extern const QString VALIDATION_FREQUENCY_BOUNDS_PROPERTY; | ||||
Alexandre Leroux
|
r1220 | // /////// // | ||
// Structs // | ||||
// /////// // | ||||
class Variable; | ||||
struct VariableState { | ||||
std::shared_ptr<Variable> m_Variable{nullptr}; | ||||
SqpRange m_Range{INVALID_RANGE}; | ||||
}; | ||||
Alexandre Leroux
|
r1235 | using VariableId = int; | ||
using VariablesPool = std::map<VariableId, VariableState>; | ||||
/** | ||||
* Defines a synchronization group for a fuzzing state. A group reports the variables synchronized | ||||
* with each other, and the current range of the group (i.e. range of the last synchronized variable | ||||
* that has been moved) | ||||
*/ | ||||
struct SyncGroup { | ||||
std::set<VariableId> m_Variables{}; | ||||
SqpRange m_Range{INVALID_RANGE}; | ||||
}; | ||||
using SyncGroupId = QUuid; | ||||
using SyncGroupsPool = std::map<SyncGroupId, SyncGroup>; | ||||
/** | ||||
* Defines a current state during a fuzzing state. It contains all the variables manipulated during | ||||
* the test, as well as the synchronization status of these variables. | ||||
*/ | ||||
struct FuzzingState { | ||||
const SyncGroup &syncGroup(SyncGroupId id) const; | ||||
SyncGroup &syncGroup(SyncGroupId id); | ||||
const VariableState &variableState(VariableId id) const; | ||||
VariableState &variableState(VariableId id); | ||||
Alexandre Leroux
|
r1239 | /// @return the identifier of the synchronization group in which the variable passed in | ||
/// parameter is located. If the variable is not in any group, returns an invalid identifier | ||||
SyncGroupId syncGroupId(VariableId variableId) const; | ||||
Alexandre Leroux
|
r1240 | /// @return the set of synchronization group identifiers | ||
std::vector<SyncGroupId> syncGroupsIds() const; | ||||
/// Updates fuzzing state according to a variable synchronization | ||||
/// @param variableId the variable that is synchronized | ||||
/// @param syncGroupId the synchronization group | ||||
void synchronizeVariable(VariableId variableId, SyncGroupId syncGroupId); | ||||
Alexandre Leroux
|
r1241 | /// Updates fuzzing state according to a variable desynchronization | ||
/// @param variableId the variable that is desynchronized | ||||
/// @param syncGroupId the synchronization group from which to remove the variable | ||||
void desynchronizeVariable(VariableId variableId, SyncGroupId syncGroupId); | ||||
Alexandre Leroux
|
r1242 | /// Updates the range of a variable and all variables to which it is synchronized | ||
/// @param the variable for which to affect the range | ||||
/// @param the range to affect | ||||
void updateRanges(VariableId variableId, const SqpRange &newRange); | ||||
Alexandre Leroux
|
r1235 | |||
VariablesPool m_VariablesPool; | ||||
SyncGroupsPool m_SyncGroupsPool; | ||||
}; | ||||
Alexandre Leroux
|
r1200 | #endif // SCIQLOP_FUZZINGDEFS_H | ||