Skip to content

Commit 300f2cc

Browse files
authored
Merge pull request #25 from adevore/rudyset
Add RudySet, renamespace RudyMap/RudySet
2 parents 999fab7 + f577a39 commit 300f2cc

File tree

4 files changed

+275
-82
lines changed

4 files changed

+275
-82
lines changed

src/lib.rs

+5-6
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@ extern crate nodrop;
66
extern crate num_traits;
77

88
mod util;
9-
pub mod rudymap;
109
mod key;
1110

12-
pub use key::Key;
13-
//mod rudyset;
14-
15-
//pub use rudyset::RudySet;
16-
//pub use rudymap::RudyMap;
11+
pub mod rudymap;
12+
pub mod rudyset;
1713

14+
pub use key::Key;
15+
pub use rudyset::RudySet;
16+
pub use rudymap::RudyMap;

src/rudyset.rs

+270
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,270 @@
1+
use ::Key;
2+
use ::rudymap::RudyMap;
3+
4+
pub struct RudySet<K: Key> {
5+
map: RudyMap<K, ()>
6+
}
7+
8+
impl<K: Key> RudySet<K> {
9+
/// Return an empty RudySet. There are no initial allocations.
10+
///
11+
/// # Examples
12+
///
13+
/// ```
14+
/// use ::rudy::RudySet;
15+
///
16+
/// let mut set = RudySet::<u32>::new();
17+
/// ```
18+
pub fn new() -> RudySet<K> {
19+
RudySet {
20+
map: RudyMap::new()
21+
}
22+
}
23+
24+
/// Insert a value. Returns whether the set currently contains
25+
/// the value.
26+
///
27+
/// # Examples
28+
///
29+
/// ```
30+
/// use ::rudy::RudySet;
31+
///
32+
/// let mut set = RudySet::<u32>::new();
33+
/// assert_eq!(set.insert(4), false);
34+
/// assert_eq!(set.insert(4), true);
35+
/// ```
36+
pub fn insert(&mut self, value: K) -> bool {
37+
self.map.insert(value, ()).is_some()
38+
}
39+
40+
/// Remove a value. Returns whether the set currently contains
41+
/// the value.
42+
///
43+
/// # Examples
44+
///
45+
/// ```
46+
/// use ::rudy::RudySet;
47+
///
48+
/// let mut set = RudySet::<u32>::new();
49+
/// assert_eq!(set.remove(4), false);
50+
/// set.insert(4);
51+
/// assert_eq!(set.remove(4), true);
52+
/// assert_eq!(set.remove(4), false);
53+
/// ```
54+
pub fn remove(&mut self, value: K) -> bool {
55+
self.map.remove(value).is_some()
56+
}
57+
58+
/// Return `true` if the set contains a value.
59+
///
60+
/// # Examples
61+
///
62+
/// ```
63+
/// use ::rudy::RudySet;
64+
///
65+
/// let mut set = RudySet::<u32>::new();
66+
/// assert_eq!(set.contains(4), false);
67+
/// set.insert(4);
68+
/// assert_eq!(set.contains(4), true);
69+
/// ```
70+
pub fn contains(&self, value: K) -> bool {
71+
self.map.contains_key(value)
72+
}
73+
74+
/// Clear the set.
75+
///
76+
/// # Examples
77+
///
78+
/// ```
79+
/// use ::rudy::RudySet;
80+
///
81+
/// let mut set = RudySet::<u32>::new();
82+
/// set.insert(4);
83+
/// assert_eq!(set.contains(4), true);
84+
/// set.clear();
85+
/// assert_eq!(set.contains(4), false);
86+
/// ```
87+
pub fn clear(&mut self) {
88+
self.map = RudyMap::new();
89+
}
90+
91+
/// Returns `true` if the set is empty.
92+
///
93+
/// # Examples
94+
///
95+
/// ```
96+
/// use ::rudy::RudySet;
97+
///
98+
/// let mut set = RudySet::<u32>::new();
99+
/// assert_eq!(set.is_empty(), true);
100+
/// set.insert(4);
101+
/// assert_eq!(set.is_empty(), false);
102+
/// ```
103+
pub fn is_empty(&self) -> bool {
104+
self.map.is_empty()
105+
}
106+
107+
/// Returns the number of elements in the set.
108+
///
109+
/// # Examples
110+
///
111+
/// ```
112+
/// use ::rudy::RudySet;
113+
///
114+
/// let mut set = RudySet::<u32>::new();
115+
/// set.insert(4);
116+
/// assert_eq!(set.len(), 1);
117+
/// ```
118+
pub fn len(&self) -> usize {
119+
self.map.len()
120+
}
121+
122+
/*
123+
pub fn iter(&self) -> Iter<'a, K> {
124+
Iter { iter: self.map.iter() }
125+
}
126+
127+
pub fn iter_mut(&mut self) -> IterMut<'a, K> {
128+
IterMut { iter: self.map.iter() }
129+
}
130+
*/
131+
}
132+
133+
/*
134+
struct Iter<'a, K> {
135+
iter: rudymap::Iter<'a, K, ()>
136+
}
137+
138+
impl<'a, K: Key> Iterator<K> for Iter<'a, K> {
139+
#[inline]
140+
fn next(&mut self) -> Option<K> {
141+
self.iter.next().map(|(k, _)| k)
142+
}
143+
}
144+
145+
struct IterMut<'a, K> {
146+
iter: rudymap::IterMut<'a, K, ()>
147+
}
148+
149+
impl<'a, K: Key> Iterator<K> for IterMut<'a, K> {
150+
#[inline]
151+
fn next(&mut self) -> Option<K> {
152+
self.iter.next().map(|(k, _)| k)
153+
}
154+
}
155+
156+
impl<K: Key + PartialEq> PartialEq for RudySet<K> {
157+
fn eq(&self, other: &RudySet<K>) -> bool {
158+
if self.len() != other.len() {
159+
return false;
160+
}
161+
self.iter().zip(other.iter())
162+
.all(|(a, b)| a == b)
163+
}
164+
}
165+
166+
impl<K: Key + Eq> Eq for RudySet<K> {}
167+
168+
*/
169+
170+
#[cfg(test)]
171+
mod test {
172+
use super::*;
173+
174+
#[test]
175+
fn test_insert_empty() {
176+
let mut set = RudySet::<usize>::new();
177+
assert_eq!(set.insert(4usize), false);
178+
}
179+
180+
#[test]
181+
fn test_insert_exists() {
182+
let mut set = RudySet::<usize>::new();
183+
set.insert(4usize);
184+
assert_eq!(set.insert(4usize), true);
185+
}
186+
187+
#[test]
188+
fn test_remove_empty() {
189+
let mut set = RudySet::<usize>::new();
190+
assert_eq!(set.remove(4usize), false);
191+
}
192+
193+
#[test]
194+
fn test_remove_exists() {
195+
let mut set = RudySet::<usize>::new();
196+
set.insert(4usize);
197+
assert_eq!(set.remove(4usize), true);
198+
}
199+
200+
#[test]
201+
fn test_insert_contains_1() {
202+
let mut set = RudySet::<usize>::new();
203+
set.insert(4usize);
204+
assert_eq!(set.contains(4), true);
205+
assert_eq!(set.contains(10), false);
206+
}
207+
208+
#[test]
209+
fn test_insert_contains_2() {
210+
let mut set = RudySet::<usize>::new();
211+
set.insert(0);
212+
set.insert(1);
213+
assert_eq!(set.contains(0), true);
214+
assert_eq!(set.contains(1), true);
215+
assert_eq!(set.contains(2), false);
216+
}
217+
218+
#[test]
219+
fn test_contains_key() {
220+
let mut set = RudySet::<u32>::new();
221+
assert_eq!(set.contains(0), false);
222+
assert_eq!(set.contains(1), false);
223+
224+
assert_eq!(set.insert(0), false);
225+
assert_eq!(set.contains(0), true);
226+
assert_eq!(set.contains(1), false);
227+
228+
assert_eq!(set.remove(0), true);
229+
assert_eq!(set.contains(0), false);
230+
assert_eq!(set.contains(1), false);
231+
}
232+
233+
#[test]
234+
fn test_len() {
235+
let mut set = RudySet::<u32>::new();
236+
assert_eq!(set.len(), 0);
237+
assert_eq!(set.is_empty(), true);
238+
239+
assert_eq!(set.insert(0), false);
240+
assert_eq!(set.len(), 1);
241+
assert_eq!(set.is_empty(), false);
242+
243+
assert_eq!(set.insert(1), false);
244+
assert_eq!(set.len(), 2);
245+
assert_eq!(set.is_empty(), false);
246+
247+
assert_eq!(set.insert(0), true);
248+
assert_eq!(set.len(), 2);
249+
assert_eq!(set.is_empty(), false);
250+
251+
assert_eq!(set.remove(0), true);
252+
assert_eq!(set.len(), 1);
253+
assert_eq!(set.is_empty(), false);
254+
255+
assert_eq!(set.remove(1), true);
256+
assert_eq!(set.len(), 0);
257+
assert_eq!(set.is_empty(), true);
258+
}
259+
260+
#[test]
261+
fn test_clear() {
262+
let mut set = RudySet::<u32>::new();
263+
assert_eq!(set.insert(0), false);
264+
assert_eq!(set.len(), 1);
265+
266+
set.clear();
267+
assert_eq!(set.len(), 0);
268+
assert_eq!(set.is_empty(), true);
269+
}
270+
}

src/rudyset/mod.rs

Whitespace-only changes.

src/rudyset/rudyset.rs

-76
This file was deleted.

0 commit comments

Comments
 (0)