iutest v1.15.2 が既にリリースされていますが、以下は v1.15.1 のときの結果になります。ご了承ください。
iutest v1.15.0 のときには、824,858 byte ありましたが、これをさらにコンパクトにして 573,897 byte にまで小さくしました。
こんな感じだったのが、
namespace iutest { class TestInfo : public detail::iu_list_node<TestInfo> { public: TestInfo(detail::iuITestCaseMediator* testcase,const char* name,detail::iuFactoryBase* factory) : m_testname(name) ,m_factory(factory) ,m_testcase(testcase) ,m_should_run(true) ,m_ran(false) ,m_disable(false) ,m_skip(false) ,m_matches_filter(true) { m_mediator.SetPointer(this); if( detail::IsStringForwardMatching(name, "DISABLED_") || (strstr(name, "/DISABLED_") != NULL) ) { m_disable = true; } } public: const char* test_case_name(void) const { return m_testcase->test_case_name(); }
namespace iutest{class TestInfo: public detail::iu_list_node<TestInfo>{public: TestInfo(detail::iuITestCaseMediator* testcase,const char* name,detail::iuFactoryBase* factory): m_testname(name),m_factory(factory),m_testcase(testcase),m_should_run(true),m_ran(false),m_disable(false),m_skip(false),m_matches_filter(true){m_mediator.SetPointer(this);if(detail::IsStringForwardMatching(name,"DISABLED_")||(strstr(name,"/DISABLED_")!=NULL)){m_disable=true;}}public: const char* test_case_name()const{return m_testcase->test_case_name();}const char* name()const{return m_testname.c_str();}bool should_run()const IUTEST_CXX_NOEXCEPT_SPEC{return m_should_run;}bool is_ran()const IUTEST_CXX_NOEXCEPT_SPEC{return m_ran;}bool is_disabled_test()const IUTEST_CXX_NOEXCEPT_SPEC{return m_disable;}bool is_skipped()const IUTEST_CXX_NOEXCEPT_SPEC{return m_skip||m_test_result.Skipped();}bool is_reportable()const IUTEST_CXX_NOEXCEPT_SPEC{return m_matches_filter;}TimeInMillisec elapsed_time()const{return m_test_result.elapsed_time();}const TestResult* result()const IUTEST_CXX_NOEXCEPT_SPEC{return &m_test_result;}const char* value_param()const{return m_value_param.empty()?NULL:m_value_param.c_str();}const char* type_param()const{return m_testcase->type_param();}::std::string testcase_name_with_default_package_name()const{return TestEnv::AddDefaultPackageName(test_case_name());}public: bool HasFatalFailure()const{return m_test_result.HasFatalFailure();}bool HasNonfatalFailure()const{return m_test_result.HasNonfatalFailure();}bool HasFailure()const{return m_test_result.Failed();}bool Passed()const{if(is_skipped()){return false;}return m_test_result.Passed();}public: ::std::string test_full_name()const{::std::string fullname=test_case_name();fullname+=".";fullname+=name();return fullname;}::std::string test_name_with_where()const{::std::string str=m_testname;if(value_param()!=NULL){str+=", where GetParam() = ";str+=m_value_param;}return str;}public: static bool ValidateTestPropertyName(const ::std::string& name){const char* ban[] ={"name","status","time","classname","type_param","value_param"};
iutest.min.hpp は Wandbox や paiza.IO のようなオンラインコンパイラーを使うときに使用をしていますので、サイズが小さくなることにメリットはあるわけです。
paiza.IO
さて、paiza.IO での実行は以前も記事に書いたように Too long 、ソースコードサイズが大きすぎて実行できませんでした。ブログズミ: paiza.IO の API を使ってみた
iutest.min.hpp のサイズが小さくなりましたが、paiza.IO の制限 10,000 byte からはまだまだ大きすぎます。
そこで、paiza.IO 向けに更に削減するようにしてみました。
paiza.IO はコンパイラーが決まっているので、ある程度プリプロセスをかけるようにした感じです。
具体的には __clang__ や __has_include, __has_feature などをプリプロセスして、#if を削減しています。
また、Google Test 互換用のヘッダーファイルを除外するようにしています。
これで、テストコードを含めて 388,831 byte まで減らすことができました。
けど、まだまだ足りませんね。。。
ただ、API では無理ですが、ブラウザからは実行できるくらいに収まったようです。
まだ API からは実行できませんが、ここまででキリにしたいと思います。
それでは。