mirror of
https://github.com/loro-dev/loro.git
synced 2025-01-22 21:07:43 +00:00
chore: add tabled to y_span
This commit is contained in:
parent
0bcf19038d
commit
aef1947bee
4 changed files with 205 additions and 1 deletions
91
Cargo.lock
generated
91
Cargo.lock
generated
|
@ -38,6 +38,12 @@ dependencies = [
|
||||||
"derive_arbitrary",
|
"derive_arbitrary",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "arrayvec"
|
||||||
|
version = "0.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "arref"
|
name = "arref"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
@ -121,6 +127,12 @@ version = "3.11.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d"
|
checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bytecount"
|
||||||
|
version = "0.6.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "byteorder"
|
name = "byteorder"
|
||||||
version = "1.4.3"
|
version = "1.4.3"
|
||||||
|
@ -371,6 +383,7 @@ dependencies = [
|
||||||
"smartstring",
|
"smartstring",
|
||||||
"static_assertions",
|
"static_assertions",
|
||||||
"string_cache",
|
"string_cache",
|
||||||
|
"tabled",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -526,6 +539,18 @@ dependencies = [
|
||||||
"syn 1.0.100",
|
"syn 1.0.100",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "papergrid"
|
||||||
|
version = "0.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ae9bed2481d5ab6e31056945f4704ca7348a3858148c30725b8946b7a7818498"
|
||||||
|
dependencies = [
|
||||||
|
"bytecount",
|
||||||
|
"fnv",
|
||||||
|
"strip-ansi-escapes",
|
||||||
|
"unicode-width",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking_lot"
|
name = "parking_lot"
|
||||||
version = "0.12.1"
|
version = "0.12.1"
|
||||||
|
@ -913,6 +938,15 @@ dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "strip-ansi-escapes"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "011cbb39cf7c1f62871aea3cc46e5817b0937b49e9447370c93cacbe93a766d8"
|
||||||
|
dependencies = [
|
||||||
|
"vte",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "0.15.44"
|
version = "0.15.44"
|
||||||
|
@ -935,6 +969,30 @@ dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tabled"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0c8a1ea336f84dc7dfae1025b73904551b3c6a42347f4243387e990f94325895"
|
||||||
|
dependencies = [
|
||||||
|
"papergrid",
|
||||||
|
"tabled_derive",
|
||||||
|
"unicode-width",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tabled_derive"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "beca1b4eaceb4f2755df858b88d9b9315b7ccfd1ffd0d7a48a52602301f01a57"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro-error",
|
||||||
|
"proc-macro2 1.0.43",
|
||||||
|
"quote 1.0.21",
|
||||||
|
"syn 1.0.100",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tempfile"
|
name = "tempfile"
|
||||||
version = "3.3.0"
|
version = "3.3.0"
|
||||||
|
@ -990,6 +1048,12 @@ version = "1.0.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
|
checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-width"
|
||||||
|
version = "0.1.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-xid"
|
name = "unicode-xid"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
@ -1002,12 +1066,39 @@ version = "0.7.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
|
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "utf8parse"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "version_check"
|
name = "version_check"
|
||||||
version = "0.9.4"
|
version = "0.9.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "vte"
|
||||||
|
version = "0.10.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983"
|
||||||
|
dependencies = [
|
||||||
|
"arrayvec",
|
||||||
|
"utf8parse",
|
||||||
|
"vte_generate_state_changes",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "vte_generate_state_changes"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2 1.0.43",
|
||||||
|
"quote 1.0.21",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wait-timeout"
|
name = "wait-timeout"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
|
|
|
@ -27,6 +27,7 @@ proptest = "1.0.0"
|
||||||
proptest-derive = "0.3.0"
|
proptest-derive = "0.3.0"
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
static_assertions = "1.1.0"
|
static_assertions = "1.1.0"
|
||||||
|
tabled = "0.9.0"
|
||||||
|
|
||||||
# See https://matklad.github.io/2021/02/27/delete-cargo-integration-tests.html
|
# See https://matklad.github.io/2021/02/27/delete-cargo-integration-tests.html
|
||||||
[lib]
|
[lib]
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
use std::fmt::Display;
|
||||||
|
|
||||||
use crate::{id::Counter, span::IdSpan, ContentType, InsertContentTrait, ID};
|
use crate::{id::Counter, span::IdSpan, ContentType, InsertContentTrait, ID};
|
||||||
use rle::{rle_tree::tree_trait::CumulateTreeTrait, HasLength, Mergable, Sliceable};
|
use rle::{rle_tree::tree_trait::CumulateTreeTrait, HasLength, Mergable, Sliceable};
|
||||||
|
|
||||||
|
@ -9,6 +11,20 @@ pub struct Status {
|
||||||
pub undo_times: usize,
|
pub undo_times: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Display for Status {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
if self.is_activated() {
|
||||||
|
write!(f, "Active",)
|
||||||
|
} else {
|
||||||
|
write!(
|
||||||
|
f,
|
||||||
|
"unapplied: {}, delete_times: {}, undo_times: {}",
|
||||||
|
self.unapplied, self.delete_times, self.undo_times
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Status {
|
impl Status {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
|
@ -155,6 +171,94 @@ impl HasLength for YSpan {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
|
use std::borrow::Cow;
|
||||||
|
|
||||||
|
use tabled::{Style, Table, Tabled};
|
||||||
|
impl Tabled for YSpan {
|
||||||
|
const LENGTH: usize = 7;
|
||||||
|
|
||||||
|
fn fields(&self) -> Vec<std::borrow::Cow<'_, str>> {
|
||||||
|
vec![
|
||||||
|
self.id.to_string().into(),
|
||||||
|
self.len.to_string().into(),
|
||||||
|
self.status.unapplied.to_string().into(),
|
||||||
|
self.status.delete_times.to_string().into(),
|
||||||
|
self.status.undo_times.to_string().into(),
|
||||||
|
self.origin_left
|
||||||
|
.map(|id| id.to_string())
|
||||||
|
.unwrap_or_default()
|
||||||
|
.into(),
|
||||||
|
self.origin_right
|
||||||
|
.map(|id| id.to_string())
|
||||||
|
.unwrap_or_default()
|
||||||
|
.into(),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn headers() -> Vec<Cow<'static, str>> {
|
||||||
|
vec![
|
||||||
|
"id".into(),
|
||||||
|
"len".into(),
|
||||||
|
"future".into(),
|
||||||
|
"del".into(),
|
||||||
|
"undo".into(),
|
||||||
|
"origin\nleft".into(),
|
||||||
|
"origin\nright".into(),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_table() {
|
||||||
|
let y_spans = vec![
|
||||||
|
YSpan {
|
||||||
|
id: ID::new(1, 0),
|
||||||
|
len: 1,
|
||||||
|
status: Status::new(),
|
||||||
|
origin_left: None,
|
||||||
|
origin_right: None,
|
||||||
|
},
|
||||||
|
YSpan {
|
||||||
|
id: ID::new(1, 1),
|
||||||
|
len: 1,
|
||||||
|
status: Status::new(),
|
||||||
|
origin_left: Some(ID {
|
||||||
|
client_id: 0,
|
||||||
|
counter: 2,
|
||||||
|
}),
|
||||||
|
origin_right: None,
|
||||||
|
},
|
||||||
|
YSpan {
|
||||||
|
id: ID::new(1, 2),
|
||||||
|
len: 1,
|
||||||
|
status: Status {
|
||||||
|
unapplied: true,
|
||||||
|
delete_times: 5,
|
||||||
|
undo_times: 3,
|
||||||
|
},
|
||||||
|
origin_left: None,
|
||||||
|
origin_right: None,
|
||||||
|
},
|
||||||
|
YSpan {
|
||||||
|
id: ID::new(1, 3),
|
||||||
|
len: 1,
|
||||||
|
status: Status::new(),
|
||||||
|
origin_left: None,
|
||||||
|
origin_right: None,
|
||||||
|
},
|
||||||
|
YSpan {
|
||||||
|
id: ID::new(1, 4),
|
||||||
|
len: 1,
|
||||||
|
status: Status::new(),
|
||||||
|
origin_left: None,
|
||||||
|
origin_right: None,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
let mut t = Table::new(y_spans);
|
||||||
|
t.with(Style::rounded());
|
||||||
|
println!("{}", &t)
|
||||||
|
}
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
container::{ContainerID, ContainerType},
|
container::{ContainerID, ContainerType},
|
||||||
id::ROOT_ID,
|
id::ROOT_ID,
|
||||||
|
@ -163,7 +267,7 @@ mod test {
|
||||||
};
|
};
|
||||||
use rle::{HasLength, RleVec};
|
use rle::{HasLength, RleVec};
|
||||||
|
|
||||||
use super::YSpan;
|
use super::{Status, YSpan};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_merge() {
|
fn test_merge() {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
use std::fmt::Display;
|
||||||
|
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
pub type ClientID = u64;
|
pub type ClientID = u64;
|
||||||
|
@ -10,6 +12,12 @@ pub struct ID {
|
||||||
pub counter: Counter,
|
pub counter: Counter,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Display for ID {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
write!(f, "{}:{}", self.client_id, self.counter)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl PartialOrd for ID {
|
impl PartialOrd for ID {
|
||||||
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
|
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
|
||||||
match self.client_id.partial_cmp(&other.client_id) {
|
match self.client_id.partial_cmp(&other.client_id) {
|
||||||
|
|
Loading…
Reference in a new issue