@@ -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
2425MCMgraph makeGraph1 () {
@@ -181,6 +182,8 @@ void MCMTest::test_karp() {
181182
182183}
183184
185+
186+
184187// / Test MCM YTO.
185188void 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+ }
0 commit comments