在启用所有日志记录(例如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在这里是特殊的?
答案 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>";
有效准确度取决于系统:
答案 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系统有关。)