6

すべてのロギングを有効にして実行すると (例: test --log_level=all)、Boost Unit Test Framework で作成された単体テストは、個々のテスト ケースにかかった時間を次のようなメッセージとともに報告します。

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

そこに表示されているユニットmksは、私を当惑させます。メートル-キログラム-秒はメートル法を計測するためのシステムであることは理解していますが、Boost は明確に時間計測のみを表示しています。この場合の単位は、ミリ秒の場合はms 、マイクロ秒の場合はμs (またはおそらくus ) であるべきではありませんか? mks は一般にマイクロ秒の略語として理解されていますか?

Boost ユニット テスト フレームワーク ソース コードによると、経過時間がたまたま 1000 で割り切れる場合、表示される単位はmsになることに注意してください。この場合、表示される前に 1000 で割られます。これは、 mksがマイクロ秒を意味することを意図しているという考えと一致しています。

しかし、そうですか?それとも、ブーストはここで特異ですか?

4

3 に答える 3

7

ここに私の推測があります: mks はマイクロ秒を意味します

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 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>";

実効精度はシステムによって異なります。

ここに画像の説明を入力

于 2015-03-10T22:16:33.413 に答える
1

略語「mks」は非標準のようです。多くのより良い代替手段があります。これらは許容されます: "microsecond(s)"、"microsec(s)"、そしておそらく "micro-s"。

おそらく、「µs」は使用されません。これは、まだ Unicode を正しくサポートしていないシステムを混乱させる可能性があるためです。また、 muには複数のコードポイントがあることに注意してください: U+00B5 の MICRO SIGN、U+03BC の GREEK SMALL LETTER MU。しかし、多くの場合、英語の「u」はギリシャ語の「 μ 」に似ているため、代わりに「us」が使用されます。(秒以外の単位では、単語のように見えない場合があります。たとえば、単語のように見えないマイクロファラッドの「uF」と比較して、「us」、「um」、「ug」のように見えます。)

「mks」の使用には、他に少なくとも 2 つの混乱する領域があります。1 つは、MKS (メートル、キログラム、秒の後) と呼ばれるメートル法ですが、完全に SI ではない単位系があることです。もう 1 つは、"m" と "k" (場合によっては "K") の両方が既にプレフィックスであるため、"mks" は "ミリキロ秒" のように見えますが、これは単なる 1 秒です。

以下は憶測です…</p>

ブースト テストのソースで、"mks" に言及している唯一の場所はboost/test/impl/compiler_log_formatter.ipp非常に奇妙なコード ブロックですが、"mks" を選択した理由についての手がかりを与えるコメントはありません。(正確に丸め可能な特定の値に基づいて単位を変更するため、コードは奇妙です。そのため、精度を正しく示すことができず、約 0.1% の確率で動揺します。スクリプトは常に "mks" を参照することを期待しています。)

「mc」は「my-sroh」のように見えるかもしれませんが、「mcs」は「milli-centi-秒」とにかく。

(Boost 1.57.0 での「mks」の他の唯一の言及は、私が推測しているmks_systemように、Boost Unit と上記の MKS 単位系に関連しているようです。)libs/units/example/test_system.hpp

于 2015-05-13T18:44:24.820 に答える