55#include " base/analysis/mcm/mcmdg.h"
66#include " base/analysis/mcm/mcmgraph.h"
77#include < base/analysis/mcm/mcmhoward.h>
8+ #include < base/analysis/mcm/mcmyto.h>
89#include " mcmtest.h"
910#include " testing.h"
1011
@@ -28,12 +29,12 @@ MCMgraph makeGraph1() {
2829 MCMnode &n3 = *g.addNode (3 );
2930 MCMnode &n4 = *g.addNode (4 );
3031 g.addEdge (0 , n0, n1, 1.0 , 1.0 );
31- g.addEdge (1 , n1, n2, 2.0 , 0 .0 );
32+ g.addEdge (1 , n1, n2, 2.0 , 4 .0 );
3233 g.addEdge (2 , n2, n3, 3.0 , 0.0 );
33- g.addEdge (3 , n3, n0, 4.0 , 0 .0 );
34- g.addEdge (4 , n3, n3, 2 .0 , 0.0 );
34+ g.addEdge (3 , n3, n0, 4.0 , 1 .0 );
35+ g.addEdge (4 , n3, n3, 1 .0 , 0.3 );
3536 g.addEdge (5 , n3, n4, 10.0 , 0.0 );
36- g.addEdge (6 , n4, n4, 1.0 , 0 .0 );
37+ g.addEdge (6 , n4, n4, 1.0 , 1 .0 );
3738 return g;
3839}
3940
@@ -93,15 +94,44 @@ void MCMTest::test_karp() {
9394 CDouble result = maximumCycleMeanKarp (g);
9495 ASSERT_APPROX_EQUAL (2.5 , result, 1e-5 );
9596
96- result = maximumCycleMeanKarpDouble (g, nullptr );
97+ const MCMnode *criticalNode;
98+ result = maximumCycleMeanKarpDouble (g, &criticalNode);
9799 ASSERT_APPROX_EQUAL (2.5 , result, 1e-5 );
100+ MCMnodes& nodes = g.getNodes ();
101+ ASSERT_THROW (criticalNode->id == 0 || criticalNode->id == 1 || criticalNode->id == 2
102+ || criticalNode->id == 3 );
98103
99-
100- ASSERT_APPROX_EQUAL (1.0 , 1.0 , 1e-5 );
101104}
102105
103106// / Test MCM YTO.
104107void MCMTest::test_yto () {
105108 std::cout << " Running test: MCM-YTO" << std::endl;
106- ASSERT_APPROX_EQUAL (1.0 , 1.0 , 1e-5 );
109+
110+ MCMgraph g = makeGraph1 ();
111+ CDouble result = maxCycleMeanYoungTarjanOrlin (g);
112+ ASSERT_APPROX_EQUAL (2.5 , result, 1e-5 );
113+
114+ std::shared_ptr<std::vector<const MCMedge *>> cycle;
115+ result = maxCycleMeanAndCriticalCycleYoungTarjanOrlin (g, &cycle);
116+ ASSERT_APPROX_EQUAL (2.5 , result, 1e-5 );
117+ ASSERT_THROW (cycle->size () == 4 );
118+ int eid = cycle->at (0 )->id ;
119+ ASSERT_THROW (eid == 0 || eid == 1 || eid == 2 || eid == 3 );
120+
121+ result = maxCycleRatioYoungTarjanOrlin (g);
122+ ASSERT_APPROX_EQUAL (10.0 /3.0 , result, 1e-5 );
123+
124+ result = maxCycleRatioAndCriticalCycleYoungTarjanOrlin (g, &cycle);
125+ ASSERT_APPROX_EQUAL (10.0 / 3.0 , result, 1e-5 );
126+ eid = cycle->at (0 )->id ;
127+ ASSERT_THROW (eid == 4 );
128+
129+ result = minCycleRatioYoungTarjanOrlin (g);
130+ ASSERT_APPROX_EQUAL (1.0 , result, 1e-5 );
131+
132+ result = minCycleRatioAndCriticalCycleYoungTarjanOrlin (g, &cycle);
133+ ASSERT_APPROX_EQUAL (1.0 , result, 1e-5 );
134+ eid = cycle->at (0 )->id ;
135+ ASSERT_THROW (eid == 6 );
136+
107137}
0 commit comments