Перейти к основному содержимому

Файлы сравнения вариантов

примечание

Эта страница переведена при помощи нейросети GigaChat.

Поскольку некоторые из тестов по своей сути дают зависящие от среды результаты, существуют способы указать альтернативные «ожидаемые» файлы результатов. Каждый регрессионный тест может иметь несколько файлов сравнения, показывающих возможные результаты на разных платформах. Есть два независимых механизма для определения того, какой файл сравнения используется для каждого теста.

Первый механизм позволяет выбирать файлы сравнения для конкретных платформ. Существует файл сопоставления, src/test/regress/resultmap, который определяет, какой файл сравнения использовать для каждой платформы. Чтобы исключить ложное тестирование «неудачи» для конкретной платформы, выберите или создайте файл варианта результата, а затем добавьте строку в файл resultmap.

Каждая строка в файле сопоставления имеет форму

testname:output:platformpattern=comparisonfilename

Имя теста – это имя конкретного модуля регрессионного тестирования. Значение вывода указывает, какой выходной файл следует проверить. Для стандартных регрессионных тестов это всегда out. Это значение соответствует расширению файла вывода. Шаблон платформы – это шаблон в стиле инструмента Unix expr (то есть регулярное выражение с неявной привязкой ^ в начале). Он сопоставляется с именем платформы, напечатанным config.guess. Имя файла сравнения – это базовое имя файла сравнения замененного результата.

Например: некоторые системы не имеют работающей функции strtof, для которой обходная стратегия вызывает ошибки округления в тесте регрессии float4. Поэтому файл сравнения вариантов не предоставляется, float4-misrounded-input.out включает результаты, которые следует ожидать в этих системах. Чтобы заглушить ложное сообщение о «неудаче» на платформах HP-UX 10 , resultmap включает:

float4:out:hppa.*-hp-hpux10.*=float4-misrounded-input.out

что будет срабатывать на любой машине, где вывод config.guess совпадает с hppa.*-hp-hpux10.*. Другие строки в resultmap выбирают файл сравнения вариантов для других платформ, где это уместно.

Второй механизм выбора для файлов сравнения вариантов является гораздо более автоматическим: механизм просто использует «лучшее совпадение» среди нескольких предоставленных файлов сравнения. Сценарий драйвера регрессионного теста учитывает как стандартный файл сравнения для теста testname.out, так и файлы вариантов с именами testname_digit.out (где digit - любая одиночная цифра 0-9). Если какой-либо такой файл точно совпадает, тест считается пройденным; в противном случае используется тот, который создает кратчайший diff, чтобы создать отчет об отказе. Если resultmap содержит запись для конкретного теста, то базовый testname - это заменяющее имя, указанное в resultmap.

Например, для теста char файл сравнения char.out содержит результаты, которые ожидаются в локалях C и POSIX, тогда как файл char_1.out содержит результаты, отсортированные так, как они появляются во многих других локалях.

Механизм наилучшего соответствия был разработан для работы с результатами, зависящими от локализации, но его можно использовать в любой ситуации, когда результаты теста невозможно легко предсказать только из имени платформы. Ограничением этого механизма является то, что драйвер теста не может определить, какая именно вариация является фактически «правильной» для текущей среды; он просто выберет вариант, который кажется лучшим. Поэтому безопаснее всего использовать этот механизм только для переменных результатов, которые считаются одинаково допустимыми во всех контекстах.