From a8a7fd47a095395d4e5943f8107712992eb41943 Mon Sep 17 00:00:00 2001
From: jon-lee <jon-lee@sjtu.edu.cn>
Date: Wed, 14 May 2025 21:27:33 +0800
Subject: [PATCH] feat: support for subfolder change param

---
 joj3_config_generator/transformers/task.py    |  13 +-
 .../{task1/subtask1/task5.in => case9.in}     |   0
 .../{task1/subtask1/task5.out => case9.out}   |   0
 tests/convert/diff/task.json                  | 174 +++++++++++-------
 tests/convert/diff/task.toml                  |  10 +-
 .../task1/{subtask1/task6.in => case4.in}     |   0
 .../task1/{subtask1/task6.out => case4.out}   |   0
 .../convert/diff/task1/{task1.in => case5.in} |   0
 .../diff/task1/{task1.out => case5.out}       |   0
 .../task1/{task2.in => subtask1/case10.in}    |   0
 .../task1/{task2.out => subtask1/case10.out}  |   0
 .../task3.in => task1/subtask1/case11.in}     |   0
 .../task3.out => task1/subtask1/case11.out}   |   0
 .../convert/diff/task2/{task4.in => case6.in} |   0
 .../diff/task2/{task4.out => case6.out}       |   0
 tests/convert/diff/task2/case7.in             |   0
 tests/convert/diff/task2/case8.out            |   0
 17 files changed, 124 insertions(+), 73 deletions(-)
 rename tests/convert/diff/{task1/subtask1/task5.in => case9.in} (100%)
 rename tests/convert/diff/{task1/subtask1/task5.out => case9.out} (100%)
 rename tests/convert/diff/task1/{subtask1/task6.in => case4.in} (100%)
 rename tests/convert/diff/task1/{subtask1/task6.out => case4.out} (100%)
 rename tests/convert/diff/task1/{task1.in => case5.in} (100%)
 rename tests/convert/diff/task1/{task1.out => case5.out} (100%)
 rename tests/convert/diff/task1/{task2.in => subtask1/case10.in} (100%)
 rename tests/convert/diff/task1/{task2.out => subtask1/case10.out} (100%)
 rename tests/convert/diff/{task2/task3.in => task1/subtask1/case11.in} (100%)
 rename tests/convert/diff/{task2/task3.out => task1/subtask1/case11.out} (100%)
 rename tests/convert/diff/task2/{task4.in => case6.in} (100%)
 rename tests/convert/diff/task2/{task4.out => case6.out} (100%)
 create mode 100644 tests/convert/diff/task2/case7.in
 create mode 100644 tests/convert/diff/task2/case8.out

