Что такое модуль "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, упомянутой выше.)