You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by mz...@apache.org on 2019/05/01 00:24:35 UTC
[mesos] branch master updated: Added a test to verify the sort
correctness of the random sorter.
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 89c3dd9 Added a test to verify the sort correctness of the random sorter.
89c3dd9 is described below
commit 89c3dd95a421e14044bc91ceb1998ff4ae3883b4
Author: Meng Zhu <mz...@mesosphere.io>
AuthorDate: Sun Apr 7 15:55:42 2019 -0700
Added a test to verify the sort correctness of the random sorter.
Review: https://reviews.apache.org/r/70418
---
src/tests/sorter_tests.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/src/tests/sorter_tests.cpp b/src/tests/sorter_tests.cpp
index c9a0bda..9aee2b4 100644
--- a/src/tests/sorter_tests.cpp
+++ b/src/tests/sorter_tests.cpp
@@ -170,6 +170,59 @@ TEST(RandomSorterTest, HierarchicalProbabilityDistribution)
}
+TEST(RandomSorterTest, ProbabilityDistribution)
+{
+ // Test the behavior of the random sorter by ensuring that the
+ // probability distribution after a number of runs is within
+ // a particular error bound.
+
+ RandomSorter sorter;
+
+ vector<string> clients = {"0", "1", "2", "3", "4"};
+ vector<double> weights = {1.0, 2.0, 3.0, 4.0, 5.0};
+
+ for (size_t i = 0; i < 5; ++i) {
+ sorter.add(clients.at(i));
+ sorter.activate(clients.at(i));
+ sorter.updateWeight(clients.at(i), weights.at(i));
+ }
+
+ // Count of how many times client i returned as the jth client
+ // in the sort result.
+ size_t totalRuns = 1000u;
+ size_t counts[5][5] = {};
+
+ for (size_t run = 0; run < totalRuns; ++run) {
+ vector<string> candidates = sorter.sort();
+ for (size_t i = 0; i < candidates.size(); ++i) {
+ ++counts[std::stoi(candidates.at(i))][i];
+ }
+ }
+
+ // This table was generated by running a weighted shuffle algorithm
+ // for a large number of iterations.
+ double expectedProbabilities[5][5] = {
+ {0.07, 0.08, 0.12, 0.20, 0.54},
+ {0.13, 0.16, 0.20, 0.28, 0.23},
+ {0.20, 0.22, 0.24, 0.22, 0.12},
+ {0.27, 0.26, 0.23, 0.17, 0.07},
+ {0.33, 0.28, 0.21, 0.13, 0.04},
+ };
+
+ double actualProbabilities[5][5];
+
+ for (int i = 0; i < 5; ++i) {
+ for (int j = 0; j < 5; ++j) {
+ actualProbabilities[i][j] = counts[i][j] / (1.0 * totalRuns);
+
+ // Assert that the actual probabilities differ less than
+ // an absolute 5%.
+ ASSERT_NEAR(expectedProbabilities[i][j], actualProbabilities[i][j], 0.05);
+ }
+ }
+}
+
+
template <typename T>
class CommonSorterTest : public ::testing::Test {};