]> git.lizzy.rs Git - enumset.git/commitdiff
return value for insert() was inconsistent with std sets
authorEsteban Pavese <esteban.pavese@here.com>
Tue, 3 Mar 2020 11:45:35 +0000 (12:45 +0100)
committerEsteban Pavese <esteban.pavese@here.com>
Tue, 3 Mar 2020 11:45:35 +0000 (12:45 +0100)
enumset/src/lib.rs
enumset/tests/ops.rs

index 3be1cf064e097b471e1d1cdab01b752173c27ae7..66f605f58324768b176230f368b388237e9b5013 100644 (file)
@@ -343,7 +343,7 @@ impl <T : EnumSetType> EnumSet<T> {
 
     /// Adds a value to this set.
     pub fn insert(&mut self, value: T) -> bool {
-        let contains = self.contains(value);
+        let contains = !self.contains(value);
         self.__enumset_underlying = self.__enumset_underlying | Self::mask(value.enum_into_u8());
         contains
     }
index b6cfe2aca69f4bbf94ac2897a4f5007568c69fb0..217ebd43c861513911ad6d5e6094777e64d7fa5d 100644 (file)
@@ -112,6 +112,15 @@ macro_rules! test_enum {
             assert!(set.is_empty());
         }
 
+        #[test]
+        fn already_present_element() {
+            let mut set = EnumSet::new();
+            assert!(set.insert($e::A));
+            assert!(!set.insert($e::A));
+            set.remove($e::A);
+            assert!(set.insert($e::A));
+        }
+
         #[test]
         fn empty_is_empty() {
             assert_eq!(EnumSet::<$e>::empty().len(), 0)