upd optimize tester

This commit is contained in:
2023-10-25 10:06:05 +08:00
parent 438152ffca
commit 1e6508bca9
5 changed files with 48 additions and 16 deletions

View File

@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.10) cmake_minimum_required(VERSION 3.16)
project(BigInt) project(Int2048)
add_subdirectory(src) add_subdirectory(src)
add_subdirectory(data) add_subdirectory(data)
add_subdirectory(tester) add_subdirectory(tester)

View File

@ -3,7 +3,6 @@ set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "-g -O2") set(CMAKE_CXX_FLAGS "-g -O2")
set(ENV{MAKEFLAGS} "-j16") set(ENV{MAKEFLAGS} "-j16")
include_directories(${PROJECT_SOURCE_DIR}/include) include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/libs/clipp)
link_directories(${PROJECT_SOURCE_DIR}/src) link_directories(${PROJECT_SOURCE_DIR}/src)
add_executable(C1T1 Integer1/1.cpp) add_executable(C1T1 Integer1/1.cpp)
target_link_libraries(C1T1 int2048) target_link_libraries(C1T1 int2048)

View File

@ -2,6 +2,6 @@ set(PROJECT_NAME ${CMAKE_PROJECT_NAME})
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "-g -O2") set(CMAKE_CXX_FLAGS "-g -O2")
set(ENV{MAKEFLAGS} "-j16") set(ENV{MAKEFLAGS} "-j16")
include_directories(${PROJECT_SOURCE_DIR}/libs/clipp) include_directories(${PROJECT_SOURCE_DIR}/libs)
include_directories(${PROJECT_SOURCE_DIR}/libs/json) add_executable(tester tester.cpp)
add_executable(tester tester.cpp) target_precompile_headers(tester PUBLIC ${PROJECT_SOURCE_DIR}/libs/clipp/clipp.h ${PROJECT_SOURCE_DIR}/libs/json/json.hpp)

View File

@ -1,5 +1,5 @@
{ {
"StatusInterpreter":{"0":"OK","1":"Error"}, "StatusInterpreter":{"0":"OK","1":"Error","139":"Segmentation fault"},
"Cases": "Cases":
[ [
{"command":"timeout -s 9 10s /home/happyzym/CSWorkSpace/Proc/BigHomework/BH-int2048-2023/build/data/C1T1 >/tmp/C1T1.out && diff -b -B -u /tmp/C1T1.out /home/happyzym/CSWorkSpace/Proc/BigHomework/BH-int2048-2023/data/Integer1/1.out","uid":"#1","tid":"/1/1"}, {"command":"timeout -s 9 10s /home/happyzym/CSWorkSpace/Proc/BigHomework/BH-int2048-2023/build/data/C1T1 >/tmp/C1T1.out && diff -b -B -u /tmp/C1T1.out /home/happyzym/CSWorkSpace/Proc/BigHomework/BH-int2048-2023/data/Integer1/1.out","uid":"#1","tid":"/1/1"},

View File

@ -5,8 +5,8 @@
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
#include "clipp.h" #include "clipp/clipp.h"
#include "json.hpp" #include "json/json.hpp"
std::string getDirectory(const std::string &filepath) { std::string getDirectory(const std::string &filepath) {
size_t found = filepath.find_last_of("/\\"); size_t found = filepath.find_last_of("/\\");
return filepath.substr(0, found); return filepath.substr(0, found);
@ -24,17 +24,24 @@ int main(int argc, char *argv[]) {
std::string new_config = ""; std::string new_config = "";
bool test_sub_tree = false; bool test_sub_tree = false;
std::string sub_tree; std::string sub_tree;
bool read_lists_from_stdin = false;
bool read_lists_from_file = false;
std::string list_file_path;
// clang-format off // clang-format off
auto cli=( auto cli=(
clipp::option("-f","--file").set(config_file).doc("config file path") & clipp::value("config file path",config_file), clipp::option("--config").set(config_file).doc("config file path") & clipp::value("config file path",config_file),
clipp::option("-c","--continuous").set(continuous).doc("continuous mode"), clipp::option("-c","--continuous").set(continuous).doc("continuous mode"),
clipp::option("-a","--all").set(test_all).doc("test all"), (
clipp::option("-s","--subtree").set(test_sub_tree).doc("test subtree") & clipp::value("subtree",sub_tree), clipp::required("-a","--all").set(test_all).doc("test all")|
clipp::option("-l","--list").set(test_listed_cases).doc("test listed cases") & clipp::values("cases",listed_cases) (clipp::required("-s","--subtree").set(test_sub_tree).doc("test subtree") & clipp::value("subtree",sub_tree))|
(clipp::required("-l","--list").set(test_listed_cases).doc("test listed cases") & clipp::values("cases",listed_cases))|
(clipp::required("-i","--stdin").set(read_lists_from_stdin).doc("read test list from stdin"))|
(clipp::required("-f","--filelist").set(read_lists_from_file).doc("read test list from file") & clipp::value("file",list_file_path))
)
); );
// clang-format on // clang-format on
if (!parse(argc, argv, cli)) { if (!clipp::parse(argc, argv, cli)) {
std::cout << make_man_page(cli, argv[0]); std::cout << clipp::make_man_page(cli, argv[0]);
return 0; return 0;
} }
if (use_custoem_config) config_file = new_config; if (use_custoem_config) config_file = new_config;
@ -62,11 +69,33 @@ int main(int argc, char *argv[]) {
listed_cases.push_back(DeEscape(config["Cases"][i]["tid"])); listed_cases.push_back(DeEscape(config["Cases"][i]["tid"]));
} }
} }
} } else if (read_lists_from_stdin) {
listed_cases.clear();
std::string line;
while (std::getline(std::cin, line)) {
listed_cases.push_back(line);
}
} else if (read_lists_from_file) {
listed_cases.clear();
std::ifstream list_file(list_file_path);
std::string line;
while (std::getline(list_file, line)) {
listed_cases.push_back(line);
}
} else
throw std::runtime_error("No test cases specified");
int total_cases = 0, total_passed = 0;
for (int i = 0; i < listed_cases.size(); i++) { for (int i = 0; i < listed_cases.size(); i++) {
std::cerr << "Testing " << listed_cases[i] << std::endl; std::cerr << "Testing " << listed_cases[i] << std::endl;
if (index.find(listed_cases[i]) == index.end()) {
std::cerr << "Test " << listed_cases[i] << " not found" << std::endl;
std::cerr << '\n' << std::endl;
continue;
}
std::cerr << "Command = " << index[listed_cases[i]] << std::endl; std::cerr << "Command = " << index[listed_cases[i]] << std::endl;
int status = system(index[listed_cases[i]].c_str()) / 256; int status = system(index[listed_cases[i]].c_str()) / 256;
total_cases++;
if (status == 0) total_passed++;
if (status == 0) { if (status == 0) {
std::cerr << "Test " << listed_cases[i] << " passed" << std::endl; std::cerr << "Test " << listed_cases[i] << " passed" << std::endl;
} else { } else {
@ -80,9 +109,13 @@ int main(int argc, char *argv[]) {
: std::string("Unknown Error")) : std::string("Unknown Error"))
<< std::endl; << std::endl;
if (!continuous) { if (!continuous) {
std::cerr << total_passed << "/" << total_cases << " cases passed"
<< std::endl;
return 1; return 1;
} }
} }
std::cerr << total_passed << "/" << total_cases << " cases passed"
<< std::endl;
std::cerr << '\n' << std::endl; std::cerr << '\n' << std::endl;
} }
return 0; return 0;