| Index: chrome/browser/safe_browsing/prefix_set_unittest.cc
|
| diff --git a/chrome/browser/safe_browsing/prefix_set_unittest.cc b/chrome/browser/safe_browsing/prefix_set_unittest.cc
|
| index 154711720350ba24a7f4bbb8413922ce4f0ad91f..2dbdd4d75f0b2c9c75ca603be0ddfb6d32a8da1d 100644
|
| --- a/chrome/browser/safe_browsing/prefix_set_unittest.cc
|
| +++ b/chrome/browser/safe_browsing/prefix_set_unittest.cc
|
| @@ -164,6 +164,75 @@ TEST_F(PrefixSetTest, Empty) {
|
| }
|
| }
|
|
|
| +// Single-element set should work fine.
|
| +TEST_F(PrefixSetTest, OneElement) {
|
| + const std::vector<SBPrefix> prefixes(100, 0);
|
| + safe_browsing::PrefixSet prefix_set(prefixes);
|
| + EXPECT_FALSE(prefix_set.Exists(-1));
|
| + EXPECT_TRUE(prefix_set.Exists(prefixes[0]));
|
| + EXPECT_FALSE(prefix_set.Exists(1));
|
| +
|
| + // Check that |GetPrefixes()| returns the same set of prefixes as
|
| + // was passed in.
|
| + std::vector<SBPrefix> prefixes_copy;
|
| + prefix_set.GetPrefixes(&prefixes_copy);
|
| + EXPECT_EQ(1U, prefixes_copy.size());
|
| + EXPECT_EQ(prefixes[0], prefixes_copy[0]);
|
| +}
|
| +
|
| +// Edges of the 32-bit integer range.
|
| +TEST_F(PrefixSetTest, IntMinMax) {
|
| + std::vector<SBPrefix> prefixes;
|
| +
|
| + // Using bit patterns rather than portable constants because this
|
| + // really is testing how the entire 32-bit integer range is handled.
|
| + prefixes.push_back(0x00000000);
|
| + prefixes.push_back(0x0000FFFF);
|
| + prefixes.push_back(0x7FFF0000);
|
| + prefixes.push_back(0x7FFFFFFF);
|
| + prefixes.push_back(0x80000000);
|
| + prefixes.push_back(0x8000FFFF);
|
| + prefixes.push_back(0xFFFF0000);
|
| + prefixes.push_back(0xFFFFFFFF);
|
| +
|
| + std::sort(prefixes.begin(), prefixes.end());
|
| + safe_browsing::PrefixSet prefix_set(prefixes);
|
| +
|
| + // Check that |GetPrefixes()| returns the same set of prefixes as
|
| + // was passed in.
|
| + std::vector<SBPrefix> prefixes_copy;
|
| + prefix_set.GetPrefixes(&prefixes_copy);
|
| + ASSERT_EQ(prefixes_copy.size(), prefixes.size());
|
| + EXPECT_TRUE(std::equal(prefixes.begin(), prefixes.end(),
|
| + prefixes_copy.begin()));
|
| +}
|
| +
|
| +// A range with only large deltas.
|
| +TEST_F(PrefixSetTest, AllBig) {
|
| + std::vector<SBPrefix> prefixes;
|
| +
|
| + const SBPrefix kVeryPositive = 1000 * 1000 * 1000;
|
| + const SBPrefix kVeryNegative = -kVeryPositive;
|
| + const unsigned kDelta = 10 * 1000 * 1000;
|
| +
|
| + for (SBPrefix prefix = kVeryNegative;
|
| + prefix < kVeryPositive; prefix += kDelta) {
|
| + prefixes.push_back(prefix);
|
| + }
|
| +
|
| + std::sort(prefixes.begin(), prefixes.end());
|
| + safe_browsing::PrefixSet prefix_set(prefixes);
|
| +
|
| + // Check that |GetPrefixes()| returns the same set of prefixes as
|
| + // was passed in.
|
| + std::vector<SBPrefix> prefixes_copy;
|
| + prefix_set.GetPrefixes(&prefixes_copy);
|
| + prefixes.erase(std::unique(prefixes.begin(), prefixes.end()), prefixes.end());
|
| + EXPECT_EQ(prefixes_copy.size(), prefixes.size());
|
| + EXPECT_TRUE(std::equal(prefixes.begin(), prefixes.end(),
|
| + prefixes_copy.begin()));
|
| +}
|
| +
|
| // Use artificial inputs to test various edge cases in Exists().
|
| // Items before the lowest item aren't present. Items after the
|
| // largest item aren't present. Create a sequence of items with
|
|
|