4

Lorsqu'il est exécuté avec toute la consignation est activée (par exemple test --log_level=all), un test unitaire créé avec l'unité Boost Test Framework rapportera combien de temps un cas de test individuel a un message comme celui-ci:Quelle est l'unité «mks» rapportée par le Boost Unit Test Framework?

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

L'unité y est affiché, mks, me mystifie. Je comprends que Meters-Kilograms-Seconds est un système de mesure métrique, mais Boost affiche clairement une mesure de temps seulement. L'unité ne devrait-elle pas dans ce cas être ms si millisecondes ou μs (ou peut-être us) si microsecondes? Est-ce que mks est généralement compris comme une abréviation de microsecondes?

note que, selon le Boost unit test framework source code, l'unité affichée sera ms si le temps écoulé se trouve être divisible par 1000, auquel cas il sera divisé par 1000 avant d'être affichées. C'est cohérent avec l'idée que mks est censé impliquer des microsecondes.

Mais le fait-il? Ou Boost est-il idiosyncratique ici?

+1

Dans ma vie donc je n'ai pas rencontré un nombre "uniformément divisible par zéro" – sehe

+0

@sehe Oups, je voulais dire 1000. Correction. – OldPeculier

Répondre

1

Le mécanisme utilisé pour le temps des tests est

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 est documented here et promet les éléments suivants:

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

Comme vous pouvez le voir Tests Boost passe microsecondes à test_unit_finish mises en œuvre de l'observateur:

BOOST_TEST_FOREACH(test_observer*, to, m_observers) 
     to->test_unit_finish(tc, elapsed); 

Et ils en effet p Rint il en général comme:

if(elapsed % 1000 == 0) 
     output << elapsed/1000 << "ms"; 
    else 
     output << elapsed << "mks"; 

ou microsecondes premières pour XML:

if(tu.p_type == tut_case) 
    ostr << "<TestingTime>" << elapsed << "</TestingTime>"; 

La précision efficace dépend du système:

enter image description here

+0

Voilà beaucoup d'informations utiles, et je ne doute pas que les microsecondes soient l'unité signalée par Boost. Ma question est pourquoi il utilise l'abréviation "mks" pour indiquer microsecondes. Est-ce que "mks" signifie généralement des microsecondes dans le monde entier? – OldPeculier

+0

@OldPeculier Si c'était la question _whole_, vous auriez pu faire sans le contexte. Peu importe, avec les informations de ma réponse je peux deviner un potentiel [fond allemand ici] (http://de.wiktionary.org/wiki/Mikrosekunde). Voyant que cela utilise les interfaces obsolètes Boost Timer, il est probablement vieux, peut-être remontant à quand les critiques d'acceptation de la bibliothèque étaient moins strictes? – sehe

1

L'abréviation "MKS" semble être non standard. Il y a beaucoup de meilleures alternatives. Ceux-ci seraient acceptables: "microseconde (s)", "microsec (s)", et peut-être "micro-s".

Peut-être, « pS » n'est pas utilisé, car cela pourrait perturber les systèmes qui ne parviennent toujours pas à supporter Unicode correctement, et notant également qu'il y a plus d'un point de code pour mu: SIGNE MICRO à U + 00B5, GRECQUE LETTRE MU à U + 03BC. Mais souvent, "nous" est utilisé à la place, comme un «u» anglais ressemble à un grec mu «μ». (Sur les unités autres que la seconde, il peut ressembler moins à un mot, par exemple le mot "nous", "um", "ug", par rapport à la microfarade "uF".)

L'utilisation de "mks" a au moins deux autres zones de confusion. La première est qu'il existe un système d'unités métriques mais pas tout à fait SI, appelé MKS (après mètre, kilogramme, seconde).Un autre est que "m" et "k" (ou parfois "K") sont déjà des préfixes, donc "mks" ressemble à "milli-kilo-seconde", ce qui n'est qu'une seconde.

Ce qui suit est la spéculation juste ...

Dans les sources de test Boost, le seul endroit qui mentionne « MKS » est boost/test/impl/compiler_log_formatter.ipp dans un bloc très étrange de code, mais il n'y a pas de commentaires donnant aucun indice quant à la raison pour le choix de "mks". (Le code est impair car il change les unités en fonction des valeurs particulières étant arrondies, manquant ainsi d'indiquer la précision correctement, et en renversant, environ 0,1% du temps, les scripts s'attendant à toujours voir "mks".)

le "mk" devait indiquer "my-kroh" phonétiquement (avec un "k" dur), comme "mc" pourrait ressembler à "my-sroh", mais alors "mcs" ressemblerait aussi à "milli-centi-secondes" " en tous cas.

(La seule autre mention de « MKS », dans Boost 1.57.0, semble être mks_system dans libs/units/example/test_system.hpp que je devine concerne Boost unité et le système MKS d'unités mentionnées ci-dessus.)

+0

Je ne vois pas ce que votre réponse a ajouté. La plupart (sinon la totalité) des faits ont été mentionnés - avec le code exact - dans ma réponse. Je partage votre idée que ce pourrait être un faux signe [montrant l'origine allemande] (http://stackoverflow.com/questions/28970229/what-is-the-mks-unit-reported-by-the-boost-unit-test -framework # comment46287477_28975142). Je suis également d'accord que cela devrait être cohérent. Mais nous n'écrivons pas d'articles d'opinion ici (postez cela sur les listes de diffusion boost :) :) – sehe

+0

Merci @Rhubbarb, c'est utile. Il est difficile de prouver que quelque chose n'est pas standard, sauf en observant qu'il n'est presque jamais utilisé, et cela semble être le cas ici. Vos pensées sur les alternatives sont dans l'esprit de la question et très utile. Merci. – OldPeculier

+0

@OldPeculier Juste pour clarifier: c'est le "mks" qui est utilisé la plupart du temps, avec le "ms" utilisé seulement rarement (comme vous avez fait allusion, et comme montré dans le fragment de code de sehe). En disant cela, cela dépendra vraiment de la granularité du minuteur du système (encore comme décrit et tabulé) ou de la «classe modulo» des valeurs produites et du facteur commun de 1000 et du pas de temps. – Rhubbarb

3

ici est ma conjecture. Gennadiy Rozental, l'auteur de Boost.Test, est de langue russe, et en russe microseconde est "микросекунда", en abrégé "мкс", qui peut être translittéré comme "mks". Parfois, je vois des "mks" apparaître accidentellement dans des œuvres de personnes russophones.