From 6375a37069df7747bd2f42db2ced6ca7c6528c53 Mon Sep 17 00:00:00 2001 From: jon-lee Date: Thu, 22 May 2025 01:34:01 +0800 Subject: [PATCH] fix(diff): bugs in auto detect cases (#14) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - fix original logic issue of cases generation (originally there is duplication on cases, e.g. `case5`, `task1/case5`) - fix the issue that without any specification there is no cases input and output in `diff` stage Co-authored-by: Boming Zhang Reviewed-on: https://focs.ji.sjtu.edu.cn/git/JOJ/JOJ3-config-generator/pulls/14 Reviewed-by: 张泊明518370910136 Co-authored-by: jon-lee Co-committed-by: jon-lee --- joj3_config_generator/transformers/task.py | 26 +-- tests/convert/basic/task.json | 44 +---- tests/convert/diff/task.json | 178 +++++++++++---------- tests/convert/diff/task.toml | 7 +- tests/convert/diff/task2/case7.out | 0 tests/convert/diff/task2/case8.in | 0 6 files changed, 112 insertions(+), 143 deletions(-) create mode 100644 tests/convert/diff/task2/case7.out create mode 100644 tests/convert/diff/task2/case8.in diff --git a/joj3_config_generator/transformers/task.py b/joj3_config_generator/transformers/task.py index b947247..e1b98ca 100644 --- a/joj3_config_generator/transformers/task.py +++ b/joj3_config_generator/transformers/task.py @@ -166,19 +166,25 @@ def fix_diff( task_path: Path, ) -> None: base_dir = JOJ3_CONFIG_ROOT / task_path.parent - valid_cases = ( - (case, task_stage.cases[case]) - for case in task_stage.cases - if case not in task_stage.skip - ) + # all intended testcases that is detected testcases = get_testcases(task_root, task_path) + # all testcases that is not specified in the toml config default_cases = sorted( - [ - case - for case in testcases - if any(case.endswith(other) for other in task_stage.cases) - ] + testcases.difference( + [ + casei + for casei in testcases + if any(casei.endswith(casej) for casej in task_stage.cases) + ] + ) ) + # those in toml config that is not skiped + valid_cases = [ + (casej, task_stage.cases[casei]) + for casei in task_stage.cases + for casej in testcases + if (casei not in task_stage.skip and casej.endswith(casei)) + ] stage_cases = [] parser_cases = [] for case, case_stage in valid_cases: diff --git a/tests/convert/basic/task.json b/tests/convert/basic/task.json index 9ca4676..82e35e4 100644 --- a/tests/convert/basic/task.json +++ b/tests/convert/basic/task.json @@ -719,22 +719,7 @@ "dataSegmentLimit": false, "addressSpaceLimit": false }, - "cases": [ - { - "stdin": { - "src": "/home/tt/.config/joj/basic/case0.in" - }, - "cpuLimit": 500000000, - "clockLimit": 1000000000, - "memoryLimit": 5242880 - }, - { - "stdin": { - "src": "/home/tt/.config/joj/basic/case1.in" - }, - "memoryLimit": 5242880 - } - ] + "cases": [] } }, "parsers": [ @@ -742,32 +727,7 @@ "name": "diff", "with": { "name": "diff", - "cases": [ - { - "outputs": [ - { - "score": 5, - "fileName": "stdout", - "answerPath": "/home/tt/.config/joj/basic/case0.out", - "forceQuitOnDiff": false, - "alwaysHide": false, - "compareSpace": false - } - ] - }, - { - "outputs": [ - { - "score": 5, - "fileName": "stdout", - "answerPath": "/home/tt/.config/joj/basic/case1.out", - "forceQuitOnDiff": false, - "alwaysHide": false, - "compareSpace": false - } - ] - } - ] + "cases": [] } }, { diff --git a/tests/convert/diff/task.json b/tests/convert/diff/task.json index 4bdd573..63a4607 100644 --- a/tests/convert/diff/task.json +++ b/tests/convert/diff/task.json @@ -65,12 +65,18 @@ }, "cases": [ { + "args": [ + "./h7/build/ex2" + ], "stdin": { "src": "/home/tt/.config/joj/diff/case0.in" }, "memoryLimit": 2097152 }, { + "args": [ + "./h7/build/ex2" + ], "stdin": { "src": "/home/tt/.config/joj/diff/case1.in" }, @@ -86,50 +92,50 @@ }, { "stdin": { - "src": "/home/tt/.config/joj/diff/case11.in" + "src": "/home/tt/.config/joj/diff/task1/subtask1/case11.in" }, "memoryLimit": 268435456 }, - { - "stdin": { - "src": "/home/tt/.config/joj/diff/case10.in" - }, - "memoryLimit": 268435456 - }, - { - "stdin": { - "src": "/home/tt/.config/joj/diff/case5.in" - }, - "memoryLimit": 268435456 - }, - { - "stdin": { - "src": "/home/tt/.config/joj/diff/case0.in" - } - }, - { - "stdin": { - "src": "/home/tt/.config/joj/diff/case1.in" - } - }, - { - "stdin": { - "src": "/home/tt/.config/joj/diff/case9.in" - } - }, - { - "stdin": { - "src": "/home/tt/.config/joj/diff/task1/case5.in" - } - }, { "stdin": { "src": "/home/tt/.config/joj/diff/task1/subtask1/case10.in" + }, + "memoryLimit": 268435456 + }, + { + "stdin": { + "src": "/home/tt/.config/joj/diff/task1/case5.in" + }, + "memoryLimit": 268435456 + }, + { + "stdin": { + "src": "/home/tt/.config/joj/diff/case2.in" } }, { "stdin": { - "src": "/home/tt/.config/joj/diff/task1/subtask1/case11.in" + "src": "/home/tt/.config/joj/diff/case3.in" + } + }, + { + "stdin": { + "src": "/home/tt/.config/joj/diff/task1/case4.in" + } + }, + { + "stdin": { + "src": "/home/tt/.config/joj/diff/task2/case6.in" + } + }, + { + "stdin": { + "src": "/home/tt/.config/joj/diff/task2/case7.in" + } + }, + { + "stdin": { + "src": "/home/tt/.config/joj/diff/task2/case8.in" } } ] @@ -182,7 +188,7 @@ { "score": 92321, "fileName": "stdout", - "answerPath": "/home/tt/.config/joj/diff/case11.out", + "answerPath": "/home/tt/.config/joj/diff/task1/subtask1/case11.out", "forceQuitOnDiff": false, "alwaysHide": false, "compareSpace": false @@ -194,7 +200,7 @@ { "score": 823131, "fileName": "stdout", - "answerPath": "/home/tt/.config/joj/diff/case10.out", + "answerPath": "/home/tt/.config/joj/diff/task1/subtask1/case10.out", "forceQuitOnDiff": false, "alwaysHide": false, "compareSpace": false @@ -206,54 +212,6 @@ { "score": 2590, "fileName": "stdout", - "answerPath": "/home/tt/.config/joj/diff/case5.out", - "forceQuitOnDiff": false, - "alwaysHide": false, - "compareSpace": false - } - ] - }, - { - "outputs": [ - { - "score": 5, - "fileName": "stdout", - "answerPath": "/home/tt/.config/joj/diff/case0.out", - "forceQuitOnDiff": false, - "alwaysHide": false, - "compareSpace": false - } - ] - }, - { - "outputs": [ - { - "score": 5, - "fileName": "stdout", - "answerPath": "/home/tt/.config/joj/diff/case1.out", - "forceQuitOnDiff": false, - "alwaysHide": false, - "compareSpace": false - } - ] - }, - { - "outputs": [ - { - "score": 5, - "fileName": "stdout", - "answerPath": "/home/tt/.config/joj/diff/case9.out", - "forceQuitOnDiff": false, - "alwaysHide": false, - "compareSpace": false - } - ] - }, - { - "outputs": [ - { - "score": 5, - "fileName": "stdout", "answerPath": "/home/tt/.config/joj/diff/task1/case5.out", "forceQuitOnDiff": false, "alwaysHide": false, @@ -266,7 +224,7 @@ { "score": 5, "fileName": "stdout", - "answerPath": "/home/tt/.config/joj/diff/task1/subtask1/case10.out", + "answerPath": "/home/tt/.config/joj/diff/case2.out", "forceQuitOnDiff": false, "alwaysHide": false, "compareSpace": false @@ -278,7 +236,55 @@ { "score": 5, "fileName": "stdout", - "answerPath": "/home/tt/.config/joj/diff/task1/subtask1/case11.out", + "answerPath": "/home/tt/.config/joj/diff/case3.out", + "forceQuitOnDiff": false, + "alwaysHide": false, + "compareSpace": false + } + ] + }, + { + "outputs": [ + { + "score": 5, + "fileName": "stdout", + "answerPath": "/home/tt/.config/joj/diff/task1/case4.out", + "forceQuitOnDiff": false, + "alwaysHide": false, + "compareSpace": false + } + ] + }, + { + "outputs": [ + { + "score": 5, + "fileName": "stdout", + "answerPath": "/home/tt/.config/joj/diff/task2/case6.out", + "forceQuitOnDiff": false, + "alwaysHide": false, + "compareSpace": false + } + ] + }, + { + "outputs": [ + { + "score": 5, + "fileName": "stdout", + "answerPath": "/home/tt/.config/joj/diff/task2/case7.out", + "forceQuitOnDiff": false, + "alwaysHide": false, + "compareSpace": false + } + ] + }, + { + "outputs": [ + { + "score": 5, + "fileName": "stdout", + "answerPath": "/home/tt/.config/joj/diff/task2/case8.out", "forceQuitOnDiff": false, "alwaysHide": false, "compareSpace": false diff --git a/tests/convert/diff/task.toml b/tests/convert/diff/task.toml index f4f283d..4272f97 100644 --- a/tests/convert/diff/task.toml +++ b/tests/convert/diff/task.toml @@ -19,17 +19,14 @@ case0.diff.output.score = 5 case0.limit.cpu = "1s" case0.limit.mem = "2m" case0.diff.output.ignore_spaces = true -#case0.limit.stdout = 8 -#case0.command = "./h7/build/ex2" +case0.command = "./h7/build/ex2" case0.in = "case0.in" case1.diff.output.score = 123214122421 case1.limit.cpu = "2s" case1.limit.mem = "4m" case1.diff.output.ignore_spaces = true -#case1.limit.stdout = 8 -#case1.command = "./h7/build/ex2" -case1.in = "case1.in" +case1.command = "./h7/build/ex2" case9.diff.output.score = 1232131 diff --git a/tests/convert/diff/task2/case7.out b/tests/convert/diff/task2/case7.out new file mode 100644 index 0000000..e69de29 diff --git a/tests/convert/diff/task2/case8.in b/tests/convert/diff/task2/case8.in new file mode 100644 index 0000000..e69de29