6

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

Leaving test case "testRecursiveSchedule"; testing time: 2196mks

那里显示的单位mks让我感到困惑。我知道 Meters-Kilograms-Seconds 是一个公制测量系统,但 Boost 显然只显示时间测量。在这种情况下,单位不应该是ms如果毫秒或μs(或者也许us)如果微秒?mks是不是通常理解为微秒的缩写?

注意,根据Boost 单元测试框架源码,如果经过的时间恰好能被 1000 整除,则显示的单位为ms ,在这种情况下,它会被 1000 整除后才显示。这与mks意味着微秒的想法是一致的。

但真的吗?或者 Boost 在这里是不是很特别?

4

3 回答 3

7

这是我的猜测:mks 表示 microseconds

Boost.Test的作者Gennadiy Rozental会说俄语,俄语微秒是“микросекунда”,缩写为“мкс”,可以音译为“mks”。有时我会偶然看到“mks”出现在说俄语的人的作品中。

于 2015-05-31T18:21:02.957 回答
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 );

Boost Timer记录在这里,并承诺以下内容:

double elapsed() const                  // return elapsed time in seconds
   { return  double(std::clock() - _start_time) / CLOCKS_PER_SEC; }

如您所见,Boost 测试将微秒传递给观察者的test_unit_finish实现:

    BOOST_TEST_FOREACH( test_observer*, to, m_observers )
        to->test_unit_finish( tc, elapsed );

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

    if( elapsed % 1000 == 0 )
        output << elapsed/1000 << "ms";
    else
        output << elapsed << "mks";

或 XML 的原始微秒:

if( tu.p_type == tut_case )
    ostr << "<TestingTime>" << elapsed << "</TestingTime>";

有效精度取决于系统:

在此处输入图像描述

于 2015-03-10T22:16:33.413 回答
1

缩写“mks”似乎是非标准的。还有很多更好的选择。这些是可以接受的:“微秒”、“微秒”,也许还有“微秒”。

可能没有使用“µs”,因为这可能会混淆仍然无法正确支持 Unicode 的系统,并且还要注意mu有多个代码点:U+00B5 处的 MICRO SIGN,U+03BC 处的希腊小写字母 MU。但通常会使用“us”来代替,因为英语的“u”类似于希腊语的mu “μ”。(在第二个以外的单位上,它看起来不像一个词;例如,与不太像微法拉的微法拉“uF”相比,像“us”、“um”、“ug”这样的词。)

“mks”的使用至少有两个其他混淆领域。一个是有一个公制但不完全是 SI 的单位系统,称为 MKS(在米、千克、秒之后)。另一个是“m”和“k”(有时,“K”)都已经是前缀,所以“mks”看起来像“milli-kilo-second”,也就是一秒。

以下只是猜测……</p>

在 Boost Test 源代码中,唯一提到“mks”的地方是boost/test/impl/compiler_log_formatter.ipp在一个非常奇怪的代码块中,但没有任何注释可以说明选择“mks”的原因。(代码很奇怪,因为它会根据特定值更改单位,而这些值是完全可取整的,因此无法正确指示精度,并且在大约 0.1% 的时间里,任何期望总是看到“mks”的脚本令人不安。)

可能“mk”在语音上表示“my-kroh”(带有硬“k”),因为“mc”可能看起来像“my-sroh”,但“mcs”也看起来像“milli-centi-秒”无论如何。

mks_system(在Boost 1.57.0 中唯一提到的“mks”似乎与libs/units/example/test_system.hpp上面提到的 Boost Unit 和 MKS 单元系统有关。)

于 2015-05-13T18:44:24.820 回答