##// END OF EJS Templates
Implements execute() method of sync operation
Alexandre Leroux -
r1240:b9a9a3a9f506
parent child
Show More
@@ -48,3 +48,30 SyncGroupId FuzzingState::syncGroupId(VariableId variableId) const
48 48 return it != end ? it->first : SyncGroupId{};
49 49 }
50 50
51 std::vector<SyncGroupId> FuzzingState::syncGroupsIds() const
52 {
53 std::vector<SyncGroupId> result{};
54
55 for (const auto &entry : m_SyncGroupsPool) {
56 result.push_back(entry.first);
57 }
58
59 return result;
60 }
61
62 void FuzzingState::synchronizeVariable(VariableId variableId, SyncGroupId syncGroupId)
63 {
64 if (syncGroupId.isNull()) {
65 return;
66 }
67
68 // Registers variable into sync group: if it's the first variable, sets the variable range as
69 // the sync group range
70 auto &syncGroup = m_SyncGroupsPool.at(syncGroupId);
71 syncGroup.m_Variables.insert(variableId);
72 if (syncGroup.m_Variables.size() == 1) {
73 auto &variableState = m_VariablesPool.at(variableId);
74 syncGroup.m_Range = variableState.m_Range;
75 }
76 }
77
@@ -97,6 +97,14 struct FuzzingState {
97 97 /// parameter is located. If the variable is not in any group, returns an invalid identifier
98 98 SyncGroupId syncGroupId(VariableId variableId) const;
99 99
100 /// @return the set of synchronization group identifiers
101 std::vector<SyncGroupId> syncGroupsIds() const;
102
103 /// Updates fuzzing state according to a variable synchronization
104 /// @param variableId the variable that is synchronized
105 /// @param syncGroupId the synchronization group
106 void synchronizeVariable(VariableId variableId, SyncGroupId syncGroupId);
107
100 108
101 109 VariablesPool m_VariablesPool;
102 110 SyncGroupsPool m_SyncGroupsPool;
@@ -160,6 +160,17 struct SynchronizeOperation : public IFuzzingOperation {
160 160 void execute(VariableId variableId, FuzzingState &fuzzingState,
161 161 VariableController &variableController, const Properties &) const override
162 162 {
163 auto &variableState = fuzzingState.variableState(variableId);
164
165 // Chooses a random synchronization group and adds the variable into sync group
166 auto syncGroupId = RandomGenerator::instance().randomChoice(fuzzingState.syncGroupsIds());
167 qCInfo(LOG_FuzzingOperations()).noquote()
168 << "Adding" << variableState.m_Variable->name() << "into synchronization group"
169 << syncGroupId << "...";
170 variableController.onAddSynchronized(variableState.m_Variable, syncGroupId);
171
172 // Updates state
173 fuzzingState.synchronizeVariable(variableId, syncGroupId);
163 174 }
164 175 };
165 176
General Comments 0
You need to be logged in to leave comments. Login now