react-native-quick-crypto 1.0.18 → 1.1.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 (751) hide show
  1. package/QuickCrypto.podspec +12 -38
  2. package/README.md +2 -0
  3. package/android/CMakeLists.txt +3 -0
  4. package/cpp/utils/HybridUtils.cpp +39 -77
  5. package/deps/simdutf/.clang-format +4 -0
  6. package/deps/simdutf/.github/ISSUE_TEMPLATE/bug_report.md +62 -0
  7. package/deps/simdutf/.github/ISSUE_TEMPLATE/config.yml +1 -0
  8. package/deps/simdutf/.github/ISSUE_TEMPLATE/feature_request.md +35 -0
  9. package/deps/simdutf/.github/ISSUE_TEMPLATE/standard-issue-template.md +29 -0
  10. package/deps/simdutf/.github/pull_request_template.md +51 -0
  11. package/deps/simdutf/.github/workflows/aarch64.yml +39 -0
  12. package/deps/simdutf/.github/workflows/alpine.yml +27 -0
  13. package/deps/simdutf/.github/workflows/amalgamation_demos.yml +34 -0
  14. package/deps/simdutf/.github/workflows/armv7.yml +32 -0
  15. package/deps/simdutf/.github/workflows/atomic_fuzz.yml +25 -0
  16. package/deps/simdutf/.github/workflows/cifuzz.yml +37 -0
  17. package/deps/simdutf/.github/workflows/clangformat.yml +36 -0
  18. package/deps/simdutf/.github/workflows/debian-latestcxxstandards.yml +40 -0
  19. package/deps/simdutf/.github/workflows/debian.yml +33 -0
  20. package/deps/simdutf/.github/workflows/documentation.yml +36 -0
  21. package/deps/simdutf/.github/workflows/emscripten.yml +19 -0
  22. package/deps/simdutf/.github/workflows/loongarch64-gcc-14.2.yml +39 -0
  23. package/deps/simdutf/.github/workflows/macos-latest.yml +29 -0
  24. package/deps/simdutf/.github/workflows/msys2-clang.yml +48 -0
  25. package/deps/simdutf/.github/workflows/msys2.yml +50 -0
  26. package/deps/simdutf/.github/workflows/ppc64le.yml +29 -0
  27. package/deps/simdutf/.github/workflows/rvv-1024-clang-18.yml +35 -0
  28. package/deps/simdutf/.github/workflows/rvv-128-clang-17.yml +35 -0
  29. package/deps/simdutf/.github/workflows/rvv-256-gcc-14.yml +31 -0
  30. package/deps/simdutf/.github/workflows/s390x.yml +29 -0
  31. package/deps/simdutf/.github/workflows/selective-amalgamation.yml +29 -0
  32. package/deps/simdutf/.github/workflows/typos.yml +19 -0
  33. package/deps/simdutf/.github/workflows/ubuntu22-cxx20.yml +30 -0
  34. package/deps/simdutf/.github/workflows/ubuntu22.yml +32 -0
  35. package/deps/simdutf/.github/workflows/ubuntu22_gcc12.yml +27 -0
  36. package/deps/simdutf/.github/workflows/ubuntu22sani.yml +29 -0
  37. package/deps/simdutf/.github/workflows/ubuntu24-cxxstandards.yml +34 -0
  38. package/deps/simdutf/.github/workflows/ubuntu24-unsignedchar.yml +34 -0
  39. package/deps/simdutf/.github/workflows/ubuntu24.yml +32 -0
  40. package/deps/simdutf/.github/workflows/ubuntu24sani.yml +36 -0
  41. package/deps/simdutf/.github/workflows/ubuntu24sani_clang.yml +29 -0
  42. package/deps/simdutf/.github/workflows/vs17-arm-ci.yml +21 -0
  43. package/deps/simdutf/.github/workflows/vs17-ci-cxx20.yml +41 -0
  44. package/deps/simdutf/.github/workflows/vs17-ci.yml +41 -0
  45. package/deps/simdutf/.github/workflows/vs17-clang-ci.yml +41 -0
  46. package/deps/simdutf/.github/workflows/vs17-cxxstandards.yml +36 -0
  47. package/deps/simdutf/AI_USAGE_POLICY.md +56 -0
  48. package/deps/simdutf/AUTHORS +6 -0
  49. package/deps/simdutf/CMakeLists.txt +231 -0
  50. package/deps/simdutf/CONTRIBUTING.md +214 -0
  51. package/deps/simdutf/CONTRIBUTORS +1 -0
  52. package/deps/simdutf/Doxyfile +2584 -0
  53. package/deps/simdutf/LICENSE-APACHE +201 -0
  54. package/deps/simdutf/LICENSE-MIT +18 -0
  55. package/deps/simdutf/Makefile.crosscompile +54 -0
  56. package/deps/simdutf/README-RVV.md +16 -0
  57. package/deps/simdutf/README.md +2782 -0
  58. package/deps/simdutf/SECURITY.md +8 -0
  59. package/deps/simdutf/benchmarks/CMakeLists.txt +101 -0
  60. package/deps/simdutf/benchmarks/alignment.cpp +150 -0
  61. package/deps/simdutf/benchmarks/base64/CMakeLists.txt +30 -0
  62. package/deps/simdutf/benchmarks/base64/benchmark_base64.cpp +875 -0
  63. package/deps/simdutf/benchmarks/base64/libbase64_spaces.h +49 -0
  64. package/deps/simdutf/benchmarks/base64/node_base64.h +227 -0
  65. package/deps/simdutf/benchmarks/base64/openssl3_base64.h +334 -0
  66. package/deps/simdutf/benchmarks/benchmark.cpp +65 -0
  67. package/deps/simdutf/benchmarks/benchmark_to_well_formed_utf16.cpp +347 -0
  68. package/deps/simdutf/benchmarks/competition/.clang-format-ignore +5 -0
  69. package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.cpp +1276 -0
  70. package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.h +595 -0
  71. package/deps/simdutf/benchmarks/competition/README.md +7 -0
  72. package/deps/simdutf/benchmarks/competition/hoehrmann/hoehrmann.h +91 -0
  73. package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16.h +444 -0
  74. package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16_tables.h +13183 -0
  75. package/deps/simdutf/benchmarks/competition/inoue2008/script.py +73 -0
  76. package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.cpp +738 -0
  77. package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.h +293 -0
  78. package/deps/simdutf/benchmarks/competition/u8u16/COPYRIGHT +8 -0
  79. package/deps/simdutf/benchmarks/competition/u8u16/Makefile +44 -0
  80. package/deps/simdutf/benchmarks/competition/u8u16/OSL3.0.txt +169 -0
  81. package/deps/simdutf/benchmarks/competition/u8u16/Profiling/BOM_Profiler.h +148 -0
  82. package/deps/simdutf/benchmarks/competition/u8u16/Profiling/i386_timer.h +45 -0
  83. package/deps/simdutf/benchmarks/competition/u8u16/Profiling/ppc_timer.c +34 -0
  84. package/deps/simdutf/benchmarks/competition/u8u16/README +56 -0
  85. package/deps/simdutf/benchmarks/competition/u8u16/config/config_defs.h +43 -0
  86. package/deps/simdutf/benchmarks/competition/u8u16/config/g4_config.h +27 -0
  87. package/deps/simdutf/benchmarks/competition/u8u16/config/mmx_config.h +16 -0
  88. package/deps/simdutf/benchmarks/competition/u8u16/config/p4_config.h +18 -0
  89. package/deps/simdutf/benchmarks/competition/u8u16/config/p4_ideal_config.h +16 -0
  90. package/deps/simdutf/benchmarks/competition/u8u16/config/spu_config.h +28 -0
  91. package/deps/simdutf/benchmarks/competition/u8u16/config/ssse3_config.h +20 -0
  92. package/deps/simdutf/benchmarks/competition/u8u16/iconv_u8u16.c +2 -0
  93. package/deps/simdutf/benchmarks/competition/u8u16/lib/altivec_simd.h +440 -0
  94. package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_basic_ops.py +121 -0
  95. package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_half_operand_versions.py +158 -0
  96. package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_test.py +270 -0
  97. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd.h +141 -0
  98. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_basic.h +216 -0
  99. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_built_in.h +119 -0
  100. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_modified.h +2430 -0
  101. package/deps/simdutf/benchmarks/competition/u8u16/lib/outline.txt +39 -0
  102. package/deps/simdutf/benchmarks/competition/u8u16/lib/spu_simd.h +421 -0
  103. package/deps/simdutf/benchmarks/competition/u8u16/lib/sse_simd.h +836 -0
  104. package/deps/simdutf/benchmarks/competition/u8u16/lib/stdint.h +222 -0
  105. package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_BE.c +4 -0
  106. package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_LE.c +5 -0
  107. package/deps/simdutf/benchmarks/competition/u8u16/proto/u8u16.py +390 -0
  108. package/deps/simdutf/benchmarks/competition/u8u16/src/Makefile +18 -0
  109. package/deps/simdutf/benchmarks/competition/u8u16/src/bytelex.h +448 -0
  110. package/deps/simdutf/benchmarks/competition/u8u16/src/charsets/ASCII_EBCDIC.h +284 -0
  111. package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.c +1975 -0
  112. package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.pdf +0 -0
  113. package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.w +2263 -0
  114. package/deps/simdutf/benchmarks/competition/u8u16/src/multiliteral.h +239 -0
  115. package/deps/simdutf/benchmarks/competition/u8u16/src/u8u16.c +232 -0
  116. package/deps/simdutf/benchmarks/competition/u8u16/src/x8x16.c +194 -0
  117. package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.c +193 -0
  118. package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.h +167 -0
  119. package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.c +288 -0
  120. package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.h +117 -0
  121. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_g4.c +2 -0
  122. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_mmx.c +2 -0
  123. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4.c +3 -0
  124. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4_ideal.c +2 -0
  125. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_spu.c +2 -0
  126. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_ssse3.c +3 -0
  127. package/deps/simdutf/benchmarks/competition/u8u16/x8x16_p4.c +2 -0
  128. package/deps/simdutf/benchmarks/competition/utf8lut/LICENSE +23 -0
  129. package/deps/simdutf/benchmarks/competition/utf8lut/data/test_minimal.txt +44 -0
  130. package/deps/simdutf/benchmarks/competition/utf8lut/readme.md +106 -0
  131. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.cmd +11 -0
  132. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.sh +13 -0
  133. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_corr_tests.sh +13 -0
  134. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_example.sh +13 -0
  135. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_file_conv.sh +14 -0
  136. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_lib.sh +11 -0
  137. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_sample.sh +8 -0
  138. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_corr_tests.cmd +12 -0
  139. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_example.cmd +13 -0
  140. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_file_conv.cmd +14 -0
  141. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_lib.cmd +11 -0
  142. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_sample.cmd +8 -0
  143. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_corr_tests.cmd +11 -0
  144. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_example.cmd +12 -0
  145. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_file_conv.cmd +13 -0
  146. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_lib.cmd +10 -0
  147. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_sample.cmd +9 -0
  148. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/html_table.py +25 -0
  149. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/measure.py +94 -0
  150. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/resize.py +20 -0
  151. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_all.cmd +2 -0
  152. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_interm.cmd +1 -0
  153. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/CustomMemcpy.h +75 -0
  154. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/PerfDefs.h +47 -0
  155. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.cpp +17 -0
  156. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.h +76 -0
  157. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/AllProcessors.cpp +35 -0
  158. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.cpp +117 -0
  159. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.h +210 -0
  160. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferDecoder.h +158 -0
  161. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferEncoder.h +104 -0
  162. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorPlugins.h +334 -0
  163. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorSelector.h +186 -0
  164. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.cpp +140 -0
  165. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.h +42 -0
  166. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderProcess.h +100 -0
  167. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/Dfa.h +57 -0
  168. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.cpp +85 -0
  169. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.h +27 -0
  170. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderProcess.h +126 -0
  171. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/ProcessTrivial.h +108 -0
  172. package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.cpp +139 -0
  173. package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.h +74 -0
  174. package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.cpp +65 -0
  175. package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.h +91 -0
  176. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/CorrectnessTests.cpp +772 -0
  177. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/Example.cpp +12 -0
  178. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/FileConverter.cpp +486 -0
  179. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/iconv_sample.c +162 -0
  180. package/deps/simdutf/benchmarks/competition/utf8lut/src/utf8lut.h +15 -0
  181. package/deps/simdutf/benchmarks/competition/utf8sse4/fromutf8-sse.cpp +292 -0
  182. package/deps/simdutf/benchmarks/competition/utfcpp/LICENSE +23 -0
  183. package/deps/simdutf/benchmarks/competition/utfcpp/README.md +1503 -0
  184. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/checked.h +335 -0
  185. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/core.h +338 -0
  186. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp11.h +103 -0
  187. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp17.h +103 -0
  188. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/unchecked.h +274 -0
  189. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8.h +34 -0
  190. package/deps/simdutf/benchmarks/dataset/README.md +155 -0
  191. package/deps/simdutf/benchmarks/dataset/emoji.txt +204 -0
  192. package/deps/simdutf/benchmarks/dataset/scripts/utf8type.py +40 -0
  193. package/deps/simdutf/benchmarks/dataset/wikipedia_mars/Makefile +80 -0
  194. package/deps/simdutf/benchmarks/dataset/wikipedia_mars/convert_to_utf6.py +20 -0
  195. package/deps/simdutf/benchmarks/find/CMakeLists.txt +6 -0
  196. package/deps/simdutf/benchmarks/find/findbenchmark.cpp +63 -0
  197. package/deps/simdutf/benchmarks/find/findbenchmarker.h +46 -0
  198. package/deps/simdutf/benchmarks/shortbench.cpp +555 -0
  199. package/deps/simdutf/benchmarks/src/CMakeLists.txt +52 -0
  200. package/deps/simdutf/benchmarks/src/apple_arm_events.h +1104 -0
  201. package/deps/simdutf/benchmarks/src/benchmark.cpp +3899 -0
  202. package/deps/simdutf/benchmarks/src/benchmark.h +317 -0
  203. package/deps/simdutf/benchmarks/src/benchmark_base.cpp +144 -0
  204. package/deps/simdutf/benchmarks/src/benchmark_base.h +98 -0
  205. package/deps/simdutf/benchmarks/src/cmdline.cpp +176 -0
  206. package/deps/simdutf/benchmarks/src/cmdline.h +35 -0
  207. package/deps/simdutf/benchmarks/src/event_counter.h +162 -0
  208. package/deps/simdutf/benchmarks/src/linux-perf-events.h +104 -0
  209. package/deps/simdutf/benchmarks/stream.cpp +209 -0
  210. package/deps/simdutf/benchmarks/threaded.cpp +123 -0
  211. package/deps/simdutf/cmake/CPM.cmake +1363 -0
  212. package/deps/simdutf/cmake/JoinPaths.cmake +23 -0
  213. package/deps/simdutf/cmake/add_cpp_test.cmake +68 -0
  214. package/deps/simdutf/cmake/simdutf-config.cmake.in +2 -0
  215. package/deps/simdutf/cmake/simdutf-flags.cmake +26 -0
  216. package/deps/simdutf/cmake/toolchains-ci/riscv64-linux-gnu.cmake +4 -0
  217. package/deps/simdutf/cmake/toolchains-dev/README.md +32 -0
  218. package/deps/simdutf/cmake/toolchains-dev/aarch64.cmake +14 -0
  219. package/deps/simdutf/cmake/toolchains-dev/loongarch64.cmake +22 -0
  220. package/deps/simdutf/cmake/toolchains-dev/powerpc64.cmake +16 -0
  221. package/deps/simdutf/cmake/toolchains-dev/powerpc64le.cmake +16 -0
  222. package/deps/simdutf/cmake/toolchains-dev/riscv64.cmake +16 -0
  223. package/deps/simdutf/cmake/toolchains-dev/rvv-spike.cmake +38 -0
  224. package/deps/simdutf/doc/avx512.png +0 -0
  225. package/deps/simdutf/doc/logo.png +0 -0
  226. package/deps/simdutf/doc/logo.svg +165 -0
  227. package/deps/simdutf/doc/node2023.png +0 -0
  228. package/deps/simdutf/doc/shortinput.md +78 -0
  229. package/deps/simdutf/doc/utf16utf8.png +0 -0
  230. package/deps/simdutf/doc/utf8utf16.png +0 -0
  231. package/deps/simdutf/doc/widelogo.png +0 -0
  232. package/deps/simdutf/doxygen.py +50 -0
  233. package/deps/simdutf/fuzz/.clang-format +9 -0
  234. package/deps/simdutf/fuzz/CMakeLists.txt +45 -0
  235. package/deps/simdutf/fuzz/README.md +168 -0
  236. package/deps/simdutf/fuzz/atomic_base64.cpp +448 -0
  237. package/deps/simdutf/fuzz/base64.cpp +278 -0
  238. package/deps/simdutf/fuzz/build.sh +83 -0
  239. package/deps/simdutf/fuzz/conversion.cpp +669 -0
  240. package/deps/simdutf/fuzz/helpers/.clang-format-ignore +1 -0
  241. package/deps/simdutf/fuzz/helpers/common.h +135 -0
  242. package/deps/simdutf/fuzz/helpers/nameof.hpp +1258 -0
  243. package/deps/simdutf/fuzz/main.cpp +72 -0
  244. package/deps/simdutf/fuzz/minimize_and_cleanse.sh +87 -0
  245. package/deps/simdutf/fuzz/misc.cpp +216 -0
  246. package/deps/simdutf/fuzz/random_fuzz.sh +154 -0
  247. package/deps/simdutf/fuzz/roundtrip.cpp +588 -0
  248. package/deps/simdutf/fuzz/safe_conversion.cpp +104 -0
  249. package/deps/simdutf/include/simdutf/avx512.h +79 -0
  250. package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
  251. package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
  252. package/deps/simdutf/include/simdutf/common_defs.h +186 -0
  253. package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
  254. package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
  255. package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
  256. package/deps/simdutf/include/simdutf/error.h +126 -0
  257. package/deps/simdutf/include/simdutf/implementation.h +7081 -0
  258. package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
  259. package/deps/simdutf/include/simdutf/portability.h +285 -0
  260. package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
  261. package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
  262. package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
  263. package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
  264. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
  265. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
  266. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
  267. package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
  268. package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
  269. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
  270. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
  271. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
  272. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
  273. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
  274. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
  275. package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
  276. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
  277. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
  278. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
  279. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
  280. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
  281. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
  282. package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
  283. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
  284. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
  285. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
  286. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
  287. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
  288. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
  289. package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
  290. package/deps/simdutf/include/simdutf.h +26 -0
  291. package/deps/simdutf/include/simdutf_c.h +342 -0
  292. package/deps/simdutf/riscv/Dockerfile +16 -0
  293. package/deps/simdutf/riscv/README.md +24 -0
  294. package/deps/simdutf/riscv/remove-docker-station +8 -0
  295. package/deps/simdutf/riscv/run-docker-station +31 -0
  296. package/deps/simdutf/scripts/.flake8 +2 -0
  297. package/deps/simdutf/scripts/Makefile +2 -0
  298. package/deps/simdutf/scripts/README_ADD_FUNCTION.md +49 -0
  299. package/deps/simdutf/scripts/add_function.py +330 -0
  300. package/deps/simdutf/scripts/amalgamation_tests.py +156 -0
  301. package/deps/simdutf/scripts/base64/Makefile +2 -0
  302. package/deps/simdutf/scripts/base64/README.md +2 -0
  303. package/deps/simdutf/scripts/base64/avx512.py +76 -0
  304. package/deps/simdutf/scripts/base64/neon_decode.py +143 -0
  305. package/deps/simdutf/scripts/base64/neon_generate_lut.py +101 -0
  306. package/deps/simdutf/scripts/base64/sse.py +252 -0
  307. package/deps/simdutf/scripts/base64/sseregular.py +160 -0
  308. package/deps/simdutf/scripts/base64/sseurl.py +283 -0
  309. package/deps/simdutf/scripts/base64/table.py +59 -0
  310. package/deps/simdutf/scripts/base64bench_print.py +145 -0
  311. package/deps/simdutf/scripts/benchmark-all.py +119 -0
  312. package/deps/simdutf/scripts/benchmark_print.py +324 -0
  313. package/deps/simdutf/scripts/check_feature_macros.py +156 -0
  314. package/deps/simdutf/scripts/check_typos.sh +13 -0
  315. package/deps/simdutf/scripts/clang_format.sh +35 -0
  316. package/deps/simdutf/scripts/clang_format_docker.sh +38 -0
  317. package/deps/simdutf/scripts/common.py +24 -0
  318. package/deps/simdutf/scripts/compilation_benchmark.py +55 -0
  319. package/deps/simdutf/scripts/compile_many_variations.sh +64 -0
  320. package/deps/simdutf/scripts/create_latex_table.py +62 -0
  321. package/deps/simdutf/scripts/docker/Dockerfile +14 -0
  322. package/deps/simdutf/scripts/docker/Makefile +9 -0
  323. package/deps/simdutf/scripts/docker/README.md +30 -0
  324. package/deps/simdutf/scripts/docker/llvm.gpg +0 -0
  325. package/deps/simdutf/scripts/ppc64_convert_utf16_to_utf8.py +155 -0
  326. package/deps/simdutf/scripts/prepare_doxygen.sh +21 -0
  327. package/deps/simdutf/scripts/release.py +197 -0
  328. package/deps/simdutf/scripts/shortinputplots.py +97 -0
  329. package/deps/simdutf/scripts/sse_convert_utf16_to_utf8.py +422 -0
  330. package/deps/simdutf/scripts/sse_convert_utf32_to_utf16.py +105 -0
  331. package/deps/simdutf/scripts/sse_utf8_utf16_decode.py +186 -0
  332. package/deps/simdutf/scripts/sse_validate_utf16le_proof.py +137 -0
  333. package/deps/simdutf/scripts/sse_validate_utf16le_testcases.py +129 -0
  334. package/deps/simdutf/scripts/table.py +207 -0
  335. package/deps/simdutf/scripts/tests/new.txt +33 -0
  336. package/deps/simdutf/scripts/tests/old.txt +33 -0
  337. package/deps/simdutf/scripts/tests/results.txt +272 -0
  338. package/deps/simdutf/simdutf.pc.in +11 -0
  339. package/deps/simdutf/singleheader/.flake8 +2 -0
  340. package/deps/simdutf/singleheader/CMakeLists.txt +64 -0
  341. package/deps/simdutf/singleheader/README-dev.md +81 -0
  342. package/deps/simdutf/singleheader/README.md +19 -0
  343. package/deps/simdutf/singleheader/amalgamate.py +513 -0
  344. package/deps/simdutf/singleheader/amalgamation_demo.c +59 -0
  345. package/deps/simdutf/singleheader/amalgamation_demo.cpp +54 -0
  346. package/deps/simdutf/singleheader/test-features.py +262 -0
  347. package/deps/simdutf/src/CMakeLists.txt +78 -0
  348. package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
  349. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
  350. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
  351. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
  352. package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
  353. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
  354. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
  355. package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
  356. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
  357. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
  358. package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
  359. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
  360. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
  361. package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
  362. package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
  363. package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
  364. package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
  365. package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
  366. package/deps/simdutf/src/encoding_types.cpp +67 -0
  367. package/deps/simdutf/src/error.cpp +3 -0
  368. package/deps/simdutf/src/fallback/implementation.cpp +589 -0
  369. package/deps/simdutf/src/generic/ascii_validation.h +50 -0
  370. package/deps/simdutf/src/generic/base64.h +233 -0
  371. package/deps/simdutf/src/generic/base64lengths.h +63 -0
  372. package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
  373. package/deps/simdutf/src/generic/find.h +75 -0
  374. package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
  375. package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
  376. package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
  377. package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
  378. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
  379. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
  380. package/deps/simdutf/src/generic/utf16.h +73 -0
  381. package/deps/simdutf/src/generic/utf32.h +136 -0
  382. package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
  383. package/deps/simdutf/src/generic/utf8.h +92 -0
  384. package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
  385. package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
  386. package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
  387. package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
  388. package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
  389. package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
  390. package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
  391. package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
  392. package/deps/simdutf/src/generic/validate_utf16.h +164 -0
  393. package/deps/simdutf/src/generic/validate_utf32.h +99 -0
  394. package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
  395. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
  396. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
  397. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
  398. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
  399. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
  400. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
  401. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
  402. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
  403. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
  404. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
  405. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
  406. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
  407. package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
  408. package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
  409. package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
  410. package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
  411. package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
  412. package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
  413. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
  414. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
  415. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
  416. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
  417. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
  418. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
  419. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
  420. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
  421. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
  422. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
  423. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
  424. package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
  425. package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
  426. package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
  427. package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
  428. package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
  429. package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
  430. package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
  431. package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
  432. package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
  433. package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
  434. package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
  435. package/deps/simdutf/src/implementation.cpp +2526 -0
  436. package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
  437. package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
  438. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
  439. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
  440. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
  441. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
  442. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
  443. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
  444. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
  445. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
  446. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
  447. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
  448. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
  449. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
  450. package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
  451. package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
  452. package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
  453. package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
  454. package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
  455. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
  456. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
  457. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
  458. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
  459. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
  460. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
  461. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
  462. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
  463. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
  464. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
  465. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
  466. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
  467. package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
  468. package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
  469. package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
  470. package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
  471. package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
  472. package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
  473. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
  474. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
  475. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
  476. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
  477. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
  478. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
  479. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
  480. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
  481. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
  482. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
  483. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
  484. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
  485. package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
  486. package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
  487. package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
  488. package/deps/simdutf/src/ppc64/templates.cpp +91 -0
  489. package/deps/simdutf/src/rvv/implementation.cpp +138 -0
  490. package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
  491. package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
  492. package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
  493. package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
  494. package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
  495. package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
  496. package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
  497. package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
  498. package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
  499. package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
  500. package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
  501. package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
  502. package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
  503. package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
  504. package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
  505. package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
  506. package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
  507. package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
  508. package/deps/simdutf/src/simdutf/arm64.h +43 -0
  509. package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
  510. package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
  511. package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
  512. package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
  513. package/deps/simdutf/src/simdutf/fallback.h +42 -0
  514. package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
  515. package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
  516. package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
  517. package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
  518. package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
  519. package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
  520. package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
  521. package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
  522. package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
  523. package/deps/simdutf/src/simdutf/haswell.h +63 -0
  524. package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
  525. package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
  526. package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
  527. package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
  528. package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
  529. package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
  530. package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
  531. package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
  532. package/deps/simdutf/src/simdutf/icelake.h +81 -0
  533. package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
  534. package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
  535. package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
  536. package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
  537. package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
  538. package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
  539. package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
  540. package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
  541. package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
  542. package/deps/simdutf/src/simdutf/lasx.h +49 -0
  543. package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
  544. package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
  545. package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
  546. package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
  547. package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
  548. package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
  549. package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
  550. package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
  551. package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
  552. package/deps/simdutf/src/simdutf/lsx.h +52 -0
  553. package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
  554. package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
  555. package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
  556. package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
  557. package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
  558. package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
  559. package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
  560. package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
  561. package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
  562. package/deps/simdutf/src/simdutf/ppc64.h +40 -0
  563. package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
  564. package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
  565. package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
  566. package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
  567. package/deps/simdutf/src/simdutf/rvv.h +41 -0
  568. package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
  569. package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
  570. package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
  571. package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
  572. package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
  573. package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
  574. package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
  575. package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
  576. package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
  577. package/deps/simdutf/src/simdutf/westmere.h +59 -0
  578. package/deps/simdutf/src/simdutf.cpp +152 -0
  579. package/deps/simdutf/src/simdutf_c.cpp +525 -0
  580. package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
  581. package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
  582. package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
  583. package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
  584. package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
  585. package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
  586. package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
  587. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
  588. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
  589. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
  590. package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
  591. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
  592. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
  593. package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
  594. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
  595. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
  596. package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
  597. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
  598. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
  599. package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
  600. package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
  601. package/deps/simdutf/tests/CMakeLists.txt +483 -0
  602. package/deps/simdutf/tests/atomic_base64_tests.cpp +2845 -0
  603. package/deps/simdutf/tests/base64_tests.cpp +3617 -0
  604. package/deps/simdutf/tests/basic_fuzzer.cpp +805 -0
  605. package/deps/simdutf/tests/bele_tests.cpp +182 -0
  606. package/deps/simdutf/tests/constexpr_base64_tests.cpp +387 -0
  607. package/deps/simdutf/tests/convert_latin1_to_utf16be_tests.cpp +52 -0
  608. package/deps/simdutf/tests/convert_latin1_to_utf16le_tests.cpp +80 -0
  609. package/deps/simdutf/tests/convert_latin1_to_utf32_tests.cpp +66 -0
  610. package/deps/simdutf/tests/convert_latin1_to_utf8_tests.cpp +120 -0
  611. package/deps/simdutf/tests/convert_utf16_to_utf8_safe_tests.cpp +203 -0
  612. package/deps/simdutf/tests/convert_utf16_to_utf8_with_replacement_tests.cpp +276 -0
  613. package/deps/simdutf/tests/convert_utf16be_to_latin1_tests.cpp +109 -0
  614. package/deps/simdutf/tests/convert_utf16be_to_latin1_tests_with_errors.cpp +136 -0
  615. package/deps/simdutf/tests/convert_utf16be_to_utf32_tests.cpp +193 -0
  616. package/deps/simdutf/tests/convert_utf16be_to_utf32_with_errors_tests.cpp +381 -0
  617. package/deps/simdutf/tests/convert_utf16be_to_utf8_tests.cpp +259 -0
  618. package/deps/simdutf/tests/convert_utf16be_to_utf8_with_errors_tests.cpp +266 -0
  619. package/deps/simdutf/tests/convert_utf16le_to_latin1_tests.cpp +148 -0
  620. package/deps/simdutf/tests/convert_utf16le_to_latin1_tests_with_errors.cpp +176 -0
  621. package/deps/simdutf/tests/convert_utf16le_to_utf32_tests.cpp +213 -0
  622. package/deps/simdutf/tests/convert_utf16le_to_utf32_with_errors_tests.cpp +318 -0
  623. package/deps/simdutf/tests/convert_utf16le_to_utf8_tests.cpp +343 -0
  624. package/deps/simdutf/tests/convert_utf16le_to_utf8_with_errors_tests.cpp +271 -0
  625. package/deps/simdutf/tests/convert_utf32_to_latin1_tests.cpp +111 -0
  626. package/deps/simdutf/tests/convert_utf32_to_latin1_with_errors_tests.cpp +96 -0
  627. package/deps/simdutf/tests/convert_utf32_to_utf16be_tests.cpp +148 -0
  628. package/deps/simdutf/tests/convert_utf32_to_utf16be_with_errors_tests.cpp +192 -0
  629. package/deps/simdutf/tests/convert_utf32_to_utf16le_tests.cpp +166 -0
  630. package/deps/simdutf/tests/convert_utf32_to_utf16le_with_errors_tests.cpp +215 -0
  631. package/deps/simdutf/tests/convert_utf32_to_utf8_tests.cpp +181 -0
  632. package/deps/simdutf/tests/convert_utf32_to_utf8_with_errors_tests.cpp +261 -0
  633. package/deps/simdutf/tests/convert_utf8_to_latin1_tests.cpp +516 -0
  634. package/deps/simdutf/tests/convert_utf8_to_latin1_with_errors_tests.cpp +579 -0
  635. package/deps/simdutf/tests/convert_utf8_to_utf16be_tests.cpp +412 -0
  636. package/deps/simdutf/tests/convert_utf8_to_utf16be_with_errors_tests.cpp +480 -0
  637. package/deps/simdutf/tests/convert_utf8_to_utf16le_tests.cpp +671 -0
  638. package/deps/simdutf/tests/convert_utf8_to_utf16le_with_errors_tests.cpp +455 -0
  639. package/deps/simdutf/tests/convert_utf8_to_utf32_tests.cpp +1204 -0
  640. package/deps/simdutf/tests/convert_utf8_to_utf32_with_errors_tests.cpp +337 -0
  641. package/deps/simdutf/tests/convert_valid_utf16be_to_latin1_tests.cpp +37 -0
  642. package/deps/simdutf/tests/convert_valid_utf16be_to_utf32_tests.cpp +97 -0
  643. package/deps/simdutf/tests/convert_valid_utf16be_to_utf8_tests.cpp +126 -0
  644. package/deps/simdutf/tests/convert_valid_utf16le_to_latin1_tests.cpp +71 -0
  645. package/deps/simdutf/tests/convert_valid_utf16le_to_utf32_tests.cpp +122 -0
  646. package/deps/simdutf/tests/convert_valid_utf16le_to_utf8_tests.cpp +244 -0
  647. package/deps/simdutf/tests/convert_valid_utf32_to_latin1_tests.cpp +49 -0
  648. package/deps/simdutf/tests/convert_valid_utf32_to_utf16be_tests.cpp +92 -0
  649. package/deps/simdutf/tests/convert_valid_utf32_to_utf16le_tests.cpp +114 -0
  650. package/deps/simdutf/tests/convert_valid_utf32_to_utf8_tests.cpp +109 -0
  651. package/deps/simdutf/tests/convert_valid_utf8_to_latin1_tests.cpp +84 -0
  652. package/deps/simdutf/tests/convert_valid_utf8_to_utf16be_tests.cpp +124 -0
  653. package/deps/simdutf/tests/convert_valid_utf8_to_utf16le_tests.cpp +221 -0
  654. package/deps/simdutf/tests/convert_valid_utf8_to_utf32_tests.cpp +155 -0
  655. package/deps/simdutf/tests/count_utf16be.cpp +64 -0
  656. package/deps/simdutf/tests/count_utf16le.cpp +61 -0
  657. package/deps/simdutf/tests/count_utf8.cpp +87 -0
  658. package/deps/simdutf/tests/detect_encodings_tests.cpp +312 -0
  659. package/deps/simdutf/tests/embed/valid_utf8.txt +1 -0
  660. package/deps/simdutf/tests/embed_tests.cpp +22 -0
  661. package/deps/simdutf/tests/find_tests.cpp +77 -0
  662. package/deps/simdutf/tests/fixed_string_tests.cpp +153 -0
  663. package/deps/simdutf/tests/helpers/CMakeLists.txt +25 -0
  664. package/deps/simdutf/tests/helpers/compiletime_conversions.h +222 -0
  665. package/deps/simdutf/tests/helpers/fixed_string.h +267 -0
  666. package/deps/simdutf/tests/helpers/random_int.cpp +30 -0
  667. package/deps/simdutf/tests/helpers/random_int.h +39 -0
  668. package/deps/simdutf/tests/helpers/random_utf16.cpp +123 -0
  669. package/deps/simdutf/tests/helpers/random_utf16.h +52 -0
  670. package/deps/simdutf/tests/helpers/random_utf32.cpp +41 -0
  671. package/deps/simdutf/tests/helpers/random_utf32.h +40 -0
  672. package/deps/simdutf/tests/helpers/random_utf8.cpp +93 -0
  673. package/deps/simdutf/tests/helpers/random_utf8.h +36 -0
  674. package/deps/simdutf/tests/helpers/test.cpp +231 -0
  675. package/deps/simdutf/tests/helpers/test.h +193 -0
  676. package/deps/simdutf/tests/helpers/transcode_test_base.cpp +1257 -0
  677. package/deps/simdutf/tests/helpers/transcode_test_base.h +683 -0
  678. package/deps/simdutf/tests/helpers/utf16.h +27 -0
  679. package/deps/simdutf/tests/installation_tests/find/CMakeLists.txt +43 -0
  680. package/deps/simdutf/tests/installation_tests/from_fetch/CMakeLists.txt +47 -0
  681. package/deps/simdutf/tests/internal_tests.cpp +27 -0
  682. package/deps/simdutf/tests/null_safety_tests.cpp +94 -0
  683. package/deps/simdutf/tests/random_fuzzer.cpp +779 -0
  684. package/deps/simdutf/tests/readme_tests.cpp +274 -0
  685. package/deps/simdutf/tests/reference/CMakeLists.txt +23 -0
  686. package/deps/simdutf/tests/reference/decode_utf16.h +81 -0
  687. package/deps/simdutf/tests/reference/decode_utf32.h +47 -0
  688. package/deps/simdutf/tests/reference/encode_latin1.cpp +1 -0
  689. package/deps/simdutf/tests/reference/encode_latin1.h +32 -0
  690. package/deps/simdutf/tests/reference/encode_utf16.cpp +49 -0
  691. package/deps/simdutf/tests/reference/encode_utf16.h +20 -0
  692. package/deps/simdutf/tests/reference/encode_utf32.cpp +1 -0
  693. package/deps/simdutf/tests/reference/encode_utf32.h +36 -0
  694. package/deps/simdutf/tests/reference/encode_utf8.cpp +1 -0
  695. package/deps/simdutf/tests/reference/encode_utf8.h +40 -0
  696. package/deps/simdutf/tests/reference/validate_utf16.cpp +60 -0
  697. package/deps/simdutf/tests/reference/validate_utf16.h +14 -0
  698. package/deps/simdutf/tests/reference/validate_utf16_to_latin1.cpp +35 -0
  699. package/deps/simdutf/tests/reference/validate_utf16_to_latin1.h +13 -0
  700. package/deps/simdutf/tests/reference/validate_utf32.cpp +27 -0
  701. package/deps/simdutf/tests/reference/validate_utf32.h +12 -0
  702. package/deps/simdutf/tests/reference/validate_utf32_to_latin1.cpp +27 -0
  703. package/deps/simdutf/tests/reference/validate_utf32_to_latin1.h +12 -0
  704. package/deps/simdutf/tests/reference/validate_utf8.cpp +82 -0
  705. package/deps/simdutf/tests/reference/validate_utf8.h +11 -0
  706. package/deps/simdutf/tests/reference/validate_utf8_to_latin1.cpp +43 -0
  707. package/deps/simdutf/tests/reference/validate_utf8_to_latin1.h +12 -0
  708. package/deps/simdutf/tests/select_implementation.cpp +43 -0
  709. package/deps/simdutf/tests/simdutf_c_tests.cpp +244 -0
  710. package/deps/simdutf/tests/span_tests.cpp +401 -0
  711. package/deps/simdutf/tests/special_tests.cpp +559 -0
  712. package/deps/simdutf/tests/straight_c_test.c +187 -0
  713. package/deps/simdutf/tests/text_encoding_tests.cpp +77 -0
  714. package/deps/simdutf/tests/to_well_formed_utf16_tests.cpp +377 -0
  715. package/deps/simdutf/tests/utf8_length_from_utf16_tests.cpp +202 -0
  716. package/deps/simdutf/tests/validate_ascii_basic_tests.cpp +165 -0
  717. package/deps/simdutf/tests/validate_ascii_with_errors_tests.cpp +77 -0
  718. package/deps/simdutf/tests/validate_utf16be_basic_tests.cpp +175 -0
  719. package/deps/simdutf/tests/validate_utf16be_with_errors_tests.cpp +188 -0
  720. package/deps/simdutf/tests/validate_utf16le_basic_tests.cpp +268 -0
  721. package/deps/simdutf/tests/validate_utf16le_with_errors_tests.cpp +274 -0
  722. package/deps/simdutf/tests/validate_utf32_basic_tests.cpp +92 -0
  723. package/deps/simdutf/tests/validate_utf32_with_errors_tests.cpp +114 -0
  724. package/deps/simdutf/tests/validate_utf8_basic_tests.cpp +178 -0
  725. package/deps/simdutf/tests/validate_utf8_brute_force_tests.cpp +88 -0
  726. package/deps/simdutf/tests/validate_utf8_puzzler_tests.cpp +33 -0
  727. package/deps/simdutf/tests/validate_utf8_with_errors_tests.cpp +228 -0
  728. package/deps/simdutf/tools/CMakeLists.txt +85 -0
  729. package/deps/simdutf/tools/fastbase64.cpp +250 -0
  730. package/deps/simdutf/tools/sutf.cpp +556 -0
  731. package/deps/simdutf/tools/sutf.h +40 -0
  732. package/lib/commonjs/blake3.js +2 -1
  733. package/lib/commonjs/blake3.js.map +1 -1
  734. package/lib/commonjs/diffie-hellman.js +5 -4
  735. package/lib/commonjs/diffie-hellman.js.map +1 -1
  736. package/lib/commonjs/ecdh.js +5 -4
  737. package/lib/commonjs/ecdh.js.map +1 -1
  738. package/lib/module/blake3.js +2 -1
  739. package/lib/module/blake3.js.map +1 -1
  740. package/lib/module/diffie-hellman.js +5 -4
  741. package/lib/module/diffie-hellman.js.map +1 -1
  742. package/lib/module/ecdh.js +5 -4
  743. package/lib/module/ecdh.js.map +1 -1
  744. package/lib/tsconfig.tsbuildinfo +1 -1
  745. package/lib/typescript/blake3.d.ts.map +1 -1
  746. package/lib/typescript/diffie-hellman.d.ts.map +1 -1
  747. package/lib/typescript/ecdh.d.ts.map +1 -1
  748. package/package.json +2 -2
  749. package/src/blake3.ts +2 -1
  750. package/src/diffie-hellman.ts +5 -7
  751. package/src/ecdh.ts +5 -8
