25 pdfium::span<
const char> empty_span = empty.span();
26 pdfium::span<
const char> empty_span_with_terminator =
27 empty.span_with_terminator();
28 EXPECT_EQ(0u, empty_span.size());
29 ASSERT_EQ(1u, empty_span_with_terminator.size());
30 EXPECT_EQ(
'\0', empty_span_with_terminator[0]);
33 EXPECT_EQ(
'a', abc[0]);
34 EXPECT_EQ(
'b', abc[1]);
35 EXPECT_EQ(
'c', abc[2]);
37 EXPECT_DEATH({ abc[3]; },
"");
40 pdfium::span<
const char> abc_span = abc.span();
41 EXPECT_EQ(3u, abc_span.size());
42 EXPECT_EQ(0, memcmp(abc_span.data(),
"abc", 3));
44 pdfium::span<
const char> abc_span_with_terminator =
45 abc.span_with_terminator();
46 EXPECT_EQ(4u, abc_span_with_terminator.size());
47 EXPECT_EQ(0, memcmp(abc_span_with_terminator.data(),
"abc", 4));
49 pdfium::span<
const uint8_t> abc_raw_span = abc.unsigned_span();
50 EXPECT_EQ(3u, abc_raw_span.size());
51 EXPECT_EQ(0, memcmp(abc_raw_span.data(),
"abc", 3));
53 pdfium::span<
const uint8_t> abc_raw_span_with_terminator =
54 abc.unsigned_span_with_terminator();
55 EXPECT_EQ(4u, abc_raw_span_with_terminator.size());
56 EXPECT_EQ(0, memcmp(abc_raw_span_with_terminator.data(),
"abc", 4));
59 EXPECT_EQ(abc.c_str(), mutable_abc.c_str());
60 EXPECT_EQ(
'a', mutable_abc[0]);
61 EXPECT_EQ(
'b', mutable_abc[1]);
62 EXPECT_EQ(
'c', mutable_abc[2]);
63 EXPECT_EQ(abc.c_str(), mutable_abc.c_str());
64 EXPECT_EQ(
"abc", abc);
66 const char* c_str = abc.c_str();
67 mutable_abc.SetAt(0,
'd');
68 EXPECT_EQ(c_str, abc.c_str());
69 EXPECT_NE(c_str, mutable_abc.c_str());
70 EXPECT_EQ(
"abc", abc);
71 EXPECT_EQ(
"dbc", mutable_abc);
73 mutable_abc.SetAt(1,
'e');
74 EXPECT_EQ(
"abc", abc);
75 EXPECT_EQ(
"dec", mutable_abc);
77 mutable_abc.SetAt(2,
'f');
78 EXPECT_EQ(
"abc", abc);
79 EXPECT_EQ(
"def", mutable_abc);
81 EXPECT_DEATH({ mutable_abc.SetAt(3,
'g'); },
"");
82 EXPECT_EQ(
"abc", abc);
169 const char*
const c_null =
nullptr;
170 const char*
const c_empty =
"";
171 const char*
const c_a =
"a";
172 const char*
const c_abc =
"abc";
173 const char*
const c_def =
"def";
175 EXPECT_FALSE(empty
< empty);
177 EXPECT_FALSE(abc
< abc);
178 EXPECT_FALSE(def
< def);
179 EXPECT_FALSE(c_null
< empty);
180 EXPECT_FALSE(c_empty
< empty);
181 EXPECT_FALSE(c_a
< a);
182 EXPECT_FALSE(c_abc
< abc);
183 EXPECT_FALSE(c_def
< def);
184 EXPECT_FALSE(empty
< c_null);
185 EXPECT_FALSE(empty
< c_empty);
186 EXPECT_FALSE(a
< c_a);
187 EXPECT_FALSE(abc
< c_abc);
188 EXPECT_FALSE(def
< c_def);
189 EXPECT_FALSE(empty < v_empty);
190 EXPECT_FALSE(a < v_a);
191 EXPECT_FALSE(abc < v_abc);
192 EXPECT_FALSE(def < v_def);
194 EXPECT_TRUE(empty
< a);
195 EXPECT_FALSE(a
< empty);
196 EXPECT_TRUE(c_null
< a);
197 EXPECT_TRUE(c_empty
< a);
198 EXPECT_FALSE(c_a
< empty);
199 EXPECT_TRUE(empty
< c_a);
200 EXPECT_FALSE(a
< c_null);
201 EXPECT_FALSE(a
< c_empty);
202 EXPECT_TRUE(empty < v_a);
203 EXPECT_FALSE(a < v_empty);
205 EXPECT_TRUE(empty
< abc);
206 EXPECT_FALSE(abc
< empty);
207 EXPECT_TRUE(c_null
< abc);
208 EXPECT_TRUE(c_empty
< abc);
209 EXPECT_FALSE(c_abc
< empty);
210 EXPECT_TRUE(empty
< c_abc);
211 EXPECT_FALSE(abc
< c_null);
212 EXPECT_FALSE(abc
< c_empty);
213 EXPECT_TRUE(empty < v_abc);
214 EXPECT_FALSE(abc < v_empty);
216 EXPECT_TRUE(empty
< def);
217 EXPECT_FALSE(def
< empty);
218 EXPECT_TRUE(c_null
< def);
219 EXPECT_TRUE(c_empty
< def);
220 EXPECT_FALSE(c_def
< empty);
221 EXPECT_TRUE(empty
< c_def);
222 EXPECT_FALSE(def
< c_null);
223 EXPECT_FALSE(def
< c_empty);
224 EXPECT_TRUE(empty < v_def);
225 EXPECT_FALSE(def < v_empty);
227 EXPECT_TRUE(a
< abc);
228 EXPECT_FALSE(abc
< a);
229 EXPECT_TRUE(c_a
< abc);
230 EXPECT_FALSE(c_abc
< a);
231 EXPECT_TRUE(a
< c_abc);
232 EXPECT_FALSE(abc
< c_a);
233 EXPECT_TRUE(a < v_abc);
234 EXPECT_FALSE(abc < v_a);
236 EXPECT_TRUE(a
< def);
237 EXPECT_FALSE(def
< a);
238 EXPECT_TRUE(c_a
< def);
239 EXPECT_FALSE(c_def
< a);
240 EXPECT_TRUE(a
< c_def);
241 EXPECT_FALSE(def
< c_a);
242 EXPECT_TRUE(a < v_def);
243 EXPECT_FALSE(def < v_a);
245 EXPECT_TRUE(abc
< def);
246 EXPECT_FALSE(def
< abc);
247 EXPECT_TRUE(c_abc
< def);
248 EXPECT_FALSE(c_def
< abc);
249 EXPECT_TRUE(abc
< c_def);
250 EXPECT_FALSE(def
< c_abc);
251 EXPECT_TRUE(abc < v_def);
252 EXPECT_FALSE(def < v_abc);
254 EXPECT_TRUE(v_empty < a);
255 EXPECT_TRUE(v_empty < c_a);
257 std::set<ByteString, std::less<>> str_set;
258 bool inserted = str_set.insert(
ByteString("hello")).second;
259 ASSERT_TRUE(inserted);
261 EXPECT_TRUE(
pdfium::Contains(str_set, ByteStringView(
"hello")));
262 EXPECT_TRUE(
pdfium::Contains(str_set,
"hello"));
264 EXPECT_FALSE(
pdfium::Contains(str_set, ByteStringView(
"goodbye")));
265 EXPECT_FALSE(
pdfium::Contains(str_set,
"goodbye"));
270 EXPECT_TRUE(null_string
== null_string);
273 EXPECT_TRUE(empty_string
== empty_string);
274 EXPECT_TRUE(empty_string
== null_string);
275 EXPECT_TRUE(null_string
== empty_string);
278 deleted_string.Delete(0, 5);
279 EXPECT_TRUE(deleted_string
== deleted_string);
280 EXPECT_TRUE(deleted_string
== null_string);
281 EXPECT_TRUE(deleted_string
== empty_string);
282 EXPECT_TRUE(null_string
== deleted_string);
283 EXPECT_TRUE(empty_string
== deleted_string);
286 EXPECT_TRUE(byte_string
== byte_string);
287 EXPECT_FALSE(byte_string
== null_string);
288 EXPECT_FALSE(byte_string
== empty_string);
289 EXPECT_FALSE(byte_string
== deleted_string);
290 EXPECT_FALSE(null_string
== byte_string);
291 EXPECT_FALSE(empty_string
== byte_string);
292 EXPECT_FALSE(deleted_string
== byte_string);
295 EXPECT_TRUE(byte_string
== byte_string_same1);
296 EXPECT_TRUE(byte_string_same1
== byte_string);
299 EXPECT_TRUE(byte_string
== byte_string_same2);
300 EXPECT_TRUE(byte_string_same2
== byte_string);
305 EXPECT_FALSE(byte_string
== byte_string1);
306 EXPECT_FALSE(byte_string
== byte_string2);
307 EXPECT_FALSE(byte_string
== byte_string3);
308 EXPECT_FALSE(byte_string1
== byte_string);
309 EXPECT_FALSE(byte_string2
== byte_string);
310 EXPECT_FALSE(byte_string3
== byte_string);
314 EXPECT_TRUE(null_string == null_string_c);
315 EXPECT_TRUE(null_string == empty_string_c);
316 EXPECT_TRUE(empty_string == null_string_c);
317 EXPECT_TRUE(empty_string == empty_string_c);
318 EXPECT_TRUE(deleted_string == null_string_c);
319 EXPECT_TRUE(deleted_string == empty_string_c);
320 EXPECT_TRUE(null_string_c == null_string);
321 EXPECT_TRUE(empty_string_c == null_string);
322 EXPECT_TRUE(null_string_c == empty_string);
323 EXPECT_TRUE(empty_string_c == empty_string);
324 EXPECT_TRUE(null_string_c == deleted_string);
325 EXPECT_TRUE(empty_string_c == deleted_string);
328 EXPECT_TRUE(byte_string == byte_string_c_same1);
329 EXPECT_TRUE(byte_string_c_same1 == byte_string);
334 EXPECT_FALSE(byte_string == byte_string_c1);
335 EXPECT_FALSE(byte_string == byte_string_c2);
336 EXPECT_FALSE(byte_string == byte_string_c3);
337 EXPECT_FALSE(byte_string_c1 == byte_string);
338 EXPECT_FALSE(byte_string_c2 == byte_string);
339 EXPECT_FALSE(byte_string_c3 == byte_string);
341 const char*
const c_null_string =
nullptr;
342 const char*
const c_empty_string =
"";
343 EXPECT_TRUE(null_string
== c_null_string);
344 EXPECT_TRUE(null_string
== c_empty_string);
345 EXPECT_TRUE(empty_string
== c_null_string);
346 EXPECT_TRUE(empty_string
== c_empty_string);
347 EXPECT_TRUE(deleted_string
== c_null_string);
348 EXPECT_TRUE(deleted_string
== c_empty_string);
349 EXPECT_TRUE(c_null_string
== null_string);
350 EXPECT_TRUE(c_empty_string
== null_string);
351 EXPECT_TRUE(c_null_string
== empty_string);
352 EXPECT_TRUE(c_empty_string
== empty_string);
353 EXPECT_TRUE(c_null_string
== deleted_string);
354 EXPECT_TRUE(c_empty_string
== deleted_string);
356 const char*
const c_string_same1 =
"hello";
357 EXPECT_TRUE(byte_string
== c_string_same1);
358 EXPECT_TRUE(c_string_same1
== byte_string);
360 const char*
const c_string1 =
"he";
361 const char*
const c_string2 =
"hellp";
362 const char*
const c_string3 =
"hellod";
363 EXPECT_FALSE(byte_string
== c_string1);
364 EXPECT_FALSE(byte_string
== c_string2);
365 EXPECT_FALSE(byte_string
== c_string3);
366 EXPECT_FALSE(c_string1
== byte_string);
367 EXPECT_FALSE(c_string2
== byte_string);
368 EXPECT_FALSE(c_string3
== byte_string);
373 EXPECT_FALSE(null_string
!= null_string);
376 EXPECT_FALSE(empty_string
!= empty_string);
377 EXPECT_FALSE(empty_string
!= null_string);
378 EXPECT_FALSE(null_string
!= empty_string);
381 deleted_string.Delete(0, 5);
382 EXPECT_FALSE(deleted_string
!= deleted_string);
383 EXPECT_FALSE(deleted_string
!= null_string);
384 EXPECT_FALSE(deleted_string
!= empty_string);
385 EXPECT_FALSE(deleted_string
!= deleted_string);
386 EXPECT_FALSE(null_string
!= deleted_string);
387 EXPECT_FALSE(empty_string
!= deleted_string);
388 EXPECT_FALSE(deleted_string
!= deleted_string);
391 EXPECT_FALSE(byte_string
!= byte_string);
392 EXPECT_TRUE(byte_string
!= null_string);
393 EXPECT_TRUE(byte_string
!= empty_string);
394 EXPECT_TRUE(byte_string
!= deleted_string);
395 EXPECT_TRUE(null_string
!= byte_string);
396 EXPECT_TRUE(empty_string
!= byte_string);
397 EXPECT_TRUE(deleted_string
!= byte_string);
400 EXPECT_FALSE(byte_string
!= byte_string_same1);
401 EXPECT_FALSE(byte_string_same1
!= byte_string);
404 EXPECT_FALSE(byte_string
!= byte_string_same2);
405 EXPECT_FALSE(byte_string_same2
!= byte_string);
410 EXPECT_TRUE(byte_string
!= byte_string1);
411 EXPECT_TRUE(byte_string
!= byte_string2);
412 EXPECT_TRUE(byte_string
!= byte_string3);
413 EXPECT_TRUE(byte_string1
!= byte_string);
414 EXPECT_TRUE(byte_string2
!= byte_string);
415 EXPECT_TRUE(byte_string3
!= byte_string);
419 EXPECT_FALSE(null_string != null_string_c);
420 EXPECT_FALSE(null_string != empty_string_c);
421 EXPECT_FALSE(empty_string != null_string_c);
422 EXPECT_FALSE(empty_string != empty_string_c);
423 EXPECT_FALSE(null_string_c != null_string);
424 EXPECT_FALSE(empty_string_c != null_string);
425 EXPECT_FALSE(null_string_c != empty_string);
426 EXPECT_FALSE(empty_string_c != empty_string);
429 EXPECT_FALSE(byte_string != byte_string_c_same1);
430 EXPECT_FALSE(byte_string_c_same1 != byte_string);
435 EXPECT_TRUE(byte_string != byte_string_c1);
436 EXPECT_TRUE(byte_string != byte_string_c2);
437 EXPECT_TRUE(byte_string != byte_string_c3);
438 EXPECT_TRUE(byte_string_c1 != byte_string);
439 EXPECT_TRUE(byte_string_c2 != byte_string);
440 EXPECT_TRUE(byte_string_c3 != byte_string);
442 const char*
const c_null_string =
nullptr;
443 const char*
const c_empty_string =
"";
444 EXPECT_FALSE(null_string
!= c_null_string);
445 EXPECT_FALSE(null_string
!= c_empty_string);
446 EXPECT_FALSE(empty_string
!= c_null_string);
447 EXPECT_FALSE(empty_string
!= c_empty_string);
448 EXPECT_FALSE(deleted_string
!= c_null_string);
449 EXPECT_FALSE(deleted_string
!= c_empty_string);
450 EXPECT_FALSE(c_null_string
!= null_string);
451 EXPECT_FALSE(c_empty_string
!= null_string);
452 EXPECT_FALSE(c_null_string
!= empty_string);
453 EXPECT_FALSE(c_empty_string
!= empty_string);
454 EXPECT_FALSE(c_null_string
!= deleted_string);
455 EXPECT_FALSE(c_empty_string
!= deleted_string);
457 const char*
const c_string_same1 =
"hello";
458 EXPECT_FALSE(byte_string
!= c_string_same1);
459 EXPECT_FALSE(c_string_same1
!= byte_string);
461 const char*
const c_string1 =
"he";
462 const char*
const c_string2 =
"hellp";
463 const char*
const c_string3 =
"hellod";
464 EXPECT_TRUE(byte_string
!= c_string1);
465 EXPECT_TRUE(byte_string
!= c_string2);
466 EXPECT_TRUE(byte_string
!= c_string3);
467 EXPECT_TRUE(c_string1
!= byte_string);
468 EXPECT_TRUE(c_string2
!= byte_string);
469 EXPECT_TRUE(c_string3
!= byte_string);
537 const char* old_buffer = freed.c_str();
541 EXPECT_EQ(
"FREED", freed);
542 EXPECT_EQ(old_buffer, freed.c_str());
546 EXPECT_EQ(
"FRD", freed);
547 EXPECT_EQ(old_buffer, freed.c_str());
552 EXPECT_EQ(
"FRD", freed);
553 EXPECT_EQ(old_buffer, freed.c_str());
554 EXPECT_EQ(old_buffer, shared.c_str());
558 EXPECT_EQ(
"FR", freed);
559 EXPECT_NE(old_buffer, freed.c_str());
560 EXPECT_EQ(
"FRD", shared);
561 EXPECT_EQ(old_buffer, shared.c_str());
603 EXPECT_EQ(5u, fred.Insert(0,
'S'));
604 EXPECT_EQ(
"SFRED", fred);
605 EXPECT_EQ(6u, fred.Insert(1,
'T'));
606 EXPECT_EQ(
"STFRED", fred);
607 EXPECT_EQ(7u, fred.Insert(4,
'U'));
608 EXPECT_EQ(
"STFRUED", fred);
609 EXPECT_EQ(8u, fred.Insert(7,
'V'));
610 EXPECT_EQ(
"STFRUEDV", fred);
611 EXPECT_EQ(8u, fred.Insert(12,
'P'));
612 EXPECT_EQ(
"STFRUEDV", fred);
615 EXPECT_EQ(1u, empty.Insert(0,
'X'));
616 EXPECT_EQ(
"X", empty);
620 EXPECT_EQ(0u, empty.Insert(5,
'X'));
621 EXPECT_NE(
"X", empty);
628 EXPECT_EQ(1u, empty.InsertAtFront(
'D'));
629 EXPECT_EQ(
"D", empty);
630 EXPECT_EQ(2u, empty.InsertAtFront(
'E'));
631 EXPECT_EQ(
"ED", empty);
632 EXPECT_EQ(3u, empty.InsertAtFront(
'R'));
633 EXPECT_EQ(
"RED", empty);
634 EXPECT_EQ(4u, empty.InsertAtFront(
'F'));
635 EXPECT_EQ(
"FRED", empty);
639 EXPECT_EQ(1u, empty.InsertAtBack(
'F'));
640 EXPECT_EQ(
"F", empty);
641 EXPECT_EQ(2u, empty.InsertAtBack(
'R'));
642 EXPECT_EQ(
"FR", empty);
643 EXPECT_EQ(3u, empty.InsertAtBack(
'E'));
644 EXPECT_EQ(
"FRE", empty);
645 EXPECT_EQ(4u, empty.InsertAtBack(
'D'));
646 EXPECT_EQ(
"FRED", empty);
650 EXPECT_EQ(1u, empty.InsertAtBack(
'E'));
651 EXPECT_EQ(
"E", empty);
652 EXPECT_EQ(2u, empty.InsertAtFront(
'R'));
653 EXPECT_EQ(
"RE", empty);
654 EXPECT_EQ(3u, empty.InsertAtBack(
'D'));
655 EXPECT_EQ(
"RED", empty);
656 EXPECT_EQ(4u, empty.InsertAtFront(
'F'));
657 EXPECT_EQ(
"FRED", empty);
663 EXPECT_EQ(4u, fred.Delete(0, 0));
664 EXPECT_EQ(
"FRED", fred);
665 EXPECT_EQ(2u, fred.Delete(0, 2));
666 EXPECT_EQ(
"ED", fred);
667 EXPECT_EQ(1u, fred.Delete(1));
668 EXPECT_EQ(
"E", fred);
669 EXPECT_EQ(0u, fred.Delete(0));
671 EXPECT_EQ(0u, fred.Delete(0));
675 EXPECT_EQ(0u, empty.Delete(0));
676 EXPECT_EQ(
"", empty);
677 EXPECT_EQ(0u, empty.Delete(1));
678 EXPECT_EQ(
"", empty);
749 EXPECT_FALSE(null_string.Find(
'a').has_value());
750 EXPECT_FALSE(null_string.Find(
'\0').has_value());
753 EXPECT_FALSE(empty_string.Find(
'a').has_value());
754 EXPECT_FALSE(empty_string.Find(
'\0').has_value());
757 std::optional<size_t> result = single_string.Find(
'a');
758 ASSERT_TRUE(result.has_value());
759 EXPECT_EQ(0u, result.value());
760 EXPECT_FALSE(single_string.Find(
'b').has_value());
761 EXPECT_FALSE(single_string.Find(
'\0').has_value());
764 result = longer_string.Find(
'a');
765 ASSERT_TRUE(result.has_value());
766 EXPECT_EQ(0u, result.value());
767 result = longer_string.Find(
'c');
768 ASSERT_TRUE(result.has_value());
769 EXPECT_EQ(2u, result.value());
770 result = longer_string.Find(
'c', 3);
771 ASSERT_TRUE(result.has_value());
772 EXPECT_EQ(3u, result.value());
773 EXPECT_FALSE(longer_string.Find(
'd').has_value());
774 EXPECT_FALSE(longer_string.Find(
'\0').has_value());
776 result = longer_string.Find(
"ab");
777 ASSERT_TRUE(result.has_value());
778 EXPECT_EQ(0u, result.value());
779 result = longer_string.Find(
"ccc");
780 ASSERT_TRUE(result.has_value());
781 EXPECT_EQ(2u, result.value());
782 result = longer_string.Find(
"cc", 3);
783 ASSERT_TRUE(result.has_value());
784 EXPECT_EQ(3u, result.value());
785 EXPECT_FALSE(longer_string.Find(
"d").has_value());
790 result = hibyte_string.Find(
'\x8c');
791 ASSERT_TRUE(result.has_value());
792 EXPECT_EQ(2u, result.value());
797 EXPECT_FALSE(null_string.ReverseFind(
'a').has_value());
798 EXPECT_FALSE(null_string.ReverseFind(
'\0').has_value());
801 EXPECT_FALSE(empty_string.ReverseFind(
'a').has_value());
802 EXPECT_FALSE(empty_string.ReverseFind(
'\0').has_value());
805 std::optional<size_t> result = single_string.ReverseFind(
'a');
806 ASSERT_TRUE(result.has_value());
807 EXPECT_EQ(0u, result.value());
808 EXPECT_FALSE(single_string.ReverseFind(
'b').has_value());
809 EXPECT_FALSE(single_string.ReverseFind(
'\0').has_value());
812 result = longer_string.ReverseFind(
'a');
813 ASSERT_TRUE(result.has_value());
814 EXPECT_EQ(0u, result.value());
815 result = longer_string.ReverseFind(
'c');
816 ASSERT_TRUE(result.has_value());
817 EXPECT_EQ(4u, result.value());
818 EXPECT_FALSE(longer_string.ReverseFind(
'\0').has_value());
823 result = hibyte_string.ReverseFind(
'\x8c');
824 ASSERT_TRUE(result.has_value());
825 EXPECT_EQ(2u, result.value());
831 EXPECT_EQ(
"f-re.42d", fred);
833 EXPECT_EQ(
"F-RE.42D", fred);
837 EXPECT_EQ(
"", empty);
839 EXPECT_EQ(
"", empty);
842 empty_with_buffer.Delete(0);
844 ByteString additional_empty_with_buffer_ref = empty_with_buffer;
846 EXPECT_EQ(
"", additional_empty_with_buffer_ref);
848 additional_empty_with_buffer_ref
= empty_with_buffer;
850 EXPECT_EQ(
"", additional_empty_with_buffer_ref);
919 const char* old_buffer = fred.c_str();
921 EXPECT_EQ(
"FRED ", fred);
922 EXPECT_EQ(old_buffer, fred.c_str());
928 const char* old_buffer = fred.c_str();
930 EXPECT_EQ(
"FRED ", fred);
931 EXPECT_EQ(
" FRED ", other_fred);
932 EXPECT_NE(old_buffer, fred.c_str());
938 const char* old_buffer = fred.c_str();
940 EXPECT_EQ(
"FRED", fred);
941 EXPECT_EQ(
"FRED", other_fred);
942 EXPECT_EQ(old_buffer, fred.c_str());
978 const char* old_buffer = fred.c_str();
980 EXPECT_EQ(
" FRED", fred);
981 EXPECT_EQ(old_buffer, fred.c_str());
987 const char* old_buffer = fred.c_str();
989 EXPECT_EQ(
" FRED", fred);
990 EXPECT_EQ(
" FRED ", other_fred);
991 EXPECT_NE(old_buffer, fred.c_str());
997 const char* old_buffer = fred.c_str();
999 EXPECT_EQ(
"FRED", fred);
1000 EXPECT_EQ(
"FRED", other_fred);
1001 EXPECT_EQ(old_buffer, fred.c_str());
1009 const char* old_buffer = str.c_str();
1011 EXPECT_EQ(old_buffer, str.c_str());
1012 str
+= "Blah Blah Blah Blah Blah Blah";
1013 EXPECT_NE(old_buffer, str.c_str());
1018 const char* old_buffer = str.c_str();
1020 EXPECT_EQ(old_buffer, str.c_str());
1021 str
+= "Blah Blah Blah Blah Blah Blah";
1022 EXPECT_NE(old_buffer, str.c_str());
1051 const char* old_buffer = str.c_str();
1052 str.ReleaseBuffer(4);
1053 EXPECT_EQ(old_buffer, str.c_str());
1054 EXPECT_EQ(
"clam", str);
1060 const char* old_buffer = str.c_str();
1061 str.ReleaseBuffer(4);
1062 EXPECT_EQ(old_buffer, str.c_str());
1063 EXPECT_EQ(
"clam", str);
1069 const char* old_buffer = str.c_str();
1070 str.ReleaseBuffer(4);
1071 EXPECT_NE(old_buffer, str.c_str());
1072 EXPECT_EQ(
"clam", str);
1078 const char* old_buffer = str.c_str();
1079 str.ReleaseBuffer(4);
1080 EXPECT_NE(old_buffer, str.c_str());
1081 EXPECT_EQ(
"clam", str);
1095 auto iter = one_str.rbegin();
1096 EXPECT_FALSE(iter == one_str.rend());
1097 EXPECT_TRUE(iter != one_str.rend());
1098 EXPECT_TRUE(iter < one_str.rend());
1102 EXPECT_TRUE(iter == one_str.rend());
1103 EXPECT_FALSE(iter != one_str.rend());
1104 EXPECT_FALSE(iter < one_str.rend());
1109 auto iter = multi_str.rbegin();
1110 EXPECT_NE(iter, multi_str.rend());
1111 EXPECT_EQ(4, multi_str.rend() - iter);
1112 EXPECT_EQ(0, iter - multi_str.rbegin());
1116 EXPECT_EQ(
'c', *iter);
1117 EXPECT_NE(iter, multi_str.rend());
1118 EXPECT_EQ(3, multi_str.rend() - iter);
1119 EXPECT_EQ(1, iter - multi_str.rbegin());
1123 EXPECT_EQ(
'b', *iter);
1124 EXPECT_NE(iter, multi_str.rend());
1125 EXPECT_EQ(2, multi_str.rend() - iter);
1126 EXPECT_EQ(2, iter - multi_str.rbegin());
1130 EXPECT_EQ(
'a', *iter);
1131 EXPECT_NE(iter, multi_str.rend());
1132 EXPECT_EQ(1, multi_str.rend() - iter);
1133 EXPECT_EQ(3, iter - multi_str.rbegin());
1137 EXPECT_EQ(iter, multi_str.rend());
1138 EXPECT_EQ(0, multi_str.rend() - iter);
1139 EXPECT_EQ(4, iter - multi_str.rbegin());
1143 EXPECT_EQ(
'a', *iter);
1144 EXPECT_NE(iter, multi_str.rend());
1145 EXPECT_EQ(1, multi_str.rend() - iter);
1146 EXPECT_EQ(3, iter - multi_str.rbegin());
1150 EXPECT_EQ(
'b', *iter);
1151 EXPECT_NE(iter, multi_str.rend());
1152 EXPECT_EQ(2, multi_str.rend() - iter);
1153 EXPECT_EQ(2, iter - multi_str.rbegin());
1157 EXPECT_EQ(
'c', *iter);
1158 EXPECT_NE(iter, multi_str.rend());
1159 EXPECT_EQ(3, multi_str.rend() - iter);
1160 EXPECT_EQ(1, iter - multi_str.rbegin());
1164 EXPECT_EQ(
'd', *iter);
1165 EXPECT_EQ(iter, multi_str.rbegin());
1166 EXPECT_EQ(4, multi_str.rend() - iter);
1167 EXPECT_EQ(0, iter - multi_str.rbegin());
1172 EXPECT_FALSE(null_string.unterminated_unsigned_str());
1173 EXPECT_EQ(0u, null_string.GetLength());
1174 EXPECT_TRUE(null_string.IsEmpty());
1177 EXPECT_EQ(null_string, another_null_string);
1180 EXPECT_FALSE(copied_null_string.unterminated_unsigned_str());
1181 EXPECT_EQ(0u, copied_null_string.GetLength());
1182 EXPECT_TRUE(copied_null_string.IsEmpty());
1183 EXPECT_EQ(null_string, copied_null_string);
1185 auto span_null_string = ByteStringView(pdfium::span<
const uint8_t>());
1186 EXPECT_FALSE(span_null_string.unterminated_unsigned_str());
1187 EXPECT_EQ(0u, span_null_string.GetLength());
1188 EXPECT_TRUE(span_null_string.IsEmpty());
1189 EXPECT_EQ(null_string, span_null_string);
1192 EXPECT_TRUE(empty_string.unterminated_unsigned_str());
1193 EXPECT_EQ(0u, empty_string.GetLength());
1194 EXPECT_TRUE(empty_string.IsEmpty());
1195 EXPECT_EQ(null_string, empty_string);
1198 assigned_null_string = null_string;
1199 EXPECT_FALSE(assigned_null_string.unterminated_unsigned_str());
1200 EXPECT_EQ(0u, assigned_null_string.GetLength());
1201 EXPECT_TRUE(assigned_null_string.IsEmpty());
1202 EXPECT_EQ(null_string, assigned_null_string);
1205 assigned_nullptr_string =
nullptr;
1206 EXPECT_FALSE(assigned_nullptr_string.unterminated_unsigned_str());
1207 EXPECT_EQ(0u, assigned_nullptr_string.GetLength());
1208 EXPECT_TRUE(assigned_nullptr_string.IsEmpty());
1209 EXPECT_EQ(null_string, assigned_nullptr_string);
1211 ByteStringView assigned_span_null_string(
"initially not null span");
1212 assigned_span_null_string = ByteStringView(pdfium::span<
const uint8_t>());
1213 EXPECT_FALSE(assigned_span_null_string.unterminated_unsigned_str());
1214 EXPECT_EQ(0u, assigned_span_null_string.GetLength());
1215 EXPECT_TRUE(assigned_span_null_string.IsEmpty());
1216 EXPECT_EQ(null_string, assigned_span_null_string);
1219 EXPECT_NE(null_string, non_null_string);
1226 auto alternate_string3 =
UNSAFE_BUFFERS(ByteStringView(
"abcdef", 3));
1227 const char abcd[] =
"abcd";
1229 pdfium::as_bytes(pdfium::make_span(abcd).first(4u)));
1231 auto embedded_nul_string7 =
UNSAFE_BUFFERS(ByteStringView(
"abc\0def", 7));
1233 auto illegal_string7 =
UNSAFE_BUFFERS(ByteStringView(
"abcdef", 7));
1235 EXPECT_EQ(3u, string3.GetLength());
1236 EXPECT_EQ(6u, string6.GetLength());
1237 EXPECT_EQ(3u, alternate_string3.GetLength());
1238 EXPECT_EQ(4u, span_string4.GetLength());
1239 EXPECT_EQ(7u, embedded_nul_string7.GetLength());
1240 EXPECT_EQ(7u, illegal_string7.GetLength());
1242 EXPECT_NE(string3, string6);
1243 EXPECT_EQ(string3, alternate_string3);
1244 EXPECT_NE(string3, embedded_nul_string7);
1245 EXPECT_NE(string3, illegal_string7);
1246 EXPECT_NE(string6, alternate_string3);
1247 EXPECT_NE(string6, embedded_nul_string7);
1248 EXPECT_NE(string6, illegal_string7);
1249 EXPECT_NE(alternate_string3, embedded_nul_string7);
1250 EXPECT_NE(alternate_string3, illegal_string7);
1251 EXPECT_NE(embedded_nul_string7, illegal_string7);
1255 ByteStringView copied_embedded_nul_string7(embedded_nul_string7);
1257 EXPECT_EQ(string3, copied_string3);
1258 EXPECT_EQ(alternate_string3, copied_alternate_string3);
1259 EXPECT_EQ(embedded_nul_string7, copied_embedded_nul_string7);
1262 ByteStringView assigned_alternate_string3(
"initally something else");
1264 ByteStringView assigned_embedded_nul_string7(
"initially something else");
1266 assigned_string3 = string3;
1267 assigned_alternate_string3 = alternate_string3;
1268 assigned_ptr_string3 =
"abc";
1269 assigned_embedded_nul_string7 = embedded_nul_string7;
1270 EXPECT_EQ(string3, assigned_string3);
1271 EXPECT_EQ(alternate_string3, assigned_alternate_string3);
1272 EXPECT_EQ(alternate_string3, assigned_ptr_string3);
1273 EXPECT_EQ(embedded_nul_string7, assigned_embedded_nul_string7);
1287 EXPECT_EQ(1u, nul_string_from_char.GetLength());
1288 EXPECT_NE(null_string, nul_string_from_char);
1290 EXPECT_EQ(1u, lower_a_string_from_char.GetLength());
1291 EXPECT_EQ(lower_a_string, lower_a_string_from_char);
1292 EXPECT_NE(nul_string_from_char, lower_a_string_from_char);
1295 EXPECT_NE(longer_string, lower_a_string_from_char);
1299 std::vector<uint8_t> null_vec;
1301 EXPECT_EQ(0u, null_string.GetLength());
1303 std::vector<uint8_t> lower_a_vec(10,
static_cast<uint8_t>(
'a'));
1305 EXPECT_EQ(
static_cast<size_t>(10), lower_a_string.GetLength());
1306 EXPECT_EQ(
"aaaaaaaaaa", lower_a_string);
1308 std::vector<uint8_t> cleared_vec;
1309 cleared_vec.push_back(42);
1310 cleared_vec.pop_back();
1312 EXPECT_EQ(0u, cleared_string.GetLength());
1313 EXPECT_FALSE(cleared_string.unterminated_unsigned_str());
1332 EXPECT_FALSE(null_string.Find(
'a').has_value());
1333 EXPECT_FALSE(null_string.Find(
'\0').has_value());
1336 EXPECT_FALSE(empty_string.Find(
'a').has_value());
1337 EXPECT_FALSE(empty_string.Find(
'\0').has_value());
1340 std::optional<size_t> result = single_string.Find(
'a');
1341 ASSERT_TRUE(result.has_value());
1342 EXPECT_EQ(0u, result.value());
1343 EXPECT_FALSE(single_string.Find(
'b').has_value());
1344 EXPECT_FALSE(single_string.Find(
'\0').has_value());
1347 result = longer_string.Find(
'a');
1348 ASSERT_TRUE(result.has_value());
1349 EXPECT_EQ(0u, result.value());
1350 result = longer_string.Find(
'c');
1351 ASSERT_TRUE(result.has_value());
1352 EXPECT_EQ(2u, result.value());
1353 EXPECT_FALSE(longer_string.Find(
'd').has_value());
1354 EXPECT_FALSE(longer_string.Find(
'\0').has_value());
1359 result = hibyte_string.Find(
'\x8c');
1360 ASSERT_TRUE(result.has_value());
1361 EXPECT_EQ(2u, result.value());
1366 EXPECT_EQ(null_string, null_string.Substr(0));
1367 EXPECT_EQ(null_string, null_string.Substr(1));
1370 EXPECT_EQ(
"", empty_string.Substr(0));
1371 EXPECT_EQ(
"", empty_string.Substr(1));
1374 EXPECT_EQ(single_character, single_character.Substr(0));
1375 EXPECT_EQ(
"", single_character.Substr(1));
1378 EXPECT_EQ(longer_string, longer_string.Substr(0));
1379 EXPECT_EQ(
"", longer_string.Substr(187));
1382 EXPECT_EQ(trailing_substring, longer_string.Substr(4));
1387 EXPECT_EQ(null_string, null_string.Substr(0, 1));
1388 EXPECT_EQ(null_string, null_string.Substr(1, 1));
1391 EXPECT_EQ(
"", empty_string.Substr(0, 1));
1392 EXPECT_EQ(
"", empty_string.Substr(1, 1));
1395 EXPECT_EQ(
"", single_character.Substr(0, 0));
1396 EXPECT_EQ(single_character, single_character.Substr(0, 1));
1397 EXPECT_EQ(
"", single_character.Substr(1, 0));
1398 EXPECT_EQ(
"", single_character.Substr(1, 1));
1401 EXPECT_EQ(longer_string, longer_string.Substr(0, 6));
1402 EXPECT_EQ(
"", longer_string.Substr(0, 187));
1405 EXPECT_EQ(leading_substring, longer_string.Substr(0, 2));
1408 EXPECT_EQ(middle_substring, longer_string.Substr(1, 4));
1411 EXPECT_EQ(trailing_substring, longer_string.Substr(4, 2));
1412 EXPECT_EQ(
"", longer_string.Substr(4, 3));
1439 const char*
const c_null =
nullptr;
1440 const char*
const c_empty =
"";
1441 const char*
const c_a =
"a";
1442 const char*
const c_abc =
"abc";
1443 const char*
const c_def =
"def";
1445 EXPECT_FALSE(empty < empty);
1446 EXPECT_FALSE(a < a);
1447 EXPECT_FALSE(abc < abc);
1448 EXPECT_FALSE(def < def);
1449 EXPECT_FALSE(c_null < empty);
1450 EXPECT_FALSE(c_empty < empty);
1451 EXPECT_FALSE(c_a < a);
1452 EXPECT_FALSE(c_abc < abc);
1453 EXPECT_FALSE(c_def < def);
1454 EXPECT_FALSE(empty < c_null);
1455 EXPECT_FALSE(empty < c_empty);
1456 EXPECT_FALSE(a < c_a);
1457 EXPECT_FALSE(abc < c_abc);
1458 EXPECT_FALSE(def < c_def);
1460 EXPECT_TRUE(empty < a);
1461 EXPECT_FALSE(a < empty);
1462 EXPECT_TRUE(empty < c_a);
1463 EXPECT_FALSE(a < c_null);
1464 EXPECT_FALSE(a < c_empty);
1466 EXPECT_TRUE(empty < abc);
1467 EXPECT_FALSE(abc < empty);
1468 EXPECT_TRUE(empty < c_abc);
1469 EXPECT_FALSE(abc < c_null);
1470 EXPECT_FALSE(abc < c_empty);
1472 EXPECT_TRUE(empty < def);
1473 EXPECT_FALSE(def < empty);
1474 EXPECT_TRUE(empty < c_def);
1475 EXPECT_FALSE(def < c_null);
1476 EXPECT_FALSE(def < c_empty);
1478 EXPECT_TRUE(a < abc);
1479 EXPECT_FALSE(abc < a);
1480 EXPECT_TRUE(a < c_abc);
1481 EXPECT_FALSE(abc < c_a);
1483 EXPECT_TRUE(a < def);
1484 EXPECT_FALSE(def < a);
1485 EXPECT_TRUE(a < c_def);
1486 EXPECT_FALSE(def < c_a);
1488 EXPECT_TRUE(abc < def);
1489 EXPECT_FALSE(def < abc);
1490 EXPECT_TRUE(abc < c_def);
1491 EXPECT_FALSE(def < c_abc);
1496 EXPECT_TRUE(byte_string_c == byte_string_c);
1499 EXPECT_TRUE(byte_string_c == byte_string_c_same1);
1500 EXPECT_TRUE(byte_string_c_same1 == byte_string_c);
1503 EXPECT_TRUE(byte_string_c == byte_string_c_same2);
1504 EXPECT_TRUE(byte_string_c_same2 == byte_string_c);
1509 EXPECT_FALSE(byte_string_c == byte_string_c1);
1510 EXPECT_FALSE(byte_string_c == byte_string_c2);
1511 EXPECT_FALSE(byte_string_c == byte_string_c3);
1512 EXPECT_FALSE(byte_string_c1 == byte_string_c);
1513 EXPECT_FALSE(byte_string_c2 == byte_string_c);
1514 EXPECT_FALSE(byte_string_c3 == byte_string_c);
1517 EXPECT_TRUE(byte_string_c == byte_string_same1);
1518 EXPECT_TRUE(byte_string_same1 == byte_string_c);
1523 EXPECT_FALSE(byte_string_c == byte_string1);
1524 EXPECT_FALSE(byte_string_c == byte_string2);
1525 EXPECT_FALSE(byte_string_c == byte_string3);
1526 EXPECT_FALSE(byte_string1 == byte_string_c);
1527 EXPECT_FALSE(byte_string2 == byte_string_c);
1528 EXPECT_FALSE(byte_string3 == byte_string_c);
1530 const char*
const c_string_same1 =
"hello";
1531 EXPECT_TRUE(byte_string_c == c_string_same1);
1532 EXPECT_TRUE(c_string_same1 == byte_string_c);
1534 const char*
const c_string1 =
"he";
1535 const char*
const c_string2 =
"hellp";
1536 const char*
const c_string3 =
"hellod";
1537 EXPECT_FALSE(byte_string_c == c_string1);
1538 EXPECT_FALSE(byte_string_c == c_string2);
1539 EXPECT_FALSE(byte_string_c == c_string3);
1541 EXPECT_FALSE(c_string1 == byte_string_c);
1542 EXPECT_FALSE(c_string2 == byte_string_c);
1543 EXPECT_FALSE(c_string3 == byte_string_c);
1545 const char kHello[] =
"hello";
1546 pdfium::span<
const uint8_t> span5(
1547 pdfium::as_bytes(
pdfium::make_span(kHello).first(5u)));
1548 auto raw_span = byte_string_c.unsigned_span();
1550 std::equal(raw_span.begin(), raw_span.end(), span5.begin(), span5.end()));
1555 EXPECT_FALSE(byte_string_c != byte_string_c);
1558 EXPECT_FALSE(byte_string_c != byte_string_c_same1);
1559 EXPECT_FALSE(byte_string_c_same1 != byte_string_c);
1562 EXPECT_FALSE(byte_string_c != byte_string_c_same2);
1563 EXPECT_FALSE(byte_string_c_same2 != byte_string_c);
1568 EXPECT_TRUE(byte_string_c != byte_string_c1);
1569 EXPECT_TRUE(byte_string_c != byte_string_c2);
1570 EXPECT_TRUE(byte_string_c != byte_string_c3);
1571 EXPECT_TRUE(byte_string_c1 != byte_string_c);
1572 EXPECT_TRUE(byte_string_c2 != byte_string_c);
1573 EXPECT_TRUE(byte_string_c3 != byte_string_c);
1576 EXPECT_FALSE(byte_string_c != byte_string_same1);
1577 EXPECT_FALSE(byte_string_same1 != byte_string_c);
1582 EXPECT_TRUE(byte_string_c != byte_string1);
1583 EXPECT_TRUE(byte_string_c != byte_string2);
1584 EXPECT_TRUE(byte_string_c != byte_string3);
1585 EXPECT_TRUE(byte_string1 != byte_string_c);
1586 EXPECT_TRUE(byte_string2 != byte_string_c);
1587 EXPECT_TRUE(byte_string3 != byte_string_c);
1589 const char*
const c_string_same1 =
"hello";
1590 EXPECT_FALSE(byte_string_c != c_string_same1);
1591 EXPECT_FALSE(c_string_same1 != byte_string_c);
1593 const char*
const c_string1 =
"he";
1594 const char*
const c_string2 =
"hellp";
1595 const char*
const c_string3 =
"hellod";
1596 EXPECT_TRUE(byte_string_c != c_string1);
1597 EXPECT_TRUE(byte_string_c != c_string2);
1598 EXPECT_TRUE(byte_string_c != c_string3);
1600 EXPECT_TRUE(c_string1 != byte_string_c);
1601 EXPECT_TRUE(c_string2 != byte_string_c);
1602 EXPECT_TRUE(c_string3 != byte_string_c);
1663 auto iter = one_str.rbegin();
1664 EXPECT_FALSE(iter == one_str.rend());
1665 EXPECT_TRUE(iter != one_str.rend());
1666 EXPECT_TRUE(iter < one_str.rend());
1670 EXPECT_TRUE(iter == one_str.rend());
1671 EXPECT_FALSE(iter != one_str.rend());
1672 EXPECT_FALSE(iter < one_str.rend());
1677 auto iter = multi_str.rbegin();
1678 EXPECT_FALSE(iter == multi_str.rend());
1682 EXPECT_EQ(
'c', *iter);
1683 EXPECT_FALSE(iter == multi_str.rend());
1687 EXPECT_EQ(
'b', *iter);
1688 EXPECT_FALSE(iter == multi_str.rend());
1692 EXPECT_EQ(
'a', *iter);
1693 EXPECT_FALSE(iter == multi_str.rend());
1697 EXPECT_TRUE(iter == multi_str.rend());
1701 EXPECT_EQ(
'a', *iter);
1702 EXPECT_FALSE(iter == multi_str.rend());
1706 EXPECT_EQ(
'b', *iter);
1707 EXPECT_FALSE(iter == multi_str.rend());
1711 EXPECT_EQ(
'c', *iter);
1712 EXPECT_FALSE(iter == multi_str.rend());
1716 EXPECT_EQ(
'd', *iter);
1717 EXPECT_TRUE(iter == multi_str.rbegin());
1754 EXPECT_TRUE(empty_str.IsEmpty());
1755 EXPECT_EQ(0u, empty_str.GetLength());
1757 const char* cstr = empty_str.c_str();
1759 EXPECT_EQ(0u, strlen(cstr));
1761 const uint8_t* rstr = empty_str.unsigned_str();
1764 pdfium::span<
const char> cspan = empty_str.span();
1765 EXPECT_TRUE(cspan.empty());
1766 EXPECT_FALSE(cspan.data());
1768 pdfium::span<
const uint8_t> rspan = empty_str.unsigned_span();
1769 EXPECT_TRUE(rspan.empty());
1770 EXPECT_FALSE(rspan.data());
1867 std::ostringstream stream;
1872 EXPECT_EQ(
"", stream.str());
1877 stream <<
"abc" << str <<
"ghi";
1878 EXPECT_EQ(
"abcdefghi", stream.str());
1882 EXPECT_EQ(
"abcdefghi", stream.str());
1886 stream <<
"abc" << str <<
"ghi";
1887 EXPECT_EQ(
"abc123ghi", stream.str());
1889 char stringWithNulls[] = {
'x',
'y',
'\0',
'z'};
1894 EXPECT_EQ(2u, str.GetLength());
1897 EXPECT_EQ(2u, stream.tellp());
1903 EXPECT_EQ(4u, str.GetLength());
1906 EXPECT_EQ(4u, stream.tellp());
1912 stream << str1 << str2;
1913 EXPECT_EQ(
"abcdef", stream.str());
1919 std::ostringstream stream;
1922 EXPECT_EQ(
"", stream.str());
1927 std::ostringstream stream;
1929 stream <<
"abc" << str <<
"ghi";
1930 EXPECT_EQ(
"abcdefghi", stream.str());
1935 std::ostringstream stream;
1939 EXPECT_EQ(
"abc", stream.str());
1944 std::ostringstream stream;
1950 EXPECT_EQ(
"123", stream.str());
1956 std::ostringstream stream;
1957 char stringWithNulls[]{
'x',
'y',
'\0',
'z'};
1959 EXPECT_EQ(2u, str.GetLength());
1961 EXPECT_EQ(2u, stream.tellp());
1968 std::ostringstream stream;
1969 char stringWithNulls[] = {
'x',
'y',
'\0',
'z'};
1972 EXPECT_EQ(4u, str.GetLength());
1974 EXPECT_EQ(4u, stream.tellp());
1980 std::ostringstream stream;
1983 stream << str1 << str2;
1984 EXPECT_EQ(
"abcdef", stream.str());
2004 EXPECT_EQ(0u, FX_HashCode_GetA(
""));
2005 EXPECT_EQ(65u, FX_HashCode_GetA(
"A"));
2006 EXPECT_EQ(97u, FX_HashCode_GetLoweredA(
"A"));
2007 EXPECT_EQ(31 * 65u + 66u, FX_HashCode_GetA(
"AB"));
2008 EXPECT_EQ(31u * 65u + 255u, FX_HashCode_GetA(
"A\xff"));
2009 EXPECT_EQ(31u * 97u + 255u, FX_HashCode_GetLoweredA(
"A\xff"));
2013 EXPECT_EQ(0u, FX_HashCode_GetAsIfW(
""));
2014 EXPECT_EQ(65u, FX_HashCode_GetAsIfW(
"A"));
2015 EXPECT_EQ(97u, FX_HashCode_GetLoweredAsIfW(
"A"));
2016 EXPECT_EQ(1313u * 65u + 66u, FX_HashCode_GetAsIfW(
"AB"));
2017 EXPECT_EQ(1313u * 65u + 255u, FX_HashCode_GetAsIfW(
"A\xff"));
2018 EXPECT_EQ(1313u * 97u + 255u, FX_HashCode_GetLoweredAsIfW(
"A\xff"));