31.3. Archivos de comparación alternativos #

Dado que algunas de las pruebas producen inherentemente resultados que dependen del entorno, hemos proporcionado formas de especificar archivos de resultados esperados alternativos. Cada prueba de regresión puede tener varios archivos de comparación que muestran los resultados posibles en diferentes plataformas. Existen dos mecanismos independientes para determinar qué archivo de comparación se utiliza para cada prueba.

El primer mecanismo permite seleccionar archivos de comparación para plataformas específicas. Existe un archivo de mapeo, src/test/regress/resultmap, que define qué archivo de comparación utilizar para cada plataforma. Para eliminar falsos fallos de prueba para una plataforma en particular, primero eliges o creas un archivo de resultados alternativo, y luego añades una línea al archivo resultmap.

Cada línea del archivo de mapeo tiene el formato

testname:output:platformpattern=comparisonfilename

El nombre de la prueba es simplemente el nombre del módulo de prueba de regresión en particular. El valor de salida indica qué archivo de salida verificar. Para las pruebas de regresión estándar, esto es siempre out. El valor corresponde a la extensión del archivo de salida. El patrón de plataforma es un patrón al estilo de la herramienta de Unix expr (es decir, una expresión regular con un ancla ^ implícita al inicio). Se compara con el nombre de la plataforma impreso por config.guess. El nombre del archivo de comparación es el nombre base del archivo de comparación de resultados sustituto.

Por ejemplo: algunos sistemas carecen de una función strtof que funcione, por lo que nuestra solución alternativa provoca errores de redondeo en la prueba de regresión float4. Por lo tanto, proporcionamos un archivo de comparación alternativo, float4-misrounded-input.out, que incluye los resultados esperados en estos sistemas. Para silenciar el falso mensaje de fallo en plataformas Cygwin, resultmap includes:

float4:out:.*-.*-cygwin.*=float4-misrounded-input.out

lo cual se activará en cualquier máquina donde la salida de config.guess coincida con .*-.*-cygwin.*. Otras líneas en resultmap seleccionan el archivo de comparación alternativo para otras plataformas donde sea apropiado.

El segundo mecanismo de selección de archivos de comparación alternativos es mucho más automático: simplemente utiliza la mejor coincidencia entre varios archivos de comparación suministrados. El script controlador de pruebas de regresión considera tanto el archivo de comparación estándar para una prueba, testname.out, como los archivos alternativos llamados testname_digit.out (donde el digit es cualquier dígito único 0-9). Si alguno de estos archivos coincide exactamente, se considera que la prueba ha pasado; de lo contrario, el que genera el diff más corto se utiliza para crear el reporte de fallo. (Si resultmap incluye una entrada para la prueba en particular, entonces el testname base es el nombre sustituto indicado en resultmap).

Por ejemplo, para la prueba char, el archivo de comparación char.out contiene resultados que se esperan en las configuraciones regionales C y POSIX, mientras que el archivo char_1.out contiene resultados ordenados como aparecen en muchas otras configuraciones regionales.

El mecanismo de mejor coincidencia fue ideado para hacer frente a resultados dependientes de la configuración regional, pero puede utilizarse en cualquier situación donde los resultados de la prueba no se puedan predecir fácilmente solo a partir del nombre de la plataforma. Una limitación de este mecanismo es que el controlador de pruebas no puede decir qué variante es realmente correcta para el entorno actual; simplemente elegirá la variante que parezca funcionar mejor. Por lo tanto, es más seguro utilizar este mecanismo solo para resultados variantes que estés dispuesto a considerar igualmente válidos en todos los contextos.