#![allow(clippy::bool_assert_comparison)] #![allow(clippy::needless_lifetimes)] #![allow(clippy::zero_prefixed_literal)]
#![warn(clippy::missing_const_for_fn)]
#![warn(clippy::missing_safety_doc)]
#![deny(clippy::semicolon_if_nothing_returned)]
#![deny(clippy::undocumented_unsafe_blocks)]
#![deny(rustdoc::broken_intra_doc_links)]
pub mod generation;
pub mod generation2;
pub mod light;
pub mod map;
pub mod source;
pub(crate) mod utils;
pub mod vmf;
pub mod prelude {
pub use crate::map::solid::*;
pub use crate::map::texture::*;
pub use crate::map::vector::*;
pub(crate) use crate::StrType;
}
macro_rules! dbg2 {
() => {
std::eprintln!("[{}:{}]", std::file!(), std::line!())
};
($val:expr $(,)?) => {
match $val {
tmp => {
std::eprintln!("[{}:{}] {} = {:?}",
std::file!(), std::line!(), std::stringify!($val), &tmp);
tmp
}
}
};
($($val:expr),+ $(,)?) => {
($(std::dbg!($val)),+,)
};
}
pub(crate) type StrType<'a> = std::borrow::Cow<'a, str>;
#[cfg(test)]
mod tests {
use super::*;
use utils::*;
#[test]
fn iter_peek() {
let mut iter = IterWithNext::new([0; 0].into_iter());
assert_eq!(0, iter.len());
assert_eq!(None, iter.next());
let mut iter = IterWithNext::new([0].into_iter());
assert_eq!(1, iter.len());
assert_eq!(Some((0, 0)), iter.next());
assert_eq!(0, iter.len());
assert_eq!(None, iter.next());
let mut iter = IterWithNext::new([0, 1].into_iter());
assert_eq!(2, iter.len());
assert_eq!(Some((0, 1)), iter.next());
assert_eq!(1, iter.len());
assert_eq!(Some((1, 0)), iter.next());
assert_eq!(0, iter.len());
assert_eq!(None, iter.next());
let mut iter = IterWithNext::new([0, 1, 2].into_iter());
assert_eq!(3, iter.len());
assert_eq!(Some((0, 1)), iter.next());
assert_eq!(2, iter.len());
assert_eq!(Some((1, 2)), iter.next());
assert_eq!(1, iter.len());
assert_eq!(Some((2, 0)), iter.next());
assert_eq!(0, iter.len());
assert_eq!(None, iter.next());
let mut iter = IterWithNext::new([0, 1, 2, 3].into_iter());
assert_eq!(4, iter.len());
assert_eq!(Some((0, 1)), iter.next());
assert_eq!(3, iter.len());
assert_eq!(Some((1, 2)), iter.next());
assert_eq!(2, iter.len());
assert_eq!(Some((2, 3)), iter.next());
assert_eq!(1, iter.len());
assert_eq!(Some((3, 0)), iter.next());
assert_eq!(0, iter.len());
assert_eq!(None, iter.next());
let mut iter = IterWithNext::new([0, 1, 2, 3, 4].into_iter());
assert_eq!(5, iter.len());
assert_eq!(Some((0, 1)), iter.next());
assert_eq!(4, iter.len());
assert_eq!(Some((1, 2)), iter.next());
assert_eq!(3, iter.len());
assert_eq!(Some((2, 3)), iter.next());
assert_eq!(2, iter.len());
assert_eq!(Some((3, 4)), iter.next());
assert_eq!(1, iter.len());
assert_eq!(Some((4, 0)), iter.next());
assert_eq!(0, iter.len());
assert_eq!(None, iter.next());
}
}