extern crate alloc;
use alloc::string::String;
use alloc::vec::Vec;
use super::super::super::support::dot;
use crate::metis::{Dot, DotFun, DotStore};
#[test]
fn test_iter_and_values_are_ascending_by_dot() {
let mut store: DotFun<String> = DotFun::new();
assert!(store.insert(dot(2, 1), String::from("b")));
assert!(store.insert(dot(1, 3), String::from("a")));
assert!(store.insert(dot(1, 1), String::from("c")));
let via_iter: Vec<(Dot, String)> = store
.iter()
.map(|(entry, value)| (entry, value.clone()))
.collect();
assert_eq!(
via_iter,
[
(dot(1, 1), String::from("c")),
(dot(1, 3), String::from("a")),
(dot(2, 1), String::from("b")),
]
);
let via_into: Vec<Dot> = (&store).into_iter().map(|(entry, _)| entry).collect();
assert_eq!(via_into, [dot(1, 1), dot(1, 3), dot(2, 1)]);
let values: Vec<String> = store.values().cloned().collect();
assert_eq!(
values,
[String::from("c"), String::from("a"), String::from("b")]
);
}
#[test]
fn test_len_and_is_empty_track_the_dots() {
let mut store: DotFun<u8> = DotFun::new();
assert!(store.is_empty());
assert_eq!(store.len(), 0);
assert!(store.insert(dot(1, 1), 7));
assert!(!store.is_empty());
assert_eq!(store.len(), 1);
}
#[test]
fn test_default_is_bottom() {
let store: DotFun<String> = DotFun::default();
assert!(store.is_bottom());
assert!(store.is_empty());
assert_eq!(store, DotFun::new());
assert!(store.dots().next().is_none());
}