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

Side by Side Diff: components/rappor/byte_vector_utils_unittest.cc

Issue 49753002: RAPPOR implementation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: RapporMetrics StatsTest Created 6 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/rappor/byte_vector_utils.h"
6
7 #include "base/rand_util.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10
Alexei Svitkine (slow) 2014/01/21 18:14:04 Nit: Remove one blank line.
Steven Holte 2014/01/21 20:25:14 Done.
11 namespace rappor {
12
13 namespace {
14
15 int CountBits(const ByteVector& v) {
16 int bit_count = 0;
17 for(size_t i = 0; i < v.size(); i++) {
Alexei Svitkine (slow) 2014/01/21 18:14:04 Nit: space after for. also after "if" below. Also
Steven Holte 2014/01/21 20:25:14 Done.
18 uint8_t byte = v[i];
19 for (int j = 0; j < 8 ; j++) {
20 if(byte & 1 << j) {
Alexei Svitkine (slow) 2014/01/21 18:14:04 Nit: No {}'s. Also, please but parens around one
Steven Holte 2014/01/21 20:25:14 Done.
21 bit_count++;
22 }
23 }
24 }
25 return bit_count;
26 }
27
28 } // namespace
29
30 TEST(ByteVectorTest, TestOr) {
31 ByteVector lhs(2);
32 lhs[1] = 0x12;
33 ByteVector rhs(2);
34 rhs[1] = 0x03;
35
36 EXPECT_EQ(0x13, (*ByteVectorOr(lhs, &rhs))[1]);
37 }
38
39 TEST(ByteVectorTest, TestMerge) {
40 ByteVector lhs(2);
41 lhs[1] = 0x33;
42 ByteVector rhs(2);
43 rhs[1] = 0x55;
44 ByteVector mask(2);
45 mask[1] = 0x0f;
46
47 EXPECT_EQ(0x35, (*ByteVectorMerge(mask, lhs, &rhs))[1]);
48 }
49
50 TEST(ByteVectorTest, TestGenerator) {
51 ByteVectorGenerator generator(2u);
52 ByteVector random_50 = generator.GetWeightedRandomByteVector(PROBABILITY_50);
53 EXPECT_EQ(random_50.size(), 2u);
54 ByteVector random_75 = generator.GetWeightedRandomByteVector(PROBABILITY_75);
55 EXPECT_EQ(random_75.size(), 2u);
56 }
57
58 TEST(ByteVectorTest, TestHmacGeneratorDeterminism) {
59 HmacByteVectorGenerator generator(2u, "MySecret");
60 ByteVector random_50 = generator.GetWeightedRandomByteVector(PROBABILITY_50);
61 EXPECT_EQ(random_50.size(), 2u);
62 EXPECT_EQ(random_50[0], 0x16);
63 ByteVector random_75 = generator.GetWeightedRandomByteVector(PROBABILITY_75);
64 EXPECT_EQ(random_75.size(), 2u);
65 EXPECT_EQ(random_75[0], 0xef);
66 }
67
68 TEST(ByteVectorTest, TestStatistic50) {
69 ByteVectorGenerator generator(50u);
70 ByteVector random = generator.GetWeightedRandomByteVector(PROBABILITY_50);
71 int bit_count = CountBits(random);
72 // Check bounds on bit counts that are true with 99.999% probability.
73 EXPECT_GT(bit_count, 155); // Binomial(400, .5) CDF(155) ~= 0.000004
74 EXPECT_LE(bit_count, 244); // Binomial(400, .5) CDF(244) ~= 0.999996
75 }
76
77 TEST(ByteVectorTest, TestStatistic75) {
78 ByteVectorGenerator generator(50u);
79 ByteVector random = generator.GetWeightedRandomByteVector(PROBABILITY_75);
80 int bit_count = CountBits(random);
81 // Check bounds on bit counts that are true with 99.999% probability.
82 EXPECT_GT(bit_count, 259); // Binomial(400, .75) CDF(259) ~= 0.000003
83 EXPECT_LE(bit_count, 337); // Binomial(400, .75) CDF(337) ~= 0.999997
84 }
85
86 TEST(ByteVectorTest, TestHmacStatistic50) {
87 HmacByteVectorGenerator generator(50u, base::RandBytesAsString(128));
88 ByteVector random = generator.GetWeightedRandomByteVector(PROBABILITY_50);
89 int bit_count = CountBits(random);
90 // Check bounds on bit counts that are true with 99.999% probability.
91 EXPECT_GT(bit_count, 155); // Binomial(400, .5) CDF(155) ~= 0.000004
92 EXPECT_LE(bit_count, 244); // Binomial(400, .5) CDF(244) ~= 0.999996
93 }
94
95 TEST(ByteVectorTest, TestHmacStatistic75) {
96 HmacByteVectorGenerator generator(50u, base::RandBytesAsString(128));
97 ByteVector random = generator.GetWeightedRandomByteVector(PROBABILITY_75);
98 int bit_count = CountBits(random);
99 // Check bounds on bit counts that are true with 99.999% probability.
100 EXPECT_GT(bit_count, 259); // Binomial(400, .75) CDF(259) ~= 0.000003
101 EXPECT_LE(bit_count, 337); // Binomial(400, .75) CDF(337) ~= 0.999997
102 }
103
104 } // namespace rappor
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698