From 49148af30f42baf101e32581c48acdf4540b6442 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 10 Sep 2010 12:58:24 +0200 Subject: Allow the test to specify max number of connections Use this in common/threads. --- common/threads/driver.cxx | 58 +++++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 19 deletions(-) (limited to 'common/threads/driver.cxx') diff --git a/common/threads/driver.cxx b/common/threads/driver.cxx index e996dae..539db5f 100644 --- a/common/threads/driver.cxx +++ b/common/threads/driver.cxx @@ -8,6 +8,7 @@ #include #include // std::auto_ptr +#include // std::size_t #include #include @@ -109,35 +110,54 @@ struct task unsigned long n_; }; - -int -main (int argc, char* argv[]) +void +test (int argc, char* argv[], size_t max_connections) { - try + auto_ptr db (create_database (argc, argv, max_connections)); + + vector > threads; + vector > tasks; + + for (unsigned long i (0); i < thread_count; ++i) { - auto_ptr db (create_database (argc, argv)); + details::shared_ptr t (new (details::shared) task (*db, i)); + tasks.push_back (t); - vector > threads; - vector > tasks; + threads.push_back ( + details::shared_ptr ( + new (details::shared) details::thread (&task::execute, t.get ()))); + } - for (unsigned long i (0); i < thread_count; ++i) - { - details::shared_ptr t (new (details::shared) task (*db, i)); - tasks.push_back (t); + for (unsigned long i (0); i < thread_count; ++i) + threads[i]->join (); - threads.push_back ( - details::shared_ptr ( - new (details::shared) details::thread (&task::execute, t.get ()))); - } + { + typedef odb::result result; + + transaction t (db->begin_transaction ()); + result r (db->query ()); + r.cache (); - for (unsigned long i (0); i < thread_count; ++i) - threads[i]->join (); + for (result::iterator i (r.begin ()); i != r.end (); ++i) + db->erase (i->id_); + + t.commit (); + } +} + +int +main (int argc, char* argv[]) +{ + try + { + test (argc, argv, 0); + test (argc, argv, thread_count - 1); + test (argc, argv, thread_count / 2); + test (argc, argv, thread_count / 4); } catch (const odb::exception& e) { cerr << e.what () << endl; return 1; } - - // pthread_exit (0); } -- cgit v1.1