7#include <gtest/gtest.h>
9#include "arccore/base/String.h"
10#include "arccore/base/TraceInfo.h"
11#include "arccore/base/StringView.h"
13#include "arccore/base/CoreArray.h"
14#include "arccore/base/BasicTranscoder.h"
27 explicit IosFlagsWrapper(std::ostream* o)
31 ~IosFlagsWrapper() { m_stream->flags(m_flags); }
35 std::ostream* m_stream;
36 std::ios_base::fmtflags m_flags;
39void _doConvertTest(
const char* name,
const String& str)
41 std::cout <<
"Name=" << name <<
"\n";
42 std::cout <<
"OrigUtf8 size=" << str.
utf8() <<
"\n";
47 BasicTranscoder::transcodeFromUtf8ToUtf16(utf8_orig_bytes, utf16_bytes);
49 std::cout <<
"OrigBytes=" << utf8_orig_bytes.constView() <<
"\n";
50 std::cout <<
"FinalTranscoderUtf16=" << utf16_bytes.
constView() <<
"\n";
51 std::cout <<
"FinalTranscoderUtf8=" << utf8_final_bytes.
constView() <<
"\n";
52 ASSERT_EQ(utf8_orig_bytes.constView(), utf8_final_bytes.
constView());
57 std::vector<UChar> utf16_vector{ StringUtils::asUtf16BE(str) };
59 std::cout <<
"Utf16 bytes = " << utf16_bytes <<
"\n";
60 String str3(utf16_bytes.smallView());
61 std::cout <<
"ToUtf8 size=" << str3.bytes() <<
"\n";
67#ifndef ARCCORE_OS_WIN32
73 IosFlagsWrapper io_wrapper(&std::cout);
76 std::vector<UChar> utf16_vector{ StringUtils::asUtf16BE(str1) };
77 std::vector<UChar> big_endian_ref_vector{ 0x25b2, 0x25bc, 0x25cf, 0x25a0, 0x25c6 };
78 for (
int x : utf16_vector)
79 std::cout <<
"Utf16: " << std::hex << x <<
"\n";
80 ASSERT_EQ(big_endian_ref_vector, utf16_vector);
82 std::cout <<
"Utf16_size=" << utf16_bytes.smallView() <<
"\n";
84 std::cout <<
"BEFORE_CREATE_STR2\n";
85 String str2(utf16_bytes.smallView());
86 std::cout <<
"str1.utf16=" << str1.utf16() <<
"\n";
87 std::cout <<
"str2.utf16=" << str2.utf16() <<
"\n";
89 bool is_same = (str1 == str2);
91 std::cout <<
"is_same=" << is_same <<
"\n";
92 ASSERT_EQ(str1, str2);
94 std::cout <<
"str1.utf16=" << str1.utf16() <<
"\n";
95 std::cout <<
"str2.utf16=" << str2.utf16() <<
"\n";
98 ASSERT_EQ(str1.utf16().size(), 6);
99 ASSERT_EQ(str2.utf16().size(), 6);
101 ASSERT_EQ(str1.utf8().size(), str2.utf8().size());
102 ASSERT_EQ(str1.utf16().size(), str2.utf16().size());
107 ASSERT_EQ(b.
size(), 0);
109 ASSERT_EQ(u.
size(), 0);
115 ASSERT_EQ(b.
size(), 2);
117 ASSERT_EQ(u.
size(), 3);
122 std::array<Byte, 3> ref_a{ 0xe2, 0x82, 0xac };
125 ASSERT_EQ(b.
size(), 3);
126 ASSERT_EQ(b, ref_a_view);
128 ASSERT_EQ(u.
size(), 4);
130 for (
Integer i = 0; i < 3; ++i) {
131 ASSERT_EQ(u[i], ref_a[i]);
132 ASSERT_EQ(b[i], ref_a[i]);
137 _doConvertTest(
"X2", x2);
138 String x3 =
"\xe2\x82\xa1";
139 _doConvertTest(
"X3", x3);
140 String x4 =
"\xf0\x90\x8c\xbc";
141 _doConvertTest(
"X4", x4);
162 std::cout <<
"S2_8=" << s2 <<
'\n';
166 std::cout <<
"S2_9=" << s2 <<
'\n';
170 std::cout <<
"S2_10=" << s2 <<
'\n';
174 std::cout <<
"S2_11=" << s2 <<
'\n';
178 std::cout <<
"S2_12=" << s2 <<
'\n';
182 std::cout <<
"S2_13=" << s2 <<
'\n';
185 String g =
" \tceci \tcela ";
186 std::cout <<
" G= '" << g <<
"'" <<
'\n';
188 std::cout <<
" G2= '" << g2 <<
"'" <<
'\n';
190 std::cout <<
" G3= '" << g3 <<
"'" <<
'\n';
191 String expected_g3 =
" ceci cela ";
192 ASSERT_EQ(g3,expected_g3);
193 String expected_g2 =
"ceci cela";
194 ASSERT_EQ(g2,expected_g2);
198 std::cout <<
"GNULL2='" << gnull2 <<
"'" <<
'\n';
199 ASSERT_EQ(gnull2,
String());
203 std::cout <<
"GEMPTY2='" << gempty2 <<
"'" <<
'\n';
204 String expected_gempty2 =
"";
205 ASSERT_EQ(gempty2,expected_gempty2);
215 ASSERT_TRUE(kempty.contains(gnull)) <<
"Bad empty contains null";
216 ASSERT_TRUE(kempty.contains(gempty)) <<
"Bad empty contains null";
217 ASSERT_TRUE(k1.contains(gnull)) <<
"Bad null contains null";
218 ASSERT_TRUE(k1.contains(gempty)) <<
"Bad contains empty";
219 ASSERT_TRUE(k1.contains(k2)) <<
"Bad k1 contains k2";
224 String k0 =
":Toto::Titi:::Tata::::Tutu:Tete:";
227 std::cout <<
"ORIGINAL STRING TO STRING = '" << k0 <<
"'" <<
'\n';
228 std::vector<String> k0_list;
229 k0.
split(k0_list,
':');
230 for(
size_t i=0, n=k0_list.size(); i<n; ++i ){
231 std::cout <<
"K i=" << i <<
" v='" << k0_list[i] <<
"' is_null?=" << k0_list[i].null() <<
'\n';
233 ASSERT_EQ(k0_list[0],
String(
":Toto"));
234 ASSERT_EQ(k0_list[1],
String(
":Titi"));
235 ASSERT_EQ(k0_list[2],
String(
":"));
236 ASSERT_EQ(k0_list[3],
String(
"Tata"));
237 ASSERT_EQ(k0_list[4],
String(
":"));
238 ASSERT_EQ(k0_list[5],
String(
":Tutu"));
239 ASSERT_EQ(k0_list[6],
String(
"Tete"));
243TEST(
String, StdStringView)
245 const char* ref1 =
"S1éà";
246 const char* ref2 =
"ù*aXZáé";
248 const char* ref3 =
"S1éàù*aXZáé";
249 std::string std_ref3 { ref3 };
256 std::cout <<
"S1 '" << s1 <<
"'_SIZE=" << s1.
length() <<
'\n';
257 std::cout <<
"S2 '" << s2 <<
"'_SIZE=" << s2.
length() <<
'\n';
258 std::cout <<
"S3 '" << s3 <<
"'_SIZE=" << s3.
length() <<
'\n';
259 std::string_view vempty = sempty.toStdStringView();
260 ASSERT_EQ((
Int64)vempty.size(),0) <<
"vempty.size()==0";
262 ASSERT_EQ((
Int64)vnull.size(),0) <<
"vnull.size()==0";
264 ASSERT_EQ(v1,ref1) <<
"v1==ref1";
266 ASSERT_EQ(v2,ref2) <<
"v2==ref2";
268 ASSERT_EQ(v3,std_ref3) <<
"v3==ref3";
272 ASSERT_EQ(v4,v3) <<
"v4==v3";
276 ASSERT_EQ(v5,v4) <<
"v5==v4";
279 const char* t1 =
"testà1";
280 const char* t2 =
"testé2";
281 std::string st1 = t1;
282 std::string_view st1v = st1;
283 std::string st1_2 = st1 + t2;
289 ASSERT_EQ(s7,st1_2) <<
"s7==st1_2";
291 ASSERT_EQ(s8,st1_2) <<
"s8==st1_2";
293 ASSERT_EQ(s9,st1_2) <<
"s9==st1_2";
295 ASSERT_EQ(s10,st1_2) <<
"s10==st1_2";
#define ASSERT_FALSE(condition)
Vérifie que condition est faux.
#define ASSERT_TRUE(condition)
Vérifie que condition est vrai.
Fonctions utilitaires sur les chaînes de caractères.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
static void transcodeFromUtf16ToUtf8(Span< const UChar > utf16, CoreArray< Byte > &utf8)
Traduit depuis UTF16 vers UTF8.
Vue constante d'un tableau de type T.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Tableau interne pour Arccore.
Span< const DataType > constView() const
Vue constante.
constexpr ARCCORE_HOST_DEVICE SizeType size() const noexcept
Retourne la taille du tableau.
Vue d'un tableau d'éléments de type T.
Chaîne de caractères unicode.
ByteConstArrayView utf8() const
Retourne la conversion de l'instance dans l'encodage UTF-8.
bool contains(const String &s) const
Indique si la chaîne contient s.
Span< const Byte > bytes() const
Retourne la conversion de l'instance dans l'encodage UTF-8.
void split(StringContainer &str_array, char c) const
Découpe la chaîne suivant le caractère c.
static String collapseWhiteSpace(const String &rhs)
Effectue une normalisation des caractères espaces.
bool startsWith(const String &s) const
Indique si la chaîne commence par les caractères de s.
Int64 length() const
Retourne la longueur de la chaîne.
static String replaceWhiteSpace(const String &rhs)
Effectue une normalisation des caractères espaces.
std::string_view toStdStringView() const
Retourne une vue de la STL sur la chaîne actuelle.
String substring(Int64 pos) const
Sous-chaîne commençant à la position pos.
bool endsWith(const String &s) const
Indique si la chaîne se termine par les caractères de s.
Espace de nom de Arccore.
Int32 Integer
Type représentant un entier.