This is an automated email from the ASF dual-hosted git repository. mzhu pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 75b3637445c26e73f130a1566c4d101cda374b2e Author: Meng Zhu <[email protected]> AuthorDate: Tue Feb 26 16:52:27 2019 -0800 Added test for `ResourceQuantities` arithmetic operations. Added tests for `+=` and `-=` operators. Review: https://reviews.apache.org/r/70063 --- src/tests/resource_quantities_tests.cpp | 97 +++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/src/tests/resource_quantities_tests.cpp b/src/tests/resource_quantities_tests.cpp index 7e9819d..674785c 100644 --- a/src/tests/resource_quantities_tests.cpp +++ b/src/tests/resource_quantities_tests.cpp @@ -148,6 +148,103 @@ TEST(QuantitiesTest, FromScalarResources) } +TEST(QuantitiesTest, Addition) +{ + // Empty quantity: + // "cpus:10" + [ ] = "cpus:10" + ResourceQuantities quantities = + CHECK_NOTERROR(ResourceQuantities::fromString("cpus:10")); + quantities += ResourceQuantities(); + vector<pair<string, double>> expected = {{"cpus", 10}}; + EXPECT_EQ(expected, toVector(quantities)); + + // Same name entries: + // "cpus:10" + "cpus:0.1" = "cpus:10.1" + quantities = CHECK_NOTERROR(ResourceQuantities::fromString("cpus:10")); + quantities += CHECK_NOTERROR(ResourceQuantities::fromString("cpus:0.1")); + expected = {{"cpus", 10.1}}; + EXPECT_EQ(expected, toVector(quantities)); + + // Different name entries, insert at head: + // "cpus:10.1" + "alphas:1" = "alphas:1;cpus:10.1" + quantities = CHECK_NOTERROR(ResourceQuantities::fromString("cpus:10.1")); + quantities += CHECK_NOTERROR(ResourceQuantities::fromString("alphas:1")); + expected = {{"alphas", 1}, {"cpus", 10.1}}; + EXPECT_EQ(expected, toVector(quantities)); + + // Different name entries, insert at tail: + // "cpus:10.1" + "mem:1" = "cpus:10.1;mem:1" + quantities = CHECK_NOTERROR(ResourceQuantities::fromString("cpus:10.1")); + quantities += CHECK_NOTERROR(ResourceQuantities::fromString("mem:1")); + expected = {{"cpus", 10.1}, {"mem", 1}}; + EXPECT_EQ(expected, toVector(quantities)); + + // Mixed: "alphas:1;cpus:10.1" + "cpus:1;mem:100" = + // "alphas:1;cpus:11.1;mem:100" + quantities = + CHECK_NOTERROR(ResourceQuantities::fromString("alphas:1;cpus:10.1")); + quantities += + CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1;mem:100")); + expected = {{"alphas", 1}, {"cpus", 11.1}, {"mem", 100}}; + EXPECT_EQ(expected, toVector(quantities)); +} + +TEST(QuantitiesTest, Subtraction) +{ + // Empty subtrahend: + // [ ] - "cpus:1" = [ ] + ResourceQuantities quantities{}; + quantities -= CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1")); + EXPECT_EQ(0u, quantities.size()); + + // Empty minuend: + // "cpus:1" - [ ] = "cpus:1" + quantities = CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1")); + quantities -= ResourceQuantities(); + vector<pair<string, double>> expected = {{"cpus", 1}}; + EXPECT_EQ(expected, toVector(quantities)); + + // Same name entry, positive result is retained: + // "cpus:1" - "cpus:0.4" = "cpus:0.6" + quantities = CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1")); + quantities -= CHECK_NOTERROR(ResourceQuantities::fromString("cpus:0.4")); + expected = {{"cpus", 0.6}}; + EXPECT_EQ(expected, toVector(quantities)); + + // Same name entry, zero is dropped: + // "cpus:1" - "cpus:1" = [ ] + quantities = CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1")); + quantities -= CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1")); + EXPECT_EQ(0u, quantities.size()); + + // Same name entry, negative entry is dropped: + // "cpus:1" - "cpus:1.4" = [ ] + quantities = CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1")); + quantities -= CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1.4")); + EXPECT_EQ(0u, quantities.size()); + + // Different name entry: + // "cpus:1" - "mem:100" = "cpus:1" + quantities = CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1")); + quantities -= CHECK_NOTERROR(ResourceQuantities::fromString("mem:100")); + expected = {{"cpus", 1}}; + EXPECT_EQ(expected, toVector(quantities)); + + // "cpus:1" - "alphas:1" = "cpus:1" + quantities = CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1")); + quantities -= CHECK_NOTERROR(ResourceQuantities::fromString("alphas:1")); + expected = {{"cpus", 1}}; + EXPECT_EQ(expected, toVector(quantities)); + + // Mixed: "cpus:1;mem:100" - "alphas:1;cpus:0.5" = "cpus:0.5;mem:100" + quantities = CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1;mem:100")); + quantities -= + CHECK_NOTERROR(ResourceQuantities::fromString("alphas:1;cpus:0.5")); + expected = {{"cpus", 0.5}, {"mem", 100}}; + EXPECT_EQ(expected, toVector(quantities)); +} + + } // namespace tests { } // namespace internal { } // namespace mesos {
