如何生成类似有效数据的模糊字符串来测试输入的有效性



这是我用来解析国际象棋符号的格式,继续布莱克的动作,并定义变化。<1. Nf3 Nf6 2. e3 e6><1... Nf6 2. e3><main2 main 3. Nf3 Nf6 4. e3>

我用一堆测试数据测试了我的解析器。现在,我想用看起来与格式相似的随机模糊数据来测试它。

如何生成与有效格式60%相似的模糊测试数据。像这样:

<1.<1. B3a1<B N C>

我试过这个,但它会产生完全的胡言乱语,有点无用。

function genCode(len) {
let chars = "<>abcdefgh.NBQRKO-12345678 ".split('');
function nextChar() {
return chars[Math.floor(Math.random()*chars.length)];
};
let res = "";
for (let i = 0; i < len; i++) {
res += nextChar();
}
return res;
}

所以我尝试了这个,它有点工作:

function repeat(code, n) {
let res = "";
while (--n) {
res += code;
}
return res;
}

function corrupt(code) {
let chars = "<>abcdefgh.NBQRKO-12345678 ".split('');
function nextChar() {
return chars[Math.floor(Math.random()*chars.length)];
};
let res = "";
for (let i = 0; i < code.length; i++) {
res += Math.random() < 0.8 ? code[i] : nextChar();
}
return res;
}
console.log(corrupt(repeat(`<1. Nf3 Nf6 2. Ba5 Bg4 3. e4> <4... a6> <5... Qa7> <7... a8>`, 100
)));

最新更新