def test_atcoder_3_rust(self): languages = languages_atcoder_3 filename = 'main.rs' code = 'fn main() { println!("Hello, world!"); }\n' expected = [Language(id=LanguageId('3504'), name='Rust (1.15.1)')] self.assertEqual( language_gussing.guess_languages_of_file( filename=pathlib.Path(filename), code=code.encode(), languages=languages), expected)
def test_codeforces_haskell(self): languages = languages_codeforces filename = 'Main.hs' code = 'main = return ()\n' expected = [Language(id=LanguageId('12'), name='Haskell GHC 8.6.3')] self.assertEqual( language_gussing.guess_languages_of_file( filename=pathlib.Path(filename), code=code.encode(), languages=languages), expected)
def test_atcoder_4_fsharp(self): languages = languages_atcoder_4 filename = 'Main.fs' code = 'open System\nprintfn "Hello, world!"\n' expected = [ Language(id=LanguageId('4022'), name='F# (.NET Core 3.1.201)'), Language(id=LanguageId('4023'), name='F# (Mono 10.2.3)') ] self.assertEqual( language_gussing.guess_languages_of_file( filename=pathlib.Path(filename), code=code.encode(), languages=languages), expected)
def test_codeforces_pypy_3(self): languages = languages_codeforces filename = 'main.py' code = 'print("hello")\n' python_version = 'auto' python_interpreter = 'pypy' expected = [Language(id=LanguageId('41'), name='PyPy 3.6 (7.2.0)')] self.assertEqual( language_gussing.guess_languages_of_file( filename=pathlib.Path(filename), code=code.encode(), languages=languages, python_version=python_version, python_interpreter=python_interpreter), expected)
def test_atcoder_4_python_3(self): languages = languages_atcoder_4 filename = 'main.py' code = 'print("hello")\n' python_version = 'auto' python_interpreter = 'cpython' expected = [Language(id=LanguageId('4006'), name='Python (3.8.2)')] self.assertEqual( language_gussing.guess_languages_of_file( filename=pathlib.Path(filename), code=code.encode(), languages=languages, python_version=python_version, python_interpreter=python_interpreter), expected)
def test_atcoder_4_clang(self): languages = languages_atcoder_4 filename = 'main.cpp' code = 'int main() {}\n' cxx_latest = True cxx_compiler = 'clang' expected = [Language(id=LanguageId('4004'), name='C++ (Clang 10.0.0)')] self.assertEqual( language_gussing.guess_languages_of_file( filename=pathlib.Path(filename), code=code.encode(), languages=languages, cxx_latest=cxx_latest, cxx_compiler=cxx_compiler), expected)
def test_atcoder_3_gcc(self): languages = languages_atcoder_3 filename = 'main.cpp' code = 'int main() {}\n' cxx_latest = True cxx_compiler = 'gcc' expected = [Language(id=LanguageId('3003'), name='C++14 (GCC 5.4.1)')] self.assertEqual( language_gussing.guess_languages_of_file( filename=pathlib.Path(filename), code=code.encode(), languages=languages, cxx_latest=cxx_latest, cxx_compiler=cxx_compiler), expected)
def test_codeforces_clang(self): languages = languages_codeforces filename = 'main.cpp' code = 'int main() {}\n' cxx_latest = True cxx_compiler = 'clang' expected = [ Language(id=LanguageId('52'), name='Clang++17 Diagnostics') ] self.assertEqual( language_gussing.guess_languages_of_file( filename=pathlib.Path(filename), code=code.encode(), languages=languages, cxx_latest=cxx_latest, cxx_compiler=cxx_compiler), expected)
def test_codeforces_pypy_2(self): languages = languages_codeforces filename = 'main.py' code = textwrap.dedent("""\ #!/usr/bin/env python2 print("hello") """) python_version = 'auto' python_interpreter = 'pypy' expected = [Language(id=LanguageId('40'), name='PyPy 2.7 (7.2.0)')] self.assertEqual( language_gussing.guess_languages_of_file( filename=pathlib.Path(filename), code=code.encode(), languages=languages, python_version=python_version, python_interpreter=python_interpreter), expected)
def test_atcoder_3_python_2(self): languages = languages_atcoder_3 filename = 'main.py' code = textwrap.dedent("""\ #!/usr/bin/env python2 print("hello") """) python_version = 'auto' python_interpreter = 'cpython' expected = [Language(id=LanguageId('3022'), name='Python2 (2.7.6)')] self.assertEqual( language_gussing.guess_languages_of_file( filename=pathlib.Path(filename), code=code.encode(), languages=languages, python_version=python_version, python_interpreter=python_interpreter), expected)
def test_codeforces_gcc(self): languages = languages_codeforces filename = 'main.cpp' code = 'int main() {}\n' cxx_latest = True cxx_compiler = 'gcc' expected = [ Language(id=LanguageId('61'), name='GNU G++17 9.2.0 (64 bit, msys 2)') ] self.assertEqual( language_gussing.guess_languages_of_file( filename=pathlib.Path(filename), code=code.encode(), languages=languages, cxx_latest=cxx_latest, cxx_compiler=cxx_compiler), expected)
def main(problem: Problem, *, path: pathlib.Path, session: requests.Session) -> Dict[str, Any]: """ :raises Exception: """ with open(str(path), "rb") as fh: code = fh.read() try: available_languages = problem.get_available_languages(session=session) except Exception as e: logger.error("failed to list available languages: %s", e) raise e # This uses the recommended settings becuase this is a command expected to work without customizing. If more customization is needed, users (i.e. developers) should write code by themselves for their tools. guessed_languages = language_guessing.guess_languages_of_file( path, code, languages=available_languages, cxx_latest=True, cxx_compiler='gcc', python_version='auto', python_interpreter='cpython', ) if len(guessed_languages) == 0: raise RuntimeError('no language id found') elif len(guessed_languages) == 1: guessed_language = guessed_languages[0] else: raise RuntimeError('too many language ids are found') result = { "id": guessed_language.id, "description": guessed_language.name, "context": { "problem": { "url": problem.get_url(), }, }, } # type: Dict[str, Any] return result