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,146 @@
1
+ use automerge as am;
2
+ use std::cell::RefCell;
3
+ use std::collections::BTreeMap;
4
+
5
+ use crate::change::AMchange;
6
+ use crate::result::{to_result, AMresult};
7
+ use crate::sync::have::AMsyncHave;
8
+
9
+ macro_rules! to_sync_message {
10
+ ($handle:expr) => {{
11
+ let handle = $handle.as_ref();
12
+ match handle {
13
+ Some(b) => b,
14
+ None => return AMresult::error("Invalid `AMsyncMessage*`").into(),
15
+ }
16
+ }};
17
+ }
18
+
19
+ pub(crate) use to_sync_message;
20
+
21
+ /// \struct AMsyncMessage
22
+ /// \installed_headerfile
23
+ /// \brief A synchronization message for a peer.
24
+ #[derive(PartialEq)]
25
+ pub struct AMsyncMessage {
26
+ body: am::sync::Message,
27
+ changes_storage: RefCell<BTreeMap<usize, AMchange>>,
28
+ haves_storage: RefCell<BTreeMap<usize, AMsyncHave>>,
29
+ }
30
+
31
+ impl AMsyncMessage {
32
+ pub fn new(message: am::sync::Message) -> Self {
33
+ Self {
34
+ body: message,
35
+ changes_storage: RefCell::new(BTreeMap::new()),
36
+ haves_storage: RefCell::new(BTreeMap::new()),
37
+ }
38
+ }
39
+ }
40
+
41
+ impl AsRef<am::sync::Message> for AMsyncMessage {
42
+ fn as_ref(&self) -> &am::sync::Message {
43
+ &self.body
44
+ }
45
+ }
46
+
47
+ /// \memberof AMsyncMessage
48
+ /// \brief Decodes an array of bytes into a synchronization message.
49
+ ///
50
+ /// \param[in] src A pointer to an array of bytes.
51
+ /// \param[in] count The count of bytes to decode from the array pointed to by
52
+ /// \p src.
53
+ /// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_SYNC_MESSAGE` item.
54
+ /// \pre \p src `!= NULL`
55
+ /// \pre `sizeof(`\p src `) > 0`
56
+ /// \pre \p count `<= sizeof(`\p src `)`
57
+ /// \warning The returned `AMresult` struct pointer must be passed to
58
+ /// `AMresultFree()` in order to avoid a memory leak.
59
+ /// \internal
60
+ ///
61
+ /// # Safety
62
+ /// src must be a byte array of length `>= count`
63
+ #[no_mangle]
64
+ pub unsafe extern "C" fn AMsyncMessageDecode(src: *const u8, count: usize) -> *mut AMresult {
65
+ let data = std::slice::from_raw_parts(src, count);
66
+ to_result(am::sync::Message::decode(data))
67
+ }
68
+
69
+ /// \memberof AMsyncMessage
70
+ /// \brief Encodes a synchronization message as an array of bytes.
71
+ ///
72
+ /// \param[in] sync_message A pointer to an `AMsyncMessage` struct.
73
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_BYTES` item.
74
+ /// \pre \p sync_message `!= NULL`
75
+ /// \warning The returned `AMresult` struct pointer must be passed to
76
+ /// `AMresultFree()` in order to avoid a memory leak.
77
+ /// \internal
78
+ ///
79
+ /// # Safety
80
+ /// sync_message must be a valid pointer to an AMsyncMessage
81
+ #[no_mangle]
82
+ pub unsafe extern "C" fn AMsyncMessageEncode(sync_message: *const AMsyncMessage) -> *mut AMresult {
83
+ let sync_message = to_sync_message!(sync_message);
84
+ to_result(sync_message.as_ref().clone().encode())
85
+ }
86
+
87
+ /// \memberof AMsyncMessage
88
+ /// \brief Gets a summary of the changes that the sender already has.
89
+ ///
90
+ /// \param[in] sync_message A pointer to an `AMsyncMessage` struct.
91
+ /// \return A pointer to an `AMresult` struct with `AM_SYNC_HAVE` items.
92
+ /// \pre \p sync_message `!= NULL`
93
+ /// \warning The returned `AMresult` struct pointer must be passed to
94
+ /// `AMresultFree()` in order to avoid a memory leak.
95
+ /// \internal
96
+ ///
97
+ /// # Safety
98
+ /// sync_message must be a valid pointer to an AMsyncMessage
99
+ #[no_mangle]
100
+ pub unsafe extern "C" fn AMsyncMessageHaves(sync_message: *const AMsyncMessage) -> *mut AMresult {
101
+ to_result(match sync_message.as_ref() {
102
+ Some(sync_message) => sync_message.as_ref().have.as_slice(),
103
+ None => Default::default(),
104
+ })
105
+ }
106
+
107
+ /// \memberof AMsyncMessage
108
+ /// \brief Gets the heads of the sender.
109
+ ///
110
+ /// \param[in] sync_message A pointer to an `AMsyncMessage` struct.
111
+ /// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_CHANGE_HASH` items.
112
+ /// \pre \p sync_message `!= NULL`
113
+ /// \warning The returned `AMresult` struct pointer must be passed to
114
+ /// `AMresultFree()` in order to avoid a memory leak.
115
+ /// \internal
116
+ ///
117
+ /// # Safety
118
+ /// sync_message must be a valid pointer to an AMsyncMessage
119
+ #[no_mangle]
120
+ pub unsafe extern "C" fn AMsyncMessageHeads(sync_message: *const AMsyncMessage) -> *mut AMresult {
121
+ to_result(match sync_message.as_ref() {
122
+ Some(sync_message) => sync_message.as_ref().heads.as_slice(),
123
+ None => Default::default(),
124
+ })
125
+ }
126
+
127
+ /// \memberof AMsyncMessage
128
+ /// \brief Gets the hashes of any changes that are being explicitly requested
129
+ /// by the recipient.
130
+ ///
131
+ /// \param[in] sync_message A pointer to an `AMsyncMessage` struct.
132
+ /// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_CHANGE_HASH` items.
133
+ /// \pre \p sync_message `!= NULL`
134
+ /// \warning The returned `AMresult` struct pointer must be passed to
135
+ /// `AMresultFree()` in order to avoid a memory leak.
136
+ /// \internal
137
+ ///
138
+ /// # Safety
139
+ /// sync_message must be a valid pointer to an AMsyncMessage
140
+ #[no_mangle]
141
+ pub unsafe extern "C" fn AMsyncMessageNeeds(sync_message: *const AMsyncMessage) -> *mut AMresult {
142
+ to_result(match sync_message.as_ref() {
143
+ Some(sync_message) => sync_message.as_ref().need.as_slice(),
144
+ None => Default::default(),
145
+ })
146
+ }
@@ -0,0 +1,262 @@
1
+ use automerge as am;
2
+ use std::cell::RefCell;
3
+ use std::collections::BTreeMap;
4
+
5
+ use crate::result::{to_result, AMresult};
6
+ use crate::sync::have::AMsyncHave;
7
+
8
+ macro_rules! to_sync_state {
9
+ ($handle:expr) => {{
10
+ let handle = $handle.as_ref();
11
+ match handle {
12
+ Some(b) => b,
13
+ None => return AMresult::error("Invalid `AMsyncState*`").into(),
14
+ }
15
+ }};
16
+ }
17
+
18
+ pub(crate) use to_sync_state;
19
+
20
+ /// \struct AMsyncState
21
+ /// \installed_headerfile
22
+ /// \brief The state of synchronization with a peer.
23
+ #[derive(Eq, PartialEq)]
24
+ pub struct AMsyncState {
25
+ body: am::sync::State,
26
+ their_haves_storage: RefCell<BTreeMap<usize, AMsyncHave>>,
27
+ }
28
+
29
+ impl AMsyncState {
30
+ pub fn new(state: am::sync::State) -> Self {
31
+ Self {
32
+ body: state,
33
+ their_haves_storage: RefCell::new(BTreeMap::new()),
34
+ }
35
+ }
36
+ }
37
+
38
+ impl AsMut<am::sync::State> for AMsyncState {
39
+ fn as_mut(&mut self) -> &mut am::sync::State {
40
+ &mut self.body
41
+ }
42
+ }
43
+
44
+ impl AsRef<am::sync::State> for AMsyncState {
45
+ fn as_ref(&self) -> &am::sync::State {
46
+ &self.body
47
+ }
48
+ }
49
+
50
+ impl From<AMsyncState> for *mut AMsyncState {
51
+ fn from(b: AMsyncState) -> Self {
52
+ Box::into_raw(Box::new(b))
53
+ }
54
+ }
55
+
56
+ /// \memberof AMsyncState
57
+ /// \brief Decodes an array of bytes into a synchronization state.
58
+ ///
59
+ /// \param[in] src A pointer to an array of bytes.
60
+ /// \param[in] count The count of bytes to decode from the array pointed to by
61
+ /// \p src.
62
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_SYNC_STATE` item.
63
+ /// \pre \p src `!= NULL`
64
+ /// \pre `sizeof(`\p src `) > 0`
65
+ /// \pre \p count `<= sizeof(`\p src `)`
66
+ /// \warning The returned `AMresult` struct pointer must be passed to
67
+ /// `AMresultFree()` in order to avoid a memory leak.
68
+ /// \internal
69
+ ///
70
+ /// # Safety
71
+ /// src must be a byte array of length `>= count`
72
+ #[no_mangle]
73
+ pub unsafe extern "C" fn AMsyncStateDecode(src: *const u8, count: usize) -> *mut AMresult {
74
+ let data = std::slice::from_raw_parts(src, count);
75
+ to_result(am::sync::State::decode(data))
76
+ }
77
+
78
+ /// \memberof AMsyncState
79
+ /// \brief Encodes a synchronization state as an array of bytes.
80
+ ///
81
+ /// \param[in] sync_state A pointer to an `AMsyncState` struct.
82
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_BYTE_SPAN` item.
83
+ /// \pre \p sync_state `!= NULL`
84
+ /// \warning The returned `AMresult` struct pointer must be passed to
85
+ /// `AMresultFree()` in order to avoid a memory leak.
86
+ /// \internal
87
+ ///
88
+ /// # Safety
89
+ /// sync_state must be a valid pointer to an AMsyncState
90
+ #[no_mangle]
91
+ pub unsafe extern "C" fn AMsyncStateEncode(sync_state: *const AMsyncState) -> *mut AMresult {
92
+ let sync_state = to_sync_state!(sync_state);
93
+ to_result(sync_state.as_ref().encode())
94
+ }
95
+
96
+ /// \memberof AMsyncState
97
+ /// \brief Tests the equality of two synchronization states.
98
+ ///
99
+ /// \param[in] sync_state1 A pointer to an `AMsyncState` struct.
100
+ /// \param[in] sync_state2 A pointer to an `AMsyncState` struct.
101
+ /// \return `true` if \p sync_state1 `==` \p sync_state2 and `false` otherwise.
102
+ /// \pre \p sync_state1 `!= NULL`
103
+ /// \pre \p sync_state2 `!= NULL`
104
+ /// \post `!(`\p sync_state1 `&&` \p sync_state2 `) -> false`
105
+ /// \internal
106
+ ///
107
+ /// #Safety
108
+ /// sync_state1 must be a valid pointer to an AMsyncState
109
+ /// sync_state2 must be a valid pointer to an AMsyncState
110
+ #[no_mangle]
111
+ pub unsafe extern "C" fn AMsyncStateEqual(
112
+ sync_state1: *const AMsyncState,
113
+ sync_state2: *const AMsyncState,
114
+ ) -> bool {
115
+ match (sync_state1.as_ref(), sync_state2.as_ref()) {
116
+ (Some(sync_state1), Some(sync_state2)) => sync_state1.as_ref() == sync_state2.as_ref(),
117
+ (None, None) | (None, Some(_)) | (Some(_), None) => false,
118
+ }
119
+ }
120
+
121
+ /// \memberof AMsyncState
122
+ /// \brief Allocates a new synchronization state and initializes it from
123
+ /// default values.
124
+ ///
125
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_SYNC_STATE` item.
126
+ /// \warning The returned `AMresult` struct pointer must be passed to
127
+ /// `AMresultFree()` in order to avoid a memory leak.
128
+ #[no_mangle]
129
+ pub extern "C" fn AMsyncStateInit() -> *mut AMresult {
130
+ to_result(am::sync::State::new())
131
+ }
132
+
133
+ /// \memberof AMsyncState
134
+ /// \brief Gets the heads that are shared by both peers.
135
+ ///
136
+ /// \param[in] sync_state A pointer to an `AMsyncState` struct.
137
+ /// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_CHANGE_HASH` items.
138
+ /// \pre \p sync_state `!= NULL`
139
+ /// \warning The returned `AMresult` struct pointer must be passed to
140
+ /// `AMresultFree()` in order to avoid a memory leak.
141
+ /// \internal
142
+ ///
143
+ /// # Safety
144
+ /// sync_state must be a valid pointer to an AMsyncState
145
+ #[no_mangle]
146
+ pub unsafe extern "C" fn AMsyncStateSharedHeads(sync_state: *const AMsyncState) -> *mut AMresult {
147
+ let sync_state = to_sync_state!(sync_state);
148
+ to_result(sync_state.as_ref().shared_heads.as_slice())
149
+ }
150
+
151
+ /// \memberof AMsyncState
152
+ /// \brief Gets the heads that were last sent by this peer.
153
+ ///
154
+ /// \param[in] sync_state A pointer to an `AMsyncState` struct.
155
+ /// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_CHANGE_HASH` items.
156
+ /// \pre \p sync_state `!= NULL`
157
+ /// \warning The returned `AMresult` struct pointer must be passed to
158
+ /// `AMresultFree()` in order to avoid a memory leak.
159
+ /// \internal
160
+ ///
161
+ /// # Safety
162
+ /// sync_state must be a valid pointer to an AMsyncState
163
+ #[no_mangle]
164
+ pub unsafe extern "C" fn AMsyncStateLastSentHeads(sync_state: *const AMsyncState) -> *mut AMresult {
165
+ let sync_state = to_sync_state!(sync_state);
166
+ to_result(sync_state.as_ref().last_sent_heads.as_slice())
167
+ }
168
+
169
+ /// \memberof AMsyncState
170
+ /// \brief Gets a summary of the changes that the other peer already has.
171
+ ///
172
+ /// \param[in] sync_state A pointer to an `AMsyncState` struct.
173
+ /// \param[out] has_value A pointer to a boolean flag that is set to `true` if
174
+ /// the returned `AMitems` struct is relevant, `false` otherwise.
175
+ /// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_SYNC_HAVE` items.
176
+ /// \pre \p sync_state `!= NULL`
177
+ /// \pre \p has_value `!= NULL`
178
+ /// \warning The returned `AMresult` struct pointer must be passed to
179
+ /// `AMresultFree()` in order to avoid a memory leak.
180
+ /// \internal
181
+ ///
182
+ /// # Safety
183
+ /// sync_state must be a valid pointer to an AMsyncState
184
+ /// has_value must be a valid pointer to a bool.
185
+ #[no_mangle]
186
+ pub unsafe extern "C" fn AMsyncStateTheirHaves(
187
+ sync_state: *const AMsyncState,
188
+ has_value: *mut bool,
189
+ ) -> *mut AMresult {
190
+ if let Some(sync_state) = sync_state.as_ref() {
191
+ if let Some(haves) = &sync_state.as_ref().their_have {
192
+ *has_value = true;
193
+ return to_result(haves.as_slice());
194
+ }
195
+ };
196
+ *has_value = false;
197
+ to_result(Vec::<am::sync::Have>::new())
198
+ }
199
+
200
+ /// \memberof AMsyncState
201
+ /// \brief Gets the heads that were sent by the other peer.
202
+ ///
203
+ /// \param[in] sync_state A pointer to an `AMsyncState` struct.
204
+ /// \param[out] has_value A pointer to a boolean flag that is set to `true` if
205
+ /// the returned `AMitems` struct is relevant, `false`
206
+ /// otherwise.
207
+ /// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_CHANGE_HASH` items.
208
+ /// \pre \p sync_state `!= NULL`
209
+ /// \pre \p has_value `!= NULL`
210
+ /// \warning The returned `AMresult` struct pointer must be passed to
211
+ /// `AMresultFree()` in order to avoid a memory leak.
212
+ /// \internal
213
+ ///
214
+ /// # Safety
215
+ /// sync_state must be a valid pointer to an AMsyncState
216
+ /// has_value must be a valid pointer to a bool
217
+ #[no_mangle]
218
+ pub unsafe extern "C" fn AMsyncStateTheirHeads(
219
+ sync_state: *const AMsyncState,
220
+ has_value: *mut bool,
221
+ ) -> *mut AMresult {
222
+ if let Some(sync_state) = sync_state.as_ref() {
223
+ if let Some(change_hashes) = &sync_state.as_ref().their_heads {
224
+ *has_value = true;
225
+ return to_result(change_hashes.as_slice());
226
+ }
227
+ };
228
+ *has_value = false;
229
+ to_result(Vec::<am::ChangeHash>::new())
230
+ }
231
+
232
+ /// \memberof AMsyncState
233
+ /// \brief Gets the needs that were sent by the other peer.
234
+ ///
235
+ /// \param[in] sync_state A pointer to an `AMsyncState` struct.
236
+ /// \param[out] has_value A pointer to a boolean flag that is set to `true` if
237
+ /// the returned `AMitems` struct is relevant, `false`
238
+ /// otherwise.
239
+ /// \return A pointer to an `AMresult` struct with `AM_VAL_TYPE_CHANGE_HASH` items.
240
+ /// \pre \p sync_state `!= NULL`
241
+ /// \pre \p has_value `!= NULL`
242
+ /// \warning The returned `AMresult` struct pointer must be passed to
243
+ /// `AMresultFree()` in order to avoid a memory leak.
244
+ /// \internal
245
+ ///
246
+ /// # Safety
247
+ /// sync_state must be a valid pointer to an AMsyncState
248
+ /// has_value must be a valid pointer to a bool
249
+ #[no_mangle]
250
+ pub unsafe extern "C" fn AMsyncStateTheirNeeds(
251
+ sync_state: *const AMsyncState,
252
+ has_value: *mut bool,
253
+ ) -> *mut AMresult {
254
+ if let Some(sync_state) = sync_state.as_ref() {
255
+ if let Some(change_hashes) = &sync_state.as_ref().their_need {
256
+ *has_value = true;
257
+ return to_result(change_hashes.as_slice());
258
+ }
259
+ };
260
+ *has_value = false;
261
+ to_result(Vec::<am::ChangeHash>::new())
262
+ }
@@ -0,0 +1,7 @@
1
+ mod have;
2
+ mod message;
3
+ mod state;
4
+
5
+ pub(crate) use have::AMsyncHave;
6
+ pub(crate) use message::{to_sync_message, AMsyncMessage};
7
+ pub(crate) use state::AMsyncState;
@@ -0,0 +1,33 @@
1
+ #include <stdarg.h>
2
+
3
+ #include <automerge-c/utils/result.h>
4
+
5
+ AMresult* AMresultFrom(int count, ...) {
6
+ AMresult* result = NULL;
7
+ bool is_ok = true;
8
+ va_list args;
9
+ va_start(args, count);
10
+ for (int i = 0; i != count; ++i) {
11
+ AMresult* src = va_arg(args, AMresult*);
12
+ AMresult* dest = result;
13
+ is_ok = (AMresultStatus(src) == AM_STATUS_OK);
14
+ if (is_ok) {
15
+ if (dest) {
16
+ result = AMresultCat(dest, src);
17
+ is_ok = (AMresultStatus(result) == AM_STATUS_OK);
18
+ AMresultFree(dest);
19
+ AMresultFree(src);
20
+ } else {
21
+ result = src;
22
+ }
23
+ } else {
24
+ AMresultFree(src);
25
+ }
26
+ }
27
+ va_end(args);
28
+ if (!is_ok) {
29
+ AMresultFree(result);
30
+ result = NULL;
31
+ }
32
+ return result;
33
+ }
@@ -0,0 +1,106 @@
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+
4
+ #include <automerge-c/utils/stack.h>
5
+ #include <automerge-c/utils/string.h>
6
+
7
+ void AMstackFree(AMstack** stack) {
8
+ if (stack) {
9
+ while (*stack) {
10
+ AMresultFree(AMstackPop(stack, NULL));
11
+ }
12
+ }
13
+ }
14
+
15
+ AMresult* AMstackPop(AMstack** stack, const AMresult* result) {
16
+ if (!stack) {
17
+ return NULL;
18
+ }
19
+ AMstack** prev = stack;
20
+ if (result) {
21
+ while (*prev && ((*prev)->result != result)) {
22
+ *prev = (*prev)->prev;
23
+ }
24
+ }
25
+ if (!*prev) {
26
+ return NULL;
27
+ }
28
+ AMstack* target = *prev;
29
+ *prev = target->prev;
30
+ AMresult* popped = target->result;
31
+ free(target);
32
+ return popped;
33
+ }
34
+
35
+ AMresult* AMstackResult(AMstack** stack, AMresult* result, AMstackCallback callback, void* data) {
36
+ if (!stack) {
37
+ if (callback) {
38
+ /* Create a local stack so that the callback can still examine the
39
+ * result. */
40
+ AMstack node = {.result = result, .prev = NULL};
41
+ AMstack* stack = &node;
42
+ callback(&stack, data);
43
+ } else {
44
+ /* \note There is no reason to call this function when both the
45
+ * stack and the callback are null. */
46
+ fprintf(stderr, "ERROR: NULL AMstackCallback!\n");
47
+ }
48
+ /* \note Nothing can be returned without a stack regardless of
49
+ * whether or not the callback validated the result. */
50
+ AMresultFree(result);
51
+ return NULL;
52
+ }
53
+ /* Always push the result onto the stack, even if it's null, so that the
54
+ * callback can examine it. */
55
+ AMstack* next = calloc(1, sizeof(AMstack));
56
+ *next = (AMstack){.result = result, .prev = *stack};
57
+ AMstack* top = next;
58
+ *stack = top;
59
+ if (callback) {
60
+ if (!callback(stack, data)) {
61
+ /* The result didn't pass the callback's examination. */
62
+ return NULL;
63
+ }
64
+ } else {
65
+ /* Report an obvious error. */
66
+ if (result) {
67
+ AMbyteSpan const err_msg = AMresultError(result);
68
+ if (err_msg.src && err_msg.count) {
69
+ /* \note The callback may be null because the result is supposed
70
+ * to be examined externally so return it despite an
71
+ * error. */
72
+ char* const cstr = AMstrdup(err_msg, NULL);
73
+ fprintf(stderr, "WARNING: %s.\n", cstr);
74
+ free(cstr);
75
+ }
76
+ } else {
77
+ /* \note There's no reason to call this function when both the
78
+ * result and the callback are null. */
79
+ fprintf(stderr, "ERROR: NULL AMresult*!\n");
80
+ return NULL;
81
+ }
82
+ }
83
+ return result;
84
+ }
85
+
86
+ AMitem* AMstackItem(AMstack** stack, AMresult* result, AMstackCallback callback, void* data) {
87
+ AMitems items = AMstackItems(stack, result, callback, data);
88
+ return AMitemsNext(&items, 1);
89
+ }
90
+
91
+ AMitems AMstackItems(AMstack** stack, AMresult* result, AMstackCallback callback, void* data) {
92
+ return (AMstackResult(stack, result, callback, data)) ? AMresultItems(result) : (AMitems){0};
93
+ }
94
+
95
+ size_t AMstackSize(AMstack const* const stack) {
96
+ if (!stack) {
97
+ return 0;
98
+ }
99
+ size_t count = 0;
100
+ AMstack const* prev = stack;
101
+ while (prev) {
102
+ ++count;
103
+ prev = prev->prev;
104
+ }
105
+ return count;
106
+ }
@@ -0,0 +1,9 @@
1
+ #include <stdlib.h>
2
+
3
+ #include <automerge-c/utils/stack_callback_data.h>
4
+
5
+ AMstackCallbackData* AMstackCallbackDataInit(AMvalType const bitmask, char const* const file, int const line) {
6
+ AMstackCallbackData* data = malloc(sizeof(AMstackCallbackData));
7
+ *data = (AMstackCallbackData){.bitmask = bitmask, .file = file, .line = line};
8
+ return data;
9
+ }
@@ -0,0 +1,46 @@
1
+ #include <stdlib.h>
2
+ #include <string.h>
3
+
4
+ #include <automerge-c/utils/string.h>
5
+
6
+ char* AMstrdup(AMbyteSpan const str, char const* nul) {
7
+ if (!str.src) {
8
+ return NULL;
9
+ } else if (!str.count) {
10
+ return strdup("");
11
+ }
12
+ nul = (nul) ? nul : "\\0";
13
+ size_t const nul_len = strlen(nul);
14
+ char* dup = NULL;
15
+ size_t dup_len = 0;
16
+ char const* begin = (char const*) str.src;
17
+ char const* end = begin;
18
+ for (size_t i = 0; i != str.count; ++i, ++end) {
19
+ if (!*end) {
20
+ size_t const len = end - begin;
21
+ size_t const alloc_len = dup_len + len + nul_len;
22
+ if (dup) {
23
+ dup = realloc(dup, alloc_len + 1);
24
+ } else {
25
+ dup = malloc(alloc_len + 1);
26
+ }
27
+ memcpy(dup + dup_len, begin, len);
28
+ memcpy(dup + dup_len + len, nul, nul_len);
29
+ dup[alloc_len] = '\0';
30
+ begin = end + 1;
31
+ dup_len = alloc_len;
32
+ }
33
+ }
34
+ if (begin != end) {
35
+ size_t const len = end - begin;
36
+ size_t const alloc_len = dup_len + len;
37
+ if (dup) {
38
+ dup = realloc(dup, alloc_len + 1);
39
+ } else {
40
+ dup = malloc(alloc_len + 1);
41
+ }
42
+ memcpy(dup + dup_len, begin, len);
43
+ dup[alloc_len] = '\0';
44
+ }
45
+ return dup;
46
+ }
@@ -0,0 +1,67 @@
1
+ cmake_minimum_required(VERSION 3.25 FATAL_ERROR)
2
+
3
+ find_package(cmocka CONFIG REQUIRED)
4
+
5
+ add_executable(
6
+ ${LIBRARY_NAME}_test
7
+ actor_id_tests.c
8
+ base_state.c
9
+ byte_span_tests.c
10
+ cmocka_utils.c
11
+ cursor_tests.c
12
+ enum_string_tests.c
13
+ doc_state.c
14
+ doc_tests.c
15
+ item_tests.c
16
+ list_tests.c
17
+ macro_utils.c
18
+ main.c
19
+ map_tests.c
20
+ mark_tests.c
21
+ str_utils.c
22
+ ported_wasm/basic_tests.c
23
+ ported_wasm/cursor_tests.c
24
+ ported_wasm/suite.c
25
+ ported_wasm/sync_tests.c
26
+ )
27
+
28
+ set_target_properties(${LIBRARY_NAME}_test PROPERTIES LINKER_LANGUAGE C)
29
+
30
+ if(WIN32)
31
+ set(CMOCKA "cmocka::cmocka")
32
+ else()
33
+ set(CMOCKA "cmocka")
34
+ endif()
35
+
36
+ target_link_libraries(${LIBRARY_NAME}_test PRIVATE ${CMOCKA} ${LIBRARY_NAME})
37
+
38
+ add_dependencies(${LIBRARY_NAME}_test ${BINDINGS_NAME}_artifacts)
39
+
40
+ add_custom_command(
41
+ TARGET ${LIBRARY_NAME}_test
42
+ POST_BUILD
43
+ COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR}/files ${CMAKE_CURRENT_BINARY_DIR}/files
44
+ COMMENT "Copying the test input files into the tests directory..."
45
+ )
46
+
47
+ if(BUILD_SHARED_LIBS AND WIN32)
48
+ add_custom_command(
49
+ TARGET ${LIBRARY_NAME}_test
50
+ POST_BUILD
51
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${LIBRARY_NAME}> $<TARGET_FILE_DIR:${LIBRARY_NAME}_test>
52
+ COMMENT "Copying the DLL into the tests directory..."
53
+ VERBATIM
54
+ )
55
+ endif()
56
+
57
+ add_test(NAME ${LIBRARY_NAME}_test COMMAND ${LIBRARY_NAME}_test)
58
+
59
+ add_custom_command(
60
+ TARGET ${LIBRARY_NAME}_test
61
+ POST_BUILD
62
+ COMMAND
63
+ ${CMAKE_CTEST_COMMAND} --build-config $<CONFIG> --output-on-failure
64
+ COMMENT
65
+ "Running the test(s)..."
66
+ VERBATIM
67
+ )