> 返回资讯列表
news_article.exe
Мой тест на детерминизм проходил в течение нескольких месяцев, пока две сборки играли в разные игры

Мой тест на детерминизм проходил в течение нескольких месяцев, пока две сборки играли в разные игры

My determinism test passed for months while the two builds played different games

2026年8月1日16 次浏览来源:Dev.to 阅读原文

Я составил движок правил отгруженной игры для Android в браузер. Тот же Java, два компилятора. Затем я проверил, согласны ли они. Они этого не сделали, и тест, который у меня уже был, был зеленым все время. Одна и та же команда дважды: зеленая против действующего двигателя, затем против совершенной записи сломанной сборки. Выберите терминальный сеанс, если хотите выбрать текст. Настройка Правила живут в одном модуле без Android на своем классовом пути, что позволяет мне компилировать их во второй раз с TeaVM и запускать ту же логику на холсте на вкладке браузера. Семенной пробег должен быть воспроизводим. Дайте семени движка 42 и фиксированную последовательность входов, и вы должны получать одну и ту же игру каждый раз - это то, что делает повторный запуск и две сборки сопоставимыми. Вот это...

Я составил движок правил отгруженной игры для Android в браузер. Тот же Java, два компилятора. Затем я проверил, согласны ли они. Они этого не сделали, и тест, который у меня уже был, был зеленым все время. Одна и та же команда дважды: зеленая против действующего двигателя, затем против совершенной записи сломанной сборки. Выберите терминальный сеанс, если хотите выбрать текст. Настройка Правила живут в одном модуле без Android на своем классовом пути, что позволяет мне компилировать их во второй раз с TeaVM и запускать ту же логику на холсте на вкладке браузера. Семенной пробег должен быть воспроизводим. Дайте семени движка 42 и фиксированную последовательность входов, и вы должны получать одну и ту же игру каждый раз - это то, что делает повторный запуск и две сборки сопоставимыми. Вот что я на самом деле получил, то же самое семя, те же входные данные: браузер JVM первое препятствие x, кадр 60 405.426 304.426 все еще жив в кадре 360 да нет итоговой оценки 9 6 Не разница округления. Другая игра. Причина скучная. Неудачи теста нет. использовано. Его алгоритм указан вплоть до констант — в Javadoc можно прочитать точный линейный конгруэнтный генератор. Таким образом, семя должно называть ровно одну последовательность. Но мой код не запускал этот алгоритм. Он работал независимо от того, какая реализация была предоставлена, и TeaVM не является JVM. В спецификации описывается, что делает; это не вынуждает зарубежное время выполнения соответствовать. Решение заняло десять минут: запишите LCG на бумаге, чтобы обе сборки выполняли одну и ту же арифметику, а не доверяли ей. Интересной частью является тест. Тест, который не мог его поймать, у меня был так называемый. Он дважды запускал двигатель с одним и тем же семенем и утверждал, что результаты совпадают. Он передавал каждое обязательство, в том числе каждое обязательство, во время которого сборка браузера играла в другую игру. Это должно было пройти. Он запускает двигатель дважды в одно и то же время. Тест в форме, которая не может наблюдать разногласия между временем выполнения

> 分享: