/** * @brief parseOptions parse user arguments */ UserOptions parseOptions(const int argc, const char* argv[]) { UserOptions user_options; vector<string> arguments; for (const size_t argn : crange(argc)) arguments.push_back(argv[argn]); // Parse arguments ArgumentParser parser; user_options = parser.parseArguments(arguments); user_options.addDefaultFiles(); if (user_options.use_textfile) { output_streamer.createStreamFile(results_str, user_options.datatext_file); } return user_options; }
int run_tests(u32 num, Test const* tests, int argc, char** argv) { State::SetInternalThreadState(State::CreateNewThreadState()); SetPrintingVerbosity(10); auto args = AppArg::Clone(argc, argv); RuntimeQueue::CreateNewQueue("Testing"); ArgumentParser parser; parser.addSwitch("json", "json", nullptr, "Output JSON document"); auto parseArgs = parser.parseArguments(args); bool json_formatting = parseArgs.switches.count("json"); Vector<TestInstance> test_results; test_results.resize(num); titles.resize(num); descriptions.resize(num); test_times.resize(num); result.reserve(num); required.reserve(num); bool fail = false; for(u32 i = 0; i < num; i++) { TestInstance& test_info = test_results.at(i); RunTest(tests[i], test_info); if(test_info.required && !test_info.result) fail = true; } result.resize(num, false); required.resize(num, true); szptr suc = 0; for(bool v : result) if(v) suc++; u64 time_accum = 0; for(u64 v : test_times) time_accum += v; ExtraData::Add("testing:title", GetCurrentApp().application_name); ExtraData::Add("testing:bmark", cast_pod(time_accum)); ExtraData::Add("testing:result", Strings::fmt("{0},{1}", suc, num)); ExtraData::Add("testing:mem", cast_pod(ProcessProperty::Mem(0))); for(auto i : Range<>(test_results.size())) { auto const& test = test_results.at(i); titles.at(i) = test.title; descriptions.at(i) = test.description; test_times.at(i) = test.time; result.at(i) = test.result; required.at(i) = test.required; } if(!json_formatting) { PrintAsciiTable(time_accum, suc); } else { JSON::WriteBuf buf; WriteJsonData(buf, suc, time_accum, tests); cOutputPrint("{0}", buf.GetString()); ExtraData::Add("testing:jsonresult", buf.GetString()); } cDebug("Memory consumption: {0} kB", ProcessProperty::Mem(0)); /* For verbosity, we write it as this */ return (fail) ? 1 : 0; }