Что такое модуль "mks", сообщаемый платформой модульного тестирования Boost?

При выполнении со всеми включенными журналами (например, test --log_level=all), модульный тест, созданный с помощью Boost Unit Test Framework, сообщит, сколько времени занял отдельный тестовый пример с таким сообщением:

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

Устройство, отображаемое там, МКС, мистифицирует меня. Я понимаю, что Метры-Килограммы-Секунды - это система измерения метрики, но Boost четко отображает только измерение времени. Разве единица в этом случае не должна быть мс, если миллисекунды или мкс (или, возможно, мы), если микросекунды? МКС обычно понимается как сокращение для микросекунд?

Обратите внимание, что в соответствии с исходным кодом инфраструктуры модульного тестирования Boost, отображаемая единица измерения будет мс, если прошедшее время будет делиться равномерно на 1000, и в этом случае оно будет разделено на 1000 перед отображением. Это согласуется с идеей, что mks подразумевает микросекунды.

Но так ли это? Или Boost здесь своеобразный?

3 ответа

Вот мое предположение.

Геннадий Розенталь, автор Boost.Test, говорит по-русски, а на русском языке микросекунда - "микросекунда", сокращенно "мкс", что можно транслитерировать как "мкс". Иногда я вижу "мкс", случайно появляющихся в работах русскоязычных людей.

Механизм, используемый для определения времени испытаний

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

Таймер повышения задокументирован здесь и обещает следующее:

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

Эффективная точность зависит от системы:

Аббревиатура "мкс" кажется нестандартной. Есть много лучших альтернатив. Они будут приемлемы: "микросекунда (ы)", "микросекунда (ы)" и, возможно, "микросекунда".

Возможно, "мкс" не используется, поскольку это может привести к путанице в системах, которые все еще не могут корректно поддерживать Unicode, а также отметить, что для mu имеется более одной кодовой точки: MICRO SIGN в U+00B5, GREEK SMALL LETTER MU в U+03BC. Но часто вместо этого используется "нас", так как английское "u" напоминает греческое mu "µ". (На единицах, отличных от второго, оно может выглядеть не так, как слово; например, слово "мы", "ум", "уг", по сравнению с микрофлорой, не похожей на слово "мк".)

Использование "МКС" имеет как минимум две другие области путаницы. Одна из них заключается в том, что существует метрическая, но не совсем система СИ, называемая МКС (после метра, килограмма, секунды). Другое состоит в том, что и "m", и "k" (или иногда "K") уже являются префиксами, поэтому "mks" выглядит как "мили-кило-секунда", что составляет всего секунду.

То, что следует, является только предположением...

В источниках Boost Test единственное место, где упоминается "mks", это boost/test/impl/compiler_log_formatter.ipp в очень странном блоке кода, но нет комментариев, дающих представление о причине выбора "mks". (Код странный, так как он меняет единицы измерения на основе того, что определенные значения являются точно округляемыми, что не позволяет правильно указывать точность, и приводит к нарушению примерно в 0,1% времени, когда любые сценарии всегда ожидают увидеть "mks".)

Возможно, "mk" должен был означать "my-kroh" фонетически (с жестким "k"), так как "mc" может выглядеть как "my-sroh", но тогда "mcs" также будет выглядеть как "mil-centi- секунды "в любом случае.

(Единственное упоминание "mks" в Boost 1.57.0, похоже, mks_system в libs/units/example/test_system.hpp Я предполагаю, что это относится к Boost Unit и системе блоков MKS, упомянутой выше.)

Другие вопросы по тегам