zstd-native-ruby 1.0.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 (651) hide show
  1. checksums.yaml +7 -0
  2. data/CLAUDE.md +101 -0
  3. data/LICENSE +19 -0
  4. data/README.md +47 -0
  5. data/ext/zstd_ruby/extconf.rb +35 -0
  6. data/ext/zstd_ruby/zstd_ruby.c +221 -0
  7. data/lib/zstd_ruby.rb +68 -0
  8. data/vendor/zstd/CHANGELOG +863 -0
  9. data/vendor/zstd/CMakeLists.txt +11 -0
  10. data/vendor/zstd/CODE_OF_CONDUCT.md +5 -0
  11. data/vendor/zstd/CONTRIBUTING.md +494 -0
  12. data/vendor/zstd/COPYING +339 -0
  13. data/vendor/zstd/LICENSE +30 -0
  14. data/vendor/zstd/Makefile +470 -0
  15. data/vendor/zstd/Package.swift +36 -0
  16. data/vendor/zstd/README.md +244 -0
  17. data/vendor/zstd/SECURITY.md +15 -0
  18. data/vendor/zstd/TESTING.md +43 -0
  19. data/vendor/zstd/build/LICENSE +0 -0
  20. data/vendor/zstd/build/README.md +56 -0
  21. data/vendor/zstd/build/VS2008/fullbench/fullbench.vcproj +549 -0
  22. data/vendor/zstd/build/VS2008/fuzzer/fuzzer.vcproj +585 -0
  23. data/vendor/zstd/build/VS2008/zstd/zstd.vcproj +677 -0
  24. data/vendor/zstd/build/VS2008/zstd.sln +56 -0
  25. data/vendor/zstd/build/VS2008/zstdlib/zstdlib.vcproj +635 -0
  26. data/vendor/zstd/build/VS2010/CompileAsCpp.props +8 -0
  27. data/vendor/zstd/build/VS2010/datagen/datagen.vcxproj +170 -0
  28. data/vendor/zstd/build/VS2010/fullbench/fullbench.vcxproj +220 -0
  29. data/vendor/zstd/build/VS2010/fuzzer/fuzzer.vcxproj +224 -0
  30. data/vendor/zstd/build/VS2010/libzstd/libzstd.vcxproj +243 -0
  31. data/vendor/zstd/build/VS2010/libzstd-dll/libzstd-dll.rc +51 -0
  32. data/vendor/zstd/build/VS2010/libzstd-dll/libzstd-dll.vcxproj +250 -0
  33. data/vendor/zstd/build/VS2010/zstd/zstd.rc +51 -0
  34. data/vendor/zstd/build/VS2010/zstd/zstd.vcxproj +266 -0
  35. data/vendor/zstd/build/VS2010/zstd.sln +84 -0
  36. data/vendor/zstd/build/VS_scripts/README.md +64 -0
  37. data/vendor/zstd/build/VS_scripts/build.VS2010.cmd +7 -0
  38. data/vendor/zstd/build/VS_scripts/build.VS2012.cmd +6 -0
  39. data/vendor/zstd/build/VS_scripts/build.VS2013.cmd +7 -0
  40. data/vendor/zstd/build/VS_scripts/build.VS2015.cmd +7 -0
  41. data/vendor/zstd/build/VS_scripts/build.VS2017.cmd +7 -0
  42. data/vendor/zstd/build/VS_scripts/build.VS2017Community.cmd +7 -0
  43. data/vendor/zstd/build/VS_scripts/build.VS2017Enterprise.cmd +7 -0
  44. data/vendor/zstd/build/VS_scripts/build.VS2017Professional.cmd +7 -0
  45. data/vendor/zstd/build/VS_scripts/build.VSPreview.cmd +7 -0
  46. data/vendor/zstd/build/VS_scripts/build.generic.cmd +67 -0
  47. data/vendor/zstd/build/cmake/CMakeLists.txt +81 -0
  48. data/vendor/zstd/build/cmake/CMakeModules/AddZstdCompilationFlags.cmake +138 -0
  49. data/vendor/zstd/build/cmake/CMakeModules/FindLibLZ4.cmake +49 -0
  50. data/vendor/zstd/build/cmake/CMakeModules/GetZstdLibraryVersion.cmake +10 -0
  51. data/vendor/zstd/build/cmake/CMakeModules/JoinPaths.cmake +23 -0
  52. data/vendor/zstd/build/cmake/CMakeModules/ZstdBuild.cmake +42 -0
  53. data/vendor/zstd/build/cmake/CMakeModules/ZstdDependencies.cmake +30 -0
  54. data/vendor/zstd/build/cmake/CMakeModules/ZstdOptions.cmake +68 -0
  55. data/vendor/zstd/build/cmake/CMakeModules/ZstdPackage.cmake +42 -0
  56. data/vendor/zstd/build/cmake/CMakeModules/ZstdVersion.cmake +31 -0
  57. data/vendor/zstd/build/cmake/README.md +155 -0
  58. data/vendor/zstd/build/cmake/contrib/CMakeLists.txt +13 -0
  59. data/vendor/zstd/build/cmake/contrib/gen_html/CMakeLists.txt +30 -0
  60. data/vendor/zstd/build/cmake/contrib/pzstd/CMakeLists.txt +39 -0
  61. data/vendor/zstd/build/cmake/lib/CMakeLists.txt +298 -0
  62. data/vendor/zstd/build/cmake/lib/cmake_uninstall.cmake.in +22 -0
  63. data/vendor/zstd/build/cmake/programs/CMakeLists.txt +144 -0
  64. data/vendor/zstd/build/cmake/tests/CMakeLists.txt +118 -0
  65. data/vendor/zstd/build/cmake/zstdConfig.cmake.in +10 -0
  66. data/vendor/zstd/build/meson/GetZstdLibraryVersion.py +39 -0
  67. data/vendor/zstd/build/meson/InstallSymlink.py +55 -0
  68. data/vendor/zstd/build/meson/README.md +38 -0
  69. data/vendor/zstd/build/meson/contrib/gen_html/meson.build +30 -0
  70. data/vendor/zstd/build/meson/contrib/meson.build +12 -0
  71. data/vendor/zstd/build/meson/contrib/pzstd/meson.build +25 -0
  72. data/vendor/zstd/build/meson/lib/meson.build +175 -0
  73. data/vendor/zstd/build/meson/meson.build +155 -0
  74. data/vendor/zstd/build/meson/meson_options.txt +36 -0
  75. data/vendor/zstd/build/meson/programs/meson.build +124 -0
  76. data/vendor/zstd/build/meson/tests/meson.build +217 -0
  77. data/vendor/zstd/build/meson/tests/valgrindTest.py +90 -0
  78. data/vendor/zstd/build/single_file_libs/README.md +33 -0
  79. data/vendor/zstd/build/single_file_libs/build_decoder_test.sh +91 -0
  80. data/vendor/zstd/build/single_file_libs/build_library_test.sh +98 -0
  81. data/vendor/zstd/build/single_file_libs/combine.py +234 -0
  82. data/vendor/zstd/build/single_file_libs/combine.sh +249 -0
  83. data/vendor/zstd/build/single_file_libs/create_single_file_decoder.sh +19 -0
  84. data/vendor/zstd/build/single_file_libs/create_single_file_library.sh +19 -0
  85. data/vendor/zstd/build/single_file_libs/examples/README.md +11 -0
  86. data/vendor/zstd/build/single_file_libs/examples/emscripten.c +340 -0
  87. data/vendor/zstd/build/single_file_libs/examples/roundtrip.c +83 -0
  88. data/vendor/zstd/build/single_file_libs/examples/shell.html +31 -0
  89. data/vendor/zstd/build/single_file_libs/examples/simple.c +75 -0
  90. data/vendor/zstd/build/single_file_libs/examples/testcard-dxt1.inl +2731 -0
  91. data/vendor/zstd/build/single_file_libs/examples/testcard-zstd.inl +261 -0
  92. data/vendor/zstd/build/single_file_libs/examples/testcard.png +0 -0
  93. data/vendor/zstd/build/single_file_libs/zstd-in.c +91 -0
  94. data/vendor/zstd/build/single_file_libs/zstddeclib-in.c +62 -0
  95. data/vendor/zstd/contrib/VS2005/README.md +3 -0
  96. data/vendor/zstd/contrib/VS2005/fullbench/fullbench.vcproj +440 -0
  97. data/vendor/zstd/contrib/VS2005/fuzzer/fuzzer.vcproj +488 -0
  98. data/vendor/zstd/contrib/VS2005/zstd/zstd.vcproj +552 -0
  99. data/vendor/zstd/contrib/VS2005/zstd.sln +55 -0
  100. data/vendor/zstd/contrib/VS2005/zstdlib/zstdlib.vcproj +546 -0
  101. data/vendor/zstd/contrib/cleanTabs +2 -0
  102. data/vendor/zstd/contrib/diagnose_corruption/Makefile +35 -0
  103. data/vendor/zstd/contrib/diagnose_corruption/check_flipped_bits.c +400 -0
  104. data/vendor/zstd/contrib/docker/Dockerfile +20 -0
  105. data/vendor/zstd/contrib/docker/README.md +20 -0
  106. data/vendor/zstd/contrib/externalSequenceProducer/Makefile +40 -0
  107. data/vendor/zstd/contrib/externalSequenceProducer/README.md +14 -0
  108. data/vendor/zstd/contrib/externalSequenceProducer/main.c +108 -0
  109. data/vendor/zstd/contrib/externalSequenceProducer/sequence_producer.c +80 -0
  110. data/vendor/zstd/contrib/externalSequenceProducer/sequence_producer.h +26 -0
  111. data/vendor/zstd/contrib/freestanding_lib/freestanding.py +774 -0
  112. data/vendor/zstd/contrib/gen_html/Makefile +51 -0
  113. data/vendor/zstd/contrib/gen_html/README.md +31 -0
  114. data/vendor/zstd/contrib/gen_html/gen-zstd-manual.sh +9 -0
  115. data/vendor/zstd/contrib/gen_html/gen_html.cpp +225 -0
  116. data/vendor/zstd/contrib/largeNbDicts/Makefile +58 -0
  117. data/vendor/zstd/contrib/largeNbDicts/README.md +33 -0
  118. data/vendor/zstd/contrib/largeNbDicts/largeNbDicts.c +1087 -0
  119. data/vendor/zstd/contrib/linux-kernel/Makefile +108 -0
  120. data/vendor/zstd/contrib/linux-kernel/README.md +14 -0
  121. data/vendor/zstd/contrib/linux-kernel/btrfs-benchmark.sh +104 -0
  122. data/vendor/zstd/contrib/linux-kernel/btrfs-extract-benchmark.sh +99 -0
  123. data/vendor/zstd/contrib/linux-kernel/decompress_sources.h +34 -0
  124. data/vendor/zstd/contrib/linux-kernel/linux.mk +44 -0
  125. data/vendor/zstd/contrib/linux-kernel/linux_zstd.h +691 -0
  126. data/vendor/zstd/contrib/linux-kernel/mem.h +262 -0
  127. data/vendor/zstd/contrib/linux-kernel/squashfs-benchmark.sh +39 -0
  128. data/vendor/zstd/contrib/linux-kernel/test/Makefile +49 -0
  129. data/vendor/zstd/contrib/linux-kernel/test/include/linux/compiler.h +23 -0
  130. data/vendor/zstd/contrib/linux-kernel/test/include/linux/errno.h +15 -0
  131. data/vendor/zstd/contrib/linux-kernel/test/include/linux/kernel.h +19 -0
  132. data/vendor/zstd/contrib/linux-kernel/test/include/linux/limits.h +15 -0
  133. data/vendor/zstd/contrib/linux-kernel/test/include/linux/math64.h +15 -0
  134. data/vendor/zstd/contrib/linux-kernel/test/include/linux/module.h +20 -0
  135. data/vendor/zstd/contrib/linux-kernel/test/include/linux/printk.h +15 -0
  136. data/vendor/zstd/contrib/linux-kernel/test/include/linux/stddef.h +15 -0
  137. data/vendor/zstd/contrib/linux-kernel/test/include/linux/swab.h +16 -0
  138. data/vendor/zstd/contrib/linux-kernel/test/include/linux/types.h +16 -0
  139. data/vendor/zstd/contrib/linux-kernel/test/include/linux/unaligned.h +187 -0
  140. data/vendor/zstd/contrib/linux-kernel/test/include/linux/xxhash.h +745 -0
  141. data/vendor/zstd/contrib/linux-kernel/test/macro-test.sh +44 -0
  142. data/vendor/zstd/contrib/linux-kernel/test/static_test.c +52 -0
  143. data/vendor/zstd/contrib/linux-kernel/test/test.c +229 -0
  144. data/vendor/zstd/contrib/linux-kernel/zstd_common_module.c +29 -0
  145. data/vendor/zstd/contrib/linux-kernel/zstd_compress_module.c +286 -0
  146. data/vendor/zstd/contrib/linux-kernel/zstd_decompress_module.c +141 -0
  147. data/vendor/zstd/contrib/linux-kernel/zstd_deps.h +121 -0
  148. data/vendor/zstd/contrib/match_finders/README.md +42 -0
  149. data/vendor/zstd/contrib/match_finders/zstd_edist.c +558 -0
  150. data/vendor/zstd/contrib/match_finders/zstd_edist.h +70 -0
  151. data/vendor/zstd/contrib/premake/premake4.lua +6 -0
  152. data/vendor/zstd/contrib/premake/zstd.lua +81 -0
  153. data/vendor/zstd/contrib/pzstd/BUCK +72 -0
  154. data/vendor/zstd/contrib/pzstd/ErrorHolder.h +54 -0
  155. data/vendor/zstd/contrib/pzstd/Logging.h +73 -0
  156. data/vendor/zstd/contrib/pzstd/Makefile +265 -0
  157. data/vendor/zstd/contrib/pzstd/Options.cpp +424 -0
  158. data/vendor/zstd/contrib/pzstd/Options.h +71 -0
  159. data/vendor/zstd/contrib/pzstd/Pzstd.cpp +626 -0
  160. data/vendor/zstd/contrib/pzstd/Pzstd.h +153 -0
  161. data/vendor/zstd/contrib/pzstd/README.md +56 -0
  162. data/vendor/zstd/contrib/pzstd/SkippableFrame.cpp +30 -0
  163. data/vendor/zstd/contrib/pzstd/SkippableFrame.h +64 -0
  164. data/vendor/zstd/contrib/pzstd/images/Cspeed.png +0 -0
  165. data/vendor/zstd/contrib/pzstd/images/Dspeed.png +0 -0
  166. data/vendor/zstd/contrib/pzstd/main.cpp +27 -0
  167. data/vendor/zstd/contrib/pzstd/test/BUCK +37 -0
  168. data/vendor/zstd/contrib/pzstd/test/OptionsTest.cpp +536 -0
  169. data/vendor/zstd/contrib/pzstd/test/PzstdTest.cpp +147 -0
  170. data/vendor/zstd/contrib/pzstd/test/RoundTrip.h +86 -0
  171. data/vendor/zstd/contrib/pzstd/test/RoundTripTest.cpp +84 -0
  172. data/vendor/zstd/contrib/pzstd/utils/BUCK +75 -0
  173. data/vendor/zstd/contrib/pzstd/utils/Buffer.h +99 -0
  174. data/vendor/zstd/contrib/pzstd/utils/FileSystem.h +96 -0
  175. data/vendor/zstd/contrib/pzstd/utils/Likely.h +28 -0
  176. data/vendor/zstd/contrib/pzstd/utils/Portability.h +16 -0
  177. data/vendor/zstd/contrib/pzstd/utils/Range.h +133 -0
  178. data/vendor/zstd/contrib/pzstd/utils/ResourcePool.h +96 -0
  179. data/vendor/zstd/contrib/pzstd/utils/ScopeGuard.h +50 -0
  180. data/vendor/zstd/contrib/pzstd/utils/ThreadPool.h +58 -0
  181. data/vendor/zstd/contrib/pzstd/utils/WorkQueue.h +182 -0
  182. data/vendor/zstd/contrib/pzstd/utils/test/BUCK +35 -0
  183. data/vendor/zstd/contrib/pzstd/utils/test/BufferTest.cpp +89 -0
  184. data/vendor/zstd/contrib/pzstd/utils/test/RangeTest.cpp +82 -0
  185. data/vendor/zstd/contrib/pzstd/utils/test/ResourcePoolTest.cpp +72 -0
  186. data/vendor/zstd/contrib/pzstd/utils/test/ScopeGuardTest.cpp +28 -0
  187. data/vendor/zstd/contrib/pzstd/utils/test/ThreadPoolTest.cpp +71 -0
  188. data/vendor/zstd/contrib/pzstd/utils/test/WorkQueueTest.cpp +282 -0
  189. data/vendor/zstd/contrib/recovery/Makefile +35 -0
  190. data/vendor/zstd/contrib/recovery/recover_directory.c +152 -0
  191. data/vendor/zstd/contrib/seekable_format/README.md +42 -0
  192. data/vendor/zstd/contrib/seekable_format/examples/Makefile +55 -0
  193. data/vendor/zstd/contrib/seekable_format/examples/parallel_compression.c +254 -0
  194. data/vendor/zstd/contrib/seekable_format/examples/parallel_processing.c +191 -0
  195. data/vendor/zstd/contrib/seekable_format/examples/seekable_compression.c +136 -0
  196. data/vendor/zstd/contrib/seekable_format/examples/seekable_decompression.c +141 -0
  197. data/vendor/zstd/contrib/seekable_format/examples/seekable_decompression_mem.c +147 -0
  198. data/vendor/zstd/contrib/seekable_format/tests/Makefile +58 -0
  199. data/vendor/zstd/contrib/seekable_format/tests/seekable_tests.c +375 -0
  200. data/vendor/zstd/contrib/seekable_format/zstd_seekable.h +226 -0
  201. data/vendor/zstd/contrib/seekable_format/zstd_seekable_compression_format.md +116 -0
  202. data/vendor/zstd/contrib/seekable_format/zstdseek_compress.c +365 -0
  203. data/vendor/zstd/contrib/seekable_format/zstdseek_decompress.c +600 -0
  204. data/vendor/zstd/contrib/seqBench/Makefile +58 -0
  205. data/vendor/zstd/contrib/seqBench/seqBench.c +53 -0
  206. data/vendor/zstd/contrib/snap/snapcraft.yaml +28 -0
  207. data/vendor/zstd/doc/README.md +26 -0
  208. data/vendor/zstd/doc/decompressor_errata.md +148 -0
  209. data/vendor/zstd/doc/decompressor_permissive.md +80 -0
  210. data/vendor/zstd/doc/educational_decoder/Makefile +62 -0
  211. data/vendor/zstd/doc/educational_decoder/README.md +36 -0
  212. data/vendor/zstd/doc/educational_decoder/harness.c +119 -0
  213. data/vendor/zstd/doc/educational_decoder/zstd_decompress.c +2323 -0
  214. data/vendor/zstd/doc/educational_decoder/zstd_decompress.h +61 -0
  215. data/vendor/zstd/doc/images/CSpeed2.png +0 -0
  216. data/vendor/zstd/doc/images/DCspeed5.png +0 -0
  217. data/vendor/zstd/doc/images/DSpeed3.png +0 -0
  218. data/vendor/zstd/doc/images/cdict_v136.png +0 -0
  219. data/vendor/zstd/doc/images/dict-cr.png +0 -0
  220. data/vendor/zstd/doc/images/dict-cs.png +0 -0
  221. data/vendor/zstd/doc/images/dict-ds.png +0 -0
  222. data/vendor/zstd/doc/images/zstd_cdict_v1_3_5.png +0 -0
  223. data/vendor/zstd/doc/images/zstd_logo86.png +0 -0
  224. data/vendor/zstd/doc/zstd_compression_format.md +1772 -0
  225. data/vendor/zstd/doc/zstd_manual.html +2244 -0
  226. data/vendor/zstd/examples/Makefile +93 -0
  227. data/vendor/zstd/examples/README.md +46 -0
  228. data/vendor/zstd/examples/common.h +246 -0
  229. data/vendor/zstd/examples/dictionary_compression.c +107 -0
  230. data/vendor/zstd/examples/dictionary_decompression.c +99 -0
  231. data/vendor/zstd/examples/multiple_simple_compression.c +116 -0
  232. data/vendor/zstd/examples/multiple_streaming_compression.c +133 -0
  233. data/vendor/zstd/examples/simple_compression.c +68 -0
  234. data/vendor/zstd/examples/simple_decompression.c +65 -0
  235. data/vendor/zstd/examples/streaming_compression.c +146 -0
  236. data/vendor/zstd/examples/streaming_compression_thread_pool.c +180 -0
  237. data/vendor/zstd/examples/streaming_decompression.c +100 -0
  238. data/vendor/zstd/examples/streaming_memory_usage.c +137 -0
  239. data/vendor/zstd/lib/BUCK +232 -0
  240. data/vendor/zstd/lib/Makefile +389 -0
  241. data/vendor/zstd/lib/README.md +267 -0
  242. data/vendor/zstd/lib/common/allocations.h +55 -0
  243. data/vendor/zstd/lib/common/bits.h +205 -0
  244. data/vendor/zstd/lib/common/bitstream.h +454 -0
  245. data/vendor/zstd/lib/common/compiler.h +482 -0
  246. data/vendor/zstd/lib/common/cpu.h +249 -0
  247. data/vendor/zstd/lib/common/debug.c +30 -0
  248. data/vendor/zstd/lib/common/debug.h +107 -0
  249. data/vendor/zstd/lib/common/debug.o +0 -0
  250. data/vendor/zstd/lib/common/entropy_common.c +340 -0
  251. data/vendor/zstd/lib/common/entropy_common.o +0 -0
  252. data/vendor/zstd/lib/common/error_private.c +64 -0
  253. data/vendor/zstd/lib/common/error_private.h +158 -0
  254. data/vendor/zstd/lib/common/error_private.o +0 -0
  255. data/vendor/zstd/lib/common/fse.h +625 -0
  256. data/vendor/zstd/lib/common/fse_decompress.c +315 -0
  257. data/vendor/zstd/lib/common/fse_decompress.o +0 -0
  258. data/vendor/zstd/lib/common/huf.h +277 -0
  259. data/vendor/zstd/lib/common/mem.h +422 -0
  260. data/vendor/zstd/lib/common/pool.c +371 -0
  261. data/vendor/zstd/lib/common/pool.h +81 -0
  262. data/vendor/zstd/lib/common/pool.o +0 -0
  263. data/vendor/zstd/lib/common/portability_macros.h +190 -0
  264. data/vendor/zstd/lib/common/threading.c +196 -0
  265. data/vendor/zstd/lib/common/threading.h +142 -0
  266. data/vendor/zstd/lib/common/threading.o +0 -0
  267. data/vendor/zstd/lib/common/xxhash.c +18 -0
  268. data/vendor/zstd/lib/common/xxhash.h +7094 -0
  269. data/vendor/zstd/lib/common/xxhash.o +0 -0
  270. data/vendor/zstd/lib/common/zstd_common.c +57 -0
  271. data/vendor/zstd/lib/common/zstd_common.o +0 -0
  272. data/vendor/zstd/lib/common/zstd_deps.h +123 -0
  273. data/vendor/zstd/lib/common/zstd_internal.h +326 -0
  274. data/vendor/zstd/lib/common/zstd_trace.h +156 -0
  275. data/vendor/zstd/lib/compress/clevels.h +134 -0
  276. data/vendor/zstd/lib/compress/fse_compress.c +625 -0
  277. data/vendor/zstd/lib/compress/fse_compress.o +0 -0
  278. data/vendor/zstd/lib/compress/hist.c +446 -0
  279. data/vendor/zstd/lib/compress/hist.h +86 -0
  280. data/vendor/zstd/lib/compress/hist.o +0 -0
  281. data/vendor/zstd/lib/compress/huf_compress.c +1465 -0
  282. data/vendor/zstd/lib/compress/huf_compress.o +0 -0
  283. data/vendor/zstd/lib/compress/zstd_compress.c +8362 -0
  284. data/vendor/zstd/lib/compress/zstd_compress.o +0 -0
  285. data/vendor/zstd/lib/compress/zstd_compress_internal.h +1636 -0
  286. data/vendor/zstd/lib/compress/zstd_compress_literals.c +235 -0
  287. data/vendor/zstd/lib/compress/zstd_compress_literals.h +39 -0
  288. data/vendor/zstd/lib/compress/zstd_compress_literals.o +0 -0
  289. data/vendor/zstd/lib/compress/zstd_compress_sequences.c +442 -0
  290. data/vendor/zstd/lib/compress/zstd_compress_sequences.h +55 -0
  291. data/vendor/zstd/lib/compress/zstd_compress_sequences.o +0 -0
  292. data/vendor/zstd/lib/compress/zstd_compress_superblock.c +688 -0
  293. data/vendor/zstd/lib/compress/zstd_compress_superblock.h +32 -0
  294. data/vendor/zstd/lib/compress/zstd_compress_superblock.o +0 -0
  295. data/vendor/zstd/lib/compress/zstd_cwksp.h +765 -0
  296. data/vendor/zstd/lib/compress/zstd_double_fast.c +778 -0
  297. data/vendor/zstd/lib/compress/zstd_double_fast.h +42 -0
  298. data/vendor/zstd/lib/compress/zstd_double_fast.o +0 -0
  299. data/vendor/zstd/lib/compress/zstd_fast.c +985 -0
  300. data/vendor/zstd/lib/compress/zstd_fast.h +30 -0
  301. data/vendor/zstd/lib/compress/zstd_fast.o +0 -0
  302. data/vendor/zstd/lib/compress/zstd_lazy.c +2243 -0
  303. data/vendor/zstd/lib/compress/zstd_lazy.h +193 -0
  304. data/vendor/zstd/lib/compress/zstd_lazy.o +0 -0
  305. data/vendor/zstd/lib/compress/zstd_ldm.c +745 -0
  306. data/vendor/zstd/lib/compress/zstd_ldm.h +109 -0
  307. data/vendor/zstd/lib/compress/zstd_ldm.o +0 -0
  308. data/vendor/zstd/lib/compress/zstd_ldm_geartab.h +106 -0
  309. data/vendor/zstd/lib/compress/zstd_opt.c +1572 -0
  310. data/vendor/zstd/lib/compress/zstd_opt.h +72 -0
  311. data/vendor/zstd/lib/compress/zstd_opt.o +0 -0
  312. data/vendor/zstd/lib/compress/zstd_preSplit.c +238 -0
  313. data/vendor/zstd/lib/compress/zstd_preSplit.h +33 -0
  314. data/vendor/zstd/lib/compress/zstd_preSplit.o +0 -0
  315. data/vendor/zstd/lib/compress/zstdmt_compress.c +1924 -0
  316. data/vendor/zstd/lib/compress/zstdmt_compress.h +102 -0
  317. data/vendor/zstd/lib/compress/zstdmt_compress.o +0 -0
  318. data/vendor/zstd/lib/decompress/huf_decompress.c +1953 -0
  319. data/vendor/zstd/lib/decompress/huf_decompress.o +0 -0
  320. data/vendor/zstd/lib/decompress/huf_decompress_amd64.S +766 -0
  321. data/vendor/zstd/lib/decompress/zstd_ddict.c +244 -0
  322. data/vendor/zstd/lib/decompress/zstd_ddict.h +44 -0
  323. data/vendor/zstd/lib/decompress/zstd_ddict.o +0 -0
  324. data/vendor/zstd/lib/decompress/zstd_decompress.c +2410 -0
  325. data/vendor/zstd/lib/decompress/zstd_decompress.o +0 -0
  326. data/vendor/zstd/lib/decompress/zstd_decompress_block.c +2311 -0
  327. data/vendor/zstd/lib/decompress/zstd_decompress_block.h +73 -0
  328. data/vendor/zstd/lib/decompress/zstd_decompress_block.o +0 -0
  329. data/vendor/zstd/lib/decompress/zstd_decompress_internal.h +240 -0
  330. data/vendor/zstd/lib/deprecated/zbuff.h +214 -0
  331. data/vendor/zstd/lib/deprecated/zbuff_common.c +26 -0
  332. data/vendor/zstd/lib/deprecated/zbuff_compress.c +167 -0
  333. data/vendor/zstd/lib/deprecated/zbuff_decompress.c +77 -0
  334. data/vendor/zstd/lib/dictBuilder/cover.c +1333 -0
  335. data/vendor/zstd/lib/dictBuilder/cover.h +152 -0
  336. data/vendor/zstd/lib/dictBuilder/divsufsort.c +1913 -0
  337. data/vendor/zstd/lib/dictBuilder/divsufsort.h +57 -0
  338. data/vendor/zstd/lib/dictBuilder/fastcover.c +765 -0
  339. data/vendor/zstd/lib/dictBuilder/zdict.c +1137 -0
  340. data/vendor/zstd/lib/dll/example/Makefile +48 -0
  341. data/vendor/zstd/lib/dll/example/README.md +63 -0
  342. data/vendor/zstd/lib/dll/example/build_package.bat +55 -0
  343. data/vendor/zstd/lib/dll/example/fullbench-dll.sln +25 -0
  344. data/vendor/zstd/lib/dll/example/fullbench-dll.vcxproj +181 -0
  345. data/vendor/zstd/lib/install_oses.mk +17 -0
  346. data/vendor/zstd/lib/legacy/zstd_legacy.h +452 -0
  347. data/vendor/zstd/lib/legacy/zstd_v01.c +2128 -0
  348. data/vendor/zstd/lib/legacy/zstd_v01.h +94 -0
  349. data/vendor/zstd/lib/legacy/zstd_v02.c +3465 -0
  350. data/vendor/zstd/lib/legacy/zstd_v02.h +93 -0
  351. data/vendor/zstd/lib/legacy/zstd_v03.c +3105 -0
  352. data/vendor/zstd/lib/legacy/zstd_v03.h +93 -0
  353. data/vendor/zstd/lib/legacy/zstd_v04.c +3598 -0
  354. data/vendor/zstd/lib/legacy/zstd_v04.h +142 -0
  355. data/vendor/zstd/lib/legacy/zstd_v05.c +4005 -0
  356. data/vendor/zstd/lib/legacy/zstd_v05.h +162 -0
  357. data/vendor/zstd/lib/legacy/zstd_v06.c +4110 -0
  358. data/vendor/zstd/lib/legacy/zstd_v06.h +172 -0
  359. data/vendor/zstd/lib/legacy/zstd_v07.c +4490 -0
  360. data/vendor/zstd/lib/legacy/zstd_v07.h +187 -0
  361. data/vendor/zstd/lib/libzstd.mk +238 -0
  362. data/vendor/zstd/lib/libzstd.pc.in +17 -0
  363. data/vendor/zstd/lib/module.modulemap +35 -0
  364. data/vendor/zstd/lib/zdict.h +481 -0
  365. data/vendor/zstd/lib/zstd.h +3209 -0
  366. data/vendor/zstd/lib/zstd_errors.h +107 -0
  367. data/vendor/zstd/programs/BUCK +44 -0
  368. data/vendor/zstd/programs/Makefile +445 -0
  369. data/vendor/zstd/programs/README.md +344 -0
  370. data/vendor/zstd/programs/benchfn.c +256 -0
  371. data/vendor/zstd/programs/benchfn.h +173 -0
  372. data/vendor/zstd/programs/benchzstd.c +1270 -0
  373. data/vendor/zstd/programs/benchzstd.h +191 -0
  374. data/vendor/zstd/programs/datagen.c +186 -0
  375. data/vendor/zstd/programs/datagen.h +38 -0
  376. data/vendor/zstd/programs/dibio.c +447 -0
  377. data/vendor/zstd/programs/dibio.h +39 -0
  378. data/vendor/zstd/programs/fileio.c +3717 -0
  379. data/vendor/zstd/programs/fileio.h +171 -0
  380. data/vendor/zstd/programs/fileio_asyncio.c +663 -0
  381. data/vendor/zstd/programs/fileio_asyncio.h +195 -0
  382. data/vendor/zstd/programs/fileio_common.h +121 -0
  383. data/vendor/zstd/programs/fileio_types.h +86 -0
  384. data/vendor/zstd/programs/lorem.c +285 -0
  385. data/vendor/zstd/programs/lorem.h +32 -0
  386. data/vendor/zstd/programs/platform.h +217 -0
  387. data/vendor/zstd/programs/timefn.c +170 -0
  388. data/vendor/zstd/programs/timefn.h +59 -0
  389. data/vendor/zstd/programs/util.c +1731 -0
  390. data/vendor/zstd/programs/util.h +364 -0
  391. data/vendor/zstd/programs/windres/verrsrc.h +17 -0
  392. data/vendor/zstd/programs/windres/zstd.rc +51 -0
  393. data/vendor/zstd/programs/windres/zstd32.res +0 -0
  394. data/vendor/zstd/programs/windres/zstd64.res +0 -0
  395. data/vendor/zstd/programs/zstd.1 +580 -0
  396. data/vendor/zstd/programs/zstd.1.md +714 -0
  397. data/vendor/zstd/programs/zstdcli.c +1675 -0
  398. data/vendor/zstd/programs/zstdcli_trace.c +173 -0
  399. data/vendor/zstd/programs/zstdcli_trace.h +24 -0
  400. data/vendor/zstd/programs/zstdgrep +134 -0
  401. data/vendor/zstd/programs/zstdgrep.1 +26 -0
  402. data/vendor/zstd/programs/zstdgrep.1.md +30 -0
  403. data/vendor/zstd/programs/zstdless +8 -0
  404. data/vendor/zstd/programs/zstdless.1 +14 -0
  405. data/vendor/zstd/programs/zstdless.1.md +16 -0
  406. data/vendor/zstd/tests/DEPRECATED-test-zstd-speed.py +378 -0
  407. data/vendor/zstd/tests/Makefile +485 -0
  408. data/vendor/zstd/tests/README.md +184 -0
  409. data/vendor/zstd/tests/automated_benchmarking.py +326 -0
  410. data/vendor/zstd/tests/checkTag.c +65 -0
  411. data/vendor/zstd/tests/check_size.py +31 -0
  412. data/vendor/zstd/tests/cli-tests/README.md +258 -0
  413. data/vendor/zstd/tests/cli-tests/basic/args.sh +10 -0
  414. data/vendor/zstd/tests/cli-tests/basic/args.sh.exit +1 -0
  415. data/vendor/zstd/tests/cli-tests/basic/args.sh.stderr.glob +28 -0
  416. data/vendor/zstd/tests/cli-tests/basic/help.sh +10 -0
  417. data/vendor/zstd/tests/cli-tests/basic/help.sh.stdout.glob +34 -0
  418. data/vendor/zstd/tests/cli-tests/basic/memlimit.sh +40 -0
  419. data/vendor/zstd/tests/cli-tests/basic/memlimit.sh.stderr.exact +13 -0
  420. data/vendor/zstd/tests/cli-tests/basic/memlimit.sh.stdout.exact +13 -0
  421. data/vendor/zstd/tests/cli-tests/basic/output_dir.sh +7 -0
  422. data/vendor/zstd/tests/cli-tests/basic/output_dir.sh.stderr.exact +2 -0
  423. data/vendor/zstd/tests/cli-tests/basic/output_dir.sh.stdout.exact +2 -0
  424. data/vendor/zstd/tests/cli-tests/basic/version.sh +6 -0
  425. data/vendor/zstd/tests/cli-tests/basic/version.sh.stdout.glob +2 -0
  426. data/vendor/zstd/tests/cli-tests/bin/cmp_size +44 -0
  427. data/vendor/zstd/tests/cli-tests/bin/datagen +3 -0
  428. data/vendor/zstd/tests/cli-tests/bin/die +4 -0
  429. data/vendor/zstd/tests/cli-tests/bin/println +2 -0
  430. data/vendor/zstd/tests/cli-tests/bin/unzstd +1 -0
  431. data/vendor/zstd/tests/cli-tests/bin/zstd +9 -0
  432. data/vendor/zstd/tests/cli-tests/bin/zstdcat +1 -0
  433. data/vendor/zstd/tests/cli-tests/bin/zstdgrep +2 -0
  434. data/vendor/zstd/tests/cli-tests/bin/zstdless +2 -0
  435. data/vendor/zstd/tests/cli-tests/cltools/setup +6 -0
  436. data/vendor/zstd/tests/cli-tests/cltools/zstdgrep.sh +8 -0
  437. data/vendor/zstd/tests/cli-tests/cltools/zstdgrep.sh.exit +1 -0
  438. data/vendor/zstd/tests/cli-tests/cltools/zstdgrep.sh.stderr.exact +1 -0
  439. data/vendor/zstd/tests/cli-tests/cltools/zstdgrep.sh.stdout.glob +4 -0
  440. data/vendor/zstd/tests/cli-tests/cltools/zstdless.sh +10 -0
  441. data/vendor/zstd/tests/cli-tests/cltools/zstdless.sh.stderr.exact +2 -0
  442. data/vendor/zstd/tests/cli-tests/cltools/zstdless.sh.stdout.glob +5 -0
  443. data/vendor/zstd/tests/cli-tests/common/format.sh +19 -0
  444. data/vendor/zstd/tests/cli-tests/common/mtime.sh +13 -0
  445. data/vendor/zstd/tests/cli-tests/common/permissions.sh +18 -0
  446. data/vendor/zstd/tests/cli-tests/common/platform.sh +47 -0
  447. data/vendor/zstd/tests/cli-tests/compression/adapt.sh +14 -0
  448. data/vendor/zstd/tests/cli-tests/compression/basic.sh +36 -0
  449. data/vendor/zstd/tests/cli-tests/compression/compress-literals.sh +10 -0
  450. data/vendor/zstd/tests/cli-tests/compression/format.sh +16 -0
  451. data/vendor/zstd/tests/cli-tests/compression/golden.sh +16 -0
  452. data/vendor/zstd/tests/cli-tests/compression/gzip-compat.sh +17 -0
  453. data/vendor/zstd/tests/cli-tests/compression/levels.sh +75 -0
  454. data/vendor/zstd/tests/cli-tests/compression/levels.sh.stderr.exact +80 -0
  455. data/vendor/zstd/tests/cli-tests/compression/long-distance-matcher.sh +7 -0
  456. data/vendor/zstd/tests/cli-tests/compression/multi-threaded.sh +22 -0
  457. data/vendor/zstd/tests/cli-tests/compression/multi-threaded.sh.stderr.exact +21 -0
  458. data/vendor/zstd/tests/cli-tests/compression/multiple-files.sh +21 -0
  459. data/vendor/zstd/tests/cli-tests/compression/multiple-files.sh.stdout.exact +12 -0
  460. data/vendor/zstd/tests/cli-tests/compression/row-match-finder.sh +7 -0
  461. data/vendor/zstd/tests/cli-tests/compression/setup +7 -0
  462. data/vendor/zstd/tests/cli-tests/compression/stream-size.sh +7 -0
  463. data/vendor/zstd/tests/cli-tests/compression/verbose-wlog.sh +11 -0
  464. data/vendor/zstd/tests/cli-tests/compression/verbose-wlog.sh.stderr.glob +5 -0
  465. data/vendor/zstd/tests/cli-tests/compression/verbose-wlog.sh.stdout.glob +5 -0
  466. data/vendor/zstd/tests/cli-tests/compression/window-resize.sh +9 -0
  467. data/vendor/zstd/tests/cli-tests/compression/window-resize.sh.stderr.ignore +0 -0
  468. data/vendor/zstd/tests/cli-tests/compression/window-resize.sh.stdout.glob +3 -0
  469. data/vendor/zstd/tests/cli-tests/decompression/detectErrors.sh +11 -0
  470. data/vendor/zstd/tests/cli-tests/decompression/golden.sh +7 -0
  471. data/vendor/zstd/tests/cli-tests/decompression/pass-through.sh +57 -0
  472. data/vendor/zstd/tests/cli-tests/decompression/pass-through.sh.stderr.exact +11 -0
  473. data/vendor/zstd/tests/cli-tests/decompression/pass-through.sh.stdout.exact +25 -0
  474. data/vendor/zstd/tests/cli-tests/determinism/basic.sh +36 -0
  475. data/vendor/zstd/tests/cli-tests/determinism/basic.sh.stderr.exact +0 -0
  476. data/vendor/zstd/tests/cli-tests/determinism/basic.sh.stdout.exact +880 -0
  477. data/vendor/zstd/tests/cli-tests/determinism/multithread.sh +45 -0
  478. data/vendor/zstd/tests/cli-tests/determinism/multithread.sh.stderr.exact +0 -0
  479. data/vendor/zstd/tests/cli-tests/determinism/multithread.sh.stdout.exact +260 -0
  480. data/vendor/zstd/tests/cli-tests/determinism/reuse.sh +44 -0
  481. data/vendor/zstd/tests/cli-tests/determinism/reuse.sh.stderr.exact +0 -0
  482. data/vendor/zstd/tests/cli-tests/determinism/reuse.sh.stdout.exact +19 -0
  483. data/vendor/zstd/tests/cli-tests/determinism/setup +5 -0
  484. data/vendor/zstd/tests/cli-tests/determinism/setup_once +30 -0
  485. data/vendor/zstd/tests/cli-tests/dict-builder/empty-input.sh +9 -0
  486. data/vendor/zstd/tests/cli-tests/dict-builder/empty-input.sh.stderr.exact +1 -0
  487. data/vendor/zstd/tests/cli-tests/dict-builder/no-inputs.sh +3 -0
  488. data/vendor/zstd/tests/cli-tests/dict-builder/no-inputs.sh.exit +1 -0
  489. data/vendor/zstd/tests/cli-tests/dict-builder/no-inputs.sh.stderr.exact +5 -0
  490. data/vendor/zstd/tests/cli-tests/dictionaries/dictionary-mismatch.sh +29 -0
  491. data/vendor/zstd/tests/cli-tests/dictionaries/dictionary-mismatch.sh.stderr.exact +7 -0
  492. data/vendor/zstd/tests/cli-tests/dictionaries/golden.sh +9 -0
  493. data/vendor/zstd/tests/cli-tests/dictionaries/setup +6 -0
  494. data/vendor/zstd/tests/cli-tests/dictionaries/setup_once +24 -0
  495. data/vendor/zstd/tests/cli-tests/file-handling/directory-mirror.sh +49 -0
  496. data/vendor/zstd/tests/cli-tests/file-handling/directory-mirror.sh.stderr.exact +0 -0
  497. data/vendor/zstd/tests/cli-tests/file-handling/directory-mirror.sh.stdout.exact +0 -0
  498. data/vendor/zstd/tests/cli-tests/file-stat/compress-file-to-dir-without-write-perm.sh +12 -0
  499. data/vendor/zstd/tests/cli-tests/file-stat/compress-file-to-dir-without-write-perm.sh.stderr.exact +30 -0
  500. data/vendor/zstd/tests/cli-tests/file-stat/compress-file-to-file.sh +9 -0
  501. data/vendor/zstd/tests/cli-tests/file-stat/compress-file-to-file.sh.stderr.glob +46 -0
  502. data/vendor/zstd/tests/cli-tests/file-stat/compress-file-to-stdout.sh +8 -0
  503. data/vendor/zstd/tests/cli-tests/file-stat/compress-file-to-stdout.sh.stderr.exact +24 -0
  504. data/vendor/zstd/tests/cli-tests/file-stat/compress-stdin-to-file.sh +8 -0
  505. data/vendor/zstd/tests/cli-tests/file-stat/compress-stdin-to-file.sh.stderr.glob +28 -0
  506. data/vendor/zstd/tests/cli-tests/file-stat/compress-stdin-to-stdout.sh +8 -0
  507. data/vendor/zstd/tests/cli-tests/file-stat/compress-stdin-to-stdout.sh.stderr.exact +18 -0
  508. data/vendor/zstd/tests/cli-tests/file-stat/decompress-file-to-file.sh +8 -0
  509. data/vendor/zstd/tests/cli-tests/file-stat/decompress-file-to-file.sh.stderr.glob +42 -0
  510. data/vendor/zstd/tests/cli-tests/file-stat/decompress-file-to-stdout.sh +7 -0
  511. data/vendor/zstd/tests/cli-tests/file-stat/decompress-file-to-stdout.sh.stderr.exact +18 -0
  512. data/vendor/zstd/tests/cli-tests/file-stat/decompress-stdin-to-file.sh +7 -0
  513. data/vendor/zstd/tests/cli-tests/file-stat/decompress-stdin-to-file.sh.stderr.glob +24 -0
  514. data/vendor/zstd/tests/cli-tests/file-stat/decompress-stdin-to-stdout.sh +7 -0
  515. data/vendor/zstd/tests/cli-tests/file-stat/decompress-stdin-to-stdout.sh.stderr.exact +14 -0
  516. data/vendor/zstd/tests/cli-tests/progress/no-progress.sh +46 -0
  517. data/vendor/zstd/tests/cli-tests/progress/no-progress.sh.stderr.glob +96 -0
  518. data/vendor/zstd/tests/cli-tests/progress/progress.sh +41 -0
  519. data/vendor/zstd/tests/cli-tests/progress/progress.sh.stderr.glob +62 -0
  520. data/vendor/zstd/tests/cli-tests/run.py +732 -0
  521. data/vendor/zstd/tests/cli-tests/zstd-symlinks/setup +6 -0
  522. data/vendor/zstd/tests/cli-tests/zstd-symlinks/zstdcat.sh +12 -0
  523. data/vendor/zstd/tests/cli-tests/zstd-symlinks/zstdcat.sh.stdout.exact +8 -0
  524. data/vendor/zstd/tests/datagencli.c +149 -0
  525. data/vendor/zstd/tests/decodecorpus.c +1998 -0
  526. data/vendor/zstd/tests/dict-files/zero-weight-dict +0 -0
  527. data/vendor/zstd/tests/external_matchfinder.c +140 -0
  528. data/vendor/zstd/tests/external_matchfinder.h +39 -0
  529. data/vendor/zstd/tests/fullbench.c +1210 -0
  530. data/vendor/zstd/tests/fuzz/Makefile +278 -0
  531. data/vendor/zstd/tests/fuzz/README.md +161 -0
  532. data/vendor/zstd/tests/fuzz/block_decompress.c +53 -0
  533. data/vendor/zstd/tests/fuzz/block_round_trip.c +103 -0
  534. data/vendor/zstd/tests/fuzz/decompress_cross_format.c +130 -0
  535. data/vendor/zstd/tests/fuzz/decompress_dstSize_tooSmall.c +74 -0
  536. data/vendor/zstd/tests/fuzz/dictionary_decompress.c +77 -0
  537. data/vendor/zstd/tests/fuzz/dictionary_loader.c +106 -0
  538. data/vendor/zstd/tests/fuzz/dictionary_round_trip.c +155 -0
  539. data/vendor/zstd/tests/fuzz/dictionary_stream_round_trip.c +209 -0
  540. data/vendor/zstd/tests/fuzz/fse_read_ncount.c +100 -0
  541. data/vendor/zstd/tests/fuzz/fuzz.h +57 -0
  542. data/vendor/zstd/tests/fuzz/fuzz.py +910 -0
  543. data/vendor/zstd/tests/fuzz/fuzz_data_producer.c +95 -0
  544. data/vendor/zstd/tests/fuzz/fuzz_data_producer.h +66 -0
  545. data/vendor/zstd/tests/fuzz/fuzz_helpers.c +47 -0
  546. data/vendor/zstd/tests/fuzz/fuzz_helpers.h +82 -0
  547. data/vendor/zstd/tests/fuzz/fuzz_third_party_seq_prod.h +116 -0
  548. data/vendor/zstd/tests/fuzz/generate_sequences.c +88 -0
  549. data/vendor/zstd/tests/fuzz/huf_decompress.c +68 -0
  550. data/vendor/zstd/tests/fuzz/huf_round_trip.c +137 -0
  551. data/vendor/zstd/tests/fuzz/raw_dictionary_round_trip.c +119 -0
  552. data/vendor/zstd/tests/fuzz/regression_driver.c +90 -0
  553. data/vendor/zstd/tests/fuzz/seekable_roundtrip.c +88 -0
  554. data/vendor/zstd/tests/fuzz/seq_prod_fuzz_example/Makefile +16 -0
  555. data/vendor/zstd/tests/fuzz/seq_prod_fuzz_example/README.md +12 -0
  556. data/vendor/zstd/tests/fuzz/seq_prod_fuzz_example/example_seq_prod.c +52 -0
  557. data/vendor/zstd/tests/fuzz/sequence_compression_api.c +452 -0
  558. data/vendor/zstd/tests/fuzz/simple_compress.c +60 -0
  559. data/vendor/zstd/tests/fuzz/simple_decompress.c +59 -0
  560. data/vendor/zstd/tests/fuzz/simple_round_trip.c +182 -0
  561. data/vendor/zstd/tests/fuzz/stream_decompress.c +119 -0
  562. data/vendor/zstd/tests/fuzz/stream_round_trip.c +218 -0
  563. data/vendor/zstd/tests/fuzz/zstd_frame_info.c +43 -0
  564. data/vendor/zstd/tests/fuzz/zstd_helpers.c +208 -0
  565. data/vendor/zstd/tests/fuzz/zstd_helpers.h +56 -0
  566. data/vendor/zstd/tests/fuzzer.c +5482 -0
  567. data/vendor/zstd/tests/golden-compression/PR-3517-block-splitter-corruption-test +1 -0
  568. data/vendor/zstd/tests/golden-compression/http +1 -0
  569. data/vendor/zstd/tests/golden-compression/huffman-compressed-larger +0 -0
  570. data/vendor/zstd/tests/golden-compression/large-literal-and-match-lengths +0 -0
  571. data/vendor/zstd/tests/golden-decompression/block-128k.zst +0 -0
  572. data/vendor/zstd/tests/golden-decompression/empty-block.zst +0 -0
  573. data/vendor/zstd/tests/golden-decompression/rle-first-block.zst +0 -0
  574. data/vendor/zstd/tests/golden-decompression/zeroSeq_2B.zst +0 -0
  575. data/vendor/zstd/tests/golden-decompression-errors/off0.bin.zst +0 -0
  576. data/vendor/zstd/tests/golden-decompression-errors/truncated_huff_state.zst +0 -0
  577. data/vendor/zstd/tests/golden-decompression-errors/zeroSeq_extraneous.zst +0 -0
  578. data/vendor/zstd/tests/golden-dictionaries/http-dict-missing-symbols +0 -0
  579. data/vendor/zstd/tests/gzip/Makefile +45 -0
  580. data/vendor/zstd/tests/gzip/gzip-env.sh +46 -0
  581. data/vendor/zstd/tests/gzip/helin-segv.sh +31 -0
  582. data/vendor/zstd/tests/gzip/help-version.sh +270 -0
  583. data/vendor/zstd/tests/gzip/hufts-segv.gz +0 -0
  584. data/vendor/zstd/tests/gzip/hufts.sh +34 -0
  585. data/vendor/zstd/tests/gzip/init.cfg +5 -0
  586. data/vendor/zstd/tests/gzip/init.sh +616 -0
  587. data/vendor/zstd/tests/gzip/keep.sh +51 -0
  588. data/vendor/zstd/tests/gzip/list.sh +31 -0
  589. data/vendor/zstd/tests/gzip/memcpy-abuse.sh +34 -0
  590. data/vendor/zstd/tests/gzip/mixed.sh +68 -0
  591. data/vendor/zstd/tests/gzip/null-suffix-clobber.sh +35 -0
  592. data/vendor/zstd/tests/gzip/stdin.sh +31 -0
  593. data/vendor/zstd/tests/gzip/test-driver.sh +150 -0
  594. data/vendor/zstd/tests/gzip/trailing-nul.sh +37 -0
  595. data/vendor/zstd/tests/gzip/unpack-invalid.sh +36 -0
  596. data/vendor/zstd/tests/gzip/z-suffix.sh +30 -0
  597. data/vendor/zstd/tests/gzip/zdiff.sh +48 -0
  598. data/vendor/zstd/tests/gzip/zgrep-context.sh +47 -0
  599. data/vendor/zstd/tests/gzip/zgrep-f.sh +43 -0
  600. data/vendor/zstd/tests/gzip/zgrep-signal.sh +64 -0
  601. data/vendor/zstd/tests/gzip/znew-k.sh +40 -0
  602. data/vendor/zstd/tests/invalidDictionaries.c +61 -0
  603. data/vendor/zstd/tests/largeDictionary.c +131 -0
  604. data/vendor/zstd/tests/legacy.c +262 -0
  605. data/vendor/zstd/tests/libzstd_builds.sh +104 -0
  606. data/vendor/zstd/tests/longmatch.c +123 -0
  607. data/vendor/zstd/tests/loremOut.c +50 -0
  608. data/vendor/zstd/tests/loremOut.h +15 -0
  609. data/vendor/zstd/tests/paramgrill.c +2965 -0
  610. data/vendor/zstd/tests/playTests.sh +1926 -0
  611. data/vendor/zstd/tests/poolTests.c +271 -0
  612. data/vendor/zstd/tests/rateLimiter.py +41 -0
  613. data/vendor/zstd/tests/regression/Makefile +60 -0
  614. data/vendor/zstd/tests/regression/README.md +28 -0
  615. data/vendor/zstd/tests/regression/config.c +404 -0
  616. data/vendor/zstd/tests/regression/config.h +91 -0
  617. data/vendor/zstd/tests/regression/data.c +631 -0
  618. data/vendor/zstd/tests/regression/data.h +121 -0
  619. data/vendor/zstd/tests/regression/levels.h +59 -0
  620. data/vendor/zstd/tests/regression/method.c +701 -0
  621. data/vendor/zstd/tests/regression/method.h +65 -0
  622. data/vendor/zstd/tests/regression/result.c +30 -0
  623. data/vendor/zstd/tests/regression/result.h +103 -0
  624. data/vendor/zstd/tests/regression/results.csv +1480 -0
  625. data/vendor/zstd/tests/regression/test.c +362 -0
  626. data/vendor/zstd/tests/roundTripCrash.c +241 -0
  627. data/vendor/zstd/tests/seqgen.c +260 -0
  628. data/vendor/zstd/tests/seqgen.h +58 -0
  629. data/vendor/zstd/tests/test-license.py +156 -0
  630. data/vendor/zstd/tests/test-variants.sh +115 -0
  631. data/vendor/zstd/tests/test-zstd-versions.py +308 -0
  632. data/vendor/zstd/tests/test_process_substitution.bash +92 -0
  633. data/vendor/zstd/tests/zstreamtest.c +3467 -0
  634. data/vendor/zstd/zlibWrapper/BUCK +22 -0
  635. data/vendor/zstd/zlibWrapper/Makefile +120 -0
  636. data/vendor/zstd/zlibWrapper/README.md +163 -0
  637. data/vendor/zstd/zlibWrapper/examples/example.c +598 -0
  638. data/vendor/zstd/zlibWrapper/examples/example_original.c +599 -0
  639. data/vendor/zstd/zlibWrapper/examples/fitblk.c +254 -0
  640. data/vendor/zstd/zlibWrapper/examples/fitblk_original.c +233 -0
  641. data/vendor/zstd/zlibWrapper/examples/minigzip.c +605 -0
  642. data/vendor/zstd/zlibWrapper/examples/zwrapbench.c +1018 -0
  643. data/vendor/zstd/zlibWrapper/gzclose.c +26 -0
  644. data/vendor/zstd/zlibWrapper/gzcompatibility.h +68 -0
  645. data/vendor/zstd/zlibWrapper/gzguts.h +229 -0
  646. data/vendor/zstd/zlibWrapper/gzlib.c +587 -0
  647. data/vendor/zstd/zlibWrapper/gzread.c +637 -0
  648. data/vendor/zstd/zlibWrapper/gzwrite.c +632 -0
  649. data/vendor/zstd/zlibWrapper/zstd_zlibwrapper.c +1200 -0
  650. data/vendor/zstd/zlibWrapper/zstd_zlibwrapper.h +91 -0
  651. metadata +738 -0
