WIP: dev #6

Closed
李衍志523370910113 wants to merge 131 commits from dev into master
8 changed files with 539 additions and 218 deletions
Showing only changes of commit 45e203cf60 - Show all commits

View File

@ -1,7 +1,10 @@
from typing import List
from joj3_config_generator.models import joj1, repo, result, task
from joj3_config_generator.processers.repo import get_healthcheck_config, get_teapot_config
from joj3_config_generator.processers.repo import (
get_healthcheck_config,
get_teapot_config,
)
from joj3_config_generator.processers.task import (
fix_diff,
fix_dummy,
@ -14,10 +17,10 @@ from joj3_config_generator.processers.task import (
def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config:
# Create the base ResultConf object
result_conf = ResultConfig(
name=task_conf.task,
result_conf = result.Config(
name=task_conf.task.name,
# TODO: specify the exact folder difference
log_path=f"{task_conf.task.replace(' ', '-')}.log",
log_path=f"/home/tt/.cache/joj3/{task_conf.task.type_}.log",
expire_unix_timestamp=(
int(task_conf.release.deadline.timestamp())
if task_conf.release.deadline
@ -38,7 +41,7 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config:
conf_stage = fix_result_detail(task_stage, conf_stage)
conf_stage = fix_dummy(task_stage, conf_stage)
conf_stage = fix_keyword(task_stage, conf_stage)
conf_stage = fix_diff(task_stage, conf_stage)
conf_stage = fix_diff(task_stage, conf_stage, task_conf)
result_conf.stage.stages.append(conf_stage)
return result_conf
@ -76,7 +79,14 @@ def convert_joj1(joj1_conf: joj1.Config) -> task.Config:
)
return task.Config(
task=joj1_conf.languages[0].language if joj1_conf.languages else "Unnamed Task",
task=task.Task(
name=(
joj1_conf.languages[0].language
if joj1_conf.languages
else "Unnamed Task"
),
type_="",
), # FIXME: fix this type later
release=task.Release(deadline=release_deadline),
stages=stages,
)

View File

@ -83,7 +83,14 @@ class Release(BaseModel):
deadline: Optional[datetime] # RFC 3339 formatted date-time with offset
class Task(BaseModel):
type_: Optional[str] = Field(
"", serialization_alias="type", validation_alias="type"
)
name: str
class Config(BaseModel):
task: str # Task name (e.g., hw3 ex5)
task: Task
release: Release # Release configuration
stages: List[Stage] # list of stage configurations

View File

@ -1,6 +1,5 @@
import hashlib
import shlex
import socket
from pathlib import Path
from joj3_config_generator.models import repo, result, task
@ -16,9 +15,18 @@ def get_grading_repo_name() -> str:
def get_teapot_config(repo_conf: repo.Config, task_conf: task.Config) -> result.Teapot:
teapot = result.Teapot(
# TODO: fix the log path
log_path=f"{task_conf.task.replace(' ', '-')}-joint-teapot-debug.log",
scoreboard_path=f"{task_conf.task.replace(' ', '-')}-scoreboard.csv",
failed_table_path=f"{task_conf.task.replace(' ', '-')}-failed-table.md",
log_path=f"/home/tt/.cache/joj3/{task_conf.task.type_}-joint-teapot-debug.log",
# FIXME: may need to fix the path below
scoreboard_path=(
f"{task_conf.task.type_.split("/")[0]}/{task_conf.task.type_.split("/")[1]}-scoreboard.csv"
if task_conf.task.type_ is not None
else "scoreboard.csv"
),
failed_table_path=(
f"{task_conf.task.type_.split("/")[0]}/{task_conf.task.type_.split("/")[1]}-failed-table.md"
if task_conf.task.type_ is not None
else "failed-table.md"
),
grading_repo_name=get_grading_repo_name(),
)
return teapot
@ -53,9 +61,11 @@ def get_healthcheck_cmd(repo_conf: repo.Config) -> result.Cmd:
cmd = result.Cmd(
args=shlex.split(args),
# FIXME: easier to edit within global scope
copy_in={
f"./repo-health-checker": result.CmdFile(src=f"./repo-health-checker")
# This path is hardcoded
f"./repo-health-checker": result.CmdFile(
src="/usr/local/bin/repo-health-checker"
)
},
)
return cmd

View File

@ -197,7 +197,7 @@ def fix_dummy(
def fix_diff(
task_stage: task.Stage, conf_stage: result.StageDetail
task_stage: task.Stage, conf_stage: result.StageDetail, task_conf: task.Config
) -> result.StageDetail:
if task_stage.parsers is not None and "diff" in task_stage.parsers:
diff_parser = next((p for p in conf_stage.parsers if p.name == "diff"), None)
@ -233,7 +233,7 @@ def fix_diff(
stage_cases.append(
result.OptionalCmd(
stdin=result.CmdFile(
src=f"/home/tt/.config/joj/{conf_stage.name}/{case}.in"
src=f"/home/tt/.config/joj/{task_conf.task.type_}/{case}.in"
),
cpu_limit=cpu_limit,
clock_limit=clock_limit,
@ -255,7 +255,7 @@ def fix_diff(
{
"score": diff_output.score,
"fileName": "stdout",
"answerPath": f"/home/tt/.config/joj/{conf_stage.name}/{case}.out",
"answerPath": f"/home/tt/.config/joj/{task_conf.task.type_}/{case}.out",
"forceQuitOnDiff": diff_output.forcequit,
"alwaysHide": diff_output.hide,
"compareSpace": not diff_output.ignorespaces,

View File

@ -6,5 +6,5 @@ sandbox_token = "test"
[files]
whitelist_patterns = ["*.py", "*.txt", "*.md"]
whitelist_file = ".whitelist"
required = [ "Changelog.md", "Readme.md" ]
required = ["Readme.md" ]
immutable = [".gitignore", ".gitattributes", ".gitea/workflows/push.yaml", ".gitea/workflows/release.yaml" ]

View File

@ -1,7 +1,7 @@
{
"name": "p2 m3",
"logPath": "p2-m3.log",
"expireUnixTimestamp": 1728748740,
"name": "hw 6 ex3",
"logPath": "/home/tt/.cache/joj3/tests/homework/h6/e3.log",
"expireUnixTimestamp": 1731686399,
"stage": {
"sandboxExecServer": "172.17.0.1:5051",
"sandboxToken": "test",
@ -18,7 +18,6 @@
"./repo-health-checker",
"-root=.",
"-repoSize=50.5",
"-meta=Changelog.md",
"-meta=Readme.md",
"-checkFileSumList=a5b63323a692d3d8b952442969649b4f823d58dae26429494f613df160710dfc,b1bbad25b830db0a77b15a033f9ca1b7ab44c1d2d05056412bd3e4421645f0bf,1965adff52af61da8b9e089ff580d60f7e4c294a2930b9809c5cbdf76528de4d,c8bd62bf5297bac738b3845612fd595d677884093070904375463ab7953fce28",
"-checkFileNameList=.gitignore,.gitattributes,.gitea/workflows/push.yaml,.gitea/workflows/release.yaml"
@ -57,7 +56,7 @@
"cpuSetLimit": "",
"copyIn": {
"./repo-health-checker": {
"src": "./repo-health-checker",
"src": "/usr/local/bin/repo-health-checker",
"max": 4194304,
"streamIn": false,
"streamOut": false,
@ -88,84 +87,6 @@
}
]
},
{
"name": "Abuse of strings detected",
"executor": {
"name": "sandbox",
"with": {
"default": {
"args": [
"./strdetect",
"src/"
],
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"content": "",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 4000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 4000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
"cpuSetLimit": "",
"copyIn": {
"tools/strdetec": {
"src": "/home/tt/.config/joj/tools/strdetec",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
}
},
"copyInCached": {
"tools/strdetec": "tools/strdetec"
},
"copyInDir": ".",
"copyOut": [],
"copyOutCached": [],
"copyOutMax": 0,
"copyOutDir": "",
"tty": false,
"strictMemoryLimit": false,
"dataSegmentLimit": false,
"addressSpaceLimit": false
},
"cases": []
}
},
"parsers": [
{
"name": "result-status",
"with": {
"score": 0,
"comment": "",
"forceQuitOnNotAccepted": true
}
}
]
},
{
"name": "Compilation",
"executor": {
@ -173,7 +94,7 @@
"with": {
"default": {
"args": [
"compile"
"./tools/compile"
],
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
@ -222,7 +143,7 @@
"copyInDir": ".",
"copyOut": [],
"copyOutCached": [
"build/onecard",
"h6/build/ex3",
"build/asan",
"build/ubsan",
"build/msan",
@ -255,7 +176,7 @@
{
"name": "dummy",
"with": {
"score": 1,
"score": 0,
"comment": "Congratulations! Your code compiled successfully.",
"forceQuitOnNotAccepted": true
}
@ -263,7 +184,7 @@
{
"name": "result-status",
"with": {
"score": 1,
"score": 0,
"comment": "Congratulations! Your code compiled successfully.",
"forceQuitOnNotAccepted": true
}
@ -744,87 +665,6 @@
}
]
},
{
"name": "[run] onecard",
"executor": {
"name": "sandbox",
"with": {
"default": {
"args": [
"./onecard",
"-a"
],
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"content": "",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 4000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 4000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
"cpuSetLimit": "",
"copyIn": {},
"copyInCached": {},
"copyInDir": ".",
"copyOut": [],
"copyOutCached": [],
"copyOutMax": 0,
"copyOutDir": "",
"tty": false,
"strictMemoryLimit": false,
"dataSegmentLimit": false,
"addressSpaceLimit": false
},
"cases": []
}
},
"parsers": [
{
"name": "result-status",
"with": {
"score": 1,
"comment": "",
"forceQuitOnNotAccepted": false
}
},
{
"name": "result-detail",
"with": {
"score": 0,
"comment": "",
"showFiles": [
"stderr"
],
"showExitStatus": true,
"showRuntime": true,
"showMemory": true
}
}
]
},
{
"name": "[run] address sanitizer",
"executor": {
@ -1067,13 +907,424 @@
}
}
]
},
{
"name": "[joj] ex3",
"executor": {
"name": "sandbox",
"with": {
"default": {
"args": [
"./ex3"
],
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"content": "",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 4000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 4000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
"cpuSetLimit": "",
"copyIn": {
"h6/build/ex2": {
"src": "/home/tt/.config/joj/h6/build/ex2",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"h6/build/ex4": {
"src": "/home/tt/.config/joj/h6/build/ex4",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"h6/build/ex5": {
"src": "/home/tt/.config/joj/h6/build/ex5",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"h6/build/ex6": {
"src": "/home/tt/.config/joj/h6/build/ex6",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"h6/build/ex7": {
"src": "/home/tt/.config/joj/h6/build/ex7",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
}
},
"copyInCached": {
"h6/build/ex2": "h6/build/ex2",
"h6/build/ex4": "h6/build/ex4",
"h6/build/ex5": "h6/build/ex5",
"h6/build/ex6": "h6/build/ex6",
"h6/build/ex7": "h6/build/ex7"
},
"copyInDir": ".",
"copyOut": [],
"copyOutCached": [],
"copyOutMax": 0,
"copyOutDir": "",
"tty": false,
"strictMemoryLimit": false,
"dataSegmentLimit": false,
"addressSpaceLimit": false
},
"cases": [
{
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case0.in",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 30000000000,
"clockLimit": 60000000000,
"memoryLimit": 33554432,
"procLimit": 50
},
{
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case1.in",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 30000000000,
"clockLimit": 60000000000,
"memoryLimit": 33554432,
"procLimit": 50
},
{
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case2.in",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 30000000000,
"clockLimit": 60000000000,
"memoryLimit": 33554432,
"procLimit": 50

is this file copied in?

is this file copied in?
},
{
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case3.in",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 30000000000,
"clockLimit": 60000000000,
"memoryLimit": 33554432,
"procLimit": 50
},
{
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case4.in",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 30000000000,
"clockLimit": 60000000000,
"memoryLimit": 33554432,
"procLimit": 50
},
{
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case5.in",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 30000000000,
"clockLimit": 60000000000,
"memoryLimit": 33554432,
"procLimit": 50
},
{
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case6.in",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 30000000000,
"clockLimit": 60000000000,
"memoryLimit": 33554432,
"procLimit": 50
},
{
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case7.in",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 30000000000,
"clockLimit": 60000000000,
"memoryLimit": 33554432,
"procLimit": 50
},
{
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case8.in",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 30000000000,
"clockLimit": 60000000000,
"memoryLimit": 33554432,
"procLimit": 50
},
{
"env": [
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case9.in",
"max": 4194304,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 30000000000,
"clockLimit": 60000000000,
"memoryLimit": 33554432,
"procLimit": 50
}
]
}
},
"parsers": [
{
"name": "diff",
"with": {
"name": "diff",
"cases": [
{
"outputs": [
{
"score": 0,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/tests/homework/h6/e3/case0.out",
"forceQuitOnDiff": true,
"alwaysHide": false,
"compareSpace": true
}
]
},
{
"outputs": [
{
"score": 0,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/tests/homework/h6/e3/case1.out",
"forceQuitOnDiff": true,
"alwaysHide": false,
"compareSpace": true
}
]
},
{
"outputs": [
{
"score": 0,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/tests/homework/h6/e3/case2.out",
"forceQuitOnDiff": true,
"alwaysHide": false,
"compareSpace": true
}
]
},
{
"outputs": [
{
"score": 0,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/tests/homework/h6/e3/case3.out",
"forceQuitOnDiff": true,
"alwaysHide": false,
"compareSpace": true
}
]
},
{
"outputs": [
{
"score": 0,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/tests/homework/h6/e3/case4.out",
"forceQuitOnDiff": true,
"alwaysHide": false,

is the empty "gradingRepoName" in teapot dict expected?

is the empty "gradingRepoName" in teapot dict expected?
"compareSpace": true
}
]
},
{
"outputs": [
{
"score": 0,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/tests/homework/h6/e3/case5.out",
"forceQuitOnDiff": true,
"alwaysHide": false,
"compareSpace": true
}
]
},
{
"outputs": [
{
"score": 0,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/tests/homework/h6/e3/case6.out",
"forceQuitOnDiff": true,
"alwaysHide": false,
"compareSpace": true
}
]
},
{
"outputs": [
{
"score": 0,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/tests/homework/h6/e3/case7.out",
"forceQuitOnDiff": true,
"alwaysHide": false,
"compareSpace": true
}
]
},
{
"outputs": [
{
"score": 0,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/tests/homework/h6/e3/case8.out",
"forceQuitOnDiff": true,
"alwaysHide": false,
"compareSpace": true
}
]
},
{
"outputs": [
{
"score": 0,
"fileName": "stdout",
"answerPath": "/home/tt/.config/joj/tests/homework/h6/e3/case9.out",
"forceQuitOnDiff": true,
"alwaysHide": false,
"compareSpace": true
}
]
}
]
}
},
{
"name": "dummy",
"with": {
"score": 0,
"comment": "",
"forceQuitOnNotAccepted": true
}
},
{
"name": "result-detail",
"with": {
"score": 0,
"comment": "",
"showFiles": [
"stderr"
],
"showExitStatus": true,
"showRuntime": true,
"showMemory": true
}
}
]
}
]
},
"teapot": {
"logPath": "p2-m3-joint-teapot-debug.log",
"scoreboardPath": "p2-m3-scoreboard.csv",
"failedTablePath": "p2-m3-failed-table.md",
"logPath": "/home/tt/.cache/joj3/tests/homework/h6/e3-joint-teapot-debug.log",
"scoreboardPath": "tests/homework-scoreboard.csv",
"failedTablePath": "tests/homework-failed-table.md",
"gradingRepoName": "engr151-joj",
"skipIssue": false,
"skipScoreboard": false,

View File

@ -1,31 +1,20 @@
# p2 repo config
# general task configuration

make this basic test as simple as possible, and create new test cases for each kind of stage

make this basic test as simple as possible, and create new test cases for each kind of stage
task.name = "hw 6 ex3" # task name
task="p2 m3" # task name
task.type = "tests/homework/h6/e3"
release.deadline = 2024-10-12 23:59:00+08:00
release.deadline = 2024-11-15 23:59:59+08:00
release.stages = [ "compile" ]
[files]
immutable = [".gitignore", ".gitattributes", ".gitea/workflows/push.yaml", ".gitea/workflows/release.yaml" ]
required = [ "Changelog.md", "Readme.md" ]
[[stages]]
name = "Abuse of strings detected"
command = "./strdetect src/"
files.import = [ "tools/strdetec" ]
parsers = [ "result-status" ]
[[stages]]
name = "Compilation"
command = "compile"
command = "./tools/compile" # eg. script running cmake commands
files.import = [ "tools/compile" ]
files.export = [ "build/onecard", "build/asan", "build/ubsan", "build/msan", "build/compile_commands.json" ]
files.export = [ "h6/build/ex3", "build/asan", "build/ubsan", "build/msan", "build/compile_commands.json" ]
# compile parsers
parsers = [ "result-detail", "dummy", "result-status" ]
result-status.comment = "Congratulations! Your code compiled successfully."
result-status.score = 1
dummy.comment = "\n\n### Details\n"
result-detail.exitstatus = true
result-detail.stderr = true
@ -89,17 +78,6 @@ result-detail.stderr = true
result-detail.time = false
result-detail.mem = false
[[stages]]
name = "[run] onecard"
group = "run"
command="./onecard -a"
files.import = [ "build/onecard" ]
parsers = [ "result-status", "result-detail" ]
result-status.score = 1
result-status.forcequit = false
result-detail.exitstatus = true
result-detail.stderr = true
[[stages]]
name = "[run] address sanitizer"
@ -135,3 +113,65 @@ result-status.score = 1
result-status.forcequit = false
result-detail.exitstatus = true
result-detail.stderr = true
[[stages]]
name = "[joj] ex3"
group = "joj"
command="./ex3"
files.import = [ "h6/build/ex2", "h6/build/ex3", "h6/build/ex4", "h6/build/ex5", "h6/build/ex6", "h6/build/ex7" ]
score = 10
parsers = [ "diff", "dummy", "result-detail" ]
result-detail.exitstatus = true
result-detail.stderr = true
# will be removed as long as the name is fixed
case0.score = 10
case0.limit.cpu = 30
case0.limit.mem = 32
case0.limit.stdout = 8
case1.score = 10
case1.limit.cpu = 30
case1.limit.mem = 32
case1.limit.stdout = 8
case2.score = 10
case2.limit.cpu = 30
case2.limit.mem = 32
case2.limit.stdout = 8
case3.score = 10
case3.limit.cpu = 30
case3.limit.mem = 32
case3.limit.stdout = 8
case4.score = 10
case4.limit.cpu = 30
case4.limit.mem = 32
case4.limit.stdout = 8
case5.score = 10
case5.limit.cpu = 30
case5.limit.mem = 32
case5.limit.stdout = 8
case6.score = 10
case6.limit.cpu = 30
case6.limit.mem = 32
case6.limit.stdout = 8
case7.score = 10
case7.limit.cpu = 30
case7.limit.mem = 32
case7.limit.stdout = 8
case8.score = 10
case8.limit.cpu = 30
case8.limit.mem = 32
case8.limit.stdout = 8
case9.score = 10
case9.limit.cpu = 30
case9.limit.mem = 32
case9.limit.stdout = 8

View File

@ -7,6 +7,7 @@ import rtoml
from joj3_config_generator.convert import convert
from joj3_config_generator.models import repo, task
def read_convert_files(
case_name: str,
) -> Tuple[repo.Config, task.Config, Dict[str, Any]]:
@ -27,5 +28,7 @@ def read_convert_files(
def load_case(case_name: str) -> None:
repo, task, expected_result = read_convert_files(case_name)
result = convert(repo, task).model_dump(mode="json", by_alias=True, exclude_none=True)
result = convert(repo, task).model_dump(
mode="json", by_alias=True, exclude_none=True

why modify this?

why modify this?

ah, I guess some incompatible within convert()? to make sure actually the process is the same. If its not your wish i ll revert it

ah, I guess some incompatible within `convert()`? to make sure actually the process is the same. If its not your wish i ll revert it
)
assert result == expected_result