Arcane  v3.14.11.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Exemple n°3

Avec l'exemple 3, on a mixé singleton et normal.
Le service SimpleCsvOutput est en singleton, SimpleCsvComparator ne l'est pas.

Point d'entrée initial

Point d'entrée start-init :

SimpleTableComparatorExample3Module.cc

void SimpleTableComparatorExample3Module::
initModule()
{
srand(1234);
ISimpleTableOutput* table = ServiceBuilder<ISimpleTableOutput>(subDomain()).getSingleton();
table->init("Results_Example3", "example3");
}

Point d'entrée loop

Point d'entrée compute-loop :

SimpleTableComparatorExample3Module.cc

void SimpleTableComparatorExample3Module::
loopModule()
{
ISimpleTableOutput* table = ServiceBuilder<ISimpleTableOutput>(subDomain()).getSingleton();
table->addColumn("Iteration " + String::fromNumber(m_global_iteration()));
Integer nb_fissions = rand()%99;
Integer nb_collisions = rand()%99;
table->addElementInRow("Nb de Fissions", nb_fissions);
table->addElementInRow("Nb de Collisions", nb_collisions);
if (m_global_iteration() == 3)
subDomain()->timeLoopMng()->stopComputeLoop(true);
}

Point d'entrée exit

Voyons le point d'entrée exit :

SimpleTableComparatorExample3Module.cc

void SimpleTableComparatorExample3Module::
endModule()
{
ISimpleTableOutput* table = ServiceBuilder<ISimpleTableOutput>(subDomain()).getSingleton();
options()->stComparator()->init(table);
if(!options()->stComparator()->isReferenceExist()){
info() << "Écriture du fichier de référence";
//table->editElement("Iteration 1", "Nb de Fissions", 9999);
table->editElement("Iteration 1", "Nb de Collisions", 9999);
options()->stComparator()->writeReferenceFile();
}
else {
options()->stComparator()->editRegexRows("^.*Fissions.*$");
if(options()->stComparator()->compareWithReference()){
info() << "Mêmes valeurs !!!";
}
else{
error() << "Valeurs différentes :(";
IArcaneMain::arcaneMain()->setErrorCode(1);
}
}
table->writeFile();
}

Ici, on a ajouté trois choses : deux editElement() et un editRegexRows().
Les editElement() permettent de modifier un élément pour avoir une erreur lors de la comparaison.
Le editRegexRows() permet de choisir les lignes que l'on veut comparer.

Dans ce cas, seule les lignes contenant Fissions dans leur nom sera comparé (donc ici, uniquement la ligne Nb de Fissions).

En effet, on peut choisir quelles sont les lignes et les colonnes que l'on veut comparer. On peut le faire via des expressions régulière mais aussi en spécifiant directement leur nom (via les méthodes ISimpleTableComparator::addRowForComparing() et ISimpleTableComparator::addColumnForComparing()).

Il est aussi possible de spécifier que les lignes/colonnes que l'on donne sont des lignes/colonnes que l'on veut exclure de la comparaison (et non inclure) (méthodes ISimpleTableComparator::isAnArrayExclusiveRows(), ISimpleTableComparator::isAnArrayExclusiveColumns(), ISimpleTableComparator::isARegexExclusiveRows() et ISimpleTableComparator::isARegexExclusiveColumns()).

Enfin, il est possible de spécifier un épsilon pour avoir une marge d'erreur acceptable (ISimpleTableComparator::addEpsilonRow() / ISimpleTableComparator::addEpsilonColumn()).