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.
sumber
Jawaban:
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".
sumber
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.
sumber
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 :)!
sumber