use pi_async_fs::{FileAccessMode, FileFlushMode};
use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
#[test]
fn test_file_access_mode_value_semantics_cover_every_role() {
let modes = [
FileAccessMode::Read,
FileAccessMode::Append,
FileAccessMode::Overwrite,
FileAccessMode::ReadMmap,
FileAccessMode::ReadWriteMmap,
FileAccessMode::Truncate,
];
let displays = [
"read",
"append",
"overwrite",
"read-mmap",
"read-write-mmap",
"truncate",
];
let debugs = [
"Read",
"Append",
"Overwrite",
"ReadMmap",
"ReadWriteMmap",
"Truncate",
];
for ((mode, display), debug) in modes.iter().zip(displays).zip(debugs) {
assert_eq!(mode.to_string(), display);
assert_eq!(format!("{mode:?}"), debug);
assert_eq!(mode, mode);
let mut first_hasher = DefaultHasher::new();
mode.hash(&mut first_hasher);
let mut second_hasher = DefaultHasher::new();
mode.hash(&mut second_hasher);
assert_eq!(first_hasher.finish(), second_hasher.finish());
}
for adjacent in modes.windows(2) {
assert!(adjacent[0] < adjacent[1]);
}
}
#[test]
fn test_file_flush_mode_value_semantics_follow_guarantee_strength() {
let modes = [FileFlushMode::Data, FileFlushMode::DataAndMetadata];
let displays = ["data", "data-and-metadata"];
let debugs = ["Data", "DataAndMetadata"];
for ((mode, display), debug) in modes.iter().zip(displays).zip(debugs) {
assert_eq!(mode.to_string(), display);
assert_eq!(format!("{mode:?}"), debug);
assert_eq!(mode, mode);
let mut first_hasher = DefaultHasher::new();
mode.hash(&mut first_hasher);
let mut second_hasher = DefaultHasher::new();
mode.hash(&mut second_hasher);
assert_eq!(first_hasher.finish(), second_hasher.finish());
}
assert!(modes[0] < modes[1]);
}