diff --git a/main.cpp b/main.cpp index 91f74f793e47b7e7627d2099d3e8445392433205..cec38db6bca6a26ae9b79cb363b2a87e0409b675 100644 --- a/main.cpp +++ b/main.cpp @@ -2,6 +2,7 @@ #include <iterator> #include <memory> #include <vector> +#include <ctime> namespace recursive_storage{ template<class T> @@ -65,11 +66,11 @@ public: { for(auto it= std::begin(_childs);it!=std::end(_childs);it++) if((*it)->id() == t.id()) - _childs.erase(it); + _childs.erase(it); for(auto it= std::begin(_bad_childs);it!=std::end(_bad_childs);it++) if((*it).lock()->id() == t.id()) - _bad_childs.erase(it); + _bad_childs.erase(it); } void flow_after(std::function<bool(node<T>&)> funct) @@ -131,7 +132,7 @@ class graph private: static void erase(node<T>& root , node<T>& to_del) { - root.flow_after([&to_del](node<T>& t){ int i= t.childs().size(); t.erase_child(to_del); if(i>t.childs().size()) return true; return false; }); + root.flow_after([&to_del](node<T>& t){ t.erase_child(to_del); return false; }); } public: @@ -205,6 +206,8 @@ public: void connect(node& n, node& o) { + if(n.id()==o.id()) + return; bool foundn=false; bool foundo=false; for(auto& i : nodes) @@ -347,6 +350,71 @@ void test() int main() { + time_t start,end; + //std::cout<<localtime(&now)->tm_sec<<std::endl; + + std::cout<<"test1 : create 10000000 1 node graph"<<std::endl; + start=time(0); + { + for(size_t i=0;i<10000000;i++) + { + local_storage::graph<int> graph{}; + graph.add_node(6); + } + } + end=time(0); + std::cout<<"local_storage: " + <<localtime(&end)->tm_min-localtime(&start)->tm_min<<"m" + <<localtime(&end)->tm_sec-localtime(&start)->tm_sec<<"s"<<std::endl; + start=time(0); + { + for(size_t i=0;i<10000000;i++) + { + recursive_storage::node<int> node{6}; + } + } + end=time(0); + std::cout<<"recursive_storage: " + <<localtime(&end)->tm_min-localtime(&start)->tm_min<<"m" + <<localtime(&end)->tm_sec-localtime(&start)->tm_sec<<"s"; + + std::cout<<"test1 : create 100000 5 node full connected graph"<<std::endl; + start=time(0); + { + for(size_t i=0;i<100000;i++) + { + local_storage::graph<int> graph{}; + graph.add_node(6); + graph.add_node(6); + graph.add_node(6); + graph.add_node(6); + graph.add_node(6); + for(size_t j=0;j<5;j++) + for(size_t l=0;l<5;l++) + graph.connect(graph[j],graph[l]); + } + } + end=time(0); + std::cout<<"local_storage: " + <<localtime(&end)->tm_min-localtime(&start)->tm_min<<"m" + <<localtime(&end)->tm_sec-localtime(&start)->tm_sec<<"s"<<std::endl; + start=time(0); + { + for(unsigned int i=0;i<100000;i++) + { + recursive_storage::node<int> node{6}; + for(size_t j=0;j<4;j++) + node.add_child(6); + auto& childs= node.childs(); + for(auto& child:childs) + for(auto& child2:childs) + child.add_child(child2); + } + } + end=time(0); + std::cout<<"recursive_storage: " + <<localtime(&end)->tm_min-localtime(&start)->tm_min<<"m" + <<localtime(&end)->tm_sec-localtime(&start)->tm_sec<<"s"; local_storage::graph<int> g{}; g.add_node(6); auto& t2=g.add_node(6); @@ -356,6 +424,6 @@ int main() g.connect(t2,g[0]); std::cout<<std::endl<<g.get_childs(t2).size()<<std::endl; g.flow_before(g[0],[](local_storage::graph<int>::node& a){std::cout<<a.data()<<":"<<a.id()<<std::endl;}); - test(); + //test(); return 0; }