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:
Charles Hall 2024-11-27 20:13:00 -08:00 committed by strawberry
parent 9c9b1f7e93
commit 3a2ee354fc

View File

@ -1378,4 +1378,109 @@ mod tests {
.map(|ev| (ev.event_id.clone(), ev)) .map(|ev| (ev.event_id.clone(), ev))
.collect() .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],
],
);
}
} }