protovalidate 0.1.0.beta1

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 (1827) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +8 -0
  3. data/CHANGELOG.md +5 -0
  4. data/LICENSE.txt +201 -0
  5. data/NOTICE.md +30 -0
  6. data/README.md +93 -0
  7. data/Rakefile +32 -0
  8. data/ext/protovalidate/Cargo.lock +342 -0
  9. data/ext/protovalidate/Cargo.toml +27 -0
  10. data/ext/protovalidate/build.rs +4 -0
  11. data/ext/protovalidate/extconf.rb +8 -0
  12. data/ext/protovalidate/src/lib.rs +161 -0
  13. data/ext/protovalidate/sys/Cargo.toml +11 -0
  14. data/ext/protovalidate/sys/build.rs +218 -0
  15. data/ext/protovalidate/sys/filelists/absl.txt +126 -0
  16. data/ext/protovalidate/sys/filelists/antlr4.txt +139 -0
  17. data/ext/protovalidate/sys/filelists/celcpp.txt +199 -0
  18. data/ext/protovalidate/sys/filelists/protobuf.txt +83 -0
  19. data/ext/protovalidate/sys/filelists/protovalidate.txt +14 -0
  20. data/ext/protovalidate/sys/filelists/re2.txt +25 -0
  21. data/ext/protovalidate/sys/gen/buf/validate/validate.pb.cc +23621 -0
  22. data/ext/protovalidate/sys/gen/buf/validate/validate.pb.h +27800 -0
  23. data/ext/protovalidate/sys/gen/cel/expr/checked.pb.cc +6286 -0
  24. data/ext/protovalidate/sys/gen/cel/expr/checked.pb.h +6412 -0
  25. data/ext/protovalidate/sys/gen/cel/expr/syntax.pb.cc +7423 -0
  26. data/ext/protovalidate/sys/gen/cel/expr/syntax.pb.h +7510 -0
  27. data/ext/protovalidate/sys/gen/cel/expr/value.pb.cc +2512 -0
  28. data/ext/protovalidate/sys/gen/cel/expr/value.pb.h +2589 -0
  29. data/ext/protovalidate/sys/gen/internal/empty_descriptor_set_embed.inc +1 -0
  30. data/ext/protovalidate/sys/gen/parser/internal/CelBaseVisitor.cpp +9 -0
  31. data/ext/protovalidate/sys/gen/parser/internal/CelBaseVisitor.h +167 -0
  32. data/ext/protovalidate/sys/gen/parser/internal/CelLexer.cpp +308 -0
  33. data/ext/protovalidate/sys/gen/parser/internal/CelLexer.h +57 -0
  34. data/ext/protovalidate/sys/gen/parser/internal/CelParser.cpp +2484 -0
  35. data/ext/protovalidate/sys/gen/parser/internal/CelParser.h +697 -0
  36. data/ext/protovalidate/sys/gen/parser/internal/CelVisitor.cpp +9 -0
  37. data/ext/protovalidate/sys/gen/parser/internal/CelVisitor.h +98 -0
  38. data/ext/protovalidate/sys/shim/pv_shim.cc +260 -0
  39. data/ext/protovalidate/sys/shim/pv_shim.h +84 -0
  40. data/ext/protovalidate/sys/src/lib.rs +176 -0
  41. data/ext/protovalidate/sys/third_party/abseil-cpp/LICENSE +203 -0
  42. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/algorithm/algorithm.h +96 -0
  43. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/algorithm/container.h +2011 -0
  44. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/attributes.h +1100 -0
  45. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/call_once.h +228 -0
  46. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  47. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/casts.h +313 -0
  48. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/config.h +898 -0
  49. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  50. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/dynamic_annotations.h +480 -0
  51. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/fast_type_id.h +73 -0
  52. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  53. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/atomic_hook_test_helper.h +34 -0
  54. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +72 -0
  55. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/cycleclock.h +144 -0
  56. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  57. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +170 -0
  58. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  59. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/endian.h +279 -0
  60. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  61. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/exception_safety_testing.h +1112 -0
  62. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/exception_testing.h +42 -0
  63. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  64. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  65. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +75 -0
  66. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  67. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +667 -0
  68. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +133 -0
  69. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +196 -0
  70. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/nullability_traits.h +71 -0
  71. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  72. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/poison.h +59 -0
  73. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/pretty_function.h +33 -0
  74. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +279 -0
  75. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/raw_logging.h +217 -0
  76. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  77. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/scoped_set_env.h +45 -0
  78. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock.cc +225 -0
  79. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock.h +310 -0
  80. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  81. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +71 -0
  82. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  83. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  84. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +95 -0
  85. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +40 -0
  86. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  87. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  88. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +493 -0
  89. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/sysinfo.h +74 -0
  90. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +163 -0
  91. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/thread_identity.h +325 -0
  92. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/tracing.cc +39 -0
  93. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/tracing.h +81 -0
  94. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +68 -0
  95. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +89 -0
  96. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +134 -0
  97. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +118 -0
  98. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  99. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/log_severity.cc +56 -0
  100. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/log_severity.h +185 -0
  101. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/macros.h +259 -0
  102. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/no_destructor.h +191 -0
  103. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/nullability.h +318 -0
  104. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/optimization.h +311 -0
  105. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/options.h +212 -0
  106. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/policy_checks.h +115 -0
  107. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/port.h +25 -0
  108. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/prefetch.h +209 -0
  109. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/thread_annotations.h +333 -0
  110. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/throw_delegate.cc +205 -0
  111. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/base/throw_delegate.h +65 -0
  112. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/cleanup/cleanup.h +143 -0
  113. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  114. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/btree_map.h +941 -0
  115. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/btree_set.h +872 -0
  116. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/chunked_queue.h +757 -0
  117. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/fixed_array.h +548 -0
  118. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/flat_hash_map.h +714 -0
  119. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/flat_hash_set.h +604 -0
  120. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/hash_container_defaults.h +45 -0
  121. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/inlined_vector.h +1025 -0
  122. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/btree.h +3157 -0
  123. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/btree_container.h +875 -0
  124. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/chunked_queue.h +173 -0
  125. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/common.h +302 -0
  126. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +151 -0
  127. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +275 -0
  128. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/container_memory.h +571 -0
  129. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +281 -0
  130. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hash_generator_testing.h +172 -0
  131. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hash_policy_testing.h +173 -0
  132. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +195 -0
  133. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  134. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtable_debug.h +102 -0
  135. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  136. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +316 -0
  137. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +294 -0
  138. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +31 -0
  139. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +80 -0
  140. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +1094 -0
  141. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/layout.h +828 -0
  142. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  143. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +380 -0
  144. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +2110 -0
  145. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +4056 -0
  146. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  147. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/test_allocator.h +387 -0
  148. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/test_instance_tracker.h +274 -0
  149. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/internal/tracked.h +83 -0
  150. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/linked_hash_map.h +666 -0
  151. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/linked_hash_set.h +527 -0
  152. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/node_hash_map.h +710 -0
  153. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/container/node_hash_set.h +603 -0
  154. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/crc32c.cc +95 -0
  155. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/crc32c.h +192 -0
  156. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +359 -0
  157. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +69 -0
  158. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc.cc +435 -0
  159. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc.h +83 -0
  160. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +319 -0
  161. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  162. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  163. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +131 -0
  164. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  165. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +161 -0
  166. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +122 -0
  167. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +78 -0
  168. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +459 -0
  169. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  170. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +824 -0
  171. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +81 -0
  172. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +195 -0
  173. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/failure_signal_handler.h +121 -0
  174. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +98 -0
  175. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  176. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  177. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/bounded_utf8_length_sequence.h +126 -0
  178. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +258 -0
  179. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +55 -0
  180. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2958 -0
  181. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/demangle.h +76 -0
  182. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +925 -0
  183. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +50 -0
  184. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +413 -0
  185. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +141 -0
  186. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +334 -0
  187. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +70 -0
  188. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stack_consumption.h +50 -0
  189. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +299 -0
  190. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +148 -0
  191. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +96 -0
  192. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +121 -0
  193. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +121 -0
  194. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +270 -0
  195. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +208 -0
  196. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +25 -0
  197. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +81 -0
  198. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +410 -0
  199. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +163 -0
  200. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/utf8_for_code_point.cc +70 -0
  201. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/utf8_for_code_point.h +47 -0
  202. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +209 -0
  203. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  204. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/leak_check.cc +73 -0
  205. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/leak_check.h +150 -0
  206. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/stacktrace.cc +204 -0
  207. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/stacktrace.h +259 -0
  208. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize.cc +62 -0
  209. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  210. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +102 -0
  211. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1708 -0
  212. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +63 -0
  213. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  214. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +99 -0
  215. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/commandlineflag.h +220 -0
  216. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/config.h +68 -0
  217. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/declare.h +77 -0
  218. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/flag.h +307 -0
  219. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  220. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/flag.h +969 -0
  221. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/parse.h +70 -0
  222. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  223. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +64 -0
  224. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  225. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/registry.h +98 -0
  226. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  227. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/internal/usage.h +106 -0
  228. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/marshalling.h +335 -0
  229. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/parse.h +130 -0
  230. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  231. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/usage.h +43 -0
  232. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  233. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/any_invocable.h +335 -0
  234. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/bind_back.h +79 -0
  235. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/bind_front.h +200 -0
  236. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/function_ref.h +249 -0
  237. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +787 -0
  238. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
  239. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/internal/front_binder.h +93 -0
  240. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/internal/function_ref.h +151 -0
  241. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/functional/overload.h +72 -0
  242. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/hash.h +466 -0
  243. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/hash_testing.h +382 -0
  244. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/city.cc +337 -0
  245. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/city.h +78 -0
  246. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/hash.cc +430 -0
  247. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/hash.h +1619 -0
  248. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/spy_hash_state.h +289 -0
  249. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  250. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/absl_check.h +117 -0
  251. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/absl_log.h +115 -0
  252. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +93 -0
  253. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/check.h +210 -0
  254. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/check_test_impl.inc +1035 -0
  255. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/die_if_null.cc +34 -0
  256. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/die_if_null.h +97 -0
  257. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/flags.h +43 -0
  258. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/globals.cc +178 -0
  259. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/globals.h +230 -0
  260. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/initialize.h +45 -0
  261. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/append_truncated.h +75 -0
  262. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/check_impl.h +151 -0
  263. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/check_op.cc +147 -0
  264. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/check_op.h +565 -0
  265. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/conditions.cc +85 -0
  266. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/conditions.h +247 -0
  267. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/config.h +45 -0
  268. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/container.h +312 -0
  269. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/flags.h +59 -0
  270. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/fnmatch.cc +73 -0
  271. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/fnmatch.h +35 -0
  272. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/globals.cc +145 -0
  273. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/globals.h +101 -0
  274. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_format.cc +205 -0
  275. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_format.h +78 -0
  276. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_impl.h +280 -0
  277. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_message.cc +788 -0
  278. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_message.h +469 -0
  279. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +296 -0
  280. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/log_sink_set.h +54 -0
  281. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/nullguard.cc +35 -0
  282. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/nullguard.h +88 -0
  283. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/nullstream.h +128 -0
  284. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/proto.cc +231 -0
  285. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/proto.h +298 -0
  286. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/strip.h +99 -0
  287. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/structured.h +160 -0
  288. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +115 -0
  289. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/structured_proto.h +108 -0
  290. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/test_actions.h +90 -0
  291. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/test_helpers.h +71 -0
  292. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/test_matchers.h +94 -0
  293. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +347 -0
  294. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/vlog_config.h +164 -0
  295. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/internal/voidify.h +50 -0
  296. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log.h +378 -0
  297. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_basic_test_impl.inc +654 -0
  298. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  299. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_entry.h +223 -0
  300. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_sink.cc +23 -0
  301. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_sink.h +71 -0
  302. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_sink_registry.h +64 -0
  303. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/log_streamer.h +208 -0
  304. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/scoped_mock_log.h +203 -0
  305. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/structured.h +75 -0
  306. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/log/vlog_is_on.h +72 -0
  307. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/memory/memory.h +328 -0
  308. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/meta/internal/constexpr_testing.h +73 -0
  309. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/meta/internal/requires.h +67 -0
  310. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/meta/type_traits.h +646 -0
  311. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/bits.h +262 -0
  312. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/int128.cc +344 -0
  313. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/int128.h +1224 -0
  314. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +303 -0
  315. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +347 -0
  316. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/internal/bits.h +394 -0
  317. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  318. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/hashtable.h +40 -0
  319. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  320. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  321. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/internal/periodic_sampler.h +211 -0
  322. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/internal/profile_builder.h +161 -0
  323. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +253 -0
  324. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +202 -0
  325. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/beta_distribution.h +429 -0
  326. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/bit_gen_ref.h +160 -0
  327. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/discrete_distribution.h +249 -0
  328. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/distributions.h +450 -0
  329. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/exponential_distribution.h +166 -0
  330. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/gaussian_distribution.h +276 -0
  331. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/chi_square.h +89 -0
  332. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +83 -0
  333. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/distribution_test_util.h +113 -0
  334. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  335. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/explicit_seed_seq.h +92 -0
  336. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +271 -0
  337. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  338. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  339. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +248 -0
  340. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/mock_helpers.h +134 -0
  341. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/mock_overload_set.h +122 -0
  342. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/mock_validators.h +98 -0
  343. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/nanobenchmark.h +172 -0
  344. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +160 -0
  345. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +287 -0
  346. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/platform.h +158 -0
  347. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
  348. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  349. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen_engine.h +265 -0
  350. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  351. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  352. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  353. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +166 -0
  354. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/seed_material.h +105 -0
  355. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/sequence_urbg.h +60 -0
  356. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/traits.h +170 -0
  357. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  358. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +95 -0
  359. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +253 -0
  360. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/mock_distributions.h +269 -0
  361. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  362. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/mocking_bit_gen.h +227 -0
  363. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/poisson_distribution.h +262 -0
  364. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/random.h +224 -0
  365. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  366. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/seed_sequences.h +112 -0
  367. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +276 -0
  368. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +204 -0
  369. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/random/zipf_distribution.h +273 -0
  370. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/internal/status_internal.cc +296 -0
  371. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/internal/status_internal.h +157 -0
  372. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/internal/status_matchers.h +260 -0
  373. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +657 -0
  374. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status.cc +413 -0
  375. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status.h +1174 -0
  376. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status_builder.h +978 -0
  377. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status_macros.h +484 -0
  378. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status_matchers.h +167 -0
  379. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status_payload_printer.cc +36 -0
  380. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/status_payload_printer.h +53 -0
  381. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/statusor.cc +106 -0
  382. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/status/statusor.h +776 -0
  383. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/ascii.cc +296 -0
  384. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/ascii.h +288 -0
  385. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/charconv.cc +1442 -0
  386. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/charconv.h +123 -0
  387. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/charset.h +163 -0
  388. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord.cc +1601 -0
  389. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord.h +1773 -0
  390. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord_analysis.cc +196 -0
  391. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord_analysis.h +63 -0
  392. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord_buffer.h +574 -0
  393. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cord_test_helpers.h +122 -0
  394. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/cordz_test_helpers.h +152 -0
  395. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/escaping.cc +1183 -0
  396. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/escaping.h +195 -0
  397. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/has_absl_stringify.h +64 -0
  398. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/has_ostream_operator.h +42 -0
  399. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  400. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +357 -0
  401. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +433 -0
  402. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  403. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  404. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  405. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +70 -0
  406. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +942 -0
  407. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1237 -0
  408. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +944 -0
  409. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  410. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  411. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  412. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  413. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +64 -0
  414. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +47 -0
  415. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  416. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  417. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +195 -0
  418. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cord_rep_test_util.h +205 -0
  419. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +102 -0
  420. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +87 -0
  421. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +165 -0
  422. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +98 -0
  423. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +424 -0
  424. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +295 -0
  425. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_sample_token.h +97 -0
  426. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  427. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  428. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  429. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +99 -0
  430. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +35 -0
  431. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/escaping.cc +68 -0
  432. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/escaping.h +35 -0
  433. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/escaping_test_common.h +133 -0
  434. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/generic_printer.h +115 -0
  435. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/generic_printer_internal.h +444 -0
  436. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/memutil.cc +48 -0
  437. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/memutil.h +40 -0
  438. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/numbers_test_common.h +184 -0
  439. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +43 -0
  440. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +114 -0
  441. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/pow10_helper.h +40 -0
  442. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +114 -0
  443. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  444. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +615 -0
  445. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +653 -0
  446. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +275 -0
  447. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +237 -0
  448. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +98 -0
  449. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +357 -0
  450. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +53 -0
  451. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +456 -0
  452. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +2148 -0
  453. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +37 -0
  454. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +74 -0
  455. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +97 -0
  456. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +140 -0
  457. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +271 -0
  458. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +340 -0
  459. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +524 -0
  460. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/string_constant.h +67 -0
  461. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  462. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +69 -0
  463. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
  464. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/utf8.cc +148 -0
  465. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/internal/utf8.h +64 -0
  466. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/match.cc +133 -0
  467. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/match.h +129 -0
  468. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/numbers.cc +1636 -0
  469. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/numbers.h +363 -0
  470. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  471. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_cat.cc +247 -0
  472. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_cat.h +668 -0
  473. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_format.h +887 -0
  474. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_join.h +301 -0
  475. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_replace.cc +91 -0
  476. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_replace.h +222 -0
  477. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_split.cc +144 -0
  478. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/str_split.h +587 -0
  479. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/string_view.h +60 -0
  480. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/strip.h +99 -0
  481. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/substitute.cc +187 -0
  482. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/strings/substitute.h +769 -0
  483. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  484. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  485. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +73 -0
  486. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +107 -0
  487. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +173 -0
  488. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +56 -0
  489. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/futex.h +177 -0
  490. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +107 -0
  491. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.h +63 -0
  492. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +714 -0
  493. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +146 -0
  494. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +220 -0
  495. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +178 -0
  496. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  497. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +124 -0
  498. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +163 -0
  499. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.h +60 -0
  500. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +118 -0
  501. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.h +65 -0
  502. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +87 -0
  503. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.h +56 -0
  504. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/thread_pool.h +96 -0
  505. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +69 -0
  506. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +38 -0
  507. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.h +90 -0
  508. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +147 -0
  509. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.h +72 -0
  510. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/mutex.cc +2833 -0
  511. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/mutex.h +1352 -0
  512. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/notification.cc +85 -0
  513. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/synchronization/notification.h +133 -0
  514. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/civil_time.cc +200 -0
  515. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/civil_time.h +589 -0
  516. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/clock.cc +603 -0
  517. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/clock.h +81 -0
  518. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/clock_interface.h +93 -0
  519. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/duration.cc +918 -0
  520. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/format.cc +155 -0
  521. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  522. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +644 -0
  523. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +460 -0
  524. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  525. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  526. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  527. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  528. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  529. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1069 -0
  530. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +47 -0
  531. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +80 -0
  532. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +115 -0
  533. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +97 -0
  534. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +1070 -0
  535. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +128 -0
  536. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +333 -0
  537. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +60 -0
  538. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +217 -0
  539. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  540. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  541. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  542. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  543. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +115 -0
  544. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +116 -0
  545. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  546. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  547. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/internal/test_util.h +33 -0
  548. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/simulated_clock.h +109 -0
  549. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/time.cc +507 -0
  550. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/time/time.h +1926 -0
  551. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/any.h +66 -0
  552. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/any_span.h +1067 -0
  553. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/compare.h +506 -0
  554. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/internal/any_span.h +477 -0
  555. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/internal/span.h +140 -0
  556. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/optional.h +68 -0
  557. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  558. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/source_location.cc +18 -0
  559. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  560. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/span.h +827 -0
  561. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/types/variant.h +139 -0
  562. data/ext/protovalidate/sys/third_party/abseil-cpp/absl/utility/utility.h +151 -0
  563. data/ext/protovalidate/sys/third_party/antlr4/LICENSE.txt +28 -0
  564. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRErrorListener.cpp +10 -0
  565. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRErrorListener.h +167 -0
  566. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRErrorStrategy.cpp +10 -0
  567. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRErrorStrategy.h +121 -0
  568. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +23 -0
  569. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRFileStream.h +30 -0
  570. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +180 -0
  571. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ANTLRInputStream.h +79 -0
  572. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BailErrorStrategy.cpp +61 -0
  573. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BailErrorStrategy.h +59 -0
  574. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BaseErrorListener.cpp +25 -0
  575. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BaseErrorListener.h +36 -0
  576. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BufferedTokenStream.cpp +414 -0
  577. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/BufferedTokenStream.h +200 -0
  578. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CharStream.cpp +11 -0
  579. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CharStream.h +37 -0
  580. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonToken.cpp +193 -0
  581. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonToken.h +158 -0
  582. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonTokenFactory.cpp +39 -0
  583. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonTokenFactory.h +74 -0
  584. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonTokenStream.cpp +78 -0
  585. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/CommonTokenStream.h +79 -0
  586. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ConsoleErrorListener.cpp +15 -0
  587. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ConsoleErrorListener.h +35 -0
  588. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/DefaultErrorStrategy.cpp +336 -0
  589. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/DefaultErrorStrategy.h +466 -0
  590. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/DiagnosticErrorListener.cpp +84 -0
  591. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/DiagnosticErrorListener.h +80 -0
  592. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Exceptions.cpp +64 -0
  593. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Exceptions.h +99 -0
  594. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/FailedPredicateException.cpp +52 -0
  595. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/FailedPredicateException.h +32 -0
  596. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/FlatHashMap.h +57 -0
  597. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/FlatHashSet.h +57 -0
  598. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/InputMismatchException.cpp +18 -0
  599. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/InputMismatchException.h +24 -0
  600. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/IntStream.cpp +12 -0
  601. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/IntStream.h +218 -0
  602. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/InterpreterRuleContext.cpp +19 -0
  603. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/InterpreterRuleContext.h +45 -0
  604. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Lexer.cpp +294 -0
  605. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Lexer.h +196 -0
  606. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/LexerInterpreter.cpp +60 -0
  607. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/LexerInterpreter.h +46 -0
  608. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/LexerNoViableAltException.cpp +36 -0
  609. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/LexerNoViableAltException.h +31 -0
  610. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ListTokenSource.cpp +92 -0
  611. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ListTokenSource.h +88 -0
  612. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/NoViableAltException.cpp +46 -0
  613. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/NoViableAltException.h +42 -0
  614. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Parser.cpp +670 -0
  615. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Parser.h +461 -0
  616. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ParserInterpreter.cpp +294 -0
  617. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ParserInterpreter.h +173 -0
  618. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ParserRuleContext.cpp +138 -0
  619. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ParserRuleContext.h +147 -0
  620. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ProxyErrorListener.cpp +53 -0
  621. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/ProxyErrorListener.h +38 -0
  622. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RecognitionException.cpp +65 -0
  623. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RecognitionException.h +98 -0
  624. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Recognizer.cpp +157 -0
  625. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Recognizer.h +160 -0
  626. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuleContext.cpp +144 -0
  627. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuleContext.h +141 -0
  628. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuleContextWithAltNum.cpp +27 -0
  629. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuleContextWithAltNum.h +32 -0
  630. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +54 -0
  631. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/RuntimeMetaData.h +155 -0
  632. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Token.cpp +9 -0
  633. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Token.h +92 -0
  634. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenFactory.h +30 -0
  635. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenSource.cpp +9 -0
  636. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenSource.h +85 -0
  637. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenStream.cpp +11 -0
  638. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenStream.h +137 -0
  639. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +428 -0
  640. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/TokenStreamRewriter.h +295 -0
  641. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/UnbufferedCharStream.cpp +208 -0
  642. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/UnbufferedCharStream.h +117 -0
  643. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/UnbufferedTokenStream.cpp +270 -0
  644. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/UnbufferedTokenStream.h +115 -0
  645. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Version.h +42 -0
  646. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Vocabulary.cpp +64 -0
  647. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/Vocabulary.h +177 -0
  648. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/WritableToken.cpp +9 -0
  649. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/WritableToken.h +23 -0
  650. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/antlr4-common.h +101 -0
  651. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/antlr4-runtime.h +168 -0
  652. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATN.cpp +159 -0
  653. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATN.h +133 -0
  654. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +106 -0
  655. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNConfig.h +157 -0
  656. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNConfigSet.cpp +233 -0
  657. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNConfigSet.h +157 -0
  658. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.cpp +39 -0
  659. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNDeserializationOptions.h +48 -0
  660. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +628 -0
  661. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +32 -0
  662. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNSimulator.cpp +33 -0
  663. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNSimulator.h +71 -0
  664. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNState.cpp +56 -0
  665. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNState.h +139 -0
  666. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNStateType.cpp +33 -0
  667. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNStateType.h +36 -0
  668. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ATNType.h +20 -0
  669. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ActionTransition.cpp +29 -0
  670. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ActionTransition.h +35 -0
  671. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/AmbiguityInfo.cpp +16 -0
  672. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/AmbiguityInfo.h +68 -0
  673. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.cpp +129 -0
  674. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ArrayPredictionContext.h +51 -0
  675. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/AtomTransition.cpp +27 -0
  676. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/AtomTransition.h +33 -0
  677. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/BasicBlockStartState.h +24 -0
  678. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/BasicState.h +23 -0
  679. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/BlockEndState.h +26 -0
  680. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/BlockStartState.h +30 -0
  681. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.cpp +14 -0
  682. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ContextSensitivityInfo.h +47 -0
  683. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionEventInfo.cpp +14 -0
  684. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionEventInfo.h +70 -0
  685. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionInfo.cpp +25 -0
  686. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionInfo.h +227 -0
  687. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionState.cpp +12 -0
  688. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/DecisionState.h +34 -0
  689. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/EpsilonTransition.cpp +31 -0
  690. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/EpsilonTransition.h +42 -0
  691. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ErrorInfo.cpp +15 -0
  692. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ErrorInfo.h +43 -0
  693. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/HashUtils.h +18 -0
  694. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +189 -0
  695. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +76 -0
  696. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerATNConfig.cpp +67 -0
  697. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerATNConfig.h +44 -0
  698. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerATNSimulator.cpp +621 -0
  699. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +199 -0
  700. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerAction.cpp +15 -0
  701. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerAction.h +100 -0
  702. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerActionExecutor.cpp +108 -0
  703. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerActionExecutor.h +128 -0
  704. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerActionType.h +57 -0
  705. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerChannelAction.cpp +43 -0
  706. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerChannelAction.h +59 -0
  707. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerCustomAction.cpp +45 -0
  708. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerCustomAction.h +75 -0
  709. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.cpp +50 -0
  710. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerIndexedCustomAction.h +76 -0
  711. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerModeAction.cpp +43 -0
  712. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerModeAction.h +57 -0
  713. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerMoreAction.cpp +36 -0
  714. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerMoreAction.h +53 -0
  715. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerPopModeAction.cpp +36 -0
  716. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerPopModeAction.h +53 -0
  717. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerPushModeAction.cpp +43 -0
  718. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerPushModeAction.h +57 -0
  719. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerSkipAction.cpp +36 -0
  720. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerSkipAction.h +51 -0
  721. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerTypeAction.cpp +43 -0
  722. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LexerTypeAction.h +51 -0
  723. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.cpp +16 -0
  724. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LookaheadEventInfo.h +42 -0
  725. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/LoopEndState.h +26 -0
  726. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/NotSetTransition.cpp +22 -0
  727. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/NotSetTransition.h +27 -0
  728. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.cpp +16 -0
  729. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/OrderedATNConfigSet.h +25 -0
  730. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ParseInfo.cpp +102 -0
  731. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ParseInfo.h +102 -0
  732. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +1413 -0
  733. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ParserATNSimulator.h +911 -0
  734. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ParserATNSimulatorOptions.h +50 -0
  735. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PlusBlockStartState.h +29 -0
  736. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PlusLoopbackState.h +25 -0
  737. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.cpp +23 -0
  738. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PrecedencePredicateTransition.h +35 -0
  739. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.cpp +17 -0
  740. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredicateEvalInfo.h +62 -0
  741. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredicateTransition.cpp +24 -0
  742. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredicateTransition.h +50 -0
  743. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContext.cpp +601 -0
  744. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContext.h +225 -0
  745. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextCache.cpp +56 -0
  746. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextCache.h +63 -0
  747. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.cpp +167 -0
  748. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextMergeCache.h +101 -0
  749. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextMergeCacheOptions.h +71 -0
  750. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionContextType.h +21 -0
  751. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionMode.cpp +202 -0
  752. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/PredictionMode.h +436 -0
  753. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.cpp +179 -0
  754. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/ProfilingATNSimulator.h +60 -0
  755. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RangeTransition.cpp +26 -0
  756. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RangeTransition.h +31 -0
  757. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RuleStartState.h +26 -0
  758. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RuleStopState.h +27 -0
  759. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RuleTransition.cpp +33 -0
  760. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/RuleTransition.h +42 -0
  761. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SemanticContext.cpp +418 -0
  762. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SemanticContext.h +237 -0
  763. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SemanticContextType.h +23 -0
  764. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SerializedATNView.h +101 -0
  765. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SetTransition.cpp +28 -0
  766. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SetTransition.h +38 -0
  767. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.cpp +79 -0
  768. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/SingletonPredictionContext.h +43 -0
  769. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/StarBlockStartState.h +24 -0
  770. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/StarLoopEntryState.h +37 -0
  771. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/StarLoopbackState.cpp +19 -0
  772. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/StarLoopbackState.h +25 -0
  773. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/TokensStartState.h +24 -0
  774. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/Transition.cpp +36 -0
  775. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/Transition.h +65 -0
  776. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/TransitionType.cpp +27 -0
  777. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/TransitionType.h +33 -0
  778. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/WildcardTransition.cpp +21 -0
  779. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/atn/WildcardTransition.h +27 -0
  780. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFA.cpp +115 -0
  781. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFA.h +96 -0
  782. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +60 -0
  783. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFASerializer.h +32 -0
  784. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFAState.cpp +59 -0
  785. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/DFAState.h +154 -0
  786. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.cpp +17 -0
  787. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/dfa/LexerDFASerializer.h +22 -0
  788. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/internal/Synchronization.cpp +100 -0
  789. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/internal/Synchronization.h +154 -0
  790. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/InterpreterDataReader.cpp +124 -0
  791. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/InterpreterDataReader.h +33 -0
  792. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/Interval.cpp +61 -0
  793. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/Interval.h +84 -0
  794. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +508 -0
  795. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/IntervalSet.h +190 -0
  796. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/MurmurHash.cpp +120 -0
  797. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/MurmurHash.h +102 -0
  798. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/Predicate.cpp +4 -0
  799. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/misc/Predicate.h +21 -0
  800. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Any.cpp +8 -0
  801. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Any.h +16 -0
  802. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Arrays.cpp +43 -0
  803. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Arrays.h +149 -0
  804. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/BitSet.h +76 -0
  805. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/CPPUtils.cpp +207 -0
  806. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/CPPUtils.h +65 -0
  807. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Casts.h +34 -0
  808. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Declarations.h +161 -0
  809. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/StringUtils.cpp +38 -0
  810. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/StringUtils.h +16 -0
  811. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Unicode.h +28 -0
  812. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Utf8.cpp +242 -0
  813. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/support/Utf8.h +54 -0
  814. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/AbstractParseTreeVisitor.h +129 -0
  815. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ErrorNode.h +24 -0
  816. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.cpp +54 -0
  817. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ErrorNodeImpl.h +43 -0
  818. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.cpp +66 -0
  819. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/IterativeParseTreeWalker.h +53 -0
  820. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTree.cpp +12 -0
  821. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTree.h +111 -0
  822. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeListener.cpp +9 -0
  823. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeListener.h +39 -0
  824. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeProperty.h +50 -0
  825. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeType.h +22 -0
  826. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.cpp +9 -0
  827. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeVisitor.h +57 -0
  828. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeWalker.cpp +48 -0
  829. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +55 -0
  830. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/TerminalNode.h +40 -0
  831. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.cpp +54 -0
  832. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/TerminalNodeImpl.h +32 -0
  833. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/Trees.cpp +241 -0
  834. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/Trees.h +78 -0
  835. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/Chunk.cpp +9 -0
  836. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/Chunk.h +44 -0
  837. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.cpp +69 -0
  838. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreeMatch.h +132 -0
  839. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp +64 -0
  840. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.h +105 -0
  841. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp +370 -0
  842. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.h +185 -0
  843. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.cpp +77 -0
  844. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/RuleTagToken.h +117 -0
  845. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TagChunk.cpp +39 -0
  846. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TagChunk.h +86 -0
  847. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TextChunk.cpp +28 -0
  848. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TextChunk.h +51 -0
  849. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.cpp +36 -0
  850. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/pattern/TokenTagToken.h +80 -0
  851. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPath.cpp +154 -0
  852. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPath.h +86 -0
  853. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathElement.cpp +31 -0
  854. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathElement.h +40 -0
  855. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.cpp +180 -0
  856. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathLexer.h +53 -0
  857. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.cpp +13 -0
  858. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathLexerErrorListener.h +22 -0
  859. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.cpp +20 -0
  860. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathRuleAnywhereElement.h +27 -0
  861. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp +30 -0
  862. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.h +26 -0
  863. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.cpp +20 -0
  864. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathTokenAnywhereElement.h +25 -0
  865. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp +33 -0
  866. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.h +26 -0
  867. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.cpp +23 -0
  868. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardAnywhereElement.h +23 -0
  869. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.cpp +24 -0
  870. data/ext/protovalidate/sys/third_party/antlr4/runtime/Cpp/runtime/src/tree/xpath/XPathWildcardElement.h +23 -0
  871. data/ext/protovalidate/sys/third_party/cel-cpp/LICENSE +202 -0
  872. data/ext/protovalidate/sys/third_party/cel-cpp/base/ast.h +20 -0
  873. data/ext/protovalidate/sys/third_party/cel-cpp/base/attribute.cc +330 -0
  874. data/ext/protovalidate/sys/third_party/cel-cpp/base/attribute.h +278 -0
  875. data/ext/protovalidate/sys/third_party/cel-cpp/base/attribute_set.h +108 -0
  876. data/ext/protovalidate/sys/third_party/cel-cpp/base/builtins.h +106 -0
  877. data/ext/protovalidate/sys/third_party/cel-cpp/base/function.h +20 -0
  878. data/ext/protovalidate/sys/third_party/cel-cpp/base/function_adapter.h +19 -0
  879. data/ext/protovalidate/sys/third_party/cel-cpp/base/function_descriptor.h +20 -0
  880. data/ext/protovalidate/sys/third_party/cel-cpp/base/function_result.h +70 -0
  881. data/ext/protovalidate/sys/third_party/cel-cpp/base/function_result_set.cc +28 -0
  882. data/ext/protovalidate/sys/third_party/cel-cpp/base/function_result_set.h +105 -0
  883. data/ext/protovalidate/sys/third_party/cel-cpp/base/internal/memory_manager_testing.h +54 -0
  884. data/ext/protovalidate/sys/third_party/cel-cpp/base/internal/message_wrapper.h +30 -0
  885. data/ext/protovalidate/sys/third_party/cel-cpp/base/internal/operators.h +91 -0
  886. data/ext/protovalidate/sys/third_party/cel-cpp/base/internal/unknown_set.cc +31 -0
  887. data/ext/protovalidate/sys/third_party/cel-cpp/base/internal/unknown_set.h +131 -0
  888. data/ext/protovalidate/sys/third_party/cel-cpp/base/kind.h +25 -0
  889. data/ext/protovalidate/sys/third_party/cel-cpp/base/operators.h +507 -0
  890. data/ext/protovalidate/sys/third_party/cel-cpp/base/type_provider.h +26 -0
  891. data/ext/protovalidate/sys/third_party/cel-cpp/checker/checker_options.h +110 -0
  892. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/builtins_arena.cc +28 -0
  893. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/builtins_arena.h +29 -0
  894. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/field_path.h +77 -0
  895. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/namespace_generator.h +120 -0
  896. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/proto_type_mask.h +111 -0
  897. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/proto_type_mask_registry.h +83 -0
  898. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/test_ast_helpers.h +31 -0
  899. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/type_check_env.h +249 -0
  900. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/type_checker_builder_impl.h +170 -0
  901. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/type_checker_impl.h +58 -0
  902. data/ext/protovalidate/sys/third_party/cel-cpp/checker/internal/type_inference_context.h +229 -0
  903. data/ext/protovalidate/sys/third_party/cel-cpp/checker/optional.h +30 -0
  904. data/ext/protovalidate/sys/third_party/cel-cpp/checker/standard_library.h +26 -0
  905. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_check_issue.cc +59 -0
  906. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_check_issue.h +69 -0
  907. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_checker.cc +36 -0
  908. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_checker.h +65 -0
  909. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_checker_builder.h +186 -0
  910. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_checker_builder_factory.h +59 -0
  911. data/ext/protovalidate/sys/third_party/cel-cpp/checker/type_checker_subset_factory.h +45 -0
  912. data/ext/protovalidate/sys/third_party/cel-cpp/checker/validation_result.cc +32 -0
  913. data/ext/protovalidate/sys/third_party/cel-cpp/checker/validation_result.h +117 -0
  914. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/checked_expr_conversion_example.h +59 -0
  915. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/exercise1.h +32 -0
  916. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/exercise10.h +46 -0
  917. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/exercise2.h +40 -0
  918. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/exercise4.h +34 -0
  919. data/ext/protovalidate/sys/third_party/cel-cpp/codelab/network_functions.h +197 -0
  920. data/ext/protovalidate/sys/third_party/cel-cpp/common/allocator.h +606 -0
  921. data/ext/protovalidate/sys/third_party/cel-cpp/common/any.cc +38 -0
  922. data/ext/protovalidate/sys/third_party/cel-cpp/common/any.h +90 -0
  923. data/ext/protovalidate/sys/third_party/cel-cpp/common/arena.h +110 -0
  924. data/ext/protovalidate/sys/third_party/cel-cpp/common/arena_string.h +365 -0
  925. data/ext/protovalidate/sys/third_party/cel-cpp/common/arena_string_pool.h +86 -0
  926. data/ext/protovalidate/sys/third_party/cel-cpp/common/arena_string_view.h +239 -0
  927. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/constant_proto.cc +123 -0
  928. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/constant_proto.h +37 -0
  929. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/expr_proto.cc +514 -0
  930. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/expr_proto.h +32 -0
  931. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/metadata.cc +262 -0
  932. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/metadata.h +920 -0
  933. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/navigable_ast_internal.h +311 -0
  934. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/navigable_ast_kinds.cc +80 -0
  935. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/navigable_ast_kinds.h +74 -0
  936. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/source_info_proto.cc +90 -0
  937. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast/source_info_proto.h +32 -0
  938. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast.cc +98 -0
  939. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast.h +157 -0
  940. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_proto.cc +547 -0
  941. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_proto.h +52 -0
  942. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_rewrite.cc +389 -0
  943. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_rewrite.h +146 -0
  944. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_traverse.cc +380 -0
  945. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_traverse.h +105 -0
  946. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_visitor.h +118 -0
  947. data/ext/protovalidate/sys/third_party/cel-cpp/common/ast_visitor_base.h +88 -0
  948. data/ext/protovalidate/sys/third_party/cel-cpp/common/casting.h +75 -0
  949. data/ext/protovalidate/sys/third_party/cel-cpp/common/constant.cc +101 -0
  950. data/ext/protovalidate/sys/third_party/cel-cpp/common/constant.h +491 -0
  951. data/ext/protovalidate/sys/third_party/cel-cpp/common/container.cc +171 -0
  952. data/ext/protovalidate/sys/third_party/cel-cpp/common/container.h +138 -0
  953. data/ext/protovalidate/sys/third_party/cel-cpp/common/data.h +120 -0
  954. data/ext/protovalidate/sys/third_party/cel-cpp/common/decl.cc +221 -0
  955. data/ext/protovalidate/sys/third_party/cel-cpp/common/decl.h +446 -0
  956. data/ext/protovalidate/sys/third_party/cel-cpp/common/decl_proto.h +50 -0
  957. data/ext/protovalidate/sys/third_party/cel-cpp/common/decl_proto_v1alpha1.h +55 -0
  958. data/ext/protovalidate/sys/third_party/cel-cpp/common/descriptor_pool_type_introspector.cc +244 -0
  959. data/ext/protovalidate/sys/third_party/cel-cpp/common/descriptor_pool_type_introspector.h +106 -0
  960. data/ext/protovalidate/sys/third_party/cel-cpp/common/expr.cc +320 -0
  961. data/ext/protovalidate/sys/third_party/cel-cpp/common/expr.h +1720 -0
  962. data/ext/protovalidate/sys/third_party/cel-cpp/common/expr_factory.h +402 -0
  963. data/ext/protovalidate/sys/third_party/cel-cpp/common/expr_printer.h +57 -0
  964. data/ext/protovalidate/sys/third_party/cel-cpp/common/format_type_name.h +30 -0
  965. data/ext/protovalidate/sys/third_party/cel-cpp/common/function_descriptor.cc +98 -0
  966. data/ext/protovalidate/sys/third_party/cel-cpp/common/function_descriptor.h +124 -0
  967. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/byte_string.cc +1074 -0
  968. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/byte_string.h +688 -0
  969. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/casting.h +237 -0
  970. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/metadata.h +41 -0
  971. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/reference_count.cc +118 -0
  972. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/reference_count.h +406 -0
  973. data/ext/protovalidate/sys/third_party/cel-cpp/common/internal/value_conversion.h +115 -0
  974. data/ext/protovalidate/sys/third_party/cel-cpp/common/json.h +35 -0
  975. data/ext/protovalidate/sys/third_party/cel-cpp/common/kind.cc +80 -0
  976. data/ext/protovalidate/sys/third_party/cel-cpp/common/kind.h +76 -0
  977. data/ext/protovalidate/sys/third_party/cel-cpp/common/legacy_value.cc +1324 -0
  978. data/ext/protovalidate/sys/third_party/cel-cpp/common/legacy_value.h +131 -0
  979. data/ext/protovalidate/sys/third_party/cel-cpp/common/memory.cc +83 -0
  980. data/ext/protovalidate/sys/third_party/cel-cpp/common/memory.h +1505 -0
  981. data/ext/protovalidate/sys/third_party/cel-cpp/common/memory_testing.h +71 -0
  982. data/ext/protovalidate/sys/third_party/cel-cpp/common/minimal_descriptor_database.h +32 -0
  983. data/ext/protovalidate/sys/third_party/cel-cpp/common/minimal_descriptor_pool.h +36 -0
  984. data/ext/protovalidate/sys/third_party/cel-cpp/common/native_type.h +26 -0
  985. data/ext/protovalidate/sys/third_party/cel-cpp/common/navigable_ast.cc +202 -0
  986. data/ext/protovalidate/sys/third_party/cel-cpp/common/navigable_ast.h +168 -0
  987. data/ext/protovalidate/sys/third_party/cel-cpp/common/operators.cc +233 -0
  988. data/ext/protovalidate/sys/third_party/cel-cpp/common/operators.h +87 -0
  989. data/ext/protovalidate/sys/third_party/cel-cpp/common/optional_ref.h +163 -0
  990. data/ext/protovalidate/sys/third_party/cel-cpp/common/reference.h +269 -0
  991. data/ext/protovalidate/sys/third_party/cel-cpp/common/reference_count.h +26 -0
  992. data/ext/protovalidate/sys/third_party/cel-cpp/common/signature.cc +640 -0
  993. data/ext/protovalidate/sys/third_party/cel-cpp/common/signature.h +101 -0
  994. data/ext/protovalidate/sys/third_party/cel-cpp/common/source.cc +679 -0
  995. data/ext/protovalidate/sys/third_party/cel-cpp/common/source.h +261 -0
  996. data/ext/protovalidate/sys/third_party/cel-cpp/common/standard_definitions.h +349 -0
  997. data/ext/protovalidate/sys/third_party/cel-cpp/common/type.cc +737 -0
  998. data/ext/protovalidate/sys/third_party/cel-cpp/common/type.h +1303 -0
  999. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_introspector.cc +277 -0
  1000. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_introspector.h +157 -0
  1001. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_kind.h +113 -0
  1002. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_proto.h +39 -0
  1003. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_reflector.h +43 -0
  1004. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_spec_resolver.cc +324 -0
  1005. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_spec_resolver.h +46 -0
  1006. data/ext/protovalidate/sys/third_party/cel-cpp/common/type_testing.h +24 -0
  1007. data/ext/protovalidate/sys/third_party/cel-cpp/common/typeinfo.cc +73 -0
  1008. data/ext/protovalidate/sys/third_party/cel-cpp/common/typeinfo.h +221 -0
  1009. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/any_type.h +74 -0
  1010. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/basic_struct_type.cc +53 -0
  1011. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/basic_struct_type.h +119 -0
  1012. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/bool_type.h +73 -0
  1013. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/bool_wrapper_type.h +79 -0
  1014. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/bytes_type.h +73 -0
  1015. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/bytes_wrapper_type.h +79 -0
  1016. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/double_type.h +73 -0
  1017. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/double_wrapper_type.h +79 -0
  1018. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/duration_type.h +73 -0
  1019. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/dyn_type.h +73 -0
  1020. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/enum_type.cc +43 -0
  1021. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/enum_type.h +128 -0
  1022. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/error_type.h +75 -0
  1023. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/function_type.cc +89 -0
  1024. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/function_type.h +91 -0
  1025. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/function_type_pool.cc +29 -0
  1026. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/function_type_pool.h +102 -0
  1027. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/int_type.h +72 -0
  1028. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/int_wrapper_type.h +78 -0
  1029. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/legacy_type_introspector.h +34 -0
  1030. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/list_type.cc +77 -0
  1031. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/list_type.h +115 -0
  1032. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/list_type_pool.cc +29 -0
  1033. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/list_type_pool.h +80 -0
  1034. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/map_type.cc +122 -0
  1035. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/map_type.h +124 -0
  1036. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/map_type_pool.cc +30 -0
  1037. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/map_type_pool.h +93 -0
  1038. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/message_type.cc +95 -0
  1039. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/message_type.h +209 -0
  1040. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/null_type.h +73 -0
  1041. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/opaque_type.cc +109 -0
  1042. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/opaque_type.h +118 -0
  1043. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/opaque_type_pool.cc +33 -0
  1044. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/opaque_type_pool.h +99 -0
  1045. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/optional_type.cc +68 -0
  1046. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/optional_type.h +114 -0
  1047. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/string_type.h +73 -0
  1048. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/string_wrapper_type.h +86 -0
  1049. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/struct_type.cc +87 -0
  1050. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/struct_type.h +158 -0
  1051. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/timestamp_type.h +73 -0
  1052. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_param_type.h +78 -0
  1053. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_pool.cc +96 -0
  1054. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_pool.h +99 -0
  1055. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_type.cc +74 -0
  1056. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_type.h +92 -0
  1057. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_type_pool.cc +26 -0
  1058. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/type_type_pool.h +86 -0
  1059. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/types.h +99 -0
  1060. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/uint_type.h +73 -0
  1061. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/uint_wrapper_type.h +79 -0
  1062. data/ext/protovalidate/sys/third_party/cel-cpp/common/types/unknown_type.h +74 -0
  1063. data/ext/protovalidate/sys/third_party/cel-cpp/common/unknown.h +27 -0
  1064. data/ext/protovalidate/sys/third_party/cel-cpp/common/value.cc +2791 -0
  1065. data/ext/protovalidate/sys/third_party/cel-cpp/common/value.h +2947 -0
  1066. data/ext/protovalidate/sys/third_party/cel-cpp/common/value_kind.h +104 -0
  1067. data/ext/protovalidate/sys/third_party/cel-cpp/common/value_testing.h +307 -0
  1068. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bool_value.cc +97 -0
  1069. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bool_value.h +111 -0
  1070. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bytes_value.cc +194 -0
  1071. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bytes_value.h +338 -0
  1072. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bytes_value_input_stream.h +133 -0
  1073. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/bytes_value_output_stream.h +176 -0
  1074. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_list_value.cc +614 -0
  1075. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_list_value.h +423 -0
  1076. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_map_value.cc +823 -0
  1077. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_map_value.h +469 -0
  1078. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_struct_value.cc +385 -0
  1079. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_struct_value.h +459 -0
  1080. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/custom_value.h +84 -0
  1081. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/double_value.cc +137 -0
  1082. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/double_value.h +101 -0
  1083. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/duration_value.cc +105 -0
  1084. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/duration_value.h +147 -0
  1085. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/enum_value.h +49 -0
  1086. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/error_value.cc +194 -0
  1087. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/error_value.h +276 -0
  1088. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/int_value.cc +111 -0
  1089. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/int_value.h +117 -0
  1090. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_list_value.cc +76 -0
  1091. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_list_value.h +167 -0
  1092. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_map_value.cc +76 -0
  1093. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_map_value.h +185 -0
  1094. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_struct_value.cc +43 -0
  1095. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/legacy_struct_value.h +183 -0
  1096. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/list_value.cc +304 -0
  1097. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/list_value.h +284 -0
  1098. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/list_value_builder.h +110 -0
  1099. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/list_value_variant.h +214 -0
  1100. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/map_value.cc +378 -0
  1101. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/map_value.h +323 -0
  1102. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/map_value_builder.h +110 -0
  1103. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/map_value_variant.h +212 -0
  1104. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/message_value.cc +306 -0
  1105. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/message_value.h +268 -0
  1106. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/null_value.cc +78 -0
  1107. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/null_value.h +96 -0
  1108. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/opaque_value.cc +194 -0
  1109. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/opaque_value.h +338 -0
  1110. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/optional_value.cc +435 -0
  1111. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/optional_value.h +207 -0
  1112. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_list_value.cc +486 -0
  1113. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_list_value.h +229 -0
  1114. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_map_value.cc +439 -0
  1115. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_map_value.h +250 -0
  1116. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_value.cc +103 -0
  1117. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_json_value.h +40 -0
  1118. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_map_field_value.cc +583 -0
  1119. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_map_field_value.h +242 -0
  1120. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_message_value.cc +411 -0
  1121. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_message_value.h +249 -0
  1122. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_repeated_field_value.cc +365 -0
  1123. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/parsed_repeated_field_value.h +220 -0
  1124. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/string_value.cc +1518 -0
  1125. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/string_value.h +489 -0
  1126. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/struct_value.cc +390 -0
  1127. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/struct_value.h +373 -0
  1128. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/struct_value_builder.cc +1552 -0
  1129. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/struct_value_builder.h +35 -0
  1130. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/struct_value_variant.h +205 -0
  1131. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/timestamp_value.cc +105 -0
  1132. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/timestamp_value.h +146 -0
  1133. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/type_value.cc +72 -0
  1134. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/type_value.h +108 -0
  1135. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/uint_value.cc +110 -0
  1136. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/uint_value.h +119 -0
  1137. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/unknown_value.cc +66 -0
  1138. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/unknown_value.h +121 -0
  1139. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/value_builder.cc +1432 -0
  1140. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/value_builder.h +36 -0
  1141. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/value_variant.cc +537 -0
  1142. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/value_variant.h +831 -0
  1143. data/ext/protovalidate/sys/third_party/cel-cpp/common/values/values.h +351 -0
  1144. data/ext/protovalidate/sys/third_party/cel-cpp/compiler/compiler.h +195 -0
  1145. data/ext/protovalidate/sys/third_party/cel-cpp/compiler/compiler_factory.h +70 -0
  1146. data/ext/protovalidate/sys/third_party/cel-cpp/compiler/compiler_library_subset_factory.h +80 -0
  1147. data/ext/protovalidate/sys/third_party/cel-cpp/compiler/optional.h +28 -0
  1148. data/ext/protovalidate/sys/third_party/cel-cpp/compiler/standard_library.h +27 -0
  1149. data/ext/protovalidate/sys/third_party/cel-cpp/env/config.h +173 -0
  1150. data/ext/protovalidate/sys/third_party/cel-cpp/env/env.h +76 -0
  1151. data/ext/protovalidate/sys/third_party/cel-cpp/env/env_runtime.h +85 -0
  1152. data/ext/protovalidate/sys/third_party/cel-cpp/env/env_std_extensions.h +42 -0
  1153. data/ext/protovalidate/sys/third_party/cel-cpp/env/env_yaml.h +74 -0
  1154. data/ext/protovalidate/sys/third_party/cel-cpp/env/internal/ext_registry.h +74 -0
  1155. data/ext/protovalidate/sys/third_party/cel-cpp/env/internal/runtime_ext_registry.h +84 -0
  1156. data/ext/protovalidate/sys/third_party/cel-cpp/env/runtime_std_extensions.h +46 -0
  1157. data/ext/protovalidate/sys/third_party/cel-cpp/env/type_info.h +42 -0
  1158. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/cel_expression_builder_flat_impl.cc +111 -0
  1159. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/cel_expression_builder_flat_impl.h +108 -0
  1160. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/check_ast_extensions.cc +58 -0
  1161. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/check_ast_extensions.h +34 -0
  1162. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/comprehension_vulnerability_check.cc +275 -0
  1163. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/comprehension_vulnerability_check.h +51 -0
  1164. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/constant_folding.cc +280 -0
  1165. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/constant_folding.h +42 -0
  1166. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/flat_expr_builder.cc +2667 -0
  1167. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/flat_expr_builder.h +104 -0
  1168. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/flat_expr_builder_extensions.cc +474 -0
  1169. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/flat_expr_builder_extensions.h +481 -0
  1170. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/instrumentation.h +60 -0
  1171. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/qualified_reference_resolver.cc +359 -0
  1172. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/qualified_reference_resolver.h +53 -0
  1173. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/regex_precompilation_optimization.cc +274 -0
  1174. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/regex_precompilation_optimization.h +29 -0
  1175. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/resolver.cc +222 -0
  1176. data/ext/protovalidate/sys/third_party/cel-cpp/eval/compiler/resolver.h +127 -0
  1177. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/attribute_trail.cc +28 -0
  1178. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/attribute_trail.h +65 -0
  1179. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/attribute_utility.cc +260 -0
  1180. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/attribute_utility.h +179 -0
  1181. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/cel_expression_flat_impl.cc +147 -0
  1182. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/cel_expression_flat_impl.h +175 -0
  1183. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/compiler_constant_step.cc +37 -0
  1184. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/compiler_constant_step.h +76 -0
  1185. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/comprehension_slots.h +153 -0
  1186. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/comprehension_step.cc +685 -0
  1187. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/comprehension_step.h +119 -0
  1188. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/const_value_step.h +31 -0
  1189. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/container_access_step.cc +370 -0
  1190. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/container_access_step.h +26 -0
  1191. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_list_step.cc +283 -0
  1192. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_list_step.h +40 -0
  1193. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_map_step.cc +289 -0
  1194. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_map_step.h +59 -0
  1195. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_struct_step.cc +270 -0
  1196. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/create_struct_step.h +44 -0
  1197. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/direct_expression_step.cc +34 -0
  1198. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/direct_expression_step.h +99 -0
  1199. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/equality_steps.cc +293 -0
  1200. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/equality_steps.h +45 -0
  1201. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/evaluator_core.cc +178 -0
  1202. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/evaluator_core.h +516 -0
  1203. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/evaluator_stack.cc +92 -0
  1204. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/evaluator_stack.h +327 -0
  1205. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/expression_step_base.h +12 -0
  1206. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/function_step.cc +529 -0
  1207. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/function_step.h +48 -0
  1208. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/ident_step.cc +174 -0
  1209. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/ident_step.h +31 -0
  1210. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/iterator_stack.h +77 -0
  1211. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/jump_step.cc +172 -0
  1212. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/jump_step.h +74 -0
  1213. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/lazy_init_step.cc +236 -0
  1214. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/lazy_init_step.h +87 -0
  1215. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/logic_step.cc +487 -0
  1216. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/logic_step.h +49 -0
  1217. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/optional_or_step.cc +305 -0
  1218. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/optional_or_step.h +51 -0
  1219. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/regex_match_step.cc +135 -0
  1220. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/regex_match_step.h +37 -0
  1221. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/select_step.cc +581 -0
  1222. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/select_step.h +33 -0
  1223. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/shadowable_value_step.cc +98 -0
  1224. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/shadowable_value_step.h +26 -0
  1225. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/ternary_step.cc +194 -0
  1226. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/ternary_step.h +26 -0
  1227. data/ext/protovalidate/sys/third_party/cel-cpp/eval/eval/trace_step.h +73 -0
  1228. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/adapter_activation_impl.cc +87 -0
  1229. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/adapter_activation_impl.h +68 -0
  1230. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/cel_value_equal.cc +242 -0
  1231. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/cel_value_equal.h +34 -0
  1232. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/errors.cc +64 -0
  1233. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/errors.h +54 -0
  1234. data/ext/protovalidate/sys/third_party/cel-cpp/eval/internal/interop.h +20 -0
  1235. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/activation.cc +119 -0
  1236. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/activation.h +170 -0
  1237. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/activation_bind_helper.h +60 -0
  1238. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/ast_rewrite.h +175 -0
  1239. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/ast_traverse.h +110 -0
  1240. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/ast_visitor.h +185 -0
  1241. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/ast_visitor_base.h +109 -0
  1242. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/base_activation.h +75 -0
  1243. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/builtin_func_registrar.cc +65 -0
  1244. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/builtin_func_registrar.h +30 -0
  1245. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_attribute.cc +90 -0
  1246. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_attribute.h +64 -0
  1247. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_builtins.h +19 -0
  1248. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_expr_builder_factory.cc +146 -0
  1249. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_expr_builder_factory.h +43 -0
  1250. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_expression.h +144 -0
  1251. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function.cc +76 -0
  1252. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function.h +80 -0
  1253. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function_adapter.h +121 -0
  1254. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function_adapter_impl.h +407 -0
  1255. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function_registry.cc +122 -0
  1256. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_function_registry.h +146 -0
  1257. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_number.cc +31 -0
  1258. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_number.h +36 -0
  1259. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_options.cc +51 -0
  1260. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_options.h +233 -0
  1261. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_type_registry.cc +64 -0
  1262. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_type_registry.h +145 -0
  1263. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_value.cc +412 -0
  1264. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_value.h +770 -0
  1265. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_value_internal.h +103 -0
  1266. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/cel_value_producer.h +25 -0
  1267. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/comparison_functions.h +36 -0
  1268. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/container_function_registrar.h +36 -0
  1269. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/container_backed_list_impl.h +44 -0
  1270. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/container_backed_map_impl.cc +131 -0
  1271. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/container_backed_map_impl.h +70 -0
  1272. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/field_access.cc +85 -0
  1273. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/field_access.h +70 -0
  1274. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/field_backed_list_impl.h +33 -0
  1275. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/field_backed_map_impl.h +35 -0
  1276. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/internal_field_backed_list_impl.cc +36 -0
  1277. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/internal_field_backed_list_impl.h +59 -0
  1278. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/internal_field_backed_map_impl.cc +298 -0
  1279. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/containers/internal_field_backed_map_impl.h +77 -0
  1280. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/equality_function_registrar.h +44 -0
  1281. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/extension_func_registrar.h +20 -0
  1282. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/logical_function_registrar.h +36 -0
  1283. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/message_wrapper.h +139 -0
  1284. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/portable_cel_function_adapter.h +72 -0
  1285. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/set_util.h +43 -0
  1286. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/source_position.h +65 -0
  1287. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/string_extension_func_registrar.cc +29 -0
  1288. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/string_extension_func_registrar.h +31 -0
  1289. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/cel_proto_descriptor_pool_builder.h +40 -0
  1290. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/cel_proto_wrap_util.cc +1479 -0
  1291. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/cel_proto_wrap_util.h +45 -0
  1292. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/cel_proto_wrapper.cc +60 -0
  1293. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/cel_proto_wrapper.h +53 -0
  1294. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/field_access_impl.cc +746 -0
  1295. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/field_access_impl.h +80 -0
  1296. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/legacy_type_adapter.h +177 -0
  1297. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/legacy_type_info_apis.h +108 -0
  1298. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/legacy_type_provider.cc +232 -0
  1299. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/legacy_type_provider.h +79 -0
  1300. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/proto_message_type_adapter.cc +708 -0
  1301. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/proto_message_type_adapter.h +137 -0
  1302. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/protobuf_descriptor_type_provider.cc +70 -0
  1303. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/protobuf_descriptor_type_provider.h +67 -0
  1304. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/protobuf_value_factory.h +36 -0
  1305. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/structs/trivial_legacy_type_info.h +54 -0
  1306. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/transform_utility.h +39 -0
  1307. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/unknown_attribute_set.h +20 -0
  1308. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/unknown_function_result_set.cc +1 -0
  1309. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/unknown_function_result_set.h +27 -0
  1310. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/unknown_set.h +22 -0
  1311. data/ext/protovalidate/sys/third_party/cel-cpp/eval/public/value_export_util.h +28 -0
  1312. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/bindings_ext.h +46 -0
  1313. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/comprehensions_v2.h +39 -0
  1314. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/comprehensions_v2_functions.h +35 -0
  1315. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/comprehensions_v2_macros.h +34 -0
  1316. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/encoders.h +45 -0
  1317. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/formatting.cc +570 -0
  1318. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/formatting.h +39 -0
  1319. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/lists_functions.h +138 -0
  1320. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/math_ext.h +39 -0
  1321. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/math_ext_decls.h +33 -0
  1322. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/math_ext_macros.h +38 -0
  1323. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/proto_ext.h +42 -0
  1324. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/ast_converters.h +56 -0
  1325. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/bind_proto_to_activation.h +38 -0
  1326. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/enum_adapter.h +30 -0
  1327. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/internal/map_reflection.cc +132 -0
  1328. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/internal/map_reflection.h +67 -0
  1329. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/internal/qualify.cc +457 -0
  1330. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/internal/qualify.h +117 -0
  1331. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/memory_manager.cc +37 -0
  1332. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/memory_manager.h +56 -0
  1333. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/runtime_adapter.h +51 -0
  1334. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/value.h +98 -0
  1335. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/protobuf/value_testing.h +78 -0
  1336. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/regex_ext.h +131 -0
  1337. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/regex_functions.h +52 -0
  1338. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/select_optimization.cc +958 -0
  1339. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/select_optimization.h +90 -0
  1340. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/sets_functions.h +45 -0
  1341. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/strings.cc +432 -0
  1342. data/ext/protovalidate/sys/third_party/cel-cpp/extensions/strings.h +73 -0
  1343. data/ext/protovalidate/sys/third_party/cel-cpp/internal/align.h +95 -0
  1344. data/ext/protovalidate/sys/third_party/cel-cpp/internal/benchmark.h +20 -0
  1345. data/ext/protovalidate/sys/third_party/cel-cpp/internal/casts.h +50 -0
  1346. data/ext/protovalidate/sys/third_party/cel-cpp/internal/empty_descriptors.cc +73 -0
  1347. data/ext/protovalidate/sys/third_party/cel-cpp/internal/empty_descriptors.h +31 -0
  1348. data/ext/protovalidate/sys/third_party/cel-cpp/internal/equals_text_proto.h +65 -0
  1349. data/ext/protovalidate/sys/third_party/cel-cpp/internal/exceptions.h +35 -0
  1350. data/ext/protovalidate/sys/third_party/cel-cpp/internal/json.cc +2041 -0
  1351. data/ext/protovalidate/sys/third_party/cel-cpp/internal/json.h +141 -0
  1352. data/ext/protovalidate/sys/third_party/cel-cpp/internal/lexis.cc +79 -0
  1353. data/ext/protovalidate/sys/third_party/cel-cpp/internal/lexis.h +32 -0
  1354. data/ext/protovalidate/sys/third_party/cel-cpp/internal/manual.h +91 -0
  1355. data/ext/protovalidate/sys/third_party/cel-cpp/internal/message_equality.cc +1490 -0
  1356. data/ext/protovalidate/sys/third_party/cel-cpp/internal/message_equality.h +54 -0
  1357. data/ext/protovalidate/sys/third_party/cel-cpp/internal/message_type_name.h +56 -0
  1358. data/ext/protovalidate/sys/third_party/cel-cpp/internal/minimal_descriptor_database.h +32 -0
  1359. data/ext/protovalidate/sys/third_party/cel-cpp/internal/minimal_descriptor_pool.h +40 -0
  1360. data/ext/protovalidate/sys/third_party/cel-cpp/internal/names.h +26 -0
  1361. data/ext/protovalidate/sys/third_party/cel-cpp/internal/new.cc +142 -0
  1362. data/ext/protovalidate/sys/third_party/cel-cpp/internal/new.h +61 -0
  1363. data/ext/protovalidate/sys/third_party/cel-cpp/internal/noop_delete.h +53 -0
  1364. data/ext/protovalidate/sys/third_party/cel-cpp/internal/number.h +299 -0
  1365. data/ext/protovalidate/sys/third_party/cel-cpp/internal/overflow.cc +339 -0
  1366. data/ext/protovalidate/sys/third_party/cel-cpp/internal/overflow.h +178 -0
  1367. data/ext/protovalidate/sys/third_party/cel-cpp/internal/parse_text_proto.h +121 -0
  1368. data/ext/protovalidate/sys/third_party/cel-cpp/internal/proto_file_util.h +73 -0
  1369. data/ext/protovalidate/sys/third_party/cel-cpp/internal/proto_matchers.h +140 -0
  1370. data/ext/protovalidate/sys/third_party/cel-cpp/internal/proto_time_encoding.cc +103 -0
  1371. data/ext/protovalidate/sys/third_party/cel-cpp/internal/proto_time_encoding.h +49 -0
  1372. data/ext/protovalidate/sys/third_party/cel-cpp/internal/proto_util.h +87 -0
  1373. data/ext/protovalidate/sys/third_party/cel-cpp/internal/protobuf_runtime_version.h +32 -0
  1374. data/ext/protovalidate/sys/third_party/cel-cpp/internal/re2_options.h +61 -0
  1375. data/ext/protovalidate/sys/third_party/cel-cpp/internal/runfiles.h +36 -0
  1376. data/ext/protovalidate/sys/third_party/cel-cpp/internal/status_builder.h +114 -0
  1377. data/ext/protovalidate/sys/third_party/cel-cpp/internal/status_macros.h +152 -0
  1378. data/ext/protovalidate/sys/third_party/cel-cpp/internal/string_pool.cc +79 -0
  1379. data/ext/protovalidate/sys/third_party/cel-cpp/internal/string_pool.h +59 -0
  1380. data/ext/protovalidate/sys/third_party/cel-cpp/internal/strings.cc +693 -0
  1381. data/ext/protovalidate/sys/third_party/cel-cpp/internal/strings.h +90 -0
  1382. data/ext/protovalidate/sys/third_party/cel-cpp/internal/testing.h +44 -0
  1383. data/ext/protovalidate/sys/third_party/cel-cpp/internal/testing_descriptor_pool.h +35 -0
  1384. data/ext/protovalidate/sys/third_party/cel-cpp/internal/testing_message_factory.h +31 -0
  1385. data/ext/protovalidate/sys/third_party/cel-cpp/internal/time.cc +198 -0
  1386. data/ext/protovalidate/sys/third_party/cel-cpp/internal/time.h +65 -0
  1387. data/ext/protovalidate/sys/third_party/cel-cpp/internal/to_address.h +68 -0
  1388. data/ext/protovalidate/sys/third_party/cel-cpp/internal/unicode.h +28 -0
  1389. data/ext/protovalidate/sys/third_party/cel-cpp/internal/utf8.cc +526 -0
  1390. data/ext/protovalidate/sys/third_party/cel-cpp/internal/utf8.h +82 -0
  1391. data/ext/protovalidate/sys/third_party/cel-cpp/internal/well_known_types.cc +2181 -0
  1392. data/ext/protovalidate/sys/third_party/cel-cpp/internal/well_known_types.h +1593 -0
  1393. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/ast_factory.cc +320 -0
  1394. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/ast_factory.h +174 -0
  1395. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/ast_factory_interface.h +130 -0
  1396. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/lexer.cc +711 -0
  1397. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/lexer.h +286 -0
  1398. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/options.h +29 -0
  1399. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/pratt_parser.cc +226 -0
  1400. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/pratt_parser.h +110 -0
  1401. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/pratt_parser_worker.cc +261 -0
  1402. data/ext/protovalidate/sys/third_party/cel-cpp/parser/internal/pratt_parser_worker.h +1143 -0
  1403. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro.cc +561 -0
  1404. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro.h +229 -0
  1405. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro_expr_factory.cc +128 -0
  1406. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro_expr_factory.h +333 -0
  1407. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro_registry.cc +87 -0
  1408. data/ext/protovalidate/sys/third_party/cel-cpp/parser/macro_registry.h +59 -0
  1409. data/ext/protovalidate/sys/third_party/cel-cpp/parser/options.h +115 -0
  1410. data/ext/protovalidate/sys/third_party/cel-cpp/parser/parser.cc +1995 -0
  1411. data/ext/protovalidate/sys/third_party/cel-cpp/parser/parser.h +102 -0
  1412. data/ext/protovalidate/sys/third_party/cel-cpp/parser/parser_interface.h +160 -0
  1413. data/ext/protovalidate/sys/third_party/cel-cpp/parser/parser_subset_factory.h +41 -0
  1414. data/ext/protovalidate/sys/third_party/cel-cpp/parser/source_factory.h +47 -0
  1415. data/ext/protovalidate/sys/third_party/cel-cpp/parser/standard_macros.h +31 -0
  1416. data/ext/protovalidate/sys/third_party/cel-cpp/policy/cel_policy.h +333 -0
  1417. data/ext/protovalidate/sys/third_party/cel-cpp/policy/cel_policy_parse_context.h +65 -0
  1418. data/ext/protovalidate/sys/third_party/cel-cpp/policy/cel_policy_parse_result.h +105 -0
  1419. data/ext/protovalidate/sys/third_party/cel-cpp/policy/cel_policy_parser.h +40 -0
  1420. data/ext/protovalidate/sys/third_party/cel-cpp/policy/cel_policy_validation_result.h +84 -0
  1421. data/ext/protovalidate/sys/third_party/cel-cpp/policy/compiler.h +50 -0
  1422. data/ext/protovalidate/sys/third_party/cel-cpp/policy/internal/issue_reporter.h +57 -0
  1423. data/ext/protovalidate/sys/third_party/cel-cpp/policy/internal/optimizer_expr_factory.h +419 -0
  1424. data/ext/protovalidate/sys/third_party/cel-cpp/policy/internal/yaml_string_element_scanner.h +40 -0
  1425. data/ext/protovalidate/sys/third_party/cel-cpp/policy/test_util.h +33 -0
  1426. data/ext/protovalidate/sys/third_party/cel-cpp/policy/yaml_policy_parser.h +135 -0
  1427. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/activation.cc +141 -0
  1428. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/activation.h +184 -0
  1429. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/activation_interface.h +109 -0
  1430. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/bind_proto_to_activation.h +174 -0
  1431. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/comprehension_vulnerability_check.h +35 -0
  1432. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/constant_folding.h +69 -0
  1433. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/embedder_context.h +147 -0
  1434. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function.h +115 -0
  1435. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function_adapter.h +830 -0
  1436. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function_overload_reference.h +34 -0
  1437. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function_provider.h +46 -0
  1438. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function_registry.cc +263 -0
  1439. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/function_registry.h +160 -0
  1440. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/activation_attribute_matcher_access.cc +61 -0
  1441. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/activation_attribute_matcher_access.h +60 -0
  1442. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/attribute_matcher.h +48 -0
  1443. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/convert_constant.cc +78 -0
  1444. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/convert_constant.h +39 -0
  1445. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/errors.cc +69 -0
  1446. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/errors.h +71 -0
  1447. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/function_adapter.h +232 -0
  1448. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/issue_collector.h +64 -0
  1449. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/legacy_runtime_type_provider.h +37 -0
  1450. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_env.cc +73 -0
  1451. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_env.h +134 -0
  1452. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_env_testing.h +60 -0
  1453. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_friend_access.h +45 -0
  1454. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_impl.cc +159 -0
  1455. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_impl.h +125 -0
  1456. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_type_provider.cc +96 -0
  1457. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/internal/runtime_type_provider.h +66 -0
  1458. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/optional_types.h +152 -0
  1459. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/reference_resolver.h +46 -0
  1460. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/regex_precompilation.h +32 -0
  1461. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/register_function_helper.h +99 -0
  1462. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/runtime.h +229 -0
  1463. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/runtime_builder.h +101 -0
  1464. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/runtime_builder_factory.h +65 -0
  1465. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/runtime_issue.h +88 -0
  1466. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/runtime_options.h +209 -0
  1467. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/arithmetic_functions.cc +233 -0
  1468. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/arithmetic_functions.h +35 -0
  1469. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/comparison_functions.cc +272 -0
  1470. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/comparison_functions.h +36 -0
  1471. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/container_functions.cc +136 -0
  1472. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/container_functions.h +36 -0
  1473. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/container_membership_functions.cc +331 -0
  1474. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/container_membership_functions.h +34 -0
  1475. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/equality_functions.cc +612 -0
  1476. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/equality_functions.h +60 -0
  1477. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/logical_functions.cc +66 -0
  1478. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/logical_functions.h +36 -0
  1479. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/regex_functions.cc +56 -0
  1480. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/regex_functions.h +38 -0
  1481. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/string_functions.cc +140 -0
  1482. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/string_functions.h +34 -0
  1483. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/time_functions.cc +499 -0
  1484. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/time_functions.h +56 -0
  1485. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/type_conversion_functions.cc +470 -0
  1486. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard/type_conversion_functions.h +34 -0
  1487. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard_functions.h +33 -0
  1488. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/standard_runtime_builder_factory.h +43 -0
  1489. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/type_registry.cc +84 -0
  1490. data/ext/protovalidate/sys/third_party/cel-cpp/runtime/type_registry.h +155 -0
  1491. data/ext/protovalidate/sys/third_party/cel-cpp/tools/branch_coverage.h +68 -0
  1492. data/ext/protovalidate/sys/third_party/cel-cpp/tools/cel_field_extractor.h +70 -0
  1493. data/ext/protovalidate/sys/third_party/cel-cpp/tools/cel_unparser.h +60 -0
  1494. data/ext/protovalidate/sys/third_party/cel-cpp/tools/descriptor_pool_builder.h +93 -0
  1495. data/ext/protovalidate/sys/third_party/cel-cpp/tools/flatbuffers_backed_impl.h +58 -0
  1496. data/ext/protovalidate/sys/third_party/cel-cpp/tools/navigable_ast.h +169 -0
  1497. data/ext/protovalidate/sys/third_party/cel-cpp/tools/proto_to_predicate.h +48 -0
  1498. data/ext/protovalidate/sys/third_party/cel-cpp/validator/ast_depth_validator.h +27 -0
  1499. data/ext/protovalidate/sys/third_party/cel-cpp/validator/comprehension_nesting_validator.h +31 -0
  1500. data/ext/protovalidate/sys/third_party/cel-cpp/validator/homogeneous_literal_validator.h +38 -0
  1501. data/ext/protovalidate/sys/third_party/cel-cpp/validator/regex_validator.h +53 -0
  1502. data/ext/protovalidate/sys/third_party/cel-cpp/validator/timestamp_literal_validator.h +29 -0
  1503. data/ext/protovalidate/sys/third_party/cel-cpp/validator/validator.cc +85 -0
  1504. data/ext/protovalidate/sys/third_party/cel-cpp/validator/validator.h +151 -0
  1505. data/ext/protovalidate/sys/third_party/protobuf/LICENSE +32 -0
  1506. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/any.cc +65 -0
  1507. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/any.h +161 -0
  1508. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/any.pb.cc +528 -0
  1509. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/any.pb.h +516 -0
  1510. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/any_lite.cc +95 -0
  1511. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/api.pb.cc +1959 -0
  1512. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/api.pb.h +1985 -0
  1513. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena.cc +1004 -0
  1514. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena.h +1238 -0
  1515. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena_align.cc +21 -0
  1516. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena_align.h +199 -0
  1517. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena_allocation_policy.h +102 -0
  1518. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena_cleanup.h +108 -0
  1519. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arena_test_util.h +91 -0
  1520. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arenastring.cc +290 -0
  1521. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arenastring.h +545 -0
  1522. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arenaz_sampler.cc +227 -0
  1523. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/arenaz_sampler.h +238 -0
  1524. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/annotation_test_util.h +105 -0
  1525. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/code_generator.h +256 -0
  1526. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/code_generator_lite.h +77 -0
  1527. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.h +517 -0
  1528. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/command_line_interface_tester.h +162 -0
  1529. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/importer.cc +594 -0
  1530. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/importer.h +338 -0
  1531. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/mock_code_generator.h +144 -0
  1532. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/notices.h +242 -0
  1533. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/package_info.h +40 -0
  1534. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/parser.cc +2716 -0
  1535. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/parser.h +642 -0
  1536. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/plugin.h +73 -0
  1537. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/plugin.pb.h +2320 -0
  1538. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/retention.h +70 -0
  1539. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/scc.h +155 -0
  1540. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/subprocess.h +91 -0
  1541. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/versions.h +78 -0
  1542. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/compiler/zip_writer.h +45 -0
  1543. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/cpp_edition_defaults.h +12 -0
  1544. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/cpp_features.pb.cc +539 -0
  1545. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/cpp_features.pb.h +630 -0
  1546. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor.cc +10801 -0
  1547. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor.h +3417 -0
  1548. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor.pb.cc +18982 -0
  1549. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor.pb.h +23170 -0
  1550. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_database.cc +1102 -0
  1551. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_database.h +423 -0
  1552. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_legacy.h +32 -0
  1553. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_lite.h +110 -0
  1554. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_test_utils.h +129 -0
  1555. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/descriptor_visitor.h +187 -0
  1556. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/duration.pb.cc +481 -0
  1557. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/duration.pb.h +367 -0
  1558. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/dynamic_message.cc +1104 -0
  1559. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/dynamic_message.h +217 -0
  1560. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/empty.pb.cc +285 -0
  1561. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/empty.pb.h +245 -0
  1562. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/endian.h +192 -0
  1563. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/explicitly_constructed.h +71 -0
  1564. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/extension_set.cc +1925 -0
  1565. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/extension_set.h +1886 -0
  1566. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/extension_set_heavy.cc +459 -0
  1567. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/extension_set_inl.h +274 -0
  1568. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/feature_resolver.cc +637 -0
  1569. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/feature_resolver.h +108 -0
  1570. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/field_access_listener.h +166 -0
  1571. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/field_mask.pb.cc +472 -0
  1572. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/field_mask.pb.h +396 -0
  1573. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/field_with_arena.h +110 -0
  1574. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_enum_reflection.h +187 -0
  1575. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_enum_util.cc +223 -0
  1576. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_enum_util.h +185 -0
  1577. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_bases.cc +88 -0
  1578. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_bases.h +68 -0
  1579. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_reflection.cc +4185 -0
  1580. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_reflection.h +372 -0
  1581. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_decl.h +615 -0
  1582. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_full.cc +105 -0
  1583. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_gen.cc +960 -0
  1584. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_gen.h +193 -0
  1585. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_impl.h +1229 -0
  1586. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_tctable_lite.cc +3308 -0
  1587. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_util.cc +434 -0
  1588. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/generated_message_util.h +445 -0
  1589. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/has_bits.h +138 -0
  1590. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/implicit_weak_message.cc +139 -0
  1591. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/implicit_weak_message.h +266 -0
  1592. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/inlined_string_field.cc +144 -0
  1593. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/inlined_string_field.h +379 -0
  1594. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/internal_feature_helper.cc +28 -0
  1595. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/internal_feature_helper.h +130 -0
  1596. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/internal_metadata_locator.h +291 -0
  1597. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/internal_visibility.h +55 -0
  1598. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/internal_visibility_for_testing.h +27 -0
  1599. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/coded_stream.cc +1045 -0
  1600. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/coded_stream.h +1885 -0
  1601. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/gzip_stream.cc +333 -0
  1602. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/gzip_stream.h +189 -0
  1603. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/io_win32.cc +450 -0
  1604. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/io_win32.h +118 -0
  1605. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/package_info.h +30 -0
  1606. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/printer.cc +842 -0
  1607. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/printer.h +1183 -0
  1608. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/strtod.cc +260 -0
  1609. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/strtod.h +57 -0
  1610. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/test_zero_copy_stream.h +185 -0
  1611. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/tokenizer.cc +1262 -0
  1612. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/tokenizer.h +441 -0
  1613. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_sink.cc +45 -0
  1614. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_sink.h +59 -0
  1615. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream.cc +128 -0
  1616. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream.h +269 -0
  1617. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc +354 -0
  1618. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl.h +319 -0
  1619. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc +699 -0
  1620. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h +533 -0
  1621. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/descriptor_traits.h +510 -0
  1622. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/lexer.cc +512 -0
  1623. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/lexer.h +341 -0
  1624. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/message_path.cc +46 -0
  1625. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/message_path.h +61 -0
  1626. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/parser.cc +1437 -0
  1627. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/parser.h +37 -0
  1628. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/parser_traits.h +400 -0
  1629. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/unparser.cc +915 -0
  1630. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/unparser.h +38 -0
  1631. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/unparser_traits.h +414 -0
  1632. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/untyped_message.cc +577 -0
  1633. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/untyped_message.h +246 -0
  1634. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/writer.cc +307 -0
  1635. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/writer.h +214 -0
  1636. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/zero_copy_buffered_stream.cc +152 -0
  1637. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/internal/zero_copy_buffered_stream.h +338 -0
  1638. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/json.cc +137 -0
  1639. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/json/json.h +200 -0
  1640. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map.cc +297 -0
  1641. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map.h +1787 -0
  1642. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_entry.h +139 -0
  1643. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_field.cc +597 -0
  1644. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_field.h +925 -0
  1645. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_field_lite.h +124 -0
  1646. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_test.inc +4427 -0
  1647. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_test_util.h +617 -0
  1648. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/map_type_handler.h +374 -0
  1649. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message.cc +745 -0
  1650. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message.h +1936 -0
  1651. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message_lite.cc +807 -0
  1652. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message_lite.h +1861 -0
  1653. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message_unittest.inc +2302 -0
  1654. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/message_unittest_legacy_apis.inc +98 -0
  1655. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/metadata.h +13 -0
  1656. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/metadata_lite.h +271 -0
  1657. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/micro_string.cc +376 -0
  1658. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/micro_string.h +649 -0
  1659. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/os_macros_restore.inc +97 -0
  1660. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/os_macros_undef.inc +166 -0
  1661. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/package_info.h +43 -0
  1662. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/parse_context.cc +850 -0
  1663. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/parse_context.h +1883 -0
  1664. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/port.cc +131 -0
  1665. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/port.h +908 -0
  1666. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/port_def.inc +820 -0
  1667. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/port_undef.inc +97 -0
  1668. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/proto3_lite_unittest.inc +127 -0
  1669. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/raw_ptr.cc +29 -0
  1670. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/raw_ptr.h +64 -0
  1671. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection.h +603 -0
  1672. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_internal.h +313 -0
  1673. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_mode.cc +36 -0
  1674. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_mode.h +144 -0
  1675. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_ops.cc +456 -0
  1676. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_ops.h +67 -0
  1677. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_tester.h +127 -0
  1678. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_visit_field_info.h +1378 -0
  1679. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/reflection_visit_fields.h +511 -0
  1680. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field.cc +76 -0
  1681. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field.h +1814 -0
  1682. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field_proxy.h +697 -0
  1683. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field_proxy_iterator.h +236 -0
  1684. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field_proxy_traits.h +100 -0
  1685. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_field_reflection_unittest.inc +687 -0
  1686. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_ptr_field.cc +251 -0
  1687. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/repeated_ptr_field.h +2706 -0
  1688. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/runtime_version.h +27 -0
  1689. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/serial_arena.h +447 -0
  1690. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/service.cc +22 -0
  1691. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/service.h +271 -0
  1692. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/source_context.pb.cc +463 -0
  1693. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/source_context.pb.h +376 -0
  1694. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/string_block.h +181 -0
  1695. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/string_member_robber.h +17 -0
  1696. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/struct.pb.cc +1663 -0
  1697. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/struct.pb.h +1426 -0
  1698. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/callback.h +584 -0
  1699. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/common.cc +121 -0
  1700. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/common.h +94 -0
  1701. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/platform_macros.h +115 -0
  1702. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/port.h +228 -0
  1703. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/stubs/status_macros.h +72 -0
  1704. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/symbol_checker.cc +219 -0
  1705. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/symbol_checker.h +142 -0
  1706. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/test_textproto.h +54 -0
  1707. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/test_util.h +3897 -0
  1708. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/test_util2.h +70 -0
  1709. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/test_util_lite.h +86 -0
  1710. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/text_format.cc +3324 -0
  1711. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/text_format.h +925 -0
  1712. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/thread_safe_arena.h +297 -0
  1713. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/timestamp.pb.cc +481 -0
  1714. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/timestamp.pb.h +367 -0
  1715. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/type.pb.cc +3129 -0
  1716. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/type.pb.h +3343 -0
  1717. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/unknown_field_set.cc +351 -0
  1718. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/unknown_field_set.h +464 -0
  1719. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/delimited_message_util.cc +107 -0
  1720. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/delimited_message_util.h +85 -0
  1721. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/field_comparator.cc +237 -0
  1722. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/field_comparator.h +256 -0
  1723. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/field_mask_util.cc +754 -0
  1724. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/field_mask_util.h +242 -0
  1725. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/internal_timeval.h +28 -0
  1726. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/json_util.h +34 -0
  1727. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/message_differencer.cc +2372 -0
  1728. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/message_differencer.h +1002 -0
  1729. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/package_info.h +23 -0
  1730. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/python/field_mask_util_clif_aux.h +32 -0
  1731. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/time_util.cc +563 -0
  1732. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/time_util.h +297 -0
  1733. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/type_resolver.h +56 -0
  1734. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/type_resolver_util.cc +436 -0
  1735. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/util/type_resolver_util.h +45 -0
  1736. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/varint_shuffle.h +165 -0
  1737. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wire_format.cc +1785 -0
  1738. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wire_format.h +374 -0
  1739. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wire_format_lite.cc +901 -0
  1740. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wire_format_lite.h +1720 -0
  1741. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wire_format_unittest.h +1726 -0
  1742. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wrappers.pb.cc +3203 -0
  1743. data/ext/protovalidate/sys/third_party/protobuf/src/google/protobuf/wrappers.pb.h +2317 -0
  1744. data/ext/protovalidate/sys/third_party/protobuf/third_party/utf8_range/utf8_range.c +207 -0
  1745. data/ext/protovalidate/sys/third_party/protobuf/third_party/utf8_range/utf8_range.h +23 -0
  1746. data/ext/protovalidate/sys/third_party/protobuf/third_party/utf8_range/utf8_range_neon.inc +117 -0
  1747. data/ext/protovalidate/sys/third_party/protobuf/third_party/utf8_range/utf8_range_sse.inc +272 -0
  1748. data/ext/protovalidate/sys/third_party/protobuf/third_party/utf8_range/utf8_validity.h +30 -0
  1749. data/ext/protovalidate/sys/third_party/protovalidate-cc/LICENSE +201 -0
  1750. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/cel_rules.h +116 -0
  1751. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/cel_validation_rules.cc +166 -0
  1752. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/cel_validation_rules.h +72 -0
  1753. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/extra_func.cc +482 -0
  1754. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/extra_func.h +31 -0
  1755. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/field_rules.cc +388 -0
  1756. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/field_rules.h +92 -0
  1757. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/ipv4.cc +69 -0
  1758. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/ipv4.h +58 -0
  1759. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/ipv6.cc +143 -0
  1760. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/ipv6.h +51 -0
  1761. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/parser_common.h +256 -0
  1762. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/uri.cc +469 -0
  1763. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/lib/uri.h +25 -0
  1764. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/message_factory.cc +31 -0
  1765. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/message_factory.h +43 -0
  1766. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/message_rules.cc +114 -0
  1767. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/message_rules.h +39 -0
  1768. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/proto_field.h +155 -0
  1769. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/rules.cc +437 -0
  1770. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/rules.h +221 -0
  1771. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/internal/validation_rules.h +153 -0
  1772. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/validator.cc +190 -0
  1773. data/ext/protovalidate/sys/third_party/protovalidate-cc/buf/validate/validator.h +156 -0
  1774. data/ext/protovalidate/sys/third_party/re2/LICENSE +27 -0
  1775. data/ext/protovalidate/sys/third_party/re2/re2/bitmap256.cc +43 -0
  1776. data/ext/protovalidate/sys/third_party/re2/re2/bitmap256.h +88 -0
  1777. data/ext/protovalidate/sys/third_party/re2/re2/bitstate.cc +389 -0
  1778. data/ext/protovalidate/sys/third_party/re2/re2/compile.cc +1265 -0
  1779. data/ext/protovalidate/sys/third_party/re2/re2/dfa.cc +2135 -0
  1780. data/ext/protovalidate/sys/third_party/re2/re2/filtered_re2.cc +138 -0
  1781. data/ext/protovalidate/sys/third_party/re2/re2/filtered_re2.h +115 -0
  1782. data/ext/protovalidate/sys/third_party/re2/re2/mimics_pcre.cc +196 -0
  1783. data/ext/protovalidate/sys/third_party/re2/re2/nfa.cc +714 -0
  1784. data/ext/protovalidate/sys/third_party/re2/re2/onepass.cc +623 -0
  1785. data/ext/protovalidate/sys/third_party/re2/re2/parse.cc +2529 -0
  1786. data/ext/protovalidate/sys/third_party/re2/re2/perl_groups.cc +119 -0
  1787. data/ext/protovalidate/sys/third_party/re2/re2/pod_array.h +55 -0
  1788. data/ext/protovalidate/sys/third_party/re2/re2/prefilter.cc +711 -0
  1789. data/ext/protovalidate/sys/third_party/re2/re2/prefilter.h +168 -0
  1790. data/ext/protovalidate/sys/third_party/re2/re2/prefilter_tree.cc +376 -0
  1791. data/ext/protovalidate/sys/third_party/re2/re2/prefilter_tree.h +153 -0
  1792. data/ext/protovalidate/sys/third_party/re2/re2/prog.cc +1181 -0
  1793. data/ext/protovalidate/sys/third_party/re2/re2/prog.h +493 -0
  1794. data/ext/protovalidate/sys/third_party/re2/re2/re2.cc +1355 -0
  1795. data/ext/protovalidate/sys/third_party/re2/re2/re2.h +1074 -0
  1796. data/ext/protovalidate/sys/third_party/re2/re2/regexp.cc +1004 -0
  1797. data/ext/protovalidate/sys/third_party/re2/re2/regexp.h +693 -0
  1798. data/ext/protovalidate/sys/third_party/re2/re2/set.cc +185 -0
  1799. data/ext/protovalidate/sys/third_party/re2/re2/set.h +91 -0
  1800. data/ext/protovalidate/sys/third_party/re2/re2/simplify.cc +689 -0
  1801. data/ext/protovalidate/sys/third_party/re2/re2/sparse_array.h +394 -0
  1802. data/ext/protovalidate/sys/third_party/re2/re2/sparse_set.h +266 -0
  1803. data/ext/protovalidate/sys/third_party/re2/re2/stringpiece.h +18 -0
  1804. data/ext/protovalidate/sys/third_party/re2/re2/tostring.cc +351 -0
  1805. data/ext/protovalidate/sys/third_party/re2/re2/unicode_casefold.cc +604 -0
  1806. data/ext/protovalidate/sys/third_party/re2/re2/unicode_casefold.h +77 -0
  1807. data/ext/protovalidate/sys/third_party/re2/re2/unicode_groups.cc +6517 -0
  1808. data/ext/protovalidate/sys/third_party/re2/re2/unicode_groups.h +66 -0
  1809. data/ext/protovalidate/sys/third_party/re2/re2/walker-inl.h +249 -0
  1810. data/ext/protovalidate/sys/third_party/re2/util/malloc_counter.h +19 -0
  1811. data/ext/protovalidate/sys/third_party/re2/util/pcre.h +671 -0
  1812. data/ext/protovalidate/sys/third_party/re2/util/rune.cc +260 -0
  1813. data/ext/protovalidate/sys/third_party/re2/util/strutil.cc +26 -0
  1814. data/ext/protovalidate/sys/third_party/re2/util/strutil.h +16 -0
  1815. data/ext/protovalidate/sys/third_party/re2/util/utf.h +44 -0
  1816. data/ext/protovalidate/sys/versions.json +15 -0
  1817. data/lib/buf/validate/validate_pb.rb +55 -0
  1818. data/lib/protovalidate/errors.rb +32 -0
  1819. data/lib/protovalidate/native.rb +30 -0
  1820. data/lib/protovalidate/validator.rb +96 -0
  1821. data/lib/protovalidate/version.rb +10 -0
  1822. data/lib/protovalidate/violation.rb +115 -0
  1823. data/lib/protovalidate.rb +48 -0
  1824. data/sig/buf/validate/validate_pb.rbs +64 -0
  1825. data/sig/protovalidate/native.rbs +14 -0
  1826. data/sig/protovalidate.rbs +90 -0
  1827. metadata +1900 -0
@@ -0,0 +1,4427 @@
1
+ // -*- c++ -*-
2
+ // Protocol Buffers - Google's data interchange format
3
+ // Copyright 2008 Google Inc. All rights reserved.
4
+ //
5
+ // Use of this source code is governed by a BSD-style
6
+ // license that can be found in the LICENSE file or at
7
+ // https://developers.google.com/open-source/licenses/bsd
8
+
9
+ // A hack to include windows.h first, which ensures the GetMessage macro can
10
+ // be undefined when we include <google/protobuf/stubs/common.h>
11
+ #if defined(_MSC_VER)
12
+ #define _WINSOCKAPI_ // to avoid re-definition in WinSock2.h
13
+ #define NOMINMAX // to avoid defining min/max macros
14
+ #include <windows.h>
15
+ #endif // _WIN32
16
+
17
+ #include <algorithm>
18
+ #include <cstddef>
19
+ #include <cstdint>
20
+ #include <limits>
21
+ #include <memory>
22
+ #include <ostream>
23
+ #include <sstream>
24
+ #include <string>
25
+ #include <utility>
26
+ #include <vector>
27
+
28
+ #include "google/protobuf/testing/file.h" // IWYU pragma: keep
29
+ #include "google/protobuf/descriptor.pb.h"
30
+ #include <gmock/gmock.h>
31
+ #include "google/protobuf/testing/googletest.h" // IWYU pragma: keep
32
+ #include <gtest/gtest.h>
33
+ #include "absl/base/casts.h"
34
+ #include "absl/base/log_severity.h"
35
+ #include "absl/cleanup/cleanup.h"
36
+ #include "absl/container/btree_set.h"
37
+ #include "absl/container/flat_hash_map.h"
38
+ #include "absl/log/absl_check.h"
39
+ #include "absl/log/absl_log.h"
40
+ #include "absl/log/globals.h"
41
+ #include "absl/strings/str_cat.h"
42
+ #include "absl/strings/str_format.h"
43
+ #include "absl/strings/string_view.h"
44
+ #include "google/protobuf/arena.h"
45
+ #include "google/protobuf/arena_test_util.h" // IWYU pragma: keep
46
+ #include "google/protobuf/descriptor.h"
47
+ #include "google/protobuf/dynamic_message.h"
48
+ #include "google/protobuf/io/coded_stream.h"
49
+ #include "google/protobuf/io/zero_copy_stream_impl_lite.h"
50
+ #include "google/protobuf/map.h"
51
+ #include "google/protobuf/map_entry.h"
52
+ #include "google/protobuf/map_proto2_unittest.pb.h"
53
+ #include "google/protobuf/map_proto3_unittest.pb.h"
54
+ #include "google/protobuf/map_test_util.h"
55
+ #include "google/protobuf/message.h"
56
+ #include "google/protobuf/message_lite.h"
57
+ #include "google/protobuf/port.h"
58
+ #include "google/protobuf/reflection.h"
59
+ #include "google/protobuf/reflection_ops.h"
60
+ #include "google/protobuf/reflection_tester.h"
61
+ #include "google/protobuf/test_textproto.h"
62
+ #include "google/protobuf/test_util.h"
63
+ #include "google/protobuf/test_util2.h"
64
+ #include "google/protobuf/text_format.h"
65
+ #include "google/protobuf/util/message_differencer.h"
66
+ #include "google/protobuf/wire_format.h"
67
+ #include "google/protobuf/wire_format_lite.h"
68
+
69
+
70
+ // Must be included last.
71
+ #include "google/protobuf/port_def.inc"
72
+
73
+ using ::testing::ElementsAre;
74
+ using ::testing::IsEmpty;
75
+ using ::testing::Pair;
76
+
77
+ namespace google {
78
+ namespace protobuf {
79
+
80
+ using UNITTEST::ForeignMessage;
81
+ using UNITTEST::TestAllTypes;
82
+ using UNITTEST::TestMap;
83
+ using UNITTEST::TestRecursiveMapMessage;
84
+
85
+ namespace internal {
86
+
87
+ void MapTestForceDeterministic() {
88
+ io::CodedOutputStream::SetDefaultSerializationDeterministic();
89
+ }
90
+
91
+ struct MapTestPeer {
92
+ template <typename T>
93
+ static typename T::KeyMapBase& GetKeyMapBase(T& value) {
94
+ return value;
95
+ }
96
+
97
+ template <typename T>
98
+ static bool InsertOrReplaceNode(T& map, typename T::key_type key,
99
+ typename T::mapped_type value) {
100
+ using Node = typename T::Node;
101
+ auto* node = static_cast<Node*>(map.arena(),
102
+ map.AllocNode(map.arena(), sizeof(Node)));
103
+ ::new (static_cast<void*>(&node->kv)) typename T::value_type{key, value};
104
+ return GetKeyMapBase(map).InsertOrReplaceNode(map.arena(), node);
105
+ }
106
+
107
+ template <typename T>
108
+ static size_t NumBuckets(T& map) {
109
+ return map.num_buckets_;
110
+ }
111
+
112
+ template <typename T>
113
+ static size_t BucketNumber(T& map, typename T::key_type key) {
114
+ return map.BucketNumber(key);
115
+ }
116
+
117
+ template <typename T>
118
+ static void Resize(T& map, size_t num_buckets) {
119
+ map.Resize(num_buckets);
120
+ }
121
+
122
+ static size_t CalculateHiCutoff(size_t num_buckets) {
123
+ return Map<int, int>::CalculateHiCutoff(num_buckets);
124
+ }
125
+
126
+ static size_t CalculateCapacityForSize(size_t size) {
127
+ return Map<int, int>::CalculateCapacityForSize(size);
128
+ }
129
+
130
+ template <typename Map>
131
+ static auto GetTypeInfo() {
132
+ return Map::GetTypeInfo();
133
+ }
134
+
135
+ static constexpr size_t kMinTableSize = UntypedMapBase::kMinTableSize;
136
+ };
137
+
138
+ namespace {
139
+
140
+ // Map API Test =====================================================
141
+
142
+ class MapImplTest : public ::testing::Test {
143
+ protected:
144
+ MapImplTest()
145
+ : map_ptr_(new Map<int32_t, int32_t>()),
146
+ map_(*map_ptr_),
147
+ const_map_(*map_ptr_) {
148
+ EXPECT_TRUE(map_.empty());
149
+ EXPECT_EQ(0, map_.size());
150
+ }
151
+
152
+ void ExpectSingleElement(int32_t key, int32_t value) {
153
+ EXPECT_FALSE(map_.empty());
154
+ EXPECT_EQ(1, map_.size());
155
+ ExpectElement(key, value);
156
+ }
157
+
158
+ void ExpectElements(const absl::flat_hash_map<int32_t, int32_t>& map) {
159
+ EXPECT_FALSE(map_.empty());
160
+ EXPECT_EQ(map.size(), map_.size());
161
+ for (const auto& e : map) {
162
+ ExpectElement(e.first, e.second);
163
+ }
164
+ }
165
+
166
+ void ExpectElement(int32_t key, int32_t value) {
167
+ // Test map size is correct.
168
+ EXPECT_EQ(value, map_[key]);
169
+ EXPECT_EQ(1, map_.count(key));
170
+ EXPECT_TRUE(map_.contains(key));
171
+
172
+ // Check mutable at and find work correctly.
173
+ EXPECT_EQ(value, map_.at(key));
174
+ Map<int32_t, int32_t>::iterator it = map_.find(key);
175
+
176
+ // iterator dereferenceable
177
+ EXPECT_EQ(key, (*it).first);
178
+ EXPECT_EQ(value, (*it).second);
179
+ EXPECT_EQ(key, it->first);
180
+ EXPECT_EQ(value, it->second);
181
+
182
+ // iterator mutable
183
+ ((*it).second) = value + 1;
184
+ EXPECT_EQ(value + 1, map_[key]);
185
+ ((*it).second) = value;
186
+ EXPECT_EQ(value, map_[key]);
187
+
188
+ it->second = value + 1;
189
+ EXPECT_EQ(value + 1, map_[key]);
190
+ it->second = value;
191
+ EXPECT_EQ(value, map_[key]);
192
+
193
+ // copy constructor
194
+ Map<int32_t, int32_t>::iterator it_copy = it;
195
+ EXPECT_EQ(key, it_copy->first);
196
+ EXPECT_EQ(value, it_copy->second);
197
+
198
+ // Immutable API ================================================
199
+
200
+ // Check immutable at and find work correctly.
201
+ EXPECT_EQ(value, const_map_.at(key));
202
+ Map<int32_t, int32_t>::const_iterator const_it = const_map_.find(key);
203
+
204
+ // iterator dereferenceable
205
+ EXPECT_EQ(key, (*const_it).first);
206
+ EXPECT_EQ(value, (*const_it).second);
207
+ EXPECT_EQ(key, const_it->first);
208
+ EXPECT_EQ(value, const_it->second);
209
+
210
+ // copy constructor
211
+ Map<int32_t, int32_t>::const_iterator const_it_copy = const_it;
212
+ EXPECT_EQ(key, const_it_copy->first);
213
+ EXPECT_EQ(value, const_it_copy->second);
214
+ }
215
+
216
+ std::unique_ptr<Map<int32_t, int32_t>> map_ptr_;
217
+ Map<int32_t, int32_t>& map_;
218
+ const Map<int32_t, int32_t>& const_map_;
219
+ };
220
+
221
+ TEST_F(MapImplTest, OperatorBracket) {
222
+ int32_t key = 0;
223
+ int32_t value1 = 100;
224
+ int32_t value2 = 101;
225
+
226
+ EXPECT_EQ(0, map_[key]);
227
+
228
+ map_[key] = value1;
229
+ ExpectSingleElement(key, value1);
230
+
231
+ map_[key] = value2;
232
+ ExpectSingleElement(key, value2);
233
+ }
234
+
235
+ } // namespace
236
+ } // namespace internal
237
+ } // namespace protobuf
238
+ } // namespace google
239
+
240
+ namespace google {
241
+ namespace protobuf {
242
+ namespace internal {
243
+ namespace {
244
+
245
+ TEST_F(MapImplTest, OperatorBracketRValue) {
246
+ Arena arena;
247
+ for (Arena* arena_to_use : {&arena, static_cast<Arena*>(nullptr)}) {
248
+ auto* map = Arena::Create<Map<std::string, int32_t>>(arena_to_use);
249
+ {
250
+ std::string key(10000, 'a');
251
+ const char* const data = key.data();
252
+ (*map)[key] = 0;
253
+ EXPECT_EQ(data, key.data());
254
+ EXPECT_NE(data, map->find(std::string(10000, 'a'))->first.data());
255
+ }
256
+
257
+ {
258
+ std::string key(10000, 'b');
259
+ const char* const data = key.data();
260
+ (*map)[std::move(key)] = 0;
261
+ EXPECT_NE(data, key.data()); // NOLINT
262
+ EXPECT_EQ(data, map->find(std::string(10000, 'b'))->first.data());
263
+ }
264
+
265
+ if (arena_to_use == nullptr) {
266
+ delete map;
267
+ }
268
+ }
269
+ }
270
+
271
+ TEST_F(MapImplTest, OperatorBracketNonExist) {
272
+ int32_t key = 0;
273
+ int32_t default_value = 0;
274
+
275
+ EXPECT_EQ(default_value, map_[key]);
276
+ ExpectSingleElement(key, default_value);
277
+ }
278
+
279
+ TEST_F(MapImplTest, MutableAt) {
280
+ int32_t key = 0;
281
+ int32_t value1 = 100;
282
+ int32_t value2 = 101;
283
+
284
+ map_[key] = value1;
285
+ ExpectSingleElement(key, value1);
286
+
287
+ map_.at(key) = value2;
288
+ ExpectSingleElement(key, value2);
289
+ }
290
+
291
+ #if GTEST_HAS_DEATH_TEST
292
+
293
+ TEST_F(MapImplTest, MutableAtNonExistDeathTest) {
294
+ EXPECT_DEATH((void)map_.at(0), "");
295
+ }
296
+
297
+ TEST_F(MapImplTest, ImmutableAtNonExistDeathTest) {
298
+ EXPECT_DEATH((void)const_map_.at(0), "");
299
+ }
300
+
301
+ TEST_F(MapImplTest, UsageErrors) {
302
+ MapKey key;
303
+ key.SetInt64Value(1);
304
+ EXPECT_DEATH((void)key.GetUInt64Value(),
305
+ "Protocol Buffer map usage error:\n"
306
+ "MapKey::GetUInt64Value type does not match\n"
307
+ " Expected : uint64\n"
308
+ " Actual : int64");
309
+
310
+ MapValueRef value;
311
+ EXPECT_DEATH(
312
+ value.SetFloatValue(0.1),
313
+ testing::AnyOf(
314
+ testing::HasSubstr(
315
+ "Protocol Buffer map usage error:\n"
316
+ "MapValueRef::type MapValueRef is not initialized."),
317
+ testing::HasSubstr(
318
+ "Protocol Buffer map usage error:\n"
319
+ "MapValueConstRef::type MapValueConstRef is not initialized.")));
320
+ }
321
+
322
+ #endif // GTEST_HAS_DEATH_TEST
323
+
324
+ TEST_F(MapImplTest, MapKeyAssignment) {
325
+ MapKey from, to;
326
+ from.SetStringValue("abc");
327
+ to = from;
328
+ EXPECT_EQ("abc", to.GetStringValue());
329
+ }
330
+
331
+ TEST_F(MapImplTest, CountNonExist) { EXPECT_EQ(0, map_.count(0)); }
332
+
333
+ TEST_F(MapImplTest, ContainNotExist) { EXPECT_FALSE(map_.contains(0)); }
334
+
335
+ TEST_F(MapImplTest, ImmutableContainNotExist) {
336
+ EXPECT_FALSE(const_map_.contains(0));
337
+ }
338
+
339
+ TEST_F(MapImplTest, MutableFindNonExist) {
340
+ EXPECT_TRUE(map_.end() == map_.find(0));
341
+ }
342
+
343
+ TEST_F(MapImplTest, ImmutableFindNonExist) {
344
+ EXPECT_TRUE(const_map_.end() == const_map_.find(0));
345
+ }
346
+
347
+ TEST_F(MapImplTest, ConstEnd) {
348
+ EXPECT_TRUE(const_map_.end() == const_map_.cend());
349
+ }
350
+
351
+ TEST_F(MapImplTest, GetReferenceFromIterator) {
352
+ for (int i = 0; i < 10; i++) {
353
+ map_[i] = i;
354
+ }
355
+
356
+ for (Map<int32_t, int32_t>::const_iterator it = map_.cbegin();
357
+ it != map_.cend();) {
358
+ Map<int32_t, int32_t>::const_reference entry = *it++;
359
+ EXPECT_EQ(entry.first, entry.second);
360
+ }
361
+
362
+ for (Map<int32_t, int32_t>::const_iterator it = const_map_.begin();
363
+ it != const_map_.end();) {
364
+ Map<int32_t, int32_t>::const_reference entry = *it++;
365
+ EXPECT_EQ(entry.first, entry.second);
366
+ }
367
+
368
+ for (Map<int32_t, int32_t>::iterator it = map_.begin(); it != map_.end();) {
369
+ Map<int32_t, int32_t>::reference entry = *it++;
370
+ EXPECT_EQ(entry.first + 1, ++entry.second);
371
+ }
372
+ }
373
+
374
+ TEST_F(MapImplTest, IteratorBasic) {
375
+ map_[0] = 0;
376
+
377
+ // Default constructible (per forward iterator requirements).
378
+ Map<int, int>::const_iterator cit;
379
+ Map<int, int>::iterator it;
380
+
381
+ it = map_.begin();
382
+ cit = it; // Converts to const_iterator
383
+
384
+ // Can compare between them.
385
+ EXPECT_TRUE(it == cit);
386
+ EXPECT_FALSE(cit != it);
387
+
388
+ // Pre increment.
389
+ EXPECT_FALSE(it == ++cit);
390
+
391
+ // Post increment.
392
+ EXPECT_FALSE(it++ == cit);
393
+ EXPECT_TRUE(it == cit);
394
+ }
395
+
396
+ // Arbitrary odd integers for creating test data.
397
+ static int k0 = 812398771;
398
+ static int k1 = 1312938717;
399
+ static int k2 = 1321555333;
400
+
401
+ TEST_F(MapImplTest, CopyIteratorStressTest) {
402
+ std::vector<Map<int32_t, int32_t>::iterator> v;
403
+ const int kIters = 1e5;
404
+ for (uint32_t i = 0; i < kIters; i++) {
405
+ int32_t key = (3 + i * (5 + i * (-8 + i * (62 + i)))) & 0x77777777;
406
+ map_[key] = i;
407
+ v.push_back(map_.find(key));
408
+ }
409
+ for (auto it = v.begin(); it != v.end(); it++) {
410
+ Map<int32_t, int32_t>::iterator i = *it;
411
+ ASSERT_EQ(i->first, (*it)->first);
412
+ ASSERT_EQ(i->second, (*it)->second);
413
+ }
414
+ }
415
+
416
+ template <typename T, typename U>
417
+ static void TestValidityForAllKeysExcept(int key_to_avoid, const T& check_map,
418
+ const U& map) {
419
+ typedef typename U::value_type value_type; // a key-value pair
420
+ for (typename U::const_iterator it = map.begin(); it != map.end(); ++it) {
421
+ const int key = it->first;
422
+ if (key == key_to_avoid) continue;
423
+ // All iterators relevant to this key, whether old (from check_map) or new,
424
+ // must point to the same memory. So, test pointer equality here.
425
+ const value_type* check_val = &*check_map.find(key)->second;
426
+ EXPECT_EQ(check_val, &*it);
427
+ EXPECT_EQ(check_val, &*map.find(key));
428
+ }
429
+ }
430
+
431
+ // EXPECT i0 and i1 to be the same.
432
+ template <typename Iter>
433
+ static void TestEqualIterators(Iter i0, Iter i1, Iter end) {
434
+ EXPECT_EQ(i0 == end, i1 == end);
435
+ if (i0 == end) return;
436
+ EXPECT_EQ(&*i0, &*i1);
437
+ }
438
+
439
+ template <typename IteratorType>
440
+ static void TestOldVersusNewIterator(int skip, Map<int, int>* m) {
441
+ const int initial_size = m->size();
442
+ IteratorType it = m->begin();
443
+ for (int i = 0; i < skip && it != m->end(); it++, i++) {
444
+ }
445
+ if (it == m->end()) return;
446
+ const IteratorType old = it;
447
+ ABSL_LOG(INFO) << "skip=" << skip << ", old->first=" << old->first;
448
+ const int target_size =
449
+ initial_size < 100 ? initial_size * 5 : initial_size * 5 / 4;
450
+ for (int i = 0; m->size() <= target_size; i++) {
451
+ (*m)[i] = 0;
452
+ }
453
+ // Iterator 'old' should still work just fine despite the growth of *m.
454
+ const IteratorType after_growth = m->find(old->first);
455
+ TestEqualIterators<IteratorType>(old, after_growth, m->end());
456
+
457
+ // Now shrink the number of elements. Do this with a mix of erases and
458
+ // inserts to increase the chance that the hashtable will resize to a lower
459
+ // number of buckets. (But, in any case, the test is still useful.)
460
+ for (int i = 0; i < 2 * (target_size - initial_size); i++) {
461
+ if (i != old->first) {
462
+ m->erase(i);
463
+ }
464
+ if (((i ^ m->begin()->first) & 15) == 0) {
465
+ (*m)[i * 342] = i;
466
+ }
467
+ }
468
+ // Now, the table has grown and shrunk; test again.
469
+ TestEqualIterators<IteratorType>(old, m->find(old->first), m->end());
470
+ TestEqualIterators<IteratorType>(old, after_growth, m->end());
471
+ }
472
+
473
+ // Create and test an n-element Map, with emphasis on iterator correctness.
474
+ static void StressTestIterators(int n) {
475
+ ABSL_LOG(INFO) << "StressTestIterators " << n;
476
+ ABSL_CHECK_GT(n, 0);
477
+ // Create a random-looking map of size n. Use non-negative integer keys.
478
+ Map<int, int> m;
479
+ uint32_t frog = 123987 + n;
480
+ int last_key = 0;
481
+ int counter = 0;
482
+ while (m.size() < n) {
483
+ frog *= static_cast<uint32_t>(k0);
484
+ frog ^= frog >> 17;
485
+ frog += counter++;
486
+ last_key =
487
+ static_cast<int>(frog) >= 0 ? static_cast<int>(frog) : last_key ^ 1;
488
+ ABSL_DCHECK_GE(last_key, 0);
489
+ m[last_key] = last_key ^ 1;
490
+ }
491
+ // Test it.
492
+ ASSERT_EQ(n, m.size());
493
+ // Create maps of pointers and iterators.
494
+ // These should remain valid even if we modify m.
495
+ absl::flat_hash_map<int, Map<int, int>::value_type*> mp(n);
496
+ absl::flat_hash_map<int, Map<int, int>::iterator> mi(n);
497
+ for (Map<int, int>::iterator it = m.begin(); it != m.end(); ++it) {
498
+ mp[it->first] = &*it;
499
+ mi[it->first] = it;
500
+ }
501
+ ASSERT_EQ(m.size(), mi.size());
502
+ ASSERT_EQ(m.size(), mp.size());
503
+ m.erase(last_key);
504
+ ASSERT_EQ(n - 1, m.size());
505
+ TestValidityForAllKeysExcept(last_key, mp, m);
506
+ TestValidityForAllKeysExcept(last_key, mi, m);
507
+
508
+ m[last_key] = 0;
509
+ ASSERT_EQ(n, m.size());
510
+ // Test old iterator vs new iterator, with table modification in between.
511
+ TestOldVersusNewIterator<Map<int, int>::const_iterator>(n % 3, &m);
512
+ TestOldVersusNewIterator<Map<int, int>::iterator>(n % (1 + (n / 40)), &m);
513
+ // Finally, ensure erase(iterator) doesn't reorder anything, because that is
514
+ // what its documentation says.
515
+ m[last_key] = m[last_key ^ 999] = 0;
516
+ std::vector<Map<int, int>::iterator> v;
517
+ v.reserve(m.size());
518
+ int position_of_last_key = 0;
519
+ for (Map<int, int>::iterator it = m.begin(); it != m.end(); ++it) {
520
+ if (it->first == last_key) {
521
+ position_of_last_key = v.size();
522
+ }
523
+ v.push_back(it);
524
+ }
525
+ ASSERT_EQ(m.size(), v.size());
526
+ const auto erase_result = m.erase(m.find(last_key));
527
+ int index = 0;
528
+ for (auto it = m.begin(); it != m.end(); ++it, ++index) {
529
+ if (index == position_of_last_key) {
530
+ EXPECT_EQ(&*erase_result, &*v[++index]);
531
+ }
532
+ ASSERT_EQ(&*it, &*v[index]);
533
+ }
534
+ }
535
+
536
+ TEST_F(MapImplTest, IteratorInvalidation) {
537
+ // Create a set of pseudo-random sizes to test.
538
+ #ifndef NDEBUG
539
+ const int kMaxSizeToTest = 100 * 1000;
540
+ #else
541
+ const int kMaxSizeToTest = 1000 * 1000;
542
+ #endif
543
+ absl::btree_set<int> s;
544
+ int n = kMaxSizeToTest;
545
+ unsigned int frog = k1 + n;
546
+ while (n > 1 && s.size() < 25) {
547
+ s.insert(n);
548
+ n = static_cast<int>(n * 100 / (101.0 + (frog & 63)));
549
+ frog *= k2;
550
+ frog ^= frog >> 17;
551
+ }
552
+ // Ensure we test a few small sizes.
553
+ s.insert(1);
554
+ s.insert(2);
555
+ s.insert(3);
556
+ // Now, the real work.
557
+ for (int i : s) {
558
+ StressTestIterators(i);
559
+ }
560
+ }
561
+
562
+ // Test that erase() revalidates iterators.
563
+ TEST_F(MapImplTest, EraseRevalidates) {
564
+ map_[3] = map_[13] = map_[20] = 0;
565
+ const int initial_size = map_.size();
566
+ EXPECT_EQ(3, initial_size);
567
+ std::vector<Map<int, int>::iterator> v;
568
+ for (Map<int, int>::iterator it = map_.begin(); it != map_.end(); ++it) {
569
+ v.push_back(it);
570
+ }
571
+ EXPECT_EQ(initial_size, v.size());
572
+ for (int i = 0; map_.size() <= initial_size * 20; i++) {
573
+ map_[i] = 0;
574
+ }
575
+ const int larger_size = map_.size();
576
+ // We've greatly increased the size of the map, so it is highly likely that
577
+ // the following will corrupt m if erase() doesn't properly revalidate
578
+ // iterators passed to it. Finishing this routine without crashing indicates
579
+ // success.
580
+ for (int i = 0; i < v.size(); i++) {
581
+ map_.erase(v[i]);
582
+ }
583
+ EXPECT_EQ(larger_size - v.size(), map_.size());
584
+ }
585
+
586
+ template <typename T>
587
+ bool IsConstHelper(T& /*t*/) { // NOLINT. We want to catch non-const refs here.
588
+ return false;
589
+ }
590
+ template <typename T>
591
+ bool IsConstHelper(const T& /*t*/) {
592
+ return true;
593
+ }
594
+
595
+ TEST_F(MapImplTest, IteratorConstness) {
596
+ map_[0] = 0;
597
+ EXPECT_TRUE(IsConstHelper(*map_.cbegin()));
598
+ EXPECT_TRUE(IsConstHelper(*const_map_.begin()));
599
+ EXPECT_FALSE(IsConstHelper(*map_.begin()));
600
+ }
601
+
602
+ bool IsForwardIteratorHelper(std::forward_iterator_tag /*tag*/) { return true; }
603
+
604
+ TEST_F(MapImplTest, IteratorCategory) {
605
+ EXPECT_TRUE(IsForwardIteratorHelper(
606
+ std::iterator_traits<Map<int, int>::iterator>::iterator_category()));
607
+ EXPECT_TRUE(IsForwardIteratorHelper(
608
+ std::iterator_traits<
609
+ Map<int, int>::const_iterator>::iterator_category()));
610
+ }
611
+
612
+ TEST_F(MapImplTest, InsertSingleLValue) {
613
+ int32_t key = 0;
614
+ int32_t value1 = 100;
615
+ int32_t value2 = 101;
616
+
617
+ // Insert a non-existing key.
618
+ Map<int32_t, int32_t>::value_type v1(key, value1);
619
+ std::pair<Map<int32_t, int32_t>::iterator, bool> result1 = map_.insert(v1);
620
+ ExpectSingleElement(key, value1);
621
+
622
+ Map<int32_t, int32_t>::iterator it1 = result1.first;
623
+ EXPECT_EQ(key, it1->first);
624
+ EXPECT_EQ(value1, it1->second);
625
+ EXPECT_TRUE(result1.second);
626
+
627
+ // Insert an existing key.
628
+ Map<int32_t, int32_t>::value_type v2(key, value2);
629
+ std::pair<Map<int32_t, int32_t>::iterator, bool> result2 = map_.insert(v2);
630
+ ExpectSingleElement(key, value1);
631
+
632
+ Map<int32_t, int32_t>::iterator it2 = result2.first;
633
+ EXPECT_TRUE(it1 == it2);
634
+ EXPECT_FALSE(result2.second);
635
+ }
636
+
637
+ TEST_F(MapImplTest, InsertSingleRValue) {
638
+ int32_t key = 0;
639
+ int32_t value1 = 100;
640
+ int32_t value2 = 101;
641
+
642
+ // Insert a non-existing key.
643
+ std::pair<Map<int32_t, int32_t>::iterator, bool> result1 =
644
+ map_.insert(Map<int32_t, int32_t>::value_type(key, value1));
645
+ ExpectSingleElement(key, value1);
646
+
647
+ Map<int32_t, int32_t>::iterator it1 = result1.first;
648
+ EXPECT_EQ(key, it1->first);
649
+ EXPECT_EQ(value1, it1->second);
650
+ EXPECT_TRUE(result1.second);
651
+
652
+ // Insert an existing key.
653
+ std::pair<Map<int32_t, int32_t>::iterator, bool> result2 =
654
+ map_.insert(Map<int32_t, int32_t>::value_type(key, value2));
655
+ ExpectSingleElement(key, value1);
656
+
657
+ Map<int32_t, int32_t>::iterator it2 = result2.first;
658
+ EXPECT_TRUE(it1 == it2);
659
+ EXPECT_FALSE(result2.second);
660
+ }
661
+
662
+ TEST_F(MapImplTest, InsertSingleBraceInitList) {
663
+ int32_t key = 0;
664
+ int32_t value1 = 100;
665
+ int32_t value2 = 101;
666
+
667
+ // Insert a non-existing key.
668
+ auto result1 = map_.insert({key, value1});
669
+ ExpectSingleElement(key, value1);
670
+
671
+ auto it1 = result1.first;
672
+ EXPECT_EQ(key, it1->first);
673
+ EXPECT_EQ(value1, it1->second);
674
+ EXPECT_TRUE(result1.second);
675
+
676
+ // Insert an existing key.
677
+ auto result2 = map_.insert({key, value2});
678
+ ExpectSingleElement(key, value1);
679
+
680
+ auto it2 = result2.first;
681
+ EXPECT_TRUE(it1 == it2);
682
+ EXPECT_FALSE(result2.second);
683
+ }
684
+
685
+ TEST_F(MapImplTest, InsertSingleBraceInitListTypeMismatch) {
686
+ int32_t key = 0;
687
+ int32_t value1 = 100;
688
+ int32_t value2 = 101;
689
+ Map<int64_t, int64_t> m;
690
+
691
+ // Insert a non-existing key.
692
+ auto result1 = m.insert({key, value1});
693
+ EXPECT_TRUE(result1.second);
694
+
695
+ // Insert an existing key.
696
+ auto result2 = m.insert({key, value2});
697
+ EXPECT_FALSE(result2.second);
698
+
699
+ EXPECT_TRUE(result1.first == result2.first);
700
+ }
701
+
702
+ TEST_F(MapImplTest, TryEmplace) {
703
+ using ::testing::Pair;
704
+ using ::testing::UnorderedElementsAre;
705
+
706
+ Map<int32_t, std::string> m;
707
+
708
+ m.try_emplace(1, "one");
709
+ EXPECT_EQ(m.size(), 1);
710
+
711
+ const int32_t key = 42;
712
+ m.try_emplace(key, 3, 'a');
713
+ m.try_emplace(2, std::string("two"));
714
+ EXPECT_THAT(
715
+ m, UnorderedElementsAre(Pair(1, "one"), Pair(2, "two"), Pair(42, "aaa")));
716
+ }
717
+
718
+ TEST_F(MapImplTest, Emplace) {
719
+ using ::testing::Pair;
720
+ using ::testing::UnorderedElementsAre;
721
+
722
+ Map<int32_t, std::string> m;
723
+
724
+ m.emplace(1, "one");
725
+ EXPECT_EQ(m.size(), 1);
726
+
727
+ const int32_t key = 42;
728
+ m.emplace(key, "aaa");
729
+ m.emplace(2, std::string("two"));
730
+ EXPECT_THAT(
731
+ m, UnorderedElementsAre(Pair(1, "one"), Pair(2, "two"), Pair(42, "aaa")));
732
+ }
733
+
734
+ TEST_F(MapImplTest, TryEmplaceExisting) {
735
+ Arena arena;
736
+ Map<int32_t, int32_t>& m = *Arena::Create<Map<int32_t, int32_t>>(&arena);
737
+ const size_t size1 = arena.SpaceUsed();
738
+
739
+ m.try_emplace(1, 1);
740
+ ASSERT_EQ(m.size(), 1);
741
+
742
+ const size_t size2 = arena.SpaceUsed();
743
+ ASSERT_GT(size2, size1);
744
+
745
+ m.try_emplace(1, 123);
746
+ EXPECT_EQ(m.size(), 1);
747
+
748
+ EXPECT_EQ(size2, arena.SpaceUsed());
749
+ }
750
+
751
+ TEST_F(MapImplTest, EmplaceSingle) {
752
+ int32_t key = 0;
753
+ int32_t value1 = 100;
754
+ int32_t value2 = 101;
755
+
756
+ // Emplace a non-existing key.
757
+ auto result1 = map_.emplace(key, value1);
758
+ ExpectSingleElement(key, value1);
759
+
760
+ Map<int32_t, int32_t>::iterator it1 = result1.first;
761
+ EXPECT_EQ(key, it1->first);
762
+ EXPECT_EQ(value1, it1->second);
763
+ EXPECT_TRUE(result1.second);
764
+
765
+ // Emplace an existing key.
766
+ auto result2 = map_.emplace(key, value2);
767
+ ExpectSingleElement(key, value1);
768
+
769
+ Map<int32_t, int32_t>::iterator it2 = result2.first;
770
+ EXPECT_TRUE(it1 == it2);
771
+ EXPECT_FALSE(result2.second);
772
+ }
773
+
774
+ TEST_F(MapImplTest, InsertByIterator) {
775
+ int32_t key1 = 0;
776
+ int32_t key2 = 1;
777
+ int32_t value1a = 100;
778
+ int32_t value1b = 101;
779
+ int32_t value2a = 200;
780
+ int32_t value2b = 201;
781
+
782
+ absl::flat_hash_map<int32_t, int32_t> map1;
783
+ map1[key1] = value1a;
784
+ map1[key2] = value2a;
785
+
786
+ map_.insert(map1.begin(), map1.end());
787
+ ExpectElements(map1);
788
+
789
+ absl::flat_hash_map<int32_t, int32_t> map2;
790
+ map2[key1] = value1b;
791
+ map2[key2] = value2b;
792
+
793
+ map_.insert(map2.begin(), map2.end());
794
+ ExpectElements(map1);
795
+ }
796
+
797
+ TEST_F(MapImplTest, InsertByInitializerList) {
798
+ map_.insert({{1, 100}, {2, 200}});
799
+ ExpectElements({{1, 100}, {2, 200}});
800
+
801
+ map_.insert({{2, 201}, {3, 301}});
802
+ ExpectElements({{1, 100}, {2, 200}, {3, 301}});
803
+ }
804
+
805
+ TEST_F(MapImplTest, EraseSingleByKey) {
806
+ int32_t key = 0;
807
+ int32_t value = 100;
808
+
809
+ map_[key] = value;
810
+ ExpectSingleElement(key, value);
811
+
812
+ // Erase an existing key.
813
+ EXPECT_EQ(1, map_.erase(key));
814
+ EXPECT_TRUE(map_.empty());
815
+ EXPECT_EQ(0, map_.size());
816
+ EXPECT_TRUE(map_.end() == map_.find(key));
817
+ EXPECT_TRUE(map_.begin() == map_.end());
818
+
819
+ // Erase a non-existing key.
820
+ EXPECT_EQ(0, map_.erase(key));
821
+ }
822
+
823
+ TEST_F(MapImplTest, EraseMultipleByKey) {
824
+ // erase in one specific order to trigger corner cases
825
+ for (int i = 0; i < 5; i++) {
826
+ map_[i] = i;
827
+ }
828
+
829
+ map_.erase(0);
830
+ EXPECT_EQ(4, map_.size());
831
+ EXPECT_TRUE(map_.end() == map_.find(0));
832
+
833
+ map_.erase(1);
834
+ EXPECT_EQ(3, map_.size());
835
+ EXPECT_TRUE(map_.end() == map_.find(1));
836
+
837
+ map_.erase(3);
838
+ EXPECT_EQ(2, map_.size());
839
+ EXPECT_TRUE(map_.end() == map_.find(3));
840
+
841
+ map_.erase(4);
842
+ EXPECT_EQ(1, map_.size());
843
+ EXPECT_TRUE(map_.end() == map_.find(4));
844
+
845
+ map_.erase(2);
846
+ EXPECT_EQ(0, map_.size());
847
+ EXPECT_TRUE(map_.end() == map_.find(2));
848
+ }
849
+
850
+ TEST_F(MapImplTest, EraseSingleByIterator) {
851
+ int32_t key = 0;
852
+ int32_t value = 100;
853
+
854
+ map_[key] = value;
855
+ ExpectSingleElement(key, value);
856
+
857
+ Map<int32_t, int32_t>::iterator it = map_.find(key);
858
+ map_.erase(it);
859
+ EXPECT_TRUE(map_.empty());
860
+ EXPECT_EQ(0, map_.size());
861
+ EXPECT_TRUE(map_.end() == map_.find(key));
862
+ EXPECT_TRUE(map_.begin() == map_.end());
863
+ }
864
+
865
+ TEST_F(MapImplTest, ValidIteratorAfterErase) {
866
+ for (int i = 0; i < 10; i++) {
867
+ map_[i] = i;
868
+ }
869
+
870
+ int count = 0;
871
+
872
+ for (Map<int32_t, int32_t>::iterator it = map_.begin(); it != map_.end();) {
873
+ count++;
874
+ if (it->first % 2 == 1) {
875
+ map_.erase(it++);
876
+ } else {
877
+ ++it;
878
+ }
879
+ }
880
+
881
+ EXPECT_EQ(10, count);
882
+ EXPECT_EQ(5, map_.size());
883
+ }
884
+
885
+ TEST_F(MapImplTest, EraseByIterator) {
886
+ int32_t key1 = 0;
887
+ int32_t key2 = 1;
888
+ int32_t value1 = 100;
889
+ int32_t value2 = 101;
890
+
891
+ absl::flat_hash_map<int32_t, int32_t> map;
892
+ map[key1] = value1;
893
+ map[key2] = value2;
894
+
895
+ map_.insert(map.begin(), map.end());
896
+ ExpectElements(map);
897
+
898
+ map_.erase(map_.begin(), map_.end());
899
+ EXPECT_TRUE(map_.empty());
900
+ EXPECT_EQ(0, map_.size());
901
+ EXPECT_TRUE(map_.end() == map_.find(key1));
902
+ EXPECT_TRUE(map_.end() == map_.find(key2));
903
+ EXPECT_TRUE(map_.begin() == map_.end());
904
+ }
905
+
906
+ TEST_F(MapImplTest, Clear) {
907
+ int32_t key = 0;
908
+ int32_t value = 100;
909
+
910
+ map_[key] = value;
911
+ ExpectSingleElement(key, value);
912
+
913
+ map_.clear();
914
+
915
+ EXPECT_TRUE(map_.empty());
916
+ EXPECT_EQ(0, map_.size());
917
+ EXPECT_TRUE(map_.end() == map_.find(key));
918
+ EXPECT_TRUE(map_.begin() == map_.end());
919
+ }
920
+
921
+ TEST_F(MapImplTest, IterConstructor) {
922
+ int32_t key1 = 0;
923
+ int32_t key2 = 1;
924
+ int32_t value1 = 100;
925
+ int32_t value2 = 101;
926
+
927
+ absl::flat_hash_map<int32_t, int32_t> map;
928
+ map[key1] = value1;
929
+ map[key2] = value2;
930
+
931
+ Map<int32_t, int32_t> new_map(map.begin(), map.end());
932
+
933
+ EXPECT_EQ(2, new_map.size());
934
+ EXPECT_EQ(value1, new_map.at(key1));
935
+ EXPECT_EQ(value2, new_map.at(key2));
936
+ }
937
+
938
+ TEST_F(MapImplTest, Assigner) {
939
+ int32_t key1 = 0;
940
+ int32_t key2 = 1;
941
+ int32_t value1 = 100;
942
+ int32_t value2 = 101;
943
+
944
+ absl::flat_hash_map<int32_t, int32_t> map;
945
+ map[key1] = value1;
946
+ map[key2] = value2;
947
+
948
+ map_.insert(map.begin(), map.end());
949
+
950
+ Map<int32_t, int32_t> other;
951
+ int32_t key_other = 123;
952
+ int32_t value_other = 321;
953
+ other[key_other] = value_other;
954
+ EXPECT_EQ(1, other.size());
955
+
956
+ other = map_;
957
+
958
+ EXPECT_EQ(2, other.size());
959
+ EXPECT_EQ(value1, other.at(key1));
960
+ EXPECT_EQ(value2, other.at(key2));
961
+ EXPECT_TRUE(other.find(key_other) == other.end());
962
+
963
+ // Self assign
964
+ other = *&other; // Avoid -Wself-assign.
965
+ EXPECT_EQ(2, other.size());
966
+ EXPECT_EQ(value1, other.at(key1));
967
+ EXPECT_EQ(value2, other.at(key2));
968
+ }
969
+
970
+ TEST_F(MapImplTest, Rehash) {
971
+ const int test_size = 50;
972
+ absl::flat_hash_map<int32_t, int32_t> reference_map;
973
+ for (int i = 0; i < test_size; i++) {
974
+ reference_map[i] = i;
975
+ }
976
+ for (int i = 0; i < test_size; i++) {
977
+ map_[i] = reference_map[i];
978
+ EXPECT_EQ(reference_map[i], map_[i]);
979
+ }
980
+ for (int i = 0; i < test_size; i++) {
981
+ map_.erase(i);
982
+ EXPECT_TRUE(map_.end() == map_.find(i));
983
+ }
984
+ EXPECT_TRUE(map_.empty());
985
+ }
986
+
987
+ TEST_F(MapImplTest, EqualRange) {
988
+ int key = 100, key_missing = 101;
989
+ map_[key] = 100;
990
+
991
+ std::pair<Map<int32_t, int32_t>::iterator, Map<int32_t, int32_t>::iterator>
992
+ range = map_.equal_range(key);
993
+ EXPECT_TRUE(map_.find(key) == range.first);
994
+ EXPECT_TRUE(++map_.find(key) == range.second);
995
+
996
+ range = map_.equal_range(key_missing);
997
+ EXPECT_TRUE(map_.end() == range.first);
998
+ EXPECT_TRUE(map_.end() == range.second);
999
+
1000
+ std::pair<Map<int32_t, int32_t>::const_iterator,
1001
+ Map<int32_t, int32_t>::const_iterator>
1002
+ const_range = const_map_.equal_range(key);
1003
+ EXPECT_TRUE(const_map_.find(key) == const_range.first);
1004
+ EXPECT_TRUE(++const_map_.find(key) == const_range.second);
1005
+
1006
+ const_range = const_map_.equal_range(key_missing);
1007
+ EXPECT_TRUE(const_map_.end() == const_range.first);
1008
+ EXPECT_TRUE(const_map_.end() == const_range.second);
1009
+ }
1010
+
1011
+ TEST_F(MapImplTest, ConvertToStdMap) {
1012
+ map_[100] = 101;
1013
+ absl::flat_hash_map<int32_t, int32_t> std_map(map_.begin(), map_.end());
1014
+ EXPECT_EQ(1, std_map.size());
1015
+ EXPECT_EQ(101, std_map[100]);
1016
+ }
1017
+
1018
+ TEST_F(MapImplTest, ConvertToStdVectorOfPairs) {
1019
+ map_[100] = 101;
1020
+ std::vector<std::pair<int32_t, int32_t>> std_vec(map_.begin(), map_.end());
1021
+ EXPECT_EQ(1, std_vec.size());
1022
+ EXPECT_EQ(100, std_vec[0].first);
1023
+ EXPECT_EQ(101, std_vec[0].second);
1024
+ }
1025
+
1026
+ TEST_F(MapImplTest, SwapBasic) {
1027
+ Map<int32_t, int32_t> another;
1028
+ map_[9398] = 41999;
1029
+ another[9398] = 41999;
1030
+ another[8070] = 42056;
1031
+ another.swap(map_);
1032
+ EXPECT_THAT(another,
1033
+ testing::UnorderedElementsAre(testing::Pair(9398, 41999)));
1034
+ EXPECT_THAT(map_, testing::UnorderedElementsAre(testing::Pair(8070, 42056),
1035
+ testing::Pair(9398, 41999)));
1036
+ }
1037
+
1038
+ TEST_F(MapImplTest, SwapArena) {
1039
+ Arena arena1, arena2;
1040
+ auto* m1_ptr = Arena::Create<Map<int32_t, int32_t>>(&arena1);
1041
+ auto* m2_ptr = Arena::Create<Map<int32_t, int32_t>>(&arena2);
1042
+ auto& m1 = *m1_ptr;
1043
+ auto& m2 = *m2_ptr;
1044
+ map_[9398] = 41999;
1045
+ m1[9398] = 41999;
1046
+ m1[8070] = 42056;
1047
+ m2[10244] = 10247;
1048
+ m2[8070] = 42056;
1049
+ m1.swap(map_);
1050
+ EXPECT_THAT(m1, testing::UnorderedElementsAre(testing::Pair(9398, 41999)));
1051
+ EXPECT_THAT(map_, testing::UnorderedElementsAre(testing::Pair(8070, 42056),
1052
+ testing::Pair(9398, 41999)));
1053
+ m2.swap(m1);
1054
+ EXPECT_THAT(m1, testing::UnorderedElementsAre(testing::Pair(8070, 42056),
1055
+ testing::Pair(10244, 10247)));
1056
+ EXPECT_THAT(m2, testing::UnorderedElementsAre(testing::Pair(9398, 41999)));
1057
+ }
1058
+
1059
+ TEST_F(MapImplTest, SwapFieldArenaReflection) {
1060
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
1061
+
1062
+ {
1063
+ // Tests filled lfs and empty rhs.
1064
+ TestMap rhs;
1065
+
1066
+ {
1067
+ // Use local_arena to allocate lhs to trigger use-after-free error.
1068
+ Arena local_arena;
1069
+ auto* lhs = Arena::Create<TestMap>(&local_arena);
1070
+ const auto* reflection = lhs->GetReflection();
1071
+ std::vector<const FieldDescriptor*> fields;
1072
+
1073
+ reflection_tester.SetMapFieldsViaReflection(lhs);
1074
+ reflection->ListFields(*lhs, &fields);
1075
+
1076
+ reflection->SwapFields(lhs, &rhs, fields);
1077
+
1078
+ reflection_tester.ExpectClearViaReflection(*lhs);
1079
+
1080
+ // Add an entry to make sure it is using the right arena.
1081
+ (*lhs->mutable_map_int32_int32())[1234] = 1234;
1082
+ }
1083
+
1084
+ reflection_tester.ExpectMapFieldsSetViaReflection(rhs);
1085
+
1086
+ // Add an entry to make sure it is using the right arena.
1087
+ (*rhs.mutable_map_int32_int32())[1234] = 1234;
1088
+ }
1089
+ }
1090
+
1091
+ TEST_F(MapImplTest, RecursiveMapTypeDoesNotDeadlockOnDynamicMessage) {
1092
+ const auto* descriptor = UNITTEST::TestRecursiveMapMessage::descriptor();
1093
+ const auto* entry_descriptor =
1094
+ descriptor->FindFieldByNumber(1)->message_type();
1095
+
1096
+ {
1097
+ // Start at the message
1098
+ DynamicMessageFactory factory;
1099
+ const Message* prototype = factory.GetPrototype(descriptor);
1100
+ std::unique_ptr<Message> msg(prototype->New());
1101
+ }
1102
+ {
1103
+ // Start at the map entry
1104
+ DynamicMessageFactory factory;
1105
+ const Message* prototype = factory.GetPrototype(entry_descriptor);
1106
+ std::unique_ptr<Message> msg(prototype->New());
1107
+ }
1108
+ }
1109
+
1110
+ TEST_F(MapImplTest, DeleteMapValues) {
1111
+ auto* descriptor = UNITTEST::TestMap::descriptor();
1112
+
1113
+ DynamicMessageFactory factory;
1114
+ std::unique_ptr<Message> dyn_message(factory.GetPrototype(descriptor)->New());
1115
+ std::unique_ptr<Message> gen_message = std::make_unique<TestMap>();
1116
+ Arena arena;
1117
+
1118
+ for (auto* message : {gen_message.get(), dyn_message.get(),
1119
+ gen_message->New(&arena), dyn_message->New(&arena)}) {
1120
+ MapReflectionTester reflection_tester(descriptor);
1121
+ reflection_tester.SetMapFieldsViaMapReflection(message);
1122
+
1123
+ // Each maps has two elements. Let's remove the smallest one first, so that
1124
+ // we can test the result. Then remove the rest and test again.
1125
+
1126
+ for (int i = 0; i < descriptor->field_count(); ++i) {
1127
+ auto* field = descriptor->field(i);
1128
+ if (!field->is_map()) continue;
1129
+
1130
+ ConstMapIterator it =
1131
+ reflection_tester.ConstMapBegin(message, field->name());
1132
+ ConstMapIterator end =
1133
+ reflection_tester.ConstMapEnd(message, field->name());
1134
+ // It's unordered, so search for it.
1135
+ if (it == end) continue;
1136
+ auto next = it;
1137
+ ++next;
1138
+ ASSERT_NE(next, end);
1139
+ if (next.GetKey() < it.GetKey()) {
1140
+ it = next;
1141
+ }
1142
+
1143
+ EXPECT_EQ(reflection_tester.MapSize(*message, field->name()), 2);
1144
+ reflection_tester.DeleteMapValueViaMapReflection(
1145
+ message, field->name(), it.GetKey());
1146
+ EXPECT_EQ(reflection_tester.MapSize(*message, field->name()), 1);
1147
+ }
1148
+
1149
+ EXPECT_THAT(*message, EqualsProto(R"pb(
1150
+ map_int32_int32 { key: 1 value: 1 }
1151
+ map_int64_int64 { key: 1 value: 1 }
1152
+ map_uint32_uint32 { key: 1 value: 1 }
1153
+ map_uint64_uint64 { key: 1 value: 1 }
1154
+ map_sint32_sint32 { key: 1 value: 1 }
1155
+ map_sint64_sint64 { key: 1 value: 1 }
1156
+ map_fixed32_fixed32 { key: 1 value: 1 }
1157
+ map_fixed64_fixed64 { key: 1 value: 1 }
1158
+ map_sfixed32_sfixed32 { key: 1 value: 1 }
1159
+ map_sfixed64_sfixed64 { key: 1 value: 1 }
1160
+ map_int32_float { key: 1 value: 1 }
1161
+ map_int32_double { key: 1 value: 1 }
1162
+ map_bool_bool { key: true value: true }
1163
+ map_string_string {
1164
+ key: "This is another very long string that goes in the heap"
1165
+ value: "This is another very long string that goes in the heap"
1166
+ }
1167
+ map_int32_bytes {
1168
+ key: 1
1169
+ value: "This is another very long string that goes in the heap"
1170
+ }
1171
+ map_int32_enum { key: 1 value: MAP_ENUM_BAZ }
1172
+ map_int32_foreign_message {
1173
+ key: 1
1174
+ value { c: 1 }
1175
+ }
1176
+ )pb"));
1177
+
1178
+ for (int i = 0; i < descriptor->field_count(); ++i) {
1179
+ auto* field = descriptor->field(i);
1180
+ if (!field->is_map()) continue;
1181
+
1182
+ ConstMapIterator it =
1183
+ reflection_tester.ConstMapBegin(message, field->name());
1184
+ ConstMapIterator end =
1185
+ reflection_tester.ConstMapEnd(message, field->name());
1186
+
1187
+ while (it != end) {
1188
+ auto next = it;
1189
+ ++next;
1190
+ reflection_tester.DeleteMapValueViaMapReflection(
1191
+ message, field->name(), it.GetKey());
1192
+ it = next;
1193
+ }
1194
+ EXPECT_EQ(reflection_tester.MapSize(*message, field->name()), 0);
1195
+ }
1196
+ }
1197
+ }
1198
+
1199
+ TEST_F(MapImplTest, CopyAssignMapIterator) {
1200
+ TestMap message;
1201
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
1202
+ reflection_tester.SetMapFieldsViaMapReflection(&message);
1203
+ ConstMapIterator it1 =
1204
+ reflection_tester.ConstMapBegin(&message, "map_int32_int32");
1205
+ ConstMapIterator it2 =
1206
+ reflection_tester.ConstMapEnd(&message, "map_int32_int32");
1207
+ it2 = it1;
1208
+ EXPECT_EQ(it1.GetKey().GetInt32Value(), it2.GetKey().GetInt32Value());
1209
+ }
1210
+
1211
+ class MapTestWithParams
1212
+ : public testing::TestWithParam<std::tuple<bool, bool, bool>> {};
1213
+
1214
+ INSTANTIATE_TEST_SUITE_P(MapTestWithParamsSuite, MapTestWithParams,
1215
+ testing::Combine(testing::Bool(), testing::Bool(),
1216
+ testing::Bool()));
1217
+
1218
+ TEST_P(MapTestWithParams, SwapMapsFieldsViaReflection) {
1219
+ auto* descriptor = UNITTEST::TestMap::descriptor();
1220
+ auto [use_dynamic, lhs_arena, rhs_arena] = GetParam();
1221
+
1222
+ DynamicMessageFactory factory;
1223
+ std::unique_ptr<const Message> dyn_message(
1224
+ factory.GetPrototype(descriptor)->New());
1225
+ TestMap gen_message;
1226
+ Arena arena;
1227
+
1228
+ std::vector<const FieldDescriptor*> fields;
1229
+ for (int i = 0; i < descriptor->field_count(); ++i) {
1230
+ fields.push_back(descriptor->field(i));
1231
+ }
1232
+
1233
+ const auto make = [&, use_dynamic = use_dynamic](bool in_arena) {
1234
+ auto* prototype = use_dynamic ? dyn_message.get() : &gen_message;
1235
+ return in_arena ? prototype->New(&arena)
1236
+ : Arena::Create<std::unique_ptr<Message>>(&arena,
1237
+ prototype->New())
1238
+ ->get();
1239
+ };
1240
+
1241
+ auto* lhs = make(lhs_arena);
1242
+ auto* rhs = make(rhs_arena);
1243
+ MapReflectionTester reflection_tester(descriptor);
1244
+ reflection_tester.SetMapFieldsViaMapReflection(lhs);
1245
+
1246
+ reflection_tester.ExpectMapFieldsSetViaReflectionIterator(lhs);
1247
+ reflection_tester.ExpectClearViaReflectionIterator(rhs);
1248
+
1249
+ lhs->GetReflection()->SwapFields(lhs, rhs, fields);
1250
+
1251
+ reflection_tester.ExpectClearViaReflectionIterator(lhs);
1252
+ reflection_tester.ExpectMapFieldsSetViaReflectionIterator(rhs);
1253
+
1254
+ if (lhs_arena == rhs_arena) {
1255
+ // If they are the same arena, we can try the unsafe swap.
1256
+ lhs->GetReflection()->UnsafeArenaSwapFields(lhs, rhs, fields);
1257
+ reflection_tester.ExpectClearViaReflectionIterator(rhs);
1258
+ reflection_tester.ExpectMapFieldsSetViaReflectionIterator(lhs);
1259
+ }
1260
+ }
1261
+
1262
+ class MapTestCodegenOrDynamic : public testing::TestWithParam<bool> {};
1263
+
1264
+ INSTANTIATE_TEST_SUITE_P(MapTestCodegenOrDynamicSuite, MapTestCodegenOrDynamic,
1265
+ testing::Bool());
1266
+
1267
+ TEST_F(MapImplTest, CopyConstructMapSyncsRepeatedFieldRep) {
1268
+ TestMap msg;
1269
+
1270
+ const auto* reflection = msg.GetReflection();
1271
+ const auto* field = msg.GetDescriptor()->FindFieldByName("map_int32_int32");
1272
+
1273
+ {
1274
+ auto* sub = reflection->AddMessage(&msg, field);
1275
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_key(), 10);
1276
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_value(), 100);
1277
+ }
1278
+
1279
+ TestMap copy = msg;
1280
+ EXPECT_THAT(msg,
1281
+ EqualsProto(R"pb(map_int32_int32 { key: 10 value: 100 })pb"));
1282
+ EXPECT_THAT(copy,
1283
+ EqualsProto(R"pb(map_int32_int32 { key: 10 value: 100 })pb"));
1284
+ }
1285
+
1286
+ TEST_F(MapImplTest, CopyAssignMapSyncsRepeatedFieldRep) {
1287
+ TestMap msg;
1288
+
1289
+ const auto* reflection = msg.GetReflection();
1290
+ const auto* field = msg.GetDescriptor()->FindFieldByName("map_int32_int32");
1291
+
1292
+ {
1293
+ auto* sub = reflection->AddMessage(&msg, field);
1294
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_key(), 10);
1295
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_value(), 100);
1296
+ }
1297
+
1298
+ TestMap dst;
1299
+ dst = msg;
1300
+ EXPECT_THAT(msg,
1301
+ EqualsProto(R"pb(map_int32_int32 { key: 10 value: 100 })pb"));
1302
+ EXPECT_THAT(dst,
1303
+ EqualsProto(R"pb(map_int32_int32 { key: 10 value: 100 })pb"));
1304
+ }
1305
+
1306
+ TEST_F(MapImplTest, MergeMapSyncsRepeatedFieldRep) {
1307
+ TestMap msg;
1308
+
1309
+ const auto* reflection = msg.GetReflection();
1310
+ const auto* field = msg.GetDescriptor()->FindFieldByName("map_int32_int32");
1311
+
1312
+ {
1313
+ auto* sub = reflection->AddMessage(&msg, field);
1314
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_key(), 10);
1315
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_value(), 100);
1316
+ }
1317
+
1318
+ TestMap dst;
1319
+ {
1320
+ auto* sub = reflection->AddMessage(&dst, field);
1321
+ // A duplicate key
1322
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_key(), 10);
1323
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_value(), 200);
1324
+ sub = reflection->AddMessage(&dst, field);
1325
+ // A unique key
1326
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_key(), 11);
1327
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_value(), 17);
1328
+ }
1329
+ dst.MergeFrom(msg);
1330
+ EXPECT_THAT(msg,
1331
+ EqualsProto(R"pb(map_int32_int32 { key: 10 value: 100 })pb"));
1332
+ EXPECT_THAT(dst, EqualsProto(R"pb(
1333
+ map_int32_int32 { key: 10 value: 100 }
1334
+ map_int32_int32 { key: 11 value: 17 }
1335
+ )pb"));
1336
+ }
1337
+
1338
+ TEST_P(MapTestCodegenOrDynamic, LookupMapValueSyncsRepeatedFieldRep) {
1339
+ auto* descriptor = UNITTEST::TestMap::descriptor();
1340
+ bool use_dynamic = GetParam();
1341
+
1342
+ DynamicMessageFactory factory;
1343
+ std::unique_ptr<Message> dyn_message(
1344
+ factory.GetPrototype(descriptor)->New());
1345
+ TestMap gen_message;
1346
+ Message* msg = use_dynamic ? dyn_message.get() : &gen_message;
1347
+
1348
+ const auto* reflection = msg->GetReflection();
1349
+ const auto* field = msg->GetDescriptor()->FindFieldByName("map_int32_int32");
1350
+
1351
+ MapKey map_key;
1352
+ map_key.SetInt32Value(10);
1353
+ auto res =
1354
+ MapReflectionTester::LookupMapValue(*reflection, *msg, *field, map_key);
1355
+ // Check that we don't have it yet.
1356
+ ASSERT_FALSE(res.has_value());
1357
+
1358
+ {
1359
+ auto* sub = reflection->AddMessage(msg, field);
1360
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_key(), 10);
1361
+ sub->GetReflection()->SetInt32(sub, sub->GetDescriptor()->map_value(), 100);
1362
+ }
1363
+
1364
+
1365
+ res = MapReflectionTester::LookupMapValue(*reflection, *msg, *field, map_key);
1366
+ // If this fails, LookupMapValue might have failed to sync from the repeated
1367
+ // field.
1368
+ ASSERT_TRUE(res.has_value());
1369
+ EXPECT_EQ(res->GetInt32Value(), 100);
1370
+ }
1371
+
1372
+ TEST_F(MapImplTest, SpaceUsed) {
1373
+ constexpr size_t kMinCap = 16 / sizeof(void*);
1374
+
1375
+ Map<int32_t, int32_t> m;
1376
+ // An newly constructed map should have no space used.
1377
+ EXPECT_EQ(m.SpaceUsedExcludingSelfLong(), 0);
1378
+
1379
+ struct IntIntNode : internal::NodeBase {
1380
+ std::pair<int32_t, int32_t> kv;
1381
+ };
1382
+
1383
+ for (int i = 0; i < 100; ++i) {
1384
+ m[i];
1385
+ EXPECT_EQ(m.SpaceUsedExcludingSelfLong(),
1386
+ sizeof(void*) * MapTestPeer::NumBuckets(m) +
1387
+ m.size() * sizeof(IntIntNode));
1388
+ }
1389
+
1390
+ // Test string, and non-scalar keys.
1391
+ Map<std::string, int32_t> m2;
1392
+ std::string str = "Some arbitrarily large string";
1393
+ m2[str] = 1;
1394
+
1395
+ struct StringIntNode : internal::NodeBase {
1396
+ std::pair<std::string, int32_t> kv;
1397
+ };
1398
+
1399
+ EXPECT_EQ(m2.SpaceUsedExcludingSelfLong(),
1400
+ sizeof(void*) * kMinCap + sizeof(StringIntNode) +
1401
+ internal::StringSpaceUsedExcludingSelfLong(str));
1402
+
1403
+ struct IntAllTypesNode : internal::NodeBase {
1404
+ std::pair<int32_t, TestAllTypes> kv;
1405
+ };
1406
+
1407
+ // Test messages, and non-scalar values.
1408
+ Map<int32_t, TestAllTypes> m3;
1409
+ m3[0].set_optional_string(str);
1410
+ EXPECT_EQ(m3.SpaceUsedExcludingSelfLong(),
1411
+ sizeof(void*) * kMinCap + sizeof(IntAllTypesNode) +
1412
+ m3[0].SpaceUsedLong() - sizeof(m3[0]));
1413
+ }
1414
+
1415
+ // Attempts to verify that a map with keys a and b has a random ordering. This
1416
+ // function returns true if it succeeds in observing both possible orderings.
1417
+ bool MapOrderingIsRandom(int a, int b) {
1418
+ bool saw_a_first = false;
1419
+ bool saw_b_first = false;
1420
+ std::vector<Map<int32_t, int32_t>> v;
1421
+ while (v.size() < 100) {
1422
+ Map<int32_t, int32_t>& m = v.emplace_back();
1423
+ m[a] = 0;
1424
+ m[b] = 0;
1425
+ int32_t first_element = m.begin()->first;
1426
+ if (first_element == a) saw_a_first = true;
1427
+ if (first_element == b) saw_b_first = true;
1428
+ if (saw_a_first && saw_b_first) {
1429
+ return true;
1430
+ }
1431
+ }
1432
+ return false;
1433
+ }
1434
+
1435
+ // This test verifies that the iteration order is reasonably random even for
1436
+ // small maps.
1437
+ TEST_F(MapImplTest, RandomOrdering) {
1438
+ for (int i = 0; i < 10; ++i) {
1439
+ for (int j = i + 1; j < 10; ++j) {
1440
+ EXPECT_TRUE(MapOrderingIsRandom(i, j))
1441
+ << "Map with keys " << i << " and " << j
1442
+ << " has deterministic ordering";
1443
+ }
1444
+ }
1445
+ }
1446
+
1447
+ template <typename Key>
1448
+ void TestTransparent(const Key& key, const Key& miss_key) {
1449
+ Map<std::string, int> m;
1450
+ const auto& cm = m;
1451
+
1452
+ m.insert({"ABC", 1});
1453
+ m.insert({"DEF", 2});
1454
+
1455
+ const auto abc_it = m.find("ABC");
1456
+
1457
+ using testing::Pair;
1458
+ using testing::UnorderedElementsAre;
1459
+
1460
+ EXPECT_EQ(m.at(key), 1);
1461
+ EXPECT_EQ(cm.at(key), 1);
1462
+
1463
+ #if GTEST_HAS_DEATH_TEST
1464
+ EXPECT_DEATH((void)m.at(miss_key), "");
1465
+ EXPECT_DEATH((void)cm.at(miss_key), "");
1466
+ #endif // GTEST_HAS_DEATH_TEST
1467
+
1468
+ EXPECT_EQ(m.count(key), 1);
1469
+ EXPECT_EQ(cm.count(key), 1);
1470
+ EXPECT_EQ(m.count(miss_key), 0);
1471
+ EXPECT_EQ(cm.count(miss_key), 0);
1472
+
1473
+ EXPECT_EQ(m.find(key), abc_it);
1474
+ EXPECT_EQ(cm.find(key), abc_it);
1475
+ EXPECT_EQ(m.find(miss_key), m.end());
1476
+ EXPECT_EQ(cm.find(miss_key), cm.end());
1477
+
1478
+ EXPECT_TRUE(m.contains(key));
1479
+ EXPECT_TRUE(cm.contains(key));
1480
+ EXPECT_FALSE(m.contains(miss_key));
1481
+ EXPECT_FALSE(cm.contains(miss_key));
1482
+
1483
+ EXPECT_THAT(m.equal_range(key), Pair(abc_it, std::next(abc_it)));
1484
+ EXPECT_THAT(cm.equal_range(key), Pair(abc_it, std::next(abc_it)));
1485
+ EXPECT_THAT(m.equal_range(miss_key), Pair(m.end(), m.end()));
1486
+ EXPECT_THAT(cm.equal_range(miss_key), Pair(m.end(), m.end()));
1487
+
1488
+ EXPECT_THAT(m, UnorderedElementsAre(Pair("ABC", 1), Pair("DEF", 2)));
1489
+ EXPECT_EQ(m.erase(key), 1);
1490
+ EXPECT_THAT(m, UnorderedElementsAre(Pair("DEF", 2)));
1491
+ EXPECT_EQ(m.erase(key), 0);
1492
+ EXPECT_EQ(m.erase(miss_key), 0);
1493
+ EXPECT_THAT(m, UnorderedElementsAre(Pair("DEF", 2)));
1494
+
1495
+ m[key];
1496
+ EXPECT_THAT(m, UnorderedElementsAre(Pair("ABC", 0), Pair("DEF", 2)));
1497
+ m[key] = 1;
1498
+ EXPECT_THAT(m, UnorderedElementsAre(Pair("ABC", 1), Pair("DEF", 2)));
1499
+ }
1500
+
1501
+ // Emulate a non-Abseil string_view (e.g. STL when Abseil's alias is disabled).
1502
+ class CustomStringView {
1503
+ public:
1504
+ CustomStringView(absl::string_view str) : str_(std::string(str)) {}
1505
+
1506
+ const char* data() const { return str_.data(); }
1507
+ size_t size() const { return str_.size(); }
1508
+
1509
+ bool operator==(const CustomStringView& other) const {
1510
+ return other.str_ == str_;
1511
+ }
1512
+ bool operator==(absl::string_view other) const { return other == str_; }
1513
+ explicit operator std::string() const { return str_; }
1514
+ friend std::ostream& operator<<(std::ostream& out, const CustomStringView& view) {
1515
+ return out << view.str_;
1516
+ }
1517
+
1518
+ private:
1519
+ std::string str_;
1520
+ };
1521
+
1522
+ TEST_F(MapImplTest, TransparentLookupForString) {
1523
+ TestTransparent("ABC", "LKJ");
1524
+ TestTransparent(std::string("ABC"), std::string("LKJ"));
1525
+ TestTransparent(absl::string_view("ABC"), absl::string_view("LKJ"));
1526
+ TestTransparent(CustomStringView("ABC"), CustomStringView("LKJ"));
1527
+
1528
+ // std::reference_wrapper
1529
+ std::string abc = "ABC", lkj = "LKJ";
1530
+ TestTransparent(std::ref(abc), std::ref(lkj));
1531
+ TestTransparent(std::cref(abc), std::cref(lkj));
1532
+ TestTransparent(std::ref("ABC"), std::ref("LKJ"));
1533
+ TestTransparent(std::cref("ABC"), std::cref("LKJ"));
1534
+ }
1535
+
1536
+ TEST_F(MapImplTest, ConstInit) {
1537
+ PROTOBUF_CONSTINIT static Map<int, int> map; // NOLINT
1538
+ EXPECT_TRUE(map.empty());
1539
+ }
1540
+
1541
+ // Map Field Reflection Test ========================================
1542
+
1543
+ static int Func(int i, int j) { return i * j; }
1544
+
1545
+ static std::string StrFunc(int i, int j) { return absl::StrCat(Func(i, j)); }
1546
+
1547
+ static int Int(const std::string& value) {
1548
+ int result = 0;
1549
+ std::istringstream(value) >> result;
1550
+ return result;
1551
+ }
1552
+
1553
+ } // namespace
1554
+
1555
+ // This class is a friend, so no anonymous namespace.
1556
+ class MapFieldReflectionTest : public testing::Test {
1557
+ protected:
1558
+ typedef FieldDescriptor FD;
1559
+
1560
+ int MapSize(const Reflection* reflection, const FieldDescriptor* field,
1561
+ const Message& message) {
1562
+ return reflection->MapSize(message, field);
1563
+ }
1564
+ };
1565
+
1566
+ namespace {
1567
+
1568
+ TEST_F(MapFieldReflectionTest, RegularFields) {
1569
+ TestMap message;
1570
+ const Reflection* refl = message.GetReflection();
1571
+ const Descriptor* desc = message.GetDescriptor();
1572
+
1573
+ Map<int32_t, int32_t>* map_int32_int32 = message.mutable_map_int32_int32();
1574
+ Map<int32_t, double>* map_int32_double = message.mutable_map_int32_double();
1575
+ Map<std::string, std::string>* map_string_string =
1576
+ message.mutable_map_string_string();
1577
+ Map<int32_t, ForeignMessage>* map_int32_foreign_message =
1578
+ message.mutable_map_int32_foreign_message();
1579
+
1580
+ for (int i = 0; i < 10; ++i) {
1581
+ (*map_int32_int32)[i] = Func(i, 1);
1582
+ (*map_int32_double)[i] = Func(i, 2);
1583
+ (*map_string_string)[StrFunc(i, 1)] = StrFunc(i, 5);
1584
+ (*map_int32_foreign_message)[i].set_c(Func(i, 6));
1585
+ }
1586
+
1587
+ // Get FieldDescriptors for all the fields of interest.
1588
+ const FieldDescriptor* fd_map_int32_int32 =
1589
+ desc->FindFieldByName("map_int32_int32");
1590
+ const FieldDescriptor* fd_map_int32_double =
1591
+ desc->FindFieldByName("map_int32_double");
1592
+ const FieldDescriptor* fd_map_string_string =
1593
+ desc->FindFieldByName("map_string_string");
1594
+ const FieldDescriptor* fd_map_int32_foreign_message =
1595
+ desc->FindFieldByName("map_int32_foreign_message");
1596
+
1597
+ const FieldDescriptor* fd_map_int32_in32_key =
1598
+ fd_map_int32_int32->message_type()->map_key();
1599
+ const FieldDescriptor* fd_map_int32_in32_value =
1600
+ fd_map_int32_int32->message_type()->map_value();
1601
+ const FieldDescriptor* fd_map_int32_double_key =
1602
+ fd_map_int32_double->message_type()->map_key();
1603
+ const FieldDescriptor* fd_map_int32_double_value =
1604
+ fd_map_int32_double->message_type()->map_value();
1605
+ const FieldDescriptor* fd_map_string_string_key =
1606
+ fd_map_string_string->message_type()->map_key();
1607
+ const FieldDescriptor* fd_map_string_string_value =
1608
+ fd_map_string_string->message_type()->map_value();
1609
+ const FieldDescriptor* fd_map_int32_foreign_message_key =
1610
+ fd_map_int32_foreign_message->message_type()->map_key();
1611
+ const FieldDescriptor* fd_map_int32_foreign_message_value =
1612
+ fd_map_int32_foreign_message->message_type()->map_value();
1613
+
1614
+ // Get RepeatedPtrField objects for all fields of interest.
1615
+ const RepeatedPtrField<Message>& mf_int32_int32 =
1616
+ refl->GetRepeatedPtrField<Message>(message, fd_map_int32_int32);
1617
+ const RepeatedPtrField<Message>& mf_int32_double =
1618
+ refl->GetRepeatedPtrField<Message>(message, fd_map_int32_double);
1619
+ const RepeatedPtrField<Message>& mf_string_string =
1620
+ refl->GetRepeatedPtrField<Message>(message, fd_map_string_string);
1621
+ const RepeatedPtrField<Message>& mf_int32_foreign_message =
1622
+ refl->GetRepeatedPtrField<Message>(message, fd_map_int32_foreign_message);
1623
+
1624
+ // Get mutable RepeatedPtrField objects for all fields of interest.
1625
+ RepeatedPtrField<Message>* mmf_int32_int32 =
1626
+ refl->MutableRepeatedPtrField<Message>(&message, fd_map_int32_int32);
1627
+ RepeatedPtrField<Message>* mmf_int32_double =
1628
+ refl->MutableRepeatedPtrField<Message>(&message, fd_map_int32_double);
1629
+ RepeatedPtrField<Message>* mmf_string_string =
1630
+ refl->MutableRepeatedPtrField<Message>(&message, fd_map_string_string);
1631
+ RepeatedPtrField<Message>* mmf_int32_foreign_message =
1632
+ refl->MutableRepeatedPtrField<Message>(&message,
1633
+ fd_map_int32_foreign_message);
1634
+
1635
+ // Make sure we can do gets through the RepeatedPtrField objects.
1636
+ for (int i = 0; i < 10; ++i) {
1637
+ {
1638
+ // Check gets through const objects.
1639
+ const Message& message_int32_int32 = mf_int32_int32.Get(i);
1640
+ int32_t key_int32_int32 = message_int32_int32.GetReflection()->GetInt32(
1641
+ message_int32_int32, fd_map_int32_in32_key);
1642
+ int32_t value_int32_int32 = message_int32_int32.GetReflection()->GetInt32(
1643
+ message_int32_int32, fd_map_int32_in32_value);
1644
+ EXPECT_EQ(value_int32_int32, Func(key_int32_int32, 1));
1645
+
1646
+ const Message& message_int32_double = mf_int32_double.Get(i);
1647
+ int32_t key_int32_double = message_int32_double.GetReflection()->GetInt32(
1648
+ message_int32_double, fd_map_int32_double_key);
1649
+ double value_int32_double =
1650
+ message_int32_double.GetReflection()->GetDouble(
1651
+ message_int32_double, fd_map_int32_double_value);
1652
+ EXPECT_EQ(value_int32_double, Func(key_int32_double, 2));
1653
+
1654
+ const Message& message_string_string = mf_string_string.Get(i);
1655
+ std::string key_string_string =
1656
+ message_string_string.GetReflection()->GetString(
1657
+ message_string_string, fd_map_string_string_key);
1658
+ std::string value_string_string =
1659
+ message_string_string.GetReflection()->GetString(
1660
+ message_string_string, fd_map_string_string_value);
1661
+ EXPECT_EQ(value_string_string, StrFunc(Int(key_string_string), 5));
1662
+
1663
+ const Message& message_int32_message = mf_int32_foreign_message.Get(i);
1664
+ int32_t key_int32_message =
1665
+ message_int32_message.GetReflection()->GetInt32(
1666
+ message_int32_message, fd_map_int32_foreign_message_key);
1667
+ const ForeignMessage& value_int32_message =
1668
+ DownCastMessage<ForeignMessage>(
1669
+ message_int32_message.GetReflection()->GetMessage(
1670
+ message_int32_message, fd_map_int32_foreign_message_value));
1671
+ EXPECT_EQ(value_int32_message.c(), Func(key_int32_message, 6));
1672
+ }
1673
+
1674
+ {
1675
+ // Check gets through mutable objects.
1676
+ const Message& message_int32_int32 = mmf_int32_int32->Get(i);
1677
+ int32_t key_int32_int32 = message_int32_int32.GetReflection()->GetInt32(
1678
+ message_int32_int32, fd_map_int32_in32_key);
1679
+ int32_t value_int32_int32 = message_int32_int32.GetReflection()->GetInt32(
1680
+ message_int32_int32, fd_map_int32_in32_value);
1681
+ EXPECT_EQ(value_int32_int32, Func(key_int32_int32, 1));
1682
+
1683
+ const Message& message_int32_double = mmf_int32_double->Get(i);
1684
+ int32_t key_int32_double = message_int32_double.GetReflection()->GetInt32(
1685
+ message_int32_double, fd_map_int32_double_key);
1686
+ double value_int32_double =
1687
+ message_int32_double.GetReflection()->GetDouble(
1688
+ message_int32_double, fd_map_int32_double_value);
1689
+ EXPECT_EQ(value_int32_double, Func(key_int32_double, 2));
1690
+
1691
+ const Message& message_string_string = mmf_string_string->Get(i);
1692
+ std::string key_string_string =
1693
+ message_string_string.GetReflection()->GetString(
1694
+ message_string_string, fd_map_string_string_key);
1695
+ std::string value_string_string =
1696
+ message_string_string.GetReflection()->GetString(
1697
+ message_string_string, fd_map_string_string_value);
1698
+ EXPECT_EQ(value_string_string, StrFunc(Int(key_string_string), 5));
1699
+
1700
+ const Message& message_int32_message = mmf_int32_foreign_message->Get(i);
1701
+ int32_t key_int32_message =
1702
+ message_int32_message.GetReflection()->GetInt32(
1703
+ message_int32_message, fd_map_int32_foreign_message_key);
1704
+ const ForeignMessage& value_int32_message =
1705
+ DownCastMessage<ForeignMessage>(
1706
+ message_int32_message.GetReflection()->GetMessage(
1707
+ message_int32_message, fd_map_int32_foreign_message_value));
1708
+ EXPECT_EQ(value_int32_message.c(), Func(key_int32_message, 6));
1709
+ }
1710
+ }
1711
+
1712
+ // Do sets through the RepeatedPtrField objects.
1713
+ for (int i = 0; i < 10; i++) {
1714
+ {
1715
+ Message* message_int32_int32 = mmf_int32_int32->Mutable(i);
1716
+ int32_t key_int32_int32 = message_int32_int32->GetReflection()->GetInt32(
1717
+ *message_int32_int32, fd_map_int32_in32_key);
1718
+ message_int32_int32->GetReflection()->SetInt32(message_int32_int32,
1719
+ fd_map_int32_in32_value,
1720
+ Func(key_int32_int32, -1));
1721
+
1722
+ Message* message_int32_double = mmf_int32_double->Mutable(i);
1723
+ int32_t key_int32_double =
1724
+ message_int32_double->GetReflection()->GetInt32(
1725
+ *message_int32_double, fd_map_int32_double_key);
1726
+ message_int32_double->GetReflection()->SetDouble(
1727
+ message_int32_double, fd_map_int32_double_value,
1728
+ Func(key_int32_double, -2));
1729
+
1730
+ Message* message_string_string = mmf_string_string->Mutable(i);
1731
+ std::string key_string_string =
1732
+ message_string_string->GetReflection()->GetString(
1733
+ *message_string_string, fd_map_string_string_key);
1734
+ message_string_string->GetReflection()->SetString(
1735
+ message_string_string, fd_map_string_string_value,
1736
+ StrFunc(Int(key_string_string), -5));
1737
+
1738
+ Message* message_int32_message = mmf_int32_foreign_message->Mutable(i);
1739
+ int32_t key_int32_message =
1740
+ message_int32_message->GetReflection()->GetInt32(
1741
+ *message_int32_message, fd_map_int32_foreign_message_key);
1742
+ ForeignMessage* value_int32_message = DownCastMessage<ForeignMessage>(
1743
+ message_int32_message->GetReflection()->MutableMessage(
1744
+ message_int32_message, fd_map_int32_foreign_message_value));
1745
+ value_int32_message->set_c(Func(key_int32_message, -6));
1746
+ }
1747
+ }
1748
+
1749
+ // Check gets through mutable objects.
1750
+ for (int i = 0; i < 10; i++) {
1751
+ EXPECT_EQ(Func(i, -1), message.map_int32_int32().at(i));
1752
+ EXPECT_EQ(Func(i, -2), message.map_int32_double().at(i));
1753
+ EXPECT_EQ(StrFunc(i, -5), message.map_string_string().at(StrFunc(i, 1)));
1754
+ EXPECT_EQ(Func(i, -6), message.map_int32_foreign_message().at(i).c());
1755
+ }
1756
+ }
1757
+
1758
+ TEST_F(MapFieldReflectionTest, RepeatedFieldRefForRegularFields) {
1759
+ TestMap message;
1760
+ const Reflection* refl = message.GetReflection();
1761
+ const Descriptor* desc = message.GetDescriptor();
1762
+
1763
+ Map<int32_t, int32_t>* map_int32_int32 = message.mutable_map_int32_int32();
1764
+ Map<int32_t, double>* map_int32_double = message.mutable_map_int32_double();
1765
+ Map<std::string, std::string>* map_string_string =
1766
+ message.mutable_map_string_string();
1767
+ Map<int32_t, ForeignMessage>* map_int32_foreign_message =
1768
+ message.mutable_map_int32_foreign_message();
1769
+
1770
+ for (int i = 0; i < 10; ++i) {
1771
+ (*map_int32_int32)[i] = Func(i, 1);
1772
+ (*map_int32_double)[i] = Func(i, 2);
1773
+ (*map_string_string)[StrFunc(i, 1)] = StrFunc(i, 5);
1774
+ (*map_int32_foreign_message)[i].set_c(Func(i, 6));
1775
+ }
1776
+
1777
+ // Get FieldDescriptors for all the fields of interest.
1778
+ const FieldDescriptor* fd_map_int32_int32 =
1779
+ desc->FindFieldByName("map_int32_int32");
1780
+ const FieldDescriptor* fd_map_int32_double =
1781
+ desc->FindFieldByName("map_int32_double");
1782
+ const FieldDescriptor* fd_map_string_string =
1783
+ desc->FindFieldByName("map_string_string");
1784
+ const FieldDescriptor* fd_map_int32_foreign_message =
1785
+ desc->FindFieldByName("map_int32_foreign_message");
1786
+
1787
+ const FieldDescriptor* fd_map_int32_in32_key =
1788
+ fd_map_int32_int32->message_type()->map_key();
1789
+ const FieldDescriptor* fd_map_int32_in32_value =
1790
+ fd_map_int32_int32->message_type()->map_value();
1791
+ const FieldDescriptor* fd_map_int32_double_key =
1792
+ fd_map_int32_double->message_type()->map_key();
1793
+ const FieldDescriptor* fd_map_int32_double_value =
1794
+ fd_map_int32_double->message_type()->map_value();
1795
+ const FieldDescriptor* fd_map_string_string_key =
1796
+ fd_map_string_string->message_type()->map_key();
1797
+ const FieldDescriptor* fd_map_string_string_value =
1798
+ fd_map_string_string->message_type()->map_value();
1799
+ const FieldDescriptor* fd_map_int32_foreign_message_key =
1800
+ fd_map_int32_foreign_message->message_type()->map_key();
1801
+ const FieldDescriptor* fd_map_int32_foreign_message_value =
1802
+ fd_map_int32_foreign_message->message_type()->map_value();
1803
+
1804
+ // Get RepeatedFieldRef objects for all fields of interest.
1805
+ const RepeatedFieldRef<Message> mf_int32_int32 =
1806
+ refl->GetRepeatedFieldRef<Message>(message, fd_map_int32_int32);
1807
+ const RepeatedFieldRef<Message> mf_int32_double =
1808
+ refl->GetRepeatedFieldRef<Message>(message, fd_map_int32_double);
1809
+ const RepeatedFieldRef<Message> mf_string_string =
1810
+ refl->GetRepeatedFieldRef<Message>(message, fd_map_string_string);
1811
+ const RepeatedFieldRef<Message> mf_int32_foreign_message =
1812
+ refl->GetRepeatedFieldRef<Message>(message, fd_map_int32_foreign_message);
1813
+
1814
+ // Get mutable RepeatedFieldRef objects for all fields of interest.
1815
+ const MutableRepeatedFieldRef<Message> mmf_int32_int32 =
1816
+ refl->GetMutableRepeatedFieldRef<Message>(&message, fd_map_int32_int32);
1817
+ const MutableRepeatedFieldRef<Message> mmf_int32_double =
1818
+ refl->GetMutableRepeatedFieldRef<Message>(&message, fd_map_int32_double);
1819
+ const MutableRepeatedFieldRef<Message> mmf_string_string =
1820
+ refl->GetMutableRepeatedFieldRef<Message>(&message, fd_map_string_string);
1821
+ const MutableRepeatedFieldRef<Message> mmf_int32_foreign_message =
1822
+ refl->GetMutableRepeatedFieldRef<Message>(&message,
1823
+ fd_map_int32_foreign_message);
1824
+
1825
+ // Get entry default instances
1826
+ std::unique_ptr<Message> entry_int32_int32(
1827
+ MessageFactory::generated_factory()
1828
+ ->GetPrototype(fd_map_int32_int32->message_type())
1829
+ ->New(message.GetArena()));
1830
+ std::unique_ptr<Message> entry_int32_double(
1831
+ MessageFactory::generated_factory()
1832
+ ->GetPrototype(fd_map_int32_double->message_type())
1833
+ ->New(message.GetArena()));
1834
+ std::unique_ptr<Message> entry_string_string(
1835
+ MessageFactory::generated_factory()
1836
+ ->GetPrototype(fd_map_string_string->message_type())
1837
+ ->New(message.GetArena()));
1838
+ std::unique_ptr<Message> entry_int32_foreign_message(
1839
+ MessageFactory::generated_factory()
1840
+ ->GetPrototype(fd_map_int32_foreign_message->message_type())
1841
+ ->New(message.GetArena()));
1842
+
1843
+ EXPECT_EQ(10, mf_int32_int32.size());
1844
+ EXPECT_EQ(10, mmf_int32_int32.size());
1845
+ EXPECT_EQ(10, mf_int32_double.size());
1846
+ EXPECT_EQ(10, mmf_int32_double.size());
1847
+ EXPECT_EQ(10, mf_string_string.size());
1848
+ EXPECT_EQ(10, mmf_string_string.size());
1849
+ EXPECT_EQ(10, mf_int32_foreign_message.size());
1850
+ EXPECT_EQ(10, mmf_int32_foreign_message.size());
1851
+
1852
+ EXPECT_FALSE(mf_int32_int32.empty());
1853
+ EXPECT_FALSE(mmf_int32_int32.empty());
1854
+ EXPECT_FALSE(mf_int32_double.empty());
1855
+ EXPECT_FALSE(mmf_int32_double.empty());
1856
+ EXPECT_FALSE(mf_string_string.empty());
1857
+ EXPECT_FALSE(mmf_string_string.empty());
1858
+ EXPECT_FALSE(mf_int32_foreign_message.empty());
1859
+ EXPECT_FALSE(mmf_int32_foreign_message.empty());
1860
+
1861
+ // Make sure we can do gets through the RepeatedFieldRef objects.
1862
+ for (int i = 0; i < 10; ++i) {
1863
+ {
1864
+ // Check gets through const objects.
1865
+ const Message& message_int32_int32 =
1866
+ mf_int32_int32.Get(i, entry_int32_int32.get());
1867
+ int32_t key_int32_int32 = message_int32_int32.GetReflection()->GetInt32(
1868
+ message_int32_int32, fd_map_int32_in32_key);
1869
+ int32_t value_int32_int32 = message_int32_int32.GetReflection()->GetInt32(
1870
+ message_int32_int32, fd_map_int32_in32_value);
1871
+ EXPECT_EQ(value_int32_int32, Func(key_int32_int32, 1));
1872
+
1873
+ const Message& message_int32_double =
1874
+ mf_int32_double.Get(i, entry_int32_double.get());
1875
+ int32_t key_int32_double = message_int32_double.GetReflection()->GetInt32(
1876
+ message_int32_double, fd_map_int32_double_key);
1877
+ double value_int32_double =
1878
+ message_int32_double.GetReflection()->GetDouble(
1879
+ message_int32_double, fd_map_int32_double_value);
1880
+ EXPECT_EQ(value_int32_double, Func(key_int32_double, 2));
1881
+
1882
+ const Message& message_string_string =
1883
+ mf_string_string.Get(i, entry_string_string.get());
1884
+ std::string key_string_string =
1885
+ message_string_string.GetReflection()->GetString(
1886
+ message_string_string, fd_map_string_string_key);
1887
+ std::string value_string_string =
1888
+ message_string_string.GetReflection()->GetString(
1889
+ message_string_string, fd_map_string_string_value);
1890
+ EXPECT_EQ(value_string_string, StrFunc(Int(key_string_string), 5));
1891
+
1892
+ const Message& message_int32_message =
1893
+ mf_int32_foreign_message.Get(i, entry_int32_foreign_message.get());
1894
+ int32_t key_int32_message =
1895
+ message_int32_message.GetReflection()->GetInt32(
1896
+ message_int32_message, fd_map_int32_foreign_message_key);
1897
+ const ForeignMessage& value_int32_message =
1898
+ DownCastMessage<ForeignMessage>(
1899
+ message_int32_message.GetReflection()->GetMessage(
1900
+ message_int32_message, fd_map_int32_foreign_message_value));
1901
+ EXPECT_EQ(value_int32_message.c(), Func(key_int32_message, 6));
1902
+ }
1903
+
1904
+ {
1905
+ // Check gets through mutable objects.
1906
+ const Message& message_int32_int32 =
1907
+ mmf_int32_int32.Get(i, entry_int32_int32.get());
1908
+ int32_t key_int32_int32 = message_int32_int32.GetReflection()->GetInt32(
1909
+ message_int32_int32, fd_map_int32_in32_key);
1910
+ int32_t value_int32_int32 = message_int32_int32.GetReflection()->GetInt32(
1911
+ message_int32_int32, fd_map_int32_in32_value);
1912
+ EXPECT_EQ(value_int32_int32, Func(key_int32_int32, 1));
1913
+
1914
+ const Message& message_int32_double =
1915
+ mmf_int32_double.Get(i, entry_int32_double.get());
1916
+ int32_t key_int32_double = message_int32_double.GetReflection()->GetInt32(
1917
+ message_int32_double, fd_map_int32_double_key);
1918
+ double value_int32_double =
1919
+ message_int32_double.GetReflection()->GetDouble(
1920
+ message_int32_double, fd_map_int32_double_value);
1921
+ EXPECT_EQ(value_int32_double, Func(key_int32_double, 2));
1922
+
1923
+ const Message& message_string_string =
1924
+ mmf_string_string.Get(i, entry_string_string.get());
1925
+ std::string key_string_string =
1926
+ message_string_string.GetReflection()->GetString(
1927
+ message_string_string, fd_map_string_string_key);
1928
+ std::string value_string_string =
1929
+ message_string_string.GetReflection()->GetString(
1930
+ message_string_string, fd_map_string_string_value);
1931
+ EXPECT_EQ(value_string_string, StrFunc(Int(key_string_string), 5));
1932
+
1933
+ const Message& message_int32_message =
1934
+ mmf_int32_foreign_message.Get(i, entry_int32_foreign_message.get());
1935
+ int32_t key_int32_message =
1936
+ message_int32_message.GetReflection()->GetInt32(
1937
+ message_int32_message, fd_map_int32_foreign_message_key);
1938
+ const ForeignMessage& value_int32_message =
1939
+ DownCastMessage<ForeignMessage>(
1940
+ message_int32_message.GetReflection()->GetMessage(
1941
+ message_int32_message, fd_map_int32_foreign_message_value));
1942
+ EXPECT_EQ(value_int32_message.c(), Func(key_int32_message, 6));
1943
+ }
1944
+ }
1945
+
1946
+ // Make sure we can do sets through the RepeatedFieldRef objects.
1947
+ for (int i = 0; i < 10; i++) {
1948
+ const Message& message_int32_int32 =
1949
+ mmf_int32_int32.Get(i, entry_int32_int32.get());
1950
+ int key = message_int32_int32.GetReflection()->GetInt32(
1951
+ message_int32_int32, fd_map_int32_in32_key);
1952
+
1953
+ entry_int32_int32->GetReflection()->SetInt32(
1954
+ entry_int32_int32.get(), fd_map_int32_int32->message_type()->field(0),
1955
+ key);
1956
+ entry_int32_int32->GetReflection()->SetInt32(
1957
+ entry_int32_int32.get(), fd_map_int32_int32->message_type()->field(1),
1958
+ Func(key, -1));
1959
+ entry_int32_double->GetReflection()->SetInt32(
1960
+ entry_int32_double.get(), fd_map_int32_double->message_type()->field(0),
1961
+ key);
1962
+ entry_int32_double->GetReflection()->SetDouble(
1963
+ entry_int32_double.get(), fd_map_int32_double->message_type()->field(1),
1964
+ Func(key, -2));
1965
+ entry_string_string->GetReflection()->SetString(
1966
+ entry_string_string.get(),
1967
+ fd_map_string_string->message_type()->field(0), StrFunc(key, 1));
1968
+ entry_string_string->GetReflection()->SetString(
1969
+ entry_string_string.get(),
1970
+ fd_map_string_string->message_type()->field(1), StrFunc(key, -5));
1971
+ entry_int32_foreign_message->GetReflection()->SetInt32(
1972
+ entry_int32_foreign_message.get(),
1973
+ fd_map_int32_foreign_message->message_type()->field(0), key);
1974
+ Message* value_message =
1975
+ entry_int32_foreign_message->GetReflection()->MutableMessage(
1976
+ entry_int32_foreign_message.get(),
1977
+ fd_map_int32_foreign_message->message_type()->field(1));
1978
+ value_message->GetReflection()->SetInt32(
1979
+ value_message, value_message->GetDescriptor()->FindFieldByName("c"),
1980
+ Func(key, -6));
1981
+
1982
+ mmf_int32_int32.Set(i, *entry_int32_int32);
1983
+ mmf_int32_double.Set(i, *entry_int32_double);
1984
+ mmf_string_string.Set(i, *entry_string_string);
1985
+ mmf_int32_foreign_message.Set(i, *entry_int32_foreign_message);
1986
+ }
1987
+
1988
+ for (int i = 0; i < 10; i++) {
1989
+ EXPECT_EQ(Func(i, -1), message.map_int32_int32().at(i));
1990
+ EXPECT_EQ(Func(i, -2), message.map_int32_double().at(i));
1991
+ EXPECT_EQ(StrFunc(i, -5), message.map_string_string().at(StrFunc(i, 1)));
1992
+ EXPECT_EQ(Func(i, -6), message.map_int32_foreign_message().at(i).c());
1993
+ }
1994
+
1995
+ // Test iterators.
1996
+ {
1997
+ int index = 0;
1998
+ absl::flat_hash_map<int32_t, int32_t> result;
1999
+ for (const auto& message : mf_int32_int32) {
2000
+ int32_t key =
2001
+ message.GetReflection()->GetInt32(message, fd_map_int32_in32_key);
2002
+ int32_t value =
2003
+ message.GetReflection()->GetInt32(message, fd_map_int32_in32_value);
2004
+ result[key] = value;
2005
+ ++index;
2006
+ }
2007
+ EXPECT_EQ(10, index);
2008
+ for (const auto& kv : result) {
2009
+ EXPECT_EQ(message.map_int32_int32().at(kv.first), kv.second);
2010
+ }
2011
+ }
2012
+
2013
+ {
2014
+ int index = 0;
2015
+ absl::flat_hash_map<int32_t, double> result;
2016
+ for (const auto& message : mf_int32_double) {
2017
+ int32_t key =
2018
+ message.GetReflection()->GetInt32(message, fd_map_int32_double_key);
2019
+ double value = message.GetReflection()->GetDouble(
2020
+ message, fd_map_int32_double_value);
2021
+ result[key] = value;
2022
+ ++index;
2023
+ }
2024
+ EXPECT_EQ(10, index);
2025
+ for (const auto& kv : result) {
2026
+ EXPECT_EQ(message.map_int32_double().at(kv.first), kv.second);
2027
+ }
2028
+ }
2029
+
2030
+ {
2031
+ int index = 0;
2032
+ absl::flat_hash_map<std::string, std::string> result;
2033
+ for (const auto& message : mf_string_string) {
2034
+ std::string key =
2035
+ message.GetReflection()->GetString(message, fd_map_string_string_key);
2036
+ std::string value = message.GetReflection()->GetString(
2037
+ message, fd_map_string_string_value);
2038
+ result[key] = value;
2039
+ ++index;
2040
+ }
2041
+ EXPECT_EQ(10, index);
2042
+ for (const auto& kv : result) {
2043
+ EXPECT_EQ(message.map_string_string().at(kv.first), kv.second);
2044
+ }
2045
+ }
2046
+
2047
+ {
2048
+ int index = 0;
2049
+ absl::flat_hash_map<int32_t, ForeignMessage> result;
2050
+ for (RepeatedFieldRef<Message>::iterator it =
2051
+ mf_int32_foreign_message.begin();
2052
+ it != mf_int32_foreign_message.end(); ++it) {
2053
+ const Message& message = *it;
2054
+ int32_t key = message.GetReflection()->GetInt32(
2055
+ message, fd_map_int32_foreign_message_key);
2056
+ const ForeignMessage& sub_message =
2057
+ DownCastMessage<ForeignMessage>(message.GetReflection()->GetMessage(
2058
+ message, fd_map_int32_foreign_message_value));
2059
+ result[key].MergeFrom(sub_message);
2060
+ ++index;
2061
+ }
2062
+ EXPECT_EQ(10, index);
2063
+ for (const auto& e : result) {
2064
+ EXPECT_EQ(message.map_int32_foreign_message().at(e.first).c(),
2065
+ e.second.c());
2066
+ }
2067
+ }
2068
+
2069
+ // Test MutableRepeatedFieldRef::Add()
2070
+ entry_int32_int32->GetReflection()->SetInt32(
2071
+ entry_int32_int32.get(), fd_map_int32_int32->message_type()->field(0),
2072
+ 4321);
2073
+ entry_int32_int32->GetReflection()->SetInt32(
2074
+ entry_int32_int32.get(), fd_map_int32_int32->message_type()->field(1),
2075
+ 1234);
2076
+ mmf_int32_int32.Add(*entry_int32_int32);
2077
+ EXPECT_EQ(1234, message.map_int32_int32().at(4321));
2078
+
2079
+ entry_int32_double->GetReflection()->SetInt32(
2080
+ entry_int32_double.get(), fd_map_int32_double->message_type()->field(0),
2081
+ 4321);
2082
+ entry_int32_double->GetReflection()->SetDouble(
2083
+ entry_int32_double.get(), fd_map_int32_double->message_type()->field(1),
2084
+ 1234.0);
2085
+ mmf_int32_double.Add(*entry_int32_double);
2086
+ EXPECT_EQ(1234.0, message.map_int32_double().at(4321));
2087
+
2088
+ entry_string_string->GetReflection()->SetString(
2089
+ entry_string_string.get(), fd_map_string_string->message_type()->field(0),
2090
+ "4321");
2091
+ entry_string_string->GetReflection()->SetString(
2092
+ entry_string_string.get(), fd_map_string_string->message_type()->field(1),
2093
+ "1234");
2094
+ mmf_string_string.Add(*entry_string_string);
2095
+ EXPECT_EQ("1234", message.map_string_string().at("4321"));
2096
+
2097
+ entry_int32_foreign_message->GetReflection()->SetInt32(
2098
+ entry_int32_foreign_message.get(),
2099
+ fd_map_int32_foreign_message->message_type()->field(0), 4321);
2100
+ Message* value_message =
2101
+ entry_int32_foreign_message->GetReflection()->MutableMessage(
2102
+ entry_int32_foreign_message.get(),
2103
+ fd_map_int32_foreign_message->message_type()->field(1));
2104
+ ForeignMessage foreign_message;
2105
+ foreign_message.set_c(1234);
2106
+ value_message->CopyFrom(foreign_message);
2107
+
2108
+ mmf_int32_foreign_message.Add(*entry_int32_foreign_message);
2109
+ EXPECT_EQ(1234, message.map_int32_foreign_message().at(4321).c());
2110
+
2111
+ // Test Reflection::AddAllocatedMessage
2112
+ Message* free_entry_string_string =
2113
+ MessageFactory::generated_factory()
2114
+ ->GetPrototype(fd_map_string_string->message_type())
2115
+ ->New();
2116
+ entry_string_string->GetReflection()->SetString(
2117
+ free_entry_string_string, fd_map_string_string->message_type()->field(0),
2118
+ "4321");
2119
+ entry_string_string->GetReflection()->SetString(
2120
+ free_entry_string_string, fd_map_string_string->message_type()->field(1),
2121
+ "1234");
2122
+ refl->AddAllocatedMessage(&message, fd_map_string_string,
2123
+ free_entry_string_string);
2124
+
2125
+ // Test MutableRepeatedFieldRef::RemoveLast()
2126
+ mmf_int32_int32.RemoveLast();
2127
+ mmf_int32_double.RemoveLast();
2128
+ mmf_string_string.RemoveLast();
2129
+ mmf_int32_foreign_message.RemoveLast();
2130
+ EXPECT_EQ(10, message.map_int32_int32().size());
2131
+ EXPECT_EQ(10, message.map_int32_double().size());
2132
+ EXPECT_EQ(11, message.map_string_string().size());
2133
+ EXPECT_EQ(10, message.map_int32_foreign_message().size());
2134
+
2135
+ // Test MutableRepeatedFieldRef::SwapElements()
2136
+ {
2137
+ const Message& message0a = mmf_int32_int32.Get(0, entry_int32_int32.get());
2138
+ int32_t int32_value0a =
2139
+ message0a.GetReflection()->GetInt32(message0a, fd_map_int32_in32_value);
2140
+ const Message& message9a = mmf_int32_int32.Get(9, entry_int32_int32.get());
2141
+ int32_t int32_value9a =
2142
+ message9a.GetReflection()->GetInt32(message9a, fd_map_int32_in32_value);
2143
+
2144
+ mmf_int32_int32.SwapElements(0, 9);
2145
+
2146
+ const Message& message0b = mmf_int32_int32.Get(0, entry_int32_int32.get());
2147
+ int32_t int32_value0b =
2148
+ message0b.GetReflection()->GetInt32(message0b, fd_map_int32_in32_value);
2149
+ const Message& message9b = mmf_int32_int32.Get(9, entry_int32_int32.get());
2150
+ int32_t int32_value9b =
2151
+ message9b.GetReflection()->GetInt32(message9b, fd_map_int32_in32_value);
2152
+
2153
+ EXPECT_EQ(int32_value9a, int32_value0b);
2154
+ EXPECT_EQ(int32_value0a, int32_value9b);
2155
+ }
2156
+
2157
+ {
2158
+ const Message& message0a =
2159
+ mmf_int32_double.Get(0, entry_int32_double.get());
2160
+ double double_value0a = message0a.GetReflection()->GetDouble(
2161
+ message0a, fd_map_int32_double_value);
2162
+ const Message& message9a =
2163
+ mmf_int32_double.Get(9, entry_int32_double.get());
2164
+ double double_value9a = message9a.GetReflection()->GetDouble(
2165
+ message9a, fd_map_int32_double_value);
2166
+
2167
+ mmf_int32_double.SwapElements(0, 9);
2168
+
2169
+ const Message& message0b =
2170
+ mmf_int32_double.Get(0, entry_int32_double.get());
2171
+ double double_value0b = message0b.GetReflection()->GetDouble(
2172
+ message0b, fd_map_int32_double_value);
2173
+ const Message& message9b =
2174
+ mmf_int32_double.Get(9, entry_int32_double.get());
2175
+ double double_value9b = message9b.GetReflection()->GetDouble(
2176
+ message9b, fd_map_int32_double_value);
2177
+
2178
+ EXPECT_EQ(double_value9a, double_value0b);
2179
+ EXPECT_EQ(double_value0a, double_value9b);
2180
+ }
2181
+
2182
+ {
2183
+ const Message& message0a =
2184
+ mmf_string_string.Get(0, entry_string_string.get());
2185
+ std::string string_value0a = message0a.GetReflection()->GetString(
2186
+ message0a, fd_map_string_string_value);
2187
+ const Message& message9a =
2188
+ mmf_string_string.Get(9, entry_string_string.get());
2189
+ std::string string_value9a = message9a.GetReflection()->GetString(
2190
+ message9a, fd_map_string_string_value);
2191
+
2192
+ mmf_string_string.SwapElements(0, 9);
2193
+
2194
+ const Message& message0b =
2195
+ mmf_string_string.Get(0, entry_string_string.get());
2196
+ std::string string_value0b = message0b.GetReflection()->GetString(
2197
+ message0b, fd_map_string_string_value);
2198
+ const Message& message9b =
2199
+ mmf_string_string.Get(9, entry_string_string.get());
2200
+ std::string string_value9b = message9b.GetReflection()->GetString(
2201
+ message9b, fd_map_string_string_value);
2202
+
2203
+ EXPECT_EQ(string_value9a, string_value0b);
2204
+ EXPECT_EQ(string_value0a, string_value9b);
2205
+ }
2206
+
2207
+ {
2208
+ const Message& message0a =
2209
+ mmf_int32_foreign_message.Get(0, entry_int32_foreign_message.get());
2210
+ const ForeignMessage& sub_message0a =
2211
+ DownCastMessage<ForeignMessage>(message0a.GetReflection()->GetMessage(
2212
+ message0a, fd_map_int32_foreign_message_value));
2213
+ int32_t int32_value0a = sub_message0a.c();
2214
+ const Message& message9a =
2215
+ mmf_int32_foreign_message.Get(9, entry_int32_foreign_message.get());
2216
+ const ForeignMessage& sub_message9a =
2217
+ DownCastMessage<ForeignMessage>(message9a.GetReflection()->GetMessage(
2218
+ message9a, fd_map_int32_foreign_message_value));
2219
+ int32_t int32_value9a = sub_message9a.c();
2220
+
2221
+ mmf_int32_foreign_message.SwapElements(0, 9);
2222
+
2223
+ const Message& message0b =
2224
+ mmf_int32_foreign_message.Get(0, entry_int32_foreign_message.get());
2225
+ const ForeignMessage& sub_message0b =
2226
+ DownCastMessage<ForeignMessage>(message0b.GetReflection()->GetMessage(
2227
+ message0b, fd_map_int32_foreign_message_value));
2228
+ int32_t int32_value0b = sub_message0b.c();
2229
+ const Message& message9b =
2230
+ mmf_int32_foreign_message.Get(9, entry_int32_foreign_message.get());
2231
+ const ForeignMessage& sub_message9b =
2232
+ DownCastMessage<ForeignMessage>(message9b.GetReflection()->GetMessage(
2233
+ message9b, fd_map_int32_foreign_message_value));
2234
+ int32_t int32_value9b = sub_message9b.c();
2235
+
2236
+ EXPECT_EQ(int32_value9a, int32_value0b);
2237
+ EXPECT_EQ(int32_value0a, int32_value9b);
2238
+ }
2239
+
2240
+ // TODO: After supporting arena agnostic delete or let map entry
2241
+ // handle heap allocation, this could be removed.
2242
+ if (message.GetArena() != nullptr) {
2243
+ entry_int32_int32.release();
2244
+ entry_int32_double.release();
2245
+ entry_string_string.release();
2246
+ entry_int32_foreign_message.release();
2247
+ }
2248
+ }
2249
+
2250
+ TEST_F(MapFieldReflectionTest, RepeatedFieldRefMergeFromAndSwap) {
2251
+ // Set-up message content.
2252
+ TestMap m0, m1, m2;
2253
+ for (int i = 0; i < 10; ++i) {
2254
+ (*m0.mutable_map_int32_int32())[i] = Func(i, 1);
2255
+ (*m0.mutable_map_int32_double())[i] = Func(i, 2);
2256
+ (*m0.mutable_map_string_string())[StrFunc(i, 1)] = StrFunc(i, 5);
2257
+ (*m0.mutable_map_int32_foreign_message())[i].set_c(Func(i, 6));
2258
+ (*m1.mutable_map_int32_int32())[i + 10] = Func(i, 11);
2259
+ (*m1.mutable_map_int32_double())[i + 10] = Func(i, 12);
2260
+ (*m1.mutable_map_string_string())[StrFunc(i + 10, 1)] = StrFunc(i, 15);
2261
+ (*m1.mutable_map_int32_foreign_message())[i + 10].set_c(Func(i, 16));
2262
+ (*m2.mutable_map_int32_int32())[i + 20] = Func(i, 21);
2263
+ (*m2.mutable_map_int32_double())[i + 20] = Func(i, 22);
2264
+ (*m2.mutable_map_string_string())[StrFunc(i + 20, 1)] = StrFunc(i, 25);
2265
+ (*m2.mutable_map_int32_foreign_message())[i + 20].set_c(Func(i, 26));
2266
+ }
2267
+
2268
+ const Reflection* refl = m0.GetReflection();
2269
+ const Descriptor* desc = m0.GetDescriptor();
2270
+
2271
+ // Get FieldDescriptors for all the fields of interest.
2272
+ const FieldDescriptor* fd_map_int32_int32 =
2273
+ desc->FindFieldByName("map_int32_int32");
2274
+ const FieldDescriptor* fd_map_int32_double =
2275
+ desc->FindFieldByName("map_int32_double");
2276
+ const FieldDescriptor* fd_map_string_string =
2277
+ desc->FindFieldByName("map_string_string");
2278
+ const FieldDescriptor* fd_map_int32_foreign_message =
2279
+ desc->FindFieldByName("map_int32_foreign_message");
2280
+
2281
+ // Get MutableRepeatedFieldRef objects for all fields of interest.
2282
+ const MutableRepeatedFieldRef<Message> mmf_int32_int32 =
2283
+ refl->GetMutableRepeatedFieldRef<Message>(&m0, fd_map_int32_int32);
2284
+ const MutableRepeatedFieldRef<Message> mmf_int32_double =
2285
+ refl->GetMutableRepeatedFieldRef<Message>(&m0, fd_map_int32_double);
2286
+ const MutableRepeatedFieldRef<Message> mmf_string_string =
2287
+ refl->GetMutableRepeatedFieldRef<Message>(&m0, fd_map_string_string);
2288
+ const MutableRepeatedFieldRef<Message> mmf_int32_foreign_message =
2289
+ refl->GetMutableRepeatedFieldRef<Message>(&m0,
2290
+ fd_map_int32_foreign_message);
2291
+
2292
+ // Test MutableRepeatedRef::CopyFrom
2293
+ mmf_int32_int32.CopyFrom(
2294
+ refl->GetRepeatedFieldRef<Message>(m1, fd_map_int32_int32));
2295
+ mmf_int32_double.CopyFrom(
2296
+ refl->GetRepeatedFieldRef<Message>(m1, fd_map_int32_double));
2297
+ mmf_string_string.CopyFrom(
2298
+ refl->GetRepeatedFieldRef<Message>(m1, fd_map_string_string));
2299
+ mmf_int32_foreign_message.CopyFrom(
2300
+ refl->GetRepeatedFieldRef<Message>(m1, fd_map_int32_foreign_message));
2301
+
2302
+ for (int i = 0; i < 10; ++i) {
2303
+ EXPECT_EQ(Func(i, 11), m0.map_int32_int32().at(i + 10));
2304
+ EXPECT_EQ(Func(i, 12), m0.map_int32_double().at(i + 10));
2305
+ EXPECT_EQ(StrFunc(i, 15), m0.map_string_string().at(StrFunc(i + 10, 1)));
2306
+ EXPECT_EQ(Func(i, 16), m0.map_int32_foreign_message().at(i + 10).c());
2307
+ }
2308
+
2309
+ // Test MutableRepeatedRef::MergeFrom
2310
+ mmf_int32_int32.MergeFrom(
2311
+ refl->GetRepeatedFieldRef<Message>(m2, fd_map_int32_int32));
2312
+ mmf_int32_double.MergeFrom(
2313
+ refl->GetRepeatedFieldRef<Message>(m2, fd_map_int32_double));
2314
+ mmf_string_string.MergeFrom(
2315
+ refl->GetRepeatedFieldRef<Message>(m2, fd_map_string_string));
2316
+ mmf_int32_foreign_message.MergeFrom(
2317
+ refl->GetRepeatedFieldRef<Message>(m2, fd_map_int32_foreign_message));
2318
+ for (int i = 0; i < 10; ++i) {
2319
+ EXPECT_EQ(Func(i, 21), m0.map_int32_int32().at(i + 20));
2320
+ EXPECT_EQ(Func(i, 22), m0.map_int32_double().at(i + 20));
2321
+ EXPECT_EQ(StrFunc(i, 25), m0.map_string_string().at(StrFunc(i + 20, 1)));
2322
+ EXPECT_EQ(Func(i, 26), m0.map_int32_foreign_message().at(i + 20).c());
2323
+ }
2324
+
2325
+ // Test MutableRepeatedRef::Swap
2326
+ // Swap between m0 and m2.
2327
+ mmf_int32_int32.Swap(
2328
+ refl->GetMutableRepeatedFieldRef<Message>(&m2, fd_map_int32_int32));
2329
+ mmf_int32_double.Swap(
2330
+ refl->GetMutableRepeatedFieldRef<Message>(&m2, fd_map_int32_double));
2331
+ mmf_string_string.Swap(
2332
+ refl->GetMutableRepeatedFieldRef<Message>(&m2, fd_map_string_string));
2333
+ mmf_int32_foreign_message.Swap(refl->GetMutableRepeatedFieldRef<Message>(
2334
+ &m2, fd_map_int32_foreign_message));
2335
+ for (int i = 0; i < 10; ++i) {
2336
+ // Check the content of m0.
2337
+ EXPECT_EQ(Func(i, 21), m0.map_int32_int32().at(i + 20));
2338
+ EXPECT_EQ(Func(i, 22), m0.map_int32_double().at(i + 20));
2339
+ EXPECT_EQ(StrFunc(i, 25), m0.map_string_string().at(StrFunc(i + 20, 1)));
2340
+ EXPECT_EQ(Func(i, 26), m0.map_int32_foreign_message().at(i + 20).c());
2341
+
2342
+ // Check the content of m2.
2343
+ EXPECT_EQ(Func(i, 11), m2.map_int32_int32().at(i + 10));
2344
+ EXPECT_EQ(Func(i, 12), m2.map_int32_double().at(i + 10));
2345
+ EXPECT_EQ(StrFunc(i, 15), m2.map_string_string().at(StrFunc(i + 10, 1)));
2346
+ EXPECT_EQ(Func(i, 16), m2.map_int32_foreign_message().at(i + 10).c());
2347
+ EXPECT_EQ(Func(i, 21), m2.map_int32_int32().at(i + 20));
2348
+ EXPECT_EQ(Func(i, 22), m2.map_int32_double().at(i + 20));
2349
+ EXPECT_EQ(StrFunc(i, 25), m2.map_string_string().at(StrFunc(i + 20, 1)));
2350
+ EXPECT_EQ(Func(i, 26), m2.map_int32_foreign_message().at(i + 20).c());
2351
+ }
2352
+
2353
+ // TODO: add test for duplicated key
2354
+ }
2355
+
2356
+ TEST_F(MapFieldReflectionTest, MapSizeWithDuplicatedKey) {
2357
+ // Dynamic Message
2358
+ {
2359
+ DynamicMessageFactory factory;
2360
+ std::unique_ptr<Message> message(
2361
+ factory.GetPrototype(UNITTEST::TestMap::descriptor())->New());
2362
+ const Reflection* reflection = message->GetReflection();
2363
+ const FieldDescriptor* field =
2364
+ UNITTEST::TestMap::descriptor()->FindFieldByName("map_int32_int32");
2365
+
2366
+ Message* entry1 = reflection->AddMessage(message.get(), field);
2367
+ Message* entry2 = reflection->AddMessage(message.get(), field);
2368
+
2369
+ const Reflection* entry_reflection = entry1->GetReflection();
2370
+ const FieldDescriptor* key_field = entry1->GetDescriptor()->map_key();
2371
+ entry_reflection->SetInt32(entry1, key_field, 1);
2372
+ entry_reflection->SetInt32(entry2, key_field, 1);
2373
+
2374
+ EXPECT_EQ(2, reflection->FieldSize(*message, field));
2375
+ EXPECT_EQ(1, MapSize(reflection, field, *message));
2376
+ EXPECT_EQ(2, reflection->FieldSize(*message, field));
2377
+ }
2378
+
2379
+ // Generated Message
2380
+ {
2381
+ UNITTEST::TestMap message;
2382
+ const Reflection* reflection = message.GetReflection();
2383
+ const FieldDescriptor* field =
2384
+ message.GetDescriptor()->FindFieldByName("map_int32_int32");
2385
+
2386
+ Message* entry1 = reflection->AddMessage(&message, field);
2387
+ Message* entry2 = reflection->AddMessage(&message, field);
2388
+
2389
+ const Reflection* entry_reflection = entry1->GetReflection();
2390
+ const FieldDescriptor* key_field = entry1->GetDescriptor()->map_key();
2391
+ entry_reflection->SetInt32(entry1, key_field, 1);
2392
+ entry_reflection->SetInt32(entry2, key_field, 1);
2393
+
2394
+ EXPECT_EQ(2, reflection->FieldSize(message, field));
2395
+ EXPECT_EQ(1, MapSize(reflection, field, message));
2396
+ }
2397
+ }
2398
+
2399
+ TEST_F(MapFieldReflectionTest, UninitializedEntry) {
2400
+ UNITTEST::TestRequiredMessageMap message;
2401
+ const Reflection* reflection = message.GetReflection();
2402
+ const FieldDescriptor* field =
2403
+ message.GetDescriptor()->FindFieldByName("map_field");
2404
+ auto entry = reflection->AddMessage(&message, field);
2405
+ EXPECT_FALSE(entry->IsInitialized());
2406
+ EXPECT_FALSE(message.IsInitialized());
2407
+ }
2408
+
2409
+ class MyMapEntry
2410
+ : public internal::MapEntry<::int32_t, ::int32_t,
2411
+ internal::WireFormatLite::TYPE_INT32,
2412
+ internal::WireFormatLite::TYPE_INT32> {
2413
+ public:
2414
+ constexpr MyMapEntry()
2415
+ : MyMapEntry::MapEntry(static_cast<ClassData*>(nullptr)) {}
2416
+ MyMapEntry(Arena* arena) : MyMapEntry::MapEntry(arena, nullptr) {}
2417
+ const ClassData* GetClassData() const {
2418
+ ABSL_CHECK(false);
2419
+ return nullptr;
2420
+ }
2421
+ static bool ValidateKey(void*) { return true; }
2422
+ static bool ValidateValue(void*) { return true; }
2423
+ };
2424
+
2425
+ TEST(MapEntryTest, ConstInit) {
2426
+ // This verifies that `MapEntry` can be constant initialized.
2427
+ PROTOBUF_CONSTINIT static MyMapEntry entry{};
2428
+ // Use the object in some way to make sure the vtable is there.
2429
+ EXPECT_NE("", absl::StrFormat("%p", &entry));
2430
+ }
2431
+
2432
+ // Generated Message Test ===========================================
2433
+
2434
+ TEST(GeneratedMapFieldTest, Accessors) {
2435
+ UNITTEST::TestMap message;
2436
+
2437
+ MapTestUtil::SetMapFields(&message);
2438
+ MapTestUtil::ExpectMapFieldsSet(message);
2439
+
2440
+ MapTestUtil::ModifyMapFields(&message);
2441
+ MapTestUtil::ExpectMapFieldsModified(message);
2442
+ }
2443
+
2444
+ TEST(GeneratedMapFieldTest, SetMapFieldsInitialized) {
2445
+ UNITTEST::TestMap message;
2446
+
2447
+ MapTestUtil::SetMapFieldsInitialized(&message);
2448
+ MapTestUtil::ExpectMapFieldsSetInitialized(message);
2449
+ }
2450
+
2451
+ TEST(GeneratedMapFieldTest, Proto2SetMapFieldsInitialized) {
2452
+ UNITTEST::TestEnumMap message;
2453
+ EXPECT_EQ(UNITTEST::PROTO2_MAP_ENUM_FOO,
2454
+ (*message.mutable_known_map_field())[0]);
2455
+ }
2456
+
2457
+ TEST(GeneratedMapFieldTest, Clear) {
2458
+ UNITTEST::TestMap message;
2459
+
2460
+ MapTestUtil::SetMapFields(&message);
2461
+ message.Clear();
2462
+ MapTestUtil::ExpectClear(message);
2463
+ }
2464
+
2465
+ TEST(GeneratedMapFieldTest, ClearMessageMap) {
2466
+ UNITTEST::TestMessageMap message;
2467
+
2468
+ // Creates a TestAllTypes with default value
2469
+ TestUtil::ExpectClear((*message.mutable_map_int32_message())[0]);
2470
+ }
2471
+
2472
+ TEST(GeneratedMapFieldTest, CopyFrom) {
2473
+ UNITTEST::TestMap message1, message2;
2474
+
2475
+ MapTestUtil::SetMapFields(&message1);
2476
+ message2.CopyFrom(message1);
2477
+ MapTestUtil::ExpectMapFieldsSet(message2);
2478
+
2479
+ // Copying from self should be a no-op.
2480
+ message2.CopyFrom(message2);
2481
+ MapTestUtil::ExpectMapFieldsSet(message2);
2482
+ }
2483
+
2484
+ TEST(GeneratedMapFieldTest, CopyFromMessageMap) {
2485
+ UNITTEST::TestMessageMap message1, message2;
2486
+
2487
+ (*message1.mutable_map_int32_message())[0].add_repeated_int32(100);
2488
+ (*message2.mutable_map_int32_message())[0].add_repeated_int32(101);
2489
+
2490
+ message1.CopyFrom(message2);
2491
+
2492
+ // Checks repeated field is overwritten.
2493
+ EXPECT_EQ(1, message1.map_int32_message().at(0).repeated_int32_size());
2494
+ EXPECT_EQ(101, message1.map_int32_message().at(0).repeated_int32(0));
2495
+ }
2496
+
2497
+ TEST(GeneratedMapFieldTest, SwapWithEmpty) {
2498
+ UNITTEST::TestMap message1, message2;
2499
+
2500
+ MapTestUtil::SetMapFields(&message1);
2501
+ MapTestUtil::ExpectMapFieldsSet(message1);
2502
+ MapTestUtil::ExpectClear(message2);
2503
+
2504
+ message1.Swap(&message2);
2505
+ MapTestUtil::ExpectMapFieldsSet(message2);
2506
+ MapTestUtil::ExpectClear(message1);
2507
+ }
2508
+
2509
+ TEST(GeneratedMapFieldTest, SwapWithSelf) {
2510
+ UNITTEST::TestMap message;
2511
+
2512
+ MapTestUtil::SetMapFields(&message);
2513
+ MapTestUtil::ExpectMapFieldsSet(message);
2514
+
2515
+ message.Swap(&message);
2516
+ MapTestUtil::ExpectMapFieldsSet(message);
2517
+ }
2518
+
2519
+ TEST(GeneratedMapFieldTest, SwapWithOther) {
2520
+ UNITTEST::TestMap message1, message2;
2521
+
2522
+ MapTestUtil::SetMapFields(&message1);
2523
+ MapTestUtil::SetMapFields(&message2);
2524
+ MapTestUtil::ModifyMapFields(&message2);
2525
+
2526
+ message1.Swap(&message2);
2527
+ MapTestUtil::ExpectMapFieldsModified(message1);
2528
+ MapTestUtil::ExpectMapFieldsSet(message2);
2529
+ }
2530
+
2531
+ TEST(GeneratedMapFieldTest, CopyConstructor) {
2532
+ UNITTEST::TestMap message1;
2533
+ MapTestUtil::SetMapFields(&message1);
2534
+
2535
+ UNITTEST::TestMap message2(message1);
2536
+ MapTestUtil::ExpectMapFieldsSet(message2);
2537
+ }
2538
+
2539
+ TEST(GeneratedMapFieldTest, CopyAssignmentOperator) {
2540
+ UNITTEST::TestMap message1;
2541
+ MapTestUtil::SetMapFields(&message1);
2542
+
2543
+ UNITTEST::TestMap message2;
2544
+ message2 = message1;
2545
+ MapTestUtil::ExpectMapFieldsSet(message2);
2546
+
2547
+ // Make sure that self-assignment does something sane.
2548
+ message2.operator=(message2);
2549
+ MapTestUtil::ExpectMapFieldsSet(message2);
2550
+ }
2551
+
2552
+ #if !defined(PROTOBUF_TEST_NO_DESCRIPTORS) || PROTOBUF_RTTI
2553
+ TEST(GeneratedMapFieldTest, UpcastCopyFrom) {
2554
+ // Test the CopyFrom method that takes in the generic const Message&
2555
+ // parameter.
2556
+ UNITTEST::TestMap message1, message2;
2557
+
2558
+ MapTestUtil::SetMapFields(&message1);
2559
+
2560
+ const Message* source = absl::implicit_cast<const Message*>(&message1);
2561
+ message2.CopyFrom(*source);
2562
+
2563
+ MapTestUtil::ExpectMapFieldsSet(message2);
2564
+ }
2565
+ #endif
2566
+
2567
+ #ifndef PROTOBUF_TEST_NO_DESCRIPTORS
2568
+
2569
+ TEST(GeneratedMapFieldTest, CopyFromDynamicMessage) {
2570
+ // Test copying from a DynamicMessage, which must fall back to using
2571
+ // reflection.
2572
+ UNITTEST::TestMap message2;
2573
+
2574
+ // Construct a new version of the dynamic message via the factory.
2575
+ DynamicMessageFactory factory;
2576
+ std::unique_ptr<Message> message1;
2577
+ message1.reset(factory.GetPrototype(UNITTEST::TestMap::descriptor())->New());
2578
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
2579
+ reflection_tester.SetMapFieldsViaReflection(message1.get());
2580
+ reflection_tester.ExpectMapFieldsSetViaReflection(*message1);
2581
+ reflection_tester.ExpectMapFieldsSetViaReflectionIterator(message1.get());
2582
+ message2.CopyFrom(*message1);
2583
+ MapTestUtil::ExpectMapFieldsSet(message2);
2584
+ }
2585
+
2586
+ TEST(GeneratedMapFieldTest, CopyFromDynamicMessageMapReflection) {
2587
+ UNITTEST::TestMap message2;
2588
+
2589
+ // Construct a new version of the dynamic message via the factory.
2590
+ DynamicMessageFactory factory;
2591
+ std::unique_ptr<Message> message1;
2592
+ message1.reset(factory.GetPrototype(UNITTEST::TestMap::descriptor())->New());
2593
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
2594
+ reflection_tester.SetMapFieldsViaMapReflection(message1.get());
2595
+ reflection_tester.ExpectMapFieldsSetViaReflection(*message1);
2596
+ reflection_tester.ExpectMapFieldsSetViaReflectionIterator(message1.get());
2597
+ message2.CopyFrom(*message1);
2598
+ MapTestUtil::ExpectMapFieldsSet(message2);
2599
+ }
2600
+
2601
+ TEST(GeneratedMapFieldTest, DynamicMessageMergeFromDynamicMessage) {
2602
+ // Construct two dynamic message and sets via map reflection.
2603
+ DynamicMessageFactory factory;
2604
+ std::unique_ptr<Message> message1;
2605
+ message1.reset(factory.GetPrototype(UNITTEST::TestMap::descriptor())->New());
2606
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
2607
+ reflection_tester.SetMapFieldsViaMapReflection(message1.get());
2608
+
2609
+ // message2 is created by same factory.
2610
+ std::unique_ptr<Message> message2;
2611
+ message2.reset(factory.GetPrototype(UNITTEST::TestMap::descriptor())->New());
2612
+ reflection_tester.SetMapFieldsViaMapReflection(message2.get());
2613
+
2614
+ // message3 is created by different factory.
2615
+ DynamicMessageFactory factory3;
2616
+ std::unique_ptr<Message> message3;
2617
+ message3.reset(factory3.GetPrototype(UNITTEST::TestMap::descriptor())->New());
2618
+ reflection_tester.SetMapFieldsViaMapReflection(message3.get());
2619
+
2620
+ message2->MergeFrom(*message1);
2621
+ message3->MergeFrom(*message1);
2622
+
2623
+ // Test MergeFrom does not sync to repeated fields and
2624
+ // there is no duplicate keys in text format.
2625
+ std::string output1, output2, output3;
2626
+ ASSERT_TRUE(TextFormat::PrintToString(*message1, &output1));
2627
+ ASSERT_TRUE(TextFormat::PrintToString(*message2, &output2));
2628
+ ASSERT_TRUE(TextFormat::PrintToString(*message3, &output3));
2629
+ EXPECT_EQ(output1, output2);
2630
+ EXPECT_EQ(output1, output3);
2631
+ }
2632
+
2633
+ TEST(GeneratedMapFieldTest, DynamicMessageCopyFrom) {
2634
+ // Test copying to a DynamicMessage, which must fall back to using reflection.
2635
+ UNITTEST::TestMap message2;
2636
+ MapTestUtil::SetMapFields(&message2);
2637
+
2638
+ // Construct a new version of the dynamic message via the factory.
2639
+ DynamicMessageFactory factory;
2640
+ std::unique_ptr<Message> message1;
2641
+ message1.reset(factory.GetPrototype(UNITTEST::TestMap::descriptor())->New());
2642
+
2643
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
2644
+ message1->MergeFrom(message2);
2645
+ reflection_tester.ExpectMapFieldsSetViaReflection(*message1);
2646
+ reflection_tester.ExpectMapFieldsSetViaReflectionIterator(message1.get());
2647
+ }
2648
+
2649
+ TEST(GeneratedMapFieldTest, DynamicMessageCopyFromMapReflection) {
2650
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
2651
+ UNITTEST::TestMap message2;
2652
+ reflection_tester.SetMapFieldsViaMapReflection(&message2);
2653
+
2654
+ // Construct a dynamic message via the factory.
2655
+ DynamicMessageFactory factory;
2656
+ std::unique_ptr<Message> message1;
2657
+ message1.reset(factory.GetPrototype(UNITTEST::TestMap::descriptor())->New());
2658
+
2659
+ message1->MergeFrom(message2);
2660
+ reflection_tester.ExpectMapFieldsSetViaReflectionIterator(message1.get());
2661
+ reflection_tester.ExpectMapFieldsSetViaReflection(*message1);
2662
+ }
2663
+
2664
+ TEST(GeneratedMapFieldTest, SyncDynamicMapWithRepeatedField) {
2665
+ // Construct a dynamic message via the factory.
2666
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
2667
+ DynamicMessageFactory factory;
2668
+ std::unique_ptr<Message> message;
2669
+ message.reset(factory.GetPrototype(UNITTEST::TestMap::descriptor())->New());
2670
+ reflection_tester.SetMapFieldsViaReflection(message.get());
2671
+ reflection_tester.ExpectMapFieldsSetViaReflectionIterator(message.get());
2672
+ reflection_tester.ExpectMapFieldsSetViaReflection(*message);
2673
+ }
2674
+
2675
+ #endif // !PROTOBUF_TEST_NO_DESCRIPTORS
2676
+
2677
+ TEST(GeneratedMapFieldTest, NonEmptyMergeFrom) {
2678
+ UNITTEST::TestMap message1, message2;
2679
+
2680
+ MapTestUtil::SetMapFields(&message1);
2681
+
2682
+ // This field will test merging into an empty spot.
2683
+ (*message2.mutable_map_int32_int32())[1] = 1;
2684
+ message1.mutable_map_int32_int32()->erase(1);
2685
+
2686
+ // This tests overwriting.
2687
+ (*message2.mutable_map_int32_double())[1] = 1;
2688
+ (*message1.mutable_map_int32_double())[1] = 2;
2689
+
2690
+ message1.MergeFrom(message2);
2691
+ MapTestUtil::ExpectMapFieldsSet(message1);
2692
+
2693
+ // Test reflection MergeFrom does not sync to repeated field
2694
+ // and there is no duplicated keys.
2695
+ MapTestUtil::SetMapFields(&message1);
2696
+ MapTestUtil::SetMapFields(&message2);
2697
+
2698
+ message2.MergeFrom(message1);
2699
+
2700
+ std::string output1, output2;
2701
+ ASSERT_TRUE(TextFormat::PrintToString(message1, &output1));
2702
+ ASSERT_TRUE(TextFormat::PrintToString(message2, &output2));
2703
+ EXPECT_EQ(output1, output2);
2704
+ }
2705
+
2706
+ TEST(GeneratedMapFieldTest, MergeFromMessageMap) {
2707
+ UNITTEST::TestMessageMap message1, message2;
2708
+
2709
+ (*message1.mutable_map_int32_message())[0].add_repeated_int32(100);
2710
+ (*message2.mutable_map_int32_message())[0].add_repeated_int32(101);
2711
+
2712
+ message1.MergeFrom(message2);
2713
+
2714
+ // Checks repeated field is overwritten.
2715
+ EXPECT_EQ(1, message1.map_int32_message().at(0).repeated_int32_size());
2716
+ EXPECT_EQ(101, message1.map_int32_message().at(0).repeated_int32(0));
2717
+ }
2718
+
2719
+ // Test the generated SerializeWithCachedSizesToArray()
2720
+ TEST(GeneratedMapFieldTest, SerializationToArray) {
2721
+ UNITTEST::TestMap message1, message2;
2722
+ std::string data;
2723
+ MapTestUtil::SetMapFields(&message1);
2724
+ size_t size = message1.ByteSizeLong();
2725
+ data.resize(size);
2726
+ uint8_t* start = reinterpret_cast<uint8_t*>(&data[0]);
2727
+ uint8_t* end = message1.SerializeWithCachedSizesToArray(start);
2728
+ EXPECT_EQ(size, end - start);
2729
+ EXPECT_TRUE(message2.ParseFromString(data));
2730
+ MapTestUtil::ExpectMapFieldsSet(message2);
2731
+ }
2732
+
2733
+ // Test the generated SerializeWithCachedSizes()
2734
+ TEST(GeneratedMapFieldTest, SerializationToStream) {
2735
+ UNITTEST::TestMap message1, message2;
2736
+ MapTestUtil::SetMapFields(&message1);
2737
+ size_t size = message1.ByteSizeLong();
2738
+ std::string data;
2739
+ data.resize(size);
2740
+ {
2741
+ // Allow the output stream to buffer only one byte at a time.
2742
+ io::ArrayOutputStream array_stream(&data[0], size, 1);
2743
+ io::CodedOutputStream output_stream(&array_stream);
2744
+ message1.SerializeWithCachedSizes(&output_stream);
2745
+ EXPECT_FALSE(output_stream.HadError());
2746
+ EXPECT_EQ(size, output_stream.ByteCount());
2747
+ }
2748
+ EXPECT_TRUE(message2.ParseFromString(data));
2749
+ MapTestUtil::ExpectMapFieldsSet(message2);
2750
+ }
2751
+
2752
+ TEST(GeneratedMapFieldTest, ParseFailsIfMalformed) {
2753
+ UNITTEST::TestMapSubmessage o, p;
2754
+ auto m = o.mutable_test_map()->mutable_map_int32_foreign_message();
2755
+ (*m)[0].set_c(-1);
2756
+ std::string serialized;
2757
+ EXPECT_TRUE(o.SerializeToString(&serialized));
2758
+
2759
+ // Should parse correctly.
2760
+ EXPECT_TRUE(p.ParseFromString(serialized));
2761
+
2762
+ // Overwriting the last byte to 0xFF results in malformed wire.
2763
+ serialized[serialized.size() - 1] = 0xFF;
2764
+ EXPECT_FALSE(p.ParseFromString(serialized));
2765
+ }
2766
+
2767
+
2768
+ TEST(GeneratedMapFieldTest, SameTypeMaps) {
2769
+ const Descriptor* map1 = UNITTEST::TestSameTypeMap::descriptor()
2770
+ ->FindFieldByName("map1")
2771
+ ->message_type();
2772
+ const Descriptor* map2 = UNITTEST::TestSameTypeMap::descriptor()
2773
+ ->FindFieldByName("map2")
2774
+ ->message_type();
2775
+
2776
+ const Message* map1_entry =
2777
+ MessageFactory::generated_factory()->GetPrototype(map1);
2778
+ const Message* map2_entry =
2779
+ MessageFactory::generated_factory()->GetPrototype(map2);
2780
+
2781
+ EXPECT_EQ(map1, map1_entry->GetDescriptor());
2782
+ EXPECT_EQ(map2, map2_entry->GetDescriptor());
2783
+ }
2784
+
2785
+ TEST(GeneratedMapFieldTest, Proto2UnknownEnum) {
2786
+ UNITTEST::TestEnumMapPlusExtra from;
2787
+ (*from.mutable_known_map_field())[0] = UNITTEST::E_PROTO2_MAP_ENUM_FOO;
2788
+ (*from.mutable_unknown_map_field())[0] = UNITTEST::E_PROTO2_MAP_ENUM_EXTRA;
2789
+ std::string data;
2790
+ ABSL_CHECK(from.SerializeToString(&data));
2791
+
2792
+ UNITTEST::TestEnumMap to;
2793
+ EXPECT_TRUE(to.ParseFromString(data));
2794
+ EXPECT_EQ(to.GetReflection()->GetUnknownFields(to).field_count(), 1);
2795
+ EXPECT_THAT(to.known_map_field(),
2796
+ ElementsAre(Pair(0, UNITTEST::PROTO2_MAP_ENUM_FOO)));
2797
+ EXPECT_THAT(to.unknown_map_field(), IsEmpty());
2798
+
2799
+ data.clear();
2800
+ from.Clear();
2801
+ ABSL_CHECK(to.SerializeToString(&data));
2802
+ EXPECT_TRUE(from.ParseFromString(data));
2803
+ EXPECT_EQ(from.GetReflection()->GetUnknownFields(from).field_count(), 0);
2804
+ EXPECT_THAT(from.known_map_field(),
2805
+ ElementsAre(Pair(0, UNITTEST::E_PROTO2_MAP_ENUM_FOO)));
2806
+ EXPECT_THAT(from.unknown_map_field(),
2807
+ ElementsAre(Pair(0, UNITTEST::E_PROTO2_MAP_ENUM_EXTRA)));
2808
+
2809
+ // Test the same behavior with the reflection based parser.
2810
+ to.Clear();
2811
+ const char* ptr;
2812
+ internal::ParseContext ctx(io::CodedInputStream::GetDefaultRecursionLimit(),
2813
+ false, &ptr, data);
2814
+ ptr = WireFormat::_InternalParse(&to, ptr, &ctx);
2815
+ ASSERT_TRUE(ptr);
2816
+ ASSERT_TRUE(ctx.EndedAtLimit());
2817
+
2818
+ EXPECT_EQ(to.GetReflection()->GetUnknownFields(to).field_count(), 1);
2819
+ EXPECT_THAT(to.known_map_field(),
2820
+ ElementsAre(Pair(0, UNITTEST::PROTO2_MAP_ENUM_FOO)));
2821
+ EXPECT_THAT(to.unknown_map_field(), IsEmpty());
2822
+ }
2823
+
2824
+ TEST(GeneratedMapFieldTest, Proto2UnknownEnumThrowsAwayUnknownData) {
2825
+ UNITTEST::TestEnumMap to;
2826
+ // 101: {
2827
+ // 1: 2
2828
+ // 2: 3 # this is an unknown enum. It should be kept.
2829
+ // 3: 120 # this is an extra field that will be discarded.
2830
+ // }
2831
+ constexpr absl::string_view data = "\252\006\006\010\002\020\003\030x";
2832
+ // Same as above, but without the extra field.
2833
+ constexpr absl::string_view expected = "\252\006\004\010\002\020\003";
2834
+ ASSERT_TRUE(to.ParseFromString(data));
2835
+ EXPECT_EQ(expected, to.SerializeAsString());
2836
+
2837
+ // Test the same behavior with the reflection based parser.
2838
+ to.Clear();
2839
+ const char* ptr;
2840
+ internal::ParseContext ctx(io::CodedInputStream::GetDefaultRecursionLimit(),
2841
+ false, &ptr, data);
2842
+ ptr = WireFormat::_InternalParse(&to, ptr, &ctx);
2843
+ ASSERT_TRUE(ptr);
2844
+ ASSERT_TRUE(ctx.EndedAtLimit());
2845
+ EXPECT_EQ(expected, to.SerializeAsString());
2846
+ }
2847
+
2848
+ TEST(GeneratedMapFieldTest, Proto2UnknownEnumAllKeyTypesWork) {
2849
+ #define PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(Type, ...) \
2850
+ ABSL_LOG(INFO) << "Testing " << #Type; \
2851
+ for (auto value : {__VA_ARGS__}) { \
2852
+ UNITTEST::TestEnumMapPlusExtra from; \
2853
+ (*from.mutable_unknown_map_field_##Type())[value] = \
2854
+ UNITTEST::E_PROTO2_MAP_ENUM_EXTRA; \
2855
+ UNITTEST::TestEnumMap to; \
2856
+ ASSERT_TRUE(to.ParseFromString(from.SerializeAsString())); \
2857
+ EXPECT_EQ(0, to.unknown_map_field_##Type().size()) \
2858
+ << testing::PrintToString(to.unknown_map_field_##Type()); \
2859
+ const UnknownFieldSet& unknown_field_set = \
2860
+ to.GetReflection()->GetUnknownFields(to); \
2861
+ EXPECT_EQ(1, unknown_field_set.field_count()); \
2862
+ from.Clear(); \
2863
+ EXPECT_EQ(from.unknown_map_field_##Type().size(), 0); \
2864
+ EXPECT_TRUE(from.ParseFromString(to.SerializeAsString())); \
2865
+ EXPECT_THAT(from.unknown_map_field_##Type(), \
2866
+ ElementsAre(Pair(value, UNITTEST::E_PROTO2_MAP_ENUM_EXTRA))); \
2867
+ EXPECT_EQ(from.SerializeAsString(), to.SerializeAsString()); \
2868
+ }
2869
+
2870
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(int64, int64_t{17},
2871
+ std::numeric_limits<int64_t>::min(),
2872
+ std::numeric_limits<int64_t>::max());
2873
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(uint64, uint64_t{17},
2874
+ std::numeric_limits<uint64_t>::min(),
2875
+ std::numeric_limits<uint64_t>::max());
2876
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(int32, int32_t{17},
2877
+ std::numeric_limits<int32_t>::min(),
2878
+ std::numeric_limits<int32_t>::max());
2879
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(uint32, uint32_t{17},
2880
+ std::numeric_limits<uint32_t>::min(),
2881
+ std::numeric_limits<uint32_t>::max());
2882
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(fixed32, uint32_t{17},
2883
+ std::numeric_limits<uint32_t>::min(),
2884
+ std::numeric_limits<uint32_t>::max());
2885
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(fixed64, uint64_t{17},
2886
+ std::numeric_limits<uint64_t>::min(),
2887
+ std::numeric_limits<uint64_t>::max());
2888
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(bool, true);
2889
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(string, "17");
2890
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(sint32, int32_t{17},
2891
+ std::numeric_limits<int32_t>::min(),
2892
+ std::numeric_limits<int32_t>::max());
2893
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(sint64, int64_t{17},
2894
+ std::numeric_limits<int64_t>::min(),
2895
+ std::numeric_limits<int64_t>::max());
2896
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(sfixed32, int32_t{17},
2897
+ std::numeric_limits<int32_t>::min(),
2898
+ std::numeric_limits<int32_t>::max());
2899
+ PROTOBUF_INTERNAL_TEST_MAP_KEY_TYPE(sfixed64, int64_t{17},
2900
+ std::numeric_limits<int64_t>::min(),
2901
+ std::numeric_limits<int64_t>::max());
2902
+ }
2903
+
2904
+ TEST(GeneratedMapFieldTest, StandardWireFormat) {
2905
+ UNITTEST::TestMap message;
2906
+ std::string data = "\x0A\x04\x08\x01\x10\x01";
2907
+
2908
+ EXPECT_TRUE(message.ParseFromString(data));
2909
+ EXPECT_EQ(1, message.map_int32_int32().size());
2910
+ EXPECT_EQ(1, message.map_int32_int32().at(1));
2911
+ }
2912
+
2913
+ TEST(GeneratedMapFieldTest, UnorderedWireFormat) {
2914
+ UNITTEST::TestMap message;
2915
+
2916
+ // put value before key in wire format
2917
+ std::string data = "\x0A\x04\x10\x01\x08\x02";
2918
+
2919
+ EXPECT_TRUE(message.ParseFromString(data));
2920
+ EXPECT_EQ(1, message.map_int32_int32().size());
2921
+ ASSERT_NE(message.map_int32_int32().find(2), message.map_int32_int32().end());
2922
+ EXPECT_EQ(1, message.map_int32_int32().at(2));
2923
+ }
2924
+
2925
+ TEST(GeneratedMapFieldTest, DuplicatedKeyWireFormat) {
2926
+ UNITTEST::TestMap message;
2927
+
2928
+ // Two key fields in wire format
2929
+ std::string data = "\x0A\x06\x08\x01\x08\x02\x10\x01";
2930
+
2931
+ EXPECT_TRUE(message.ParseFromString(data));
2932
+ EXPECT_EQ(1, message.map_int32_int32().size());
2933
+ EXPECT_EQ(1, message.map_int32_int32().at(2));
2934
+
2935
+ // A similar test, but with a map from int to a message type.
2936
+ // Again, we want to be sure that the "second one wins" when
2937
+ // there are two separate entries with the same key.
2938
+ const int key = 99;
2939
+ UNITTEST::TestRequiredMessageMap map_message;
2940
+ UNITTEST::TestRequired with_dummy4;
2941
+ with_dummy4.set_a(0);
2942
+ with_dummy4.set_b(0);
2943
+ with_dummy4.set_c(0);
2944
+ with_dummy4.set_dummy4(11);
2945
+ (*map_message.mutable_map_field())[key] = with_dummy4;
2946
+ std::string s = map_message.SerializeAsString();
2947
+ UNITTEST::TestRequired with_dummy5;
2948
+ with_dummy5.set_a(0);
2949
+ with_dummy5.set_b(0);
2950
+ with_dummy5.set_c(0);
2951
+ with_dummy5.set_dummy5(12);
2952
+ (*map_message.mutable_map_field())[key] = with_dummy5;
2953
+ std::string both = s + map_message.SerializeAsString();
2954
+ // We don't expect a merge now. The "second one wins."
2955
+ ASSERT_TRUE(map_message.ParseFromString(both));
2956
+ ASSERT_EQ(1, map_message.map_field().size());
2957
+ ASSERT_EQ(1, map_message.map_field().count(key));
2958
+ EXPECT_EQ(0, map_message.map_field().find(key)->second.a());
2959
+ EXPECT_EQ(0, map_message.map_field().find(key)->second.b());
2960
+ EXPECT_EQ(0, map_message.map_field().find(key)->second.c());
2961
+ EXPECT_FALSE(map_message.map_field().find(key)->second.has_dummy4());
2962
+ ASSERT_TRUE(map_message.map_field().find(key)->second.has_dummy5());
2963
+ EXPECT_EQ(12, map_message.map_field().find(key)->second.dummy5());
2964
+ }
2965
+
2966
+ TEST(GeneratedMapFieldTest, DuplicateEntriesInWireFormatLastOneWins) {
2967
+ UNITTEST::TestMap message;
2968
+
2969
+ std::string bytes;
2970
+ {
2971
+ UNITTEST::TestMap tmp;
2972
+ (*tmp.mutable_map_int32_int32())[1] = 1;
2973
+ bytes = tmp.SerializeAsString();
2974
+
2975
+ (*tmp.mutable_map_int32_int32())[1] = 2;
2976
+ absl::StrAppend(&bytes, tmp.SerializeAsString());
2977
+ }
2978
+
2979
+ ASSERT_TRUE(message.ParseFromString(bytes));
2980
+ EXPECT_THAT(message.map_int32_int32(), ElementsAre(Pair(1, 2)));
2981
+ }
2982
+
2983
+ // Exhaustive combinations of keys, values, and junk in any order.
2984
+ // This re-tests some of the things tested above, but if it fails
2985
+ // it's more work to determine what went wrong, so it isn't necessarily
2986
+ // bad that we have the simpler tests too.
2987
+ TEST(GeneratedMapFieldTest, KeysValuesUnknownsWireFormat) {
2988
+ UNITTEST::TestMap message;
2989
+ const int kMaxNumKeysAndValuesAndJunk = 4;
2990
+ const char kKeyTag = 0x08;
2991
+ const char kValueTag = 0x10;
2992
+ const char kJunkTag = 0x20;
2993
+ for (int items = 0; items <= kMaxNumKeysAndValuesAndJunk; items++) {
2994
+ std::string data = "\x0A";
2995
+ // Encode length of what will follow.
2996
+ data.push_back(items * 2);
2997
+ static const int kBitsOfIPerItem = 4;
2998
+ static const int mask = (1 << kBitsOfIPerItem) - 1;
2999
+ // Each iteration of the following is a test. It uses i as bit vector
3000
+ // encoding the keys and values to put in the wire format.
3001
+ for (int i = 0; i < (1 << (items * kBitsOfIPerItem)); i++) {
3002
+ std::string wire_format = data;
3003
+ int expected_key = 0;
3004
+ int expected_value = 0;
3005
+ for (int k = i, j = 0; j < items; j++, k >>= kBitsOfIPerItem) {
3006
+ bool is_key = k & 0x1;
3007
+ bool is_value = !is_key && (k & 0x2);
3008
+ wire_format.push_back(is_key ? kKeyTag
3009
+ : is_value ? kValueTag
3010
+ : kJunkTag);
3011
+ char c = static_cast<char>(k & mask) >> 2; // One char after the tag.
3012
+ wire_format.push_back(c);
3013
+ if (is_key) expected_key = static_cast<int>(c);
3014
+ if (is_value) expected_value = static_cast<int>(c);
3015
+ bool res = message.ParseFromString(wire_format);
3016
+ bool expect_success = true;
3017
+ // Unfortunately the old map parser accepts malformed input, the new
3018
+ // parser accepts only correct input.
3019
+ if (j != items - 1) expect_success = false;
3020
+ if (expect_success) {
3021
+ ASSERT_TRUE(res);
3022
+ ASSERT_EQ(1, message.map_int32_int32().size());
3023
+ ASSERT_EQ(expected_key, message.map_int32_int32().begin()->first);
3024
+ ASSERT_EQ(expected_value, message.map_int32_int32().begin()->second);
3025
+ } else {
3026
+ ASSERT_FALSE(res);
3027
+ }
3028
+ }
3029
+ }
3030
+ }
3031
+ }
3032
+
3033
+ TEST(GeneratedMapFieldTest, DuplicatedValueWireFormat) {
3034
+ UNITTEST::TestMap message;
3035
+
3036
+ // Two value fields in wire format
3037
+ std::string data = "\x0A\x06\x08\x01\x10\x01\x10\x02";
3038
+
3039
+ EXPECT_TRUE(message.ParseFromString(data));
3040
+ EXPECT_EQ(1, message.map_int32_int32().size());
3041
+ EXPECT_EQ(2, message.map_int32_int32().at(1));
3042
+ }
3043
+
3044
+ TEST(GeneratedMapFieldTest, MissedKeyWireFormat) {
3045
+ UNITTEST::TestMap message;
3046
+
3047
+ // No key field in wire format
3048
+ std::string data = "\x0A\x02\x10\x01";
3049
+
3050
+ EXPECT_TRUE(message.ParseFromString(data));
3051
+ EXPECT_EQ(1, message.map_int32_int32().size());
3052
+ ASSERT_NE(message.map_int32_int32().find(0), message.map_int32_int32().end());
3053
+ EXPECT_EQ(1, message.map_int32_int32().at(0));
3054
+ }
3055
+
3056
+ TEST(GeneratedMapFieldTest, MissedValueWireFormat) {
3057
+ UNITTEST::TestMap message;
3058
+
3059
+ // No value field in wire format
3060
+ std::string data = "\x0A\x02\x08\x01";
3061
+
3062
+ EXPECT_TRUE(message.ParseFromString(data));
3063
+ EXPECT_EQ(1, message.map_int32_int32().size());
3064
+ ASSERT_NE(message.map_int32_int32().find(1), message.map_int32_int32().end());
3065
+ EXPECT_EQ(0, message.map_int32_int32().at(1));
3066
+ }
3067
+
3068
+ TEST(GeneratedMapFieldTest, MissedValueTextFormat) {
3069
+ UNITTEST::TestMap message;
3070
+
3071
+ // No value field in text format
3072
+ std::string text =
3073
+ "map_int32_foreign_message {\n"
3074
+ " key: 1234567890\n"
3075
+ "}";
3076
+
3077
+ EXPECT_TRUE(TextFormat::ParseFromString(text, &message));
3078
+ EXPECT_EQ(1, message.map_int32_foreign_message().size());
3079
+ EXPECT_EQ(11, message.ByteSizeLong());
3080
+ }
3081
+
3082
+ TEST(GeneratedMapFieldTest, UnknownFieldWireFormat) {
3083
+ UNITTEST::TestMap message;
3084
+
3085
+ // Unknown field in wire format
3086
+ std::string data = "\x0A\x06\x08\x02\x10\x03\x18\x01";
3087
+
3088
+ EXPECT_TRUE(message.ParseFromString(data));
3089
+ EXPECT_EQ(1, message.map_int32_int32().size());
3090
+ EXPECT_EQ(3, message.map_int32_int32().at(2));
3091
+ }
3092
+
3093
+ TEST(GeneratedMapFieldTest, ToplevelTagNotLengthPrefixed) {
3094
+ UNITTEST::TestMap message;
3095
+
3096
+ // The toplevel matches a field number, but does not match the wire type.
3097
+ std::string data = "\x08\x81\x04";
3098
+ EXPECT_TRUE(message.ParseFromString(data));
3099
+ EXPECT_EQ(0, message.map_int32_int32().size());
3100
+
3101
+ const UnknownFieldSet& unknown_field_set =
3102
+ message.GetReflection()->GetUnknownFields(message);
3103
+ ASSERT_EQ(1, unknown_field_set.field_count());
3104
+ auto& field = unknown_field_set.field(0);
3105
+ ASSERT_EQ(field.TYPE_VARINT, field.type());
3106
+ EXPECT_EQ(((0x1 << 0) | (0x04 << 7)), field.varint());
3107
+ }
3108
+
3109
+ TEST(GeneratedMapFieldTest, InnerTagsInLongForm) {
3110
+ UNITTEST::TestMap message;
3111
+
3112
+ // First, control
3113
+ absl::string_view data("\012\004\010\007\020\005", 6);
3114
+ ASSERT_TRUE(message.ParseFromString(data));
3115
+ EXPECT_THAT(message.map_int32_int32(), ElementsAre(Pair(7, 5)));
3116
+
3117
+ // Now we make the key tag long form
3118
+ data = absl::string_view("\012\005\210\000\007\020\005", 7);
3119
+ ASSERT_TRUE(message.ParseFromString(data));
3120
+ EXPECT_THAT(message.map_int32_int32(), ElementsAre(Pair(7, 5)));
3121
+
3122
+ // Now we make the value tag long form
3123
+ data = absl::string_view("\012\005\010\007\220\000\005", 7);
3124
+ ASSERT_TRUE(message.ParseFromString(data));
3125
+ EXPECT_THAT(message.map_int32_int32(), ElementsAre(Pair(7, 5)));
3126
+ }
3127
+
3128
+ TEST(GeneratedMapFieldTest, CorruptedWireFormat) {
3129
+ UNITTEST::TestMap message;
3130
+
3131
+ // corrupted data in wire format
3132
+ std::string data = "\x0A\x06\x08\x02\x11\x03";
3133
+
3134
+ EXPECT_FALSE(message.ParseFromString(data));
3135
+ }
3136
+
3137
+ TEST(GeneratedMapFieldTest, IsInitialized) {
3138
+ UNITTEST::TestRequiredMessageMap map_message;
3139
+
3140
+ // Add an uninitialized message.
3141
+ (*map_message.mutable_map_field())[0];
3142
+ EXPECT_FALSE(map_message.IsInitialized());
3143
+
3144
+ // Initialize uninitialized message
3145
+ (*map_message.mutable_map_field())[0].set_a(0);
3146
+ (*map_message.mutable_map_field())[0].set_b(0);
3147
+ (*map_message.mutable_map_field())[0].set_c(0);
3148
+ EXPECT_TRUE(map_message.IsInitialized());
3149
+ }
3150
+
3151
+ TEST(GeneratedMapFieldTest, SpaceUsed) {
3152
+ UNITTEST::TestRequiredMessageMap map_message;
3153
+ const size_t initial = map_message.SpaceUsed();
3154
+ const size_t space_used_message = UNITTEST::TestRequired().SpaceUsed();
3155
+
3156
+ auto& m = *map_message.mutable_map_field();
3157
+ constexpr int kNumValues = 100;
3158
+ for (int i = 0; i < kNumValues; ++i) {
3159
+ m[i];
3160
+ }
3161
+
3162
+ // The exact value will depend on internal state, like collisions,
3163
+ // so we can't predict it. But we can predict a lower bound.
3164
+ size_t lower_bound =
3165
+ initial + kNumValues * (space_used_message + sizeof(int32_t) +
3166
+ /* Node::next */ sizeof(void*) +
3167
+ /* table entry */ sizeof(void*));
3168
+
3169
+ EXPECT_LE(lower_bound, map_message.SpaceUsed());
3170
+ }
3171
+
3172
+ TEST(GeneratedMapFieldTest, MessagesMustMerge) {
3173
+ UNITTEST::TestRequiredMessageMap map_message;
3174
+
3175
+ UNITTEST::TestRequired with_dummy4;
3176
+ with_dummy4.set_a(97);
3177
+ with_dummy4.set_b(91);
3178
+ with_dummy4.set_dummy4(98);
3179
+ EXPECT_FALSE(with_dummy4.IsInitialized());
3180
+ (*map_message.mutable_map_field())[0] = with_dummy4;
3181
+ EXPECT_FALSE(map_message.IsInitialized());
3182
+
3183
+ UNITTEST::TestRequired with_dummy5;
3184
+ with_dummy5.set_b(0);
3185
+ with_dummy5.set_c(33);
3186
+ with_dummy5.set_dummy5(99);
3187
+ EXPECT_FALSE(with_dummy5.IsInitialized());
3188
+ (*map_message.mutable_map_field())[0] = with_dummy5;
3189
+ EXPECT_FALSE(map_message.IsInitialized());
3190
+
3191
+ // The wire format of MapEntry is straightforward (*) and can be manually
3192
+ // constructed to force merging of two uninitialized messages that would
3193
+ // result in an initialized message.
3194
+ //
3195
+ // (*) http://google3/net/proto2/internal/map_test.cc?l=2433&rcl=310012028
3196
+ std::string dummy4_s = with_dummy4.SerializePartialAsString();
3197
+ std::string dummy5_s = with_dummy5.SerializePartialAsString();
3198
+ int payload_size = dummy4_s.size() + dummy5_s.size();
3199
+ // Makes sure the payload size fits into one byte.
3200
+ ASSERT_LT(payload_size, 128);
3201
+
3202
+ std::string s(6, 0);
3203
+ char* p = &s[0];
3204
+ *p++ = WireFormatLite::MakeTag(1, WireFormatLite::WIRETYPE_LENGTH_DELIMITED);
3205
+ // Length: 2B for key tag & val and 2B for val tag and length of the following
3206
+ // payload.
3207
+ *p++ = 4 + payload_size;
3208
+ *p++ = WireFormatLite::MakeTag(1, WireFormatLite::WIRETYPE_VARINT);
3209
+ *p++ = 0;
3210
+ *p++ = WireFormatLite::MakeTag(2, WireFormatLite::WIRETYPE_LENGTH_DELIMITED);
3211
+ *p++ = payload_size;
3212
+ absl::StrAppend(&s, dummy4_s, dummy5_s);
3213
+
3214
+ // Test key then value then value.
3215
+ int key = 0;
3216
+ ASSERT_TRUE(map_message.ParseFromString(s));
3217
+ ASSERT_EQ(1, map_message.map_field().size());
3218
+ ASSERT_EQ(1, map_message.map_field().count(key));
3219
+ EXPECT_EQ(97, map_message.map_field().find(key)->second.a());
3220
+ EXPECT_EQ(0, map_message.map_field().find(key)->second.b());
3221
+ EXPECT_EQ(33, map_message.map_field().find(key)->second.c());
3222
+ EXPECT_EQ(98, map_message.map_field().find(key)->second.dummy4());
3223
+ EXPECT_EQ(99, map_message.map_field().find(key)->second.dummy5());
3224
+
3225
+ // Test key then value then value then key.
3226
+ s.push_back(s[2]); // Copy the key's tag.
3227
+ key = 19;
3228
+ s.push_back(key); // Second key is 19 instead of 0.
3229
+ s[1] += 2; // Adjust encoded size.
3230
+ ASSERT_TRUE(map_message.ParseFromString(s));
3231
+ ASSERT_EQ(1, map_message.map_field().size());
3232
+ ASSERT_EQ(1, map_message.map_field().count(key));
3233
+ EXPECT_EQ(97, map_message.map_field().find(key)->second.a());
3234
+ EXPECT_EQ(0, map_message.map_field().find(key)->second.b());
3235
+ EXPECT_EQ(33, map_message.map_field().find(key)->second.c());
3236
+ EXPECT_EQ(98, map_message.map_field().find(key)->second.dummy4());
3237
+ EXPECT_EQ(99, map_message.map_field().find(key)->second.dummy5());
3238
+ }
3239
+
3240
+ // Generated Message Reflection Test ================================
3241
+
3242
+ TEST(GeneratedMapFieldReflectionTest, SpaceUsed) {
3243
+ UNITTEST::TestMap message;
3244
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
3245
+ reflection_tester.SetMapFieldsViaReflection(&message);
3246
+
3247
+ EXPECT_LT(0, message.GetReflection()->SpaceUsedLong(message));
3248
+ }
3249
+
3250
+ TEST(GeneratedMapFieldReflectionTest, Accessors) {
3251
+ // Set every field to a unique value then go back and check all those
3252
+ // values.
3253
+ UNITTEST::TestMap message;
3254
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
3255
+ reflection_tester.SetMapFieldsViaReflection(&message);
3256
+ MapTestUtil::ExpectMapFieldsSet(message);
3257
+ reflection_tester.ExpectMapFieldsSetViaReflection(message);
3258
+ reflection_tester.ExpectMapFieldsSetViaReflectionIterator(&message);
3259
+
3260
+ reflection_tester.ModifyMapFieldsViaReflection(&message);
3261
+ MapTestUtil::ExpectMapFieldsModified(message);
3262
+ }
3263
+
3264
+ TEST(GeneratedMapFieldReflectionTest,
3265
+ AccessingTheDefaultInstanceWithReflectionDoesNotModifyIt) {
3266
+ const auto& msg = UNITTEST::TestMap::default_instance();
3267
+ const auto clone_bytes = [&] {
3268
+ return std::string(reinterpret_cast<const char*>(&msg), sizeof(msg));
3269
+ };
3270
+ const auto before = clone_bytes();
3271
+ const auto& rep = msg.GetReflection()->GetRepeatedFieldRef<google::protobuf::Message>(
3272
+ msg, msg.GetDescriptor()->FindFieldByName("map_int32_int32"));
3273
+ EXPECT_THAT(rep, IsEmpty());
3274
+ const auto after = clone_bytes();
3275
+ EXPECT_EQ(before, after);
3276
+ }
3277
+
3278
+ TEST(GeneratedMapFieldReflectionTest, Swap) {
3279
+ UNITTEST::TestMap message1;
3280
+ UNITTEST::TestMap message2;
3281
+
3282
+ MapTestUtil::SetMapFields(&message1);
3283
+
3284
+ const Reflection* reflection = message1.GetReflection();
3285
+ reflection->Swap(&message1, &message2);
3286
+
3287
+ MapTestUtil::ExpectClear(message1);
3288
+ MapTestUtil::ExpectMapFieldsSet(message2);
3289
+ }
3290
+
3291
+ TEST(GeneratedMapFieldReflectionTest, SwapWithBothSet) {
3292
+ UNITTEST::TestMap message1;
3293
+ UNITTEST::TestMap message2;
3294
+
3295
+ MapTestUtil::SetMapFields(&message1);
3296
+ MapTestUtil::SetMapFields(&message2);
3297
+ MapTestUtil::ModifyMapFields(&message2);
3298
+
3299
+ const Reflection* reflection = message1.GetReflection();
3300
+ reflection->Swap(&message1, &message2);
3301
+
3302
+ MapTestUtil::ExpectMapFieldsModified(message1);
3303
+ MapTestUtil::ExpectMapFieldsSet(message2);
3304
+ }
3305
+
3306
+ TEST(GeneratedMapFieldReflectionTest, SwapFields) {
3307
+ UNITTEST::TestMap message1;
3308
+ UNITTEST::TestMap message2;
3309
+
3310
+ MapTestUtil::SetMapFields(&message2);
3311
+
3312
+ std::vector<const FieldDescriptor*> fields;
3313
+ const Reflection* reflection = message1.GetReflection();
3314
+ reflection->ListFields(message2, &fields);
3315
+ reflection->SwapFields(&message1, &message2, fields);
3316
+
3317
+ MapTestUtil::ExpectMapFieldsSet(message1);
3318
+ MapTestUtil::ExpectClear(message2);
3319
+ }
3320
+
3321
+ TEST(GeneratedMapFieldReflectionTest, ClearField) {
3322
+ UNITTEST::TestMap message;
3323
+ MapTestUtil::SetMapFields(&message);
3324
+ MapTestUtil::ExpectMapFieldsSet(message);
3325
+
3326
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
3327
+ reflection_tester.ClearMapFieldsViaReflection(&message);
3328
+ reflection_tester.ExpectClearViaReflection(message);
3329
+ reflection_tester.ExpectClearViaReflectionIterator(&message);
3330
+ }
3331
+
3332
+ TEST(GeneratedMapFieldReflectionTest, RemoveLast) {
3333
+ UNITTEST::TestMap message;
3334
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
3335
+
3336
+ MapTestUtil::SetMapFields(&message);
3337
+ MapTestUtil::ExpectMapsSize(message, 2);
3338
+ std::vector<const Message*> expected_entries =
3339
+ MapTestUtil::GetMapEntries(message, 0);
3340
+
3341
+ reflection_tester.RemoveLastMapsViaReflection(&message);
3342
+
3343
+ MapTestUtil::ExpectMapsSize(message, 1);
3344
+ std::vector<const Message*> remained_entries =
3345
+ MapTestUtil::GetMapEntries(message, 0);
3346
+ EXPECT_TRUE(expected_entries == remained_entries);
3347
+ }
3348
+
3349
+ TEST(GeneratedMapFieldReflectionTest, ReleaseLast) {
3350
+ UNITTEST::TestMap message;
3351
+ const Descriptor* descriptor = message.GetDescriptor();
3352
+ MapReflectionTester reflection_tester(descriptor);
3353
+
3354
+ MapTestUtil::SetMapFields(&message);
3355
+
3356
+ MapTestUtil::ExpectMapsSize(message, 2);
3357
+
3358
+ reflection_tester.ReleaseLastMapsViaReflection(&message);
3359
+
3360
+ MapTestUtil::ExpectMapsSize(message, 1);
3361
+
3362
+ // Now test that we actually release the right message.
3363
+ message.Clear();
3364
+ MapTestUtil::SetMapFields(&message);
3365
+
3366
+ MapTestUtil::ExpectMapsSize(message, 2);
3367
+ std::vector<const Message*> expect_last =
3368
+ MapTestUtil::GetMapEntries(message, 1);
3369
+ std::vector<const Message*> release_last =
3370
+ MapTestUtil::GetMapEntriesFromRelease(&message);
3371
+ MapTestUtil::ExpectMapsSize(message, 1);
3372
+ if (!internal::DebugHardenForceCopyInRelease()) {
3373
+ EXPECT_TRUE(expect_last == release_last);
3374
+ }
3375
+ for (std::vector<const Message*>::iterator it = release_last.begin();
3376
+ it != release_last.end(); ++it) {
3377
+ delete *it;
3378
+ }
3379
+ }
3380
+
3381
+ TEST(GeneratedMapFieldReflectionTest, SwapElements) {
3382
+ UNITTEST::TestMap message;
3383
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
3384
+
3385
+ MapTestUtil::SetMapFields(&message);
3386
+
3387
+ // Get pointers of map entries at their original position
3388
+ std::vector<const Message*> entries0 = MapTestUtil::GetMapEntries(message, 0);
3389
+ std::vector<const Message*> entries1 = MapTestUtil::GetMapEntries(message, 1);
3390
+
3391
+ // Swap the first time.
3392
+ reflection_tester.SwapMapsViaReflection(&message);
3393
+
3394
+ // Get pointer of map entry after swap once.
3395
+ std::vector<const Message*> entries0_once =
3396
+ MapTestUtil::GetMapEntries(message, 0);
3397
+ std::vector<const Message*> entries1_once =
3398
+ MapTestUtil::GetMapEntries(message, 1);
3399
+
3400
+ // Test map entries are swapped.
3401
+ MapTestUtil::ExpectMapsSize(message, 2);
3402
+ EXPECT_TRUE(entries0 == entries1_once);
3403
+ EXPECT_TRUE(entries1 == entries0_once);
3404
+
3405
+ // Swap the second time.
3406
+ reflection_tester.SwapMapsViaReflection(&message);
3407
+
3408
+ // Get pointer of map entry after swap once.
3409
+ std::vector<const Message*> entries0_twice =
3410
+ MapTestUtil::GetMapEntries(message, 0);
3411
+ std::vector<const Message*> entries1_twice =
3412
+ MapTestUtil::GetMapEntries(message, 1);
3413
+
3414
+ // Test map entries are swapped back.
3415
+ MapTestUtil::ExpectMapsSize(message, 2);
3416
+ EXPECT_TRUE(entries0 == entries0_twice);
3417
+ EXPECT_TRUE(entries1 == entries1_twice);
3418
+ }
3419
+
3420
+ TEST(GeneratedMapFieldReflectionTest, MutableUnknownFields) {
3421
+ UNITTEST::TestMap message;
3422
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
3423
+ reflection_tester.MutableUnknownFieldsOfMapFieldsViaReflection(&message);
3424
+ }
3425
+
3426
+ TEST(GeneratedMapFieldReflectionTest, EmbedProto2Message) {
3427
+ UNITTEST::TestMessageMap message;
3428
+
3429
+ const FieldDescriptor* map_field =
3430
+ UNITTEST::TestMessageMap::descriptor()->FindFieldByName(
3431
+ "map_int32_message");
3432
+ const FieldDescriptor* value = map_field->message_type()->map_value();
3433
+
3434
+ Message* entry_message =
3435
+ message.GetReflection()->AddMessage(&message, map_field);
3436
+ EXPECT_EQ(
3437
+ &entry_message->GetReflection()->GetMessage(*entry_message, value),
3438
+ reinterpret_cast<const Message*>(&TestAllTypes::default_instance()));
3439
+
3440
+ Message* proto2_message =
3441
+ entry_message->GetReflection()->MutableMessage(entry_message, value);
3442
+ EXPECT_EQ(UNITTEST::TestAllTypes::descriptor(),
3443
+ proto2_message->GetDescriptor());
3444
+ ASSERT_EQ(1, message.map_int32_message().size());
3445
+ }
3446
+
3447
+ TEST(GeneratedMapFieldReflectionTest, MergeFromClearMapEntry) {
3448
+ UNITTEST::TestMap message;
3449
+ const FieldDescriptor* map_field =
3450
+ UNITTEST::TestMap::descriptor()->FindFieldByName("map_int32_int32");
3451
+ const FieldDescriptor* key = map_field->message_type()->map_key();
3452
+ const FieldDescriptor* value = map_field->message_type()->map_value();
3453
+
3454
+ Message* entry_message1 =
3455
+ message.GetReflection()->AddMessage(&message, map_field);
3456
+ EXPECT_FALSE(entry_message1->GetReflection()->HasField(*entry_message1, key));
3457
+ EXPECT_FALSE(
3458
+ entry_message1->GetReflection()->HasField(*entry_message1, value));
3459
+
3460
+ Message* entry_message2 =
3461
+ message.GetReflection()->AddMessage(&message, map_field);
3462
+ EXPECT_FALSE(entry_message2->GetReflection()->HasField(*entry_message2, key));
3463
+ EXPECT_FALSE(
3464
+ entry_message2->GetReflection()->HasField(*entry_message2, value));
3465
+
3466
+ entry_message1->MergeFrom(*entry_message2);
3467
+ EXPECT_FALSE(entry_message1->GetReflection()->HasField(*entry_message1, key));
3468
+ EXPECT_FALSE(
3469
+ entry_message1->GetReflection()->HasField(*entry_message1, value));
3470
+ }
3471
+
3472
+ TEST(GeneratedMapFieldReflectionTest, MapEntryClear) {
3473
+ UNITTEST::TestMap message;
3474
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
3475
+ reflection_tester.MutableUnknownFieldsOfMapFieldsViaReflection(&message);
3476
+ }
3477
+
3478
+ TEST(GeneratedMapFieldReflectionTest, Proto2MapEntryClear) {
3479
+ UNITTEST::TestEnumMap message;
3480
+ const Descriptor* descriptor = message.GetDescriptor();
3481
+ const FieldDescriptor* field_descriptor =
3482
+ descriptor->FindFieldByName("known_map_field");
3483
+ const FieldDescriptor* value_descriptor =
3484
+ field_descriptor->message_type()->map_value();
3485
+ Message* sub_message =
3486
+ message.GetReflection()->AddMessage(&message, field_descriptor);
3487
+ EXPECT_EQ(0, sub_message->GetReflection()->GetEnumValue(*sub_message,
3488
+ value_descriptor));
3489
+ }
3490
+
3491
+ // Map Reflection API Test =========================================
3492
+
3493
+ TEST(GeneratedMapFieldReflectionTest, SetViaMapReflection) {
3494
+ UNITTEST::TestMap message;
3495
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
3496
+ reflection_tester.SetMapFieldsViaMapReflection(&message);
3497
+ reflection_tester.ExpectMapFieldsSetViaReflection(message);
3498
+ reflection_tester.ExpectMapFieldsSetViaReflectionIterator(&message);
3499
+ }
3500
+
3501
+ // Dynamic Message Test =============================================
3502
+
3503
+ class MapFieldInDynamicMessageTest : public testing::Test {
3504
+ protected:
3505
+ const DescriptorPool* pool_;
3506
+ DynamicMessageFactory factory_;
3507
+ const Descriptor* map_descriptor_;
3508
+ const Descriptor* recursive_map_descriptor_;
3509
+ const Message* map_prototype_;
3510
+
3511
+ MapFieldInDynamicMessageTest()
3512
+ : pool_(DescriptorPool::generated_pool()), factory_(pool_) {}
3513
+
3514
+ void SetUp() override {
3515
+ map_descriptor_ = pool_->FindMessageTypeByName(
3516
+ absl::StrCat(UNITTEST_PACKAGE_NAME, ".TestMap"));
3517
+ recursive_map_descriptor_ = pool_->FindMessageTypeByName(
3518
+ absl::StrCat(UNITTEST_PACKAGE_NAME, ".TestRecursiveMapMessage"));
3519
+ ASSERT_TRUE(map_descriptor_ != nullptr);
3520
+ ASSERT_TRUE(recursive_map_descriptor_ != nullptr);
3521
+ map_prototype_ = factory_.GetPrototype(map_descriptor_);
3522
+ }
3523
+ };
3524
+
3525
+ TEST_F(MapFieldInDynamicMessageTest, MapIndependentOffsets) {
3526
+ // Check that all fields have independent offsets by setting each
3527
+ // one to a unique value then checking that they all still have those
3528
+ // unique values (i.e. they don't stomp each other).
3529
+ std::unique_ptr<Message> message(map_prototype_->New());
3530
+ MapReflectionTester reflection_tester(map_descriptor_);
3531
+
3532
+ reflection_tester.SetMapFieldsViaReflection(message.get());
3533
+ reflection_tester.ExpectMapFieldsSetViaReflection(*message);
3534
+ }
3535
+
3536
+ TEST_F(MapFieldInDynamicMessageTest, DynamicMapReflection) {
3537
+ // Check that map fields work properly.
3538
+ std::unique_ptr<Message> message(map_prototype_->New());
3539
+
3540
+ // Check set functions.
3541
+ MapReflectionTester reflection_tester(map_descriptor_);
3542
+ reflection_tester.SetMapFieldsViaMapReflection(message.get());
3543
+ reflection_tester.ExpectMapFieldsSetViaReflection(*message);
3544
+ }
3545
+
3546
+ TEST_F(MapFieldInDynamicMessageTest, MapSpaceUsed) {
3547
+ // Test that SpaceUsedLong() works properly
3548
+
3549
+ // Since we share the implementation with generated messages, we don't need
3550
+ // to test very much here. Just make sure it appears to be working.
3551
+
3552
+ std::unique_ptr<Message> message(map_prototype_->New());
3553
+ MapReflectionTester reflection_tester(map_descriptor_);
3554
+
3555
+ int initial_space_used = message->SpaceUsedLong();
3556
+
3557
+ reflection_tester.SetMapFieldsViaReflection(message.get());
3558
+ EXPECT_LT(initial_space_used, message->SpaceUsedLong());
3559
+ }
3560
+
3561
+ TEST_F(MapFieldInDynamicMessageTest, RecursiveMap) {
3562
+ TestRecursiveMapMessage from;
3563
+ (*from.mutable_a())[""];
3564
+ std::string data = from.SerializeAsString();
3565
+ std::unique_ptr<Message> to(
3566
+ factory_.GetPrototype(recursive_map_descriptor_)->New());
3567
+ ASSERT_TRUE(to->ParseFromString(data));
3568
+ }
3569
+
3570
+ TEST_F(MapFieldInDynamicMessageTest, MapValueReferernceValidAfterSerialize) {
3571
+ std::unique_ptr<Message> message(map_prototype_->New());
3572
+ MapReflectionTester reflection_tester(map_descriptor_);
3573
+ reflection_tester.SetMapFieldsViaMapReflection(message.get());
3574
+
3575
+ // Get value reference before serialization, so that we know the value is from
3576
+ // map.
3577
+ MapKey map_key;
3578
+ MapValueRef map_val;
3579
+ map_key.SetInt32Value(0);
3580
+ reflection_tester.GetMapValueViaMapReflection(
3581
+ message.get(), "map_int32_foreign_message", map_key, &map_val);
3582
+ Message* submsg = map_val.MutableMessageValue();
3583
+
3584
+ // In previous implementation, calling SerializeToString will cause syncing
3585
+ // from map to repeated field, which will invalidate the submsg we previously
3586
+ // got.
3587
+ std::string data;
3588
+ ABSL_CHECK(message->SerializeToString(&data));
3589
+
3590
+ const Reflection* submsg_reflection = submsg->GetReflection();
3591
+ const Descriptor* submsg_desc = submsg->GetDescriptor();
3592
+ const FieldDescriptor* submsg_field = submsg_desc->FindFieldByName("c");
3593
+ submsg_reflection->SetInt32(submsg, submsg_field, 128);
3594
+
3595
+ ABSL_CHECK(message->SerializeToString(&data));
3596
+ TestMap to;
3597
+ ASSERT_TRUE(to.ParseFromString(data));
3598
+ EXPECT_EQ(128, to.map_int32_foreign_message().at(0).c());
3599
+ }
3600
+
3601
+ TEST_F(MapFieldInDynamicMessageTest, MapEntryReferernceValidAfterSerialize) {
3602
+ std::unique_ptr<Message> message(map_prototype_->New());
3603
+ MapReflectionTester reflection_tester(map_descriptor_);
3604
+ reflection_tester.SetMapFieldsViaReflection(message.get());
3605
+
3606
+ // Get map entry before serialization, so that we know the it is from
3607
+ // repeated field.
3608
+ Message* map_entry = reflection_tester.GetMapEntryViaReflection(
3609
+ message.get(), "map_int32_foreign_message", 0);
3610
+ const Reflection* map_entry_reflection = map_entry->GetReflection();
3611
+ const Descriptor* map_entry_desc = map_entry->GetDescriptor();
3612
+ const FieldDescriptor* value_field = map_entry_desc->map_value();
3613
+ Message* submsg =
3614
+ map_entry_reflection->MutableMessage(map_entry, value_field);
3615
+
3616
+ // In previous implementation, calling SerializeToString will cause syncing
3617
+ // from repeated field to map, which will invalidate the map_entry we
3618
+ // previously got.
3619
+ std::string data;
3620
+ ABSL_CHECK(message->SerializeToString(&data));
3621
+
3622
+ const Reflection* submsg_reflection = submsg->GetReflection();
3623
+ const Descriptor* submsg_desc = submsg->GetDescriptor();
3624
+ const FieldDescriptor* submsg_field = submsg_desc->FindFieldByName("c");
3625
+ submsg_reflection->SetInt32(submsg, submsg_field, 128);
3626
+
3627
+ ABSL_CHECK(message->SerializeToString(&data));
3628
+ TestMap to;
3629
+ ABSL_CHECK(to.ParseFromString(data));
3630
+ EXPECT_EQ(128, to.map_int32_foreign_message().at(0).c());
3631
+ }
3632
+
3633
+ // ReflectionOps Test ===============================================
3634
+
3635
+ TEST(ReflectionOpsForMapFieldTest, MapSanityCheck) {
3636
+ UNITTEST::TestMap message;
3637
+
3638
+ MapTestUtil::SetMapFields(&message);
3639
+ MapTestUtil::ExpectMapFieldsSet(message);
3640
+ }
3641
+
3642
+ TEST(ReflectionOpsForMapFieldTest, MapCopy) {
3643
+ UNITTEST::TestMap message, message2;
3644
+
3645
+ MapTestUtil::SetMapFields(&message);
3646
+
3647
+ ReflectionOps::Copy(message, &message2);
3648
+
3649
+ MapTestUtil::ExpectMapFieldsSet(message2);
3650
+
3651
+ // Copying from self should be a no-op.
3652
+ ReflectionOps::Copy(message2, &message2);
3653
+ MapTestUtil::ExpectMapFieldsSet(message2);
3654
+ }
3655
+
3656
+ TEST(ReflectionOpsForMapFieldTest, MergeMap) {
3657
+ // Note: Copy is implemented in terms of Merge() so technically the Copy
3658
+ // test already tested most of this.
3659
+
3660
+ UNITTEST::TestMap message, message2;
3661
+
3662
+ MapTestUtil::SetMapFields(&message);
3663
+
3664
+ ReflectionOps::Merge(message2, &message);
3665
+
3666
+ MapTestUtil::ExpectMapFieldsSet(message);
3667
+ }
3668
+
3669
+ TEST(ReflectionOpsForMapFieldTest, ClearMap) {
3670
+ UNITTEST::TestMap message;
3671
+
3672
+ MapTestUtil::SetMapFields(&message);
3673
+
3674
+ ReflectionOps::Clear(&message);
3675
+
3676
+ MapTestUtil::ExpectClear(message);
3677
+ }
3678
+
3679
+ TEST(ReflectionOpsForMapFieldTest, MapDiscardUnknownFields) {
3680
+ UNITTEST::TestMap message;
3681
+ MapTestUtil::SetMapFields(&message);
3682
+
3683
+ // Set some unknown fields in message.
3684
+ message.GetReflection()->MutableUnknownFields(&message)->AddVarint(123456,
3685
+ 654321);
3686
+
3687
+ // Discard them.
3688
+ ReflectionOps::DiscardUnknownFields(&message);
3689
+ MapTestUtil::ExpectMapFieldsSet(message);
3690
+
3691
+ EXPECT_EQ(0,
3692
+ message.GetReflection()->GetUnknownFields(message).field_count());
3693
+ }
3694
+
3695
+ TEST(ReflectionOpsForMapFieldTest, IsInitialized) {
3696
+ UNITTEST::TestRequiredMessageMap map_message;
3697
+
3698
+ // Add an uninitialized message.
3699
+ (*map_message.mutable_map_field())[0];
3700
+ EXPECT_FALSE(ReflectionOps::IsInitialized(map_message));
3701
+
3702
+ // Initialize uninitialized message
3703
+ (*map_message.mutable_map_field())[0].set_a(0);
3704
+ (*map_message.mutable_map_field())[0].set_b(0);
3705
+ (*map_message.mutable_map_field())[0].set_c(0);
3706
+ EXPECT_TRUE(ReflectionOps::IsInitialized(map_message));
3707
+ }
3708
+
3709
+ // Wire Format Test =================================================
3710
+
3711
+ TEST(WireFormatForMapFieldTest, ParseMap) {
3712
+ UNITTEST::TestMap source, dest;
3713
+ std::string data;
3714
+
3715
+ // Serialize using the generated code.
3716
+ MapTestUtil::SetMapFields(&source);
3717
+ ABSL_CHECK(source.SerializeToString(&data));
3718
+
3719
+ // Parse using WireFormat.
3720
+ io::ArrayInputStream raw_input(data.data(), data.size());
3721
+ io::CodedInputStream input(&raw_input);
3722
+ ASSERT_TRUE(WireFormat::ParseAndMergePartial(&input, &dest));
3723
+
3724
+ // Check.
3725
+ MapTestUtil::ExpectMapFieldsSet(dest);
3726
+ }
3727
+
3728
+ TEST(WireFormatForMapFieldTest, MapByteSize) {
3729
+ UNITTEST::TestMap message;
3730
+ MapTestUtil::SetMapFields(&message);
3731
+
3732
+ EXPECT_EQ(message.ByteSizeLong(), WireFormat::ByteSize(message));
3733
+ message.Clear();
3734
+ EXPECT_EQ(0, message.ByteSizeLong());
3735
+ EXPECT_EQ(0, WireFormat::ByteSize(message));
3736
+ }
3737
+
3738
+ TEST(WireFormatForMapFieldTest, SerializeMap) {
3739
+ UNITTEST::TestMap message;
3740
+ std::string generated_data;
3741
+ std::string dynamic_data;
3742
+
3743
+ MapTestUtil::SetMapFields(&message);
3744
+
3745
+ // Serialize using the generated code.
3746
+ {
3747
+ ASSERT_GT(message.ByteSizeLong(), 0);
3748
+ io::StringOutputStream raw_output(&generated_data);
3749
+ io::CodedOutputStream output(&raw_output);
3750
+ message.SerializeWithCachedSizes(&output);
3751
+ ASSERT_FALSE(output.HadError());
3752
+ }
3753
+
3754
+ // Serialize using WireFormat.
3755
+ {
3756
+ io::StringOutputStream raw_output(&dynamic_data);
3757
+ io::CodedOutputStream output(&raw_output);
3758
+ size_t size = WireFormat::ByteSize(message);
3759
+ WireFormat::SerializeWithCachedSizes(message, size, &output);
3760
+ ASSERT_FALSE(output.HadError());
3761
+ }
3762
+
3763
+ // Should parse to the same message.
3764
+ EXPECT_TRUE(TestUtil::EqualsToSerialized(message, generated_data));
3765
+ EXPECT_TRUE(TestUtil::EqualsToSerialized(message, dynamic_data));
3766
+ }
3767
+
3768
+ TEST(WireFormatForMapFieldTest, SerializeMapDynamicMessage) {
3769
+ DynamicMessageFactory factory;
3770
+ std::unique_ptr<Message> dynamic_message;
3771
+ dynamic_message.reset(
3772
+ factory.GetPrototype(UNITTEST::TestMap::descriptor())->New());
3773
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
3774
+ reflection_tester.SetMapFieldsViaReflection(dynamic_message.get());
3775
+ reflection_tester.ExpectMapFieldsSetViaReflection(*dynamic_message);
3776
+
3777
+ UNITTEST::TestMap generated_message;
3778
+ MapTestUtil::SetMapFields(&generated_message);
3779
+ MapTestUtil::ExpectMapFieldsSet(generated_message);
3780
+
3781
+ std::string generated_data;
3782
+ std::string dynamic_data;
3783
+
3784
+ // Serialize.
3785
+ ABSL_CHECK(generated_message.SerializeToString(&generated_data));
3786
+ ABSL_CHECK(dynamic_message->SerializeToString(&dynamic_data));
3787
+
3788
+ // Because map serialization doesn't guarantee order, we just compare
3789
+ // serialized size here. This is enough to tell dynamic message doesn't miss
3790
+ // anything in serialization.
3791
+ EXPECT_TRUE(dynamic_data.size() == generated_data.size());
3792
+ }
3793
+
3794
+ TEST(WireFormatForMapFieldTest, MapByteSizeDynamicMessage) {
3795
+ DynamicMessageFactory factory;
3796
+ std::unique_ptr<Message> dynamic_message;
3797
+ dynamic_message.reset(
3798
+ factory.GetPrototype(UNITTEST::TestMap::descriptor())->New());
3799
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
3800
+ reflection_tester.SetMapFieldsViaReflection(dynamic_message.get());
3801
+ reflection_tester.ExpectMapFieldsSetViaReflection(*dynamic_message);
3802
+ std::string expected_serialized_data;
3803
+ ABSL_CHECK(dynamic_message->SerializeToString(&expected_serialized_data));
3804
+ int expected_size = expected_serialized_data.size();
3805
+ EXPECT_EQ(dynamic_message->ByteSizeLong(), expected_size);
3806
+ TestMap expected_message;
3807
+ ABSL_CHECK(expected_message.ParseFromString(expected_serialized_data));
3808
+
3809
+ std::unique_ptr<Message> message2;
3810
+ message2.reset(factory.GetPrototype(UNITTEST::TestMap::descriptor())->New());
3811
+ reflection_tester.SetMapFieldsViaMapReflection(message2.get());
3812
+
3813
+ const FieldDescriptor* field =
3814
+ UNITTEST::TestMap::descriptor()->FindFieldByName("map_int32_int32");
3815
+ const Reflection* reflection = dynamic_message->GetReflection();
3816
+
3817
+ // Force the map field to mark with STATE_MODIFIED_REPEATED
3818
+ reflection->RemoveLast(dynamic_message.get(), field);
3819
+ dynamic_message->MergeFrom(*message2);
3820
+ dynamic_message->MergeFrom(*message2);
3821
+ // The map field is marked as STATE_MODIFIED_REPEATED, ByteSizeLong() will use
3822
+ // repeated field which have duplicate keys to calculate.
3823
+ size_t duplicate_size = dynamic_message->ByteSizeLong();
3824
+ EXPECT_TRUE(duplicate_size > expected_size);
3825
+ std::string duplicate_serialized_data;
3826
+ ABSL_CHECK(dynamic_message->SerializeToString(&duplicate_serialized_data));
3827
+ EXPECT_EQ(dynamic_message->ByteSizeLong(), duplicate_serialized_data.size());
3828
+
3829
+ // Force the map field to mark with map CLEAN
3830
+ auto& msg = *dynamic_message;
3831
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_int32_int32"), 2);
3832
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_int32_int32"), 2);
3833
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_int64_int64"), 2);
3834
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_uint32_uint32"), 2);
3835
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_uint64_uint64"), 2);
3836
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_sint32_sint32"), 2);
3837
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_sint64_sint64"), 2);
3838
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_fixed32_fixed32"), 2);
3839
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_fixed64_fixed64"), 2);
3840
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_sfixed32_sfixed32"), 2);
3841
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_sfixed64_sfixed64"), 2);
3842
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_int32_float"), 2);
3843
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_int32_double"), 2);
3844
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_bool_bool"), 2);
3845
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_string_string"), 2);
3846
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_int32_bytes"), 2);
3847
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_int32_enum"), 2);
3848
+ EXPECT_EQ(reflection_tester.MapSize(msg, "map_int32_foreign_message"), 2);
3849
+
3850
+ // The map field is marked as CLEAN, ByteSizeLong() will use map which do not
3851
+ // have duplicate keys to calculate.
3852
+ int size = dynamic_message->ByteSizeLong();
3853
+ EXPECT_EQ(expected_size, size);
3854
+
3855
+ // Protobuf used to have a bug for serialize when map it marked CLEAN. It used
3856
+ // repeated field to calculate ByteSizeLong but use map to serialize the real
3857
+ // data, thus the ByteSizeLong may bigger than real serialized size. A crash
3858
+ // might be happen at SerializeToString(). Or an "unexpected end group"
3859
+ // warning was raised at parse back if user use SerializeWithCachedSizes()
3860
+ // which avoids size check at serialize.
3861
+ std::string serialized_data;
3862
+ ABSL_CHECK(dynamic_message->SerializeToString(&serialized_data));
3863
+ EXPECT_TRUE(dynamic_message->ParseFromString(serialized_data));
3864
+ }
3865
+
3866
+ TEST(WireFormatForMapFieldTest, MapParseHelpers) {
3867
+ std::string data;
3868
+
3869
+ {
3870
+ // Set up.
3871
+ UNITTEST::TestMap message;
3872
+ MapTestUtil::SetMapFields(&message);
3873
+ ABSL_CHECK(message.SerializeToString(&data));
3874
+ }
3875
+
3876
+ {
3877
+ // Test ParseFromString.
3878
+ UNITTEST::TestMap message;
3879
+ EXPECT_TRUE(message.ParseFromString(data));
3880
+ MapTestUtil::ExpectMapFieldsSet(message);
3881
+ }
3882
+
3883
+ {
3884
+ // Test ParseFromIstream.
3885
+ UNITTEST::TestMap message;
3886
+ std::stringstream stream(data);
3887
+ EXPECT_TRUE(message.ParseFromIstream(&stream));
3888
+ EXPECT_TRUE(stream.eof());
3889
+ MapTestUtil::ExpectMapFieldsSet(message);
3890
+ }
3891
+
3892
+ {
3893
+ // Test ParseFromBoundedZeroCopyStream.
3894
+ std::string data_with_junk(data);
3895
+ data_with_junk.append("some junk on the end");
3896
+ io::ArrayInputStream stream(data_with_junk.data(), data_with_junk.size());
3897
+ UNITTEST::TestMap message;
3898
+ EXPECT_TRUE(message.ParseFromBoundedZeroCopyStream(&stream, data.size()));
3899
+ MapTestUtil::ExpectMapFieldsSet(message);
3900
+ }
3901
+
3902
+ {
3903
+ // Test that ParseFromBoundedZeroCopyStream fails (but doesn't crash) if
3904
+ // EOF is reached before the expected number of bytes.
3905
+ io::ArrayInputStream stream(data.data(), data.size());
3906
+ UNITTEST::TestAllTypes message;
3907
+ EXPECT_FALSE(
3908
+ message.ParseFromBoundedZeroCopyStream(&stream, data.size() + 1));
3909
+ }
3910
+ }
3911
+
3912
+ std::string WriteVarint(int number, uint64_t v) {
3913
+ uint8_t buf[16];
3914
+ return std::string(buf, WireFormatLite::WriteUInt64ToArray(number, v, buf));
3915
+ }
3916
+
3917
+ std::string WriteString(int number, const std::string& str) {
3918
+ uint8_t buf[100];
3919
+ return std::string(buf, WireFormatLite::WriteStringToArray(number, str, buf));
3920
+ }
3921
+
3922
+ TEST(WireFormatForMapFieldTest, BoolWorksWithOverlongValues) {
3923
+ // map<bool, bool> map_bool_bool = 13;
3924
+ for (uint64_t v : {uint64_t{1}, uint64_t{1000}, uint64_t{100000},
3925
+ uint64_t{1} << 32, uint64_t{1} << 63}) {
3926
+ SCOPED_TRACE(v);
3927
+ std::string payload =
3928
+ WriteString(13, WriteVarint(1, v) + WriteVarint(2, v));
3929
+ UNITTEST::TestMap obj;
3930
+ ASSERT_TRUE(obj.ParseFromString(payload));
3931
+ EXPECT_THAT(obj.map_bool_bool(), ElementsAre(Pair(true, true)));
3932
+
3933
+ io::ArrayInputStream raw_input(payload.data(), payload.size());
3934
+ io::CodedInputStream input(&raw_input);
3935
+ obj.Clear();
3936
+ ASSERT_TRUE(WireFormat::ParseAndMergePartial(&input, &obj));
3937
+ EXPECT_THAT(obj.map_bool_bool(), ElementsAre(Pair(true, true)));
3938
+ }
3939
+ }
3940
+
3941
+ // Deterministic Serialization Test ==========================================
3942
+
3943
+ template <typename T>
3944
+ static std::string DeterministicSerializationWithSerializePartialToCodedStream(
3945
+ const T& t) {
3946
+ const size_t size = t.ByteSizeLong();
3947
+ std::string result(size, '\0');
3948
+ io::ArrayOutputStream array_stream(&result[0], size);
3949
+ io::CodedOutputStream output_stream(&array_stream);
3950
+ output_stream.SetSerializationDeterministic(true);
3951
+ ABSL_CHECK(t.SerializePartialToCodedStream(&output_stream));
3952
+ EXPECT_FALSE(output_stream.HadError());
3953
+ EXPECT_EQ(size, output_stream.ByteCount());
3954
+ return result;
3955
+ }
3956
+
3957
+ template <typename T>
3958
+ static std::string DeterministicSerializationWithSerializeToCodedStream(
3959
+ const T& t) {
3960
+ const size_t size = t.ByteSizeLong();
3961
+ std::string result(size, '\0');
3962
+ io::ArrayOutputStream array_stream(&result[0], size);
3963
+ io::CodedOutputStream output_stream(&array_stream);
3964
+ output_stream.SetSerializationDeterministic(true);
3965
+ ABSL_CHECK(t.SerializeToCodedStream(&output_stream));
3966
+ EXPECT_FALSE(output_stream.HadError());
3967
+ EXPECT_EQ(size, output_stream.ByteCount());
3968
+ return result;
3969
+ }
3970
+
3971
+ template <typename T>
3972
+ static std::string DeterministicSerialization(const T& t) {
3973
+ const size_t size = t.ByteSizeLong();
3974
+ std::string result(size, '\0');
3975
+ io::ArrayOutputStream array_stream(&result[0], size);
3976
+ {
3977
+ io::CodedOutputStream output_stream(&array_stream);
3978
+ output_stream.SetSerializationDeterministic(true);
3979
+ t.SerializeWithCachedSizes(&output_stream);
3980
+ EXPECT_FALSE(output_stream.HadError());
3981
+ EXPECT_EQ(size, output_stream.ByteCount());
3982
+ }
3983
+ EXPECT_EQ(result, DeterministicSerializationWithSerializeToCodedStream(t));
3984
+ EXPECT_EQ(result,
3985
+ DeterministicSerializationWithSerializePartialToCodedStream(t));
3986
+ return result;
3987
+ }
3988
+
3989
+ // Helper for MapSerializationTest. Return a 7-bit ASCII string.
3990
+ static std::string ConstructKey(uint64_t n) {
3991
+ std::string s(n % static_cast<uint64_t>(9), '\0');
3992
+ if (s.empty()) {
3993
+ return absl::StrCat(n);
3994
+ } else {
3995
+ while (n != 0) {
3996
+ s[n % s.size()] = (n >> 10) & 0x7f;
3997
+ n /= 888;
3998
+ }
3999
+ return s;
4000
+ }
4001
+ }
4002
+
4003
+ TEST(MapSerializationTest, Deterministic) {
4004
+ const int kIters = 25;
4005
+ UNITTEST::TestMaps t;
4006
+ UNITTEST::TestIntIntMap inner;
4007
+ (*inner.mutable_m())[0] = (*inner.mutable_m())[10] =
4008
+ (*inner.mutable_m())[-200] = 0;
4009
+ uint64_t frog = 9;
4010
+ const uint64_t multiplier = 0xa29cd16f;
4011
+ for (int i = 0; i < kIters; i++) {
4012
+ const int32_t i32 = static_cast<int32_t>(frog & 0xffffffff);
4013
+ const uint32_t u32 = static_cast<uint32_t>(i32) * 91919;
4014
+ const int64_t i64 = static_cast<int64_t>(frog);
4015
+ const uint64_t u64 = frog * static_cast<uint64_t>(187321);
4016
+ const bool b = i32 > 0;
4017
+ const std::string s = ConstructKey(frog);
4018
+ (*inner.mutable_m())[i] = i32;
4019
+ (*t.mutable_m_int32())[i32] = (*t.mutable_m_sint32())[i32] =
4020
+ (*t.mutable_m_sfixed32())[i32] = inner;
4021
+ (*t.mutable_m_uint32())[u32] = (*t.mutable_m_fixed32())[u32] = inner;
4022
+ (*t.mutable_m_int64())[i64] = (*t.mutable_m_sint64())[i64] =
4023
+ (*t.mutable_m_sfixed64())[i64] = inner;
4024
+ (*t.mutable_m_uint64())[u64] = (*t.mutable_m_fixed64())[u64] = inner;
4025
+ (*t.mutable_m_bool())[b] = inner;
4026
+ (*t.mutable_m_string())[s] = inner;
4027
+ (*t.mutable_m_string())[s + std::string(
4028
+ 1 << (u32 % static_cast<uint32_t>(9)), b)] =
4029
+ inner;
4030
+ inner.mutable_m()->erase(i);
4031
+ frog = frog * multiplier + i;
4032
+ frog ^= (frog >> 41);
4033
+ }
4034
+
4035
+ // Verifies if two consecutive calls to deterministic serialization produce
4036
+ // the same bytes. Deterministic serialization means the same serialization
4037
+ // bytes in the same binary.
4038
+ const std::string s1 = DeterministicSerialization(t);
4039
+ const std::string s2 = DeterministicSerialization(t);
4040
+ EXPECT_EQ(s1, s2);
4041
+
4042
+ UNITTEST::TestMaps u;
4043
+ EXPECT_TRUE(u.ParseFromString(s1));
4044
+ EXPECT_TRUE(util::MessageDifferencer::Equals(u, t));
4045
+ }
4046
+
4047
+ static std::string GetGoldenMessageTextProto() {
4048
+ static std::string* golden_message_textproto = [] {
4049
+ std::string* textproto = new std::string;
4050
+ ABSL_CHECK_OK(File::GetContents(
4051
+ TestUtil::GetTestDataPath("google/protobuf/"
4052
+ "testdata/map_test_data.txt"),
4053
+ textproto, true));
4054
+ return textproto;
4055
+ }();
4056
+ return *golden_message_textproto;
4057
+ }
4058
+
4059
+ static std::string GetGoldenMessageBinary() {
4060
+ static std::string* golden_message_binary = [] {
4061
+ UNITTEST::TestMaps t;
4062
+ TextFormat::Parser parser;
4063
+ // TODO: Remove this suppression.
4064
+ (void) parser.ParseFromString(GetGoldenMessageTextProto(), &t);
4065
+
4066
+ std::string* result = new std::string;
4067
+ ABSL_CHECK(t.SerializeToString(result));
4068
+ return result;
4069
+ }();
4070
+ return *golden_message_binary;
4071
+ }
4072
+
4073
+ TEST(MapSerializationTest, DeterministicSubmessage) {
4074
+ UNITTEST::TestSubmessageMaps p;
4075
+ UNITTEST::TestMaps t;
4076
+ ABSL_CHECK(t.ParseFromString(GetGoldenMessageBinary()));
4077
+ *(p.mutable_m()) = t;
4078
+ std::vector<std::string> v;
4079
+ // Use multiple attempts to increase the chance of a failure if something is
4080
+ // buggy. For example, each separate copy of a map might use a different
4081
+ // randomly-chosen hash function.
4082
+ const int kAttempts = 10;
4083
+ for (int i = 0; i < kAttempts; i++) {
4084
+ // NOLINTNEXTLINE(performance-unnecessary-copy-initialization)
4085
+ UNITTEST::TestSubmessageMaps q(p);
4086
+ ASSERT_EQ(DeterministicSerialization(q), DeterministicSerialization(p));
4087
+ }
4088
+ }
4089
+
4090
+ // Text Format Test =================================================
4091
+
4092
+ TEST(TextFormatMapTest, SerializeAndParse) {
4093
+ UNITTEST::TestMap source;
4094
+ UNITTEST::TestMap dest;
4095
+ MapTestUtil::SetMapFields(&source);
4096
+ std::string output;
4097
+
4098
+ // Test compact ASCII
4099
+ TextFormat::Printer printer;
4100
+ ASSERT_TRUE(printer.PrintToString(source, &output));
4101
+ TextFormat::Parser parser;
4102
+ EXPECT_TRUE(parser.ParseFromString(output, &dest));
4103
+ MapTestUtil::ExpectMapFieldsSet(dest);
4104
+ }
4105
+
4106
+ TEST(TextFormatMapTest, DynamicMessage) {
4107
+ TestMap prototype;
4108
+ DynamicMessageFactory factory;
4109
+ std::unique_ptr<Message> message(
4110
+ factory.GetPrototype(prototype.GetDescriptor())->New());
4111
+ MapReflectionTester tester(message->GetDescriptor());
4112
+ tester.SetMapFieldsViaReflection(message.get());
4113
+
4114
+ std::string actual_text;
4115
+ ASSERT_TRUE(TextFormat::PrintToString(*message, &actual_text));
4116
+ EXPECT_EQ(actual_text, GetGoldenMessageTextProto());
4117
+ }
4118
+
4119
+ TEST(TextFormatMapTest, Sorted) {
4120
+ UNITTEST::TestMap message;
4121
+ MapReflectionTester tester(message.GetDescriptor());
4122
+ tester.SetMapFieldsViaReflection(&message);
4123
+
4124
+ TextFormat::Printer printer;
4125
+ std::string actual_text;
4126
+ ASSERT_TRUE(printer.PrintToString(message, &actual_text));
4127
+ EXPECT_EQ(actual_text, GetGoldenMessageTextProto());
4128
+
4129
+ // Test again on the reverse order.
4130
+ UNITTEST::TestMap message2;
4131
+ tester.SetMapFieldsViaReflection(&message2);
4132
+ tester.SwapMapsViaReflection(&message2);
4133
+ ASSERT_TRUE(printer.PrintToString(message2, &actual_text));
4134
+ EXPECT_EQ(actual_text, GetGoldenMessageTextProto());
4135
+ }
4136
+
4137
+ // Previously, serializing to text format will disable iterator from generated
4138
+ // API. Now, the iterator can be still used even after serializing to text
4139
+ // format.
4140
+ TEST(TextFormatMapTest, NoDisableIterator) {
4141
+ UNITTEST::TestMap source;
4142
+ (*source.mutable_map_int32_int32())[1] = 1;
4143
+
4144
+ // Get iterator.
4145
+ Map<int32_t, int32_t>::iterator iter =
4146
+ source.mutable_map_int32_int32()->find(1);
4147
+
4148
+ // Serialize message to text format, which will invalidate the previous
4149
+ // iterator previously.
4150
+ std::string output;
4151
+ TextFormat::Printer printer;
4152
+ ASSERT_TRUE(printer.PrintToString(source, &output));
4153
+
4154
+ // Modify map via the iterator (invalidated in previous implementation.).
4155
+ iter->second = 2;
4156
+
4157
+ // In previous implementation, the new change won't be reflected in text
4158
+ // format, because the previous iterator has been invalidated.
4159
+ output.clear();
4160
+ ASSERT_TRUE(printer.PrintToString(source, &output));
4161
+ std::string expected =
4162
+ "map_int32_int32 {\n"
4163
+ " key: 1\n"
4164
+ " value: 2\n"
4165
+ "}\n";
4166
+ EXPECT_EQ(output, expected);
4167
+ }
4168
+
4169
+ // Previously, serializing to text format will disable iterator from reflection
4170
+ // API.
4171
+ TEST(TextFormatMapTest, NoDisableReflectionIterator) {
4172
+ UNITTEST::TestMap source;
4173
+ (*source.mutable_map_int32_int32())[1] = 1;
4174
+
4175
+ // Get iterator. This will also sync internal repeated field with map inside
4176
+ // of MapField.
4177
+ const Reflection* reflection = source.GetReflection();
4178
+ const FieldDescriptor* field_desc =
4179
+ source.GetDescriptor()->FindFieldByName("map_int32_int32");
4180
+ RepeatedPtrField<Message>* map_field =
4181
+ reflection->MutableRepeatedPtrField<Message>(&source, field_desc);
4182
+ RepeatedPtrField<Message>::iterator iter = map_field->begin();
4183
+
4184
+ // Serialize message to text format, which will invalidate the previous
4185
+ // iterator previously.
4186
+ std::string output;
4187
+ TextFormat::Printer printer;
4188
+ ASSERT_TRUE(printer.PrintToString(source, &output));
4189
+
4190
+ // Modify map via the iterator (invalidated in previous implementation.).
4191
+ const Reflection* map_entry_reflection = iter->GetReflection();
4192
+ const FieldDescriptor* value_field_desc = iter->GetDescriptor()->map_value();
4193
+ map_entry_reflection->SetInt32(&(*iter), value_field_desc, 2);
4194
+ ABSL_LOG(INFO) << iter->DebugString();
4195
+
4196
+ // In previous implementation, the new change won't be reflected in text
4197
+ // format, because the previous iterator has been invalidated.
4198
+ output.clear();
4199
+ ASSERT_TRUE(printer.PrintToString(source, &output));
4200
+ std::string expected =
4201
+ "map_int32_int32 {\n"
4202
+ " key: 1\n"
4203
+ " value: 2\n"
4204
+ "}\n";
4205
+ EXPECT_EQ(output, expected);
4206
+ }
4207
+
4208
+ // arena support =================================================
4209
+ TEST(ArenaTest, ParsingAndSerializingNoHeapAllocation) {
4210
+ // Allocate a large initial block to avoid mallocs during hooked test.
4211
+ std::vector<char> arena_block(128 * 1024);
4212
+ ArenaOptions options;
4213
+ options.initial_block = &arena_block[0];
4214
+ options.initial_block_size = arena_block.size();
4215
+ Arena arena(options);
4216
+ std::string data;
4217
+ data.reserve(128 * 1024);
4218
+
4219
+ {
4220
+ // TODO: Enable no heap check when ArenaStringPtr is used in map.
4221
+ // NoHeapChecker no_heap;
4222
+
4223
+ UNITTEST::TestArenaMap* from =
4224
+ Arena::Create<UNITTEST::TestArenaMap>(&arena);
4225
+ MapTestUtil::SetArenaMapFields(from);
4226
+ ABSL_CHECK(from->SerializeToString(&data));
4227
+
4228
+ UNITTEST::TestArenaMap* to = Arena::Create<UNITTEST::TestArenaMap>(&arena);
4229
+ ABSL_CHECK(to->ParseFromString(data));
4230
+ MapTestUtil::ExpectArenaMapFieldsSet(*to);
4231
+ }
4232
+ }
4233
+
4234
+ TEST(ArenaTest, SubmessageOnSameArena) {
4235
+ Arena arena;
4236
+ for (Arena* arena_to_use : {&arena, static_cast<Arena*>(nullptr)}) {
4237
+ ArenaHolder<UNITTEST::TestArenaMap> m(arena_to_use);
4238
+ auto* subm = &(*m->mutable_map_int32_foreign_message())[0];
4239
+ EXPECT_EQ(subm->GetArena(), arena_to_use);
4240
+ }
4241
+ }
4242
+
4243
+ // Use text format parsing and serializing to test reflection api.
4244
+ TEST(ArenaTest, ReflectionInTextFormat) {
4245
+ Arena arena;
4246
+ std::string data;
4247
+
4248
+ TextFormat::Printer printer;
4249
+ TextFormat::Parser parser;
4250
+
4251
+ UNITTEST::TestArenaMap* from = Arena::Create<UNITTEST::TestArenaMap>(&arena);
4252
+ UNITTEST::TestArenaMap* to = Arena::Create<UNITTEST::TestArenaMap>(&arena);
4253
+
4254
+ MapTestUtil::SetArenaMapFields(from);
4255
+ ASSERT_TRUE(printer.PrintToString(*from, &data));
4256
+
4257
+ EXPECT_TRUE(parser.ParseFromString(data, to));
4258
+ MapTestUtil::ExpectArenaMapFieldsSet(*to);
4259
+ }
4260
+
4261
+ // Make sure the memory allocated for string in map is deallocated.
4262
+ TEST(ArenaTest, StringMapNoLeak) {
4263
+ Arena arena;
4264
+ UNITTEST::TestArenaMap* message =
4265
+ Arena::Create<UNITTEST::TestArenaMap>(&arena);
4266
+ std::string data;
4267
+ // String with length less than 16 will not be allocated from heap.
4268
+ int original_capacity = data.capacity();
4269
+ while (data.capacity() <= original_capacity) {
4270
+ data.append("a");
4271
+ }
4272
+ (*message->mutable_map_string_string())[data] = data;
4273
+ // Now we recreate the map via parsing
4274
+ ABSL_CHECK(message->ParseFromString(message->SerializeAsString()));
4275
+ // And we cause value strings to grow to make sure they are handled correctly.
4276
+ std::string& value = (*message->mutable_map_string_string())[data];
4277
+ ASSERT_EQ(value, data);
4278
+ // Consume all the capacity.
4279
+ while (value.size() < value.capacity()) value.append("a");
4280
+ // And then grow the value.
4281
+ value.append("a");
4282
+ }
4283
+
4284
+ TEST(ArenaTest, IsInitialized) {
4285
+ // Allocate a large initial polluted block.
4286
+ std::vector<char> arena_block(128 * 1024);
4287
+ std::fill(arena_block.begin(), arena_block.end(), '\xff');
4288
+
4289
+ ArenaOptions options;
4290
+ options.initial_block = &arena_block[0];
4291
+ options.initial_block_size = arena_block.size();
4292
+ Arena arena(options);
4293
+
4294
+ UNITTEST::TestArenaMap* message =
4295
+ Arena::Create<UNITTEST::TestArenaMap>(&arena);
4296
+ EXPECT_EQ(0, (*message->mutable_map_int32_int32())[0]);
4297
+ }
4298
+
4299
+ TEST(ArenaTest, DynamicMapFieldOnArena) {
4300
+ Arena arena;
4301
+ UNITTEST::TestMap message2;
4302
+
4303
+ DynamicMessageFactory factory;
4304
+ Message* message1 =
4305
+ factory.GetPrototype(UNITTEST::TestMap::descriptor())->New(&arena);
4306
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
4307
+ reflection_tester.SetMapFieldsViaReflection(message1);
4308
+ reflection_tester.ExpectMapFieldsSetViaReflection(*message1);
4309
+ reflection_tester.ExpectMapFieldsSetViaReflectionIterator(message1);
4310
+ message2.CopyFrom(*message1);
4311
+ MapTestUtil::ExpectMapFieldsSet(message2);
4312
+ }
4313
+
4314
+ TEST(ArenaTest, DynamicMapFieldOnArenaMemoryLeak) {
4315
+ auto* desc = UNITTEST::TestMap::descriptor();
4316
+ auto* field = desc->FindFieldByName("map_int32_int32");
4317
+
4318
+ Arena arena;
4319
+ DynamicMessageFactory factory;
4320
+ auto* message = factory.GetPrototype(desc)->New(&arena);
4321
+ auto* reflection = message->GetReflection();
4322
+ reflection->AddMessage(message, field);
4323
+
4324
+ // Force internal syncing, which initializes the mutex.
4325
+ MapReflectionTester reflection_tester(UNITTEST::TestMap::descriptor());
4326
+ int size = reflection_tester.MapSize(*message, "map_int32_int32");
4327
+ EXPECT_EQ(size, 1);
4328
+ }
4329
+
4330
+ TEST(MoveTest, MoveConstructorWorks) {
4331
+ Map<int32_t, TestAllTypes> original_map;
4332
+ original_map[42].mutable_optional_nested_message()->set_bb(42);
4333
+ original_map[43].mutable_optional_nested_message()->set_bb(43);
4334
+ const auto* nested_msg42_ptr = &original_map[42].optional_nested_message();
4335
+ const auto* nested_msg43_ptr = &original_map[43].optional_nested_message();
4336
+
4337
+ Map<int32_t, TestAllTypes> moved_to_map(std::move(original_map));
4338
+ EXPECT_TRUE(original_map.empty());
4339
+ EXPECT_EQ(2, moved_to_map.size());
4340
+ EXPECT_EQ(42, moved_to_map[42].optional_nested_message().bb());
4341
+ EXPECT_EQ(43, moved_to_map[43].optional_nested_message().bb());
4342
+ // This test takes advantage of the fact that pointers are swapped, so there
4343
+ // should be pointer stability.
4344
+ EXPECT_EQ(nested_msg42_ptr, &moved_to_map[42].optional_nested_message());
4345
+ EXPECT_EQ(nested_msg43_ptr, &moved_to_map[43].optional_nested_message());
4346
+ }
4347
+
4348
+ TEST(MoveTest, MoveAssignmentWorks) {
4349
+ Map<int32_t, TestAllTypes> original_map;
4350
+ original_map[42].mutable_optional_nested_message()->set_bb(42);
4351
+ original_map[43].mutable_optional_nested_message()->set_bb(43);
4352
+ const auto* nested_msg42_ptr = &original_map[42].optional_nested_message();
4353
+ const auto* nested_msg43_ptr = &original_map[43].optional_nested_message();
4354
+
4355
+ Map<int32_t, TestAllTypes> moved_to_map = std::move(original_map);
4356
+ EXPECT_TRUE(original_map.empty());
4357
+ EXPECT_EQ(2, moved_to_map.size());
4358
+ EXPECT_EQ(42, moved_to_map[42].optional_nested_message().bb());
4359
+ EXPECT_EQ(43, moved_to_map[43].optional_nested_message().bb());
4360
+ // This test takes advantage of the fact that pointers are swapped, so there
4361
+ // should be pointer stability.
4362
+ EXPECT_EQ(nested_msg42_ptr, &moved_to_map[42].optional_nested_message());
4363
+ EXPECT_EQ(nested_msg43_ptr, &moved_to_map[43].optional_nested_message());
4364
+ }
4365
+
4366
+ TEST(KeyMapBaseTest, InsertOrReplaceNodeWorks) {
4367
+ using M = Map<int32_t, std::string>;
4368
+ M map;
4369
+ EXPECT_TRUE(MapTestPeer::InsertOrReplaceNode(map, 10, "Foo"));
4370
+ EXPECT_EQ(map.size(), 1);
4371
+ EXPECT_EQ(map[10], "Foo");
4372
+ EXPECT_FALSE(MapTestPeer::InsertOrReplaceNode(map, 10, "Bar"));
4373
+ EXPECT_EQ(map.size(), 1);
4374
+ EXPECT_EQ(map[10], "Bar");
4375
+ map[100] = "BAD";
4376
+ EXPECT_EQ(map.size(), 2);
4377
+ EXPECT_EQ(map[10], "Bar");
4378
+ EXPECT_EQ(map[100], "BAD");
4379
+ EXPECT_FALSE(MapTestPeer::InsertOrReplaceNode(map, 100, "GOOD"));
4380
+ EXPECT_EQ(map.size(), 2);
4381
+ EXPECT_EQ(map[10], "Bar");
4382
+ EXPECT_EQ(map[100], "GOOD");
4383
+ }
4384
+
4385
+ TEST(NonUtf8Test, StringValuePassesInProto2) {
4386
+ proto2_unittest::TestProto2BytesMap message;
4387
+ (*message.mutable_map_string())[1] = "\xFF";
4388
+
4389
+ auto serialized = message.SerializeAsString();
4390
+ ASSERT_TRUE(message.ParseFromString(serialized));
4391
+ EXPECT_EQ((*message.mutable_map_string())[1], "\xFF");
4392
+ }
4393
+
4394
+ TEST(NonUtf8Test, BytesValuePassesInProto2) {
4395
+ proto2_unittest::TestProto2BytesMap message;
4396
+ (*message.mutable_map_bytes())[1] = "\xFF";
4397
+
4398
+ auto serialized = message.SerializeAsString();
4399
+ ASSERT_TRUE(message.ParseFromString(serialized));
4400
+ EXPECT_EQ((*message.mutable_map_bytes())[1], "\xFF");
4401
+ }
4402
+
4403
+ TEST(NonUtf8Test, StringValueFailsInProto3) {
4404
+ proto3_unittest::TestProto3BytesMap message;
4405
+ (*message.mutable_map_string())[1] = "\xFF";
4406
+
4407
+ auto serialized = message.SerializeAsString();
4408
+ // It will fail, and log an error.
4409
+ ASSERT_FALSE(message.ParseFromString(serialized));
4410
+ }
4411
+
4412
+
4413
+ TEST(NonUtf8Test, BytesValuePassesInProto3) {
4414
+ proto3_unittest::TestProto3BytesMap message;
4415
+ (*message.mutable_map_bytes())[1] = "\xFF";
4416
+
4417
+ auto serialized = message.SerializeAsString();
4418
+ ASSERT_TRUE(message.ParseFromString(serialized));
4419
+ EXPECT_EQ((*message.mutable_map_bytes())[1], "\xFF");
4420
+ }
4421
+
4422
+ } // namespace
4423
+ } // namespace internal
4424
+ } // namespace protobuf
4425
+ } // namespace google
4426
+
4427
+ #include "google/protobuf/port_undef.inc"