]> git.lizzy.rs Git - enumset.git/commitdiff
Merge pull request #13 from epavese/insert_return_consistent
authorLymia Aluysia <lymia@lymiahugs.com>
Mon, 30 Mar 2020 13:41:58 +0000 (06:41 -0700)
committerGitHub <noreply@github.com>
Mon, 30 Mar 2020 13:41:58 +0000 (06:41 -0700)
return value for insert() was inconsistent with std sets

enumset/src/lib.rs
enumset/tests/ops.rs

index d97054e3a20a0a78bfd8a088ea8f2efaf2f2efb2..b04aa1cc2a4b2f98ee0de5a8ef1889d42f6af672 100644 (file)
@@ -362,7 +362,7 @@ impl <T : EnumSetType> EnumSet<T> {
     ///
     /// If the set did have this value present, `true` is returned.
     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)