set.rs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. use crate::node::Node;
  2. #[derive(Debug)]
  3. pub struct Set<T: Ord> {
  4. root: Option<Box<Node<T>>>,
  5. }
  6. impl<T: Ord> Default for Set<T> {
  7. fn default() -> Self {
  8. Set { root: None }
  9. }
  10. }
  11. impl<T: Ord> Set<T> {
  12. pub fn new() -> Self {
  13. Default::default()
  14. }
  15. pub fn insert(&mut self, value: T) -> bool {
  16. if let Some(ref mut node) = self.root {
  17. node.insert(value)
  18. } else {
  19. self.root = Some(Box::new(Node::new(value)));
  20. true
  21. }
  22. }
  23. pub fn count(&self) -> i32 {
  24. self.root.as_ref().map_or(0, |n| n.count())
  25. }
  26. pub fn count_lt(&self, value: &T) -> i32 {
  27. self.count() - self.count_ge(value)
  28. }
  29. pub fn count_le(&self, value: &T) -> i32 {
  30. self.root.as_ref().map_or(0, |n| n.count_le(value))
  31. }
  32. pub fn count_ge(&self, value: &T) -> i32 {
  33. self.root.as_ref().map_or(0, |n| n.count_ge(value))
  34. }
  35. pub fn count_gt(&self, value: &T) -> i32 {
  36. self.count() - self.count_le(value)
  37. }
  38. }
  39. mod tests {
  40. #[test]
  41. fn test_count() {
  42. let mut tree = super::Set::new();
  43. for i in 1..11 {
  44. assert!(tree.insert(i));
  45. assert_eq!(tree.count(), i);
  46. }
  47. for i in 1..11 {
  48. assert_eq!(tree.count_lt(&i), i - 1);
  49. assert_eq!(tree.count_le(&i), i);
  50. assert_eq!(tree.count_ge(&i), 11 - i);
  51. assert_eq!(tree.count_gt(&i), 10 - i);
  52. }
  53. }
  54. }