diff --git a/src/heuristic/HeuristicMapper.cpp b/src/heuristic/HeuristicMapper.cpp index 70825d3aa..33196eabd 100644 --- a/src/heuristic/HeuristicMapper.cpp +++ b/src/heuristic/HeuristicMapper.cpp @@ -672,8 +672,7 @@ HeuristicMapper::Node HeuristicMapper::aStarMap(size_t layer, bool reverse) { const std::chrono::duration diff = end - start; results.heuristicBenchmark.secondsPerNode += diff.count(); - layerResultsIt->generatedNodes = - layerResultsIt->expandedNodes + nodes.size(); + layerResultsIt->generatedNodes = nextNodeId; results.heuristicBenchmark.generatedNodes += layerResultsIt->generatedNodes; if (layerResultsIt->expandedNodes > 0) { diff --git a/test/test_heuristic.cpp b/test/test_heuristic.cpp index c5c46e5c3..363afd44a 100644 --- a/test/test_heuristic.cpp +++ b/test/test_heuristic.cpp @@ -165,6 +165,34 @@ TEST(Functionality, EmptyDump) { EXPECT_THROW(mapper.dumpResult("test.dummy"), QMAPException); } +TEST(Functionality, BenchmarkGeneratedNodes) { + qc::QuantumComputation qc{16, 16}; + qc.cx(qc::Control{0}, 6); + for (std::size_t i = 0; i < 16; ++i) { + qc.measure(static_cast(i), i); + } + Architecture ibmQX5{}; + ibmQX5.loadCouplingMap(AvailableArchitecture::IbmQx5); + auto ibmQX5Mapper = std::make_unique(qc, ibmQX5); + + Configuration settings{}; + settings.admissibleHeuristic = true; + settings.lookahead = false; + settings.layering = Layering::IndividualGates; + settings.automaticLayerSplits = false; + settings.initialLayout = InitialLayout::Identity; + settings.preMappingOptimizations = false; + settings.postMappingOptimizations = false; + settings.considerFidelity = false; + settings.useTeleportation = false; + settings.debug = true; + ibmQX5Mapper->map(settings); + auto results = ibmQX5Mapper->getResults(); + + EXPECT_EQ(results.heuristicBenchmark.generatedNodes, 30); + EXPECT_EQ(results.layerHeuristicBenchmark.at(0).generatedNodes, 30); +} + TEST(Functionality, InvalidSettings) { qc::QuantumComputation qc{1}; qc.x(0);