@@ -0,0 +1,1257 @@
1
+ #include "transcode_test_base.h"
2
+ #include "simdutf.h"
3
+
4
+ #ifndef SIMDUTF_IS_BIG_ENDIAN
5
+ #error "SIMDUTF_IS_BIG_ENDIAN should be defined."
6
+ #endif
7
+
8
+ #include <stdexcept>
9
+ #include <string>
10
+ #include <vector>
11
+ #include <array>
12
+
13
+ #include <tests/reference/encode_utf8.h>
14
+ #include <tests/reference/encode_utf16.h>
15
+ #include <tests/reference/encode_utf32.h>
16
+ #include <tests/reference/encode_latin1.h>
17
+ #include <tests/reference/decode_utf16.h>
18
+ #include <tests/reference/decode_utf32.h>
19
+ #include <tests/reference/validate_utf8.h>
20
+ #include <tests/reference/validate_utf16.h>
21
+ #include <tests/reference/validate_utf32.h>
22
+ #include <tests/reference/validate_utf8_to_latin1.h>
23
+ #include <tests/reference/validate_utf16_to_latin1.h>
24
+ #include <tests/reference/validate_utf32_to_latin1.h>
25
+
26
+ namespace simdutf {
27
+ namespace tests {
28
+ namespace helpers {
29
+
30
+ // C++11 does not have mismatch.
31
+ template <class InputIt1, class InputIt2>
32
+ std::pair<InputIt1, InputIt2> our_mismatch(InputIt1 first1, InputIt1 last1,
33
+ InputIt2 first2, InputIt2 last2) {
34
+ while (first1 != last1 && first2 != last2 && *first1 == *first2) {
35
+ ++first1, ++first2;
36
+ }
37
+ return std::make_pair(first1, first2);
38
+ }
39
+
40
+ void transcode_test_base::encode_utf8(uint32_t codepoint,
41
+ std::vector<char> &target) {
42
+ ::simdutf::tests::reference::utf8::encode(
43
+ codepoint, [&target](uint8_t byte) { target.push_back(byte); });
44
+ }
45
+
46
+ void transcode_test_base::encode_utf16(uint32_t codepoint,
47
+ std::vector<char16_t> &target) {
48
+ char16_t W1;
49
+ char16_t W2;
50
+ switch (::simdutf::tests::reference::utf16::encode(codepoint, W1, W2)) {
51
+ case 1:
52
+ if (!match_system(utf16_endianness)) {
53
+ W1 = char16_t((uint16_t(W1) << 8) | (uint16_t(W1) >> 8));
54
+ }
55
+
56
+ target.push_back(W1);
57
+ break;
58
+
59
+ case 2:
60
+ if (!match_system(utf16_endianness)) {
61
+ W1 = char16_t((uint16_t(W1) << 8) | (uint16_t(W1) >> 8));
62
+ W2 = char16_t((uint16_t(W2) << 8) | (uint16_t(W2) >> 8));
63
+ }
64
+ target.push_back(W1);
65
+ target.push_back(W2);
66
+ break;
67
+
68
+ default:
69
+ throw std::invalid_argument(
70
+ std::string("Value can't be encoded as UTF-16 code-point : ") +
71
+ std::to_string(codepoint));
72
+ }
73
+ }
74
+
75
+ void transcode_test_base::encode_latin1(uint32_t codepoint,
76
+ std::vector<char> &target) {
77
+ ::simdutf::tests::reference::latin1::encode(
78
+ codepoint, [&target](uint8_t byte) { target.push_back(byte); });
79
+ }
80
+
81
+ void transcode_test_base::encode_utf32(uint32_t codepoint,
82
+ std::vector<char32_t> &target) {
83
+ ::simdutf::tests::reference::utf32::encode(
84
+ codepoint, [&target](uint32_t word) { target.push_back(word); });
85
+ }
86
+
87
+ /**
88
+ * transcode_latin1_to_utf8_test_base can be used to test Latin1 => UTF8
89
+ * transcoding.
90
+ */
91
+ transcode_latin1_to_utf8_test_base::transcode_latin1_to_utf8_test_base(
92
+ GenerateCodepoint generate, size_t input_size) {
93
+ while (input_latin1.size() < input_size) {
94
+ const uint32_t codepoint = generate();
95
+ prepare_input(codepoint);
96
+ }
97
+ output_utf8.resize(reference_output_utf8.size() + output_size_margin);
98
+ }
99
+
100
+ void transcode_latin1_to_utf8_test_base::prepare_input(uint32_t codepoint) {
101
+ encode_latin1(codepoint, input_latin1);
102
+ encode_utf8(codepoint, reference_output_utf8);
103
+ }
104
+
105
+ bool transcode_latin1_to_utf8_test_base::is_input_valid() const {
106
+ return true; //
107
+ }
108
+
109
+ bool transcode_latin1_to_utf8_test_base::validate(size_t saved_chars) const {
110
+ if (!is_input_valid()) {
111
+ if (saved_chars != 0) {
112
+ printf("input Latin1 string is not valid, but conversion routine "
113
+ "returned %zu, indicating a valid input\n",
114
+ saved_chars);
115
+ return false;
116
+ }
117
+ }
118
+ if (saved_chars == 0) {
119
+ if (is_input_valid()) {
120
+ printf("input Latin1 string is valid, but conversion routine returned 0, "
121
+ "indicating input error");
122
+ return false;
123
+ }
124
+ return true;
125
+ }
126
+
127
+ auto dump = [saved_chars](const char *title, const std::vector<char> &array) {
128
+ printf("%s", title);
129
+ for (size_t i = 0; i < saved_chars; i++) {
130
+ printf(" %02x", (uint8_t)array[i]);
131
+ }
132
+ putchar('\n');
133
+ };
134
+
135
+ if (saved_chars != reference_output_utf8.size()) {
136
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
137
+ "be %zu\n",
138
+ size_t(saved_chars), size_t(reference_output_utf8.size()));
139
+ dump("expected :", reference_output_utf8);
140
+ dump("actual :", output_utf8);
141
+ return false;
142
+ }
143
+ // Note that, in general, output_utf8.size() will not matched saved_chars.
144
+
145
+ // At this point, we know that the lengths are the same so std::mismatch is
146
+ // enough to tell us whether the strings are identical.
147
+ auto it =
148
+ our_mismatch(output_utf8.begin(), output_utf8.begin() + saved_chars,
149
+ reference_output_utf8.begin(), reference_output_utf8.end());
150
+ if (it.first != output_utf8.begin() + saved_chars) {
151
+ printf("mismatched output at %zu: actual value 0x%02x, expected 0x%02x\n",
152
+ size_t(std::distance(output_utf8.begin(), it.first)),
153
+ uint8_t(*it.first), uint8_t(*it.second));
154
+
155
+ dump("expected :", reference_output_utf8);
156
+ dump("actual :", output_utf8);
157
+ for (size_t i = 0; i < reference_output_utf8.size(); i++) {
158
+ if (reference_output_utf8[i] != output_utf8[i]) {
159
+ printf(" ==> ");
160
+ }
161
+ printf("at %zu expected 0x%04x 0x%04x\n ", i,
162
+ uint8_t(reference_output_utf8[i]), uint8_t(output_utf8[i]));
163
+ }
164
+ return false;
165
+ }
166
+
167
+ return true;
168
+ }
169
+
170
+ /**
171
+ * transcode_latin1_to_utf16_test_base can be used to test Latin1 => utf16
172
+ * transcoding.
173
+ */
174
+ transcode_latin1_to_utf16_test_base::transcode_latin1_to_utf16_test_base(
175
+ endianness utf16_endianness, GenerateCodepoint generate, size_t input_size)
176
+ : transcode_test_base{utf16_endianness} {
177
+ while (input_latin1.size() < input_size) {
178
+ const uint32_t codepoint = generate();
179
+ prepare_input(codepoint);
180
+ }
181
+
182
+ output_utf16.resize(reference_output_utf16.size() + output_size_margin);
183
+ }
184
+
185
+ void transcode_latin1_to_utf16_test_base::prepare_input(uint32_t codepoint) {
186
+ encode_latin1(codepoint, input_latin1);
187
+
188
+ encode_utf16(codepoint, reference_output_utf16);
189
+ }
190
+
191
+ bool transcode_latin1_to_utf16_test_base::is_input_valid() const {
192
+ return true;
193
+ }
194
+
195
+ bool transcode_latin1_to_utf16_test_base::validate(size_t saved_chars) const {
196
+ if (!is_input_valid()) {
197
+ if (saved_chars != 0) {
198
+ printf("input Latin1 string is not valid, but conversion routine "
199
+ "returned %zu, indicating a valid input\n",
200
+ saved_chars);
201
+ return false;
202
+ }
203
+ }
204
+ if (saved_chars == 0) {
205
+ if (is_input_valid()) {
206
+ printf("input Latin1 string is valid, but conversion routine returned 0, "
207
+ "indicating input error");
208
+ return false;
209
+ }
210
+
211
+ return true;
212
+ }
213
+
214
+ auto dump = [saved_chars](const char *title,
215
+ const std::vector<char16_t> &array) {
216
+ printf("%s", title);
217
+ for (size_t i = 0; i < saved_chars; i++) {
218
+ printf(
219
+ " %04x",
220
+ (uint16_t)array[i]); // Use %04x to print 16-bit hexadecimal numbers
221
+ }
222
+ putchar('\n');
223
+ };
224
+
225
+ if (saved_chars != reference_output_utf16.size()) {
226
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
227
+ "be %zu\n",
228
+ size_t(saved_chars), size_t(reference_output_utf16.size()));
229
+ dump("expected :", reference_output_utf16);
230
+ dump("actual :", output_utf16);
231
+ return false;
232
+ }
233
+ // Note that, in general, output_utf16.size() will not matched saved_chars.
234
+
235
+ // At this point, we know that the lengths are the same so std::mismatch is
236
+ // enough to tell us whether the strings are identical.
237
+ auto it = our_mismatch(
238
+ output_utf16.begin(), output_utf16.begin() + saved_chars,
239
+ reference_output_utf16.begin(), reference_output_utf16.end());
240
+ if (it.first != output_utf16.begin() + saved_chars) {
241
+ printf("mismatched output at %zu: actual value 0x%02x, expected 0x%02x\n",
242
+ size_t(std::distance(output_utf16.begin(), it.first)),
243
+ uint16_t(*it.first), uint16_t(*it.second));
244
+ dump("expected :", reference_output_utf16);
245
+ dump("actual :", output_utf16);
246
+ for (size_t i = 0; i < reference_output_utf16.size(); i++) {
247
+ if (reference_output_utf16[i] != output_utf16[i]) {
248
+ printf(" ==> ");
249
+ }
250
+ printf("at %zu expected 0x%04x 0x%04x\n ", i,
251
+ uint16_t(reference_output_utf16[i]), uint16_t(output_utf16[i]));
252
+ }
253
+ return false;
254
+ }
255
+ return true;
256
+ }
257
+
258
+ /**
259
+ * transcode_latin1_to_utf32_test_base can be used to test UTF-32 => UTF-16LE
260
+ * transcoding.
261
+ */
262
+ transcode_latin1_to_utf32_test_base::transcode_latin1_to_utf32_test_base(
263
+ GenerateCodepoint generate, size_t input_size) {
264
+ while (input_latin1.size() < input_size) {
265
+ const uint32_t codepoint = generate();
266
+ prepare_input(codepoint);
267
+ }
268
+ output_utf32.resize(reference_output_utf32.size() + output_size_margin);
269
+ }
270
+
271
+ void transcode_latin1_to_utf32_test_base::prepare_input(uint32_t codepoint) {
272
+ encode_latin1(codepoint, input_latin1);
273
+ encode_utf32(codepoint, reference_output_utf32);
274
+ }
275
+
276
+ bool transcode_latin1_to_utf32_test_base::is_input_valid() const {
277
+ return true;
278
+ }
279
+
280
+ bool transcode_latin1_to_utf32_test_base::validate(size_t saved_chars) const {
281
+ if (!is_input_valid()) {
282
+ if (saved_chars != 0) {
283
+ printf("input Latin1 string is not valid, but conversion routine "
284
+ "returned %zu, indicating a valid input\n",
285
+ saved_chars);
286
+ return false;
287
+ }
288
+ }
289
+ if (saved_chars == 0) {
290
+ if (is_input_valid()) {
291
+ printf("input Latin1 string is valid, but conversion routine returned 0, "
292
+ "indicating input error");
293
+ return false;
294
+ }
295
+ return true;
296
+ }
297
+
298
+ auto dump = [saved_chars](const char *title,
299
+ const std::vector<char32_t> &array) {
300
+ printf("%s", title);
301
+ for (size_t i = 0; i < saved_chars; i++) {
302
+ printf(" %02x", (unsigned int)array[i]);
303
+ }
304
+ putchar('\n');
305
+ };
306
+
307
+ if (saved_chars != reference_output_utf32.size()) {
308
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
309
+ "be %zu\n",
310
+ size_t(saved_chars), size_t(reference_output_utf32.size()));
311
+ dump("expected :", reference_output_utf32);
312
+ dump("actual :", output_utf32);
313
+ return false;
314
+ }
315
+ // Note that, in general, output_utf32.size() will not matched saved_chars.
316
+
317
+ // At this point, we know that the lengths are the same so std::mismatch is
318
+ // enough to tell us whether the strings are identical.
319
+ auto it = our_mismatch(
320
+ output_utf32.begin(), output_utf32.begin() + saved_chars,
321
+ reference_output_utf32.begin(), reference_output_utf32.end());
322
+ if (it.first != output_utf32.begin() + saved_chars) {
323
+ printf("mismatched output at %zu: actual value 0x%02x, expected 0x%02x\n",
324
+ size_t(std::distance(output_utf32.begin(), it.first)),
325
+ uint8_t(*it.first), uint8_t(*it.second));
326
+
327
+ dump("expected :", reference_output_utf32);
328
+ dump("actual :", output_utf32);
329
+ for (size_t i = 0; i < reference_output_utf32.size(); i++) {
330
+ if (reference_output_utf32[i] != output_utf32[i]) {
331
+ printf(" ==> ");
332
+ }
333
+ printf("at %zu expected 0x%04x 0x%04x\n ", i,
334
+ uint8_t(reference_output_utf32[i]), uint8_t(output_utf32[i]));
335
+ }
336
+ return false;
337
+ }
338
+ return true;
339
+ }
340
+
341
+ /**
342
+ * transcode_utf8_to_latin1_test_base can be used to test UTF-32 => UTF-16LE
343
+ * transcoding.
344
+ */
345
+ transcode_utf8_to_latin1_test_base::transcode_utf8_to_latin1_test_base(
346
+ GenerateCodepoint generate, size_t input_size) {
347
+ while (input_utf8.size() < input_size) {
348
+ const uint32_t codepoint = generate();
349
+ prepare_input(codepoint);
350
+ }
351
+ output_latin1.resize(reference_output_latin1.size() + output_size_margin);
352
+ }
353
+
354
+ void transcode_utf8_to_latin1_test_base::prepare_input(uint32_t codepoint) {
355
+ encode_utf8(codepoint, input_utf8);
356
+ encode_latin1(codepoint, reference_output_latin1);
357
+ }
358
+
359
+ bool transcode_utf8_to_latin1_test_base::is_input_valid() const {
360
+ return simdutf::tests::reference::validate_utf8_to_latin1(input_utf8.data(),
361
+ input_utf8.size());
362
+ }
363
+
364
+ bool transcode_utf8_to_latin1_test_base::validate(size_t saved_chars) const {
365
+ if (!is_input_valid()) {
366
+ if (saved_chars != 0) {
367
+ printf("input UTF-8 string is not valid, but conversion routine returned "
368
+ "%zu, indicating a valid input\n",
369
+ saved_chars);
370
+ return false;
371
+ }
372
+ }
373
+ if (saved_chars == 0) {
374
+ if (is_input_valid()) {
375
+ printf("input UTF-8 string is valid, but conversion routine returned 0, "
376
+ "indicating input error");
377
+ return false;
378
+ }
379
+
380
+ return true;
381
+ }
382
+
383
+ auto dump = [saved_chars](const char *title, const std::vector<char> &array) {
384
+ printf("%s", title);
385
+ for (size_t i = 0; i < saved_chars; i++) {
386
+ printf(" %02x", (char)array[i]);
387
+ }
388
+ putchar('\n');
389
+ };
390
+
391
+ if (saved_chars != reference_output_latin1.size()) {
392
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
393
+ "be %zu\n",
394
+ size_t(saved_chars), size_t(reference_output_latin1.size()));
395
+
396
+ dump("expected :", reference_output_latin1);
397
+ dump("actual :", output_latin1);
398
+ return false;
399
+ }
400
+ // Note that, in general, output_latin1.size() will not matched saved_chars.
401
+
402
+ // At this point, we know that the lengths are the same so std::mismatch is
403
+ // enough to tell us whether the strings are identical.
404
+ auto it = our_mismatch(
405
+ output_latin1.begin(), output_latin1.begin() + saved_chars,
406
+ reference_output_latin1.begin(), reference_output_latin1.end());
407
+ if (it.first != output_latin1.begin() + saved_chars) {
408
+ printf("mismatched output at %zu: actual value 0x%02x, expected 0x%02x\n",
409
+ size_t(std::distance(output_latin1.begin(), it.first)),
410
+ uint8_t(*it.first), uint8_t(*it.second));
411
+
412
+ dump("expected :", reference_output_latin1);
413
+ dump("actual :", output_latin1);
414
+ for (size_t i = 0; i < reference_output_latin1.size(); i++) {
415
+ if (reference_output_latin1[i] != output_latin1[i]) {
416
+ printf(" ==> ");
417
+ }
418
+ printf("at %zu expected 0x%04x 0x%04x\n ", i,
419
+ uint8_t(reference_output_latin1[i]), uint8_t(output_latin1[i]));
420
+ }
421
+ return false;
422
+ }
423
+
424
+ return true;
425
+ }
426
+
427
+ /**
428
+ * transcode_utf16_to_latin1_test_base can be used to test UTF-16 => Latin1
429
+ * transcoding.
430
+ */
431
+ transcode_utf16_to_latin1_test_base::transcode_utf16_to_latin1_test_base(
432
+ endianness utf16_endianness, GenerateCodepoint generate, size_t input_size)
433
+ : transcode_test_base{utf16_endianness} {
434
+ while (input_utf16.size() < input_size) {
435
+ const uint32_t codepoint = generate();
436
+ prepare_input(codepoint);
437
+ }
438
+ output_latin1.resize(reference_output_latin1.size() + output_size_margin);
439
+ }
440
+
441
+ transcode_utf16_to_latin1_test_base::transcode_utf16_to_latin1_test_base(
442
+ endianness utf16_endianness, const std::vector<char16_t> &input_utf16)
443
+ : transcode_test_base{utf16_endianness}, input_utf16{input_utf16} {
444
+ auto consume = [this](const uint32_t codepoint) {
445
+ ::simdutf::tests::reference::latin1::encode(
446
+ codepoint,
447
+ [this](uint32_t byte) { reference_output_latin1.push_back(byte); });
448
+ };
449
+
450
+ auto error_handler = [](const char16_t *, const char16_t *,
451
+ simdutf::tests::reference::utf16::Error) -> bool {
452
+ throw std::invalid_argument("Wrong UTF-16 input");
453
+ };
454
+ simdutf::tests::reference::utf16::decode(utf16_endianness, input_utf16.data(),
455
+ input_utf16.size(), consume,
456
+ error_handler);
457
+ output_latin1.resize(reference_output_latin1.size() + output_size_margin);
458
+ }
459
+
460
+ void transcode_utf16_to_latin1_test_base::prepare_input(uint32_t codepoint) {
461
+ encode_utf16(codepoint, input_utf16);
462
+ encode_latin1(codepoint, reference_output_latin1);
463
+ }
464
+
465
+ bool transcode_utf16_to_latin1_test_base::is_input_valid() const {
466
+ return simdutf::tests::reference::validate_utf16_to_latin1(
467
+ utf16_endianness, input_utf16.data(), input_utf16.size());
468
+ }
469
+
470
+ bool transcode_utf16_to_latin1_test_base::validate(size_t saved_chars) const {
471
+ if (!is_input_valid()) {
472
+ if (saved_chars != 0) {
473
+ printf("input UTF-16 string is not valid, but conversion routine "
474
+ "returned %zu, indicating a valid input\n",
475
+ saved_chars);
476
+ return false;
477
+ }
478
+ }
479
+ if (saved_chars == 0) {
480
+ if (is_input_valid()) {
481
+ printf("input UTF-16 string is valid, but conversion routine returned 0, "
482
+ "indicating input error");
483
+ return false;
484
+ }
485
+
486
+ return true;
487
+ }
488
+
489
+ auto dump = [saved_chars](const char *title, const std::vector<char> &array) {
490
+ printf("%s", title);
491
+ for (size_t i = 0; i < saved_chars; i++) {
492
+ printf(" %08x", (uint32_t)array[i]);
493
+ }
494
+ putchar('\n');
495
+ };
496
+
497
+ if (saved_chars != reference_output_latin1.size()) {
498
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
499
+ "be %zu\n",
500
+ size_t(saved_chars), size_t(reference_output_latin1.size()));
501
+
502
+ dump("expected :", reference_output_latin1);
503
+ dump("actual :", output_latin1);
504
+ return false;
505
+ }
506
+ // Note that, in general, output_latin1.size() will not matched saved_chars.
507
+
508
+ // At this point, we know that the lengths are the same so std::mismatch is
509
+ // enough to tell us whether the strings are identical.
510
+ auto it = our_mismatch(
511
+ output_latin1.begin(), output_latin1.begin() + saved_chars,
512
+ reference_output_latin1.begin(), reference_output_latin1.end());
513
+ if (it.first != output_latin1.begin() + saved_chars) {
514
+ printf("mismatched output at %zu: actual value 0x%02x, expected 0x%02x\n",
515
+ size_t(std::distance(output_latin1.begin(), it.first)),
516
+ uint8_t(*it.first), uint8_t(*it.second));
517
+
518
+ dump("expected :", reference_output_latin1);
519
+ dump("actual :", output_latin1);
520
+ for (size_t i = 0; i < reference_output_latin1.size(); i++) {
521
+ if (reference_output_latin1[i] != output_latin1[i]) {
522
+ printf(" ==> ");
523
+ }
524
+ printf("at %zu expected 0x%08x and got 0x%08x\n ", i,
525
+ uint8_t(reference_output_latin1[i]), uint8_t(output_latin1[i]));
526
+ }
527
+ return false;
528
+ }
529
+ return true;
530
+ }
531
+
532
+ /**
533
+ * transcode_utf8_to_utf16_test_base can be used to test UTF-8 => UTF-16
534
+ * transcoding.
535
+ */
536
+ transcode_utf8_to_utf16_test_base::transcode_utf8_to_utf16_test_base(
537
+ endianness utf16_endianness, GenerateCodepoint generate, size_t input_size)
538
+ : transcode_test_base{utf16_endianness} {
539
+ while (input_utf8.size() < input_size) {
540
+ const uint32_t codepoint = generate();
541
+ prepare_input(codepoint);
542
+ }
543
+
544
+ output_utf16.resize(reference_output_utf16.size() + output_size_margin);
545
+ }
546
+
547
+ void transcode_utf8_to_utf16_test_base::prepare_input(uint32_t codepoint) {
548
+ encode_utf8(codepoint, input_utf8);
549
+ encode_utf16(codepoint, reference_output_utf16);
550
+ }
551
+
552
+ bool transcode_utf8_to_utf16_test_base::is_input_valid() const {
553
+ return simdutf::tests::reference::validate_utf8(input_utf8.data(),
554
+ input_utf8.size());
555
+ }
556
+
557
+ bool transcode_utf8_to_utf16_test_base::validate(size_t saved_chars) const {
558
+ if (!is_input_valid()) {
559
+ if (saved_chars != 0) {
560
+ printf("input UTF-8 string is not valid, but conversion routine returned "
561
+ "%zu, indicating a valid input\n",
562
+ saved_chars);
563
+ return false;
564
+ }
565
+ }
566
+ if (saved_chars == 0) {
567
+ if (is_input_valid()) {
568
+ printf("input UTF-8 string is valid, but conversion routine returned 0, "
569
+ "indicating input error");
570
+ return false;
571
+ }
572
+
573
+ return true;
574
+ }
575
+ if (saved_chars != reference_output_utf16.size()) {
576
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
577
+ "be %zu\n",
578
+ size_t(saved_chars), size_t(reference_output_utf16.size()));
579
+ return false;
580
+ }
581
+
582
+ // Note that, in general, output_utf16.size() will not matched saved_chars.
583
+
584
+ // At this point, we know that the lengths are the same so std::mismatch is
585
+ // enough to tell us whether the strings are identical.
586
+ auto it = our_mismatch(
587
+ output_utf16.begin(), output_utf16.begin() + saved_chars,
588
+ reference_output_utf16.begin(), reference_output_utf16.end());
589
+ if (it.first != output_utf16.begin() + saved_chars) {
590
+ printf("mismatched output at %zu: actual value 0x%04x, expected 0x%04x\n",
591
+ size_t(std::distance(output_utf16.begin(), it.first)),
592
+ uint16_t(*it.first), uint16_t(*it.second));
593
+ for (size_t i = 0; i < output_utf16.size(); i++) {
594
+ if (reference_output_utf16[i] != output_utf16[i]) {
595
+ printf(" ==> ");
596
+ }
597
+ printf("at %zu expected 0x%04x and got 0x%04x\n ", i,
598
+ uint16_t(reference_output_utf16[i]), uint16_t(output_utf16[i]));
599
+ }
600
+
601
+ return false;
602
+ }
603
+
604
+ return true;
605
+ }
606
+
607
+ /**
608
+ * transcode_utf8_to_utf32_test_base can be used to test UTF-8 => UTF-32
609
+ * transcoding.
610
+ */
611
+ transcode_utf8_to_utf32_test_base::transcode_utf8_to_utf32_test_base(
612
+ GenerateCodepoint generate, size_t input_size) {
613
+ while (input_utf8.size() < input_size) {
614
+ const uint32_t codepoint = generate();
615
+ prepare_input(codepoint);
616
+ }
617
+
618
+ output_utf32.resize(reference_output_utf32.size() + output_size_margin);
619
+ }
620
+
621
+ void transcode_utf8_to_utf32_test_base::prepare_input(uint32_t codepoint) {
622
+ encode_utf8(codepoint, input_utf8);
623
+ encode_utf32(codepoint, reference_output_utf32);
624
+ }
625
+
626
+ bool transcode_utf8_to_utf32_test_base::is_input_valid() const {
627
+ return simdutf::tests::reference::validate_utf8(input_utf8.data(),
628
+ input_utf8.size());
629
+ }
630
+
631
+ bool transcode_utf8_to_utf32_test_base::validate(size_t saved_chars) const {
632
+ if (!is_input_valid()) {
633
+ if (saved_chars != 0) {
634
+ printf("input UTF-8 string is not valid, but conversion routine returned "
635
+ "%zu, indicating a valid input\n",
636
+ saved_chars);
637
+ return false;
638
+ }
639
+ }
640
+ if (saved_chars == 0) {
641
+ if (is_input_valid()) {
642
+ printf("input UTF-8 string is valid, but conversion routine returned 0, "
643
+ "indicating input error");
644
+ return false;
645
+ }
646
+
647
+ return true;
648
+ }
649
+
650
+ if (saved_chars != reference_output_utf32.size()) {
651
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
652
+ "be %zu\n",
653
+ size_t(saved_chars), size_t(reference_output_utf32.size()));
654
+ return false;
655
+ }
656
+
657
+ // Note that, in general, output_utf16.size() will not matched saved_chars.
658
+
659
+ // At this point, we know that the lengths are the same so std::mismatch is
660
+ // enough to tell us whether the strings are identical.
661
+ auto it = our_mismatch(
662
+ output_utf32.begin(), output_utf32.begin() + saved_chars,
663
+ reference_output_utf32.begin(), reference_output_utf32.end());
664
+ if (it.first != output_utf32.begin() + saved_chars) {
665
+ printf("mismatched output at %zu: actual value 0x%04x, expected 0x%04x\n",
666
+ size_t(std::distance(output_utf32.begin(), it.first)),
667
+ uint16_t(*it.first), uint16_t(*it.second));
668
+ for (size_t i = 0; i < output_utf32.size(); i++) {
669
+ if (reference_output_utf32[i] != output_utf32[i]) {
670
+ printf(" ==> ");
671
+ }
672
+ printf("at %zu expected 0x%08x and got 0x%08x\n ", i,
673
+ uint32_t(reference_output_utf32[i]), uint32_t(output_utf32[i]));
674
+ }
675
+
676
+ return false;
677
+ }
678
+
679
+ return true;
680
+ }
681
+
682
+ /**
683
+ * transcode_utf16_to_utf8_test_base can be used to test UTF-16 => UTF-8
684
+ * transcoding.
685
+ */
686
+ transcode_utf16_to_utf8_test_base::transcode_utf16_to_utf8_test_base(
687
+ endianness utf16_endianness, GenerateCodepoint generate, size_t input_size)
688
+ : transcode_test_base{utf16_endianness} {
689
+ while (input_utf16.size() < input_size) {
690
+ const uint32_t codepoint = generate();
691
+ prepare_input(codepoint);
692
+ }
693
+
694
+ output_utf8.resize(reference_output_utf8.size() + output_size_margin);
695
+ }
696
+
697
+ transcode_utf16_to_utf8_test_base::transcode_utf16_to_utf8_test_base(
698
+ endianness utf16_endianness, const std::vector<char16_t> &input_utf16)
699
+ : transcode_test_base{utf16_endianness}, input_utf16{input_utf16} {
700
+
701
+ auto consume = [this](const uint32_t codepoint) {
702
+ ::simdutf::tests::reference::utf8::encode(codepoint, [this](uint8_t byte) {
703
+ reference_output_utf8.push_back(byte);
704
+ });
705
+ };
706
+
707
+ auto error_handler = [](const char16_t *, const char16_t *,
708
+ simdutf::tests::reference::utf16::Error) -> bool {
709
+ throw std::invalid_argument("Wrong UTF-16 input");
710
+ };
711
+ simdutf::tests::reference::utf16::decode(utf16_endianness, input_utf16.data(),
712
+ input_utf16.size(), consume,
713
+ error_handler);
714
+ output_utf8.resize(reference_output_utf8.size() + output_size_margin);
715
+ }
716
+
717
+ void transcode_utf16_to_utf8_test_base::prepare_input(uint32_t codepoint) {
718
+ encode_utf16(codepoint, input_utf16);
719
+ encode_utf8(codepoint, reference_output_utf8);
720
+ }
721
+
722
+ bool transcode_utf16_to_utf8_test_base::is_input_valid() const {
723
+ return simdutf::tests::reference::validate_utf16(
724
+ utf16_endianness, input_utf16.data(), input_utf16.size());
725
+ }
726
+
727
+ bool transcode_utf16_to_utf8_test_base::validate(size_t saved_chars) const {
728
+ if (!is_input_valid()) {
729
+ if (saved_chars != 0) {
730
+ printf("input UTF-16 string is not valid, but conversion routine "
731
+ "returned %zu, indicating a valid input\n",
732
+ saved_chars);
733
+ return false;
734
+ }
735
+ }
736
+ if (saved_chars == 0) {
737
+ if (is_input_valid()) {
738
+ printf("input UTF-16 string is valid, but conversion routine returned 0, "
739
+ "indicating input error");
740
+ return false;
741
+ }
742
+
743
+ return true;
744
+ }
745
+
746
+ auto dump = [saved_chars](const char *title, const std::vector<char> &array) {
747
+ printf("%s", title);
748
+ for (size_t i = 0; i < saved_chars; i++) {
749
+ printf(" %02x", (uint8_t)array[i]);
750
+ }
751
+ putchar('\n');
752
+ };
753
+
754
+ if (saved_chars != reference_output_utf8.size()) {
755
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
756
+ "be %zu\n",
757
+ size_t(saved_chars), size_t(reference_output_utf8.size()));
758
+
759
+ dump("expected :", reference_output_utf8);
760
+ dump("actual :", output_utf8);
761
+ return false;
762
+ }
763
+ // Note that, in general, output_utf8.size() will not matched saved_chars.
764
+
765
+ // At this point, we know that the lengths are the same so std::mismatch is
766
+ // enough to tell us whether the strings are identical.
767
+ auto it =
768
+ our_mismatch(output_utf8.begin(), output_utf8.begin() + saved_chars,
769
+ reference_output_utf8.begin(), reference_output_utf8.end());
770
+ if (it.first != output_utf8.begin() + saved_chars) {
771
+ printf("mismatched output at %zu: actual value 0x%02x, expected 0x%02x\n",
772
+ size_t(std::distance(output_utf8.begin(), it.first)),
773
+ uint8_t(*it.first), uint8_t(*it.second));
774
+
775
+ dump("expected :", reference_output_utf8);
776
+ dump("actual :", output_utf8);
777
+ for (size_t i = 0; i < reference_output_utf8.size(); i++) {
778
+ if (reference_output_utf8[i] != output_utf8[i]) {
779
+ printf(" ==> ");
780
+ }
781
+ printf("at %zu expected 0x%02x and got 0x%02x\n ", i,
782
+ uint8_t(reference_output_utf8[i]), uint8_t(output_utf8[i]));
783
+ }
784
+ return false;
785
+ }
786
+
787
+ return true;
788
+ }
789
+
790
+ /**
791
+ * transcode_utf16_to_utf32_test_base can be used to test UTF-16LE => UTF-32
792
+ * transcoding.
793
+ */
794
+ transcode_utf16_to_utf32_test_base::transcode_utf16_to_utf32_test_base(
795
+ endianness utf16_endianness, GenerateCodepoint generate, size_t input_size)
796
+ : transcode_test_base{utf16_endianness} {
797
+ while (input_utf16.size() < input_size) {
798
+ const uint32_t codepoint = generate();
799
+ prepare_input(codepoint);
800
+ }
801
+
802
+ output_utf32.resize(reference_output_utf32.size() + output_size_margin);
803
+ }
804
+
805
+ transcode_utf16_to_utf32_test_base::transcode_utf16_to_utf32_test_base(
806
+ endianness utf16_endianness, const std::vector<char16_t> &input_utf16)
807
+ : transcode_test_base{utf16_endianness}, input_utf16{input_utf16} {
808
+
809
+ auto consume = [this](const uint32_t codepoint) {
810
+ ::simdutf::tests::reference::utf32::encode(
811
+ codepoint,
812
+ [this](uint32_t byte) { reference_output_utf32.push_back(byte); });
813
+ };
814
+
815
+ auto error_handler = [](const char16_t *, const char16_t *,
816
+ simdutf::tests::reference::utf16::Error) -> bool {
817
+ throw std::invalid_argument("Wrong UTF-16 input");
818
+ };
819
+ simdutf::tests::reference::utf16::decode(utf16_endianness, input_utf16.data(),
820
+ input_utf16.size(), consume,
821
+ error_handler);
822
+ output_utf32.resize(reference_output_utf32.size() + output_size_margin);
823
+ }
824
+
825
+ void transcode_utf16_to_utf32_test_base::prepare_input(uint32_t codepoint) {
826
+ encode_utf16(codepoint, input_utf16);
827
+ encode_utf32(codepoint, reference_output_utf32);
828
+ }
829
+
830
+ bool transcode_utf16_to_utf32_test_base::is_input_valid() const {
831
+ return simdutf::tests::reference::validate_utf16(
832
+ utf16_endianness, input_utf16.data(), input_utf16.size());
833
+ }
834
+
835
+ bool transcode_utf16_to_utf32_test_base::validate(size_t saved_chars) const {
836
+ if (!is_input_valid()) {
837
+ if (saved_chars != 0) {
838
+ printf("input UTF-16 string is not valid, but conversion routine "
839
+ "returned %zu, indicating a valid input\n",
840
+ saved_chars);
841
+ return false;
842
+ }
843
+ }
844
+ if (saved_chars == 0) {
845
+ if (is_input_valid()) {
846
+ printf("input UTF-16 string is valid, but conversion routine returned 0, "
847
+ "indicating input error");
848
+ return false;
849
+ }
850
+
851
+ return true;
852
+ }
853
+
854
+ auto dump = [saved_chars](const char *title,
855
+ const std::vector<char32_t> &array) {
856
+ printf("%s", title);
857
+ for (size_t i = 0; i < saved_chars; i++) {
858
+ printf(" %08x", (uint32_t)array[i]);
859
+ }
860
+ putchar('\n');
861
+ };
862
+
863
+ if (saved_chars != reference_output_utf32.size()) {
864
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
865
+ "be %zu\n",
866
+ size_t(saved_chars), size_t(reference_output_utf32.size()));
867
+
868
+ dump("expected :", reference_output_utf32);
869
+ dump("actual :", output_utf32);
870
+ return false;
871
+ }
872
+ // Note that, in general, output_utf32.size() will not matched saved_chars.
873
+
874
+ // At this point, we know that the lengths are the same so std::mismatch is
875
+ // enough to tell us whether the strings are identical.
876
+ auto it = our_mismatch(
877
+ output_utf32.begin(), output_utf32.begin() + saved_chars,
878
+ reference_output_utf32.begin(), reference_output_utf32.end());
879
+ if (it.first != output_utf32.begin() + saved_chars) {
880
+ printf("mismatched output at %zu: actual value 0x%02x, expected 0x%02x\n",
881
+ size_t(std::distance(output_utf32.begin(), it.first)),
882
+ uint32_t(*it.first), uint32_t(*it.second));
883
+
884
+ dump("expected :", reference_output_utf32);
885
+ dump("actual :", output_utf32);
886
+ for (size_t i = 0; i < reference_output_utf32.size(); i++) {
887
+ if (reference_output_utf32[i] != output_utf32[i]) {
888
+ printf(" ==> ");
889
+ }
890
+ printf("at %zu expected 0x%08x and got 0x%08x\n ", i,
891
+ uint32_t(reference_output_utf32[i]), uint32_t(output_utf32[i]));
892
+ }
893
+ return false;
894
+ }
895
+
896
+ return true;
897
+ }
898
+
899
+ /**
900
+ * transcode_utf32_to_latin1_test_base can be used to test UTF-32 => UTF-16LE
901
+ * transcoding.
902
+ */
903
+ transcode_utf32_to_latin1_test_base::transcode_utf32_to_latin1_test_base(
904
+ GenerateCodepoint generate, size_t input_size) {
905
+ while (input_utf32.size() < input_size) {
906
+ const uint32_t codepoint = generate();
907
+ prepare_input(codepoint);
908
+ }
909
+ output_latin1.resize(reference_output_latin1.size() + output_size_margin);
910
+ }
911
+
912
+ void transcode_utf32_to_latin1_test_base::prepare_input(uint32_t codepoint) {
913
+ encode_utf32(codepoint, input_utf32);
914
+ encode_latin1(codepoint,
915
+ reference_output_latin1); //-- not applicable? All of a byte is
916
+ // translatable to latin1
917
+ }
918
+
919
+ bool transcode_utf32_to_latin1_test_base::is_input_valid() const {
920
+ return simdutf::tests::reference::validate_utf32_to_latin1(
921
+ input_utf32.data(), input_utf32.size());
922
+ }
923
+
924
+ bool transcode_utf32_to_latin1_test_base::validate(size_t saved_chars) const {
925
+ if (!is_input_valid()) {
926
+ if (saved_chars != 0) {
927
+ printf("input UTF-32 string is not valid, but conversion routine "
928
+ "returned %zu, indicating a valid input\n",
929
+ saved_chars);
930
+ return false;
931
+ }
932
+ }
933
+ if (saved_chars == 0) {
934
+ if (is_input_valid()) {
935
+ printf("input UTF-32 string is valid, but conversion routine returned 0, "
936
+ "indicating input error");
937
+ return false;
938
+ }
939
+ return true;
940
+ }
941
+
942
+ auto dump = [saved_chars](const char *title, const std::vector<char> &array) {
943
+ printf("%s", title);
944
+ for (size_t i = 0; i < saved_chars; i++) {
945
+ printf(" %02x", (char)array[i]);
946
+ }
947
+ putchar('\n');
948
+ };
949
+
950
+ if (saved_chars != reference_output_latin1.size()) {
951
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
952
+ "be %zu\n",
953
+ size_t(saved_chars), size_t(reference_output_latin1.size()));
954
+
955
+ dump("expected :", reference_output_latin1);
956
+ dump("actual :", output_latin1);
957
+ return false;
958
+ }
959
+ // Note that, in general, output_latin1.size() will not matched saved_chars.
960
+
961
+ // At this point, we know that the lengths are the same so std::mismatch is
962
+ // enough to tell us whether the strings are identical.
963
+ auto it = our_mismatch(
964
+ output_latin1.begin(), output_latin1.begin() + saved_chars,
965
+ reference_output_latin1.begin(), reference_output_latin1.end());
966
+ if (it.first != output_latin1.begin() + saved_chars) {
967
+ printf("mismatched output at %zu: actual value 0x%02x, expected 0x%02x\n",
968
+ size_t(std::distance(output_latin1.begin(), it.first)),
969
+ uint8_t(*it.first), uint8_t(*it.second));
970
+
971
+ dump("expected :", reference_output_latin1);
972
+ dump("actual :", output_latin1);
973
+ for (size_t i = 0; i < reference_output_latin1.size(); i++) {
974
+ if (reference_output_latin1[i] != output_latin1[i]) {
975
+ printf(" ==> ");
976
+ }
977
+ printf("at %zu expected 0x%04x 0x%04x\n ", i,
978
+ uint8_t(reference_output_latin1[i]), uint8_t(output_latin1[i]));
979
+ }
980
+ return false;
981
+ }
982
+ return true;
983
+ }
984
+
985
+ /**
986
+ * transcode_utf32_to_utf8_test_base can be used to test UTF-32 => UTF-8
987
+ * transcoding.
988
+ */
989
+ transcode_utf32_to_utf8_test_base::transcode_utf32_to_utf8_test_base(
990
+ GenerateCodepoint generate, size_t input_size) {
991
+ while (input_utf32.size() < input_size) {
992
+ const uint32_t codepoint = generate();
993
+ prepare_input(codepoint);
994
+ }
995
+
996
+ output_utf8.resize(reference_output_utf8.size() + output_size_margin);
997
+ }
998
+
999
+ transcode_utf32_to_utf8_test_base::transcode_utf32_to_utf8_test_base(
1000
+ const std::vector<char32_t> &input_utf32)
1001
+ : input_utf32{input_utf32} {
1002
+
1003
+ auto consume = [this](const uint32_t codepoint) {
1004
+ ::simdutf::tests::reference::utf8::encode(codepoint, [this](uint8_t byte) {
1005
+ reference_output_utf8.push_back(byte);
1006
+ });
1007
+ };
1008
+
1009
+ auto error_handler = [](const char32_t *, const char32_t *,
1010
+ simdutf::tests::reference::utf32::Error) -> bool {
1011
+ throw std::invalid_argument("Wrong UTF-32 input");
1012
+ };
1013
+ simdutf::tests::reference::utf32::decode(
1014
+ input_utf32.data(), input_utf32.size(), consume, error_handler);
1015
+ output_utf8.resize(reference_output_utf8.size() + output_size_margin);
1016
+ }
1017
+
1018
+ void transcode_utf32_to_utf8_test_base::prepare_input(uint32_t codepoint) {
1019
+ encode_utf32(codepoint, input_utf32);
1020
+ encode_utf8(codepoint, reference_output_utf8);
1021
+ }
1022
+
1023
+ bool transcode_utf32_to_utf8_test_base::is_input_valid() const {
1024
+ return simdutf::tests::reference::validate_utf32(input_utf32.data(),
1025
+ input_utf32.size());
1026
+ }
1027
+
1028
+ bool transcode_utf32_to_utf8_test_base::validate(size_t saved_chars) const {
1029
+ if (!is_input_valid()) {
1030
+ if (saved_chars != 0) {
1031
+ printf("input UTF-32 string is not valid, but conversion routine "
1032
+ "returned %zu, indicating a valid input\n",
1033
+ saved_chars);
1034
+ return false;
1035
+ }
1036
+ }
1037
+ if (saved_chars == 0) {
1038
+ if (is_input_valid()) {
1039
+ printf("input UTF-32 string is valid, but conversion routine returned 0, "
1040
+ "indicating input error");
1041
+ return false;
1042
+ }
1043
+
1044
+ return true;
1045
+ }
1046
+
1047
+ auto dump = [saved_chars](const char *title, const std::vector<char> &array) {
1048
+ printf("%s", title);
1049
+ for (size_t i = 0; i < saved_chars; i++) {
1050
+ printf(" %02x", (uint8_t)array[i]);
1051
+ }
1052
+ putchar('\n');
1053
+ };
1054
+
1055
+ if (saved_chars != reference_output_utf8.size()) {
1056
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
1057
+ "be %zu\n",
1058
+ size_t(saved_chars), size_t(reference_output_utf8.size()));
1059
+
1060
+ dump("expected :", reference_output_utf8);
1061
+ dump("actual :", output_utf8);
1062
+ return false;
1063
+ }
1064
+ // Note that, in general, output_utf8.size() will not matched saved_chars.
1065
+
1066
+ // At this point, we know that the lengths are the same so std::mismatch is
1067
+ // enough to tell us whether the strings are identical.
1068
+ auto it =
1069
+ our_mismatch(output_utf8.begin(), output_utf8.begin() + saved_chars,
1070
+ reference_output_utf8.begin(), reference_output_utf8.end());
1071
+ if (it.first != output_utf8.begin() + saved_chars) {
1072
+ printf("mismatched output at %zu: actual value 0x%02x, expected 0x%02x\n",
1073
+ size_t(std::distance(output_utf8.begin(), it.first)),
1074
+ uint8_t(*it.first), uint8_t(*it.second));
1075
+
1076
+ dump("expected :", reference_output_utf8);
1077
+ dump("actual :", output_utf8);
1078
+ for (size_t i = 0; i < reference_output_utf8.size(); i++) {
1079
+ if (reference_output_utf8[i] != output_utf8[i]) {
1080
+ printf(" ==> ");
1081
+ }
1082
+ printf("at %zu expected 0x%02x and got 0x%02x\n ", i,
1083
+ uint8_t(reference_output_utf8[i]), uint8_t(output_utf8[i]));
1084
+ }
1085
+ return false;
1086
+ }
1087
+
1088
+ return true;
1089
+ }
1090
+
1091
+ /**
1092
+ * transcode_utf32_to_utf16_test_base can be used to test UTF-32 => UTF-16LE
1093
+ * transcoding.
1094
+ */
1095
+ transcode_utf32_to_utf16_test_base::transcode_utf32_to_utf16_test_base(
1096
+ endianness utf16_endianness, GenerateCodepoint generate, size_t input_size)
1097
+ : transcode_test_base{utf16_endianness} {
1098
+ while (input_utf32.size() < input_size) {
1099
+ const uint32_t codepoint = generate();
1100
+ prepare_input(codepoint);
1101
+ }
1102
+
1103
+ output_utf16.resize(reference_output_utf16.size() + output_size_margin);
1104
+ }
1105
+
1106
+ void transcode_utf32_to_utf16_test_base::prepare_input(uint32_t codepoint) {
1107
+ encode_utf32(codepoint, input_utf32);
1108
+ encode_utf16(codepoint, reference_output_utf16);
1109
+ }
1110
+
1111
+ bool transcode_utf32_to_utf16_test_base::is_input_valid() const {
1112
+ return simdutf::tests::reference::validate_utf32(input_utf32.data(),
1113
+ input_utf32.size());
1114
+ }
1115
+
1116
+ bool transcode_utf32_to_utf16_test_base::validate(size_t saved_chars) const {
1117
+ if (!is_input_valid()) {
1118
+ if (saved_chars != 0) {
1119
+ printf("input UTF-32 string is not valid, but conversion routine "
1120
+ "returned %zu, indicating a valid input\n",
1121
+ saved_chars);
1122
+ return false;
1123
+ }
1124
+ }
1125
+ if (saved_chars == 0) {
1126
+ if (is_input_valid()) {
1127
+ printf("input UTF-32 string is valid, but conversion routine returned 0, "
1128
+ "indicating input error");
1129
+ return false;
1130
+ }
1131
+
1132
+ return true;
1133
+ }
1134
+
1135
+ auto dump = [saved_chars](const char *title,
1136
+ const std::vector<char16_t> &array) {
1137
+ printf("%s", title);
1138
+ for (size_t i = 0; i < saved_chars; i++) {
1139
+ printf(" %02x", (uint16_t)array[i]);
1140
+ }
1141
+ putchar('\n');
1142
+ };
1143
+
1144
+ if (saved_chars != reference_output_utf16.size()) {
1145
+ printf("wrong saved bytes value: procedure returned %zu bytes, it should "
1146
+ "be %zu\n",
1147
+ size_t(saved_chars), size_t(reference_output_utf16.size()));
1148
+
1149
+ dump("expected :", reference_output_utf16);
1150
+ dump("actual :", output_utf16);
1151
+ return false;
1152
+ }
1153
+ // Note that, in general, output_utf16.size() will not matched saved_chars.
1154
+
1155
+ // At this point, we know that the lengths are the same so std::mismatch is
1156
+ // enough to tell us whether the strings are identical.
1157
+ auto it = our_mismatch(
1158
+ output_utf16.begin(), output_utf16.begin() + saved_chars,
1159
+ reference_output_utf16.begin(), reference_output_utf16.end());
1160
+ if (it.first != output_utf16.begin() + saved_chars) {
1161
+ printf("mismatched output at %zu: actual value 0x%02x, expected 0x%02x\n",
1162
+ size_t(std::distance(output_utf16.begin(), it.first)),
1163
+ uint8_t(*it.first), uint8_t(*it.second));
1164
+
1165
+ dump("expected :", reference_output_utf16);
1166
+ dump("actual :", output_utf16);
1167
+ for (size_t i = 0; i < reference_output_utf16.size(); i++) {
1168
+ if (reference_output_utf16[i] != output_utf16[i]) {
1169
+ printf(" ==> ");
1170
+ }
1171
+ printf("at %zu expected 0x%04x 0x%04x\n ", i,
1172
+ uint16_t(reference_output_utf16[i]), uint16_t(output_utf16[i]));
1173
+ }
1174
+ return false;
1175
+ }
1176
+
1177
+ return true;
1178
+ }
1179
+
1180
+ } // namespace helpers
1181
+ } // namespace tests
1182
+ } // namespace simdutf
1183
+
1184
+ //------------------------------------------------------------
1185
+
1186
+ std::vector<std::vector<char16_t>>
1187
+ all_utf16_combinations(simdutf::endianness byte_order) {
1188
+ // non-surrogate word that yields 1 UTF-8 byte
1189
+ const char16_t V_1byte_start = 0x0042;
1190
+ // non-surrogate word that yields 2 UTF-8 bytes
1191
+ const char16_t V_2bytes_start = 0x017f;
1192
+ // non-surrogate word the yields 3 UTF-8 bytes
1193
+ const char16_t V_3bytes_start = 0xefff;
1194
+ const char16_t L = to_utf16(byte_order, 0xd9ca); // low surrogate
1195
+ const char16_t H = to_utf16(byte_order, 0xde42); // high surrogate
1196
+
1197
+ std::vector<std::vector<char16_t>> result;
1198
+ std::vector<char16_t> row(32, to_utf16(byte_order, '*'));
1199
+
1200
+ std::array<int, 8> pattern{0};
1201
+ while (true) {
1202
+ // 1. produce output
1203
+ char16_t V_1byte = V_1byte_start;
1204
+ char16_t V_2bytes = V_2bytes_start;
1205
+ char16_t V_3bytes = V_3bytes_start;
1206
+ for (int i = 0; i < 8; i++) {
1207
+ switch (pattern[i]) {
1208
+ case 0:
1209
+ row[i] = to_utf16(byte_order, V_1byte++);
1210
+ break;
1211
+ case 1:
1212
+ row[i] = to_utf16(byte_order, V_2bytes++);
1213
+ break;
1214
+ case 2:
1215
+ row[i] = to_utf16(byte_order, V_3bytes++);
1216
+ break;
1217
+ case 3:
1218
+ row[i] = L;
1219
+ break;
1220
+ case 4:
1221
+ row[i] = H;
1222
+ break;
1223
+ default:
1224
+ abort();
1225
+ }
1226
+ } // for
1227
+
1228
+ if (row[7] == L) {
1229
+ row[8] = H; // make input valid
1230
+ result.push_back(row);
1231
+
1232
+ row[8] = to_utf16(byte_order, V_1byte); // broken input
1233
+ result.push_back(row);
1234
+ } else {
1235
+ row[8] = to_utf16(byte_order, V_1byte);
1236
+ result.push_back(row);
1237
+ }
1238
+
1239
+ // next pattern
1240
+ int i = 0;
1241
+ int carry = 1;
1242
+ for (; i < 8 && carry; i++) {
1243
+ pattern[i] += carry;
1244
+ if (pattern[i] == 5) {
1245
+ pattern[i] = 0;
1246
+ carry = 1;
1247
+ } else
1248
+ carry = 0;
1249
+ }
1250
+
1251
+ if (carry == 1 and i == 8)
1252
+ break;
1253
+
1254
+ } // while
1255
+
1256
+ return result;
1257
+ }