feat: diff.output.xxx -> diff.xxx
All checks were successful
build / build (push) Successful in 3m50s
build / trigger-build-image (push) Has been skipped
build / build (pull_request) Successful in 5m4s
build / trigger-build-image (pull_request) Has been skipped

This commit is contained in:
张泊明518370910136 2025-06-21 12:05:47 -04:00
parent a49bc19b1e
commit 09409158fa
GPG Key ID: D47306D7062CDA9D
4 changed files with 39 additions and 49 deletions

View File

@ -79,8 +79,8 @@ class ParserKeyword(BaseModel):
weight: List[int] = [] weight: List[int] = []
class ParserDiffOutputs(BaseModel): class ParserDiff(BaseModel):
score: int = 0 score: int = DEFAULT_CASE_SCORE
ignore_spaces: bool = Field( ignore_spaces: bool = Field(
True, validation_alias=AliasChoices("ignore-spaces", "ignore_spaces") 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): class StageFiles(BaseModel):
import_: List[str] = Field([], validation_alias="import") import_: List[str] = Field([], validation_alias="import")
export: List[str] = [] export: List[str] = []
@ -163,15 +152,11 @@ class CaseBase(BaseModel):
score: int = 0 score: int = 0
class StageCase(CaseBase):
diff: ParserDiffFull = ParserDiffFull()
class DictCase(CaseBase): class DictCase(CaseBase):
diff: ParserDiff = ParserDiff() diff: ParserDiff = ParserDiff()
class Stage(StageCase): class Stage(CaseBase):
name: str = "" # stage name name: str = "" # stage name
skip: List[str] = [] skip: List[str] = []
@ -191,6 +176,7 @@ class Stage(StageCase):
validation_alias=AliasChoices("result-detail", "result_detail"), validation_alias=AliasChoices("result-detail", "result_detail"),
) )
file: ParserFile = ParserFile() file: ParserFile = ParserFile()
diff: ParserDiff = ParserDiff()
cases: Dict[str, DictCase] = {} 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( def fix_diff(
_: task.ParserDiffFull, _: task.ParserDiff,
diff_parser: result.Parser, diff_parser: result.Parser,
task_stage: task.Stage, task_stage: task.Stage,
executor: result.Executor, executor: result.Executor,
@ -228,22 +228,24 @@ def fix_diff(
if cmd.proc_limit == executor.with_.default.proc_limit: if cmd.proc_limit == executor.with_.default.proc_limit:
cmd.proc_limit = None cmd.proc_limit = None
stage_cases.append(cmd) 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( parser_case = result.DiffCasesConfig(
outputs=[ outputs=[
result.DiffOutputConfig( result.DiffOutputConfig(
score=( score=get_diff_attribute("score"),
case.diff.output.score
if "score" in case.diff.output.model_fields_set
else task_stage.diff.default_score
),
filename="stdout", filename="stdout",
answer_path=stdout, answer_path=stdout,
force_quit_on_diff=case.diff.output.force_quit, compare_space=not get_diff_attribute("ignore_spaces"),
always_hide=case.diff.output.hide, always_hide=get_diff_attribute("hide"),
compare_space=not case.diff.output.ignore_spaces, force_quit_on_diff=get_diff_attribute("force_quit"),
max_diff_length=case.diff.output.max_length, max_diff_length=get_diff_attribute("max_length"),
max_diff_lines=case.diff.output.max_lines, max_diff_lines=get_diff_attribute("max_lines"),
hide_common_prefix=case.diff.output.hide_common_prefix, hide_common_prefix=get_diff_attribute("hide_common_prefix"),
) )
] ]
) )
@ -251,18 +253,20 @@ def fix_diff(
for case_name in unspecified_cases: for case_name in unspecified_cases:
cmd = result.OptionalCmd( cmd = result.OptionalCmd(
stdin=result.LocalFile(src=str(base_dir / f"{case_name}.in")), 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) stage_cases.append(cmd)
parser_case = result.DiffCasesConfig( parser_case = result.DiffCasesConfig(
outputs=[ outputs=[
result.DiffOutputConfig( result.DiffOutputConfig(
score=task_stage.diff.default_score, score=task_stage.diff.score,
filename="stdout", filename="stdout",
answer_path=str(base_dir / f"{case_name}.out"), 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" ] files.import = [ "h7/build/ex2-asan" ]
limit.mem = "128m" limit.mem = "128m"
diff.default-score = 10 diff.score = 10
parsers = [ "diff", "result-detail" ] parsers = [ "diff", "result-detail" ]
result-detail.exit-status = true result-detail.exit-status = true
@ -101,17 +101,17 @@ result-detail.stderr = true
# will be removed as long as the name is fixed # will be removed as long as the name is fixed
case0.limit.cpu = "0.5s" case0.limit.cpu = "0.5s"
case0.limit.mem = "5m" case0.limit.mem = "5m"
case0.diff.output.ignore-spaces = true case0.diff.ignore-spaces = true
#case0.limit.stdout = 8 #case0.limit.stdout = 8
#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.score = 5
case1.limit.cpu = "1s" case1.limit.cpu = "1s"
case1.limit.mem = "5m" case1.limit.mem = "5m"
case1.diff.output.ignore-spaces = true case1.diff.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"
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.exit-status = true
result-detail.stderr = 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.cpu = "1s"
case0.limit.mem = "2m" case0.limit.mem = "2m"
case0.diff.output.ignore-spaces = true case0.diff.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 = 123214122421 case1.diff.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.ignore-spaces = true
case1.command = "./h7/build/ex2" case1.command = "./h7/build/ex2"
case9.diff.output.score = 1232131 case9.diff.score = 1232131
case9.limit.mem = "10m" 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