Я настраивал набор тестов вместе с развитием приложения, которое пишет моя команда, и сегодня я столкнулся с проблемой в том, как я собирался тестировать сценарии, которые запускаются через наше приложение.Мы позволяем пользователю установить начальное значение для модуля Random
, чтобы обеспечить повторяемость результатов (это очень важно в научном приложении). Я использую это в нашем тестовом наборе для сравнения stdout / stderr из набора скриптов с 'утверждено 'работает.
При обновлении этих сценариев я заметил, что все сценарии на некоторых машинах не работают.Вскоре я обнаружил, что это связано с тем, что модуль Random
из версии 3.12.0 изменил основную функцию для генерации случайных битов.В настоящее время мы запускаем несколько версий OCaml (включая 3.13) в нескольких средах (win32, osx, linux), и мы бы предпочли провести тестирование на разных версиях OCaml.
Я хотел бы заменить *Модуль 1009 * из 3.12.1 в наш дистрибутив для обеспечения согласованности независимо от версии OCaml, с которой компилируется пользователь.Но наивный подход к удалению модуля Random
в исходном каталоге сообщает, что компилятор обнаружил два файла, которые определяют модуль с именем Random
.
Есть предложения по решению этой проблемы?Я понимаю, что могу переименовать Random
в XRandom
и затем использовать этот модуль, чтобы определить, что мне нужно, или включить стандартный библиотечный случайный модуль, но это потребует изменения каждого вызова функции и позволит разработчикам продолжать (случайно) использовать Random
вместо перегруженной версии.Есть ли способ выбрать определенный случайный модуль во время компиляции?Или, может быть, какой-то другой вариант, о котором я не знаю.
EDIT :
Я просто взял модуль Random из OCaml 3.12.1 и поместил его в свой проект, наКомпиляция через OCamlbuild Я получил следующее сообщение об ошибке во время компоновки (это та же ошибка с OCaml 3.13.0 + dev8, и в значительной степени то, что я ожидал, когда я это сделал),
Error: Files random.cmx and /opt/ocaml-3.12.1/lib/ocaml/stdlib.cmxa
both define a module named Random
И строка компоновки,
- / opt / ocaml-3.12.1 / bin / ocamlopt.opt dynlink.cmxa unix.cmxa str.cmxa bigarray.cmxa -I + camlp4 camlp4fulllib.cmxa -cclib -lcside -cclib -L.-ccopt -I -ccopt / usr / lib -cclib -L.-cclib -Wl, -не по мере необходимости -cc gcc -cclib -llapack -cclib -lblas -cclib -lgfortran -cclib -lz -cclib -lreadline -cclib -lm -cclib '' compileFlags.cmx all_sets.cmx random.cmx status.cmx timer.cmx sexpr.cmx xml.cmx bitSet.cmx lz.cmx fileStream.cmx method.cmx utl.cmx cost_matrix.cmx alphabet.cmx primes.cmx fileContents.cmx numeric.cmxversion.cmx scripting.cmx libgrappa.a libgzcaml.a libzlibstubs.a libcside.a -o scripting.native