@sovereignbase/convergent-replicated-list 1.3.2 → 1.3.3

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/README.md CHANGED
@@ -313,39 +313,233 @@ npm run bench
313
313
 
314
314
  Last measured on Node `v22.14.0` (`win32 x64`):
315
315
 
316
- | group | scenario | n | ops | crlist ms | crlist ms/op | crlist ops/sec | yjs ms/op | yjs ops/sec | json-joy ms/op | json-joy ops/sec | automerge ms/op | automerge ops/sec | winner |
317
- | ------- | -------------------------------------------------- | ----: | --: | --------: | -----------: | -------------: | --------: | ----------: | -------------: | ---------------: | --------------: | ----------------: | --------- |
318
- | crud | create / hydrate snapshot | 5,000 | 250 | 1,196.96 | 4.79 | 208.86 | 9.27 | 107.88 | 12.86 | 77.78 | 161.27 | 6.2 | crlist |
319
- | crud | read / random indexed reads | 5,000 | 250 | 0.69 | 0 | 359,919.38 | 0 | 250,375.56 | 0.01 | 109,938.43 | 0 | 1,445,922.5 | automerge |
320
- | crud | update / append after tail | 5,000 | 250 | 1.8 | 0.01 | 138,557.89 | 0.02 | 40,340.8 | 0.02 | 44,789.22 | 2 | 498.99 | crlist |
321
- | crud | update / insert before middle | 5,000 | 250 | 3.07 | 0.01 | 81,425.27 | 0.02 | 55,321.97 | 0.01 | 79,961.62 | 1.92 | 521.5 | crlist |
322
- | crud | update / insert at head | 5,000 | 250 | 2.86 | 0.01 | 87,305.74 | 0.01 | 104,672.58 | 0.02 | 41,149.55 | 1.98 | 504.33 | yjs |
323
- | crud | update / overwrite random | 5,000 | 250 | 5.63 | 0.02 | 44,397.09 | 0.05 | 20,391.02 | 0.03 | 34,526.57 | 2.23 | 448.79 | crlist |
324
- | crud | delete / single deletes from middle | 5,000 | 250 | 1.77 | 0.01 | 140,924.46 | 0.02 | 56,326.6 | 0.02 | 41,923.1 | 0.33 | 3,034.57 | crlist |
325
- | crud | delete / range deletes | 5,000 | 250 | 6.06 | 0.02 | 41,262.98 | 0.02 | 40,741.83 | 0.07 | 13,344.01 | 0.42 | 2,365.95 | crlist |
326
- | mags | snapshot | 5,000 | 250 | 61.55 | 0.25 | 4,061.61 | 5.16 | 193.92 | 10.3 | 97.13 | 15.68 | 63.78 | crlist |
327
- | mags | acknowledge | 5,000 | 250 | 44.79 | 0.18 | 5,582.1 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
328
- | mags | garbage collect | 5,000 | 250 | 147.13 | 0.59 | 1,699.21 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
329
- | mags | merge ordered deltas | 5,000 | 250 | 1.69 | 0.01 | 147,658.14 | 0.04 | 27,173.62 | 0.01 | 82,464.71 | 3.68 | 271.46 | crlist |
330
- | mags | merge shuffled gossip | 5,000 | 250 | n/a | n/a | n/a | 0.59 | 1,685.81 | n/a | n/a | 0.33 | 3,043.22 | automerge |
331
- | class | constructor / hydrate snapshot | 5,000 | 250 | 1,518.88 | 6.08 | 164.6 | 9.63 | 103.8 | 11.07 | 90.32 | 205 | 4.88 | crlist |
332
- | class | append after tail | 5,000 | 250 | 2.99 | 0.01 | 83,701.62 | 0.01 | 69,074.13 | 0.01 | 162,834.63 | 2.38 | 419.43 | json-joy |
333
- | class | prepend before middle | 5,000 | 250 | 2.86 | 0.01 | 87,284.41 | 0.01 | 129,125.56 | 0.01 | 128,218.28 | 2.08 | 481.22 | yjs |
334
- | class | remove from middle | 5,000 | 250 | 1.99 | 0.01 | 125,514.61 | 0.01 | 76,115.09 | 0.01 | 99,407.53 | 0.37 | 2,673.64 | crlist |
335
- | class | find near tail | 5,000 | 250 | 119.12 | 0.48 | 2,098.66 | 0.21 | 4,715.35 | 1.71 | 585.14 | 0.02 | 40,475.34 | automerge |
336
- | class | snapshot | 5,000 | 250 | 62.59 | 0.25 | 3,994.02 | 4.88 | 205.07 | 8.26 | 121.09 | 19.84 | 50.4 | crlist |
337
- | class | acknowledge | 5,000 | 250 | 38.72 | 0.15 | 6,456.58 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
338
- | class | garbage collect | 5,000 | 250 | 108.65 | 0.43 | 2,301.01 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
339
- | class | merge ordered deltas | 5,000 | 250 | 1.29 | 0.01 | 193,963.85 | 0.03 | 34,196.92 | 0 | 258,371.23 | 4.92 | 203.07 | json-joy |
340
- | class | merge shuffled gossip | 5,000 | 250 | n/a | n/a | n/a | 0.45 | 2,221.81 | n/a | n/a | 0.71 | 1,400.93 | yjs |
341
- | latency | append write to remote visible | 5,000 | 250 | 3.61 | 0.01 | 69,202.24 | 0.07 | 14,698.45 | 0.02 | 54,034.19 | 8.78 | 113.89 | crlist |
342
- | latency | middle insert write to remote visible | 5,000 | 250 | 8.29 | 0.03 | 30,168.46 | 0.05 | 19,072.32 | 0.02 | 61,106.77 | 8.26 | 121.13 | json-joy |
343
- | latency | head insert write to remote visible | 5,000 | 250 | 22.31 | 0.09 | 11,207.6 | 0.05 | 19,615.07 | 0.02 | 43,743 | 8.65 | 115.6 | json-joy |
344
- | latency | head delete to remote hidden | 5,000 | 250 | 294.31 | 1.18 | 849.46 | 0.05 | 20,731.06 | 0.06 | 16,273.29 | 3.73 | 267.95 | yjs |
345
- | latency | middle delete to remote hidden | 5,000 | 250 | 258.47 | 1.03 | 967.23 | 0.05 | 21,973.39 | 0.06 | 18,026.59 | 3.06 | 326.98 | yjs |
346
- | latency | tail delete to remote hidden | 5,000 | 250 | 260.32 | 1.04 | 960.35 | 0.07 | 14,636.4 | 0.04 | 25,885.28 | 2.83 | 353.71 | json-joy |
347
- | latency | out-of-order write delivery to remote visible | 5,000 | 250 | 36.86 | 0.15 | 6,781.7 | 207.42 | 4.82 | n/a | n/a | 224.72 | 4.45 | crlist |
348
- | latency | out-of-order delete delivery to remote convergence | 5,000 | 250 | 327.06 | 1.31 | 764.38 | 0.03 | 30,974.71 | 0.12 | 8,192.85 | 1.03 | 968.05 | yjs |
316
+ | group | scenario | n | ops | crlist ms/op | crlist ops/sec | yjs ms/op | yjs ops/sec | json-joy ms/op | json-joy ops/sec | automerge ms/op | automerge ops/sec | winner |
317
+ | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
318
+ | crud | create / empty list | 5,000 | 250 | 0 | 583,294.45 | 0.18 | 5,571.94 | 0.02 | 53,113.51 | 0.34 | 2,947.03 | crlist |
319
+ | crud | create / hydrate snapshot | 5,000 | 250 | 3.46 | 288.76 | 9.03 | 110.78 | 18.55 | 53.91 | 160.71 | 6.22 | crlist |
320
+ | crud | create / hydrate clean snapshot | 5,000 | 250 | 3.51 | 284.77 | 8.53 | 117.22 | 18.88 | 52.96 | 160.14 | 6.24 | crlist |
321
+ | crud | create / hydrate tombstoned snapshot | 5,000 | 250 | 2.44 | 410.64 | 4.4 | 227.27 | 9.2 | 108.7 | 161.68 | 6.19 | crlist |
322
+ | crud | read / head | 5,000 | 250 | 0 | 1,175,917.22 | 0 | 550,539.53 | 0 | 244,045.29 | 0 | 3,373,819.16 | automerge |
323
+ | crud | read / middle | 5,000 | 250 | 0 | 7,961,783.44 | 0 | 916,422.29 | 0 | 683,433.57 | 0 | 8,064,516.13 | automerge |
324
+ | crud | read / tail | 5,000 | 250 | 0 | 8,474,576.27 | 0 | 1,009,693.05 | 0 | 688,136.53 | 0 | 9,727,626.46 | automerge |
325
+ | crud | read / random indexed reads | 5,000 | 250 | 0 | 829,737.8 | 0 | 415,075.54 | 0.01 | 177,834.68 | 0 | 1,305,483.03 | automerge |
326
+ | crud | read / sequential indexed reads from head | 5,000 | 250 | 0 | 862,068.97 | 0 | 762,892.89 | 0 | 261,834.94 | 0 | 1,229,709.79 | automerge |
327
+ | crud | read / sequential indexed reads from middle | 5,000 | 250 | 0 | 2,553,626.15 | 0 | 1,783,166.9 | 0 | 292,671.51 | 0 | 9,433,962.26 | automerge |
328
+ | crud | read / sequential indexed reads from tail | 5,000 | 250 | 0 | 3,136,762.86 | 0 | 2,258,355.92 | 0 | 296,068.21 | 0 | 7,396,449.7 | automerge |
329
+ | crud | read / full iteration visible values | 5,000 | 250 | 0.6 | 1,679.91 | 0.3 | 3,330.04 | 1.88 | 531.81 | 0.07 | 14,343.33 | automerge |
330
+ | crud | read / collect visible values to array | 5,000 | 250 | 0.59 | 1,686.75 | 0.24 | 4,154.16 | 1.57 | 635.25 | 0.09 | 11,518.24 | automerge |
331
+ | crud | read / visible sparse over deleted entries | 5,000 | 250 | 0 | 2,951,593.86 | 0.04 | 24,372.65 | 0.02 | 45,015.85 | 0 | 10,330,578.51 | automerge |
332
+ | crud | find / head | 5,000 | 250 | 0 | 1,381,215.47 | 0 | 1,838,235.29 | 0 | 655,307.99 | 0 | 1,637,197.12 | yjs |
333
+ | crud | find / middle | 5,000 | 250 | 0.2 | 5,001.17 | 0.13 | 7,414.94 | 0.72 | 1,388.37 | 0.01 | 81,118.79 | automerge |
334
+ | crud | find / tail | 5,000 | 250 | 0.65 | 1,541.22 | 0.23 | 4,382.01 | 1.65 | 607.04 | 0.02 | 50,712 | automerge |
335
+ | crud | find / missing value | 5,000 | 250 | 0.48 | 2,075.08 | 0.33 | 2,991.6 | 1.68 | 596.38 | 0.03 | 34,311.44 | automerge |
336
+ | crud | append / single after tail | 5,000 | 250 | 0.01 | 114,990.11 | 0.05 | 21,441.01 | 0.01 | 84,559.45 | 1.77 | 564.3 | crlist |
337
+ | crud | append / batch after tail | 5,000 | 25,000 | 0.01 | 174,856.72 | 0 | 327,724.87 | 0.01 | 126,154.38 | 0.18 | 5,450.98 | yjs |
338
+ | crud | append / batch after deleted tail | 5,000 | 25,000 | 0.01 | 190,267.58 | 0 | 506,374.24 | 0.01 | 157,324.53 | 0.18 | 5,472.65 | yjs |
339
+ | crud | append / batch after garbage collection | 5,000 | 25,000 | 0.01 | 187,246.28 | 0 | 425,156.33 | 0.01 | 156,701.01 | 0.18 | 5,563.28 | yjs |
340
+ | crud | prepend / single before head | 5,000 | 250 | 0.01 | 112,795.52 | 0.04 | 24,701.12 | 0.01 | 93,590.9 | 2.04 | 490.29 | crlist |
341
+ | crud | prepend / batch before head | 5,000 | 25,000 | 0.01 | 182,893.6 | 0 | 458,392.62 | 0.01 | 180,479.09 | 0.19 | 5,312.57 | yjs |
342
+ | crud | prepend / batch before deleted head | 5,000 | 25,000 | 0.01 | 191,870.67 | 0 | 646,414.08 | 0.01 | 173,786.95 | 0.19 | 5,365.48 | yjs |
343
+ | crud | prepend / batch after garbage collection | 5,000 | 25,000 | 0.01 | 199,418.34 | 0 | 677,797 | 0.01 | 198,482.48 | 0.19 | 5,292.68 | yjs |
344
+ | crud | insert / single before head | 5,000 | 250 | 0.01 | 122,129.95 | 0.03 | 37,967.38 | 0.01 | 89,589.68 | 2.1 | 476.97 | crlist |
345
+ | crud | insert / single after head | 5,000 | 250 | 0.01 | 108,450.46 | 0.02 | 50,539.76 | 0.01 | 78,171.41 | 1.99 | 503.71 | crlist |
346
+ | crud | insert / single before middle | 5,000 | 250 | 0.01 | 92,435.11 | 0.02 | 48,090.8 | 0.01 | 126,935.77 | 1.85 | 541.44 | json-joy |
347
+ | crud | insert / single after middle | 5,000 | 250 | 0.01 | 118,883.45 | 0.02 | 44,514.08 | 0.01 | 126,800.57 | 1.86 | 538.27 | json-joy |
348
+ | crud | insert / single before tail | 5,000 | 250 | 0.01 | 105,565.41 | 0.04 | 25,950.03 | 0.04 | 28,404.89 | 1.81 | 553.23 | crlist |
349
+ | crud | insert / single after tail | 5,000 | 250 | 0.01 | 170,380.97 | 0.06 | 17,784.86 | 0.01 | 171,915.83 | 1.74 | 573.36 | json-joy |
350
+ | crud | insert / batch before head | 5,000 | 25,000 | 0.01 | 193,719.31 | 0 | 721,124.03 | 0.01 | 163,549.31 | 0.18 | 5,418.81 | yjs |
351
+ | crud | insert / batch after head | 5,000 | 25,000 | 0.01 | 196,121.5 | 0 | 578,939.57 | 0.01 | 163,612.35 | 0.18 | 5,465.46 | yjs |
352
+ | crud | insert / batch before middle | 5,000 | 25,000 | 0.01 | 186,665.23 | 0 | 635,967.26 | 0.01 | 156,780.6 | 0.19 | 5,317.63 | yjs |
353
+ | crud | insert / batch after middle | 5,000 | 25,000 | 0.01 | 162,927.59 | 0 | 723,385.91 | 0.01 | 163,095.31 | 0.19 | 5,315.79 | yjs |
354
+ | crud | insert / batch before tail | 5,000 | 25,000 | 0.02 | 56,421.74 | 0 | 623,105.76 | 0.01 | 168,858.11 | 0.19 | 5,269.35 | yjs |
355
+ | crud | insert / batch after tail | 5,000 | 25,000 | 0.01 | 194,579.48 | 0 | 413,629.93 | 0.01 | 145,523.38 | 0.19 | 5,296.61 | yjs |
356
+ | crud | insert / repeated before head | 5,000 | 250 | 0.01 | 182,561.71 | 0.01 | 88,158.54 | 0.01 | 122,874.28 | 1.91 | 523.14 | crlist |
357
+ | crud | insert / repeated before middle | 5,000 | 250 | 0.01 | 155,666.25 | 0.02 | 63,595.43 | 0.01 | 176,765.89 | 1.94 | 514.69 | json-joy |
358
+ | crud | insert / repeated before tail | 5,000 | 250 | 0.01 | 165,980.61 | 0.02 | 51,275.74 | 0.01 | 185,956.56 | 1.65 | 607.26 | json-joy |
359
+ | crud | insert / random positions | 5,000 | 250 | 0.01 | 149,745.43 | 0.05 | 18,836.51 | 0.05 | 21,133.96 | 2.67 | 373.92 | crlist |
360
+ | crud | insert / alternating head and tail | 5,000 | 250 | 0.05 | 20,952.59 | 0.01 | 80,665.98 | 0.01 | 139,657 | 2.03 | 493.52 | json-joy |
361
+ | crud | overwrite / head | 5,000 | 250 | 0.01 | 112,405.02 | 0.06 | 15,601.89 | 0.02 | 62,261.85 | 2.09 | 478.58 | crlist |
362
+ | crud | overwrite / middle | 5,000 | 250 | 0.01 | 113,869.28 | 0.02 | 47,148.46 | 0.01 | 107,916.77 | 2.31 | 432.45 | crlist |
363
+ | crud | overwrite / tail | 5,000 | 250 | 0.02 | 43,058.9 | 0.02 | 40,025.62 | 0.01 | 110,040.05 | 1.88 | 530.97 | json-joy |
364
+ | crud | overwrite / random | 5,000 | 250 | 0.01 | 118,220.08 | 0.05 | 19,623.54 | 0.01 | 91,491.31 | 2.33 | 428.42 | crlist |
365
+ | crud | overwrite / same head repeatedly | 5,000 | 250 | 0.01 | 145,357.29 | 0.03 | 36,205.12 | 0.01 | 111,627.08 | 2.16 | 462.6 | crlist |
366
+ | crud | overwrite / same middle repeatedly | 5,000 | 250 | 0.01 | 146,998.29 | 0.03 | 36,654.74 | 0.01 | 120,059.55 | 1.99 | 501.52 | crlist |
367
+ | crud | overwrite / same tail repeatedly | 5,000 | 250 | 0.01 | 166,345.07 | 0.02 | 46,038.82 | 0.01 | 112,283.85 | 2.06 | 484.87 | crlist |
368
+ | crud | overwrite / random visible entries | 5,000 | 250 | 0.01 | 136,477.78 | 0.04 | 27,394.26 | 0.02 | 66,288.38 | 2.59 | 386.33 | crlist |
369
+ | crud | overwrite / after insert | 5,000 | 250 | 0.01 | 155,840.92 | 0.02 | 49,200.01 | 0.01 | 107,374.48 | 2.2 | 454.77 | crlist |
370
+ | crud | overwrite / after delete | 5,000 | 250 | 0.01 | 166,300.8 | 0.03 | 32,129.13 | 0.01 | 136,440.54 | 2.13 | 470.42 | crlist |
371
+ | crud | delete / head | 5,000 | 250 | 0.01 | 128,027.86 | 0.02 | 44,826.16 | 0.03 | 39,147.52 | 0.25 | 3,941.95 | crlist |
372
+ | crud | delete / middle | 5,000 | 250 | 0.01 | 131,870.45 | 0.02 | 46,850.7 | 0.04 | 27,892.45 | 0.27 | 3,727.79 | crlist |
373
+ | crud | delete / tail | 5,000 | 250 | 0 | 662,602.7 | 0.02 | 41,238.47 | 0 | 215,684.58 | 0.24 | 4,155.72 | crlist |
374
+ | crud | delete / range from head | 5,000 | 5,000 | 0 | 1,967,729.24 | 0 | 4,730,368.97 | 0 | 294,793.94 | 0.02 | 63,164.41 | yjs |
375
+ | crud | delete / range from middle | 5,000 | 5,000 | 0 | 612,564.93 | 0 | 3,573,470.55 | 0 | 250,096.29 | 0.02 | 61,511.13 | yjs |
376
+ | crud | delete / range from tail | 5,000 | 5,000 | 0 | 1,141,187.75 | 0 | 3,982,159.92 | 0 | 274,428.23 | 0.02 | 65,250.39 | yjs |
377
+ | crud | delete / every other entry | 5,000 | 2,500 | 0.01 | 130,597.4 | 0.11 | 8,908.9 | 0.09 | 10,753.32 | 0.25 | 4,049.03 | crlist |
378
+ | crud | delete / all entries from head one by one | 5,000 | 5,000 | 0.01 | 162,621.72 | 0.02 | 55,238.12 | 0.01 | 75,897.64 | 0.2 | 4,892.66 | crlist |
379
+ | crud | delete / all entries from middle outward | 5,000 | 5,000 | 0.01 | 124,464.8 | 0.01 | 76,920 | 0.01 | 158,465.04 | 0.22 | 4,511.9 | json-joy |
380
+ | crud | delete / all entries from tail one by one | 5,000 | 5,000 | 0 | 492,314.96 | 0.02 | 65,107.81 | 0 | 238,138.33 | 0.2 | 4,905.43 | crlist |
381
+ | crud | delete / all entries in random order | 5,000 | 5,000 | 0.15 | 6,675.66 | 14.86 | 67.28 | 8.1 | 123.53 | 0.25 | 3,961.93 | crlist |
382
+ | crud | delete / already deleted head | 5,000 | 250 | 0 | 457,456.54 | 0 | 254,893.96 | 0 | 579,642.94 | 0.02 | 40,047.42 | json-joy |
383
+ | crud | delete / already deleted middle | 5,000 | 250 | 0 | 662,778.37 | 0 | 277,161.86 | 0 | 1,110,124.33 | 0.02 | 44,908.3 | json-joy |
384
+ | crud | delete / already deleted tail | 5,000 | 250 | 0 | 1,516,070.35 | 0 | 245,098.04 | 0 | 1,217,730.15 | 0.02 | 41,829.1 | crlist |
385
+ | crud | mixed / append overwrite delete tail | 5,000 | 250 | 0.01 | 141,418.71 | 0.03 | 29,462.37 | 0.04 | 24,955.08 | 1.58 | 631.01 | crlist |
386
+ | crud | mixed / prepend overwrite delete head | 5,000 | 250 | 0.01 | 147,824.03 | 0.02 | 63,075.56 | 0.04 | 27,475.55 | 2.02 | 496.14 | crlist |
387
+ | crud | mixed / insert overwrite delete middle | 5,000 | 250 | 0.01 | 147,727.94 | 0.02 | 60,540.02 | 0.04 | 22,736.16 | 1.8 | 554.24 | crlist |
388
+ | crud | mixed / append prepend insert overwrite delete | 5,000 | 250 | 0.01 | 168,634.06 | 0.02 | 49,975.01 | 0.04 | 24,084.55 | 1.6 | 625.92 | crlist |
389
+ | mags | snapshot | 5,000 | 250 | 0.21 | 4,814.65 | 3.79 | 264.16 | 7.62 | 131.18 | 15.21 | 65.73 | crlist |
390
+ | mags | snapshot / clean state | 5,000 | 250 | 0.21 | 4,758.46 | 3.65 | 274.1 | 7.74 | 129.12 | 15.1 | 66.22 | crlist |
391
+ | mags | snapshot / tombstoned state 50% deleted | 5,000 | 250 | 0.11 | 8,860.35 | 1.84 | 542.93 | 3.33 | 300.45 | 15.09 | 66.29 | crlist |
392
+ | mags | snapshot / tombstoned state 90% deleted | 5,000 | 250 | 0.02 | 45,216.95 | 0.38 | 2,642.37 | 0.53 | 1,890.83 | 15.26 | 65.53 | crlist |
393
+ | mags | snapshot / after garbage collection | 5,000 | 250 | 0.12 | 8,673.03 | 1.9 | 526.82 | 3.43 | 291.91 | 15.16 | 65.98 | crlist |
394
+ | mags | snapshot / size bytes clean state | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
395
+ | mags | snapshot / size bytes tombstoned state | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
396
+ | mags | acknowledge | 5,000 | 250 | 0 | 2,035,830.62 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
397
+ | mags | acknowledge / clean state | 5,000 | 250 | 0 | 7,082,152.97 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
398
+ | mags | acknowledge / 50% deleted state | 5,000 | 250 | 0.04 | 23,333.96 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
399
+ | mags | acknowledge / 90% deleted state | 5,000 | 250 | 0.07 | 13,864.55 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
400
+ | mags | garbage collect | 5,000 | 250 | 0 | 1,276,161.31 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
401
+ | mags | garbage collect / no eligible tombstones | 5,000 | 250 | 0 | 5,555,555.56 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
402
+ | mags | garbage collect / 50% eligible tombstones | 5,000 | 250 | 0 | 544,069.64 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
403
+ | mags | garbage collect / 90% eligible tombstones | 5,000 | 250 | 0 | 694,444.44 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
404
+ | mags | garbage collect / partial frontiers 2 replicas | 5,000 | 250 | 0 | 4,310,344.83 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
405
+ | mags | garbage collect / partial frontiers 10 replicas | 5,000 | 250 | 0 | 5,154,639.18 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
406
+ | mags | post-gc read / full iteration visible values | 5,000 | 250 | 0.33 | 3,039.21 | 0.1 | 9,884.82 | 0.6 | 1,654.78 | 0.03 | 32,724.23 | automerge |
407
+ | mags | post-gc snapshot / size bytes | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
408
+ | mags | delta / append head single op size bytes | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
409
+ | mags | delta / append tail single op size bytes | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
410
+ | mags | delta / prepend head single op size bytes | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
411
+ | mags | delta / insert middle single op size bytes | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
412
+ | mags | delta / overwrite head single op size bytes | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
413
+ | mags | delta / overwrite middle single op size bytes | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
414
+ | mags | delta / overwrite tail single op size bytes | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
415
+ | mags | delta / delete head single op size bytes | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
416
+ | mags | delta / delete middle single op size bytes | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
417
+ | mags | delta / delete tail single op size bytes | 5,000 | 1 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
418
+ | mags | delta / range delete size bytes | 5,000 | 100 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
419
+ | mags | delta / batch append 100 ops size bytes | 5,000 | 100 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
420
+ | mags | delta / batch prepend 100 ops size bytes | 5,000 | 100 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
421
+ | mags | delta / batch insert middle 100 ops size bytes | 5,000 | 100 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
422
+ | mags | delta / batch overwrite 100 ops size bytes | 5,000 | 100 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
423
+ | mags | delta / batch mixed 100 ops size bytes | 5,000 | 100 | 0 | n/a | 0 | n/a | 0 | n/a | 0 | n/a | n/a |
424
+ | mags | merge ordered deltas | 5,000 | 250 | 0.35 | 2,819.36 | 0.02 | 61,993.21 | 0 | 206,423.91 | 3.26 | 306.91 | json-joy |
425
+ | mags | merge shuffled gossip | 5,000 | 250 | 0.62 | 1,601.54 | 0.73 | 1,372.19 | n/a | n/a | 0.7 | 1,434.24 | crlist |
426
+ | mags | merge / append head delta into equal replica | 5,000 | 1 | 0.19 | 5,324.81 | 0.1 | 10,288.07 | 0.07 | 13,568.52 | 3.38 | 296.21 | json-joy |
427
+ | mags | merge / append tail delta into equal replica | 5,000 | 1 | 0.03 | 33,112.58 | 0.03 | 33,222.59 | 0.01 | 93,457.94 | 3.32 | 301.15 | json-joy |
428
+ | mags | merge / prepend head delta into equal replica | 5,000 | 1 | 0.17 | 5,871.99 | 0.03 | 32,051.28 | 0.01 | 94,339.62 | 3.27 | 305.38 | json-joy |
429
+ | mags | merge / insert middle delta into equal replica | 5,000 | 1 | 0.08 | 11,947.43 | 0.03 | 35,971.22 | 0.01 | 67,114.09 | 3.37 | 297.15 | json-joy |
430
+ | mags | merge / overwrite head delta into equal replica | 5,000 | 1 | 0.99 | 1,013.07 | 0.03 | 30,959.75 | 0.01 | 84,033.61 | 3.23 | 309.3 | json-joy |
431
+ | mags | merge / overwrite middle delta into equal replica | 5,000 | 1 | 0.98 | 1,022.49 | 0.04 | 26,315.79 | 0.02 | 52,083.33 | 3.57 | 279.99 | json-joy |
432
+ | mags | merge / overwrite tail delta into equal replica | 5,000 | 1 | 0.9 | 1,111.36 | 0.05 | 20,283.98 | 0.01 | 84,745.76 | 3.37 | 296.39 | json-joy |
433
+ | mags | merge / delete head delta into equal replica | 5,000 | 1 | 0.85 | 1,182.31 | 0.02 | 42,194.09 | 0.02 | 52,356.02 | 2 | 500.98 | json-joy |
434
+ | mags | merge / delete middle delta into equal replica | 5,000 | 1 | 1.19 | 842.67 | 0.11 | 9,149.13 | 0.09 | 11,376.56 | 1.72 | 581.16 | json-joy |
435
+ | mags | merge / delete tail delta into equal replica | 5,000 | 1 | 1.06 | 940.82 | 0.02 | 42,016.81 | 0.01 | 99,009.9 | 1.77 | 563.82 | json-joy |
436
+ | mags | merge / duplicate delta ignored | 5,000 | 250 | 0 | 1,034,340.09 | 0.03 | 36,272.89 | 0.01 | 117,426.02 | 0.07 | 14,854.25 | crlist |
437
+ | mags | merge / old delta ignored after merge | 5,000 | 250 | 0 | 1,167,678.65 | 0.03 | 37,389.33 | 0 | 272,182.91 | 0.03 | 34,461.84 | crlist |
438
+ | mags | merge / ordered 1,000 append deltas | 5,000 | 1,000 | 0 | 396,510.71 | 0.03 | 37,317.75 | 0 | 222,657.64 | 4.18 | 239.16 | crlist |
439
+ | mags | merge / ordered 1,000 prepend deltas | 5,000 | 1,000 | 0.06 | 18,018.25 | 0.01 | 88,059.18 | 0.02 | 43,396.19 | 3.63 | 275.13 | yjs |
440
+ | mags | merge / ordered 1,000 middle insert deltas | 5,000 | 1,000 | 0.02 | 47,898.91 | 0.01 | 97,563.83 | 0.01 | 96,388.33 | 3.73 | 267.92 | yjs |
441
+ | mags | merge / shuffled 1,000 mixed deltas | 5,000 | 1,000 | 0.73 | 1,377.4 | 1.29 | 773.46 | n/a | n/a | 0.91 | 1,096.34 | crlist |
442
+ | mags | merge / reverse ordered 1,000 mixed deltas | 5,000 | 1,000 | 0.17 | 5,763.32 | 1.17 | 854.28 | n/a | n/a | 0.84 | 1,185.68 | crlist |
443
+ | mags | merge / concurrent prepends same head | 5,000 | 2 | 1.05 | 951.25 | 0.11 | 9,280.74 | n/a | n/a | 16.45 | 60.78 | yjs |
444
+ | mags | merge / concurrent appends same tail | 5,000 | 2 | 0.88 | 1,142.14 | 0.04 | 24,479.8 | n/a | n/a | 16.43 | 60.85 | yjs |
445
+ | mags | merge / concurrent inserts same middle position | 5,000 | 2 | 1.05 | 956.16 | 0.05 | 20,020.02 | n/a | n/a | 10.77 | 92.81 | yjs |
446
+ | mags | merge / concurrent overwrites same head | 5,000 | 2 | 2.22 | 449.9 | 0.04 | 24,600.25 | n/a | n/a | 8.49 | 117.82 | yjs |
447
+ | mags | merge / concurrent overwrites same middle | 5,000 | 2 | 6.89 | 145.2 | 0.05 | 22,148.39 | n/a | n/a | 15 | 66.66 | yjs |
448
+ | mags | merge / concurrent overwrites same tail | 5,000 | 2 | 1.77 | 565.28 | 0.04 | 25,125.63 | n/a | n/a | 14.87 | 67.23 | yjs |
449
+ | mags | merge / concurrent deletes same head | 5,000 | 2 | 2.09 | 477.51 | 0.02 | 47,846.89 | 0.02 | 45,558.09 | 7.75 | 128.98 | yjs |
450
+ | mags | merge / concurrent deletes same middle | 5,000 | 2 | 1.66 | 603.57 | 0.06 | 17,730.5 | 0.02 | 42,462.85 | 11.96 | 83.59 | json-joy |
451
+ | mags | merge / concurrent deletes same tail | 5,000 | 2 | 1.1 | 909.88 | 0.03 | 33,840.95 | 0.02 | 66,006.6 | 12.45 | 80.34 | json-joy |
452
+ | mags | merge / concurrent overwrite delete same entry | 5,000 | 2 | 7.8 | 128.24 | 0.07 | 14,566.64 | 0.11 | 9,442.87 | 16.51 | 60.57 | yjs |
453
+ | mags | merge / forked replicas rejoin after 250 ops each | 5,000 | 500 | 0.44 | 2,290.13 | 0.01 | 83,841.97 | n/a | n/a | 3.21 | 311.06 | yjs |
454
+ | mags | merge / 10 replicas gossip convergence | 5,000 | 100 | 1.24 | 806.5 | 0.05 | 20,920.94 | n/a | n/a | 6.85 | 145.92 | yjs |
455
+ | mags | merge / snapshot merge into stale replica | 5,000 | 5,350 | 0 | 448,449.29 | 0 | 403,107.32 | 0 | 242,140.61 | 0.03 | 29,164.09 | crlist |
456
+ | class | constructor / hydrate snapshot | 5,000 | 250 | 4.45 | 224.84 | 6.97 | 143.56 | 19.1 | 52.36 | 174.63 | 5.73 | crlist |
457
+ | class | read / head | 5,000 | 250 | 0 | 1,133,272.89 | 0 | 3,888,024.88 | 0 | 1,510,574.02 | 0 | 2,149,613.07 | yjs |
458
+ | class | read / middle | 5,000 | 250 | 0 | 1,237,011.38 | 0 | 15,625,000 | 0 | 3,315,649.87 | 0 | 11,111,111.11 | yjs |
459
+ | class | read / tail | 5,000 | 250 | 0 | 3,041,362.53 | 0 | 16,233,766.23 | 0 | 3,311,258.28 | 0 | 11,574,074.07 | yjs |
460
+ | class | find near head | 5,000 | 250 | 0 | 721,709.01 | 0 | 1,653,439.15 | 0 | 880,591.76 | 0 | 1,555,693.84 | yjs |
461
+ | class | find near middle | 5,000 | 250 | 1.53 | 653.42 | 0.09 | 11,699.68 | 0.88 | 1,131.24 | 0.02 | 62,567.26 | automerge |
462
+ | class | find near tail | 5,000 | 250 | 4.04 | 247.47 | 0.16 | 6,376.59 | 2.07 | 483.82 | 0.02 | 47,383.48 | automerge |
463
+ | class | iterate visible values | 5,000 | 250 | 0.12 | 8,057.76 | 0.24 | 4,175.56 | 1.87 | 533.61 | 0.08 | 13,319.13 | automerge |
464
+ | class | collect visible values to array | 5,000 | 250 | 0.11 | 9,324.46 | 0.23 | 4,344.24 | 2 | 498.87 | 0.09 | 10,684.99 | automerge |
465
+ | class | append / single after tail | 5,000 | 250 | 0.01 | 103,863.73 | 0.02 | 47,383.48 | 0.04 | 24,068.08 | 2.16 | 463.75 | crlist |
466
+ | class | append / batch after tail | 5,000 | 25,000 | 0.01 | 110,140.36 | 0 | 602,774.21 | 0.01 | 149,663.05 | 0.18 | 5,469.64 | yjs |
467
+ | class | prepend / single before head | 5,000 | 250 | 0.01 | 100,458.09 | 0.01 | 68,861.04 | 0.01 | 130,011.96 | 2.05 | 487.99 | json-joy |
468
+ | class | prepend / batch before head | 5,000 | 25,000 | 0.01 | 98,344.66 | 0 | 781,961.1 | 0 | 207,635.68 | 0.19 | 5,390.69 | yjs |
469
+ | class | insert / single before middle | 5,000 | 250 | 0.01 | 93,685.59 | 0.02 | 58,707.5 | 0.03 | 30,234.5 | 1.96 | 509.66 | crlist |
470
+ | class | insert / batch before middle | 5,000 | 25,000 | 0.01 | 111,602.06 | 0 | 667,934.85 | 0.01 | 186,150.27 | 0.19 | 5,308.63 | yjs |
471
+ | class | overwrite / head | 5,000 | 250 | 0.01 | 80,995.27 | 0.02 | 55,276.72 | 0.02 | 45,955.88 | 1.94 | 514.72 | crlist |
472
+ | class | overwrite / middle | 5,000 | 250 | 0.01 | 82,453.83 | 0.03 | 38,759.69 | 0.01 | 159,856.77 | 2.02 | 494.57 | json-joy |
473
+ | class | overwrite / tail | 5,000 | 250 | 0.01 | 80,932.34 | 0.02 | 59,956.35 | 0.01 | 128,014.75 | 1.96 | 509.34 | json-joy |
474
+ | class | overwrite / random | 5,000 | 250 | 0.01 | 88,636.77 | 0.04 | 27,969.52 | 0.01 | 107,628.72 | 2.04 | 490.48 | json-joy |
475
+ | class | remove / head | 5,000 | 250 | 0.01 | 98,779.09 | 0.02 | 49,558.93 | 0.03 | 39,574.5 | 0.26 | 3,842.45 | crlist |
476
+ | class | remove / middle | 5,000 | 250 | 0.01 | 72,871.43 | 0.01 | 97,412.72 | 0.04 | 25,259.41 | 0.27 | 3,760.27 | yjs |
477
+ | class | remove / tail | 5,000 | 250 | 0 | 371,581.45 | 0.02 | 65,107.56 | 0 | 261,151.15 | 0.28 | 3,514.87 | crlist |
478
+ | class | remove / range from head | 5,000 | 5,000 | 0.01 | 105,863.35 | 0 | 9,956,192.75 | 0 | 356,755.52 | 0.01 | 67,166.75 | yjs |
479
+ | class | remove / range from middle | 5,000 | 5,000 | 0.01 | 107,641.7 | 0 | 8,574,858.51 | 0 | 322,162.87 | 0.02 | 64,780.85 | yjs |
480
+ | class | remove / range from tail | 5,000 | 5,000 | 0.01 | 81,094.45 | 0 | 9,587,727.71 | 0 | 327,641.12 | 0.01 | 67,795.32 | yjs |
481
+ | class | mixed / append overwrite remove tail | 5,000 | 250 | 0.01 | 87,205.25 | 0.02 | 58,358.04 | 0.01 | 152,942.62 | 1.48 | 677.07 | json-joy |
482
+ | class | mixed / prepend overwrite remove head | 5,000 | 250 | 0.01 | 105,516.4 | 0.01 | 83,760.51 | 0.01 | 155,656.56 | 1.82 | 550.47 | json-joy |
483
+ | class | mixed / insert overwrite remove middle | 5,000 | 250 | 0.01 | 106,233.8 | 0.01 | 68,534.46 | 0.01 | 162,411.49 | 1.39 | 718.63 | json-joy |
484
+ | class | paste / insert 10,000 entries at cursor | 5,000 | 10,000 | 0.02 | 42,103.08 | 0 | 951,583.43 | 0.01 | 105,052.5 | 0.17 | 5,772.46 | yjs |
485
+ | class | render / join visible entries to string | 5,000 | 250 | 0.28 | 3,568.46 | 0.35 | 2,891.04 | 2.6 | 384.02 | 0.17 | 5,901.53 | automerge |
486
+ | class | snapshot | 5,000 | 250 | 0.17 | 6,008.13 | 3.74 | 267.13 | 8.73 | 114.55 | 15.38 | 65.02 | crlist |
487
+ | class | snapshot / tombstoned state 50% deleted | 5,000 | 250 | 0.14 | 7,158.73 | 1.85 | 539.8 | 3.1 | 322.54 | 15.29 | 65.4 | crlist |
488
+ | class | snapshot / after garbage collection | 5,000 | 250 | 0.22 | 4,540.47 | 0.25 | 3,933.69 | 1.86 | 538.65 | 0.08 | 13,314.8 | automerge |
489
+ | class | acknowledge | 5,000 | 250 | 0.09 | 11,570.54 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
490
+ | class | acknowledge / 50% deleted state | 5,000 | 250 | 0.05 | 18,302.01 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
491
+ | class | acknowledge / 90% deleted state | 5,000 | 250 | 0.07 | 14,118.15 | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
492
+ | class | garbage collect | 5,000 | 250 | 0.13 | 7,581.94 | 0.23 | 4,428.45 | 1.78 | 562.63 | 0.07 | 13,861.4 | automerge |
493
+ | class | garbage collect / no eligible tombstones | 5,000 | 250 | 0.21 | 4,837.99 | 0.24 | 4,252.36 | 1.82 | 550.55 | 0.08 | 13,294.05 | automerge |
494
+ | class | garbage collect / 90% eligible tombstones | 5,000 | 250 | 0.16 | 6,392.54 | 0.25 | 4,079.55 | 1.69 | 591.18 | 0.08 | 13,072.1 | automerge |
495
+ | class | merge ordered deltas | 5,000 | 250 | 0.56 | 1,794.6 | 0.01 | 95,259.87 | 0 | 230,776.33 | 3.22 | 310.28 | json-joy |
496
+ | class | merge shuffled gossip | 5,000 | 250 | 0.65 | 1,531 | 0.39 | 2,559.41 | n/a | n/a | 0.68 | 1,462.42 | yjs |
497
+ | class | merge / duplicate delta ignored | 5,000 | 250 | 0 | 990,491.28 | 0.03 | 37,430.75 | 0 | 313,715.65 | 0.03 | 30,307.81 | crlist |
498
+ | class | merge / concurrent prepends same head | 5,000 | 2 | 1.67 | 599.16 | 0.07 | 13,431.83 | n/a | n/a | 9.29 | 107.6 | yjs |
499
+ | class | merge / concurrent appends same tail | 5,000 | 2 | 0.94 | 1,062.25 | 0.03 | 35,650.62 | n/a | n/a | 10.99 | 90.99 | yjs |
500
+ | class | merge / concurrent inserts same middle position | 5,000 | 2 | 1.59 | 627.88 | 0.04 | 25,940.34 | n/a | n/a | 11.26 | 88.78 | yjs |
501
+ | class | merge / forked replicas rejoin after 250 ops each | 5,000 | 500 | 0.86 | 1,158.7 | 0.01 | 73,332.06 | n/a | n/a | 3.2 | 312.98 | yjs |
502
+ | latency | append tail write to remote visible | 5,000 | 250 | 0.94 | 1,065.34 | 0.24 | 4,096.83 | 10.86 | 92.11 | 5.79 | 172.6 | yjs |
503
+ | latency | prepend head write to remote visible | 5,000 | 250 | 0.06 | 15,808.08 | 0.03 | 29,730.4 | 0.02 | 58,272.34 | 5.76 | 173.67 | json-joy |
504
+ | latency | middle insert write to remote visible | 5,000 | 250 | 0.36 | 2,793.55 | 0.13 | 7,767.35 | 3.9 | 256.34 | 5.74 | 174.34 | yjs |
505
+ | latency | head insert write to remote visible | 5,000 | 250 | 0.07 | 14,055.68 | 0.02 | 44,575.2 | 0.02 | 58,984.52 | 5.79 | 172.78 | json-joy |
506
+ | latency | overwrite head write to remote visible | 5,000 | 250 | 0.98 | 1,021.2 | 0.04 | 28,157.91 | 0.02 | 64,649.6 | 5.77 | 173.43 | json-joy |
507
+ | latency | overwrite middle write to remote visible | 5,000 | 250 | 1.59 | 627.88 | 0.13 | 7,549.61 | 2.73 | 365.66 | 5.8 | 172.5 | yjs |
508
+ | latency | overwrite tail write to remote visible | 5,000 | 250 | 1.62 | 617.03 | 0.23 | 4,282.4 | 5.6 | 178.56 | 5.74 | 174.15 | yjs |
509
+ | latency | head delete to remote hidden | 5,000 | 250 | 1.63 | 611.78 | 0.27 | 3,759.49 | 6.1 | 163.95 | 2.15 | 465.17 | yjs |
510
+ | latency | middle delete to remote hidden | 5,000 | 250 | 1.73 | 577.78 | 0.24 | 4,086.4 | 5.46 | 183.11 | 2.08 | 480.49 | yjs |
511
+ | latency | tail delete to remote hidden | 5,000 | 250 | 1.63 | 612.71 | 0.21 | 4,743 | 5.33 | 187.75 | 2.08 | 480.56 | yjs |
512
+ | latency | append tail write to 10 remotes visible | 5,000 | 2,500 | 0.64 | 1,574 | 0.2 | 4,982.9 | 11.93 | 83.85 | 3.82 | 261.53 | yjs |
513
+ | latency | prepend head write to 10 remotes visible | 5,000 | 2,500 | 0.09 | 11,716.74 | 0.01 | 97,163.6 | 0.01 | 80,234.16 | 3.84 | 260.3 | yjs |
514
+ | latency | middle insert write to 10 remotes visible | 5,000 | 2,500 | 0.38 | 2,612.49 | 0.11 | 8,900.45 | 4.63 | 216.2 | 3.9 | 256.59 | yjs |
515
+ | latency | overwrite middle write to 10 remotes visible | 5,000 | 2,500 | 1.79 | 557.94 | 0.1 | 9,630.07 | 3.18 | 314.23 | 3.89 | 257.28 | yjs |
516
+ | latency | delete middle to 10 remotes hidden | 5,000 | 2,500 | 2.6 | 384.73 | 0.23 | 4,296.53 | 6.66 | 150.16 | 1.94 | 514.24 | yjs |
517
+ | latency | out-of-order write delivery to remote visible | 5,000 | 250 | 1.98 | 504.27 | 73.83 | 13.55 | n/a | n/a | 18.53 | 53.97 | crlist |
518
+ | latency | out-of-order delete delivery to remote convergence | 5,000 | 250 | 1.11 | 900.38 | 0.01 | 100,688.71 | 0.01 | 148,844.96 | 0.17 | 6,022.78 | json-joy |
519
+ | latency | out-of-order append delivery to convergence | 5,000 | 250 | 2.1 | 476.46 | 21.89 | 45.68 | n/a | n/a | 16.18 | 61.81 | crlist |
520
+ | latency | out-of-order prepend delivery to convergence | 5,000 | 250 | 1.76 | 568.38 | 22.41 | 44.63 | 0.1 | 9,584.42 | 16.09 | 62.16 | json-joy |
521
+ | latency | out-of-order middle insert delivery to convergence | 5,000 | 250 | 1.88 | 532.47 | 73.67 | 13.57 | n/a | n/a | 15.28 | 65.43 | crlist |
522
+ | latency | out-of-order overwrite delivery to convergence | 5,000 | 129 | 2.4 | 416.67 | n/a | n/a | 238.97 | 4.18 | 76.94 | 13 | crlist |
523
+ | latency | offline burst 1,000 ops then sync | 5,000 | 1,000 | 0.64 | 1,565.3 | 0.03 | 35,781.38 | 0.01 | 83,633.02 | 3.26 | 306.59 | json-joy |
524
+ | latency | forked replicas mixed ops then converge | 5,000 | 500 | 0.38 | 2,603.54 | 0.01 | 87,836.41 | n/a | n/a | 3.31 | 302.26 | yjs |
525
+ | latency | duplicate shuffled gossip to convergence | 5,000 | 500 | 0.51 | 1,973.49 | 0.21 | 4,874.22 | n/a | n/a | 0.39 | 2,585.7 | yjs |
526
+ | latency | remote snapshot hydrate then apply pending deltas | 5,000 | 250 | 0.04 | 27,423.71 | 0.04 | 23,640.44 | 0.07 | 14,483.85 | 0.75 | 1,336.38 | crlist |
527
+ | workload | local app session | 5,000 | 250 | 0.01 | 69,871.44 | 0.01 | 69,376.99 | 0.01 | 134,466.44 | 1.25 | 802.91 | json-joy |
528
+ | workload | read heavy session | 5,000 | 250 | 0 | 1,671,122.99 | 0 | 4,734,848.48 | 0 | 206,696.98 | 0 | 1,483,679.53 | yjs |
529
+ | workload | write heavy session | 5,000 | 250 | 0.02 | 64,150.27 | 0.01 | 73,551.04 | 0.01 | 138,827.19 | 1.22 | 819.89 | json-joy |
530
+ | workload | append tail heavy session | 5,000 | 250 | 0.01 | 109,003.71 | 0.02 | 57,195.15 | 0.01 | 150,141.13 | 1.57 | 636.11 | json-joy |
531
+ | workload | prepend head heavy session | 5,000 | 250 | 0.02 | 51,263.12 | 0.01 | 91,270.86 | 0.01 | 147,806.55 | 1.69 | 593.45 | json-joy |
532
+ | workload | insert middle heavy session | 5,000 | 250 | 0.02 | 54,945.05 | 0.01 | 82,674.69 | 0.01 | 167,661.46 | 1.68 | 595.7 | json-joy |
533
+ | workload | overwrite heavy session | 5,000 | 250 | 0.03 | 38,561.2 | 0.01 | 81,221.57 | 0.01 | 147,911.49 | 1.31 | 764.23 | json-joy |
534
+ | workload | delete heavy session | 5,000 | 250 | 0.01 | 79,226.75 | 0.01 | 99,174.87 | 0 | 233,907.19 | 0.2 | 4,954.31 | json-joy |
535
+ | workload | balanced append prepend insert overwrite delete session | 5,000 | 250 | 0.03 | 38,897.79 | 0.01 | 75,503.61 | 0.01 | 160,658.06 | 1.48 | 673.6 | json-joy |
536
+ | workload | random edit session | 5,000 | 250 | 0.04 | 24,349.62 | 0.02 | 44,214.92 | 0.06 | 15,961.49 | 1.37 | 731.63 | yjs |
537
+ | workload | text editing session | 5,000 | 250 | 0.02 | 66,311.24 | 0.01 | 84,280.08 | 0.04 | 26,628.61 | 1.61 | 622.31 | yjs |
538
+ | workload | collaborative offline session | 5,000 | 500 | 0.43 | 2,307.02 | 0.01 | 108,761.86 | n/a | n/a | 3.28 | 304.44 | yjs |
539
+ | workload | sync and cleanup session | 5,000 | 252 | 0.21 | 4,689.65 | 0.01 | 114,411.24 | n/a | n/a | 3.32 | 301.58 | yjs |
540
+ | workload | long lived tombstoned session | 5,000 | 250 | 0.01 | 105,117.1 | 0.01 | 79,148.99 | 0.01 | 158,217.83 | 1.79 | 558.4 | json-joy |
541
+ | workload | sparse visible session | 5,000 | 250 | 0.01 | 104,436.46 | 0.13 | 7,605.26 | 0.01 | 74,638.01 | 1.13 | 883.2 | crlist |
542
+ | workload | post-gc edit session | 5,000 | 250 | 0.01 | 91,111.19 | 0.03 | 39,102.82 | 0.05 | 20,841.32 | 1.54 | 650.73 | crlist |
349
543
 
