use super::*;
use core::any::type_name;
use std::collections::HashSet;
#[cfg(test)]
mod s {
use super::*;
fn type_of<T>(_: &T) -> &'static str {
type_name::<T>()
}
#[test]
fn s__empty() {
assert_eq!(s!(), "");
assert_eq!(s!(), String::new());
}
#[test]
fn s__str() {
assert_eq!(s!("foo"), "foo");
assert_eq!(s!("foo"), String::from("foo"));
}
#[test]
fn s__string() {
assert_eq!(s!(String::from("foo")), "foo");
assert_eq!(s!(String::from("foo")), String::from("foo"));
}
#[test]
fn s__int() {
assert_eq!(s!(42), 42);
}
#[test]
fn s__types() {
assert_ne!(type_of(&"foo"), type_of(&String::from("foo")));
assert_eq!(type_of(&s!("foo")), type_of(&String::from("foo")));
}
}
#[cfg(test)]
mod variants {
use super::*;
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[repr(u8)]
enum Position {
Zero = 0,
One = 1,
Two = 2,
}
#[test]
#[expect(trivial_casts, reason = "Trivial cast here is needed for the test")]
fn variants__empty() {
assert_eq!(variants![] as Vec<Position>, vec![]);
assert_eq!(variants!() as Vec<Position>, vec![]);
assert_eq!(variants!{} as Vec<Position>, vec![]);
assert_eq!(variants![ Position: ], vec![]);
assert_eq!(variants!( Position: ), vec![]);
assert_eq!(variants!{ Position: }, vec![]);
}
#[test]
fn variants__single() {
assert_eq!(variants![ Position: One ], vec![ Position::One ]);
assert_eq!(variants![ Position: One, ], vec![ Position::One ]);
assert_eq!(variants!( Position: One ), vec![ Position::One ]);
assert_eq!(variants!{ Position: One, }, vec![ Position::One ]);
}
#[test]
fn variants__multiple() {
assert_eq!(variants![ Position: Zero, One ], vec![ Position::Zero, Position::One ]);
assert_eq!(variants![ Position: Zero, One, ], vec![ Position::Zero, Position::One ]);
assert_eq!(variants![ Position: Zero, One, Two ], vec![ Position::Zero, Position::One, Position::Two ]);
assert_eq!(variants!( Position: Zero, One, Two ), vec![ Position::Zero, Position::One, Position::Two ]);
assert_eq!(variants!{ Position: Zero, One, Two }, vec![ Position::Zero, Position::One, Position::Two ]);
}
}
#[cfg(test)]
mod variants_hashset {
use super::*;
#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)]
#[repr(u8)]
enum Position {
Zero = 0,
One = 1,
Two = 2,
}
#[test]
#[expect(trivial_casts, reason = "Trivial cast here is needed for the test")]
fn variants__empty() {
assert_eq!(variants_hashset![] as HashSet<Position>, HashSet::new());
assert_eq!(variants_hashset!() as HashSet<Position>, HashSet::new());
assert_eq!(variants_hashset!{} as HashSet<Position>, HashSet::new());
assert_eq!(variants_hashset![ Position: ], HashSet::new());
assert_eq!(variants_hashset!( Position: ), HashSet::new());
assert_eq!(variants_hashset!{ Position: }, HashSet::new());
}
#[test]
fn variants__single() {
assert_eq!(variants_hashset![ Position: One ], HashSet::from([ Position::One ]));
assert_eq!(variants_hashset![ Position: One, ], HashSet::from([ Position::One ]));
assert_eq!(variants_hashset!( Position: One ), HashSet::from([ Position::One ]));
assert_eq!(variants_hashset!{ Position: One, }, HashSet::from([ Position::One ]));
}
#[test]
fn variants__multiple() {
assert_eq!(variants_hashset![ Position: Zero, One ], HashSet::from([ Position::Zero, Position::One ]));
assert_eq!(variants_hashset![ Position: Zero, One, ], HashSet::from([ Position::Zero, Position::One ]));
assert_eq!(variants_hashset![ Position: Zero, One, Two ], HashSet::from([ Position::Zero, Position::One, Position::Two ]));
assert_eq!(variants_hashset!( Position: Zero, One, Two ), HashSet::from([ Position::Zero, Position::One, Position::Two ]));
assert_eq!(variants_hashset!{ Position: Zero, One, Two }, HashSet::from([ Position::Zero, Position::One, Position::Two ]));
}
}