生成测试数据
Python3,目前只支持Windows系统
测试环境:
- Python 3.10.10
- Windows11 22H2
- 下载源码
git clone git@github.com:Gingmzmzx/GenerateTestCase.git
- 将你的正解命名为
solve.cpp
并放到项目根目录中 - 编写
data.json
,具体格式见下文 - 运行
python generate.py
,程序会自动生成testcase.zip
,该文件可以直接导入至Vijos
OJ中 您也可以在任何项目中引入generate.py
,并参考if __name__ == "__main__":
语句块中的代码来生成测试数据
在converter目录中,提供了一些转换工具。
- luogu2vijos.py可以将Luogu兼容的测试数据格式转换为Vijos兼容的测试数据
- vijos2luogu.py可以将Vijos兼容的测试数据格式转换为Luogu兼容的测试数据
该文件内容有一个列表构成,其中每个元素代表一组测试数据,有以下格式:
data
:一个列表,其中每个元素代表一组输入数据,具体格式见下文count
:一个整数,代表该组测试数据中测试数据的数量(默认为10
)memory_limit
:一个整数,代表该组测试数据的内存限制,单位为KB(默认为16384
)time_limit
:一个整数,代表该组测试数据的时间限制,单位为秒(默认为1
)
其中data
字段的格式如下:
-
name
:一个字符串或一个字符串列表,代表该组输入数据的名称 -
range
:一个列表或字典。 当name
为字符串时,range
为一个列表,代表该组输入数据的范围;当name
为字符串列表时,range
为一个字典,其中的每个元素代表对应name
输入数据的范围。
范围使用一个列表表示,列表中的第一个元素代表该组输入数据的最小值,第二个元素代表该组输入数据的最大值。生成数据时将从该区间中随机选择一个整数作为该组输入数据的值。比如"N": [1, 100000]
表示$N \in [1, 100000]$
您也可以使用前面已有的输入数据的名称来表示该组输入数据的范围。比如"N": [1, "M"]
,表示$N \in [1, M]$ -
count
:一个整数或一个字符串,代表该组输入数据的数量。 当为整数时,表示该组输入数据的数量为该整数; 当为字符串时,表示该组输入数据的数量为前面已有的输入数据的名称。比如"count": "N"
,表示该组输入数据的总共数量为$N$
下面是一个实例,其中包含两组测试数据。每组数据都有
[
{
"data": [
{
"name": ["N", "M", "C"],
"range": {
"N": [1, 100],
"M": [2, 1000],
"C": [1, 100]
},
"count": 1
},
{
"name": "S",
"range": [1, "M"],
"count": "N"
},
{
"name": ["a", "b", "x"],
"range": {
"a": [1, "N"],
"b": [1, "N"],
"x": [1, "M"]
},
"count": "C"
}
],
"count": 10,
"memory_limit": 16384,
"time_limit": 1
},
{
"data": [
{
"name": ["N", "M", "C"],
"range": {
"N": [1, 1000],
"M": [2, 100000],
"C": [1, 1000]
},
"count": 1
},
{
"name": "S",
"range": [1, "M"],
"count": "N"
},
{
"name": ["a", "b", "x"],
"range": {
"a": [1, "N"],
"b": [1, "N"],
"x": [1, "M"]
},
"count": "C"
}
],
"count": 10,
"memory_limit": 16384,
"time_limit": 1
}
]
本仓库中已包含一个solve.cpp
(AKIOI OJ P1009)和data.json
。您可以直接运行python generate.py
生成数据看一下效果。
本项目使用Apache License 2.0
开源协议,并不得商用,请自觉遵守,谢谢。