@fairyhunter13/opentui-core 0.1.114 → 0.1.116
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.
- package/3d/SpriteResourceManager.d.ts +74 -0
- package/3d/SpriteUtils.d.ts +13 -0
- package/3d/TextureUtils.d.ts +24 -0
- package/3d/ThreeRenderable.d.ts +40 -0
- package/3d/WGPURenderer.d.ts +61 -0
- package/3d/animation/ExplodingSpriteEffect.d.ts +71 -0
- package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +76 -0
- package/3d/animation/SpriteAnimator.d.ts +124 -0
- package/3d/animation/SpriteParticleGenerator.d.ts +62 -0
- package/3d/canvas.d.ts +44 -0
- package/3d/index.d.ts +12 -0
- package/3d/physics/PlanckPhysicsAdapter.d.ts +19 -0
- package/3d/physics/RapierPhysicsAdapter.d.ts +19 -0
- package/3d/physics/physics-interface.d.ts +27 -0
- package/3d.d.ts +2 -0
- package/3d.js +34041 -0
- package/3d.js.map +155 -0
- package/LICENSE +21 -0
- package/NativeSpanFeed.d.ts +41 -0
- package/Renderable.d.ts +334 -0
- package/animation/Timeline.d.ts +126 -0
- package/ansi.d.ts +13 -0
- package/buffer.d.ts +111 -0
- package/console.d.ts +144 -0
- package/edit-buffer.d.ts +98 -0
- package/editor-view.d.ts +73 -0
- package/index-dcj62y8t.js +20614 -0
- package/index-dcj62y8t.js.map +67 -0
- package/index-jyrhjc34.js +411 -0
- package/index-jyrhjc34.js.map +10 -0
- package/index-wc7ae60z.js +12299 -0
- package/index-wc7ae60z.js.map +42 -0
- package/index.d.ts +23 -0
- package/index.js +478 -0
- package/index.js.map +9 -0
- package/lib/KeyHandler.d.ts +61 -0
- package/lib/RGBA.d.ts +25 -0
- package/lib/ascii.font.d.ts +508 -0
- package/lib/border.d.ts +51 -0
- package/lib/bunfs.d.ts +7 -0
- package/lib/clipboard.d.ts +17 -0
- package/lib/clock.d.ts +15 -0
- package/lib/data-paths.d.ts +26 -0
- package/lib/debounce.d.ts +42 -0
- package/lib/detect-links.d.ts +6 -0
- package/lib/env.d.ts +42 -0
- package/lib/extmarks-history.d.ts +17 -0
- package/lib/extmarks.d.ts +89 -0
- package/lib/hast-styled-text.d.ts +17 -0
- package/lib/index.d.ts +21 -0
- package/lib/keymapping.d.ts +25 -0
- package/lib/objects-in-viewport.d.ts +24 -0
- package/lib/output.capture.d.ts +24 -0
- package/lib/parse.keypress-kitty.d.ts +2 -0
- package/lib/parse.keypress.d.ts +26 -0
- package/lib/parse.mouse.d.ts +30 -0
- package/lib/paste.d.ts +7 -0
- package/lib/queue.d.ts +15 -0
- package/lib/renderable.validations.d.ts +12 -0
- package/lib/scroll-acceleration.d.ts +43 -0
- package/lib/selection.d.ts +63 -0
- package/lib/singleton.d.ts +7 -0
- package/lib/stdin-parser.d.ts +87 -0
- package/lib/styled-text.d.ts +63 -0
- package/lib/terminal-capability-detection.d.ts +30 -0
- package/lib/terminal-palette.d.ts +50 -0
- package/lib/tree-sitter/assets/update.d.ts +11 -0
- package/lib/tree-sitter/client.d.ts +47 -0
- package/lib/tree-sitter/default-parsers.d.ts +2 -0
- package/lib/tree-sitter/download-utils.d.ts +21 -0
- package/lib/tree-sitter/index.d.ts +8 -0
- package/lib/tree-sitter/parser.worker.d.ts +1 -0
- package/lib/tree-sitter/parsers-config.d.ts +53 -0
- package/lib/tree-sitter/resolve-ft.d.ts +5 -0
- package/lib/tree-sitter/types.d.ts +82 -0
- package/lib/tree-sitter-styled-text.d.ts +14 -0
- package/lib/validate-dir-name.d.ts +1 -0
- package/lib/yoga.options.d.ts +32 -0
- package/package.json +53 -62
- package/parser.worker.js +899 -0
- package/parser.worker.js.map +12 -0
- package/plugins/core-slot.d.ts +72 -0
- package/plugins/registry.d.ts +42 -0
- package/plugins/types.d.ts +34 -0
- package/post/effects.d.ts +147 -0
- package/post/filters.d.ts +65 -0
- package/post/matrices.d.ts +20 -0
- package/renderables/ASCIIFont.d.ts +52 -0
- package/renderables/Box.d.ts +81 -0
- package/renderables/Code.d.ts +78 -0
- package/renderables/Diff.d.ts +142 -0
- package/renderables/EditBufferRenderable.d.ts +237 -0
- package/renderables/FrameBuffer.d.ts +16 -0
- package/renderables/Input.d.ts +67 -0
- package/renderables/LineNumberRenderable.d.ts +78 -0
- package/renderables/Markdown.d.ts +185 -0
- package/renderables/ScrollBar.d.ts +77 -0
- package/renderables/ScrollBox.d.ts +124 -0
- package/renderables/Select.d.ts +115 -0
- package/renderables/Slider.d.ts +47 -0
- package/renderables/TabSelect.d.ts +96 -0
- package/renderables/Text.d.ts +36 -0
- package/renderables/TextBufferRenderable.d.ts +105 -0
- package/renderables/TextNode.d.ts +91 -0
- package/renderables/TextTable.d.ts +140 -0
- package/renderables/Textarea.d.ts +63 -0
- package/renderables/TimeToFirstDraw.d.ts +24 -0
- package/renderables/__tests__/renderable-test-utils.d.ts +12 -0
- package/renderables/composition/VRenderable.d.ts +16 -0
- package/renderables/composition/constructs.d.ts +35 -0
- package/renderables/composition/vnode.d.ts +46 -0
- package/renderables/index.d.ts +23 -0
- package/renderables/markdown-parser.d.ts +10 -0
- package/renderer.d.ts +419 -0
- package/runtime-plugin-support.d.ts +3 -0
- package/runtime-plugin-support.js +29 -0
- package/runtime-plugin-support.js.map +10 -0
- package/runtime-plugin.d.ts +16 -0
- package/runtime-plugin.js +16 -0
- package/runtime-plugin.js.map +9 -0
- package/syntax-style.d.ts +54 -0
- package/testing/manual-clock.d.ts +17 -0
- package/testing/mock-keys.d.ts +81 -0
- package/testing/mock-mouse.d.ts +38 -0
- package/testing/mock-tree-sitter-client.d.ts +23 -0
- package/testing/spy.d.ts +7 -0
- package/testing/test-recorder.d.ts +61 -0
- package/testing/test-renderer.d.ts +23 -0
- package/testing.d.ts +6 -0
- package/testing.js +697 -0
- package/testing.js.map +15 -0
- package/text-buffer-view.d.ts +42 -0
- package/text-buffer.d.ts +67 -0
- package/types.d.ts +139 -0
- package/utils.d.ts +14 -0
- package/zig-structs.d.ts +155 -0
- package/zig.d.ts +353 -0
- package/dev/keypress-debug-renderer.ts +0 -148
- package/dev/keypress-debug.ts +0 -43
- package/dev/print-env-vars.ts +0 -32
- package/dev/test-tmux-graphics-334.sh +0 -68
- package/dev/thai-debug-test.ts +0 -68
- package/docs/development.md +0 -144
- package/scripts/build.ts +0 -400
- package/scripts/publish.ts +0 -60
- package/src/3d/SpriteResourceManager.ts +0 -286
- package/src/3d/SpriteUtils.ts +0 -70
- package/src/3d/TextureUtils.ts +0 -196
- package/src/3d/ThreeRenderable.ts +0 -197
- package/src/3d/WGPURenderer.ts +0 -294
- package/src/3d/animation/ExplodingSpriteEffect.ts +0 -513
- package/src/3d/animation/PhysicsExplodingSpriteEffect.ts +0 -429
- package/src/3d/animation/SpriteAnimator.ts +0 -633
- package/src/3d/animation/SpriteParticleGenerator.ts +0 -435
- package/src/3d/canvas.ts +0 -464
- package/src/3d/index.ts +0 -12
- package/src/3d/physics/PlanckPhysicsAdapter.ts +0 -72
- package/src/3d/physics/RapierPhysicsAdapter.ts +0 -66
- package/src/3d/physics/physics-interface.ts +0 -31
- package/src/3d/shaders/supersampling.wgsl +0 -201
- package/src/3d.ts +0 -3
- package/src/NativeSpanFeed.ts +0 -300
- package/src/Renderable.ts +0 -1704
- package/src/__snapshots__/buffer.test.ts.snap +0 -28
- package/src/animation/Timeline.test.ts +0 -2709
- package/src/animation/Timeline.ts +0 -598
- package/src/ansi.ts +0 -18
- package/src/benchmark/attenuation-benchmark.ts +0 -81
- package/src/benchmark/colormatrix-benchmark.ts +0 -128
- package/src/benchmark/gain-benchmark.ts +0 -80
- package/src/benchmark/latest-all-bench-run.json +0 -707
- package/src/benchmark/latest-async-bench-run.json +0 -336
- package/src/benchmark/latest-default-bench-run.json +0 -657
- package/src/benchmark/latest-large-bench-run.json +0 -707
- package/src/benchmark/latest-quick-bench-run.json +0 -207
- package/src/benchmark/markdown-benchmark.ts +0 -1796
- package/src/benchmark/native-span-feed-async-benchmark.ts +0 -355
- package/src/benchmark/native-span-feed-benchmark.md +0 -56
- package/src/benchmark/native-span-feed-benchmark.ts +0 -596
- package/src/benchmark/native-span-feed-compare.ts +0 -280
- package/src/benchmark/renderer-benchmark.ts +0 -754
- package/src/benchmark/text-table-benchmark.ts +0 -948
- package/src/buffer.test.ts +0 -291
- package/src/buffer.ts +0 -554
- package/src/console.test.ts +0 -612
- package/src/console.ts +0 -1254
- package/src/edit-buffer.test.ts +0 -1769
- package/src/edit-buffer.ts +0 -411
- package/src/editor-view.test.ts +0 -1032
- package/src/editor-view.ts +0 -284
- package/src/examples/ascii-font-selection-demo.ts +0 -245
- package/src/examples/assets/Water_2_M_Normal.jpg +0 -0
- package/src/examples/assets/concrete.png +0 -0
- package/src/examples/assets/crate.png +0 -0
- package/src/examples/assets/crate_emissive.png +0 -0
- package/src/examples/assets/forrest_background.png +0 -0
- package/src/examples/assets/hast-example.json +0 -1018
- package/src/examples/assets/heart.png +0 -0
- package/src/examples/assets/main_char_heavy_attack.png +0 -0
- package/src/examples/assets/main_char_idle.png +0 -0
- package/src/examples/assets/main_char_jump_end.png +0 -0
- package/src/examples/assets/main_char_jump_landing.png +0 -0
- package/src/examples/assets/main_char_jump_start.png +0 -0
- package/src/examples/assets/main_char_run_loop.png +0 -0
- package/src/examples/assets/roughness_map.jpg +0 -0
- package/src/examples/build.ts +0 -115
- package/src/examples/code-demo.ts +0 -924
- package/src/examples/console-demo.ts +0 -358
- package/src/examples/core-plugin-slots-demo.ts +0 -759
- package/src/examples/diff-demo.ts +0 -701
- package/src/examples/draggable-three-demo.ts +0 -259
- package/src/examples/editor-demo.ts +0 -322
- package/src/examples/extmarks-demo.ts +0 -196
- package/src/examples/focus-restore-demo.ts +0 -310
- package/src/examples/fonts.ts +0 -245
- package/src/examples/fractal-shader-demo.ts +0 -268
- package/src/examples/framebuffer-demo.ts +0 -674
- package/src/examples/full-unicode-demo.ts +0 -241
- package/src/examples/golden-star-demo.ts +0 -933
- package/src/examples/grayscale-buffer-demo.ts +0 -249
- package/src/examples/hast-syntax-highlighting-demo.ts +0 -129
- package/src/examples/index.ts +0 -926
- package/src/examples/input-demo.ts +0 -377
- package/src/examples/input-select-layout-demo.ts +0 -425
- package/src/examples/install.sh +0 -143
- package/src/examples/keypress-debug-demo.ts +0 -452
- package/src/examples/lib/HexList.ts +0 -122
- package/src/examples/lib/PaletteGrid.ts +0 -125
- package/src/examples/lib/standalone-keys.ts +0 -25
- package/src/examples/lib/tab-controller.ts +0 -243
- package/src/examples/lights-phong-demo.ts +0 -290
- package/src/examples/link-demo.ts +0 -220
- package/src/examples/live-state-demo.ts +0 -480
- package/src/examples/markdown-demo.ts +0 -725
- package/src/examples/mouse-interaction-demo.ts +0 -428
- package/src/examples/nested-zindex-demo.ts +0 -357
- package/src/examples/opacity-example.ts +0 -235
- package/src/examples/opentui-demo.ts +0 -1057
- package/src/examples/physx-planck-2d-demo.ts +0 -623
- package/src/examples/physx-rapier-2d-demo.ts +0 -655
- package/src/examples/relative-positioning-demo.ts +0 -323
- package/src/examples/scroll-example.ts +0 -214
- package/src/examples/scrollbox-mouse-test.ts +0 -112
- package/src/examples/scrollbox-overlay-hit-test.ts +0 -206
- package/src/examples/select-demo.ts +0 -237
- package/src/examples/shader-cube-demo.ts +0 -1015
- package/src/examples/simple-layout-example.ts +0 -591
- package/src/examples/slider-demo.ts +0 -617
- package/src/examples/split-mode-demo.ts +0 -453
- package/src/examples/sprite-animation-demo.ts +0 -443
- package/src/examples/sprite-particle-generator-demo.ts +0 -486
- package/src/examples/static-sprite-demo.ts +0 -193
- package/src/examples/sticky-scroll-example.ts +0 -308
- package/src/examples/styled-text-demo.ts +0 -282
- package/src/examples/tab-select-demo.ts +0 -219
- package/src/examples/terminal-title.ts +0 -29
- package/src/examples/terminal.ts +0 -305
- package/src/examples/text-node-demo.ts +0 -416
- package/src/examples/text-selection-demo.ts +0 -377
- package/src/examples/text-table-demo.ts +0 -503
- package/src/examples/text-truncation-demo.ts +0 -481
- package/src/examples/text-wrap.ts +0 -757
- package/src/examples/texture-loading-demo.ts +0 -259
- package/src/examples/timeline-example.ts +0 -670
- package/src/examples/transparency-demo.ts +0 -400
- package/src/examples/vnode-composition-demo.ts +0 -404
- package/src/examples/wide-grapheme-overlay-demo.ts +0 -280
- package/src/index.ts +0 -24
- package/src/lib/KeyHandler.integration.test.ts +0 -292
- package/src/lib/KeyHandler.stopPropagation.test.ts +0 -289
- package/src/lib/KeyHandler.test.ts +0 -662
- package/src/lib/KeyHandler.ts +0 -222
- package/src/lib/RGBA.test.ts +0 -984
- package/src/lib/RGBA.ts +0 -204
- package/src/lib/ascii.font.ts +0 -330
- package/src/lib/border.test.ts +0 -83
- package/src/lib/border.ts +0 -170
- package/src/lib/bunfs.test.ts +0 -27
- package/src/lib/bunfs.ts +0 -18
- package/src/lib/clipboard.test.ts +0 -41
- package/src/lib/clipboard.ts +0 -47
- package/src/lib/clock.ts +0 -35
- package/src/lib/data-paths.test.ts +0 -133
- package/src/lib/data-paths.ts +0 -109
- package/src/lib/debounce.ts +0 -106
- package/src/lib/detect-links.test.ts +0 -98
- package/src/lib/detect-links.ts +0 -56
- package/src/lib/env.test.ts +0 -228
- package/src/lib/env.ts +0 -209
- package/src/lib/extmarks-history.ts +0 -51
- package/src/lib/extmarks-multiwidth.test.ts +0 -322
- package/src/lib/extmarks.test.ts +0 -3457
- package/src/lib/extmarks.ts +0 -843
- package/src/lib/fonts/block.json +0 -405
- package/src/lib/fonts/grid.json +0 -265
- package/src/lib/fonts/huge.json +0 -741
- package/src/lib/fonts/pallet.json +0 -314
- package/src/lib/fonts/shade.json +0 -591
- package/src/lib/fonts/slick.json +0 -321
- package/src/lib/fonts/tiny.json +0 -69
- package/src/lib/hast-styled-text.ts +0 -59
- package/src/lib/index.ts +0 -21
- package/src/lib/keymapping.test.ts +0 -317
- package/src/lib/keymapping.ts +0 -115
- package/src/lib/objects-in-viewport.test.ts +0 -787
- package/src/lib/objects-in-viewport.ts +0 -153
- package/src/lib/output.capture.ts +0 -58
- package/src/lib/parse.keypress-kitty.protocol.test.ts +0 -340
- package/src/lib/parse.keypress-kitty.test.ts +0 -663
- package/src/lib/parse.keypress-kitty.ts +0 -439
- package/src/lib/parse.keypress.test.ts +0 -1849
- package/src/lib/parse.keypress.ts +0 -397
- package/src/lib/parse.mouse.test.ts +0 -552
- package/src/lib/parse.mouse.ts +0 -232
- package/src/lib/paste.ts +0 -16
- package/src/lib/queue.ts +0 -65
- package/src/lib/renderable.validations.test.ts +0 -87
- package/src/lib/renderable.validations.ts +0 -83
- package/src/lib/scroll-acceleration.ts +0 -98
- package/src/lib/selection.ts +0 -240
- package/src/lib/singleton.ts +0 -28
- package/src/lib/stdin-parser.test.ts +0 -2290
- package/src/lib/stdin-parser.ts +0 -1810
- package/src/lib/styled-text.ts +0 -178
- package/src/lib/terminal-capability-detection.test.ts +0 -202
- package/src/lib/terminal-capability-detection.ts +0 -79
- package/src/lib/terminal-palette.test.ts +0 -878
- package/src/lib/terminal-palette.ts +0 -383
- package/src/lib/tree-sitter/assets/README.md +0 -118
- package/src/lib/tree-sitter/assets/update.ts +0 -334
- package/src/lib/tree-sitter/assets.d.ts +0 -9
- package/src/lib/tree-sitter/cache.test.ts +0 -273
- package/src/lib/tree-sitter/client.test.ts +0 -1165
- package/src/lib/tree-sitter/client.ts +0 -607
- package/src/lib/tree-sitter/default-parsers.ts +0 -86
- package/src/lib/tree-sitter/download-utils.ts +0 -148
- package/src/lib/tree-sitter/index.ts +0 -28
- package/src/lib/tree-sitter/parser.worker.ts +0 -1042
- package/src/lib/tree-sitter/parsers-config.ts +0 -81
- package/src/lib/tree-sitter/resolve-ft.test.ts +0 -55
- package/src/lib/tree-sitter/resolve-ft.ts +0 -189
- package/src/lib/tree-sitter/types.ts +0 -82
- package/src/lib/tree-sitter-styled-text.test.ts +0 -1253
- package/src/lib/tree-sitter-styled-text.ts +0 -306
- package/src/lib/validate-dir-name.ts +0 -55
- package/src/lib/yoga.options.test.ts +0 -628
- package/src/lib/yoga.options.ts +0 -346
- package/src/plugins/core-slot.ts +0 -579
- package/src/plugins/registry.ts +0 -402
- package/src/plugins/types.ts +0 -46
- package/src/post/effects.ts +0 -930
- package/src/post/filters.ts +0 -489
- package/src/post/matrices.ts +0 -288
- package/src/renderables/ASCIIFont.ts +0 -219
- package/src/renderables/Box.test.ts +0 -205
- package/src/renderables/Box.ts +0 -326
- package/src/renderables/Code.test.ts +0 -2062
- package/src/renderables/Code.ts +0 -357
- package/src/renderables/Diff.regression.test.ts +0 -226
- package/src/renderables/Diff.test.ts +0 -3101
- package/src/renderables/Diff.ts +0 -1211
- package/src/renderables/EditBufferRenderable.test.ts +0 -288
- package/src/renderables/EditBufferRenderable.ts +0 -1166
- package/src/renderables/FrameBuffer.ts +0 -47
- package/src/renderables/Input.test.ts +0 -1228
- package/src/renderables/Input.ts +0 -247
- package/src/renderables/LineNumberRenderable.ts +0 -724
- package/src/renderables/Markdown.ts +0 -1393
- package/src/renderables/ScrollBar.ts +0 -422
- package/src/renderables/ScrollBox.ts +0 -883
- package/src/renderables/Select.test.ts +0 -1033
- package/src/renderables/Select.ts +0 -524
- package/src/renderables/Slider.test.ts +0 -456
- package/src/renderables/Slider.ts +0 -342
- package/src/renderables/TabSelect.test.ts +0 -197
- package/src/renderables/TabSelect.ts +0 -455
- package/src/renderables/Text.selection-buffer.test.ts +0 -123
- package/src/renderables/Text.test.ts +0 -2660
- package/src/renderables/Text.ts +0 -147
- package/src/renderables/TextBufferRenderable.ts +0 -518
- package/src/renderables/TextNode.test.ts +0 -1058
- package/src/renderables/TextNode.ts +0 -325
- package/src/renderables/TextTable.test.ts +0 -1421
- package/src/renderables/TextTable.ts +0 -1344
- package/src/renderables/Textarea.ts +0 -430
- package/src/renderables/TimeToFirstDraw.ts +0 -89
- package/src/renderables/__snapshots__/Code.test.ts.snap +0 -13
- package/src/renderables/__snapshots__/Diff.test.ts.snap +0 -785
- package/src/renderables/__snapshots__/Text.test.ts.snap +0 -421
- package/src/renderables/__snapshots__/TextTable.test.ts.snap +0 -215
- package/src/renderables/__tests__/LineNumberRenderable.scrollbox-simple.test.ts +0 -144
- package/src/renderables/__tests__/LineNumberRenderable.scrollbox.test.ts +0 -816
- package/src/renderables/__tests__/LineNumberRenderable.test.ts +0 -1865
- package/src/renderables/__tests__/LineNumberRenderable.wrapping.test.ts +0 -85
- package/src/renderables/__tests__/Markdown.code-colors.test.ts +0 -242
- package/src/renderables/__tests__/Markdown.test.ts +0 -2518
- package/src/renderables/__tests__/MultiRenderable.selection.test.ts +0 -87
- package/src/renderables/__tests__/Textarea.buffer.test.ts +0 -682
- package/src/renderables/__tests__/Textarea.destroyed-events.test.ts +0 -675
- package/src/renderables/__tests__/Textarea.editing.test.ts +0 -2041
- package/src/renderables/__tests__/Textarea.error-handling.test.ts +0 -35
- package/src/renderables/__tests__/Textarea.events.test.ts +0 -738
- package/src/renderables/__tests__/Textarea.highlights.test.ts +0 -590
- package/src/renderables/__tests__/Textarea.keybinding.test.ts +0 -3149
- package/src/renderables/__tests__/Textarea.paste.test.ts +0 -357
- package/src/renderables/__tests__/Textarea.rendering.test.ts +0 -1866
- package/src/renderables/__tests__/Textarea.scroll.test.ts +0 -733
- package/src/renderables/__tests__/Textarea.selection.test.ts +0 -1590
- package/src/renderables/__tests__/Textarea.stress.test.ts +0 -670
- package/src/renderables/__tests__/Textarea.undo-redo.test.ts +0 -383
- package/src/renderables/__tests__/Textarea.visual-lines.test.ts +0 -310
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.code.test.ts.snap +0 -221
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox-simple.test.ts.snap +0 -89
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox.test.ts.snap +0 -457
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.test.ts.snap +0 -158
- package/src/renderables/__tests__/__snapshots__/Textarea.rendering.test.ts.snap +0 -387
- package/src/renderables/__tests__/markdown-parser.test.ts +0 -217
- package/src/renderables/__tests__/renderable-test-utils.ts +0 -60
- package/src/renderables/composition/README.md +0 -8
- package/src/renderables/composition/VRenderable.ts +0 -32
- package/src/renderables/composition/constructs.ts +0 -127
- package/src/renderables/composition/vnode.ts +0 -289
- package/src/renderables/index.ts +0 -23
- package/src/renderables/markdown-parser.ts +0 -66
- package/src/renderer.ts +0 -2681
- package/src/runtime-plugin-support.ts +0 -39
- package/src/runtime-plugin.ts +0 -615
- package/src/syntax-style.test.ts +0 -841
- package/src/syntax-style.ts +0 -257
- package/src/testing/README.md +0 -210
- package/src/testing/capture-spans.test.ts +0 -194
- package/src/testing/integration.test.ts +0 -276
- package/src/testing/manual-clock.ts +0 -117
- package/src/testing/mock-keys.test.ts +0 -1378
- package/src/testing/mock-keys.ts +0 -457
- package/src/testing/mock-mouse.test.ts +0 -218
- package/src/testing/mock-mouse.ts +0 -247
- package/src/testing/mock-tree-sitter-client.ts +0 -73
- package/src/testing/spy.ts +0 -13
- package/src/testing/test-recorder.test.ts +0 -415
- package/src/testing/test-recorder.ts +0 -145
- package/src/testing/test-renderer.ts +0 -132
- package/src/testing.ts +0 -7
- package/src/tests/__snapshots__/absolute-positioning.snapshot.test.ts.snap +0 -481
- package/src/tests/__snapshots__/renderable.snapshot.test.ts.snap +0 -19
- package/src/tests/__snapshots__/scrollbox.test.ts.snap +0 -29
- package/src/tests/absolute-positioning.snapshot.test.ts +0 -638
- package/src/tests/allocator-stats.test.ts +0 -38
- package/src/tests/destroy-during-render.test.ts +0 -200
- package/src/tests/destroy-on-exit.fixture.ts +0 -36
- package/src/tests/destroy-on-exit.test.ts +0 -41
- package/src/tests/hover-cursor.test.ts +0 -98
- package/src/tests/native-span-feed-async.test.ts +0 -173
- package/src/tests/native-span-feed-close.test.ts +0 -120
- package/src/tests/native-span-feed-coverage.test.ts +0 -227
- package/src/tests/native-span-feed-edge-cases.test.ts +0 -352
- package/src/tests/native-span-feed-use-after-free.test.ts +0 -45
- package/src/tests/opacity.test.ts +0 -123
- package/src/tests/renderable.snapshot.test.ts +0 -524
- package/src/tests/renderable.test.ts +0 -1281
- package/src/tests/renderer.clock.test.ts +0 -158
- package/src/tests/renderer.console-startup.test.ts +0 -185
- package/src/tests/renderer.control.test.ts +0 -425
- package/src/tests/renderer.core-slot-binding.test.ts +0 -952
- package/src/tests/renderer.cursor.test.ts +0 -26
- package/src/tests/renderer.destroy-during-render.test.ts +0 -147
- package/src/tests/renderer.focus-restore.test.ts +0 -257
- package/src/tests/renderer.focus.test.ts +0 -294
- package/src/tests/renderer.idle.test.ts +0 -219
- package/src/tests/renderer.input.test.ts +0 -2237
- package/src/tests/renderer.kitty-flags.test.ts +0 -195
- package/src/tests/renderer.mouse.test.ts +0 -1274
- package/src/tests/renderer.palette.test.ts +0 -629
- package/src/tests/renderer.selection.test.ts +0 -49
- package/src/tests/renderer.slot-registry.test.ts +0 -684
- package/src/tests/renderer.useMouse.test.ts +0 -47
- package/src/tests/runtime-plugin-node-modules-cycle.fixture.ts +0 -76
- package/src/tests/runtime-plugin-node-modules-mjs.fixture.ts +0 -43
- package/src/tests/runtime-plugin-node-modules-no-bare-rewrite.fixture.ts +0 -67
- package/src/tests/runtime-plugin-node-modules-package-type-cache.fixture.ts +0 -72
- package/src/tests/runtime-plugin-node-modules-runtime-specifier.fixture.ts +0 -44
- package/src/tests/runtime-plugin-node-modules-scoped-package-bare-rewrite.fixture.ts +0 -85
- package/src/tests/runtime-plugin-path-alias.fixture.ts +0 -43
- package/src/tests/runtime-plugin-resolve-roots.fixture.ts +0 -65
- package/src/tests/runtime-plugin-support.fixture.ts +0 -11
- package/src/tests/runtime-plugin-support.test.ts +0 -19
- package/src/tests/runtime-plugin-windows-file-url.fixture.ts +0 -30
- package/src/tests/runtime-plugin.fixture.ts +0 -40
- package/src/tests/runtime-plugin.test.ts +0 -354
- package/src/tests/scrollbox-culling-bug.test.ts +0 -114
- package/src/tests/scrollbox-hitgrid-resize.test.ts +0 -136
- package/src/tests/scrollbox-hitgrid.test.ts +0 -909
- package/src/tests/scrollbox.test.ts +0 -1530
- package/src/tests/wrap-resize-perf.test.ts +0 -276
- package/src/tests/yoga-setters.test.ts +0 -921
- package/src/text-buffer-view.test.ts +0 -705
- package/src/text-buffer-view.ts +0 -189
- package/src/text-buffer.test.ts +0 -347
- package/src/text-buffer.ts +0 -250
- package/src/types.ts +0 -161
- package/src/utils.ts +0 -88
- package/src/zig/ansi.zig +0 -268
- package/src/zig/bench/README.md +0 -50
- package/src/zig/bench/buffer-draw-text-buffer_bench.zig +0 -887
- package/src/zig/bench/edit-buffer_bench.zig +0 -476
- package/src/zig/bench/native-span-feed_bench.zig +0 -100
- package/src/zig/bench/rope-markers_bench.zig +0 -713
- package/src/zig/bench/rope_bench.zig +0 -514
- package/src/zig/bench/styled-text_bench.zig +0 -470
- package/src/zig/bench/text-buffer-coords_bench.zig +0 -362
- package/src/zig/bench/text-buffer-view_bench.zig +0 -459
- package/src/zig/bench/text-chunk-graphemes_bench.zig +0 -273
- package/src/zig/bench/utf8_bench.zig +0 -799
- package/src/zig/bench-utils.zig +0 -431
- package/src/zig/bench.zig +0 -217
- package/src/zig/buffer-methods.zig +0 -211
- package/src/zig/buffer.zig +0 -2281
- package/src/zig/build.zig +0 -289
- package/src/zig/build.zig.zon +0 -16
- package/src/zig/edit-buffer.zig +0 -825
- package/src/zig/editor-view.zig +0 -802
- package/src/zig/event-bus.zig +0 -13
- package/src/zig/event-emitter.zig +0 -65
- package/src/zig/file-logger.zig +0 -92
- package/src/zig/grapheme.zig +0 -599
- package/src/zig/lib.zig +0 -1854
- package/src/zig/link.zig +0 -333
- package/src/zig/logger.zig +0 -43
- package/src/zig/mem-registry.zig +0 -125
- package/src/zig/native-span-feed-bench-lib.zig +0 -7
- package/src/zig/native-span-feed.zig +0 -708
- package/src/zig/renderer.zig +0 -1393
- package/src/zig/rope.zig +0 -1220
- package/src/zig/syntax-style.zig +0 -161
- package/src/zig/terminal.zig +0 -987
- package/src/zig/test.zig +0 -72
- package/src/zig/tests/README.md +0 -18
- package/src/zig/tests/buffer-methods_test.zig +0 -1109
- package/src/zig/tests/buffer_test.zig +0 -2557
- package/src/zig/tests/edit-buffer-history_test.zig +0 -271
- package/src/zig/tests/edit-buffer_test.zig +0 -1689
- package/src/zig/tests/editor-view_test.zig +0 -3299
- package/src/zig/tests/event-emitter_test.zig +0 -249
- package/src/zig/tests/grapheme_test.zig +0 -1304
- package/src/zig/tests/link_test.zig +0 -190
- package/src/zig/tests/mem-registry_test.zig +0 -473
- package/src/zig/tests/memory_leak_regression_test.zig +0 -159
- package/src/zig/tests/native-span-feed_test.zig +0 -1264
- package/src/zig/tests/renderer_test.zig +0 -1017
- package/src/zig/tests/rope-nested_test.zig +0 -712
- package/src/zig/tests/rope_fuzz_test.zig +0 -238
- package/src/zig/tests/rope_test.zig +0 -2362
- package/src/zig/tests/segment-merge.test.zig +0 -148
- package/src/zig/tests/syntax-style_test.zig +0 -557
- package/src/zig/tests/terminal_test.zig +0 -754
- package/src/zig/tests/text-buffer-drawing_test.zig +0 -3237
- package/src/zig/tests/text-buffer-highlights_test.zig +0 -666
- package/src/zig/tests/text-buffer-iterators_test.zig +0 -776
- package/src/zig/tests/text-buffer-segment_test.zig +0 -320
- package/src/zig/tests/text-buffer-selection_test.zig +0 -1035
- package/src/zig/tests/text-buffer-selection_viewport_test.zig +0 -358
- package/src/zig/tests/text-buffer-view_test.zig +0 -3649
- package/src/zig/tests/text-buffer_test.zig +0 -2191
- package/src/zig/tests/unicode-width-map.zon +0 -3909
- package/src/zig/tests/utf8_no_zwj_test.zig +0 -260
- package/src/zig/tests/utf8_test.zig +0 -4057
- package/src/zig/tests/utf8_wcwidth_cursor_test.zig +0 -267
- package/src/zig/tests/utf8_wcwidth_test.zig +0 -357
- package/src/zig/tests/word-wrap-editing_test.zig +0 -498
- package/src/zig/tests/wrap-cache-perf_test.zig +0 -113
- package/src/zig/text-buffer-iterators.zig +0 -499
- package/src/zig/text-buffer-segment.zig +0 -404
- package/src/zig/text-buffer-view.zig +0 -1371
- package/src/zig/text-buffer.zig +0 -1180
- package/src/zig/utf8.zig +0 -1948
- package/src/zig/utils.zig +0 -9
- package/src/zig-structs.ts +0 -261
- package/src/zig.ts +0 -3884
- package/tsconfig.build.json +0 -24
- package/tsconfig.json +0 -27
- /package/{src/lib/tree-sitter/assets → assets}/javascript/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/javascript/tree-sitter-javascript.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/injections.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/tree-sitter-markdown.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown_inline/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/typescript/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/typescript/tree-sitter-typescript.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/zig/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/zig/tree-sitter-zig.wasm +0 -0
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
const std = @import("std");
|
|
2
|
-
const link = @import("../link.zig");
|
|
3
|
-
|
|
4
|
-
const LinkPool = link.LinkPool;
|
|
5
|
-
const LinkPoolError = link.LinkPoolError;
|
|
6
|
-
const LinkTracker = link.LinkTracker;
|
|
7
|
-
|
|
8
|
-
test "LinkPool - can initialize and cleanup" {
|
|
9
|
-
var pool = LinkPool.init(std.testing.allocator);
|
|
10
|
-
pool.deinit();
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
test "LinkPool - alloc and get URL" {
|
|
14
|
-
var pool = LinkPool.init(std.testing.allocator);
|
|
15
|
-
defer pool.deinit();
|
|
16
|
-
|
|
17
|
-
const url = "https://example.com";
|
|
18
|
-
const id = try pool.alloc(url);
|
|
19
|
-
try pool.incref(id);
|
|
20
|
-
defer pool.decref(id) catch {};
|
|
21
|
-
|
|
22
|
-
const retrieved = try pool.get(id);
|
|
23
|
-
try std.testing.expectEqualSlices(u8, url, retrieved);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
test "LinkPool - decref to zero allows slot reuse" {
|
|
27
|
-
var pool = LinkPool.init(std.testing.allocator);
|
|
28
|
-
defer pool.deinit();
|
|
29
|
-
|
|
30
|
-
const id1 = try pool.alloc("https://first.example");
|
|
31
|
-
try pool.incref(id1);
|
|
32
|
-
try pool.decref(id1);
|
|
33
|
-
|
|
34
|
-
const id2 = try pool.alloc("https://second.example");
|
|
35
|
-
try pool.incref(id2);
|
|
36
|
-
defer pool.decref(id2) catch {};
|
|
37
|
-
|
|
38
|
-
const stale_get = pool.get(id1);
|
|
39
|
-
try std.testing.expectError(LinkPoolError.WrongGeneration, stale_get);
|
|
40
|
-
|
|
41
|
-
const stale_incref = pool.incref(id1);
|
|
42
|
-
try std.testing.expectError(LinkPoolError.WrongGeneration, stale_incref);
|
|
43
|
-
|
|
44
|
-
const stale_decref = pool.decref(id1);
|
|
45
|
-
try std.testing.expectError(LinkPoolError.WrongGeneration, stale_decref);
|
|
46
|
-
|
|
47
|
-
try std.testing.expectEqualSlices(u8, "https://second.example", try pool.get(id2));
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
test "LinkPool - decref on zero refcount fails" {
|
|
51
|
-
var pool = LinkPool.init(std.testing.allocator);
|
|
52
|
-
defer pool.deinit();
|
|
53
|
-
|
|
54
|
-
const id = try pool.alloc("https://example.com");
|
|
55
|
-
try std.testing.expectError(LinkPoolError.InvalidId, pool.decref(id));
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
test "LinkPool - alloc never returns sentinel zero ID" {
|
|
59
|
-
var pool = LinkPool.init(std.testing.allocator);
|
|
60
|
-
defer pool.deinit();
|
|
61
|
-
|
|
62
|
-
const rounds: usize = 300;
|
|
63
|
-
for (0..rounds) |_| {
|
|
64
|
-
const id = try pool.alloc("https://example.com/rotate");
|
|
65
|
-
try std.testing.expect(id != 0);
|
|
66
|
-
|
|
67
|
-
try pool.incref(id);
|
|
68
|
-
try pool.decref(id);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
test "LinkTracker - add/remove keeps one pool ref per ID" {
|
|
73
|
-
var pool = LinkPool.init(std.testing.allocator);
|
|
74
|
-
defer pool.deinit();
|
|
75
|
-
|
|
76
|
-
const id = try pool.alloc("https://example.com/same");
|
|
77
|
-
|
|
78
|
-
var tracker = LinkTracker.init(std.testing.allocator, &pool);
|
|
79
|
-
defer tracker.deinit();
|
|
80
|
-
|
|
81
|
-
tracker.addCellRef(id);
|
|
82
|
-
tracker.addCellRef(id);
|
|
83
|
-
tracker.addCellRef(id);
|
|
84
|
-
|
|
85
|
-
try std.testing.expectEqual(@as(u32, 1), tracker.getLinkCount());
|
|
86
|
-
try std.testing.expectEqual(@as(u32, 1), try pool.getRefcount(id));
|
|
87
|
-
|
|
88
|
-
tracker.removeCellRef(id);
|
|
89
|
-
try std.testing.expectEqual(@as(u32, 1), tracker.getLinkCount());
|
|
90
|
-
try std.testing.expectEqual(@as(u32, 1), try pool.getRefcount(id));
|
|
91
|
-
|
|
92
|
-
tracker.removeCellRef(id);
|
|
93
|
-
try std.testing.expectEqual(@as(u32, 1), tracker.getLinkCount());
|
|
94
|
-
try std.testing.expectEqual(@as(u32, 1), try pool.getRefcount(id));
|
|
95
|
-
|
|
96
|
-
tracker.removeCellRef(id);
|
|
97
|
-
try std.testing.expectEqual(@as(u32, 0), tracker.getLinkCount());
|
|
98
|
-
try std.testing.expectEqual(@as(u32, 0), try pool.getRefcount(id));
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
test "LinkTracker - clear releases tracked IDs" {
|
|
102
|
-
var pool = LinkPool.init(std.testing.allocator);
|
|
103
|
-
defer pool.deinit();
|
|
104
|
-
|
|
105
|
-
const id1 = try pool.alloc("https://example.com/1");
|
|
106
|
-
const id2 = try pool.alloc("https://example.com/2");
|
|
107
|
-
|
|
108
|
-
var tracker = LinkTracker.init(std.testing.allocator, &pool);
|
|
109
|
-
defer tracker.deinit();
|
|
110
|
-
|
|
111
|
-
tracker.addCellRef(id1);
|
|
112
|
-
tracker.addCellRef(id2);
|
|
113
|
-
|
|
114
|
-
try std.testing.expect(tracker.hasAny());
|
|
115
|
-
try std.testing.expectEqual(@as(u32, 2), try pool.getRefcount(id1) + try pool.getRefcount(id2));
|
|
116
|
-
|
|
117
|
-
tracker.clear();
|
|
118
|
-
|
|
119
|
-
try std.testing.expect(!tracker.hasAny());
|
|
120
|
-
try std.testing.expectEqual(@as(u32, 0), try pool.getRefcount(id1));
|
|
121
|
-
try std.testing.expectEqual(@as(u32, 0), try pool.getRefcount(id2));
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
test "LinkTracker - clear only decrefs once per ID with multiple cell refs" {
|
|
125
|
-
var pool = LinkPool.init(std.testing.allocator);
|
|
126
|
-
defer pool.deinit();
|
|
127
|
-
|
|
128
|
-
const id = try pool.alloc("https://example.com/shared");
|
|
129
|
-
|
|
130
|
-
var tracker_a = LinkTracker.init(std.testing.allocator, &pool);
|
|
131
|
-
defer tracker_a.deinit();
|
|
132
|
-
|
|
133
|
-
var tracker_b = LinkTracker.init(std.testing.allocator, &pool);
|
|
134
|
-
defer tracker_b.deinit();
|
|
135
|
-
|
|
136
|
-
tracker_a.addCellRef(id);
|
|
137
|
-
tracker_a.addCellRef(id);
|
|
138
|
-
tracker_a.addCellRef(id);
|
|
139
|
-
|
|
140
|
-
tracker_b.addCellRef(id);
|
|
141
|
-
|
|
142
|
-
try std.testing.expectEqual(@as(u32, 2), try pool.getRefcount(id));
|
|
143
|
-
|
|
144
|
-
// Clear tracker A should decref once (2 -> 1).
|
|
145
|
-
tracker_a.clear();
|
|
146
|
-
|
|
147
|
-
try std.testing.expectEqual(@as(u32, 1), try pool.getRefcount(id));
|
|
148
|
-
try std.testing.expectEqualSlices(u8, "https://example.com/shared", try pool.get(id));
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
test "LinkPool - leak repro: alloc-only IDs accumulate live slots" {
|
|
152
|
-
var pool = LinkPool.init(std.testing.allocator);
|
|
153
|
-
defer pool.deinit();
|
|
154
|
-
|
|
155
|
-
const rounds: usize = 4096;
|
|
156
|
-
for (0..rounds) |i| {
|
|
157
|
-
var buf: [64]u8 = undefined;
|
|
158
|
-
const url = std.fmt.bufPrint(&buf, "https://example.com/r{d}", .{i}) catch unreachable;
|
|
159
|
-
_ = try pool.alloc(url);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
try std.testing.expect(pool.getLiveSlotCount() > 0);
|
|
163
|
-
try std.testing.expect(pool.getFreeSlotCount() < pool.getTotalSlots());
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
test "LinkPool - alloc reuses live ID for same URL" {
|
|
167
|
-
var pool = LinkPool.init(std.testing.allocator);
|
|
168
|
-
defer pool.deinit();
|
|
169
|
-
|
|
170
|
-
const url = "https://example.com/stable";
|
|
171
|
-
|
|
172
|
-
const id1 = try pool.alloc(url);
|
|
173
|
-
try pool.incref(id1);
|
|
174
|
-
|
|
175
|
-
const id2 = try pool.alloc(url);
|
|
176
|
-
try std.testing.expectEqual(id1, id2);
|
|
177
|
-
try std.testing.expectEqual(@as(u32, 1), try pool.getRefcount(id1));
|
|
178
|
-
|
|
179
|
-
try pool.decref(id1);
|
|
180
|
-
|
|
181
|
-
const id3 = try pool.alloc(url);
|
|
182
|
-
try pool.incref(id3);
|
|
183
|
-
defer pool.decref(id3) catch {};
|
|
184
|
-
|
|
185
|
-
try std.testing.expect(id3 != id1);
|
|
186
|
-
try std.testing.expectEqualSlices(u8, url, try pool.get(id3));
|
|
187
|
-
|
|
188
|
-
const id4 = try pool.alloc(url);
|
|
189
|
-
try std.testing.expectEqual(id3, id4);
|
|
190
|
-
}
|
|
@@ -1,473 +0,0 @@
|
|
|
1
|
-
const std = @import("std");
|
|
2
|
-
const mem_registry = @import("../mem-registry.zig");
|
|
3
|
-
|
|
4
|
-
const MemRegistry = mem_registry.MemRegistry;
|
|
5
|
-
const MemRegistryError = mem_registry.MemRegistryError;
|
|
6
|
-
|
|
7
|
-
test "MemRegistry - init and deinit" {
|
|
8
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
9
|
-
defer registry.deinit();
|
|
10
|
-
|
|
11
|
-
try std.testing.expectEqual(@as(usize, 0), registry.getUsedSlots());
|
|
12
|
-
try std.testing.expectEqual(@as(usize, 255), registry.getFreeSlots());
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
test "MemRegistry - register owned memory" {
|
|
16
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
17
|
-
defer registry.deinit();
|
|
18
|
-
|
|
19
|
-
const text = try std.testing.allocator.dupe(u8, "Hello, World!");
|
|
20
|
-
const id = try registry.register(text, true);
|
|
21
|
-
|
|
22
|
-
try std.testing.expectEqual(@as(u8, 0), id);
|
|
23
|
-
try std.testing.expectEqual(@as(usize, 1), registry.getUsedSlots());
|
|
24
|
-
try std.testing.expectEqual(@as(usize, 254), registry.getFreeSlots());
|
|
25
|
-
|
|
26
|
-
const retrieved = registry.get(id);
|
|
27
|
-
try std.testing.expect(retrieved != null);
|
|
28
|
-
try std.testing.expectEqualStrings("Hello, World!", retrieved.?);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
test "MemRegistry - register non-owned memory" {
|
|
32
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
33
|
-
defer registry.deinit();
|
|
34
|
-
|
|
35
|
-
const text = "Hello, World!";
|
|
36
|
-
const id = try registry.register(text, false);
|
|
37
|
-
|
|
38
|
-
try std.testing.expectEqual(@as(u8, 0), id);
|
|
39
|
-
try std.testing.expectEqual(@as(usize, 1), registry.getUsedSlots());
|
|
40
|
-
|
|
41
|
-
const retrieved = registry.get(id);
|
|
42
|
-
try std.testing.expect(retrieved != null);
|
|
43
|
-
try std.testing.expectEqualStrings("Hello, World!", retrieved.?);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
test "MemRegistry - register multiple buffers" {
|
|
47
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
48
|
-
defer registry.deinit();
|
|
49
|
-
|
|
50
|
-
const text1 = "First";
|
|
51
|
-
const text2 = "Second";
|
|
52
|
-
const text3 = "Third";
|
|
53
|
-
|
|
54
|
-
const id1 = try registry.register(text1, false);
|
|
55
|
-
const id2 = try registry.register(text2, false);
|
|
56
|
-
const id3 = try registry.register(text3, false);
|
|
57
|
-
|
|
58
|
-
try std.testing.expectEqual(@as(u8, 0), id1);
|
|
59
|
-
try std.testing.expectEqual(@as(u8, 1), id2);
|
|
60
|
-
try std.testing.expectEqual(@as(u8, 2), id3);
|
|
61
|
-
try std.testing.expectEqual(@as(usize, 3), registry.getUsedSlots());
|
|
62
|
-
try std.testing.expectEqual(@as(usize, 252), registry.getFreeSlots());
|
|
63
|
-
|
|
64
|
-
try std.testing.expectEqualStrings("First", registry.get(id1).?);
|
|
65
|
-
try std.testing.expectEqualStrings("Second", registry.get(id2).?);
|
|
66
|
-
try std.testing.expectEqualStrings("Third", registry.get(id3).?);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
test "MemRegistry - get invalid ID returns null" {
|
|
70
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
71
|
-
defer registry.deinit();
|
|
72
|
-
|
|
73
|
-
const text = "Test";
|
|
74
|
-
_ = try registry.register(text, false);
|
|
75
|
-
|
|
76
|
-
try std.testing.expect(registry.get(1) == null);
|
|
77
|
-
try std.testing.expect(registry.get(5) == null);
|
|
78
|
-
try std.testing.expect(registry.get(255) == null);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
test "MemRegistry - replace owned buffer" {
|
|
82
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
83
|
-
defer registry.deinit();
|
|
84
|
-
|
|
85
|
-
const text1 = try std.testing.allocator.dupe(u8, "Original");
|
|
86
|
-
const id = try registry.register(text1, true);
|
|
87
|
-
|
|
88
|
-
const text2 = try std.testing.allocator.dupe(u8, "Replaced");
|
|
89
|
-
try registry.replace(id, text2, true);
|
|
90
|
-
|
|
91
|
-
const retrieved = registry.get(id);
|
|
92
|
-
try std.testing.expect(retrieved != null);
|
|
93
|
-
try std.testing.expectEqualStrings("Replaced", retrieved.?);
|
|
94
|
-
try std.testing.expectEqual(@as(usize, 1), registry.getUsedSlots());
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
test "MemRegistry - replace non-owned buffer with owned" {
|
|
98
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
99
|
-
defer registry.deinit();
|
|
100
|
-
|
|
101
|
-
const text1 = "Original";
|
|
102
|
-
const id = try registry.register(text1, false);
|
|
103
|
-
|
|
104
|
-
const text2 = try std.testing.allocator.dupe(u8, "Replaced");
|
|
105
|
-
try registry.replace(id, text2, true);
|
|
106
|
-
|
|
107
|
-
const retrieved = registry.get(id);
|
|
108
|
-
try std.testing.expect(retrieved != null);
|
|
109
|
-
try std.testing.expectEqualStrings("Replaced", retrieved.?);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
test "MemRegistry - replace with invalid ID" {
|
|
113
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
114
|
-
defer registry.deinit();
|
|
115
|
-
|
|
116
|
-
const text = "Test";
|
|
117
|
-
const result = registry.replace(5, text, false);
|
|
118
|
-
try std.testing.expectError(MemRegistryError.InvalidMemId, result);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
test "MemRegistry - clear owned buffers" {
|
|
122
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
123
|
-
defer registry.deinit();
|
|
124
|
-
|
|
125
|
-
const text1 = try std.testing.allocator.dupe(u8, "First");
|
|
126
|
-
const text2 = try std.testing.allocator.dupe(u8, "Second");
|
|
127
|
-
_ = try registry.register(text1, true);
|
|
128
|
-
_ = try registry.register(text2, true);
|
|
129
|
-
|
|
130
|
-
try std.testing.expectEqual(@as(usize, 2), registry.getUsedSlots());
|
|
131
|
-
|
|
132
|
-
registry.clear();
|
|
133
|
-
|
|
134
|
-
try std.testing.expectEqual(@as(usize, 0), registry.getUsedSlots());
|
|
135
|
-
try std.testing.expectEqual(@as(usize, 255), registry.getFreeSlots());
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
test "MemRegistry - clear non-owned buffers" {
|
|
139
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
140
|
-
defer registry.deinit();
|
|
141
|
-
|
|
142
|
-
const text1 = "First";
|
|
143
|
-
const text2 = "Second";
|
|
144
|
-
_ = try registry.register(text1, false);
|
|
145
|
-
_ = try registry.register(text2, false);
|
|
146
|
-
|
|
147
|
-
try std.testing.expectEqual(@as(usize, 2), registry.getUsedSlots());
|
|
148
|
-
|
|
149
|
-
registry.clear();
|
|
150
|
-
|
|
151
|
-
try std.testing.expectEqual(@as(usize, 0), registry.getUsedSlots());
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
test "MemRegistry - max capacity" {
|
|
155
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
156
|
-
defer registry.deinit();
|
|
157
|
-
|
|
158
|
-
var i: usize = 0;
|
|
159
|
-
while (i < 255) : (i += 1) {
|
|
160
|
-
const text = "test";
|
|
161
|
-
_ = try registry.register(text, false);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
try std.testing.expectEqual(@as(usize, 255), registry.getUsedSlots());
|
|
165
|
-
try std.testing.expectEqual(@as(usize, 0), registry.getFreeSlots());
|
|
166
|
-
|
|
167
|
-
const text = "overflow";
|
|
168
|
-
const result = registry.register(text, false);
|
|
169
|
-
try std.testing.expectError(MemRegistryError.OutOfMemory, result);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
test "MemRegistry - clear and reuse" {
|
|
173
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
174
|
-
defer registry.deinit();
|
|
175
|
-
|
|
176
|
-
const text1 = "First";
|
|
177
|
-
const id1 = try registry.register(text1, false);
|
|
178
|
-
try std.testing.expectEqual(@as(u8, 0), id1);
|
|
179
|
-
|
|
180
|
-
registry.clear();
|
|
181
|
-
|
|
182
|
-
const text2 = "Second";
|
|
183
|
-
const id2 = try registry.register(text2, false);
|
|
184
|
-
try std.testing.expectEqual(@as(u8, 0), id2);
|
|
185
|
-
try std.testing.expectEqualStrings("Second", registry.get(id2).?);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
test "MemRegistry - mixed owned and non-owned buffers" {
|
|
189
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
190
|
-
defer registry.deinit();
|
|
191
|
-
|
|
192
|
-
const owned = try std.testing.allocator.dupe(u8, "Owned");
|
|
193
|
-
const non_owned = "Not Owned";
|
|
194
|
-
|
|
195
|
-
const id1 = try registry.register(owned, true);
|
|
196
|
-
const id2 = try registry.register(non_owned, false);
|
|
197
|
-
|
|
198
|
-
try std.testing.expectEqual(@as(usize, 2), registry.getUsedSlots());
|
|
199
|
-
|
|
200
|
-
try std.testing.expectEqualStrings("Owned", registry.get(id1).?);
|
|
201
|
-
try std.testing.expectEqualStrings("Not Owned", registry.get(id2).?);
|
|
202
|
-
|
|
203
|
-
registry.clear();
|
|
204
|
-
try std.testing.expectEqual(@as(usize, 0), registry.getUsedSlots());
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
test "MemRegistry - large buffer registration" {
|
|
208
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
209
|
-
defer registry.deinit();
|
|
210
|
-
|
|
211
|
-
const large_text = [_]u8{'A'} ** 10000;
|
|
212
|
-
const id = try registry.register(&large_text, false);
|
|
213
|
-
|
|
214
|
-
const retrieved = registry.get(id);
|
|
215
|
-
try std.testing.expect(retrieved != null);
|
|
216
|
-
try std.testing.expectEqual(@as(usize, 10000), retrieved.?.len);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
test "MemRegistry - empty buffer registration" {
|
|
220
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
221
|
-
defer registry.deinit();
|
|
222
|
-
|
|
223
|
-
const empty = "";
|
|
224
|
-
const id = try registry.register(empty, false);
|
|
225
|
-
|
|
226
|
-
const retrieved = registry.get(id);
|
|
227
|
-
try std.testing.expect(retrieved != null);
|
|
228
|
-
try std.testing.expectEqual(@as(usize, 0), retrieved.?.len);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
test "MemRegistry - sequential replace operations" {
|
|
232
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
233
|
-
defer registry.deinit();
|
|
234
|
-
|
|
235
|
-
const text1 = "First";
|
|
236
|
-
const id = try registry.register(text1, false);
|
|
237
|
-
|
|
238
|
-
const text2 = "Second";
|
|
239
|
-
try registry.replace(id, text2, false);
|
|
240
|
-
try std.testing.expectEqualStrings("Second", registry.get(id).?);
|
|
241
|
-
|
|
242
|
-
const text3 = "Third";
|
|
243
|
-
try registry.replace(id, text3, false);
|
|
244
|
-
try std.testing.expectEqualStrings("Third", registry.get(id).?);
|
|
245
|
-
|
|
246
|
-
try std.testing.expectEqual(@as(usize, 1), registry.getUsedSlots());
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
test "MemRegistry - replace owned with non-owned" {
|
|
250
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
251
|
-
defer registry.deinit();
|
|
252
|
-
|
|
253
|
-
const text1 = try std.testing.allocator.dupe(u8, "Owned");
|
|
254
|
-
const id = try registry.register(text1, true);
|
|
255
|
-
|
|
256
|
-
const text2 = "Not Owned";
|
|
257
|
-
try registry.replace(id, text2, false);
|
|
258
|
-
|
|
259
|
-
const retrieved = registry.get(id);
|
|
260
|
-
try std.testing.expect(retrieved != null);
|
|
261
|
-
try std.testing.expectEqualStrings("Not Owned", retrieved.?);
|
|
262
|
-
try std.testing.expectEqual(@as(usize, 1), registry.getUsedSlots());
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
test "MemRegistry - stress test with many registrations and clears" {
|
|
266
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
267
|
-
defer registry.deinit();
|
|
268
|
-
|
|
269
|
-
var round: usize = 0;
|
|
270
|
-
while (round < 10) : (round += 1) {
|
|
271
|
-
var i: usize = 0;
|
|
272
|
-
while (i < 50) : (i += 1) {
|
|
273
|
-
const text = "test";
|
|
274
|
-
_ = try registry.register(text, false);
|
|
275
|
-
}
|
|
276
|
-
try std.testing.expectEqual(@as(usize, 50), registry.getUsedSlots());
|
|
277
|
-
registry.clear();
|
|
278
|
-
try std.testing.expectEqual(@as(usize, 0), registry.getUsedSlots());
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
test "MemRegistry - unregister basic" {
|
|
283
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
284
|
-
defer registry.deinit();
|
|
285
|
-
|
|
286
|
-
const text = "Hello";
|
|
287
|
-
const id = try registry.register(text, false);
|
|
288
|
-
|
|
289
|
-
try std.testing.expectEqual(@as(usize, 1), registry.getUsedSlots());
|
|
290
|
-
try std.testing.expectEqualStrings("Hello", registry.get(id).?);
|
|
291
|
-
|
|
292
|
-
try registry.unregister(id);
|
|
293
|
-
|
|
294
|
-
try std.testing.expectEqual(@as(usize, 0), registry.getUsedSlots());
|
|
295
|
-
try std.testing.expect(registry.get(id) == null);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
test "MemRegistry - unregister owned buffer frees memory" {
|
|
299
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
300
|
-
defer registry.deinit();
|
|
301
|
-
|
|
302
|
-
const text = try std.testing.allocator.dupe(u8, "Owned Buffer");
|
|
303
|
-
const id = try registry.register(text, true);
|
|
304
|
-
|
|
305
|
-
try std.testing.expectEqual(@as(usize, 1), registry.getUsedSlots());
|
|
306
|
-
|
|
307
|
-
// Should free the memory when unregistered
|
|
308
|
-
try registry.unregister(id);
|
|
309
|
-
|
|
310
|
-
try std.testing.expectEqual(@as(usize, 0), registry.getUsedSlots());
|
|
311
|
-
try std.testing.expect(registry.get(id) == null);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
test "MemRegistry - unregister invalid ID" {
|
|
315
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
316
|
-
defer registry.deinit();
|
|
317
|
-
|
|
318
|
-
const result = registry.unregister(5);
|
|
319
|
-
try std.testing.expectError(MemRegistryError.InvalidMemId, result);
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
test "MemRegistry - unregister twice fails" {
|
|
323
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
324
|
-
defer registry.deinit();
|
|
325
|
-
|
|
326
|
-
const text = "Test";
|
|
327
|
-
const id = try registry.register(text, false);
|
|
328
|
-
|
|
329
|
-
try registry.unregister(id);
|
|
330
|
-
|
|
331
|
-
// Second unregister should fail
|
|
332
|
-
const result = registry.unregister(id);
|
|
333
|
-
try std.testing.expectError(MemRegistryError.InvalidMemId, result);
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
test "MemRegistry - slot reuse after unregister" {
|
|
337
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
338
|
-
defer registry.deinit();
|
|
339
|
-
|
|
340
|
-
const text1 = "First";
|
|
341
|
-
const text2 = "Second";
|
|
342
|
-
const text3 = "Third";
|
|
343
|
-
|
|
344
|
-
const id1 = try registry.register(text1, false);
|
|
345
|
-
const id2 = try registry.register(text2, false);
|
|
346
|
-
const id3 = try registry.register(text3, false);
|
|
347
|
-
|
|
348
|
-
try std.testing.expectEqual(@as(u8, 0), id1);
|
|
349
|
-
try std.testing.expectEqual(@as(u8, 1), id2);
|
|
350
|
-
try std.testing.expectEqual(@as(u8, 2), id3);
|
|
351
|
-
try std.testing.expectEqual(@as(usize, 3), registry.getUsedSlots());
|
|
352
|
-
|
|
353
|
-
// Unregister middle slot
|
|
354
|
-
try registry.unregister(id2);
|
|
355
|
-
try std.testing.expectEqual(@as(usize, 2), registry.getUsedSlots());
|
|
356
|
-
|
|
357
|
-
// Register new buffer - should reuse slot 1
|
|
358
|
-
const text4 = "Fourth";
|
|
359
|
-
const id4 = try registry.register(text4, false);
|
|
360
|
-
try std.testing.expectEqual(@as(u8, 1), id4);
|
|
361
|
-
try std.testing.expectEqual(@as(usize, 3), registry.getUsedSlots());
|
|
362
|
-
|
|
363
|
-
// Verify contents
|
|
364
|
-
try std.testing.expectEqualStrings("First", registry.get(id1).?);
|
|
365
|
-
try std.testing.expectEqualStrings("Fourth", registry.get(id4).?);
|
|
366
|
-
try std.testing.expectEqualStrings("Third", registry.get(id3).?);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
test "MemRegistry - thousands of register/unregister cycles" {
|
|
370
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
371
|
-
defer registry.deinit();
|
|
372
|
-
|
|
373
|
-
// Simulate thousands of register/unregister operations
|
|
374
|
-
// This ensures slot reuse works over long periods
|
|
375
|
-
var cycle: usize = 0;
|
|
376
|
-
while (cycle < 1000) : (cycle += 1) {
|
|
377
|
-
var ids: [10]u8 = undefined;
|
|
378
|
-
|
|
379
|
-
// Register 10 buffers
|
|
380
|
-
var i: usize = 0;
|
|
381
|
-
while (i < 10) : (i += 1) {
|
|
382
|
-
const text = "test";
|
|
383
|
-
ids[i] = try registry.register(text, false);
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
try std.testing.expectEqual(@as(usize, 10), registry.getUsedSlots());
|
|
387
|
-
|
|
388
|
-
// Unregister all
|
|
389
|
-
i = 0;
|
|
390
|
-
while (i < 10) : (i += 1) {
|
|
391
|
-
try registry.unregister(ids[i]);
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
try std.testing.expectEqual(@as(usize, 0), registry.getUsedSlots());
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
// Verify we can still register after all those cycles
|
|
398
|
-
const text = "final";
|
|
399
|
-
const id = try registry.register(text, false);
|
|
400
|
-
try std.testing.expectEqualStrings("final", registry.get(id).?);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
test "MemRegistry - max capacity 255 with slot reuse" {
|
|
404
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
405
|
-
defer registry.deinit();
|
|
406
|
-
|
|
407
|
-
// Fill all 255 slots
|
|
408
|
-
// NOTE: This test ensures the registry respects the u8 ID limit (max 255 slots).
|
|
409
|
-
// If the ID type is changed from u8 to u16, this test would fail because:
|
|
410
|
-
// 1. The test fills exactly 255 slots
|
|
411
|
-
// 2. It expects OutOfMemory error on the 256th registration
|
|
412
|
-
// 3. With u16, the limit would be 65535, so no error would occur
|
|
413
|
-
var i: usize = 0;
|
|
414
|
-
var ids: [255]u8 = undefined;
|
|
415
|
-
while (i < 255) : (i += 1) {
|
|
416
|
-
const text = "test";
|
|
417
|
-
ids[i] = try registry.register(text, false);
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
try std.testing.expectEqual(@as(usize, 255), registry.getUsedSlots());
|
|
421
|
-
try std.testing.expectEqual(@as(usize, 0), registry.getFreeSlots());
|
|
422
|
-
|
|
423
|
-
// Should fail to register one more
|
|
424
|
-
const text = "overflow";
|
|
425
|
-
const result = registry.register(text, false);
|
|
426
|
-
try std.testing.expectError(MemRegistryError.OutOfMemory, result);
|
|
427
|
-
|
|
428
|
-
// Unregister one slot
|
|
429
|
-
try registry.unregister(ids[100]);
|
|
430
|
-
try std.testing.expectEqual(@as(usize, 254), registry.getUsedSlots());
|
|
431
|
-
try std.testing.expectEqual(@as(usize, 1), registry.getFreeSlots());
|
|
432
|
-
|
|
433
|
-
// Now we should be able to register again
|
|
434
|
-
const new_text = "reused";
|
|
435
|
-
const new_id = try registry.register(new_text, false);
|
|
436
|
-
try std.testing.expectEqual(@as(u8, 100), new_id); // Should reuse slot 100
|
|
437
|
-
try std.testing.expectEqualStrings("reused", registry.get(new_id).?);
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
test "MemRegistry - replace inactive slot fails" {
|
|
441
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
442
|
-
defer registry.deinit();
|
|
443
|
-
|
|
444
|
-
const text1 = "Original";
|
|
445
|
-
const id = try registry.register(text1, false);
|
|
446
|
-
|
|
447
|
-
try registry.unregister(id);
|
|
448
|
-
|
|
449
|
-
// Try to replace inactive slot
|
|
450
|
-
const text2 = "Replacement";
|
|
451
|
-
const result = registry.replace(id, text2, false);
|
|
452
|
-
try std.testing.expectError(MemRegistryError.InvalidMemId, result);
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
test "MemRegistry - getFreeSlots accounts for unregistered slots" {
|
|
456
|
-
var registry = MemRegistry.init(std.testing.allocator);
|
|
457
|
-
defer registry.deinit();
|
|
458
|
-
|
|
459
|
-
try std.testing.expectEqual(@as(usize, 255), registry.getFreeSlots());
|
|
460
|
-
|
|
461
|
-
const id1 = try registry.register("test1", false);
|
|
462
|
-
const id2 = try registry.register("test2", false);
|
|
463
|
-
const id3 = try registry.register("test3", false);
|
|
464
|
-
|
|
465
|
-
try std.testing.expectEqual(@as(usize, 252), registry.getFreeSlots());
|
|
466
|
-
|
|
467
|
-
try registry.unregister(id2);
|
|
468
|
-
try std.testing.expectEqual(@as(usize, 253), registry.getFreeSlots());
|
|
469
|
-
|
|
470
|
-
try registry.unregister(id1);
|
|
471
|
-
try registry.unregister(id3);
|
|
472
|
-
try std.testing.expectEqual(@as(usize, 255), registry.getFreeSlots());
|
|
473
|
-
}
|