#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); std::vector > threads; // Ensure at least two, but say only 7 on an 8 core processor int num_threads = std::max(static_cast(std::thread::hardware_concurrency()) - 1, 2); std::cout << "Num threads: " << num_threads << '\n'; for (int i = 0; i < num_threads; ++i) { threads.push_back(std::shared_ptr(new std::thread(do_work, std::ref(chai), i))); } for (int i = 0; i < num_threads; ++i) { threads[i]->join(); } 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; }