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.
- checksums.yaml +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +175 -0
- data/ext/automerge_ext/automerge_ext.c +1805 -0
- data/ext/automerge_ext/extconf.rb +132 -0
- data/lib/automerge/version.rb +6 -0
- data/lib/automerge.rb +110 -0
- data/rust-toolchain.toml +4 -0
- data/vendor/automerge-rust/Cargo.lock +1909 -0
- data/vendor/automerge-rust/Cargo.toml +15 -0
- data/vendor/automerge-rust/automerge/Cargo.toml +78 -0
- data/vendor/automerge-rust/automerge/README.md +5 -0
- data/vendor/automerge-rust/automerge/benches/load_save.rs +102 -0
- data/vendor/automerge-rust/automerge/benches/map.rs +260 -0
- data/vendor/automerge-rust/automerge/benches/range.rs +37 -0
- data/vendor/automerge-rust/automerge/benches/sync.rs +95 -0
- data/vendor/automerge-rust/automerge/examples/README.md +7 -0
- data/vendor/automerge-rust/automerge/examples/quickstart.rs +57 -0
- data/vendor/automerge-rust/automerge/examples/watch.rs +94 -0
- data/vendor/automerge-rust/automerge/fuzz/Cargo.toml +29 -0
- data/vendor/automerge-rust/automerge/fuzz/fuzz_targets/load.rs +37 -0
- data/vendor/automerge-rust/automerge/src/autocommit.rs +1286 -0
- data/vendor/automerge-rust/automerge/src/automerge/current_state.rs +546 -0
- data/vendor/automerge-rust/automerge/src/automerge/tests.rs +2023 -0
- data/vendor/automerge-rust/automerge/src/automerge.rs +2071 -0
- data/vendor/automerge-rust/automerge/src/autoserde.rs +128 -0
- data/vendor/automerge-rust/automerge/src/change.rs +357 -0
- data/vendor/automerge-rust/automerge/src/change_graph.rs +1215 -0
- data/vendor/automerge-rust/automerge/src/change_queue.rs +46 -0
- data/vendor/automerge-rust/automerge/src/clock.rs +206 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/boolean.rs +83 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/delta.rs +148 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/group.rs +138 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/simple.rs +76 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/generic.rs +93 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/key.rs +272 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/obj_id.rs +202 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/opid_list.rs +329 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/raw.rs +38 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/rle.rs +216 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/value.rs +547 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range.rs +17 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/boolean.rs +197 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/col_error.rs +88 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/column_decoder.rs +133 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/decodable_impls.rs +175 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/delta.rs +96 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/encodable_impls.rs +200 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/leb128.rs +82 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/properties.rs +178 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/raw.rs +101 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/rle.rs +239 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding.rs +67 -0
- data/vendor/automerge-rust/automerge/src/columnar/splice_error.rs +47 -0
- data/vendor/automerge-rust/automerge/src/columnar.rs +14 -0
- data/vendor/automerge-rust/automerge/src/convert.rs +112 -0
- data/vendor/automerge-rust/automerge/src/cursor.rs +296 -0
- data/vendor/automerge-rust/automerge/src/decoding.rs +475 -0
- data/vendor/automerge-rust/automerge/src/error.rs +159 -0
- data/vendor/automerge-rust/automerge/src/exid.rs +238 -0
- data/vendor/automerge-rust/automerge/src/hydrate/list.rs +140 -0
- data/vendor/automerge-rust/automerge/src/hydrate/map.rs +132 -0
- data/vendor/automerge-rust/automerge/src/hydrate/tests.rs +40 -0
- data/vendor/automerge-rust/automerge/src/hydrate/text.rs +89 -0
- data/vendor/automerge-rust/automerge/src/hydrate.rs +368 -0
- data/vendor/automerge-rust/automerge/src/indexed_cache.rs +113 -0
- data/vendor/automerge-rust/automerge/src/iter/doc.rs +603 -0
- data/vendor/automerge-rust/automerge/src/iter/keys.rs +93 -0
- data/vendor/automerge-rust/automerge/src/iter/list_range.rs +433 -0
- data/vendor/automerge-rust/automerge/src/iter/map_range.rs +316 -0
- data/vendor/automerge-rust/automerge/src/iter/spans.rs +601 -0
- data/vendor/automerge-rust/automerge/src/iter/tools.rs +427 -0
- data/vendor/automerge-rust/automerge/src/iter/values.rs +36 -0
- data/vendor/automerge-rust/automerge/src/iter.rs +25 -0
- data/vendor/automerge-rust/automerge/src/legacy/mod.rs +364 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/actor_id.rs +25 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/change_hash.rs +29 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/element_id.rs +27 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/mod.rs +31 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/object_id.rs +36 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op.rs +668 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op_type.rs +26 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/opid.rs +25 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/scalar_value.rs +63 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/element_id.rs +66 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/key.rs +49 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/mod.rs +4 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/object_id.rs +74 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/opid.rs +68 -0
- data/vendor/automerge-rust/automerge/src/lib.rs +315 -0
- data/vendor/automerge-rust/automerge/src/marks.rs +478 -0
- data/vendor/automerge-rust/automerge/src/op_set2/change/batch.rs +2002 -0
- data/vendor/automerge-rust/automerge/src/op_set2/change/collector.rs +974 -0
- data/vendor/automerge-rust/automerge/src/op_set2/change.rs +332 -0
- data/vendor/automerge-rust/automerge/src/op_set2/columns.rs +714 -0
- data/vendor/automerge-rust/automerge/src/op_set2/meta.rs +174 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op.rs +1363 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/elems.rs +43 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/found_op.rs +60 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/index.rs +197 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/insert.rs +179 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/mark_index.rs +292 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/marks.rs +86 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_iter.rs +1295 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_query.rs +82 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/top_op.rs +50 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/visible.rs +290 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set.rs +1793 -0
- data/vendor/automerge-rust/automerge/src/op_set2/parents.rs +133 -0
- data/vendor/automerge-rust/automerge/src/op_set2/skip_list.rs +714 -0
- data/vendor/automerge-rust/automerge/src/op_set2/types.rs +769 -0
- data/vendor/automerge-rust/automerge/src/op_set2.rs +18 -0
- data/vendor/automerge-rust/automerge/src/patches/patch.rs +95 -0
- data/vendor/automerge-rust/automerge/src/patches/patch_builder.rs +382 -0
- data/vendor/automerge-rust/automerge/src/patches/patch_log.rs +584 -0
- data/vendor/automerge-rust/automerge/src/patches.rs +7 -0
- data/vendor/automerge-rust/automerge/src/query/list_state.rs +230 -0
- data/vendor/automerge-rust/automerge/src/query/seek_mark.rs +142 -0
- data/vendor/automerge-rust/automerge/src/read.rs +326 -0
- data/vendor/automerge-rust/automerge/src/sequence_tree.rs +662 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/builder.rs +942 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/error.rs +42 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/meta.rs +23 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/storage.rs +146 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle.rs +210 -0
- data/vendor/automerge-rust/automerge/src/storage/change/change_actors.rs +311 -0
- data/vendor/automerge-rust/automerge/src/storage/change/change_op_columns.rs +621 -0
- data/vendor/automerge-rust/automerge/src/storage/change/compressed.rs +51 -0
- data/vendor/automerge-rust/automerge/src/storage/change/op_with_change_actors.rs +1 -0
- data/vendor/automerge-rust/automerge/src/storage/change.rs +523 -0
- data/vendor/automerge-rust/automerge/src/storage/chunk.rs +312 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/column.rs +42 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/column_builder.rs +199 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/column_specification.rs +340 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/raw_column.rs +286 -0
- data/vendor/automerge-rust/automerge/src/storage/columns.rs +355 -0
- data/vendor/automerge-rust/automerge/src/storage/document/compression.rs +362 -0
- data/vendor/automerge-rust/automerge/src/storage/document.rs +411 -0
- data/vendor/automerge-rust/automerge/src/storage/load/change_collector.rs +15 -0
- data/vendor/automerge-rust/automerge/src/storage/load.rs +136 -0
- data/vendor/automerge-rust/automerge/src/storage/parse/leb128.rs +302 -0
- data/vendor/automerge-rust/automerge/src/storage/parse.rs +619 -0
- data/vendor/automerge-rust/automerge/src/storage/save/document.rs +27 -0
- data/vendor/automerge-rust/automerge/src/storage.rs +26 -0
- data/vendor/automerge-rust/automerge/src/sync/bloom.rs +161 -0
- data/vendor/automerge-rust/automerge/src/sync/message_builder.rs +118 -0
- data/vendor/automerge-rust/automerge/src/sync/state.rs +214 -0
- data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/bloom.rs +162 -0
- data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/mod.rs +625 -0
- data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/state.rs +120 -0
- data/vendor/automerge-rust/automerge/src/sync.rs +2482 -0
- data/vendor/automerge-rust/automerge/src/text_diff/LICENSE +201 -0
- data/vendor/automerge-rust/automerge/src/text_diff/myers.rs +332 -0
- data/vendor/automerge-rust/automerge/src/text_diff/replace.rs +139 -0
- data/vendor/automerge-rust/automerge/src/text_diff/utils.rs +119 -0
- data/vendor/automerge-rust/automerge/src/text_diff.rs +515 -0
- data/vendor/automerge-rust/automerge/src/text_value.rs +276 -0
- data/vendor/automerge-rust/automerge/src/transaction/commit.rs +34 -0
- data/vendor/automerge-rust/automerge/src/transaction/inner.rs +1403 -0
- data/vendor/automerge-rust/automerge/src/transaction/manual_transaction.rs +147 -0
- data/vendor/automerge-rust/automerge/src/transaction/owned_transaction.rs +266 -0
- data/vendor/automerge-rust/automerge/src/transaction/result.rs +21 -0
- data/vendor/automerge-rust/automerge/src/transaction/transactable.rs +203 -0
- data/vendor/automerge-rust/automerge/src/transaction.rs +513 -0
- data/vendor/automerge-rust/automerge/src/types.rs +749 -0
- data/vendor/automerge-rust/automerge/src/validation.rs +29 -0
- data/vendor/automerge-rust/automerge/src/value.rs +763 -0
- data/vendor/automerge-rust/automerge/tests/batch_insert.rs +1034 -0
- data/vendor/automerge-rust/automerge/tests/block_tests.rs +887 -0
- data/vendor/automerge-rust/automerge/tests/convert_string_to_text.rs +72 -0
- data/vendor/automerge-rust/automerge/tests/diff_marks.rs +1508 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_change.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_doc.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_has_incorrect_meta.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_ok.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_overlong.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_compressed.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_out_of_order.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/action-is-48.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/crash-da39a3ee5e6b4b0d3255bfef95601890afd80709 +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/incorrect_max_op.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/invalid_deflate_stream.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/missing_actor.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/overflow_in_length.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_deps.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_ops.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/test.rs +2668 -0
- data/vendor/automerge-rust/automerge/tests/test_mark_patches.rs +41 -0
- data/vendor/automerge-rust/automerge/tests/test_save_load_orphans.rs +84 -0
- data/vendor/automerge-rust/automerge/tests/text.rs +1098 -0
- data/vendor/automerge-rust/automerge/tests/text_encoding.rs +640 -0
- data/vendor/automerge-rust/automerge-c/CMakeLists.txt +439 -0
- data/vendor/automerge-rust/automerge-c/Cargo.toml +22 -0
- data/vendor/automerge-rust/automerge-c/README.md +233 -0
- data/vendor/automerge-rust/automerge-c/build.rs +21 -0
- data/vendor/automerge-rust/automerge-c/cbindgen.toml +48 -0
- data/vendor/automerge-rust/automerge-c/cmake/Cargo.toml.in +22 -0
- data/vendor/automerge-rust/automerge-c/cmake/automerge-c-config.cmake.in +99 -0
- data/vendor/automerge-rust/automerge-c/cmake/cbindgen.toml.in +48 -0
- data/vendor/automerge-rust/automerge-c/cmake/config.h.in +58 -0
- data/vendor/automerge-rust/automerge-c/cmake/enum-string-functions-gen.cmake +183 -0
- data/vendor/automerge-rust/automerge-c/cmake/file-regex-replace.cmake +33 -0
- data/vendor/automerge-rust/automerge-c/cmake/file-touch.cmake +35 -0
- data/vendor/automerge-rust/automerge-c/docs/CMakeLists.txt +39 -0
- data/vendor/automerge-rust/automerge-c/docs/img/brandmark.png +0 -0
- data/vendor/automerge-rust/automerge-c/examples/CMakeLists.txt +42 -0
- data/vendor/automerge-rust/automerge-c/examples/README.md +9 -0
- data/vendor/automerge-rust/automerge-c/examples/quickstart.c +131 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/result.h +30 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack.h +130 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack_callback_data.h +53 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/string.h +29 -0
- data/vendor/automerge-rust/automerge-c/src/actor_id.rs +193 -0
- data/vendor/automerge-rust/automerge-c/src/byte_span.rs +227 -0
- data/vendor/automerge-rust/automerge-c/src/change.rs +356 -0
- data/vendor/automerge-rust/automerge-c/src/cursor.rs +168 -0
- data/vendor/automerge-rust/automerge-c/src/doc/list.rs +636 -0
- data/vendor/automerge-rust/automerge-c/src/doc/map.rs +556 -0
- data/vendor/automerge-rust/automerge-c/src/doc/mark.rs +296 -0
- data/vendor/automerge-rust/automerge-c/src/doc/utils.rs +46 -0
- data/vendor/automerge-rust/automerge-c/src/doc.rs +1009 -0
- data/vendor/automerge-rust/automerge-c/src/index.rs +84 -0
- data/vendor/automerge-rust/automerge-c/src/item.rs +2177 -0
- data/vendor/automerge-rust/automerge-c/src/items.rs +401 -0
- data/vendor/automerge-rust/automerge-c/src/lib.rs +11 -0
- data/vendor/automerge-rust/automerge-c/src/obj.rs +216 -0
- data/vendor/automerge-rust/automerge-c/src/result.rs +653 -0
- data/vendor/automerge-rust/automerge-c/src/sync/have.rs +42 -0
- data/vendor/automerge-rust/automerge-c/src/sync/message.rs +146 -0
- data/vendor/automerge-rust/automerge-c/src/sync/state.rs +262 -0
- data/vendor/automerge-rust/automerge-c/src/sync.rs +7 -0
- data/vendor/automerge-rust/automerge-c/src/utils/result.c +33 -0
- data/vendor/automerge-rust/automerge-c/src/utils/stack.c +106 -0
- data/vendor/automerge-rust/automerge-c/src/utils/stack_callback_data.c +9 -0
- data/vendor/automerge-rust/automerge-c/src/utils/string.c +46 -0
- data/vendor/automerge-rust/automerge-c/test/CMakeLists.txt +67 -0
- data/vendor/automerge-rust/automerge-c/test/actor_id_tests.c +140 -0
- data/vendor/automerge-rust/automerge-c/test/base_state.c +17 -0
- data/vendor/automerge-rust/automerge-c/test/base_state.h +39 -0
- data/vendor/automerge-rust/automerge-c/test/byte_span_tests.c +119 -0
- data/vendor/automerge-rust/automerge-c/test/cmocka_utils.c +91 -0
- data/vendor/automerge-rust/automerge-c/test/cmocka_utils.h +42 -0
- data/vendor/automerge-rust/automerge-c/test/cursor_tests.c +263 -0
- data/vendor/automerge-rust/automerge-c/test/doc_state.c +27 -0
- data/vendor/automerge-rust/automerge-c/test/doc_state.h +17 -0
- data/vendor/automerge-rust/automerge-c/test/doc_tests.c +335 -0
- data/vendor/automerge-rust/automerge-c/test/enum_string_tests.c +148 -0
- data/vendor/automerge-rust/automerge-c/test/files/brave-ape-49.automerge +0 -0
- data/vendor/automerge-rust/automerge-c/test/item_tests.c +313 -0
- data/vendor/automerge-rust/automerge-c/test/list_tests.c +544 -0
- data/vendor/automerge-rust/automerge-c/test/macro_utils.c +38 -0
- data/vendor/automerge-rust/automerge-c/test/macro_utils.h +23 -0
- data/vendor/automerge-rust/automerge-c/test/main.c +33 -0
- data/vendor/automerge-rust/automerge-c/test/map_tests.c +1610 -0
- data/vendor/automerge-rust/automerge-c/test/mark_tests.c +124 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/basic_tests.c +1642 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/cursor_tests.c +108 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/suite.c +17 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/sync_tests.c +1280 -0
- data/vendor/automerge-rust/automerge-c/test/str_utils.c +15 -0
- data/vendor/automerge-rust/automerge-c/test/str_utils.h +17 -0
- data/vendor/automerge-rust/automerge-test/Cargo.toml +17 -0
- data/vendor/automerge-rust/automerge-test/README.md +3 -0
- data/vendor/automerge-rust/automerge-test/src/lib.rs +487 -0
- data/vendor/automerge-rust/hexane/CHANGELOG.md +34 -0
- data/vendor/automerge-rust/hexane/Cargo.toml +47 -0
- data/vendor/automerge-rust/hexane/README.md +292 -0
- data/vendor/automerge-rust/hexane/RESULTS.txt +20 -0
- data/vendor/automerge-rust/hexane/TODO +18 -0
- data/vendor/automerge-rust/hexane/benches/insert.rs +82 -0
- data/vendor/automerge-rust/hexane/benches/seek.rs +77 -0
- data/vendor/automerge-rust/hexane/benches/splice.rs +82 -0
- data/vendor/automerge-rust/hexane/src/aggregate.rs +288 -0
- data/vendor/automerge-rust/hexane/src/boolean.rs +478 -0
- data/vendor/automerge-rust/hexane/src/columndata.rs +2540 -0
- data/vendor/automerge-rust/hexane/src/cursor.rs +756 -0
- data/vendor/automerge-rust/hexane/src/delta.rs +793 -0
- data/vendor/automerge-rust/hexane/src/encoder.rs +639 -0
- data/vendor/automerge-rust/hexane/src/leb128.rs +82 -0
- data/vendor/automerge-rust/hexane/src/lib.rs +95 -0
- data/vendor/automerge-rust/hexane/src/pack.rs +325 -0
- data/vendor/automerge-rust/hexane/src/raw.rs +314 -0
- data/vendor/automerge-rust/hexane/src/rle.rs +928 -0
- data/vendor/automerge-rust/hexane/src/slab/tree.rs +1373 -0
- data/vendor/automerge-rust/hexane/src/slab/writer.rs +535 -0
- data/vendor/automerge-rust/hexane/src/slab.rs +224 -0
- data/vendor/automerge-rust/hexane/src/test.rs +108 -0
- data/vendor/bundle/ruby/3.3.0/bin/rake +29 -0
- data/vendor/bundle/ruby/3.3.0/bin/rake-compiler +29 -0
- data/vendor/bundle/ruby/3.3.0/bin/rake-compiler-dock +29 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/History.rdoc +1732 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Manifest.txt +32 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/README.rdoc +845 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Rakefile +97 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/design_rationale.rb +54 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/hoe/minitest.rb +30 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/assertions.rb +850 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/autorun.rb +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/benchmark.rb +452 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/compress.rb +94 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/error_on_warning.rb +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/expectations.rb +321 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/hell.rb +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/manual_plugins.rb +16 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/mock.rb +327 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/parallel.rb +72 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride.rb +4 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride_plugin.rb +135 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/spec.rb +353 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test.rb +238 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test_task.rb +324 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/unit.rb +42 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest.rb +1250 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/metametameta.rb +150 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_assertions.rb +1677 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_benchmark.rb +137 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_mock.rb +1213 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_reporter.rb +437 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_spec.rb +1159 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test.rb +1374 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test_task.rb +57 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/History.rdoc +2454 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/README.rdoc +155 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/a.c +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/b.c +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/main.c +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rake.1 +156 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/exe/rake +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake.rb +69 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/rake.gemspec +102 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Gemfile +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/History.md +695 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/LICENSE.txt +20 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/README.md +476 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Rakefile +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/appveyor.yml +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/bin/rake-compiler +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/cucumber.yml +4 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/compile.feature +79 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-compile.feature +23 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package-multi.feature +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package.feature +14 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-compile.feature +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-no-native-compile.feature +33 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-package.feature +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/package.feature +40 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/compilation.rb +70 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/cross_compilation.rb +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/execution.rb +52 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/folders.rb +32 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/gem.rb +46 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/java_compilation.rb +7 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/env.rb +10 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/file_template_helpers.rb +137 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/generator_helpers.rb +123 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/platform_extension_helpers.rb +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/baseextensiontask.rb +90 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/compiler_config.rb +38 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensioncompiler.rb +51 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensiontask.rb +589 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/javaextensiontask.rb +321 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bin/cross-ruby.rake +189 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bootstrap.rake +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/common.rake +10 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/cucumber.rake +23 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/gem.rake +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/rspec.rake +9 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
- 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
- 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
- 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
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
- 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
- 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
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
- 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
- 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
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
- data/vendor/bundle/ruby/3.3.0/specifications/minitest-5.27.0.gemspec +32 -0
- data/vendor/bundle/ruby/3.3.0/specifications/rake-13.4.2.gemspec +26 -0
- data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-1.3.1.gemspec +33 -0
- data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
- 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
|
+
}
|