Boost Unit Test Framework报告的"mks"单元是什么?

Old*_*ier 5 time boost unit-testing units-of-measurement boost-unit-test-framework

在启用所有日志记录(例如test --log_level=all)的情况下执行时,使用Boost Unit Test Framework创建的单元测试将报告单个测试用例使用如下消息所花费的时间:

Leaving test case "testRecursiveSchedule"; testing time: 2196mks
Run Code Online (Sandbox Code Playgroud)

在那里展示的单位,mks,使我神秘.据我所知,Meters-Kilograms-Seconds是一个公制测量系统,但Boost显然只显示时间测量.不应该在这种情况下,单位是毫秒,如果毫秒或微秒(或者我们)如果微秒?是MKS通常理解为微秒的缩写?

请注意,根据Boost单元测试框架源代码,如果经过的时间恰好可被1000整除,则显示的单位将为ms,在这种情况下,在显示之前将除以1000.这与mks意味着微秒的观点是一致的.

但是呢?或者Boost在这里是特殊的?

Ily*_*pov 5

这是我的猜测.

Boost.Test的作者Gennadiy Rozental是讲俄语的,俄语中的微秒是"микросекунда",缩写为"мкс",可以音译为"mks".有时我看到"mks"意外地出现在讲俄语的人的作品中.


seh*_*ehe 2

用于测试时间的机制是

    boost::timer tc_timer;
    test_unit_id bkup = m_curr_test_case;
    m_curr_test_case = tc.p_id;
    unit_test_monitor_t::error_level run_result = unit_test_monitor.execute_and_translate( tc );

    unsigned long elapsed = static_cast<unsigned long>( tc_timer.elapsed() * 1e6 );
Run Code Online (Sandbox Code Playgroud)

Boost Timer记录在此处并承诺以下内容:

double elapsed() const                  // return elapsed time in seconds
   { return  double(std::clock() - _start_time) / CLOCKS_PER_SEC; }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,Boost Tests 将微秒传递给观察者的test_unit_finish实现:

    BOOST_TEST_FOREACH( test_observer*, to, m_observers )
        to->test_unit_finish( tc, elapsed );
Run Code Online (Sandbox Code Playgroud)

他们确实通常将其打印为:

    if( elapsed % 1000 == 0 )
        output << elapsed/1000 << "ms";
    else
        output << elapsed << "mks";
Run Code Online (Sandbox Code Playgroud)

或 XML 的原始微秒:

if( tu.p_type == tut_case )
    ostr << "<TestingTime>" << elapsed << "</TestingTime>";
Run Code Online (Sandbox Code Playgroud)

有效精度取决于系统:

在此输入图像描述