1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/benchmark/edge_lookup.cc Thu Oct 12 10:53:25 2006 +0000
1.3 @@ -0,0 +1,137 @@
1.4 +// #include<lemon/edge_lookup.h>
1.5 +#include<lemon/edge_lookup_test.h>
1.6 +#include<lemon/smart_graph.h>
1.7 +#include<vector>
1.8 +#include<lemon/time_measure.h>
1.9 +
1.10 +using namespace lemon;
1.11 +
1.12 +GRAPH_TYPEDEFS(SmartGraph)
1.13 +typedef SmartGraph Graph;
1.14 +
1.15 +class FE
1.16 +{
1.17 +public:
1.18 + Graph &_g;
1.19 + FE(Graph &g) :_g(g) {}
1.20 + void operator()()
1.21 + {
1.22 + Edge e;
1.23 +
1.24 + for(NodeIt v(_g);v!=INVALID;++v)
1.25 + for(NodeIt u(_g);u!=INVALID;++u)
1.26 + e=findEdge(_g,u,v);
1.27 + }
1.28 +
1.29 +};
1.30 +
1.31 +class EL
1.32 +{
1.33 +public:
1.34 + Graph &_g;
1.35 + EdgeLookUp<Graph> _el;
1.36 + EL(Graph &g) :_g(g), _el(g) {}
1.37 + void operator()()
1.38 + {
1.39 + Edge e;
1.40 +
1.41 + for(NodeIt v(_g);v!=INVALID;++v)
1.42 + for(NodeIt u(_g);u!=INVALID;++u)
1.43 + e=_el(u,v);
1.44 + }
1.45 +
1.46 +};
1.47 +class EL2
1.48 +{
1.49 +public:
1.50 + Graph &_g;
1.51 + EdgeLookUp2<Graph> _el;
1.52 + EL2(Graph &g) :_g(g), _el(g) {}
1.53 + void operator()()
1.54 + {
1.55 + Edge e;
1.56 +
1.57 + for(NodeIt v(_g);v!=INVALID;++v)
1.58 + for(NodeIt u(_g);u!=INVALID;++u)
1.59 + e=_el(u,v);
1.60 + }
1.61 +
1.62 +};
1.63 +
1.64 +class EL3
1.65 +{
1.66 +public:
1.67 + Graph &_g;
1.68 + EdgeLookUp3<Graph> _el;
1.69 + EL3(Graph &g) :_g(g), _el(g) {}
1.70 + void operator()()
1.71 + {
1.72 + Edge e;
1.73 +
1.74 + for(NodeIt v(_g);v!=INVALID;++v)
1.75 + for(NodeIt u(_g);u!=INVALID;++u)
1.76 + e=_el(u,v);
1.77 + }
1.78 +
1.79 +};
1.80 +
1.81 +class EL4
1.82 +{
1.83 +public:
1.84 + Graph &_g;
1.85 + EdgeLookUp4<Graph> _el;
1.86 + EL4(Graph &g) :_g(g), _el(g) {}
1.87 + void operator()()
1.88 + {
1.89 + Edge e;
1.90 +
1.91 + for(NodeIt v(_g);v!=INVALID;++v)
1.92 + for(NodeIt u(_g);u!=INVALID;++u)
1.93 + e=_el(u,v);
1.94 + }
1.95 +
1.96 +};
1.97 +
1.98 +int main(int argc, char**argv)
1.99 +{
1.100 + int N=atoi(argv[1]);
1.101 + int M=int(N*atof(argv[2]));
1.102 +
1.103 + Graph g;
1.104 +
1.105 + std::vector<Node> v;
1.106 + for(int i=0;i<N;i++) v.push_back(g.addNode());
1.107 + for(int i=0;i<M;i++) g.addEdge(v[int(drand48()*N)],v[int(drand48()*N)]);
1.108 +
1.109 +// {
1.110 +// Edge e;
1.111 +
1.112 +// TimeReport t("findEdge: ");
1.113 +// for(NodeIt u(g);u!=INVALID;++u)
1.114 +// for(NodeIt v(g);v!=INVALID;++v)
1.115 +// e=findEdge(g,u,v);
1.116 +// }
1.117 +// {
1.118 +// Edge e;
1.119 +// EdgeLookUp<Graph> el(g);
1.120 +
1.121 +// TimeReport t("EdgeLookUp: ");
1.122 +// for(NodeIt u(g);u!=INVALID;++u)
1.123 +// for(NodeIt v(g);v!=INVALID;++v)
1.124 +// e=el(u,v);
1.125 +// }
1.126 +
1.127 +
1.128 + TimeStamp t1 = runningTimeTest(FE(g),1);
1.129 + TimeStamp t2 = runningTimeTest(EL(g),1);
1.130 + TimeStamp t3 = runningTimeTest(EL2(g),1);
1.131 + TimeStamp t4 = runningTimeTest(EL3(g),1);
1.132 + TimeStamp t5 = runningTimeTest(EL4(g),1);
1.133 +
1.134 + std::cout << t1.userTime()/N/N << ' '
1.135 + << t2.userTime()/N/N << ' '
1.136 + << t3.userTime()/N/N << ' '
1.137 + << t4.userTime()/N/N << ' '
1.138 + << t5.userTime()/N/N << std::endl;
1.139 +}
1.140 +