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))
|
.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],
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user