+ #[test]
+ fn test_bit_set_shrink_to_fit_new() {
+ // There was a strange bug where we refused to truncate to 0
+ // and this would end up actually growing the array in a way
+ // that (safely corrupted the state).
+ let mut a = BitSet::new();
+ assert_eq!(a.len(), 0);
+ assert_eq!(a.capacity(), 0);
+ a.shrink_to_fit();
+ assert_eq!(a.len(), 0);
+ assert_eq!(a.capacity(), 0);
+ assert!(!a.contains(1));
+ a.insert(3);
+ assert!(a.contains(3));
+ assert_eq!(a.len(), 1);
+ assert!(a.capacity() > 0);
+ a.shrink_to_fit();
+ assert!(a.contains(3));
+ assert_eq!(a.len(), 1);
+ assert!(a.capacity() > 0);
+ }
+
+ #[test]
+ fn test_bit_set_shrink_to_fit() {
+ let mut a = BitSet::new();
+ assert_eq!(a.len(), 0);
+ assert_eq!(a.capacity(), 0);
+ a.insert(259);
+ a.insert(98);
+ a.insert(3);
+ assert_eq!(a.len(), 3);
+ assert!(a.capacity() > 0);
+ assert!(!a.contains(1));
+ assert!(a.contains(259));
+ assert!(a.contains(98));
+ assert!(a.contains(3));
+
+ a.shrink_to_fit();
+ assert!(!a.contains(1));
+ assert!(a.contains(259));
+ assert!(a.contains(98));
+ assert!(a.contains(3));
+ assert_eq!(a.len(), 3);
+ assert!(a.capacity() > 0);
+
+ let old_cap = a.capacity();
+ assert!(a.remove(259));
+ a.shrink_to_fit();
+ assert!(a.capacity() < old_cap, "{} {}", a.capacity(), old_cap);
+ assert!(!a.contains(1));
+ assert!(!a.contains(259));
+ assert!(a.contains(98));
+ assert!(a.contains(3));
+ assert_eq!(a.len(), 2);
+
+ let old_cap2 = a.capacity();
+ a.clear();
+ assert_eq!(a.capacity(), old_cap2);
+ assert_eq!(a.len(), 0);
+ assert!(!a.contains(1));
+ assert!(!a.contains(259));
+ assert!(!a.contains(98));
+ assert!(!a.contains(3));
+
+ a.insert(512);
+ assert!(a.capacity() > 0);
+ assert_eq!(a.len(), 1);
+ assert!(a.contains(512));
+ assert!(!a.contains(1));
+ assert!(!a.contains(259));
+ assert!(!a.contains(98));
+ assert!(!a.contains(3));
+
+ a.remove(512);
+ a.shrink_to_fit();
+ assert_eq!(a.capacity(), 0);
+ assert_eq!(a.len(), 0);
+ assert!(!a.contains(512));
+ assert!(!a.contains(1));
+ assert!(!a.contains(259));
+ assert!(!a.contains(98));
+ assert!(!a.contains(3));
+ assert!(!a.contains(0));
+ }
+