Andrei Alexandrescu Wrote:

> Jeremie Pelletier wrote:
> > Lars T. Kyllingstad Wrote:
> > 
> >> I just filed a bug report (3240) that describes a case where IFTI is 
> >> used in Phobos, and where this causes errors when the function is used 
> >> with a different type than the one used in the unittest. (The well known 
> >> "IFTI doesn't work with implicit conversions" problem.) I have a strong 
> >> suspicion that there are many other cases like this waiting to be 
> >> discovered.
> >>
> >> I have encountered such errors in my own code many times, and lately 
> >> I've been trying to get into the habit of writing unittests for all (or 
> >> at least more than one) types. Not full-fledged functionality tests, 
> >> mind you -- something like this is usually sufficient:
> >>
> >>    T foo(T)(T x) if (isFloatingPoint!T) { return x + 1.0; }
> >>
> >>    unittest
> >>    {
> >>        // Test different types
> >>        alias foo!float foo_float;
> >>        alias foo!double foo_double;
> >>        alias foo!real foo_real;
> >>
> >>        // Test functionality
> >>        assert (foo(2.0) == 3.0);
> >>    }
> >>
> >> For the cases where any type is allowed (or a lot of them, at least) 
> >> even this can become a time-consuming task. In these cases it should at 
> >> least be possible to make a representative selection of types to check.
> >>
> >> I just wanted to recommend this as "good practice" to all, but 
> >> especially to the Phobos authors. In my experience this catches a lot of 
> >> bugs which are otherwise hard to spot.
> >>
> >> -Lars
> > 
> > I just go with type tuples:
> > 
> > T foo(T)(T x) if(isFloatingPoint!T) { return x + 1.0; }
> > unittest {
> >     foreach(T; allFloatingPointTuple) assert(foo!T(1.0) == 2.0);
> > }
> 
> Yah, same here. I have unit tests in Phobos that have nested loops 
> testing against so many types, the release build takes forever. Some 
> edge case for the optimizer. I must disable them in release builds.
> 
> 
> Andrei

Don't you disable unittests in release builds?

Reply via email to