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()); +}
