Skip to content

Commit 208c2f6

Browse files
committed
fix pruning and add test
1 parent 35a3d91 commit 208c2f6

File tree

3 files changed

+105
-0
lines changed

3 files changed

+105
-0
lines changed

src/base/analysis/mcm/mcmgraph.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,8 @@ std::shared_ptr<MCMgraph> MCMgraph::pruneEdges() {
725725
// for every node
726726
for (auto &u : this->nodes) {
727727

728+
local.paretoEdges.clear();
729+
728730
// for every outgoing edges to a simple cull Pareto filtering
729731
for (auto &i : u.out) {
730732
local.insert(i);

src/testbench/base/mcmtest.cc

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ void MCMTest::Run() {
1919
this->test_howard();
2020
this->test_karp();
2121
this->test_yto();
22+
this->test_prune();
2223
};
2324

2425
MCMgraph makeGraph1() {
@@ -181,6 +182,8 @@ void MCMTest::test_karp() {
181182

182183
}
183184

185+
186+
184187
/// Test MCM YTO.
185188
void MCMTest::test_yto() {
186189
std::cout << "Running test: MCM-YTO" << std::endl;
@@ -212,6 +215,7 @@ void MCMTest::test_yto() {
212215
eid = cycle->at(0)->id;
213216
ASSERT_THROW(eid == 6);
214217

218+
// TODO: check of the cycle ratio are identical to old SDF3
215219
CDouble expectedMinCycleRatios[] = {
216220
0.526141, 0.124523, 0.0389826, 0.289127, 0.11451, 0.723313, 1.07027,
217221
0.956067, 0.570066, 0.746341, 0.33622, 0.475978, 0.902663, 1.02951,
@@ -272,3 +276,101 @@ void MCMTest::test_yto() {
272276

273277

274278
}
279+
280+
void MCMTest::test_prune() {
281+
282+
MCMgraph mcmGraph;
283+
auto& n36 = *mcmGraph.addNode(36);
284+
auto& n37 = *mcmGraph.addNode(37);
285+
auto& n38 = *mcmGraph.addNode(38);
286+
auto& n39 = *mcmGraph.addNode(39);
287+
auto& n40 = *mcmGraph.addNode(40);
288+
289+
290+
mcmGraph.addEdge(0, n36, n36, 5.83e+06, 1);
291+
mcmGraph.addEdge(1, n36, n37, 1.52647e+07, 1);
292+
mcmGraph.addEdge(2, n37, n37, 5.83e+06, 1);
293+
mcmGraph.addEdge(3, n38, n37, 9.43472e+06, 1);
294+
mcmGraph.addEdge(4, n39, n37, 8.72299e+06, 1);
295+
mcmGraph.addEdge(5, n40, n37, 8.72299e+06, 1);
296+
mcmGraph.addEdge(6, n36, n38, 7.01739e+06, 1);
297+
mcmGraph.addEdge(7, n38, n38, 1.18739e+06, 1);
298+
mcmGraph.addEdge(8, n36, n39, 1.22848e+07, 1);
299+
mcmGraph.addEdge(9, n38, n39, 6.45482e+06, 1);
300+
mcmGraph.addEdge(10, n39, n39, 5.74309e+06, 1);
301+
mcmGraph.addEdge(11, n36, n40, 1.23277e+07, 1);
302+
mcmGraph.addEdge(12, n38, n40, 6.49772e+06, 1);
303+
mcmGraph.addEdge(13, n39, n40, 5.78599e+06, 1);
304+
mcmGraph.addEdge(14, n40, n40, 5.78599e+06, 1);
305+
mcmGraph.addEdge(15, n36, n36, 5.83e+06, 1);
306+
mcmGraph.addEdge(16, n36, n37, 1.32964e+07, 1);
307+
mcmGraph.addEdge(17, n37, n37, 4.64e+06, 1);
308+
mcmGraph.addEdge(18, n38, n37, 7.46636e+06, 1);
309+
mcmGraph.addEdge(19, n39, n37, 6.93511e+06, 1);
310+
mcmGraph.addEdge(20, n40, n37, 6.93511e+06, 1);
311+
mcmGraph.addEdge(21, n36, n38, 6.65645e+06, 1);
312+
mcmGraph.addEdge(22, n38, n38, 826446, 1);
313+
mcmGraph.addEdge(23, n36, n39, 1.09086e+07, 1);
314+
mcmGraph.addEdge(24, n38, n39, 5.07857e+06, 1);
315+
mcmGraph.addEdge(25, n39, n39, 4.54732e+06, 1);
316+
mcmGraph.addEdge(26, n36, n40, 1.09515e+07, 1);
317+
mcmGraph.addEdge(27, n38, n40, 5.12147e+06, 1);
318+
mcmGraph.addEdge(28, n39, n40, 4.59021e+06, 1);
319+
mcmGraph.addEdge(29, n40, n40, 4.59021e+06, 1);
320+
mcmGraph.addEdge(30, n36, n36, 5.83e+06, 1);
321+
mcmGraph.addEdge(31, n36, n37, 1.49199e+07, 1);
322+
mcmGraph.addEdge(32, n37, n37, 5.76e+06, 1);
323+
mcmGraph.addEdge(33, n38, n37, 9.08995e+06, 1);
324+
mcmGraph.addEdge(34, n39, n37, 8.61563e+06, 1);
325+
mcmGraph.addEdge(35, n40, n37, 8.61563e+06, 1);
326+
mcmGraph.addEdge(36, n36, n38, 6.54258e+06, 1);
327+
mcmGraph.addEdge(37, n38, n38, 712576, 1);
328+
mcmGraph.addEdge(38, n36, n39, 1.19727e+07, 1);
329+
mcmGraph.addEdge(39, n38, n39, 6.14268e+06, 1);
330+
mcmGraph.addEdge(40, n39, n39, 5.66836e+06, 1);
331+
mcmGraph.addEdge(41, n36, n40, 1.20156e+07, 1);
332+
mcmGraph.addEdge(42, n38, n40, 6.18558e+06, 1);
333+
mcmGraph.addEdge(43, n39, n40, 5.71125e+06, 1);
334+
mcmGraph.addEdge(44, n40, n40, 5.71125e+06, 1);
335+
mcmGraph.addEdge(45, n36, n36, 5.83e+06, 1);
336+
mcmGraph.addEdge(46, n36, n37, 1.51086e+07, 1);
337+
mcmGraph.addEdge(47, n37, n37, 5.83e+06, 1);
338+
mcmGraph.addEdge(48, n38, n37, 9.27858e+06, 1);
339+
mcmGraph.addEdge(49, n39, n37, 8.12511e+06, 1);
340+
mcmGraph.addEdge(50, n40, n37, 8.72299e+06, 1);
341+
mcmGraph.addEdge(51, n36, n38, 6.7051e+06, 1);
342+
mcmGraph.addEdge(52, n38, n38, 875098, 1);
343+
mcmGraph.addEdge(53, n36, n39, 1.09329e+07, 1);
344+
mcmGraph.addEdge(54, n38, n39, 5.1029e+06, 1);
345+
mcmGraph.addEdge(55, n39, n39, 4.54732e+06, 1);
346+
mcmGraph.addEdge(56, n36, n40, 1.21716e+07, 1);
347+
mcmGraph.addEdge(57, n38, n40, 6.34157e+06, 1);
348+
mcmGraph.addEdge(58, n39, n40, 5.1881e+06, 1);
349+
mcmGraph.addEdge(59, n40, n40, 5.78599e+06, 1);
350+
mcmGraph.addEdge(60, n36, n36, 5.83e+06, 1);
351+
mcmGraph.addEdge(61, n36, n37, 1.44916e+07, 1);
352+
mcmGraph.addEdge(62, n37, n37, 4.64e+06, 1);
353+
mcmGraph.addEdge(63, n38, n37, 8.66157e+06, 1);
354+
mcmGraph.addEdge(64, n39, n37, 8.10599e+06, 1);
355+
mcmGraph.addEdge(65, n40, n37, 7.5081e+06, 1);
356+
mcmGraph.addEdge(66, n36, n38, 6.7051e+06, 1);
357+
mcmGraph.addEdge(67, n38, n38, 875098, 1);
358+
mcmGraph.addEdge(68, n36, n39, 1.21716e+07, 1);
359+
mcmGraph.addEdge(69, n38, n39, 6.34157e+06, 1);
360+
mcmGraph.addEdge(70, n39, n39, 5.78599e+06, 1);
361+
mcmGraph.addEdge(71, n40, n39, 5.1881e+06, 1);
362+
mcmGraph.addEdge(72, n36, n40, 1.09329e+07, 1);
363+
mcmGraph.addEdge(73, n38, n40, 5.1029e+06, 1);
364+
mcmGraph.addEdge(74, n40, n40, 4.54732e+06, 1);
365+
366+
std::shared_ptr<MCMgraph> result = mcmGraph.pruneEdges();
367+
368+
369+
CDouble mcr1 = maxCycleRatioAndCriticalCycleYoungTarjanOrlin(mcmGraph, nullptr);
370+
ASSERT_APPROX_EQUAL(mcr1, 5.83e+06, 1e3);
371+
372+
CDouble mcr2 = maxCycleRatioAndCriticalCycleYoungTarjanOrlin(*result, nullptr);
373+
374+
ASSERT_APPROX_EQUAL(mcr1, mcr2, 1e3);
375+
376+
}

src/testbench/base/mcmtest.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ class MCMTest : public ::testing::Test {
1717
void test_howard();
1818
void test_karp();
1919
void test_yto();
20+
void test_prune();
2021
};

0 commit comments

Comments
 (0)