Skip to content

Commit e9b2f71

Browse files
committed
Merge branch 'main' into develop
2 parents 28cc8bf + 5f8b668 commit e9b2f71

10 files changed

Lines changed: 48 additions & 6 deletions

File tree

subprojects/sim/include/sim/submissions/old_submission.hh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ struct OldSubmission {
3535
(PYTHON, 5, "python")
3636
(RUST, 6, "rust")
3737
(CPP20, 7, "cpp20")
38+
(CPP23, 8, "cpp23")
3839
);
3940

4041
// Initial and final values may be combined, but special not
@@ -96,6 +97,7 @@ constexpr const char* to_string(OldSubmission::Language x) {
9697
case OldSubmission::Language::CPP14: return "C++14";
9798
case OldSubmission::Language::CPP17: return "C++17";
9899
case OldSubmission::Language::CPP20: return "C++20";
100+
case OldSubmission::Language::CPP23: return "C++23";
99101
case OldSubmission::Language::PASCAL: return "Pascal";
100102
case OldSubmission::Language::PYTHON: return "Python";
101103
case OldSubmission::Language::RUST: return "Rust";
@@ -109,7 +111,8 @@ constexpr const char* to_extension(OldSubmission::Language x) {
109111
case OldSubmission::Language::CPP11:
110112
case OldSubmission::Language::CPP14:
111113
case OldSubmission::Language::CPP17:
112-
case OldSubmission::Language::CPP20: return ".cpp";
114+
case OldSubmission::Language::CPP20:
115+
case OldSubmission::Language::CPP23: return ".cpp";
113116
case OldSubmission::Language::PASCAL: return ".pas";
114117
case OldSubmission::Language::PYTHON: return ".py";
115118
case OldSubmission::Language::RUST: return ".rs";
@@ -123,7 +126,8 @@ constexpr const char* to_mime(OldSubmission::Language x) {
123126
case OldSubmission::Language::CPP11:
124127
case OldSubmission::Language::CPP14:
125128
case OldSubmission::Language::CPP17:
126-
case OldSubmission::Language::CPP20: return "text/x-c++src";
129+
case OldSubmission::Language::CPP20:
130+
case OldSubmission::Language::CPP23: return "text/x-c++src";
127131
case OldSubmission::Language::PASCAL: return "text/x-pascal";
128132
case OldSubmission::Language::PYTHON: return "text/x-python";
129133
case OldSubmission::Language::RUST: return "text/x-rust";

subprojects/sim/include/sim/submissions/submission.hh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ struct Submission {
3131
(PYTHON, 5, "python")
3232
(RUST, 6, "rust")
3333
(CPP20, 7, "cpp20")
34+
(CPP23, 8, "cpp23")
3435
);
3536

3637
// Initial and final values may be combined, but special not

subprojects/sim/src/job_server/job_handlers/add_or_reupload_problem/add_or_reupload_problem.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ std::vector<FileRemover> submit_solutions(
185185
case sim::SolutionLanguage::CPP14: return Submission::Language::CPP14;
186186
case sim::SolutionLanguage::CPP17: return Submission::Language::CPP17;
187187
case sim::SolutionLanguage::CPP20: return Submission::Language::CPP20;
188+
case sim::SolutionLanguage::CPP23: return Submission::Language::CPP23;
188189
case sim::SolutionLanguage::PASCAL: return Submission::Language::PASCAL;
189190
case sim::SolutionLanguage::PYTHON: return Submission::Language::PYTHON;
190191
case sim::SolutionLanguage::RUST: return Submission::Language::RUST;

subprojects/sim/src/job_server/job_handlers/judge_or_rejudge_submission.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ void judge_or_rejudge_submission(
149149
case Submission::Language::CPP14: return sim::SolutionLanguage::CPP14;
150150
case Submission::Language::CPP17: return sim::SolutionLanguage::CPP17;
151151
case Submission::Language::CPP20: return sim::SolutionLanguage::CPP20;
152+
case Submission::Language::CPP23: return sim::SolutionLanguage::CPP23;
152153
case Submission::Language::PASCAL: return sim::SolutionLanguage::PASCAL;
153154
case Submission::Language::PYTHON: return sim::SolutionLanguage::PYTHON;
154155
case Submission::Language::RUST: return sim::SolutionLanguage::RUST;

subprojects/sim/src/web_server/old/submissions_api.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -902,6 +902,8 @@ void Sim::api_submission_add() {
902902
slang = OldSubmission::Language::CPP17;
903903
} else if (slang_str == "cpp20") {
904904
slang = OldSubmission::Language::CPP20;
905+
} else if (slang_str == "cpp23") {
906+
slang = OldSubmission::Language::CPP23;
905907
} else if (slang_str == "pascal") {
906908
slang = OldSubmission::Language::PASCAL;
907909
} else if (slang_str == "python") {

subprojects/sim/src/web_server/static/kit/scripts.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2061,6 +2061,7 @@ function submission_language_to_user_string(submission_language) {
20612061
case 'python': return 'Python';
20622062
case 'rust': return 'Rust';
20632063
case 'cpp20': return 'C++20';
2064+
case 'cpp23': return 'C++23';
20642065
default: assert(false, 'unexpected submission_language: ' + submission_language);
20652066
}
20662067
}
@@ -4579,6 +4580,9 @@ function add_submission_impl(as_oldmodal, url, api_url, problem_field_elem, mayb
45794580
}).add('<option>', {
45804581
value: 'cpp20',
45814582
text: 'C++20',
4583+
}).add('<option>', {
4584+
value: 'cpp23',
4585+
text: 'C++23',
45824586
selected: true
45834587
}).add('<option>', {
45844588
value: 'pascal',

subprojects/simlib/include/simlib/sim/judge_worker.hh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ enum class SolutionLanguage {
156156
CPP14,
157157
CPP17,
158158
CPP20,
159-
CPP = CPP20,
159+
CPP23,
160+
CPP = CPP23,
160161
PASCAL,
161162
PYTHON,
162163
RUST,
@@ -192,7 +193,8 @@ inline SolutionLanguage filename_to_lang(const StringView& filename) {
192193
return res;
193194
case SolutionLanguage::CPP11:
194195
case SolutionLanguage::CPP14:
195-
case SolutionLanguage::CPP17: break;
196+
case SolutionLanguage::CPP17:
197+
case SolutionLanguage::CPP20: break;
196198
}
197199

198200
THROW("Should not reach here");

subprojects/simlib/src/sim/judge_worker.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@ std::unique_ptr<judge::language_suite::Suite> lang_to_suite(SolutionLanguage lan
124124
judge::language_suite::Cpp_GCC::Standard::Cpp20
125125
);
126126
} break;
127+
case SolutionLanguage::CPP23: {
128+
return std::make_unique<judge::language_suite::Cpp_GCC>(
129+
judge::language_suite::Cpp_GCC::Standard::Cpp23
130+
);
131+
} break;
127132
case SolutionLanguage::PASCAL: {
128133
return std::make_unique<judge::language_suite::Pascal>();
129134
} break;

subprojects/simlib/test/sim/judge/language_suite/cpp_clang.cc

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ int main() {
2121
)";
2222

2323
// NOLINTNEXTLINE
24-
TEST(sim_judge_compiler, cpp_clang) {
24+
TEST(sim_judge_compiler, cpp_clang_cpp20) {
2525
auto suite = Cpp_Clang{Cpp_Clang::Standard::Cpp20};
2626
ASSERT_EQ(suite.is_supported(), path_exists("/usr/bin/clang++"));
2727
if (suite.is_supported()) {
@@ -30,3 +30,14 @@ TEST(sim_judge_compiler, cpp_clang) {
3030
);
3131
}
3232
}
33+
34+
// NOLINTNEXTLINE
35+
TEST(sim_judge_compiler, cpp_clang_cpp23) {
36+
auto suite = Cpp_Clang{Cpp_Clang::Standard::Cpp23};
37+
ASSERT_EQ(suite.is_supported(), path_exists("/usr/bin/clang++"));
38+
if (suite.is_supported()) {
39+
test_compiled_language_suite(
40+
suite, test_prog_ok, test_prog_invalid, "error: use of undeclared identifier 'p'"
41+
);
42+
}
43+
}

subprojects/simlib/test/sim/judge/language_suite/cpp_gcc.cc

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ int main() {
2121
)";
2222

2323
// NOLINTNEXTLINE
24-
TEST(sim_judge_compiler, cpp_gcc) {
24+
TEST(sim_judge_compiler, cpp_gcc_cpp20) {
2525
auto suite = Cpp_GCC{Cpp_GCC::Standard::Cpp20};
2626
ASSERT_EQ(suite.is_supported(), path_exists("/usr/bin/g++"));
2727
if (suite.is_supported()) {
@@ -30,3 +30,14 @@ TEST(sim_judge_compiler, cpp_gcc) {
3030
);
3131
}
3232
}
33+
34+
// NOLINTNEXTLINE
35+
TEST(sim_judge_compiler, cpp_gcc_cpp23) {
36+
auto suite = Cpp_GCC{Cpp_GCC::Standard::Cpp23};
37+
ASSERT_EQ(suite.is_supported(), path_exists("/usr/bin/g++"));
38+
if (suite.is_supported()) {
39+
test_compiled_language_suite(
40+
suite, test_prog_ok, test_prog_invalid, "error: 'p' was not declared in this scope"
41+
);
42+
}
43+
}

0 commit comments

Comments
 (0)