Как сгенерировать нечеткую строку, похожую на действительные данные, для проверки проверки входных данных

#javascript #html #node.js #unit-testing

#javascript #HTML #node.js #модульное тестирование

Вопрос:

Это формат, который я использую для разбора шахматной записи, продолжения хода черных и определения вариантов. <1. Nf3 Nf6 2. e3 e6>
<1... Nf6 2. e3>
<main2 main 3. Nf3 Nf6 4. e3>

Я протестировал свой анализатор с кучей тестовых данных. Теперь я хочу протестировать ее со случайными нечеткими данными, которые выглядят аналогично формату.

Как я могу сгенерировать нечеткие тестовые данные, которые на 60% похожи на допустимый формат. Вот так:

<1.
<1. B3a
1<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;
}
  

Ответ №1:

Итак, я попробовал это, и это вроде работает:

 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
)));