automerge-rb 0.1.1

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 (481) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +175 -0
  4. data/ext/automerge_ext/automerge_ext.c +1805 -0
  5. data/ext/automerge_ext/extconf.rb +132 -0
  6. data/lib/automerge/version.rb +6 -0
  7. data/lib/automerge.rb +110 -0
  8. data/rust-toolchain.toml +4 -0
  9. data/vendor/automerge-rust/Cargo.lock +1909 -0
  10. data/vendor/automerge-rust/Cargo.toml +15 -0
  11. data/vendor/automerge-rust/automerge/Cargo.toml +78 -0
  12. data/vendor/automerge-rust/automerge/README.md +5 -0
  13. data/vendor/automerge-rust/automerge/benches/load_save.rs +102 -0
  14. data/vendor/automerge-rust/automerge/benches/map.rs +260 -0
  15. data/vendor/automerge-rust/automerge/benches/range.rs +37 -0
  16. data/vendor/automerge-rust/automerge/benches/sync.rs +95 -0
  17. data/vendor/automerge-rust/automerge/examples/README.md +7 -0
  18. data/vendor/automerge-rust/automerge/examples/quickstart.rs +57 -0
  19. data/vendor/automerge-rust/automerge/examples/watch.rs +94 -0
  20. data/vendor/automerge-rust/automerge/fuzz/Cargo.toml +29 -0
  21. data/vendor/automerge-rust/automerge/fuzz/fuzz_targets/load.rs +37 -0
  22. data/vendor/automerge-rust/automerge/src/autocommit.rs +1286 -0
  23. data/vendor/automerge-rust/automerge/src/automerge/current_state.rs +546 -0
  24. data/vendor/automerge-rust/automerge/src/automerge/tests.rs +2023 -0
  25. data/vendor/automerge-rust/automerge/src/automerge.rs +2071 -0
  26. data/vendor/automerge-rust/automerge/src/autoserde.rs +128 -0
  27. data/vendor/automerge-rust/automerge/src/change.rs +357 -0
  28. data/vendor/automerge-rust/automerge/src/change_graph.rs +1215 -0
  29. data/vendor/automerge-rust/automerge/src/change_queue.rs +46 -0
  30. data/vendor/automerge-rust/automerge/src/clock.rs +206 -0
  31. data/vendor/automerge-rust/automerge/src/columnar/column_range/boolean.rs +83 -0
  32. data/vendor/automerge-rust/automerge/src/columnar/column_range/delta.rs +148 -0
  33. data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/group.rs +138 -0
  34. data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/simple.rs +76 -0
  35. data/vendor/automerge-rust/automerge/src/columnar/column_range/generic.rs +93 -0
  36. data/vendor/automerge-rust/automerge/src/columnar/column_range/key.rs +272 -0
  37. data/vendor/automerge-rust/automerge/src/columnar/column_range/obj_id.rs +202 -0
  38. data/vendor/automerge-rust/automerge/src/columnar/column_range/opid_list.rs +329 -0
  39. data/vendor/automerge-rust/automerge/src/columnar/column_range/raw.rs +38 -0
  40. data/vendor/automerge-rust/automerge/src/columnar/column_range/rle.rs +216 -0
  41. data/vendor/automerge-rust/automerge/src/columnar/column_range/value.rs +547 -0
  42. data/vendor/automerge-rust/automerge/src/columnar/column_range.rs +17 -0
  43. data/vendor/automerge-rust/automerge/src/columnar/encoding/boolean.rs +197 -0
  44. data/vendor/automerge-rust/automerge/src/columnar/encoding/col_error.rs +88 -0
  45. data/vendor/automerge-rust/automerge/src/columnar/encoding/column_decoder.rs +133 -0
  46. data/vendor/automerge-rust/automerge/src/columnar/encoding/decodable_impls.rs +175 -0
  47. data/vendor/automerge-rust/automerge/src/columnar/encoding/delta.rs +96 -0
  48. data/vendor/automerge-rust/automerge/src/columnar/encoding/encodable_impls.rs +200 -0
  49. data/vendor/automerge-rust/automerge/src/columnar/encoding/leb128.rs +82 -0
  50. data/vendor/automerge-rust/automerge/src/columnar/encoding/properties.rs +178 -0
  51. data/vendor/automerge-rust/automerge/src/columnar/encoding/raw.rs +101 -0
  52. data/vendor/automerge-rust/automerge/src/columnar/encoding/rle.rs +239 -0
  53. data/vendor/automerge-rust/automerge/src/columnar/encoding.rs +67 -0
  54. data/vendor/automerge-rust/automerge/src/columnar/splice_error.rs +47 -0
  55. data/vendor/automerge-rust/automerge/src/columnar.rs +14 -0
  56. data/vendor/automerge-rust/automerge/src/convert.rs +112 -0
  57. data/vendor/automerge-rust/automerge/src/cursor.rs +296 -0
  58. data/vendor/automerge-rust/automerge/src/decoding.rs +475 -0
  59. data/vendor/automerge-rust/automerge/src/error.rs +159 -0
  60. data/vendor/automerge-rust/automerge/src/exid.rs +238 -0
  61. data/vendor/automerge-rust/automerge/src/hydrate/list.rs +140 -0
  62. data/vendor/automerge-rust/automerge/src/hydrate/map.rs +132 -0
  63. data/vendor/automerge-rust/automerge/src/hydrate/tests.rs +40 -0
  64. data/vendor/automerge-rust/automerge/src/hydrate/text.rs +89 -0
  65. data/vendor/automerge-rust/automerge/src/hydrate.rs +368 -0
  66. data/vendor/automerge-rust/automerge/src/indexed_cache.rs +113 -0
  67. data/vendor/automerge-rust/automerge/src/iter/doc.rs +603 -0
  68. data/vendor/automerge-rust/automerge/src/iter/keys.rs +93 -0
  69. data/vendor/automerge-rust/automerge/src/iter/list_range.rs +433 -0
  70. data/vendor/automerge-rust/automerge/src/iter/map_range.rs +316 -0
  71. data/vendor/automerge-rust/automerge/src/iter/spans.rs +601 -0
  72. data/vendor/automerge-rust/automerge/src/iter/tools.rs +427 -0
  73. data/vendor/automerge-rust/automerge/src/iter/values.rs +36 -0
  74. data/vendor/automerge-rust/automerge/src/iter.rs +25 -0
  75. data/vendor/automerge-rust/automerge/src/legacy/mod.rs +364 -0
  76. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/actor_id.rs +25 -0
  77. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/change_hash.rs +29 -0
  78. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/element_id.rs +27 -0
  79. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/mod.rs +31 -0
  80. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/object_id.rs +36 -0
  81. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op.rs +668 -0
  82. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op_type.rs +26 -0
  83. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/opid.rs +25 -0
  84. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/scalar_value.rs +63 -0
  85. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/element_id.rs +66 -0
  86. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/key.rs +49 -0
  87. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/mod.rs +4 -0
  88. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/object_id.rs +74 -0
  89. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/opid.rs +68 -0
  90. data/vendor/automerge-rust/automerge/src/lib.rs +315 -0
  91. data/vendor/automerge-rust/automerge/src/marks.rs +478 -0
  92. data/vendor/automerge-rust/automerge/src/op_set2/change/batch.rs +2002 -0
  93. data/vendor/automerge-rust/automerge/src/op_set2/change/collector.rs +974 -0
  94. data/vendor/automerge-rust/automerge/src/op_set2/change.rs +332 -0
  95. data/vendor/automerge-rust/automerge/src/op_set2/columns.rs +714 -0
  96. data/vendor/automerge-rust/automerge/src/op_set2/meta.rs +174 -0
  97. data/vendor/automerge-rust/automerge/src/op_set2/op.rs +1363 -0
  98. data/vendor/automerge-rust/automerge/src/op_set2/op_set/elems.rs +43 -0
  99. data/vendor/automerge-rust/automerge/src/op_set2/op_set/found_op.rs +60 -0
  100. data/vendor/automerge-rust/automerge/src/op_set2/op_set/index.rs +197 -0
  101. data/vendor/automerge-rust/automerge/src/op_set2/op_set/insert.rs +179 -0
  102. data/vendor/automerge-rust/automerge/src/op_set2/op_set/mark_index.rs +292 -0
  103. data/vendor/automerge-rust/automerge/src/op_set2/op_set/marks.rs +86 -0
  104. data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_iter.rs +1295 -0
  105. data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_query.rs +82 -0
  106. data/vendor/automerge-rust/automerge/src/op_set2/op_set/top_op.rs +50 -0
  107. data/vendor/automerge-rust/automerge/src/op_set2/op_set/visible.rs +290 -0
  108. data/vendor/automerge-rust/automerge/src/op_set2/op_set.rs +1793 -0
  109. data/vendor/automerge-rust/automerge/src/op_set2/parents.rs +133 -0
  110. data/vendor/automerge-rust/automerge/src/op_set2/skip_list.rs +714 -0
  111. data/vendor/automerge-rust/automerge/src/op_set2/types.rs +769 -0
  112. data/vendor/automerge-rust/automerge/src/op_set2.rs +18 -0
  113. data/vendor/automerge-rust/automerge/src/patches/patch.rs +95 -0
  114. data/vendor/automerge-rust/automerge/src/patches/patch_builder.rs +382 -0
  115. data/vendor/automerge-rust/automerge/src/patches/patch_log.rs +584 -0
  116. data/vendor/automerge-rust/automerge/src/patches.rs +7 -0
  117. data/vendor/automerge-rust/automerge/src/query/list_state.rs +230 -0
  118. data/vendor/automerge-rust/automerge/src/query/seek_mark.rs +142 -0
  119. data/vendor/automerge-rust/automerge/src/read.rs +326 -0
  120. data/vendor/automerge-rust/automerge/src/sequence_tree.rs +662 -0
  121. data/vendor/automerge-rust/automerge/src/storage/bundle/builder.rs +942 -0
  122. data/vendor/automerge-rust/automerge/src/storage/bundle/error.rs +42 -0
  123. data/vendor/automerge-rust/automerge/src/storage/bundle/meta.rs +23 -0
  124. data/vendor/automerge-rust/automerge/src/storage/bundle/storage.rs +146 -0
  125. data/vendor/automerge-rust/automerge/src/storage/bundle.rs +210 -0
  126. data/vendor/automerge-rust/automerge/src/storage/change/change_actors.rs +311 -0
  127. data/vendor/automerge-rust/automerge/src/storage/change/change_op_columns.rs +621 -0
  128. data/vendor/automerge-rust/automerge/src/storage/change/compressed.rs +51 -0
  129. data/vendor/automerge-rust/automerge/src/storage/change/op_with_change_actors.rs +1 -0
  130. data/vendor/automerge-rust/automerge/src/storage/change.rs +523 -0
  131. data/vendor/automerge-rust/automerge/src/storage/chunk.rs +312 -0
  132. data/vendor/automerge-rust/automerge/src/storage/columns/column.rs +42 -0
  133. data/vendor/automerge-rust/automerge/src/storage/columns/column_builder.rs +199 -0
  134. data/vendor/automerge-rust/automerge/src/storage/columns/column_specification.rs +340 -0
  135. data/vendor/automerge-rust/automerge/src/storage/columns/raw_column.rs +286 -0
  136. data/vendor/automerge-rust/automerge/src/storage/columns.rs +355 -0
  137. data/vendor/automerge-rust/automerge/src/storage/document/compression.rs +362 -0
  138. data/vendor/automerge-rust/automerge/src/storage/document.rs +411 -0
  139. data/vendor/automerge-rust/automerge/src/storage/load/change_collector.rs +15 -0
  140. data/vendor/automerge-rust/automerge/src/storage/load.rs +136 -0
  141. data/vendor/automerge-rust/automerge/src/storage/parse/leb128.rs +302 -0
  142. data/vendor/automerge-rust/automerge/src/storage/parse.rs +619 -0
  143. data/vendor/automerge-rust/automerge/src/storage/save/document.rs +27 -0
  144. data/vendor/automerge-rust/automerge/src/storage.rs +26 -0
  145. data/vendor/automerge-rust/automerge/src/sync/bloom.rs +161 -0
  146. data/vendor/automerge-rust/automerge/src/sync/message_builder.rs +118 -0
  147. data/vendor/automerge-rust/automerge/src/sync/state.rs +214 -0
  148. data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/bloom.rs +162 -0
  149. data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/mod.rs +625 -0
  150. data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/state.rs +120 -0
  151. data/vendor/automerge-rust/automerge/src/sync.rs +2482 -0
  152. data/vendor/automerge-rust/automerge/src/text_diff/LICENSE +201 -0
  153. data/vendor/automerge-rust/automerge/src/text_diff/myers.rs +332 -0
  154. data/vendor/automerge-rust/automerge/src/text_diff/replace.rs +139 -0
  155. data/vendor/automerge-rust/automerge/src/text_diff/utils.rs +119 -0
  156. data/vendor/automerge-rust/automerge/src/text_diff.rs +515 -0
  157. data/vendor/automerge-rust/automerge/src/text_value.rs +276 -0
  158. data/vendor/automerge-rust/automerge/src/transaction/commit.rs +34 -0
  159. data/vendor/automerge-rust/automerge/src/transaction/inner.rs +1403 -0
  160. data/vendor/automerge-rust/automerge/src/transaction/manual_transaction.rs +147 -0
  161. data/vendor/automerge-rust/automerge/src/transaction/owned_transaction.rs +266 -0
  162. data/vendor/automerge-rust/automerge/src/transaction/result.rs +21 -0
  163. data/vendor/automerge-rust/automerge/src/transaction/transactable.rs +203 -0
  164. data/vendor/automerge-rust/automerge/src/transaction.rs +513 -0
  165. data/vendor/automerge-rust/automerge/src/types.rs +749 -0
  166. data/vendor/automerge-rust/automerge/src/validation.rs +29 -0
  167. data/vendor/automerge-rust/automerge/src/value.rs +763 -0
  168. data/vendor/automerge-rust/automerge/tests/batch_insert.rs +1034 -0
  169. data/vendor/automerge-rust/automerge/tests/block_tests.rs +887 -0
  170. data/vendor/automerge-rust/automerge/tests/convert_string_to_text.rs +72 -0
  171. data/vendor/automerge-rust/automerge/tests/diff_marks.rs +1508 -0
  172. data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_change.automerge +0 -0
  173. data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_doc.automerge +0 -0
  174. data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_has_incorrect_meta.automerge +0 -0
  175. data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_ok.automerge +0 -0
  176. data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_overlong.automerge +0 -0
  177. data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks.automerge +0 -0
  178. data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_compressed.automerge +0 -0
  179. data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_out_of_order.automerge +0 -0
  180. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/action-is-48.automerge +0 -0
  181. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/crash-da39a3ee5e6b4b0d3255bfef95601890afd80709 +0 -0
  182. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/incorrect_max_op.automerge +0 -0
  183. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/invalid_deflate_stream.automerge +0 -0
  184. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/missing_actor.automerge +0 -0
  185. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/overflow_in_length.automerge +0 -0
  186. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_deps.automerge +0 -0
  187. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_ops.automerge +0 -0
  188. data/vendor/automerge-rust/automerge/tests/test.rs +2668 -0
  189. data/vendor/automerge-rust/automerge/tests/test_mark_patches.rs +41 -0
  190. data/vendor/automerge-rust/automerge/tests/test_save_load_orphans.rs +84 -0
  191. data/vendor/automerge-rust/automerge/tests/text.rs +1098 -0
  192. data/vendor/automerge-rust/automerge/tests/text_encoding.rs +640 -0
  193. data/vendor/automerge-rust/automerge-c/CMakeLists.txt +439 -0
  194. data/vendor/automerge-rust/automerge-c/Cargo.toml +22 -0
  195. data/vendor/automerge-rust/automerge-c/README.md +233 -0
  196. data/vendor/automerge-rust/automerge-c/build.rs +21 -0
  197. data/vendor/automerge-rust/automerge-c/cbindgen.toml +48 -0
  198. data/vendor/automerge-rust/automerge-c/cmake/Cargo.toml.in +22 -0
  199. data/vendor/automerge-rust/automerge-c/cmake/automerge-c-config.cmake.in +99 -0
  200. data/vendor/automerge-rust/automerge-c/cmake/cbindgen.toml.in +48 -0
  201. data/vendor/automerge-rust/automerge-c/cmake/config.h.in +58 -0
  202. data/vendor/automerge-rust/automerge-c/cmake/enum-string-functions-gen.cmake +183 -0
  203. data/vendor/automerge-rust/automerge-c/cmake/file-regex-replace.cmake +33 -0
  204. data/vendor/automerge-rust/automerge-c/cmake/file-touch.cmake +35 -0
  205. data/vendor/automerge-rust/automerge-c/docs/CMakeLists.txt +39 -0
  206. data/vendor/automerge-rust/automerge-c/docs/img/brandmark.png +0 -0
  207. data/vendor/automerge-rust/automerge-c/examples/CMakeLists.txt +42 -0
  208. data/vendor/automerge-rust/automerge-c/examples/README.md +9 -0
  209. data/vendor/automerge-rust/automerge-c/examples/quickstart.c +131 -0
  210. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/result.h +30 -0
  211. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack.h +130 -0
  212. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack_callback_data.h +53 -0
  213. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/string.h +29 -0
  214. data/vendor/automerge-rust/automerge-c/src/actor_id.rs +193 -0
  215. data/vendor/automerge-rust/automerge-c/src/byte_span.rs +227 -0
  216. data/vendor/automerge-rust/automerge-c/src/change.rs +356 -0
  217. data/vendor/automerge-rust/automerge-c/src/cursor.rs +168 -0
  218. data/vendor/automerge-rust/automerge-c/src/doc/list.rs +636 -0
  219. data/vendor/automerge-rust/automerge-c/src/doc/map.rs +556 -0
  220. data/vendor/automerge-rust/automerge-c/src/doc/mark.rs +296 -0
  221. data/vendor/automerge-rust/automerge-c/src/doc/utils.rs +46 -0
  222. data/vendor/automerge-rust/automerge-c/src/doc.rs +1009 -0
  223. data/vendor/automerge-rust/automerge-c/src/index.rs +84 -0
  224. data/vendor/automerge-rust/automerge-c/src/item.rs +2177 -0
  225. data/vendor/automerge-rust/automerge-c/src/items.rs +401 -0
  226. data/vendor/automerge-rust/automerge-c/src/lib.rs +11 -0
  227. data/vendor/automerge-rust/automerge-c/src/obj.rs +216 -0
  228. data/vendor/automerge-rust/automerge-c/src/result.rs +653 -0
  229. data/vendor/automerge-rust/automerge-c/src/sync/have.rs +42 -0
  230. data/vendor/automerge-rust/automerge-c/src/sync/message.rs +146 -0
  231. data/vendor/automerge-rust/automerge-c/src/sync/state.rs +262 -0
  232. data/vendor/automerge-rust/automerge-c/src/sync.rs +7 -0
  233. data/vendor/automerge-rust/automerge-c/src/utils/result.c +33 -0
  234. data/vendor/automerge-rust/automerge-c/src/utils/stack.c +106 -0
  235. data/vendor/automerge-rust/automerge-c/src/utils/stack_callback_data.c +9 -0
  236. data/vendor/automerge-rust/automerge-c/src/utils/string.c +46 -0
  237. data/vendor/automerge-rust/automerge-c/test/CMakeLists.txt +67 -0
  238. data/vendor/automerge-rust/automerge-c/test/actor_id_tests.c +140 -0
  239. data/vendor/automerge-rust/automerge-c/test/base_state.c +17 -0
  240. data/vendor/automerge-rust/automerge-c/test/base_state.h +39 -0
  241. data/vendor/automerge-rust/automerge-c/test/byte_span_tests.c +119 -0
  242. data/vendor/automerge-rust/automerge-c/test/cmocka_utils.c +91 -0
  243. data/vendor/automerge-rust/automerge-c/test/cmocka_utils.h +42 -0
  244. data/vendor/automerge-rust/automerge-c/test/cursor_tests.c +263 -0
  245. data/vendor/automerge-rust/automerge-c/test/doc_state.c +27 -0
  246. data/vendor/automerge-rust/automerge-c/test/doc_state.h +17 -0
  247. data/vendor/automerge-rust/automerge-c/test/doc_tests.c +335 -0
  248. data/vendor/automerge-rust/automerge-c/test/enum_string_tests.c +148 -0
  249. data/vendor/automerge-rust/automerge-c/test/files/brave-ape-49.automerge +0 -0
  250. data/vendor/automerge-rust/automerge-c/test/item_tests.c +313 -0
  251. data/vendor/automerge-rust/automerge-c/test/list_tests.c +544 -0
  252. data/vendor/automerge-rust/automerge-c/test/macro_utils.c +38 -0
  253. data/vendor/automerge-rust/automerge-c/test/macro_utils.h +23 -0
  254. data/vendor/automerge-rust/automerge-c/test/main.c +33 -0
  255. data/vendor/automerge-rust/automerge-c/test/map_tests.c +1610 -0
  256. data/vendor/automerge-rust/automerge-c/test/mark_tests.c +124 -0
  257. data/vendor/automerge-rust/automerge-c/test/ported_wasm/basic_tests.c +1642 -0
  258. data/vendor/automerge-rust/automerge-c/test/ported_wasm/cursor_tests.c +108 -0
  259. data/vendor/automerge-rust/automerge-c/test/ported_wasm/suite.c +17 -0
  260. data/vendor/automerge-rust/automerge-c/test/ported_wasm/sync_tests.c +1280 -0
  261. data/vendor/automerge-rust/automerge-c/test/str_utils.c +15 -0
  262. data/vendor/automerge-rust/automerge-c/test/str_utils.h +17 -0
  263. data/vendor/automerge-rust/automerge-test/Cargo.toml +17 -0
  264. data/vendor/automerge-rust/automerge-test/README.md +3 -0
  265. data/vendor/automerge-rust/automerge-test/src/lib.rs +487 -0
  266. data/vendor/automerge-rust/hexane/CHANGELOG.md +34 -0
  267. data/vendor/automerge-rust/hexane/Cargo.toml +47 -0
  268. data/vendor/automerge-rust/hexane/README.md +292 -0
  269. data/vendor/automerge-rust/hexane/RESULTS.txt +20 -0
  270. data/vendor/automerge-rust/hexane/TODO +18 -0
  271. data/vendor/automerge-rust/hexane/benches/insert.rs +82 -0
  272. data/vendor/automerge-rust/hexane/benches/seek.rs +77 -0
  273. data/vendor/automerge-rust/hexane/benches/splice.rs +82 -0
  274. data/vendor/automerge-rust/hexane/src/aggregate.rs +288 -0
  275. data/vendor/automerge-rust/hexane/src/boolean.rs +478 -0
  276. data/vendor/automerge-rust/hexane/src/columndata.rs +2540 -0
  277. data/vendor/automerge-rust/hexane/src/cursor.rs +756 -0
  278. data/vendor/automerge-rust/hexane/src/delta.rs +793 -0
  279. data/vendor/automerge-rust/hexane/src/encoder.rs +639 -0
  280. data/vendor/automerge-rust/hexane/src/leb128.rs +82 -0
  281. data/vendor/automerge-rust/hexane/src/lib.rs +95 -0
  282. data/vendor/automerge-rust/hexane/src/pack.rs +325 -0
  283. data/vendor/automerge-rust/hexane/src/raw.rs +314 -0
  284. data/vendor/automerge-rust/hexane/src/rle.rs +928 -0
  285. data/vendor/automerge-rust/hexane/src/slab/tree.rs +1373 -0
  286. data/vendor/automerge-rust/hexane/src/slab/writer.rs +535 -0
  287. data/vendor/automerge-rust/hexane/src/slab.rs +224 -0
  288. data/vendor/automerge-rust/hexane/src/test.rs +108 -0
  289. data/vendor/bundle/ruby/3.3.0/bin/rake +29 -0
  290. data/vendor/bundle/ruby/3.3.0/bin/rake-compiler +29 -0
  291. data/vendor/bundle/ruby/3.3.0/bin/rake-compiler-dock +29 -0
  292. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/History.rdoc +1732 -0
  293. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Manifest.txt +32 -0
  294. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/README.rdoc +845 -0
  295. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Rakefile +97 -0
  296. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/design_rationale.rb +54 -0
  297. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/hoe/minitest.rb +30 -0
  298. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/assertions.rb +850 -0
  299. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/autorun.rb +6 -0
  300. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/benchmark.rb +452 -0
  301. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/compress.rb +94 -0
  302. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/error_on_warning.rb +11 -0
  303. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/expectations.rb +321 -0
  304. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/hell.rb +11 -0
  305. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/manual_plugins.rb +16 -0
  306. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/mock.rb +327 -0
  307. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/parallel.rb +72 -0
  308. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride.rb +4 -0
  309. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride_plugin.rb +135 -0
  310. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/spec.rb +353 -0
  311. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test.rb +238 -0
  312. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test_task.rb +324 -0
  313. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/unit.rb +42 -0
  314. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest.rb +1250 -0
  315. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/metametameta.rb +150 -0
  316. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_assertions.rb +1677 -0
  317. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_benchmark.rb +137 -0
  318. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_mock.rb +1213 -0
  319. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_reporter.rb +437 -0
  320. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_spec.rb +1159 -0
  321. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test.rb +1374 -0
  322. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test_task.rb +57 -0
  323. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/History.rdoc +2454 -0
  324. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
  325. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/README.rdoc +155 -0
  326. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
  327. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
  328. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
  329. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/a.c +6 -0
  330. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/b.c +6 -0
  331. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/main.c +11 -0
  332. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
  333. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
  334. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
  335. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rake.1 +156 -0
  336. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
  337. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
  338. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/exe/rake +27 -0
  339. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
  340. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
  341. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
  342. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
  343. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
  344. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
  345. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
  346. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
  347. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
  348. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
  349. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
  350. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
  351. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
  352. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
  353. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
  354. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
  355. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
  356. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
  357. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
  358. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
  359. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
  360. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
  361. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
  362. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
  363. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
  364. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
  365. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
  366. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
  367. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
  368. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
  369. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
  370. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
  371. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
  372. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
  373. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
  374. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
  375. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
  376. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
  377. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
  378. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
  379. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
  380. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
  381. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
  382. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake.rb +69 -0
  383. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/rake.gemspec +102 -0
  384. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Gemfile +8 -0
  385. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/History.md +695 -0
  386. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/LICENSE.txt +20 -0
  387. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/README.md +476 -0
  388. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Rakefile +15 -0
  389. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/appveyor.yml +22 -0
  390. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/bin/rake-compiler +24 -0
  391. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/cucumber.yml +4 -0
  392. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/compile.feature +79 -0
  393. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-compile.feature +23 -0
  394. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package-multi.feature +15 -0
  395. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package.feature +14 -0
  396. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-compile.feature +22 -0
  397. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-no-native-compile.feature +33 -0
  398. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-package.feature +24 -0
  399. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/package.feature +40 -0
  400. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/compilation.rb +70 -0
  401. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/cross_compilation.rb +27 -0
  402. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/execution.rb +52 -0
  403. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/folders.rb +32 -0
  404. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/gem.rb +46 -0
  405. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/java_compilation.rb +7 -0
  406. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/env.rb +10 -0
  407. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/file_template_helpers.rb +137 -0
  408. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/generator_helpers.rb +123 -0
  409. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/platform_extension_helpers.rb +27 -0
  410. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/baseextensiontask.rb +90 -0
  411. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/compiler_config.rb +38 -0
  412. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensioncompiler.rb +51 -0
  413. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensiontask.rb +589 -0
  414. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/javaextensiontask.rb +321 -0
  415. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bin/cross-ruby.rake +189 -0
  416. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bootstrap.rake +11 -0
  417. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/common.rake +10 -0
  418. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/cucumber.rake +23 -0
  419. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/gem.rake +15 -0
  420. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/rspec.rake +9 -0
  421. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
  422. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
  423. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
  424. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
  425. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
  426. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
  427. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
  428. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
  429. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
  430. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
  431. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
  432. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
  433. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
  434. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
  435. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
  436. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
  437. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0004-Enable-build-of-static-libruby.patch +38 -0
  438. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0005-build-miniruby-first.patch +16 -0
  439. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0006-ruby-4-rubyspec-capiext.patch +16 -0
  440. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
  441. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
  442. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
  443. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
  444. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
  445. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
  446. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
  447. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
  448. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
  449. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
  450. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
  451. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
  452. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
  453. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
  454. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/binutils-mingw-w64-ignore-check-errors.patch +13 -0
  455. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/gcc-mingw-w64-only-c-c++.patch +13 -0
  456. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
  457. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
  458. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
  459. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
  460. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
  461. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
  462. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
  463. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
  464. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
  465. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
  466. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.c +65 -0
  467. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.h +11 -0
  468. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
  469. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
  470. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
  471. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
  472. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
  473. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
  474. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
  475. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
  476. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
  477. data/vendor/bundle/ruby/3.3.0/specifications/minitest-5.27.0.gemspec +32 -0
  478. data/vendor/bundle/ruby/3.3.0/specifications/rake-13.4.2.gemspec +26 -0
  479. data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-1.3.1.gemspec +33 -0
  480. data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
  481. metadata +584 -0
