benchmark/edge_lookup.cc
changeset 2235 48801095a410
child 2238 8d623100ab13
     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 +