|
9 | 9 | // except according to those terms.
|
10 | 10 |
|
11 | 11 | // FIXME(conventions): implement bounded iterators
|
12 |
| -// FIXME(conventions): implement BitOr, BitAnd, BitXor, and Sub |
13 | 12 | // FIXME(conventions): replace each_reverse by making iter DoubleEnded
|
14 | 13 | // FIXME(conventions): implement iter_mut and into_iter
|
15 | 14 |
|
@@ -463,6 +462,30 @@ impl Extend<uint> for TrieSet {
|
463 | 462 | }
|
464 | 463 | }
|
465 | 464 |
|
| 465 | +impl BitOr<TrieSet, TrieSet> for TrieSet { |
| 466 | + fn bitor(&self, rhs: &TrieSet) -> TrieSet { |
| 467 | + self.union(rhs).collect() |
| 468 | + } |
| 469 | +} |
| 470 | + |
| 471 | +impl BitAnd<TrieSet, TrieSet> for TrieSet { |
| 472 | + fn bitand(&self, rhs: &TrieSet) -> TrieSet { |
| 473 | + self.intersection(rhs).collect() |
| 474 | + } |
| 475 | +} |
| 476 | + |
| 477 | +impl BitXor<TrieSet, TrieSet> for TrieSet { |
| 478 | + fn bitxor(&self, rhs: &TrieSet) -> TrieSet { |
| 479 | + self.symmetric_difference(rhs).collect() |
| 480 | + } |
| 481 | +} |
| 482 | + |
| 483 | +impl Sub<TrieSet, TrieSet> for TrieSet { |
| 484 | + fn sub(&self, rhs: &TrieSet) -> TrieSet { |
| 485 | + self.difference(rhs).collect() |
| 486 | + } |
| 487 | +} |
| 488 | + |
466 | 489 | /// A forward iterator over a set.
|
467 | 490 | pub struct SetItems<'a> {
|
468 | 491 | iter: Entries<'a, ()>
|
@@ -569,6 +592,7 @@ impl<'a> Iterator<uint> for UnionItems<'a> {
|
569 | 592 | mod test {
|
570 | 593 | use std::prelude::*;
|
571 | 594 | use std::uint;
|
| 595 | + use vec::Vec; |
572 | 596 |
|
573 | 597 | use super::TrieSet;
|
574 | 598 |
|
@@ -738,4 +762,44 @@ mod test {
|
738 | 762 | &[1, 5, 9, 13, 19],
|
739 | 763 | &[1, 3, 5, 9, 11, 13, 16, 19, 24]);
|
740 | 764 | }
|
| 765 | + |
| 766 | + #[test] |
| 767 | + fn test_bit_or() { |
| 768 | + let a: TrieSet = vec![1, 2, 3].into_iter().collect(); |
| 769 | + let b: TrieSet = vec![3, 4, 5].into_iter().collect(); |
| 770 | + |
| 771 | + let set: TrieSet = a | b; |
| 772 | + let v: Vec<uint> = set.iter().collect(); |
| 773 | + assert_eq!(v, vec![1u, 2, 3, 4, 5]); |
| 774 | + } |
| 775 | + |
| 776 | + #[test] |
| 777 | + fn test_bit_and() { |
| 778 | + let a: TrieSet = vec![1, 2, 3].into_iter().collect(); |
| 779 | + let b: TrieSet = vec![2, 3, 4].into_iter().collect(); |
| 780 | + |
| 781 | + let set: TrieSet = a & b; |
| 782 | + let v: Vec<uint> = set.iter().collect(); |
| 783 | + assert_eq!(v, vec![2u, 3]); |
| 784 | + } |
| 785 | + |
| 786 | + #[test] |
| 787 | + fn test_bit_xor() { |
| 788 | + let a: TrieSet = vec![1, 2, 3].into_iter().collect(); |
| 789 | + let b: TrieSet = vec![3, 4, 5].into_iter().collect(); |
| 790 | + |
| 791 | + let set: TrieSet = a ^ b; |
| 792 | + let v: Vec<uint> = set.iter().collect(); |
| 793 | + assert_eq!(v, vec![1u, 2, 4, 5]); |
| 794 | + } |
| 795 | + |
| 796 | + #[test] |
| 797 | + fn test_sub() { |
| 798 | + let a: TrieSet = vec![1, 2, 3].into_iter().collect(); |
| 799 | + let b: TrieSet = vec![3, 4, 5].into_iter().collect(); |
| 800 | + |
| 801 | + let set: TrieSet = a - b; |
| 802 | + let v: Vec<uint> = set.iter().collect(); |
| 803 | + assert_eq!(v, vec![1u, 2]); |
| 804 | + } |
741 | 805 | }
|
0 commit comments