diff --git a/joj3_config_generator/transformers/task.py b/joj3_config_generator/transformers/task.py
index 6eebe69..0a04947 100644
--- a/joj3_config_generator/transformers/task.py
+++ b/joj3_config_generator/transformers/task.py
@@ -169,11 +169,17 @@ def fix_diff(
     valid_cases = (
         (case, task_stage.cases[case])
         for case in task_stage.cases
-        if case not in task_stage.skip and case in task_stage.cases
+        if case not in task_stage.skip
     )
     testcases = get_testcases(task_root, task_path)
-    # TODO: better filter strategy
-    default_cases = sorted(testcases.difference(task_stage.cases))
+    default_cases = sorted(
+        [
+            case
+            for case in testcases
+            if any(case.endswith(other) for other in task_stage.cases)
+        ]
+    )
+    print(default_cases)
     stage_cases = []
     parser_cases = []
     for case, case_stage in valid_cases:
@@ -219,7 +225,6 @@ def fix_diff(
         parser_case = result.DiffCasesConfig(
             outputs=[
                 result.DiffOutputConfig(
-                    # TODO: how to balance a good score strategy
                     score=5,  # default score
                     file_name="stdout",
                     answer_path=str(base_dir / f"{case}.out"),
diff --git a/tests/convert/diff/task1/subtask1/task5.in b/tests/convert/diff/case9.in
similarity index 100%
rename from tests/convert/diff/task1/subtask1/task5.in
rename to tests/convert/diff/case9.in
diff --git a/tests/convert/diff/task1/subtask1/task5.out b/tests/convert/diff/case9.out
similarity index 100%
rename from tests/convert/diff/task1/subtask1/task5.out
rename to tests/convert/diff/case9.out
diff --git a/tests/convert/diff/task.json b/tests/convert/diff/task.json
index 4bfc14b..a7d25c7 100644
--- a/tests/convert/diff/task.json
+++ b/tests/convert/diff/task.json
@@ -78,42 +78,56 @@
                             },
                             {
                                 "stdin": {
-                                    "src": "/home/tt/.config/joj/diff/case2.in"
+                                    "src": "/home/tt/.config/joj/diff/case9.in"
+                                },
+                                "memoryLimit": 268435456
+                            },
+                            {
+                                "stdin": {
+                                    "src": "/home/tt/.config/joj/diff/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/case3.in"
+                                    "src": "/home/tt/.config/joj/diff/case1.in"
                                 }
                             },
                             {
                                 "stdin": {
-                                    "src": "/home/tt/.config/joj/diff/task1/subtask1/task5.in"
+                                    "src": "/home/tt/.config/joj/diff/case9.in"
                                 }
                             },
                             {
                                 "stdin": {
-                                    "src": "/home/tt/.config/joj/diff/task1/subtask1/task6.in"
+                                    "src": "/home/tt/.config/joj/diff/task1/case5.in"
                                 }
                             },
                             {
                                 "stdin": {
-                                    "src": "/home/tt/.config/joj/diff/task1/task1.in"
+                                    "src": "/home/tt/.config/joj/diff/task1/subtask1/case10.in"
                                 }
                             },
                             {
                                 "stdin": {
-                                    "src": "/home/tt/.config/joj/diff/task1/task2.in"
-                                }
-                            },
-                            {
-                                "stdin": {
-                                    "src": "/home/tt/.config/joj/diff/task2/task3.in"
-                                }
-                            },
-                            {
-                                "stdin": {
-                                    "src": "/home/tt/.config/joj/diff/task2/task4.in"
+                                    "src": "/home/tt/.config/joj/diff/task1/subtask1/case11.in"
                                 }
                             }
                         ]
@@ -125,6 +139,78 @@
                         "with": {
                             "name": "diff",
                             "cases": [
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 5,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/.config/joj/diff/case0.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                },
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 123214122421,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/.config/joj/diff/case1.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                },
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 1232131,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/.config/joj/diff/case9.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                },
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 92321,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/.config/joj/diff/case11.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                },
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 823131,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/.config/joj/diff/case10.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                },
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 2590,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/.config/joj/diff/case5.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                },
                                 {
                                     "outputs": [
                                         {
@@ -154,7 +240,7 @@
                                         {
                                             "score": 5,
                                             "fileName": "stdout",
-                                            "answerPath": "/home/tt/.config/joj/diff/case2.out",
+                                            "answerPath": "/home/tt/.config/joj/diff/case9.out",
                                             "forceQuitOnDiff": false,
                                             "alwaysHide": false,
                                             "compareSpace": false
@@ -166,7 +252,7 @@
                                         {
                                             "score": 5,
                                             "fileName": "stdout",
-                                            "answerPath": "/home/tt/.config/joj/diff/case3.out",
+                                            "answerPath": "/home/tt/.config/joj/diff/task1/case5.out",
                                             "forceQuitOnDiff": false,
                                             "alwaysHide": false,
                                             "compareSpace": false
@@ -178,7 +264,7 @@
                                         {
                                             "score": 5,
                                             "fileName": "stdout",
-                                            "answerPath": "/home/tt/.config/joj/diff/task1/subtask1/task5.out",
+                                            "answerPath": "/home/tt/.config/joj/diff/task1/subtask1/case10.out",
                                             "forceQuitOnDiff": false,
                                             "alwaysHide": false,
                                             "compareSpace": false
@@ -190,55 +276,7 @@
                                         {
                                             "score": 5,
                                             "fileName": "stdout",
-                                            "answerPath": "/home/tt/.config/joj/diff/task1/subtask1/task6.out",
-                                            "forceQuitOnDiff": false,
-                                            "alwaysHide": false,
-                                            "compareSpace": false
-                                        }
-                                    ]
-                                },
-                                {
-                                    "outputs": [
-                                        {
-                                            "score": 5,
-                                            "fileName": "stdout",
-                                            "answerPath": "/home/tt/.config/joj/diff/task1/task1.out",
-                                            "forceQuitOnDiff": false,
-                                            "alwaysHide": false,
-                                            "compareSpace": false
-                                        }
-                                    ]
-                                },
-                                {
-                                    "outputs": [
-                                        {
-                                            "score": 5,
-                                            "fileName": "stdout",
-                                            "answerPath": "/home/tt/.config/joj/diff/task1/task2.out",
-                                            "forceQuitOnDiff": false,
-                                            "alwaysHide": false,
-                                            "compareSpace": false
-                                        }
-                                    ]
-                                },
-                                {
-                                    "outputs": [
-                                        {
-                                            "score": 5,
-                                            "fileName": "stdout",
-                                            "answerPath": "/home/tt/.config/joj/diff/task2/task3.out",
-                                            "forceQuitOnDiff": false,
-                                            "alwaysHide": false,
-                                            "compareSpace": false
-                                        }
-                                    ]
-                                },
-                                {
-                                    "outputs": [
-                                        {
-                                            "score": 5,
-                                            "fileName": "stdout",
-                                            "answerPath": "/home/tt/.config/joj/diff/task2/task4.out",
+                                            "answerPath": "/home/tt/.config/joj/diff/task1/subtask1/case11.out",
                                             "forceQuitOnDiff": false,
                                             "alwaysHide": false,
                                             "compareSpace": false
diff --git a/tests/convert/diff/task.toml b/tests/convert/diff/task.toml
index abdd10c..f4f283d 100644
--- a/tests/convert/diff/task.toml
+++ b/tests/convert/diff/task.toml
@@ -23,10 +23,18 @@ case0.diff.output.ignore_spaces = true
 #case0.command = "./h7/build/ex2"
 case0.in = "case0.in"
 
-case1.diff.output.score = 5
+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"
+
+case9.diff.output.score = 1232131
+
+case11.diff.output.score = 92321
+
+case10.diff.output.score = 823131
+
+case5.diff.output.score = 2590
diff --git a/tests/convert/diff/task1/subtask1/task6.in b/tests/convert/diff/task1/case4.in
similarity index 100%
rename from tests/convert/diff/task1/subtask1/task6.in
rename to tests/convert/diff/task1/case4.in
diff --git a/tests/convert/diff/task1/subtask1/task6.out b/tests/convert/diff/task1/case4.out
similarity index 100%
rename from tests/convert/diff/task1/subtask1/task6.out
rename to tests/convert/diff/task1/case4.out
diff --git a/tests/convert/diff/task1/task1.in b/tests/convert/diff/task1/case5.in
similarity index 100%
rename from tests/convert/diff/task1/task1.in
rename to tests/convert/diff/task1/case5.in
diff --git a/tests/convert/diff/task1/task1.out b/tests/convert/diff/task1/case5.out
similarity index 100%
rename from tests/convert/diff/task1/task1.out
rename to tests/convert/diff/task1/case5.out
diff --git a/tests/convert/diff/task1/task2.in b/tests/convert/diff/task1/subtask1/case10.in
similarity index 100%
rename from tests/convert/diff/task1/task2.in
rename to tests/convert/diff/task1/subtask1/case10.in
diff --git a/tests/convert/diff/task1/task2.out b/tests/convert/diff/task1/subtask1/case10.out
similarity index 100%
rename from tests/convert/diff/task1/task2.out
rename to tests/convert/diff/task1/subtask1/case10.out
diff --git a/tests/convert/diff/task2/task3.in b/tests/convert/diff/task1/subtask1/case11.in
similarity index 100%
rename from tests/convert/diff/task2/task3.in
rename to tests/convert/diff/task1/subtask1/case11.in
diff --git a/tests/convert/diff/task2/task3.out b/tests/convert/diff/task1/subtask1/case11.out
similarity index 100%
rename from tests/convert/diff/task2/task3.out
rename to tests/convert/diff/task1/subtask1/case11.out
diff --git a/tests/convert/diff/task2/task4.in b/tests/convert/diff/task2/case6.in
similarity index 100%
rename from tests/convert/diff/task2/task4.in
rename to tests/convert/diff/task2/case6.in
diff --git a/tests/convert/diff/task2/task4.out b/tests/convert/diff/task2/case6.out
similarity index 100%
rename from tests/convert/diff/task2/task4.out
rename to tests/convert/diff/task2/case6.out
diff --git a/tests/convert/diff/task2/case7.in b/tests/convert/diff/task2/case7.in
new file mode 100644
index 0000000..e69de29
diff --git a/tests/convert/diff/task2/case8.out b/tests/convert/diff/task2/case8.out
new file mode 100644
index 0000000..e69de29