Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3359)

Unified Diff: base/metrics/field_trial_unittest.cc

Issue 9117037: Added a Unique ID for a Field Trial containing it's hashed name and the selected group ID. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: BackToDCHECK2 Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/metrics/field_trial.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/metrics/field_trial_unittest.cc
===================================================================
--- base/metrics/field_trial_unittest.cc (revision 118842)
+++ base/metrics/field_trial_unittest.cc (working copy)
@@ -221,6 +221,76 @@
EXPECT_EQ(default_group_name, trial->group_name());
}
+TEST_F(FieldTrialTest, HashName) {
+ // Make sure hashing is stable on all platforms.
+ struct {
+ const char* name;
+ uint32 hash_value;
+ } known_hashes[] = {
+ {"a", 937752454},
+ {"1", 723085877},
+ {"Trial Name", 2713117220},
+ {"Group Name", 3201815843},
+ {"My Favorite Experiment", 3722155194},
+ {"My Awesome Group Name", 4109503236},
+ {"abcdefghijklmonpqrstuvwxyz", 787728696},
+ {"0123456789ABCDEF", 348858318}
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(known_hashes); ++i) {
+ EXPECT_EQ(known_hashes[i].hash_value,
+ FieldTrial::HashName(known_hashes[i].name));
+ }
+}
+
+TEST_F(FieldTrialTest, NameGroupIds) {
+ std::string no_group("No Group");
+ uint32 no_group_id = FieldTrial::HashName(no_group);
+ scoped_refptr<FieldTrial> trial(new FieldTrial(
+ no_group, 10, "Default", next_year_, 12, 31));
+
+ // There is no winner yet, so no NameGroupId should be returned.
+ FieldTrial::NameGroupId name_group_id;
+ EXPECT_FALSE(trial->GetNameGroupId(&name_group_id));
+
+ // Create a single winning group.
+ std::string one_winner("One Winner");
+ uint32 one_winner_id = FieldTrial::HashName(one_winner);
+ trial = new FieldTrial(one_winner, 10, "Default", next_year_, 12, 31);
+ std::string winner("Winner");
+ uint32 winner_group_id = FieldTrial::HashName(winner);
+ trial->AppendGroup(winner, 10);
+ EXPECT_TRUE(trial->GetNameGroupId(&name_group_id));
+ EXPECT_EQ(one_winner_id, name_group_id.name);
+ EXPECT_EQ(winner_group_id, name_group_id.group);
+
+ std::string multi_group("MultiGroup");
+ uint32 multi_group_id = FieldTrial::HashName(multi_group);
+ scoped_refptr<FieldTrial> multi_group_trial =
+ new FieldTrial(multi_group, 9, "Default", next_year_, 12, 31);
+
+ multi_group_trial->AppendGroup("Me", 3);
+ multi_group_trial->AppendGroup("You", 3);
+ multi_group_trial->AppendGroup("Them", 3);
+ EXPECT_TRUE(multi_group_trial->GetNameGroupId(&name_group_id));
+ EXPECT_EQ(multi_group_id, name_group_id.name);
+ uint32 multi_group_winner_id =
+ FieldTrial::HashName(multi_group_trial->group_name());
+ EXPECT_EQ(multi_group_winner_id, name_group_id.group);
+
+ // Now check if the list is built properly...
+ std::vector<FieldTrial::NameGroupId> name_group_ids;
+ FieldTrialList::GetFieldTrialNameGroupIds(&name_group_ids);
+ EXPECT_EQ(2U, name_group_ids.size());
+ for (size_t i = 0; i < name_group_ids.size(); ++i) {
+ // Order is not guaranteed, so check all values.
+ EXPECT_NE(no_group_id, name_group_ids[i].name);
+ EXPECT_TRUE(one_winner_id != name_group_ids[i].name ||
+ winner_group_id == name_group_ids[i].group);
+ EXPECT_TRUE(multi_group_id != name_group_ids[i].name ||
+ multi_group_winner_id == name_group_ids[i].group);
+ }
+}
+
TEST_F(FieldTrialTest, Save) {
std::string save_string;
« no previous file with comments | « base/metrics/field_trial.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698