fix: more intuitive default score
This commit is contained in:
parent
29952a9d2d
commit
fd7d09e7b2
|
@ -99,6 +99,9 @@ class ParserDiffOutputs(BaseModel):
|
||||||
|
|
||||||
class ParserDiff(BaseModel):
|
class ParserDiff(BaseModel):
|
||||||
output: ParserDiffOutputs = ParserDiffOutputs()
|
output: ParserDiffOutputs = ParserDiffOutputs()
|
||||||
|
|
||||||
|
|
||||||
|
class ParserDiffFull(ParserDiff):
|
||||||
default_score: int = Field(
|
default_score: int = Field(
|
||||||
DEFAULT_CASE_SCORE,
|
DEFAULT_CASE_SCORE,
|
||||||
validation_alias=AliasChoices("default-score", "default_score"),
|
validation_alias=AliasChoices("default-score", "default_score"),
|
||||||
|
@ -147,7 +150,7 @@ class Parser(str, Enum):
|
||||||
ELF = "elf"
|
ELF = "elf"
|
||||||
|
|
||||||
|
|
||||||
class Case(BaseModel):
|
class CaseBase(BaseModel):
|
||||||
env: List[str] = []
|
env: List[str] = []
|
||||||
command: str = "" # Command to run
|
command: str = "" # Command to run
|
||||||
files: StageFiles = StageFiles()
|
files: StageFiles = StageFiles()
|
||||||
|
@ -158,10 +161,17 @@ class Case(BaseModel):
|
||||||
)
|
)
|
||||||
limit: Limit = Limit()
|
limit: Limit = Limit()
|
||||||
score: int = 0
|
score: int = 0
|
||||||
|
|
||||||
|
|
||||||
|
class StageCase(CaseBase):
|
||||||
|
diff: ParserDiffFull = ParserDiffFull()
|
||||||
|
|
||||||
|
|
||||||
|
class DictCase(CaseBase):
|
||||||
diff: ParserDiff = ParserDiff()
|
diff: ParserDiff = ParserDiff()
|
||||||
|
|
||||||
|
|
||||||
class Stage(Case):
|
class Stage(StageCase):
|
||||||
name: str = "" # stage name
|
name: str = "" # stage name
|
||||||
skip: List[str] = []
|
skip: List[str] = []
|
||||||
|
|
||||||
|
@ -182,7 +192,7 @@ class Stage(Case):
|
||||||
)
|
)
|
||||||
file: ParserFile = ParserFile()
|
file: ParserFile = ParserFile()
|
||||||
|
|
||||||
cases: Dict[str, Case] = {}
|
cases: Dict[str, DictCase] = {}
|
||||||
|
|
||||||
model_config = ConfigDict(extra="allow")
|
model_config = ConfigDict(extra="allow")
|
||||||
|
|
||||||
|
|
|
@ -182,7 +182,7 @@ def fix_file(file_parser_config: task.ParserFile, file_parser: result.Parser) ->
|
||||||
|
|
||||||
|
|
||||||
def fix_diff(
|
def fix_diff(
|
||||||
_: task.ParserDiff,
|
_: task.ParserDiffFull,
|
||||||
diff_parser: result.Parser,
|
diff_parser: result.Parser,
|
||||||
task_stage: task.Stage,
|
task_stage: task.Stage,
|
||||||
executor: result.Executor,
|
executor: result.Executor,
|
||||||
|
@ -231,7 +231,11 @@ def fix_diff(
|
||||||
parser_case = result.DiffCasesConfig(
|
parser_case = result.DiffCasesConfig(
|
||||||
outputs=[
|
outputs=[
|
||||||
result.DiffOutputConfig(
|
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",
|
file_name="stdout",
|
||||||
answer_path=stdout,
|
answer_path=stdout,
|
||||||
force_quit_on_diff=case.diff.output.force_quit,
|
force_quit_on_diff=case.diff.output.force_quit,
|
||||||
|
@ -268,7 +272,7 @@ def fix_diff(
|
||||||
|
|
||||||
|
|
||||||
def get_unspecified_cases(
|
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]:
|
) -> List[str]:
|
||||||
testcases = set()
|
testcases = set()
|
||||||
for testcases_path in (task_root / task_path).parent.glob("**/*.in"):
|
for testcases_path in (task_root / task_path).parent.glob("**/*.in"):
|
||||||
|
@ -298,7 +302,7 @@ def get_unspecified_cases(
|
||||||
|
|
||||||
|
|
||||||
def get_stdin_stdout(
|
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]]:
|
) -> Tuple[result.Stdin, Optional[str]]:
|
||||||
case_stdout_name = case.out_ if case.out_ else f"{case_name}.out"
|
case_stdout_name = case.out_ if case.out_ else f"{case_name}.out"
|
||||||
stdin: result.Stdin = result.MemoryFile(content="")
|
stdin: result.Stdin = result.MemoryFile(content="")
|
||||||
|
|
0
tests/convert/basic/cases/case0.out
Normal file
0
tests/convert/basic/cases/case0.out
Normal file
0
tests/convert/basic/cases/case1.out
Normal file
0
tests/convert/basic/cases/case1.out
Normal file
0
tests/convert/basic/cases/case2.out
Normal file
0
tests/convert/basic/cases/case2.out
Normal file
|
@ -763,7 +763,27 @@
|
||||||
"dataSegmentLimit": false,
|
"dataSegmentLimit": false,
|
||||||
"addressSpaceLimit": false
|
"addressSpaceLimit": false
|
||||||
},
|
},
|
||||||
"cases": []
|
"cases": [
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"content": ""
|
||||||
|
},
|
||||||
|
"cpuLimit": 500000000,
|
||||||
|
"clockLimit": 1000000000,
|
||||||
|
"memoryLimit": 5242880
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"content": ""
|
||||||
|
},
|
||||||
|
"memoryLimit": 5242880
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"stdin": {
|
||||||
|
"content": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"parsers": [
|
"parsers": [
|
||||||
|
@ -771,7 +791,53 @@
|
||||||
"name": "diff",
|
"name": "diff",
|
||||||
"with": {
|
"with": {
|
||||||
"name": "diff",
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -92,12 +92,13 @@ 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
|
||||||
|
|
||||||
parsers = [ "diff", "result-detail" ]
|
parsers = [ "diff", "result-detail" ]
|
||||||
result-detail.exit-status = true
|
result-detail.exit-status = true
|
||||||
result-detail.stderr = true
|
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.diff.output.score = 5
|
|
||||||
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.output.ignore-spaces = true
|
||||||
|
@ -112,3 +113,5 @@ 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"
|
||||||
|
|
||||||
|
case2.diff.output.hide = true
|
||||||
|
|
Loading…
Reference in New Issue
Block a user