Skip to content

Commit 935c88c

Browse files
committed
Implement PartialOrd for Bitv and BitvSet
1 parent 220f8f6 commit 935c88c

File tree

1 file changed

+40
-1
lines changed

1 file changed

+40
-1
lines changed

src/libcollections/bitv.rs

+40-1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ use core::cmp;
6767
use core::default::Default;
6868
use core::fmt;
6969
use core::iter::Take;
70+
use core::iter;
7071
use core::ops::Index;
7172
use core::slice;
7273
use core::uint;
@@ -830,6 +831,13 @@ impl Clone for Bitv {
830831
}
831832
}
832833

834+
impl PartialOrd for Bitv {
835+
#[inline]
836+
fn partial_cmp(&self, other: &Bitv) -> Option<Ordering> {
837+
iter::order::partial_cmp(self.iter(), other.iter())
838+
}
839+
}
840+
833841
impl fmt::Show for Bitv {
834842
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
835843
for bit in self.iter() {
@@ -955,7 +963,7 @@ impl<'a> RandomAccessIterator<bool> for Bits<'a> {
955963
/// assert!(bv.eq_vec([true, true, false, true,
956964
/// false, false, false, false]));
957965
/// ```
958-
#[deriving(Clone, PartialEq, Eq)]
966+
#[deriving(Clone, PartialEq, Eq, PartialOrd)]
959967
pub struct BitvSet(Bitv);
960968

961969
impl Default for BitvSet {
@@ -2189,6 +2197,37 @@ mod tests {
21892197
assert_eq!(a.capacity(), uint::BITS);
21902198
}
21912199

2200+
#[test]
2201+
fn test_bitv_lt() {
2202+
let mut a = Bitv::with_capacity(5u, false);
2203+
let mut b = Bitv::with_capacity(5u, false);
2204+
2205+
assert!(!(a < b) && !(b < a));
2206+
b.set(2, true);
2207+
assert!(a < b);
2208+
a.set(3, true);
2209+
assert!(a < b);
2210+
a.set(2, true);
2211+
assert!(!(a < b) && b < a);
2212+
b.set(0, true);
2213+
assert!(a < b);
2214+
}
2215+
2216+
#[test]
2217+
fn test_ord() {
2218+
let mut a = Bitv::with_capacity(5u, false);
2219+
let mut b = Bitv::with_capacity(5u, false);
2220+
2221+
assert!(a <= b && a >= b);
2222+
a.set(1, true);
2223+
assert!(a > b && a >= b);
2224+
assert!(b < a && b <= a);
2225+
b.set(1, true);
2226+
b.set(2, true);
2227+
assert!(b > a && b >= a);
2228+
assert!(a < b && a <= b);
2229+
}
2230+
21922231
#[test]
21932232
fn test_bitv_clone() {
21942233
let mut a = BitvSet::new();

0 commit comments

Comments
 (0)