コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)
コード例 #7
0
    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)
コード例 #8
0
    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)
コード例 #9
0
    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)
コード例 #10
0
    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)
コード例 #11
0
    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)
コード例 #12
0
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