Я работаю над Tic Tac Toe, и у меня есть метод #negamax
, который возвращает наилучшее положение на компьютер для перемещения и метод #winner
, который возвращает 1
(выигрывает компьютер) или -1
(пользователь выигрывает). Как я могу проверить #negamax
, чтобы гарантировать, что его реализация правильная, и что пользователь никогда не выигрывает?Как использовать RSpec для тестирования негамакса?
У меня есть несколько тестовых примеров в местах, чтобы проверить, что он возвращает наилучшее положение, и это действительно так, но оно не распространяется на все возможные случаи. Прямо сейчас, это то, что у меня есть (кроме тестов для лучшего выбора):
it 'never allows user to win' do
until game_over?
unless is_ai?
pos = empty_positions.sample
move(pos, user)
else
pos = negamax(0, 1, -100, 100)
move(pos, computer)
end
end
if game.won?
expect(winner).to eq(1)
else
expect(winner).to be_nil
end
end
Это не кажется очень эффективным просто «надежда», что тест никогда не подведет. Что было бы лучшим способом добиться этого?
Привет! Спасибо, что нашли время ответить. Поэтому я предполагаю, что нет способа проверить метод, чтобы он никогда не возвращал значение, хотя это могло бы быть? – user3097405
Ну, вы можете убедиться, что он не возвращает значение для ряда входов, но вы никогда не сможете проверить ВСЕ входы. Несмотря на это, вы всегда можете проверить некоторые точки, проверив некоторые крайние/крайние случаи. – dvxam
Это имеет смысл. Я думаю, что я рассмотрел краевые случаи, проверяющие метод «negamax», поэтому, я думаю, это должно быть ОК :) Спасибо за вашу помощь, @dvxam. – user3097405