Unit Menguji representasi papan catur

9

Jadi ini sedikit pertanyaan outlier.

Saya menulis perpustakaan catur, pada dasarnya dari awal. Anda dapat menemukan banyak kode di sini , dengan tujuan menggunakannya untuk GUI dan / atau mesin. (Gim ini Grand Catur tetapi untuk keperluan pertanyaan ini tidak terlalu penting.)

Saat ini saya sedang menulis unit test untuk memverifikasi bahwa fungsi saya berfungsi seperti yang diharapkan. Dan saya bertanya-tanya apakah ada semacam perpustakaan atau database dari posisi yang disarankan untuk diuji yang dapat saya gunakan dan bekerja, dikategorikan berdasarkan apakah mereka adalah Skakmat, Kebuntuan, Cek, Legal, Ilegal, dll.

tl; dr Saya mencari daftar posisi untuk menguji unit kode saya.

Anda dapat menemukan tes saya saat ini di sini, saya tambahkan setiap beberapa hari. Namun, saya ingin memastikan pengujiannya lengkap sebelum saya men-debug kode. (Setengah dari mereka gagal saat ini).

Sunting: untuk memperjelas: Saya tidak mencari tes engine ("langkah terbaik"). Saya mencari tes representasi dewan ("apakah ini posisi skakmat"). Saya sudah memiliki beberapa puzzle yang disiapkan untuk pengujian mesin.

asibahi
sumber
Anda sedang mengkode varian. Kumpulan data catur standar tidak akan berfungsi untuk Anda. Jadi saya khawatir Anda sendirian.
SmallChess
@StudentT saya mencari sesuatu yang bisa saya mulai. sebuah basis data reguler akan baik-baik saja, karena Anda tahu, saya dapat mengeditnya.
asibahi
1
Sudah ada BANYAK set tes seperti itu, apakah Anda senang untuk sesuatu seperti perft, latihan taktis dalam catur standar?
SmallChess
@StudentT Saya tidak dapat menemukan apa pun melalui Google, jadi mengapa saya bertanya di sini. Info apa pun akan sangat membantu.
asibahi
Apa yang ingin Anda uji tidak banyak hubungannya dengan representasi dewan. Anda akan ingin menguji perwakilan dewan setelah melakukan / membatalkan langkah atau mengimpor posisi. Mendeteksi pasangan / kebuntuan membutuhkan fungsi evaluasi, dan menguji posisi untuk legalitas harus merupakan fungsi sendiri yang memiliki lebih banyak hal yang harus dilakukan daripada memeriksa perwakilan dewan.
Queeg

Jawaban:

1

Saat membaca pertanyaan Anda, reaksi saya adalah ruang lingkup Anda terlalu rumit untuk pengujian unit. Saya sarankan membaca cepat Unit e-book gratis Pengujian Singkat. Namun, saya tidak punya pengalaman menulis kode catur (mungkin paradigma Anda berbeda) - walaupun saya melakukan perangkat lunak untuk mencari nafkah.

Tes unit harus sangat sederhana dan menguji fungsi yang melakukan 1 hal tunggal. Kemudian Anda dapat menggabungkan fungsi-fungsi dengan harapan yang masuk akal bahwa mereka akan bekerja. Sebagai contoh, saya akan mengharapkan tes unit untuk setiap bagian untuk menentukan apakah suatu gerakan tertentu legal. Tes unit untuk masing-masing bagian untuk menentukan apakah itu mengendalikan raja. Tes untuk setiap bagian untuk menentukan di mana ia menyerang, dll.

Menguji posisi tampaknya seperti unit test yang sangat rumit dan akan jauh lebih sulit untuk dilakukan secara menyeluruh. Alih-alih menulis tes yang lebih kecil terhadap fungsi yang lebih kecil dan kemudian tahu bahwa mereka secara individual bekerja - mengevaluasi posisi hanya masalah iterasi pada fungsi sederhana.

Jika Anda ingin menguji posisi untuk gerakan yang baik (tidak dipaksakan), saya pikir unit test akan secara artifisial membatasi pengembangan jangka panjang dan kekuatan mesin catur Anda ... hasil biner dari unit test akan memaksa mesin Anda untuk membuat langkah yang sama setiap waktu.

Saya juga akan melihat menambahkan tes unit untuk jalur 'paling langsung' ke jodoh dengan endgames yang dikenal. Saya akan mencari untuk menambahkan tes unit untuk melintasi melalui bukaan yang diketahui juga. Tes unit permainan tengah akan jauh lebih sulit - mungkin memasang posisi dan mengevaluasi bahwa mesin menghasilkan hasil yang dapat digunakan (yang merupakan respons biner).

Untuk pertanyaan mengevaluasi seperangkat posisi untuk mesin Anda, Anda mungkin sebaiknya meletakkan pertanyaan ini di https://stackoverflow.com/ dengan tag "catur".

Paul
sumber
Terima kasih atas jawabannya. Namun, karena Anda mungkin dapat mengatakan dari percakapan komentar di bawah pertanyaan, saya tidak ingin menguji algoritma mesin. Aku bahkan belum mendapatkannya. Saya mencari untuk menguji apakah kode saya mengenali apakah posisi berdiri di papan adalah skakmat, atau jalan buntu, atau tidak, yang "hanya" menghitung langkah hukum dan apakah raja berada dalam kendali. Bahkan sejak saya memposting pertanyaan itu, saya kemudian menyusun sejumlah kecil posisi untuk digunakan sebagai kasus uji unit. Saya mungkin memposting itu sebagai jawaban. (Saya benar-benar terkejut seseorang menawarkan hadiah untuk ini, tbh.)
asibahi
Ini tidak menjawab pertanyaan.
SmallChess
1
Selain itu, catatan tentang pengujian unit hanya salah.
SmallChess
@asibahi Saya tidak punya cukup rep untuk memposting di bagian komentar itu, jadi saya harus menambahkan jawaban. Saya benar-benar berpikir Anda akan lebih baik dilayani di forum pemrograman (stackexchange) dengan pertanyaan ini. Tetapi pada komentar ini ... Anda sudah mengidentifikasi unit test individu -> Untuk setiap tes piece apakah ada langkah hukum. Jika mengulangi yang mengembalikan false untuk masing-masing bagian, Anda memiliki jalan buntu, atau skakmat jika Anda dalam cek. Anda tidak perlu banyak koleksi posisi untuk itu. Dengan menguji masing-masing bagian secara terpisah untuk kondisi saat ini, Anda dapat mengulangi beberapa bagian untuk mengevaluasi posisi.
Paul
0

Meskipun ini adalah pertanyaan lama, saya berpikir bahwa konsep yang disajikan dalam blog ini mungkin berguna: http://scionsoftware.com/blog/write-tests-by-playing-chess

Idenya adalah bahwa Anda akan memainkan permainan catur pada GUI dan memiliki mekanisme untuk menangkap keadaan papan catur dengan membuat serial ke file.

Anda bisa memberi nama file-file itu per kasus uji dan memasukkannya ke dalam metode tes mana pun yang Anda tetapkan: IsCheckmate; IsLegal; IsDraw

Salah satu alasan utama Anda ingin menggunakan UI alami untuk membuat test case ini, di luar kemudahan pembuatan, adalah bahwa kondisi yang cukup juga bergantung pada jumlah langkah: castling, en passant, draw conditions.

SpykeBytes
sumber
0

Saya tidak tahu database pengujian unit untuk mesin catur (secara umum), dan ya, menulis tes unit lengkap hampir tidak mungkin.

Anda mungkin dapat menjelajahi teknik pengujian alternatif seperti pengujian berbasis properti (QuickCheck di Haskell, saya tidak tahu lingkungan F # tetapi pasti ada sesuatu seperti itu untuk F #), yang secara otomatis dapat menghasilkan sejumlah besar "posisi" dan mengujinya menggunakan properti yang ditentukan oleh Anda.

Semoga ini bisa membantu sedikit :)!

Sylvain Julmy
sumber