Skip to content

Commit 45ba45c

Browse files
committed
added yto test
1 parent 600efd0 commit 45ba45c

File tree

2 files changed

+40
-10
lines changed

2 files changed

+40
-10
lines changed

include/maxplus/base/analysis/mcm/mcmyto.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ using graph = struct Graph {
104104
* The function computes the maximum cycle mean of edge weight per edge of
105105
* an MCMgraph using Young-Tarjan-Orlin's algorithm.
106106
*/
107-
CDouble maxCycleMeanYoungTarjanOrlin(const MCMgraph& mcmGraph);
107+
CDouble maxCycleMeanYoungTarjanOrlin(MCMgraph& mcmGraph);
108108

109109
/**
110110
* maxCycleMeanAndCriticalCycleYoungTarjanOrlin ()
@@ -124,7 +124,7 @@ maxCycleMeanAndCriticalCycleYoungTarjanOrlin(MCMgraph& mcmGraph, std::shared_ptr
124124
* The function computes the maximum cycle ratio of edge weight over delay of
125125
* an MCMgraph using Young-Tarjan-Orlin's algorithm.
126126
*/
127-
CDouble maxCycleRatioYoungTarjanOrlin(const MCMgraph& mcmGraph);
127+
CDouble maxCycleRatioYoungTarjanOrlin(MCMgraph& mcmGraph);
128128

129129
/**
130130
* maxCycleRatioAndCriticalCycleYoungTarjanOrlin ()

src/testbench/base/mcmtest.cc

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
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.
104107
void 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

Comments
 (0)