30.3. ÐаÑиаÑивнÑе ÑÑавниÑелÑнÑе ÑайлÑ
ÐоÑколÑÐºÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑеÑÑÑ Ð¿Ð¾ ÑÑÑи вÑдаÑÑ ÑезÑлÑÑаÑÑ, завиÑÑÑие Ð¾Ñ Ð¾ÐºÑÑжениÑ, Ð¼Ñ Ð¿Ñедлагаем неÑколÑко ваÑианÑов «ожидаемÑÑ Â» Ñайлов ÑезÑлÑÑаÑа. ÐаждÑй ÑегÑеÑÑионнÑй ÑеÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð½ÐµÑколÑко ÑÑавниÑелÑнÑÑ Ñайлов, показÑваÑÑÐ¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñе ÑезÑлÑÑаÑÑ Ð½Ð° ÑазнÑÑ Ð¿Ð»Ð°ÑÑоÑÐ¼Ð°Ñ . СÑÑеÑÑвÑÐµÑ Ð´Ð²Ð° незавиÑимÑÑ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð° Ð´Ð»Ñ Ð¾Ð¿ÑеделениÑ, какой именно ÑÑавниÑелÑнÑй Ñайл бÑÐ´ÐµÑ Ð²ÑбÑан Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑеÑÑа.
ÐеÑвÑй меÑ
анизм позволÑÐµÑ Ð²ÑбиÑаÑÑ ÑÑавниÑелÑнÑй Ñайл Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑной плаÑÑоÑмÑ. ÐÑÑÑ Ñайл ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ src/test/regress/resultmap, в коÑоÑом опÑеделÑеÑÑÑ, какой ÑÑавниÑелÑнÑй Ñайл вÑбиÑаÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ плаÑÑоÑмÑ. ЧÑÐ¾Ð±Ñ ÑÑÑÑаниÑÑ Ð»Ð¾Ð¶Ð½Ñе «Ñбои» ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑной плаÑÑоÑмÑ, Ð´Ð»Ñ Ð½Ð°Ñала Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑбÑаÑÑ Ð¸Ð»Ð¸ ÑоздаÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ ÑÑавниÑелÑного Ñайла, а поÑом добавиÑÑ ÑÑÑÐ¾ÐºÑ Ð² Ñайл resultmap.
ÐÐ°Ð¶Ð´Ð°Ñ ÑÑÑока в Ñайле ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÑглÑÐ´Ð¸Ñ ÐºÐ°Ðº
testname:output:platformpattern=comparisonfilename
ÐÐ¼Ñ ÑеÑÑа (testname) здеÑÑ - пÑоÑÑо название конкÑеÑного модÑÐ»Ñ ÑегÑеÑÑионного ÑеÑÑа. ÐнаÑение output показÑваеÑ, вÑвод какого Ñайла пÑовеÑÑÑÑ. ÐÐ»Ñ ÑÑандаÑÑного ÑегÑеÑÑионного ÑеÑÑа ÑÑо вÑегда out. ÐнаÑение ÑооÑвеÑÑÑвÑÐµÑ ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð²ÑÑ
одного Ñайла. platformpattern пÑедÑÑавлÑÐµÑ Ñобой Ñаблон в ÑÑиле Unix-ÑÑилиÑÑ expr (Ñ. е. ÑегÑлÑÑное вÑÑажение Ñ Ð½ÐµÑвнÑм ^ ÑкоÑем в наÑале). ÐÑÐ¾Ñ Ñаблон ÑÑавниваеÑÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ плаÑÑоÑмÑ, коÑоÑое вÑводиÑÑÑ Ð¸Ð· config.guess. comparisonfilename ÑÑо Ð¸Ð¼Ñ ÑÑавниÑелÑного Ñайла, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзован.
ÐапÑимеÑ, некоÑоÑÑе ÑиÑÑÐµÐ¼Ñ Ð¸Ð½ÑеÑпÑеÑиÑÑÑÑ Ð¾ÑÐµÐ½Ñ Ð¼Ð°Ð»ÐµÐ½Ñкие ÑиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей запÑÑой как нолÑ, а не как оÑÐ¸Ð±ÐºÑ Ð¿Ð¾ÑеÑи знаÑимоÑÑи. ÐÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑаÑÑ
ождениÑм в ÑегÑеÑÑионнÑÑ
ÑеÑÑаÑ
Ð´Ð»Ñ float8. ÐоÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð¿Ñедлагаем ваÑÐ¸Ð°Ð½Ñ ÑÑавниÑелÑного Ñайла float8-small-is-zero.out, коÑоÑÑй вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ ÑезÑлÑÑаÑ, ожидаемÑй Ð´Ð»Ñ ÑакиÑ
ÑиÑÑем. ЧÑÐ¾Ð±Ñ Ð·Ð°Ð¼Ð°ÑкиÑоваÑÑ ÑообÑение о ложном «Ñбое» на плаÑÑоÑме OpenBSD, Ñайл resultmap вклÑÑÐ°ÐµÑ Ð² ÑебÑ:
float8:out:i.86-.*-openbsd=float8-small-is-zero.out
коÑоÑÑй ÑÑабоÑÐ°ÐµÑ Ð½Ð° лÑбой маÑине, где вÑÑ
одное знаÑение config.guess ÑооÑвеÑÑÑвÑÐµÑ i.86-.*-openbsd. ÐÑÑгие ÑÑÑоки в resultmap вÑбиÑаÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ ÑÑавниÑелÑного Ñайла Ð´Ð»Ñ Ð´ÑÑгиÑ
плаÑÑоÑм, еÑли ÑÑо ÑелеÑообÑазно.
ÐÑоÑой меÑ
анизм вÑбоÑа более авÑомаÑиÑеÑкий: он пÑоÑÑо вÑбиÑÐ°ÐµÑ Â«Ð¿Ð¾Ð´Ñ
одÑÑÑÑ Ð¿Ð°ÑÑ» из неÑколÑкиÑ
пÑедлагаемÑÑ
ÑÑавниÑелÑнÑÑ
Ñайлов. ÐÑÐ°Ð¹Ð²ÐµÑ ÑкÑипÑа ÑегÑеÑÑионного ÑеÑÑа ÑаÑÑмаÑÑÐ¸Ð²Ð°ÐµÑ ÑÑандаÑÑнÑй ÑÑавниÑелÑнÑй Ñайл Ð´Ð»Ñ ÑеÑÑа, , ваÑиаÑивнÑй Ñайл имÑ_ÑеÑÑа.out (где имÑ_ÑеÑÑа_ÑиÑÑа.outÑиÑÑа лÑбое однознаÑное ÑиÑло Ð¾Ñ 0 до 9). ÐÑли какой-нибÑÐ´Ñ Ð¸Ð· ÑÑиÑ
Ñайлов полноÑÑÑÑ ÑовпадаеÑ, ÑеÑÑ ÑÑиÑаеÑÑÑ Ð¿ÑойденнÑм. РпÑоÑивном ÑлÑÑае Ð´Ð»Ñ Ð¾ÑÑÑÑа об оÑибке вÑбиÑаеÑÑÑ Ñайл Ñ Ð½Ð°Ð¸Ð¼ÐµÐ½ÑÑим ÑазлиÑием. (ÐÑли в resultmap еÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного ÑеÑÑа, имÑ_ÑеÑÑа бÑÐ´ÐµÑ Ð·Ð°Ð¼ÐµÐ½ÐµÐ½Ð¾ именем, полÑÑеннÑм из Ñайла resultmap.)
ÐапÑимеÑ, Ð´Ð»Ñ ÑеÑÑа char ÑÑавниÑелÑнÑй Ñайл char.out ÑодеÑÐ¶Ð¸Ñ ÑезÑлÑÑаÑÑ, ожидаемÑе Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÐµÐ¹ C и POSIX, Ñогда как Ñайл char_1.out ÑодеÑÐ¶Ð¸Ñ ÑезÑлÑÑаÑÑ, Ñ
аÑакÑеÑнÑе Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¸Ñ
дÑÑгиÑ
локалей.
ÐÐµÑ Ð°Ð½Ð¸Ð·Ð¼ "лÑÑÑей паÑÑ" бÑл ÑазÑабоÑан, ÑÑÐ¾Ð±Ñ ÑпÑавлÑÑÑÑÑ Ñ ÑезÑлÑÑаÑами, завиÑÑÑими Ð¾Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸, но он Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ Ð² лÑбой ÑиÑÑаÑии, когда Ñложно пÑедÑказаÑÑ ÑезÑлÑÑаÑÑ, иÑÑ Ð¾Ð´Ñ ÑолÑко из Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿Ð»Ð°ÑÑоÑмÑ. ÐгÑаниÑенноÑÑÑ ÑÑого меÑода пÑоÑвлÑеÑÑÑ Ð»Ð¸ÑÑ Ð² Ñом, ÑÑо дÑÐ°Ð¹Ð²ÐµÑ ÑеÑÑа не Ð¼Ð¾Ð¶ÐµÑ ÑказаÑÑ, какой ваÑÐ¸Ð°Ð½Ñ Ð¿Ñавилен Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ окÑÑжениÑ; пÑоÑÑо вÑбиÑаеÑÑÑ Ð²Ð°ÑианÑ, коÑоÑÑй кажеÑÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑим. ÐоÑÑÐ¾Ð¼Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñнее вÑего иÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¼ÐµÑод ÑолÑко Ð´Ð»Ñ Ð²Ð°ÑиаÑивнÑÑ ÑезÑлÑÑаÑов, коÑоÑÑе Ð²Ñ Ñ Ð¾Ñели Ð±Ñ Ð²Ð¸Ð´ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾ надÑжнÑми Ð´Ð»Ñ Ð»Ñбого конÑекÑÑа.