diff options
author | Lars Wirzenius <liw@sequoia-pgp.org> | 2022-04-06 11:03:25 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@sequoia-pgp.org> | 2022-04-06 11:03:25 +0300 |
commit | a8ab93ee575820ebf331d773c331aec75c0c9822 (patch) | |
tree | 7d0820d0a5e1057f07a7937e8c020da0d65d572f | |
parent | 4e6ab59be162fff43e4234eb2c8766154536910b (diff) | |
download | lookup-a8ab93ee575820ebf331d773c331aec75c0c9822.tar.gz |
feat: simple set-like lookup
Sponsored-by: author
-rw-r--r-- | src/main.rs | 78 |
1 files changed, 77 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs index e7a11a9..ebb5c4f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,79 @@ fn main() { - println!("Hello, world!"); + let mut c = Container::default(); + c.insert(42); + println!("{}", c.contains(42)); + c.remove(42); + println!("{}", c.contains(42)); +} + +#[derive(Debug, Default)] +struct Container { + numbers: Vec<i32>, +} + +impl Container { + fn len(&self) -> usize { + self.numbers.len() + } + + fn is_empty(&self) -> bool { + self.numbers.is_empty() + } + + fn contains(&self, n: i32) -> bool { + self.find(n).is_some() + } + + fn insert(&mut self, n: i32) { + self.numbers.push(n); + } + + fn remove(&mut self, n: i32) -> Option<i32> { + if let Some(i) = self.find(n) { + self.numbers.remove(i); + Some(n) + } else { + None + } + } + + fn find(&self, n: i32) -> Option<usize> { + for (i, x) in self.numbers.iter().enumerate() { + if *x == n { + return Some(i); + } + } + None + } +} + +#[cfg(test)] +mod test { + use super::Container; + + #[test] + fn is_empty_initially() { + let c = Container::default(); + assert_eq!(c.len(), 0); + assert!(c.is_empty()); + } + + #[test] + fn inserts() { + let mut c = Container::default(); + assert!(!c.contains(0)); + c.insert(0); + assert_eq!(c.len(), 1); + assert!(!c.is_empty()); + assert!(c.contains(0)); + } + + #[test] + fn removes() { + let mut c = Container::default(); + assert!(!c.contains(0)); + c.insert(0); + c.remove(0); + assert!(c.is_empty()); + } } |