TGViewer
SoFCheck SoFCheck @sofcheck · 36 subscribers
Post #72 283
Еще я закончил тестировать owlchess. Для этого я портировал selftest из SoFCheck. Про selftest подробнее можно почитать выше в канале. Если коротко, то он запускает генерацию ходов + дополнительные проверки на большом числе позиций и генерирует лог. После этого сгенерированный лог можно сравнить с логом от другой реализации правил, чтобы убедиться в том, что обе реализации идентичны

В selftest от SoFCheck есть одна небольшая проблема: он полностью рассчитан на псевдолегальный генератор, и поэтому он пишет в лог все псевдолегальные ходы. Это не годится для сравнения с другими шахматными крейтами на Rust, поскольку они генерируют только полностью легальные ходы. Поэтому реализацию selftest пришлось сначала немного переписать, а потом уже портировать на Rust

Еще одна проблема — selftest полагается на функцию наподобие is_cell_attacked, которая проверяет, правда ли поле пробивается противником. В крейте chess такой функции не оказалось (там есть только проверка на шах королю), поэтому пришлось дописать ее руками, а также добавить возможность собрать selftest без использования этой функции

Как я писал выше в канале, selftest позволяет запускать произвольный код для каждой доски, чтобы можно было проверять всякие внутренние инварианты. Эта возможность теперь есть и в owlchess :)

Еще один шаг: добавил запуск selftest'ов в CI, чтобы при коммитах убеждаться, что я не поломал реализацию. В CI все работает просто: я скачиваю репозиторий chess_bench (в котором и реализован selftest), подменяю пакет owlchess на локальный и запускаю тесты. Правда, selftest'ы бегут примерно 12 минут (в SoFCheck'е, напомню, они работали примерно 5 минут). И дело не в том, что Rust принципиально медленнее: просто owlchess проверяет больше инвариантов. Например, он пробует сконвертировать все ходы в SAN и обратно, чтобы убедиться, что чтение и запись SAN — взаимообратные операции
More from @sofcheck
  1. Sep 1, 2024А, и еще, основная логика новой версии утилиты Battlefield реализована в двух пакетах — in…
  2. Sep 1, 2024И кстати да, платформа для сражений шахматных движков будет называться day20 (как заметно…
  3. Sep 1, 2024Решил написать шахматную библиотеку на Go: https://github.com/alex65536/go-chess/tree/mast…
  4. Aug 12, 2023Тем не менее, я немного поломал обратную совместимость и выпустил версию 0.4.0 :) Основное…
  5. Aug 12, 2023Я в последнее время занимался своей шахматной либой на Rust, а именно, пытался слегка прок…
  6. Aug 6, 2023Потратил несколько дней на оптимизацию правил. В итоге практически никакого улучшения в си…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →