fix: more intuitive default score
All checks were successful
build / build (push) Successful in 2m4s
build / trigger-build-image (push) Successful in 9s

This commit is contained in:
张泊明518370910136 2025-06-20 11:54:51 -04:00
parent 29952a9d2d
commit fd7d09e7b2
GPG Key ID: D47306D7062CDA9D
7 changed files with 93 additions and 10 deletions

View File

@ -99,6 +99,9 @@ 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"),
@ -147,7 +150,7 @@ class Parser(str, Enum):
ELF = "elf"
class Case(BaseModel):
class CaseBase(BaseModel):
env: List[str] = []
command: str = "" # Command to run
files: StageFiles = StageFiles()
@ -158,10 +161,17 @@ class Case(BaseModel):
)
limit: Limit = Limit()
score: int = 0
class StageCase(CaseBase):
diff: ParserDiffFull = ParserDiffFull()
class DictCase(CaseBase):
diff: ParserDiff = ParserDiff()
class Stage(Case):
class Stage(StageCase):
name: str = "" # stage name
skip: List[str] = []
@ -182,7 +192,7 @@ class Stage(Case):
)
file: ParserFile = ParserFile()
cases: Dict[str, Case] = {}
cases: Dict[str, DictCase] = {}
model_config = ConfigDict(extra="allow")

View File

@ -182,7 +182,7 @@ def fix_file(file_parser_config: task.ParserFile, file_parser: result.Parser) ->
def fix_diff(
_: task.ParserDiff,
_: task.ParserDiffFull,
diff_parser: result.Parser,
task_stage: task.Stage,
executor: result.Executor,
@ -231,7 +231,11 @@ def fix_diff(
parser_case = result.DiffCasesConfig(
outputs=[
result.DiffOutputConfig(
score=case.diff.output.score,
score=(
case.diff.output.score
if "score" in case.diff.output.model_fields_set
else task_stage.diff.default_score
),
file_name="stdout",
answer_path=stdout,
force_quit_on_diff=case.diff.output.force_quit,
@ -268,7 +272,7 @@ def fix_diff(
def get_unspecified_cases(
task_root: Path, task_path: Path, cases: Dict[str, task.Case]
task_root: Path, task_path: Path, cases: Dict[str, task.DictCase]
) -> List[str]:
testcases = set()
for testcases_path in (task_root / task_path).parent.glob("**/*.in"):
@ -298,7 +302,7 @@ def get_unspecified_cases(
def get_stdin_stdout(
task_root: Path, task_path: Path, case_name: str, case: task.Case
task_root: Path, task_path: Path, case_name: str, case: task.DictCase
) -> Tuple[result.Stdin, Optional[str]]:
case_stdout_name = case.out_ if case.out_ else f"{case_name}.out"
stdin: result.Stdin = result.MemoryFile(content="")

View File

View File

View File

View File

@ -763,7 +763,27 @@
"dataSegmentLimit": false,
"addressSpaceLimit": false
},
"cases": []
"cases": [
{
"stdin": {
"content": ""
},
"cpuLimit": 500000000,
"clockLimit": 1000000000,
"memoryLimit": 5242880
},
{
"stdin": {
"content": ""
},
"memoryLimit": 5242880
},
{
"stdin": {
"content": ""
}
}
]
}
},
"parsers": [
@ -771,7 +791,53 @@
"name": "diff",
"with": {
"name": "diff",
"cases": []
"cases": [
{
"outputs": [
{
"score": 10,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/basic/cases/case0.out",
"compareSpace": false,
"alwaysHide": false,
"forceQuitOnDiff": false,
"maxDiffLength": 2048,
"maxDiffLines": 50,
"hideCommonPrefix": false
}
]
},
{
"outputs": [
{
"score": 5,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/basic/cases/case1.out",
"compareSpace": false,
"alwaysHide": false,
"forceQuitOnDiff": false,
"maxDiffLength": 2048,
"maxDiffLines": 50,
"hideCommonPrefix": false
}
]
},
{
"outputs": [
{
"score": 10,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/basic/cases/case2.out",
"compareSpace": false,
"alwaysHide": true,
"forceQuitOnDiff": false,
"maxDiffLength": 2048,
"maxDiffLines": 50,
"hideCommonPrefix": false
}
]
}
]
}
},
{

View File

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