re2 1.23.0 → 1.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/README.md +2 -0
  2. package/binding.gyp +3 -2
  3. package/package.json +5 -5
  4. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +25 -4
  5. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +6 -1
  6. package/vendor/abseil-cpp/CMakeLists.txt +2 -2
  7. package/vendor/abseil-cpp/MODULE.bazel +2 -2
  8. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +0 -1
  9. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +0 -2
  10. package/vendor/abseil-cpp/absl/algorithm/container.h +191 -140
  11. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +818 -0
  12. package/vendor/abseil-cpp/absl/base/BUILD.bazel +44 -5
  13. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +42 -3
  14. package/vendor/abseil-cpp/absl/base/attributes.h +5 -1
  15. package/vendor/abseil-cpp/absl/base/call_once_test.cc +10 -10
  16. package/vendor/abseil-cpp/absl/base/casts.cc +61 -0
  17. package/vendor/abseil-cpp/absl/base/casts.h +128 -2
  18. package/vendor/abseil-cpp/absl/base/casts_test.cc +151 -0
  19. package/vendor/abseil-cpp/absl/base/config.h +13 -37
  20. package/vendor/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  21. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +4 -0
  22. package/vendor/abseil-cpp/absl/base/internal/nullability_traits.h +71 -0
  23. package/vendor/abseil-cpp/absl/base/internal/nullability_traits_test.cc +98 -0
  24. package/vendor/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  25. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +13 -7
  26. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +16 -11
  27. package/vendor/abseil-cpp/absl/base/internal/strerror_test.cc +2 -1
  28. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +0 -9
  29. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +0 -6
  30. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -1
  31. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  32. package/vendor/abseil-cpp/absl/base/macros.h +40 -17
  33. package/vendor/abseil-cpp/absl/base/nullability.h +1 -1
  34. package/vendor/abseil-cpp/absl/base/optimization.h +1 -3
  35. package/vendor/abseil-cpp/absl/base/options.h +1 -27
  36. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +5 -8
  37. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +4 -0
  38. package/vendor/abseil-cpp/absl/container/BUILD.bazel +195 -2
  39. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +136 -2
  40. package/vendor/abseil-cpp/absl/container/btree_map.h +56 -6
  41. package/vendor/abseil-cpp/absl/container/btree_set.h +52 -6
  42. package/vendor/abseil-cpp/absl/container/btree_test.cc +107 -1
  43. package/vendor/abseil-cpp/absl/container/chunked_queue.h +755 -0
  44. package/vendor/abseil-cpp/absl/container/chunked_queue_benchmark.cc +386 -0
  45. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +768 -0
  46. package/vendor/abseil-cpp/absl/container/fixed_array.h +4 -6
  47. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +16 -6
  48. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +1 -2
  49. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +16 -6
  50. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +0 -2
  51. package/vendor/abseil-cpp/absl/container/inlined_vector.h +12 -4
  52. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +21 -0
  53. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +14 -5
  54. package/vendor/abseil-cpp/absl/container/internal/chunked_queue.h +173 -0
  55. package/vendor/abseil-cpp/absl/container/internal/common.h +51 -0
  56. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +7 -1
  57. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +11 -0
  58. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +0 -2
  59. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +1 -2
  60. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +0 -14
  61. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +11 -8
  62. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +3 -4
  63. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +23 -6
  64. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +31 -15
  65. package/vendor/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +80 -0
  66. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +4 -12
  67. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -10
  68. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +149 -23
  69. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +120 -126
  70. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +4 -0
  71. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +8 -0
  72. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +14 -59
  73. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +111 -22
  74. package/vendor/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h +53 -112
  75. package/vendor/abseil-cpp/absl/container/internal/unordered_map_lookup_test.h +10 -15
  76. package/vendor/abseil-cpp/absl/container/internal/unordered_map_members_test.h +3 -3
  77. package/vendor/abseil-cpp/absl/container/internal/unordered_map_modifiers_test.h +45 -61
  78. package/vendor/abseil-cpp/absl/container/internal/unordered_set_constructor_test.h +53 -112
  79. package/vendor/abseil-cpp/absl/container/internal/unordered_set_lookup_test.h +6 -9
  80. package/vendor/abseil-cpp/absl/container/internal/unordered_set_members_test.h +3 -3
  81. package/vendor/abseil-cpp/absl/container/internal/unordered_set_modifiers_test.h +25 -31
  82. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +666 -0
  83. package/vendor/abseil-cpp/absl/container/linked_hash_map_benchmark.cc +140 -0
  84. package/vendor/abseil-cpp/absl/container/linked_hash_map_test.cc +987 -0
  85. package/vendor/abseil-cpp/absl/container/linked_hash_set.h +527 -0
  86. package/vendor/abseil-cpp/absl/container/linked_hash_set_benchmark.cc +84 -0
  87. package/vendor/abseil-cpp/absl/container/linked_hash_set_test.cc +947 -0
  88. package/vendor/abseil-cpp/absl/container/node_hash_map.h +17 -6
  89. package/vendor/abseil-cpp/absl/container/node_hash_set.h +16 -5
  90. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +1 -2
  91. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +79 -0
  92. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +79 -0
  93. package/vendor/abseil-cpp/absl/copts/copts.py +17 -4
  94. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +67 -13
  95. package/vendor/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  96. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +31 -0
  97. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +34 -0
  98. package/vendor/abseil-cpp/absl/debugging/failure_signal_handler.cc +2 -2
  99. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +118 -0
  100. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +71 -0
  101. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +97 -0
  102. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  103. package/vendor/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  104. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +4 -0
  105. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -0
  106. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +1 -1
  107. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +0 -7
  108. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  109. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +2 -1
  110. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  111. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +2 -2
  112. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +35 -67
  113. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +3 -0
  114. package/vendor/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +24 -1
  115. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +39 -15
  116. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  117. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +25 -40
  118. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  119. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +1 -0
  120. package/vendor/abseil-cpp/absl/flags/declare.h +9 -0
  121. package/vendor/abseil-cpp/absl/flags/flag.h +2 -1
  122. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  123. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +3 -2
  124. package/vendor/abseil-cpp/absl/flags/marshalling.cc +1 -16
  125. package/vendor/abseil-cpp/absl/flags/parse.cc +4 -2
  126. package/vendor/abseil-cpp/absl/flags/parse_test.cc +1 -1
  127. package/vendor/abseil-cpp/absl/flags/reflection.cc +4 -3
  128. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +4 -0
  129. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +4 -0
  130. package/vendor/abseil-cpp/absl/functional/any_invocable.h +3 -1
  131. package/vendor/abseil-cpp/absl/functional/function_ref.h +125 -20
  132. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +122 -9
  133. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +13 -2
  134. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +42 -4
  135. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +11 -0
  136. package/vendor/abseil-cpp/absl/hash/hash_test.cc +5 -2
  137. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +184 -53
  138. package/vendor/abseil-cpp/absl/hash/internal/hash.h +116 -10
  139. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +43 -4
  140. package/vendor/abseil-cpp/absl/log/BUILD.bazel +2 -0
  141. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +35 -1
  142. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +59 -4
  143. package/vendor/abseil-cpp/absl/log/die_if_null.cc +3 -1
  144. package/vendor/abseil-cpp/absl/log/die_if_null.h +24 -3
  145. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +31 -1
  146. package/vendor/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  147. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +3 -1
  148. package/vendor/abseil-cpp/absl/log/internal/check_op.h +44 -18
  149. package/vendor/abseil-cpp/absl/log/internal/conditions.h +38 -35
  150. package/vendor/abseil-cpp/absl/log/internal/container.h +312 -0
  151. package/vendor/abseil-cpp/absl/log/internal/container_test.cc +254 -0
  152. package/vendor/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  153. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -2
  154. package/vendor/abseil-cpp/absl/log/internal/log_message.h +5 -1
  155. package/vendor/abseil-cpp/absl/log/internal/strip.h +30 -31
  156. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +19 -19
  157. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  158. package/vendor/abseil-cpp/absl/log/log.h +2 -2
  159. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +51 -0
  160. package/vendor/abseil-cpp/absl/meta/CMakeLists.txt +46 -0
  161. package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing.h +73 -0
  162. package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing_test.cc +40 -0
  163. package/vendor/abseil-cpp/absl/meta/internal/requires.h +67 -0
  164. package/vendor/abseil-cpp/absl/meta/internal/requires_test.cc +66 -0
  165. package/vendor/abseil-cpp/absl/meta/type_traits.h +42 -1
  166. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +14 -0
  167. package/vendor/abseil-cpp/absl/numeric/int128.h +41 -21
  168. package/vendor/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  169. package/vendor/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  170. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +52 -5
  171. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +1 -0
  172. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +1 -0
  173. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +18 -7
  174. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +1 -0
  175. package/vendor/abseil-cpp/absl/random/internal/fastmath_test.cc +3 -5
  176. package/vendor/abseil-cpp/absl/random/internal/platform.h +0 -13
  177. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +0 -1
  178. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +1 -27
  179. package/vendor/abseil-cpp/absl/status/BUILD.bazel +17 -0
  180. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +16 -0
  181. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +4 -2
  182. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +2 -2
  183. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +2 -1
  184. package/vendor/abseil-cpp/absl/status/status.cc +4 -0
  185. package/vendor/abseil-cpp/absl/status/status.h +5 -0
  186. package/vendor/abseil-cpp/absl/status/status_matchers.h +48 -0
  187. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +27 -0
  188. package/vendor/abseil-cpp/absl/status/status_test.cc +1 -0
  189. package/vendor/abseil-cpp/absl/status/statusor.h +1 -1
  190. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +101 -21
  191. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +99 -5
  192. package/vendor/abseil-cpp/absl/strings/ascii.h +9 -4
  193. package/vendor/abseil-cpp/absl/strings/cord.cc +15 -10
  194. package/vendor/abseil-cpp/absl/strings/cord.h +1 -1
  195. package/vendor/abseil-cpp/absl/strings/escaping.cc +126 -94
  196. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  197. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite_test.cc +95 -0
  198. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +2 -0
  199. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree_test.cc +8 -8
  200. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +24 -18
  201. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +10 -16
  202. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +9 -7
  203. package/vendor/abseil-cpp/absl/strings/internal/generic_printer.cc +107 -0
  204. package/vendor/abseil-cpp/absl/strings/internal/generic_printer.h +115 -0
  205. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +423 -0
  206. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +685 -0
  207. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +0 -12
  208. package/vendor/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  209. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +21 -7
  210. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +495 -8
  211. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -15
  212. package/vendor/abseil-cpp/absl/strings/numbers.cc +71 -8
  213. package/vendor/abseil-cpp/absl/strings/numbers.h +25 -12
  214. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +70 -0
  215. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +194 -0
  216. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite_test.cc +154 -0
  217. package/vendor/abseil-cpp/absl/strings/str_cat.cc +96 -91
  218. package/vendor/abseil-cpp/absl/strings/str_cat.h +17 -12
  219. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +4 -4
  220. package/vendor/abseil-cpp/absl/strings/str_split.h +1 -1
  221. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +1 -1
  222. package/vendor/abseil-cpp/absl/strings/string_view.h +8 -718
  223. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +1 -1265
  224. package/vendor/abseil-cpp/absl/strings/substitute.cc +24 -24
  225. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +2 -3
  226. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +1 -0
  227. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  228. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout_test.cc +15 -5
  229. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +2 -1
  230. package/vendor/abseil-cpp/absl/synchronization/mutex.h +47 -23
  231. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  232. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +2 -0
  233. package/vendor/abseil-cpp/absl/time/civil_time_benchmark.cc +1 -2
  234. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +58 -103
  235. package/vendor/abseil-cpp/absl/time/clock.cc +18 -16
  236. package/vendor/abseil-cpp/absl/time/clock_test.cc +2 -2
  237. package/vendor/abseil-cpp/absl/time/duration_benchmark.cc +144 -0
  238. package/vendor/abseil-cpp/absl/time/duration_test.cc +26 -29
  239. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +7 -1
  240. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +4 -2
  241. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  242. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +186 -0
  243. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  244. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  245. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ensenada +0 -0
  246. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santa_Isabel +0 -0
  247. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tijuana +0 -0
  248. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaNorte +0 -0
  249. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +9 -9
  250. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +12 -12
  251. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +47 -47
  252. package/vendor/abseil-cpp/absl/time/time.cc +4 -4
  253. package/vendor/abseil-cpp/absl/time/time.h +10 -10
  254. package/vendor/abseil-cpp/absl/time/time_test.cc +1 -0
  255. package/vendor/abseil-cpp/absl/types/compare.h +62 -61
  256. package/vendor/abseil-cpp/absl/types/compare_test.cc +3 -3
  257. package/vendor/abseil-cpp/absl/types/internal/span.h +1 -0
  258. package/vendor/abseil-cpp/absl/types/optional.h +2 -2
  259. package/vendor/abseil-cpp/absl/types/span.h +10 -2
  260. package/vendor/abseil-cpp/absl/utility/utility.h +13 -0
  261. package/vendor/abseil-cpp/ci/absl_alternate_options.h +0 -1
  262. package/vendor/abseil-cpp/ci/cmake_common.sh +1 -1
  263. package/vendor/abseil-cpp/ci/cmake_install_test.sh +6 -0
  264. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +1 -0
  265. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +2 -0
  266. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +1 -0
  267. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +1 -0
  268. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +1 -0
  269. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +1 -0
  270. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +1 -0
  271. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +6 -0
  272. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +6 -0
  273. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +3 -2
  274. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +5 -0
  275. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -0
  276. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -0
  277. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +6 -1
  278. package/vendor/abseil-cpp/absl/base/internal/identity.h +0 -39
  279. package/vendor/abseil-cpp/absl/strings/string_view.cc +0 -257
  280. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +0 -380
@@ -14,8 +14,7 @@
14
14
 
15
15
  #include "absl/strings/string_view.h"
16
16
 
17
- #include <stdlib.h>
18
-
17
+ #include <array>
19
18
  #include <cstddef>
20
19
  #include <cstdlib>
21
20
  #include <cstring>
@@ -34,704 +33,8 @@
34
33
  #include "absl/base/config.h"
35
34
  #include "absl/meta/type_traits.h"
36
35
 
37
- #if defined(ABSL_USES_STD_STRING_VIEW) || defined(__ANDROID__)
38
- // We don't control the death messaging when using std::string_view.
39
- // Android assert messages only go to system log, so death tests cannot inspect
40
- // the message for matching.
41
- #define ABSL_EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
42
- EXPECT_DEATH_IF_SUPPORTED(statement, ".*")
43
- #else
44
- #define ABSL_EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
45
- EXPECT_DEATH_IF_SUPPORTED(statement, regex)
46
- #endif
47
-
48
36
  namespace {
49
37
 
50
- static_assert(!absl::type_traits_internal::IsOwner<absl::string_view>::value &&
51
- absl::type_traits_internal::IsView<absl::string_view>::value,
52
- "string_view is a view, not an owner");
53
-
54
- static_assert(absl::type_traits_internal::IsLifetimeBoundAssignment<
55
- absl::string_view, std::string>::value,
56
- "lifetimebound assignment not detected");
57
-
58
- // A minimal allocator that uses malloc().
59
- template <typename T>
60
- struct Mallocator {
61
- typedef T value_type;
62
- typedef size_t size_type;
63
- typedef ptrdiff_t difference_type;
64
- typedef T* pointer;
65
- typedef const T* const_pointer;
66
- typedef T& reference;
67
- typedef const T& const_reference;
68
-
69
- size_type max_size() const {
70
- return size_t(std::numeric_limits<size_type>::max()) / sizeof(value_type);
71
- }
72
- template <typename U>
73
- struct rebind {
74
- typedef Mallocator<U> other;
75
- };
76
- Mallocator() = default;
77
- template <class U>
78
- Mallocator(const Mallocator<U>&) {} // NOLINT(runtime/explicit)
79
-
80
- T* allocate(size_t n) { return static_cast<T*>(std::malloc(n * sizeof(T))); }
81
- void deallocate(T* p, size_t) { std::free(p); }
82
- };
83
- template <typename T, typename U>
84
- bool operator==(const Mallocator<T>&, const Mallocator<U>&) {
85
- return true;
86
- }
87
- template <typename T, typename U>
88
- bool operator!=(const Mallocator<T>&, const Mallocator<U>&) {
89
- return false;
90
- }
91
-
92
- TEST(StringViewTest, Ctor) {
93
- {
94
- // Null.
95
- absl::string_view s10;
96
- EXPECT_TRUE(s10.data() == nullptr);
97
- EXPECT_EQ(0u, s10.length());
98
- }
99
-
100
- {
101
- // const char* without length.
102
- const char* hello = "hello";
103
- absl::string_view s20(hello);
104
- EXPECT_TRUE(s20.data() == hello);
105
- EXPECT_EQ(5u, s20.length());
106
-
107
- // const char* with length.
108
- absl::string_view s21(hello, 4);
109
- EXPECT_TRUE(s21.data() == hello);
110
- EXPECT_EQ(4u, s21.length());
111
-
112
- // Not recommended, but valid C++
113
- absl::string_view s22(hello, 6);
114
- EXPECT_TRUE(s22.data() == hello);
115
- EXPECT_EQ(6u, s22.length());
116
- }
117
-
118
- {
119
- // std::string.
120
- std::string hola = "hola";
121
- absl::string_view s30(hola);
122
- EXPECT_TRUE(s30.data() == hola.data());
123
- EXPECT_EQ(4u, s30.length());
124
-
125
- // std::string with embedded '\0'.
126
- hola.push_back('\0');
127
- hola.append("h2");
128
- hola.push_back('\0');
129
- absl::string_view s31(hola);
130
- EXPECT_TRUE(s31.data() == hola.data());
131
- EXPECT_EQ(8u, s31.length());
132
- }
133
-
134
- {
135
- using mstring =
136
- std::basic_string<char, std::char_traits<char>, Mallocator<char>>;
137
- mstring str1("BUNGIE-JUMPING!");
138
- const mstring str2("SLEEPING!");
139
-
140
- absl::string_view s1(str1);
141
- s1.remove_prefix(strlen("BUNGIE-JUM"));
142
-
143
- absl::string_view s2(str2);
144
- s2.remove_prefix(strlen("SLEE"));
145
-
146
- EXPECT_EQ(s1, s2);
147
- EXPECT_EQ(s1, "PING!");
148
- }
149
-
150
- // TODO(mec): absl::string_view(const absl::string_view&);
151
- }
152
-
153
- TEST(StringViewTest, Swap) {
154
- absl::string_view a("a");
155
- absl::string_view b("bbb");
156
- EXPECT_TRUE(noexcept(a.swap(b)));
157
- a.swap(b);
158
- EXPECT_EQ(a, "bbb");
159
- EXPECT_EQ(b, "a");
160
- a.swap(b);
161
- EXPECT_EQ(a, "a");
162
- EXPECT_EQ(b, "bbb");
163
- }
164
-
165
- TEST(StringViewTest, STLComparator) {
166
- std::string s1("foo");
167
- std::string s2("bar");
168
- std::string s3("baz");
169
-
170
- absl::string_view p1(s1);
171
- absl::string_view p2(s2);
172
- absl::string_view p3(s3);
173
-
174
- typedef std::map<absl::string_view, int> TestMap;
175
- TestMap map;
176
-
177
- map.insert(std::make_pair(p1, 0));
178
- map.insert(std::make_pair(p2, 1));
179
- map.insert(std::make_pair(p3, 2));
180
- EXPECT_EQ(map.size(), 3u);
181
-
182
- TestMap::const_iterator iter = map.begin();
183
- EXPECT_EQ(iter->second, 1);
184
- ++iter;
185
- EXPECT_EQ(iter->second, 2);
186
- ++iter;
187
- EXPECT_EQ(iter->second, 0);
188
- ++iter;
189
- EXPECT_TRUE(iter == map.end());
190
-
191
- TestMap::iterator new_iter = map.find("zot");
192
- EXPECT_TRUE(new_iter == map.end());
193
-
194
- new_iter = map.find("bar");
195
- EXPECT_TRUE(new_iter != map.end());
196
-
197
- map.erase(new_iter);
198
- EXPECT_EQ(map.size(), 2u);
199
-
200
- iter = map.begin();
201
- EXPECT_EQ(iter->second, 2);
202
- ++iter;
203
- EXPECT_EQ(iter->second, 0);
204
- ++iter;
205
- EXPECT_TRUE(iter == map.end());
206
- }
207
-
208
- #define COMPARE(result, op, x, y) \
209
- EXPECT_EQ(result, absl::string_view((x)) op absl::string_view((y))); \
210
- EXPECT_EQ(result, absl::string_view((x)).compare(absl::string_view((y))) op 0)
211
-
212
- TEST(StringViewTest, ComparisonOperators) {
213
- COMPARE(true, ==, "", "");
214
- COMPARE(true, ==, "", absl::string_view());
215
- COMPARE(true, ==, absl::string_view(), "");
216
- COMPARE(true, ==, "a", "a");
217
- COMPARE(true, ==, "aa", "aa");
218
- COMPARE(false, ==, "a", "");
219
- COMPARE(false, ==, "", "a");
220
- COMPARE(false, ==, "a", "b");
221
- COMPARE(false, ==, "a", "aa");
222
- COMPARE(false, ==, "aa", "a");
223
-
224
- COMPARE(false, !=, "", "");
225
- COMPARE(false, !=, "a", "a");
226
- COMPARE(false, !=, "aa", "aa");
227
- COMPARE(true, !=, "a", "");
228
- COMPARE(true, !=, "", "a");
229
- COMPARE(true, !=, "a", "b");
230
- COMPARE(true, !=, "a", "aa");
231
- COMPARE(true, !=, "aa", "a");
232
-
233
- COMPARE(true, <, "a", "b");
234
- COMPARE(true, <, "a", "aa");
235
- COMPARE(true, <, "aa", "b");
236
- COMPARE(true, <, "aa", "bb");
237
- COMPARE(false, <, "a", "a");
238
- COMPARE(false, <, "b", "a");
239
- COMPARE(false, <, "aa", "a");
240
- COMPARE(false, <, "b", "aa");
241
- COMPARE(false, <, "bb", "aa");
242
-
243
- COMPARE(true, <=, "a", "a");
244
- COMPARE(true, <=, "a", "b");
245
- COMPARE(true, <=, "a", "aa");
246
- COMPARE(true, <=, "aa", "b");
247
- COMPARE(true, <=, "aa", "bb");
248
- COMPARE(false, <=, "b", "a");
249
- COMPARE(false, <=, "aa", "a");
250
- COMPARE(false, <=, "b", "aa");
251
- COMPARE(false, <=, "bb", "aa");
252
-
253
- COMPARE(false, >=, "a", "b");
254
- COMPARE(false, >=, "a", "aa");
255
- COMPARE(false, >=, "aa", "b");
256
- COMPARE(false, >=, "aa", "bb");
257
- COMPARE(true, >=, "a", "a");
258
- COMPARE(true, >=, "b", "a");
259
- COMPARE(true, >=, "aa", "a");
260
- COMPARE(true, >=, "b", "aa");
261
- COMPARE(true, >=, "bb", "aa");
262
-
263
- COMPARE(false, >, "a", "a");
264
- COMPARE(false, >, "a", "b");
265
- COMPARE(false, >, "a", "aa");
266
- COMPARE(false, >, "aa", "b");
267
- COMPARE(false, >, "aa", "bb");
268
- COMPARE(true, >, "b", "a");
269
- COMPARE(true, >, "aa", "a");
270
- COMPARE(true, >, "b", "aa");
271
- COMPARE(true, >, "bb", "aa");
272
- }
273
-
274
- TEST(StringViewTest, ComparisonOperatorsByCharacterPosition) {
275
- std::string x;
276
- for (size_t i = 0; i < 256; i++) {
277
- x += 'a';
278
- std::string y = x;
279
- COMPARE(true, ==, x, y);
280
- for (size_t j = 0; j < i; j++) {
281
- std::string z = x;
282
- z[j] = 'b'; // Differs in position 'j'
283
- COMPARE(false, ==, x, z);
284
- COMPARE(true, <, x, z);
285
- COMPARE(true, >, z, x);
286
- if (j + 1 < i) {
287
- z[j + 1] = 'A'; // Differs in position 'j+1' as well
288
- COMPARE(false, ==, x, z);
289
- COMPARE(true, <, x, z);
290
- COMPARE(true, >, z, x);
291
- z[j + 1] = 'z'; // Differs in position 'j+1' as well
292
- COMPARE(false, ==, x, z);
293
- COMPARE(true, <, x, z);
294
- COMPARE(true, >, z, x);
295
- }
296
- }
297
- }
298
- }
299
- #undef COMPARE
300
-
301
- // Sadly, our users often confuse std::string::npos with
302
- // absl::string_view::npos; So much so that we test here that they are the same.
303
- // They need to both be unsigned, and both be the maximum-valued integer of
304
- // their type.
305
-
306
- template <typename T>
307
- struct is_type {
308
- template <typename U>
309
- static bool same(U) {
310
- return false;
311
- }
312
- static bool same(T) { return true; }
313
- };
314
-
315
- TEST(StringViewTest, NposMatchesStdStringView) {
316
- EXPECT_EQ(absl::string_view::npos, std::string::npos);
317
-
318
- EXPECT_TRUE(is_type<size_t>::same(absl::string_view::npos));
319
- EXPECT_FALSE(is_type<size_t>::same(""));
320
-
321
- // Make sure absl::string_view::npos continues to be a header constant.
322
- char test[absl::string_view::npos & 1] = {0};
323
- EXPECT_EQ(0, test[0]);
324
- }
325
-
326
- TEST(StringViewTest, STL1) {
327
- const absl::string_view a("abcdefghijklmnopqrstuvwxyz");
328
- const absl::string_view b("abc");
329
- const absl::string_view c("xyz");
330
- const absl::string_view d("foobar");
331
- const absl::string_view e;
332
- std::string temp("123");
333
- temp += '\0';
334
- temp += "456";
335
- const absl::string_view f(temp);
336
-
337
- EXPECT_EQ(a[6], 'g');
338
- EXPECT_EQ(b[0], 'a');
339
- EXPECT_EQ(c[2], 'z');
340
- EXPECT_EQ(f[3], '\0');
341
- EXPECT_EQ(f[5], '5');
342
-
343
- EXPECT_EQ(*d.data(), 'f');
344
- EXPECT_EQ(d.data()[5], 'r');
345
- EXPECT_TRUE(e.data() == nullptr);
346
-
347
- EXPECT_EQ(*a.begin(), 'a');
348
- EXPECT_EQ(*(b.begin() + 2), 'c');
349
- EXPECT_EQ(*(c.end() - 1), 'z');
350
-
351
- EXPECT_EQ(*a.rbegin(), 'z');
352
- EXPECT_EQ(*(b.rbegin() + 2), 'a');
353
- EXPECT_EQ(*(c.rend() - 1), 'x');
354
- EXPECT_TRUE(a.rbegin() + 26 == a.rend());
355
-
356
- EXPECT_EQ(a.size(), 26u);
357
- EXPECT_EQ(b.size(), 3u);
358
- EXPECT_EQ(c.size(), 3u);
359
- EXPECT_EQ(d.size(), 6u);
360
- EXPECT_EQ(e.size(), 0u);
361
- EXPECT_EQ(f.size(), 7u);
362
-
363
- EXPECT_TRUE(!d.empty());
364
- EXPECT_TRUE(d.begin() != d.end());
365
- EXPECT_TRUE(d.begin() + 6 == d.end());
366
-
367
- EXPECT_TRUE(e.empty());
368
- EXPECT_TRUE(e.begin() == e.end());
369
-
370
- char buf[4] = { '%', '%', '%', '%' };
371
- EXPECT_EQ(a.copy(buf, 4), 4u);
372
- EXPECT_EQ(buf[0], a[0]);
373
- EXPECT_EQ(buf[1], a[1]);
374
- EXPECT_EQ(buf[2], a[2]);
375
- EXPECT_EQ(buf[3], a[3]);
376
- EXPECT_EQ(a.copy(buf, 3, 7), 3u);
377
- EXPECT_EQ(buf[0], a[7]);
378
- EXPECT_EQ(buf[1], a[8]);
379
- EXPECT_EQ(buf[2], a[9]);
380
- EXPECT_EQ(buf[3], a[3]);
381
- EXPECT_EQ(c.copy(buf, 99), 3u);
382
- EXPECT_EQ(buf[0], c[0]);
383
- EXPECT_EQ(buf[1], c[1]);
384
- EXPECT_EQ(buf[2], c[2]);
385
- EXPECT_EQ(buf[3], a[3]);
386
- #ifdef ABSL_HAVE_EXCEPTIONS
387
- EXPECT_THROW(a.copy(buf, 1, 27), std::out_of_range);
388
- #else
389
- ABSL_EXPECT_DEATH_IF_SUPPORTED(a.copy(buf, 1, 27), "absl::string_view::copy");
390
- #endif
391
- }
392
-
393
- // Separated from STL1() because some compilers produce an overly
394
- // large stack frame for the combined function.
395
- TEST(StringViewTest, STL2) {
396
- const absl::string_view a("abcdefghijklmnopqrstuvwxyz");
397
- const absl::string_view b("abc");
398
- const absl::string_view c("xyz");
399
- absl::string_view d("foobar");
400
- const absl::string_view e;
401
- const absl::string_view f(
402
- "123"
403
- "\0"
404
- "456",
405
- 7);
406
-
407
- d = absl::string_view();
408
- EXPECT_EQ(d.size(), 0u);
409
- EXPECT_TRUE(d.empty());
410
- EXPECT_TRUE(d.data() == nullptr);
411
- EXPECT_TRUE(d.begin() == d.end());
412
-
413
- EXPECT_EQ(a.find(b), 0u);
414
- EXPECT_EQ(a.find(b, 1), absl::string_view::npos);
415
- EXPECT_EQ(a.find(c), 23u);
416
- EXPECT_EQ(a.find(c, 9), 23u);
417
- EXPECT_EQ(a.find(c, absl::string_view::npos), absl::string_view::npos);
418
- EXPECT_EQ(b.find(c), absl::string_view::npos);
419
- EXPECT_EQ(b.find(c, absl::string_view::npos), absl::string_view::npos);
420
- EXPECT_EQ(a.find(d), 0u);
421
- EXPECT_EQ(a.find(e), 0u);
422
- EXPECT_EQ(a.find(d, 12), 12u);
423
- EXPECT_EQ(a.find(e, 17), 17u);
424
- absl::string_view g("xx not found bb");
425
- EXPECT_EQ(a.find(g), absl::string_view::npos);
426
- // empty string nonsense
427
- EXPECT_EQ(d.find(b), absl::string_view::npos);
428
- EXPECT_EQ(e.find(b), absl::string_view::npos);
429
- EXPECT_EQ(d.find(b, 4), absl::string_view::npos);
430
- EXPECT_EQ(e.find(b, 7), absl::string_view::npos);
431
-
432
- size_t empty_search_pos = std::string().find(std::string());
433
- EXPECT_EQ(d.find(d), empty_search_pos);
434
- EXPECT_EQ(d.find(e), empty_search_pos);
435
- EXPECT_EQ(e.find(d), empty_search_pos);
436
- EXPECT_EQ(e.find(e), empty_search_pos);
437
- EXPECT_EQ(d.find(d, 4), std::string().find(std::string(), 4));
438
- EXPECT_EQ(d.find(e, 4), std::string().find(std::string(), 4));
439
- EXPECT_EQ(e.find(d, 4), std::string().find(std::string(), 4));
440
- EXPECT_EQ(e.find(e, 4), std::string().find(std::string(), 4));
441
-
442
- EXPECT_EQ(a.find('a'), 0u);
443
- EXPECT_EQ(a.find('c'), 2u);
444
- EXPECT_EQ(a.find('z'), 25u);
445
- EXPECT_EQ(a.find('$'), absl::string_view::npos);
446
- EXPECT_EQ(a.find('\0'), absl::string_view::npos);
447
- EXPECT_EQ(f.find('\0'), 3u);
448
- EXPECT_EQ(f.find('3'), 2u);
449
- EXPECT_EQ(f.find('5'), 5u);
450
- EXPECT_EQ(g.find('o'), 4u);
451
- EXPECT_EQ(g.find('o', 4), 4u);
452
- EXPECT_EQ(g.find('o', 5), 8u);
453
- EXPECT_EQ(a.find('b', 5), absl::string_view::npos);
454
- // empty string nonsense
455
- EXPECT_EQ(d.find('\0'), absl::string_view::npos);
456
- EXPECT_EQ(e.find('\0'), absl::string_view::npos);
457
- EXPECT_EQ(d.find('\0', 4), absl::string_view::npos);
458
- EXPECT_EQ(e.find('\0', 7), absl::string_view::npos);
459
- EXPECT_EQ(d.find('x'), absl::string_view::npos);
460
- EXPECT_EQ(e.find('x'), absl::string_view::npos);
461
- EXPECT_EQ(d.find('x', 4), absl::string_view::npos);
462
- EXPECT_EQ(e.find('x', 7), absl::string_view::npos);
463
-
464
- EXPECT_EQ(a.find(b.data(), 1, 0), 1u);
465
- EXPECT_EQ(a.find(c.data(), 9, 0), 9u);
466
- EXPECT_EQ(a.find(c.data(), absl::string_view::npos, 0),
467
- absl::string_view::npos);
468
- EXPECT_EQ(b.find(c.data(), absl::string_view::npos, 0),
469
- absl::string_view::npos);
470
- // empty string nonsense
471
- EXPECT_EQ(d.find(b.data(), 4, 0), absl::string_view::npos);
472
- EXPECT_EQ(e.find(b.data(), 7, 0), absl::string_view::npos);
473
-
474
- EXPECT_EQ(a.find(b.data(), 1), absl::string_view::npos);
475
- EXPECT_EQ(a.find(c.data(), 9), 23u);
476
- EXPECT_EQ(a.find(c.data(), absl::string_view::npos), absl::string_view::npos);
477
- EXPECT_EQ(b.find(c.data(), absl::string_view::npos), absl::string_view::npos);
478
- // empty string nonsense
479
- EXPECT_EQ(d.find(b.data(), 4), absl::string_view::npos);
480
- EXPECT_EQ(e.find(b.data(), 7), absl::string_view::npos);
481
-
482
- EXPECT_EQ(a.rfind(b), 0u);
483
- EXPECT_EQ(a.rfind(b, 1), 0u);
484
- EXPECT_EQ(a.rfind(c), 23u);
485
- EXPECT_EQ(a.rfind(c, 22), absl::string_view::npos);
486
- EXPECT_EQ(a.rfind(c, 1), absl::string_view::npos);
487
- EXPECT_EQ(a.rfind(c, 0), absl::string_view::npos);
488
- EXPECT_EQ(b.rfind(c), absl::string_view::npos);
489
- EXPECT_EQ(b.rfind(c, 0), absl::string_view::npos);
490
- EXPECT_EQ(a.rfind(d), std::string(a).rfind(std::string()));
491
- EXPECT_EQ(a.rfind(e), std::string(a).rfind(std::string()));
492
- EXPECT_EQ(a.rfind(d, 12), 12u);
493
- EXPECT_EQ(a.rfind(e, 17), 17u);
494
- EXPECT_EQ(a.rfind(g), absl::string_view::npos);
495
- EXPECT_EQ(d.rfind(b), absl::string_view::npos);
496
- EXPECT_EQ(e.rfind(b), absl::string_view::npos);
497
- EXPECT_EQ(d.rfind(b, 4), absl::string_view::npos);
498
- EXPECT_EQ(e.rfind(b, 7), absl::string_view::npos);
499
- // empty string nonsense
500
- EXPECT_EQ(d.rfind(d, 4), std::string().rfind(std::string()));
501
- EXPECT_EQ(e.rfind(d, 7), std::string().rfind(std::string()));
502
- EXPECT_EQ(d.rfind(e, 4), std::string().rfind(std::string()));
503
- EXPECT_EQ(e.rfind(e, 7), std::string().rfind(std::string()));
504
- EXPECT_EQ(d.rfind(d), std::string().rfind(std::string()));
505
- EXPECT_EQ(e.rfind(d), std::string().rfind(std::string()));
506
- EXPECT_EQ(d.rfind(e), std::string().rfind(std::string()));
507
- EXPECT_EQ(e.rfind(e), std::string().rfind(std::string()));
508
-
509
- EXPECT_EQ(g.rfind('o'), 8u);
510
- EXPECT_EQ(g.rfind('q'), absl::string_view::npos);
511
- EXPECT_EQ(g.rfind('o', 8), 8u);
512
- EXPECT_EQ(g.rfind('o', 7), 4u);
513
- EXPECT_EQ(g.rfind('o', 3), absl::string_view::npos);
514
- EXPECT_EQ(f.rfind('\0'), 3u);
515
- EXPECT_EQ(f.rfind('\0', 12), 3u);
516
- EXPECT_EQ(f.rfind('3'), 2u);
517
- EXPECT_EQ(f.rfind('5'), 5u);
518
- // empty string nonsense
519
- EXPECT_EQ(d.rfind('o'), absl::string_view::npos);
520
- EXPECT_EQ(e.rfind('o'), absl::string_view::npos);
521
- EXPECT_EQ(d.rfind('o', 4), absl::string_view::npos);
522
- EXPECT_EQ(e.rfind('o', 7), absl::string_view::npos);
523
-
524
- EXPECT_EQ(a.rfind(b.data(), 1, 0), 1u);
525
- EXPECT_EQ(a.rfind(c.data(), 22, 0), 22u);
526
- EXPECT_EQ(a.rfind(c.data(), 1, 0), 1u);
527
- EXPECT_EQ(a.rfind(c.data(), 0, 0), 0u);
528
- EXPECT_EQ(b.rfind(c.data(), 0, 0), 0u);
529
- EXPECT_EQ(d.rfind(b.data(), 4, 0), 0u);
530
- EXPECT_EQ(e.rfind(b.data(), 7, 0), 0u);
531
- }
532
-
533
- // Continued from STL2
534
- TEST(StringViewTest, STL2FindFirst) {
535
- const absl::string_view a("abcdefghijklmnopqrstuvwxyz");
536
- const absl::string_view b("abc");
537
- const absl::string_view c("xyz");
538
- absl::string_view d("foobar");
539
- const absl::string_view e;
540
- const absl::string_view f(
541
- "123"
542
- "\0"
543
- "456",
544
- 7);
545
- absl::string_view g("xx not found bb");
546
-
547
- d = absl::string_view();
548
- EXPECT_EQ(a.find_first_of(b), 0u);
549
- EXPECT_EQ(a.find_first_of(b, 0), 0u);
550
- EXPECT_EQ(a.find_first_of(b, 1), 1u);
551
- EXPECT_EQ(a.find_first_of(b, 2), 2u);
552
- EXPECT_EQ(a.find_first_of(b, 3), absl::string_view::npos);
553
- EXPECT_EQ(a.find_first_of(c), 23u);
554
- EXPECT_EQ(a.find_first_of(c, 23), 23u);
555
- EXPECT_EQ(a.find_first_of(c, 24), 24u);
556
- EXPECT_EQ(a.find_first_of(c, 25), 25u);
557
- EXPECT_EQ(a.find_first_of(c, 26), absl::string_view::npos);
558
- EXPECT_EQ(g.find_first_of(b), 13u);
559
- EXPECT_EQ(g.find_first_of(c), 0u);
560
- EXPECT_EQ(a.find_first_of(f), absl::string_view::npos);
561
- EXPECT_EQ(f.find_first_of(a), absl::string_view::npos);
562
- // empty string nonsense
563
- EXPECT_EQ(a.find_first_of(d), absl::string_view::npos);
564
- EXPECT_EQ(a.find_first_of(e), absl::string_view::npos);
565
- EXPECT_EQ(d.find_first_of(b), absl::string_view::npos);
566
- EXPECT_EQ(e.find_first_of(b), absl::string_view::npos);
567
- EXPECT_EQ(d.find_first_of(d), absl::string_view::npos);
568
- EXPECT_EQ(e.find_first_of(d), absl::string_view::npos);
569
- EXPECT_EQ(d.find_first_of(e), absl::string_view::npos);
570
- EXPECT_EQ(e.find_first_of(e), absl::string_view::npos);
571
-
572
- EXPECT_EQ(a.find_first_not_of(b), 3u);
573
- EXPECT_EQ(a.find_first_not_of(c), 0u);
574
- EXPECT_EQ(b.find_first_not_of(a), absl::string_view::npos);
575
- EXPECT_EQ(c.find_first_not_of(a), absl::string_view::npos);
576
- EXPECT_EQ(f.find_first_not_of(a), 0u);
577
- EXPECT_EQ(a.find_first_not_of(f), 0u);
578
- EXPECT_EQ(a.find_first_not_of(d), 0u);
579
- EXPECT_EQ(a.find_first_not_of(e), 0u);
580
- // empty string nonsense
581
- EXPECT_EQ(a.find_first_not_of(d), 0u);
582
- EXPECT_EQ(a.find_first_not_of(e), 0u);
583
- EXPECT_EQ(a.find_first_not_of(d, 1), 1u);
584
- EXPECT_EQ(a.find_first_not_of(e, 1), 1u);
585
- EXPECT_EQ(a.find_first_not_of(d, a.size() - 1), a.size() - 1);
586
- EXPECT_EQ(a.find_first_not_of(e, a.size() - 1), a.size() - 1);
587
- EXPECT_EQ(a.find_first_not_of(d, a.size()), absl::string_view::npos);
588
- EXPECT_EQ(a.find_first_not_of(e, a.size()), absl::string_view::npos);
589
- EXPECT_EQ(a.find_first_not_of(d, absl::string_view::npos),
590
- absl::string_view::npos);
591
- EXPECT_EQ(a.find_first_not_of(e, absl::string_view::npos),
592
- absl::string_view::npos);
593
- EXPECT_EQ(d.find_first_not_of(a), absl::string_view::npos);
594
- EXPECT_EQ(e.find_first_not_of(a), absl::string_view::npos);
595
- EXPECT_EQ(d.find_first_not_of(d), absl::string_view::npos);
596
- EXPECT_EQ(e.find_first_not_of(d), absl::string_view::npos);
597
- EXPECT_EQ(d.find_first_not_of(e), absl::string_view::npos);
598
- EXPECT_EQ(e.find_first_not_of(e), absl::string_view::npos);
599
-
600
- absl::string_view h("====");
601
- EXPECT_EQ(h.find_first_not_of('='), absl::string_view::npos);
602
- EXPECT_EQ(h.find_first_not_of('=', 3), absl::string_view::npos);
603
- EXPECT_EQ(h.find_first_not_of('\0'), 0u);
604
- EXPECT_EQ(g.find_first_not_of('x'), 2u);
605
- EXPECT_EQ(f.find_first_not_of('\0'), 0u);
606
- EXPECT_EQ(f.find_first_not_of('\0', 3), 4u);
607
- EXPECT_EQ(f.find_first_not_of('\0', 2), 2u);
608
- // empty string nonsense
609
- EXPECT_EQ(d.find_first_not_of('x'), absl::string_view::npos);
610
- EXPECT_EQ(e.find_first_not_of('x'), absl::string_view::npos);
611
- EXPECT_EQ(d.find_first_not_of('\0'), absl::string_view::npos);
612
- EXPECT_EQ(e.find_first_not_of('\0'), absl::string_view::npos);
613
- }
614
-
615
- // Continued from STL2
616
- TEST(StringViewTest, STL2FindLast) {
617
- const absl::string_view a("abcdefghijklmnopqrstuvwxyz");
618
- const absl::string_view b("abc");
619
- const absl::string_view c("xyz");
620
- absl::string_view d("foobar");
621
- const absl::string_view e;
622
- const absl::string_view f(
623
- "123"
624
- "\0"
625
- "456",
626
- 7);
627
- absl::string_view g("xx not found bb");
628
- absl::string_view h("====");
629
- absl::string_view i("56");
630
-
631
- d = absl::string_view();
632
- EXPECT_EQ(h.find_last_of(a), absl::string_view::npos);
633
- EXPECT_EQ(g.find_last_of(a), g.size() - 1);
634
- EXPECT_EQ(a.find_last_of(b), 2u);
635
- EXPECT_EQ(a.find_last_of(c), a.size() - 1);
636
- EXPECT_EQ(f.find_last_of(i), 6u);
637
- EXPECT_EQ(a.find_last_of('a'), 0u);
638
- EXPECT_EQ(a.find_last_of('b'), 1u);
639
- EXPECT_EQ(a.find_last_of('z'), 25u);
640
- EXPECT_EQ(a.find_last_of('a', 5), 0u);
641
- EXPECT_EQ(a.find_last_of('b', 5), 1u);
642
- EXPECT_EQ(a.find_last_of('b', 0), absl::string_view::npos);
643
- EXPECT_EQ(a.find_last_of('z', 25), 25u);
644
- EXPECT_EQ(a.find_last_of('z', 24), absl::string_view::npos);
645
- EXPECT_EQ(f.find_last_of(i, 5), 5u);
646
- EXPECT_EQ(f.find_last_of(i, 6), 6u);
647
- EXPECT_EQ(f.find_last_of(a, 4), absl::string_view::npos);
648
- // empty string nonsense
649
- EXPECT_EQ(f.find_last_of(d), absl::string_view::npos);
650
- EXPECT_EQ(f.find_last_of(e), absl::string_view::npos);
651
- EXPECT_EQ(f.find_last_of(d, 4), absl::string_view::npos);
652
- EXPECT_EQ(f.find_last_of(e, 4), absl::string_view::npos);
653
- EXPECT_EQ(d.find_last_of(d), absl::string_view::npos);
654
- EXPECT_EQ(d.find_last_of(e), absl::string_view::npos);
655
- EXPECT_EQ(e.find_last_of(d), absl::string_view::npos);
656
- EXPECT_EQ(e.find_last_of(e), absl::string_view::npos);
657
- EXPECT_EQ(d.find_last_of(f), absl::string_view::npos);
658
- EXPECT_EQ(e.find_last_of(f), absl::string_view::npos);
659
- EXPECT_EQ(d.find_last_of(d, 4), absl::string_view::npos);
660
- EXPECT_EQ(d.find_last_of(e, 4), absl::string_view::npos);
661
- EXPECT_EQ(e.find_last_of(d, 4), absl::string_view::npos);
662
- EXPECT_EQ(e.find_last_of(e, 4), absl::string_view::npos);
663
- EXPECT_EQ(d.find_last_of(f, 4), absl::string_view::npos);
664
- EXPECT_EQ(e.find_last_of(f, 4), absl::string_view::npos);
665
-
666
- EXPECT_EQ(a.find_last_not_of(b), a.size() - 1);
667
- EXPECT_EQ(a.find_last_not_of(c), 22u);
668
- EXPECT_EQ(b.find_last_not_of(a), absl::string_view::npos);
669
- EXPECT_EQ(b.find_last_not_of(b), absl::string_view::npos);
670
- EXPECT_EQ(f.find_last_not_of(i), 4u);
671
- EXPECT_EQ(a.find_last_not_of(c, 24), 22u);
672
- EXPECT_EQ(a.find_last_not_of(b, 3), 3u);
673
- EXPECT_EQ(a.find_last_not_of(b, 2), absl::string_view::npos);
674
- // empty string nonsense
675
- EXPECT_EQ(f.find_last_not_of(d), f.size() - 1);
676
- EXPECT_EQ(f.find_last_not_of(e), f.size() - 1);
677
- EXPECT_EQ(f.find_last_not_of(d, 4), 4u);
678
- EXPECT_EQ(f.find_last_not_of(e, 4), 4u);
679
- EXPECT_EQ(d.find_last_not_of(d), absl::string_view::npos);
680
- EXPECT_EQ(d.find_last_not_of(e), absl::string_view::npos);
681
- EXPECT_EQ(e.find_last_not_of(d), absl::string_view::npos);
682
- EXPECT_EQ(e.find_last_not_of(e), absl::string_view::npos);
683
- EXPECT_EQ(d.find_last_not_of(f), absl::string_view::npos);
684
- EXPECT_EQ(e.find_last_not_of(f), absl::string_view::npos);
685
- EXPECT_EQ(d.find_last_not_of(d, 4), absl::string_view::npos);
686
- EXPECT_EQ(d.find_last_not_of(e, 4), absl::string_view::npos);
687
- EXPECT_EQ(e.find_last_not_of(d, 4), absl::string_view::npos);
688
- EXPECT_EQ(e.find_last_not_of(e, 4), absl::string_view::npos);
689
- EXPECT_EQ(d.find_last_not_of(f, 4), absl::string_view::npos);
690
- EXPECT_EQ(e.find_last_not_of(f, 4), absl::string_view::npos);
691
-
692
- EXPECT_EQ(h.find_last_not_of('x'), h.size() - 1);
693
- EXPECT_EQ(h.find_last_not_of('='), absl::string_view::npos);
694
- EXPECT_EQ(b.find_last_not_of('c'), 1u);
695
- EXPECT_EQ(h.find_last_not_of('x', 2), 2u);
696
- EXPECT_EQ(h.find_last_not_of('=', 2), absl::string_view::npos);
697
- EXPECT_EQ(b.find_last_not_of('b', 1), 0u);
698
- // empty string nonsense
699
- EXPECT_EQ(d.find_last_not_of('x'), absl::string_view::npos);
700
- EXPECT_EQ(e.find_last_not_of('x'), absl::string_view::npos);
701
- EXPECT_EQ(d.find_last_not_of('\0'), absl::string_view::npos);
702
- EXPECT_EQ(e.find_last_not_of('\0'), absl::string_view::npos);
703
- }
704
-
705
- // Continued from STL2
706
- TEST(StringViewTest, STL2Substr) {
707
- const absl::string_view a("abcdefghijklmnopqrstuvwxyz");
708
- const absl::string_view b("abc");
709
- const absl::string_view c("xyz");
710
- absl::string_view d("foobar");
711
- const absl::string_view e;
712
-
713
- d = absl::string_view();
714
- EXPECT_EQ(a.substr(0, 3), b);
715
- EXPECT_EQ(a.substr(23), c);
716
- EXPECT_EQ(a.substr(23, 3), c);
717
- EXPECT_EQ(a.substr(23, 99), c);
718
- EXPECT_EQ(a.substr(0), a);
719
- EXPECT_EQ(a.substr(), a);
720
- EXPECT_EQ(a.substr(3, 2), "de");
721
- // empty string nonsense
722
- EXPECT_EQ(d.substr(0, 99), e);
723
- // use of npos
724
- EXPECT_EQ(a.substr(0, absl::string_view::npos), a);
725
- EXPECT_EQ(a.substr(23, absl::string_view::npos), c);
726
- // throw exception
727
- #ifdef ABSL_HAVE_EXCEPTIONS
728
- EXPECT_THROW((void)a.substr(99, 2), std::out_of_range);
729
- #else
730
- ABSL_EXPECT_DEATH_IF_SUPPORTED((void)a.substr(99, 2),
731
- "absl::string_view::substr");
732
- #endif
733
- }
734
-
735
38
  TEST(StringViewTest, TruncSubstr) {
736
39
  const absl::string_view hi("hi");
737
40
  EXPECT_EQ("", absl::ClippedSubstr(hi, 0, 0));
@@ -743,272 +46,6 @@ TEST(StringViewTest, TruncSubstr) {
743
46
  EXPECT_EQ("", absl::ClippedSubstr(hi, 3, 2)); // truncation
744
47
  }
745
48
 
746
- TEST(StringViewTest, UTF8) {
747
- std::string utf8 = "\u00E1";
748
- std::string utf8_twice = utf8 + " " + utf8;
749
- size_t utf8_len = strlen(utf8.data());
750
- EXPECT_EQ(utf8_len, absl::string_view(utf8_twice).find_first_of(" "));
751
- EXPECT_EQ(utf8_len, absl::string_view(utf8_twice).find_first_of(" \t"));
752
- }
753
-
754
- TEST(StringViewTest, FindConformance) {
755
- struct {
756
- std::string haystack;
757
- std::string needle;
758
- } specs[] = {
759
- {"", ""},
760
- {"", "a"},
761
- {"a", ""},
762
- {"a", "a"},
763
- {"a", "b"},
764
- {"aa", ""},
765
- {"aa", "a"},
766
- {"aa", "b"},
767
- {"ab", "a"},
768
- {"ab", "b"},
769
- {"abcd", ""},
770
- {"abcd", "a"},
771
- {"abcd", "d"},
772
- {"abcd", "ab"},
773
- {"abcd", "bc"},
774
- {"abcd", "cd"},
775
- {"abcd", "abcd"},
776
- };
777
- for (const auto& s : specs) {
778
- SCOPED_TRACE(s.haystack);
779
- SCOPED_TRACE(s.needle);
780
- std::string st = s.haystack;
781
- absl::string_view sp = s.haystack;
782
- for (size_t i = 0; i <= sp.size(); ++i) {
783
- size_t pos = (i == sp.size()) ? absl::string_view::npos : i;
784
- SCOPED_TRACE(pos);
785
- EXPECT_EQ(sp.find(s.needle, pos),
786
- st.find(s.needle, pos));
787
- EXPECT_EQ(sp.rfind(s.needle, pos),
788
- st.rfind(s.needle, pos));
789
- EXPECT_EQ(sp.find_first_of(s.needle, pos),
790
- st.find_first_of(s.needle, pos));
791
- EXPECT_EQ(sp.find_first_not_of(s.needle, pos),
792
- st.find_first_not_of(s.needle, pos));
793
- EXPECT_EQ(sp.find_last_of(s.needle, pos),
794
- st.find_last_of(s.needle, pos));
795
- EXPECT_EQ(sp.find_last_not_of(s.needle, pos),
796
- st.find_last_not_of(s.needle, pos));
797
- }
798
- }
799
- }
800
-
801
- TEST(StringViewTest, Remove) {
802
- absl::string_view a("foobar");
803
- std::string s1("123");
804
- s1 += '\0';
805
- s1 += "456";
806
- absl::string_view e;
807
- std::string s2;
808
-
809
- // remove_prefix
810
- absl::string_view c(a);
811
- c.remove_prefix(3);
812
- EXPECT_EQ(c, "bar");
813
- c = a;
814
- c.remove_prefix(0);
815
- EXPECT_EQ(c, a);
816
- c.remove_prefix(c.size());
817
- EXPECT_EQ(c, e);
818
-
819
- // remove_suffix
820
- c = a;
821
- c.remove_suffix(3);
822
- EXPECT_EQ(c, "foo");
823
- c = a;
824
- c.remove_suffix(0);
825
- EXPECT_EQ(c, a);
826
- c.remove_suffix(c.size());
827
- EXPECT_EQ(c, e);
828
- }
829
-
830
- TEST(StringViewTest, Set) {
831
- absl::string_view a("foobar");
832
- absl::string_view empty;
833
- absl::string_view b;
834
-
835
- // set
836
- b = absl::string_view("foobar", 6);
837
- EXPECT_EQ(b, a);
838
- b = absl::string_view("foobar", 0);
839
- EXPECT_EQ(b, empty);
840
- b = absl::string_view("foobar", 7);
841
- EXPECT_NE(b, a);
842
-
843
- b = absl::string_view("foobar");
844
- EXPECT_EQ(b, a);
845
- }
846
-
847
- TEST(StringViewTest, FrontBack) {
848
- static const char arr[] = "abcd";
849
- const absl::string_view csp(arr, 4);
850
- EXPECT_EQ(&arr[0], &csp.front());
851
- EXPECT_EQ(&arr[3], &csp.back());
852
- }
853
-
854
- TEST(StringViewTest, FrontBackSingleChar) {
855
- static const char c = 'a';
856
- const absl::string_view csp(&c, 1);
857
- EXPECT_EQ(&c, &csp.front());
858
- EXPECT_EQ(&c, &csp.back());
859
- }
860
-
861
- TEST(StringViewTest, FrontBackEmpty) {
862
- #ifndef ABSL_USES_STD_STRING_VIEW
863
- #if !defined(NDEBUG) || ABSL_OPTION_HARDENED
864
- // Abseil's string_view implementation has debug assertions that check that
865
- // front() and back() are not called on an empty string_view.
866
- absl::string_view sv;
867
- ABSL_EXPECT_DEATH_IF_SUPPORTED(sv.front(), "");
868
- ABSL_EXPECT_DEATH_IF_SUPPORTED(sv.back(), "");
869
- #endif
870
- #endif
871
- }
872
-
873
- TEST(StringViewTest, DefaultConstructor) {
874
- absl::string_view s;
875
- EXPECT_EQ(s.data(), nullptr);
876
- EXPECT_EQ(s.size(), 0u);
877
- }
878
-
879
- TEST(StringViewTest, Comparisons2) {
880
- // The `compare` member has 6 overloads (v: string_view, s: const char*):
881
- // (1) compare(v)
882
- // (2) compare(pos1, count1, v)
883
- // (3) compare(pos1, count1, v, pos2, count2)
884
- // (4) compare(s)
885
- // (5) compare(pos1, count1, s)
886
- // (6) compare(pos1, count1, s, count2)
887
-
888
- absl::string_view abc("abcdefghijklmnopqrstuvwxyz");
889
-
890
- // check comparison operations on strings longer than 4 bytes.
891
- EXPECT_EQ(abc, absl::string_view("abcdefghijklmnopqrstuvwxyz"));
892
- EXPECT_EQ(abc.compare(absl::string_view("abcdefghijklmnopqrstuvwxyz")), 0);
893
-
894
- EXPECT_LT(abc, absl::string_view("abcdefghijklmnopqrstuvwxzz"));
895
- EXPECT_LT(abc.compare(absl::string_view("abcdefghijklmnopqrstuvwxzz")), 0);
896
-
897
- EXPECT_GT(abc, absl::string_view("abcdefghijklmnopqrstuvwxyy"));
898
- EXPECT_GT(abc.compare(absl::string_view("abcdefghijklmnopqrstuvwxyy")), 0);
899
-
900
- // The "substr" variants of `compare`.
901
- absl::string_view digits("0123456789");
902
- auto npos = absl::string_view::npos;
903
-
904
- // Taking string_view
905
- EXPECT_EQ(digits.compare(3, npos, absl::string_view("3456789")), 0); // 2
906
- EXPECT_EQ(digits.compare(3, 4, absl::string_view("3456")), 0); // 2
907
- EXPECT_EQ(digits.compare(10, 0, absl::string_view()), 0); // 2
908
- EXPECT_EQ(digits.compare(3, 4, absl::string_view("0123456789"), 3, 4),
909
- 0); // 3
910
- EXPECT_LT(digits.compare(3, 4, absl::string_view("0123456789"), 3, 5),
911
- 0); // 3
912
- EXPECT_LT(digits.compare(0, npos, absl::string_view("0123456789"), 3, 5),
913
- 0); // 3
914
- // Taking const char*
915
- EXPECT_EQ(digits.compare(3, 4, "3456"), 0); // 5
916
- EXPECT_EQ(digits.compare(3, npos, "3456789"), 0); // 5
917
- EXPECT_EQ(digits.compare(10, 0, ""), 0); // 5
918
- EXPECT_EQ(digits.compare(3, 4, "0123456789", 3, 4), 0); // 6
919
- EXPECT_LT(digits.compare(3, 4, "0123456789", 3, 5), 0); // 6
920
- EXPECT_LT(digits.compare(0, npos, "0123456789", 3, 5), 0); // 6
921
- }
922
-
923
- TEST(StringViewTest, At) {
924
- absl::string_view abc = "abc";
925
- EXPECT_EQ(abc.at(0), 'a');
926
- EXPECT_EQ(abc.at(1), 'b');
927
- EXPECT_EQ(abc.at(2), 'c');
928
- #ifdef ABSL_HAVE_EXCEPTIONS
929
- EXPECT_THROW((void)abc.at(3), std::out_of_range);
930
- #else
931
- ABSL_EXPECT_DEATH_IF_SUPPORTED((void)abc.at(3), "absl::string_view::at");
932
- #endif
933
- }
934
-
935
- #if ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
936
- TEST(StringViewTest, StartsWith) {
937
- const absl::string_view a("foobar");
938
- const absl::string_view b("123\0abc", 7);
939
- const absl::string_view e;
940
- EXPECT_TRUE(a.starts_with(a));
941
- EXPECT_TRUE(a.starts_with("foo"));
942
- EXPECT_TRUE(a.starts_with('f'));
943
- EXPECT_TRUE(a.starts_with(e));
944
- EXPECT_TRUE(b.starts_with(b));
945
- EXPECT_TRUE(b.starts_with('1'));
946
- EXPECT_TRUE(b.starts_with(e));
947
- EXPECT_TRUE(e.starts_with(""));
948
- EXPECT_FALSE(a.starts_with(b));
949
- EXPECT_FALSE(b.starts_with(a));
950
- EXPECT_FALSE(e.starts_with(a));
951
- EXPECT_FALSE(a.starts_with('r'));
952
- EXPECT_FALSE(a.starts_with('\0'));
953
- EXPECT_FALSE(e.starts_with('r'));
954
- EXPECT_FALSE(e.starts_with('\0'));
955
-
956
- // Test that constexpr compiles.
957
- constexpr absl::string_view kFooBar("foobar");
958
- constexpr absl::string_view kFoo("foo");
959
- constexpr absl::string_view kBar("bar");
960
- constexpr bool k1 = kFooBar.starts_with(kFoo);
961
- EXPECT_TRUE(k1);
962
- constexpr bool k2 = kFooBar.starts_with(kBar);
963
- EXPECT_FALSE(k2);
964
- constexpr bool k3 = kFooBar.starts_with('f');
965
- EXPECT_TRUE(k3);
966
- constexpr bool k4 = kFooBar.starts_with("fo");
967
- EXPECT_TRUE(k4);
968
- }
969
-
970
- TEST(StringViewTest, EndsWith) {
971
- const absl::string_view a("foobar");
972
- const absl::string_view b("123\0abc", 7);
973
- const absl::string_view e;
974
- EXPECT_TRUE(a.ends_with(a));
975
- EXPECT_TRUE(a.ends_with('r'));
976
- EXPECT_TRUE(a.ends_with("bar"));
977
- EXPECT_TRUE(a.ends_with(e));
978
- EXPECT_TRUE(b.ends_with(b));
979
- EXPECT_TRUE(b.ends_with('c'));
980
- EXPECT_TRUE(b.ends_with(e));
981
- EXPECT_TRUE(e.ends_with(""));
982
- EXPECT_FALSE(a.ends_with(b));
983
- EXPECT_FALSE(b.ends_with(a));
984
- EXPECT_FALSE(e.ends_with(a));
985
- EXPECT_FALSE(a.ends_with('f'));
986
- EXPECT_FALSE(a.ends_with('\0'));
987
- EXPECT_FALSE(e.ends_with('r'));
988
- EXPECT_FALSE(e.ends_with('\0'));
989
-
990
- // Test that constexpr compiles.
991
- constexpr absl::string_view kFooBar("foobar");
992
- constexpr absl::string_view kFoo("foo");
993
- constexpr absl::string_view kBar("bar");
994
- constexpr bool k1 = kFooBar.ends_with(kFoo);
995
- EXPECT_FALSE(k1);
996
- constexpr bool k2 = kFooBar.ends_with(kBar);
997
- EXPECT_TRUE(k2);
998
- constexpr bool k3 = kFooBar.ends_with('r');
999
- EXPECT_TRUE(k3);
1000
- constexpr bool k4 = kFooBar.ends_with("ar");
1001
- EXPECT_TRUE(k4);
1002
- }
1003
- #endif // ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L
1004
-
1005
- struct MyCharAlloc : std::allocator<char> {};
1006
-
1007
- TEST(StringViewTest, ExplicitConversionOperator) {
1008
- absl::string_view sp = "hi";
1009
- EXPECT_EQ(sp, std::string(sp));
1010
- }
1011
-
1012
49
  TEST(StringViewTest, NullSafeStringView) {
1013
50
  {
1014
51
  absl::string_view s = absl::NullSafeStringView(nullptr);
@@ -1046,305 +83,4 @@ TEST(StringViewTest, ConstexprNullSafeStringView) {
1046
83
  }
1047
84
  }
1048
85
 
1049
- TEST(StringViewTest, ConstexprCompiles) {
1050
- constexpr absl::string_view sp;
1051
- // With `-Wnonnull` turned on, there is no way to test the defensive null
1052
- // check in the `string_view(const char*)` constructor in a constexpr context,
1053
- // as the argument needs to be constexpr. The compiler will therefore always
1054
- // know at compile time that the argument is nullptr and complain because the
1055
- // parameter is annotated nonnull. We hence turn the warning off for this
1056
- // test.
1057
- constexpr absl::string_view cstr_len("cstr", 4);
1058
-
1059
- #if defined(ABSL_USES_STD_STRING_VIEW)
1060
- // In libstdc++ (as of 7.2), `std::string_view::string_view(const char*)`
1061
- // calls `std::char_traits<char>::length(const char*)` to get the string
1062
- // length, but it is not marked constexpr yet. See GCC bug:
1063
- // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78156
1064
- // Also, there is a LWG issue that adds constexpr to length() which was just
1065
- // resolved 2017-06-02. See
1066
- // http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2232
1067
- // TODO(zhangxy): Update the condition when libstdc++ adopts the constexpr
1068
- // length().
1069
- #if !defined(__GLIBCXX__)
1070
- #define ABSL_HAVE_CONSTEXPR_STRING_VIEW_FROM_CSTR 1
1071
- #endif // !__GLIBCXX__
1072
-
1073
- #else // ABSL_USES_STD_STRING_VIEW
1074
-
1075
- // This duplicates the check for __builtin_strlen in the header.
1076
- #if ABSL_HAVE_BUILTIN(__builtin_strlen) || \
1077
- (defined(__GNUC__) && !defined(__clang__))
1078
- #define ABSL_HAVE_CONSTEXPR_STRING_VIEW_FROM_CSTR 1
1079
- #elif defined(__GNUC__) // GCC or clang
1080
- #error GCC/clang should have constexpr string_view.
1081
- #endif
1082
-
1083
- // MSVC 2017+ should be able to construct a constexpr string_view from a cstr.
1084
- #if defined(_MSC_VER)
1085
- #define ABSL_HAVE_CONSTEXPR_STRING_VIEW_FROM_CSTR 1
1086
- #endif
1087
-
1088
- #endif // ABSL_USES_STD_STRING_VIEW
1089
-
1090
- #ifdef ABSL_HAVE_CONSTEXPR_STRING_VIEW_FROM_CSTR
1091
- constexpr absl::string_view cstr_strlen("foo");
1092
- EXPECT_EQ(cstr_strlen.length(), 3u);
1093
- constexpr absl::string_view cstr_strlen2 = "bar";
1094
- EXPECT_EQ(cstr_strlen2, "bar");
1095
-
1096
- #if ABSL_HAVE_BUILTIN(__builtin_memcmp) || \
1097
- (defined(__GNUC__) && !defined(__clang__))
1098
- #define ABSL_HAVE_CONSTEXPR_STRING_VIEW_COMPARISON 1
1099
- #endif
1100
- #ifdef ABSL_HAVE_CONSTEXPR_STRING_VIEW_COMPARISON
1101
- constexpr absl::string_view foo = "foo";
1102
- constexpr absl::string_view bar = "bar";
1103
- constexpr bool foo_eq_bar = foo == bar;
1104
- constexpr bool foo_ne_bar = foo != bar;
1105
- constexpr bool foo_lt_bar = foo < bar;
1106
- constexpr bool foo_le_bar = foo <= bar;
1107
- constexpr bool foo_gt_bar = foo > bar;
1108
- constexpr bool foo_ge_bar = foo >= bar;
1109
- constexpr int foo_compare_bar = foo.compare(bar);
1110
- EXPECT_FALSE(foo_eq_bar);
1111
- EXPECT_TRUE(foo_ne_bar);
1112
- EXPECT_FALSE(foo_lt_bar);
1113
- EXPECT_FALSE(foo_le_bar);
1114
- EXPECT_TRUE(foo_gt_bar);
1115
- EXPECT_TRUE(foo_ge_bar);
1116
- EXPECT_GT(foo_compare_bar, 0);
1117
- #endif
1118
- #endif
1119
-
1120
- constexpr absl::string_view::iterator const_begin_empty = sp.begin();
1121
- constexpr absl::string_view::iterator const_end_empty = sp.end();
1122
- EXPECT_EQ(const_begin_empty, const_end_empty);
1123
-
1124
- constexpr absl::string_view::iterator const_begin = cstr_len.begin();
1125
- constexpr absl::string_view::iterator const_end = cstr_len.end();
1126
- constexpr absl::string_view::size_type const_size = cstr_len.size();
1127
- constexpr absl::string_view::size_type const_length = cstr_len.length();
1128
- static_assert(const_begin + const_size == const_end,
1129
- "pointer arithmetic check");
1130
- static_assert(const_begin + const_length == const_end,
1131
- "pointer arithmetic check");
1132
- #ifndef _MSC_VER
1133
- // MSVC has bugs doing constexpr pointer arithmetic.
1134
- // https://developercommunity.visualstudio.com/content/problem/482192/bad-pointer-arithmetic-in-constepxr-2019-rc1-svc1.html
1135
- EXPECT_EQ(const_begin + const_size, const_end);
1136
- EXPECT_EQ(const_begin + const_length, const_end);
1137
- #endif
1138
-
1139
- constexpr bool isempty = sp.empty();
1140
- EXPECT_TRUE(isempty);
1141
-
1142
- constexpr const char c = cstr_len[2];
1143
- EXPECT_EQ(c, 't');
1144
-
1145
- constexpr const char cfront = cstr_len.front();
1146
- constexpr const char cback = cstr_len.back();
1147
- EXPECT_EQ(cfront, 'c');
1148
- EXPECT_EQ(cback, 'r');
1149
-
1150
- constexpr const char* np = sp.data();
1151
- constexpr const char* cstr_ptr = cstr_len.data();
1152
- EXPECT_EQ(np, nullptr);
1153
- EXPECT_NE(cstr_ptr, nullptr);
1154
-
1155
- constexpr size_t sp_npos = sp.npos;
1156
- EXPECT_EQ(sp_npos, static_cast<size_t>(-1));
1157
- }
1158
-
1159
- constexpr char ConstexprMethodsHelper() {
1160
- #if defined(__cplusplus) && __cplusplus >= 201402L
1161
- absl::string_view str("123", 3);
1162
- str.remove_prefix(1);
1163
- str.remove_suffix(1);
1164
- absl::string_view bar;
1165
- str.swap(bar);
1166
- return bar.front();
1167
- #else
1168
- return '2';
1169
- #endif
1170
- }
1171
-
1172
- TEST(StringViewTest, ConstexprMethods) {
1173
- // remove_prefix, remove_suffix, swap
1174
- static_assert(ConstexprMethodsHelper() == '2', "");
1175
-
1176
- // substr
1177
- constexpr absl::string_view foobar("foobar", 6);
1178
- constexpr absl::string_view foo = foobar.substr(0, 3);
1179
- constexpr absl::string_view bar = foobar.substr(3);
1180
- EXPECT_EQ(foo, "foo");
1181
- EXPECT_EQ(bar, "bar");
1182
- }
1183
-
1184
- TEST(StringViewTest, Noexcept) {
1185
- EXPECT_TRUE((std::is_nothrow_constructible<absl::string_view,
1186
- const std::string&>::value));
1187
- EXPECT_TRUE((std::is_nothrow_constructible<absl::string_view,
1188
- const std::string&>::value));
1189
- EXPECT_TRUE(std::is_nothrow_constructible<absl::string_view>::value);
1190
- constexpr absl::string_view sp;
1191
- EXPECT_TRUE(noexcept(sp.begin()));
1192
- EXPECT_TRUE(noexcept(sp.end()));
1193
- EXPECT_TRUE(noexcept(sp.cbegin()));
1194
- EXPECT_TRUE(noexcept(sp.cend()));
1195
- EXPECT_TRUE(noexcept(sp.rbegin()));
1196
- EXPECT_TRUE(noexcept(sp.rend()));
1197
- EXPECT_TRUE(noexcept(sp.crbegin()));
1198
- EXPECT_TRUE(noexcept(sp.crend()));
1199
- EXPECT_TRUE(noexcept(sp.size()));
1200
- EXPECT_TRUE(noexcept(sp.length()));
1201
- EXPECT_TRUE(noexcept(sp.empty()));
1202
- EXPECT_TRUE(noexcept(sp.data()));
1203
- EXPECT_TRUE(noexcept(sp.compare(sp)));
1204
- EXPECT_TRUE(noexcept(sp.find(sp)));
1205
- EXPECT_TRUE(noexcept(sp.find('f')));
1206
- EXPECT_TRUE(noexcept(sp.rfind(sp)));
1207
- EXPECT_TRUE(noexcept(sp.rfind('f')));
1208
- EXPECT_TRUE(noexcept(sp.find_first_of(sp)));
1209
- EXPECT_TRUE(noexcept(sp.find_first_of('f')));
1210
- EXPECT_TRUE(noexcept(sp.find_last_of(sp)));
1211
- EXPECT_TRUE(noexcept(sp.find_last_of('f')));
1212
- EXPECT_TRUE(noexcept(sp.find_first_not_of(sp)));
1213
- EXPECT_TRUE(noexcept(sp.find_first_not_of('f')));
1214
- EXPECT_TRUE(noexcept(sp.find_last_not_of(sp)));
1215
- EXPECT_TRUE(noexcept(sp.find_last_not_of('f')));
1216
- }
1217
-
1218
- TEST(StringViewTest, BoundsCheck) {
1219
- #ifndef ABSL_USES_STD_STRING_VIEW
1220
- #if !defined(NDEBUG) || ABSL_OPTION_HARDENED
1221
- // Abseil's string_view implementation has bounds-checking in debug mode.
1222
- absl::string_view h = "hello";
1223
- ABSL_EXPECT_DEATH_IF_SUPPORTED(h[5], "");
1224
- ABSL_EXPECT_DEATH_IF_SUPPORTED(h[static_cast<size_t>(-1)], "");
1225
- #endif
1226
- #endif
1227
- }
1228
-
1229
- TEST(ComparisonOpsTest, StringCompareNotAmbiguous) {
1230
- EXPECT_EQ("hello", std::string("hello"));
1231
- EXPECT_LT("hello", std::string("world"));
1232
- }
1233
-
1234
- TEST(ComparisonOpsTest, HeterogeneousStringViewEquals) {
1235
- EXPECT_EQ(absl::string_view("hello"), std::string("hello"));
1236
- EXPECT_EQ("hello", absl::string_view("hello"));
1237
- }
1238
-
1239
- TEST(FindOneCharTest, EdgeCases) {
1240
- absl::string_view a("xxyyyxx");
1241
-
1242
- // Set a = "xyyyx".
1243
- a.remove_prefix(1);
1244
- a.remove_suffix(1);
1245
-
1246
- EXPECT_EQ(0u, a.find('x'));
1247
- EXPECT_EQ(0u, a.find('x', 0));
1248
- EXPECT_EQ(4u, a.find('x', 1));
1249
- EXPECT_EQ(4u, a.find('x', 4));
1250
- EXPECT_EQ(absl::string_view::npos, a.find('x', 5));
1251
-
1252
- EXPECT_EQ(4u, a.rfind('x'));
1253
- EXPECT_EQ(4u, a.rfind('x', 5));
1254
- EXPECT_EQ(4u, a.rfind('x', 4));
1255
- EXPECT_EQ(0u, a.rfind('x', 3));
1256
- EXPECT_EQ(0u, a.rfind('x', 0));
1257
-
1258
- // Set a = "yyy".
1259
- a.remove_prefix(1);
1260
- a.remove_suffix(1);
1261
-
1262
- EXPECT_EQ(absl::string_view::npos, a.find('x'));
1263
- EXPECT_EQ(absl::string_view::npos, a.rfind('x'));
1264
- }
1265
-
1266
- #ifndef ABSL_HAVE_THREAD_SANITIZER // Allocates too much memory for tsan.
1267
- TEST(HugeStringView, TwoPointTwoGB) {
1268
- if (sizeof(size_t) <= 4)
1269
- return;
1270
- // Try a huge string piece.
1271
- const size_t size = size_t{2200} * 1000 * 1000;
1272
- std::string s(size, 'a');
1273
- absl::string_view sp(s);
1274
- EXPECT_EQ(size, sp.length());
1275
- sp.remove_prefix(1);
1276
- EXPECT_EQ(size - 1, sp.length());
1277
- sp.remove_suffix(2);
1278
- EXPECT_EQ(size - 1 - 2, sp.length());
1279
- }
1280
- #endif // ABSL_HAVE_THREAD_SANITIZER
1281
-
1282
- #if !defined(NDEBUG) && !defined(ABSL_USES_STD_STRING_VIEW)
1283
- TEST(NonNegativeLenTest, NonNegativeLen) {
1284
- ABSL_EXPECT_DEATH_IF_SUPPORTED(
1285
- absl::string_view("xyz", static_cast<size_t>(-1)), "len <= kMaxSize");
1286
- }
1287
-
1288
- TEST(LenExceedsMaxSizeTest, LenExceedsMaxSize) {
1289
- auto max_size = absl::string_view().max_size();
1290
-
1291
- // This should construct ok (although the view itself is obviously invalid).
1292
- absl::string_view ok_view("", max_size);
1293
-
1294
- // Adding one to the max should trigger an assertion.
1295
- ABSL_EXPECT_DEATH_IF_SUPPORTED(absl::string_view("", max_size + 1),
1296
- "len <= kMaxSize");
1297
- }
1298
- #endif // !defined(NDEBUG) && !defined(ABSL_USES_STD_STRING_VIEW)
1299
-
1300
- class StringViewStreamTest : public ::testing::Test {
1301
- public:
1302
- // Set negative 'width' for right justification.
1303
- template <typename T>
1304
- std::string Pad(const T& s, int width, char fill = 0) {
1305
- std::ostringstream oss;
1306
- if (fill != 0) {
1307
- oss << std::setfill(fill);
1308
- }
1309
- if (width < 0) {
1310
- width = -width;
1311
- oss << std::right;
1312
- }
1313
- oss << std::setw(width) << s;
1314
- return oss.str();
1315
- }
1316
- };
1317
-
1318
- TEST_F(StringViewStreamTest, Padding) {
1319
- std::string s("hello");
1320
- absl::string_view sp(s);
1321
- for (int w = -64; w < 64; ++w) {
1322
- SCOPED_TRACE(w);
1323
- EXPECT_EQ(Pad(s, w), Pad(sp, w));
1324
- }
1325
- for (int w = -64; w < 64; ++w) {
1326
- SCOPED_TRACE(w);
1327
- EXPECT_EQ(Pad(s, w, '#'), Pad(sp, w, '#'));
1328
- }
1329
- }
1330
-
1331
- TEST_F(StringViewStreamTest, ResetsWidth) {
1332
- // Width should reset after one formatted write.
1333
- // If we weren't resetting width after formatting the string_view,
1334
- // we'd have width=5 carrying over to the printing of the "]",
1335
- // creating "[###hi####]".
1336
- std::string s = "hi";
1337
- absl::string_view sp = s;
1338
- {
1339
- std::ostringstream oss;
1340
- oss << "[" << std::setfill('#') << std::setw(5) << s << "]";
1341
- ASSERT_EQ("[###hi]", oss.str());
1342
- }
1343
- {
1344
- std::ostringstream oss;
1345
- oss << "[" << std::setfill('#') << std::setw(5) << sp << "]";
1346
- EXPECT_EQ("[###hi]", oss.str());
1347
- }
1348
- }
1349
-
1350
86
  } // namespace