Блок Тестування подання на шаховій дошці


9

Тож це трохи чуже питання.

Я пишу шахову бібліотеку, по суті, з нуля. Ви можете знайти більшу частину коду тут , маючи намір використовувати його для GUI та / або двигуна. (Гра - це великі шахи, але для цілей цього питання це насправді не має значення.)

На даний момент я пишу одиничні тести, щоб переконатися, що мої функції працюють як очікувалося. І мені було цікаво, чи є якась бібліотека чи база даних пропонованих позицій для тестування, з яких я можу використовуватись та працювати з них, класифікуючись за тим, чи є вони Checkmate, Stalemate, Check, Legal, незаконними тощо.

tl; dr Я шукаю список позицій, на який можна перевірити свій код.

Ви можете знайти мої поточні тести тут, я додаю їх кожні кілька днів. Однак я хочу переконатися, що тести вичерпні, перш ніж перейти до налагодження коду. (Половина з них не вдається зараз).

Редагувати: для уточнення: я не шукаю двигунів ("кращий хід") тестів. Я шукаю тести представництва на дошці ("це ця контрольна позиція"). У мене вже є кілька загадок для випробувань двигуна.


Ви кодуєте варіант. Стандартний шаховий набір не працює для вас. Тому я боюся, що ти сам.
SmallChess

@StudentT Я шукаю те, з чого я можу почати. звичайна база даних буде добре, оскільки ви знаєте, я можу її редагувати.
асибахі

1
Є МНОГО таких тестових наборів, ви раді за щось на кшталт хитрості, тактичних вправ у стандартних шахах?
SmallChess

@StudentT Я нічого не зміг знайти через Google, тому чому я тут запитую. Будь-яка інформація буде корисною.
асібахі

Те, що ви хочете перевірити, мало стосується представництва на борту. Вам потрібно буде протестувати представлення на дошці після того, як робити / скасовувати рухи чи імпортувати позиції. Виявлення партнера / пата вимагає функції оцінювання, а перевірка позиції на законність має бути власною функцією, яка має набагато більше, ніж перевірка репрезентації на дошці.
Queeg

Відповіді:


1

Читаючи ваше запитання, моя реакція кишечника полягає в тому, що ваш обсяг занадто складний для тестування одиниць. Я рекомендую швидко прочитати безкоштовний тестовий блок електронних книг. Однак у мене немає досвіду написання шахового коду (можливо, ваші парадигми відрізняються) - хоча я заробляю програмне забезпечення на життя.

Тест одиниці повинен бути дуже простим і перевірити функцію, яка виконує 1 єдину річ. Тоді ви можете комбінувати функції з певним розумним сподіванням, що вони працюватимуть. Наприклад, я б очікував, що одиничний тест для кожного твору визначить, чи є певний хід законним. Одиничне випробування для кожного твору, щоб визначити, чи він ставить короля на перевірку. Тест на кожен твір, щоб визначити, де він атакує тощо.

Тестування позиції здається дуже складним одиничним тестом, і це було б набагато важче зробити ретельно. Натомість пишіть менші тести проти менших функцій, а потім знайте, що ті, що працюють індивідуально, - оцінка позиції - це лише питання повторення простих функцій.

Якщо ви хочете перевірити позицію на хороший (не вимушений) крок, я думаю, що тест штучно обмежить довгостроковий розвиток та силу вашого шахового двигуна ... бінарний результат одиничного тестування змусить ваш двигун зробити кожен раз однаковий хід.

Я також роздивився б додавання одиничних тестів для "найбільш прямого" шляху до товариша з відомими кінцевими іграми. Я також хотів би додати одиничні тести для проходу через відомі отвори. Тести середньої ігрової одиниці будуть набагато складнішими - можливо, підключення до позиції та оцінка того, що двигун дає корисний результат (що є двійковим відгуком).

Щодо питання оцінки набору позицій для вашого двигуна, ви можете зробити набагато краще, поставивши це питання на https://stackoverflow.com/ з тегом "шахи".


Дякую за відповідь. Однак, як ви, напевно, можете сказати з розмови з коментарями під питанням, я не хочу перевірити алгоритми двигуна. Я ще навіть не дістався до них. Я хочу перевірити, чи мій код визнає, чи стоїть позиція на дошці - мат, чи тупик, чи ні, який "просто" підраховує легальні кроки та чи перевіряє король. Насправді, оскільки я опублікував це запитання, я продовжив складати невелику колекцію позицій, які використовуватимуться як одиничні тестові приклади. Я можу поставити це як відповідь. (Я повністю здивований, що хтось запропонував за це щедрість, тбх.)
asibahi

Це не відповідає на запитання.
SmallChess

1
Крім того, примітки про тестування приладів просто неправильні.
SmallChess

@asibahi У мене не вистачало представників для публікації в цьому розділі коментарів, тому мені довелося додати відповідь. Я дійсно думаю, що з цим питанням вам краще послужити на форумі програмування (stackexchange). Але в цьому коментарі ... Ви вже визначили індивідуальні одиничні тести -> Для кожного тесту є детальний законний крок. Якщо повторення над цим повертає помилкове значення для кожного твору, у вас є патова ситуація або мат, якщо ви перевіряєте. Для цього вам не потрібна велика колекція позицій. Випробовуючи кожну деталь окремо на її поточний стан, ви можете повторити декілька штук для оцінки позиції.
Павло

0

Хоча це старе питання, я подумав, що концепція, представлена ​​в цьому блозі, може бути корисною: http://scionsoftware.com/blog/write-tests-by-playing-chess

Ідея полягає в тому, щоб ви грали в шахову гру на графічному інтерфейсі і мали механізм для фіксації стану шахової дошки шляхом серіалізації в файл.

Ви можете назвати ці файли за тестовими кейсами та подавати їх у залежно від визначеного методу тестування: IsCheckmate; IsLegal; IsDraw

Однією з головних причин, з якої ви хочете використовувати природний інтерфейс для створення цих тестових кейсів, поза простотою створення, є те, що достатньо умов також покладається на кількість переїздів: ролі, умови переходу, умови малювання.


0

Я не знаю жодної бази даних тестування для шахового двигуна (загалом), і так, вичерпний тест одиниць майже неможливий.

Ви, можливо, можете вивчити альтернативні методи тестування, такі як тестування на основі властивостей (QuickCheck в Haskell, я не знаю середовища F #, але, безумовно, існує щось подібне для F #), яке може автоматично генерувати велику кількість "позицій" і перевірити їх. використовуючи визначене вами властивість.

Сподіваюся, це допоможе трохи :)!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.