C++ guys hate static_if?
H. S. Teoh
hsteoh at quickfur.ath.cx
Thu Mar 14 11:30:00 PDT 2013
On Thu, Mar 14, 2013 at 07:00:47PM +0100, Dicebot wrote:
> On Thursday, 14 March 2013 at 17:26:18 UTC, Andrei Alexandrescu
> wrote:
> >Walter has measured coverage of Phobos unittests a couple of times,
> >it's very high. But I agree it would be nice to have it as a target.
> >
> >Andrei
Beware the fallacy that 100% line coverage of a template == 100%
coverage of correctness in *every possible instantiation*.
Just because template X has 100% line coverage for !(int,int) does not
necessarily mean it will work for !(int,string), for example. Or
!(int,const(int)). Or !(const(int),int). Or any number of subtle but
sometimes important combinations.
> Sarcasm aside, this brought me to an idea for utilities for template
> fuzzy testing to check some instantiation combinations. Which is much
> more useful than plain line coverage check in case of templates. I
> have submitted pull request only a few weeks ago that fixed std.traits
> bug where template has failed to instantiate for function types (but
> not other types) despite 100% line coverage by unit test. It could
> have been checked automagically.
>
> Not sure what usage interface may be though.
I've written code like this before, though it definitely can use some
refinement:
struct MySet(ElemType) { ... }
unittest {
void test(T)(T sampleArgs) {
auto set = MySet!T(sampleArgs);
assert( ... /* test for MySet behaviour here */);
}
void testNumArray(T, U...)() {
T[] data = [1,2,3,4,5];
test(data);
testNumArray!(U);
}
void testCharArray(T, U...)() {
T[] data = "abc";
test(data);
testCharArray!(U);
}
testNumArray!(byte, ubyte, int, uint, long, ulong)();
testCharArray!(char, wchar, dchar, const(char),
const(wchar), const(dchar), immutable(char),
immutable(wchar), immutable(dchar))();
// Coverage is still not really complete; we'd need to
// add struct and class, and nested arrays, etc..
}
The fact that D actually lets you do this, is quite awesome.
T
--
He who laughs last thinks slowest.
More information about the Digitalmars-d
mailing list