11#include " failingCaseFinder.h"
22#include " environment/environment.h"
33#include " backend/evaluator/evaluator.h"
4+ #include " backend/evaluator/simulator/evalLogicSimulator.h"
45#include " backend/container/block/blockDefs.h"
56
67std::unique_ptr<FuzzTestcase> FailingCaseFinder::findFailingCases (unsigned int maxAttempts, const std::vector<FuzzBlockType>& blockTypesUsed) {
@@ -55,9 +56,8 @@ std::unique_ptr<FuzzTestcase> FailingCaseFinder::tryMakeFailingCase(const std::v
5556 Environment environment { false };
5657 circuit_id_t circuitId = environment.getBackend ().getCircuitManager ().createNewCircuit (false );
5758 SharedCircuit circuit = environment.getBackend ().getCircuit (circuitId);
58- evaluator_id_t evalId = environment.getBackend ().createEvaluator (circuitId).value ();
59- SharedEvaluator tEval = environment.getBackend ().getEvaluator (evalId); // test evaluator
60- SharedEvaluator rEval = nullptr ; // reference evaluator
59+ simulator_id_t simulatorId = environment.getBackend ().createSimulator (circuitId).value ();
60+ EvalLogicSimulator* tSimulator = environment.getBackend ().getSimulator (simulatorId); // test evaluator
6161
6262 std::vector<BlockType> blockTypesUsable = makeBlockTypesUsableVector (blockTypesUsed, environment);
6363
@@ -149,15 +149,18 @@ std::unique_ptr<FuzzTestcase> FailingCaseFinder::tryMakeFailingCase(const std::v
149149 }
150150 }
151151
152- evaluator_id_t refEvalId = environment.getBackend ().createEvaluator (circuitId).value ();
153- rEval = environment.getBackend ().getEvaluator (refEvalId);
154- tEval->setRealistic (runRealistic);
155- rEval->setRealistic (runRealistic);
152+
153+ Evaluator rEvaluator (environment.getBackend ().getCircuitManager (), *circuit, environment.getBackend ().getDataUpdateEventManager ());
154+ simulator_id_t refSimulatorId = simulator_id_t (1000000 + simulatorId.get ());
155+ EvalLogicSimulator rSimulator (refSimulatorId, environment.getBackend ().getCircuitManager (), circuitId, environment.getBackend ().getDataUpdateEventManager ());
156+
157+ tSimulator->setRealistic (runRealistic);
158+ rSimulator.setRealistic (runRealistic);
156159 testcase->setRealistic (runRealistic);
157- tEval ->resetStates ();
158- rEval-> resetStates ();
159- std::vector<simulator_id_t > simulatorIdsTest;
160- std::vector<simulator_id_t > simulatorIdsRef;
160+ tSimulator ->resetStates ();
161+ rSimulator. resetStates ();
162+ std::vector<simulator_gate_id_t > simulatorIdsTest;
163+ std::vector<simulator_gate_id_t > simulatorIdsRef;
161164 std::unordered_map<block_id_t , Position> blockIdToPosition;
162165
163166 logInfo (" Mapping block IDs to positions..." , " FailingCaseFinder::tryMakeFailingCase" );
@@ -167,19 +170,19 @@ std::unique_ptr<FuzzTestcase> FailingCaseFinder::tryMakeFailingCase(const std::v
167170 if (block == nullptr ) continue ;
168171 Position pos = block->getPosition ();
169172 blockIdToPosition[blockId] = pos;
170- simulatorIdsTest.push_back (tEval-> getBlockSimulatorId ( pos));
171- simulatorIdsRef.push_back (rEval-> getBlockSimulatorId ( pos));
173+ simulatorIdsTest.push_back (std::get< simulator_gate_id_t >(tSimulator-> getVirtualConnectionSimulatorId ( Address ( pos), 0 ) ));
174+ simulatorIdsRef.push_back (std::get< simulator_gate_id_t >(tSimulator-> getVirtualConnectionSimulatorId ( Address ( pos), 0 ) ));
172175 const BlockData* blockData = blockDataManager.getBlockData (block->type ());
173176 if (blockData == nullptr ) continue ;
174177 if (blockData->isDefaultData ()) {
175- std::variant<simulator_id_t , std::vector<simulator_id_t >> simIdTest = tEval ->getPinSimulatorId (pos);
176- std::variant<simulator_id_t , std::vector<simulator_id_t >> simIdRef = rEval-> getPinSimulatorId (pos);
177- if (std::holds_alternative<simulator_id_t >(simIdTest) && std::holds_alternative<simulator_id_t >(simIdRef)) {
178- simulatorIdsTest.push_back (std::get<simulator_id_t >(simIdTest));
179- simulatorIdsRef.push_back (std::get<simulator_id_t >(simIdRef));
180- } else if (std::holds_alternative<std::vector<simulator_id_t >>(simIdTest) && std::holds_alternative<std::vector<simulator_id_t >>(simIdRef)) {
181- std::vector<simulator_id_t >& vecTest = std::get<std::vector<simulator_id_t >>(simIdTest);
182- std::vector<simulator_id_t >& vecRef = std::get<std::vector<simulator_id_t >>(simIdRef);
178+ std::variant<simulator_gate_id_t , std::vector<simulator_gate_id_t >> simIdTest = tSimulator ->getPinSimulatorId (pos);
179+ std::variant<simulator_gate_id_t , std::vector<simulator_gate_id_t >> simIdRef = rSimulator. getPinSimulatorId (pos);
180+ if (std::holds_alternative<simulator_gate_id_t >(simIdTest) && std::holds_alternative<simulator_gate_id_t >(simIdRef)) {
181+ simulatorIdsTest.push_back (std::get<simulator_gate_id_t >(simIdTest));
182+ simulatorIdsRef.push_back (std::get<simulator_gate_id_t >(simIdRef));
183+ } else if (std::holds_alternative<std::vector<simulator_gate_id_t >>(simIdTest) && std::holds_alternative<std::vector<simulator_gate_id_t >>(simIdRef)) {
184+ std::vector<simulator_gate_id_t >& vecTest = std::get<std::vector<simulator_gate_id_t >>(simIdTest);
185+ std::vector<simulator_gate_id_t >& vecRef = std::get<std::vector<simulator_gate_id_t >>(simIdRef);
183186 simulatorIdsTest.insert (simulatorIdsTest.end (), vecTest.begin (), vecTest.end ());
184187 simulatorIdsRef.insert (simulatorIdsRef.end (), vecRef.begin (), vecRef.end ());
185188 } else {
@@ -193,14 +196,14 @@ std::unique_ptr<FuzzTestcase> FailingCaseFinder::tryMakeFailingCase(const std::v
193196 }
194197 std::optional<Position> portPositionOpt = block->getConnectionPosition (connectionId);
195198 Position portPosition = portPositionOpt.value ();
196- std::variant<simulator_id_t , std::vector<simulator_id_t >> simIdTest = tEval ->getPinSimulatorId (portPosition);
197- std::variant<simulator_id_t , std::vector<simulator_id_t >> simIdRef = rEval-> getPinSimulatorId (portPosition);
198- if (std::holds_alternative<simulator_id_t >(simIdTest) && std::holds_alternative<simulator_id_t >(simIdRef)) {
199- simulatorIdsTest.push_back (std::get<simulator_id_t >(simIdTest));
200- simulatorIdsRef.push_back (std::get<simulator_id_t >(simIdRef));
201- } else if (std::holds_alternative<std::vector<simulator_id_t >>(simIdTest) && std::holds_alternative<std::vector<simulator_id_t >>(simIdRef)) {
202- std::vector<simulator_id_t >& vecTest = std::get<std::vector<simulator_id_t >>(simIdTest);
203- std::vector<simulator_id_t >& vecRef = std::get<std::vector<simulator_id_t >>(simIdRef);
199+ std::variant<simulator_gate_id_t , std::vector<simulator_gate_id_t >> simIdTest = tSimulator ->getPinSimulatorId (portPosition);
200+ std::variant<simulator_gate_id_t , std::vector<simulator_gate_id_t >> simIdRef = rSimulator. getPinSimulatorId (portPosition);
201+ if (std::holds_alternative<simulator_gate_id_t >(simIdTest) && std::holds_alternative<simulator_gate_id_t >(simIdRef)) {
202+ simulatorIdsTest.push_back (std::get<simulator_gate_id_t >(simIdTest));
203+ simulatorIdsRef.push_back (std::get<simulator_gate_id_t >(simIdRef));
204+ } else if (std::holds_alternative<std::vector<simulator_gate_id_t >>(simIdTest) && std::holds_alternative<std::vector<simulator_gate_id_t >>(simIdRef)) {
205+ std::vector<simulator_gate_id_t >& vecTest = std::get<std::vector<simulator_gate_id_t >>(simIdTest);
206+ std::vector<simulator_gate_id_t >& vecRef = std::get<std::vector<simulator_gate_id_t >>(simIdRef);
204207 if (vecTest.size () != vecRef.size ()){
205208 return testcase;
206209 }
@@ -222,23 +225,23 @@ std::unique_ptr<FuzzTestcase> FailingCaseFinder::tryMakeFailingCase(const std::v
222225 block_id_t blockId = blockIds[gen () % blockIds.size ()];
223226 Position pos = blockIdToPosition.at (blockId);
224227 logic_state_t state = logic_state_t (gen () % 4 );
225- rEval-> setState (pos, state);
226- tEval ->setState (pos, state);
228+ rSimulator. setState (pos, state);
229+ tSimulator ->setState (pos, state);
227230 testcase->addTestAction (SetBlockStateAction { pos, state });
228231 }
229232
230- std::vector<logic_state_t > statesTest = tEval-> getStatesFromSimulatorIds (simulatorIdsTest);
231- std::vector<logic_state_t > statesRef = rEval-> getStatesFromSimulatorIds (simulatorIdsRef);
233+ std::vector<logic_state_t > statesTest = tSimulator-> getStates (simulatorIdsTest);
234+ std::vector<logic_state_t > statesRef = rSimulator. getStates (simulatorIdsRef);
232235 for (size_t k = 0 ; k < statesTest.size (); ++k) {
233236 if (statesTest[k] != statesRef[k]) {
234237 return testcase;
235238 }
236239 }
237- tEval ->tickStep (numTicksBetweenTests);
238- rEval-> tickStep (numTicksBetweenTests);
240+ tSimulator ->tickStep (numTicksBetweenTests);
241+ rSimulator. tickStep (numTicksBetweenTests);
239242 testcase->addTestAction (TickEvalAction { static_cast <unsigned int >(numTicksBetweenTests) });
240- statesTest = tEval-> getStatesFromSimulatorIds (simulatorIdsTest);
241- statesRef = rEval-> getStatesFromSimulatorIds (simulatorIdsRef);
243+ statesTest = tSimulator-> getStates (simulatorIdsTest);
244+ statesRef = rSimulator. getStates (simulatorIdsRef);
242245 for (size_t k = 0 ; k < statesTest.size (); ++k) {
243246 if (statesTest[k] != statesRef[k]) {
244247 return testcase;
0 commit comments