mirror of
https://github.com/loro-dev/loro.git
synced 2025-02-06 12:25:03 +00:00
acafc76aff
* feat: new tree state * fix: emit meta event * fix: semantic tree event * fix: diff calc bring_back * chore: clear comments * fix: merge * fix: tree snapshot * fix: filter empty bring back * feat: tree add external diff * fix: imported changes were not mergeable (#147) * fix: imported changes were not mergeable now the small encoding size is supported in example * fix: stupid err in richtext checkout * fix: rle oplog encode err - support pending changes - start counters were wrong * fix: utf16 query err (#151) * fix: tree movable node lamport * fix: merge * perf: bring back * doc: add deep value meta doc * refactor: bring back only when record diff --------- Co-authored-by: Zixuan Chen <remch183@outlook.com>
58 lines
1.5 KiB
Rust
58 lines
1.5 KiB
Rust
use std::time::Instant;
|
|
|
|
use loro_internal::LoroDoc;
|
|
use rand::{rngs::StdRng, Rng};
|
|
|
|
fn checkout() {
|
|
let depth = 300;
|
|
let mut loro = LoroDoc::default();
|
|
let tree = loro.get_tree("tree");
|
|
let mut ids = vec![];
|
|
let mut versions = vec![];
|
|
let id1 = loro.with_txn(|txn| tree.create(txn)).unwrap();
|
|
ids.push(id1);
|
|
versions.push(loro.oplog_frontiers());
|
|
for _ in 1..depth {
|
|
let id = loro
|
|
.with_txn(|txn| tree.create_and_mov(txn, *ids.last().unwrap()))
|
|
.unwrap();
|
|
ids.push(id);
|
|
versions.push(loro.oplog_frontiers());
|
|
}
|
|
let mut rng: StdRng = rand::SeedableRng::seed_from_u64(0);
|
|
|
|
for _ in 0..1000 {
|
|
let i = rng.gen::<usize>() % depth;
|
|
let f = &versions[i];
|
|
loro.checkout(f).unwrap();
|
|
}
|
|
}
|
|
|
|
#[allow(unused)]
|
|
fn mov() {
|
|
let loro = LoroDoc::default();
|
|
let tree = loro.get_tree("tree");
|
|
let mut ids = vec![];
|
|
let size = 10000;
|
|
for _ in 0..size {
|
|
ids.push(loro.with_txn(|txn| tree.create(txn)).unwrap())
|
|
}
|
|
let mut rng: StdRng = rand::SeedableRng::seed_from_u64(0);
|
|
let n = 1000000;
|
|
|
|
let mut txn = loro.txn().unwrap();
|
|
for _ in 0..n {
|
|
let i = rng.gen::<usize>() % size;
|
|
let j = rng.gen::<usize>() % size;
|
|
tree.mov(&mut txn, ids[i], ids[j]).unwrap_or_default();
|
|
}
|
|
drop(txn);
|
|
}
|
|
fn main() {
|
|
let s = Instant::now();
|
|
for _ in 0..30 {
|
|
checkout();
|
|
}
|
|
|
|
println!("{} ms", s.elapsed().as_millis());
|
|
}
|