use std::hash::Hash;
use super::searching::hash_tables::separate_chaining::SeparateChainingHashST;
pub trait Set<K> {
fn new() -> Self;
fn add(&mut self, key: K);
fn remove(&mut self, key: &K);
fn size(&self) -> usize;
}
pub type HashSet<K> = SeparateChainingHashST<K,()>;
impl<K: Hash + PartialEq> Set<K> for HashSet<K> {
fn new() -> Self {
Self::new()
}
fn add(&mut self, key: K) {
self.put(key, ());
}
fn remove(&mut self, key: &K) {
self.delete(key);
}
fn size(&self) -> usize {
self.size()
}
}
#[test]
fn test_hash_set() {
let mut s = HashSet::new();
assert_eq!(s.size(), 0);
s.add(100);
s.add(100);
s.add(200);
assert_eq!(s.size(), 2);
s.remove(&100);
assert_eq!(s.size(), 1);
}