iutest v1.15.2 が既にリリースされていますが、以下は v1.15.1 のときの結果になります。ご了承ください。
iutest v1.15.0 のときには、824,858 byte ありましたが、これをさらにコンパクトにして 573,897 byte にまで小さくしました。
こんな感じだったのが、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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(); } |
1 |
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 からは実行できませんが、ここまででキリにしたいと思います。
それでは。