#include #include #include #include #include int expected_value(int num_iters) { int i = 0; for (int k = 0; k usepaths; usepaths.push_back(""); if (usepath) { usepaths.push_back(usepath); } std::vector modulepaths; modulepaths.push_back(""); if (modulepath) { modulepaths.push_back(modulepath); } chaiscript::ChaiScript chai(modulepaths,usepaths); boost::thread_group threads; // Ensure at least two, but say only 7 on an 8 core processor int num_threads = std::max(boost::thread::hardware_concurrency() - 1, 2u); for (int i = 0; i < num_threads; ++i) { threads.create_thread(boost::bind(&do_work, boost::ref(chai), i)); } threads.join_all(); for (int i = 0; i < num_threads; ++i) { std::stringstream ss; ss << i; if (chai.eval("getvalue(" + ss.str() + ")") != expected_value(4000)) { return EXIT_FAILURE; } if (chai.eval("getid(" + ss.str() + ")") != i) { return EXIT_FAILURE; } } return EXIT_SUCCESS; }