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


The following commit(s) were added to refs/heads/master by this push:
     new c10def9  Added a `sum` method for `ResourceQuantities`.
c10def9 is described below

commit c10def96653fb99e309459476f5bc09c1da686ee
Author: Meng Zhu <[email protected]>
AuthorDate: Mon Mar 25 22:23:47 2019 -0700

    Added a `sum` method for `ResourceQuantities`.
    
    The method returns the summed up `ResourceQuantities` given a
    `hashmap<Key, ResourceQuantities>`.
    
    Review: https://reviews.apache.org/r/70305
---
 src/common/resource_quantities.hpp      | 14 +++++++++++++
 src/tests/resource_quantities_tests.cpp | 37 +++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+)

diff --git a/src/common/resource_quantities.hpp 
b/src/common/resource_quantities.hpp
index 53c5716..db4f5af 100644
--- a/src/common/resource_quantities.hpp
+++ b/src/common/resource_quantities.hpp
@@ -79,6 +79,20 @@ public:
   // be triggered.
   static ResourceQuantities fromScalarResources(const Resources& resources);
 
+  // Returns the summed up `ResourceQuantities` given a
+  // `hashmap<Key, ResourceQuantities>`.
+  template <typename Key>
+  static ResourceQuantities sum(const hashmap<Key, ResourceQuantities>& map)
+  {
+    ResourceQuantities result;
+
+    foreachvalue (const ResourceQuantities& quantities, map) {
+      result += quantities;
+    }
+
+    return result;
+  }
+
   ResourceQuantities();
 
   explicit ResourceQuantities(
diff --git a/src/tests/resource_quantities_tests.cpp 
b/src/tests/resource_quantities_tests.cpp
index b8123c0..0f42479 100644
--- a/src/tests/resource_quantities_tests.cpp
+++ b/src/tests/resource_quantities_tests.cpp
@@ -302,6 +302,43 @@ TEST(QuantitiesTest, Stringify)
 }
 
 
+TEST(QuantitiesTest, Sum)
+{
+  ResourceQuantities empty{};
+  ResourceQuantities cpus1 =
+    CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1"));
+  ResourceQuantities cpus2 =
+    CHECK_NOTERROR(ResourceQuantities::fromString("cpus:2"));
+  ResourceQuantities memory =
+    CHECK_NOTERROR(ResourceQuantities::fromString("memory:1"));
+  ResourceQuantities cpuAndMemory =
+    CHECK_NOTERROR(ResourceQuantities::fromString("cpus:1;memory:1"));
+
+  hashmap<string, ResourceQuantities> quantitiesMap;
+  vector<pair<string, double>> expected;
+  EXPECT_EQ(expected, toVector(ResourceQuantities::sum(quantitiesMap)));
+
+  quantitiesMap["empty"] = empty;
+  EXPECT_EQ(expected, toVector(ResourceQuantities::sum(quantitiesMap)));
+
+  quantitiesMap["cpus1"] = cpus1;
+  expected = {{"cpus", 1}};
+  EXPECT_EQ(expected, toVector(ResourceQuantities::sum(quantitiesMap)));
+
+  quantitiesMap["cpus2"] = cpus2;
+  expected = {{"cpus", 3}};
+  EXPECT_EQ(expected, toVector(ResourceQuantities::sum(quantitiesMap)));
+
+  quantitiesMap["memory"] = memory;
+  expected = {{"cpus", 3}, {"memory", 1}};
+  EXPECT_EQ(expected, toVector(ResourceQuantities::sum(quantitiesMap)));
+
+  quantitiesMap["cpuAndMemory"] = cpuAndMemory;
+  expected = {{"cpus", 4}, {"memory", 2}};
+  EXPECT_EQ(expected, toVector(ResourceQuantities::sum(quantitiesMap)));
+}
+
+
 static vector<pair<string, double>> toVector(
   const ResourceLimits& limits)
 {

Reply via email to