auto merge of #16074 : nham/rust/bitflags_traits, r=alexcrichton
I wanted to add an implementation of `Default` inside the bitflags macro, but `Default` isn't in the prelude, which means anyone who wants to use `bitflags!` needs to import it. This seems not nice, so I've just implemented for `FilePermission` instead.
This commit is contained in:
commit
6f833ee151
@ -113,7 +113,7 @@ macro_rules! bitflags(
|
||||
($(#[$attr:meta])* flags $BitFlags:ident: $T:ty {
|
||||
$($(#[$Flag_attr:meta])* static $Flag:ident = $value:expr),+
|
||||
}) => (
|
||||
#[deriving(PartialEq, Eq, Clone)]
|
||||
#[deriving(PartialEq, Eq, Clone, PartialOrd, Ord, Hash)]
|
||||
$(#[$attr])*
|
||||
pub struct $BitFlags {
|
||||
bits: $T,
|
||||
@ -220,6 +220,7 @@ macro_rules! bitflags(
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use hash;
|
||||
use option::{Some, None};
|
||||
use ops::{BitOr, BitAnd, Sub, Not};
|
||||
|
||||
@ -336,4 +337,42 @@ mod tests {
|
||||
assert!((e1 - e2) == FlagA); // set difference
|
||||
assert!(!e2 == FlagA); // set complement
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_lt() {
|
||||
let mut a = Flags::empty();
|
||||
let mut b = Flags::empty();
|
||||
|
||||
assert!(!(a < b) && !(b < a));
|
||||
b = FlagB;
|
||||
assert!(a < b);
|
||||
a = FlagC;
|
||||
assert!(!(a < b) && b < a);
|
||||
b = FlagC | FlagB;
|
||||
assert!(a < b);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_ord() {
|
||||
let mut a = Flags::empty();
|
||||
let mut b = Flags::empty();
|
||||
|
||||
assert!(a <= b && a >= b);
|
||||
a = FlagA;
|
||||
assert!(a > b && a >= b);
|
||||
assert!(b < a && b <= a);
|
||||
b = FlagB;
|
||||
assert!(b > a && b >= a);
|
||||
assert!(a < b && a <= b);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_hash() {
|
||||
let mut x = Flags::empty();
|
||||
let mut y = Flags::empty();
|
||||
assert!(hash::hash(&x) == hash::hash(&y));
|
||||
x = Flags::all();
|
||||
y = FlagABC;
|
||||
assert!(hash::hash(&x) == hash::hash(&y));
|
||||
}
|
||||
}
|
||||
|
@ -223,6 +223,7 @@ responding to errors that may occur while attempting to read the numbers.
|
||||
|
||||
use char::Char;
|
||||
use collections::Collection;
|
||||
use default::Default;
|
||||
use fmt;
|
||||
use int;
|
||||
use iter::Iterator;
|
||||
@ -1795,7 +1796,6 @@ pub struct UnstableFileStat {
|
||||
bitflags!(
|
||||
#[doc="A set of permissions for a file or directory is represented
|
||||
by a set of flags which are or'd together."]
|
||||
#[deriving(Hash)]
|
||||
#[deriving(Show)]
|
||||
flags FilePermission: u32 {
|
||||
static UserRead = 0o400,
|
||||
@ -1830,6 +1830,11 @@ on unix-like systems."]
|
||||
}
|
||||
)
|
||||
|
||||
impl Default for FilePermission {
|
||||
#[inline]
|
||||
fn default() -> FilePermission { FilePermission::empty() }
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::{IoResult, Reader, MemReader, NoProgress, InvalidInput};
|
||||
|
Loading…
x
Reference in New Issue
Block a user