[eside-ghost] Unit testing en C++ en tiempo de compilación? (templates)

Jon Valdés juanval en gmail.com
Jue Ene 29 11:46:07 CET 2009


Yeeeepa stk

2009/1/29 STenyaK <stenyak en gmail.com>:
> 2009/1/29 Alfredo Beaumont <alfredo.beaumont en gmail.com>:
>> Hmmm, o se me escapa algo o realmente no necesitas una testsuite en
>> tiempo de compilación (testsuite en tiempo de compilación ==
>> compilador, ergo necesitarías extendes el compilador).
>
> No he leido muy a fondo los emails, pero si quieres hacer recuentos de
> qué usos de un template petan en compilacion y cuales no (y si
> deberian petar o no), no conozco una libreria dedicada a ello. Si lo
> haces a mano, sugiero:

Efectivamente, eso es mas o menos lo que busco, pero esperaba
encontrar algo ya hecho xD

> -Guardar cada uso de template de tu templateUnitTesting.h con un ifdef
> propio (#ifdef unittest1 blahblah #endif  --- #ifdef unittest2
> blehbleh #endif --- etc).
> -Usar macros para definir los tipos de datos usados en los templates
> (TIPO1, TIPO2, ...).
>
> Despues, con un scriptcillo en bash, puedes lanzar el compilador con
> -Dmacro o -Dmacro=valor. Con eso y una tabla de parametros a pasar y
> resultados esperados podrias montarte una pequeña test suite
> cutrecilla.
>
> Para q te hagas a la idea:
>
> for i in 1 2 3 4 5; do   #cada uno de los unittests de tu .h
>  for tipo1 in int float bool; do
>    for tipo2 in int float bool; do
>      gcc -DTIPO1=$tipo1 -DTIPO2=$tipo2 -Dunittest$i
> templateUnitTesting.h blahblahblah
>      test $? -eq 0 ..... #vamos, q compruebas si ha compilao, si
> debería haberlo hecho, actualizas los contadores de success y error,
> etc...
> done; done; done
> echo "Passed $success out of $(($success+$errors)) tests."
>
> En vez de bucles harcodeados, molaria coger de un csv (o algo) los $?
> esperados para cada combinacion de $i y valores utilizados con -D.
>
> No se si es lo que buscas, o si he malinterpretao completamente los
> emails (seguramente lo segundo xD), pero weno, igual te sirve de
> algo...

Hummm no es mala la de usar ifdefs para esto. Supongo que podría
montar un main auxiliar sólo para esto, y usarlo para comprobar
petadas en compilación de este tipo de cosas.

La putada es que esto ya es un segundo framework de testing, y hay que
mantenerlo por separado. Pero bueno, tampoco hay muchas otras opciones
:-/

Gracias por la idea. Ya comentaré por aqui si consigo hacerlo funcionar :)

Taluegooo


Más información sobre la lista de distribución eside-ghost