350
544
  ## License
351
545
 
package/dist/index.cjs CHANGED
@@ -237,10 +237,10 @@ function moveEntryToPredecessor(crListReplica, linkedListEntry, predecessor, del
237
237
 
238
238
  // src/.helpers/indexFromPropertyKey/index.ts
239
239
  function indexFromPropertyKey(index) {
240
- if (typeof index !== "string" || !/^(0|[1-9]\d*)$/.test(index))
241
- return void 0;
240
+ if (typeof index !== "string") return void 0;
242
241
  const listIndex = Number(index);
243
- return Number.isSafeInteger(listIndex) ? listIndex : void 0;
242
+ if (!Number.isSafeInteger(listIndex) || listIndex < 0) return void 0;
243
+ return String(listIndex) === index ? listIndex : void 0;
244
244
  }
245
245
 
246
246
  // src/.helpers/trySpliceInsertedParent/index.ts
@@ -501,6 +501,7 @@ function __update(listIndex, listValues, crListReplica, mode) {
501
501
  }
502
502
 
503
503
  // src/core/crud/delete/index.ts
504
+
504
505
  function __delete(crListReplica, startIndex, endIndex) {
505
506
  const change = {};
506
507
  const delta = { values: [], tombstones: [] };
@@ -513,17 +514,43 @@ function __delete(crListReplica, startIndex, endIndex) {
513
514
  void seekCursorToIndex(listIndex, crListReplica);
514
515
  if (!crListReplica.cursor) return false;
515
516
  let current = crListReplica.cursor;
517
+ const predecessor = _nullishCoalesce(_optionalChain([current, 'access', _51 => _51.prev, 'optionalAccess', _52 => _52.uuidv7]), () => ( "\0"));
518
+ const deletedIds = /* @__PURE__ */ new Set();
516
519
  let deleted = 0;
517
520
  let currentIndex = _nullishCoalesce(crListReplica.cursorIndex, () => ( listIndex));
518
521
  while (current && deleted < deleteCount) {
519
522
  const next = current.next;
520
523
  change[currentIndex] = void 0;
521
- void _optionalChain([crListReplica, 'access', _51 => _51.index, 'optionalAccess', _52 => _52.delete, 'call', _53 => _53(currentIndex)]);
524
+ void deletedIds.add(current.uuidv7);
525
+ void _optionalChain([crListReplica, 'access', _53 => _53.index, 'optionalAccess', _54 => _54.delete, 'call', _55 => _55(currentIndex)]);
522
526
  void deleteLiveEntry(crListReplica, current, delta);
523
527
  current = next;
524
528
  currentIndex++;
525
529
  deleted++;
526
530
  }
531
+ if (current && deletedIds.has(current.predecessor)) {
532
+ const replacement = {
533
+ uuidv7: _uuid.v7.call(void 0, ),
534
+ value: current.value,
535
+ predecessor,
536
+ index: listIndex,
537
+ next: void 0,
538
+ prev: void 0
539
+ };
540
+ const prev = current.prev;
541
+ const next = current.next;
542
+ void deleteLiveEntry(crListReplica, current, delta);
543
+ void linkEntryBetween(prev, replacement, next);
544
+ void attachEntryToIndexes(crListReplica, replacement, delta);
545
+ if (_optionalChain([next, 'optionalAccess', _56 => _56.predecessor]) === current.uuidv7)
546
+ void moveEntryToPredecessor(
547
+ crListReplica,
548
+ next,
549
+ replacement.uuidv7,
550
+ delta
551
+ );
552
+ current = replacement;
553
+ }
527
554
  crListReplica.size = crListReplica.parentMap.size;
528
555
  crListReplica.cursor = _nullishCoalesce(current, () => ( crListReplica.cursor));
529
556
  crListReplica.cursorIndex = current ? listIndex : crListReplica.cursor ? Math.max(0, crListReplica.size - 1) : void 0;
@@ -560,7 +587,7 @@ function __merge(crListReplica, crListDelta) {
560
587
  crListReplica.cursorIndex = linkedListEntry.index;
561
588
  void attachEntryToIndexes(crListReplica, linkedListEntry);
562
589
  crListReplica.size = crListReplica.parentMap.size;
563
- void _optionalChain([crListReplica, 'access', _54 => _54.index, 'optionalAccess', _55 => _55.set, 'call', _56 => _56(linkedListEntry.index, linkedListEntry)]);
590
+ void _optionalChain([crListReplica, 'access', _57 => _57.index, 'optionalAccess', _58 => _58.set, 'call', _59 => _59(linkedListEntry.index, linkedListEntry)]);
564
591
  return { [linkedListEntry.index]: linkedListEntry.value };
565
592
  }
566
593
  }
@@ -572,7 +599,7 @@ function __merge(crListReplica, crListDelta) {
572
599
  const linkedListEntry = crListReplica.parentMap.get(tombstone);
573
600
  if (linkedListEntry) {
574
601
  void newTombsIndices.push(linkedListEntry.index);
575
- void _optionalChain([crListReplica, 'access', _57 => _57.index, 'optionalAccess', _58 => _58.delete, 'call', _59 => _59(linkedListEntry.index)]);
602
+ void _optionalChain([crListReplica, 'access', _60 => _60.index, 'optionalAccess', _61 => _61.delete, 'call', _62 => _62(linkedListEntry.index)]);
576
603
  void deleteLiveEntry(crListReplica, linkedListEntry);
577
604
  needsRelink = true;
578
605
  }
@@ -617,7 +644,7 @@ function __merge(crListReplica, crListDelta) {
617
644
  crListReplica.cursor = linkedListEntry;
618
645
  crListReplica.cursorIndex = linkedListEntry.index;
619
646
  crListReplica.size = crListReplica.parentMap.size;
620
- void _optionalChain([crListReplica, 'access', _60 => _60.index, 'optionalAccess', _61 => _61.set, 'call', _62 => _62(linkedListEntry.index, linkedListEntry)]);
647
+ void _optionalChain([crListReplica, 'access', _63 => _63.index, 'optionalAccess', _64 => _64.set, 'call', _65 => _65(linkedListEntry.index, linkedListEntry)]);
621
648
  } else {
622
649
  needsRelink = true;
623
650
  }
@@ -628,7 +655,7 @@ function __merge(crListReplica, crListDelta) {
628
655
  crListReplica.cursor = linkedListEntry;
629
656
  crListReplica.cursorIndex = linkedListEntry.index;
630
657
  crListReplica.size = crListReplica.parentMap.size;
631
- void _optionalChain([crListReplica, 'access', _63 => _63.index, 'optionalAccess', _64 => _64.set, 'call', _65 => _65(linkedListEntry.index, linkedListEntry)]);
658
+ void _optionalChain([crListReplica, 'access', _66 => _66.index, 'optionalAccess', _67 => _67.set, 'call', _68 => _68(linkedListEntry.index, linkedListEntry)]);
632
659
  } else {
633
660
  needsRelink = true;
634
661
  }
@@ -839,8 +866,8 @@ var CRList = class {
839
866
  * @param thisArg - Optional `this` value for the predicate.
840
867
  */
841
868
  find(predicate, thisArg) {
842
- let linkedListEntry = _nullishCoalesce(_optionalChain([this, 'access', _66 => _66.state, 'access', _67 => _67.index, 'optionalAccess', _68 => _68.get, 'call', _69 => _69(0)]), () => ( this.state.cursor));
843
- while (_optionalChain([linkedListEntry, 'optionalAccess', _70 => _70.prev])) linkedListEntry = linkedListEntry.prev;
869
+ let linkedListEntry = _nullishCoalesce(_optionalChain([this, 'access', _69 => _69.state, 'access', _70 => _70.index, 'optionalAccess', _71 => _71.get, 'call', _72 => _72(0)]), () => ( this.state.cursor));
870
+ while (_optionalChain([linkedListEntry, 'optionalAccess', _73 => _73.prev])) linkedListEntry = linkedListEntry.prev;
844
871
  let index = 0;
845
872
  while (linkedListEntry) {
846
873
  if (predicate.call(thisArg, linkedListEntry.value, index, this))
@@ -950,9 +977,11 @@ var CRList = class {
950
977
  * Iterates over current live values in index order.
951
978
  */
952
979
  *[Symbol.iterator]() {
953
- for (let index = 0; index < this.size; index++) {
954
- const value = this[index];
955
- yield value;
980
+ let linkedListEntry = _nullishCoalesce(_optionalChain([this, 'access', _74 => _74.state, 'access', _75 => _75.index, 'optionalAccess', _76 => _76.get, 'call', _77 => _77(0)]), () => ( this.state.cursor));
981
+ while (_optionalChain([linkedListEntry, 'optionalAccess', _78 => _78.prev])) linkedListEntry = linkedListEntry.prev;
982
+ while (linkedListEntry) {
983
+ yield linkedListEntry.value;
984
+ linkedListEntry = linkedListEntry.next;
956
985
  }
957
986
  }
958
987
  /**
@@ -965,8 +994,13 @@ var CRList = class {
965
994
  * @param thisArg - Optional `this` value for the callback.
966
995
  */
967
996
  forEach(callback, thisArg) {
968
- for (let index = 0; index < this.size; index++) {
969
- void callback.call(thisArg, this[index], index, this);
997
+ let linkedListEntry = _nullishCoalesce(_optionalChain([this, 'access', _79 => _79.state, 'access', _80 => _80.index, 'optionalAccess', _81 => _81.get, 'call', _82 => _82(0)]), () => ( this.state.cursor));
998
+ while (_optionalChain([linkedListEntry, 'optionalAccess', _83 => _83.prev])) linkedListEntry = linkedListEntry.prev;
999
+ let index = 0;
1000
+ while (linkedListEntry) {
1001
+ void callback.call(thisArg, linkedListEntry.value, index, this);
1002
+ linkedListEntry = linkedListEntry.next;
1003
+ index++;
970
1004
  }
971
1005
  }
972
1006
  };