Test templates thoroughly

To write a test routine for a template class or function,you have to choose one concrete type for every formal typeof the template and run all tests on this instantiationof the template. Consider this buggy template function:

      template      double max (T t1, T t2)       {         return t1>t2 ? t1 : t2;       }

Clearly, the return value should be a T, not a double.Errors like that appear surprisingly frequently, because many templateswere originally designed as non-template classes/functions. If yourtest routine only tests the case that T is double,this error does not reveal itself!

The first conclusion is obvious: A sound test of a template checksseveral instantiations, and in that, every formal type parameter isto be instantiated by more than one type.

The second conclusion is less obvious: Every formal type parametershould also be instantiated at least once by a self-definedtype. Why? Even if you test the above function maxusing various built-in types such as double, int,and char, your test routine might not encounter an error,because all of these types are silently converted to double!

Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: