Vlad-Shcherbina / icfpc2014-tbd

fourth place
Do What The F*ck You Want To Public License
4 stars 0 forks source link

Тесты на основании выхлопа reference implementation'ов #32

Open manpages opened 10 years ago

manpages commented 10 years ago

Vlad wrote:

Нужны голды на основе reference implementation. И вот тут видно, что manpages прошёл длиннющий путь, но последнего шажка (наделать собственно голден тестов) не сделал. Ради которого собственно это и затевалось.

Тем не менее надо сказать, что мой код будет полезен в будущем — я вынесу его в отдельную репку на Github и проапдейчу этот issue примерами использования.

Как я вижу воркфлоу —

vim inputs.json # описываем вводы
vim outputs.json # описываем откуда греббить выхлоп ref. impl
make all
make start # стартует один или два сервера (в зависимости от того, их имплементация server-side или client-side)

теперь мы можем совершать прямые запросы к refc_http или пользоваться refc.py — библиотекой, код которой сгенерен на основе спецификаций вводов и выводов и которая возвращает питоновые структуры данных, описывающие выхлоп ref. impl. Теперь то, с чем я трахался большую часть первого дня можно будет сконфигать за десять минут и приступить прямо к написанию тестов / тестированию кода прямо из кода типа:

if DEBUG_LEVEL == GOLDEN:
  result = refc.step()
  assert game.state.map == result.map
  # etc
fj128 commented 10 years ago

НЕТ!!!

Воркфлоу должен быть таким:

run_tests(tests, ghost_ai=whatever, map=whatever, lm_ai=game.resolve_gcc('py:GccMultiplexer(YoleGCC, VorberGCC, FjGCC, ReferenceGCC)'))

И ты как бы должен был заимплементить ReferenceGCC, а я -- GccMultiplexer. Если б там ещё можно было указать game='GameMultiplexer(game, ReferenceGame)' мы бы вообще были в шоколаде. Хотя вот это может быть невозможно потому что мы не можем передать свои гцц интерпретаторы в жававскриптовский движок, но надо стремиться к невозможному, передавая туда скомпилённый код хотя бы!

То есть я к тому, что "make " внезапно вызывает у меня НЕНАВИСТЬ и ЗА ЧТО ТЫ МЕНЯ ТАК НЕНАВИДИШЬ, давайте-ка на чистом питоне писать, без вызовов красноглазых скриптов и программ? Это я не потому говорю что я не могу их вызвать, у меня они как бы есть и я могу, но я дичайше предпочитаю вызывать питоновские функции. Если какой-то питоновской функции нужно запустить мейк внутри себя -- я тотально не против. Главное, чтобы меня никуда из няшненького питона не выкидывало принудительно.

Vlad-Shcherbina commented 10 years ago

То что ты говоришь конечно идеальный вариант, но он может быть очень затратным. Взаимодействовать с браузером или джаваскриптом в обе стороны, плюс эта ReferenceGCC будет использовать чернющую магию внутри для синхронизации.

Для начала сошло бы немножко голдов вне зависимости от того, каким именно шаманством они получены. Это шаманство может послужить learning experience для написания полноценной ReferenceGCC, но потребность в тестах возникает задолго до того, как она будет готова.

manpages commented 10 years ago

fj, я вообще не говорил про то, что будет происходить в конце/середине первого дня, я говорил про немедленные следствия наличия refc. Ты можешь прямо в тестах своего (первого) gcc писать тесты на reference implementation! Чтобы сделать так как ты хочешь нужно будет брать сгенеренный под задачу refc.py и твикать его под конкретные интерфейсы с dependency injection'ами или простыми спецификаторами. Эти вещи куда более task-specific чем концепция reference implementation'а, который имеет входы и выходы. Согласен?

fj128 commented 10 years ago

Ты можешь прямо в тестах своего (первого) gcc писать тесты на reference implementation!

OK, но я должен их мочь писать на питоне, в своём уютненьком version-controlled test.py, а не вызывая из шелла. Так-то я и на их вебстранице могу код запустить, чем вызов из шелла лучше?

manpages commented 10 years ago

Ну ясное дело, что из питона. Просто тебе надо будет сделать make start, который запустит сервера.

Мой refc уже мог вызываться из питона, правда довольно тупо, он сначала делал полный run() и возвращал состояния интересных нам вещей в большом списке.

Прикрутить step() было возможно, но заёбисто :)

Короче, fj, we're on the same page!

2014-07-30 1:52 GMT+02:00 fj128 notifications@github.com:

Ты можешь прямо в тестах своего (первого) gcc писать тесты на reference implementation!

OK, но должен иметь их мочь писать на питоне, в своём уютненьком version-controlled test.py, а не вызывая из шелла. Так-то я и на их вебстранице могу код запустить, чем вызов из шелла лучше?

— Reply to this email directly or view it on GitHub https://github.com/Vlad-Shcherbina/icfpc2014-tbd/issues/32#issuecomment-50555512 .

Fly safe, Sloz