Index: chrome/browser/metrics/perf/random_selector_unittest.cc |
diff --git a/chrome/browser/metrics/perf/random_selector_unittest.cc b/chrome/browser/metrics/perf/random_selector_unittest.cc |
index d88a03251c25c07bdf3cc3e8a743426ba7a3995a..d6eb0087dcb8ba0a742733625dce19e3f9f1cea6 100644 |
--- a/chrome/browser/metrics/perf/random_selector_unittest.cc |
+++ b/chrome/browser/metrics/perf/random_selector_unittest.cc |
@@ -84,8 +84,9 @@ TEST(RandomSelector, SimpleAccessors) { |
odds.push_back(WeightAndValue(107, "c bar")); |
EXPECT_EQ(111.0L, RandomSelector::SumWeights(odds)); |
RandomSelector random_selector; |
- random_selector.SetOdds(odds); |
+ EXPECT_TRUE(random_selector.SetOdds(odds)); |
EXPECT_EQ(3UL, random_selector.num_values()); |
+ EXPECT_EQ(odds, random_selector.odds()); |
} |
// Ensure RandomSelector is able to generate results from given odds. |
@@ -97,10 +98,47 @@ TEST(RandomSelector, GenerateTest) { |
odds.push_back(WeightAndValue(2, "b --help")); |
odds.push_back(WeightAndValue(3, "c bar")); |
RandomSelectorWithCustomRNG random_selector(kLargeNumber); |
- random_selector.SetOdds(odds); |
+ EXPECT_TRUE(random_selector.SetOdds(odds)); |
// Generate a lot of values. |
std::map<std::string, int> results; |
GenerateResults(kLargeNumber, &random_selector, &results); |
// Ensure the values and odds are related. |
CheckResultsAgainstOdds(odds, results); |
} |
+ |
+TEST(RandomSelector, InvalidWeights) { |
+ using WeightAndValue = RandomSelector::WeightAndValue; |
+ std::vector<RandomSelector::WeightAndValue> good_odds; |
+ good_odds.push_back(WeightAndValue(1, "a 1")); |
+ good_odds.push_back(WeightAndValue(2, "b --help")); |
+ good_odds.push_back(WeightAndValue(3, "c bar")); |
+ RandomSelector random_selector; |
+ EXPECT_TRUE(random_selector.SetOdds(good_odds)); |
+ EXPECT_EQ(good_odds, random_selector.odds()); |
+ |
+ std::vector<RandomSelector::WeightAndValue> bad_odds; |
+ bad_odds.push_back(WeightAndValue(1, "a 1")); |
+ bad_odds.push_back(WeightAndValue(2, "b --help")); |
+ bad_odds.push_back(WeightAndValue(-3.5, "c bar")); |
+ EXPECT_FALSE(random_selector.SetOdds(bad_odds)); |
+ EXPECT_EQ(good_odds, random_selector.odds()); |
+ |
+ bad_odds[2].weight = 0.0; |
+ EXPECT_FALSE(random_selector.SetOdds(bad_odds)); |
+ EXPECT_EQ(good_odds, random_selector.odds()); |
+} |
+ |
+TEST(RandomSelector, EmptyWeights) { |
+ using WeightAndValue = RandomSelector::WeightAndValue; |
+ std::vector<RandomSelector::WeightAndValue> good_odds; |
+ good_odds.push_back(WeightAndValue(1, "a 1")); |
+ good_odds.push_back(WeightAndValue(2, "b --help")); |
+ good_odds.push_back(WeightAndValue(3, "c bar")); |
+ RandomSelector random_selector; |
+ EXPECT_TRUE(random_selector.SetOdds(good_odds)); |
+ EXPECT_EQ(good_odds, random_selector.odds()); |
+ |
+ std::vector<RandomSelector::WeightAndValue> empty_odds; |
+ EXPECT_FALSE(random_selector.SetOdds(empty_odds)); |
+ EXPECT_EQ(good_odds, random_selector.odds()); |
+} |