Portanto, essa é uma pergunta um tanto estranha.
Estou escrevendo uma biblioteca de xadrez, essencialmente do zero. Você pode encontrar grande parte do código aqui , com a intenção de usá-lo para uma GUI e / ou um mecanismo. (O jogo é Grand Chess, mas, para os fins desta pergunta, realmente não importa.)
Atualmente, estou escrevendo testes de unidade para verificar se minhas funções funcionam conforme o esperado. E eu queria saber se havia algum tipo de biblioteca ou banco de dados de posições sugeridas para testar, das quais eu posso usar e trabalhar, categorizadas por se tratarem de xeque-mate, impasse, cheque, jurídico, ilegal, etc.
tl; dr Estou procurando uma lista de posições para testar meu código de unidade.
Você pode encontrar meus testes atuais aqui, eu os adiciono a cada poucos dias. No entanto, quero garantir que os testes sejam exaustivos antes de eu depurar o código. (Metade deles falham atualmente).
Edit: para esclarecer: Eu não estou procurando por testes de mecanismo ("melhor jogada"). Estou procurando testes de representação do conselho ("esta posição é xeque-mate"). Eu já tenho alguns quebra-cabeças alinhados para testes de motores.
fonte
Respostas:
Ao ler sua pergunta, minha reação é que seu escopo é muito complicado para testes de unidade. Eu recomendo uma leitura rápida através do e-book gratuito Unit Testing Succinctly. No entanto, não tenho experiência em escrever código de xadrez (talvez seus paradigmas sejam diferentes) - embora eu faça software para viver.
Um teste de unidade deve ser muito simples e testar uma função que faz uma única coisa. Então você pode combinar as funções com uma expectativa razoável de que elas funcionem. Por exemplo, eu esperaria que um teste de unidade para cada peça determinasse se uma determinada movimentação é legal. Um teste de unidade para cada peça para determinar se está colocando o rei em xeque. Um teste para cada peça para determinar onde está atacando, etc.
Testar uma posição parece um teste de unidade muito complicado e seria muito mais difícil de fazer completamente. Em vez disso, escreva testes menores contra funções menores e saiba que aqueles que trabalham individualmente - avaliar uma posição é apenas uma questão de iterar sobre as funções simples.
Se você quiser testar uma posição para uma boa jogada (não forçada), acho que os testes de unidade limitarão artificialmente o desenvolvimento e a força do seu motor de xadrez a longo prazo ... um resultado binário de um teste de unidade forçará seu motor a fazer o mesmo movimento toda vez.
Eu também gostaria de adicionar testes de unidade para o caminho 'mais direto' a um parceiro com jogos finais conhecidos. Eu gostaria de adicionar testes de unidade para atravessar aberturas conhecidas também. Os testes de unidade no meio do jogo serão muito mais difíceis - talvez conectando uma posição e avaliando que o mecanismo produz um resultado utilizável (que é uma resposta binária).
Para a questão de avaliar um conjunto de posições para o seu mecanismo, é melhor colocar essa questão em https://stackoverflow.com/ com a tag "xadrez".
fonte
Embora essa seja uma pergunta antiga, achei que o conceito apresentado neste blog poderia ser útil: http://scionsoftware.com/blog/write-tests-by-playing-chess
A idéia é que você jogaria um jogo de xadrez em uma GUI e tivesse um mecanismo para capturar o estado do tabuleiro de xadrez serializando em um arquivo.
Você pode nomear esses arquivos de acordo com os casos de teste e alimentá-los com o método de teste que definir: IsCheckmate; IsLegal; IsDraw
Um dos principais motivos pelos quais você desejaria usar uma interface do usuário natural para criar esses casos de teste, fora da facilidade de criação, é que condições suficientes também dependem da contagem de movimentação: condições de castling, passant, draw.
fonte
Não conheço nenhum banco de dados de teste de unidade para o mecanismo de xadrez (em geral) e, sim, escrever testes de unidade exaustivos é quase impossível.
Talvez você possa explorar técnicas alternativas de teste, como testes baseados em propriedades (QuickCheck em Haskell, eu não conheço o ambiente F #, mas certamente existe algo parecido com o F #), que pode gerar automaticamente uma grande quantidade de "posição" e testá-los usando a propriedade definida por você.
Espero que isso ajude um pouco :)!
fonte