fix: more intuitive default score
This commit is contained in:
parent
29952a9d2d
commit
fd7d09e7b2
|
@ -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")
|
||||
|
||||
|
|
|
@ -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="")
|
||||
|
|
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,
|
||||
"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
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user