feat(diff): auto detect testcases #13
|
@ -5,6 +5,7 @@ from joj3_config_generator.models.common import Memory, Time
|
||||||
DEFAULT_CPU_LIMIT = Time("1s")
|
DEFAULT_CPU_LIMIT = Time("1s")
|
||||||
DEFAULT_MEMORY_LIMIT = Memory("256m")
|
DEFAULT_MEMORY_LIMIT = Memory("256m")
|
||||||
DEFAULT_FILE_LIMIT = Memory("32m")
|
DEFAULT_FILE_LIMIT = Memory("32m")
|
||||||
|
DEFAULT_CASE_SCORE = 5
|
||||||
|
|
||||||
JOJ3_CONFIG_ROOT = Path("/home/tt/.config/joj")
|
JOJ3_CONFIG_ROOT = Path("/home/tt/.config/joj")
|
||||||
TEAPOT_CONFIG_ROOT = Path("/home/tt/.config/teapot")
|
TEAPOT_CONFIG_ROOT = Path("/home/tt/.config/teapot")
|
||||||
|
|
|
@ -2,9 +2,9 @@ import re
|
||||||
import shlex
|
import shlex
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Callable, Dict, List, Tuple
|
from typing import Any, Callable, Dict, List, Set, Tuple
|
||||||
|
|
||||||
from joj3_config_generator.models import result, task
|
from joj3_config_generator.models import const, result, task
|
||||||
from joj3_config_generator.models.common import Memory, Time
|
from joj3_config_generator.models.common import Memory, Time
|
||||||
from joj3_config_generator.models.const import JOJ3_CONFIG_ROOT
|
from joj3_config_generator.models.const import JOJ3_CONFIG_ROOT
|
||||||
from joj3_config_generator.models.task import Parser as ParserEnum
|
from joj3_config_generator.models.task import Parser as ParserEnum
|
||||||
|
@ -32,7 +32,8 @@ def get_conf_stage(
|
||||||
parser_handler_map = get_parser_handler_map(
|
parser_handler_map = get_parser_handler_map(
|
||||||
task_stage,
|
task_stage,
|
||||||
conf_stage.executor,
|
conf_stage.executor,
|
||||||
JOJ3_CONFIG_ROOT / task_conf.path.parent,
|
task_conf.root,
|
||||||
|
task_conf.path,
|
||||||
)
|
)
|
||||||
for idx, parser in enumerate(task_stage.parsers):
|
for idx, parser in enumerate(task_stage.parsers):
|
||||||
if parser not in parser_handler_map:
|
if parser not in parser_handler_map:
|
||||||
|
@ -45,7 +46,8 @@ def get_conf_stage(
|
||||||
def get_parser_handler_map(
|
def get_parser_handler_map(
|
||||||
task_stage: task.Stage,
|
task_stage: task.Stage,
|
||||||
executor: result.Executor,
|
executor: result.Executor,
|
||||||
base_dir: Path,
|
task_root: Path,
|
||||||
|
task_path: Path,
|
||||||
) -> Dict[ParserEnum, Tuple[Callable[[Any, result.Parser], None], Any]]:
|
) -> Dict[ParserEnum, Tuple[Callable[[Any, result.Parser], None], Any]]:
|
||||||
return {
|
return {
|
||||||
ParserEnum.CLANG_TIDY: (fix_keyword, task_stage.clangtidy),
|
ParserEnum.CLANG_TIDY: (fix_keyword, task_stage.clangtidy),
|
||||||
|
@ -61,7 +63,8 @@ def get_parser_handler_map(
|
||||||
fix_diff,
|
fix_diff,
|
||||||
task_stage=task_stage,
|
task_stage=task_stage,
|
||||||
executor=executor,
|
executor=executor,
|
||||||
base_dir=base_dir,
|
task_root=task_root,
|
||||||
|
task_path=task_path,
|
||||||
),
|
),
|
||||||
task_stage.diff,
|
task_stage.diff,
|
||||||
),
|
),
|
||||||
|
@ -159,12 +162,22 @@ def fix_diff(
|
||||||
diff_parser: result.Parser,
|
diff_parser: result.Parser,
|
||||||
task_stage: task.Stage,
|
task_stage: task.Stage,
|
||||||
executor: result.Executor,
|
executor: result.Executor,
|
||||||
base_dir: Path,
|
task_root: Path,
|
||||||
|
task_path: Path,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
base_dir = JOJ3_CONFIG_ROOT / task_path.parent
|
||||||
valid_cases = (
|
valid_cases = (
|
||||||
(case, task_stage.cases[case])
|
(case, task_stage.cases[case])
|
||||||
for case in task_stage.cases
|
for case in task_stage.cases
|
||||||
if case not in task_stage.skip and case in task_stage.cases
|
if case not in task_stage.skip
|
||||||
|
)
|
||||||
|
testcases = get_testcases(task_root, task_path)
|
||||||
|
default_cases = sorted(
|
||||||
|
[
|
||||||
|
case
|
||||||
|
for case in testcases
|
||||||
|
if any(case.endswith(other) for other in task_stage.cases)
|
||||||
|
]
|
||||||
)
|
)
|
||||||
stage_cases = []
|
stage_cases = []
|
||||||
jon-lee marked this conversation as resolved
Outdated
|
|||||||
parser_cases = []
|
parser_cases = []
|
||||||
|
@ -203,5 +216,33 @@ def fix_diff(
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
parser_cases.append(parser_case)
|
parser_cases.append(parser_case)
|
||||||
|
for case in default_cases:
|
||||||
|
cmd = result.OptionalCmd(
|
||||||
|
stdin=result.LocalFile(src=str(base_dir / f"{case}.in"))
|
||||||
|
)
|
||||||
|
stage_cases.append(cmd)
|
||||||
|
parser_case = result.DiffCasesConfig(
|
||||||
|
outputs=[
|
||||||
|
result.DiffOutputConfig(
|
||||||
|
score=const.DEFAULT_CASE_SCORE,
|
||||||
|
file_name="stdout",
|
||||||
jon-lee marked this conversation as resolved
张泊明518370910136
commented
move it to move it to `const.py`
李衍志523370910113
commented
add add `DEFAULT_CASE_SCORE` now
|
|||||||
|
answer_path=str(base_dir / f"{case}.out"),
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
parser_cases.append(parser_case)
|
||||||
executor.with_.cases = stage_cases
|
executor.with_.cases = stage_cases
|
||||||
diff_parser.with_ = result.DiffConfig(name="diff", cases=parser_cases)
|
diff_parser.with_ = result.DiffConfig(name="diff", cases=parser_cases)
|
||||||
|
|
||||||
|
|
||||||
|
def get_testcases(
|
||||||
|
task_root: Path, task_path: Path
|
||||||
|
) -> Set[str]: # basedir here should be task_conf.root / task_conf.path
|
||||||
|
testcases = set()
|
||||||
|
for testcases_path in (task_root / task_path).parent.glob("**/*.in"):
|
||||||
|
testcases.add(
|
||||||
|
str(
|
||||||
|
testcases_path.relative_to((task_root / task_path).parent)
|
||||||
|
).removesuffix(".in")
|
||||||
|
)
|
||||||
|
return testcases
|
||||||
|
|
0
tests/convert/diff/case0.in
Normal file
0
tests/convert/diff/case0.in
Normal file
0
tests/convert/diff/case1.in
Normal file
0
tests/convert/diff/case1.in
Normal file
0
tests/convert/diff/case2.in
Normal file
0
tests/convert/diff/case2.in
Normal file
0
tests/convert/diff/case3.in
Normal file
0
tests/convert/diff/case3.in
Normal file
0
tests/convert/diff/case9.in
Normal file
0
tests/convert/diff/case9.in
Normal file
0
tests/convert/diff/case9.out
Normal file
0
tests/convert/diff/case9.out
Normal file
|
@ -75,6 +75,60 @@
|
||||||
"cpuLimit": 2000000000,
|
"cpuLimit": 2000000000,
|
||||||
"clockLimit": 4000000000,
|
"clockLimit": 4000000000,
|
||||||
"memoryLimit": 4194304
|
"memoryLimit": 4194304
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"src": "/home/tt/.config/joj/diff/case9.in"
|
||||||
|
},
|
||||||
|
"memoryLimit": 268435456
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"src": "/home/tt/.config/joj/diff/case11.in"
|
||||||
|
},
|
||||||
|
"memoryLimit": 268435456
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"src": "/home/tt/.config/joj/diff/case10.in"
|
||||||
|
},
|
||||||
|
"memoryLimit": 268435456
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"src": "/home/tt/.config/joj/diff/case5.in"
|
||||||
|
},
|
||||||
|
"memoryLimit": 268435456
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"src": "/home/tt/.config/joj/diff/case0.in"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"src": "/home/tt/.config/joj/diff/case1.in"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"src": "/home/tt/.config/joj/diff/case9.in"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"src": "/home/tt/.config/joj/diff/task1/case5.in"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"src": "/home/tt/.config/joj/diff/task1/subtask1/case10.in"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"src": "/home/tt/.config/joj/diff/task1/subtask1/case11.in"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -85,6 +139,78 @@
|
||||||
"with": {
|
"with": {
|
||||||
"name": "diff",
|
"name": "diff",
|
||||||
"cases": [
|
"cases": [
|
||||||
|
{
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"score": 5,
|
||||||
|
"fileName": "stdout",
|
||||||
|
"answerPath": "/home/tt/.config/joj/diff/case0.out",
|
||||||
|
"forceQuitOnDiff": false,
|
||||||
|
"alwaysHide": false,
|
||||||
|
"compareSpace": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"score": 123214122421,
|
||||||
|
"fileName": "stdout",
|
||||||
|
"answerPath": "/home/tt/.config/joj/diff/case1.out",
|
||||||
|
"forceQuitOnDiff": false,
|
||||||
|
"alwaysHide": false,
|
||||||
|
"compareSpace": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"score": 1232131,
|
||||||
|
"fileName": "stdout",
|
||||||
|
"answerPath": "/home/tt/.config/joj/diff/case9.out",
|
||||||
|
"forceQuitOnDiff": false,
|
||||||
|
"alwaysHide": false,
|
||||||
|
"compareSpace": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"score": 92321,
|
||||||
|
"fileName": "stdout",
|
||||||
|
"answerPath": "/home/tt/.config/joj/diff/case11.out",
|
||||||
|
"forceQuitOnDiff": false,
|
||||||
|
"alwaysHide": false,
|
||||||
|
"compareSpace": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"score": 823131,
|
||||||
|
"fileName": "stdout",
|
||||||
|
"answerPath": "/home/tt/.config/joj/diff/case10.out",
|
||||||
|
"forceQuitOnDiff": false,
|
||||||
|
"alwaysHide": false,
|
||||||
|
"compareSpace": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"score": 2590,
|
||||||
|
"fileName": "stdout",
|
||||||
|
"answerPath": "/home/tt/.config/joj/diff/case5.out",
|
||||||
|
"forceQuitOnDiff": false,
|
||||||
|
"alwaysHide": false,
|
||||||
|
"compareSpace": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
|
@ -108,6 +234,54 @@
|
||||||
"compareSpace": false
|
"compareSpace": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"score": 5,
|
||||||
|
"fileName": "stdout",
|
||||||
|
"answerPath": "/home/tt/.config/joj/diff/case9.out",
|
||||||
|
"forceQuitOnDiff": false,
|
||||||
|
"alwaysHide": false,
|
||||||
|
"compareSpace": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"score": 5,
|
||||||
|
"fileName": "stdout",
|
||||||
|
"answerPath": "/home/tt/.config/joj/diff/task1/case5.out",
|
||||||
|
"forceQuitOnDiff": false,
|
||||||
|
"alwaysHide": false,
|
||||||
|
"compareSpace": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"score": 5,
|
||||||
|
"fileName": "stdout",
|
||||||
|
"answerPath": "/home/tt/.config/joj/diff/task1/subtask1/case10.out",
|
||||||
|
"forceQuitOnDiff": false,
|
||||||
|
"alwaysHide": false,
|
||||||
|
"compareSpace": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"score": 5,
|
||||||
|
"fileName": "stdout",
|
||||||
|
"answerPath": "/home/tt/.config/joj/diff/task1/subtask1/case11.out",
|
||||||
|
"forceQuitOnDiff": false,
|
||||||
|
"alwaysHide": false,
|
||||||
|
"compareSpace": false
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,10 +23,18 @@ case0.diff.output.ignore_spaces = true
|
||||||
#case0.command = "./h7/build/ex2"
|
#case0.command = "./h7/build/ex2"
|
||||||
case0.in = "case0.in"
|
case0.in = "case0.in"
|
||||||
|
|
||||||
case1.diff.output.score = 5
|
case1.diff.output.score = 123214122421
|
||||||
case1.limit.cpu = "2s"
|
case1.limit.cpu = "2s"
|
||||||
case1.limit.mem = "4m"
|
case1.limit.mem = "4m"
|
||||||
case1.diff.output.ignore_spaces = true
|
case1.diff.output.ignore_spaces = true
|
||||||
#case1.limit.stdout = 8
|
#case1.limit.stdout = 8
|
||||||
#case1.command = "./h7/build/ex2"
|
#case1.command = "./h7/build/ex2"
|
||||||
case1.in = "case1.in"
|
case1.in = "case1.in"
|
||||||
|
|
||||||
|
case9.diff.output.score = 1232131
|
||||||
|
|
||||||
|
case11.diff.output.score = 92321
|
||||||
|
|
||||||
|
case10.diff.output.score = 823131
|
||||||
|
|
||||||
|
case5.diff.output.score = 2590
|
||||||
|
|
0
tests/convert/diff/task1/case4.in
Normal file
0
tests/convert/diff/task1/case4.in
Normal file
0
tests/convert/diff/task1/case4.out
Normal file
0
tests/convert/diff/task1/case4.out
Normal file
0
tests/convert/diff/task1/case5.in
Normal file
0
tests/convert/diff/task1/case5.in
Normal file
0
tests/convert/diff/task1/case5.out
Normal file
0
tests/convert/diff/task1/case5.out
Normal file
0
tests/convert/diff/task1/subtask1/case10.in
Normal file
0
tests/convert/diff/task1/subtask1/case10.in
Normal file
0
tests/convert/diff/task1/subtask1/case10.out
Normal file
0
tests/convert/diff/task1/subtask1/case10.out
Normal file
0
tests/convert/diff/task1/subtask1/case11.in
Normal file
0
tests/convert/diff/task1/subtask1/case11.in
Normal file
0
tests/convert/diff/task1/subtask1/case11.out
Normal file
0
tests/convert/diff/task1/subtask1/case11.out
Normal file
0
tests/convert/diff/task2/case6.in
Normal file
0
tests/convert/diff/task2/case6.in
Normal file
0
tests/convert/diff/task2/case6.out
Normal file
0
tests/convert/diff/task2/case6.out
Normal file
0
tests/convert/diff/task2/case7.in
Normal file
0
tests/convert/diff/task2/case7.in
Normal file
0
tests/convert/diff/task2/case8.out
Normal file
0
tests/convert/diff/task2/case8.out
Normal file
Loading…
Reference in New Issue
Block a user
remove it