feat: diff.output.xxx -> diff.xxx #26

Merged
张泊明518370910136 merged 3 commits from feat/better-diff into master 2025-06-22 01:59:20 +08:00
4 changed files with 39 additions and 49 deletions
Showing only changes of commit 3d594c9710 - Show all commits

View File

@ -79,8 +79,8 @@ class ParserKeyword(BaseModel):
weight: List[int] = []
class ParserDiffOutputs(BaseModel):
score: int = 0
class ParserDiff(BaseModel):
score: int = DEFAULT_CASE_SCORE
ignore_spaces: bool = Field(
True, validation_alias=AliasChoices("ignore-spaces", "ignore_spaces")
)
@ -97,17 +97,6 @@ class ParserDiffOutputs(BaseModel):
)
class ParserDiff(BaseModel):
output: ParserDiffOutputs = ParserDiffOutputs()
class ParserDiffFull(ParserDiff):
default_score: int = Field(
DEFAULT_CASE_SCORE,
validation_alias=AliasChoices("default-score", "default_score"),
)
class StageFiles(BaseModel):
import_: List[str] = Field([], validation_alias="import")
export: List[str] = []
@ -162,15 +151,11 @@ class CaseBase(BaseModel):
limit: Limit = Limit()
class StageCase(CaseBase):
diff: ParserDiffFull = ParserDiffFull()
class DictCase(CaseBase):
diff: ParserDiff = ParserDiff()
class Stage(StageCase):
class Stage(CaseBase):
name: str = "" # stage name
skip: List[str] = []
@ -190,6 +175,7 @@ class Stage(StageCase):
validation_alias=AliasChoices("result-detail", "result_detail"),
)
file: ParserFile = ParserFile()
diff: ParserDiff = ParserDiff()
cases: Dict[str, DictCase] = {}

View File

@ -182,7 +182,7 @@ def fix_file(file_parser_config: task.ParserFile, file_parser: result.Parser) ->
def fix_diff(
_: task.ParserDiffFull,
_: task.ParserDiff,
diff_parser: result.Parser,
task_stage: task.Stage,
executor: result.Executor,
@ -228,22 +228,24 @@ def fix_diff(
if cmd.proc_limit == executor.with_.default.proc_limit:
cmd.proc_limit = None
stage_cases.append(cmd)
def get_diff_attribute(attribute_name: str) -> Any:
if case.diff and attribute_name in case.diff.model_fields_set:
return getattr(case.diff, attribute_name)
return getattr(task_stage.diff, attribute_name)
parser_case = result.DiffCasesConfig(
outputs=[
result.DiffOutputConfig(
score=(
case.diff.output.score
if "score" in case.diff.output.model_fields_set
else task_stage.diff.default_score
),
score=get_diff_attribute("score"),
filename="stdout",
answer_path=stdout,
force_quit_on_diff=case.diff.output.force_quit,
always_hide=case.diff.output.hide,
compare_space=not case.diff.output.ignore_spaces,
max_diff_length=case.diff.output.max_length,
max_diff_lines=case.diff.output.max_lines,
hide_common_prefix=case.diff.output.hide_common_prefix,
compare_space=not get_diff_attribute("ignore_spaces"),
always_hide=get_diff_attribute("hide"),
force_quit_on_diff=get_diff_attribute("force_quit"),
max_diff_length=get_diff_attribute("max_length"),
max_diff_lines=get_diff_attribute("max_lines"),
hide_common_prefix=get_diff_attribute("hide_common_prefix"),
)
]
)
@ -251,18 +253,20 @@ def fix_diff(
for case_name in unspecified_cases:
cmd = result.OptionalCmd(
stdin=result.LocalFile(src=str(base_dir / f"{case_name}.in")),
cpu_limit=None,
clock_limit=None,
memory_limit=None,
proc_limit=None,
)
stage_cases.append(cmd)
parser_case = result.DiffCasesConfig(
outputs=[
result.DiffOutputConfig(
score=task_stage.diff.default_score,
score=task_stage.diff.score,
filename="stdout",
answer_path=str(base_dir / f"{case_name}.out"),
compare_space=not task_stage.diff.ignore_spaces,
always_hide=task_stage.diff.hide,
force_quit_on_diff=task_stage.diff.force_quit,
max_diff_length=task_stage.diff.max_length,
max_diff_lines=task_stage.diff.max_lines,
hide_common_prefix=task_stage.diff.hide_common_prefix,
)
]
)

View File

@ -92,7 +92,7 @@ copy-in-cwd = false
files.import = [ "h7/build/ex2-asan" ]
limit.mem = "128m"
diff.default-score = 10
diff.score = 10
parsers = [ "diff", "result-detail" ]
result-detail.exit-status = true
@ -101,17 +101,17 @@ result-detail.stderr = true
# will be removed as long as the name is fixed
case0.limit.cpu = "0.5s"
case0.limit.mem = "5m"
case0.diff.output.ignore-spaces = true
case0.diff.ignore-spaces = true
#case0.limit.stdout = 8
#case0.command = "./h7/build/ex2"
case0.in = "case0.in"
case1.diff.output.score = 5
case1.diff.score = 5
case1.limit.cpu = "1s"
case1.limit.mem = "5m"
case1.diff.output.ignore-spaces = true
case1.diff.ignore-spaces = true
#case1.limit.stdout = 8
#case1.command = "./h7/build/ex2"
case1.in = "case1.in"
case2.diff.output.hide = true
case2.diff.hide = true

View File

@ -17,26 +17,26 @@ parsers = [ "diff", "result-detail" ]
result-detail.exit-status = true
result-detail.stderr = true
diff.default-score = 100
diff.score = 100
case0.diff.output.score = 5
case0.diff.score = 5
case0.limit.cpu = "1s"
case0.limit.mem = "2m"
case0.diff.output.ignore-spaces = true
case0.diff.ignore-spaces = true
case0.command = "./h7/build/ex2"
case0.in = "case0.in"
case1.diff.output.score = 123214122421
case1.diff.score = 123214122421
case1.limit.cpu = "2s"
case1.limit.mem = "4m"
case1.diff.output.ignore-spaces = true
case1.diff.ignore-spaces = true
case1.command = "./h7/build/ex2"
case9.diff.output.score = 1232131
case9.diff.score = 1232131
case9.limit.mem = "10m"
case11.diff.output.score = 92321
case11.diff.score = 92321
case10.diff.output.score = 823131
case10.diff.score = 823131
case5.diff.output.score = 2590
case5.diff.score = 2590