WIP: dev #6
|
@ -1,10 +1,12 @@
|
|||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import Any, List
|
||||
|
||||
import rtoml
|
||||
|
||||
from joj3_config_generator.models import joj1, repo, result, task
|
||||
from joj3_config_generator.processers.joj1 import get_joj1_run_stage
|
||||
from joj3_config_generator.processers.repo import ( # get_teapotcheck_config,
|
||||
get_healthcheck_config,
|
||||
get_teapot_stage,
|
||||
|
@ -25,14 +27,14 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config:
|
|||
result_conf = result.Config(
|
||||
name=task_conf.task.name,
|
||||
# TODO: specify the exact folder difference
|
||||
log_path=f"/home/tt/.cache/joj3/{task_conf.task.type_}.log",
|
||||
log_path=f"{Path.home()}/.cache/joj3/{task_conf.task.type_}.log",
|
||||
expire_unix_timestamp=(
|
||||
int(task_conf.release.deadline.timestamp())
|
||||
if task_conf.release.deadline
|
||||
else -1
|
||||
),
|
||||
# FIXME: don't hardcode
|
||||
actor_csv_path="/home/tt/.config/joj/students.csv",
|
||||
actor_csv_path=f"{Path.home()}/.config/joj/students.csv",
|
||||
stage=result.Stage(
|
||||
stages=[],
|
||||
sandbox_token=repo_conf.sandbox_token,
|
||||
|
@ -59,47 +61,13 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config:
|
|||
return result_conf
|
||||
|
||||
|
||||
# FIXME: LLM generated convert function, only for demostration
|
||||
def convert_joj1(joj1_conf: joj1.Config) -> task.Config:
|
||||
stages = []
|
||||
for language in joj1_conf.languages:
|
||||
# Here you might want to create a stage for each language
|
||||
# You can define a command based on language properties
|
||||
command = f"run {language.language}"
|
||||
# Assuming we don't have explicit files, we will set empty ones or default behavior
|
||||
files = task.Files(import_=[], export=[]) # type: ignore
|
||||
# Score can be derived from the first case or set to a default
|
||||
score = 0
|
||||
parsers: List[str] = [] # Define parsers if applicable
|
||||
if joj1_conf.cases:
|
||||
score = sum(
|
||||
case.score for case in joj1_conf.cases
|
||||
) # Sum scores for all cases
|
||||
# Creating a stage for each language
|
||||
stages.append(
|
||||
task.Stage(
|
||||
name=language.language,
|
||||
command=command,
|
||||
files=files,
|
||||
score=score,
|
||||
parsers=parsers,
|
||||
)
|
||||
)
|
||||
# Assuming no deadline is provided in `joj1`, you can set it accordingly
|
||||
release_deadline = (
|
||||
None # Placeholder for future implementation if deadlines are defined
|
||||
)
|
||||
|
||||
stages = [get_joj1_run_stage(joj1_conf)]
|
||||
return task.Config(
|
||||
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),
|
||||
name=("Blank Task"),
|
||||
),
|
||||
release=task.Release(deadline=None),
|
||||
stages=stages,
|
||||
)
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ import os
|
|||
from pathlib import Path
|
||||
from typing import Any, Dict
|
||||
|
||||
import inquirer
|
||||
import rtoml
|
||||
import typer
|
||||
import yaml
|
||||
|
@ -16,23 +15,6 @@ from joj3_config_generator.utils.logger import logger
|
|||
app = typer.Typer(add_completion=False)
|
||||
|
||||
|
||||
@app.command()
|
||||
def create(toml: typer.FileTextWrite) -> None:
|
||||
"""
|
||||
Create a new JOJ3 toml config file
|
||||
"""
|
||||
logger.info("Creating")
|
||||
questions = [
|
||||
inquirer.List(
|
||||
"size",
|
||||
message="What size do you need?",
|
||||
choices=["Jumbo", "Large", "Standard", "Medium", "Small", "Micro"],
|
||||
),
|
||||
]
|
||||
answers = inquirer.prompt(questions)
|
||||
logger.info(answers)
|
||||
|
||||
|
||||
@app.command()
|
||||
def convert_joj1(yaml_file: typer.FileText, toml_file: typer.FileTextWrite) -> None:
|
||||
"""
|
||||
|
@ -42,15 +24,22 @@ def convert_joj1(yaml_file: typer.FileText, toml_file: typer.FileTextWrite) -> N
|
|||
joj1_obj = yaml.safe_load(yaml_file.read())
|
||||
joj1_model = joj1.Config(**joj1_obj)
|
||||
task_model = convert_joj1_conf(joj1_model)
|
||||
result_dict = task_model.model_dump(by_alias=True)
|
||||
result_dict = task_model.model_dump(by_alias=True, exclude_none=True)
|
||||
toml_file.write(rtoml.dumps(result_dict))
|
||||
|
||||
|
||||
@app.command()
|
||||
def convert(root: Path = Path(".")) -> Dict[str, Any]:
|
||||
"""
|
||||
Convert given dir of JOJ3 toml config files to JOJ3 json config files
|
||||
"""
|
||||
def convert(
|
||||
root: Path = typer.Option(
|
||||
Path("."),
|
||||
"--conf-root",
|
||||
"-c",
|
||||
help="This should be consistent with the root of how you run JOJ3",
|
||||
),
|
||||
debug: bool = typer.Option(
|
||||
False, "--debug", "-d", help="Enable debug mode for more verbose output"
|
||||
),
|
||||
) -> Dict[str, Any]:
|
||||
logger.info(f"Converting files in {root.absolute()}")
|
||||
repo_toml_path = os.path.join(root.absolute(), "basic", "repo.toml")
|
||||
# TODO: loop through all dirs to find all task.toml
|
||||
|
@ -69,16 +58,7 @@ def convert(root: Path = Path(".")) -> Dict[str, Any]:
|
|||
json.dump(result_dict, result_file, ensure_ascii=False, indent=4)
|
||||
result_file.write("\n")
|
||||
|
||||
# FIXME: change the path to the server
|
||||
# homework_name = "h8"
|
||||
# folder_path = f"/mnt/c/Users/Nuvole/Desktop/engr151-joj/home/tt/.config/joj/tests/homework/{homework_name}"
|
||||
# folder_path = (
|
||||
# "/mnt/c/Users/Nuvole/Desktop/engr151-joj/home/tt/.config/joj/homework/h8"
|
||||
# )
|
||||
# folder_path = "/mnt/c/Users/Nuvole/Desktop/engr151-joj/home/tt/.config/joj/homework/h7"
|
||||
# for projects
|
||||
# folder_path = "/mnt/c/Users/Nuvole/Desktop/engr151-joj/home/tt/.config/joj/tests/projects/p3/p3m3"
|
||||
# folder_path = "/mnt/c/Users/Nuvole/Desktop/engr151-joj/home/tt/.config/joj/projects/p3/p3m1"
|
||||
# assert os.path.exists(folder_path), f"there exists no {folder_path}"
|
||||
# distribution on json
|
||||
# need a get folder path function
|
||||
# distribute_json(folder_path, repo_obj)
|
||||
return result_dict
|
||||
|
|
|
@ -86,8 +86,7 @@ class Stage(BaseModel):
|
|||
class Config:
|
||||
extra = "allow"
|
||||
|
||||
@root_validator(pre=True)
|
||||
def gather_cases(cls: Type["Stage"], values: Dict[str, Any]) -> Dict[str, Any]:
|
||||
def gather_cases(self, values: Dict[str, Any]) -> Dict[str, Any]:
|
||||
cases = {k: v for k, v in values.items() if k.startswith("case")}
|
||||
for key in cases:
|
||||
values.pop(key)
|
||||
|
@ -108,5 +107,5 @@ class Task(BaseModel):
|
|||
|
||||
class Config(BaseModel):
|
||||
task: Task
|
||||
release: Release # Release configuration
|
||||
release: Release
|
||||
stages: List[Stage] # list of stage configurations
|
||||
|
|
50
joj3_config_generator/processers/joj1.py
Normal file
50
joj3_config_generator/processers/joj1.py
Normal file
|
@ -0,0 +1,50 @@
|
|||
from typing import List
|
||||
|
||||
import humanfriendly
|
||||
from pytimeparse.timeparse import timeparse
|
||||
|
||||
from joj3_config_generator.models import joj1, result, task
|
||||
|
||||
|
||||
def get_joj1_run_stage(joj1_config: joj1.Config) -> task.Stage:
|
||||
default_cpu = timeparse("1s")
|
||||
default_mem = humanfriendly.parse_size("32m")
|
||||
cases_conf = []
|
||||
for i, case in enumerate(joj1_config.cases):
|
||||
cases_conf.append(
|
||||
task.Stage(
|
||||
score=case.score,
|
||||
command=case.execute_args if case.execute_args else None,
|
||||
limit=task.Limit(
|
||||
cpu=timeparse(case.time) if case.time else default_cpu,
|
||||
mem=(
|
||||
humanfriendly.parse_size(case.memory)
|
||||
if case.memory
|
||||
else default_mem
|
||||
),
|
||||
),
|
||||
)
|
||||
)
|
||||
for i, case in enumerate(joj1_config.cases):
|
||||
cases_conf[i].in_ = case.input
|
||||
cases_conf[i].out_ = case.output
|
||||
run_config = task.Stage(
|
||||
name="This is the converted joj1 run stage",
|
||||
group="joj",
|
||||
parsers=["diff", "result-status"],
|
||||
score=100,
|
||||
limit=task.Limit(
|
||||
cpu=(
|
||||
timeparse(joj1_config.cases[0].time)
|
||||
if joj1_config.cases[0].time is not None
|
||||
else default_cpu
|
||||
),
|
||||
mem=(
|
||||
humanfriendly.parse_size(joj1_config.cases[0].memory)
|
||||
if joj1_config.cases[0].memory is not None
|
||||
else default_mem
|
||||
),
|
||||
),
|
||||
cases={f"case{i}": cases_conf[i] for i, case in enumerate(joj1_config.cases)},
|
||||
)
|
||||
return run_config
|
|
@ -28,7 +28,7 @@ def get_teapot_stage(repo_conf: repo.Config) -> result.StageDetail:
|
|||
default=result.Cmd(
|
||||
args=shlex.split(args_),
|
||||
env=[
|
||||
"LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"
|
||||
f"LOG_FILE_PATH={Path.home()}/.cache/joint-teapot-debug.log"
|
||||
], # TODO: fix it according to the task name
|
||||
),
|
||||
cases=[],
|
||||
|
@ -72,7 +72,7 @@ def get_debug_args(repo_conf: repo.Config) -> str:
|
|||
args = ""
|
||||
args = (
|
||||
args
|
||||
+ f"/usr/local/bin/joint-teapot joj3-check-env /home/tt/.config/teapot/teapot.env --grading-repo-name {get_grading_repo_name()} --group-config"
|
||||
+ f"/usr/local/bin/joint-teapot joj3-check-env {Path.home()}/.config/teapot/teapot.env --grading-repo-name {get_grading_repo_name()} --group-config "
|
||||
)
|
||||
group_config = ""
|
||||
for i, name in enumerate(repo_conf.groups.name):
|
||||
|
@ -100,14 +100,16 @@ def get_healthcheck_config(repo_conf: repo.Config) -> result.StageDetail:
|
|||
),
|
||||
result.OptionalCmd(
|
||||
args=shlex.split(get_debug_args(repo_conf)),
|
||||
env=["LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"],
|
||||
env=[
|
||||
f"LOG_FILE_PATH={Path.home()}/.cache/joint-teapot-debug.log"
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
parsers=[
|
||||
result.ParserConfig(name="healthcheck", with_={"score": 1}),
|
||||
result.ParserConfig(name="debug", with_={"score": 1}),
|
||||
result.ParserConfig(name="debug", with_={"score": 0}),
|
||||
],
|
||||
)
|
||||
return healthcheck_stage
|
||||
|
@ -126,6 +128,8 @@ def get_hash(immutable_files: list[str]) -> str: # input should be a list
|
|||
current_file_path = Path(__file__).resolve()
|
||||
project_root = current_file_path.parents[2]
|
||||
file_path = f"{project_root}/tests/immutable_p3-test/"
|
||||
# default value as hardcoded
|
||||
# file_path = "{Path.home()}/.cache/immutable"
|
||||
immutable_hash = []
|
||||
for i, file in enumerate(immutable_files):
|
||||
immutable_files[i] = file_path + file.rsplit("/", 1)[-1]
|
||||
|
|
|
@ -239,6 +239,7 @@ def fix_file(
|
|||
return conf_stage
|
||||
|
||||
|
||||
# TODO: add the logic of looping through all the files in the conf-root and generated conf.toml accordingly, while also get the path of the json file.
|
||||
def fix_diff(
|
||||
task_stage: task.Stage, conf_stage: result.StageDetail, task_conf: task.Config
|
||||
) -> result.StageDetail:
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,26 +1,10 @@
|
|||
# general task configuration
|
||||
|
||||
task.name = "hw7 ex2" # task name
|
||||
task.type = "homework/h7/e2"
|
||||
task.type = "homework/h7/e2" # remove this task type later
|
||||
|
||||
release.deadline = 2024-12-30 23:59:59+08:00
|
||||
release.stages = [ "compile" ]
|
||||
|
||||
[[stages]]
|
||||
name = "healthcheck"
|
||||
score = 1
|
||||
|
||||
# healthcheck parsers
|
||||
parsers = ["healthcheck", "debug"]
|
||||
cases0.command = "/usr/local/bin/repo-health-checker -repoSize=100"
|
||||
case1.command = """/usr/local/bin/joint-teapot
|
||||
joj3-check-env
|
||||
/home/tt/.config/teapot/teapot.env"
|
||||
--grading-repo-name
|
||||
JOJ3-actions-examples
|
||||
--group-config
|
||||
joj=50:24,=100:24"""
|
||||
case1.env = ["LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"]
|
||||
|
||||
[[stages]]
|
||||
name = "Compilation"
|
||||
command = "./tools/compile" # eg. script running cmake commands
|
||||
|
|
|
@ -1,31 +1,25 @@
|
|||
task = "cc"
|
||||
|
||||
[[stages]]
|
||||
张泊明518370910136
commented
remove it if it's not ready remove it if it's not ready
|
||||
name = "cc"
|
||||
command = "run cc"
|
||||
name = "This is the converted joj1 run stage"
|
||||
group = "joj"
|
||||
score = 100
|
||||
parsers = []
|
||||
parsers = ["diff", "result-status"]
|
||||
skip = []
|
||||
|
||||
[stages.files]
|
||||
import = []
|
||||
export = []
|
||||
|
||||
[stages.limit]
|
||||
mem = 4
|
||||
cpu = 4
|
||||
stderr = 4
|
||||
stdout = 4
|
||||
mem = 32000000
|
||||
cpu = 1
|
||||
stderr = 800
|
||||
stdout = 800
|
||||
|
||||
[stages.dummy]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = true
|
||||
forcequit = false
|
||||
|
||||
[stages.result-status]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = true
|
||||
forcequit = false
|
||||
|
||||
[stages.keyword]
|
||||
keyword = []
|
||||
|
@ -49,70 +43,566 @@ mem = true
|
|||
stdout = false
|
||||
stderr = false
|
||||
exitstatus = false
|
||||
[stages.diff.output]
|
||||
score = 0
|
||||
ignorespaces = false
|
||||
hide = false
|
||||
forcequit = true
|
||||
|
||||
[stages.cases]
|
||||
|
||||
[[stages]]
|
||||
name = "c"
|
||||
command = "run c"
|
||||
score = 100
|
||||
[stages.file]
|
||||
[stages.cases.case0]
|
||||
command = "-abcd --aaaa bbbb"
|
||||
in = "case0.in"
|
||||
out = "case0.out"
|
||||
score = 10
|
||||
parsers = []
|
||||
skip = []
|
||||
|
||||
[stages.files]
|
||||
import = []
|
||||
export = []
|
||||
[stages.cases.case0.limit]
|
||||
mem = 32000000
|
||||
cpu = 1
|
||||
stderr = 800
|
||||
stdout = 800
|
||||
|
||||
[stages.limit]
|
||||
mem = 4
|
||||
cpu = 4
|
||||
stderr = 4
|
||||
stdout = 4
|
||||
|
||||
[stages.dummy]
|
||||
[stages.cases.case0.dummy]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = true
|
||||
forcequit = false
|
||||
|
||||
[stages.result-status]
|
||||
[stages.cases.case0.result-status]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = true
|
||||
forcequit = false
|
||||
|
||||
[stages.keyword]
|
||||
[stages.cases.case0.keyword]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.clangtidy]
|
||||
[stages.cases.case0.clangtidy]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cppcheck]
|
||||
[stages.cases.case0.cppcheck]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cpplint]
|
||||
[stages.cases.case0.cpplint]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.result-detail]
|
||||
[stages.cases.case0.result-detail]
|
||||
time = true
|
||||
mem = true
|
||||
stdout = false
|
||||
stderr = false
|
||||
exitstatus = false
|
||||
|
||||
[stages.cases.case0.file]
|
||||
|
||||
[stages.cases.case0.cases]
|
||||
[stages.cases.case0.diff.output]
|
||||
score = 0
|
||||
ignorespaces = true
|
||||
hide = false
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case1]
|
||||
in = "case1.in"
|
||||
out = "case1.out"
|
||||
score = 10
|
||||
parsers = []
|
||||
skip = []
|
||||
|
||||
[stages.cases.case1.limit]
|
||||
mem = 32000000
|
||||
cpu = 1
|
||||
stderr = 800
|
||||
stdout = 800
|
||||
|
||||
[stages.cases.case1.dummy]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case1.result-status]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case1.keyword]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case1.clangtidy]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case1.cppcheck]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case1.cpplint]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case1.result-detail]
|
||||
time = true
|
||||
mem = true
|
||||
stdout = false
|
||||
stderr = false
|
||||
exitstatus = false
|
||||
|
||||
[stages.cases.case1.file]
|
||||
|
||||
[stages.cases.case1.cases]
|
||||
[stages.cases.case1.diff.output]
|
||||
score = 0
|
||||
ignorespaces = true
|
||||
hide = false
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case2]
|
||||
in = "case2.in"
|
||||
out = "case2.out"
|
||||
score = 10
|
||||
parsers = []
|
||||
skip = []
|
||||
|
||||
[stages.cases.case2.limit]
|
||||
mem = 32000000
|
||||
cpu = 1
|
||||
stderr = 800
|
||||
stdout = 800
|
||||
|
||||
[stages.cases.case2.dummy]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case2.result-status]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case2.keyword]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case2.clangtidy]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case2.cppcheck]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case2.cpplint]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case2.result-detail]
|
||||
time = true
|
||||
mem = true
|
||||
stdout = false
|
||||
stderr = false
|
||||
exitstatus = false
|
||||
|
||||
[stages.cases.case2.file]
|
||||
|
||||
[stages.cases.case2.cases]
|
||||
[stages.cases.case2.diff.output]
|
||||
score = 0
|
||||
ignorespaces = true
|
||||
hide = false
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case3]
|
||||
in = "case3.in"
|
||||
out = "case3.out"
|
||||
score = 10
|
||||
parsers = []
|
||||
skip = []
|
||||
|
||||
[stages.cases.case3.limit]
|
||||
mem = 32000000
|
||||
cpu = 1
|
||||
stderr = 800
|
||||
stdout = 800
|
||||
|
||||
[stages.cases.case3.dummy]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case3.result-status]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case3.keyword]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case3.clangtidy]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case3.cppcheck]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case3.cpplint]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case3.result-detail]
|
||||
time = true
|
||||
mem = true
|
||||
stdout = false
|
||||
stderr = false
|
||||
exitstatus = false
|
||||
|
||||
[stages.cases.case3.file]
|
||||
|
||||
[stages.cases.case3.cases]
|
||||
[stages.cases.case3.diff.output]
|
||||
score = 0
|
||||
ignorespaces = true
|
||||
hide = false
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case4]
|
||||
in = "case4.in"
|
||||
out = "case4.out"
|
||||
score = 10
|
||||
parsers = []
|
||||
skip = []
|
||||
|
||||
[stages.cases.case4.limit]
|
||||
mem = 32000000
|
||||
cpu = 1
|
||||
stderr = 800
|
||||
stdout = 800
|
||||
|
||||
[stages.cases.case4.dummy]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case4.result-status]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case4.keyword]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case4.clangtidy]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case4.cppcheck]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case4.cpplint]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case4.result-detail]
|
||||
time = true
|
||||
mem = true
|
||||
stdout = false
|
||||
stderr = false
|
||||
exitstatus = false
|
||||
|
||||
[stages.cases.case4.file]
|
||||
|
||||
[stages.cases.case4.cases]
|
||||
[stages.cases.case4.diff.output]
|
||||
score = 0
|
||||
ignorespaces = true
|
||||
hide = false
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case5]
|
||||
in = "case5.in"
|
||||
out = "case5.out"
|
||||
score = 10
|
||||
parsers = []
|
||||
skip = []
|
||||
|
||||
[stages.cases.case5.limit]
|
||||
mem = 32000000
|
||||
cpu = 1
|
||||
stderr = 800
|
||||
stdout = 800
|
||||
|
||||
[stages.cases.case5.dummy]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case5.result-status]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case5.keyword]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case5.clangtidy]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case5.cppcheck]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case5.cpplint]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case5.result-detail]
|
||||
time = true
|
||||
mem = true
|
||||
stdout = false
|
||||
stderr = false
|
||||
exitstatus = false
|
||||
|
||||
[stages.cases.case5.file]
|
||||
|
||||
[stages.cases.case5.cases]
|
||||
[stages.cases.case5.diff.output]
|
||||
score = 0
|
||||
ignorespaces = true
|
||||
hide = false
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case6]
|
||||
in = "case6.in"
|
||||
out = "case6.out"
|
||||
score = 10
|
||||
parsers = []
|
||||
skip = []
|
||||
|
||||
[stages.cases.case6.limit]
|
||||
mem = 32000000
|
||||
cpu = 1
|
||||
stderr = 800
|
||||
stdout = 800
|
||||
|
||||
[stages.cases.case6.dummy]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case6.result-status]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case6.keyword]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case6.clangtidy]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case6.cppcheck]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case6.cpplint]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case6.result-detail]
|
||||
time = true
|
||||
mem = true
|
||||
stdout = false
|
||||
stderr = false
|
||||
exitstatus = false
|
||||
|
||||
[stages.cases.case6.file]
|
||||
|
||||
[stages.cases.case6.cases]
|
||||
[stages.cases.case6.diff.output]
|
||||
score = 0
|
||||
ignorespaces = true
|
||||
hide = false
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case7]
|
||||
in = "case7.in"
|
||||
out = "case7.out"
|
||||
score = 10
|
||||
parsers = []
|
||||
skip = []
|
||||
|
||||
[stages.cases.case7.limit]
|
||||
mem = 32000000
|
||||
cpu = 1
|
||||
stderr = 800
|
||||
stdout = 800
|
||||
|
||||
[stages.cases.case7.dummy]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case7.result-status]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case7.keyword]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case7.clangtidy]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case7.cppcheck]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case7.cpplint]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case7.result-detail]
|
||||
time = true
|
||||
mem = true
|
||||
stdout = false
|
||||
stderr = false
|
||||
exitstatus = false
|
||||
|
||||
[stages.cases.case7.file]
|
||||
|
||||
[stages.cases.case7.cases]
|
||||
[stages.cases.case7.diff.output]
|
||||
score = 0
|
||||
ignorespaces = true
|
||||
hide = false
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case8]
|
||||
in = "case8.in"
|
||||
out = "case8.out"
|
||||
score = 10
|
||||
parsers = []
|
||||
skip = []
|
||||
|
||||
[stages.cases.case8.limit]
|
||||
mem = 32000000
|
||||
cpu = 1
|
||||
stderr = 800
|
||||
stdout = 800
|
||||
|
||||
[stages.cases.case8.dummy]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case8.result-status]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case8.keyword]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case8.clangtidy]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case8.cppcheck]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case8.cpplint]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case8.result-detail]
|
||||
time = true
|
||||
mem = true
|
||||
stdout = false
|
||||
stderr = false
|
||||
exitstatus = false
|
||||
|
||||
[stages.cases.case8.file]
|
||||
|
||||
[stages.cases.case8.cases]
|
||||
[stages.cases.case8.diff.output]
|
||||
score = 0
|
||||
ignorespaces = true
|
||||
hide = false
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case9]
|
||||
in = "case9.in"
|
||||
out = "case9.out"
|
||||
score = 10
|
||||
parsers = []
|
||||
skip = []
|
||||
|
||||
[stages.cases.case9.limit]
|
||||
mem = 32000000
|
||||
cpu = 1
|
||||
stderr = 800
|
||||
stdout = 800
|
||||
|
||||
[stages.cases.case9.dummy]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case9.result-status]
|
||||
comment = ""
|
||||
score = 0
|
||||
forcequit = false
|
||||
|
||||
[stages.cases.case9.keyword]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case9.clangtidy]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case9.cppcheck]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case9.cpplint]
|
||||
keyword = []
|
||||
weight = []
|
||||
|
||||
[stages.cases.case9.result-detail]
|
||||
time = true
|
||||
mem = true
|
||||
stdout = false
|
||||
stderr = false
|
||||
exitstatus = false
|
||||
|
||||
[stages.cases.case9.file]
|
||||
|
||||
[stages.cases.case9.cases]
|
||||
[stages.cases.case9.diff.output]
|
||||
score = 0
|
||||
ignorespaces = true
|
||||
hide = false
|
||||
forcequit = false
|
||||
[stages.diff.output]
|
||||
score = 0
|
||||
ignorespaces = false
|
||||
ignorespaces = true
|
||||
hide = false
|
||||
forcequit = true
|
||||
forcequit = false
|
||||
|
||||
[stages.cases]
|
||||
[task]
|
||||
type = ""
|
||||
name = "Blank Task"
|
||||
|
||||
[release]
|
||||
deadline = "null"
|
||||
|
|
Loading…
Reference in New Issue
Block a user
make this basic test as simple as possible, and create new test cases for each kind of stage