1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/// Find the minimum of a set of numbers
#[macro_export]
macro_rules! min {
    ($x: expr) => ($x);
    ($x: expr, $($z: expr),+) => (::core::cmp::min($x, min!($($z),*)));
}

/// Returns a HashSet containing the passed values.
#[macro_export]
macro_rules! set {
    ($fst:expr $(, $v:expr)*) => ({
        let mut set = HashSet::with_capacity(count!($fst $(, $v)*));

        set.insert($fst);
        $(set.insert($v);)*

        set
    });
}

/// Counts the number of values passed to it.
#[macro_export]
macro_rules! count {
    () => (0);
    ($fst:expr) => (1);
    ($fst:expr, $snd:expr) => (2);
    ($fst:expr, $snd:expr $(, $v:expr)*) => (1 + count!($snd $(, $v)*));
}