什么是" mks"单位测试框架报告的单位?

时间:2015-03-10 17:25:50

标签: unit-testing boost time units-of-measurement boost-unit-test-framework

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

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

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

请注意,根据Boost unit test framework source code,如果经过的时间恰好可被1000整除,则显示的单位将为 ms ,在这种情况下,它将被除以1000显示。这与 mks 意味着微秒的想法一致。

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

3 个答案:

答案 0 :(得分:5)

这是我的猜测。

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

答案 1 :(得分:1)

用于计时测试的机制是

    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是documented here并承诺以下内容:

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

正如您所看到的,Boost Tests将微秒传递给观察者的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>";

有效准确度取决于系统:

enter image description here

答案 2 :(得分:1)

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

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

使用“mks”至少还有两个其他混淆区域。一个是有一个公制但不完全SI系统的单位称为MKS(米,千米,秒)。另一个是“m”和“k”(或有时候,“K”)都已经是前缀,因此“mks”看起来像“毫秒 - 秒”,这只是一秒钟。

以下是猜测......

在Boost测试源中,在一个非常奇怪的代码块中提到“mks”的唯一地方是boost/test/impl/compiler_log_formatter.ipp,但没有任何评论给出关于“mks”选择原因的任何线索。 (代码是奇怪的,因为它根据特定值更改单位是完全可循环的,因此无法正确指示精度,并且在大约0.1%的时间内,任何期望始终看到“mks”的脚本都会令人沮丧。)

可能“mk”用语音表示“my-kroh”(用'k'表示),因为“mc”可能看起来像“my-sroh”,但是“mcs”看起来像“milli” -centi-seconds“无论如何。

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