diff --git a/.gitignore b/.gitignore index 1d14b27..3b5f4e3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ /.devcontainer /.vscode -/maintenance/test/data +/maintenance/test .clang-format /frontend/Web/node_modules /frontend/client/node_modules diff --git a/maintenance/test/CMakeLists.txt b/maintenance/test/CMakeLists.txt deleted file mode 100644 index eadfea1..0000000 --- a/maintenance/test/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(PROJECT_NAME ${CMAKE_PROJECT_NAME}) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_FLAGS "-O2") -set(ENV{MAKEFLAGS} "-j16") -include_directories(${PROJECT_SOURCE_DIR}/external) -add_executable(test-core test-core.cpp) -target_precompile_headers(test-core PUBLIC ${PROJECT_SOURCE_DIR}/external/clipp/clipp.h ${PROJECT_SOURCE_DIR}/external/json/json.hpp) \ No newline at end of file diff --git a/maintenance/test/config.json b/maintenance/test/config.json deleted file mode 100644 index 702b1cd..0000000 --- a/maintenance/test/config.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "StatusInterpreter":{"0":"OK","1":"Wrong Answer","139":"Segmentation fault","137":"(Killed) maybe Time Limit Error"}, - "Cases": - [ - {"command":"cd /workspaces/BH-Bookstore-2023 && timeout -s 9 1s build/code /tmp/B0.out && diff -u /tmp/B0.out test/testcases/basic-testcases/test0.out >/tmp/diff_B0","uid":"#0","tid":"/1/0"}, - {"command":"cd /workspaces/BH-Bookstore-2023 && timeout -s 9 3s build/code /tmp/I0.out && diff -u /tmp/I0.out test/testcases/bigint-testcases/BigIntegerTest0.out >/tmp/diff_I0","uid":"#14","tid":"/2/0"}, - ] -} \ No newline at end of file diff --git a/maintenance/test/ctest_config b/maintenance/test/ctest_config deleted file mode 100644 index e69de29..0000000 diff --git a/maintenance/test/test-core.cpp b/maintenance/test/test-core.cpp deleted file mode 100644 index a4f0b1e..0000000 --- a/maintenance/test/test-core.cpp +++ /dev/null @@ -1,122 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "clipp/clipp.h" -#include "json/json.hpp" -std::string getDirectory(const std::string &filepath) { - size_t found = filepath.find_last_of("/\\"); - return filepath.substr(0, found); -} -#define DeEscape std::string -int main(int argc, char *argv[]) { - bool continuous = false; - bool test_all = false; - bool test_listed_cases = false; - std::vector listed_cases; - std::string filePath(__FILE__); - std::string directoryPath = getDirectory(filePath); - std::string config_file = directoryPath + "/config.json"; - bool use_custoem_config = false; - std::string new_config = ""; - bool test_sub_tree = false; - std::string sub_tree; - bool read_lists_from_stdin = false; - bool read_lists_from_file = false; - std::string list_file_path; - // clang-format off - auto cli=( - 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::required("-a","--all").set(test_all).doc("test all")| - (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 - if (!clipp::parse(argc, argv, cli)) { - std::cout << clipp::make_man_page(cli, argv[0]); - return 0; - } - if (use_custoem_config) config_file = new_config; - using json = nlohmann::json; - std::ifstream conf(config_file); - json config = json::parse(conf); - std::unordered_map index; - for (int i = 0; i < config["Cases"].size(); i++) { - index[DeEscape(config["Cases"][i]["tid"])] = - DeEscape(config["Cases"][i]["command"]); - index[DeEscape(config["Cases"][i]["uid"])] = - DeEscape(config["Cases"][i]["command"]); - } - if (test_all) { - listed_cases.clear(); - for (int i = 0; i < config["Cases"].size(); i++) { - listed_cases.push_back(DeEscape(config["Cases"][i]["tid"])); - } - } else if (test_sub_tree) { - listed_cases.clear(); - for (int i = 0; i < config["Cases"].size(); i++) { - if (DeEscape(config["Cases"][i]["tid"]).find(sub_tree) == 0 && - (DeEscape(config["Cases"][i]["tid"]).length() == sub_tree.length() || - DeEscape(config["Cases"][i]["tid"])[sub_tree.length()] == '/')) { - 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 if (!test_listed_cases) - throw std::runtime_error("No test cases specified"); - int total_cases = 0, total_passed = 0; - for (int i = 0; i < listed_cases.size(); i++) { - 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; - int status = system(index[listed_cases[i]].c_str()) / 256; - total_cases++; - if (status == 0) total_passed++; - if (status == 0) { - std::cerr << "Test " << listed_cases[i] << " passed" << std::endl; - } else { - std::cerr << "Test " << listed_cases[i] << " failed" << std::endl; - std::cerr << "status code = " << status << std::endl; - std::cerr - << "Brief info: " - << (config["StatusInterpreter"].contains(std::to_string(status)) - ? DeEscape( - config["StatusInterpreter"][std::to_string(status)]) - : std::string("Unknown Error")) - << std::endl; - if (!continuous) { - std::cerr << total_passed << "/" << total_cases << " cases passed" - << std::endl; - return status; - } - } - std::cerr << total_passed << "/" << total_cases << " cases passed" - << std::endl; - std::cerr << '\n' << std::endl; - } - return 0; -} \ No newline at end of file