stateres: add tests for separate fn
This function has terrible perf so I want to try improving it, but I need some examples to test against to make sure I don't break anything.
This commit is contained in:
parent
9c9b1f7e93
commit
3a2ee354fc
@ -1378,4 +1378,109 @@ mod tests {
|
||||
.map(|ev| (ev.event_id.clone(), ev))
|
||||
.collect()
|
||||
}
|
||||
|
||||
macro_rules! state_set {
|
||||
($($kind:expr => $key:expr => $id:expr),* $(,)?) => {{
|
||||
#[allow(unused_mut)]
|
||||
let mut x = StateMap::new();
|
||||
$(
|
||||
x.insert(($kind, $key.to_owned()), $id);
|
||||
)*
|
||||
x
|
||||
}};
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn separate_unique_conflicted() {
|
||||
let (unconflicted, conflicted) = super::separate(
|
||||
[
|
||||
state_set![StateEventType::RoomMember => "@a:hs1" => 0],
|
||||
state_set![StateEventType::RoomMember => "@b:hs1" => 1],
|
||||
state_set![StateEventType::RoomMember => "@c:hs1" => 2],
|
||||
]
|
||||
.iter(),
|
||||
);
|
||||
|
||||
assert_eq!(unconflicted, StateMap::new());
|
||||
assert_eq!(
|
||||
conflicted,
|
||||
state_set![
|
||||
StateEventType::RoomMember => "@a:hs1" => vec![0],
|
||||
StateEventType::RoomMember => "@b:hs1" => vec![1],
|
||||
StateEventType::RoomMember => "@c:hs1" => vec![2],
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn separate_conflicted() {
|
||||
let (unconflicted, conflicted) = super::separate(
|
||||
[
|
||||
state_set![StateEventType::RoomMember => "@a:hs1" => 0],
|
||||
state_set![StateEventType::RoomMember => "@a:hs1" => 1],
|
||||
state_set![StateEventType::RoomMember => "@a:hs1" => 2],
|
||||
]
|
||||
.iter(),
|
||||
);
|
||||
|
||||
assert_eq!(unconflicted, StateMap::new());
|
||||
assert_eq!(
|
||||
conflicted,
|
||||
state_set![
|
||||
StateEventType::RoomMember => "@a:hs1" => vec![0, 1, 2],
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn separate_unconflicted() {
|
||||
let (unconflicted, conflicted) = super::separate(
|
||||
[
|
||||
state_set![StateEventType::RoomMember => "@a:hs1" => 0],
|
||||
state_set![StateEventType::RoomMember => "@a:hs1" => 0],
|
||||
state_set![StateEventType::RoomMember => "@a:hs1" => 0],
|
||||
]
|
||||
.iter(),
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
unconflicted,
|
||||
state_set![
|
||||
StateEventType::RoomMember => "@a:hs1" => 0,
|
||||
],
|
||||
);
|
||||
assert_eq!(conflicted, StateMap::new());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn separate_mixed() {
|
||||
let (unconflicted, conflicted) = super::separate(
|
||||
[
|
||||
state_set![StateEventType::RoomMember => "@a:hs1" => 0],
|
||||
state_set![
|
||||
StateEventType::RoomMember => "@a:hs1" => 0,
|
||||
StateEventType::RoomMember => "@b:hs1" => 1,
|
||||
],
|
||||
state_set![
|
||||
StateEventType::RoomMember => "@a:hs1" => 0,
|
||||
StateEventType::RoomMember => "@c:hs1" => 2,
|
||||
],
|
||||
]
|
||||
.iter(),
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
unconflicted,
|
||||
state_set![
|
||||
StateEventType::RoomMember => "@a:hs1" => 0,
|
||||
],
|
||||
);
|
||||
assert_eq!(
|
||||
conflicted,
|
||||
state_set![
|
||||
StateEventType::RoomMember => "@b:hs1" => vec![1],
|
||||
StateEventType::RoomMember => "@c:hs1" => vec![2],
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user