fix: complete language version IDs for all platforms (#350)
## Problem `LANGUAGE_VERSIONS` only covered cpp and python. Several platform IDs were wrong — CodeChef used `C++ 17`/`Python 3` (correct: `C++`/`PYTH 3`), USACO listed nonexistent c++20/c++23 options, and CSES only had C++17. ## Solution Verify every platform's submit page and update all language ID tables. Add java and rust entries where supported, fix incorrect CodeChef and USACO IDs, and expand CSES `CSES_LANGUAGES` dict with C++11/C++20/PyPy3/Java/Rust variants.
This commit is contained in:
parent
2776aaeb21
commit
425a8f36e9
5 changed files with 64 additions and 34 deletions
|
|
@ -1056,13 +1056,13 @@ Set {version} globally or per-platform:
|
||||||
<
|
<
|
||||||
Available versions per platform ~
|
Available versions per platform ~
|
||||||
|
|
||||||
Platform cpp python
|
Platform cpp python java rust
|
||||||
AtCoder c++23 python3
|
AtCoder c++20/23 python3, pypy3 java rust
|
||||||
Codeforces c++17/20/23 python3, pypy3
|
Codeforces c++17/20/23 python3, pypy3 - -
|
||||||
CSES c++17 python3
|
CSES c++11/17/20 python3, pypy3 java rust2018/2021
|
||||||
Kattis c++17/20/23 python3
|
Kattis c++17/20/23 python3 java rust
|
||||||
USACO c++17/20/23 python3
|
USACO c++11/17 python3 java -
|
||||||
CodeChef c++17 python3
|
CodeChef c++20 python3, pypy3 java rust
|
||||||
|
|
||||||
Using a raw platform ID ~
|
Using a raw platform ID ~
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,21 +74,39 @@ M.signal_codes = {
|
||||||
}
|
}
|
||||||
|
|
||||||
M.LANGUAGE_VERSIONS = {
|
M.LANGUAGE_VERSIONS = {
|
||||||
atcoder = { cpp = { ['c++23'] = '6017' }, python = { python3 = '6082' } },
|
atcoder = {
|
||||||
|
cpp = { ['c++20'] = '6054', ['c++23'] = '6017' },
|
||||||
|
python = { python3 = '6082', pypy3 = '6083' },
|
||||||
|
java = { java = '6056' },
|
||||||
|
rust = { rust = '6088' },
|
||||||
|
},
|
||||||
codeforces = {
|
codeforces = {
|
||||||
cpp = { ['c++17'] = '54', ['c++20'] = '89', ['c++23'] = '91' },
|
cpp = { ['c++17'] = '54', ['c++20'] = '89', ['c++23'] = '91' },
|
||||||
python = { python3 = '31', pypy3 = '70' },
|
python = { python3 = '31', pypy3 = '70' },
|
||||||
},
|
},
|
||||||
cses = { cpp = { ['c++17'] = 'C++17' }, python = { python3 = 'Python3' } },
|
cses = {
|
||||||
|
cpp = { ['c++11'] = 'C++11', ['c++17'] = 'C++17', ['c++20'] = 'C++20' },
|
||||||
|
python = { python3 = 'Python3', pypy3 = 'PyPy3' },
|
||||||
|
java = { java = 'Java' },
|
||||||
|
rust = { rust2018 = 'Rust2018', rust2021 = 'Rust2021' },
|
||||||
|
},
|
||||||
kattis = {
|
kattis = {
|
||||||
cpp = { ['c++17'] = 'C++', ['c++20'] = 'C++', ['c++23'] = 'C++' },
|
cpp = { ['c++17'] = 'C++', ['c++20'] = 'C++', ['c++23'] = 'C++' },
|
||||||
python = { python3 = 'Python 3' },
|
python = { python3 = 'Python 3' },
|
||||||
|
java = { java = 'Java' },
|
||||||
|
rust = { rust = 'Rust' },
|
||||||
},
|
},
|
||||||
usaco = {
|
usaco = {
|
||||||
cpp = { ['c++17'] = 'cpp', ['c++20'] = 'cpp', ['c++23'] = 'cpp' },
|
cpp = { ['c++11'] = 'cpp', ['c++17'] = 'cpp' },
|
||||||
python = { python3 = 'python' },
|
python = { python3 = 'python' },
|
||||||
|
java = { java = 'java' },
|
||||||
|
},
|
||||||
|
codechef = {
|
||||||
|
cpp = { ['c++20'] = 'C++' },
|
||||||
|
python = { python3 = 'PYTH 3', pypy3 = 'PYPY3' },
|
||||||
|
java = { java = 'JAVA' },
|
||||||
|
rust = { rust = 'rust' },
|
||||||
},
|
},
|
||||||
codechef = { cpp = { ['c++17'] = 'C++ 17' }, python = { python3 = 'Python 3' } },
|
|
||||||
}
|
}
|
||||||
|
|
||||||
M.DEFAULT_VERSIONS = { cpp = 'c++20', python = 'python3' }
|
M.DEFAULT_VERSIONS = { cpp = 'c++20', python = 'python3' }
|
||||||
|
|
|
||||||
|
|
@ -31,13 +31,25 @@ HEADERS = {
|
||||||
CONNECTIONS = 8
|
CONNECTIONS = 8
|
||||||
|
|
||||||
CSES_LANGUAGES: dict[str, dict[str, str]] = {
|
CSES_LANGUAGES: dict[str, dict[str, str]] = {
|
||||||
|
"C++11": {"name": "C++", "option": "C++11"},
|
||||||
"C++17": {"name": "C++", "option": "C++17"},
|
"C++17": {"name": "C++", "option": "C++17"},
|
||||||
"Python3": {"name": "Python", "option": "CPython3"},
|
"C++20": {"name": "C++", "option": "C++20"},
|
||||||
|
"Python3": {"name": "Python3", "option": "CPython3"},
|
||||||
|
"PyPy3": {"name": "Python3", "option": "PyPy3"},
|
||||||
|
"Java": {"name": "Java", "option": "Java"},
|
||||||
|
"Rust2018": {"name": "Rust", "option": "2018"},
|
||||||
|
"Rust2021": {"name": "Rust", "option": "2021"},
|
||||||
}
|
}
|
||||||
|
|
||||||
EXTENSIONS: dict[str, str] = {
|
EXTENSIONS: dict[str, str] = {
|
||||||
|
"C++11": "cpp",
|
||||||
"C++17": "cpp",
|
"C++17": "cpp",
|
||||||
|
"C++20": "cpp",
|
||||||
"Python3": "py",
|
"Python3": "py",
|
||||||
|
"PyPy3": "py",
|
||||||
|
"Java": "java",
|
||||||
|
"Rust2018": "rs",
|
||||||
|
"Rust2021": "rs",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@ LANGUAGE_IDS = {
|
||||||
"atcoder": {
|
"atcoder": {
|
||||||
"cpp": "6017",
|
"cpp": "6017",
|
||||||
"python": "6082",
|
"python": "6082",
|
||||||
|
"java": "6056",
|
||||||
|
"rust": "6088",
|
||||||
},
|
},
|
||||||
"codeforces": {
|
"codeforces": {
|
||||||
"cpp": "89",
|
"cpp": "89",
|
||||||
|
|
@ -10,18 +12,25 @@ LANGUAGE_IDS = {
|
||||||
"cses": {
|
"cses": {
|
||||||
"cpp": "C++17",
|
"cpp": "C++17",
|
||||||
"python": "Python3",
|
"python": "Python3",
|
||||||
|
"java": "Java",
|
||||||
|
"rust": "Rust2021",
|
||||||
},
|
},
|
||||||
"usaco": {
|
"usaco": {
|
||||||
"cpp": "cpp",
|
"cpp": "cpp",
|
||||||
"python": "python",
|
"python": "python",
|
||||||
|
"java": "java",
|
||||||
},
|
},
|
||||||
"kattis": {
|
"kattis": {
|
||||||
"cpp": "C++",
|
"cpp": "C++",
|
||||||
"python": "Python 3",
|
"python": "Python 3",
|
||||||
|
"java": "Java",
|
||||||
|
"rust": "Rust",
|
||||||
},
|
},
|
||||||
"codechef": {
|
"codechef": {
|
||||||
"cpp": "C++ 17",
|
"cpp": "C++",
|
||||||
"python": "Python 3",
|
"python": "PYTH 3",
|
||||||
|
"java": "JAVA",
|
||||||
|
"rust": "rust",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from scrapers.language_ids import LANGUAGE_IDS, get_language_id
|
from scrapers.language_ids import LANGUAGE_IDS
|
||||||
from scrapers.models import (
|
from scrapers.models import (
|
||||||
ContestListResult,
|
ContestListResult,
|
||||||
MetadataResult,
|
MetadataResult,
|
||||||
|
|
@ -140,26 +140,17 @@ def test_scraper_metadata_error(run_scraper_offline, scraper, contest_id):
|
||||||
assert objs[-1].get("error")
|
assert objs[-1].get("error")
|
||||||
|
|
||||||
|
|
||||||
EXPECTED_PLATFORMS = {"atcoder", "codeforces", "cses", "usaco", "kattis", "codechef"}
|
|
||||||
EXPECTED_LANGUAGES = {"cpp", "python"}
|
|
||||||
|
|
||||||
|
|
||||||
def test_language_ids_coverage():
|
def test_language_ids_coverage():
|
||||||
assert set(LANGUAGE_IDS.keys()) == EXPECTED_PLATFORMS
|
expected_platforms = {
|
||||||
|
"atcoder",
|
||||||
|
"codeforces",
|
||||||
|
"cses",
|
||||||
|
"usaco",
|
||||||
|
"kattis",
|
||||||
|
"codechef",
|
||||||
|
}
|
||||||
|
assert set(LANGUAGE_IDS.keys()) == expected_platforms
|
||||||
for platform, langs in LANGUAGE_IDS.items():
|
for platform, langs in LANGUAGE_IDS.items():
|
||||||
assert set(langs.keys()) == EXPECTED_LANGUAGES, f"{platform} missing languages"
|
assert {"cpp", "python"} <= set(langs.keys()), f"{platform} missing cpp/python"
|
||||||
for lang, lid in langs.items():
|
for lang, lid in langs.items():
|
||||||
assert isinstance(lid, str) and lid, f"{platform}/{lang} empty ID"
|
assert isinstance(lid, str) and lid, f"{platform}/{lang} empty ID"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("platform", EXPECTED_PLATFORMS)
|
|
||||||
@pytest.mark.parametrize("language", EXPECTED_LANGUAGES)
|
|
||||||
def test_get_language_id(platform, language):
|
|
||||||
result = get_language_id(platform, language)
|
|
||||||
assert result is not None, f"No ID for {platform}/{language}"
|
|
||||||
assert result == LANGUAGE_IDS[platform][language]
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_language_id_unknown():
|
|
||||||
assert get_language_id("nonexistent", "cpp") is None
|
|
||||||
assert get_language_id("codeforces", "rust") is None
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue