simdjson 0.2.0 → 0.3.0

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 (2541) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +1 -1
  3. data/.travis.yml +10 -3
  4. data/README.md +2 -0
  5. data/Rakefile +1 -1
  6. data/benchmark/run_benchmark.rb +4 -0
  7. data/ext/simdjson/extconf.rb +1 -1
  8. data/ext/simdjson/simdjson.cpp +34 -41
  9. data/lib/simdjson/version.rb +1 -1
  10. data/simdjson.gemspec +2 -1
  11. data/vendor/simdjson/AUTHORS +2 -1
  12. data/vendor/simdjson/CMakeFiles/3.16.3/CompilerIdC/a.out +0 -0
  13. data/vendor/simdjson/CMakeFiles/3.16.3/CompilerIdCXX/a.out +0 -0
  14. data/vendor/simdjson/CMakeLists.txt +68 -39
  15. data/vendor/simdjson/CONTRIBUTING.md +92 -0
  16. data/vendor/simdjson/CONTRIBUTORS +12 -0
  17. data/vendor/simdjson/Dockerfile +88 -10
  18. data/vendor/simdjson/Doxyfile +2578 -0
  19. data/vendor/simdjson/HACKING.md +652 -0
  20. data/vendor/simdjson/README.md +156 -547
  21. data/vendor/simdjson/RELEASES.md +50 -0
  22. data/vendor/simdjson/benchmark/CMakeLists.txt +37 -8
  23. data/vendor/simdjson/benchmark/Dockerfile +19 -0
  24. data/vendor/simdjson/benchmark/bench_dom_api.cpp +552 -0
  25. data/vendor/simdjson/benchmark/bench_parse_call.cpp +162 -0
  26. data/vendor/simdjson/benchmark/benchfeatures.cpp +466 -0
  27. data/vendor/simdjson/benchmark/benchmark.h +62 -179
  28. data/vendor/simdjson/benchmark/benchmarker.h +522 -0
  29. data/vendor/simdjson/benchmark/checkperf.cmake +101 -0
  30. data/vendor/simdjson/benchmark/distinctuseridcompetition.cpp +108 -49
  31. data/vendor/simdjson/benchmark/event_counter.h +152 -0
  32. data/vendor/simdjson/benchmark/get_corpus_benchmark.cpp +57 -0
  33. data/vendor/simdjson/benchmark/linux/linux-perf-events.h +24 -16
  34. data/vendor/simdjson/benchmark/minifiercompetition.cpp +47 -44
  35. data/vendor/simdjson/benchmark/parse.cpp +174 -345
  36. data/vendor/simdjson/benchmark/parse_stream.cpp +191 -0
  37. data/vendor/simdjson/benchmark/parseandstatcompetition.cpp +260 -77
  38. data/vendor/simdjson/benchmark/parsingcompetition.cpp +138 -75
  39. data/vendor/simdjson/benchmark/perfdiff.cpp +114 -0
  40. data/vendor/simdjson/benchmark/statisticalmodel.cpp +75 -76
  41. data/vendor/simdjson/cmake/add_cpp_test.cmake +49 -0
  42. data/vendor/simdjson/cmake/simdjson-flags.cmake +155 -0
  43. data/vendor/simdjson/cmake/simdjson-user-cmakecache.cmake +24 -0
  44. data/vendor/simdjson/dependencies/CMakeLists.txt +89 -0
  45. data/vendor/simdjson/dependencies/benchmark/AUTHORS +56 -0
  46. data/vendor/simdjson/dependencies/benchmark/BUILD.bazel +44 -0
  47. data/vendor/simdjson/dependencies/benchmark/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  48. data/vendor/simdjson/dependencies/benchmark/CMakeFiles/progress.marks +1 -0
  49. data/vendor/simdjson/dependencies/benchmark/CMakeLists.txt +279 -0
  50. data/vendor/simdjson/dependencies/benchmark/CONTRIBUTING.md +58 -0
  51. data/vendor/simdjson/dependencies/benchmark/CONTRIBUTORS +78 -0
  52. data/vendor/simdjson/dependencies/benchmark/CTestTestfile.cmake +7 -0
  53. data/vendor/simdjson/dependencies/benchmark/LICENSE +202 -0
  54. data/vendor/simdjson/dependencies/benchmark/Makefile +220 -0
  55. data/vendor/simdjson/dependencies/benchmark/README.md +1290 -0
  56. data/vendor/simdjson/dependencies/benchmark/WORKSPACE +15 -0
  57. data/vendor/simdjson/dependencies/benchmark/_config.yml +1 -0
  58. data/vendor/simdjson/dependencies/benchmark/appveyor.yml +50 -0
  59. data/vendor/simdjson/dependencies/benchmark/cmake/AddCXXCompilerFlag.cmake +74 -0
  60. data/vendor/simdjson/dependencies/benchmark/cmake/CXXFeatureCheck.cmake +64 -0
  61. data/vendor/simdjson/dependencies/benchmark/cmake/Config.cmake.in +1 -0
  62. data/vendor/simdjson/dependencies/benchmark/cmake/GetGitVersion.cmake +54 -0
  63. data/vendor/simdjson/dependencies/benchmark/cmake/GoogleTest.cmake +41 -0
  64. data/vendor/simdjson/dependencies/benchmark/cmake/GoogleTest.cmake.in +58 -0
  65. data/vendor/simdjson/dependencies/benchmark/cmake/Modules/FindLLVMAr.cmake +16 -0
  66. data/vendor/simdjson/dependencies/benchmark/cmake/Modules/FindLLVMNm.cmake +16 -0
  67. data/vendor/simdjson/dependencies/benchmark/cmake/Modules/FindLLVMRanLib.cmake +15 -0
  68. data/vendor/simdjson/dependencies/benchmark/cmake/benchmark.pc.in +12 -0
  69. data/vendor/simdjson/dependencies/benchmark/cmake/gnu_posix_regex.cpp +12 -0
  70. data/vendor/simdjson/dependencies/benchmark/cmake/llvm-toolchain.cmake +8 -0
  71. data/vendor/simdjson/dependencies/benchmark/cmake/posix_regex.cpp +14 -0
  72. data/vendor/simdjson/dependencies/benchmark/cmake/split_list.cmake +3 -0
  73. data/vendor/simdjson/dependencies/benchmark/cmake/std_regex.cpp +10 -0
  74. data/vendor/simdjson/dependencies/benchmark/cmake/steady_clock.cpp +7 -0
  75. data/vendor/simdjson/dependencies/benchmark/cmake/thread_safety_attributes.cpp +4 -0
  76. data/vendor/simdjson/dependencies/benchmark/cmake_install.cmake +45 -0
  77. data/vendor/simdjson/dependencies/benchmark/conan/CMakeLists.txt +7 -0
  78. data/vendor/simdjson/dependencies/benchmark/conan/test_package/CMakeLists.txt +10 -0
  79. data/vendor/simdjson/dependencies/benchmark/conan/test_package/conanfile.py +19 -0
  80. data/vendor/simdjson/dependencies/benchmark/conan/test_package/test_package.cpp +18 -0
  81. data/vendor/simdjson/dependencies/benchmark/conanfile.py +79 -0
  82. data/vendor/simdjson/dependencies/benchmark/dependencies.md +18 -0
  83. data/vendor/simdjson/dependencies/benchmark/docs/AssemblyTests.md +147 -0
  84. data/vendor/simdjson/dependencies/benchmark/docs/_config.yml +1 -0
  85. data/vendor/simdjson/dependencies/benchmark/docs/tools.md +199 -0
  86. data/vendor/simdjson/dependencies/benchmark/include/benchmark/benchmark.h +1586 -0
  87. data/vendor/simdjson/dependencies/benchmark/mingw.py +320 -0
  88. data/vendor/simdjson/dependencies/benchmark/releasing.md +16 -0
  89. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  90. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark.dir/CXX.includecache +738 -0
  91. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark.dir/DependInfo.cmake +47 -0
  92. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark.dir/build.make +354 -0
  93. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark.dir/cmake_clean.cmake +27 -0
  94. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark.dir/cmake_clean_target.cmake +3 -0
  95. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark.dir/depend.internal +157 -0
  96. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark.dir/depend.make +157 -0
  97. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark.dir/flags.make +10 -0
  98. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark.dir/link.txt +2 -0
  99. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark.dir/progress.make +20 -0
  100. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark_main.dir/CXX.includecache +40 -0
  101. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark_main.dir/DependInfo.cmake +31 -0
  102. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark_main.dir/build.make +99 -0
  103. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark_main.dir/cmake_clean.cmake +10 -0
  104. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark_main.dir/cmake_clean_target.cmake +3 -0
  105. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark_main.dir/depend.internal +6 -0
  106. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark_main.dir/depend.make +6 -0
  107. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark_main.dir/flags.make +10 -0
  108. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark_main.dir/link.txt +2 -0
  109. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/benchmark_main.dir/progress.make +3 -0
  110. data/vendor/simdjson/dependencies/benchmark/src/CMakeFiles/progress.marks +1 -0
  111. data/vendor/simdjson/dependencies/benchmark/src/CMakeLists.txt +116 -0
  112. data/vendor/simdjson/dependencies/benchmark/src/CTestTestfile.cmake +6 -0
  113. data/vendor/simdjson/dependencies/benchmark/src/Makefile +822 -0
  114. data/vendor/simdjson/dependencies/benchmark/src/arraysize.h +33 -0
  115. data/vendor/simdjson/dependencies/benchmark/src/benchmark.cc +499 -0
  116. data/vendor/simdjson/dependencies/benchmark/src/benchmark_api_internal.cc +15 -0
  117. data/vendor/simdjson/dependencies/benchmark/src/benchmark_api_internal.h +53 -0
  118. data/vendor/simdjson/dependencies/benchmark/src/benchmark_main.cc +17 -0
  119. data/vendor/simdjson/dependencies/benchmark/src/benchmark_name.cc +58 -0
  120. data/vendor/simdjson/dependencies/benchmark/src/benchmark_register.cc +506 -0
  121. data/vendor/simdjson/dependencies/benchmark/src/benchmark_register.h +107 -0
  122. data/vendor/simdjson/dependencies/benchmark/src/benchmark_runner.cc +361 -0
  123. data/vendor/simdjson/dependencies/benchmark/src/benchmark_runner.h +51 -0
  124. data/vendor/simdjson/dependencies/benchmark/src/check.h +82 -0
  125. data/vendor/simdjson/dependencies/benchmark/src/cmake_install.cmake +39 -0
  126. data/vendor/simdjson/dependencies/benchmark/src/colorprint.cc +188 -0
  127. data/vendor/simdjson/dependencies/benchmark/src/colorprint.h +33 -0
  128. data/vendor/simdjson/dependencies/benchmark/src/commandlineflags.cc +228 -0
  129. data/vendor/simdjson/dependencies/benchmark/src/commandlineflags.h +103 -0
  130. data/vendor/simdjson/dependencies/benchmark/src/complexity.cc +238 -0
  131. data/vendor/simdjson/dependencies/benchmark/src/complexity.h +55 -0
  132. data/vendor/simdjson/dependencies/benchmark/src/console_reporter.cc +177 -0
  133. data/vendor/simdjson/dependencies/benchmark/src/counter.cc +80 -0
  134. data/vendor/simdjson/dependencies/benchmark/src/counter.h +32 -0
  135. data/vendor/simdjson/dependencies/benchmark/src/csv_reporter.cc +154 -0
  136. data/vendor/simdjson/dependencies/benchmark/src/cycleclock.h +192 -0
  137. data/vendor/simdjson/dependencies/benchmark/src/internal_macros.h +94 -0
  138. data/vendor/simdjson/dependencies/benchmark/src/json_reporter.cc +253 -0
  139. data/vendor/simdjson/dependencies/benchmark/src/log.h +74 -0
  140. data/vendor/simdjson/dependencies/benchmark/src/mutex.h +155 -0
  141. data/vendor/simdjson/dependencies/benchmark/src/re.h +158 -0
  142. data/vendor/simdjson/dependencies/benchmark/src/reporter.cc +105 -0
  143. data/vendor/simdjson/dependencies/benchmark/src/sleep.cc +51 -0
  144. data/vendor/simdjson/dependencies/benchmark/src/sleep.h +15 -0
  145. data/vendor/simdjson/dependencies/benchmark/src/statistics.cc +193 -0
  146. data/vendor/simdjson/dependencies/benchmark/src/statistics.h +37 -0
  147. data/vendor/simdjson/dependencies/benchmark/src/string_util.cc +252 -0
  148. data/vendor/simdjson/dependencies/benchmark/src/string_util.h +59 -0
  149. data/vendor/simdjson/dependencies/benchmark/src/sysinfo.cc +708 -0
  150. data/vendor/simdjson/dependencies/benchmark/src/thread_manager.h +64 -0
  151. data/vendor/simdjson/dependencies/benchmark/src/thread_timer.h +86 -0
  152. data/vendor/simdjson/dependencies/benchmark/src/timers.cc +217 -0
  153. data/vendor/simdjson/dependencies/benchmark/src/timers.h +48 -0
  154. data/vendor/simdjson/dependencies/benchmark/test/AssemblyTests.cmake +46 -0
  155. data/vendor/simdjson/dependencies/benchmark/test/BUILD +73 -0
  156. data/vendor/simdjson/dependencies/benchmark/test/CMakeLists.txt +260 -0
  157. data/vendor/simdjson/dependencies/benchmark/test/basic_test.cc +136 -0
  158. data/vendor/simdjson/dependencies/benchmark/test/benchmark_gtest.cc +128 -0
  159. data/vendor/simdjson/dependencies/benchmark/test/benchmark_name_gtest.cc +74 -0
  160. data/vendor/simdjson/dependencies/benchmark/test/benchmark_test.cc +245 -0
  161. data/vendor/simdjson/dependencies/benchmark/test/clobber_memory_assembly_test.cc +64 -0
  162. data/vendor/simdjson/dependencies/benchmark/test/commandlineflags_gtest.cc +201 -0
  163. data/vendor/simdjson/dependencies/benchmark/test/complexity_test.cc +213 -0
  164. data/vendor/simdjson/dependencies/benchmark/test/cxx03_test.cc +63 -0
  165. data/vendor/simdjson/dependencies/benchmark/test/diagnostics_test.cc +80 -0
  166. data/vendor/simdjson/dependencies/benchmark/test/display_aggregates_only_test.cc +43 -0
  167. data/vendor/simdjson/dependencies/benchmark/test/donotoptimize_assembly_test.cc +163 -0
  168. data/vendor/simdjson/dependencies/benchmark/test/donotoptimize_test.cc +52 -0
  169. data/vendor/simdjson/dependencies/benchmark/test/filter_test.cc +104 -0
  170. data/vendor/simdjson/dependencies/benchmark/test/fixture_test.cc +49 -0
  171. data/vendor/simdjson/dependencies/benchmark/test/internal_threading_test.cc +184 -0
  172. data/vendor/simdjson/dependencies/benchmark/test/link_main_test.cc +8 -0
  173. data/vendor/simdjson/dependencies/benchmark/test/map_test.cc +57 -0
  174. data/vendor/simdjson/dependencies/benchmark/test/memory_manager_test.cc +44 -0
  175. data/vendor/simdjson/dependencies/benchmark/test/multiple_ranges_test.cc +96 -0
  176. data/vendor/simdjson/dependencies/benchmark/test/options_test.cc +75 -0
  177. data/vendor/simdjson/dependencies/benchmark/test/output_test.h +213 -0
  178. data/vendor/simdjson/dependencies/benchmark/test/output_test_helper.cc +515 -0
  179. data/vendor/simdjson/dependencies/benchmark/test/register_benchmark_test.cc +184 -0
  180. data/vendor/simdjson/dependencies/benchmark/test/report_aggregates_only_test.cc +39 -0
  181. data/vendor/simdjson/dependencies/benchmark/test/reporter_output_test.cc +748 -0
  182. data/vendor/simdjson/dependencies/benchmark/test/skip_with_error_test.cc +189 -0
  183. data/vendor/simdjson/dependencies/benchmark/test/state_assembly_test.cc +68 -0
  184. data/vendor/simdjson/dependencies/benchmark/test/statistics_gtest.cc +28 -0
  185. data/vendor/simdjson/dependencies/benchmark/test/string_util_gtest.cc +153 -0
  186. data/vendor/simdjson/dependencies/benchmark/test/templated_fixture_test.cc +28 -0
  187. data/vendor/simdjson/dependencies/benchmark/test/user_counters_tabular_test.cc +285 -0
  188. data/vendor/simdjson/dependencies/benchmark/test/user_counters_test.cc +531 -0
  189. data/vendor/simdjson/dependencies/benchmark/test/user_counters_thousands_test.cc +173 -0
  190. data/vendor/simdjson/dependencies/benchmark/tools/compare.py +408 -0
  191. data/vendor/simdjson/dependencies/benchmark/tools/gbench/__init__.py +8 -0
  192. data/vendor/simdjson/dependencies/benchmark/tools/gbench/report.py +541 -0
  193. data/vendor/simdjson/dependencies/benchmark/tools/gbench/util.py +164 -0
  194. data/vendor/simdjson/dependencies/benchmark/tools/strip_asm.py +151 -0
  195. data/vendor/simdjson/dependencies/cJSON/CHANGELOG.md +375 -0
  196. data/vendor/simdjson/dependencies/cJSON/CMakeLists.txt +251 -0
  197. data/vendor/simdjson/dependencies/cJSON/CONTRIBUTORS.md +51 -0
  198. data/vendor/simdjson/dependencies/cJSON/LICENSE +20 -0
  199. data/vendor/simdjson/dependencies/cJSON/Makefile +157 -0
  200. data/vendor/simdjson/dependencies/cJSON/README.md +533 -0
  201. data/vendor/simdjson/dependencies/cJSON/appveyor.yml +86 -0
  202. data/vendor/simdjson/dependencies/cJSON/cJSON.c +2936 -0
  203. data/vendor/simdjson/dependencies/cJSON/cJSON.h +285 -0
  204. data/vendor/simdjson/dependencies/cJSON/cJSON_Utils.c +1450 -0
  205. data/vendor/simdjson/dependencies/cJSON/cJSON_Utils.h +88 -0
  206. data/vendor/simdjson/dependencies/cJSON/fuzzing/CMakeLists.txt +28 -0
  207. data/vendor/simdjson/dependencies/cJSON/fuzzing/afl-prepare-linux.sh +5 -0
  208. data/vendor/simdjson/dependencies/cJSON/fuzzing/afl.c +176 -0
  209. data/vendor/simdjson/dependencies/cJSON/fuzzing/afl.sh +9 -0
  210. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test1 +22 -0
  211. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test10 +1 -0
  212. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test11 +8 -0
  213. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test2 +11 -0
  214. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test3 +26 -0
  215. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test3.bu +26 -0
  216. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test3.uf +26 -0
  217. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test3.uu +26 -0
  218. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test4 +88 -0
  219. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test5 +27 -0
  220. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test6 +16 -0
  221. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test7 +22 -0
  222. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test8 +13 -0
  223. data/vendor/simdjson/dependencies/cJSON/fuzzing/inputs/test9 +5 -0
  224. data/vendor/simdjson/dependencies/cJSON/fuzzing/json.dict +47 -0
  225. data/vendor/simdjson/dependencies/cJSON/library_config/cJSONConfig.cmake.in +29 -0
  226. data/vendor/simdjson/dependencies/cJSON/library_config/cJSONConfigVersion.cmake.in +11 -0
  227. data/vendor/simdjson/dependencies/cJSON/library_config/libcjson.pc.in +10 -0
  228. data/vendor/simdjson/dependencies/cJSON/library_config/libcjson_utils.pc.in +10 -0
  229. data/vendor/simdjson/dependencies/cJSON/test.c +268 -0
  230. data/vendor/simdjson/dependencies/cJSON/tests/CMakeLists.txt +115 -0
  231. data/vendor/simdjson/dependencies/cJSON/tests/cjson_add.c +422 -0
  232. data/vendor/simdjson/dependencies/cJSON/tests/common.h +122 -0
  233. data/vendor/simdjson/dependencies/cJSON/tests/compare_tests.c +205 -0
  234. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test1 +22 -0
  235. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test1.expected +22 -0
  236. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test10 +1 -0
  237. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test10.expected +1 -0
  238. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test11 +8 -0
  239. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test11.expected +10 -0
  240. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test2 +11 -0
  241. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test2.expected +18 -0
  242. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test3 +26 -0
  243. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test3.expected +28 -0
  244. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test4 +88 -0
  245. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test4.expected +94 -0
  246. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test5 +27 -0
  247. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test5.expected +54 -0
  248. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test6 +16 -0
  249. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test7 +22 -0
  250. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test7.expected +19 -0
  251. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test8 +13 -0
  252. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test8.expected +13 -0
  253. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test9 +5 -0
  254. data/vendor/simdjson/dependencies/cJSON/tests/inputs/test9.expected +1 -0
  255. data/vendor/simdjson/dependencies/cJSON/tests/json-patch-tests/README.md +75 -0
  256. data/vendor/simdjson/dependencies/cJSON/tests/json_patch_tests.c +243 -0
  257. data/vendor/simdjson/dependencies/cJSON/tests/misc_tests.c +579 -0
  258. data/vendor/simdjson/dependencies/cJSON/tests/misc_utils_tests.c +80 -0
  259. data/vendor/simdjson/dependencies/cJSON/tests/old_utils_tests.c +205 -0
  260. data/vendor/simdjson/dependencies/cJSON/tests/parse_array.c +166 -0
  261. data/vendor/simdjson/dependencies/cJSON/tests/parse_examples.c +214 -0
  262. data/vendor/simdjson/dependencies/cJSON/tests/parse_hex4.c +73 -0
  263. data/vendor/simdjson/dependencies/cJSON/tests/parse_number.c +110 -0
  264. data/vendor/simdjson/dependencies/cJSON/tests/parse_object.c +176 -0
  265. data/vendor/simdjson/dependencies/cJSON/tests/parse_string.c +135 -0
  266. data/vendor/simdjson/dependencies/cJSON/tests/parse_value.c +112 -0
  267. data/vendor/simdjson/dependencies/cJSON/tests/parse_with_opts.c +112 -0
  268. data/vendor/simdjson/dependencies/cJSON/tests/print_array.c +100 -0
  269. data/vendor/simdjson/dependencies/cJSON/tests/print_number.c +105 -0
  270. data/vendor/simdjson/dependencies/cJSON/tests/print_object.c +101 -0
  271. data/vendor/simdjson/dependencies/cJSON/tests/print_string.c +78 -0
  272. data/vendor/simdjson/dependencies/cJSON/tests/print_value.c +107 -0
  273. data/vendor/simdjson/dependencies/cJSON/tests/readme_examples.c +258 -0
  274. data/vendor/simdjson/dependencies/cJSON/tests/unity/README.md +231 -0
  275. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/colour_prompt.rb +118 -0
  276. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/colour_reporter.rb +39 -0
  277. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/generate_config.yml +36 -0
  278. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/generate_module.rb +308 -0
  279. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/generate_test_runner.rb +454 -0
  280. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/parse_output.rb +220 -0
  281. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/stylize_as_junit.rb +252 -0
  282. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/test_file_filter.rb +25 -0
  283. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/type_sanitizer.rb +6 -0
  284. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/unity_test_summary.py +139 -0
  285. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/unity_test_summary.rb +136 -0
  286. data/vendor/simdjson/dependencies/cJSON/tests/unity/auto/unity_to_junit.py +146 -0
  287. data/vendor/simdjson/dependencies/cJSON/tests/unity/docs/ThrowTheSwitchCodingStandard.md +207 -0
  288. data/vendor/simdjson/dependencies/cJSON/tests/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
  289. data/vendor/simdjson/dependencies/cJSON/tests/unity/docs/UnityAssertionsReference.md +770 -0
  290. data/vendor/simdjson/dependencies/cJSON/tests/unity/docs/UnityConfigurationGuide.md +435 -0
  291. data/vendor/simdjson/dependencies/cJSON/tests/unity/docs/UnityGettingStartedGuide.md +191 -0
  292. data/vendor/simdjson/dependencies/cJSON/tests/unity/docs/UnityHelperScriptsGuide.md +254 -0
  293. data/vendor/simdjson/dependencies/cJSON/tests/unity/docs/license.txt +21 -0
  294. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_1/makefile +71 -0
  295. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_1/readme.txt +5 -0
  296. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_1/src/ProductionCode.c +24 -0
  297. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_1/src/ProductionCode.h +3 -0
  298. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_1/src/ProductionCode2.c +11 -0
  299. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_1/src/ProductionCode2.h +2 -0
  300. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_1/test/TestProductionCode.c +62 -0
  301. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_1/test/TestProductionCode2.c +31 -0
  302. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -0
  303. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -0
  304. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_2/makefile +70 -0
  305. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_2/readme.txt +5 -0
  306. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_2/src/ProductionCode.c +24 -0
  307. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_2/src/ProductionCode.h +3 -0
  308. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_2/src/ProductionCode2.c +11 -0
  309. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_2/src/ProductionCode2.h +2 -0
  310. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_2/test/TestProductionCode.c +64 -0
  311. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_2/test/TestProductionCode2.c +33 -0
  312. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +9 -0
  313. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +11 -0
  314. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_2/test/test_runners/all_tests.c +12 -0
  315. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/helper/UnityHelper.c +10 -0
  316. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/helper/UnityHelper.h +12 -0
  317. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/rakefile.rb +43 -0
  318. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/rakefile_helper.rb +249 -0
  319. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/readme.txt +13 -0
  320. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/src/ProductionCode.c +24 -0
  321. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/src/ProductionCode.h +3 -0
  322. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/src/ProductionCode2.c +11 -0
  323. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/src/ProductionCode2.h +2 -0
  324. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/target_gcc_32.yml +46 -0
  325. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/test/TestProductionCode.c +62 -0
  326. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/example_3/test/TestProductionCode2.c +31 -0
  327. data/vendor/simdjson/dependencies/cJSON/tests/unity/examples/unity_config.h +239 -0
  328. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/eclipse/error_parsers.txt +26 -0
  329. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/rakefile.rb +48 -0
  330. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/rakefile_helper.rb +178 -0
  331. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/readme.txt +9 -0
  332. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/src/unity_fixture.c +432 -0
  333. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/src/unity_fixture.h +83 -0
  334. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/src/unity_fixture_internals.h +51 -0
  335. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +47 -0
  336. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/test/Makefile +75 -0
  337. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/test/main/AllTests.c +22 -0
  338. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/test/template_fixture_tests.c +39 -0
  339. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/test/unity_fixture_Test.c +543 -0
  340. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/test/unity_fixture_TestRunner.c +57 -0
  341. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/test/unity_output_Spy.c +57 -0
  342. data/vendor/simdjson/dependencies/cJSON/tests/unity/extras/fixture/test/unity_output_Spy.h +17 -0
  343. data/vendor/simdjson/dependencies/cJSON/tests/unity/release/build.info +2 -0
  344. data/vendor/simdjson/dependencies/cJSON/tests/unity/release/version.info +2 -0
  345. data/vendor/simdjson/dependencies/cJSON/tests/unity/src/unity.c +1570 -0
  346. data/vendor/simdjson/dependencies/cJSON/tests/unity/src/unity.h +503 -0
  347. data/vendor/simdjson/dependencies/cJSON/tests/unity/src/unity_internals.h +870 -0
  348. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/Makefile +66 -0
  349. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_cmd.c +61 -0
  350. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_def.c +57 -0
  351. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_head1.c +55 -0
  352. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_head1.h +15 -0
  353. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_mock_cmd.c +80 -0
  354. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_mock_def.c +76 -0
  355. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_mock_head1.c +75 -0
  356. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_mock_head1.h +13 -0
  357. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_mock_new1.c +89 -0
  358. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_mock_new2.c +89 -0
  359. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_mock_param.c +77 -0
  360. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_mock_run1.c +89 -0
  361. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_mock_run2.c +89 -0
  362. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_mock_yaml.c +90 -0
  363. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_new1.c +67 -0
  364. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_new2.c +70 -0
  365. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_param.c +58 -0
  366. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_run1.c +67 -0
  367. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_run2.c +70 -0
  368. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/expectdata/testsample_yaml.c +71 -0
  369. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/rakefile +125 -0
  370. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/rakefile_helper.rb +260 -0
  371. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/spec/generate_module_existing_file_spec.rb +158 -0
  372. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/clang_file.yml +78 -0
  373. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/clang_strict.yml +78 -0
  374. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/gcc_32.yml +49 -0
  375. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/gcc_64.yml +50 -0
  376. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/gcc_auto_limits.yml +47 -0
  377. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/gcc_auto_stdint.yml +59 -0
  378. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/gcc_manual_math.yml +47 -0
  379. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/hitech_picc18.yml +101 -0
  380. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/iar_arm_v4.yml +90 -0
  381. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/iar_arm_v5.yml +80 -0
  382. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/iar_arm_v5_3.yml +80 -0
  383. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +94 -0
  384. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/iar_cortexm3_v5.yml +84 -0
  385. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/iar_msp430.yml +95 -0
  386. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/targets/iar_sh2a_v6.yml +86 -0
  387. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/testdata/CException.h +11 -0
  388. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/testdata/Defs.h +8 -0
  389. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/testdata/cmock.h +14 -0
  390. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/testdata/mockMock.h +13 -0
  391. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/testdata/testRunnerGenerator.c +183 -0
  392. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/testdata/testRunnerGeneratorSmall.c +67 -0
  393. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/testdata/testRunnerGeneratorWithMocks.c +192 -0
  394. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/tests/test_generate_test_runner.rb +1252 -0
  395. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/tests/testparameterized.c +110 -0
  396. data/vendor/simdjson/dependencies/cJSON/tests/unity/test/tests/testunity.c +5337 -0
  397. data/vendor/simdjson/dependencies/cJSON/tests/unity_setup.c +3 -0
  398. data/vendor/simdjson/dependencies/cJSON/valgrind.supp +6 -0
  399. data/vendor/simdjson/dependencies/cxxopts/CHANGELOG.md +97 -0
  400. data/vendor/simdjson/dependencies/cxxopts/CMakeLists.txt +108 -0
  401. data/vendor/simdjson/dependencies/cxxopts/INSTALL +23 -0
  402. data/vendor/simdjson/dependencies/cxxopts/LICENSE +19 -0
  403. data/vendor/simdjson/dependencies/cxxopts/README.md +208 -0
  404. data/vendor/simdjson/dependencies/cxxopts/cxxopts-config.cmake.in +4 -0
  405. data/vendor/simdjson/dependencies/cxxopts/include/cxxopts.hpp +2193 -0
  406. data/vendor/simdjson/dependencies/cxxopts/src/CMakeLists.txt +24 -0
  407. data/vendor/simdjson/dependencies/cxxopts/src/example.cpp +167 -0
  408. data/vendor/simdjson/dependencies/cxxopts/test/CMakeLists.txt +35 -0
  409. data/vendor/simdjson/dependencies/cxxopts/test/add-subdirectory-test/CMakeLists.txt +11 -0
  410. data/vendor/simdjson/dependencies/cxxopts/test/catch.hpp +10460 -0
  411. data/vendor/simdjson/dependencies/cxxopts/test/find-package-test/CMakeLists.txt +11 -0
  412. data/vendor/simdjson/dependencies/cxxopts/test/link_a.cpp +6 -0
  413. data/vendor/simdjson/dependencies/cxxopts/test/link_b.cpp +1 -0
  414. data/vendor/simdjson/dependencies/cxxopts/test/main.cpp +2 -0
  415. data/vendor/simdjson/dependencies/cxxopts/test/options.cpp +776 -0
  416. data/vendor/simdjson/dependencies/fastjson/LICENSE.txt +24 -0
  417. data/vendor/simdjson/dependencies/fastjson/Makefile +5 -0
  418. data/vendor/simdjson/dependencies/fastjson/README.md +68 -0
  419. data/vendor/simdjson/dependencies/fastjson/SConstruct +44 -0
  420. data/vendor/simdjson/dependencies/fastjson/examples/address_book/Makefile +2 -0
  421. data/vendor/simdjson/dependencies/fastjson/examples/address_book/README.markdown +5 -0
  422. data/vendor/simdjson/dependencies/fastjson/examples/address_book/address_book.cpp +166 -0
  423. data/vendor/simdjson/dependencies/fastjson/include/fastjson/core.h +146 -0
  424. data/vendor/simdjson/dependencies/fastjson/include/fastjson/dom.h +799 -0
  425. data/vendor/simdjson/dependencies/fastjson/include/fastjson/error.h +64 -0
  426. data/vendor/simdjson/dependencies/fastjson/include/fastjson/fastjson.h +161 -0
  427. data/vendor/simdjson/dependencies/fastjson/include/fastjson/utils.h +62 -0
  428. data/vendor/simdjson/dependencies/fastjson/src/fastjson.cpp +1016 -0
  429. data/vendor/simdjson/dependencies/fastjson/src/fastjson2.cpp +440 -0
  430. data/vendor/simdjson/dependencies/fastjson/src/fastjson_dom.cpp +165 -0
  431. data/vendor/simdjson/dependencies/fastjson/tests/00-bug-00-bad-parse.cpp +59 -0
  432. data/vendor/simdjson/dependencies/fastjson/tests/00-bug-01-string-roundtrip.cpp +88 -0
  433. data/vendor/simdjson/dependencies/fastjson/tests/00-bug-02-unicode-escape.cpp +66 -0
  434. data/vendor/simdjson/dependencies/fastjson/tests/01-dom-00-dict-const-get.cpp +35 -0
  435. data/vendor/simdjson/dependencies/fastjson/tests/01-dom-01-vector-from-json.cpp +36 -0
  436. data/vendor/simdjson/dependencies/fastjson/tests/Makefile +4 -0
  437. data/vendor/simdjson/dependencies/fastjson/tests/clone_token.cpp +49 -0
  438. data/vendor/simdjson/dependencies/fastjson/tests/dom_from_string.cpp +77 -0
  439. data/vendor/simdjson/dependencies/fastjson/tests/misc/dynamic_test.cpp +49 -0
  440. data/vendor/simdjson/dependencies/fastjson/tests/misc/from_file.cpp +57 -0
  441. data/vendor/simdjson/dependencies/fastjson/tests/misc/speed_test.cpp +127 -0
  442. data/vendor/simdjson/dependencies/fastjson/tests/misc/speed_test_boost.cpp +115 -0
  443. data/vendor/simdjson/dependencies/fastjson/tests/saruconf +3 -0
  444. data/vendor/simdjson/dependencies/fastjson/tests/test0.cpp +385 -0
  445. data/vendor/simdjson/dependencies/fastjson/tests/test1.cpp +237 -0
  446. data/vendor/simdjson/dependencies/fastjson/tests/test2.cpp +301 -0
  447. data/vendor/simdjson/dependencies/fastjson/tests/test_permissive_count.cpp +100 -0
  448. data/vendor/simdjson/dependencies/fastjson/tests/test_permissive_parse.cpp +83 -0
  449. data/vendor/simdjson/dependencies/fastjson/tests/test_permissive_roundtrip.cpp +64 -0
  450. data/vendor/simdjson/dependencies/fastjson/tests/test_utils.cpp +176 -0
  451. data/vendor/simdjson/dependencies/gason/CMakeLists.txt +16 -0
  452. data/vendor/simdjson/dependencies/gason/LICENSE +20 -0
  453. data/vendor/simdjson/dependencies/gason/README.md +167 -0
  454. data/vendor/simdjson/dependencies/gason/data/download.sh +5 -0
  455. data/vendor/simdjson/dependencies/gason/ruberoid/AndroidManifest.xml +32 -0
  456. data/vendor/simdjson/dependencies/gason/ruberoid/res/values/strings.xml +4 -0
  457. data/vendor/simdjson/dependencies/gason/src/benchmark.cpp +257 -0
  458. data/vendor/simdjson/dependencies/gason/src/gason.cpp +334 -0
  459. data/vendor/simdjson/dependencies/gason/src/gason.h +135 -0
  460. data/vendor/simdjson/dependencies/gason/src/pretty-print.cpp +192 -0
  461. data/vendor/simdjson/dependencies/gason/src/test-suite.cpp +146 -0
  462. data/vendor/simdjson/dependencies/jsmn/LICENSE +20 -0
  463. data/vendor/simdjson/dependencies/jsmn/Makefile +41 -0
  464. data/vendor/simdjson/dependencies/jsmn/README.md +168 -0
  465. data/vendor/simdjson/dependencies/jsmn/example/jsondump.c +126 -0
  466. data/vendor/simdjson/dependencies/jsmn/example/simple.c +76 -0
  467. data/vendor/simdjson/dependencies/jsmn/jsmn.c +314 -0
  468. data/vendor/simdjson/dependencies/jsmn/jsmn.h +76 -0
  469. data/vendor/simdjson/dependencies/jsmn/test/test.h +27 -0
  470. data/vendor/simdjson/dependencies/jsmn/test/tests.c +407 -0
  471. data/vendor/simdjson/dependencies/jsmn/test/testutil.h +94 -0
  472. data/vendor/simdjson/dependencies/json/CMakeLists.txt +131 -0
  473. data/vendor/simdjson/dependencies/json/CODE_OF_CONDUCT.md +46 -0
  474. data/vendor/simdjson/dependencies/json/ChangeLog.md +1670 -0
  475. data/vendor/simdjson/dependencies/json/LICENSE.MIT +21 -0
  476. data/vendor/simdjson/dependencies/json/Makefile +629 -0
  477. data/vendor/simdjson/dependencies/json/README.md +1370 -0
  478. data/vendor/simdjson/dependencies/json/appveyor.yml +111 -0
  479. data/vendor/simdjson/dependencies/json/benchmarks/CMakeLists.txt +28 -0
  480. data/vendor/simdjson/dependencies/json/benchmarks/src/benchmarks.cpp +109 -0
  481. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/AUTHORS +46 -0
  482. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/BUILD.bazel +42 -0
  483. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/CMakeLists.txt +251 -0
  484. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/CONTRIBUTING.md +58 -0
  485. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/CONTRIBUTORS +65 -0
  486. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/LICENSE +202 -0
  487. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/README.md +950 -0
  488. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/WORKSPACE +7 -0
  489. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/appveyor.yml +56 -0
  490. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/AddCXXCompilerFlag.cmake +74 -0
  491. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/CXXFeatureCheck.cmake +64 -0
  492. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/Config.cmake.in +1 -0
  493. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/GetGitVersion.cmake +54 -0
  494. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/HandleGTest.cmake +113 -0
  495. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/Modules/FindLLVMAr.cmake +16 -0
  496. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/Modules/FindLLVMNm.cmake +16 -0
  497. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/Modules/FindLLVMRanLib.cmake +15 -0
  498. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/benchmark.pc.in +11 -0
  499. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/gnu_posix_regex.cpp +12 -0
  500. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/llvm-toolchain.cmake +8 -0
  501. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/posix_regex.cpp +14 -0
  502. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/split_list.cmake +3 -0
  503. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/std_regex.cpp +10 -0
  504. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/steady_clock.cpp +7 -0
  505. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/cmake/thread_safety_attributes.cpp +4 -0
  506. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/docs/AssemblyTests.md +147 -0
  507. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/docs/tools.md +242 -0
  508. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/include/benchmark/benchmark.h +1456 -0
  509. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/mingw.py +320 -0
  510. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/releasing.md +16 -0
  511. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/CMakeLists.txt +105 -0
  512. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/arraysize.h +33 -0
  513. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/benchmark.cc +630 -0
  514. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/benchmark_api_internal.h +47 -0
  515. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/benchmark_main.cc +17 -0
  516. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/benchmark_register.cc +461 -0
  517. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/benchmark_register.h +33 -0
  518. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/check.h +79 -0
  519. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/colorprint.cc +188 -0
  520. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/colorprint.h +33 -0
  521. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/commandlineflags.cc +218 -0
  522. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/commandlineflags.h +79 -0
  523. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/complexity.cc +220 -0
  524. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/complexity.h +55 -0
  525. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/console_reporter.cc +182 -0
  526. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/counter.cc +68 -0
  527. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/counter.h +26 -0
  528. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/csv_reporter.cc +149 -0
  529. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/cycleclock.h +177 -0
  530. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/internal_macros.h +89 -0
  531. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/json_reporter.cc +205 -0
  532. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/log.h +73 -0
  533. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/mutex.h +155 -0
  534. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/re.h +152 -0
  535. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/reporter.cc +87 -0
  536. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/sleep.cc +51 -0
  537. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/sleep.h +15 -0
  538. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/statistics.cc +178 -0
  539. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/statistics.h +37 -0
  540. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/string_util.cc +172 -0
  541. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/string_util.h +40 -0
  542. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/sysinfo.cc +587 -0
  543. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/thread_manager.h +66 -0
  544. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/thread_timer.h +69 -0
  545. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/timers.cc +217 -0
  546. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/src/timers.h +48 -0
  547. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/tools/compare.py +316 -0
  548. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/tools/compare_bench.py +67 -0
  549. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/tools/gbench/__init__.py +8 -0
  550. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/tools/gbench/report.py +208 -0
  551. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/tools/gbench/util.py +159 -0
  552. data/vendor/simdjson/dependencies/json/benchmarks/thirdparty/benchmark/tools/strip_asm.py +151 -0
  553. data/vendor/simdjson/dependencies/json/cmake/config.cmake.in +15 -0
  554. data/vendor/simdjson/dependencies/json/doc/Doxyfile +335 -0
  555. data/vendor/simdjson/dependencies/json/doc/Makefile +90 -0
  556. data/vendor/simdjson/dependencies/json/doc/avatars.png +0 -0
  557. data/vendor/simdjson/dependencies/json/doc/binary_formats.md +171 -0
  558. data/vendor/simdjson/dependencies/json/doc/css/mylayout.css +26 -0
  559. data/vendor/simdjson/dependencies/json/doc/css/mylayout_docset.css +27 -0
  560. data/vendor/simdjson/dependencies/json/doc/examples/README.cpp +39 -0
  561. data/vendor/simdjson/dependencies/json/doc/examples/README.link +1 -0
  562. data/vendor/simdjson/dependencies/json/doc/examples/README.output +27 -0
  563. data/vendor/simdjson/dependencies/json/doc/examples/array.cpp +19 -0
  564. data/vendor/simdjson/dependencies/json/doc/examples/array.link +1 -0
  565. data/vendor/simdjson/dependencies/json/doc/examples/array.output +4 -0
  566. data/vendor/simdjson/dependencies/json/doc/examples/at__object_t_key_type.cpp +48 -0
  567. data/vendor/simdjson/dependencies/json/doc/examples/at__object_t_key_type.link +1 -0
  568. data/vendor/simdjson/dependencies/json/doc/examples/at__object_t_key_type.output +4 -0
  569. data/vendor/simdjson/dependencies/json/doc/examples/at__object_t_key_type_const.cpp +42 -0
  570. data/vendor/simdjson/dependencies/json/doc/examples/at__object_t_key_type_const.link +1 -0
  571. data/vendor/simdjson/dependencies/json/doc/examples/at__object_t_key_type_const.output +3 -0
  572. data/vendor/simdjson/dependencies/json/doc/examples/at__size_type.cpp +43 -0
  573. data/vendor/simdjson/dependencies/json/doc/examples/at__size_type.link +1 -0
  574. data/vendor/simdjson/dependencies/json/doc/examples/at__size_type.output +4 -0
  575. data/vendor/simdjson/dependencies/json/doc/examples/at__size_type_const.cpp +37 -0
  576. data/vendor/simdjson/dependencies/json/doc/examples/at__size_type_const.link +1 -0
  577. data/vendor/simdjson/dependencies/json/doc/examples/at__size_type_const.output +3 -0
  578. data/vendor/simdjson/dependencies/json/doc/examples/at_json_pointer.cpp +103 -0
  579. data/vendor/simdjson/dependencies/json/doc/examples/at_json_pointer.link +1 -0
  580. data/vendor/simdjson/dependencies/json/doc/examples/at_json_pointer.output +12 -0
  581. data/vendor/simdjson/dependencies/json/doc/examples/at_json_pointer_const.cpp +79 -0
  582. data/vendor/simdjson/dependencies/json/doc/examples/at_json_pointer_const.link +1 -0
  583. data/vendor/simdjson/dependencies/json/doc/examples/at_json_pointer_const.output +9 -0
  584. data/vendor/simdjson/dependencies/json/doc/examples/back.cpp +38 -0
  585. data/vendor/simdjson/dependencies/json/doc/examples/back.link +1 -0
  586. data/vendor/simdjson/dependencies/json/doc/examples/back.output +7 -0
  587. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__CompatibleType.cpp +218 -0
  588. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__CompatibleType.link +1 -0
  589. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__CompatibleType.output +39 -0
  590. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__InputIt_InputIt.cpp +32 -0
  591. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__InputIt_InputIt.link +1 -0
  592. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__InputIt_InputIt.output +4 -0
  593. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__basic_json.cpp +17 -0
  594. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__basic_json.link +1 -0
  595. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__basic_json.output +2 -0
  596. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__copyassignment.cpp +18 -0
  597. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__copyassignment.link +1 -0
  598. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__copyassignment.output +2 -0
  599. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__list_init_t.cpp +21 -0
  600. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__list_init_t.link +1 -0
  601. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__list_init_t.output +5 -0
  602. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__moveconstructor.cpp +17 -0
  603. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__moveconstructor.link +1 -0
  604. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__moveconstructor.output +2 -0
  605. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__nullptr_t.cpp +16 -0
  606. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__nullptr_t.link +1 -0
  607. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__nullptr_t.output +2 -0
  608. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__size_type_basic_json.cpp +18 -0
  609. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__size_type_basic_json.link +1 -0
  610. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__size_type_basic_json.output +3 -0
  611. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__value.cpp +30 -0
  612. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__value.link +1 -0
  613. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__value.output +1 -0
  614. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__value_ptr.cpp +30 -0
  615. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__value_ptr.link +1 -0
  616. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__value_ptr.output +1 -0
  617. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__value_t.cpp +25 -0
  618. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__value_t.link +1 -0
  619. data/vendor/simdjson/dependencies/json/doc/examples/basic_json__value_t.output +7 -0
  620. data/vendor/simdjson/dependencies/json/doc/examples/begin.cpp +16 -0
  621. data/vendor/simdjson/dependencies/json/doc/examples/begin.link +1 -0
  622. data/vendor/simdjson/dependencies/json/doc/examples/begin.output +1 -0
  623. data/vendor/simdjson/dependencies/json/doc/examples/cbegin.cpp +16 -0
  624. data/vendor/simdjson/dependencies/json/doc/examples/cbegin.link +1 -0
  625. data/vendor/simdjson/dependencies/json/doc/examples/cbegin.output +1 -0
  626. data/vendor/simdjson/dependencies/json/doc/examples/cend.cpp +19 -0
  627. data/vendor/simdjson/dependencies/json/doc/examples/cend.link +1 -0
  628. data/vendor/simdjson/dependencies/json/doc/examples/cend.output +1 -0
  629. data/vendor/simdjson/dependencies/json/doc/examples/clear.cpp +34 -0
  630. data/vendor/simdjson/dependencies/json/doc/examples/clear.link +1 -0
  631. data/vendor/simdjson/dependencies/json/doc/examples/clear.output +7 -0
  632. data/vendor/simdjson/dependencies/json/doc/examples/contains.cpp +17 -0
  633. data/vendor/simdjson/dependencies/json/doc/examples/contains.link +1 -0
  634. data/vendor/simdjson/dependencies/json/doc/examples/contains.output +3 -0
  635. data/vendor/simdjson/dependencies/json/doc/examples/contains_json_pointer.cpp +45 -0
  636. data/vendor/simdjson/dependencies/json/doc/examples/contains_json_pointer.link +1 -0
  637. data/vendor/simdjson/dependencies/json/doc/examples/contains_json_pointer.output +10 -0
  638. data/vendor/simdjson/dependencies/json/doc/examples/count.cpp +18 -0
  639. data/vendor/simdjson/dependencies/json/doc/examples/count.link +1 -0
  640. data/vendor/simdjson/dependencies/json/doc/examples/count.output +2 -0
  641. data/vendor/simdjson/dependencies/json/doc/examples/crbegin.cpp +16 -0
  642. data/vendor/simdjson/dependencies/json/doc/examples/crbegin.link +1 -0
  643. data/vendor/simdjson/dependencies/json/doc/examples/crbegin.output +1 -0
  644. data/vendor/simdjson/dependencies/json/doc/examples/crend.cpp +19 -0
  645. data/vendor/simdjson/dependencies/json/doc/examples/crend.link +1 -0
  646. data/vendor/simdjson/dependencies/json/doc/examples/crend.output +1 -0
  647. data/vendor/simdjson/dependencies/json/doc/examples/diff.cpp +36 -0
  648. data/vendor/simdjson/dependencies/json/doc/examples/diff.link +1 -0
  649. data/vendor/simdjson/dependencies/json/doc/examples/diff.output +25 -0
  650. data/vendor/simdjson/dependencies/json/doc/examples/dump.cpp +48 -0
  651. data/vendor/simdjson/dependencies/json/doc/examples/dump.link +1 -0
  652. data/vendor/simdjson/dependencies/json/doc/examples/dump.output +55 -0
  653. data/vendor/simdjson/dependencies/json/doc/examples/emplace.cpp +31 -0
  654. data/vendor/simdjson/dependencies/json/doc/examples/emplace.link +1 -0
  655. data/vendor/simdjson/dependencies/json/doc/examples/emplace.output +6 -0
  656. data/vendor/simdjson/dependencies/json/doc/examples/emplace_back.cpp +24 -0
  657. data/vendor/simdjson/dependencies/json/doc/examples/emplace_back.link +1 -0
  658. data/vendor/simdjson/dependencies/json/doc/examples/emplace_back.output +4 -0
  659. data/vendor/simdjson/dependencies/json/doc/examples/empty.cpp +30 -0
  660. data/vendor/simdjson/dependencies/json/doc/examples/empty.link +1 -0
  661. data/vendor/simdjson/dependencies/json/doc/examples/empty.output +9 -0
  662. data/vendor/simdjson/dependencies/json/doc/examples/end.cpp +19 -0
  663. data/vendor/simdjson/dependencies/json/doc/examples/end.link +1 -0
  664. data/vendor/simdjson/dependencies/json/doc/examples/end.output +1 -0
  665. data/vendor/simdjson/dependencies/json/doc/examples/erase__IteratorType.cpp +31 -0
  666. data/vendor/simdjson/dependencies/json/doc/examples/erase__IteratorType.link +1 -0
  667. data/vendor/simdjson/dependencies/json/doc/examples/erase__IteratorType.output +6 -0
  668. data/vendor/simdjson/dependencies/json/doc/examples/erase__IteratorType_IteratorType.cpp +31 -0
  669. data/vendor/simdjson/dependencies/json/doc/examples/erase__IteratorType_IteratorType.link +1 -0
  670. data/vendor/simdjson/dependencies/json/doc/examples/erase__IteratorType_IteratorType.output +6 -0
  671. data/vendor/simdjson/dependencies/json/doc/examples/erase__key_type.cpp +18 -0
  672. data/vendor/simdjson/dependencies/json/doc/examples/erase__key_type.link +1 -0
  673. data/vendor/simdjson/dependencies/json/doc/examples/erase__key_type.output +2 -0
  674. data/vendor/simdjson/dependencies/json/doc/examples/erase__size_type.cpp +16 -0
  675. data/vendor/simdjson/dependencies/json/doc/examples/erase__size_type.link +1 -0
  676. data/vendor/simdjson/dependencies/json/doc/examples/erase__size_type.output +1 -0
  677. data/vendor/simdjson/dependencies/json/doc/examples/exception.cpp +20 -0
  678. data/vendor/simdjson/dependencies/json/doc/examples/exception.link +1 -0
  679. data/vendor/simdjson/dependencies/json/doc/examples/exception.output +2 -0
  680. data/vendor/simdjson/dependencies/json/doc/examples/find__key_type.cpp +20 -0
  681. data/vendor/simdjson/dependencies/json/doc/examples/find__key_type.link +1 -0
  682. data/vendor/simdjson/dependencies/json/doc/examples/find__key_type.output +3 -0
  683. data/vendor/simdjson/dependencies/json/doc/examples/flatten.cpp +32 -0
  684. data/vendor/simdjson/dependencies/json/doc/examples/flatten.link +1 -0
  685. data/vendor/simdjson/dependencies/json/doc/examples/flatten.output +12 -0
  686. data/vendor/simdjson/dependencies/json/doc/examples/from_bson.cpp +21 -0
  687. data/vendor/simdjson/dependencies/json/doc/examples/from_bson.link +1 -0
  688. data/vendor/simdjson/dependencies/json/doc/examples/from_bson.output +4 -0
  689. data/vendor/simdjson/dependencies/json/doc/examples/from_cbor.cpp +20 -0
  690. data/vendor/simdjson/dependencies/json/doc/examples/from_cbor.link +1 -0
  691. data/vendor/simdjson/dependencies/json/doc/examples/from_cbor.output +4 -0
  692. data/vendor/simdjson/dependencies/json/doc/examples/from_msgpack.cpp +20 -0
  693. data/vendor/simdjson/dependencies/json/doc/examples/from_msgpack.link +1 -0
  694. data/vendor/simdjson/dependencies/json/doc/examples/from_msgpack.output +4 -0
  695. data/vendor/simdjson/dependencies/json/doc/examples/from_ubjson.cpp +20 -0
  696. data/vendor/simdjson/dependencies/json/doc/examples/from_ubjson.link +1 -0
  697. data/vendor/simdjson/dependencies/json/doc/examples/from_ubjson.output +4 -0
  698. data/vendor/simdjson/dependencies/json/doc/examples/front.cpp +29 -0
  699. data/vendor/simdjson/dependencies/json/doc/examples/front.link +1 -0
  700. data/vendor/simdjson/dependencies/json/doc/examples/front.output +6 -0
  701. data/vendor/simdjson/dependencies/json/doc/examples/get__PointerType.cpp +21 -0
  702. data/vendor/simdjson/dependencies/json/doc/examples/get__PointerType.link +1 -0
  703. data/vendor/simdjson/dependencies/json/doc/examples/get__PointerType.output +2 -0
  704. data/vendor/simdjson/dependencies/json/doc/examples/get__ValueType_const.cpp +50 -0
  705. data/vendor/simdjson/dependencies/json/doc/examples/get__ValueType_const.link +1 -0
  706. data/vendor/simdjson/dependencies/json/doc/examples/get__ValueType_const.output +11 -0
  707. data/vendor/simdjson/dependencies/json/doc/examples/get_ptr.cpp +21 -0
  708. data/vendor/simdjson/dependencies/json/doc/examples/get_ptr.link +1 -0
  709. data/vendor/simdjson/dependencies/json/doc/examples/get_ptr.output +2 -0
  710. data/vendor/simdjson/dependencies/json/doc/examples/get_ref.cpp +27 -0
  711. data/vendor/simdjson/dependencies/json/doc/examples/get_ref.link +1 -0
  712. data/vendor/simdjson/dependencies/json/doc/examples/get_ref.output +2 -0
  713. data/vendor/simdjson/dependencies/json/doc/examples/get_to.cpp +60 -0
  714. data/vendor/simdjson/dependencies/json/doc/examples/get_to.link +1 -0
  715. data/vendor/simdjson/dependencies/json/doc/examples/get_to.output +11 -0
  716. data/vendor/simdjson/dependencies/json/doc/examples/insert.cpp +17 -0
  717. data/vendor/simdjson/dependencies/json/doc/examples/insert.link +1 -0
  718. data/vendor/simdjson/dependencies/json/doc/examples/insert.output +2 -0
  719. data/vendor/simdjson/dependencies/json/doc/examples/insert__count.cpp +17 -0
  720. data/vendor/simdjson/dependencies/json/doc/examples/insert__count.link +1 -0
  721. data/vendor/simdjson/dependencies/json/doc/examples/insert__count.output +2 -0
  722. data/vendor/simdjson/dependencies/json/doc/examples/insert__ilist.cpp +17 -0
  723. data/vendor/simdjson/dependencies/json/doc/examples/insert__ilist.link +1 -0
  724. data/vendor/simdjson/dependencies/json/doc/examples/insert__ilist.output +2 -0
  725. data/vendor/simdjson/dependencies/json/doc/examples/insert__range.cpp +20 -0
  726. data/vendor/simdjson/dependencies/json/doc/examples/insert__range.link +1 -0
  727. data/vendor/simdjson/dependencies/json/doc/examples/insert__range.output +2 -0
  728. data/vendor/simdjson/dependencies/json/doc/examples/insert__range_object.cpp +21 -0
  729. data/vendor/simdjson/dependencies/json/doc/examples/insert__range_object.link +1 -0
  730. data/vendor/simdjson/dependencies/json/doc/examples/insert__range_object.output +3 -0
  731. data/vendor/simdjson/dependencies/json/doc/examples/invalid_iterator.cpp +21 -0
  732. data/vendor/simdjson/dependencies/json/doc/examples/invalid_iterator.link +1 -0
  733. data/vendor/simdjson/dependencies/json/doc/examples/invalid_iterator.output +2 -0
  734. data/vendor/simdjson/dependencies/json/doc/examples/is_array.cpp +28 -0
  735. data/vendor/simdjson/dependencies/json/doc/examples/is_array.link +1 -0
  736. data/vendor/simdjson/dependencies/json/doc/examples/is_array.output +8 -0
  737. data/vendor/simdjson/dependencies/json/doc/examples/is_boolean.cpp +28 -0
  738. data/vendor/simdjson/dependencies/json/doc/examples/is_boolean.link +1 -0
  739. data/vendor/simdjson/dependencies/json/doc/examples/is_boolean.output +8 -0
  740. data/vendor/simdjson/dependencies/json/doc/examples/is_discarded.cpp +28 -0
  741. data/vendor/simdjson/dependencies/json/doc/examples/is_discarded.link +1 -0
  742. data/vendor/simdjson/dependencies/json/doc/examples/is_discarded.output +8 -0
  743. data/vendor/simdjson/dependencies/json/doc/examples/is_null.cpp +28 -0
  744. data/vendor/simdjson/dependencies/json/doc/examples/is_null.link +1 -0
  745. data/vendor/simdjson/dependencies/json/doc/examples/is_null.output +8 -0
  746. data/vendor/simdjson/dependencies/json/doc/examples/is_number.cpp +28 -0
  747. data/vendor/simdjson/dependencies/json/doc/examples/is_number.link +1 -0
  748. data/vendor/simdjson/dependencies/json/doc/examples/is_number.output +8 -0
  749. data/vendor/simdjson/dependencies/json/doc/examples/is_number_float.cpp +28 -0
  750. data/vendor/simdjson/dependencies/json/doc/examples/is_number_float.link +1 -0
  751. data/vendor/simdjson/dependencies/json/doc/examples/is_number_float.output +8 -0
  752. data/vendor/simdjson/dependencies/json/doc/examples/is_number_integer.cpp +28 -0
  753. data/vendor/simdjson/dependencies/json/doc/examples/is_number_integer.link +1 -0
  754. data/vendor/simdjson/dependencies/json/doc/examples/is_number_integer.output +8 -0
  755. data/vendor/simdjson/dependencies/json/doc/examples/is_number_unsigned.cpp +28 -0
  756. data/vendor/simdjson/dependencies/json/doc/examples/is_number_unsigned.link +1 -0
  757. data/vendor/simdjson/dependencies/json/doc/examples/is_number_unsigned.output +8 -0
  758. data/vendor/simdjson/dependencies/json/doc/examples/is_object.cpp +28 -0
  759. data/vendor/simdjson/dependencies/json/doc/examples/is_object.link +1 -0
  760. data/vendor/simdjson/dependencies/json/doc/examples/is_object.output +8 -0
  761. data/vendor/simdjson/dependencies/json/doc/examples/is_primitive.cpp +28 -0
  762. data/vendor/simdjson/dependencies/json/doc/examples/is_primitive.link +1 -0
  763. data/vendor/simdjson/dependencies/json/doc/examples/is_primitive.output +8 -0
  764. data/vendor/simdjson/dependencies/json/doc/examples/is_string.cpp +28 -0
  765. data/vendor/simdjson/dependencies/json/doc/examples/is_string.link +1 -0
  766. data/vendor/simdjson/dependencies/json/doc/examples/is_string.output +8 -0
  767. data/vendor/simdjson/dependencies/json/doc/examples/is_structured.cpp +28 -0
  768. data/vendor/simdjson/dependencies/json/doc/examples/is_structured.link +1 -0
  769. data/vendor/simdjson/dependencies/json/doc/examples/is_structured.output +8 -0
  770. data/vendor/simdjson/dependencies/json/doc/examples/items.cpp +23 -0
  771. data/vendor/simdjson/dependencies/json/doc/examples/items.link +1 -0
  772. data/vendor/simdjson/dependencies/json/doc/examples/items.output +7 -0
  773. data/vendor/simdjson/dependencies/json/doc/examples/iterator_wrapper.cpp +23 -0
  774. data/vendor/simdjson/dependencies/json/doc/examples/iterator_wrapper.link +1 -0
  775. data/vendor/simdjson/dependencies/json/doc/examples/iterator_wrapper.output +7 -0
  776. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer.cpp +47 -0
  777. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer.link +1 -0
  778. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer.output +3 -0
  779. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__back.cpp +15 -0
  780. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__back.link +1 -0
  781. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__back.output +2 -0
  782. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__empty.cpp +20 -0
  783. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__empty.link +1 -0
  784. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__empty.output +4 -0
  785. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__operator_add.cpp +23 -0
  786. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__operator_add.link +1 -0
  787. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__operator_add.output +4 -0
  788. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__operator_add_binary.cpp +19 -0
  789. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__operator_add_binary.link +1 -0
  790. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__operator_add_binary.output +3 -0
  791. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__parent_pointer.cpp +18 -0
  792. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__parent_pointer.link +1 -0
  793. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__parent_pointer.output +3 -0
  794. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__pop_back.cpp +21 -0
  795. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__pop_back.link +1 -0
  796. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__pop_back.output +4 -0
  797. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__push_back.cpp +21 -0
  798. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__push_back.link +1 -0
  799. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__push_back.output +4 -0
  800. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__to_string.cpp +35 -0
  801. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__to_string.link +1 -0
  802. data/vendor/simdjson/dependencies/json/doc/examples/json_pointer__to_string.output +12 -0
  803. data/vendor/simdjson/dependencies/json/doc/examples/max_size.cpp +25 -0
  804. data/vendor/simdjson/dependencies/json/doc/examples/max_size.link +1 -0
  805. data/vendor/simdjson/dependencies/json/doc/examples/max_size.output +7 -0
  806. data/vendor/simdjson/dependencies/json/doc/examples/merge_patch.cpp +40 -0
  807. data/vendor/simdjson/dependencies/json/doc/examples/merge_patch.link +1 -0
  808. data/vendor/simdjson/dependencies/json/doc/examples/merge_patch.output +11 -0
  809. data/vendor/simdjson/dependencies/json/doc/examples/meta.cpp +11 -0
  810. data/vendor/simdjson/dependencies/json/doc/examples/meta.link +1 -0
  811. data/vendor/simdjson/dependencies/json/doc/examples/meta.output +17 -0
  812. data/vendor/simdjson/dependencies/json/doc/examples/object.cpp +28 -0
  813. data/vendor/simdjson/dependencies/json/doc/examples/object.link +1 -0
  814. data/vendor/simdjson/dependencies/json/doc/examples/object.output +4 -0
  815. data/vendor/simdjson/dependencies/json/doc/examples/operator__ValueType.cpp +60 -0
  816. data/vendor/simdjson/dependencies/json/doc/examples/operator__ValueType.link +1 -0
  817. data/vendor/simdjson/dependencies/json/doc/examples/operator__ValueType.output +12 -0
  818. data/vendor/simdjson/dependencies/json/doc/examples/operator__equal.cpp +24 -0
  819. data/vendor/simdjson/dependencies/json/doc/examples/operator__equal.link +1 -0
  820. data/vendor/simdjson/dependencies/json/doc/examples/operator__equal.output +4 -0
  821. data/vendor/simdjson/dependencies/json/doc/examples/operator__equal__nullptr_t.cpp +22 -0
  822. data/vendor/simdjson/dependencies/json/doc/examples/operator__equal__nullptr_t.link +1 -0
  823. data/vendor/simdjson/dependencies/json/doc/examples/operator__equal__nullptr_t.output +5 -0
  824. data/vendor/simdjson/dependencies/json/doc/examples/operator__greater.cpp +24 -0
  825. data/vendor/simdjson/dependencies/json/doc/examples/operator__greater.link +1 -0
  826. data/vendor/simdjson/dependencies/json/doc/examples/operator__greater.output +4 -0
  827. data/vendor/simdjson/dependencies/json/doc/examples/operator__greaterequal.cpp +24 -0
  828. data/vendor/simdjson/dependencies/json/doc/examples/operator__greaterequal.link +1 -0
  829. data/vendor/simdjson/dependencies/json/doc/examples/operator__greaterequal.output +4 -0
  830. data/vendor/simdjson/dependencies/json/doc/examples/operator__less.cpp +24 -0
  831. data/vendor/simdjson/dependencies/json/doc/examples/operator__less.link +1 -0
  832. data/vendor/simdjson/dependencies/json/doc/examples/operator__less.output +4 -0
  833. data/vendor/simdjson/dependencies/json/doc/examples/operator__lessequal.cpp +24 -0
  834. data/vendor/simdjson/dependencies/json/doc/examples/operator__lessequal.link +1 -0
  835. data/vendor/simdjson/dependencies/json/doc/examples/operator__lessequal.output +4 -0
  836. data/vendor/simdjson/dependencies/json/doc/examples/operator__notequal.cpp +24 -0
  837. data/vendor/simdjson/dependencies/json/doc/examples/operator__notequal.link +1 -0
  838. data/vendor/simdjson/dependencies/json/doc/examples/operator__notequal.output +4 -0
  839. data/vendor/simdjson/dependencies/json/doc/examples/operator__notequal__nullptr_t.cpp +22 -0
  840. data/vendor/simdjson/dependencies/json/doc/examples/operator__notequal__nullptr_t.link +1 -0
  841. data/vendor/simdjson/dependencies/json/doc/examples/operator__notequal__nullptr_t.output +5 -0
  842. data/vendor/simdjson/dependencies/json/doc/examples/operator__value_t.cpp +38 -0
  843. data/vendor/simdjson/dependencies/json/doc/examples/operator__value_t.link +1 -0
  844. data/vendor/simdjson/dependencies/json/doc/examples/operator__value_t.output +8 -0
  845. data/vendor/simdjson/dependencies/json/doc/examples/operator_deserialize.cpp +26 -0
  846. data/vendor/simdjson/dependencies/json/doc/examples/operator_deserialize.link +1 -0
  847. data/vendor/simdjson/dependencies/json/doc/examples/operator_deserialize.output +13 -0
  848. data/vendor/simdjson/dependencies/json/doc/examples/operator_serialize.cpp +21 -0
  849. data/vendor/simdjson/dependencies/json/doc/examples/operator_serialize.link +1 -0
  850. data/vendor/simdjson/dependencies/json/doc/examples/operator_serialize.output +22 -0
  851. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__key_type.cpp +32 -0
  852. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__key_type.link +1 -0
  853. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__key_type.output +19 -0
  854. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__key_type_const.cpp +16 -0
  855. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__key_type_const.link +1 -0
  856. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__key_type_const.output +1 -0
  857. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__size_type.cpp +25 -0
  858. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__size_type.link +1 -0
  859. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__size_type.output +3 -0
  860. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__size_type_const.cpp +13 -0
  861. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__size_type_const.link +1 -0
  862. data/vendor/simdjson/dependencies/json/doc/examples/operatorarray__size_type_const.output +1 -0
  863. data/vendor/simdjson/dependencies/json/doc/examples/operatorjson_pointer.cpp +48 -0
  864. data/vendor/simdjson/dependencies/json/doc/examples/operatorjson_pointer.link +1 -0
  865. data/vendor/simdjson/dependencies/json/doc/examples/operatorjson_pointer.output +8 -0
  866. data/vendor/simdjson/dependencies/json/doc/examples/operatorjson_pointer_const.cpp +24 -0
  867. data/vendor/simdjson/dependencies/json/doc/examples/operatorjson_pointer_const.link +1 -0
  868. data/vendor/simdjson/dependencies/json/doc/examples/operatorjson_pointer_const.output +4 -0
  869. data/vendor/simdjson/dependencies/json/doc/examples/other_error.cpp +29 -0
  870. data/vendor/simdjson/dependencies/json/doc/examples/other_error.link +1 -0
  871. data/vendor/simdjson/dependencies/json/doc/examples/other_error.output +2 -0
  872. data/vendor/simdjson/dependencies/json/doc/examples/out_of_range.cpp +20 -0
  873. data/vendor/simdjson/dependencies/json/doc/examples/out_of_range.link +1 -0
  874. data/vendor/simdjson/dependencies/json/doc/examples/out_of_range.output +2 -0
  875. data/vendor/simdjson/dependencies/json/doc/examples/parse__array__parser_callback_t.cpp +30 -0
  876. data/vendor/simdjson/dependencies/json/doc/examples/parse__array__parser_callback_t.link +1 -0
  877. data/vendor/simdjson/dependencies/json/doc/examples/parse__array__parser_callback_t.output +20 -0
  878. data/vendor/simdjson/dependencies/json/doc/examples/parse__contiguouscontainer__parser_callback_t.cpp +15 -0
  879. data/vendor/simdjson/dependencies/json/doc/examples/parse__contiguouscontainer__parser_callback_t.link +1 -0
  880. data/vendor/simdjson/dependencies/json/doc/examples/parse__contiguouscontainer__parser_callback_t.output +6 -0
  881. data/vendor/simdjson/dependencies/json/doc/examples/parse__istream__parser_callback_t.cpp +58 -0
  882. data/vendor/simdjson/dependencies/json/doc/examples/parse__istream__parser_callback_t.link +1 -0
  883. data/vendor/simdjson/dependencies/json/doc/examples/parse__istream__parser_callback_t.output +34 -0
  884. data/vendor/simdjson/dependencies/json/doc/examples/parse__iteratortype__parser_callback_t.cpp +15 -0
  885. data/vendor/simdjson/dependencies/json/doc/examples/parse__iteratortype__parser_callback_t.link +1 -0
  886. data/vendor/simdjson/dependencies/json/doc/examples/parse__iteratortype__parser_callback_t.output +6 -0
  887. data/vendor/simdjson/dependencies/json/doc/examples/parse__string__parser_callback_t.cpp +49 -0
  888. data/vendor/simdjson/dependencies/json/doc/examples/parse__string__parser_callback_t.link +1 -0
  889. data/vendor/simdjson/dependencies/json/doc/examples/parse__string__parser_callback_t.output +34 -0
  890. data/vendor/simdjson/dependencies/json/doc/examples/parse_error.cpp +20 -0
  891. data/vendor/simdjson/dependencies/json/doc/examples/parse_error.link +1 -0
  892. data/vendor/simdjson/dependencies/json/doc/examples/parse_error.output +3 -0
  893. data/vendor/simdjson/dependencies/json/doc/examples/patch.cpp +32 -0
  894. data/vendor/simdjson/dependencies/json/doc/examples/patch.link +1 -0
  895. data/vendor/simdjson/dependencies/json/doc/examples/patch.output +11 -0
  896. data/vendor/simdjson/dependencies/json/doc/examples/push_back.cpp +25 -0
  897. data/vendor/simdjson/dependencies/json/doc/examples/push_back.link +1 -0
  898. data/vendor/simdjson/dependencies/json/doc/examples/push_back.output +4 -0
  899. data/vendor/simdjson/dependencies/json/doc/examples/push_back__initializer_list.cpp +27 -0
  900. data/vendor/simdjson/dependencies/json/doc/examples/push_back__initializer_list.link +1 -0
  901. data/vendor/simdjson/dependencies/json/doc/examples/push_back__initializer_list.output +4 -0
  902. data/vendor/simdjson/dependencies/json/doc/examples/push_back__object_t__value.cpp +25 -0
  903. data/vendor/simdjson/dependencies/json/doc/examples/push_back__object_t__value.link +1 -0
  904. data/vendor/simdjson/dependencies/json/doc/examples/push_back__object_t__value.output +4 -0
  905. data/vendor/simdjson/dependencies/json/doc/examples/rbegin.cpp +16 -0
  906. data/vendor/simdjson/dependencies/json/doc/examples/rbegin.link +1 -0
  907. data/vendor/simdjson/dependencies/json/doc/examples/rbegin.output +1 -0
  908. data/vendor/simdjson/dependencies/json/doc/examples/rend.cpp +19 -0
  909. data/vendor/simdjson/dependencies/json/doc/examples/rend.link +1 -0
  910. data/vendor/simdjson/dependencies/json/doc/examples/rend.output +1 -0
  911. data/vendor/simdjson/dependencies/json/doc/examples/sax_parse.cpp +124 -0
  912. data/vendor/simdjson/dependencies/json/doc/examples/sax_parse.link +1 -0
  913. data/vendor/simdjson/dependencies/json/doc/examples/sax_parse.output +2 -0
  914. data/vendor/simdjson/dependencies/json/doc/examples/size.cpp +29 -0
  915. data/vendor/simdjson/dependencies/json/doc/examples/size.link +1 -0
  916. data/vendor/simdjson/dependencies/json/doc/examples/size.output +9 -0
  917. data/vendor/simdjson/dependencies/json/doc/examples/swap__array_t.cpp +20 -0
  918. data/vendor/simdjson/dependencies/json/doc/examples/swap__array_t.link +1 -0
  919. data/vendor/simdjson/dependencies/json/doc/examples/swap__array_t.output +2 -0
  920. data/vendor/simdjson/dependencies/json/doc/examples/swap__object_t.cpp +20 -0
  921. data/vendor/simdjson/dependencies/json/doc/examples/swap__object_t.link +1 -0
  922. data/vendor/simdjson/dependencies/json/doc/examples/swap__object_t.output +2 -0
  923. data/vendor/simdjson/dependencies/json/doc/examples/swap__reference.cpp +18 -0
  924. data/vendor/simdjson/dependencies/json/doc/examples/swap__reference.link +1 -0
  925. data/vendor/simdjson/dependencies/json/doc/examples/swap__reference.output +2 -0
  926. data/vendor/simdjson/dependencies/json/doc/examples/swap__string_t.cpp +20 -0
  927. data/vendor/simdjson/dependencies/json/doc/examples/swap__string_t.link +1 -0
  928. data/vendor/simdjson/dependencies/json/doc/examples/swap__string_t.output +2 -0
  929. data/vendor/simdjson/dependencies/json/doc/examples/to_bson.cpp +21 -0
  930. data/vendor/simdjson/dependencies/json/doc/examples/to_bson.link +1 -0
  931. data/vendor/simdjson/dependencies/json/doc/examples/to_bson.output +1 -0
  932. data/vendor/simdjson/dependencies/json/doc/examples/to_cbor.cpp +21 -0
  933. data/vendor/simdjson/dependencies/json/doc/examples/to_cbor.link +1 -0
  934. data/vendor/simdjson/dependencies/json/doc/examples/to_cbor.output +1 -0
  935. data/vendor/simdjson/dependencies/json/doc/examples/to_msgpack.cpp +21 -0
  936. data/vendor/simdjson/dependencies/json/doc/examples/to_msgpack.link +1 -0
  937. data/vendor/simdjson/dependencies/json/doc/examples/to_msgpack.output +1 -0
  938. data/vendor/simdjson/dependencies/json/doc/examples/to_ubjson.cpp +63 -0
  939. data/vendor/simdjson/dependencies/json/doc/examples/to_ubjson.link +1 -0
  940. data/vendor/simdjson/dependencies/json/doc/examples/to_ubjson.output +4 -0
  941. data/vendor/simdjson/dependencies/json/doc/examples/type.cpp +28 -0
  942. data/vendor/simdjson/dependencies/json/doc/examples/type.link +1 -0
  943. data/vendor/simdjson/dependencies/json/doc/examples/type.output +8 -0
  944. data/vendor/simdjson/dependencies/json/doc/examples/type_error.cpp +20 -0
  945. data/vendor/simdjson/dependencies/json/doc/examples/type_error.link +1 -0
  946. data/vendor/simdjson/dependencies/json/doc/examples/type_error.output +2 -0
  947. data/vendor/simdjson/dependencies/json/doc/examples/type_name.cpp +27 -0
  948. data/vendor/simdjson/dependencies/json/doc/examples/type_name.link +1 -0
  949. data/vendor/simdjson/dependencies/json/doc/examples/type_name.output +8 -0
  950. data/vendor/simdjson/dependencies/json/doc/examples/unflatten.cpp +26 -0
  951. data/vendor/simdjson/dependencies/json/doc/examples/unflatten.link +1 -0
  952. data/vendor/simdjson/dependencies/json/doc/examples/unflatten.output +18 -0
  953. data/vendor/simdjson/dependencies/json/doc/examples/update.cpp +18 -0
  954. data/vendor/simdjson/dependencies/json/doc/examples/update.link +1 -0
  955. data/vendor/simdjson/dependencies/json/doc/examples/update.output +5 -0
  956. data/vendor/simdjson/dependencies/json/doc/examples/update__range.cpp +18 -0
  957. data/vendor/simdjson/dependencies/json/doc/examples/update__range.link +1 -0
  958. data/vendor/simdjson/dependencies/json/doc/examples/update__range.output +5 -0
  959. data/vendor/simdjson/dependencies/json/doc/faq.md +87 -0
  960. data/vendor/simdjson/dependencies/json/doc/images/binary.png +0 -0
  961. data/vendor/simdjson/dependencies/json/doc/images/callback_events.png +0 -0
  962. data/vendor/simdjson/dependencies/json/doc/images/range-begin-end.svg +435 -0
  963. data/vendor/simdjson/dependencies/json/doc/images/range-rbegin-rend.svg +1232 -0
  964. data/vendor/simdjson/dependencies/json/doc/index.md +332 -0
  965. data/vendor/simdjson/dependencies/json/doc/json.gif +0 -0
  966. data/vendor/simdjson/dependencies/json/doc/scripts/git-update-ghpages +193 -0
  967. data/vendor/simdjson/dependencies/json/doc/scripts/send_to_wandbox.py +120 -0
  968. data/vendor/simdjson/dependencies/json/doc/usages/ios.png +0 -0
  969. data/vendor/simdjson/dependencies/json/doc/usages/macos.png +0 -0
  970. data/vendor/simdjson/dependencies/json/include/nlohmann/adl_serializer.hpp +49 -0
  971. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/conversions/from_json.hpp +389 -0
  972. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/conversions/to_chars.hpp +1106 -0
  973. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/conversions/to_json.hpp +344 -0
  974. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/exceptions.hpp +356 -0
  975. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/input/binary_reader.hpp +1983 -0
  976. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/input/input_adapters.hpp +442 -0
  977. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/input/json_sax.hpp +701 -0
  978. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/input/lexer.hpp +1512 -0
  979. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/input/parser.hpp +498 -0
  980. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/input/position_t.hpp +27 -0
  981. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/iterators/internal_iterator.hpp +25 -0
  982. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/iterators/iter_impl.hpp +638 -0
  983. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/iterators/iteration_proxy.hpp +170 -0
  984. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/iterators/iterator_traits.hpp +51 -0
  985. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/iterators/json_reverse_iterator.hpp +119 -0
  986. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/iterators/primitive_iterator.hpp +120 -0
  987. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/json_pointer.hpp +1011 -0
  988. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/json_ref.hpp +69 -0
  989. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/macro_scope.hpp +121 -0
  990. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/macro_unscope.hpp +21 -0
  991. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/meta/cpp_future.hpp +63 -0
  992. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/meta/detected.hpp +58 -0
  993. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/meta/is_sax.hpp +142 -0
  994. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/meta/type_traits.hpp +361 -0
  995. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/meta/void_t.hpp +13 -0
  996. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/output/binary_writer.hpp +1336 -0
  997. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/output/output_adapters.hpp +123 -0
  998. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/output/serializer.hpp +840 -0
  999. data/vendor/simdjson/dependencies/json/include/nlohmann/detail/value_t.hpp +77 -0
  1000. data/vendor/simdjson/dependencies/json/include/nlohmann/json.hpp +8134 -0
  1001. data/vendor/simdjson/dependencies/json/include/nlohmann/json_fwd.hpp +64 -0
  1002. data/vendor/simdjson/dependencies/json/include/nlohmann/thirdparty/hedley/hedley.hpp +1505 -0
  1003. data/vendor/simdjson/dependencies/json/include/nlohmann/thirdparty/hedley/hedley_undef.hpp +121 -0
  1004. data/vendor/simdjson/dependencies/json/meson.build +23 -0
  1005. data/vendor/simdjson/dependencies/json/nlohmann_json.natvis +32 -0
  1006. data/vendor/simdjson/dependencies/json/single_include/nlohmann/json.hpp +22684 -0
  1007. data/vendor/simdjson/dependencies/json/test/CMakeLists.txt +150 -0
  1008. data/vendor/simdjson/dependencies/json/test/Makefile +110 -0
  1009. data/vendor/simdjson/dependencies/json/test/cmake_add_subdirectory/CMakeLists.txt +15 -0
  1010. data/vendor/simdjson/dependencies/json/test/cmake_add_subdirectory/project/CMakeLists.txt +13 -0
  1011. data/vendor/simdjson/dependencies/json/test/cmake_add_subdirectory/project/main.cpp +8 -0
  1012. data/vendor/simdjson/dependencies/json/test/cmake_import/CMakeLists.txt +15 -0
  1013. data/vendor/simdjson/dependencies/json/test/cmake_import/project/CMakeLists.txt +12 -0
  1014. data/vendor/simdjson/dependencies/json/test/cmake_import/project/main.cpp +8 -0
  1015. data/vendor/simdjson/dependencies/json/test/cmake_import_minver/CMakeLists.txt +15 -0
  1016. data/vendor/simdjson/dependencies/json/test/cmake_import_minver/project/CMakeLists.txt +8 -0
  1017. data/vendor/simdjson/dependencies/json/test/cmake_import_minver/project/main.cpp +8 -0
  1018. data/vendor/simdjson/dependencies/json/test/data/big-list-of-naughty-strings/LICENSE +22 -0
  1019. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test01 +1 -0
  1020. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test02 +0 -0
  1021. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test03 +0 -0
  1022. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test04 +0 -0
  1023. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test05 +0 -0
  1024. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test06 +0 -0
  1025. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test07 +0 -0
  1026. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test08 +0 -0
  1027. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test09 +0 -0
  1028. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test10 +1 -0
  1029. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test11 +0 -0
  1030. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test12 +0 -0
  1031. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test13 +0 -0
  1032. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test14 +0 -0
  1033. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test15 +0 -0
  1034. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test16 +0 -0
  1035. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test17 +0 -0
  1036. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test18 +0 -0
  1037. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test19 +0 -0
  1038. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test20 +0 -0
  1039. data/vendor/simdjson/dependencies/json/test/data/cbor_regression/test21 +0 -0
  1040. data/vendor/simdjson/dependencies/json/test/data/json-patch-tests/README.md +75 -0
  1041. data/vendor/simdjson/dependencies/json/test/data/json.org/1.json.bson +0 -0
  1042. data/vendor/simdjson/dependencies/json/test/data/json.org/1.json.cbor +1 -0
  1043. data/vendor/simdjson/dependencies/json/test/data/json.org/1.json.msgpack +0 -0
  1044. data/vendor/simdjson/dependencies/json/test/data/json.org/2.json.bson +0 -0
  1045. data/vendor/simdjson/dependencies/json/test/data/json.org/2.json.cbor +1 -0
  1046. data/vendor/simdjson/dependencies/json/test/data/json.org/2.json.msgpack +1 -0
  1047. data/vendor/simdjson/dependencies/json/test/data/json.org/3.json.bson +0 -0
  1048. data/vendor/simdjson/dependencies/json/test/data/json.org/3.json.cbor +1 -0
  1049. data/vendor/simdjson/dependencies/json/test/data/json.org/3.json.msgpack +0 -0
  1050. data/vendor/simdjson/dependencies/json/test/data/json.org/4.json.bson +0 -0
  1051. data/vendor/simdjson/dependencies/json/test/data/json.org/4.json.cbor +4 -0
  1052. data/vendor/simdjson/dependencies/json/test/data/json.org/4.json.msgpack +0 -0
  1053. data/vendor/simdjson/dependencies/json/test/data/json.org/5.json.bson +0 -0
  1054. data/vendor/simdjson/dependencies/json/test/data/json.org/5.json.cbor +1 -0
  1055. data/vendor/simdjson/dependencies/json/test/data/json.org/5.json.msgpack +0 -0
  1056. data/vendor/simdjson/dependencies/json/test/data/json_nlohmann_tests/all_unicode.json.cbor +0 -0
  1057. data/vendor/simdjson/dependencies/json/test/data/json_nlohmann_tests/all_unicode.json.msgpack +0 -0
  1058. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip01.json.cbor +1 -0
  1059. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip01.json.msgpack +1 -0
  1060. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip02.json.cbor +1 -0
  1061. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip02.json.msgpack +1 -0
  1062. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip03.json.cbor +1 -0
  1063. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip03.json.msgpack +1 -0
  1064. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip04.json.cbor +0 -0
  1065. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip04.json.msgpack +0 -0
  1066. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip05.json.cbor +1 -0
  1067. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip05.json.msgpack +1 -0
  1068. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip06.json.cbor +1 -0
  1069. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip06.json.msgpack +1 -0
  1070. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip07.json.cbor +1 -0
  1071. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip07.json.msgpack +1 -0
  1072. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip08.json.cbor +0 -0
  1073. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip08.json.msgpack +0 -0
  1074. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip09.json.cbor +1 -0
  1075. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip09.json.msgpack +1 -0
  1076. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip10.json.cbor +1 -0
  1077. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip10.json.msgpack +1 -0
  1078. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip11.json.cbor +1 -0
  1079. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip11.json.msgpack +1 -0
  1080. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip12.json.cbor +1 -0
  1081. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip12.json.msgpack +0 -0
  1082. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip13.json.cbor +1 -0
  1083. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip13.json.msgpack +1 -0
  1084. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip14.json.cbor +1 -0
  1085. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip14.json.msgpack +0 -0
  1086. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip15.json.cbor +1 -0
  1087. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip15.json.msgpack +1 -0
  1088. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip16.json.cbor +1 -0
  1089. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip16.json.msgpack +1 -0
  1090. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip17.json.cbor +1 -0
  1091. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip17.json.msgpack +1 -0
  1092. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip18.json.cbor +1 -0
  1093. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip18.json.msgpack +1 -0
  1094. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip19.json.cbor +1 -0
  1095. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip19.json.msgpack +1 -0
  1096. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip20.json.cbor +0 -0
  1097. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip20.json.msgpack +0 -0
  1098. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip21.json.cbor +0 -0
  1099. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip21.json.msgpack +0 -0
  1100. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip22.json.cbor +1 -0
  1101. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip22.json.msgpack +1 -0
  1102. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip23.json.cbor +1 -0
  1103. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip23.json.msgpack +1 -0
  1104. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip24.json.cbor +0 -0
  1105. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip24.json.msgpack +0 -0
  1106. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip25.json.cbor +0 -0
  1107. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip25.json.msgpack +0 -0
  1108. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip26.json.cbor +0 -0
  1109. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip26.json.msgpack +0 -0
  1110. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip27.json.cbor +1 -0
  1111. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip27.json.msgpack +1 -0
  1112. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip28.json.cbor +0 -0
  1113. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip28.json.msgpack +0 -0
  1114. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip29.json.cbor +0 -0
  1115. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip29.json.msgpack +0 -0
  1116. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip30.json.cbor +1 -0
  1117. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip30.json.msgpack +1 -0
  1118. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip31.json.cbor +1 -0
  1119. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip31.json.msgpack +1 -0
  1120. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip32.json.cbor +1 -0
  1121. data/vendor/simdjson/dependencies/json/test/data/json_roundtrip/roundtrip32.json.msgpack +1 -0
  1122. data/vendor/simdjson/dependencies/json/test/data/json_tests/pass1.json.cbor +0 -0
  1123. data/vendor/simdjson/dependencies/json/test/data/json_tests/pass1.json.msgpack +0 -0
  1124. data/vendor/simdjson/dependencies/json/test/data/json_tests/pass2.json.cbor +1 -0
  1125. data/vendor/simdjson/dependencies/json/test/data/json_tests/pass2.json.msgpack +1 -0
  1126. data/vendor/simdjson/dependencies/json/test/data/json_tests/pass3.json.bson +0 -0
  1127. data/vendor/simdjson/dependencies/json/test/data/json_tests/pass3.json.cbor +1 -0
  1128. data/vendor/simdjson/dependencies/json/test/data/json_tests/pass3.json.msgpack +1 -0
  1129. data/vendor/simdjson/dependencies/json/test/data/json_testsuite/README.md +10 -0
  1130. data/vendor/simdjson/dependencies/json/test/data/json_testsuite/sample.json.cbor +0 -0
  1131. data/vendor/simdjson/dependencies/json/test/data/json_testsuite/sample.json.msgpack +0 -0
  1132. data/vendor/simdjson/dependencies/json/test/data/markus_kuhn/UTF-8-test.txt +0 -0
  1133. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/LICENSE +21 -0
  1134. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_arraysWithSpaces.json.cbor +1 -0
  1135. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_arraysWithSpaces.json.msgpack +1 -0
  1136. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_empty-string.json.cbor +1 -0
  1137. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_empty-string.json.msgpack +1 -0
  1138. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_empty.json.cbor +1 -0
  1139. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_empty.json.msgpack +1 -0
  1140. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_ending_with_newline.json.cbor +1 -0
  1141. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_ending_with_newline.json.msgpack +1 -0
  1142. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_false.json.cbor +1 -0
  1143. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_false.json.msgpack +1 -0
  1144. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_heterogeneous.json.cbor +1 -0
  1145. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_heterogeneous.json.msgpack +1 -0
  1146. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_null.json.cbor +1 -0
  1147. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_null.json.msgpack +1 -0
  1148. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_with_1_and_newline.json.cbor +1 -0
  1149. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_with_1_and_newline.json.msgpack +1 -0
  1150. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_with_leading_space.json.cbor +1 -0
  1151. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_with_leading_space.json.msgpack +1 -0
  1152. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_with_several_null.json.cbor +1 -0
  1153. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_with_several_null.json.msgpack +1 -0
  1154. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_with_trailing_space.json.cbor +1 -0
  1155. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_array_with_trailing_space.json.msgpack +1 -0
  1156. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number.json.cbor +1 -0
  1157. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number.json.msgpack +1 -0
  1158. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_0e+1.json.cbor +0 -0
  1159. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_0e+1.json.msgpack +0 -0
  1160. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_0e1.json.cbor +0 -0
  1161. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_0e1.json.msgpack +0 -0
  1162. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_after_space.json.cbor +1 -0
  1163. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_after_space.json.msgpack +1 -0
  1164. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_double_close_to_zero.json.cbor +1 -0
  1165. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_double_close_to_zero.json.msgpack +1 -0
  1166. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_double_huge_neg_exp.json.cbor +0 -0
  1167. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_double_huge_neg_exp.json.msgpack +0 -0
  1168. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_huge_exp.json.cbor +0 -0
  1169. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_huge_exp.json.msgpack +0 -0
  1170. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_int_with_exp.json.cbor +0 -0
  1171. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_int_with_exp.json.msgpack +0 -0
  1172. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_minus_zero.json.cbor +0 -0
  1173. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_minus_zero.json.msgpack +0 -0
  1174. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_negative_int.json.cbor +1 -0
  1175. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_negative_int.json.msgpack +1 -0
  1176. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_negative_one.json.cbor +1 -0
  1177. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_negative_one.json.msgpack +1 -0
  1178. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_negative_zero.json.cbor +0 -0
  1179. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_negative_zero.json.msgpack +0 -0
  1180. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_capital_e.json.cbor +1 -0
  1181. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_capital_e.json.msgpack +1 -0
  1182. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_capital_e_neg_exp.json.cbor +1 -0
  1183. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_capital_e_neg_exp.json.msgpack +1 -0
  1184. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_capital_e_pos_exp.json.cbor +0 -0
  1185. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_capital_e_pos_exp.json.msgpack +0 -0
  1186. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_exponent.json.cbor +0 -0
  1187. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_exponent.json.msgpack +0 -0
  1188. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_fraction_exponent.json.cbor +1 -0
  1189. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_fraction_exponent.json.msgpack +1 -0
  1190. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_neg_exp.json.cbor +1 -0
  1191. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_neg_exp.json.msgpack +1 -0
  1192. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_neg_overflow.json.cbor +0 -0
  1193. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_neg_overflow.json.msgpack +0 -0
  1194. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_pos_exponent.json.cbor +0 -0
  1195. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_pos_exponent.json.msgpack +0 -0
  1196. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_pos_overflow.json.cbor +0 -0
  1197. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_pos_overflow.json.msgpack +0 -0
  1198. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_underflow.json.cbor +0 -0
  1199. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_real_underflow.json.msgpack +0 -0
  1200. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_simple_int.json.cbor +1 -0
  1201. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_simple_int.json.msgpack +1 -0
  1202. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_simple_real.json.cbor +1 -0
  1203. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_simple_real.json.msgpack +1 -0
  1204. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_number_too_big_neg_int.json.cbor +1 -0
  1205. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object.json.cbor +1 -0
  1206. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object.json.msgpack +1 -0
  1207. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_basic.json.cbor +1 -0
  1208. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_basic.json.msgpack +1 -0
  1209. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_duplicated_key.json.cbor +1 -0
  1210. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_duplicated_key.json.msgpack +1 -0
  1211. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_duplicated_key_and_value.json.cbor +1 -0
  1212. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_duplicated_key_and_value.json.msgpack +1 -0
  1213. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_empty.json.cbor +1 -0
  1214. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_empty.json.msgpack +1 -0
  1215. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_empty_key.json.cbor +0 -0
  1216. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_empty_key.json.msgpack +0 -0
  1217. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_escaped_null_in_key.json.cbor +0 -0
  1218. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_escaped_null_in_key.json.msgpack +0 -0
  1219. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_extreme_numbers.json.cbor +1 -0
  1220. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_extreme_numbers.json.msgpack +1 -0
  1221. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_long_strings.json.cbor +1 -0
  1222. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_long_strings.json.msgpack +0 -0
  1223. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_simple.json.cbor +1 -0
  1224. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_simple.json.msgpack +1 -0
  1225. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_string_unicode.json.cbor +1 -0
  1226. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_string_unicode.json.msgpack +0 -0
  1227. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_with_newlines.json.cbor +1 -0
  1228. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_object_with_newlines.json.msgpack +1 -0
  1229. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json.cbor +1 -0
  1230. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json.msgpack +1 -0
  1231. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json.cbor +1 -0
  1232. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json.msgpack +1 -0
  1233. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pair.json.cbor +1 -0
  1234. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pair.json.msgpack +1 -0
  1235. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pairs.json.cbor +1 -0
  1236. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pairs.json.msgpack +1 -0
  1237. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_allowed_escapes.json.cbor +2 -0
  1238. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_allowed_escapes.json.msgpack +2 -0
  1239. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_backslash_and_u_escaped_zero.json.cbor +1 -0
  1240. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_backslash_and_u_escaped_zero.json.msgpack +1 -0
  1241. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_backslash_doublequotes.json.cbor +1 -0
  1242. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_backslash_doublequotes.json.msgpack +1 -0
  1243. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_comments.json.cbor +1 -0
  1244. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_comments.json.msgpack +1 -0
  1245. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_double_escape_a.json.cbor +1 -0
  1246. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_double_escape_a.json.msgpack +1 -0
  1247. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_double_escape_n.json.cbor +1 -0
  1248. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_double_escape_n.json.msgpack +1 -0
  1249. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_escaped_control_character.json.cbor +1 -0
  1250. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_escaped_control_character.json.msgpack +1 -0
  1251. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_escaped_noncharacter.json.cbor +1 -0
  1252. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_escaped_noncharacter.json.msgpack +1 -0
  1253. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_in_array.json.cbor +1 -0
  1254. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_in_array.json.msgpack +1 -0
  1255. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_in_array_with_leading_space.json.cbor +1 -0
  1256. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_in_array_with_leading_space.json.msgpack +1 -0
  1257. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_last_surrogates_1_and_2.json.cbor +1 -0
  1258. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_last_surrogates_1_and_2.json.msgpack +1 -0
  1259. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_newline_uescaped.json.cbor +1 -0
  1260. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_newline_uescaped.json.msgpack +1 -0
  1261. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json.cbor +1 -0
  1262. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json.msgpack +1 -0
  1263. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json.cbor +1 -0
  1264. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json.msgpack +1 -0
  1265. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json.cbor +1 -0
  1266. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json.msgpack +1 -0
  1267. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_null_escape.json.cbor +0 -0
  1268. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_null_escape.json.msgpack +0 -0
  1269. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_one-byte-utf-8.json.cbor +1 -0
  1270. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_one-byte-utf-8.json.msgpack +1 -0
  1271. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_pi.json.cbor +1 -0
  1272. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_pi.json.msgpack +1 -0
  1273. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_simple_ascii.json.cbor +1 -0
  1274. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_simple_ascii.json.msgpack +1 -0
  1275. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_space.json.cbor +1 -0
  1276. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_space.json.msgpack +1 -0
  1277. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_three-byte-utf-8.json.cbor +1 -0
  1278. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_three-byte-utf-8.json.msgpack +1 -0
  1279. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_two-byte-utf-8.json.cbor +1 -0
  1280. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_two-byte-utf-8.json.msgpack +1 -0
  1281. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_u+2028_line_sep.json.cbor +1 -0
  1282. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_u+2028_line_sep.json.msgpack +1 -0
  1283. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_u+2029_par_sep.json.cbor +1 -0
  1284. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_u+2029_par_sep.json.msgpack +1 -0
  1285. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_uEscape.json.cbor +1 -0
  1286. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_uEscape.json.msgpack +1 -0
  1287. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unescaped_char_delete.json.cbor +1 -0
  1288. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unescaped_char_delete.json.msgpack +1 -0
  1289. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicode.json.cbor +1 -0
  1290. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicode.json.msgpack +1 -0
  1291. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicodeEscapedBackslash.json.cbor +1 -0
  1292. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicodeEscapedBackslash.json.msgpack +1 -0
  1293. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicode_2.json.cbor +1 -0
  1294. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicode_2.json.msgpack +1 -0
  1295. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json.cbor +1 -0
  1296. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json.msgpack +1 -0
  1297. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicode_U+2064_invisible_plus.json.cbor +1 -0
  1298. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicode_U+2064_invisible_plus.json.msgpack +1 -0
  1299. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicode_escaped_double_quote.json.cbor +1 -0
  1300. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_unicode_escaped_double_quote.json.msgpack +1 -0
  1301. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_utf8.json.cbor +1 -0
  1302. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_utf8.json.msgpack +1 -0
  1303. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_with_del_character.json.cbor +1 -0
  1304. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_string_with_del_character.json.msgpack +1 -0
  1305. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_false.json.cbor +1 -0
  1306. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_false.json.msgpack +1 -0
  1307. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_int.json.cbor +1 -0
  1308. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_int.json.msgpack +1 -0
  1309. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_negative_real.json.cbor +1 -0
  1310. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_negative_real.json.msgpack +1 -0
  1311. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_null.json.cbor +1 -0
  1312. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_null.json.msgpack +1 -0
  1313. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_string.json.cbor +1 -0
  1314. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_string.json.msgpack +1 -0
  1315. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_true.json.cbor +1 -0
  1316. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_lonely_true.json.msgpack +1 -0
  1317. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_string_empty.json.cbor +1 -0
  1318. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_string_empty.json.msgpack +1 -0
  1319. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_trailing_newline.json.cbor +1 -0
  1320. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_trailing_newline.json.msgpack +1 -0
  1321. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_true_in_array.json.cbor +1 -0
  1322. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_true_in_array.json.msgpack +1 -0
  1323. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_whitespace_array.json.cbor +1 -0
  1324. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite/test_parsing/y_structure_whitespace_array.json.msgpack +1 -0
  1325. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite2/LICENSE +21 -0
  1326. data/vendor/simdjson/dependencies/json/test/data/nst_json_testsuite2/README.md +55 -0
  1327. data/vendor/simdjson/dependencies/json/test/data/regression/floats.json.cbor +0 -0
  1328. data/vendor/simdjson/dependencies/json/test/data/regression/floats.json.msgpack +0 -0
  1329. data/vendor/simdjson/dependencies/json/test/data/regression/signed_ints.json.cbor +0 -0
  1330. data/vendor/simdjson/dependencies/json/test/data/regression/signed_ints.json.msgpack +0 -0
  1331. data/vendor/simdjson/dependencies/json/test/data/regression/unsigned_ints.json.cbor +0 -0
  1332. data/vendor/simdjson/dependencies/json/test/data/regression/unsigned_ints.json.msgpack +0 -0
  1333. data/vendor/simdjson/dependencies/json/test/data/regression/working_file.json.cbor +1 -0
  1334. data/vendor/simdjson/dependencies/json/test/data/regression/working_file.json.msgpack +1 -0
  1335. data/vendor/simdjson/dependencies/json/test/reports/2016-08-29-fuzz/exec_speed.png +0 -0
  1336. data/vendor/simdjson/dependencies/json/test/reports/2016-08-29-fuzz/fuzz.tiff +0 -0
  1337. data/vendor/simdjson/dependencies/json/test/reports/2016-08-29-fuzz/high_freq.png +0 -0
  1338. data/vendor/simdjson/dependencies/json/test/reports/2016-08-29-fuzz/index.html +10 -0
  1339. data/vendor/simdjson/dependencies/json/test/reports/2016-08-29-fuzz/low_freq.png +0 -0
  1340. data/vendor/simdjson/dependencies/json/test/reports/2016-09-09-nativejson_benchmark/README.md +31 -0
  1341. data/vendor/simdjson/dependencies/json/test/reports/2016-09-09-nativejson_benchmark/conformance_Nlohmann (C++11).md +670 -0
  1342. data/vendor/simdjson/dependencies/json/test/reports/2016-09-09-nativejson_benchmark/conformance_overall_Result.png +0 -0
  1343. data/vendor/simdjson/dependencies/json/test/reports/2016-09-09-nativejson_benchmark/performance_Corei7-4980HQ@2.80GHz_mac64_clang7.0_1._Parse_Memory_(byte).png +0 -0
  1344. data/vendor/simdjson/dependencies/json/test/reports/2016-09-09-nativejson_benchmark/performance_Corei7-4980HQ@2.80GHz_mac64_clang7.0_1._Parse_Time_(ms).png +0 -0
  1345. data/vendor/simdjson/dependencies/json/test/reports/2016-09-09-nativejson_benchmark/performance_Corei7-4980HQ@2.80GHz_mac64_clang7.0_2._Stringify_Time_(ms).png +0 -0
  1346. data/vendor/simdjson/dependencies/json/test/reports/2016-09-09-nativejson_benchmark/performance_Corei7-4980HQ@2.80GHz_mac64_clang7.0_3._Prettify_Time_(ms).png +0 -0
  1347. data/vendor/simdjson/dependencies/json/test/reports/2016-09-09-nativejson_benchmark/performance_Corei7-4980HQ@2.80GHz_mac64_clang7.0_7._Code_size_FileSize_(byte).png +0 -0
  1348. data/vendor/simdjson/dependencies/json/test/reports/2016-10-02-fuzz/exec_speed.png +0 -0
  1349. data/vendor/simdjson/dependencies/json/test/reports/2016-10-02-fuzz/fuzz.tiff +0 -0
  1350. data/vendor/simdjson/dependencies/json/test/reports/2016-10-02-fuzz/high_freq.png +0 -0
  1351. data/vendor/simdjson/dependencies/json/test/reports/2016-10-02-fuzz/index.html +10 -0
  1352. data/vendor/simdjson/dependencies/json/test/reports/2016-10-02-fuzz/low_freq.png +0 -0
  1353. data/vendor/simdjson/dependencies/json/test/src/fuzzer-driver_afl.cpp +38 -0
  1354. data/vendor/simdjson/dependencies/json/test/src/fuzzer-parse_bson.cpp +73 -0
  1355. data/vendor/simdjson/dependencies/json/test/src/fuzzer-parse_cbor.cpp +68 -0
  1356. data/vendor/simdjson/dependencies/json/test/src/fuzzer-parse_json.cpp +69 -0
  1357. data/vendor/simdjson/dependencies/json/test/src/fuzzer-parse_msgpack.cpp +68 -0
  1358. data/vendor/simdjson/dependencies/json/test/src/fuzzer-parse_ubjson.cpp +68 -0
  1359. data/vendor/simdjson/dependencies/json/test/src/unit-algorithms.cpp +320 -0
  1360. data/vendor/simdjson/dependencies/json/test/src/unit-allocator.cpp +236 -0
  1361. data/vendor/simdjson/dependencies/json/test/src/unit-alt-string.cpp +264 -0
  1362. data/vendor/simdjson/dependencies/json/test/src/unit-bson.cpp +1254 -0
  1363. data/vendor/simdjson/dependencies/json/test/src/unit-capacity.cpp +563 -0
  1364. data/vendor/simdjson/dependencies/json/test/src/unit-cbor.cpp +2189 -0
  1365. data/vendor/simdjson/dependencies/json/test/src/unit-class_const_iterator.cpp +419 -0
  1366. data/vendor/simdjson/dependencies/json/test/src/unit-class_iterator.cpp +403 -0
  1367. data/vendor/simdjson/dependencies/json/test/src/unit-class_lexer.cpp +181 -0
  1368. data/vendor/simdjson/dependencies/json/test/src/unit-class_parser.cpp +1770 -0
  1369. data/vendor/simdjson/dependencies/json/test/src/unit-comparison.cpp +263 -0
  1370. data/vendor/simdjson/dependencies/json/test/src/unit-concepts.cpp +171 -0
  1371. data/vendor/simdjson/dependencies/json/test/src/unit-constructor1.cpp +1537 -0
  1372. data/vendor/simdjson/dependencies/json/test/src/unit-constructor2.cpp +192 -0
  1373. data/vendor/simdjson/dependencies/json/test/src/unit-convenience.cpp +117 -0
  1374. data/vendor/simdjson/dependencies/json/test/src/unit-conversions.cpp +1577 -0
  1375. data/vendor/simdjson/dependencies/json/test/src/unit-deserialization.cpp +1026 -0
  1376. data/vendor/simdjson/dependencies/json/test/src/unit-element_access1.cpp +974 -0
  1377. data/vendor/simdjson/dependencies/json/test/src/unit-element_access2.cpp +1109 -0
  1378. data/vendor/simdjson/dependencies/json/test/src/unit-inspection.cpp +442 -0
  1379. data/vendor/simdjson/dependencies/json/test/src/unit-items.cpp +1450 -0
  1380. data/vendor/simdjson/dependencies/json/test/src/unit-iterators1.cpp +1692 -0
  1381. data/vendor/simdjson/dependencies/json/test/src/unit-iterators2.cpp +906 -0
  1382. data/vendor/simdjson/dependencies/json/test/src/unit-json_patch.cpp +1295 -0
  1383. data/vendor/simdjson/dependencies/json/test/src/unit-json_pointer.cpp +646 -0
  1384. data/vendor/simdjson/dependencies/json/test/src/unit-merge_patch.cpp +262 -0
  1385. data/vendor/simdjson/dependencies/json/test/src/unit-meta.cpp +57 -0
  1386. data/vendor/simdjson/dependencies/json/test/src/unit-modifiers.cpp +941 -0
  1387. data/vendor/simdjson/dependencies/json/test/src/unit-msgpack.cpp +1607 -0
  1388. data/vendor/simdjson/dependencies/json/test/src/unit-noexcept.cpp +82 -0
  1389. data/vendor/simdjson/dependencies/json/test/src/unit-pointer_access.cpp +444 -0
  1390. data/vendor/simdjson/dependencies/json/test/src/unit-readme.cpp +327 -0
  1391. data/vendor/simdjson/dependencies/json/test/src/unit-reference_access.cpp +318 -0
  1392. data/vendor/simdjson/dependencies/json/test/src/unit-regression.cpp +1830 -0
  1393. data/vendor/simdjson/dependencies/json/test/src/unit-serialization.cpp +191 -0
  1394. data/vendor/simdjson/dependencies/json/test/src/unit-testsuites.cpp +1415 -0
  1395. data/vendor/simdjson/dependencies/json/test/src/unit-to_chars.cpp +537 -0
  1396. data/vendor/simdjson/dependencies/json/test/src/unit-ubjson.cpp +2295 -0
  1397. data/vendor/simdjson/dependencies/json/test/src/unit-udt.cpp +830 -0
  1398. data/vendor/simdjson/dependencies/json/test/src/unit-unicode.cpp +1610 -0
  1399. data/vendor/simdjson/dependencies/json/test/src/unit-wstring.cpp +117 -0
  1400. data/vendor/simdjson/dependencies/json/test/src/unit.cpp +31 -0
  1401. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/CMakeLists.txt +45 -0
  1402. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerCorpus.h +217 -0
  1403. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerCrossOver.cpp +52 -0
  1404. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerDefs.h +89 -0
  1405. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerDictionary.h +124 -0
  1406. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerDriver.cpp +545 -0
  1407. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerExtFunctions.def +50 -0
  1408. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerExtFunctions.h +35 -0
  1409. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerExtFunctionsDlsym.cpp +52 -0
  1410. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerExtFunctionsWeak.cpp +53 -0
  1411. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerExtFunctionsWeakAlias.cpp +56 -0
  1412. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerFlags.def +115 -0
  1413. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerIO.cpp +117 -0
  1414. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerIO.h +64 -0
  1415. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerIOPosix.cpp +88 -0
  1416. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerIOWindows.cpp +282 -0
  1417. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerInterface.h +67 -0
  1418. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerInternal.h +182 -0
  1419. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerLoop.cpp +792 -0
  1420. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerMain.cpp +21 -0
  1421. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerMerge.cpp +261 -0
  1422. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerMerge.h +70 -0
  1423. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerMutate.cpp +527 -0
  1424. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerMutate.h +145 -0
  1425. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerOptions.h +68 -0
  1426. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerRandom.h +36 -0
  1427. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerSHA1.cpp +222 -0
  1428. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerSHA1.h +33 -0
  1429. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerTracePC.cpp +339 -0
  1430. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerTracePC.h +158 -0
  1431. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerTraceState.cpp +325 -0
  1432. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerUtil.cpp +218 -0
  1433. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerUtil.h +72 -0
  1434. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerUtilDarwin.cpp +152 -0
  1435. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerUtilLinux.cpp +24 -0
  1436. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerUtilPosix.cpp +117 -0
  1437. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerUtilWindows.cpp +182 -0
  1438. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/FuzzerValueBitMap.h +87 -0
  1439. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/README.txt +2 -0
  1440. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/afl/afl_driver.cpp +295 -0
  1441. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/build.sh +10 -0
  1442. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/cxx.dict +122 -0
  1443. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/standalone/StandaloneFuzzTargetMain.c +41 -0
  1444. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/AFLDriverTest.cpp +22 -0
  1445. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/AbsNegAndConstant64Test.cpp +23 -0
  1446. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/AbsNegAndConstantTest.cpp +23 -0
  1447. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/AccumulateAllocationsTest.cpp +17 -0
  1448. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/BufferOverflowOnInput.cpp +23 -0
  1449. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/CMakeLists.txt +217 -0
  1450. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/CallerCalleeTest.cpp +59 -0
  1451. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/CounterTest.cpp +18 -0
  1452. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/CustomCrossOverTest.cpp +63 -0
  1453. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/CustomMutatorTest.cpp +38 -0
  1454. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/DSO1.cpp +12 -0
  1455. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/DSO2.cpp +12 -0
  1456. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/DSOTestExtra.cpp +11 -0
  1457. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/DSOTestMain.cpp +31 -0
  1458. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/DivTest.cpp +20 -0
  1459. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/EmptyTest.cpp +11 -0
  1460. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/FourIndependentBranchesTest.cpp +22 -0
  1461. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/FullCoverageSetTest.cpp +24 -0
  1462. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/FuzzerUnittest.cpp +738 -0
  1463. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/InitializeTest.cpp +28 -0
  1464. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/LeakTest.cpp +17 -0
  1465. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/LeakTimeoutTest.cpp +17 -0
  1466. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/LoadTest.cpp +22 -0
  1467. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/MemcmpTest.cpp +31 -0
  1468. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/NthRunCrashTest.cpp +18 -0
  1469. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/NullDerefOnEmptyTest.cpp +19 -0
  1470. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/NullDerefTest.cpp +26 -0
  1471. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/OneHugeAllocTest.cpp +28 -0
  1472. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/OutOfMemorySingleLargeMallocTest.cpp +27 -0
  1473. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/OutOfMemoryTest.cpp +31 -0
  1474. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/RepeatedBytesTest.cpp +29 -0
  1475. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/RepeatedMemcmp.cpp +22 -0
  1476. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/ShrinkControlFlowTest.cpp +28 -0
  1477. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/ShrinkValueProfileTest.cpp +22 -0
  1478. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SignedIntOverflowTest.cpp +28 -0
  1479. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SimpleCmpTest.cpp +46 -0
  1480. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SimpleDictionaryTest.cpp +29 -0
  1481. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SimpleHashTest.cpp +40 -0
  1482. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SimpleTest.cpp +27 -0
  1483. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SimpleThreadedTest.cpp +25 -0
  1484. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SingleMemcmpTest.cpp +17 -0
  1485. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SingleStrcmpTest.cpp +17 -0
  1486. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SingleStrncmpTest.cpp +17 -0
  1487. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SpamyTest.cpp +21 -0
  1488. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/StrcmpTest.cpp +32 -0
  1489. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/StrncmpOOBTest.cpp +21 -0
  1490. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/StrncmpTest.cpp +28 -0
  1491. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/StrstrTest.cpp +28 -0
  1492. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SwapCmpTest.cpp +34 -0
  1493. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/Switch2Test.cpp +35 -0
  1494. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/SwitchTest.cpp +58 -0
  1495. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/ThreadedLeakTest.cpp +18 -0
  1496. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/ThreadedTest.cpp +26 -0
  1497. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/TimeoutEmptyTest.cpp +14 -0
  1498. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/TimeoutTest.cpp +26 -0
  1499. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/TraceMallocTest.cpp +27 -0
  1500. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/UninstrumentedTest.cpp +11 -0
  1501. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/afl-driver-extra-stats.test +28 -0
  1502. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/afl-driver-stderr.test +10 -0
  1503. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/caller-callee.test +2 -0
  1504. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/coverage.test +19 -0
  1505. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/dict1.txt +4 -0
  1506. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/dump_coverage.test +16 -0
  1507. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-customcrossover.test +10 -0
  1508. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-custommutator.test +4 -0
  1509. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-dict.test +6 -0
  1510. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-dirs.test +15 -0
  1511. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-fdmask.test +30 -0
  1512. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-finalstats.test +11 -0
  1513. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-flags.test +10 -0
  1514. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-jobs.test +29 -0
  1515. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-leak.test +35 -0
  1516. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-oom-with-profile.test +6 -0
  1517. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-oom.test +11 -0
  1518. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-printcovpcs.test +8 -0
  1519. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-runs.test +8 -0
  1520. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-seed.test +3 -0
  1521. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-segv.test +5 -0
  1522. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-singleinputs.test +16 -0
  1523. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-threaded.test +7 -0
  1524. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-timeout.test +19 -0
  1525. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-traces-hooks.test +25 -0
  1526. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer-ubsan.test +4 -0
  1527. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/fuzzer.test +57 -0
  1528. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/hi.txt +1 -0
  1529. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/lit.cfg +29 -0
  1530. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/lit.site.cfg.in +4 -0
  1531. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/merge.test +46 -0
  1532. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/minimize_crash.test +6 -0
  1533. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/no-coverage/CMakeLists.txt +29 -0
  1534. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/repeated-bytes.test +2 -0
  1535. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/shrink.test +7 -0
  1536. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/simple-cmp.test +2 -0
  1537. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/standalone.test +4 -0
  1538. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/swap-cmp.test +2 -0
  1539. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/trace-malloc.test +10 -0
  1540. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/ubsan/CMakeLists.txt +15 -0
  1541. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/ulimit.test +2 -0
  1542. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/uninstrumented/CMakeLists.txt +16 -0
  1543. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/unit/lit.cfg +7 -0
  1544. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/unit/lit.site.cfg.in +2 -0
  1545. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/value-profile-cmp.test +2 -0
  1546. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/value-profile-cmp2.test +2 -0
  1547. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/value-profile-cmp3.test +2 -0
  1548. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/value-profile-cmp4.test +2 -0
  1549. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/value-profile-div.test +3 -0
  1550. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/value-profile-load.test +3 -0
  1551. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/value-profile-mem.test +2 -0
  1552. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/value-profile-set.test +3 -0
  1553. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/value-profile-strcmp.test +2 -0
  1554. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/value-profile-strncmp.test +2 -0
  1555. data/vendor/simdjson/dependencies/json/test/thirdparty/Fuzzer/test/value-profile-switch.test +3 -0
  1556. data/vendor/simdjson/dependencies/json/test/thirdparty/doctest/LICENSE.txt +21 -0
  1557. data/vendor/simdjson/dependencies/json/test/thirdparty/doctest/doctest.h +6025 -0
  1558. data/vendor/simdjson/dependencies/json/test/thirdparty/doctest/doctest_compatibility.h +37 -0
  1559. data/vendor/simdjson/dependencies/json/test/thirdparty/fastcov/LICENSE +21 -0
  1560. data/vendor/simdjson/dependencies/json/test/thirdparty/fastcov/README.md +46 -0
  1561. data/vendor/simdjson/dependencies/json/test/thirdparty/fastcov/fastcov.py +372 -0
  1562. data/vendor/simdjson/dependencies/json/test/thirdparty/fifo_map/LICENSE.MIT +21 -0
  1563. data/vendor/simdjson/dependencies/json/test/thirdparty/fifo_map/fifo_map.hpp +530 -0
  1564. data/vendor/simdjson/dependencies/json/test/thirdparty/imapdl/filterbr.py +109 -0
  1565. data/vendor/simdjson/dependencies/json/test/thirdparty/imapdl/gpl-3.0.txt +674 -0
  1566. data/vendor/simdjson/dependencies/json/third_party/amalgamate/CHANGES.md +10 -0
  1567. data/vendor/simdjson/dependencies/json/third_party/amalgamate/LICENSE.md +27 -0
  1568. data/vendor/simdjson/dependencies/json/third_party/amalgamate/README.md +66 -0
  1569. data/vendor/simdjson/dependencies/json/third_party/amalgamate/amalgamate.py +299 -0
  1570. data/vendor/simdjson/dependencies/json/third_party/cpplint/LICENSE +27 -0
  1571. data/vendor/simdjson/dependencies/json/third_party/cpplint/README.rst +80 -0
  1572. data/vendor/simdjson/dependencies/json/third_party/cpplint/cpplint.py +6583 -0
  1573. data/vendor/simdjson/dependencies/json/third_party/cpplint/update.sh +5 -0
  1574. data/vendor/simdjson/dependencies/json11/CMakeLists.txt +57 -0
  1575. data/vendor/simdjson/dependencies/json11/LICENSE.txt +19 -0
  1576. data/vendor/simdjson/dependencies/json11/Makefile +15 -0
  1577. data/vendor/simdjson/dependencies/json11/README.md +42 -0
  1578. data/vendor/simdjson/dependencies/json11/json11.cpp +788 -0
  1579. data/vendor/simdjson/dependencies/json11/json11.hpp +232 -0
  1580. data/vendor/simdjson/dependencies/json11/json11.pc.in +9 -0
  1581. data/vendor/simdjson/dependencies/json11/test.cpp +281 -0
  1582. data/vendor/simdjson/dependencies/jsoncpp/AUTHORS +111 -0
  1583. data/vendor/simdjson/dependencies/jsoncpp/CMakeLists.txt +186 -0
  1584. data/vendor/simdjson/dependencies/jsoncpp/CTestConfig.cmake +15 -0
  1585. data/vendor/simdjson/dependencies/jsoncpp/LICENSE +55 -0
  1586. data/vendor/simdjson/dependencies/jsoncpp/README.md +144 -0
  1587. data/vendor/simdjson/dependencies/jsoncpp/amalgamate.py +155 -0
  1588. data/vendor/simdjson/dependencies/jsoncpp/appveyor.yml +26 -0
  1589. data/vendor/simdjson/dependencies/jsoncpp/dev.makefile +35 -0
  1590. data/vendor/simdjson/dependencies/jsoncpp/devtools/__init__.py +6 -0
  1591. data/vendor/simdjson/dependencies/jsoncpp/devtools/antglob.py +205 -0
  1592. data/vendor/simdjson/dependencies/jsoncpp/devtools/batchbuild.py +278 -0
  1593. data/vendor/simdjson/dependencies/jsoncpp/devtools/fixeol.py +70 -0
  1594. data/vendor/simdjson/dependencies/jsoncpp/devtools/licenseupdater.py +94 -0
  1595. data/vendor/simdjson/dependencies/jsoncpp/devtools/tarball.py +52 -0
  1596. data/vendor/simdjson/dependencies/jsoncpp/doc/doxyfile.in +2302 -0
  1597. data/vendor/simdjson/dependencies/jsoncpp/doc/footer.html +21 -0
  1598. data/vendor/simdjson/dependencies/jsoncpp/doc/header.html +64 -0
  1599. data/vendor/simdjson/dependencies/jsoncpp/doc/jsoncpp.dox +164 -0
  1600. data/vendor/simdjson/dependencies/jsoncpp/doc/readme.txt +1 -0
  1601. data/vendor/simdjson/dependencies/jsoncpp/doc/roadmap.dox +3 -0
  1602. data/vendor/simdjson/dependencies/jsoncpp/doc/web_doxyfile.in +2290 -0
  1603. data/vendor/simdjson/dependencies/jsoncpp/doxybuild.py +189 -0
  1604. data/vendor/simdjson/dependencies/jsoncpp/include/CMakeLists.txt +2 -0
  1605. data/vendor/simdjson/dependencies/jsoncpp/include/json/allocator.h +89 -0
  1606. data/vendor/simdjson/dependencies/jsoncpp/include/json/assertions.h +59 -0
  1607. data/vendor/simdjson/dependencies/jsoncpp/include/json/autolink.h +25 -0
  1608. data/vendor/simdjson/dependencies/jsoncpp/include/json/config.h +198 -0
  1609. data/vendor/simdjson/dependencies/jsoncpp/include/json/features.h +61 -0
  1610. data/vendor/simdjson/dependencies/jsoncpp/include/json/forwards.h +37 -0
  1611. data/vendor/simdjson/dependencies/jsoncpp/include/json/json.h +15 -0
  1612. data/vendor/simdjson/dependencies/jsoncpp/include/json/reader.h +417 -0
  1613. data/vendor/simdjson/dependencies/jsoncpp/include/json/value.h +909 -0
  1614. data/vendor/simdjson/dependencies/jsoncpp/include/json/version.h +22 -0
  1615. data/vendor/simdjson/dependencies/jsoncpp/include/json/writer.h +368 -0
  1616. data/vendor/simdjson/dependencies/jsoncpp/makefiles/msvc2010/jsoncpp.sln +42 -0
  1617. data/vendor/simdjson/dependencies/jsoncpp/makefiles/msvc2010/jsontest.vcxproj +96 -0
  1618. data/vendor/simdjson/dependencies/jsoncpp/makefiles/msvc2010/jsontest.vcxproj.filters +13 -0
  1619. data/vendor/simdjson/dependencies/jsoncpp/makefiles/msvc2010/lib_json.vcxproj +143 -0
  1620. data/vendor/simdjson/dependencies/jsoncpp/makefiles/msvc2010/lib_json.vcxproj.filters +33 -0
  1621. data/vendor/simdjson/dependencies/jsoncpp/makefiles/msvc2010/test_lib_json.vcxproj +109 -0
  1622. data/vendor/simdjson/dependencies/jsoncpp/makefiles/msvc2010/test_lib_json.vcxproj.filters +24 -0
  1623. data/vendor/simdjson/dependencies/jsoncpp/makefiles/msvc2017/jsoncpp.sln +64 -0
  1624. data/vendor/simdjson/dependencies/jsoncpp/makefiles/msvc2017/jsontest.vcxproj +168 -0
  1625. data/vendor/simdjson/dependencies/jsoncpp/makefiles/msvc2017/lib_json.vcxproj +258 -0
  1626. data/vendor/simdjson/dependencies/jsoncpp/makefiles/msvc2017/test_lib_json.vcxproj +189 -0
  1627. data/vendor/simdjson/dependencies/jsoncpp/makefiles/vs71/jsoncpp.sln +46 -0
  1628. data/vendor/simdjson/dependencies/jsoncpp/makefiles/vs71/jsontest.vcproj +119 -0
  1629. data/vendor/simdjson/dependencies/jsoncpp/makefiles/vs71/lib_json.vcproj +205 -0
  1630. data/vendor/simdjson/dependencies/jsoncpp/makefiles/vs71/test_lib_json.vcproj +130 -0
  1631. data/vendor/simdjson/dependencies/jsoncpp/makerelease.py +390 -0
  1632. data/vendor/simdjson/dependencies/jsoncpp/meson.build +115 -0
  1633. data/vendor/simdjson/dependencies/jsoncpp/pkg-config/jsoncpp.pc.in +9 -0
  1634. data/vendor/simdjson/dependencies/jsoncpp/src/CMakeLists.txt +5 -0
  1635. data/vendor/simdjson/dependencies/jsoncpp/src/jsontestrunner/CMakeLists.txt +36 -0
  1636. data/vendor/simdjson/dependencies/jsoncpp/src/jsontestrunner/main.cpp +300 -0
  1637. data/vendor/simdjson/dependencies/jsoncpp/src/lib_json/CMakeLists.txt +145 -0
  1638. data/vendor/simdjson/dependencies/jsoncpp/src/lib_json/json_reader.cpp +2008 -0
  1639. data/vendor/simdjson/dependencies/jsoncpp/src/lib_json/json_tool.h +134 -0
  1640. data/vendor/simdjson/dependencies/jsoncpp/src/lib_json/json_value.cpp +1713 -0
  1641. data/vendor/simdjson/dependencies/jsoncpp/src/lib_json/json_valueiterator.inl +159 -0
  1642. data/vendor/simdjson/dependencies/jsoncpp/src/lib_json/json_writer.cpp +1253 -0
  1643. data/vendor/simdjson/dependencies/jsoncpp/src/lib_json/version.h.in +20 -0
  1644. data/vendor/simdjson/dependencies/jsoncpp/src/test_lib_json/CMakeLists.txt +40 -0
  1645. data/vendor/simdjson/dependencies/jsoncpp/src/test_lib_json/jsontest.cpp +435 -0
  1646. data/vendor/simdjson/dependencies/jsoncpp/src/test_lib_json/jsontest.h +276 -0
  1647. data/vendor/simdjson/dependencies/jsoncpp/src/test_lib_json/main.cpp +2597 -0
  1648. data/vendor/simdjson/dependencies/jsoncpp/test/cleantests.py +16 -0
  1649. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_array_01.expected +1 -0
  1650. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_array_02.expected +2 -0
  1651. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_array_03.expected +6 -0
  1652. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_array_04.expected +5 -0
  1653. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_array_05.expected +100 -0
  1654. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_array_06.expected +5 -0
  1655. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_array_07.expected +2122 -0
  1656. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_basic_01.expected +1 -0
  1657. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_basic_02.expected +1 -0
  1658. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_basic_03.expected +3 -0
  1659. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_basic_04.expected +2 -0
  1660. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_basic_05.expected +2 -0
  1661. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_basic_06.expected +2 -0
  1662. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_basic_07.expected +2 -0
  1663. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_basic_08.expected +3 -0
  1664. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_basic_09.expected +4 -0
  1665. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_comment_00.expected +4 -0
  1666. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_comment_01.expected +10 -0
  1667. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_comment_02.expected +23 -0
  1668. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_complex_01.expected +20 -0
  1669. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_integer_01.expected +2 -0
  1670. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_integer_02.expected +2 -0
  1671. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_integer_03.expected +2 -0
  1672. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_integer_04.expected +3 -0
  1673. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_integer_05.expected +2 -0
  1674. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_integer_06_64bits.expected +1 -0
  1675. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_integer_07_64bits.expected +1 -0
  1676. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_integer_08_64bits.expected +1 -0
  1677. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_large_01.expected +2122 -0
  1678. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_object_01.expected +1 -0
  1679. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_object_02.expected +2 -0
  1680. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_object_03.expected +4 -0
  1681. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_object_04.expected +2 -0
  1682. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_preserve_comment_01.expected +11 -0
  1683. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_01.expected +3 -0
  1684. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_02.expected +3 -0
  1685. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_03.expected +3 -0
  1686. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_04.expected +3 -0
  1687. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_05.expected +4 -0
  1688. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_06.expected +4 -0
  1689. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_07.expected +4 -0
  1690. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_08.expected +4 -0
  1691. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_09.expected +4 -0
  1692. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_10.expected +4 -0
  1693. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_11.expected +4 -0
  1694. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_real_12.expected +2 -0
  1695. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_string_01.expected +1 -0
  1696. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_string_02.expected +1 -0
  1697. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_string_03.expected +1 -0
  1698. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_string_04.expected +2 -0
  1699. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_string_05.expected +2 -0
  1700. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_string_unicode_01.expected +1 -0
  1701. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_string_unicode_02.expected +1 -0
  1702. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_string_unicode_03.expected +1 -0
  1703. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_string_unicode_04.expected +1 -0
  1704. data/vendor/simdjson/dependencies/jsoncpp/test/data/test_string_unicode_05.expected +2 -0
  1705. data/vendor/simdjson/dependencies/jsoncpp/test/generate_expected.py +17 -0
  1706. data/vendor/simdjson/dependencies/jsoncpp/test/jsonchecker/readme.txt +3 -0
  1707. data/vendor/simdjson/dependencies/jsoncpp/test/pyjsontestrunner.py +71 -0
  1708. data/vendor/simdjson/dependencies/jsoncpp/test/runjsontests.py +210 -0
  1709. data/vendor/simdjson/dependencies/jsoncpp/test/rununittests.py +84 -0
  1710. data/vendor/simdjson/dependencies/jsoncpp/version +1 -0
  1711. data/vendor/simdjson/dependencies/jsoncpp/version.in +1 -0
  1712. data/vendor/simdjson/dependencies/jsoncppdist/jsoncpp.cpp +8 -0
  1713. data/vendor/simdjson/dependencies/rapidjson/CHANGELOG.md +158 -0
  1714. data/vendor/simdjson/dependencies/rapidjson/CMakeLists.txt +221 -0
  1715. data/vendor/simdjson/dependencies/rapidjson/CMakeModules/FindGTestSrc.cmake +30 -0
  1716. data/vendor/simdjson/dependencies/rapidjson/RapidJSON.pc.in +7 -0
  1717. data/vendor/simdjson/dependencies/rapidjson/RapidJSONConfig.cmake.in +15 -0
  1718. data/vendor/simdjson/dependencies/rapidjson/RapidJSONConfigVersion.cmake.in +10 -0
  1719. data/vendor/simdjson/dependencies/rapidjson/appveyor.yml +41 -0
  1720. data/vendor/simdjson/dependencies/rapidjson/bin/data/readme.txt +1 -0
  1721. data/vendor/simdjson/dependencies/rapidjson/bin/draft-04/schema +150 -0
  1722. data/vendor/simdjson/dependencies/rapidjson/bin/jsonchecker/readme.txt +3 -0
  1723. data/vendor/simdjson/dependencies/rapidjson/bin/jsonschema/LICENSE +19 -0
  1724. data/vendor/simdjson/dependencies/rapidjson/bin/jsonschema/README.md +148 -0
  1725. data/vendor/simdjson/dependencies/rapidjson/bin/jsonschema/bin/jsonschema_suite +283 -0
  1726. data/vendor/simdjson/dependencies/rapidjson/bin/jsonschema/tox.ini +8 -0
  1727. data/vendor/simdjson/dependencies/rapidjson/bin/types/readme.txt +1 -0
  1728. data/vendor/simdjson/dependencies/rapidjson/contrib/natvis/LICENSE +45 -0
  1729. data/vendor/simdjson/dependencies/rapidjson/contrib/natvis/README.md +7 -0
  1730. data/vendor/simdjson/dependencies/rapidjson/contrib/natvis/rapidjson.natvis +38 -0
  1731. data/vendor/simdjson/dependencies/rapidjson/doc/CMakeLists.txt +27 -0
  1732. data/vendor/simdjson/dependencies/rapidjson/doc/Doxyfile.in +2369 -0
  1733. data/vendor/simdjson/dependencies/rapidjson/doc/Doxyfile.zh-cn.in +2369 -0
  1734. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/architecture.dot +50 -0
  1735. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/architecture.png +0 -0
  1736. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/insituparsing.dot +65 -0
  1737. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/insituparsing.png +0 -0
  1738. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/iterative-parser-states-diagram.dot +62 -0
  1739. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/iterative-parser-states-diagram.png +0 -0
  1740. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/makefile +8 -0
  1741. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/move1.dot +47 -0
  1742. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/move1.png +0 -0
  1743. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/move2.dot +62 -0
  1744. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/move2.png +0 -0
  1745. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/move3.dot +60 -0
  1746. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/move3.png +0 -0
  1747. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/normalparsing.dot +56 -0
  1748. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/normalparsing.png +0 -0
  1749. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/simpledom.dot +54 -0
  1750. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/simpledom.png +0 -0
  1751. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/tutorial.dot +58 -0
  1752. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/tutorial.png +0 -0
  1753. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/utilityclass.dot +73 -0
  1754. data/vendor/simdjson/dependencies/rapidjson/doc/diagram/utilityclass.png +0 -0
  1755. data/vendor/simdjson/dependencies/rapidjson/doc/dom.md +280 -0
  1756. data/vendor/simdjson/dependencies/rapidjson/doc/dom.zh-cn.md +284 -0
  1757. data/vendor/simdjson/dependencies/rapidjson/doc/encoding.md +146 -0
  1758. data/vendor/simdjson/dependencies/rapidjson/doc/encoding.zh-cn.md +152 -0
  1759. data/vendor/simdjson/dependencies/rapidjson/doc/faq.md +289 -0
  1760. data/vendor/simdjson/dependencies/rapidjson/doc/faq.zh-cn.md +290 -0
  1761. data/vendor/simdjson/dependencies/rapidjson/doc/features.md +104 -0
  1762. data/vendor/simdjson/dependencies/rapidjson/doc/features.zh-cn.md +103 -0
  1763. data/vendor/simdjson/dependencies/rapidjson/doc/internals.md +368 -0
  1764. data/vendor/simdjson/dependencies/rapidjson/doc/internals.zh-cn.md +363 -0
  1765. data/vendor/simdjson/dependencies/rapidjson/doc/logo/rapidjson.png +0 -0
  1766. data/vendor/simdjson/dependencies/rapidjson/doc/logo/rapidjson.svg +119 -0
  1767. data/vendor/simdjson/dependencies/rapidjson/doc/misc/DoxygenLayout.xml +194 -0
  1768. data/vendor/simdjson/dependencies/rapidjson/doc/misc/doxygenextra.css +274 -0
  1769. data/vendor/simdjson/dependencies/rapidjson/doc/misc/footer.html +11 -0
  1770. data/vendor/simdjson/dependencies/rapidjson/doc/misc/header.html +24 -0
  1771. data/vendor/simdjson/dependencies/rapidjson/doc/npm.md +31 -0
  1772. data/vendor/simdjson/dependencies/rapidjson/doc/performance.md +26 -0
  1773. data/vendor/simdjson/dependencies/rapidjson/doc/performance.zh-cn.md +26 -0
  1774. data/vendor/simdjson/dependencies/rapidjson/doc/pointer.md +234 -0
  1775. data/vendor/simdjson/dependencies/rapidjson/doc/pointer.zh-cn.md +234 -0
  1776. data/vendor/simdjson/dependencies/rapidjson/doc/sax.md +509 -0
  1777. data/vendor/simdjson/dependencies/rapidjson/doc/sax.zh-cn.md +487 -0
  1778. data/vendor/simdjson/dependencies/rapidjson/doc/schema.md +505 -0
  1779. data/vendor/simdjson/dependencies/rapidjson/doc/schema.zh-cn.md +237 -0
  1780. data/vendor/simdjson/dependencies/rapidjson/doc/stream.md +429 -0
  1781. data/vendor/simdjson/dependencies/rapidjson/doc/stream.zh-cn.md +429 -0
  1782. data/vendor/simdjson/dependencies/rapidjson/doc/tutorial.md +536 -0
  1783. data/vendor/simdjson/dependencies/rapidjson/doc/tutorial.zh-cn.md +534 -0
  1784. data/vendor/simdjson/dependencies/rapidjson/docker/debian/Dockerfile +8 -0
  1785. data/vendor/simdjson/dependencies/rapidjson/example/CMakeLists.txt +45 -0
  1786. data/vendor/simdjson/dependencies/rapidjson/example/archiver/archiver.cpp +292 -0
  1787. data/vendor/simdjson/dependencies/rapidjson/example/archiver/archiver.h +145 -0
  1788. data/vendor/simdjson/dependencies/rapidjson/example/archiver/archivertest.cpp +287 -0
  1789. data/vendor/simdjson/dependencies/rapidjson/example/capitalize/capitalize.cpp +67 -0
  1790. data/vendor/simdjson/dependencies/rapidjson/example/condense/condense.cpp +32 -0
  1791. data/vendor/simdjson/dependencies/rapidjson/example/filterkey/filterkey.cpp +135 -0
  1792. data/vendor/simdjson/dependencies/rapidjson/example/filterkeydom/filterkeydom.cpp +170 -0
  1793. data/vendor/simdjson/dependencies/rapidjson/example/jsonx/jsonx.cpp +207 -0
  1794. data/vendor/simdjson/dependencies/rapidjson/example/lookaheadparser/lookaheadparser.cpp +350 -0
  1795. data/vendor/simdjson/dependencies/rapidjson/example/messagereader/messagereader.cpp +105 -0
  1796. data/vendor/simdjson/dependencies/rapidjson/example/parsebyparts/parsebyparts.cpp +176 -0
  1797. data/vendor/simdjson/dependencies/rapidjson/example/pretty/pretty.cpp +30 -0
  1798. data/vendor/simdjson/dependencies/rapidjson/example/prettyauto/prettyauto.cpp +56 -0
  1799. data/vendor/simdjson/dependencies/rapidjson/example/schemavalidator/schemavalidator.cpp +78 -0
  1800. data/vendor/simdjson/dependencies/rapidjson/example/serialize/serialize.cpp +173 -0
  1801. data/vendor/simdjson/dependencies/rapidjson/example/simpledom/simpledom.cpp +29 -0
  1802. data/vendor/simdjson/dependencies/rapidjson/example/simplepullreader/simplepullreader.cpp +53 -0
  1803. data/vendor/simdjson/dependencies/rapidjson/example/simplereader/simplereader.cpp +42 -0
  1804. data/vendor/simdjson/dependencies/rapidjson/example/simplewriter/simplewriter.cpp +36 -0
  1805. data/vendor/simdjson/dependencies/rapidjson/example/tutorial/tutorial.cpp +151 -0
  1806. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/allocators.h +284 -0
  1807. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/cursorstreamwrapper.h +78 -0
  1808. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/document.h +2658 -0
  1809. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/encodedstream.h +299 -0
  1810. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/encodings.h +716 -0
  1811. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/error/en.h +74 -0
  1812. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/error/error.h +161 -0
  1813. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/filereadstream.h +99 -0
  1814. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/filewritestream.h +104 -0
  1815. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/fwd.h +151 -0
  1816. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/biginteger.h +290 -0
  1817. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/diyfp.h +258 -0
  1818. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/dtoa.h +245 -0
  1819. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/ieee754.h +78 -0
  1820. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/itoa.h +309 -0
  1821. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/meta.h +186 -0
  1822. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/pow10.h +55 -0
  1823. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/regex.h +732 -0
  1824. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/stack.h +231 -0
  1825. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/strfunc.h +69 -0
  1826. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/strtod.h +269 -0
  1827. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/internal/swap.h +46 -0
  1828. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/istreamwrapper.h +113 -0
  1829. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/memorybuffer.h +70 -0
  1830. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/memorystream.h +71 -0
  1831. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/msinttypes/inttypes.h +316 -0
  1832. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/msinttypes/stdint.h +300 -0
  1833. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/ostreamwrapper.h +81 -0
  1834. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/pointer.h +1357 -0
  1835. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/prettywriter.h +277 -0
  1836. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/rapidjson.h +628 -0
  1837. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/reader.h +2216 -0
  1838. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/schema.h +2483 -0
  1839. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/stream.h +223 -0
  1840. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/stringbuffer.h +121 -0
  1841. data/vendor/simdjson/dependencies/rapidjson/include/rapidjson/writer.h +710 -0
  1842. data/vendor/simdjson/dependencies/rapidjson/include_dirs.js +2 -0
  1843. data/vendor/simdjson/dependencies/rapidjson/license.txt +57 -0
  1844. data/vendor/simdjson/dependencies/rapidjson/rapidjson.autopkg +77 -0
  1845. data/vendor/simdjson/dependencies/rapidjson/readme.md +160 -0
  1846. data/vendor/simdjson/dependencies/rapidjson/readme.zh-cn.md +152 -0
  1847. data/vendor/simdjson/dependencies/rapidjson/test/CMakeLists.txt +20 -0
  1848. data/vendor/simdjson/dependencies/rapidjson/test/perftest/CMakeLists.txt +28 -0
  1849. data/vendor/simdjson/dependencies/rapidjson/test/perftest/misctest.cpp +974 -0
  1850. data/vendor/simdjson/dependencies/rapidjson/test/perftest/perftest.cpp +24 -0
  1851. data/vendor/simdjson/dependencies/rapidjson/test/perftest/perftest.h +185 -0
  1852. data/vendor/simdjson/dependencies/rapidjson/test/perftest/platformtest.cpp +166 -0
  1853. data/vendor/simdjson/dependencies/rapidjson/test/perftest/rapidjsontest.cpp +472 -0
  1854. data/vendor/simdjson/dependencies/rapidjson/test/perftest/schematest.cpp +216 -0
  1855. data/vendor/simdjson/dependencies/rapidjson/test/unittest/CMakeLists.txt +92 -0
  1856. data/vendor/simdjson/dependencies/rapidjson/test/unittest/allocatorstest.cpp +102 -0
  1857. data/vendor/simdjson/dependencies/rapidjson/test/unittest/bigintegertest.cpp +133 -0
  1858. data/vendor/simdjson/dependencies/rapidjson/test/unittest/cursorstreamwrappertest.cpp +115 -0
  1859. data/vendor/simdjson/dependencies/rapidjson/test/unittest/documenttest.cpp +672 -0
  1860. data/vendor/simdjson/dependencies/rapidjson/test/unittest/dtoatest.cpp +98 -0
  1861. data/vendor/simdjson/dependencies/rapidjson/test/unittest/encodedstreamtest.cpp +313 -0
  1862. data/vendor/simdjson/dependencies/rapidjson/test/unittest/encodingstest.cpp +451 -0
  1863. data/vendor/simdjson/dependencies/rapidjson/test/unittest/filestreamtest.cpp +112 -0
  1864. data/vendor/simdjson/dependencies/rapidjson/test/unittest/fwdtest.cpp +230 -0
  1865. data/vendor/simdjson/dependencies/rapidjson/test/unittest/istreamwrappertest.cpp +181 -0
  1866. data/vendor/simdjson/dependencies/rapidjson/test/unittest/itoatest.cpp +160 -0
  1867. data/vendor/simdjson/dependencies/rapidjson/test/unittest/jsoncheckertest.cpp +143 -0
  1868. data/vendor/simdjson/dependencies/rapidjson/test/unittest/namespacetest.cpp +70 -0
  1869. data/vendor/simdjson/dependencies/rapidjson/test/unittest/ostreamwrappertest.cpp +92 -0
  1870. data/vendor/simdjson/dependencies/rapidjson/test/unittest/pointertest.cpp +1529 -0
  1871. data/vendor/simdjson/dependencies/rapidjson/test/unittest/prettywritertest.cpp +344 -0
  1872. data/vendor/simdjson/dependencies/rapidjson/test/unittest/readertest.cpp +1895 -0
  1873. data/vendor/simdjson/dependencies/rapidjson/test/unittest/regextest.cpp +638 -0
  1874. data/vendor/simdjson/dependencies/rapidjson/test/unittest/schematest.cpp +2045 -0
  1875. data/vendor/simdjson/dependencies/rapidjson/test/unittest/simdtest.cpp +219 -0
  1876. data/vendor/simdjson/dependencies/rapidjson/test/unittest/strfunctest.cpp +30 -0
  1877. data/vendor/simdjson/dependencies/rapidjson/test/unittest/stringbuffertest.cpp +192 -0
  1878. data/vendor/simdjson/dependencies/rapidjson/test/unittest/strtodtest.cpp +132 -0
  1879. data/vendor/simdjson/dependencies/rapidjson/test/unittest/unittest.cpp +51 -0
  1880. data/vendor/simdjson/dependencies/rapidjson/test/unittest/unittest.h +140 -0
  1881. data/vendor/simdjson/dependencies/rapidjson/test/unittest/valuetest.cpp +1851 -0
  1882. data/vendor/simdjson/dependencies/rapidjson/test/unittest/writertest.cpp +598 -0
  1883. data/vendor/simdjson/dependencies/rapidjson/test/valgrind.supp +17 -0
  1884. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/CMakeLists.txt +16 -0
  1885. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/README.md +141 -0
  1886. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/CHANGES +126 -0
  1887. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/CMakeLists.txt +202 -0
  1888. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/CONTRIBUTORS +40 -0
  1889. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/LICENSE +28 -0
  1890. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/Makefile.am +224 -0
  1891. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/README.md +333 -0
  1892. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/configure.ac +146 -0
  1893. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/CheatSheet.md +562 -0
  1894. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/CookBook.md +3675 -0
  1895. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/DesignDoc.md +280 -0
  1896. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/DevGuide.md +132 -0
  1897. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/Documentation.md +12 -0
  1898. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/ForDummies.md +439 -0
  1899. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/FrequentlyAskedQuestions.md +628 -0
  1900. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/KnownIssues.md +19 -0
  1901. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_5/CheatSheet.md +525 -0
  1902. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_5/CookBook.md +3250 -0
  1903. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_5/Documentation.md +11 -0
  1904. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_5/ForDummies.md +439 -0
  1905. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_5/FrequentlyAskedQuestions.md +624 -0
  1906. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_6/CheatSheet.md +534 -0
  1907. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_6/CookBook.md +3342 -0
  1908. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_6/Documentation.md +12 -0
  1909. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_6/ForDummies.md +439 -0
  1910. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_6/FrequentlyAskedQuestions.md +628 -0
  1911. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_7/CheatSheet.md +556 -0
  1912. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_7/CookBook.md +3432 -0
  1913. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_7/Documentation.md +12 -0
  1914. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_7/ForDummies.md +439 -0
  1915. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/docs/v1_7/FrequentlyAskedQuestions.md +628 -0
  1916. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-actions.h +1205 -0
  1917. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-cardinalities.h +147 -0
  1918. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-actions.h +2377 -0
  1919. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-actions.h.pump +794 -0
  1920. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-function-mockers.h +1095 -0
  1921. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-function-mockers.h.pump +291 -0
  1922. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-matchers.h +2179 -0
  1923. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-matchers.h.pump +672 -0
  1924. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-nice-strict.h +397 -0
  1925. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-nice-strict.h.pump +161 -0
  1926. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-matchers.h +4399 -0
  1927. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-more-actions.h +246 -0
  1928. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-more-matchers.h +58 -0
  1929. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-spec-builders.h +1847 -0
  1930. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock.h +94 -0
  1931. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h +8 -0
  1932. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h.pump +10 -0
  1933. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/custom/gmock-matchers.h +39 -0
  1934. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/custom/gmock-port.h +46 -0
  1935. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/gmock-generated-internal-utils.h +279 -0
  1936. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/gmock-generated-internal-utils.h.pump +136 -0
  1937. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/gmock-internal-utils.h +511 -0
  1938. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/gmock-port.h +91 -0
  1939. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/make/Makefile +101 -0
  1940. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2005/gmock.sln +32 -0
  1941. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2005/gmock.vcproj +191 -0
  1942. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2005/gmock_config.vsprops +15 -0
  1943. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2005/gmock_main.vcproj +187 -0
  1944. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2005/gmock_test.vcproj +201 -0
  1945. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock.sln +32 -0
  1946. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock.vcxproj +82 -0
  1947. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock_config.props +19 -0
  1948. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock_main.vcxproj +88 -0
  1949. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock_test.vcxproj +101 -0
  1950. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock.sln +32 -0
  1951. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock.vcxproj +84 -0
  1952. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock_config.props +19 -0
  1953. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock_main.vcxproj +90 -0
  1954. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock_test.vcxproj +103 -0
  1955. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/fuse_gmock_files.py +240 -0
  1956. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/generator/LICENSE +203 -0
  1957. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/generator/README +35 -0
  1958. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/generator/README.cppclean +115 -0
  1959. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/__init__.py +0 -0
  1960. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/ast.py +1733 -0
  1961. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/gmock_class.py +227 -0
  1962. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/gmock_class_test.py +448 -0
  1963. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/keywords.py +59 -0
  1964. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/tokenize.py +287 -0
  1965. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/utils.py +41 -0
  1966. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/generator/gmock_gen.py +31 -0
  1967. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/gmock-config.in +303 -0
  1968. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/gmock_doctor.py +640 -0
  1969. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/upload.py +1387 -0
  1970. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/scripts/upload_gmock.py +78 -0
  1971. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/src/gmock-all.cc +47 -0
  1972. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/src/gmock-cardinalities.cc +156 -0
  1973. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/src/gmock-internal-utils.cc +174 -0
  1974. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/src/gmock-matchers.cc +498 -0
  1975. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/src/gmock-spec-builders.cc +823 -0
  1976. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/src/gmock.cc +183 -0
  1977. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/src/gmock_main.cc +54 -0
  1978. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-actions_test.cc +1411 -0
  1979. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-cardinalities_test.cc +428 -0
  1980. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-actions_test.cc +1228 -0
  1981. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-function-mockers_test.cc +622 -0
  1982. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-internal-utils_test.cc +127 -0
  1983. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-matchers_test.cc +1286 -0
  1984. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-internal-utils_test.cc +699 -0
  1985. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-matchers_test.cc +5648 -0
  1986. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-more-actions_test.cc +708 -0
  1987. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-nice-strict_test.cc +424 -0
  1988. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-port_test.cc +43 -0
  1989. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock-spec-builders_test.cc +2644 -0
  1990. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_all_test.cc +51 -0
  1991. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_ex_test.cc +81 -0
  1992. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_leak_test.py +108 -0
  1993. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_leak_test_.cc +100 -0
  1994. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_link2_test.cc +40 -0
  1995. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_link_test.cc +40 -0
  1996. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_link_test.h +669 -0
  1997. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_output_test.py +180 -0
  1998. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_output_test_.cc +291 -0
  1999. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_output_test_golden.txt +310 -0
  2000. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_stress_test.cc +322 -0
  2001. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_test.cc +220 -0
  2002. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googlemock/test/gmock_test_utils.py +112 -0
  2003. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/CHANGES +157 -0
  2004. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/CMakeLists.txt +286 -0
  2005. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/CONTRIBUTORS +37 -0
  2006. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/LICENSE +28 -0
  2007. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/Makefile.am +310 -0
  2008. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/README.md +280 -0
  2009. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/cmake/internal_utils.cmake +242 -0
  2010. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/codegear/gtest.cbproj +138 -0
  2011. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/codegear/gtest.groupproj +54 -0
  2012. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/codegear/gtest_all.cc +38 -0
  2013. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/codegear/gtest_link.cc +40 -0
  2014. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/codegear/gtest_main.cbproj +82 -0
  2015. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/codegear/gtest_unittest.cbproj +88 -0
  2016. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/configure.ac +68 -0
  2017. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/AdvancedGuide.md +2182 -0
  2018. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/DevGuide.md +126 -0
  2019. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/Documentation.md +14 -0
  2020. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/FAQ.md +1087 -0
  2021. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/Primer.md +502 -0
  2022. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/PumpManual.md +177 -0
  2023. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/Samples.md +14 -0
  2024. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_5_AdvancedGuide.md +2096 -0
  2025. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_5_Documentation.md +12 -0
  2026. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_5_FAQ.md +886 -0
  2027. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_5_Primer.md +497 -0
  2028. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_5_PumpManual.md +177 -0
  2029. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_5_XcodeGuide.md +93 -0
  2030. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_6_AdvancedGuide.md +2178 -0
  2031. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_6_Documentation.md +14 -0
  2032. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_6_FAQ.md +1038 -0
  2033. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_6_Primer.md +501 -0
  2034. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_6_PumpManual.md +177 -0
  2035. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_6_Samples.md +14 -0
  2036. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_6_XcodeGuide.md +93 -0
  2037. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_7_AdvancedGuide.md +2181 -0
  2038. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_7_Documentation.md +14 -0
  2039. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_7_FAQ.md +1082 -0
  2040. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_7_Primer.md +501 -0
  2041. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_7_PumpManual.md +177 -0
  2042. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_7_Samples.md +14 -0
  2043. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/V1_7_XcodeGuide.md +93 -0
  2044. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/docs/XcodeGuide.md +93 -0
  2045. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-death-test.h +294 -0
  2046. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-message.h +250 -0
  2047. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-param-test.h +1444 -0
  2048. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-param-test.h.pump +510 -0
  2049. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-printers.h +993 -0
  2050. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-spi.h +232 -0
  2051. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-test-part.h +179 -0
  2052. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-typed-test.h +263 -0
  2053. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest.h +2236 -0
  2054. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest_pred_impl.h +358 -0
  2055. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest_prod.h +58 -0
  2056. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/custom/gtest-port.h +69 -0
  2057. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/custom/gtest-printers.h +42 -0
  2058. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/custom/gtest.h +41 -0
  2059. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-death-test-internal.h +319 -0
  2060. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-filepath.h +206 -0
  2061. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-internal.h +1238 -0
  2062. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-linked_ptr.h +243 -0
  2063. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-param-util-generated.h +5146 -0
  2064. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-param-util-generated.h.pump +286 -0
  2065. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-param-util.h +731 -0
  2066. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-port-arch.h +93 -0
  2067. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-port.h +2554 -0
  2068. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-string.h +167 -0
  2069. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-tuple.h +1020 -0
  2070. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-tuple.h.pump +347 -0
  2071. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-type-util.h +3331 -0
  2072. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-type-util.h.pump +297 -0
  2073. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/m4/acx_pthread.m4 +363 -0
  2074. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/m4/gtest.m4 +74 -0
  2075. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/make/Makefile +82 -0
  2076. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/msvc/gtest-md.sln +45 -0
  2077. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/msvc/gtest-md.vcproj +126 -0
  2078. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/msvc/gtest.sln +45 -0
  2079. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/msvc/gtest.vcproj +126 -0
  2080. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/msvc/gtest_main-md.vcproj +129 -0
  2081. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/msvc/gtest_main.vcproj +129 -0
  2082. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/msvc/gtest_prod_test-md.vcproj +164 -0
  2083. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/msvc/gtest_prod_test.vcproj +164 -0
  2084. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/msvc/gtest_unittest-md.vcproj +147 -0
  2085. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/msvc/gtest_unittest.vcproj +147 -0
  2086. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/prime_tables.h +123 -0
  2087. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample1.cc +68 -0
  2088. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample1.h +43 -0
  2089. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample10_unittest.cc +144 -0
  2090. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample1_unittest.cc +153 -0
  2091. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample2.cc +56 -0
  2092. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample2.h +85 -0
  2093. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample2_unittest.cc +109 -0
  2094. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample3-inl.h +172 -0
  2095. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample3_unittest.cc +151 -0
  2096. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample4.cc +46 -0
  2097. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample4.h +53 -0
  2098. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample4_unittest.cc +45 -0
  2099. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample5_unittest.cc +199 -0
  2100. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample6_unittest.cc +224 -0
  2101. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample7_unittest.cc +130 -0
  2102. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample8_unittest.cc +173 -0
  2103. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/samples/sample9_unittest.cc +160 -0
  2104. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/scripts/common.py +83 -0
  2105. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/scripts/fuse_gtest_files.py +253 -0
  2106. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/scripts/gen_gtest_pred_impl.py +730 -0
  2107. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/scripts/gtest-config.in +274 -0
  2108. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/scripts/pump.py +855 -0
  2109. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/scripts/release_docs.py +158 -0
  2110. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/scripts/test/Makefile +59 -0
  2111. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/scripts/upload.py +1387 -0
  2112. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/scripts/upload_gtest.py +78 -0
  2113. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/src/gtest-all.cc +48 -0
  2114. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/src/gtest-death-test.cc +1342 -0
  2115. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/src/gtest-filepath.cc +387 -0
  2116. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/src/gtest-internal-inl.h +1183 -0
  2117. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/src/gtest-port.cc +1259 -0
  2118. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/src/gtest-printers.cc +373 -0
  2119. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/src/gtest-test-part.cc +110 -0
  2120. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/src/gtest-typed-test.cc +118 -0
  2121. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/src/gtest.cc +5388 -0
  2122. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/src/gtest_main.cc +38 -0
  2123. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-death-test_ex_test.cc +93 -0
  2124. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-death-test_test.cc +1427 -0
  2125. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-filepath_test.cc +662 -0
  2126. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-linked_ptr_test.cc +154 -0
  2127. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-listener_test.cc +311 -0
  2128. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-message_test.cc +159 -0
  2129. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-options_test.cc +215 -0
  2130. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-param-test2_test.cc +65 -0
  2131. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-param-test_test.cc +1055 -0
  2132. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-param-test_test.h +57 -0
  2133. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-port_test.cc +1304 -0
  2134. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-printers_test.cc +1635 -0
  2135. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-test-part_test.cc +208 -0
  2136. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-tuple_test.cc +320 -0
  2137. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-typed-test2_test.cc +45 -0
  2138. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-typed-test_test.cc +380 -0
  2139. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-typed-test_test.h +66 -0
  2140. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest-unittest-api_test.cc +341 -0
  2141. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_all_test.cc +47 -0
  2142. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_break_on_failure_unittest.py +212 -0
  2143. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_break_on_failure_unittest_.cc +88 -0
  2144. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_catch_exceptions_test.py +237 -0
  2145. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_catch_exceptions_test_.cc +311 -0
  2146. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_color_test.py +130 -0
  2147. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_color_test_.cc +71 -0
  2148. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_env_var_test.py +117 -0
  2149. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_env_var_test_.cc +126 -0
  2150. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_environment_test.cc +192 -0
  2151. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_filter_unittest.py +636 -0
  2152. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_filter_unittest_.cc +140 -0
  2153. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_help_test.py +172 -0
  2154. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_help_test_.cc +46 -0
  2155. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_list_tests_unittest.py +207 -0
  2156. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_list_tests_unittest_.cc +157 -0
  2157. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_main_unittest.cc +45 -0
  2158. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_no_test_unittest.cc +56 -0
  2159. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_output_test.py +340 -0
  2160. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_output_test_.cc +1062 -0
  2161. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_output_test_golden_lin.txt +743 -0
  2162. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_pred_impl_unittest.cc +2427 -0
  2163. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_premature_exit_test.cc +127 -0
  2164. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_prod_test.cc +57 -0
  2165. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_repeat_test.cc +253 -0
  2166. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_shuffle_test.py +325 -0
  2167. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_shuffle_test_.cc +103 -0
  2168. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_sole_header_test.cc +57 -0
  2169. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_stress_test.cc +256 -0
  2170. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_test_utils.py +320 -0
  2171. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_throw_on_failure_ex_test.cc +92 -0
  2172. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_throw_on_failure_test.py +171 -0
  2173. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_throw_on_failure_test_.cc +72 -0
  2174. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_uninitialized_test.py +70 -0
  2175. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_uninitialized_test_.cc +43 -0
  2176. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_unittest.cc +7706 -0
  2177. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_outfile1_test_.cc +49 -0
  2178. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_outfile2_test_.cc +49 -0
  2179. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_outfiles_test.py +132 -0
  2180. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_output_unittest.py +308 -0
  2181. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_output_unittest_.cc +181 -0
  2182. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_test_utils.py +194 -0
  2183. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/production.cc +36 -0
  2184. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/test/production.h +55 -0
  2185. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Config/DebugProject.xcconfig +30 -0
  2186. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Config/FrameworkTarget.xcconfig +17 -0
  2187. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Config/General.xcconfig +41 -0
  2188. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Config/ReleaseProject.xcconfig +32 -0
  2189. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Config/StaticLibraryTarget.xcconfig +18 -0
  2190. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Config/TestTarget.xcconfig +8 -0
  2191. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Resources/Info.plist +30 -0
  2192. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/Info.plist +28 -0
  2193. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj +457 -0
  2194. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/runtests.sh +62 -0
  2195. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/widget.cc +63 -0
  2196. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/widget.h +59 -0
  2197. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/widget_test.cc +68 -0
  2198. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Scripts/runtests.sh +65 -0
  2199. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/Scripts/versiongenerate.py +100 -0
  2200. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/googletest/xcode/gtest.xcodeproj/project.pbxproj +1135 -0
  2201. data/vendor/simdjson/dependencies/rapidjson/thirdparty/gtest/travis.sh +15 -0
  2202. data/vendor/simdjson/dependencies/rapidjson/travis-doxygen.sh +121 -0
  2203. data/vendor/simdjson/dependencies/sajson/LICENSE.txt +7 -0
  2204. data/vendor/simdjson/dependencies/sajson/README.md +73 -0
  2205. data/vendor/simdjson/dependencies/sajson/SConscript +41 -0
  2206. data/vendor/simdjson/dependencies/sajson/SConstruct +95 -0
  2207. data/vendor/simdjson/dependencies/sajson/benchmark/benchmark.cpp +92 -0
  2208. data/vendor/simdjson/dependencies/sajson/doc/doxygen.config +2427 -0
  2209. data/vendor/simdjson/dependencies/sajson/example/main.cpp +127 -0
  2210. data/vendor/simdjson/dependencies/sajson/example/zero-allocation.cpp +28 -0
  2211. data/vendor/simdjson/dependencies/sajson/include/sajson.h +2493 -0
  2212. data/vendor/simdjson/dependencies/sajson/include/sajson_ostream.h +20 -0
  2213. data/vendor/simdjson/dependencies/sajson/s/bench +15 -0
  2214. data/vendor/simdjson/dependencies/sajson/s/build +4 -0
  2215. data/vendor/simdjson/dependencies/sajson/s/doxygen +4 -0
  2216. data/vendor/simdjson/dependencies/sajson/s/test +21 -0
  2217. data/vendor/simdjson/dependencies/sajson/sajson-fuzz/build.sh +4 -0
  2218. data/vendor/simdjson/dependencies/sajson/sajson-fuzz/json.dict +44 -0
  2219. data/vendor/simdjson/dependencies/sajson/sajson-fuzz/run-primary.sh +4 -0
  2220. data/vendor/simdjson/dependencies/sajson/sajson-fuzz/run.sh +3 -0
  2221. data/vendor/simdjson/dependencies/sajson/swift/sajson.xcodeproj/project.pbxproj +665 -0
  2222. data/vendor/simdjson/dependencies/sajson/swift/sajson.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  2223. data/vendor/simdjson/dependencies/sajson/swift/sajson.xcodeproj/xcshareddata/xcschemes/sajson-macOS.xcscheme +100 -0
  2224. data/vendor/simdjson/dependencies/sajson/swift/sajson/Info.plist +24 -0
  2225. data/vendor/simdjson/dependencies/sajson/swift/sajson/sajson-ffi.cpp +79 -0
  2226. data/vendor/simdjson/dependencies/sajson/swift/sajson/sajson-swift/sajson-ffi.h +35 -0
  2227. data/vendor/simdjson/dependencies/sajson/swift/sajson/sajson.swift +409 -0
  2228. data/vendor/simdjson/dependencies/sajson/swift/sajson/sajson_swift.h +3 -0
  2229. data/vendor/simdjson/dependencies/sajson/swift/sajsonTests/Info.plist +22 -0
  2230. data/vendor/simdjson/dependencies/sajson/swift/sajsonTests/sajsonTests.swift +122 -0
  2231. data/vendor/simdjson/dependencies/sajson/tests/test.cpp +1049 -0
  2232. data/vendor/simdjson/dependencies/sajson/tests/test_no_stl.cpp +2 -0
  2233. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/COPYING +20 -0
  2234. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/Makefile +96 -0
  2235. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/README +68 -0
  2236. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/TestUnitTest++.vsnet2003.vcproj +174 -0
  2237. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/TestUnitTest++.vsnet2005.vcproj +256 -0
  2238. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/UnitTest++.vsnet2003.sln +30 -0
  2239. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/UnitTest++.vsnet2003.vcproj +226 -0
  2240. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/UnitTest++.vsnet2005.sln +29 -0
  2241. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/UnitTest++.vsnet2005.vcproj +318 -0
  2242. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/docs/UnitTest++.html +260 -0
  2243. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/AssertException.cpp +34 -0
  2244. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/AssertException.h +28 -0
  2245. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/CheckMacros.h +122 -0
  2246. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/Checks.cpp +50 -0
  2247. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/Checks.h +158 -0
  2248. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/Config.h +31 -0
  2249. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/CurrentTest.cpp +18 -0
  2250. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/CurrentTest.h +17 -0
  2251. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/DeferredTestReporter.cpp +29 -0
  2252. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/DeferredTestReporter.h +28 -0
  2253. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/DeferredTestResult.cpp +25 -0
  2254. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/DeferredTestResult.h +29 -0
  2255. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/ExecuteTest.h +46 -0
  2256. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/MemoryOutStream.cpp +149 -0
  2257. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/MemoryOutStream.h +67 -0
  2258. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/Posix/SignalTranslator.cpp +46 -0
  2259. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/Posix/SignalTranslator.h +42 -0
  2260. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/Posix/TimeHelpers.cpp +33 -0
  2261. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/Posix/TimeHelpers.h +28 -0
  2262. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/ReportAssert.cpp +10 -0
  2263. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/ReportAssert.h +10 -0
  2264. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/Test.cpp +41 -0
  2265. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/Test.h +34 -0
  2266. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestDetails.cpp +22 -0
  2267. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestDetails.h +24 -0
  2268. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestList.cpp +39 -0
  2269. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestList.h +32 -0
  2270. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestMacros.h +113 -0
  2271. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestReporter.cpp +10 -0
  2272. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestReporter.h +20 -0
  2273. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestReporterStdout.cpp +41 -0
  2274. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestReporterStdout.h +19 -0
  2275. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestResults.cpp +60 -0
  2276. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestResults.h +36 -0
  2277. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestRunner.cpp +76 -0
  2278. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestRunner.h +61 -0
  2279. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TestSuite.h +14 -0
  2280. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TimeConstraint.cpp +29 -0
  2281. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TimeConstraint.h +33 -0
  2282. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/TimeHelpers.h +7 -0
  2283. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/UnitTest++.h +18 -0
  2284. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/Win32/TimeHelpers.cpp +50 -0
  2285. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/Win32/TimeHelpers.h +48 -0
  2286. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/XmlTestReporter.cpp +127 -0
  2287. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/XmlTestReporter.h +34 -0
  2288. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/Main.cpp +8 -0
  2289. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/RecordingReporter.h +98 -0
  2290. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/ScopedCurrentTest.h +37 -0
  2291. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestAssertHandler.cpp +44 -0
  2292. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestCheckMacros.cpp +801 -0
  2293. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestChecks.cpp +293 -0
  2294. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestCurrentTest.cpp +38 -0
  2295. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestDeferredTestReporter.cpp +117 -0
  2296. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestMemoryOutStream.cpp +151 -0
  2297. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestTest.cpp +129 -0
  2298. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestTestList.cpp +50 -0
  2299. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestTestMacros.cpp +212 -0
  2300. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestTestResults.cpp +111 -0
  2301. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestTestRunner.cpp +307 -0
  2302. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestTestSuite.cpp +12 -0
  2303. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestTimeConstraint.cpp +69 -0
  2304. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestTimeConstraintMacro.cpp +35 -0
  2305. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestUnitTest++.cpp +156 -0
  2306. data/vendor/simdjson/dependencies/sajson/third-party/UnitTest++/src/tests/TestXmlTestReporter.cpp +183 -0
  2307. data/vendor/simdjson/dependencies/sajson/tools/genpow10.js +39 -0
  2308. data/vendor/simdjson/dependencies/ujson4c/3rdparty/ultrajson.h +310 -0
  2309. data/vendor/simdjson/dependencies/ujson4c/3rdparty/ultrajsondec.c +891 -0
  2310. data/vendor/simdjson/dependencies/ujson4c/LICENSE.txt +31 -0
  2311. data/vendor/simdjson/dependencies/ujson4c/README.rst +43 -0
  2312. data/vendor/simdjson/dependencies/ujson4c/src/ujdecode.c +836 -0
  2313. data/vendor/simdjson/dependencies/ujson4c/src/ujdecode.h +261 -0
  2314. data/vendor/simdjson/dependencies/ujson4c/tests/benchmark.c +225 -0
  2315. data/vendor/simdjson/dependencies/ujson4c/tests/tests.c +102 -0
  2316. data/vendor/simdjson/doc/Multiline_JSON_Parse_Competition.png +0 -0
  2317. data/vendor/simdjson/doc/basics.md +574 -0
  2318. data/vendor/simdjson/doc/basics_doxygen.md +556 -0
  2319. data/vendor/simdjson/doc/gbps.png +0 -0
  2320. data/vendor/simdjson/doc/growing.png +0 -0
  2321. data/vendor/simdjson/doc/implementation-selection.md +83 -0
  2322. data/vendor/simdjson/doc/parse_many.md +160 -0
  2323. data/vendor/simdjson/doc/performance.md +172 -0
  2324. data/vendor/simdjson/{tape.md → doc/tape.md} +40 -38
  2325. data/vendor/simdjson/examples/CMakeLists.txt +1 -0
  2326. data/vendor/simdjson/examples/quickstart/CMakeLists.txt +60 -0
  2327. data/vendor/simdjson/examples/quickstart/Makefile +32 -0
  2328. data/vendor/simdjson/examples/quickstart/quickstart.cpp +7 -0
  2329. data/vendor/simdjson/examples/quickstart/quickstart_noexceptions.cpp +16 -0
  2330. data/vendor/simdjson/extra/dumpbits.h +19 -0
  2331. data/vendor/simdjson/fuzz/CMakeLists.txt +63 -0
  2332. data/vendor/simdjson/fuzz/Fuzzing.md +86 -0
  2333. data/vendor/simdjson/fuzz/NullBuffer.h +21 -0
  2334. data/vendor/simdjson/fuzz/build_corpus.sh +18 -0
  2335. data/vendor/simdjson/fuzz/build_fuzzer_variants.sh +174 -0
  2336. data/vendor/simdjson/fuzz/build_like_ossfuzz.sh +22 -0
  2337. data/vendor/simdjson/fuzz/fuzz_dump.cpp +60 -0
  2338. data/vendor/simdjson/fuzz/fuzz_dump_raw_tape.cpp +18 -0
  2339. data/vendor/simdjson/fuzz/fuzz_minify.cpp +19 -0
  2340. data/vendor/simdjson/fuzz/fuzz_parser.cpp +10 -0
  2341. data/vendor/simdjson/fuzz/fuzz_print_json.cpp +18 -0
  2342. data/vendor/simdjson/fuzz/main.cpp +26 -0
  2343. data/vendor/simdjson/fuzz/measure_coverage.sh +34 -0
  2344. data/vendor/simdjson/fuzz/ossfuzz.sh +44 -0
  2345. data/vendor/simdjson/images/logotiny.png +0 -0
  2346. data/vendor/simdjson/include/CMakeLists.txt +13 -0
  2347. data/vendor/simdjson/include/simdjson.h +47 -0
  2348. data/vendor/simdjson/include/simdjson/common_defs.h +177 -71
  2349. data/vendor/simdjson/include/simdjson/compiler_check.h +35 -0
  2350. data/vendor/simdjson/include/simdjson/dom/array.h +158 -0
  2351. data/vendor/simdjson/include/simdjson/dom/document.h +78 -0
  2352. data/vendor/simdjson/include/simdjson/dom/document_stream.h +261 -0
  2353. data/vendor/simdjson/include/simdjson/dom/element.h +545 -0
  2354. data/vendor/simdjson/include/simdjson/dom/jsonparser.h +117 -0
  2355. data/vendor/simdjson/include/simdjson/dom/object.h +264 -0
  2356. data/vendor/simdjson/include/simdjson/dom/parsedjson.h +17 -0
  2357. data/vendor/simdjson/include/simdjson/dom/parsedjson_iterator.h +270 -0
  2358. data/vendor/simdjson/include/simdjson/dom/parser.h +434 -0
  2359. data/vendor/simdjson/include/simdjson/error.h +252 -0
  2360. data/vendor/simdjson/include/simdjson/implementation.h +244 -0
  2361. data/vendor/simdjson/include/simdjson/inline/array.h +153 -0
  2362. data/vendor/simdjson/include/simdjson/inline/document.h +141 -0
  2363. data/vendor/simdjson/include/simdjson/inline/document_stream.h +255 -0
  2364. data/vendor/simdjson/include/simdjson/inline/element.h +535 -0
  2365. data/vendor/simdjson/include/simdjson/inline/error.h +155 -0
  2366. data/vendor/simdjson/include/simdjson/inline/object.h +255 -0
  2367. data/vendor/simdjson/include/simdjson/inline/padded_string.h +150 -0
  2368. data/vendor/simdjson/include/simdjson/inline/parsedjson_iterator.h +486 -0
  2369. data/vendor/simdjson/include/simdjson/inline/parser.h +206 -0
  2370. data/vendor/simdjson/include/simdjson/inline/tape_ref.h +105 -0
  2371. data/vendor/simdjson/include/simdjson/internal/dom_parser_implementation.h +181 -0
  2372. data/vendor/simdjson/include/simdjson/internal/jsonformatutils.h +65 -0
  2373. data/vendor/simdjson/include/simdjson/internal/tape_ref.h +51 -0
  2374. data/vendor/simdjson/include/simdjson/internal/tape_type.h +28 -0
  2375. data/vendor/simdjson/include/simdjson/jsonioutil.h +10 -22
  2376. data/vendor/simdjson/include/simdjson/minify.h +75 -0
  2377. data/vendor/simdjson/include/simdjson/nonstd/string_view.hpp +1529 -0
  2378. data/vendor/simdjson/include/simdjson/padded_string.h +144 -58
  2379. data/vendor/simdjson/include/simdjson/portability.h +162 -93
  2380. data/vendor/simdjson/include/simdjson/simdjson.h +9 -43
  2381. data/vendor/simdjson/include/simdjson/simdjson_version.h +20 -7
  2382. data/vendor/simdjson/jsonchecker/CMakeLists.txt +3 -0
  2383. data/vendor/simdjson/jsonexamples/CMakeLists.txt +16 -0
  2384. data/vendor/simdjson/jsonexamples/generated/CMakeLists.txt +18 -0
  2385. data/vendor/simdjson/jsonexamples/generated/genfeaturejson.rb +117 -0
  2386. data/vendor/simdjson/jsonexamples/generated/genfeaturejsonseed.rb +49 -0
  2387. data/vendor/simdjson/jsonexamples/generated/miss-templates/128.txt +10000 -0
  2388. data/vendor/simdjson/jsonexamples/generated/miss-templates/64.txt +10000 -0
  2389. data/vendor/simdjson/jsonexamples/small/jsoniter_scala/README.md +25 -1
  2390. data/vendor/simdjson/scripts/ruby/kostya_large.rb +32 -0
  2391. data/vendor/simdjson/scripts/shootout.sh +32 -0
  2392. data/vendor/simdjson/singleheader/CMakeLists.txt +151 -0
  2393. data/vendor/simdjson/singleheader/README.md +2 -1
  2394. data/vendor/simdjson/singleheader/amalgamate.sh +196 -0
  2395. data/vendor/simdjson/singleheader/amalgamate_demo.cpp +46 -0
  2396. data/vendor/simdjson/singleheader/simdjson.cpp +14045 -1541
  2397. data/vendor/simdjson/singleheader/simdjson.h +7250 -39226
  2398. data/vendor/simdjson/src/CMakeLists.txt +91 -50
  2399. data/vendor/simdjson/src/arm64/bitmanipulation.h +73 -0
  2400. data/vendor/simdjson/src/arm64/bitmask.h +43 -0
  2401. data/vendor/simdjson/src/arm64/dom_parser_implementation.cpp +137 -0
  2402. data/vendor/simdjson/src/arm64/dom_parser_implementation.h +15 -0
  2403. data/vendor/simdjson/src/arm64/implementation.cpp +25 -0
  2404. data/vendor/simdjson/src/arm64/implementation.h +27 -0
  2405. data/vendor/simdjson/src/arm64/intrinsics.h +10 -0
  2406. data/vendor/simdjson/src/arm64/numberparsing.h +39 -0
  2407. data/vendor/simdjson/src/arm64/simd.h +522 -0
  2408. data/vendor/simdjson/src/arm64/stringparsing.h +53 -0
  2409. data/vendor/simdjson/src/error.cpp +34 -0
  2410. data/vendor/simdjson/src/fallback/bitmanipulation.h +77 -0
  2411. data/vendor/simdjson/src/fallback/dom_parser_implementation.cpp +335 -0
  2412. data/vendor/simdjson/src/fallback/dom_parser_implementation.h +15 -0
  2413. data/vendor/simdjson/src/fallback/implementation.cpp +25 -0
  2414. data/vendor/simdjson/src/fallback/implementation.h +32 -0
  2415. data/vendor/simdjson/src/fallback/numberparsing.h +35 -0
  2416. data/vendor/simdjson/src/fallback/stringparsing.h +35 -0
  2417. data/vendor/simdjson/src/generic/dom_parser_implementation.h +59 -0
  2418. data/vendor/simdjson/src/generic/stage1/allocate.h +17 -0
  2419. data/vendor/simdjson/src/generic/stage1/buf_block_reader.h +83 -0
  2420. data/vendor/simdjson/src/generic/stage1/find_next_document_index.h +86 -0
  2421. data/vendor/simdjson/src/generic/stage1/json_minifier.h +77 -0
  2422. data/vendor/simdjson/src/generic/stage1/json_scanner.h +104 -0
  2423. data/vendor/simdjson/src/generic/stage1/json_string_scanner.h +139 -0
  2424. data/vendor/simdjson/src/generic/stage1/json_structural_indexer.h +198 -0
  2425. data/vendor/simdjson/src/generic/stage1/utf8_fastvalidate_algorithm.h +178 -0
  2426. data/vendor/simdjson/src/generic/stage1/utf8_lookup2_algorithm.h +218 -0
  2427. data/vendor/simdjson/src/generic/stage1/utf8_lookup3_algorithm.h +230 -0
  2428. data/vendor/simdjson/src/generic/stage1/utf8_lookup_algorithm.h +299 -0
  2429. data/vendor/simdjson/src/generic/stage1/utf8_range_algorithm.h +180 -0
  2430. data/vendor/simdjson/src/generic/stage1/utf8_validator.h +26 -0
  2431. data/vendor/simdjson/src/generic/stage1/utf8_zwegner_algorithm.h +360 -0
  2432. data/vendor/simdjson/src/generic/stage2/allocate.h +18 -0
  2433. data/vendor/simdjson/src/generic/stage2/atomparsing.h +51 -0
  2434. data/vendor/simdjson/src/generic/stage2/logger.h +64 -0
  2435. data/vendor/simdjson/src/generic/stage2/numberparsing.h +572 -0
  2436. data/vendor/simdjson/src/generic/stage2/streaming_structural_parser.h +168 -0
  2437. data/vendor/simdjson/{include/simdjson → src/generic/stage2}/stringparsing.h +54 -36
  2438. data/vendor/simdjson/src/generic/stage2/structural_iterator.h +70 -0
  2439. data/vendor/simdjson/src/generic/stage2/structural_parser.h +474 -0
  2440. data/vendor/simdjson/src/generic/stage2/tape_writer.h +95 -0
  2441. data/vendor/simdjson/src/haswell/bitmanipulation.h +80 -0
  2442. data/vendor/simdjson/src/haswell/bitmask.h +30 -0
  2443. data/vendor/simdjson/src/haswell/dom_parser_implementation.cpp +127 -0
  2444. data/vendor/simdjson/src/haswell/dom_parser_implementation.h +15 -0
  2445. data/vendor/simdjson/src/haswell/implementation.cpp +25 -0
  2446. data/vendor/simdjson/src/haswell/implementation.h +29 -0
  2447. data/vendor/simdjson/src/haswell/intrinsics.h +54 -0
  2448. data/vendor/simdjson/src/haswell/numberparsing.h +49 -0
  2449. data/vendor/simdjson/src/haswell/simd.h +377 -0
  2450. data/vendor/simdjson/src/haswell/stringparsing.h +50 -0
  2451. data/vendor/simdjson/src/implementation.cpp +155 -0
  2452. data/vendor/simdjson/{include/simdjson → src}/isadetection.h +26 -11
  2453. data/vendor/simdjson/src/jsoncharutils.h +1336 -0
  2454. data/vendor/simdjson/src/simdjson.cpp +30 -28
  2455. data/vendor/simdjson/src/simdprune_tables.h +136 -0
  2456. data/vendor/simdjson/src/westmere/bitmanipulation.h +89 -0
  2457. data/vendor/simdjson/src/westmere/bitmask.h +29 -0
  2458. data/vendor/simdjson/src/westmere/dom_parser_implementation.cpp +128 -0
  2459. data/vendor/simdjson/src/westmere/dom_parser_implementation.h +15 -0
  2460. data/vendor/simdjson/src/westmere/implementation.cpp +25 -0
  2461. data/vendor/simdjson/src/westmere/implementation.h +28 -0
  2462. data/vendor/simdjson/src/westmere/intrinsics.h +27 -0
  2463. data/vendor/simdjson/src/westmere/numberparsing.h +50 -0
  2464. data/vendor/simdjson/src/westmere/simd.h +362 -0
  2465. data/vendor/simdjson/src/westmere/stringparsing.h +52 -0
  2466. data/vendor/simdjson/tests/CMakeLists.txt +182 -11
  2467. data/vendor/simdjson/tests/allparserscheckfile.cpp +24 -28
  2468. data/vendor/simdjson/tests/basictests.cpp +1963 -54
  2469. data/vendor/simdjson/tests/cast_tester.h +271 -0
  2470. data/vendor/simdjson/tests/checkimplementation.cpp +23 -0
  2471. data/vendor/simdjson/tests/compilation_failure_tests/CMakeLists.txt +25 -0
  2472. data/vendor/simdjson/tests/compilation_failure_tests/dangling_parser_load.cpp +15 -0
  2473. data/vendor/simdjson/tests/compilation_failure_tests/dangling_parser_parse_padstring.cpp +16 -0
  2474. data/vendor/simdjson/tests/compilation_failure_tests/dangling_parser_parse_stdstring.cpp +16 -0
  2475. data/vendor/simdjson/tests/compilation_failure_tests/dangling_parser_parse_uchar.cpp +17 -0
  2476. data/vendor/simdjson/tests/compilation_failure_tests/dangling_parser_parse_uint8.cpp +17 -0
  2477. data/vendor/simdjson/tests/compilation_failure_tests/example_compiletest.cpp +20 -0
  2478. data/vendor/simdjson/tests/errortests.cpp +160 -0
  2479. data/vendor/simdjson/tests/extracting_values_example.cpp +12 -0
  2480. data/vendor/simdjson/tests/integer_tests.cpp +95 -0
  2481. data/vendor/simdjson/{scripts → tests}/issue150.sh +1 -2
  2482. data/vendor/simdjson/tests/jsoncheck.cpp +37 -29
  2483. data/vendor/simdjson/tests/numberparsingcheck.cpp +35 -20
  2484. data/vendor/simdjson/tests/parse_many_test.cpp +146 -0
  2485. data/vendor/simdjson/tests/pointercheck.cpp +81 -33
  2486. data/vendor/simdjson/tests/readme_examples.cpp +298 -0
  2487. data/vendor/simdjson/tests/readme_examples_noexceptions.cpp +197 -0
  2488. data/vendor/simdjson/tests/singleheadertest.cpp +8 -12
  2489. data/vendor/simdjson/tests/staticchecks.cpp +29 -0
  2490. data/vendor/simdjson/tests/stringparsingcheck.cpp +29 -30
  2491. data/vendor/simdjson/tests/test_macros.h +55 -0
  2492. data/vendor/simdjson/tests/testjson2json.sh +39 -0
  2493. data/vendor/simdjson/tests/unicode_tests.cpp +246 -0
  2494. data/vendor/simdjson/tools/CMakeLists.txt +9 -3
  2495. data/vendor/simdjson/tools/json2json.cpp +56 -95
  2496. data/vendor/simdjson/tools/jsonpointer.cpp +16 -64
  2497. data/vendor/simdjson/tools/jsonstats.cpp +225 -85
  2498. data/vendor/simdjson/tools/minify.cpp +70 -12
  2499. data/vendor/simdjson/tools/release.py +92 -20
  2500. data/vendor/simdjson/windows/CMakeLists.txt +6 -0
  2501. data/vendor/simdjson/windows/dirent_portable.h +6 -1039
  2502. data/vendor/simdjson/windows/getopt.h +658 -0
  2503. data/vendor/simdjson/windows/toni_ronnko_dirent.h +1075 -0
  2504. data/vendor/simdjson/windows/unistd.h +3 -0
  2505. metadata +2544 -47
  2506. data/vendor/simdjson/Makefile +0 -203
  2507. data/vendor/simdjson/Notes.md +0 -85
  2508. data/vendor/simdjson/amalgamation.sh +0 -158
  2509. data/vendor/simdjson/include/simdjson/jsoncharutils.h +0 -301
  2510. data/vendor/simdjson/include/simdjson/jsonformatutils.h +0 -202
  2511. data/vendor/simdjson/include/simdjson/jsonminifier.h +0 -30
  2512. data/vendor/simdjson/include/simdjson/jsonparser.h +0 -250
  2513. data/vendor/simdjson/include/simdjson/numberparsing.h +0 -587
  2514. data/vendor/simdjson/include/simdjson/parsedjson.h +0 -544
  2515. data/vendor/simdjson/include/simdjson/simdprune_tables.h +0 -35074
  2516. data/vendor/simdjson/include/simdjson/simdutf8check_arm64.h +0 -180
  2517. data/vendor/simdjson/include/simdjson/simdutf8check_haswell.h +0 -198
  2518. data/vendor/simdjson/include/simdjson/simdutf8check_westmere.h +0 -169
  2519. data/vendor/simdjson/include/simdjson/stage1_find_marks.h +0 -121
  2520. data/vendor/simdjson/include/simdjson/stage1_find_marks_arm64.h +0 -210
  2521. data/vendor/simdjson/include/simdjson/stage1_find_marks_flatten.h +0 -93
  2522. data/vendor/simdjson/include/simdjson/stage1_find_marks_flatten_haswell.h +0 -95
  2523. data/vendor/simdjson/include/simdjson/stage1_find_marks_haswell.h +0 -210
  2524. data/vendor/simdjson/include/simdjson/stage1_find_marks_macros.h +0 -239
  2525. data/vendor/simdjson/include/simdjson/stage1_find_marks_westmere.h +0 -194
  2526. data/vendor/simdjson/include/simdjson/stage2_build_tape.h +0 -85
  2527. data/vendor/simdjson/include/simdjson/stringparsing_arm64.h +0 -56
  2528. data/vendor/simdjson/include/simdjson/stringparsing_haswell.h +0 -43
  2529. data/vendor/simdjson/include/simdjson/stringparsing_macros.h +0 -88
  2530. data/vendor/simdjson/include/simdjson/stringparsing_westmere.h +0 -41
  2531. data/vendor/simdjson/scripts/testjson2json.sh +0 -99
  2532. data/vendor/simdjson/singleheader/amalgamation_demo.cpp +0 -20
  2533. data/vendor/simdjson/src/jsonioutil.cpp +0 -35
  2534. data/vendor/simdjson/src/jsonminifier.cpp +0 -285
  2535. data/vendor/simdjson/src/jsonparser.cpp +0 -91
  2536. data/vendor/simdjson/src/parsedjson.cpp +0 -323
  2537. data/vendor/simdjson/src/parsedjsoniterator.cpp +0 -272
  2538. data/vendor/simdjson/src/stage1_find_marks.cpp +0 -41
  2539. data/vendor/simdjson/src/stage2_build_tape.cpp +0 -567
  2540. data/vendor/simdjson/tools/cmake/FindCTargets.cmake +0 -15
  2541. data/vendor/simdjson/tools/cmake/FindOptions.cmake +0 -52
@@ -0,0 +1,4399 @@
1
+ // Copyright 2007, Google Inc.
2
+ // All rights reserved.
3
+ //
4
+ // Redistribution and use in source and binary forms, with or without
5
+ // modification, are permitted provided that the following conditions are
6
+ // met:
7
+ //
8
+ // * Redistributions of source code must retain the above copyright
9
+ // notice, this list of conditions and the following disclaimer.
10
+ // * Redistributions in binary form must reproduce the above
11
+ // copyright notice, this list of conditions and the following disclaimer
12
+ // in the documentation and/or other materials provided with the
13
+ // distribution.
14
+ // * Neither the name of Google Inc. nor the names of its
15
+ // contributors may be used to endorse or promote products derived from
16
+ // this software without specific prior written permission.
17
+ //
18
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+ //
30
+ // Author: wan@google.com (Zhanyong Wan)
31
+
32
+ // Google Mock - a framework for writing C++ mock classes.
33
+ //
34
+ // This file implements some commonly used argument matchers. More
35
+ // matchers can be defined by the user implementing the
36
+ // MatcherInterface<T> interface if necessary.
37
+
38
+ #ifndef GMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_
39
+ #define GMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_
40
+
41
+ #include <math.h>
42
+ #include <algorithm>
43
+ #include <iterator>
44
+ #include <limits>
45
+ #include <ostream> // NOLINT
46
+ #include <sstream>
47
+ #include <string>
48
+ #include <utility>
49
+ #include <vector>
50
+
51
+ #include "gmock/internal/gmock-internal-utils.h"
52
+ #include "gmock/internal/gmock-port.h"
53
+ #include "gtest/gtest.h"
54
+
55
+ #if GTEST_HAS_STD_INITIALIZER_LIST_
56
+ # include <initializer_list> // NOLINT -- must be after gtest.h
57
+ #endif
58
+
59
+ namespace testing {
60
+
61
+ // To implement a matcher Foo for type T, define:
62
+ // 1. a class FooMatcherImpl that implements the
63
+ // MatcherInterface<T> interface, and
64
+ // 2. a factory function that creates a Matcher<T> object from a
65
+ // FooMatcherImpl*.
66
+ //
67
+ // The two-level delegation design makes it possible to allow a user
68
+ // to write "v" instead of "Eq(v)" where a Matcher is expected, which
69
+ // is impossible if we pass matchers by pointers. It also eases
70
+ // ownership management as Matcher objects can now be copied like
71
+ // plain values.
72
+
73
+ // MatchResultListener is an abstract class. Its << operator can be
74
+ // used by a matcher to explain why a value matches or doesn't match.
75
+ //
76
+ // TODO(wan@google.com): add method
77
+ // bool InterestedInWhy(bool result) const;
78
+ // to indicate whether the listener is interested in why the match
79
+ // result is 'result'.
80
+ class MatchResultListener {
81
+ public:
82
+ // Creates a listener object with the given underlying ostream. The
83
+ // listener does not own the ostream, and does not dereference it
84
+ // in the constructor or destructor.
85
+ explicit MatchResultListener(::std::ostream* os) : stream_(os) {}
86
+ virtual ~MatchResultListener() = 0; // Makes this class abstract.
87
+
88
+ // Streams x to the underlying ostream; does nothing if the ostream
89
+ // is NULL.
90
+ template <typename T>
91
+ MatchResultListener& operator<<(const T& x) {
92
+ if (stream_ != NULL)
93
+ *stream_ << x;
94
+ return *this;
95
+ }
96
+
97
+ // Returns the underlying ostream.
98
+ ::std::ostream* stream() { return stream_; }
99
+
100
+ // Returns true iff the listener is interested in an explanation of
101
+ // the match result. A matcher's MatchAndExplain() method can use
102
+ // this information to avoid generating the explanation when no one
103
+ // intends to hear it.
104
+ bool IsInterested() const { return stream_ != NULL; }
105
+
106
+ private:
107
+ ::std::ostream* const stream_;
108
+
109
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(MatchResultListener);
110
+ };
111
+
112
+ inline MatchResultListener::~MatchResultListener() {
113
+ }
114
+
115
+ // An instance of a subclass of this knows how to describe itself as a
116
+ // matcher.
117
+ class MatcherDescriberInterface {
118
+ public:
119
+ virtual ~MatcherDescriberInterface() {}
120
+
121
+ // Describes this matcher to an ostream. The function should print
122
+ // a verb phrase that describes the property a value matching this
123
+ // matcher should have. The subject of the verb phrase is the value
124
+ // being matched. For example, the DescribeTo() method of the Gt(7)
125
+ // matcher prints "is greater than 7".
126
+ virtual void DescribeTo(::std::ostream* os) const = 0;
127
+
128
+ // Describes the negation of this matcher to an ostream. For
129
+ // example, if the description of this matcher is "is greater than
130
+ // 7", the negated description could be "is not greater than 7".
131
+ // You are not required to override this when implementing
132
+ // MatcherInterface, but it is highly advised so that your matcher
133
+ // can produce good error messages.
134
+ virtual void DescribeNegationTo(::std::ostream* os) const {
135
+ *os << "not (";
136
+ DescribeTo(os);
137
+ *os << ")";
138
+ }
139
+ };
140
+
141
+ // The implementation of a matcher.
142
+ template <typename T>
143
+ class MatcherInterface : public MatcherDescriberInterface {
144
+ public:
145
+ // Returns true iff the matcher matches x; also explains the match
146
+ // result to 'listener' if necessary (see the next paragraph), in
147
+ // the form of a non-restrictive relative clause ("which ...",
148
+ // "whose ...", etc) that describes x. For example, the
149
+ // MatchAndExplain() method of the Pointee(...) matcher should
150
+ // generate an explanation like "which points to ...".
151
+ //
152
+ // Implementations of MatchAndExplain() should add an explanation of
153
+ // the match result *if and only if* they can provide additional
154
+ // information that's not already present (or not obvious) in the
155
+ // print-out of x and the matcher's description. Whether the match
156
+ // succeeds is not a factor in deciding whether an explanation is
157
+ // needed, as sometimes the caller needs to print a failure message
158
+ // when the match succeeds (e.g. when the matcher is used inside
159
+ // Not()).
160
+ //
161
+ // For example, a "has at least 10 elements" matcher should explain
162
+ // what the actual element count is, regardless of the match result,
163
+ // as it is useful information to the reader; on the other hand, an
164
+ // "is empty" matcher probably only needs to explain what the actual
165
+ // size is when the match fails, as it's redundant to say that the
166
+ // size is 0 when the value is already known to be empty.
167
+ //
168
+ // You should override this method when defining a new matcher.
169
+ //
170
+ // It's the responsibility of the caller (Google Mock) to guarantee
171
+ // that 'listener' is not NULL. This helps to simplify a matcher's
172
+ // implementation when it doesn't care about the performance, as it
173
+ // can talk to 'listener' without checking its validity first.
174
+ // However, in order to implement dummy listeners efficiently,
175
+ // listener->stream() may be NULL.
176
+ virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0;
177
+
178
+ // Inherits these methods from MatcherDescriberInterface:
179
+ // virtual void DescribeTo(::std::ostream* os) const = 0;
180
+ // virtual void DescribeNegationTo(::std::ostream* os) const;
181
+ };
182
+
183
+ // A match result listener that stores the explanation in a string.
184
+ class StringMatchResultListener : public MatchResultListener {
185
+ public:
186
+ StringMatchResultListener() : MatchResultListener(&ss_) {}
187
+
188
+ // Returns the explanation accumulated so far.
189
+ internal::string str() const { return ss_.str(); }
190
+
191
+ // Clears the explanation accumulated so far.
192
+ void Clear() { ss_.str(""); }
193
+
194
+ private:
195
+ ::std::stringstream ss_;
196
+
197
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(StringMatchResultListener);
198
+ };
199
+
200
+ namespace internal {
201
+
202
+ struct AnyEq {
203
+ template <typename A, typename B>
204
+ bool operator()(const A& a, const B& b) const { return a == b; }
205
+ };
206
+ struct AnyNe {
207
+ template <typename A, typename B>
208
+ bool operator()(const A& a, const B& b) const { return a != b; }
209
+ };
210
+ struct AnyLt {
211
+ template <typename A, typename B>
212
+ bool operator()(const A& a, const B& b) const { return a < b; }
213
+ };
214
+ struct AnyGt {
215
+ template <typename A, typename B>
216
+ bool operator()(const A& a, const B& b) const { return a > b; }
217
+ };
218
+ struct AnyLe {
219
+ template <typename A, typename B>
220
+ bool operator()(const A& a, const B& b) const { return a <= b; }
221
+ };
222
+ struct AnyGe {
223
+ template <typename A, typename B>
224
+ bool operator()(const A& a, const B& b) const { return a >= b; }
225
+ };
226
+
227
+ // A match result listener that ignores the explanation.
228
+ class DummyMatchResultListener : public MatchResultListener {
229
+ public:
230
+ DummyMatchResultListener() : MatchResultListener(NULL) {}
231
+
232
+ private:
233
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(DummyMatchResultListener);
234
+ };
235
+
236
+ // A match result listener that forwards the explanation to a given
237
+ // ostream. The difference between this and MatchResultListener is
238
+ // that the former is concrete.
239
+ class StreamMatchResultListener : public MatchResultListener {
240
+ public:
241
+ explicit StreamMatchResultListener(::std::ostream* os)
242
+ : MatchResultListener(os) {}
243
+
244
+ private:
245
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamMatchResultListener);
246
+ };
247
+
248
+ // An internal class for implementing Matcher<T>, which will derive
249
+ // from it. We put functionalities common to all Matcher<T>
250
+ // specializations here to avoid code duplication.
251
+ template <typename T>
252
+ class MatcherBase {
253
+ public:
254
+ // Returns true iff the matcher matches x; also explains the match
255
+ // result to 'listener'.
256
+ bool MatchAndExplain(T x, MatchResultListener* listener) const {
257
+ return impl_->MatchAndExplain(x, listener);
258
+ }
259
+
260
+ // Returns true iff this matcher matches x.
261
+ bool Matches(T x) const {
262
+ DummyMatchResultListener dummy;
263
+ return MatchAndExplain(x, &dummy);
264
+ }
265
+
266
+ // Describes this matcher to an ostream.
267
+ void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); }
268
+
269
+ // Describes the negation of this matcher to an ostream.
270
+ void DescribeNegationTo(::std::ostream* os) const {
271
+ impl_->DescribeNegationTo(os);
272
+ }
273
+
274
+ // Explains why x matches, or doesn't match, the matcher.
275
+ void ExplainMatchResultTo(T x, ::std::ostream* os) const {
276
+ StreamMatchResultListener listener(os);
277
+ MatchAndExplain(x, &listener);
278
+ }
279
+
280
+ // Returns the describer for this matcher object; retains ownership
281
+ // of the describer, which is only guaranteed to be alive when
282
+ // this matcher object is alive.
283
+ const MatcherDescriberInterface* GetDescriber() const {
284
+ return impl_.get();
285
+ }
286
+
287
+ protected:
288
+ MatcherBase() {}
289
+
290
+ // Constructs a matcher from its implementation.
291
+ explicit MatcherBase(const MatcherInterface<T>* impl)
292
+ : impl_(impl) {}
293
+
294
+ virtual ~MatcherBase() {}
295
+
296
+ private:
297
+ // shared_ptr (util/gtl/shared_ptr.h) and linked_ptr have similar
298
+ // interfaces. The former dynamically allocates a chunk of memory
299
+ // to hold the reference count, while the latter tracks all
300
+ // references using a circular linked list without allocating
301
+ // memory. It has been observed that linked_ptr performs better in
302
+ // typical scenarios. However, shared_ptr can out-perform
303
+ // linked_ptr when there are many more uses of the copy constructor
304
+ // than the default constructor.
305
+ //
306
+ // If performance becomes a problem, we should see if using
307
+ // shared_ptr helps.
308
+ ::testing::internal::linked_ptr<const MatcherInterface<T> > impl_;
309
+ };
310
+
311
+ } // namespace internal
312
+
313
+ // A Matcher<T> is a copyable and IMMUTABLE (except by assignment)
314
+ // object that can check whether a value of type T matches. The
315
+ // implementation of Matcher<T> is just a linked_ptr to const
316
+ // MatcherInterface<T>, so copying is fairly cheap. Don't inherit
317
+ // from Matcher!
318
+ template <typename T>
319
+ class Matcher : public internal::MatcherBase<T> {
320
+ public:
321
+ // Constructs a null matcher. Needed for storing Matcher objects in STL
322
+ // containers. A default-constructed matcher is not yet initialized. You
323
+ // cannot use it until a valid value has been assigned to it.
324
+ explicit Matcher() {} // NOLINT
325
+
326
+ // Constructs a matcher from its implementation.
327
+ explicit Matcher(const MatcherInterface<T>* impl)
328
+ : internal::MatcherBase<T>(impl) {}
329
+
330
+ // Implicit constructor here allows people to write
331
+ // EXPECT_CALL(foo, Bar(5)) instead of EXPECT_CALL(foo, Bar(Eq(5))) sometimes
332
+ Matcher(T value); // NOLINT
333
+ };
334
+
335
+ // The following two specializations allow the user to write str
336
+ // instead of Eq(str) and "foo" instead of Eq("foo") when a string
337
+ // matcher is expected.
338
+ template <>
339
+ class GTEST_API_ Matcher<const internal::string&>
340
+ : public internal::MatcherBase<const internal::string&> {
341
+ public:
342
+ Matcher() {}
343
+
344
+ explicit Matcher(const MatcherInterface<const internal::string&>* impl)
345
+ : internal::MatcherBase<const internal::string&>(impl) {}
346
+
347
+ // Allows the user to write str instead of Eq(str) sometimes, where
348
+ // str is a string object.
349
+ Matcher(const internal::string& s); // NOLINT
350
+
351
+ // Allows the user to write "foo" instead of Eq("foo") sometimes.
352
+ Matcher(const char* s); // NOLINT
353
+ };
354
+
355
+ template <>
356
+ class GTEST_API_ Matcher<internal::string>
357
+ : public internal::MatcherBase<internal::string> {
358
+ public:
359
+ Matcher() {}
360
+
361
+ explicit Matcher(const MatcherInterface<internal::string>* impl)
362
+ : internal::MatcherBase<internal::string>(impl) {}
363
+
364
+ // Allows the user to write str instead of Eq(str) sometimes, where
365
+ // str is a string object.
366
+ Matcher(const internal::string& s); // NOLINT
367
+
368
+ // Allows the user to write "foo" instead of Eq("foo") sometimes.
369
+ Matcher(const char* s); // NOLINT
370
+ };
371
+
372
+ #if GTEST_HAS_STRING_PIECE_
373
+ // The following two specializations allow the user to write str
374
+ // instead of Eq(str) and "foo" instead of Eq("foo") when a StringPiece
375
+ // matcher is expected.
376
+ template <>
377
+ class GTEST_API_ Matcher<const StringPiece&>
378
+ : public internal::MatcherBase<const StringPiece&> {
379
+ public:
380
+ Matcher() {}
381
+
382
+ explicit Matcher(const MatcherInterface<const StringPiece&>* impl)
383
+ : internal::MatcherBase<const StringPiece&>(impl) {}
384
+
385
+ // Allows the user to write str instead of Eq(str) sometimes, where
386
+ // str is a string object.
387
+ Matcher(const internal::string& s); // NOLINT
388
+
389
+ // Allows the user to write "foo" instead of Eq("foo") sometimes.
390
+ Matcher(const char* s); // NOLINT
391
+
392
+ // Allows the user to pass StringPieces directly.
393
+ Matcher(StringPiece s); // NOLINT
394
+ };
395
+
396
+ template <>
397
+ class GTEST_API_ Matcher<StringPiece>
398
+ : public internal::MatcherBase<StringPiece> {
399
+ public:
400
+ Matcher() {}
401
+
402
+ explicit Matcher(const MatcherInterface<StringPiece>* impl)
403
+ : internal::MatcherBase<StringPiece>(impl) {}
404
+
405
+ // Allows the user to write str instead of Eq(str) sometimes, where
406
+ // str is a string object.
407
+ Matcher(const internal::string& s); // NOLINT
408
+
409
+ // Allows the user to write "foo" instead of Eq("foo") sometimes.
410
+ Matcher(const char* s); // NOLINT
411
+
412
+ // Allows the user to pass StringPieces directly.
413
+ Matcher(StringPiece s); // NOLINT
414
+ };
415
+ #endif // GTEST_HAS_STRING_PIECE_
416
+
417
+ // The PolymorphicMatcher class template makes it easy to implement a
418
+ // polymorphic matcher (i.e. a matcher that can match values of more
419
+ // than one type, e.g. Eq(n) and NotNull()).
420
+ //
421
+ // To define a polymorphic matcher, a user should provide an Impl
422
+ // class that has a DescribeTo() method and a DescribeNegationTo()
423
+ // method, and define a member function (or member function template)
424
+ //
425
+ // bool MatchAndExplain(const Value& value,
426
+ // MatchResultListener* listener) const;
427
+ //
428
+ // See the definition of NotNull() for a complete example.
429
+ template <class Impl>
430
+ class PolymorphicMatcher {
431
+ public:
432
+ explicit PolymorphicMatcher(const Impl& an_impl) : impl_(an_impl) {}
433
+
434
+ // Returns a mutable reference to the underlying matcher
435
+ // implementation object.
436
+ Impl& mutable_impl() { return impl_; }
437
+
438
+ // Returns an immutable reference to the underlying matcher
439
+ // implementation object.
440
+ const Impl& impl() const { return impl_; }
441
+
442
+ template <typename T>
443
+ operator Matcher<T>() const {
444
+ return Matcher<T>(new MonomorphicImpl<T>(impl_));
445
+ }
446
+
447
+ private:
448
+ template <typename T>
449
+ class MonomorphicImpl : public MatcherInterface<T> {
450
+ public:
451
+ explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {}
452
+
453
+ virtual void DescribeTo(::std::ostream* os) const {
454
+ impl_.DescribeTo(os);
455
+ }
456
+
457
+ virtual void DescribeNegationTo(::std::ostream* os) const {
458
+ impl_.DescribeNegationTo(os);
459
+ }
460
+
461
+ virtual bool MatchAndExplain(T x, MatchResultListener* listener) const {
462
+ return impl_.MatchAndExplain(x, listener);
463
+ }
464
+
465
+ private:
466
+ const Impl impl_;
467
+
468
+ GTEST_DISALLOW_ASSIGN_(MonomorphicImpl);
469
+ };
470
+
471
+ Impl impl_;
472
+
473
+ GTEST_DISALLOW_ASSIGN_(PolymorphicMatcher);
474
+ };
475
+
476
+ // Creates a matcher from its implementation. This is easier to use
477
+ // than the Matcher<T> constructor as it doesn't require you to
478
+ // explicitly write the template argument, e.g.
479
+ //
480
+ // MakeMatcher(foo);
481
+ // vs
482
+ // Matcher<const string&>(foo);
483
+ template <typename T>
484
+ inline Matcher<T> MakeMatcher(const MatcherInterface<T>* impl) {
485
+ return Matcher<T>(impl);
486
+ }
487
+
488
+ // Creates a polymorphic matcher from its implementation. This is
489
+ // easier to use than the PolymorphicMatcher<Impl> constructor as it
490
+ // doesn't require you to explicitly write the template argument, e.g.
491
+ //
492
+ // MakePolymorphicMatcher(foo);
493
+ // vs
494
+ // PolymorphicMatcher<TypeOfFoo>(foo);
495
+ template <class Impl>
496
+ inline PolymorphicMatcher<Impl> MakePolymorphicMatcher(const Impl& impl) {
497
+ return PolymorphicMatcher<Impl>(impl);
498
+ }
499
+
500
+ // Anything inside the 'internal' namespace IS INTERNAL IMPLEMENTATION
501
+ // and MUST NOT BE USED IN USER CODE!!!
502
+ namespace internal {
503
+
504
+ // The MatcherCastImpl class template is a helper for implementing
505
+ // MatcherCast(). We need this helper in order to partially
506
+ // specialize the implementation of MatcherCast() (C++ allows
507
+ // class/struct templates to be partially specialized, but not
508
+ // function templates.).
509
+
510
+ // This general version is used when MatcherCast()'s argument is a
511
+ // polymorphic matcher (i.e. something that can be converted to a
512
+ // Matcher but is not one yet; for example, Eq(value)) or a value (for
513
+ // example, "hello").
514
+ template <typename T, typename M>
515
+ class MatcherCastImpl {
516
+ public:
517
+ static Matcher<T> Cast(const M& polymorphic_matcher_or_value) {
518
+ // M can be a polymorhic matcher, in which case we want to use
519
+ // its conversion operator to create Matcher<T>. Or it can be a value
520
+ // that should be passed to the Matcher<T>'s constructor.
521
+ //
522
+ // We can't call Matcher<T>(polymorphic_matcher_or_value) when M is a
523
+ // polymorphic matcher because it'll be ambiguous if T has an implicit
524
+ // constructor from M (this usually happens when T has an implicit
525
+ // constructor from any type).
526
+ //
527
+ // It won't work to unconditionally implict_cast
528
+ // polymorphic_matcher_or_value to Matcher<T> because it won't trigger
529
+ // a user-defined conversion from M to T if one exists (assuming M is
530
+ // a value).
531
+ return CastImpl(
532
+ polymorphic_matcher_or_value,
533
+ BooleanConstant<
534
+ internal::ImplicitlyConvertible<M, Matcher<T> >::value>());
535
+ }
536
+
537
+ private:
538
+ static Matcher<T> CastImpl(const M& value, BooleanConstant<false>) {
539
+ // M can't be implicitly converted to Matcher<T>, so M isn't a polymorphic
540
+ // matcher. It must be a value then. Use direct initialization to create
541
+ // a matcher.
542
+ return Matcher<T>(ImplicitCast_<T>(value));
543
+ }
544
+
545
+ static Matcher<T> CastImpl(const M& polymorphic_matcher_or_value,
546
+ BooleanConstant<true>) {
547
+ // M is implicitly convertible to Matcher<T>, which means that either
548
+ // M is a polymorhpic matcher or Matcher<T> has an implicit constructor
549
+ // from M. In both cases using the implicit conversion will produce a
550
+ // matcher.
551
+ //
552
+ // Even if T has an implicit constructor from M, it won't be called because
553
+ // creating Matcher<T> would require a chain of two user-defined conversions
554
+ // (first to create T from M and then to create Matcher<T> from T).
555
+ return polymorphic_matcher_or_value;
556
+ }
557
+ };
558
+
559
+ // This more specialized version is used when MatcherCast()'s argument
560
+ // is already a Matcher. This only compiles when type T can be
561
+ // statically converted to type U.
562
+ template <typename T, typename U>
563
+ class MatcherCastImpl<T, Matcher<U> > {
564
+ public:
565
+ static Matcher<T> Cast(const Matcher<U>& source_matcher) {
566
+ return Matcher<T>(new Impl(source_matcher));
567
+ }
568
+
569
+ private:
570
+ class Impl : public MatcherInterface<T> {
571
+ public:
572
+ explicit Impl(const Matcher<U>& source_matcher)
573
+ : source_matcher_(source_matcher) {}
574
+
575
+ // We delegate the matching logic to the source matcher.
576
+ virtual bool MatchAndExplain(T x, MatchResultListener* listener) const {
577
+ return source_matcher_.MatchAndExplain(static_cast<U>(x), listener);
578
+ }
579
+
580
+ virtual void DescribeTo(::std::ostream* os) const {
581
+ source_matcher_.DescribeTo(os);
582
+ }
583
+
584
+ virtual void DescribeNegationTo(::std::ostream* os) const {
585
+ source_matcher_.DescribeNegationTo(os);
586
+ }
587
+
588
+ private:
589
+ const Matcher<U> source_matcher_;
590
+
591
+ GTEST_DISALLOW_ASSIGN_(Impl);
592
+ };
593
+ };
594
+
595
+ // This even more specialized version is used for efficiently casting
596
+ // a matcher to its own type.
597
+ template <typename T>
598
+ class MatcherCastImpl<T, Matcher<T> > {
599
+ public:
600
+ static Matcher<T> Cast(const Matcher<T>& matcher) { return matcher; }
601
+ };
602
+
603
+ } // namespace internal
604
+
605
+ // In order to be safe and clear, casting between different matcher
606
+ // types is done explicitly via MatcherCast<T>(m), which takes a
607
+ // matcher m and returns a Matcher<T>. It compiles only when T can be
608
+ // statically converted to the argument type of m.
609
+ template <typename T, typename M>
610
+ inline Matcher<T> MatcherCast(const M& matcher) {
611
+ return internal::MatcherCastImpl<T, M>::Cast(matcher);
612
+ }
613
+
614
+ // Implements SafeMatcherCast().
615
+ //
616
+ // We use an intermediate class to do the actual safe casting as Nokia's
617
+ // Symbian compiler cannot decide between
618
+ // template <T, M> ... (M) and
619
+ // template <T, U> ... (const Matcher<U>&)
620
+ // for function templates but can for member function templates.
621
+ template <typename T>
622
+ class SafeMatcherCastImpl {
623
+ public:
624
+ // This overload handles polymorphic matchers and values only since
625
+ // monomorphic matchers are handled by the next one.
626
+ template <typename M>
627
+ static inline Matcher<T> Cast(const M& polymorphic_matcher_or_value) {
628
+ return internal::MatcherCastImpl<T, M>::Cast(polymorphic_matcher_or_value);
629
+ }
630
+
631
+ // This overload handles monomorphic matchers.
632
+ //
633
+ // In general, if type T can be implicitly converted to type U, we can
634
+ // safely convert a Matcher<U> to a Matcher<T> (i.e. Matcher is
635
+ // contravariant): just keep a copy of the original Matcher<U>, convert the
636
+ // argument from type T to U, and then pass it to the underlying Matcher<U>.
637
+ // The only exception is when U is a reference and T is not, as the
638
+ // underlying Matcher<U> may be interested in the argument's address, which
639
+ // is not preserved in the conversion from T to U.
640
+ template <typename U>
641
+ static inline Matcher<T> Cast(const Matcher<U>& matcher) {
642
+ // Enforce that T can be implicitly converted to U.
643
+ GTEST_COMPILE_ASSERT_((internal::ImplicitlyConvertible<T, U>::value),
644
+ T_must_be_implicitly_convertible_to_U);
645
+ // Enforce that we are not converting a non-reference type T to a reference
646
+ // type U.
647
+ GTEST_COMPILE_ASSERT_(
648
+ internal::is_reference<T>::value || !internal::is_reference<U>::value,
649
+ cannot_convert_non_referentce_arg_to_reference);
650
+ // In case both T and U are arithmetic types, enforce that the
651
+ // conversion is not lossy.
652
+ typedef GTEST_REMOVE_REFERENCE_AND_CONST_(T) RawT;
653
+ typedef GTEST_REMOVE_REFERENCE_AND_CONST_(U) RawU;
654
+ const bool kTIsOther = GMOCK_KIND_OF_(RawT) == internal::kOther;
655
+ const bool kUIsOther = GMOCK_KIND_OF_(RawU) == internal::kOther;
656
+ GTEST_COMPILE_ASSERT_(
657
+ kTIsOther || kUIsOther ||
658
+ (internal::LosslessArithmeticConvertible<RawT, RawU>::value),
659
+ conversion_of_arithmetic_types_must_be_lossless);
660
+ return MatcherCast<T>(matcher);
661
+ }
662
+ };
663
+
664
+ template <typename T, typename M>
665
+ inline Matcher<T> SafeMatcherCast(const M& polymorphic_matcher) {
666
+ return SafeMatcherCastImpl<T>::Cast(polymorphic_matcher);
667
+ }
668
+
669
+ // A<T>() returns a matcher that matches any value of type T.
670
+ template <typename T>
671
+ Matcher<T> A();
672
+
673
+ // Anything inside the 'internal' namespace IS INTERNAL IMPLEMENTATION
674
+ // and MUST NOT BE USED IN USER CODE!!!
675
+ namespace internal {
676
+
677
+ // If the explanation is not empty, prints it to the ostream.
678
+ inline void PrintIfNotEmpty(const internal::string& explanation,
679
+ ::std::ostream* os) {
680
+ if (explanation != "" && os != NULL) {
681
+ *os << ", " << explanation;
682
+ }
683
+ }
684
+
685
+ // Returns true if the given type name is easy to read by a human.
686
+ // This is used to decide whether printing the type of a value might
687
+ // be helpful.
688
+ inline bool IsReadableTypeName(const string& type_name) {
689
+ // We consider a type name readable if it's short or doesn't contain
690
+ // a template or function type.
691
+ return (type_name.length() <= 20 ||
692
+ type_name.find_first_of("<(") == string::npos);
693
+ }
694
+
695
+ // Matches the value against the given matcher, prints the value and explains
696
+ // the match result to the listener. Returns the match result.
697
+ // 'listener' must not be NULL.
698
+ // Value cannot be passed by const reference, because some matchers take a
699
+ // non-const argument.
700
+ template <typename Value, typename T>
701
+ bool MatchPrintAndExplain(Value& value, const Matcher<T>& matcher,
702
+ MatchResultListener* listener) {
703
+ if (!listener->IsInterested()) {
704
+ // If the listener is not interested, we do not need to construct the
705
+ // inner explanation.
706
+ return matcher.Matches(value);
707
+ }
708
+
709
+ StringMatchResultListener inner_listener;
710
+ const bool match = matcher.MatchAndExplain(value, &inner_listener);
711
+
712
+ UniversalPrint(value, listener->stream());
713
+ #if GTEST_HAS_RTTI
714
+ const string& type_name = GetTypeName<Value>();
715
+ if (IsReadableTypeName(type_name))
716
+ *listener->stream() << " (of type " << type_name << ")";
717
+ #endif
718
+ PrintIfNotEmpty(inner_listener.str(), listener->stream());
719
+
720
+ return match;
721
+ }
722
+
723
+ // An internal helper class for doing compile-time loop on a tuple's
724
+ // fields.
725
+ template <size_t N>
726
+ class TuplePrefix {
727
+ public:
728
+ // TuplePrefix<N>::Matches(matcher_tuple, value_tuple) returns true
729
+ // iff the first N fields of matcher_tuple matches the first N
730
+ // fields of value_tuple, respectively.
731
+ template <typename MatcherTuple, typename ValueTuple>
732
+ static bool Matches(const MatcherTuple& matcher_tuple,
733
+ const ValueTuple& value_tuple) {
734
+ return TuplePrefix<N - 1>::Matches(matcher_tuple, value_tuple)
735
+ && get<N - 1>(matcher_tuple).Matches(get<N - 1>(value_tuple));
736
+ }
737
+
738
+ // TuplePrefix<N>::ExplainMatchFailuresTo(matchers, values, os)
739
+ // describes failures in matching the first N fields of matchers
740
+ // against the first N fields of values. If there is no failure,
741
+ // nothing will be streamed to os.
742
+ template <typename MatcherTuple, typename ValueTuple>
743
+ static void ExplainMatchFailuresTo(const MatcherTuple& matchers,
744
+ const ValueTuple& values,
745
+ ::std::ostream* os) {
746
+ // First, describes failures in the first N - 1 fields.
747
+ TuplePrefix<N - 1>::ExplainMatchFailuresTo(matchers, values, os);
748
+
749
+ // Then describes the failure (if any) in the (N - 1)-th (0-based)
750
+ // field.
751
+ typename tuple_element<N - 1, MatcherTuple>::type matcher =
752
+ get<N - 1>(matchers);
753
+ typedef typename tuple_element<N - 1, ValueTuple>::type Value;
754
+ Value value = get<N - 1>(values);
755
+ StringMatchResultListener listener;
756
+ if (!matcher.MatchAndExplain(value, &listener)) {
757
+ // TODO(wan): include in the message the name of the parameter
758
+ // as used in MOCK_METHOD*() when possible.
759
+ *os << " Expected arg #" << N - 1 << ": ";
760
+ get<N - 1>(matchers).DescribeTo(os);
761
+ *os << "\n Actual: ";
762
+ // We remove the reference in type Value to prevent the
763
+ // universal printer from printing the address of value, which
764
+ // isn't interesting to the user most of the time. The
765
+ // matcher's MatchAndExplain() method handles the case when
766
+ // the address is interesting.
767
+ internal::UniversalPrint(value, os);
768
+ PrintIfNotEmpty(listener.str(), os);
769
+ *os << "\n";
770
+ }
771
+ }
772
+ };
773
+
774
+ // The base case.
775
+ template <>
776
+ class TuplePrefix<0> {
777
+ public:
778
+ template <typename MatcherTuple, typename ValueTuple>
779
+ static bool Matches(const MatcherTuple& /* matcher_tuple */,
780
+ const ValueTuple& /* value_tuple */) {
781
+ return true;
782
+ }
783
+
784
+ template <typename MatcherTuple, typename ValueTuple>
785
+ static void ExplainMatchFailuresTo(const MatcherTuple& /* matchers */,
786
+ const ValueTuple& /* values */,
787
+ ::std::ostream* /* os */) {}
788
+ };
789
+
790
+ // TupleMatches(matcher_tuple, value_tuple) returns true iff all
791
+ // matchers in matcher_tuple match the corresponding fields in
792
+ // value_tuple. It is a compiler error if matcher_tuple and
793
+ // value_tuple have different number of fields or incompatible field
794
+ // types.
795
+ template <typename MatcherTuple, typename ValueTuple>
796
+ bool TupleMatches(const MatcherTuple& matcher_tuple,
797
+ const ValueTuple& value_tuple) {
798
+ // Makes sure that matcher_tuple and value_tuple have the same
799
+ // number of fields.
800
+ GTEST_COMPILE_ASSERT_(tuple_size<MatcherTuple>::value ==
801
+ tuple_size<ValueTuple>::value,
802
+ matcher_and_value_have_different_numbers_of_fields);
803
+ return TuplePrefix<tuple_size<ValueTuple>::value>::
804
+ Matches(matcher_tuple, value_tuple);
805
+ }
806
+
807
+ // Describes failures in matching matchers against values. If there
808
+ // is no failure, nothing will be streamed to os.
809
+ template <typename MatcherTuple, typename ValueTuple>
810
+ void ExplainMatchFailureTupleTo(const MatcherTuple& matchers,
811
+ const ValueTuple& values,
812
+ ::std::ostream* os) {
813
+ TuplePrefix<tuple_size<MatcherTuple>::value>::ExplainMatchFailuresTo(
814
+ matchers, values, os);
815
+ }
816
+
817
+ // TransformTupleValues and its helper.
818
+ //
819
+ // TransformTupleValuesHelper hides the internal machinery that
820
+ // TransformTupleValues uses to implement a tuple traversal.
821
+ template <typename Tuple, typename Func, typename OutIter>
822
+ class TransformTupleValuesHelper {
823
+ private:
824
+ typedef ::testing::tuple_size<Tuple> TupleSize;
825
+
826
+ public:
827
+ // For each member of tuple 't', taken in order, evaluates '*out++ = f(t)'.
828
+ // Returns the final value of 'out' in case the caller needs it.
829
+ static OutIter Run(Func f, const Tuple& t, OutIter out) {
830
+ return IterateOverTuple<Tuple, TupleSize::value>()(f, t, out);
831
+ }
832
+
833
+ private:
834
+ template <typename Tup, size_t kRemainingSize>
835
+ struct IterateOverTuple {
836
+ OutIter operator() (Func f, const Tup& t, OutIter out) const {
837
+ *out++ = f(::testing::get<TupleSize::value - kRemainingSize>(t));
838
+ return IterateOverTuple<Tup, kRemainingSize - 1>()(f, t, out);
839
+ }
840
+ };
841
+ template <typename Tup>
842
+ struct IterateOverTuple<Tup, 0> {
843
+ OutIter operator() (Func /* f */, const Tup& /* t */, OutIter out) const {
844
+ return out;
845
+ }
846
+ };
847
+ };
848
+
849
+ // Successively invokes 'f(element)' on each element of the tuple 't',
850
+ // appending each result to the 'out' iterator. Returns the final value
851
+ // of 'out'.
852
+ template <typename Tuple, typename Func, typename OutIter>
853
+ OutIter TransformTupleValues(Func f, const Tuple& t, OutIter out) {
854
+ return TransformTupleValuesHelper<Tuple, Func, OutIter>::Run(f, t, out);
855
+ }
856
+
857
+ // Implements A<T>().
858
+ template <typename T>
859
+ class AnyMatcherImpl : public MatcherInterface<T> {
860
+ public:
861
+ virtual bool MatchAndExplain(
862
+ T /* x */, MatchResultListener* /* listener */) const { return true; }
863
+ virtual void DescribeTo(::std::ostream* os) const { *os << "is anything"; }
864
+ virtual void DescribeNegationTo(::std::ostream* os) const {
865
+ // This is mostly for completeness' safe, as it's not very useful
866
+ // to write Not(A<bool>()). However we cannot completely rule out
867
+ // such a possibility, and it doesn't hurt to be prepared.
868
+ *os << "never matches";
869
+ }
870
+ };
871
+
872
+ // Implements _, a matcher that matches any value of any
873
+ // type. This is a polymorphic matcher, so we need a template type
874
+ // conversion operator to make it appearing as a Matcher<T> for any
875
+ // type T.
876
+ class AnythingMatcher {
877
+ public:
878
+ template <typename T>
879
+ operator Matcher<T>() const { return A<T>(); }
880
+ };
881
+
882
+ // Implements a matcher that compares a given value with a
883
+ // pre-supplied value using one of the ==, <=, <, etc, operators. The
884
+ // two values being compared don't have to have the same type.
885
+ //
886
+ // The matcher defined here is polymorphic (for example, Eq(5) can be
887
+ // used to match an int, a short, a double, etc). Therefore we use
888
+ // a template type conversion operator in the implementation.
889
+ //
890
+ // The following template definition assumes that the Rhs parameter is
891
+ // a "bare" type (i.e. neither 'const T' nor 'T&').
892
+ template <typename D, typename Rhs, typename Op>
893
+ class ComparisonBase {
894
+ public:
895
+ explicit ComparisonBase(const Rhs& rhs) : rhs_(rhs) {}
896
+ template <typename Lhs>
897
+ operator Matcher<Lhs>() const {
898
+ return MakeMatcher(new Impl<Lhs>(rhs_));
899
+ }
900
+
901
+ private:
902
+ template <typename Lhs>
903
+ class Impl : public MatcherInterface<Lhs> {
904
+ public:
905
+ explicit Impl(const Rhs& rhs) : rhs_(rhs) {}
906
+ virtual bool MatchAndExplain(
907
+ Lhs lhs, MatchResultListener* /* listener */) const {
908
+ return Op()(lhs, rhs_);
909
+ }
910
+ virtual void DescribeTo(::std::ostream* os) const {
911
+ *os << D::Desc() << " ";
912
+ UniversalPrint(rhs_, os);
913
+ }
914
+ virtual void DescribeNegationTo(::std::ostream* os) const {
915
+ *os << D::NegatedDesc() << " ";
916
+ UniversalPrint(rhs_, os);
917
+ }
918
+ private:
919
+ Rhs rhs_;
920
+ GTEST_DISALLOW_ASSIGN_(Impl);
921
+ };
922
+ Rhs rhs_;
923
+ GTEST_DISALLOW_ASSIGN_(ComparisonBase);
924
+ };
925
+
926
+ template <typename Rhs>
927
+ class EqMatcher : public ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq> {
928
+ public:
929
+ explicit EqMatcher(const Rhs& rhs)
930
+ : ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq>(rhs) { }
931
+ static const char* Desc() { return "is equal to"; }
932
+ static const char* NegatedDesc() { return "isn't equal to"; }
933
+ };
934
+ template <typename Rhs>
935
+ class NeMatcher : public ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe> {
936
+ public:
937
+ explicit NeMatcher(const Rhs& rhs)
938
+ : ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe>(rhs) { }
939
+ static const char* Desc() { return "isn't equal to"; }
940
+ static const char* NegatedDesc() { return "is equal to"; }
941
+ };
942
+ template <typename Rhs>
943
+ class LtMatcher : public ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt> {
944
+ public:
945
+ explicit LtMatcher(const Rhs& rhs)
946
+ : ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt>(rhs) { }
947
+ static const char* Desc() { return "is <"; }
948
+ static const char* NegatedDesc() { return "isn't <"; }
949
+ };
950
+ template <typename Rhs>
951
+ class GtMatcher : public ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt> {
952
+ public:
953
+ explicit GtMatcher(const Rhs& rhs)
954
+ : ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt>(rhs) { }
955
+ static const char* Desc() { return "is >"; }
956
+ static const char* NegatedDesc() { return "isn't >"; }
957
+ };
958
+ template <typename Rhs>
959
+ class LeMatcher : public ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe> {
960
+ public:
961
+ explicit LeMatcher(const Rhs& rhs)
962
+ : ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe>(rhs) { }
963
+ static const char* Desc() { return "is <="; }
964
+ static const char* NegatedDesc() { return "isn't <="; }
965
+ };
966
+ template <typename Rhs>
967
+ class GeMatcher : public ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe> {
968
+ public:
969
+ explicit GeMatcher(const Rhs& rhs)
970
+ : ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe>(rhs) { }
971
+ static const char* Desc() { return "is >="; }
972
+ static const char* NegatedDesc() { return "isn't >="; }
973
+ };
974
+
975
+ // Implements the polymorphic IsNull() matcher, which matches any raw or smart
976
+ // pointer that is NULL.
977
+ class IsNullMatcher {
978
+ public:
979
+ template <typename Pointer>
980
+ bool MatchAndExplain(const Pointer& p,
981
+ MatchResultListener* /* listener */) const {
982
+ #if GTEST_LANG_CXX11
983
+ return p == nullptr;
984
+ #else // GTEST_LANG_CXX11
985
+ return GetRawPointer(p) == NULL;
986
+ #endif // GTEST_LANG_CXX11
987
+ }
988
+
989
+ void DescribeTo(::std::ostream* os) const { *os << "is NULL"; }
990
+ void DescribeNegationTo(::std::ostream* os) const {
991
+ *os << "isn't NULL";
992
+ }
993
+ };
994
+
995
+ // Implements the polymorphic NotNull() matcher, which matches any raw or smart
996
+ // pointer that is not NULL.
997
+ class NotNullMatcher {
998
+ public:
999
+ template <typename Pointer>
1000
+ bool MatchAndExplain(const Pointer& p,
1001
+ MatchResultListener* /* listener */) const {
1002
+ #if GTEST_LANG_CXX11
1003
+ return p != nullptr;
1004
+ #else // GTEST_LANG_CXX11
1005
+ return GetRawPointer(p) != NULL;
1006
+ #endif // GTEST_LANG_CXX11
1007
+ }
1008
+
1009
+ void DescribeTo(::std::ostream* os) const { *os << "isn't NULL"; }
1010
+ void DescribeNegationTo(::std::ostream* os) const {
1011
+ *os << "is NULL";
1012
+ }
1013
+ };
1014
+
1015
+ // Ref(variable) matches any argument that is a reference to
1016
+ // 'variable'. This matcher is polymorphic as it can match any
1017
+ // super type of the type of 'variable'.
1018
+ //
1019
+ // The RefMatcher template class implements Ref(variable). It can
1020
+ // only be instantiated with a reference type. This prevents a user
1021
+ // from mistakenly using Ref(x) to match a non-reference function
1022
+ // argument. For example, the following will righteously cause a
1023
+ // compiler error:
1024
+ //
1025
+ // int n;
1026
+ // Matcher<int> m1 = Ref(n); // This won't compile.
1027
+ // Matcher<int&> m2 = Ref(n); // This will compile.
1028
+ template <typename T>
1029
+ class RefMatcher;
1030
+
1031
+ template <typename T>
1032
+ class RefMatcher<T&> {
1033
+ // Google Mock is a generic framework and thus needs to support
1034
+ // mocking any function types, including those that take non-const
1035
+ // reference arguments. Therefore the template parameter T (and
1036
+ // Super below) can be instantiated to either a const type or a
1037
+ // non-const type.
1038
+ public:
1039
+ // RefMatcher() takes a T& instead of const T&, as we want the
1040
+ // compiler to catch using Ref(const_value) as a matcher for a
1041
+ // non-const reference.
1042
+ explicit RefMatcher(T& x) : object_(x) {} // NOLINT
1043
+
1044
+ template <typename Super>
1045
+ operator Matcher<Super&>() const {
1046
+ // By passing object_ (type T&) to Impl(), which expects a Super&,
1047
+ // we make sure that Super is a super type of T. In particular,
1048
+ // this catches using Ref(const_value) as a matcher for a
1049
+ // non-const reference, as you cannot implicitly convert a const
1050
+ // reference to a non-const reference.
1051
+ return MakeMatcher(new Impl<Super>(object_));
1052
+ }
1053
+
1054
+ private:
1055
+ template <typename Super>
1056
+ class Impl : public MatcherInterface<Super&> {
1057
+ public:
1058
+ explicit Impl(Super& x) : object_(x) {} // NOLINT
1059
+
1060
+ // MatchAndExplain() takes a Super& (as opposed to const Super&)
1061
+ // in order to match the interface MatcherInterface<Super&>.
1062
+ virtual bool MatchAndExplain(
1063
+ Super& x, MatchResultListener* listener) const {
1064
+ *listener << "which is located @" << static_cast<const void*>(&x);
1065
+ return &x == &object_;
1066
+ }
1067
+
1068
+ virtual void DescribeTo(::std::ostream* os) const {
1069
+ *os << "references the variable ";
1070
+ UniversalPrinter<Super&>::Print(object_, os);
1071
+ }
1072
+
1073
+ virtual void DescribeNegationTo(::std::ostream* os) const {
1074
+ *os << "does not reference the variable ";
1075
+ UniversalPrinter<Super&>::Print(object_, os);
1076
+ }
1077
+
1078
+ private:
1079
+ const Super& object_;
1080
+
1081
+ GTEST_DISALLOW_ASSIGN_(Impl);
1082
+ };
1083
+
1084
+ T& object_;
1085
+
1086
+ GTEST_DISALLOW_ASSIGN_(RefMatcher);
1087
+ };
1088
+
1089
+ // Polymorphic helper functions for narrow and wide string matchers.
1090
+ inline bool CaseInsensitiveCStringEquals(const char* lhs, const char* rhs) {
1091
+ return String::CaseInsensitiveCStringEquals(lhs, rhs);
1092
+ }
1093
+
1094
+ inline bool CaseInsensitiveCStringEquals(const wchar_t* lhs,
1095
+ const wchar_t* rhs) {
1096
+ return String::CaseInsensitiveWideCStringEquals(lhs, rhs);
1097
+ }
1098
+
1099
+ // String comparison for narrow or wide strings that can have embedded NUL
1100
+ // characters.
1101
+ template <typename StringType>
1102
+ bool CaseInsensitiveStringEquals(const StringType& s1,
1103
+ const StringType& s2) {
1104
+ // Are the heads equal?
1105
+ if (!CaseInsensitiveCStringEquals(s1.c_str(), s2.c_str())) {
1106
+ return false;
1107
+ }
1108
+
1109
+ // Skip the equal heads.
1110
+ const typename StringType::value_type nul = 0;
1111
+ const size_t i1 = s1.find(nul), i2 = s2.find(nul);
1112
+
1113
+ // Are we at the end of either s1 or s2?
1114
+ if (i1 == StringType::npos || i2 == StringType::npos) {
1115
+ return i1 == i2;
1116
+ }
1117
+
1118
+ // Are the tails equal?
1119
+ return CaseInsensitiveStringEquals(s1.substr(i1 + 1), s2.substr(i2 + 1));
1120
+ }
1121
+
1122
+ // String matchers.
1123
+
1124
+ // Implements equality-based string matchers like StrEq, StrCaseNe, and etc.
1125
+ template <typename StringType>
1126
+ class StrEqualityMatcher {
1127
+ public:
1128
+ StrEqualityMatcher(const StringType& str, bool expect_eq,
1129
+ bool case_sensitive)
1130
+ : string_(str), expect_eq_(expect_eq), case_sensitive_(case_sensitive) {}
1131
+
1132
+ // Accepts pointer types, particularly:
1133
+ // const char*
1134
+ // char*
1135
+ // const wchar_t*
1136
+ // wchar_t*
1137
+ template <typename CharType>
1138
+ bool MatchAndExplain(CharType* s, MatchResultListener* listener) const {
1139
+ if (s == NULL) {
1140
+ return !expect_eq_;
1141
+ }
1142
+ return MatchAndExplain(StringType(s), listener);
1143
+ }
1144
+
1145
+ // Matches anything that can convert to StringType.
1146
+ //
1147
+ // This is a template, not just a plain function with const StringType&,
1148
+ // because StringPiece has some interfering non-explicit constructors.
1149
+ template <typename MatcheeStringType>
1150
+ bool MatchAndExplain(const MatcheeStringType& s,
1151
+ MatchResultListener* /* listener */) const {
1152
+ const StringType& s2(s);
1153
+ const bool eq = case_sensitive_ ? s2 == string_ :
1154
+ CaseInsensitiveStringEquals(s2, string_);
1155
+ return expect_eq_ == eq;
1156
+ }
1157
+
1158
+ void DescribeTo(::std::ostream* os) const {
1159
+ DescribeToHelper(expect_eq_, os);
1160
+ }
1161
+
1162
+ void DescribeNegationTo(::std::ostream* os) const {
1163
+ DescribeToHelper(!expect_eq_, os);
1164
+ }
1165
+
1166
+ private:
1167
+ void DescribeToHelper(bool expect_eq, ::std::ostream* os) const {
1168
+ *os << (expect_eq ? "is " : "isn't ");
1169
+ *os << "equal to ";
1170
+ if (!case_sensitive_) {
1171
+ *os << "(ignoring case) ";
1172
+ }
1173
+ UniversalPrint(string_, os);
1174
+ }
1175
+
1176
+ const StringType string_;
1177
+ const bool expect_eq_;
1178
+ const bool case_sensitive_;
1179
+
1180
+ GTEST_DISALLOW_ASSIGN_(StrEqualityMatcher);
1181
+ };
1182
+
1183
+ // Implements the polymorphic HasSubstr(substring) matcher, which
1184
+ // can be used as a Matcher<T> as long as T can be converted to a
1185
+ // string.
1186
+ template <typename StringType>
1187
+ class HasSubstrMatcher {
1188
+ public:
1189
+ explicit HasSubstrMatcher(const StringType& substring)
1190
+ : substring_(substring) {}
1191
+
1192
+ // Accepts pointer types, particularly:
1193
+ // const char*
1194
+ // char*
1195
+ // const wchar_t*
1196
+ // wchar_t*
1197
+ template <typename CharType>
1198
+ bool MatchAndExplain(CharType* s, MatchResultListener* listener) const {
1199
+ return s != NULL && MatchAndExplain(StringType(s), listener);
1200
+ }
1201
+
1202
+ // Matches anything that can convert to StringType.
1203
+ //
1204
+ // This is a template, not just a plain function with const StringType&,
1205
+ // because StringPiece has some interfering non-explicit constructors.
1206
+ template <typename MatcheeStringType>
1207
+ bool MatchAndExplain(const MatcheeStringType& s,
1208
+ MatchResultListener* /* listener */) const {
1209
+ const StringType& s2(s);
1210
+ return s2.find(substring_) != StringType::npos;
1211
+ }
1212
+
1213
+ // Describes what this matcher matches.
1214
+ void DescribeTo(::std::ostream* os) const {
1215
+ *os << "has substring ";
1216
+ UniversalPrint(substring_, os);
1217
+ }
1218
+
1219
+ void DescribeNegationTo(::std::ostream* os) const {
1220
+ *os << "has no substring ";
1221
+ UniversalPrint(substring_, os);
1222
+ }
1223
+
1224
+ private:
1225
+ const StringType substring_;
1226
+
1227
+ GTEST_DISALLOW_ASSIGN_(HasSubstrMatcher);
1228
+ };
1229
+
1230
+ // Implements the polymorphic StartsWith(substring) matcher, which
1231
+ // can be used as a Matcher<T> as long as T can be converted to a
1232
+ // string.
1233
+ template <typename StringType>
1234
+ class StartsWithMatcher {
1235
+ public:
1236
+ explicit StartsWithMatcher(const StringType& prefix) : prefix_(prefix) {
1237
+ }
1238
+
1239
+ // Accepts pointer types, particularly:
1240
+ // const char*
1241
+ // char*
1242
+ // const wchar_t*
1243
+ // wchar_t*
1244
+ template <typename CharType>
1245
+ bool MatchAndExplain(CharType* s, MatchResultListener* listener) const {
1246
+ return s != NULL && MatchAndExplain(StringType(s), listener);
1247
+ }
1248
+
1249
+ // Matches anything that can convert to StringType.
1250
+ //
1251
+ // This is a template, not just a plain function with const StringType&,
1252
+ // because StringPiece has some interfering non-explicit constructors.
1253
+ template <typename MatcheeStringType>
1254
+ bool MatchAndExplain(const MatcheeStringType& s,
1255
+ MatchResultListener* /* listener */) const {
1256
+ const StringType& s2(s);
1257
+ return s2.length() >= prefix_.length() &&
1258
+ s2.substr(0, prefix_.length()) == prefix_;
1259
+ }
1260
+
1261
+ void DescribeTo(::std::ostream* os) const {
1262
+ *os << "starts with ";
1263
+ UniversalPrint(prefix_, os);
1264
+ }
1265
+
1266
+ void DescribeNegationTo(::std::ostream* os) const {
1267
+ *os << "doesn't start with ";
1268
+ UniversalPrint(prefix_, os);
1269
+ }
1270
+
1271
+ private:
1272
+ const StringType prefix_;
1273
+
1274
+ GTEST_DISALLOW_ASSIGN_(StartsWithMatcher);
1275
+ };
1276
+
1277
+ // Implements the polymorphic EndsWith(substring) matcher, which
1278
+ // can be used as a Matcher<T> as long as T can be converted to a
1279
+ // string.
1280
+ template <typename StringType>
1281
+ class EndsWithMatcher {
1282
+ public:
1283
+ explicit EndsWithMatcher(const StringType& suffix) : suffix_(suffix) {}
1284
+
1285
+ // Accepts pointer types, particularly:
1286
+ // const char*
1287
+ // char*
1288
+ // const wchar_t*
1289
+ // wchar_t*
1290
+ template <typename CharType>
1291
+ bool MatchAndExplain(CharType* s, MatchResultListener* listener) const {
1292
+ return s != NULL && MatchAndExplain(StringType(s), listener);
1293
+ }
1294
+
1295
+ // Matches anything that can convert to StringType.
1296
+ //
1297
+ // This is a template, not just a plain function with const StringType&,
1298
+ // because StringPiece has some interfering non-explicit constructors.
1299
+ template <typename MatcheeStringType>
1300
+ bool MatchAndExplain(const MatcheeStringType& s,
1301
+ MatchResultListener* /* listener */) const {
1302
+ const StringType& s2(s);
1303
+ return s2.length() >= suffix_.length() &&
1304
+ s2.substr(s2.length() - suffix_.length()) == suffix_;
1305
+ }
1306
+
1307
+ void DescribeTo(::std::ostream* os) const {
1308
+ *os << "ends with ";
1309
+ UniversalPrint(suffix_, os);
1310
+ }
1311
+
1312
+ void DescribeNegationTo(::std::ostream* os) const {
1313
+ *os << "doesn't end with ";
1314
+ UniversalPrint(suffix_, os);
1315
+ }
1316
+
1317
+ private:
1318
+ const StringType suffix_;
1319
+
1320
+ GTEST_DISALLOW_ASSIGN_(EndsWithMatcher);
1321
+ };
1322
+
1323
+ // Implements polymorphic matchers MatchesRegex(regex) and
1324
+ // ContainsRegex(regex), which can be used as a Matcher<T> as long as
1325
+ // T can be converted to a string.
1326
+ class MatchesRegexMatcher {
1327
+ public:
1328
+ MatchesRegexMatcher(const RE* regex, bool full_match)
1329
+ : regex_(regex), full_match_(full_match) {}
1330
+
1331
+ // Accepts pointer types, particularly:
1332
+ // const char*
1333
+ // char*
1334
+ // const wchar_t*
1335
+ // wchar_t*
1336
+ template <typename CharType>
1337
+ bool MatchAndExplain(CharType* s, MatchResultListener* listener) const {
1338
+ return s != NULL && MatchAndExplain(internal::string(s), listener);
1339
+ }
1340
+
1341
+ // Matches anything that can convert to internal::string.
1342
+ //
1343
+ // This is a template, not just a plain function with const internal::string&,
1344
+ // because StringPiece has some interfering non-explicit constructors.
1345
+ template <class MatcheeStringType>
1346
+ bool MatchAndExplain(const MatcheeStringType& s,
1347
+ MatchResultListener* /* listener */) const {
1348
+ const internal::string& s2(s);
1349
+ return full_match_ ? RE::FullMatch(s2, *regex_) :
1350
+ RE::PartialMatch(s2, *regex_);
1351
+ }
1352
+
1353
+ void DescribeTo(::std::ostream* os) const {
1354
+ *os << (full_match_ ? "matches" : "contains")
1355
+ << " regular expression ";
1356
+ UniversalPrinter<internal::string>::Print(regex_->pattern(), os);
1357
+ }
1358
+
1359
+ void DescribeNegationTo(::std::ostream* os) const {
1360
+ *os << "doesn't " << (full_match_ ? "match" : "contain")
1361
+ << " regular expression ";
1362
+ UniversalPrinter<internal::string>::Print(regex_->pattern(), os);
1363
+ }
1364
+
1365
+ private:
1366
+ const internal::linked_ptr<const RE> regex_;
1367
+ const bool full_match_;
1368
+
1369
+ GTEST_DISALLOW_ASSIGN_(MatchesRegexMatcher);
1370
+ };
1371
+
1372
+ // Implements a matcher that compares the two fields of a 2-tuple
1373
+ // using one of the ==, <=, <, etc, operators. The two fields being
1374
+ // compared don't have to have the same type.
1375
+ //
1376
+ // The matcher defined here is polymorphic (for example, Eq() can be
1377
+ // used to match a tuple<int, short>, a tuple<const long&, double>,
1378
+ // etc). Therefore we use a template type conversion operator in the
1379
+ // implementation.
1380
+ template <typename D, typename Op>
1381
+ class PairMatchBase {
1382
+ public:
1383
+ template <typename T1, typename T2>
1384
+ operator Matcher< ::testing::tuple<T1, T2> >() const {
1385
+ return MakeMatcher(new Impl< ::testing::tuple<T1, T2> >);
1386
+ }
1387
+ template <typename T1, typename T2>
1388
+ operator Matcher<const ::testing::tuple<T1, T2>&>() const {
1389
+ return MakeMatcher(new Impl<const ::testing::tuple<T1, T2>&>);
1390
+ }
1391
+
1392
+ private:
1393
+ static ::std::ostream& GetDesc(::std::ostream& os) { // NOLINT
1394
+ return os << D::Desc();
1395
+ }
1396
+
1397
+ template <typename Tuple>
1398
+ class Impl : public MatcherInterface<Tuple> {
1399
+ public:
1400
+ virtual bool MatchAndExplain(
1401
+ Tuple args,
1402
+ MatchResultListener* /* listener */) const {
1403
+ return Op()(::testing::get<0>(args), ::testing::get<1>(args));
1404
+ }
1405
+ virtual void DescribeTo(::std::ostream* os) const {
1406
+ *os << "are " << GetDesc;
1407
+ }
1408
+ virtual void DescribeNegationTo(::std::ostream* os) const {
1409
+ *os << "aren't " << GetDesc;
1410
+ }
1411
+ };
1412
+ };
1413
+
1414
+ class Eq2Matcher : public PairMatchBase<Eq2Matcher, AnyEq> {
1415
+ public:
1416
+ static const char* Desc() { return "an equal pair"; }
1417
+ };
1418
+ class Ne2Matcher : public PairMatchBase<Ne2Matcher, AnyNe> {
1419
+ public:
1420
+ static const char* Desc() { return "an unequal pair"; }
1421
+ };
1422
+ class Lt2Matcher : public PairMatchBase<Lt2Matcher, AnyLt> {
1423
+ public:
1424
+ static const char* Desc() { return "a pair where the first < the second"; }
1425
+ };
1426
+ class Gt2Matcher : public PairMatchBase<Gt2Matcher, AnyGt> {
1427
+ public:
1428
+ static const char* Desc() { return "a pair where the first > the second"; }
1429
+ };
1430
+ class Le2Matcher : public PairMatchBase<Le2Matcher, AnyLe> {
1431
+ public:
1432
+ static const char* Desc() { return "a pair where the first <= the second"; }
1433
+ };
1434
+ class Ge2Matcher : public PairMatchBase<Ge2Matcher, AnyGe> {
1435
+ public:
1436
+ static const char* Desc() { return "a pair where the first >= the second"; }
1437
+ };
1438
+
1439
+ // Implements the Not(...) matcher for a particular argument type T.
1440
+ // We do not nest it inside the NotMatcher class template, as that
1441
+ // will prevent different instantiations of NotMatcher from sharing
1442
+ // the same NotMatcherImpl<T> class.
1443
+ template <typename T>
1444
+ class NotMatcherImpl : public MatcherInterface<T> {
1445
+ public:
1446
+ explicit NotMatcherImpl(const Matcher<T>& matcher)
1447
+ : matcher_(matcher) {}
1448
+
1449
+ virtual bool MatchAndExplain(T x, MatchResultListener* listener) const {
1450
+ return !matcher_.MatchAndExplain(x, listener);
1451
+ }
1452
+
1453
+ virtual void DescribeTo(::std::ostream* os) const {
1454
+ matcher_.DescribeNegationTo(os);
1455
+ }
1456
+
1457
+ virtual void DescribeNegationTo(::std::ostream* os) const {
1458
+ matcher_.DescribeTo(os);
1459
+ }
1460
+
1461
+ private:
1462
+ const Matcher<T> matcher_;
1463
+
1464
+ GTEST_DISALLOW_ASSIGN_(NotMatcherImpl);
1465
+ };
1466
+
1467
+ // Implements the Not(m) matcher, which matches a value that doesn't
1468
+ // match matcher m.
1469
+ template <typename InnerMatcher>
1470
+ class NotMatcher {
1471
+ public:
1472
+ explicit NotMatcher(InnerMatcher matcher) : matcher_(matcher) {}
1473
+
1474
+ // This template type conversion operator allows Not(m) to be used
1475
+ // to match any type m can match.
1476
+ template <typename T>
1477
+ operator Matcher<T>() const {
1478
+ return Matcher<T>(new NotMatcherImpl<T>(SafeMatcherCast<T>(matcher_)));
1479
+ }
1480
+
1481
+ private:
1482
+ InnerMatcher matcher_;
1483
+
1484
+ GTEST_DISALLOW_ASSIGN_(NotMatcher);
1485
+ };
1486
+
1487
+ // Implements the AllOf(m1, m2) matcher for a particular argument type
1488
+ // T. We do not nest it inside the BothOfMatcher class template, as
1489
+ // that will prevent different instantiations of BothOfMatcher from
1490
+ // sharing the same BothOfMatcherImpl<T> class.
1491
+ template <typename T>
1492
+ class BothOfMatcherImpl : public MatcherInterface<T> {
1493
+ public:
1494
+ BothOfMatcherImpl(const Matcher<T>& matcher1, const Matcher<T>& matcher2)
1495
+ : matcher1_(matcher1), matcher2_(matcher2) {}
1496
+
1497
+ virtual void DescribeTo(::std::ostream* os) const {
1498
+ *os << "(";
1499
+ matcher1_.DescribeTo(os);
1500
+ *os << ") and (";
1501
+ matcher2_.DescribeTo(os);
1502
+ *os << ")";
1503
+ }
1504
+
1505
+ virtual void DescribeNegationTo(::std::ostream* os) const {
1506
+ *os << "(";
1507
+ matcher1_.DescribeNegationTo(os);
1508
+ *os << ") or (";
1509
+ matcher2_.DescribeNegationTo(os);
1510
+ *os << ")";
1511
+ }
1512
+
1513
+ virtual bool MatchAndExplain(T x, MatchResultListener* listener) const {
1514
+ // If either matcher1_ or matcher2_ doesn't match x, we only need
1515
+ // to explain why one of them fails.
1516
+ StringMatchResultListener listener1;
1517
+ if (!matcher1_.MatchAndExplain(x, &listener1)) {
1518
+ *listener << listener1.str();
1519
+ return false;
1520
+ }
1521
+
1522
+ StringMatchResultListener listener2;
1523
+ if (!matcher2_.MatchAndExplain(x, &listener2)) {
1524
+ *listener << listener2.str();
1525
+ return false;
1526
+ }
1527
+
1528
+ // Otherwise we need to explain why *both* of them match.
1529
+ const internal::string s1 = listener1.str();
1530
+ const internal::string s2 = listener2.str();
1531
+
1532
+ if (s1 == "") {
1533
+ *listener << s2;
1534
+ } else {
1535
+ *listener << s1;
1536
+ if (s2 != "") {
1537
+ *listener << ", and " << s2;
1538
+ }
1539
+ }
1540
+ return true;
1541
+ }
1542
+
1543
+ private:
1544
+ const Matcher<T> matcher1_;
1545
+ const Matcher<T> matcher2_;
1546
+
1547
+ GTEST_DISALLOW_ASSIGN_(BothOfMatcherImpl);
1548
+ };
1549
+
1550
+ #if GTEST_LANG_CXX11
1551
+ // MatcherList provides mechanisms for storing a variable number of matchers in
1552
+ // a list structure (ListType) and creating a combining matcher from such a
1553
+ // list.
1554
+ // The template is defined recursively using the following template paramters:
1555
+ // * kSize is the length of the MatcherList.
1556
+ // * Head is the type of the first matcher of the list.
1557
+ // * Tail denotes the types of the remaining matchers of the list.
1558
+ template <int kSize, typename Head, typename... Tail>
1559
+ struct MatcherList {
1560
+ typedef MatcherList<kSize - 1, Tail...> MatcherListTail;
1561
+ typedef ::std::pair<Head, typename MatcherListTail::ListType> ListType;
1562
+
1563
+ // BuildList stores variadic type values in a nested pair structure.
1564
+ // Example:
1565
+ // MatcherList<3, int, string, float>::BuildList(5, "foo", 2.0) will return
1566
+ // the corresponding result of type pair<int, pair<string, float>>.
1567
+ static ListType BuildList(const Head& matcher, const Tail&... tail) {
1568
+ return ListType(matcher, MatcherListTail::BuildList(tail...));
1569
+ }
1570
+
1571
+ // CreateMatcher<T> creates a Matcher<T> from a given list of matchers (built
1572
+ // by BuildList()). CombiningMatcher<T> is used to combine the matchers of the
1573
+ // list. CombiningMatcher<T> must implement MatcherInterface<T> and have a
1574
+ // constructor taking two Matcher<T>s as input.
1575
+ template <typename T, template <typename /* T */> class CombiningMatcher>
1576
+ static Matcher<T> CreateMatcher(const ListType& matchers) {
1577
+ return Matcher<T>(new CombiningMatcher<T>(
1578
+ SafeMatcherCast<T>(matchers.first),
1579
+ MatcherListTail::template CreateMatcher<T, CombiningMatcher>(
1580
+ matchers.second)));
1581
+ }
1582
+ };
1583
+
1584
+ // The following defines the base case for the recursive definition of
1585
+ // MatcherList.
1586
+ template <typename Matcher1, typename Matcher2>
1587
+ struct MatcherList<2, Matcher1, Matcher2> {
1588
+ typedef ::std::pair<Matcher1, Matcher2> ListType;
1589
+
1590
+ static ListType BuildList(const Matcher1& matcher1,
1591
+ const Matcher2& matcher2) {
1592
+ return ::std::pair<Matcher1, Matcher2>(matcher1, matcher2);
1593
+ }
1594
+
1595
+ template <typename T, template <typename /* T */> class CombiningMatcher>
1596
+ static Matcher<T> CreateMatcher(const ListType& matchers) {
1597
+ return Matcher<T>(new CombiningMatcher<T>(
1598
+ SafeMatcherCast<T>(matchers.first),
1599
+ SafeMatcherCast<T>(matchers.second)));
1600
+ }
1601
+ };
1602
+
1603
+ // VariadicMatcher is used for the variadic implementation of
1604
+ // AllOf(m_1, m_2, ...) and AnyOf(m_1, m_2, ...).
1605
+ // CombiningMatcher<T> is used to recursively combine the provided matchers
1606
+ // (of type Args...).
1607
+ template <template <typename T> class CombiningMatcher, typename... Args>
1608
+ class VariadicMatcher {
1609
+ public:
1610
+ VariadicMatcher(const Args&... matchers) // NOLINT
1611
+ : matchers_(MatcherListType::BuildList(matchers...)) {}
1612
+
1613
+ // This template type conversion operator allows an
1614
+ // VariadicMatcher<Matcher1, Matcher2...> object to match any type that
1615
+ // all of the provided matchers (Matcher1, Matcher2, ...) can match.
1616
+ template <typename T>
1617
+ operator Matcher<T>() const {
1618
+ return MatcherListType::template CreateMatcher<T, CombiningMatcher>(
1619
+ matchers_);
1620
+ }
1621
+
1622
+ private:
1623
+ typedef MatcherList<sizeof...(Args), Args...> MatcherListType;
1624
+
1625
+ const typename MatcherListType::ListType matchers_;
1626
+
1627
+ GTEST_DISALLOW_ASSIGN_(VariadicMatcher);
1628
+ };
1629
+
1630
+ template <typename... Args>
1631
+ using AllOfMatcher = VariadicMatcher<BothOfMatcherImpl, Args...>;
1632
+
1633
+ #endif // GTEST_LANG_CXX11
1634
+
1635
+ // Used for implementing the AllOf(m_1, ..., m_n) matcher, which
1636
+ // matches a value that matches all of the matchers m_1, ..., and m_n.
1637
+ template <typename Matcher1, typename Matcher2>
1638
+ class BothOfMatcher {
1639
+ public:
1640
+ BothOfMatcher(Matcher1 matcher1, Matcher2 matcher2)
1641
+ : matcher1_(matcher1), matcher2_(matcher2) {}
1642
+
1643
+ // This template type conversion operator allows a
1644
+ // BothOfMatcher<Matcher1, Matcher2> object to match any type that
1645
+ // both Matcher1 and Matcher2 can match.
1646
+ template <typename T>
1647
+ operator Matcher<T>() const {
1648
+ return Matcher<T>(new BothOfMatcherImpl<T>(SafeMatcherCast<T>(matcher1_),
1649
+ SafeMatcherCast<T>(matcher2_)));
1650
+ }
1651
+
1652
+ private:
1653
+ Matcher1 matcher1_;
1654
+ Matcher2 matcher2_;
1655
+
1656
+ GTEST_DISALLOW_ASSIGN_(BothOfMatcher);
1657
+ };
1658
+
1659
+ // Implements the AnyOf(m1, m2) matcher for a particular argument type
1660
+ // T. We do not nest it inside the AnyOfMatcher class template, as
1661
+ // that will prevent different instantiations of AnyOfMatcher from
1662
+ // sharing the same EitherOfMatcherImpl<T> class.
1663
+ template <typename T>
1664
+ class EitherOfMatcherImpl : public MatcherInterface<T> {
1665
+ public:
1666
+ EitherOfMatcherImpl(const Matcher<T>& matcher1, const Matcher<T>& matcher2)
1667
+ : matcher1_(matcher1), matcher2_(matcher2) {}
1668
+
1669
+ virtual void DescribeTo(::std::ostream* os) const {
1670
+ *os << "(";
1671
+ matcher1_.DescribeTo(os);
1672
+ *os << ") or (";
1673
+ matcher2_.DescribeTo(os);
1674
+ *os << ")";
1675
+ }
1676
+
1677
+ virtual void DescribeNegationTo(::std::ostream* os) const {
1678
+ *os << "(";
1679
+ matcher1_.DescribeNegationTo(os);
1680
+ *os << ") and (";
1681
+ matcher2_.DescribeNegationTo(os);
1682
+ *os << ")";
1683
+ }
1684
+
1685
+ virtual bool MatchAndExplain(T x, MatchResultListener* listener) const {
1686
+ // If either matcher1_ or matcher2_ matches x, we just need to
1687
+ // explain why *one* of them matches.
1688
+ StringMatchResultListener listener1;
1689
+ if (matcher1_.MatchAndExplain(x, &listener1)) {
1690
+ *listener << listener1.str();
1691
+ return true;
1692
+ }
1693
+
1694
+ StringMatchResultListener listener2;
1695
+ if (matcher2_.MatchAndExplain(x, &listener2)) {
1696
+ *listener << listener2.str();
1697
+ return true;
1698
+ }
1699
+
1700
+ // Otherwise we need to explain why *both* of them fail.
1701
+ const internal::string s1 = listener1.str();
1702
+ const internal::string s2 = listener2.str();
1703
+
1704
+ if (s1 == "") {
1705
+ *listener << s2;
1706
+ } else {
1707
+ *listener << s1;
1708
+ if (s2 != "") {
1709
+ *listener << ", and " << s2;
1710
+ }
1711
+ }
1712
+ return false;
1713
+ }
1714
+
1715
+ private:
1716
+ const Matcher<T> matcher1_;
1717
+ const Matcher<T> matcher2_;
1718
+
1719
+ GTEST_DISALLOW_ASSIGN_(EitherOfMatcherImpl);
1720
+ };
1721
+
1722
+ #if GTEST_LANG_CXX11
1723
+ // AnyOfMatcher is used for the variadic implementation of AnyOf(m_1, m_2, ...).
1724
+ template <typename... Args>
1725
+ using AnyOfMatcher = VariadicMatcher<EitherOfMatcherImpl, Args...>;
1726
+
1727
+ #endif // GTEST_LANG_CXX11
1728
+
1729
+ // Used for implementing the AnyOf(m_1, ..., m_n) matcher, which
1730
+ // matches a value that matches at least one of the matchers m_1, ...,
1731
+ // and m_n.
1732
+ template <typename Matcher1, typename Matcher2>
1733
+ class EitherOfMatcher {
1734
+ public:
1735
+ EitherOfMatcher(Matcher1 matcher1, Matcher2 matcher2)
1736
+ : matcher1_(matcher1), matcher2_(matcher2) {}
1737
+
1738
+ // This template type conversion operator allows a
1739
+ // EitherOfMatcher<Matcher1, Matcher2> object to match any type that
1740
+ // both Matcher1 and Matcher2 can match.
1741
+ template <typename T>
1742
+ operator Matcher<T>() const {
1743
+ return Matcher<T>(new EitherOfMatcherImpl<T>(
1744
+ SafeMatcherCast<T>(matcher1_), SafeMatcherCast<T>(matcher2_)));
1745
+ }
1746
+
1747
+ private:
1748
+ Matcher1 matcher1_;
1749
+ Matcher2 matcher2_;
1750
+
1751
+ GTEST_DISALLOW_ASSIGN_(EitherOfMatcher);
1752
+ };
1753
+
1754
+ // Used for implementing Truly(pred), which turns a predicate into a
1755
+ // matcher.
1756
+ template <typename Predicate>
1757
+ class TrulyMatcher {
1758
+ public:
1759
+ explicit TrulyMatcher(Predicate pred) : predicate_(pred) {}
1760
+
1761
+ // This method template allows Truly(pred) to be used as a matcher
1762
+ // for type T where T is the argument type of predicate 'pred'. The
1763
+ // argument is passed by reference as the predicate may be
1764
+ // interested in the address of the argument.
1765
+ template <typename T>
1766
+ bool MatchAndExplain(T& x, // NOLINT
1767
+ MatchResultListener* /* listener */) const {
1768
+ // Without the if-statement, MSVC sometimes warns about converting
1769
+ // a value to bool (warning 4800).
1770
+ //
1771
+ // We cannot write 'return !!predicate_(x);' as that doesn't work
1772
+ // when predicate_(x) returns a class convertible to bool but
1773
+ // having no operator!().
1774
+ if (predicate_(x))
1775
+ return true;
1776
+ return false;
1777
+ }
1778
+
1779
+ void DescribeTo(::std::ostream* os) const {
1780
+ *os << "satisfies the given predicate";
1781
+ }
1782
+
1783
+ void DescribeNegationTo(::std::ostream* os) const {
1784
+ *os << "doesn't satisfy the given predicate";
1785
+ }
1786
+
1787
+ private:
1788
+ Predicate predicate_;
1789
+
1790
+ GTEST_DISALLOW_ASSIGN_(TrulyMatcher);
1791
+ };
1792
+
1793
+ // Used for implementing Matches(matcher), which turns a matcher into
1794
+ // a predicate.
1795
+ template <typename M>
1796
+ class MatcherAsPredicate {
1797
+ public:
1798
+ explicit MatcherAsPredicate(M matcher) : matcher_(matcher) {}
1799
+
1800
+ // This template operator() allows Matches(m) to be used as a
1801
+ // predicate on type T where m is a matcher on type T.
1802
+ //
1803
+ // The argument x is passed by reference instead of by value, as
1804
+ // some matcher may be interested in its address (e.g. as in
1805
+ // Matches(Ref(n))(x)).
1806
+ template <typename T>
1807
+ bool operator()(const T& x) const {
1808
+ // We let matcher_ commit to a particular type here instead of
1809
+ // when the MatcherAsPredicate object was constructed. This
1810
+ // allows us to write Matches(m) where m is a polymorphic matcher
1811
+ // (e.g. Eq(5)).
1812
+ //
1813
+ // If we write Matcher<T>(matcher_).Matches(x) here, it won't
1814
+ // compile when matcher_ has type Matcher<const T&>; if we write
1815
+ // Matcher<const T&>(matcher_).Matches(x) here, it won't compile
1816
+ // when matcher_ has type Matcher<T>; if we just write
1817
+ // matcher_.Matches(x), it won't compile when matcher_ is
1818
+ // polymorphic, e.g. Eq(5).
1819
+ //
1820
+ // MatcherCast<const T&>() is necessary for making the code work
1821
+ // in all of the above situations.
1822
+ return MatcherCast<const T&>(matcher_).Matches(x);
1823
+ }
1824
+
1825
+ private:
1826
+ M matcher_;
1827
+
1828
+ GTEST_DISALLOW_ASSIGN_(MatcherAsPredicate);
1829
+ };
1830
+
1831
+ // For implementing ASSERT_THAT() and EXPECT_THAT(). The template
1832
+ // argument M must be a type that can be converted to a matcher.
1833
+ template <typename M>
1834
+ class PredicateFormatterFromMatcher {
1835
+ public:
1836
+ explicit PredicateFormatterFromMatcher(M m) : matcher_(internal::move(m)) {}
1837
+
1838
+ // This template () operator allows a PredicateFormatterFromMatcher
1839
+ // object to act as a predicate-formatter suitable for using with
1840
+ // Google Test's EXPECT_PRED_FORMAT1() macro.
1841
+ template <typename T>
1842
+ AssertionResult operator()(const char* value_text, const T& x) const {
1843
+ // We convert matcher_ to a Matcher<const T&> *now* instead of
1844
+ // when the PredicateFormatterFromMatcher object was constructed,
1845
+ // as matcher_ may be polymorphic (e.g. NotNull()) and we won't
1846
+ // know which type to instantiate it to until we actually see the
1847
+ // type of x here.
1848
+ //
1849
+ // We write SafeMatcherCast<const T&>(matcher_) instead of
1850
+ // Matcher<const T&>(matcher_), as the latter won't compile when
1851
+ // matcher_ has type Matcher<T> (e.g. An<int>()).
1852
+ // We don't write MatcherCast<const T&> either, as that allows
1853
+ // potentially unsafe downcasting of the matcher argument.
1854
+ const Matcher<const T&> matcher = SafeMatcherCast<const T&>(matcher_);
1855
+ StringMatchResultListener listener;
1856
+ if (MatchPrintAndExplain(x, matcher, &listener))
1857
+ return AssertionSuccess();
1858
+
1859
+ ::std::stringstream ss;
1860
+ ss << "Value of: " << value_text << "\n"
1861
+ << "Expected: ";
1862
+ matcher.DescribeTo(&ss);
1863
+ ss << "\n Actual: " << listener.str();
1864
+ return AssertionFailure() << ss.str();
1865
+ }
1866
+
1867
+ private:
1868
+ const M matcher_;
1869
+
1870
+ GTEST_DISALLOW_ASSIGN_(PredicateFormatterFromMatcher);
1871
+ };
1872
+
1873
+ // A helper function for converting a matcher to a predicate-formatter
1874
+ // without the user needing to explicitly write the type. This is
1875
+ // used for implementing ASSERT_THAT() and EXPECT_THAT().
1876
+ // Implementation detail: 'matcher' is received by-value to force decaying.
1877
+ template <typename M>
1878
+ inline PredicateFormatterFromMatcher<M>
1879
+ MakePredicateFormatterFromMatcher(M matcher) {
1880
+ return PredicateFormatterFromMatcher<M>(internal::move(matcher));
1881
+ }
1882
+
1883
+ // Implements the polymorphic floating point equality matcher, which matches
1884
+ // two float values using ULP-based approximation or, optionally, a
1885
+ // user-specified epsilon. The template is meant to be instantiated with
1886
+ // FloatType being either float or double.
1887
+ template <typename FloatType>
1888
+ class FloatingEqMatcher {
1889
+ public:
1890
+ // Constructor for FloatingEqMatcher.
1891
+ // The matcher's input will be compared with expected. The matcher treats two
1892
+ // NANs as equal if nan_eq_nan is true. Otherwise, under IEEE standards,
1893
+ // equality comparisons between NANs will always return false. We specify a
1894
+ // negative max_abs_error_ term to indicate that ULP-based approximation will
1895
+ // be used for comparison.
1896
+ FloatingEqMatcher(FloatType expected, bool nan_eq_nan) :
1897
+ expected_(expected), nan_eq_nan_(nan_eq_nan), max_abs_error_(-1) {
1898
+ }
1899
+
1900
+ // Constructor that supports a user-specified max_abs_error that will be used
1901
+ // for comparison instead of ULP-based approximation. The max absolute
1902
+ // should be non-negative.
1903
+ FloatingEqMatcher(FloatType expected, bool nan_eq_nan,
1904
+ FloatType max_abs_error)
1905
+ : expected_(expected),
1906
+ nan_eq_nan_(nan_eq_nan),
1907
+ max_abs_error_(max_abs_error) {
1908
+ GTEST_CHECK_(max_abs_error >= 0)
1909
+ << ", where max_abs_error is" << max_abs_error;
1910
+ }
1911
+
1912
+ // Implements floating point equality matcher as a Matcher<T>.
1913
+ template <typename T>
1914
+ class Impl : public MatcherInterface<T> {
1915
+ public:
1916
+ Impl(FloatType expected, bool nan_eq_nan, FloatType max_abs_error)
1917
+ : expected_(expected),
1918
+ nan_eq_nan_(nan_eq_nan),
1919
+ max_abs_error_(max_abs_error) {}
1920
+
1921
+ virtual bool MatchAndExplain(T value,
1922
+ MatchResultListener* listener) const {
1923
+ const FloatingPoint<FloatType> actual(value), expected(expected_);
1924
+
1925
+ // Compares NaNs first, if nan_eq_nan_ is true.
1926
+ if (actual.is_nan() || expected.is_nan()) {
1927
+ if (actual.is_nan() && expected.is_nan()) {
1928
+ return nan_eq_nan_;
1929
+ }
1930
+ // One is nan; the other is not nan.
1931
+ return false;
1932
+ }
1933
+ if (HasMaxAbsError()) {
1934
+ // We perform an equality check so that inf will match inf, regardless
1935
+ // of error bounds. If the result of value - expected_ would result in
1936
+ // overflow or if either value is inf, the default result is infinity,
1937
+ // which should only match if max_abs_error_ is also infinity.
1938
+ if (value == expected_) {
1939
+ return true;
1940
+ }
1941
+
1942
+ const FloatType diff = value - expected_;
1943
+ if (fabs(diff) <= max_abs_error_) {
1944
+ return true;
1945
+ }
1946
+
1947
+ if (listener->IsInterested()) {
1948
+ *listener << "which is " << diff << " from " << expected_;
1949
+ }
1950
+ return false;
1951
+ } else {
1952
+ return actual.AlmostEquals(expected);
1953
+ }
1954
+ }
1955
+
1956
+ virtual void DescribeTo(::std::ostream* os) const {
1957
+ // os->precision() returns the previously set precision, which we
1958
+ // store to restore the ostream to its original configuration
1959
+ // after outputting.
1960
+ const ::std::streamsize old_precision = os->precision(
1961
+ ::std::numeric_limits<FloatType>::digits10 + 2);
1962
+ if (FloatingPoint<FloatType>(expected_).is_nan()) {
1963
+ if (nan_eq_nan_) {
1964
+ *os << "is NaN";
1965
+ } else {
1966
+ *os << "never matches";
1967
+ }
1968
+ } else {
1969
+ *os << "is approximately " << expected_;
1970
+ if (HasMaxAbsError()) {
1971
+ *os << " (absolute error <= " << max_abs_error_ << ")";
1972
+ }
1973
+ }
1974
+ os->precision(old_precision);
1975
+ }
1976
+
1977
+ virtual void DescribeNegationTo(::std::ostream* os) const {
1978
+ // As before, get original precision.
1979
+ const ::std::streamsize old_precision = os->precision(
1980
+ ::std::numeric_limits<FloatType>::digits10 + 2);
1981
+ if (FloatingPoint<FloatType>(expected_).is_nan()) {
1982
+ if (nan_eq_nan_) {
1983
+ *os << "isn't NaN";
1984
+ } else {
1985
+ *os << "is anything";
1986
+ }
1987
+ } else {
1988
+ *os << "isn't approximately " << expected_;
1989
+ if (HasMaxAbsError()) {
1990
+ *os << " (absolute error > " << max_abs_error_ << ")";
1991
+ }
1992
+ }
1993
+ // Restore original precision.
1994
+ os->precision(old_precision);
1995
+ }
1996
+
1997
+ private:
1998
+ bool HasMaxAbsError() const {
1999
+ return max_abs_error_ >= 0;
2000
+ }
2001
+
2002
+ const FloatType expected_;
2003
+ const bool nan_eq_nan_;
2004
+ // max_abs_error will be used for value comparison when >= 0.
2005
+ const FloatType max_abs_error_;
2006
+
2007
+ GTEST_DISALLOW_ASSIGN_(Impl);
2008
+ };
2009
+
2010
+ // The following 3 type conversion operators allow FloatEq(expected) and
2011
+ // NanSensitiveFloatEq(expected) to be used as a Matcher<float>, a
2012
+ // Matcher<const float&>, or a Matcher<float&>, but nothing else.
2013
+ // (While Google's C++ coding style doesn't allow arguments passed
2014
+ // by non-const reference, we may see them in code not conforming to
2015
+ // the style. Therefore Google Mock needs to support them.)
2016
+ operator Matcher<FloatType>() const {
2017
+ return MakeMatcher(
2018
+ new Impl<FloatType>(expected_, nan_eq_nan_, max_abs_error_));
2019
+ }
2020
+
2021
+ operator Matcher<const FloatType&>() const {
2022
+ return MakeMatcher(
2023
+ new Impl<const FloatType&>(expected_, nan_eq_nan_, max_abs_error_));
2024
+ }
2025
+
2026
+ operator Matcher<FloatType&>() const {
2027
+ return MakeMatcher(
2028
+ new Impl<FloatType&>(expected_, nan_eq_nan_, max_abs_error_));
2029
+ }
2030
+
2031
+ private:
2032
+ const FloatType expected_;
2033
+ const bool nan_eq_nan_;
2034
+ // max_abs_error will be used for value comparison when >= 0.
2035
+ const FloatType max_abs_error_;
2036
+
2037
+ GTEST_DISALLOW_ASSIGN_(FloatingEqMatcher);
2038
+ };
2039
+
2040
+ // Implements the Pointee(m) matcher for matching a pointer whose
2041
+ // pointee matches matcher m. The pointer can be either raw or smart.
2042
+ template <typename InnerMatcher>
2043
+ class PointeeMatcher {
2044
+ public:
2045
+ explicit PointeeMatcher(const InnerMatcher& matcher) : matcher_(matcher) {}
2046
+
2047
+ // This type conversion operator template allows Pointee(m) to be
2048
+ // used as a matcher for any pointer type whose pointee type is
2049
+ // compatible with the inner matcher, where type Pointer can be
2050
+ // either a raw pointer or a smart pointer.
2051
+ //
2052
+ // The reason we do this instead of relying on
2053
+ // MakePolymorphicMatcher() is that the latter is not flexible
2054
+ // enough for implementing the DescribeTo() method of Pointee().
2055
+ template <typename Pointer>
2056
+ operator Matcher<Pointer>() const {
2057
+ return MakeMatcher(new Impl<Pointer>(matcher_));
2058
+ }
2059
+
2060
+ private:
2061
+ // The monomorphic implementation that works for a particular pointer type.
2062
+ template <typename Pointer>
2063
+ class Impl : public MatcherInterface<Pointer> {
2064
+ public:
2065
+ typedef typename PointeeOf<GTEST_REMOVE_CONST_( // NOLINT
2066
+ GTEST_REMOVE_REFERENCE_(Pointer))>::type Pointee;
2067
+
2068
+ explicit Impl(const InnerMatcher& matcher)
2069
+ : matcher_(MatcherCast<const Pointee&>(matcher)) {}
2070
+
2071
+ virtual void DescribeTo(::std::ostream* os) const {
2072
+ *os << "points to a value that ";
2073
+ matcher_.DescribeTo(os);
2074
+ }
2075
+
2076
+ virtual void DescribeNegationTo(::std::ostream* os) const {
2077
+ *os << "does not point to a value that ";
2078
+ matcher_.DescribeTo(os);
2079
+ }
2080
+
2081
+ virtual bool MatchAndExplain(Pointer pointer,
2082
+ MatchResultListener* listener) const {
2083
+ if (GetRawPointer(pointer) == NULL)
2084
+ return false;
2085
+
2086
+ *listener << "which points to ";
2087
+ return MatchPrintAndExplain(*pointer, matcher_, listener);
2088
+ }
2089
+
2090
+ private:
2091
+ const Matcher<const Pointee&> matcher_;
2092
+
2093
+ GTEST_DISALLOW_ASSIGN_(Impl);
2094
+ };
2095
+
2096
+ const InnerMatcher matcher_;
2097
+
2098
+ GTEST_DISALLOW_ASSIGN_(PointeeMatcher);
2099
+ };
2100
+
2101
+ // Implements the WhenDynamicCastTo<T>(m) matcher that matches a pointer or
2102
+ // reference that matches inner_matcher when dynamic_cast<T> is applied.
2103
+ // The result of dynamic_cast<To> is forwarded to the inner matcher.
2104
+ // If To is a pointer and the cast fails, the inner matcher will receive NULL.
2105
+ // If To is a reference and the cast fails, this matcher returns false
2106
+ // immediately.
2107
+ template <typename To>
2108
+ class WhenDynamicCastToMatcherBase {
2109
+ public:
2110
+ explicit WhenDynamicCastToMatcherBase(const Matcher<To>& matcher)
2111
+ : matcher_(matcher) {}
2112
+
2113
+ void DescribeTo(::std::ostream* os) const {
2114
+ GetCastTypeDescription(os);
2115
+ matcher_.DescribeTo(os);
2116
+ }
2117
+
2118
+ void DescribeNegationTo(::std::ostream* os) const {
2119
+ GetCastTypeDescription(os);
2120
+ matcher_.DescribeNegationTo(os);
2121
+ }
2122
+
2123
+ protected:
2124
+ const Matcher<To> matcher_;
2125
+
2126
+ static string GetToName() {
2127
+ #if GTEST_HAS_RTTI
2128
+ return GetTypeName<To>();
2129
+ #else // GTEST_HAS_RTTI
2130
+ return "the target type";
2131
+ #endif // GTEST_HAS_RTTI
2132
+ }
2133
+
2134
+ private:
2135
+ static void GetCastTypeDescription(::std::ostream* os) {
2136
+ *os << "when dynamic_cast to " << GetToName() << ", ";
2137
+ }
2138
+
2139
+ GTEST_DISALLOW_ASSIGN_(WhenDynamicCastToMatcherBase);
2140
+ };
2141
+
2142
+ // Primary template.
2143
+ // To is a pointer. Cast and forward the result.
2144
+ template <typename To>
2145
+ class WhenDynamicCastToMatcher : public WhenDynamicCastToMatcherBase<To> {
2146
+ public:
2147
+ explicit WhenDynamicCastToMatcher(const Matcher<To>& matcher)
2148
+ : WhenDynamicCastToMatcherBase<To>(matcher) {}
2149
+
2150
+ template <typename From>
2151
+ bool MatchAndExplain(From from, MatchResultListener* listener) const {
2152
+ // TODO(sbenza): Add more detail on failures. ie did the dyn_cast fail?
2153
+ To to = dynamic_cast<To>(from);
2154
+ return MatchPrintAndExplain(to, this->matcher_, listener);
2155
+ }
2156
+ };
2157
+
2158
+ // Specialize for references.
2159
+ // In this case we return false if the dynamic_cast fails.
2160
+ template <typename To>
2161
+ class WhenDynamicCastToMatcher<To&> : public WhenDynamicCastToMatcherBase<To&> {
2162
+ public:
2163
+ explicit WhenDynamicCastToMatcher(const Matcher<To&>& matcher)
2164
+ : WhenDynamicCastToMatcherBase<To&>(matcher) {}
2165
+
2166
+ template <typename From>
2167
+ bool MatchAndExplain(From& from, MatchResultListener* listener) const {
2168
+ // We don't want an std::bad_cast here, so do the cast with pointers.
2169
+ To* to = dynamic_cast<To*>(&from);
2170
+ if (to == NULL) {
2171
+ *listener << "which cannot be dynamic_cast to " << this->GetToName();
2172
+ return false;
2173
+ }
2174
+ return MatchPrintAndExplain(*to, this->matcher_, listener);
2175
+ }
2176
+ };
2177
+
2178
+ // Implements the Field() matcher for matching a field (i.e. member
2179
+ // variable) of an object.
2180
+ template <typename Class, typename FieldType>
2181
+ class FieldMatcher {
2182
+ public:
2183
+ FieldMatcher(FieldType Class::*field,
2184
+ const Matcher<const FieldType&>& matcher)
2185
+ : field_(field), matcher_(matcher) {}
2186
+
2187
+ void DescribeTo(::std::ostream* os) const {
2188
+ *os << "is an object whose given field ";
2189
+ matcher_.DescribeTo(os);
2190
+ }
2191
+
2192
+ void DescribeNegationTo(::std::ostream* os) const {
2193
+ *os << "is an object whose given field ";
2194
+ matcher_.DescribeNegationTo(os);
2195
+ }
2196
+
2197
+ template <typename T>
2198
+ bool MatchAndExplain(const T& value, MatchResultListener* listener) const {
2199
+ return MatchAndExplainImpl(
2200
+ typename ::testing::internal::
2201
+ is_pointer<GTEST_REMOVE_CONST_(T)>::type(),
2202
+ value, listener);
2203
+ }
2204
+
2205
+ private:
2206
+ // The first argument of MatchAndExplainImpl() is needed to help
2207
+ // Symbian's C++ compiler choose which overload to use. Its type is
2208
+ // true_type iff the Field() matcher is used to match a pointer.
2209
+ bool MatchAndExplainImpl(false_type /* is_not_pointer */, const Class& obj,
2210
+ MatchResultListener* listener) const {
2211
+ *listener << "whose given field is ";
2212
+ return MatchPrintAndExplain(obj.*field_, matcher_, listener);
2213
+ }
2214
+
2215
+ bool MatchAndExplainImpl(true_type /* is_pointer */, const Class* p,
2216
+ MatchResultListener* listener) const {
2217
+ if (p == NULL)
2218
+ return false;
2219
+
2220
+ *listener << "which points to an object ";
2221
+ // Since *p has a field, it must be a class/struct/union type and
2222
+ // thus cannot be a pointer. Therefore we pass false_type() as
2223
+ // the first argument.
2224
+ return MatchAndExplainImpl(false_type(), *p, listener);
2225
+ }
2226
+
2227
+ const FieldType Class::*field_;
2228
+ const Matcher<const FieldType&> matcher_;
2229
+
2230
+ GTEST_DISALLOW_ASSIGN_(FieldMatcher);
2231
+ };
2232
+
2233
+ // Implements the Property() matcher for matching a property
2234
+ // (i.e. return value of a getter method) of an object.
2235
+ template <typename Class, typename PropertyType>
2236
+ class PropertyMatcher {
2237
+ public:
2238
+ // The property may have a reference type, so 'const PropertyType&'
2239
+ // may cause double references and fail to compile. That's why we
2240
+ // need GTEST_REFERENCE_TO_CONST, which works regardless of
2241
+ // PropertyType being a reference or not.
2242
+ typedef GTEST_REFERENCE_TO_CONST_(PropertyType) RefToConstProperty;
2243
+
2244
+ PropertyMatcher(PropertyType (Class::*property)() const,
2245
+ const Matcher<RefToConstProperty>& matcher)
2246
+ : property_(property), matcher_(matcher) {}
2247
+
2248
+ void DescribeTo(::std::ostream* os) const {
2249
+ *os << "is an object whose given property ";
2250
+ matcher_.DescribeTo(os);
2251
+ }
2252
+
2253
+ void DescribeNegationTo(::std::ostream* os) const {
2254
+ *os << "is an object whose given property ";
2255
+ matcher_.DescribeNegationTo(os);
2256
+ }
2257
+
2258
+ template <typename T>
2259
+ bool MatchAndExplain(const T&value, MatchResultListener* listener) const {
2260
+ return MatchAndExplainImpl(
2261
+ typename ::testing::internal::
2262
+ is_pointer<GTEST_REMOVE_CONST_(T)>::type(),
2263
+ value, listener);
2264
+ }
2265
+
2266
+ private:
2267
+ // The first argument of MatchAndExplainImpl() is needed to help
2268
+ // Symbian's C++ compiler choose which overload to use. Its type is
2269
+ // true_type iff the Property() matcher is used to match a pointer.
2270
+ bool MatchAndExplainImpl(false_type /* is_not_pointer */, const Class& obj,
2271
+ MatchResultListener* listener) const {
2272
+ *listener << "whose given property is ";
2273
+ // Cannot pass the return value (for example, int) to MatchPrintAndExplain,
2274
+ // which takes a non-const reference as argument.
2275
+ #if defined(_PREFAST_ ) && _MSC_VER == 1800
2276
+ // Workaround bug in VC++ 2013's /analyze parser.
2277
+ // https://connect.microsoft.com/VisualStudio/feedback/details/1106363/internal-compiler-error-with-analyze-due-to-failure-to-infer-move
2278
+ posix::Abort(); // To make sure it is never run.
2279
+ return false;
2280
+ #else
2281
+ RefToConstProperty result = (obj.*property_)();
2282
+ return MatchPrintAndExplain(result, matcher_, listener);
2283
+ #endif
2284
+ }
2285
+
2286
+ bool MatchAndExplainImpl(true_type /* is_pointer */, const Class* p,
2287
+ MatchResultListener* listener) const {
2288
+ if (p == NULL)
2289
+ return false;
2290
+
2291
+ *listener << "which points to an object ";
2292
+ // Since *p has a property method, it must be a class/struct/union
2293
+ // type and thus cannot be a pointer. Therefore we pass
2294
+ // false_type() as the first argument.
2295
+ return MatchAndExplainImpl(false_type(), *p, listener);
2296
+ }
2297
+
2298
+ PropertyType (Class::*property_)() const;
2299
+ const Matcher<RefToConstProperty> matcher_;
2300
+
2301
+ GTEST_DISALLOW_ASSIGN_(PropertyMatcher);
2302
+ };
2303
+
2304
+ // Type traits specifying various features of different functors for ResultOf.
2305
+ // The default template specifies features for functor objects.
2306
+ // Functor classes have to typedef argument_type and result_type
2307
+ // to be compatible with ResultOf.
2308
+ template <typename Functor>
2309
+ struct CallableTraits {
2310
+ typedef typename Functor::result_type ResultType;
2311
+ typedef Functor StorageType;
2312
+
2313
+ static void CheckIsValid(Functor /* functor */) {}
2314
+ template <typename T>
2315
+ static ResultType Invoke(Functor f, T arg) { return f(arg); }
2316
+ };
2317
+
2318
+ // Specialization for function pointers.
2319
+ template <typename ArgType, typename ResType>
2320
+ struct CallableTraits<ResType(*)(ArgType)> {
2321
+ typedef ResType ResultType;
2322
+ typedef ResType(*StorageType)(ArgType);
2323
+
2324
+ static void CheckIsValid(ResType(*f)(ArgType)) {
2325
+ GTEST_CHECK_(f != NULL)
2326
+ << "NULL function pointer is passed into ResultOf().";
2327
+ }
2328
+ template <typename T>
2329
+ static ResType Invoke(ResType(*f)(ArgType), T arg) {
2330
+ return (*f)(arg);
2331
+ }
2332
+ };
2333
+
2334
+ // Implements the ResultOf() matcher for matching a return value of a
2335
+ // unary function of an object.
2336
+ template <typename Callable>
2337
+ class ResultOfMatcher {
2338
+ public:
2339
+ typedef typename CallableTraits<Callable>::ResultType ResultType;
2340
+
2341
+ ResultOfMatcher(Callable callable, const Matcher<ResultType>& matcher)
2342
+ : callable_(callable), matcher_(matcher) {
2343
+ CallableTraits<Callable>::CheckIsValid(callable_);
2344
+ }
2345
+
2346
+ template <typename T>
2347
+ operator Matcher<T>() const {
2348
+ return Matcher<T>(new Impl<T>(callable_, matcher_));
2349
+ }
2350
+
2351
+ private:
2352
+ typedef typename CallableTraits<Callable>::StorageType CallableStorageType;
2353
+
2354
+ template <typename T>
2355
+ class Impl : public MatcherInterface<T> {
2356
+ public:
2357
+ Impl(CallableStorageType callable, const Matcher<ResultType>& matcher)
2358
+ : callable_(callable), matcher_(matcher) {}
2359
+
2360
+ virtual void DescribeTo(::std::ostream* os) const {
2361
+ *os << "is mapped by the given callable to a value that ";
2362
+ matcher_.DescribeTo(os);
2363
+ }
2364
+
2365
+ virtual void DescribeNegationTo(::std::ostream* os) const {
2366
+ *os << "is mapped by the given callable to a value that ";
2367
+ matcher_.DescribeNegationTo(os);
2368
+ }
2369
+
2370
+ virtual bool MatchAndExplain(T obj, MatchResultListener* listener) const {
2371
+ *listener << "which is mapped by the given callable to ";
2372
+ // Cannot pass the return value (for example, int) to
2373
+ // MatchPrintAndExplain, which takes a non-const reference as argument.
2374
+ ResultType result =
2375
+ CallableTraits<Callable>::template Invoke<T>(callable_, obj);
2376
+ return MatchPrintAndExplain(result, matcher_, listener);
2377
+ }
2378
+
2379
+ private:
2380
+ // Functors often define operator() as non-const method even though
2381
+ // they are actualy stateless. But we need to use them even when
2382
+ // 'this' is a const pointer. It's the user's responsibility not to
2383
+ // use stateful callables with ResultOf(), which does't guarantee
2384
+ // how many times the callable will be invoked.
2385
+ mutable CallableStorageType callable_;
2386
+ const Matcher<ResultType> matcher_;
2387
+
2388
+ GTEST_DISALLOW_ASSIGN_(Impl);
2389
+ }; // class Impl
2390
+
2391
+ const CallableStorageType callable_;
2392
+ const Matcher<ResultType> matcher_;
2393
+
2394
+ GTEST_DISALLOW_ASSIGN_(ResultOfMatcher);
2395
+ };
2396
+
2397
+ // Implements a matcher that checks the size of an STL-style container.
2398
+ template <typename SizeMatcher>
2399
+ class SizeIsMatcher {
2400
+ public:
2401
+ explicit SizeIsMatcher(const SizeMatcher& size_matcher)
2402
+ : size_matcher_(size_matcher) {
2403
+ }
2404
+
2405
+ template <typename Container>
2406
+ operator Matcher<Container>() const {
2407
+ return MakeMatcher(new Impl<Container>(size_matcher_));
2408
+ }
2409
+
2410
+ template <typename Container>
2411
+ class Impl : public MatcherInterface<Container> {
2412
+ public:
2413
+ typedef internal::StlContainerView<
2414
+ GTEST_REMOVE_REFERENCE_AND_CONST_(Container)> ContainerView;
2415
+ typedef typename ContainerView::type::size_type SizeType;
2416
+ explicit Impl(const SizeMatcher& size_matcher)
2417
+ : size_matcher_(MatcherCast<SizeType>(size_matcher)) {}
2418
+
2419
+ virtual void DescribeTo(::std::ostream* os) const {
2420
+ *os << "size ";
2421
+ size_matcher_.DescribeTo(os);
2422
+ }
2423
+ virtual void DescribeNegationTo(::std::ostream* os) const {
2424
+ *os << "size ";
2425
+ size_matcher_.DescribeNegationTo(os);
2426
+ }
2427
+
2428
+ virtual bool MatchAndExplain(Container container,
2429
+ MatchResultListener* listener) const {
2430
+ SizeType size = container.size();
2431
+ StringMatchResultListener size_listener;
2432
+ const bool result = size_matcher_.MatchAndExplain(size, &size_listener);
2433
+ *listener
2434
+ << "whose size " << size << (result ? " matches" : " doesn't match");
2435
+ PrintIfNotEmpty(size_listener.str(), listener->stream());
2436
+ return result;
2437
+ }
2438
+
2439
+ private:
2440
+ const Matcher<SizeType> size_matcher_;
2441
+ GTEST_DISALLOW_ASSIGN_(Impl);
2442
+ };
2443
+
2444
+ private:
2445
+ const SizeMatcher size_matcher_;
2446
+ GTEST_DISALLOW_ASSIGN_(SizeIsMatcher);
2447
+ };
2448
+
2449
+ // Implements a matcher that checks the begin()..end() distance of an STL-style
2450
+ // container.
2451
+ template <typename DistanceMatcher>
2452
+ class BeginEndDistanceIsMatcher {
2453
+ public:
2454
+ explicit BeginEndDistanceIsMatcher(const DistanceMatcher& distance_matcher)
2455
+ : distance_matcher_(distance_matcher) {}
2456
+
2457
+ template <typename Container>
2458
+ operator Matcher<Container>() const {
2459
+ return MakeMatcher(new Impl<Container>(distance_matcher_));
2460
+ }
2461
+
2462
+ template <typename Container>
2463
+ class Impl : public MatcherInterface<Container> {
2464
+ public:
2465
+ typedef internal::StlContainerView<
2466
+ GTEST_REMOVE_REFERENCE_AND_CONST_(Container)> ContainerView;
2467
+ typedef typename std::iterator_traits<
2468
+ typename ContainerView::type::const_iterator>::difference_type
2469
+ DistanceType;
2470
+ explicit Impl(const DistanceMatcher& distance_matcher)
2471
+ : distance_matcher_(MatcherCast<DistanceType>(distance_matcher)) {}
2472
+
2473
+ virtual void DescribeTo(::std::ostream* os) const {
2474
+ *os << "distance between begin() and end() ";
2475
+ distance_matcher_.DescribeTo(os);
2476
+ }
2477
+ virtual void DescribeNegationTo(::std::ostream* os) const {
2478
+ *os << "distance between begin() and end() ";
2479
+ distance_matcher_.DescribeNegationTo(os);
2480
+ }
2481
+
2482
+ virtual bool MatchAndExplain(Container container,
2483
+ MatchResultListener* listener) const {
2484
+ #if GTEST_HAS_STD_BEGIN_AND_END_
2485
+ using std::begin;
2486
+ using std::end;
2487
+ DistanceType distance = std::distance(begin(container), end(container));
2488
+ #else
2489
+ DistanceType distance = std::distance(container.begin(), container.end());
2490
+ #endif
2491
+ StringMatchResultListener distance_listener;
2492
+ const bool result =
2493
+ distance_matcher_.MatchAndExplain(distance, &distance_listener);
2494
+ *listener << "whose distance between begin() and end() " << distance
2495
+ << (result ? " matches" : " doesn't match");
2496
+ PrintIfNotEmpty(distance_listener.str(), listener->stream());
2497
+ return result;
2498
+ }
2499
+
2500
+ private:
2501
+ const Matcher<DistanceType> distance_matcher_;
2502
+ GTEST_DISALLOW_ASSIGN_(Impl);
2503
+ };
2504
+
2505
+ private:
2506
+ const DistanceMatcher distance_matcher_;
2507
+ GTEST_DISALLOW_ASSIGN_(BeginEndDistanceIsMatcher);
2508
+ };
2509
+
2510
+ // Implements an equality matcher for any STL-style container whose elements
2511
+ // support ==. This matcher is like Eq(), but its failure explanations provide
2512
+ // more detailed information that is useful when the container is used as a set.
2513
+ // The failure message reports elements that are in one of the operands but not
2514
+ // the other. The failure messages do not report duplicate or out-of-order
2515
+ // elements in the containers (which don't properly matter to sets, but can
2516
+ // occur if the containers are vectors or lists, for example).
2517
+ //
2518
+ // Uses the container's const_iterator, value_type, operator ==,
2519
+ // begin(), and end().
2520
+ template <typename Container>
2521
+ class ContainerEqMatcher {
2522
+ public:
2523
+ typedef internal::StlContainerView<Container> View;
2524
+ typedef typename View::type StlContainer;
2525
+ typedef typename View::const_reference StlContainerReference;
2526
+
2527
+ // We make a copy of expected in case the elements in it are modified
2528
+ // after this matcher is created.
2529
+ explicit ContainerEqMatcher(const Container& expected)
2530
+ : expected_(View::Copy(expected)) {
2531
+ // Makes sure the user doesn't instantiate this class template
2532
+ // with a const or reference type.
2533
+ (void)testing::StaticAssertTypeEq<Container,
2534
+ GTEST_REMOVE_REFERENCE_AND_CONST_(Container)>();
2535
+ }
2536
+
2537
+ void DescribeTo(::std::ostream* os) const {
2538
+ *os << "equals ";
2539
+ UniversalPrint(expected_, os);
2540
+ }
2541
+ void DescribeNegationTo(::std::ostream* os) const {
2542
+ *os << "does not equal ";
2543
+ UniversalPrint(expected_, os);
2544
+ }
2545
+
2546
+ template <typename LhsContainer>
2547
+ bool MatchAndExplain(const LhsContainer& lhs,
2548
+ MatchResultListener* listener) const {
2549
+ // GTEST_REMOVE_CONST_() is needed to work around an MSVC 8.0 bug
2550
+ // that causes LhsContainer to be a const type sometimes.
2551
+ typedef internal::StlContainerView<GTEST_REMOVE_CONST_(LhsContainer)>
2552
+ LhsView;
2553
+ typedef typename LhsView::type LhsStlContainer;
2554
+ StlContainerReference lhs_stl_container = LhsView::ConstReference(lhs);
2555
+ if (lhs_stl_container == expected_)
2556
+ return true;
2557
+
2558
+ ::std::ostream* const os = listener->stream();
2559
+ if (os != NULL) {
2560
+ // Something is different. Check for extra values first.
2561
+ bool printed_header = false;
2562
+ for (typename LhsStlContainer::const_iterator it =
2563
+ lhs_stl_container.begin();
2564
+ it != lhs_stl_container.end(); ++it) {
2565
+ if (internal::ArrayAwareFind(expected_.begin(), expected_.end(), *it) ==
2566
+ expected_.end()) {
2567
+ if (printed_header) {
2568
+ *os << ", ";
2569
+ } else {
2570
+ *os << "which has these unexpected elements: ";
2571
+ printed_header = true;
2572
+ }
2573
+ UniversalPrint(*it, os);
2574
+ }
2575
+ }
2576
+
2577
+ // Now check for missing values.
2578
+ bool printed_header2 = false;
2579
+ for (typename StlContainer::const_iterator it = expected_.begin();
2580
+ it != expected_.end(); ++it) {
2581
+ if (internal::ArrayAwareFind(
2582
+ lhs_stl_container.begin(), lhs_stl_container.end(), *it) ==
2583
+ lhs_stl_container.end()) {
2584
+ if (printed_header2) {
2585
+ *os << ", ";
2586
+ } else {
2587
+ *os << (printed_header ? ",\nand" : "which")
2588
+ << " doesn't have these expected elements: ";
2589
+ printed_header2 = true;
2590
+ }
2591
+ UniversalPrint(*it, os);
2592
+ }
2593
+ }
2594
+ }
2595
+
2596
+ return false;
2597
+ }
2598
+
2599
+ private:
2600
+ const StlContainer expected_;
2601
+
2602
+ GTEST_DISALLOW_ASSIGN_(ContainerEqMatcher);
2603
+ };
2604
+
2605
+ // A comparator functor that uses the < operator to compare two values.
2606
+ struct LessComparator {
2607
+ template <typename T, typename U>
2608
+ bool operator()(const T& lhs, const U& rhs) const { return lhs < rhs; }
2609
+ };
2610
+
2611
+ // Implements WhenSortedBy(comparator, container_matcher).
2612
+ template <typename Comparator, typename ContainerMatcher>
2613
+ class WhenSortedByMatcher {
2614
+ public:
2615
+ WhenSortedByMatcher(const Comparator& comparator,
2616
+ const ContainerMatcher& matcher)
2617
+ : comparator_(comparator), matcher_(matcher) {}
2618
+
2619
+ template <typename LhsContainer>
2620
+ operator Matcher<LhsContainer>() const {
2621
+ return MakeMatcher(new Impl<LhsContainer>(comparator_, matcher_));
2622
+ }
2623
+
2624
+ template <typename LhsContainer>
2625
+ class Impl : public MatcherInterface<LhsContainer> {
2626
+ public:
2627
+ typedef internal::StlContainerView<
2628
+ GTEST_REMOVE_REFERENCE_AND_CONST_(LhsContainer)> LhsView;
2629
+ typedef typename LhsView::type LhsStlContainer;
2630
+ typedef typename LhsView::const_reference LhsStlContainerReference;
2631
+ // Transforms std::pair<const Key, Value> into std::pair<Key, Value>
2632
+ // so that we can match associative containers.
2633
+ typedef typename RemoveConstFromKey<
2634
+ typename LhsStlContainer::value_type>::type LhsValue;
2635
+
2636
+ Impl(const Comparator& comparator, const ContainerMatcher& matcher)
2637
+ : comparator_(comparator), matcher_(matcher) {}
2638
+
2639
+ virtual void DescribeTo(::std::ostream* os) const {
2640
+ *os << "(when sorted) ";
2641
+ matcher_.DescribeTo(os);
2642
+ }
2643
+
2644
+ virtual void DescribeNegationTo(::std::ostream* os) const {
2645
+ *os << "(when sorted) ";
2646
+ matcher_.DescribeNegationTo(os);
2647
+ }
2648
+
2649
+ virtual bool MatchAndExplain(LhsContainer lhs,
2650
+ MatchResultListener* listener) const {
2651
+ LhsStlContainerReference lhs_stl_container = LhsView::ConstReference(lhs);
2652
+ ::std::vector<LhsValue> sorted_container(lhs_stl_container.begin(),
2653
+ lhs_stl_container.end());
2654
+ ::std::sort(
2655
+ sorted_container.begin(), sorted_container.end(), comparator_);
2656
+
2657
+ if (!listener->IsInterested()) {
2658
+ // If the listener is not interested, we do not need to
2659
+ // construct the inner explanation.
2660
+ return matcher_.Matches(sorted_container);
2661
+ }
2662
+
2663
+ *listener << "which is ";
2664
+ UniversalPrint(sorted_container, listener->stream());
2665
+ *listener << " when sorted";
2666
+
2667
+ StringMatchResultListener inner_listener;
2668
+ const bool match = matcher_.MatchAndExplain(sorted_container,
2669
+ &inner_listener);
2670
+ PrintIfNotEmpty(inner_listener.str(), listener->stream());
2671
+ return match;
2672
+ }
2673
+
2674
+ private:
2675
+ const Comparator comparator_;
2676
+ const Matcher<const ::std::vector<LhsValue>&> matcher_;
2677
+
2678
+ GTEST_DISALLOW_COPY_AND_ASSIGN_(Impl);
2679
+ };
2680
+
2681
+ private:
2682
+ const Comparator comparator_;
2683
+ const ContainerMatcher matcher_;
2684
+
2685
+ GTEST_DISALLOW_ASSIGN_(WhenSortedByMatcher);
2686
+ };
2687
+
2688
+ // Implements Pointwise(tuple_matcher, rhs_container). tuple_matcher
2689
+ // must be able to be safely cast to Matcher<tuple<const T1&, const
2690
+ // T2&> >, where T1 and T2 are the types of elements in the LHS
2691
+ // container and the RHS container respectively.
2692
+ template <typename TupleMatcher, typename RhsContainer>
2693
+ class PointwiseMatcher {
2694
+ public:
2695
+ typedef internal::StlContainerView<RhsContainer> RhsView;
2696
+ typedef typename RhsView::type RhsStlContainer;
2697
+ typedef typename RhsStlContainer::value_type RhsValue;
2698
+
2699
+ // Like ContainerEq, we make a copy of rhs in case the elements in
2700
+ // it are modified after this matcher is created.
2701
+ PointwiseMatcher(const TupleMatcher& tuple_matcher, const RhsContainer& rhs)
2702
+ : tuple_matcher_(tuple_matcher), rhs_(RhsView::Copy(rhs)) {
2703
+ // Makes sure the user doesn't instantiate this class template
2704
+ // with a const or reference type.
2705
+ (void)testing::StaticAssertTypeEq<RhsContainer,
2706
+ GTEST_REMOVE_REFERENCE_AND_CONST_(RhsContainer)>();
2707
+ }
2708
+
2709
+ template <typename LhsContainer>
2710
+ operator Matcher<LhsContainer>() const {
2711
+ return MakeMatcher(new Impl<LhsContainer>(tuple_matcher_, rhs_));
2712
+ }
2713
+
2714
+ template <typename LhsContainer>
2715
+ class Impl : public MatcherInterface<LhsContainer> {
2716
+ public:
2717
+ typedef internal::StlContainerView<
2718
+ GTEST_REMOVE_REFERENCE_AND_CONST_(LhsContainer)> LhsView;
2719
+ typedef typename LhsView::type LhsStlContainer;
2720
+ typedef typename LhsView::const_reference LhsStlContainerReference;
2721
+ typedef typename LhsStlContainer::value_type LhsValue;
2722
+ // We pass the LHS value and the RHS value to the inner matcher by
2723
+ // reference, as they may be expensive to copy. We must use tuple
2724
+ // instead of pair here, as a pair cannot hold references (C++ 98,
2725
+ // 20.2.2 [lib.pairs]).
2726
+ typedef ::testing::tuple<const LhsValue&, const RhsValue&> InnerMatcherArg;
2727
+
2728
+ Impl(const TupleMatcher& tuple_matcher, const RhsStlContainer& rhs)
2729
+ // mono_tuple_matcher_ holds a monomorphic version of the tuple matcher.
2730
+ : mono_tuple_matcher_(SafeMatcherCast<InnerMatcherArg>(tuple_matcher)),
2731
+ rhs_(rhs) {}
2732
+
2733
+ virtual void DescribeTo(::std::ostream* os) const {
2734
+ *os << "contains " << rhs_.size()
2735
+ << " values, where each value and its corresponding value in ";
2736
+ UniversalPrinter<RhsStlContainer>::Print(rhs_, os);
2737
+ *os << " ";
2738
+ mono_tuple_matcher_.DescribeTo(os);
2739
+ }
2740
+ virtual void DescribeNegationTo(::std::ostream* os) const {
2741
+ *os << "doesn't contain exactly " << rhs_.size()
2742
+ << " values, or contains a value x at some index i"
2743
+ << " where x and the i-th value of ";
2744
+ UniversalPrint(rhs_, os);
2745
+ *os << " ";
2746
+ mono_tuple_matcher_.DescribeNegationTo(os);
2747
+ }
2748
+
2749
+ virtual bool MatchAndExplain(LhsContainer lhs,
2750
+ MatchResultListener* listener) const {
2751
+ LhsStlContainerReference lhs_stl_container = LhsView::ConstReference(lhs);
2752
+ const size_t actual_size = lhs_stl_container.size();
2753
+ if (actual_size != rhs_.size()) {
2754
+ *listener << "which contains " << actual_size << " values";
2755
+ return false;
2756
+ }
2757
+
2758
+ typename LhsStlContainer::const_iterator left = lhs_stl_container.begin();
2759
+ typename RhsStlContainer::const_iterator right = rhs_.begin();
2760
+ for (size_t i = 0; i != actual_size; ++i, ++left, ++right) {
2761
+ const InnerMatcherArg value_pair(*left, *right);
2762
+
2763
+ if (listener->IsInterested()) {
2764
+ StringMatchResultListener inner_listener;
2765
+ if (!mono_tuple_matcher_.MatchAndExplain(
2766
+ value_pair, &inner_listener)) {
2767
+ *listener << "where the value pair (";
2768
+ UniversalPrint(*left, listener->stream());
2769
+ *listener << ", ";
2770
+ UniversalPrint(*right, listener->stream());
2771
+ *listener << ") at index #" << i << " don't match";
2772
+ PrintIfNotEmpty(inner_listener.str(), listener->stream());
2773
+ return false;
2774
+ }
2775
+ } else {
2776
+ if (!mono_tuple_matcher_.Matches(value_pair))
2777
+ return false;
2778
+ }
2779
+ }
2780
+
2781
+ return true;
2782
+ }
2783
+
2784
+ private:
2785
+ const Matcher<InnerMatcherArg> mono_tuple_matcher_;
2786
+ const RhsStlContainer rhs_;
2787
+
2788
+ GTEST_DISALLOW_ASSIGN_(Impl);
2789
+ };
2790
+
2791
+ private:
2792
+ const TupleMatcher tuple_matcher_;
2793
+ const RhsStlContainer rhs_;
2794
+
2795
+ GTEST_DISALLOW_ASSIGN_(PointwiseMatcher);
2796
+ };
2797
+
2798
+ // Holds the logic common to ContainsMatcherImpl and EachMatcherImpl.
2799
+ template <typename Container>
2800
+ class QuantifierMatcherImpl : public MatcherInterface<Container> {
2801
+ public:
2802
+ typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer;
2803
+ typedef StlContainerView<RawContainer> View;
2804
+ typedef typename View::type StlContainer;
2805
+ typedef typename View::const_reference StlContainerReference;
2806
+ typedef typename StlContainer::value_type Element;
2807
+
2808
+ template <typename InnerMatcher>
2809
+ explicit QuantifierMatcherImpl(InnerMatcher inner_matcher)
2810
+ : inner_matcher_(
2811
+ testing::SafeMatcherCast<const Element&>(inner_matcher)) {}
2812
+
2813
+ // Checks whether:
2814
+ // * All elements in the container match, if all_elements_should_match.
2815
+ // * Any element in the container matches, if !all_elements_should_match.
2816
+ bool MatchAndExplainImpl(bool all_elements_should_match,
2817
+ Container container,
2818
+ MatchResultListener* listener) const {
2819
+ StlContainerReference stl_container = View::ConstReference(container);
2820
+ size_t i = 0;
2821
+ for (typename StlContainer::const_iterator it = stl_container.begin();
2822
+ it != stl_container.end(); ++it, ++i) {
2823
+ StringMatchResultListener inner_listener;
2824
+ const bool matches = inner_matcher_.MatchAndExplain(*it, &inner_listener);
2825
+
2826
+ if (matches != all_elements_should_match) {
2827
+ *listener << "whose element #" << i
2828
+ << (matches ? " matches" : " doesn't match");
2829
+ PrintIfNotEmpty(inner_listener.str(), listener->stream());
2830
+ return !all_elements_should_match;
2831
+ }
2832
+ }
2833
+ return all_elements_should_match;
2834
+ }
2835
+
2836
+ protected:
2837
+ const Matcher<const Element&> inner_matcher_;
2838
+
2839
+ GTEST_DISALLOW_ASSIGN_(QuantifierMatcherImpl);
2840
+ };
2841
+
2842
+ // Implements Contains(element_matcher) for the given argument type Container.
2843
+ // Symmetric to EachMatcherImpl.
2844
+ template <typename Container>
2845
+ class ContainsMatcherImpl : public QuantifierMatcherImpl<Container> {
2846
+ public:
2847
+ template <typename InnerMatcher>
2848
+ explicit ContainsMatcherImpl(InnerMatcher inner_matcher)
2849
+ : QuantifierMatcherImpl<Container>(inner_matcher) {}
2850
+
2851
+ // Describes what this matcher does.
2852
+ virtual void DescribeTo(::std::ostream* os) const {
2853
+ *os << "contains at least one element that ";
2854
+ this->inner_matcher_.DescribeTo(os);
2855
+ }
2856
+
2857
+ virtual void DescribeNegationTo(::std::ostream* os) const {
2858
+ *os << "doesn't contain any element that ";
2859
+ this->inner_matcher_.DescribeTo(os);
2860
+ }
2861
+
2862
+ virtual bool MatchAndExplain(Container container,
2863
+ MatchResultListener* listener) const {
2864
+ return this->MatchAndExplainImpl(false, container, listener);
2865
+ }
2866
+
2867
+ private:
2868
+ GTEST_DISALLOW_ASSIGN_(ContainsMatcherImpl);
2869
+ };
2870
+
2871
+ // Implements Each(element_matcher) for the given argument type Container.
2872
+ // Symmetric to ContainsMatcherImpl.
2873
+ template <typename Container>
2874
+ class EachMatcherImpl : public QuantifierMatcherImpl<Container> {
2875
+ public:
2876
+ template <typename InnerMatcher>
2877
+ explicit EachMatcherImpl(InnerMatcher inner_matcher)
2878
+ : QuantifierMatcherImpl<Container>(inner_matcher) {}
2879
+
2880
+ // Describes what this matcher does.
2881
+ virtual void DescribeTo(::std::ostream* os) const {
2882
+ *os << "only contains elements that ";
2883
+ this->inner_matcher_.DescribeTo(os);
2884
+ }
2885
+
2886
+ virtual void DescribeNegationTo(::std::ostream* os) const {
2887
+ *os << "contains some element that ";
2888
+ this->inner_matcher_.DescribeNegationTo(os);
2889
+ }
2890
+
2891
+ virtual bool MatchAndExplain(Container container,
2892
+ MatchResultListener* listener) const {
2893
+ return this->MatchAndExplainImpl(true, container, listener);
2894
+ }
2895
+
2896
+ private:
2897
+ GTEST_DISALLOW_ASSIGN_(EachMatcherImpl);
2898
+ };
2899
+
2900
+ // Implements polymorphic Contains(element_matcher).
2901
+ template <typename M>
2902
+ class ContainsMatcher {
2903
+ public:
2904
+ explicit ContainsMatcher(M m) : inner_matcher_(m) {}
2905
+
2906
+ template <typename Container>
2907
+ operator Matcher<Container>() const {
2908
+ return MakeMatcher(new ContainsMatcherImpl<Container>(inner_matcher_));
2909
+ }
2910
+
2911
+ private:
2912
+ const M inner_matcher_;
2913
+
2914
+ GTEST_DISALLOW_ASSIGN_(ContainsMatcher);
2915
+ };
2916
+
2917
+ // Implements polymorphic Each(element_matcher).
2918
+ template <typename M>
2919
+ class EachMatcher {
2920
+ public:
2921
+ explicit EachMatcher(M m) : inner_matcher_(m) {}
2922
+
2923
+ template <typename Container>
2924
+ operator Matcher<Container>() const {
2925
+ return MakeMatcher(new EachMatcherImpl<Container>(inner_matcher_));
2926
+ }
2927
+
2928
+ private:
2929
+ const M inner_matcher_;
2930
+
2931
+ GTEST_DISALLOW_ASSIGN_(EachMatcher);
2932
+ };
2933
+
2934
+ // Implements Key(inner_matcher) for the given argument pair type.
2935
+ // Key(inner_matcher) matches an std::pair whose 'first' field matches
2936
+ // inner_matcher. For example, Contains(Key(Ge(5))) can be used to match an
2937
+ // std::map that contains at least one element whose key is >= 5.
2938
+ template <typename PairType>
2939
+ class KeyMatcherImpl : public MatcherInterface<PairType> {
2940
+ public:
2941
+ typedef GTEST_REMOVE_REFERENCE_AND_CONST_(PairType) RawPairType;
2942
+ typedef typename RawPairType::first_type KeyType;
2943
+
2944
+ template <typename InnerMatcher>
2945
+ explicit KeyMatcherImpl(InnerMatcher inner_matcher)
2946
+ : inner_matcher_(
2947
+ testing::SafeMatcherCast<const KeyType&>(inner_matcher)) {
2948
+ }
2949
+
2950
+ // Returns true iff 'key_value.first' (the key) matches the inner matcher.
2951
+ virtual bool MatchAndExplain(PairType key_value,
2952
+ MatchResultListener* listener) const {
2953
+ StringMatchResultListener inner_listener;
2954
+ const bool match = inner_matcher_.MatchAndExplain(key_value.first,
2955
+ &inner_listener);
2956
+ const internal::string explanation = inner_listener.str();
2957
+ if (explanation != "") {
2958
+ *listener << "whose first field is a value " << explanation;
2959
+ }
2960
+ return match;
2961
+ }
2962
+
2963
+ // Describes what this matcher does.
2964
+ virtual void DescribeTo(::std::ostream* os) const {
2965
+ *os << "has a key that ";
2966
+ inner_matcher_.DescribeTo(os);
2967
+ }
2968
+
2969
+ // Describes what the negation of this matcher does.
2970
+ virtual void DescribeNegationTo(::std::ostream* os) const {
2971
+ *os << "doesn't have a key that ";
2972
+ inner_matcher_.DescribeTo(os);
2973
+ }
2974
+
2975
+ private:
2976
+ const Matcher<const KeyType&> inner_matcher_;
2977
+
2978
+ GTEST_DISALLOW_ASSIGN_(KeyMatcherImpl);
2979
+ };
2980
+
2981
+ // Implements polymorphic Key(matcher_for_key).
2982
+ template <typename M>
2983
+ class KeyMatcher {
2984
+ public:
2985
+ explicit KeyMatcher(M m) : matcher_for_key_(m) {}
2986
+
2987
+ template <typename PairType>
2988
+ operator Matcher<PairType>() const {
2989
+ return MakeMatcher(new KeyMatcherImpl<PairType>(matcher_for_key_));
2990
+ }
2991
+
2992
+ private:
2993
+ const M matcher_for_key_;
2994
+
2995
+ GTEST_DISALLOW_ASSIGN_(KeyMatcher);
2996
+ };
2997
+
2998
+ // Implements Pair(first_matcher, second_matcher) for the given argument pair
2999
+ // type with its two matchers. See Pair() function below.
3000
+ template <typename PairType>
3001
+ class PairMatcherImpl : public MatcherInterface<PairType> {
3002
+ public:
3003
+ typedef GTEST_REMOVE_REFERENCE_AND_CONST_(PairType) RawPairType;
3004
+ typedef typename RawPairType::first_type FirstType;
3005
+ typedef typename RawPairType::second_type SecondType;
3006
+
3007
+ template <typename FirstMatcher, typename SecondMatcher>
3008
+ PairMatcherImpl(FirstMatcher first_matcher, SecondMatcher second_matcher)
3009
+ : first_matcher_(
3010
+ testing::SafeMatcherCast<const FirstType&>(first_matcher)),
3011
+ second_matcher_(
3012
+ testing::SafeMatcherCast<const SecondType&>(second_matcher)) {
3013
+ }
3014
+
3015
+ // Describes what this matcher does.
3016
+ virtual void DescribeTo(::std::ostream* os) const {
3017
+ *os << "has a first field that ";
3018
+ first_matcher_.DescribeTo(os);
3019
+ *os << ", and has a second field that ";
3020
+ second_matcher_.DescribeTo(os);
3021
+ }
3022
+
3023
+ // Describes what the negation of this matcher does.
3024
+ virtual void DescribeNegationTo(::std::ostream* os) const {
3025
+ *os << "has a first field that ";
3026
+ first_matcher_.DescribeNegationTo(os);
3027
+ *os << ", or has a second field that ";
3028
+ second_matcher_.DescribeNegationTo(os);
3029
+ }
3030
+
3031
+ // Returns true iff 'a_pair.first' matches first_matcher and 'a_pair.second'
3032
+ // matches second_matcher.
3033
+ virtual bool MatchAndExplain(PairType a_pair,
3034
+ MatchResultListener* listener) const {
3035
+ if (!listener->IsInterested()) {
3036
+ // If the listener is not interested, we don't need to construct the
3037
+ // explanation.
3038
+ return first_matcher_.Matches(a_pair.first) &&
3039
+ second_matcher_.Matches(a_pair.second);
3040
+ }
3041
+ StringMatchResultListener first_inner_listener;
3042
+ if (!first_matcher_.MatchAndExplain(a_pair.first,
3043
+ &first_inner_listener)) {
3044
+ *listener << "whose first field does not match";
3045
+ PrintIfNotEmpty(first_inner_listener.str(), listener->stream());
3046
+ return false;
3047
+ }
3048
+ StringMatchResultListener second_inner_listener;
3049
+ if (!second_matcher_.MatchAndExplain(a_pair.second,
3050
+ &second_inner_listener)) {
3051
+ *listener << "whose second field does not match";
3052
+ PrintIfNotEmpty(second_inner_listener.str(), listener->stream());
3053
+ return false;
3054
+ }
3055
+ ExplainSuccess(first_inner_listener.str(), second_inner_listener.str(),
3056
+ listener);
3057
+ return true;
3058
+ }
3059
+
3060
+ private:
3061
+ void ExplainSuccess(const internal::string& first_explanation,
3062
+ const internal::string& second_explanation,
3063
+ MatchResultListener* listener) const {
3064
+ *listener << "whose both fields match";
3065
+ if (first_explanation != "") {
3066
+ *listener << ", where the first field is a value " << first_explanation;
3067
+ }
3068
+ if (second_explanation != "") {
3069
+ *listener << ", ";
3070
+ if (first_explanation != "") {
3071
+ *listener << "and ";
3072
+ } else {
3073
+ *listener << "where ";
3074
+ }
3075
+ *listener << "the second field is a value " << second_explanation;
3076
+ }
3077
+ }
3078
+
3079
+ const Matcher<const FirstType&> first_matcher_;
3080
+ const Matcher<const SecondType&> second_matcher_;
3081
+
3082
+ GTEST_DISALLOW_ASSIGN_(PairMatcherImpl);
3083
+ };
3084
+
3085
+ // Implements polymorphic Pair(first_matcher, second_matcher).
3086
+ template <typename FirstMatcher, typename SecondMatcher>
3087
+ class PairMatcher {
3088
+ public:
3089
+ PairMatcher(FirstMatcher first_matcher, SecondMatcher second_matcher)
3090
+ : first_matcher_(first_matcher), second_matcher_(second_matcher) {}
3091
+
3092
+ template <typename PairType>
3093
+ operator Matcher<PairType> () const {
3094
+ return MakeMatcher(
3095
+ new PairMatcherImpl<PairType>(
3096
+ first_matcher_, second_matcher_));
3097
+ }
3098
+
3099
+ private:
3100
+ const FirstMatcher first_matcher_;
3101
+ const SecondMatcher second_matcher_;
3102
+
3103
+ GTEST_DISALLOW_ASSIGN_(PairMatcher);
3104
+ };
3105
+
3106
+ // Implements ElementsAre() and ElementsAreArray().
3107
+ template <typename Container>
3108
+ class ElementsAreMatcherImpl : public MatcherInterface<Container> {
3109
+ public:
3110
+ typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer;
3111
+ typedef internal::StlContainerView<RawContainer> View;
3112
+ typedef typename View::type StlContainer;
3113
+ typedef typename View::const_reference StlContainerReference;
3114
+ typedef typename StlContainer::value_type Element;
3115
+
3116
+ // Constructs the matcher from a sequence of element values or
3117
+ // element matchers.
3118
+ template <typename InputIter>
3119
+ ElementsAreMatcherImpl(InputIter first, InputIter last) {
3120
+ while (first != last) {
3121
+ matchers_.push_back(MatcherCast<const Element&>(*first++));
3122
+ }
3123
+ }
3124
+
3125
+ // Describes what this matcher does.
3126
+ virtual void DescribeTo(::std::ostream* os) const {
3127
+ if (count() == 0) {
3128
+ *os << "is empty";
3129
+ } else if (count() == 1) {
3130
+ *os << "has 1 element that ";
3131
+ matchers_[0].DescribeTo(os);
3132
+ } else {
3133
+ *os << "has " << Elements(count()) << " where\n";
3134
+ for (size_t i = 0; i != count(); ++i) {
3135
+ *os << "element #" << i << " ";
3136
+ matchers_[i].DescribeTo(os);
3137
+ if (i + 1 < count()) {
3138
+ *os << ",\n";
3139
+ }
3140
+ }
3141
+ }
3142
+ }
3143
+
3144
+ // Describes what the negation of this matcher does.
3145
+ virtual void DescribeNegationTo(::std::ostream* os) const {
3146
+ if (count() == 0) {
3147
+ *os << "isn't empty";
3148
+ return;
3149
+ }
3150
+
3151
+ *os << "doesn't have " << Elements(count()) << ", or\n";
3152
+ for (size_t i = 0; i != count(); ++i) {
3153
+ *os << "element #" << i << " ";
3154
+ matchers_[i].DescribeNegationTo(os);
3155
+ if (i + 1 < count()) {
3156
+ *os << ", or\n";
3157
+ }
3158
+ }
3159
+ }
3160
+
3161
+ virtual bool MatchAndExplain(Container container,
3162
+ MatchResultListener* listener) const {
3163
+ // To work with stream-like "containers", we must only walk
3164
+ // through the elements in one pass.
3165
+
3166
+ const bool listener_interested = listener->IsInterested();
3167
+
3168
+ // explanations[i] is the explanation of the element at index i.
3169
+ ::std::vector<internal::string> explanations(count());
3170
+ StlContainerReference stl_container = View::ConstReference(container);
3171
+ typename StlContainer::const_iterator it = stl_container.begin();
3172
+ size_t exam_pos = 0;
3173
+ bool mismatch_found = false; // Have we found a mismatched element yet?
3174
+
3175
+ // Go through the elements and matchers in pairs, until we reach
3176
+ // the end of either the elements or the matchers, or until we find a
3177
+ // mismatch.
3178
+ for (; it != stl_container.end() && exam_pos != count(); ++it, ++exam_pos) {
3179
+ bool match; // Does the current element match the current matcher?
3180
+ if (listener_interested) {
3181
+ StringMatchResultListener s;
3182
+ match = matchers_[exam_pos].MatchAndExplain(*it, &s);
3183
+ explanations[exam_pos] = s.str();
3184
+ } else {
3185
+ match = matchers_[exam_pos].Matches(*it);
3186
+ }
3187
+
3188
+ if (!match) {
3189
+ mismatch_found = true;
3190
+ break;
3191
+ }
3192
+ }
3193
+ // If mismatch_found is true, 'exam_pos' is the index of the mismatch.
3194
+
3195
+ // Find how many elements the actual container has. We avoid
3196
+ // calling size() s.t. this code works for stream-like "containers"
3197
+ // that don't define size().
3198
+ size_t actual_count = exam_pos;
3199
+ for (; it != stl_container.end(); ++it) {
3200
+ ++actual_count;
3201
+ }
3202
+
3203
+ if (actual_count != count()) {
3204
+ // The element count doesn't match. If the container is empty,
3205
+ // there's no need to explain anything as Google Mock already
3206
+ // prints the empty container. Otherwise we just need to show
3207
+ // how many elements there actually are.
3208
+ if (listener_interested && (actual_count != 0)) {
3209
+ *listener << "which has " << Elements(actual_count);
3210
+ }
3211
+ return false;
3212
+ }
3213
+
3214
+ if (mismatch_found) {
3215
+ // The element count matches, but the exam_pos-th element doesn't match.
3216
+ if (listener_interested) {
3217
+ *listener << "whose element #" << exam_pos << " doesn't match";
3218
+ PrintIfNotEmpty(explanations[exam_pos], listener->stream());
3219
+ }
3220
+ return false;
3221
+ }
3222
+
3223
+ // Every element matches its expectation. We need to explain why
3224
+ // (the obvious ones can be skipped).
3225
+ if (listener_interested) {
3226
+ bool reason_printed = false;
3227
+ for (size_t i = 0; i != count(); ++i) {
3228
+ const internal::string& s = explanations[i];
3229
+ if (!s.empty()) {
3230
+ if (reason_printed) {
3231
+ *listener << ",\nand ";
3232
+ }
3233
+ *listener << "whose element #" << i << " matches, " << s;
3234
+ reason_printed = true;
3235
+ }
3236
+ }
3237
+ }
3238
+ return true;
3239
+ }
3240
+
3241
+ private:
3242
+ static Message Elements(size_t count) {
3243
+ return Message() << count << (count == 1 ? " element" : " elements");
3244
+ }
3245
+
3246
+ size_t count() const { return matchers_.size(); }
3247
+
3248
+ ::std::vector<Matcher<const Element&> > matchers_;
3249
+
3250
+ GTEST_DISALLOW_ASSIGN_(ElementsAreMatcherImpl);
3251
+ };
3252
+
3253
+ // Connectivity matrix of (elements X matchers), in element-major order.
3254
+ // Initially, there are no edges.
3255
+ // Use NextGraph() to iterate over all possible edge configurations.
3256
+ // Use Randomize() to generate a random edge configuration.
3257
+ class GTEST_API_ MatchMatrix {
3258
+ public:
3259
+ MatchMatrix(size_t num_elements, size_t num_matchers)
3260
+ : num_elements_(num_elements),
3261
+ num_matchers_(num_matchers),
3262
+ matched_(num_elements_* num_matchers_, 0) {
3263
+ }
3264
+
3265
+ size_t LhsSize() const { return num_elements_; }
3266
+ size_t RhsSize() const { return num_matchers_; }
3267
+ bool HasEdge(size_t ilhs, size_t irhs) const {
3268
+ return matched_[SpaceIndex(ilhs, irhs)] == 1;
3269
+ }
3270
+ void SetEdge(size_t ilhs, size_t irhs, bool b) {
3271
+ matched_[SpaceIndex(ilhs, irhs)] = b ? 1 : 0;
3272
+ }
3273
+
3274
+ // Treating the connectivity matrix as a (LhsSize()*RhsSize())-bit number,
3275
+ // adds 1 to that number; returns false if incrementing the graph left it
3276
+ // empty.
3277
+ bool NextGraph();
3278
+
3279
+ void Randomize();
3280
+
3281
+ string DebugString() const;
3282
+
3283
+ private:
3284
+ size_t SpaceIndex(size_t ilhs, size_t irhs) const {
3285
+ return ilhs * num_matchers_ + irhs;
3286
+ }
3287
+
3288
+ size_t num_elements_;
3289
+ size_t num_matchers_;
3290
+
3291
+ // Each element is a char interpreted as bool. They are stored as a
3292
+ // flattened array in lhs-major order, use 'SpaceIndex()' to translate
3293
+ // a (ilhs, irhs) matrix coordinate into an offset.
3294
+ ::std::vector<char> matched_;
3295
+ };
3296
+
3297
+ typedef ::std::pair<size_t, size_t> ElementMatcherPair;
3298
+ typedef ::std::vector<ElementMatcherPair> ElementMatcherPairs;
3299
+
3300
+ // Returns a maximum bipartite matching for the specified graph 'g'.
3301
+ // The matching is represented as a vector of {element, matcher} pairs.
3302
+ GTEST_API_ ElementMatcherPairs
3303
+ FindMaxBipartiteMatching(const MatchMatrix& g);
3304
+
3305
+ GTEST_API_ bool FindPairing(const MatchMatrix& matrix,
3306
+ MatchResultListener* listener);
3307
+
3308
+ // Untyped base class for implementing UnorderedElementsAre. By
3309
+ // putting logic that's not specific to the element type here, we
3310
+ // reduce binary bloat and increase compilation speed.
3311
+ class GTEST_API_ UnorderedElementsAreMatcherImplBase {
3312
+ protected:
3313
+ // A vector of matcher describers, one for each element matcher.
3314
+ // Does not own the describers (and thus can be used only when the
3315
+ // element matchers are alive).
3316
+ typedef ::std::vector<const MatcherDescriberInterface*> MatcherDescriberVec;
3317
+
3318
+ // Describes this UnorderedElementsAre matcher.
3319
+ void DescribeToImpl(::std::ostream* os) const;
3320
+
3321
+ // Describes the negation of this UnorderedElementsAre matcher.
3322
+ void DescribeNegationToImpl(::std::ostream* os) const;
3323
+
3324
+ bool VerifyAllElementsAndMatchersAreMatched(
3325
+ const ::std::vector<string>& element_printouts,
3326
+ const MatchMatrix& matrix,
3327
+ MatchResultListener* listener) const;
3328
+
3329
+ MatcherDescriberVec& matcher_describers() {
3330
+ return matcher_describers_;
3331
+ }
3332
+
3333
+ static Message Elements(size_t n) {
3334
+ return Message() << n << " element" << (n == 1 ? "" : "s");
3335
+ }
3336
+
3337
+ private:
3338
+ MatcherDescriberVec matcher_describers_;
3339
+
3340
+ GTEST_DISALLOW_ASSIGN_(UnorderedElementsAreMatcherImplBase);
3341
+ };
3342
+
3343
+ // Implements unordered ElementsAre and unordered ElementsAreArray.
3344
+ template <typename Container>
3345
+ class UnorderedElementsAreMatcherImpl
3346
+ : public MatcherInterface<Container>,
3347
+ public UnorderedElementsAreMatcherImplBase {
3348
+ public:
3349
+ typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer;
3350
+ typedef internal::StlContainerView<RawContainer> View;
3351
+ typedef typename View::type StlContainer;
3352
+ typedef typename View::const_reference StlContainerReference;
3353
+ typedef typename StlContainer::const_iterator StlContainerConstIterator;
3354
+ typedef typename StlContainer::value_type Element;
3355
+
3356
+ // Constructs the matcher from a sequence of element values or
3357
+ // element matchers.
3358
+ template <typename InputIter>
3359
+ UnorderedElementsAreMatcherImpl(InputIter first, InputIter last) {
3360
+ for (; first != last; ++first) {
3361
+ matchers_.push_back(MatcherCast<const Element&>(*first));
3362
+ matcher_describers().push_back(matchers_.back().GetDescriber());
3363
+ }
3364
+ }
3365
+
3366
+ // Describes what this matcher does.
3367
+ virtual void DescribeTo(::std::ostream* os) const {
3368
+ return UnorderedElementsAreMatcherImplBase::DescribeToImpl(os);
3369
+ }
3370
+
3371
+ // Describes what the negation of this matcher does.
3372
+ virtual void DescribeNegationTo(::std::ostream* os) const {
3373
+ return UnorderedElementsAreMatcherImplBase::DescribeNegationToImpl(os);
3374
+ }
3375
+
3376
+ virtual bool MatchAndExplain(Container container,
3377
+ MatchResultListener* listener) const {
3378
+ StlContainerReference stl_container = View::ConstReference(container);
3379
+ ::std::vector<string> element_printouts;
3380
+ MatchMatrix matrix = AnalyzeElements(stl_container.begin(),
3381
+ stl_container.end(),
3382
+ &element_printouts,
3383
+ listener);
3384
+
3385
+ const size_t actual_count = matrix.LhsSize();
3386
+ if (actual_count == 0 && matchers_.empty()) {
3387
+ return true;
3388
+ }
3389
+ if (actual_count != matchers_.size()) {
3390
+ // The element count doesn't match. If the container is empty,
3391
+ // there's no need to explain anything as Google Mock already
3392
+ // prints the empty container. Otherwise we just need to show
3393
+ // how many elements there actually are.
3394
+ if (actual_count != 0 && listener->IsInterested()) {
3395
+ *listener << "which has " << Elements(actual_count);
3396
+ }
3397
+ return false;
3398
+ }
3399
+
3400
+ return VerifyAllElementsAndMatchersAreMatched(element_printouts,
3401
+ matrix, listener) &&
3402
+ FindPairing(matrix, listener);
3403
+ }
3404
+
3405
+ private:
3406
+ typedef ::std::vector<Matcher<const Element&> > MatcherVec;
3407
+
3408
+ template <typename ElementIter>
3409
+ MatchMatrix AnalyzeElements(ElementIter elem_first, ElementIter elem_last,
3410
+ ::std::vector<string>* element_printouts,
3411
+ MatchResultListener* listener) const {
3412
+ element_printouts->clear();
3413
+ ::std::vector<char> did_match;
3414
+ size_t num_elements = 0;
3415
+ for (; elem_first != elem_last; ++num_elements, ++elem_first) {
3416
+ if (listener->IsInterested()) {
3417
+ element_printouts->push_back(PrintToString(*elem_first));
3418
+ }
3419
+ for (size_t irhs = 0; irhs != matchers_.size(); ++irhs) {
3420
+ did_match.push_back(Matches(matchers_[irhs])(*elem_first));
3421
+ }
3422
+ }
3423
+
3424
+ MatchMatrix matrix(num_elements, matchers_.size());
3425
+ ::std::vector<char>::const_iterator did_match_iter = did_match.begin();
3426
+ for (size_t ilhs = 0; ilhs != num_elements; ++ilhs) {
3427
+ for (size_t irhs = 0; irhs != matchers_.size(); ++irhs) {
3428
+ matrix.SetEdge(ilhs, irhs, *did_match_iter++ != 0);
3429
+ }
3430
+ }
3431
+ return matrix;
3432
+ }
3433
+
3434
+ MatcherVec matchers_;
3435
+
3436
+ GTEST_DISALLOW_ASSIGN_(UnorderedElementsAreMatcherImpl);
3437
+ };
3438
+
3439
+ // Functor for use in TransformTuple.
3440
+ // Performs MatcherCast<Target> on an input argument of any type.
3441
+ template <typename Target>
3442
+ struct CastAndAppendTransform {
3443
+ template <typename Arg>
3444
+ Matcher<Target> operator()(const Arg& a) const {
3445
+ return MatcherCast<Target>(a);
3446
+ }
3447
+ };
3448
+
3449
+ // Implements UnorderedElementsAre.
3450
+ template <typename MatcherTuple>
3451
+ class UnorderedElementsAreMatcher {
3452
+ public:
3453
+ explicit UnorderedElementsAreMatcher(const MatcherTuple& args)
3454
+ : matchers_(args) {}
3455
+
3456
+ template <typename Container>
3457
+ operator Matcher<Container>() const {
3458
+ typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer;
3459
+ typedef typename internal::StlContainerView<RawContainer>::type View;
3460
+ typedef typename View::value_type Element;
3461
+ typedef ::std::vector<Matcher<const Element&> > MatcherVec;
3462
+ MatcherVec matchers;
3463
+ matchers.reserve(::testing::tuple_size<MatcherTuple>::value);
3464
+ TransformTupleValues(CastAndAppendTransform<const Element&>(), matchers_,
3465
+ ::std::back_inserter(matchers));
3466
+ return MakeMatcher(new UnorderedElementsAreMatcherImpl<Container>(
3467
+ matchers.begin(), matchers.end()));
3468
+ }
3469
+
3470
+ private:
3471
+ const MatcherTuple matchers_;
3472
+ GTEST_DISALLOW_ASSIGN_(UnorderedElementsAreMatcher);
3473
+ };
3474
+
3475
+ // Implements ElementsAre.
3476
+ template <typename MatcherTuple>
3477
+ class ElementsAreMatcher {
3478
+ public:
3479
+ explicit ElementsAreMatcher(const MatcherTuple& args) : matchers_(args) {}
3480
+
3481
+ template <typename Container>
3482
+ operator Matcher<Container>() const {
3483
+ typedef GTEST_REMOVE_REFERENCE_AND_CONST_(Container) RawContainer;
3484
+ typedef typename internal::StlContainerView<RawContainer>::type View;
3485
+ typedef typename View::value_type Element;
3486
+ typedef ::std::vector<Matcher<const Element&> > MatcherVec;
3487
+ MatcherVec matchers;
3488
+ matchers.reserve(::testing::tuple_size<MatcherTuple>::value);
3489
+ TransformTupleValues(CastAndAppendTransform<const Element&>(), matchers_,
3490
+ ::std::back_inserter(matchers));
3491
+ return MakeMatcher(new ElementsAreMatcherImpl<Container>(
3492
+ matchers.begin(), matchers.end()));
3493
+ }
3494
+
3495
+ private:
3496
+ const MatcherTuple matchers_;
3497
+ GTEST_DISALLOW_ASSIGN_(ElementsAreMatcher);
3498
+ };
3499
+
3500
+ // Implements UnorderedElementsAreArray().
3501
+ template <typename T>
3502
+ class UnorderedElementsAreArrayMatcher {
3503
+ public:
3504
+ UnorderedElementsAreArrayMatcher() {}
3505
+
3506
+ template <typename Iter>
3507
+ UnorderedElementsAreArrayMatcher(Iter first, Iter last)
3508
+ : matchers_(first, last) {}
3509
+
3510
+ template <typename Container>
3511
+ operator Matcher<Container>() const {
3512
+ return MakeMatcher(
3513
+ new UnorderedElementsAreMatcherImpl<Container>(matchers_.begin(),
3514
+ matchers_.end()));
3515
+ }
3516
+
3517
+ private:
3518
+ ::std::vector<T> matchers_;
3519
+
3520
+ GTEST_DISALLOW_ASSIGN_(UnorderedElementsAreArrayMatcher);
3521
+ };
3522
+
3523
+ // Implements ElementsAreArray().
3524
+ template <typename T>
3525
+ class ElementsAreArrayMatcher {
3526
+ public:
3527
+ template <typename Iter>
3528
+ ElementsAreArrayMatcher(Iter first, Iter last) : matchers_(first, last) {}
3529
+
3530
+ template <typename Container>
3531
+ operator Matcher<Container>() const {
3532
+ return MakeMatcher(new ElementsAreMatcherImpl<Container>(
3533
+ matchers_.begin(), matchers_.end()));
3534
+ }
3535
+
3536
+ private:
3537
+ const ::std::vector<T> matchers_;
3538
+
3539
+ GTEST_DISALLOW_ASSIGN_(ElementsAreArrayMatcher);
3540
+ };
3541
+
3542
+ // Given a 2-tuple matcher tm of type Tuple2Matcher and a value second
3543
+ // of type Second, BoundSecondMatcher<Tuple2Matcher, Second>(tm,
3544
+ // second) is a polymorphic matcher that matches a value x iff tm
3545
+ // matches tuple (x, second). Useful for implementing
3546
+ // UnorderedPointwise() in terms of UnorderedElementsAreArray().
3547
+ //
3548
+ // BoundSecondMatcher is copyable and assignable, as we need to put
3549
+ // instances of this class in a vector when implementing
3550
+ // UnorderedPointwise().
3551
+ template <typename Tuple2Matcher, typename Second>
3552
+ class BoundSecondMatcher {
3553
+ public:
3554
+ BoundSecondMatcher(const Tuple2Matcher& tm, const Second& second)
3555
+ : tuple2_matcher_(tm), second_value_(second) {}
3556
+
3557
+ template <typename T>
3558
+ operator Matcher<T>() const {
3559
+ return MakeMatcher(new Impl<T>(tuple2_matcher_, second_value_));
3560
+ }
3561
+
3562
+ // We have to define this for UnorderedPointwise() to compile in
3563
+ // C++98 mode, as it puts BoundSecondMatcher instances in a vector,
3564
+ // which requires the elements to be assignable in C++98. The
3565
+ // compiler cannot generate the operator= for us, as Tuple2Matcher
3566
+ // and Second may not be assignable.
3567
+ //
3568
+ // However, this should never be called, so the implementation just
3569
+ // need to assert.
3570
+ void operator=(const BoundSecondMatcher& /*rhs*/) {
3571
+ GTEST_LOG_(FATAL) << "BoundSecondMatcher should never be assigned.";
3572
+ }
3573
+
3574
+ private:
3575
+ template <typename T>
3576
+ class Impl : public MatcherInterface<T> {
3577
+ public:
3578
+ typedef ::testing::tuple<T, Second> ArgTuple;
3579
+
3580
+ Impl(const Tuple2Matcher& tm, const Second& second)
3581
+ : mono_tuple2_matcher_(SafeMatcherCast<const ArgTuple&>(tm)),
3582
+ second_value_(second) {}
3583
+
3584
+ virtual void DescribeTo(::std::ostream* os) const {
3585
+ *os << "and ";
3586
+ UniversalPrint(second_value_, os);
3587
+ *os << " ";
3588
+ mono_tuple2_matcher_.DescribeTo(os);
3589
+ }
3590
+
3591
+ virtual bool MatchAndExplain(T x, MatchResultListener* listener) const {
3592
+ return mono_tuple2_matcher_.MatchAndExplain(ArgTuple(x, second_value_),
3593
+ listener);
3594
+ }
3595
+
3596
+ private:
3597
+ const Matcher<const ArgTuple&> mono_tuple2_matcher_;
3598
+ const Second second_value_;
3599
+
3600
+ GTEST_DISALLOW_ASSIGN_(Impl);
3601
+ };
3602
+
3603
+ const Tuple2Matcher tuple2_matcher_;
3604
+ const Second second_value_;
3605
+ };
3606
+
3607
+ // Given a 2-tuple matcher tm and a value second,
3608
+ // MatcherBindSecond(tm, second) returns a matcher that matches a
3609
+ // value x iff tm matches tuple (x, second). Useful for implementing
3610
+ // UnorderedPointwise() in terms of UnorderedElementsAreArray().
3611
+ template <typename Tuple2Matcher, typename Second>
3612
+ BoundSecondMatcher<Tuple2Matcher, Second> MatcherBindSecond(
3613
+ const Tuple2Matcher& tm, const Second& second) {
3614
+ return BoundSecondMatcher<Tuple2Matcher, Second>(tm, second);
3615
+ }
3616
+
3617
+ // Returns the description for a matcher defined using the MATCHER*()
3618
+ // macro where the user-supplied description string is "", if
3619
+ // 'negation' is false; otherwise returns the description of the
3620
+ // negation of the matcher. 'param_values' contains a list of strings
3621
+ // that are the print-out of the matcher's parameters.
3622
+ GTEST_API_ string FormatMatcherDescription(bool negation,
3623
+ const char* matcher_name,
3624
+ const Strings& param_values);
3625
+
3626
+ } // namespace internal
3627
+
3628
+ // ElementsAreArray(first, last)
3629
+ // ElementsAreArray(pointer, count)
3630
+ // ElementsAreArray(array)
3631
+ // ElementsAreArray(container)
3632
+ // ElementsAreArray({ e1, e2, ..., en })
3633
+ //
3634
+ // The ElementsAreArray() functions are like ElementsAre(...), except
3635
+ // that they are given a homogeneous sequence rather than taking each
3636
+ // element as a function argument. The sequence can be specified as an
3637
+ // array, a pointer and count, a vector, an initializer list, or an
3638
+ // STL iterator range. In each of these cases, the underlying sequence
3639
+ // can be either a sequence of values or a sequence of matchers.
3640
+ //
3641
+ // All forms of ElementsAreArray() make a copy of the input matcher sequence.
3642
+
3643
+ template <typename Iter>
3644
+ inline internal::ElementsAreArrayMatcher<
3645
+ typename ::std::iterator_traits<Iter>::value_type>
3646
+ ElementsAreArray(Iter first, Iter last) {
3647
+ typedef typename ::std::iterator_traits<Iter>::value_type T;
3648
+ return internal::ElementsAreArrayMatcher<T>(first, last);
3649
+ }
3650
+
3651
+ template <typename T>
3652
+ inline internal::ElementsAreArrayMatcher<T> ElementsAreArray(
3653
+ const T* pointer, size_t count) {
3654
+ return ElementsAreArray(pointer, pointer + count);
3655
+ }
3656
+
3657
+ template <typename T, size_t N>
3658
+ inline internal::ElementsAreArrayMatcher<T> ElementsAreArray(
3659
+ const T (&array)[N]) {
3660
+ return ElementsAreArray(array, N);
3661
+ }
3662
+
3663
+ template <typename Container>
3664
+ inline internal::ElementsAreArrayMatcher<typename Container::value_type>
3665
+ ElementsAreArray(const Container& container) {
3666
+ return ElementsAreArray(container.begin(), container.end());
3667
+ }
3668
+
3669
+ #if GTEST_HAS_STD_INITIALIZER_LIST_
3670
+ template <typename T>
3671
+ inline internal::ElementsAreArrayMatcher<T>
3672
+ ElementsAreArray(::std::initializer_list<T> xs) {
3673
+ return ElementsAreArray(xs.begin(), xs.end());
3674
+ }
3675
+ #endif
3676
+
3677
+ // UnorderedElementsAreArray(first, last)
3678
+ // UnorderedElementsAreArray(pointer, count)
3679
+ // UnorderedElementsAreArray(array)
3680
+ // UnorderedElementsAreArray(container)
3681
+ // UnorderedElementsAreArray({ e1, e2, ..., en })
3682
+ //
3683
+ // The UnorderedElementsAreArray() functions are like
3684
+ // ElementsAreArray(...), but allow matching the elements in any order.
3685
+ template <typename Iter>
3686
+ inline internal::UnorderedElementsAreArrayMatcher<
3687
+ typename ::std::iterator_traits<Iter>::value_type>
3688
+ UnorderedElementsAreArray(Iter first, Iter last) {
3689
+ typedef typename ::std::iterator_traits<Iter>::value_type T;
3690
+ return internal::UnorderedElementsAreArrayMatcher<T>(first, last);
3691
+ }
3692
+
3693
+ template <typename T>
3694
+ inline internal::UnorderedElementsAreArrayMatcher<T>
3695
+ UnorderedElementsAreArray(const T* pointer, size_t count) {
3696
+ return UnorderedElementsAreArray(pointer, pointer + count);
3697
+ }
3698
+
3699
+ template <typename T, size_t N>
3700
+ inline internal::UnorderedElementsAreArrayMatcher<T>
3701
+ UnorderedElementsAreArray(const T (&array)[N]) {
3702
+ return UnorderedElementsAreArray(array, N);
3703
+ }
3704
+
3705
+ template <typename Container>
3706
+ inline internal::UnorderedElementsAreArrayMatcher<
3707
+ typename Container::value_type>
3708
+ UnorderedElementsAreArray(const Container& container) {
3709
+ return UnorderedElementsAreArray(container.begin(), container.end());
3710
+ }
3711
+
3712
+ #if GTEST_HAS_STD_INITIALIZER_LIST_
3713
+ template <typename T>
3714
+ inline internal::UnorderedElementsAreArrayMatcher<T>
3715
+ UnorderedElementsAreArray(::std::initializer_list<T> xs) {
3716
+ return UnorderedElementsAreArray(xs.begin(), xs.end());
3717
+ }
3718
+ #endif
3719
+
3720
+ // _ is a matcher that matches anything of any type.
3721
+ //
3722
+ // This definition is fine as:
3723
+ //
3724
+ // 1. The C++ standard permits using the name _ in a namespace that
3725
+ // is not the global namespace or ::std.
3726
+ // 2. The AnythingMatcher class has no data member or constructor,
3727
+ // so it's OK to create global variables of this type.
3728
+ // 3. c-style has approved of using _ in this case.
3729
+ const internal::AnythingMatcher _ = {};
3730
+ // Creates a matcher that matches any value of the given type T.
3731
+ template <typename T>
3732
+ inline Matcher<T> A() { return MakeMatcher(new internal::AnyMatcherImpl<T>()); }
3733
+
3734
+ // Creates a matcher that matches any value of the given type T.
3735
+ template <typename T>
3736
+ inline Matcher<T> An() { return A<T>(); }
3737
+
3738
+ // Creates a polymorphic matcher that matches anything equal to x.
3739
+ // Note: if the parameter of Eq() were declared as const T&, Eq("foo")
3740
+ // wouldn't compile.
3741
+ template <typename T>
3742
+ inline internal::EqMatcher<T> Eq(T x) { return internal::EqMatcher<T>(x); }
3743
+
3744
+ // Constructs a Matcher<T> from a 'value' of type T. The constructed
3745
+ // matcher matches any value that's equal to 'value'.
3746
+ template <typename T>
3747
+ Matcher<T>::Matcher(T value) { *this = Eq(value); }
3748
+
3749
+ // Creates a monomorphic matcher that matches anything with type Lhs
3750
+ // and equal to rhs. A user may need to use this instead of Eq(...)
3751
+ // in order to resolve an overloading ambiguity.
3752
+ //
3753
+ // TypedEq<T>(x) is just a convenient short-hand for Matcher<T>(Eq(x))
3754
+ // or Matcher<T>(x), but more readable than the latter.
3755
+ //
3756
+ // We could define similar monomorphic matchers for other comparison
3757
+ // operations (e.g. TypedLt, TypedGe, and etc), but decided not to do
3758
+ // it yet as those are used much less than Eq() in practice. A user
3759
+ // can always write Matcher<T>(Lt(5)) to be explicit about the type,
3760
+ // for example.
3761
+ template <typename Lhs, typename Rhs>
3762
+ inline Matcher<Lhs> TypedEq(const Rhs& rhs) { return Eq(rhs); }
3763
+
3764
+ // Creates a polymorphic matcher that matches anything >= x.
3765
+ template <typename Rhs>
3766
+ inline internal::GeMatcher<Rhs> Ge(Rhs x) {
3767
+ return internal::GeMatcher<Rhs>(x);
3768
+ }
3769
+
3770
+ // Creates a polymorphic matcher that matches anything > x.
3771
+ template <typename Rhs>
3772
+ inline internal::GtMatcher<Rhs> Gt(Rhs x) {
3773
+ return internal::GtMatcher<Rhs>(x);
3774
+ }
3775
+
3776
+ // Creates a polymorphic matcher that matches anything <= x.
3777
+ template <typename Rhs>
3778
+ inline internal::LeMatcher<Rhs> Le(Rhs x) {
3779
+ return internal::LeMatcher<Rhs>(x);
3780
+ }
3781
+
3782
+ // Creates a polymorphic matcher that matches anything < x.
3783
+ template <typename Rhs>
3784
+ inline internal::LtMatcher<Rhs> Lt(Rhs x) {
3785
+ return internal::LtMatcher<Rhs>(x);
3786
+ }
3787
+
3788
+ // Creates a polymorphic matcher that matches anything != x.
3789
+ template <typename Rhs>
3790
+ inline internal::NeMatcher<Rhs> Ne(Rhs x) {
3791
+ return internal::NeMatcher<Rhs>(x);
3792
+ }
3793
+
3794
+ // Creates a polymorphic matcher that matches any NULL pointer.
3795
+ inline PolymorphicMatcher<internal::IsNullMatcher > IsNull() {
3796
+ return MakePolymorphicMatcher(internal::IsNullMatcher());
3797
+ }
3798
+
3799
+ // Creates a polymorphic matcher that matches any non-NULL pointer.
3800
+ // This is convenient as Not(NULL) doesn't compile (the compiler
3801
+ // thinks that that expression is comparing a pointer with an integer).
3802
+ inline PolymorphicMatcher<internal::NotNullMatcher > NotNull() {
3803
+ return MakePolymorphicMatcher(internal::NotNullMatcher());
3804
+ }
3805
+
3806
+ // Creates a polymorphic matcher that matches any argument that
3807
+ // references variable x.
3808
+ template <typename T>
3809
+ inline internal::RefMatcher<T&> Ref(T& x) { // NOLINT
3810
+ return internal::RefMatcher<T&>(x);
3811
+ }
3812
+
3813
+ // Creates a matcher that matches any double argument approximately
3814
+ // equal to rhs, where two NANs are considered unequal.
3815
+ inline internal::FloatingEqMatcher<double> DoubleEq(double rhs) {
3816
+ return internal::FloatingEqMatcher<double>(rhs, false);
3817
+ }
3818
+
3819
+ // Creates a matcher that matches any double argument approximately
3820
+ // equal to rhs, including NaN values when rhs is NaN.
3821
+ inline internal::FloatingEqMatcher<double> NanSensitiveDoubleEq(double rhs) {
3822
+ return internal::FloatingEqMatcher<double>(rhs, true);
3823
+ }
3824
+
3825
+ // Creates a matcher that matches any double argument approximately equal to
3826
+ // rhs, up to the specified max absolute error bound, where two NANs are
3827
+ // considered unequal. The max absolute error bound must be non-negative.
3828
+ inline internal::FloatingEqMatcher<double> DoubleNear(
3829
+ double rhs, double max_abs_error) {
3830
+ return internal::FloatingEqMatcher<double>(rhs, false, max_abs_error);
3831
+ }
3832
+
3833
+ // Creates a matcher that matches any double argument approximately equal to
3834
+ // rhs, up to the specified max absolute error bound, including NaN values when
3835
+ // rhs is NaN. The max absolute error bound must be non-negative.
3836
+ inline internal::FloatingEqMatcher<double> NanSensitiveDoubleNear(
3837
+ double rhs, double max_abs_error) {
3838
+ return internal::FloatingEqMatcher<double>(rhs, true, max_abs_error);
3839
+ }
3840
+
3841
+ // Creates a matcher that matches any float argument approximately
3842
+ // equal to rhs, where two NANs are considered unequal.
3843
+ inline internal::FloatingEqMatcher<float> FloatEq(float rhs) {
3844
+ return internal::FloatingEqMatcher<float>(rhs, false);
3845
+ }
3846
+
3847
+ // Creates a matcher that matches any float argument approximately
3848
+ // equal to rhs, including NaN values when rhs is NaN.
3849
+ inline internal::FloatingEqMatcher<float> NanSensitiveFloatEq(float rhs) {
3850
+ return internal::FloatingEqMatcher<float>(rhs, true);
3851
+ }
3852
+
3853
+ // Creates a matcher that matches any float argument approximately equal to
3854
+ // rhs, up to the specified max absolute error bound, where two NANs are
3855
+ // considered unequal. The max absolute error bound must be non-negative.
3856
+ inline internal::FloatingEqMatcher<float> FloatNear(
3857
+ float rhs, float max_abs_error) {
3858
+ return internal::FloatingEqMatcher<float>(rhs, false, max_abs_error);
3859
+ }
3860
+
3861
+ // Creates a matcher that matches any float argument approximately equal to
3862
+ // rhs, up to the specified max absolute error bound, including NaN values when
3863
+ // rhs is NaN. The max absolute error bound must be non-negative.
3864
+ inline internal::FloatingEqMatcher<float> NanSensitiveFloatNear(
3865
+ float rhs, float max_abs_error) {
3866
+ return internal::FloatingEqMatcher<float>(rhs, true, max_abs_error);
3867
+ }
3868
+
3869
+ // Creates a matcher that matches a pointer (raw or smart) that points
3870
+ // to a value that matches inner_matcher.
3871
+ template <typename InnerMatcher>
3872
+ inline internal::PointeeMatcher<InnerMatcher> Pointee(
3873
+ const InnerMatcher& inner_matcher) {
3874
+ return internal::PointeeMatcher<InnerMatcher>(inner_matcher);
3875
+ }
3876
+
3877
+ // Creates a matcher that matches a pointer or reference that matches
3878
+ // inner_matcher when dynamic_cast<To> is applied.
3879
+ // The result of dynamic_cast<To> is forwarded to the inner matcher.
3880
+ // If To is a pointer and the cast fails, the inner matcher will receive NULL.
3881
+ // If To is a reference and the cast fails, this matcher returns false
3882
+ // immediately.
3883
+ template <typename To>
3884
+ inline PolymorphicMatcher<internal::WhenDynamicCastToMatcher<To> >
3885
+ WhenDynamicCastTo(const Matcher<To>& inner_matcher) {
3886
+ return MakePolymorphicMatcher(
3887
+ internal::WhenDynamicCastToMatcher<To>(inner_matcher));
3888
+ }
3889
+
3890
+ // Creates a matcher that matches an object whose given field matches
3891
+ // 'matcher'. For example,
3892
+ // Field(&Foo::number, Ge(5))
3893
+ // matches a Foo object x iff x.number >= 5.
3894
+ template <typename Class, typename FieldType, typename FieldMatcher>
3895
+ inline PolymorphicMatcher<
3896
+ internal::FieldMatcher<Class, FieldType> > Field(
3897
+ FieldType Class::*field, const FieldMatcher& matcher) {
3898
+ return MakePolymorphicMatcher(
3899
+ internal::FieldMatcher<Class, FieldType>(
3900
+ field, MatcherCast<const FieldType&>(matcher)));
3901
+ // The call to MatcherCast() is required for supporting inner
3902
+ // matchers of compatible types. For example, it allows
3903
+ // Field(&Foo::bar, m)
3904
+ // to compile where bar is an int32 and m is a matcher for int64.
3905
+ }
3906
+
3907
+ // Creates a matcher that matches an object whose given property
3908
+ // matches 'matcher'. For example,
3909
+ // Property(&Foo::str, StartsWith("hi"))
3910
+ // matches a Foo object x iff x.str() starts with "hi".
3911
+ template <typename Class, typename PropertyType, typename PropertyMatcher>
3912
+ inline PolymorphicMatcher<
3913
+ internal::PropertyMatcher<Class, PropertyType> > Property(
3914
+ PropertyType (Class::*property)() const, const PropertyMatcher& matcher) {
3915
+ return MakePolymorphicMatcher(
3916
+ internal::PropertyMatcher<Class, PropertyType>(
3917
+ property,
3918
+ MatcherCast<GTEST_REFERENCE_TO_CONST_(PropertyType)>(matcher)));
3919
+ // The call to MatcherCast() is required for supporting inner
3920
+ // matchers of compatible types. For example, it allows
3921
+ // Property(&Foo::bar, m)
3922
+ // to compile where bar() returns an int32 and m is a matcher for int64.
3923
+ }
3924
+
3925
+ // Creates a matcher that matches an object iff the result of applying
3926
+ // a callable to x matches 'matcher'.
3927
+ // For example,
3928
+ // ResultOf(f, StartsWith("hi"))
3929
+ // matches a Foo object x iff f(x) starts with "hi".
3930
+ // callable parameter can be a function, function pointer, or a functor.
3931
+ // Callable has to satisfy the following conditions:
3932
+ // * It is required to keep no state affecting the results of
3933
+ // the calls on it and make no assumptions about how many calls
3934
+ // will be made. Any state it keeps must be protected from the
3935
+ // concurrent access.
3936
+ // * If it is a function object, it has to define type result_type.
3937
+ // We recommend deriving your functor classes from std::unary_function.
3938
+ template <typename Callable, typename ResultOfMatcher>
3939
+ internal::ResultOfMatcher<Callable> ResultOf(
3940
+ Callable callable, const ResultOfMatcher& matcher) {
3941
+ return internal::ResultOfMatcher<Callable>(
3942
+ callable,
3943
+ MatcherCast<typename internal::CallableTraits<Callable>::ResultType>(
3944
+ matcher));
3945
+ // The call to MatcherCast() is required for supporting inner
3946
+ // matchers of compatible types. For example, it allows
3947
+ // ResultOf(Function, m)
3948
+ // to compile where Function() returns an int32 and m is a matcher for int64.
3949
+ }
3950
+
3951
+ // String matchers.
3952
+
3953
+ // Matches a string equal to str.
3954
+ inline PolymorphicMatcher<internal::StrEqualityMatcher<internal::string> >
3955
+ StrEq(const internal::string& str) {
3956
+ return MakePolymorphicMatcher(internal::StrEqualityMatcher<internal::string>(
3957
+ str, true, true));
3958
+ }
3959
+
3960
+ // Matches a string not equal to str.
3961
+ inline PolymorphicMatcher<internal::StrEqualityMatcher<internal::string> >
3962
+ StrNe(const internal::string& str) {
3963
+ return MakePolymorphicMatcher(internal::StrEqualityMatcher<internal::string>(
3964
+ str, false, true));
3965
+ }
3966
+
3967
+ // Matches a string equal to str, ignoring case.
3968
+ inline PolymorphicMatcher<internal::StrEqualityMatcher<internal::string> >
3969
+ StrCaseEq(const internal::string& str) {
3970
+ return MakePolymorphicMatcher(internal::StrEqualityMatcher<internal::string>(
3971
+ str, true, false));
3972
+ }
3973
+
3974
+ // Matches a string not equal to str, ignoring case.
3975
+ inline PolymorphicMatcher<internal::StrEqualityMatcher<internal::string> >
3976
+ StrCaseNe(const internal::string& str) {
3977
+ return MakePolymorphicMatcher(internal::StrEqualityMatcher<internal::string>(
3978
+ str, false, false));
3979
+ }
3980
+
3981
+ // Creates a matcher that matches any string, std::string, or C string
3982
+ // that contains the given substring.
3983
+ inline PolymorphicMatcher<internal::HasSubstrMatcher<internal::string> >
3984
+ HasSubstr(const internal::string& substring) {
3985
+ return MakePolymorphicMatcher(internal::HasSubstrMatcher<internal::string>(
3986
+ substring));
3987
+ }
3988
+
3989
+ // Matches a string that starts with 'prefix' (case-sensitive).
3990
+ inline PolymorphicMatcher<internal::StartsWithMatcher<internal::string> >
3991
+ StartsWith(const internal::string& prefix) {
3992
+ return MakePolymorphicMatcher(internal::StartsWithMatcher<internal::string>(
3993
+ prefix));
3994
+ }
3995
+
3996
+ // Matches a string that ends with 'suffix' (case-sensitive).
3997
+ inline PolymorphicMatcher<internal::EndsWithMatcher<internal::string> >
3998
+ EndsWith(const internal::string& suffix) {
3999
+ return MakePolymorphicMatcher(internal::EndsWithMatcher<internal::string>(
4000
+ suffix));
4001
+ }
4002
+
4003
+ // Matches a string that fully matches regular expression 'regex'.
4004
+ // The matcher takes ownership of 'regex'.
4005
+ inline PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex(
4006
+ const internal::RE* regex) {
4007
+ return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, true));
4008
+ }
4009
+ inline PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex(
4010
+ const internal::string& regex) {
4011
+ return MatchesRegex(new internal::RE(regex));
4012
+ }
4013
+
4014
+ // Matches a string that contains regular expression 'regex'.
4015
+ // The matcher takes ownership of 'regex'.
4016
+ inline PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex(
4017
+ const internal::RE* regex) {
4018
+ return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, false));
4019
+ }
4020
+ inline PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex(
4021
+ const internal::string& regex) {
4022
+ return ContainsRegex(new internal::RE(regex));
4023
+ }
4024
+
4025
+ #if GTEST_HAS_GLOBAL_WSTRING || GTEST_HAS_STD_WSTRING
4026
+ // Wide string matchers.
4027
+
4028
+ // Matches a string equal to str.
4029
+ inline PolymorphicMatcher<internal::StrEqualityMatcher<internal::wstring> >
4030
+ StrEq(const internal::wstring& str) {
4031
+ return MakePolymorphicMatcher(internal::StrEqualityMatcher<internal::wstring>(
4032
+ str, true, true));
4033
+ }
4034
+
4035
+ // Matches a string not equal to str.
4036
+ inline PolymorphicMatcher<internal::StrEqualityMatcher<internal::wstring> >
4037
+ StrNe(const internal::wstring& str) {
4038
+ return MakePolymorphicMatcher(internal::StrEqualityMatcher<internal::wstring>(
4039
+ str, false, true));
4040
+ }
4041
+
4042
+ // Matches a string equal to str, ignoring case.
4043
+ inline PolymorphicMatcher<internal::StrEqualityMatcher<internal::wstring> >
4044
+ StrCaseEq(const internal::wstring& str) {
4045
+ return MakePolymorphicMatcher(internal::StrEqualityMatcher<internal::wstring>(
4046
+ str, true, false));
4047
+ }
4048
+
4049
+ // Matches a string not equal to str, ignoring case.
4050
+ inline PolymorphicMatcher<internal::StrEqualityMatcher<internal::wstring> >
4051
+ StrCaseNe(const internal::wstring& str) {
4052
+ return MakePolymorphicMatcher(internal::StrEqualityMatcher<internal::wstring>(
4053
+ str, false, false));
4054
+ }
4055
+
4056
+ // Creates a matcher that matches any wstring, std::wstring, or C wide string
4057
+ // that contains the given substring.
4058
+ inline PolymorphicMatcher<internal::HasSubstrMatcher<internal::wstring> >
4059
+ HasSubstr(const internal::wstring& substring) {
4060
+ return MakePolymorphicMatcher(internal::HasSubstrMatcher<internal::wstring>(
4061
+ substring));
4062
+ }
4063
+
4064
+ // Matches a string that starts with 'prefix' (case-sensitive).
4065
+ inline PolymorphicMatcher<internal::StartsWithMatcher<internal::wstring> >
4066
+ StartsWith(const internal::wstring& prefix) {
4067
+ return MakePolymorphicMatcher(internal::StartsWithMatcher<internal::wstring>(
4068
+ prefix));
4069
+ }
4070
+
4071
+ // Matches a string that ends with 'suffix' (case-sensitive).
4072
+ inline PolymorphicMatcher<internal::EndsWithMatcher<internal::wstring> >
4073
+ EndsWith(const internal::wstring& suffix) {
4074
+ return MakePolymorphicMatcher(internal::EndsWithMatcher<internal::wstring>(
4075
+ suffix));
4076
+ }
4077
+
4078
+ #endif // GTEST_HAS_GLOBAL_WSTRING || GTEST_HAS_STD_WSTRING
4079
+
4080
+ // Creates a polymorphic matcher that matches a 2-tuple where the
4081
+ // first field == the second field.
4082
+ inline internal::Eq2Matcher Eq() { return internal::Eq2Matcher(); }
4083
+
4084
+ // Creates a polymorphic matcher that matches a 2-tuple where the
4085
+ // first field >= the second field.
4086
+ inline internal::Ge2Matcher Ge() { return internal::Ge2Matcher(); }
4087
+
4088
+ // Creates a polymorphic matcher that matches a 2-tuple where the
4089
+ // first field > the second field.
4090
+ inline internal::Gt2Matcher Gt() { return internal::Gt2Matcher(); }
4091
+
4092
+ // Creates a polymorphic matcher that matches a 2-tuple where the
4093
+ // first field <= the second field.
4094
+ inline internal::Le2Matcher Le() { return internal::Le2Matcher(); }
4095
+
4096
+ // Creates a polymorphic matcher that matches a 2-tuple where the
4097
+ // first field < the second field.
4098
+ inline internal::Lt2Matcher Lt() { return internal::Lt2Matcher(); }
4099
+
4100
+ // Creates a polymorphic matcher that matches a 2-tuple where the
4101
+ // first field != the second field.
4102
+ inline internal::Ne2Matcher Ne() { return internal::Ne2Matcher(); }
4103
+
4104
+ // Creates a matcher that matches any value of type T that m doesn't
4105
+ // match.
4106
+ template <typename InnerMatcher>
4107
+ inline internal::NotMatcher<InnerMatcher> Not(InnerMatcher m) {
4108
+ return internal::NotMatcher<InnerMatcher>(m);
4109
+ }
4110
+
4111
+ // Returns a matcher that matches anything that satisfies the given
4112
+ // predicate. The predicate can be any unary function or functor
4113
+ // whose return type can be implicitly converted to bool.
4114
+ template <typename Predicate>
4115
+ inline PolymorphicMatcher<internal::TrulyMatcher<Predicate> >
4116
+ Truly(Predicate pred) {
4117
+ return MakePolymorphicMatcher(internal::TrulyMatcher<Predicate>(pred));
4118
+ }
4119
+
4120
+ // Returns a matcher that matches the container size. The container must
4121
+ // support both size() and size_type which all STL-like containers provide.
4122
+ // Note that the parameter 'size' can be a value of type size_type as well as
4123
+ // matcher. For instance:
4124
+ // EXPECT_THAT(container, SizeIs(2)); // Checks container has 2 elements.
4125
+ // EXPECT_THAT(container, SizeIs(Le(2)); // Checks container has at most 2.
4126
+ template <typename SizeMatcher>
4127
+ inline internal::SizeIsMatcher<SizeMatcher>
4128
+ SizeIs(const SizeMatcher& size_matcher) {
4129
+ return internal::SizeIsMatcher<SizeMatcher>(size_matcher);
4130
+ }
4131
+
4132
+ // Returns a matcher that matches the distance between the container's begin()
4133
+ // iterator and its end() iterator, i.e. the size of the container. This matcher
4134
+ // can be used instead of SizeIs with containers such as std::forward_list which
4135
+ // do not implement size(). The container must provide const_iterator (with
4136
+ // valid iterator_traits), begin() and end().
4137
+ template <typename DistanceMatcher>
4138
+ inline internal::BeginEndDistanceIsMatcher<DistanceMatcher>
4139
+ BeginEndDistanceIs(const DistanceMatcher& distance_matcher) {
4140
+ return internal::BeginEndDistanceIsMatcher<DistanceMatcher>(distance_matcher);
4141
+ }
4142
+
4143
+ // Returns a matcher that matches an equal container.
4144
+ // This matcher behaves like Eq(), but in the event of mismatch lists the
4145
+ // values that are included in one container but not the other. (Duplicate
4146
+ // values and order differences are not explained.)
4147
+ template <typename Container>
4148
+ inline PolymorphicMatcher<internal::ContainerEqMatcher< // NOLINT
4149
+ GTEST_REMOVE_CONST_(Container)> >
4150
+ ContainerEq(const Container& rhs) {
4151
+ // This following line is for working around a bug in MSVC 8.0,
4152
+ // which causes Container to be a const type sometimes.
4153
+ typedef GTEST_REMOVE_CONST_(Container) RawContainer;
4154
+ return MakePolymorphicMatcher(
4155
+ internal::ContainerEqMatcher<RawContainer>(rhs));
4156
+ }
4157
+
4158
+ // Returns a matcher that matches a container that, when sorted using
4159
+ // the given comparator, matches container_matcher.
4160
+ template <typename Comparator, typename ContainerMatcher>
4161
+ inline internal::WhenSortedByMatcher<Comparator, ContainerMatcher>
4162
+ WhenSortedBy(const Comparator& comparator,
4163
+ const ContainerMatcher& container_matcher) {
4164
+ return internal::WhenSortedByMatcher<Comparator, ContainerMatcher>(
4165
+ comparator, container_matcher);
4166
+ }
4167
+
4168
+ // Returns a matcher that matches a container that, when sorted using
4169
+ // the < operator, matches container_matcher.
4170
+ template <typename ContainerMatcher>
4171
+ inline internal::WhenSortedByMatcher<internal::LessComparator, ContainerMatcher>
4172
+ WhenSorted(const ContainerMatcher& container_matcher) {
4173
+ return
4174
+ internal::WhenSortedByMatcher<internal::LessComparator, ContainerMatcher>(
4175
+ internal::LessComparator(), container_matcher);
4176
+ }
4177
+
4178
+ // Matches an STL-style container or a native array that contains the
4179
+ // same number of elements as in rhs, where its i-th element and rhs's
4180
+ // i-th element (as a pair) satisfy the given pair matcher, for all i.
4181
+ // TupleMatcher must be able to be safely cast to Matcher<tuple<const
4182
+ // T1&, const T2&> >, where T1 and T2 are the types of elements in the
4183
+ // LHS container and the RHS container respectively.
4184
+ template <typename TupleMatcher, typename Container>
4185
+ inline internal::PointwiseMatcher<TupleMatcher,
4186
+ GTEST_REMOVE_CONST_(Container)>
4187
+ Pointwise(const TupleMatcher& tuple_matcher, const Container& rhs) {
4188
+ // This following line is for working around a bug in MSVC 8.0,
4189
+ // which causes Container to be a const type sometimes (e.g. when
4190
+ // rhs is a const int[])..
4191
+ typedef GTEST_REMOVE_CONST_(Container) RawContainer;
4192
+ return internal::PointwiseMatcher<TupleMatcher, RawContainer>(
4193
+ tuple_matcher, rhs);
4194
+ }
4195
+
4196
+ #if GTEST_HAS_STD_INITIALIZER_LIST_
4197
+
4198
+ // Supports the Pointwise(m, {a, b, c}) syntax.
4199
+ template <typename TupleMatcher, typename T>
4200
+ inline internal::PointwiseMatcher<TupleMatcher, std::vector<T> > Pointwise(
4201
+ const TupleMatcher& tuple_matcher, std::initializer_list<T> rhs) {
4202
+ return Pointwise(tuple_matcher, std::vector<T>(rhs));
4203
+ }
4204
+
4205
+ #endif // GTEST_HAS_STD_INITIALIZER_LIST_
4206
+
4207
+ // UnorderedPointwise(pair_matcher, rhs) matches an STL-style
4208
+ // container or a native array that contains the same number of
4209
+ // elements as in rhs, where in some permutation of the container, its
4210
+ // i-th element and rhs's i-th element (as a pair) satisfy the given
4211
+ // pair matcher, for all i. Tuple2Matcher must be able to be safely
4212
+ // cast to Matcher<tuple<const T1&, const T2&> >, where T1 and T2 are
4213
+ // the types of elements in the LHS container and the RHS container
4214
+ // respectively.
4215
+ //
4216
+ // This is like Pointwise(pair_matcher, rhs), except that the element
4217
+ // order doesn't matter.
4218
+ template <typename Tuple2Matcher, typename RhsContainer>
4219
+ inline internal::UnorderedElementsAreArrayMatcher<
4220
+ typename internal::BoundSecondMatcher<
4221
+ Tuple2Matcher, typename internal::StlContainerView<GTEST_REMOVE_CONST_(
4222
+ RhsContainer)>::type::value_type> >
4223
+ UnorderedPointwise(const Tuple2Matcher& tuple2_matcher,
4224
+ const RhsContainer& rhs_container) {
4225
+ // This following line is for working around a bug in MSVC 8.0,
4226
+ // which causes RhsContainer to be a const type sometimes (e.g. when
4227
+ // rhs_container is a const int[]).
4228
+ typedef GTEST_REMOVE_CONST_(RhsContainer) RawRhsContainer;
4229
+
4230
+ // RhsView allows the same code to handle RhsContainer being a
4231
+ // STL-style container and it being a native C-style array.
4232
+ typedef typename internal::StlContainerView<RawRhsContainer> RhsView;
4233
+ typedef typename RhsView::type RhsStlContainer;
4234
+ typedef typename RhsStlContainer::value_type Second;
4235
+ const RhsStlContainer& rhs_stl_container =
4236
+ RhsView::ConstReference(rhs_container);
4237
+
4238
+ // Create a matcher for each element in rhs_container.
4239
+ ::std::vector<internal::BoundSecondMatcher<Tuple2Matcher, Second> > matchers;
4240
+ for (typename RhsStlContainer::const_iterator it = rhs_stl_container.begin();
4241
+ it != rhs_stl_container.end(); ++it) {
4242
+ matchers.push_back(
4243
+ internal::MatcherBindSecond(tuple2_matcher, *it));
4244
+ }
4245
+
4246
+ // Delegate the work to UnorderedElementsAreArray().
4247
+ return UnorderedElementsAreArray(matchers);
4248
+ }
4249
+
4250
+ #if GTEST_HAS_STD_INITIALIZER_LIST_
4251
+
4252
+ // Supports the UnorderedPointwise(m, {a, b, c}) syntax.
4253
+ template <typename Tuple2Matcher, typename T>
4254
+ inline internal::UnorderedElementsAreArrayMatcher<
4255
+ typename internal::BoundSecondMatcher<Tuple2Matcher, T> >
4256
+ UnorderedPointwise(const Tuple2Matcher& tuple2_matcher,
4257
+ std::initializer_list<T> rhs) {
4258
+ return UnorderedPointwise(tuple2_matcher, std::vector<T>(rhs));
4259
+ }
4260
+
4261
+ #endif // GTEST_HAS_STD_INITIALIZER_LIST_
4262
+
4263
+ // Matches an STL-style container or a native array that contains at
4264
+ // least one element matching the given value or matcher.
4265
+ //
4266
+ // Examples:
4267
+ // ::std::set<int> page_ids;
4268
+ // page_ids.insert(3);
4269
+ // page_ids.insert(1);
4270
+ // EXPECT_THAT(page_ids, Contains(1));
4271
+ // EXPECT_THAT(page_ids, Contains(Gt(2)));
4272
+ // EXPECT_THAT(page_ids, Not(Contains(4)));
4273
+ //
4274
+ // ::std::map<int, size_t> page_lengths;
4275
+ // page_lengths[1] = 100;
4276
+ // EXPECT_THAT(page_lengths,
4277
+ // Contains(::std::pair<const int, size_t>(1, 100)));
4278
+ //
4279
+ // const char* user_ids[] = { "joe", "mike", "tom" };
4280
+ // EXPECT_THAT(user_ids, Contains(Eq(::std::string("tom"))));
4281
+ template <typename M>
4282
+ inline internal::ContainsMatcher<M> Contains(M matcher) {
4283
+ return internal::ContainsMatcher<M>(matcher);
4284
+ }
4285
+
4286
+ // Matches an STL-style container or a native array that contains only
4287
+ // elements matching the given value or matcher.
4288
+ //
4289
+ // Each(m) is semantically equivalent to Not(Contains(Not(m))). Only
4290
+ // the messages are different.
4291
+ //
4292
+ // Examples:
4293
+ // ::std::set<int> page_ids;
4294
+ // // Each(m) matches an empty container, regardless of what m is.
4295
+ // EXPECT_THAT(page_ids, Each(Eq(1)));
4296
+ // EXPECT_THAT(page_ids, Each(Eq(77)));
4297
+ //
4298
+ // page_ids.insert(3);
4299
+ // EXPECT_THAT(page_ids, Each(Gt(0)));
4300
+ // EXPECT_THAT(page_ids, Not(Each(Gt(4))));
4301
+ // page_ids.insert(1);
4302
+ // EXPECT_THAT(page_ids, Not(Each(Lt(2))));
4303
+ //
4304
+ // ::std::map<int, size_t> page_lengths;
4305
+ // page_lengths[1] = 100;
4306
+ // page_lengths[2] = 200;
4307
+ // page_lengths[3] = 300;
4308
+ // EXPECT_THAT(page_lengths, Not(Each(Pair(1, 100))));
4309
+ // EXPECT_THAT(page_lengths, Each(Key(Le(3))));
4310
+ //
4311
+ // const char* user_ids[] = { "joe", "mike", "tom" };
4312
+ // EXPECT_THAT(user_ids, Not(Each(Eq(::std::string("tom")))));
4313
+ template <typename M>
4314
+ inline internal::EachMatcher<M> Each(M matcher) {
4315
+ return internal::EachMatcher<M>(matcher);
4316
+ }
4317
+
4318
+ // Key(inner_matcher) matches an std::pair whose 'first' field matches
4319
+ // inner_matcher. For example, Contains(Key(Ge(5))) can be used to match an
4320
+ // std::map that contains at least one element whose key is >= 5.
4321
+ template <typename M>
4322
+ inline internal::KeyMatcher<M> Key(M inner_matcher) {
4323
+ return internal::KeyMatcher<M>(inner_matcher);
4324
+ }
4325
+
4326
+ // Pair(first_matcher, second_matcher) matches a std::pair whose 'first' field
4327
+ // matches first_matcher and whose 'second' field matches second_matcher. For
4328
+ // example, EXPECT_THAT(map_type, ElementsAre(Pair(Ge(5), "foo"))) can be used
4329
+ // to match a std::map<int, string> that contains exactly one element whose key
4330
+ // is >= 5 and whose value equals "foo".
4331
+ template <typename FirstMatcher, typename SecondMatcher>
4332
+ inline internal::PairMatcher<FirstMatcher, SecondMatcher>
4333
+ Pair(FirstMatcher first_matcher, SecondMatcher second_matcher) {
4334
+ return internal::PairMatcher<FirstMatcher, SecondMatcher>(
4335
+ first_matcher, second_matcher);
4336
+ }
4337
+
4338
+ // Returns a predicate that is satisfied by anything that matches the
4339
+ // given matcher.
4340
+ template <typename M>
4341
+ inline internal::MatcherAsPredicate<M> Matches(M matcher) {
4342
+ return internal::MatcherAsPredicate<M>(matcher);
4343
+ }
4344
+
4345
+ // Returns true iff the value matches the matcher.
4346
+ template <typename T, typename M>
4347
+ inline bool Value(const T& value, M matcher) {
4348
+ return testing::Matches(matcher)(value);
4349
+ }
4350
+
4351
+ // Matches the value against the given matcher and explains the match
4352
+ // result to listener.
4353
+ template <typename T, typename M>
4354
+ inline bool ExplainMatchResult(
4355
+ M matcher, const T& value, MatchResultListener* listener) {
4356
+ return SafeMatcherCast<const T&>(matcher).MatchAndExplain(value, listener);
4357
+ }
4358
+
4359
+ #if GTEST_LANG_CXX11
4360
+ // Define variadic matcher versions. They are overloaded in
4361
+ // gmock-generated-matchers.h for the cases supported by pre C++11 compilers.
4362
+ template <typename... Args>
4363
+ inline internal::AllOfMatcher<Args...> AllOf(const Args&... matchers) {
4364
+ return internal::AllOfMatcher<Args...>(matchers...);
4365
+ }
4366
+
4367
+ template <typename... Args>
4368
+ inline internal::AnyOfMatcher<Args...> AnyOf(const Args&... matchers) {
4369
+ return internal::AnyOfMatcher<Args...>(matchers...);
4370
+ }
4371
+
4372
+ #endif // GTEST_LANG_CXX11
4373
+
4374
+ // AllArgs(m) is a synonym of m. This is useful in
4375
+ //
4376
+ // EXPECT_CALL(foo, Bar(_, _)).With(AllArgs(Eq()));
4377
+ //
4378
+ // which is easier to read than
4379
+ //
4380
+ // EXPECT_CALL(foo, Bar(_, _)).With(Eq());
4381
+ template <typename InnerMatcher>
4382
+ inline InnerMatcher AllArgs(const InnerMatcher& matcher) { return matcher; }
4383
+
4384
+ // These macros allow using matchers to check values in Google Test
4385
+ // tests. ASSERT_THAT(value, matcher) and EXPECT_THAT(value, matcher)
4386
+ // succeed iff the value matches the matcher. If the assertion fails,
4387
+ // the value and the description of the matcher will be printed.
4388
+ #define ASSERT_THAT(value, matcher) ASSERT_PRED_FORMAT1(\
4389
+ ::testing::internal::MakePredicateFormatterFromMatcher(matcher), value)
4390
+ #define EXPECT_THAT(value, matcher) EXPECT_PRED_FORMAT1(\
4391
+ ::testing::internal::MakePredicateFormatterFromMatcher(matcher), value)
4392
+
4393
+ } // namespace testing
4394
+
4395
+ // Include any custom callback matchers added by the local installation.
4396
+ // We must include this header at the end to make sure it can use the
4397
+ // declarations from this file.
4398
+ #include "gmock/internal/custom/gmock-matchers.h"
4399
+ #endif // GMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_