@@ -0,0 +1,1210 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under both the BSD-style license (found in the
6
+ * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7
+ * in the COPYING file in the root directory of this source tree).
8
+ * You may select, at your option, one of the above-listed licenses.
9
+ */
10
+
11
+
12
+ /*_************************************
13
+ * Includes
14
+ **************************************/
15
+ #define _CRT_SECURE_NO_WARNINGS /* disable Visual warning that it doesn't like fopen() */
16
+ #define ZSTD_DISABLE_DEPRECATE_WARNINGS /* No deprecation warnings, we still bench some deprecated functions */
17
+ #include <limits.h>
18
+ #include "util.h" /* Compiler options, UTIL_GetFileSize */
19
+ #include <stdlib.h> /* malloc */
20
+ #include <stdio.h> /* fprintf, fopen, ftello64 */
21
+ #include <assert.h>
22
+
23
+ #include "mem.h" /* U32 */
24
+ #include "compress/zstd_compress_internal.h"
25
+ #ifndef ZSTD_DLL_IMPORT
26
+ #include "zstd_internal.h" /* ZSTD_decodeSeqHeaders, ZSTD_blockHeaderSize, ZSTD_getcBlockSize, blockType_e, KB, MB */
27
+ #include "decompress/zstd_decompress_internal.h" /* ZSTD_DCtx struct */
28
+ #else
29
+ #define KB *(1 <<10)
30
+ #define MB *(1 <<20)
31
+ #define GB *(1U<<30)
32
+ typedef enum { bt_raw, bt_rle, bt_compressed, bt_reserved } blockType_e;
33
+ #endif
34
+ #define ZSTD_STATIC_LINKING_ONLY /* ZSTD_compressBegin, ZSTD_compressContinue, etc. */
35
+ #include "zstd.h" /* ZSTD_versionString */
36
+ #include "util.h" /* time functions */
37
+ #include "datagen.h"
38
+ #include "lorem.h"
39
+ #include "benchfn.h" /* CustomBench */
40
+ #include "benchzstd.h" /* MB_UNIT */
41
+
42
+ /*_************************************
43
+ * Constants
44
+ **************************************/
45
+ #define PROGRAM_DESCRIPTION "Zstandard speed analyzer"
46
+ #define AUTHOR "Yann Collet"
47
+ #define WELCOME_MESSAGE "*** %s %s %i-bits, by %s (%s) ***\n", PROGRAM_DESCRIPTION, ZSTD_versionString(), (int)(sizeof(void*)*8), AUTHOR, __DATE__
48
+
49
+ #define NBLOOPS 6
50
+ #define TIMELOOP_S 2
51
+
52
+ #define MAX_MEM (1984 MB)
53
+
54
+ #define DEFAULT_CLEVEL 1
55
+
56
+ #define COMPRESSIBILITY_DEFAULT (-1.0)
57
+ static const size_t kSampleSizeDefault = 10000000;
58
+
59
+ #define TIMELOOP_NANOSEC (1*1000000000ULL) /* 1 second */
60
+
61
+
62
+ /*_************************************
63
+ * Macros
64
+ **************************************/
65
+ #define DISPLAY(...) fprintf(stderr, __VA_ARGS__)
66
+
67
+ #define CONTROL(c) { if (!(c)) { abort(); } } /* like assert(), but cannot be disabled */
68
+
69
+
70
+ /*_************************************
71
+ * Benchmark Parameters
72
+ **************************************/
73
+ static unsigned g_nbIterations = NBLOOPS;
74
+
75
+
76
+ /*_*******************************************************
77
+ * Private functions
78
+ *********************************************************/
79
+ static size_t BMK_findMaxMem(U64 requiredMem)
80
+ {
81
+ size_t const step = 64 MB;
82
+ void* testmem = NULL;
83
+
84
+ requiredMem = (((requiredMem >> 26) + 1) << 26);
85
+ if (requiredMem > MAX_MEM) requiredMem = MAX_MEM;
86
+
87
+ requiredMem += step;
88
+ do {
89
+ testmem = malloc ((size_t)requiredMem);
90
+ requiredMem -= step;
91
+ } while (!testmem);
92
+
93
+ free (testmem);
94
+ return (size_t) requiredMem;
95
+ }
96
+
97
+
98
+ /*_*******************************************************
99
+ * Benchmark wrappers
100
+ *********************************************************/
101
+
102
+ static ZSTD_CCtx* g_zcc = NULL;
103
+ static size_t
104
+ local_ZSTD_compress(const void* src, size_t srcSize,
105
+ void* dst, size_t dstSize,
106
+ void* payload)
107
+ {
108
+ ZSTD_parameters p;
109
+ ZSTD_frameParameters f = { 1 /* contentSizeHeader*/, 0, 0 };
110
+ p.fParams = f;
111
+ p.cParams = *(ZSTD_compressionParameters*)payload;
112
+ return ZSTD_compress_advanced (g_zcc, dst, dstSize, src, srcSize, NULL ,0, p);
113
+ }
114
+
115
+ static size_t
116
+ local_ZSTD_compress_freshCCtx(const void* src, size_t srcSize,
117
+ void* dst, size_t dstSize,
118
+ void* payload)
119
+ {
120
+ ZSTD_parameters p;
121
+ ZSTD_frameParameters f = { 1 /* contentSizeHeader*/, 0, 0 };
122
+ p.fParams = f;
123
+ p.cParams = *(ZSTD_compressionParameters*)payload;
124
+ if (g_zcc != NULL) ZSTD_freeCCtx(g_zcc);
125
+ g_zcc = ZSTD_createCCtx();
126
+ assert(g_zcc != NULL);
127
+ { size_t const r = ZSTD_compress_advanced (g_zcc, dst, dstSize, src, srcSize, NULL ,0, p);
128
+ ZSTD_freeCCtx(g_zcc);
129
+ g_zcc = NULL;
130
+ return r;
131
+ }
132
+ }
133
+
134
+ typedef struct {
135
+ void* prepBuffer;
136
+ size_t prepSize;
137
+ void* dst;
138
+ size_t dstCapacity;
139
+ size_t fixedOrigSize; /* optional, 0 means "no modification" */
140
+ } PrepResult;
141
+ #define PREPRESULT_INIT { NULL, 0, NULL, 0, 0 }
142
+
143
+ static PrepResult prepDecompress(const void* src, size_t srcSize, int cLevel)
144
+ {
145
+ size_t prepCapacity = ZSTD_compressBound(srcSize);
146
+ void* prepBuffer = malloc(prepCapacity);
147
+ size_t cSize = ZSTD_compress(prepBuffer, prepCapacity, src, srcSize, cLevel);
148
+ void* dst = malloc(srcSize);
149
+ PrepResult r = PREPRESULT_INIT;
150
+ assert(dst != NULL);
151
+ r.prepBuffer = prepBuffer;
152
+ r.prepSize = cSize;
153
+ r.dst = dst;
154
+ r.dstCapacity = srcSize;
155
+ return r;
156
+ }
157
+
158
+ static size_t local_ZSTD_decompress(const void* src, size_t srcSize,
159
+ void* dst, size_t dstSize,
160
+ void* unused)
161
+ {
162
+ (void)unused;
163
+ return ZSTD_decompress(dst, dstSize, src, srcSize);
164
+ }
165
+
166
+ static ZSTD_DCtx* g_zdc = NULL; /* will be initialized within benchMem */
167
+ static size_t local_ZSTD_decompressDCtx(const void* src, size_t srcSize,
168
+ void* dst, size_t dstSize,
169
+ void* unused)
170
+ {
171
+ (void)unused;
172
+ return ZSTD_decompressDCtx(g_zdc, dst, dstSize, src, srcSize);
173
+ }
174
+
175
+ #ifndef ZSTD_DLL_IMPORT
176
+
177
+ static PrepResult prepLiterals(const void* src, size_t srcSize, int cLevel)
178
+ {
179
+ PrepResult r = PREPRESULT_INIT;
180
+ size_t dstCapacity = srcSize;
181
+ void* dst = malloc(dstCapacity);
182
+ void* prepBuffer;
183
+ size_t prepSize = ZSTD_compress(dst, dstCapacity, src, srcSize, cLevel);
184
+ size_t frameHeaderSize = ZSTD_frameHeaderSize(dst, ZSTD_FRAMEHEADERSIZE_PREFIX(ZSTD_f_zstd1));
185
+ CONTROL(!ZSTD_isError(frameHeaderSize));
186
+ /* check block is compressible, hence contains a literals section */
187
+ { blockProperties_t bp;
188
+ ZSTD_getcBlockSize((char*)dst+frameHeaderSize, dstCapacity, &bp); /* Get 1st block type */
189
+ if (bp.blockType != bt_compressed) {
190
+ DISPLAY("no compressed literals\n");
191
+ return r;
192
+ } }
193
+ { size_t const skippedSize = frameHeaderSize + ZSTD_blockHeaderSize;
194
+ prepSize -= skippedSize;
195
+ prepBuffer = malloc(prepSize);
196
+ CONTROL(prepBuffer != NULL);
197
+ memmove(prepBuffer, (char*)dst+skippedSize, prepSize);
198
+ }
199
+ ZSTD_decompressBegin(g_zdc);
200
+ r.prepBuffer = prepBuffer;
201
+ r.prepSize = prepSize;
202
+ r.dst = dst;
203
+ r.dstCapacity = dstCapacity;
204
+ r.fixedOrigSize = srcSize > 128 KB ? 128 KB : srcSize; /* speed relative to block */
205
+ return r;
206
+ }
207
+
208
+ extern size_t ZSTD_decodeLiteralsBlock_wrapper(ZSTD_DCtx* dctx,
209
+ const void* src, size_t srcSize,
210
+ void* dst, size_t dstCapacity);
211
+ static size_t
212
+ local_ZSTD_decodeLiteralsBlock(const void* src, size_t srcSize, void* dst, size_t dstCapacity, void* unused)
213
+ {
214
+ (void)unused;
215
+ return ZSTD_decodeLiteralsBlock_wrapper(g_zdc, src, srcSize, dst, dstCapacity);
216
+ }
217
+
218
+ FORCE_NOINLINE size_t ZSTD_decodeLiteralsHeader(ZSTD_DCtx* dctx, void const* src, size_t srcSize)
219
+ {
220
+ RETURN_ERROR_IF(srcSize < MIN_CBLOCK_SIZE, corruption_detected, "");
221
+ {
222
+ BYTE const* istart = (BYTE const*)src;
223
+ SymbolEncodingType_e const litEncType = (SymbolEncodingType_e)(istart[0] & 3);
224
+ if (litEncType == set_compressed) {
225
+ RETURN_ERROR_IF(srcSize < 5, corruption_detected, "srcSize >= MIN_CBLOCK_SIZE == 3; here we need up to 5 for case 3");
226
+ {
227
+ size_t lhSize, litSize, litCSize;
228
+ U32 const lhlCode = (istart[0] >> 2) & 3;
229
+ U32 const lhc = MEM_readLE32(istart);
230
+ int const flags = ZSTD_DCtx_get_bmi2(dctx) ? HUF_flags_bmi2 : 0;
231
+ switch(lhlCode)
232
+ {
233
+ case 0: case 1: default: /* note : default is impossible, since lhlCode into [0..3] */
234
+ /* 2 - 2 - 10 - 10 */
235
+ lhSize = 3;
236
+ litSize = (lhc >> 4) & 0x3FF;
237
+ litCSize = (lhc >> 14) & 0x3FF;
238
+ break;
239
+ case 2:
240
+ /* 2 - 2 - 14 - 14 */
241
+ lhSize = 4;
242
+ litSize = (lhc >> 4) & 0x3FFF;
243
+ litCSize = lhc >> 18;
244
+ break;
245
+ case 3:
246
+ /* 2 - 2 - 18 - 18 */
247
+ lhSize = 5;
248
+ litSize = (lhc >> 4) & 0x3FFFF;
249
+ litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
250
+ break;
251
+ }
252
+ RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected, "");
253
+ RETURN_ERROR_IF(litCSize + lhSize > srcSize, corruption_detected, "");
254
+ #ifndef HUF_FORCE_DECOMPRESS_X2
255
+ return HUF_readDTableX1_wksp(
256
+ dctx->entropy.hufTable,
257
+ istart+lhSize, litCSize,
258
+ dctx->workspace, sizeof(dctx->workspace),
259
+ flags);
260
+ #else
261
+ return HUF_readDTableX2_wksp(
262
+ dctx->entropy.hufTable,
263
+ istart+lhSize, litCSize,
264
+ dctx->workspace, sizeof(dctx->workspace), flags);
265
+ #endif
266
+ }
267
+ }
268
+ }
269
+ return 0;
270
+ }
271
+
272
+ static size_t
273
+ local_ZSTD_decodeLiteralsHeader(const void* src, size_t srcSize, void* dst, size_t dstCapacity, void* unused)
274
+ {
275
+ (void)dst; (void)dstCapacity; (void)unused;
276
+ return ZSTD_decodeLiteralsHeader(g_zdc, src, srcSize);
277
+ }
278
+
279
+ static PrepResult prepSequences1stBlock(const void* src, size_t srcSize, int cLevel)
280
+ {
281
+ PrepResult r = PREPRESULT_INIT;
282
+ size_t const dstCapacity = srcSize;
283
+ void* dst = malloc(dstCapacity);
284
+ const BYTE* ip = dst;
285
+ const BYTE* iend;
286
+ { size_t const cSize = ZSTD_compress(dst, dstCapacity, src, srcSize, cLevel);
287
+ CONTROL(cSize > ZSTD_FRAMEHEADERSIZE_PREFIX(ZSTD_f_zstd1));
288
+ }
289
+ /* Skip frame Header */
290
+ { size_t const frameHeaderSize = ZSTD_frameHeaderSize(dst, ZSTD_FRAMEHEADERSIZE_PREFIX(ZSTD_f_zstd1));
291
+ CONTROL(!ZSTD_isError(frameHeaderSize));
292
+ ip += frameHeaderSize;
293
+ }
294
+ /* Find end of block */
295
+ { blockProperties_t bp;
296
+ size_t const cBlockSize = ZSTD_getcBlockSize(ip, dstCapacity, &bp); /* Get 1st block type */
297
+ if (bp.blockType != bt_compressed) {
298
+ DISPLAY("no compressed sequences\n");
299
+ return r;
300
+ }
301
+ iend = ip + ZSTD_blockHeaderSize + cBlockSize; /* End of first block */
302
+ }
303
+ ip += ZSTD_blockHeaderSize; /* skip block header */
304
+ ZSTD_decompressBegin(g_zdc);
305
+ CONTROL(iend > ip);
306
+ ip += ZSTD_decodeLiteralsBlock_wrapper(g_zdc, ip, (size_t)(iend-ip), dst, dstCapacity); /* skip literal segment */
307
+ r.prepSize = (size_t)(iend-ip);
308
+ r.prepBuffer = malloc(r.prepSize);
309
+ CONTROL(r.prepBuffer != NULL);
310
+ memmove(r.prepBuffer, ip, r.prepSize); /* copy rest of block (it starts by SeqHeader) */
311
+ r.dst = dst;
312
+ r.dstCapacity = dstCapacity;
313
+ r.fixedOrigSize = srcSize > 128 KB ? 128 KB : srcSize; /* speed relative to block */
314
+ return r;
315
+ }
316
+
317
+ static size_t
318
+ local_ZSTD_decodeSeqHeaders(const void* src, size_t srcSize, void* dst, size_t dstCapacity, void* unused)
319
+ {
320
+ int nbSeq;
321
+ (void)unused; (void)dst; (void)dstCapacity;
322
+ return ZSTD_decodeSeqHeaders(g_zdc, &nbSeq, src, srcSize);
323
+ }
324
+
325
+ #endif
326
+
327
+ static ZSTD_CStream* g_cstream= NULL;
328
+ static size_t
329
+ local_ZSTD_compressStream(const void* src, size_t srcSize,
330
+ void* dst, size_t dstCapacity,
331
+ void* payload)
332
+ {
333
+ ZSTD_outBuffer buffOut;
334
+ ZSTD_inBuffer buffIn;
335
+ ZSTD_parameters p;
336
+ ZSTD_frameParameters f = {1 /* contentSizeHeader*/, 0, 0};
337
+ p.fParams = f;
338
+ p.cParams = *(ZSTD_compressionParameters*)payload;
339
+ ZSTD_initCStream_advanced(g_cstream, NULL, 0, p, ZSTD_CONTENTSIZE_UNKNOWN);
340
+ buffOut.dst = dst;
341
+ buffOut.size = dstCapacity;
342
+ buffOut.pos = 0;
343
+ buffIn.src = src;
344
+ buffIn.size = srcSize;
345
+ buffIn.pos = 0;
346
+ ZSTD_compressStream(g_cstream, &buffOut, &buffIn);
347
+ ZSTD_endStream(g_cstream, &buffOut);
348
+ return buffOut.pos;
349
+ }
350
+
351
+ static size_t
352
+ local_ZSTD_compressStream_freshCCtx(const void* src, size_t srcSize,
353
+ void* dst, size_t dstCapacity,
354
+ void* payload)
355
+ {
356
+ if (g_cstream != NULL) ZSTD_freeCCtx(g_cstream);
357
+ g_cstream = ZSTD_createCCtx();
358
+ assert(g_cstream != NULL);
359
+
360
+ { size_t const r = local_ZSTD_compressStream(src, srcSize, dst, dstCapacity, payload);
361
+ ZSTD_freeCCtx(g_cstream);
362
+ g_cstream = NULL;
363
+ return r;
364
+ }
365
+ }
366
+
367
+ static size_t
368
+ local_ZSTD_compress2(const void* src, size_t srcSize,
369
+ void* dst, size_t dstCapacity,
370
+ void* payload)
371
+ {
372
+ (void)payload;
373
+ return ZSTD_compress2(g_cstream, dst, dstCapacity, src, srcSize);
374
+ }
375
+
376
+ static size_t
377
+ local_ZSTD_compressStream2_end(const void* src, size_t srcSize,
378
+ void* dst, size_t dstCapacity,
379
+ void* payload)
380
+ {
381
+ ZSTD_outBuffer buffOut;
382
+ ZSTD_inBuffer buffIn;
383
+ (void)payload;
384
+ buffOut.dst = dst;
385
+ buffOut.size = dstCapacity;
386
+ buffOut.pos = 0;
387
+ buffIn.src = src;
388
+ buffIn.size = srcSize;
389
+ buffIn.pos = 0;
390
+ ZSTD_compressStream2(g_cstream, &buffOut, &buffIn, ZSTD_e_end);
391
+ return buffOut.pos;
392
+ }
393
+
394
+ static size_t
395
+ local_ZSTD_compressStream2_continue(const void* src, size_t srcSize,
396
+ void* dst, size_t dstCapacity,
397
+ void* payload)
398
+ {
399
+ ZSTD_outBuffer buffOut;
400
+ ZSTD_inBuffer buffIn;
401
+ (void)payload;
402
+ buffOut.dst = dst;
403
+ buffOut.size = dstCapacity;
404
+ buffOut.pos = 0;
405
+ buffIn.src = src;
406
+ buffIn.size = srcSize;
407
+ buffIn.pos = 0;
408
+ ZSTD_compressStream2(g_cstream, &buffOut, &buffIn, ZSTD_e_continue);
409
+ ZSTD_compressStream2(g_cstream, &buffOut, &buffIn, ZSTD_e_end);
410
+ return buffOut.pos;
411
+ }
412
+
413
+ static size_t
414
+ local_ZSTD_compress_generic_T2_end(const void* src, size_t srcSize,
415
+ void* dst, size_t dstCapacity,
416
+ void* payload)
417
+ {
418
+ (void)payload;
419
+ ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_nbWorkers, 2);
420
+ return ZSTD_compress2(g_cstream, dst, dstCapacity, src, srcSize);
421
+ }
422
+
423
+ static size_t
424
+ local_ZSTD_compress_generic_T2_continue(const void* src, size_t srcSize,
425
+ void* dst, size_t dstCapacity,
426
+ void* payload)
427
+ {
428
+ ZSTD_outBuffer buffOut;
429
+ ZSTD_inBuffer buffIn;
430
+ (void)payload;
431
+ ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_nbWorkers, 2);
432
+ buffOut.dst = dst;
433
+ buffOut.size = dstCapacity;
434
+ buffOut.pos = 0;
435
+ buffIn.src = src;
436
+ buffIn.size = srcSize;
437
+ buffIn.pos = 0;
438
+ ZSTD_compressStream2(g_cstream, &buffOut, &buffIn, ZSTD_e_continue);
439
+ while(ZSTD_compressStream2(g_cstream, &buffOut, &buffIn, ZSTD_e_end)) {}
440
+ return buffOut.pos;
441
+ }
442
+
443
+ static ZSTD_DStream* g_dstream= NULL;
444
+ static size_t
445
+ local_ZSTD_decompressStream(const void* src, size_t srcSize,
446
+ void* dst, size_t dstCapacity,
447
+ void* unused)
448
+ {
449
+ ZSTD_outBuffer buffOut;
450
+ ZSTD_inBuffer buffIn;
451
+ (void)unused;
452
+ ZSTD_initDStream(g_dstream);
453
+ buffOut.dst = dst;
454
+ buffOut.size = dstCapacity;
455
+ buffOut.pos = 0;
456
+ buffIn.src = src;
457
+ buffIn.size = srcSize;
458
+ buffIn.pos = 0;
459
+ ZSTD_decompressStream(g_dstream, &buffOut, &buffIn);
460
+ return buffOut.pos;
461
+ }
462
+
463
+ static size_t local_ZSTD_compressContinue(const void* src, size_t srcSize,
464
+ void* dst, size_t dstCapacity,
465
+ void* payload)
466
+ {
467
+ ZSTD_parameters p;
468
+ ZSTD_frameParameters f = { 1 /* contentSizeHeader*/, 0, 0 };
469
+ p.fParams = f;
470
+ p.cParams = *(ZSTD_compressionParameters*)payload;
471
+ ZSTD_compressBegin_advanced(g_zcc, NULL, 0, p, srcSize);
472
+ return ZSTD_compressEnd(g_zcc, dst, dstCapacity, src, srcSize);
473
+ }
474
+
475
+ #define FIRST_BLOCK_SIZE 8
476
+ static size_t
477
+ local_ZSTD_compressContinue_extDict(const void* src, size_t srcSize,
478
+ void* dst, size_t dstCapacity,
479
+ void* payload)
480
+ {
481
+ BYTE firstBlockBuf[FIRST_BLOCK_SIZE];
482
+
483
+ ZSTD_parameters p;
484
+ ZSTD_frameParameters const f = { 1, 0, 0 };
485
+ p.fParams = f;
486
+ p.cParams = *(ZSTD_compressionParameters*)payload;
487
+ ZSTD_compressBegin_advanced(g_zcc, NULL, 0, p, srcSize);
488
+ memcpy(firstBlockBuf, src, FIRST_BLOCK_SIZE);
489
+
490
+ { size_t const compressResult = ZSTD_compressContinue(g_zcc,
491
+ dst, dstCapacity,
492
+ firstBlockBuf, FIRST_BLOCK_SIZE);
493
+ if (ZSTD_isError(compressResult)) {
494
+ DISPLAY("local_ZSTD_compressContinue_extDict error : %s\n",
495
+ ZSTD_getErrorName(compressResult));
496
+ return compressResult;
497
+ }
498
+ dst = (BYTE*)dst + compressResult;
499
+ dstCapacity -= compressResult;
500
+ }
501
+ return ZSTD_compressEnd(g_zcc, dst, dstCapacity,
502
+ (const BYTE*)src + FIRST_BLOCK_SIZE,
503
+ srcSize - FIRST_BLOCK_SIZE);
504
+ }
505
+
506
+ static size_t local_ZSTD_decompressContinue(const void* src, size_t srcSize,
507
+ void* dst, size_t dstCapacity,
508
+ void* unused)
509
+ {
510
+ size_t regeneratedSize = 0;
511
+ const BYTE* ip = (const BYTE*)src;
512
+ const BYTE* const iend = ip + srcSize;
513
+ BYTE* op = (BYTE*)dst;
514
+ size_t remainingCapacity = dstCapacity;
515
+
516
+ (void)unused;
517
+ ZSTD_decompressBegin(g_zdc);
518
+ while (ip < iend) {
519
+ size_t const iSize = ZSTD_nextSrcSizeToDecompress(g_zdc);
520
+ size_t const decodedSize = ZSTD_decompressContinue(g_zdc, op, remainingCapacity, ip, iSize);
521
+ ip += iSize;
522
+ regeneratedSize += decodedSize;
523
+ op += decodedSize;
524
+ remainingCapacity -= decodedSize;
525
+ }
526
+
527
+ return regeneratedSize;
528
+ }
529
+
530
+ static PrepResult prepSequences(const void* src, size_t srcSize, int cLevel)
531
+ {
532
+ PrepResult r = PREPRESULT_INIT;
533
+ size_t const dstCapacity = ZSTD_compressBound(srcSize);
534
+ void* const dst = malloc(dstCapacity);
535
+ size_t const prepCapacity = dstCapacity * 4;
536
+ void* prepBuffer = malloc(prepCapacity);
537
+ void* sequencesStart = (char*)prepBuffer + 2*sizeof(unsigned);
538
+ ZSTD_Sequence* const seqs = sequencesStart;
539
+ size_t const seqsCapacity = prepCapacity / sizeof(ZSTD_Sequence);
540
+ size_t nbSeqs;
541
+ ZSTD_CCtx_reset(g_zcc, ZSTD_reset_session_and_parameters);
542
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_compressionLevel, cLevel);
543
+ nbSeqs = ZSTD_generateSequences(g_zcc, seqs, seqsCapacity, src, srcSize);
544
+ CONTROL(srcSize < UINT_MAX);
545
+ MEM_write32(prepBuffer, (U32)srcSize);
546
+ MEM_write32((char*)prepBuffer+4, (U32)nbSeqs);
547
+ memcpy(seqs + nbSeqs, src, srcSize);
548
+ r.prepBuffer = prepBuffer;
549
+ r.prepSize = 8 + sizeof(ZSTD_Sequence)*nbSeqs + srcSize;
550
+ r.dst = dst;
551
+ r.dstCapacity = dstCapacity;
552
+ return r;
553
+ }
554
+
555
+ static size_t local_compressSequences(const void* input, size_t inputSize,
556
+ void* dst, size_t dstCapacity,
557
+ void* payload)
558
+ {
559
+ const char* ip = input;
560
+ size_t srcSize = MEM_read32(ip);
561
+ size_t nbSeqs = MEM_read32(ip+=4);
562
+ const ZSTD_Sequence* seqs = (const ZSTD_Sequence*)(const void*)(ip+=4);
563
+ const void* src = (ip+=nbSeqs * sizeof(ZSTD_Sequence));
564
+ ZSTD_CCtx_reset(g_zcc, ZSTD_reset_session_and_parameters);
565
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_blockDelimiters, ZSTD_sf_explicitBlockDelimiters);
566
+ assert(8 + nbSeqs * sizeof(ZSTD_Sequence) + srcSize == inputSize); (void)inputSize;
567
+ (void)payload;
568
+
569
+ return ZSTD_compressSequences(g_zcc, dst, dstCapacity, seqs, nbSeqs, src, srcSize);
570
+ }
571
+
572
+ static PrepResult prepSequencesAndLiterals(const void* src, size_t srcSize, int cLevel)
573
+ {
574
+ PrepResult r = PREPRESULT_INIT;
575
+ size_t const dstCapacity = ZSTD_compressBound(srcSize);
576
+ void* const dst = malloc(dstCapacity);
577
+ size_t const prepCapacity = dstCapacity * 4;
578
+ void* prepBuffer = malloc(prepCapacity);
579
+ void* sequencesStart = (char*)prepBuffer + 3*sizeof(unsigned);
580
+ ZSTD_Sequence* const seqs = sequencesStart;
581
+ size_t const seqsCapacity = prepCapacity / sizeof(ZSTD_Sequence);
582
+ size_t nbSeqs;
583
+ ZSTD_CCtx_reset(g_zcc, ZSTD_reset_session_and_parameters);
584
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_compressionLevel, cLevel);
585
+ nbSeqs = ZSTD_generateSequences(g_zcc, seqs, seqsCapacity, src, srcSize);
586
+ CONTROL(srcSize < UINT_MAX);
587
+ MEM_write32(prepBuffer, (U32)srcSize);
588
+ MEM_write32((char*)prepBuffer+4, (U32)nbSeqs);
589
+ /* copy literals */
590
+ { char* const litStart = (char*)(seqs + nbSeqs);
591
+ size_t nbLiterals = 0;
592
+ const char* ip = src;
593
+ size_t n;
594
+ for (n=0; n<nbSeqs; n++) {
595
+ size_t const litSize = seqs[n].litLength;
596
+ memcpy(litStart + nbLiterals, ip, litSize);
597
+ ip += litSize + seqs[n].matchLength;
598
+ nbLiterals += litSize;
599
+ }
600
+ MEM_write32((char*)prepBuffer+8, (U32)nbLiterals);
601
+ r.prepBuffer = prepBuffer;
602
+ r.prepSize = 12 + sizeof(ZSTD_Sequence)*nbSeqs + nbLiterals;
603
+ r.dst = dst;
604
+ r.dstCapacity = dstCapacity;
605
+ }
606
+ return r;
607
+ }
608
+
609
+ static size_t
610
+ local_compressSequencesAndLiterals(const void* input, size_t inputSize,
611
+ void* dst, size_t dstCapacity,
612
+ void* payload)
613
+ {
614
+ const char* ip = input;
615
+ size_t decompressedSize = MEM_read32(ip);
616
+ size_t nbSeqs = MEM_read32(ip+=4);
617
+ size_t nbLiterals = MEM_read32(ip+=4);
618
+ const ZSTD_Sequence* seqs = (const ZSTD_Sequence*)(const void*)(ip+=4);
619
+ const void* literals = (ip+=nbSeqs * sizeof(ZSTD_Sequence));
620
+ ZSTD_CCtx_reset(g_zcc, ZSTD_reset_session_and_parameters);
621
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_blockDelimiters, ZSTD_sf_explicitBlockDelimiters);
622
+ # if 0 /* for tests */
623
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_repcodeResolution, ZSTD_ps_enable);
624
+ #endif
625
+ assert(12 + nbSeqs * sizeof(ZSTD_Sequence) + nbLiterals == inputSize); (void)inputSize;
626
+ (void)payload;
627
+
628
+ return ZSTD_compressSequencesAndLiterals(g_zcc, dst, dstCapacity, seqs, nbSeqs, literals, nbLiterals, nbLiterals + 8, decompressedSize);
629
+ }
630
+
631
+ static PrepResult prepConvertSequences(const void* src, size_t srcSize, int cLevel)
632
+ {
633
+ PrepResult r = PREPRESULT_INIT;
634
+ size_t const prepCapacity = srcSize * 4;
635
+ void* prepBuffer = malloc(prepCapacity);
636
+ void* sequencesStart = (char*)prepBuffer + 2*sizeof(unsigned);
637
+ ZSTD_Sequence* const seqs = sequencesStart;
638
+ size_t const seqsCapacity = prepCapacity / sizeof(ZSTD_Sequence);
639
+ size_t totalNbSeqs, nbSeqs, blockSize=0;
640
+ ZSTD_CCtx_reset(g_zcc, ZSTD_reset_session_and_parameters);
641
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_compressionLevel, cLevel);
642
+ totalNbSeqs = ZSTD_generateSequences(g_zcc, seqs, seqsCapacity, src, srcSize);
643
+ CONTROL(!ZSTD_isError(totalNbSeqs));
644
+ /* find nb sequences in first block */
645
+ { size_t n;
646
+ for (n=0; n<totalNbSeqs; n++) {
647
+ if (seqs[n].matchLength == 0) break;
648
+ blockSize += seqs[n].litLength + seqs[n].matchLength;
649
+ }
650
+ blockSize += seqs[n].litLength;
651
+ nbSeqs = n+1;
652
+ #if 0
653
+ printf("found %zu sequences representing a first block of size %zu\n", nbSeqs, blockSize);
654
+ #endif
655
+ }
656
+ /* generate benchmarked input */
657
+ CONTROL(blockSize < UINT_MAX);
658
+ MEM_write32(prepBuffer, (U32)blockSize);
659
+ MEM_write32((char*)prepBuffer+4, (U32)nbSeqs);
660
+ memcpy(seqs + nbSeqs, src, srcSize);
661
+ r.prepBuffer = prepBuffer;
662
+ r.prepSize = 8 + sizeof(ZSTD_Sequence) * nbSeqs;
663
+ r.fixedOrigSize = blockSize;
664
+ return r;
665
+ }
666
+
667
+ static size_t
668
+ local_convertSequences(const void* input, size_t inputSize,
669
+ void* dst, size_t dstCapacity,
670
+ void* payload)
671
+ {
672
+ const char* ip = input;
673
+ size_t const blockSize = MEM_read32(ip);
674
+ size_t const nbSeqs = MEM_read32(ip+=4);
675
+ const ZSTD_Sequence* seqs = (const ZSTD_Sequence*)(const void*)(ip+=4);
676
+ ZSTD_CCtx_reset(g_zcc, ZSTD_reset_session_and_parameters);
677
+ ZSTD_resetSeqStore(&g_zcc->seqStore);
678
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_blockDelimiters, ZSTD_sf_explicitBlockDelimiters);
679
+ # if 0 /* for tests */
680
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_repcodeResolution, ZSTD_ps_enable);
681
+ #endif
682
+ assert(8 + nbSeqs * sizeof(ZSTD_Sequence) == inputSize); (void)inputSize;
683
+ (void)dst; (void)dstCapacity;
684
+ (void)payload; (void)blockSize;
685
+
686
+ (void)ZSTD_convertBlockSequences(g_zcc, seqs, nbSeqs, 0);
687
+ return nbSeqs;
688
+ }
689
+
690
+ static size_t
691
+ check_compressedSequences(const void* compressed, size_t cSize, const void* orig, size_t origSize)
692
+ {
693
+ size_t decSize;
694
+ int diff;
695
+ void* decompressed = malloc(origSize);
696
+ if (decompressed == NULL) return 2;
697
+
698
+ decSize = ZSTD_decompress(decompressed, origSize, compressed, cSize);
699
+ if (decSize != origSize) { free(decompressed); DISPLAY("ZSTD_decompress failed (%u) ", (unsigned)decSize); return 1; }
700
+
701
+ diff = memcmp(decompressed, orig, origSize);
702
+ if (diff) { free(decompressed); return 1; }
703
+
704
+ free(decompressed);
705
+ return 0;
706
+ }
707
+
708
+ static size_t
709
+ local_get1BlockSummary(const void* input, size_t inputSize,
710
+ void* dst, size_t dstCapacity,
711
+ void* payload)
712
+ {
713
+ const char* ip = input;
714
+ size_t const blockSize = MEM_read32(ip);
715
+ size_t const nbSeqs = MEM_read32(ip+=4);
716
+ const ZSTD_Sequence* seqs = (const ZSTD_Sequence*)(const void*)(ip+=4);
717
+ ZSTD_CCtx_reset(g_zcc, ZSTD_reset_session_and_parameters);
718
+ ZSTD_resetSeqStore(&g_zcc->seqStore);
719
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_blockDelimiters, ZSTD_sf_explicitBlockDelimiters);
720
+ assert(8 + nbSeqs * sizeof(ZSTD_Sequence) == inputSize); (void)inputSize;
721
+ (void)dst; (void)dstCapacity;
722
+ (void)payload; (void)blockSize;
723
+
724
+ (void)ZSTD_get1BlockSummary(seqs, nbSeqs);
725
+ return nbSeqs;
726
+ }
727
+
728
+ static PrepResult prepCopy(const void* src, size_t srcSize, int cLevel)
729
+ {
730
+ PrepResult r = PREPRESULT_INIT;
731
+ (void)cLevel;
732
+ r.prepSize = srcSize;
733
+ r.prepBuffer = malloc(srcSize);
734
+ CONTROL(r.prepBuffer != NULL);
735
+ memcpy(r.prepBuffer, src, srcSize);
736
+ r.dstCapacity = ZSTD_compressBound(srcSize);
737
+ r.dst = malloc(r.dstCapacity);
738
+ CONTROL(r.dst != NULL);
739
+ return r;
740
+ }
741
+
742
+ static PrepResult prepShorterDstCapacity(const void* src, size_t srcSize, int cLevel)
743
+ {
744
+ PrepResult r = prepCopy(src, srcSize, cLevel);
745
+ assert(r.dstCapacity > 1);
746
+ r.dstCapacity -= 1;
747
+ return r;
748
+ }
749
+
750
+ /*_*******************************************************
751
+ * List of Scenarios
752
+ *********************************************************/
753
+
754
+ /* if PrepFunction_f returns PrepResult.prepBuffSize == 0, benchmarking is cancelled */
755
+ typedef PrepResult (*PrepFunction_f)(const void* src, size_t srcSize, int cLevel);
756
+ typedef size_t (*BenchedFunction_f)(const void* src, size_t srcSize, void* dst, size_t dstSize, void* opaque);
757
+ /* must return 0, otherwise verification is considered failed */
758
+ typedef size_t (*VerifFunction_f)(const void* processed, size_t procSize, const void* input, size_t inputSize);
759
+
760
+ typedef struct {
761
+ const char* name;
762
+ PrepFunction_f preparation_f;
763
+ BenchedFunction_f benched_f;
764
+ VerifFunction_f verif_f; /* optional */
765
+ } BenchScenario;
766
+
767
+ static BenchScenario kScenarios[] = {
768
+ { "compress", NULL, local_ZSTD_compress, check_compressedSequences },
769
+ { "decompress", prepDecompress, local_ZSTD_decompress, NULL },
770
+ { "compress_freshCCtx", NULL, local_ZSTD_compress_freshCCtx, check_compressedSequences },
771
+ { "decompressDCtx", prepDecompress, local_ZSTD_decompressDCtx, NULL },
772
+ { "compressContinue", NULL, local_ZSTD_compressContinue, check_compressedSequences },
773
+ { "compressContinue_extDict", NULL, local_ZSTD_compressContinue_extDict, NULL },
774
+ { "decompressContinue", prepDecompress, local_ZSTD_decompressContinue, NULL },
775
+ { "compressStream", NULL, local_ZSTD_compressStream, check_compressedSequences },
776
+ { "compressStream_freshCCtx", NULL, local_ZSTD_compressStream_freshCCtx, check_compressedSequences },
777
+ { "decompressStream", prepDecompress, local_ZSTD_decompressStream, NULL },
778
+ { "compress2", NULL, local_ZSTD_compress2, check_compressedSequences },
779
+ { "compressStream2, end", NULL, local_ZSTD_compressStream2_end, check_compressedSequences },
780
+ { "compressStream2, end & short", prepShorterDstCapacity, local_ZSTD_compressStream2_end, check_compressedSequences },
781
+ { "compressStream2, continue", NULL, local_ZSTD_compressStream2_continue, check_compressedSequences },
782
+ { "compressStream2, -T2, continue", NULL, local_ZSTD_compress_generic_T2_continue, check_compressedSequences },
783
+ { "compressStream2, -T2, end", NULL, local_ZSTD_compress_generic_T2_end, check_compressedSequences },
784
+ { "compressSequences", prepSequences, local_compressSequences, check_compressedSequences },
785
+ { "compressSequencesAndLiterals", prepSequencesAndLiterals, local_compressSequencesAndLiterals, check_compressedSequences },
786
+ { "convertSequences (1st block)", prepConvertSequences, local_convertSequences, NULL },
787
+ { "get1BlockSummary (1st block)", prepConvertSequences, local_get1BlockSummary, NULL },
788
+ #ifndef ZSTD_DLL_IMPORT
789
+ { "decodeLiteralsHeader (1st block)", prepLiterals, local_ZSTD_decodeLiteralsHeader, NULL },
790
+ { "decodeLiteralsBlock (1st block)", prepLiterals, local_ZSTD_decodeLiteralsBlock, NULL },
791
+ { "decodeSeqHeaders (1st block)", prepSequences1stBlock, local_ZSTD_decodeSeqHeaders, NULL },
792
+ #endif
793
+ };
794
+ #define NB_SCENARIOS (sizeof(kScenarios) / sizeof(kScenarios[0]))
795
+
796
+ /*_*******************************************************
797
+ * Bench loop
798
+ *********************************************************/
799
+ static int benchMem(unsigned scenarioID,
800
+ const void* origSrc, size_t origSrcSize,
801
+ int cLevel, ZSTD_compressionParameters cparams)
802
+ {
803
+ size_t dstCapacity = 0;
804
+ void* dst = NULL;
805
+ void* prepBuff = NULL;
806
+ size_t prepBuffSize = 0;
807
+ void* payload;
808
+ const char* benchName;
809
+ BMK_benchFn_t benchFunction;
810
+ PrepFunction_f prep_f;
811
+ VerifFunction_f verif_f;
812
+ int errorcode = 0;
813
+
814
+ if (scenarioID >= NB_SCENARIOS) return 0; /* scenario doesn't exist */
815
+
816
+ benchName = kScenarios[scenarioID].name;
817
+ benchFunction = kScenarios[scenarioID].benched_f;
818
+ prep_f = kScenarios[scenarioID].preparation_f;
819
+ verif_f = kScenarios[scenarioID].verif_f;
820
+ if (prep_f == NULL) prep_f = prepCopy; /* default */
821
+
822
+ /* Initialization */
823
+ if (g_zcc==NULL) g_zcc = ZSTD_createCCtx();
824
+ if (g_zdc==NULL) g_zdc = ZSTD_createDCtx();
825
+ if (g_cstream==NULL) g_cstream = ZSTD_createCStream();
826
+ if (g_dstream==NULL) g_dstream = ZSTD_createDStream();
827
+
828
+ /* DISPLAY("params: cLevel %d, wlog %d hlog %d clog %d slog %d mml %d tlen %d strat %d \n",
829
+ cLevel, cparams->windowLog, cparams->hashLog, cparams->chainLog, cparams->searchLog,
830
+ cparams->minMatch, cparams->targetLength, cparams->strategy); */
831
+
832
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_compressionLevel, cLevel);
833
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_windowLog, (int)cparams.windowLog);
834
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_hashLog, (int)cparams.hashLog);
835
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_chainLog, (int)cparams.chainLog);
836
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_searchLog, (int)cparams.searchLog);
837
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_minMatch, (int)cparams.minMatch);
838
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_targetLength, (int)cparams.targetLength);
839
+ ZSTD_CCtx_setParameter(g_zcc, ZSTD_c_strategy, (int)cparams.strategy);
840
+
841
+ ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_compressionLevel, cLevel);
842
+ ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_windowLog, (int)cparams.windowLog);
843
+ ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_hashLog, (int)cparams.hashLog);
844
+ ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_chainLog, (int)cparams.chainLog);
845
+ ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_searchLog, (int)cparams.searchLog);
846
+ ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_minMatch, (int)cparams.minMatch);
847
+ ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_targetLength, (int)cparams.targetLength);
848
+ ZSTD_CCtx_setParameter(g_cstream, ZSTD_c_strategy, (int)cparams.strategy);
849
+
850
+ /* Preparation */
851
+ payload = &cparams;
852
+ { PrepResult pr = prep_f(origSrc, origSrcSize, cLevel);
853
+ dst = pr.dst;
854
+ dstCapacity = pr.dstCapacity;
855
+ prepBuff = pr.prepBuffer;
856
+ prepBuffSize = pr.prepSize;
857
+ if (pr.fixedOrigSize) origSrcSize = pr.fixedOrigSize;
858
+ }
859
+ if (prepBuffSize==0) goto _cleanOut; /* failed preparation */
860
+
861
+ /* warming up dstBuff */
862
+ { size_t i; for (i=0; i<dstCapacity; i++) ((BYTE*)dst)[i]=(BYTE)i; }
863
+
864
+ /* benchmark loop */
865
+ { BMK_timedFnState_t* const tfs = BMK_createTimedFnState(g_nbIterations * 1000, 1000);
866
+ void* const avoidStrictAliasingPtr = &dst;
867
+ const void* prepSrc = prepBuff;
868
+ BMK_benchParams_t bp;
869
+ BMK_runTime_t bestResult;
870
+ bestResult.sumOfReturn = 0;
871
+ bestResult.nanoSecPerRun = (double)TIMELOOP_NANOSEC * 2000000000; /* hopefully large enough : must be larger than any potential measurement */
872
+ CONTROL(tfs != NULL);
873
+
874
+ bp.benchFn = benchFunction;
875
+ bp.benchPayload = payload;
876
+ bp.initFn = NULL;
877
+ bp.initPayload = NULL;
878
+ bp.errorFn = ZSTD_isError;
879
+ bp.blockCount = 1;
880
+ bp.srcBuffers = &prepSrc;
881
+ bp.srcSizes = &prepBuffSize;
882
+ bp.dstBuffers = (void* const*) avoidStrictAliasingPtr; /* circumvent strict aliasing warning on gcc-8,
883
+ * because gcc considers that `void* const *` and `void**` are 2 different types */
884
+ bp.dstCapacities = &dstCapacity;
885
+ bp.blockResults = NULL;
886
+
887
+ for (;;) {
888
+ BMK_runOutcome_t const bOutcome = BMK_benchTimedFn(tfs, bp);
889
+
890
+ if (!BMK_isSuccessful_runOutcome(bOutcome)) {
891
+ DISPLAY("ERROR: Scenario %u: %s \n", scenarioID, ZSTD_getErrorName(BMK_extract_errorResult(bOutcome)));
892
+ errorcode = 1;
893
+ BMK_freeTimedFnState(tfs);
894
+ goto _cleanOut;
895
+ }
896
+
897
+ { BMK_runTime_t const newResult = BMK_extract_runTime(bOutcome);
898
+ if (newResult.nanoSecPerRun < bestResult.nanoSecPerRun )
899
+ bestResult.nanoSecPerRun = newResult.nanoSecPerRun;
900
+ DISPLAY("\r%2u#%-31.31s:%8.1f MB/s (%8u) ",
901
+ scenarioID, benchName,
902
+ (double)origSrcSize * TIMELOOP_NANOSEC / bestResult.nanoSecPerRun / MB_UNIT,
903
+ (unsigned)newResult.sumOfReturn );
904
+
905
+ if (verif_f) {
906
+ size_t const vRes = verif_f(dst, newResult.sumOfReturn, origSrc, origSrcSize);
907
+ if (vRes) {
908
+ DISPLAY(" validation failed ! (%u)\n", (unsigned)vRes);
909
+ break;
910
+ }
911
+ }
912
+ }
913
+
914
+ if ( BMK_isCompleted_TimedFn(tfs) ) break;
915
+ }
916
+ BMK_freeTimedFnState(tfs);
917
+ }
918
+ DISPLAY("\n");
919
+
920
+ _cleanOut:
921
+ free(prepBuff);
922
+ free(dst);
923
+ ZSTD_freeCCtx(g_zcc); g_zcc=NULL;
924
+ ZSTD_freeDCtx(g_zdc); g_zdc=NULL;
925
+ ZSTD_freeCStream(g_cstream); g_cstream=NULL;
926
+ ZSTD_freeDStream(g_dstream); g_dstream=NULL;
927
+ return errorcode;
928
+ }
929
+
930
+
931
+ #define BENCH_ALL_SCENARIOS 999
932
+ /*
933
+ * if @compressibility < 0.0, use Lorem Ipsum generator
934
+ * otherwise, @compressibility is expected to be between 0.0 and 1.0
935
+ * if scenarioID == BENCH_ALL_SCENARIOS, all scenarios will be run on the sample
936
+ */
937
+ static int benchSample(U32 scenarioID,
938
+ size_t benchedSize, double compressibility,
939
+ int cLevel, ZSTD_compressionParameters cparams)
940
+ {
941
+ /* Allocation */
942
+ void* const origBuff = malloc(benchedSize);
943
+ if (!origBuff) { DISPLAY("\nError: not enough memory!\n"); return 12; }
944
+
945
+ /* Fill buffer */
946
+ if (compressibility < 0.0) {
947
+ LOREM_genBuffer(origBuff, benchedSize, 0);
948
+ } else {
949
+ RDG_genBuffer(origBuff, benchedSize, compressibility, 0.0, 0);
950
+
951
+ }
952
+
953
+ /* bench */
954
+ DISPLAY("\r%70s\r", "");
955
+ DISPLAY(" Sample %u bytes : \n", (unsigned)benchedSize);
956
+ if (scenarioID == BENCH_ALL_SCENARIOS) {
957
+ for (scenarioID=0; scenarioID<100; scenarioID++) {
958
+ benchMem(scenarioID, origBuff, benchedSize, cLevel, cparams);
959
+ }
960
+ } else {
961
+ benchMem(scenarioID, origBuff, benchedSize, cLevel, cparams);
962
+ }
963
+
964
+ free(origBuff);
965
+ return 0;
966
+ }
967
+
968
+
969
+ static int benchFiles(U32 scenarioID,
970
+ const char** fileNamesTable, const int nbFiles,
971
+ int cLevel, ZSTD_compressionParameters cparams)
972
+ {
973
+ /* Loop for each file */
974
+ int fileIdx;
975
+ for (fileIdx=0; fileIdx<nbFiles; fileIdx++) {
976
+ const char* const inFileName = fileNamesTable[fileIdx];
977
+ FILE* const inFile = fopen( inFileName, "rb" );
978
+ size_t benchedSize;
979
+
980
+ /* Check file existence */
981
+ if (inFile==NULL) { DISPLAY( "Pb opening %s\n", inFileName); return 11; }
982
+
983
+ /* Memory allocation & restrictions */
984
+ { U64 const inFileSize = UTIL_getFileSize(inFileName);
985
+ if (inFileSize == UTIL_FILESIZE_UNKNOWN) {
986
+ DISPLAY( "Cannot measure size of %s\n", inFileName);
987
+ fclose(inFile);
988
+ return 11;
989
+ }
990
+ benchedSize = BMK_findMaxMem(inFileSize*3) / 3;
991
+ if ((U64)benchedSize > inFileSize)
992
+ benchedSize = (size_t)inFileSize;
993
+ if ((U64)benchedSize < inFileSize) {
994
+ DISPLAY("Not enough memory for '%s' full size; testing %u MB only... \n",
995
+ inFileName, (unsigned)(benchedSize>>20));
996
+ } }
997
+
998
+ /* Alloc */
999
+ { void* const origBuff = malloc(benchedSize);
1000
+ if (!origBuff) { DISPLAY("\nError: not enough memory!\n"); fclose(inFile); return 12; }
1001
+
1002
+ /* Fill input buffer */
1003
+ DISPLAY("Loading %s... \r", inFileName);
1004
+ { size_t const readSize = fread(origBuff, 1, benchedSize, inFile);
1005
+ fclose(inFile);
1006
+ if (readSize != benchedSize) {
1007
+ DISPLAY("\nError: problem reading file '%s' !! \n", inFileName);
1008
+ free(origBuff);
1009
+ return 13;
1010
+ } }
1011
+
1012
+ /* bench */
1013
+ DISPLAY("\r%70s\r", ""); /* blank line */
1014
+ DISPLAY(" %s : \n", inFileName);
1015
+ if (scenarioID == BENCH_ALL_SCENARIOS) {
1016
+ for (scenarioID=0; scenarioID<100; scenarioID++) {
1017
+ benchMem(scenarioID, origBuff, benchedSize, cLevel, cparams);
1018
+ }
1019
+ } else {
1020
+ benchMem(scenarioID, origBuff, benchedSize, cLevel, cparams);
1021
+ }
1022
+
1023
+ free(origBuff);
1024
+ } }
1025
+
1026
+ return 0;
1027
+ }
1028
+
1029
+
1030
+
1031
+ /*_*******************************************************
1032
+ * Argument Parsing
1033
+ *********************************************************/
1034
+
1035
+ #define ERROR_OUT(msg) { DISPLAY("%s \n", msg); exit(1); }
1036
+
1037
+ static unsigned readU32FromChar(const char** stringPtr)
1038
+ {
1039
+ const char errorMsg[] = "error: numeric value too large";
1040
+ unsigned result = 0;
1041
+ while ((**stringPtr >='0') && (**stringPtr <='9')) {
1042
+ unsigned const max = (((unsigned)(-1)) / 10) - 1;
1043
+ if (result > max) ERROR_OUT(errorMsg);
1044
+ result *= 10;
1045
+ result += (unsigned)(**stringPtr - '0');
1046
+ (*stringPtr)++ ;
1047
+ }
1048
+ if ((**stringPtr=='K') || (**stringPtr=='M')) {
1049
+ unsigned const maxK = ((unsigned)(-1)) >> 10;
1050
+ if (result > maxK) ERROR_OUT(errorMsg);
1051
+ result <<= 10;
1052
+ if (**stringPtr=='M') {
1053
+ if (result > maxK) ERROR_OUT(errorMsg);
1054
+ result <<= 10;
1055
+ }
1056
+ (*stringPtr)++; /* skip `K` or `M` */
1057
+ if (**stringPtr=='i') (*stringPtr)++;
1058
+ if (**stringPtr=='B') (*stringPtr)++;
1059
+ }
1060
+ return result;
1061
+ }
1062
+
1063
+ static int longCommandWArg(const char** stringPtr, const char* longCommand)
1064
+ {
1065
+ size_t const comSize = strlen(longCommand);
1066
+ int const result = !strncmp(*stringPtr, longCommand, comSize);
1067
+ if (result) *stringPtr += comSize;
1068
+ return result;
1069
+ }
1070
+
1071
+
1072
+ /*_*******************************************************
1073
+ * Command line
1074
+ *********************************************************/
1075
+
1076
+ static int usage(const char* exename)
1077
+ {
1078
+ DISPLAY( "Usage :\n");
1079
+ DISPLAY( " %s [arg] file1 file2 ... fileX\n", exename);
1080
+ DISPLAY( "Arguments :\n");
1081
+ DISPLAY( " -H/-h : Help (this text + advanced options)\n");
1082
+ return 0;
1083
+ }
1084
+
1085
+ static int usage_advanced(const char* exename)
1086
+ {
1087
+ usage(exename);
1088
+ DISPLAY( "\nAdvanced options :\n");
1089
+ DISPLAY( " -b# : test only function # \n");
1090
+ DISPLAY( " -l# : benchmark functions at that compression level (default : %i)\n", DEFAULT_CLEVEL);
1091
+ DISPLAY( "--zstd= : custom parameter selection. Format same as zstdcli \n");
1092
+ DISPLAY( " -P# : sample compressibility (default : %.1f%%)\n", COMPRESSIBILITY_DEFAULT * 100);
1093
+ DISPLAY( " -B# : sample size (default : %u)\n", (unsigned)kSampleSizeDefault);
1094
+ DISPLAY( " -i# : iteration loops [1-9](default : %i)\n", NBLOOPS);
1095
+ return 0;
1096
+ }
1097
+
1098
+ static int badusage(const char* exename)
1099
+ {
1100
+ DISPLAY("Wrong parameters\n");
1101
+ usage(exename);
1102
+ return 1;
1103
+ }
1104
+
1105
+ int main(int argc, const char** argv)
1106
+ {
1107
+ int argNb, filenamesStart=0, result;
1108
+ const char* const exename = argv[0];
1109
+ const char* input_filename = NULL;
1110
+ U32 scenarioID = BENCH_ALL_SCENARIOS, main_pause = 0;
1111
+ int cLevel = DEFAULT_CLEVEL;
1112
+ ZSTD_compressionParameters cparams = ZSTD_getCParams(cLevel, 0, 0);
1113
+ size_t sampleSize = kSampleSizeDefault;
1114
+ double compressibility = COMPRESSIBILITY_DEFAULT;
1115
+
1116
+ DISPLAY(WELCOME_MESSAGE);
1117
+ if (argc<1) return badusage(exename);
1118
+
1119
+ for (argNb=1; argNb<argc; argNb++) {
1120
+ const char* argument = argv[argNb];
1121
+ CONTROL(argument != NULL);
1122
+
1123
+ if (longCommandWArg(&argument, "--zstd=")) {
1124
+ for ( ; ;) {
1125
+ if (longCommandWArg(&argument, "windowLog=") || longCommandWArg(&argument, "wlog=")) { cparams.windowLog = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
1126
+ if (longCommandWArg(&argument, "chainLog=") || longCommandWArg(&argument, "clog=")) { cparams.chainLog = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
1127
+ if (longCommandWArg(&argument, "hashLog=") || longCommandWArg(&argument, "hlog=")) { cparams.hashLog = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
1128
+ if (longCommandWArg(&argument, "searchLog=") || longCommandWArg(&argument, "slog=")) { cparams.searchLog = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
1129
+ if (longCommandWArg(&argument, "minMatch=") || longCommandWArg(&argument, "mml=")) { cparams.minMatch = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
1130
+ if (longCommandWArg(&argument, "targetLength=") || longCommandWArg(&argument, "tlen=")) { cparams.targetLength = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
1131
+ if (longCommandWArg(&argument, "strategy=") || longCommandWArg(&argument, "strat=")) { cparams.strategy = (ZSTD_strategy)(readU32FromChar(&argument)); if (argument[0]==',') { argument++; continue; } else break; }
1132
+ if (longCommandWArg(&argument, "level=") || longCommandWArg(&argument, "lvl=")) { cLevel = (int)readU32FromChar(&argument); cparams = ZSTD_getCParams(cLevel, 0, 0); if (argument[0]==',') { argument++; continue; } else break; }
1133
+ DISPLAY("invalid compression parameter \n");
1134
+ return 1;
1135
+ }
1136
+
1137
+ /* check end of string */
1138
+ if (argument[0] != 0) {
1139
+ DISPLAY("invalid --zstd= format \n");
1140
+ return 1;
1141
+ } else {
1142
+ continue;
1143
+ }
1144
+
1145
+ } else if (argument[0]=='-') { /* Commands (note : aggregated commands are allowed) */
1146
+ argument++;
1147
+ while (argument[0]!=0) {
1148
+
1149
+ switch(argument[0])
1150
+ {
1151
+ /* Display help on usage */
1152
+ case 'h':
1153
+ case 'H': return usage_advanced(exename);
1154
+
1155
+ /* Pause at the end (hidden option) */
1156
+ case 'p': main_pause = 1; break;
1157
+
1158
+ /* Select specific algorithm to bench */
1159
+ case 'b':
1160
+ argument++;
1161
+ scenarioID = readU32FromChar(&argument);
1162
+ break;
1163
+
1164
+ /* Select compression level to use */
1165
+ case 'l':
1166
+ argument++;
1167
+ cLevel = (int)readU32FromChar(&argument);
1168
+ cparams = ZSTD_getCParams(cLevel, 0, 0);
1169
+ break;
1170
+
1171
+ /* Select compressibility of synthetic sample */
1172
+ case 'P':
1173
+ argument++;
1174
+ compressibility = (double)readU32FromChar(&argument) / 100.;
1175
+ break;
1176
+
1177
+ /* Select size of synthetic sample */
1178
+ case 'B':
1179
+ argument++;
1180
+ sampleSize = (size_t)readU32FromChar(&argument);
1181
+ break;
1182
+
1183
+ /* Modify Nb Iterations */
1184
+ case 'i':
1185
+ argument++;
1186
+ g_nbIterations = readU32FromChar(&argument);
1187
+ break;
1188
+
1189
+ /* Unknown command */
1190
+ default : return badusage(exename);
1191
+ }
1192
+ }
1193
+ continue;
1194
+ }
1195
+
1196
+ /* first provided filename is input */
1197
+ if (!input_filename) { input_filename=argument; filenamesStart=argNb; continue; }
1198
+ }
1199
+
1200
+
1201
+
1202
+ if (filenamesStart==0) /* no input file */
1203
+ result = benchSample(scenarioID, sampleSize, compressibility, cLevel, cparams);
1204
+ else
1205
+ result = benchFiles(scenarioID, argv+filenamesStart, argc-filenamesStart, cLevel, cparams);
1206
+
1207
+ if (main_pause) { int unused; printf("press enter...\n"); unused = getchar(); (void)unused; }
1208
+
1209
+ return result;
1210
+ }