@@ -0,0 +1,292 @@
1
+ # Hexane
2
+
3
+ Hexane is a columnar compression library that implements the encoding described in the
4
+ [Automerge Binary Format specification](https://automerge.org/automerge-binary-format-spec/).
5
+ It stores sequences of typed values using run-length encoding (RLE), delta encoding, and other
6
+ compact representations, organized in a slab-based B-tree structure for efficient random access
7
+ and in-place modification.
8
+
9
+ It was originally designed to serve [Automerge](https://github.com/automerge/automerge)'s
10
+ internal storage needs. Introducing it reduced Automerge's memory footprint to roughly 1% of
11
+ the previous implementation while keeping performance equal to or better than the old codebase
12
+ for most operations.
13
+
14
+ > **Note:** The public API is still maturing. A v1.0 redesign is planned that will give
15
+ > `ColumnData` a more `Vec`-like interface and remove some ergonomic rough edges. See
16
+ > [Planned v1.0 Changes](#planned-v10-changes) for details.
17
+
18
+ ## Data Model
19
+
20
+ A `ColumnData<C>` stores a sequence of `Option<T>` values, where `T` is determined by the
21
+ cursor type `C`. `None` represents a null entry and is compressed efficiently as a null run.
22
+
23
+ Internally, data is held in a sequence of **slabs** — immutable, `Arc`-wrapped byte buffers
24
+ containing compressed runs of values. The slabs are organized in a `SpanTree` (a balanced
25
+ B-tree keyed by cumulative item count) that supports O(log n) positional seek, insert, and
26
+ splice. Each slab carries pre-computed metadata (item count, accumulator sum, min/max) so that
27
+ range queries and accumulator-based navigation can skip over slabs without decoding them.
28
+
29
+ ## Encoding Types
30
+
31
+ The cursor type parameter of `ColumnData<C>` determines the encoding:
32
+
33
+ | Cursor type | Item type | Encoding |
34
+ |-----------------|-----------|------------------------------------|
35
+ | `UIntCursor` | `u64` | RLE with unsigned LEB128 values |
36
+ | `IntCursor` | `i64` | RLE with signed LEB128 values |
37
+ | `StrCursor` | `str` | RLE with length-prefixed UTF-8 |
38
+ | `ByteCursor` | `[u8]` | RLE with length-prefixed bytes |
39
+ | `BooleanCursor` | `bool` | Boolean run-length encoding |
40
+ | `DeltaCursor` | `i64` | Delta-encoded signed integers |
41
+ | `RawCursor` | `[u8]` | Uncompressed raw bytes |
42
+
43
+ For custom types, use `RleCursor<B, T>` directly where `T: Packable` and `B` is the maximum
44
+ slab size in bytes.
45
+
46
+ ## Quick Start
47
+
48
+ ```rust
49
+ use hexane::{ColumnData, IntCursor, UIntCursor, StrCursor};
50
+ use std::borrow::Cow;
51
+
52
+ // splice(index, delete_count, insert_iter) is the general-purpose mutation method.
53
+ let mut col: ColumnData<UIntCursor> = ColumnData::new();
54
+ col.splice(0, 0, [1u64, 2, 3, 4, 5]);
55
+
56
+ // Collect from an iterator — works with T or Option<T> interchangeably
57
+ let col2: ColumnData<UIntCursor> = [1u64, 2, 3].into_iter().collect();
58
+ assert_eq!(col2.to_vec(), vec![Some(1), Some(2), Some(3)]);
59
+
60
+ // Nullable columns: mix Some and None in the input
61
+ let col3: ColumnData<UIntCursor> = [Some(1u64), None, Some(3)].into_iter().collect();
62
+ assert_eq!(col3.to_vec(), vec![Some(1), None, Some(3)]);
63
+ ```
64
+
65
+ ## Reading Values
66
+
67
+ All read methods return `Option<Cow<'_, C::Item>>`:
68
+
69
+ - `Some(Cow::Owned(value))` — an in-bounds non-null value (copy types like `u64`, `i64`)
70
+ - `Some(Cow::Borrowed(&value))` — an in-bounds non-null value that borrows from the slab
71
+ (used by `StrCursor` and `ByteCursor` to avoid copying)
72
+ - `None` — a null entry
73
+
74
+ `get(index)` returns an extra outer `Option` that is `None` when the index is out of bounds.
75
+
76
+ ```rust
77
+ use hexane::{ColumnData, IntCursor};
78
+ use std::borrow::Cow;
79
+
80
+ let mut col: ColumnData<IntCursor> = ColumnData::new();
81
+ col.splice(0, 0, [1i64, 2, 3, 4, 5, 6, 7]);
82
+
83
+ // Random access — O(log n) seek + O(B) decode where B is runs-per-slab (small)
84
+ assert_eq!(col.get(0), Some(Some(Cow::Owned(1))));
85
+ assert_eq!(col.get(999), None); // out of bounds returns outer None
86
+
87
+ // Sequential iteration — most efficient; decoder state is amortized across a slab
88
+ let first_three: Vec<_> = col.iter().take(3).collect();
89
+ assert_eq!(first_three, vec![
90
+ Some(Cow::Owned(1)),
91
+ Some(Cow::Owned(2)),
92
+ Some(Cow::Owned(3)),
93
+ ]);
94
+
95
+ // Ranged iteration — O(log n) seek to start, then O(range) decode
96
+ let mid: Vec<_> = col.iter_range(3..5).collect();
97
+ assert_eq!(mid, vec![Some(Cow::Owned(4)), Some(Cow::Owned(5))]);
98
+ ```
99
+
100
+ `StrCursor` and `ByteCursor` borrow directly from the internal slab where possible:
101
+
102
+ ```rust
103
+ use hexane::{ColumnData, StrCursor};
104
+ use std::borrow::Cow;
105
+
106
+ let col: ColumnData<StrCursor> = ["hello", "world"].into_iter().collect();
107
+ assert_eq!(col.get(0), Some(Some(Cow::Borrowed("hello")))); // zero-copy
108
+ ```
109
+
110
+ ## Serialization
111
+
112
+ ```rust
113
+ use hexane::{ColumnData, UIntCursor};
114
+
115
+ let mut col: ColumnData<UIntCursor> = ColumnData::new();
116
+ col.splice(0, 0, [1u64, 2, 3, 4, 5]);
117
+
118
+ // save() serializes to a new Vec<u8>
119
+ let bytes: Vec<u8> = col.save();
120
+
121
+ // save_to() appends to an existing buffer and returns the byte range written
122
+ let mut buf = vec![];
123
+ let range = col.save_to(&mut buf);
124
+
125
+ // load() deserializes; returns PackError if the data is malformed
126
+ let col2: ColumnData<UIntCursor> = ColumnData::load(&bytes).unwrap();
127
+ assert_eq!(col.to_vec(), col2.to_vec());
128
+
129
+ // load_unless_empty() treats an empty byte slice as a column of `len` null values
130
+ let col3: ColumnData<UIntCursor> = ColumnData::load_unless_empty(&[], 3).unwrap();
131
+ assert_eq!(col3.to_vec(), vec![None, None, None]);
132
+
133
+ // load_with() validates each decoded value with a callback; returns PackError on failure
134
+ let col4 = ColumnData::<UIntCursor>::load_with(&bytes, &|v| {
135
+ match v {
136
+ Some(n) if n > 100 => Some(format!("value {} too large", n)),
137
+ _ => None,
138
+ }
139
+ }).unwrap();
140
+ ```
141
+
142
+ ## Direct Encoding
143
+
144
+ For one-shot encoding without `ColumnData`, cursor types expose `encode` and
145
+ `encode_unless_empty` class methods that write directly to a byte buffer:
146
+
147
+ ```rust
148
+ use hexane::{StrCursor, BooleanCursor, Encoder};
149
+
150
+ let mut buf = vec![];
151
+ let word_range = StrCursor::encode(&mut buf, ["dog", "book", "bell"]);
152
+ assert_eq!(word_range, 0..15);
153
+
154
+ // encode_unless_empty writes nothing if all values are null/false
155
+ let bool_range = BooleanCursor::encode_unless_empty(&mut buf, [false, false, false]);
156
+ assert_eq!(bool_range, 15..15); // nothing written
157
+
158
+ // For incremental encoding, use Encoder directly
159
+ let mut encoder: Encoder<'_, StrCursor> = Encoder::default();
160
+ for word in ["dog", "book", "bell"] {
161
+ encoder.append(word);
162
+ }
163
+ let _range = encoder.save_to(&mut buf);
164
+ ```
165
+
166
+ ## Advanced: Accumulators (`Acc`)
167
+
168
+ Several `ColumnData` and iterator methods deal with an `Acc` accumulator. `Acc` is a
169
+ monotonically non-decreasing `u64` — the cumulative sum of per-item `Agg` values. The
170
+ aggregate assigned to each item depends on the cursor type:
171
+
172
+ | Cursor | `agg(item)` | Meaning of `Acc` |
173
+ |-----------------|-------------------------------------------|------------------------------|
174
+ | `UIntCursor` | the item value (clamped to `u32`) | cumulative sum of values |
175
+ | `IntCursor` | the item value if it fits in `u32` | cumulative sum of values |
176
+ | `BooleanCursor` | 1 for `true`, 0 for `false` | count of `true` entries |
177
+ | `StrCursor` | 0 | unused |
178
+ | `ByteCursor` | 0 | unused |
179
+ | `DeltaCursor` | the absolute item value (if fits in `u32`)| absolute position tracking |
180
+
181
+ `get_acc(index)` returns the accumulated sum of all items *before* position `index`:
182
+
183
+ ```rust
184
+ use hexane::{ColumnData, UIntCursor, Acc};
185
+
186
+ let col: ColumnData<UIntCursor> = ColumnData::from(vec![3u64, 3, 3]);
187
+ assert_eq!(col.get_acc(0), Acc::from(0usize));
188
+ assert_eq!(col.get_acc(1), Acc::from(3usize));
189
+ assert_eq!(col.get_acc(2), Acc::from(6usize));
190
+ ```
191
+
192
+ `get_with_acc(index)` returns a `ColGroupItem { acc, pos, item }` bundling the pre-item
193
+ accumulator with the value.
194
+
195
+ `iter().with_acc()` returns a `ColGroupIter` that emits `ColGroupItem` values.
196
+
197
+ `iter().advance_acc_by(n)` skips forward until the cumulative accumulator has grown by `n`,
198
+ returning the number of items consumed. This enables O(log n + B) lookup by acc value:
199
+
200
+ ```rust
201
+ use hexane::{ColumnData, UIntCursor};
202
+
203
+ // Column: 0, 1, 1, 0, 1, 1, 0 — acc grows at positions 1, 2, 4, 5
204
+ let col: ColumnData<UIntCursor> = ColumnData::from(vec![0u64, 1, 1, 0, 1, 1, 0]);
205
+ let mut iter = col.iter();
206
+ let items_consumed = iter.advance_acc_by(2u64); // skip until acc has grown by 2
207
+ // items_consumed == 4 (items 0,1,2 consumed, item 3 is the first with acc sum >= 2)
208
+ ```
209
+
210
+ ## Advanced: Ordered Value Lookup
211
+
212
+ For columns with sorted values, `scope_to_value` and the iterator's `seek_to_value` efficiently
213
+ locate the contiguous range of a specific value using B-tree binary search plus a linear scan:
214
+
215
+ ```rust
216
+ use hexane::{ColumnData, UIntCursor};
217
+
218
+ // Values must be sorted for correct results
219
+ let col: ColumnData<UIntCursor> = [2u64, 2, 3, 3, 3, 4, 4].into_iter().collect();
220
+
221
+ let range = col.scope_to_value(Some(3u64), ..);
222
+ assert_eq!(range, 2..5);
223
+
224
+ // Restrict search to a sub-range
225
+ let range = col.scope_to_value(Some(3u64), 1..4);
226
+ assert_eq!(range, 2..4);
227
+ ```
228
+
229
+ `iter().seek_to_value(value, range)` does the same and leaves the iterator positioned at
230
+ the start of the found range, ready to read further.
231
+
232
+ ## Advanced: Iterator Suspension and Resumption
233
+
234
+ An iterator can be suspended and later resumed from the exact same position, provided
235
+ `ColumnData` has not been mutated since the suspend:
236
+
237
+ ```rust
238
+ use hexane::{ColumnData, UIntCursor};
239
+
240
+ let col: ColumnData<UIntCursor> = [1u64, 2, 3, 4, 5].into_iter().collect();
241
+ let mut iter = col.iter();
242
+ iter.advance_by(2); // skip items 0 and 1
243
+
244
+ // Snapshot the iterator position
245
+ let state = iter.suspend();
246
+
247
+ // Resume — returns Err if `col` was mutated after the suspend
248
+ let mut resumed = state.try_resume(&col).unwrap();
249
+ assert_eq!(
250
+ resumed.collect::<Vec<_>>(),
251
+ iter.collect::<Vec<_>>()
252
+ );
253
+ ```
254
+
255
+ ## Performance Characteristics
256
+
257
+ - **Random access** (`get`): O(log n) B-tree lookup + O(B) slab scan, where B is the number
258
+ of encoded runs in a slab (bounded and small by design).
259
+ - **Sequential access** (`iter`, `iter_range`): O(log n) initial seek; amortized O(1) per item
260
+ — the decode state is carried across items within a slab.
261
+ - **Modification** (`splice`, `push`, `extend`): O(log n) B-tree lookup plus an O(slab-size)
262
+ slab rewrite. The affected slab is replaced entirely; unaffected slabs are untouched.
263
+ - **Clone**: O(number of slabs) — slabs are `Arc`-wrapped, so cloning shares byte data.
264
+ - **Serialization** (`save`): O(n) — all slabs are read and re-encoded into a single buffer.
265
+
266
+ For bulk reads, strongly prefer `iter()` or `iter_range()` over repeated `get()` calls.
267
+ For bulk inserts at a known position, a single `splice()` is more efficient than many `push()`.
268
+
269
+ ## Caveats
270
+
271
+ **Clone for rollback:** Because slabs are `Arc`-wrapped, cloning a `ColumnData` is cheap
272
+ (O(slab count)). Automerge exploits this by cloning before each transaction and dropping the
273
+ clone on rollback. This behaviour will likely be removed in v1.0 in favour of an explicit
274
+ inverse-splice rollback.
275
+
276
+ **Null semantics:** `is_empty()` considers a column "empty" if every value is `None` (or
277
+ `false` for `BooleanCursor`). This affects `save_to_unless_empty()` and friends.
278
+
279
+ **Slab size constant:** The `B` const parameter in `RleCursor<B, T>` controls the maximum
280
+ number of items per slab. Smaller values reduce the per-operation cost but increase B-tree
281
+ overhead. The defaults (64 or 128) are a reasonable starting point.
282
+
283
+ ## Planned v1.0 Changes
284
+
285
+ - A `Vec`-like subscript API: `col[a..b]` as shorthand for `col.iter_range(a..b)`
286
+ - Remove pervasive `Cow` return types in favour of direct `&T` / owned `T`
287
+ - A cleaner `DeltaCursor` primitive based on `Delta { abs: i64, step: i64 }`
288
+ - Distinct cursor types for `Rle<u64>`, `Rle<Option<u64>>`, etc.
289
+ - Normalized min/max metadata (currently computed for all slabs, only needed for some)
290
+ - Transaction rollback via inverse splice rather than `Arc`-shared clone
291
+ - A SortedColumnData type so features like `seek_to_value` are not available on
292
+ datasets that cant support it
@@ -0,0 +1,20 @@
1
+
2
+
3
+ ### Run 1 - zero optimizations 9/13/24
4
+
5
+ test insert_1000_large ... bench: 18,305,708.30 ns/iter (+/- 517,430.79)
6
+ test insert_1000_small ... bench: 15,014,266.60 ns/iter (+/- 184,359.62)
7
+ test insert_100_large ... bench: 358,804.20 ns/iter (+/- 6,484.01)
8
+ test insert_100_small ... bench: 315,770.80 ns/iter (+/- 5,799.79)
9
+ test insert_10_large ... bench: 12,119.78 ns/iter (+/- 273.44)
10
+ test insert_10_small ... bench: 10,512.50 ns/iter (+/- 234.29)
11
+
12
+ ### Run 2 - iterate per chunk on seek by, set <B> to 64, MAX=4 - 9/13/24
13
+
14
+ test insert_1000_large ... bench: 927,366.60 ns/iter (+/- 6,176.25)
15
+ test insert_1000_small ... bench: 1,104,345.90 ns/iter (+/- 12,258.75)
16
+ test insert_100_large ... bench: 91,020.38 ns/iter (+/- 1,097.83)
17
+ test insert_100_small ... bench: 103,733.32 ns/iter (+/- 1,630.76)
18
+ test insert_10_large ... bench: 7,547.11 ns/iter (+/- 66.32)
19
+ test insert_10_small ... bench: 6,354.34 ns/iter (+/- 65.45)
20
+
@@ -0,0 +1,18 @@
1
+
2
+ Cleanup
3
+ * ScanMeta should be a lambda
4
+
5
+ * Delta needs a different primitive `Delta { abs: i64, step: i64 }`
6
+ * this will allow for cleanup/removal of all the special case abs code in writer etc
7
+
8
+ * Need to have distinct cursors for Rle<u64>, Rle<Option<u64>>, Rle<String>, Rle<Vec<u8>>
9
+ * maybe get_ref(), iter_ref() for things that implement Borrow()
10
+ * would be nice to get rid of all the Cow's
11
+
12
+ * need more methods to make these behave like Vec such as col[a..b] as a stand-in for
13
+ col.iter_range(a..b)
14
+
15
+ * need to normalize all the min/max stuff - not needed for all slabs and taking up space
16
+
17
+ * would be nice to have a stat_collector for iter()/get()
18
+
@@ -0,0 +1,82 @@
1
+ use divan::Bencher;
2
+ use hexane::*;
3
+ use std::time::Duration;
4
+
5
+ use rand::{rng, Rng};
6
+
7
+ const N: u64 = 10_000;
8
+
9
+ fn main() {
10
+ divan::main();
11
+ }
12
+
13
+ const IRANGE: i64 = 1000;
14
+ const URANGE: u64 = 1000;
15
+
16
+ fn rand_u64() -> u64 {
17
+ rng().next_u64() % URANGE
18
+ }
19
+ fn rand_i64() -> i64 {
20
+ rand_u64() as i64 - IRANGE / 2
21
+ }
22
+ fn rand_bool() -> bool {
23
+ rand_u64() % 2 == 0
24
+ }
25
+ fn rand_usize() -> usize {
26
+ rng().next_u64() as usize
27
+ }
28
+
29
+ #[inline(never)]
30
+ #[divan::bench(max_time = Duration::from_secs(3))]
31
+ fn insert_raw(bencher: Bencher) {
32
+ let mut col: ColumnData<RawCursor> = (0..N).map(|_| vec![0, 1, 2, 3, 4]).collect();
33
+ bencher.bench_local(|| {
34
+ let pos = rand_usize() % (col.len() / 5) * 5;
35
+ let value = vec![0, 1, 2, 3, 4];
36
+ col.splice(pos, 0, [value]);
37
+ });
38
+ }
39
+
40
+ #[inline(never)]
41
+ #[divan::bench(max_time = Duration::from_secs(3))]
42
+ fn insert_uint(bencher: Bencher) {
43
+ let mut col: ColumnData<UIntCursor> = (0..N).map(|_| rand_u64()).collect();
44
+ bencher.bench_local(|| {
45
+ let pos = rand_usize() % col.len();
46
+ let value = rand_u64();
47
+ col.splice(pos, 0, [value]);
48
+ });
49
+ }
50
+
51
+ #[inline(never)]
52
+ #[divan::bench(max_time = Duration::from_secs(3))]
53
+ fn insert_int(bencher: Bencher) {
54
+ let mut col: ColumnData<IntCursor> = (0..N).map(|_| rand_i64()).collect();
55
+ bencher.bench_local(|| {
56
+ let pos = rand_usize() % col.len();
57
+ let value = rand_i64();
58
+ col.splice(pos, 0, [value]);
59
+ });
60
+ }
61
+
62
+ #[inline(never)]
63
+ #[divan::bench(max_time = Duration::from_secs(3))]
64
+ fn insert_delta(bencher: Bencher) {
65
+ let mut col: ColumnData<DeltaCursor> = (0..N).map(|_| rand_i64().abs()).collect();
66
+ bencher.bench_local(|| {
67
+ let pos = rand_usize() % col.len();
68
+ let value = rand_i64().abs();
69
+ col.splice(pos, 0, [value]);
70
+ });
71
+ }
72
+
73
+ #[inline(never)]
74
+ #[divan::bench(max_time = Duration::from_secs(3))]
75
+ fn insert_bool(bencher: Bencher) {
76
+ let mut col: ColumnData<BooleanCursor> = (0..N).map(|_| rand_bool()).collect();
77
+ bencher.bench_local(|| {
78
+ let pos = rand_usize() % col.len();
79
+ let value = rand_bool();
80
+ col.splice(pos, 0, [value]);
81
+ });
82
+ }
@@ -0,0 +1,77 @@
1
+ use divan::Bencher;
2
+ use hexane::*;
3
+ use std::time::Duration;
4
+
5
+ use rand::{rng, Rng};
6
+
7
+ const N: u64 = 10_000;
8
+
9
+ fn main() {
10
+ divan::main();
11
+ }
12
+
13
+ const IRANGE: i64 = 1000;
14
+ const URANGE: u64 = 1000;
15
+
16
+ fn rand_u64() -> u64 {
17
+ rng().next_u64() % URANGE
18
+ }
19
+ fn rand_i64() -> i64 {
20
+ rand_u64() as i64 - IRANGE / 2
21
+ }
22
+ fn rand_bool() -> bool {
23
+ rand_u64() % 2 == 0
24
+ }
25
+ fn rand_usize() -> usize {
26
+ rng().next_u64() as usize
27
+ }
28
+
29
+ #[inline(never)]
30
+ #[divan::bench(max_time = Duration::from_secs(3))]
31
+ fn seek_bool(bencher: Bencher) {
32
+ let col: ColumnData<BooleanCursor> = (0..N).map(|_| rand_bool()).collect();
33
+ bencher.bench_local(|| {
34
+ let pos = rand_usize() % col.len();
35
+ col.get(pos);
36
+ });
37
+ }
38
+
39
+ #[inline(never)]
40
+ #[divan::bench(max_time = Duration::from_secs(3))]
41
+ fn seek_int(bencher: Bencher) {
42
+ let col: ColumnData<IntCursor> = (0..N).map(|_| rand_i64()).collect();
43
+ bencher.bench_local(|| {
44
+ let pos = rand_usize() % col.len();
45
+ col.get(pos);
46
+ });
47
+ }
48
+
49
+ #[inline(never)]
50
+ #[divan::bench(max_time = Duration::from_secs(3))]
51
+ fn seek_unt(bencher: Bencher) {
52
+ let col: ColumnData<UIntCursor> = (0..N).map(|_| rand_u64()).collect();
53
+ bencher.bench_local(|| {
54
+ let pos = rand_usize() % col.len();
55
+ col.get(pos);
56
+ });
57
+ }
58
+
59
+ #[inline(never)]
60
+ #[divan::bench(max_time = Duration::from_secs(3))]
61
+ fn seek_delta(bencher: Bencher) {
62
+ let col: ColumnData<DeltaCursor> = (0..N).map(|_| rand_i64()).collect();
63
+ bencher.bench_local(|| {
64
+ let pos = rand_usize() % col.len();
65
+ col.get(pos);
66
+ });
67
+ }
68
+
69
+ #[inline(never)]
70
+ #[divan::bench(max_time = Duration::from_secs(3))]
71
+ fn seek_raw(bencher: Bencher) {
72
+ let col: ColumnData<RawCursor> = (0..N).map(|_| vec![0, 1, 2, 3, 4]).collect();
73
+ bencher.bench_local(|| {
74
+ let pos = rand_usize() % (col.len() / 5) * 5;
75
+ col.get(pos);
76
+ });
77
+ }
@@ -0,0 +1,82 @@
1
+ use divan::Bencher;
2
+ use hexane::*;
3
+ use std::time::Duration;
4
+
5
+ use rand::{rng, Rng};
6
+
7
+ const N: u64 = 10_000;
8
+
9
+ fn main() {
10
+ divan::main();
11
+ }
12
+
13
+ const IRANGE: i64 = 1000;
14
+ const URANGE: u64 = 1000;
15
+
16
+ fn rand_u64() -> u64 {
17
+ rng().next_u64() % URANGE
18
+ }
19
+ fn rand_i64() -> i64 {
20
+ rand_u64() as i64 - IRANGE / 2
21
+ }
22
+ fn rand_bool() -> bool {
23
+ rand_u64() % 2 == 0
24
+ }
25
+ fn rand_usize() -> usize {
26
+ rng().next_u64() as usize
27
+ }
28
+
29
+ #[inline(never)]
30
+ #[divan::bench(max_time = Duration::from_secs(3))]
31
+ fn splice_uint(bencher: Bencher) {
32
+ let mut col: ColumnData<UIntCursor> = (0..N).map(|_| rand_u64()).collect();
33
+ bencher.bench_local(|| {
34
+ let pos = rand_usize() % col.len();
35
+ let value = rand_u64();
36
+ col.splice(pos, 1, [value]);
37
+ });
38
+ }
39
+
40
+ #[inline(never)]
41
+ #[divan::bench(max_time = Duration::from_secs(3))]
42
+ fn splice_int(bencher: Bencher) {
43
+ let mut col: ColumnData<IntCursor> = (0..N).map(|_| rand_i64()).collect();
44
+ bencher.bench_local(|| {
45
+ let pos = rand_usize() % col.len();
46
+ let value = rand_i64();
47
+ col.splice(pos, 1, [value]);
48
+ });
49
+ }
50
+
51
+ #[inline(never)]
52
+ #[divan::bench(max_time = Duration::from_secs(3))]
53
+ fn splice_delta(bencher: Bencher) {
54
+ let mut col: ColumnData<DeltaCursor> = (0..N).map(|_| rand_i64().abs()).collect();
55
+ bencher.bench_local(|| {
56
+ let pos = rand_usize() % col.len();
57
+ let value = rand_i64().abs();
58
+ col.splice(pos, 1, [value]);
59
+ });
60
+ }
61
+
62
+ #[inline(never)]
63
+ #[divan::bench(max_time = Duration::from_secs(3))]
64
+ fn splice_bool(bencher: Bencher) {
65
+ let mut col: ColumnData<BooleanCursor> = (0..N).map(|_| rand_bool()).collect();
66
+ bencher.bench_local(|| {
67
+ let pos = rand_usize() % col.len();
68
+ let value = rand_bool();
69
+ col.splice(pos, 1, [value]);
70
+ });
71
+ }
72
+
73
+ #[inline(never)]
74
+ #[divan::bench(max_time = Duration::from_secs(3))]
75
+ fn splice_raw(bencher: Bencher) {
76
+ let mut col: ColumnData<RawCursor> = (0..N).map(|_| vec![0, 1, 2, 3, 4]).collect();
77
+ bencher.bench_local(|| {
78
+ let pos = rand_usize() % (col.len() / 5) * 5;
79
+ let value = vec![0, 1, 2, 3, 4];
80
+ col.splice(pos, 5, [value]);
81
+ });
82
+ }