On Tuesday, 31 March 2015 at 14:27:45 UTC, Johannes Pfau wrote:
Am Tue, 31 Mar 2015 13:31:58 +0000
schrieb "Dicebot" <[email protected]>:
On Tuesday, 31 March 2015 at 09:08:47 UTC, Johannes Pfau wrote:
> Am Mon, 30 Mar 2015 14:52:36 -0700
> schrieb Andrei Alexandrescu <[email protected]>:
>
>> We're having a strong need for named unittests at Facebook
>> for
>> multiple reasons.
> Right now the default implementation works by putting
> pointers to a
> test function into ModuleInfo. We could instead add arrays
> of some
> 'unittest information' struct to ModuleInfo to support names
> etc. But
> we can't make this as extensible and powerful as it should
> be: In order
> to support arbitrary UDAs we'd always need some kind of
> UDA=>runtime
> serialization.
Most powerful solution would be to simply put attributes for
unittest blocks in runtime information for tests (using RTTI
it should be possible to define such variadic structure in
similar manner as D-style variadic function arguments).
Yes, one array of TestAttribute[]
struct TestAttribute
{
TypeInfo ti;
void* value;
}
per unittest and an array of unittests in ModuleInfo would
likely work.
But this works only for unittests and it's still restricted*.
I'd prefer
a more general solution which also works for benchmarks and
similar
usecases.
*For example you can extract file/line
information (useful for IDEs) but you'll have to add explicit
@fileline
UDAs to the tests. With compile-time reflection you can gather
this
information without additional UDAs.
Problem with more generic solution is that it is also note
demanding and potentially more intrusive - right now UDA don't
affect actual types at all. I'd prefer something simple and
practical that can work for texts right now - those are special
enough case to justify dedicated approach (even if generic rtinfo
gets added later)