Fixed a bug in operator -= for Value::Set.

Review: https://reviews.apache.org/r/28142


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/550f5fcd
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/550f5fcd
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/550f5fcd

Branch: refs/heads/master
Commit: 550f5fcd9579edc1546bcd342b170d333b2b8a44
Parents: 5fbc626
Author: Jie Yu <[email protected]>
Authored: Mon Nov 17 14:26:38 2014 -0800
Committer: Jie Yu <[email protected]>
Committed: Wed Nov 19 00:38:43 2014 -0800

----------------------------------------------------------------------
 src/common/values.cpp      |  9 ++-------
 src/tests/values_tests.cpp | 16 ++++++++++++++++
 2 files changed, 18 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/550f5fcd/src/common/values.cpp
----------------------------------------------------------------------
diff --git a/src/common/values.cpp b/src/common/values.cpp
index c524459..597c452 100644
--- a/src/common/values.cpp
+++ b/src/common/values.cpp
@@ -558,19 +558,14 @@ Value::Set& operator += (Value::Set& left, const 
Value::Set& right)
 
 Value::Set& operator -= (Value::Set& left, const Value::Set& right)
 {
-  // For each item in right check if it's in left and add it if not.
+  // For each item in right, remove it if it's in left.
   for (int i = 0; i < right.item_size(); i++) {
-    bool found = false;
     for (int j = 0; j < left.item_size(); j++) {
       if (right.item(i) == left.item(j)) {
-        found = true;
+        left.mutable_item()->DeleteSubrange(j, 1);
         break;
       }
     }
-
-    if (!found) {
-      left.add_item(right.item(i));
-    }
   }
 
   return left;

http://git-wip-us.apache.org/repos/asf/mesos/blob/550f5fcd/src/tests/values_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/values_tests.cpp b/src/tests/values_tests.cpp
index 976ba4d..35d3b3e 100644
--- a/src/tests/values_tests.cpp
+++ b/src/tests/values_tests.cpp
@@ -83,3 +83,19 @@ TEST(ValuesTest, InvalidInput)
   // Test when giving empty string.
   EXPECT_ERROR(parse("  "));
 }
+
+
+TEST(ValuesTest, SetSubtraction)
+{
+  Value::Set set1 = parse("{sda1, sda2, sda3}").get().set();
+  Value::Set set2 = parse("{sda2, sda3}").get().set();
+  Value::Set set3 = parse("{sda4}").get().set();
+
+  set1 -= set2;
+
+  EXPECT_EQ(set1, parse("{sda1}").get().set());
+
+  set3 -= set1;
+
+  EXPECT_EQ(set3, parse("{sda4}").get().set());
+}

Reply via email to