7#include <gtest/gtest.h>
9#include "arccore/serialize/BasicSerializer.h"
12#include "arccore/base/FatalErrorException.h"
13#include "arccore/base/ValueFiller.h"
15#include "arccore/base/Float128.h"
16#include "arccore/base/Int128.h"
17#include "arccore/common/NumArray.h"
18#include "arccore/collections/Array2.h"
19#include "arccore/serialize/SerializerExtension.h"
33 virtual void checkValid() = 0;
41template <
typename T>
class ValueTraits;
42#define VALUE_TRAITS(type_name,basic_type_name) \
43 template <> class ValueTraits<type_name> \
47 static eBasicDataType dataType() { return eBasicDataType::basic_type_name; } \
48 static void getValue(ISerializer* s, type_name& v) { v = s->get##type_name(); } \
51#define VALUE_TRAITS2(type_name) VALUE_TRAITS(type_name,type_name)
61VALUE_TRAITS(Real,Float64);
70template <
typename DataType>
74 using ValueTraitsType = ValueTraits<DataType>;
79 : m_data_type(ValueTraitsType::dataType())
86 Int64 size = m_array_values.size();
88 case ISerializer::ModeReserve:
89 std::cout <<
"ReserveArray type=" << m_data_type <<
" size=" << m_array_values.size() <<
"\n";
95 std::cout <<
"PutArray type=" << m_data_type <<
" size=" << m_array_values.size() <<
"\n";
98 s->
put(m_array_values[0]);
103 ValueTraitsType::getValue(s, m_unique_value);
107 void checkValid()
override
109 std::cout <<
"ref_size=" << m_array_values.size()
110 <<
" result_size=" << m_result_array_values.size() <<
"\n";
111 ASSERT_EQ(m_array_values, m_result_array_values);
112 ASSERT_EQ(m_array_values[0], m_unique_value);
115 void resizeAndFill(Int32 size)
117 m_array_values.resize(size);
118 ValueFiller::fillRandom(542, m_array_values.span());
125 DataType m_unique_value = {};
132class StringSerializeValue
137 explicit StringSerializeValue(
const String& v)
143 m_ref_string.addRange(v);
151 Int64 size = m_ref_string.size();
153 case ISerializer::ModeReserve:
154 std::cout <<
"ReserveArray type=String size=" << m_ref_string.size() <<
"\n";
160 std::cout <<
"PutArray type=String size=" << m_ref_string.size() <<
"\n";
163 s->
put(m_ref_string[0]);
168 s->
get(m_unique_value);
172 void checkValid()
override
174 std::cout <<
"ref_size=" << m_ref_string.size()
175 <<
" result_size=" << m_result_string.size() <<
"\n";
176 for (
Integer i = 0; i < m_ref_string.size(); ++i) {
178 ASSERT_EQ(m_ref_string[i], m_result_string[i]);
180 if (!m_ref_string.empty()) {
182 ASSERT_EQ(m_ref_string[0], m_unique_value);
196template <
typename DataType>
197class Serialize2DValue
200 using ValueTraitsType = ValueTraits<DataType>;
205 : m_data_type(ValueTraitsType::dataType())
214 case ISerializer::ModeReserve:
215 std::cout <<
"ReserveArray type=" << m_data_type <<
" size1=" << m_array_values.dim1Size() <<
" size2=" << m_array_values.dim2Size() <<
"\n";
219 std::cout <<
"PutArray type=" << m_data_type <<
" size1=" << m_array_values.dim1Size() <<
" size2=" << m_array_values.dim2Size() <<
"\n";
220 se.
putArray(m_array_values.constSpan());
227 void checkValid()
override
229 std::cout <<
"ref_size1=" << m_array_values.dim1Size()
230 <<
" ref_size2=" << m_array_values.dim2Size()
231 <<
" result_size1=" << m_result_array_values.dim1Size()
232 <<
" result_size2=" << m_result_array_values.dim2Size() <<
"\n";
233 for (Int32 i = 0; i < m_array_values.dim1Size(); ++i) {
234 ASSERT_EQ(m_array_values[i], m_result_array_values[i]);
238 void resizeAndFill(Int32 size1, Int32 size2)
240 m_array_values.resize(size1, size2);
241 ValueFiller::fillRandom(542, m_array_values.to1DSpan());
254template <
typename DataType,
typename Extents>
255class MDSerializeValue
258 using ValueTraitsType = ValueTraits<DataType>;
263 : m_data_type(ValueTraitsType::dataType())
272 case ISerializer::ModeReserve:
273 std::cout <<
"ReserveArray type=" << m_data_type <<
" dim=" << Extents::rank() <<
" total_size=" << m_array_values.totalNbElement() <<
"\n";
277 std::cout <<
"PutArray type=" << m_data_type <<
" dim=" << Extents::rank() <<
" total_size=" << m_array_values.totalNbElement() <<
"\n";
278 se.
putArray(m_array_values.constSpan());
285 void checkValid()
override
287 std::cout <<
"ref_size=" << m_array_values.totalNbElement()
288 <<
" result_size=" << m_result_array_values.totalNbElement() <<
"\n";
290 ASSERT_EQ(m_array_values.to1DSpan(), m_result_array_values.to1DSpan());
293 void resizeAndFill(
Arcane::MDIndex<Extents::rank(),
typename Extents::ExtentIndexType> size)
295 m_array_values.resize(size);
296 ValueFiller::fillRandom(542, m_array_values.to1DSpan());
329 template <
typename DataType>
333 sval->resizeAndFill(size);
336 void addString(
const String& v)
346 template <
typename DataType>
347 void add(Int32 size1, Int32 size2)
350 sval->resizeAndFill(size1, size2);
354 template <
typename DataType,
typename Extents>
355 void add(
Arcane::MDIndex<Extents::rank(),
typename Extents::ExtentIndexType> size)
358 sval->resizeAndFill(size);
379 values.add<
Int8>(6357);
381 values.add<Int16>(16353);
382 values.add<Real>(29123);
383 values.add<Int32>(16);
384 values.add<
Byte>(3289);
385 values.add<Int64>(12932);
387 values.add<
Int128>(32422);
389 values.addString(
"Ceci est un test de chaîne de caractères");
390 values.addString(
UniqueArray<String>({
"Ceci",
"est",
"un",
"test",
"de",
"chaîne",
"de",
"caractères" }));
392 values.add<Real>(29, 123);
393 values.add<Int32>(16, 23);
406 serializer->
setMode(ISerializer::ModeReserve);
407 values.doSerialize(serializer);
410 values.doSerialize(serializer);
412 values.doSerialize(serializer);
Fichier contenant les définitions des types de données basiques gérés par Arccore.
Gestion des références à une classe C++.
Classe de base d'une exception.
Interface d'un sérialiseur.
virtual void reserve(eBasicDataType dt, Int64 n)=0
Réserve de la mémoire pour n objets de type dt.
virtual void putArray(Span< const Real > values)=0
Sauve le nombre d'éléments et les values éléments.
virtual void reserveArray(Span< const Real > values)=0
Réserve pour sauver le nombre d'éléments et les values éléments.
virtual void getArray(Array< Real > &values)=0
Redimensionne et remplit values.
@ ModePut
Le sérialiseur attend des reserve().
@ ModeGet
Le sérialiseur attend des get().
virtual void allocateBuffer()=0
Alloue la mémoire du sérialiseur.
virtual void put(Span< const Real > values)=0
Ajoute le tableau values.
virtual eMode mode() const =0
Mode de fonctionnement actuel.
virtual void get(ArrayView< Real > values)=0
Récupère le tableau values.
virtual void setMode(eMode new_mode)=0
Positionne le fonctionnement actuel.
Tableaux multi-dimensionnels pour les types numériques accessibles sur accélérateurs.
InstanceType * get() const
Instance associée ou nullptr si aucune.
Référence à une instance.
Classe qui étend les fonctionnalités de l'ISerializer.
void reserveArray(Span2< const Type > values) const
Réserve pour sauver le nombre d'éléments et les values éléments.
void putArray(Span2< const Type > values) const
Sauve le nombre d'éléments et les values éléments.
void getArray(Array2< Type > &values) const
Redimensionne et remplit values.
Vue d'un tableau d'éléments de type T.
Chaîne de caractères unicode.
Vecteur de données 2D avec sémantique par valeur (style STL).
Vecteur 1D de données avec sémantique par valeur (style STL).
Int32 Integer
Type représentant un entier.
eBasicDataType
Type d'une donnée de base.
@ Unknown
Donnée de type inconnu ou non initialisé
ExtentsV< Int32, DynExtent, DynExtent, DynExtent, DynExtent > MDDim4
Constante pour un tableau dynamique de rang 4.
unsigned char Byte
Type d'un octet.
ExtentsV< Int32, DynExtent, DynExtent > MDDim2
Constante pour un tableau dynamique de rang 2.
ExtentsV< Int32, DynExtent > MDDim1
Constante pour un tableau dynamique de rang 1.
ExtentsV< Int32, DynExtent, DynExtent, DynExtent > MDDim3
Constante pour un tableau dynamique de rang 3.
Espace de nom de Arccore.
Arcane::Float128 Float128
Type représentant un floattan sur 128 bits.
Arcane::BFloat16 BFloat16
Type 'Brain Float16'.
float Float32
Type flottant IEEE-753 simple précision (binary32).
Arcane::Float16 Float16
Type 'Float16' (binary16).
ARCCORE_SERIALIZE_EXPORT Ref< ISerializer > createSerializer()
Créé une instance de ISerializer.
Arcane::Int8 Int8
Type représentant un entier sur 8 bits.
Arcane::Int128 Int128
Type représentant un entier sur 128 bits.