Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions subprojects/sim/include/sim/submissions/old_submission.hh
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ struct OldSubmission {
(PYTHON, 5, "python")
(RUST, 6, "rust")
(CPP20, 7, "cpp20")
(CPP23, 8, "cpp23")
);

// Initial and final values may be combined, but special not
Expand Down Expand Up @@ -96,6 +97,7 @@ constexpr const char* to_string(OldSubmission::Language x) {
case OldSubmission::Language::CPP14: return "C++14";
case OldSubmission::Language::CPP17: return "C++17";
case OldSubmission::Language::CPP20: return "C++20";
case OldSubmission::Language::CPP23: return "C++23";
case OldSubmission::Language::PASCAL: return "Pascal";
case OldSubmission::Language::PYTHON: return "Python";
case OldSubmission::Language::RUST: return "Rust";
Expand All @@ -109,7 +111,8 @@ constexpr const char* to_extension(OldSubmission::Language x) {
case OldSubmission::Language::CPP11:
case OldSubmission::Language::CPP14:
case OldSubmission::Language::CPP17:
case OldSubmission::Language::CPP20: return ".cpp";
case OldSubmission::Language::CPP20:
case OldSubmission::Language::CPP23: return ".cpp";
case OldSubmission::Language::PASCAL: return ".pas";
case OldSubmission::Language::PYTHON: return ".py";
case OldSubmission::Language::RUST: return ".rs";
Expand All @@ -123,7 +126,8 @@ constexpr const char* to_mime(OldSubmission::Language x) {
case OldSubmission::Language::CPP11:
case OldSubmission::Language::CPP14:
case OldSubmission::Language::CPP17:
case OldSubmission::Language::CPP20: return "text/x-c++src";
case OldSubmission::Language::CPP20:
case OldSubmission::Language::CPP23: return "text/x-c++src";
case OldSubmission::Language::PASCAL: return "text/x-pascal";
case OldSubmission::Language::PYTHON: return "text/x-python";
case OldSubmission::Language::RUST: return "text/x-rust";
Expand Down
1 change: 1 addition & 0 deletions subprojects/sim/include/sim/submissions/submission.hh
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ struct Submission {
(PYTHON, 5, "python")
(RUST, 6, "rust")
(CPP20, 7, "cpp20")
(CPP23, 8, "cpp23")
);

// Initial and final values may be combined, but special not
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ std::vector<FileRemover> submit_solutions(
case sim::SolutionLanguage::CPP14: return Submission::Language::CPP14;
case sim::SolutionLanguage::CPP17: return Submission::Language::CPP17;
case sim::SolutionLanguage::CPP20: return Submission::Language::CPP20;
case sim::SolutionLanguage::CPP23: return Submission::Language::CPP23;
case sim::SolutionLanguage::PASCAL: return Submission::Language::PASCAL;
case sim::SolutionLanguage::PYTHON: return Submission::Language::PYTHON;
case sim::SolutionLanguage::RUST: return Submission::Language::RUST;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ void judge_or_rejudge_submission(
case Submission::Language::CPP14: return sim::SolutionLanguage::CPP14;
case Submission::Language::CPP17: return sim::SolutionLanguage::CPP17;
case Submission::Language::CPP20: return sim::SolutionLanguage::CPP20;
case Submission::Language::CPP23: return sim::SolutionLanguage::CPP23;
case Submission::Language::PASCAL: return sim::SolutionLanguage::PASCAL;
case Submission::Language::PYTHON: return sim::SolutionLanguage::PYTHON;
case Submission::Language::RUST: return sim::SolutionLanguage::RUST;
Expand Down
2 changes: 2 additions & 0 deletions subprojects/sim/src/web_server/old/submissions_api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -902,6 +902,8 @@ void Sim::api_submission_add() {
slang = OldSubmission::Language::CPP17;
} else if (slang_str == "cpp20") {
slang = OldSubmission::Language::CPP20;
} else if (slang_str == "cpp23") {
slang = OldSubmission::Language::CPP23;
} else if (slang_str == "pascal") {
slang = OldSubmission::Language::PASCAL;
} else if (slang_str == "python") {
Expand Down
4 changes: 4 additions & 0 deletions subprojects/sim/src/web_server/static/kit/scripts.js
Original file line number Diff line number Diff line change
Expand Up @@ -2061,6 +2061,7 @@ function submission_language_to_user_string(submission_language) {
case 'python': return 'Python';
case 'rust': return 'Rust';
case 'cpp20': return 'C++20';
case 'cpp23': return 'C++23';
default: assert(false, 'unexpected submission_language: ' + submission_language);
}
}
Expand Down Expand Up @@ -4579,6 +4580,9 @@ function add_submission_impl(as_oldmodal, url, api_url, problem_field_elem, mayb
}).add('<option>', {
value: 'cpp20',
text: 'C++20',
}).add('<option>', {
value: 'cpp23',
text: 'C++23',
selected: true
}).add('<option>', {
value: 'pascal',
Expand Down
6 changes: 4 additions & 2 deletions subprojects/simlib/include/simlib/sim/judge_worker.hh
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,8 @@ enum class SolutionLanguage {
CPP14,
CPP17,
CPP20,
CPP = CPP20,
CPP23,
CPP = CPP23,
PASCAL,
PYTHON,
RUST,
Expand Down Expand Up @@ -192,7 +193,8 @@ inline SolutionLanguage filename_to_lang(const StringView& filename) {
return res;
case SolutionLanguage::CPP11:
case SolutionLanguage::CPP14:
case SolutionLanguage::CPP17: break;
case SolutionLanguage::CPP17:
case SolutionLanguage::CPP20: break;
}

THROW("Should not reach here");
Expand Down
5 changes: 5 additions & 0 deletions subprojects/simlib/src/sim/judge_worker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,11 @@ std::unique_ptr<judge::language_suite::Suite> lang_to_suite(SolutionLanguage lan
judge::language_suite::Cpp_GCC::Standard::Cpp20
);
} break;
case SolutionLanguage::CPP23: {
return std::make_unique<judge::language_suite::Cpp_GCC>(
judge::language_suite::Cpp_GCC::Standard::Cpp23
);
} break;
case SolutionLanguage::PASCAL: {
return std::make_unique<judge::language_suite::Pascal>();
} break;
Expand Down
13 changes: 12 additions & 1 deletion subprojects/simlib/test/sim/judge/language_suite/cpp_clang.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ int main() {
)";

// NOLINTNEXTLINE
TEST(sim_judge_compiler, cpp_clang) {
TEST(sim_judge_compiler, cpp_clang_cpp20) {
auto suite = Cpp_Clang{Cpp_Clang::Standard::Cpp20};
ASSERT_EQ(suite.is_supported(), path_exists("/usr/bin/clang++"));
if (suite.is_supported()) {
Expand All @@ -30,3 +30,14 @@ TEST(sim_judge_compiler, cpp_clang) {
);
}
}

// NOLINTNEXTLINE
TEST(sim_judge_compiler, cpp_clang_cpp23) {
Comment thread
Maritsu marked this conversation as resolved.
auto suite = Cpp_Clang{Cpp_Clang::Standard::Cpp23};
ASSERT_EQ(suite.is_supported(), path_exists("/usr/bin/clang++"));
if (suite.is_supported()) {
test_compiled_language_suite(
suite, test_prog_ok, test_prog_invalid, "error: use of undeclared identifier 'p'"
);
}
}
13 changes: 12 additions & 1 deletion subprojects/simlib/test/sim/judge/language_suite/cpp_gcc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ int main() {
)";

// NOLINTNEXTLINE
TEST(sim_judge_compiler, cpp_gcc) {
TEST(sim_judge_compiler, cpp_gcc_cpp20) {
auto suite = Cpp_GCC{Cpp_GCC::Standard::Cpp20};
ASSERT_EQ(suite.is_supported(), path_exists("/usr/bin/g++"));
if (suite.is_supported()) {
Expand All @@ -30,3 +30,14 @@ TEST(sim_judge_compiler, cpp_gcc) {
);
}
}

// NOLINTNEXTLINE
TEST(sim_judge_compiler, cpp_gcc_cpp23) {
Comment thread
Maritsu marked this conversation as resolved.
auto suite = Cpp_GCC{Cpp_GCC::Standard::Cpp23};
ASSERT_EQ(suite.is_supported(), path_exists("/usr/bin/g++"));
if (suite.is_supported()) {
test_compiled_language_suite(
suite, test_prog_ok, test_prog_invalid, "error: 'p' was not declared in this scope"
);
}
}
Loading