Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ValueChecker.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* ValueChecker.h (C) 2000-2024 */
9/* */
10/* Vérification de la validité de certaines valeurs. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_VALUECHECKER_H
13#define ARCANE_UTILS_VALUECHECKER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/utils/OStringStream.h"
19#include "arcane/utils/TraceInfo.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
40class ARCANE_UTILS_EXPORT ValueChecker
41{
42 public:
43
45 : m_trace_info(ti)
46 , m_nb_error(0)
47 , m_throw_on_error(true)
48 {}
49
50 public:
51
55 template <typename T1, typename T2, typename X = std::is_convertible<T2, T1>>
56 void areEqual(const T1& value, const T2& expected_value, const String& message)
57 {
58 if (value != expected_value) {
59 _addError(String::format("{0} value={1} expected={2}", message, value, expected_value));
60 }
61 }
62
67 template <typename T1, typename T2,
68 typename ValueType = typename T1::value_type,
69 typename X1 = std::is_convertible<T1, Span<const ValueType>>,
70 typename X2 = std::is_convertible<T1, Span<const ValueType>>>
72 const String& message)
73 {
74 auto values = static_cast<Span<const ValueType>>(x_values);
76
77 Int64 nb_value = values.size();
78 Int64 nb_expected = expected_values.size();
79 if (nb_value != nb_expected) {
80 _addError(String::format("{0} bad array size n={1} expected={2}",
81 message, nb_value, nb_expected));
82 // Ne compare pas les éléments du tableau si les tailles
83 // sont différentes.
84 return;
85 }
86
87 for (Int64 i = 0; i < nb_value; ++i) {
88 const ValueType& v = values[i];
89 const ValueType& e = expected_values[i];
90 if (v != e) {
91 _addError(String::format("{0} index={1} value={2} expected={3}", message, i, v, e));
92 }
93 }
94 }
95
100 template <typename T>
102 const String& message)
103 {
104 Int64 nb_value = values.dim1Size();
105 Int64 nb_expected = expected_values.dim1Size();
106 if (nb_value != nb_expected) {
107 _addError(String::format("{0} bad array size n={1} expected={2}",
108 message, nb_value, nb_expected));
109 // Ne compare pas les éléments du tableau si les tailles
110 // sont différentes.
111 return;
112 }
113
114 for (Int64 i = 0; i < nb_value; ++i)
115 areEqualArray(values[i], expected_values[i], message);
116 }
117
122 template <typename T>
124 const String& message)
125 {
126 return areEqualArray(Span2<const T>(values), Span2<const T>(expected_values), message);
127 }
128
132 void throwIfError();
133
135 void setThrowOnError(bool v)
136 {
137 m_throw_on_error = v;
138 }
139
141 bool throwOnError() const { return m_throw_on_error; }
142
144 Integer nbError() const { return m_nb_error; }
145
146 private:
147
148 TraceInfo m_trace_info;
149 Integer m_nb_error;
150 OStringStream m_ostr;
151 String m_last_error_str;
152 bool m_throw_on_error;
153
154 private:
155
156 void _addError(const String& message);
157};
158
159/*---------------------------------------------------------------------------*/
160/*---------------------------------------------------------------------------*/
161
162} // End namespace Arcane
163
164/*---------------------------------------------------------------------------*/
165/*---------------------------------------------------------------------------*/
166
167#endif
168
Déclarations des types utilisés dans Arcane.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Flot de sortie lié à une String.
Vérification de la validité de certaines valeurs.
void areEqual(const T1 &value, const T2 &expected_value, const String &message)
void areEqualArray(const T1 &x_values, const T2 &x_expected_values, const String &message)
Vérifie que les deux tableaux values et expected_values ont les mêmes valeurs.
void areEqualArray(SmallSpan2< T > values, SmallSpan2< T > expected_values, const String &message)
Vérifie que les deux tableaux values et expected_values ont les mêmes valeurs.
bool throwOnError() const
Indique si on lève une exception en cas d'erreur.
void areEqualArray(Span2< const T > values, Span2< const T > expected_values, const String &message)
Vérifie que les deux tableaux 2D values et expected_values ont les mêmes valeurs.
Integer nbError() const
Nombre d'erreurs.
void setThrowOnError(bool v)
Indique si on lève une exception en cas d'erreur.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-