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)
{