
Hi Ben,
2) As a meta-test framework, I like the reporting capability, displaying the results of each of the unittests. Are these results able to be displayed alongside 'regular' BOOST_AUTO_TEST_CASE tests?
The short answer is yes. The meta_check, meta_warn, meta_require assertions can be used at the same places as BOOST_CHECK, BOOST_WARN and BOOST_REQUIRE and behave the same way. They are Boost.Test integration functions for the evaluated predicates. If you use the tree-hierarchy building capability of mpllibs/metatest (without writing Boost.Test test cases in your code) and use the <metatest/main_boost.hpp> header, it will add your compile-time test results to Boost.Test results.
However, I am unclear exactly how it works, given that any BOOST_STATIC_ASSERTS, or BOOST_MPL_ASSERT_* in a library implementation will prevent the code from compiling when incorrect types are given. Perhaps I have missed something obvious.
If your compile-time predicate fails to compile, you get a compilation error. I'm not aware of any solution preventing that, metatest can not do that either. However, for failed predicates it doesn't break the compilation but gives you a human readable/portable report at runtime.
2) Could your framework be modified without too much effort, to catch metatest_exceptions, and then add them to your container class, for reporting? I imagine this framework element would become part of Boost Test. Users of metatest would then be motivated to use Boost Test, but not required.
I don't understand why to throw a runtime exception - the data (was there a failed predicate or not) is static.
3) Also the MPLLIBS_ADD_TEST macro could become part of Boost Test, simplifying the instantiation of test, but again, testing meta-programs could still be achieved using the assertion macros alone.
Test metaprograms can be achieved by using static assertions, but based on my experience displaying a portable/human-readable report of what and why failed makes life easier.
I would like to see more examples, collected in a single, easy to find directory, which include both the input code, and the printed output together, if possible.
I'll implement more examples and upload the outputs somewhere as well shortly. However, you should be able to just download and build the code. Regards, Abel