| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // Test program to convert lists of integers into ranges, and vice versa. | 5 // Test program to convert lists of integers into ranges, and vice versa. |
| 6 | 6 |
| 7 #include "chunk_range.h" | 7 #include "chunk_range.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 // Test formatting chunks into a string representation. | 10 // Test various configurations of chunk numbers. |
| 11 TEST(SafeBrowsingChunkRangeTest, TestRangesToString) { | 11 TEST(SafeBrowsingChunkRangeTest, TestChunksToRangeString) { |
| 12 std::vector<ChunkRange> ranges; | 12 std::vector<int> chunks; |
| 13 ranges.push_back(ChunkRange(1, 10)); | |
| 14 ranges.push_back(ChunkRange(15, 17)); | |
| 15 ranges.push_back(ChunkRange(21, 410)); | |
| 16 ranges.push_back(ChunkRange(991, 1000)); | |
| 17 | |
| 18 std::string range_string; | 13 std::string range_string; |
| 19 RangesToString(ranges, &range_string); | |
| 20 EXPECT_EQ(range_string, "1-10,15-17,21-410,991-1000"); | |
| 21 ranges.clear(); | |
| 22 | |
| 23 ranges.push_back(ChunkRange(4, 4)); | |
| 24 RangesToString(ranges, &range_string); | |
| 25 EXPECT_EQ(range_string, "4"); | |
| 26 | |
| 27 ranges.push_back(ChunkRange(7)); | |
| 28 ranges.push_back(ChunkRange(9)); | |
| 29 RangesToString(ranges, &range_string); | |
| 30 EXPECT_EQ(range_string, "4,7,9"); | |
| 31 | |
| 32 ranges.push_back(ChunkRange(42, 99)); | |
| 33 RangesToString(ranges, &range_string); | |
| 34 EXPECT_EQ(range_string, "4,7,9,42-99"); | |
| 35 } | |
| 36 | |
| 37 | |
| 38 // Test various configurations of chunk numbers. | |
| 39 TEST(SafeBrowsingChunkRangeTest, TestChunksToRanges) { | |
| 40 std::vector<int> chunks; | |
| 41 std::vector<ChunkRange> ranges; | |
| 42 | 14 |
| 43 // Test one chunk range and one single value. | 15 // Test one chunk range and one single value. |
| 44 chunks.push_back(1); | 16 chunks.push_back(1); |
| 45 chunks.push_back(2); | 17 chunks.push_back(2); |
| 46 chunks.push_back(3); | 18 chunks.push_back(3); |
| 47 chunks.push_back(4); | 19 chunks.push_back(4); |
| 48 chunks.push_back(7); | 20 chunks.push_back(7); |
| 49 ChunksToRanges(chunks, &ranges); | 21 ChunksToRangeString(chunks, &range_string); |
| 50 EXPECT_EQ(ranges.size(), static_cast<size_t>(2)); | 22 EXPECT_EQ(range_string, std::string("1-4,7")); |
| 51 EXPECT_EQ(ranges[0].start(), 1); | |
| 52 EXPECT_EQ(ranges[0].stop(), 4); | |
| 53 EXPECT_EQ(ranges[1].start(), 7); | |
| 54 EXPECT_EQ(ranges[1].stop(), 7); | |
| 55 | 23 |
| 56 chunks.clear(); | 24 chunks.clear(); |
| 57 ranges.clear(); | 25 range_string.clear(); |
| 58 | 26 |
| 59 // Test all chunk numbers in one range. | 27 // Test all chunk numbers in one range. |
| 60 chunks.push_back(3); | 28 chunks.push_back(3); |
| 61 chunks.push_back(4); | 29 chunks.push_back(4); |
| 62 chunks.push_back(5); | 30 chunks.push_back(5); |
| 63 chunks.push_back(6); | 31 chunks.push_back(6); |
| 64 chunks.push_back(7); | 32 chunks.push_back(7); |
| 65 chunks.push_back(8); | 33 chunks.push_back(8); |
| 66 chunks.push_back(9); | 34 chunks.push_back(9); |
| 67 chunks.push_back(10); | 35 chunks.push_back(10); |
| 68 ChunksToRanges(chunks, &ranges); | 36 ChunksToRangeString(chunks, &range_string); |
| 69 EXPECT_EQ(ranges.size(), static_cast<size_t>(1)); | 37 EXPECT_EQ(range_string, std::string("3-10")); |
| 70 EXPECT_EQ(ranges[0].start(), 3); | |
| 71 EXPECT_EQ(ranges[0].stop(), 10); | |
| 72 | 38 |
| 73 chunks.clear(); | 39 chunks.clear(); |
| 74 ranges.clear(); | 40 range_string.clear(); |
| 75 | 41 |
| 76 // Test no chunk numbers in contiguous ranges. | 42 // Test no chunk numbers in contiguous ranges. |
| 77 chunks.push_back(3); | 43 chunks.push_back(3); |
| 78 chunks.push_back(5); | 44 chunks.push_back(5); |
| 79 chunks.push_back(7); | 45 chunks.push_back(7); |
| 80 chunks.push_back(9); | 46 chunks.push_back(9); |
| 81 chunks.push_back(11); | 47 chunks.push_back(11); |
| 82 chunks.push_back(13); | 48 chunks.push_back(13); |
| 83 chunks.push_back(15); | 49 chunks.push_back(15); |
| 84 chunks.push_back(17); | 50 chunks.push_back(17); |
| 85 ChunksToRanges(chunks, &ranges); | 51 ChunksToRangeString(chunks, &range_string); |
| 86 EXPECT_EQ(ranges.size(), static_cast<size_t>(8)); | 52 EXPECT_EQ(range_string, std::string("3,5,7,9,11,13,15,17")); |
| 87 | 53 |
| 88 chunks.clear(); | 54 chunks.clear(); |
| 89 ranges.clear(); | 55 range_string.clear(); |
| 90 | 56 |
| 91 // Test a single chunk number. | 57 // Test a single chunk number. |
| 92 chunks.push_back(17); | 58 chunks.push_back(17); |
| 93 ChunksToRanges(chunks, &ranges); | 59 ChunksToRangeString(chunks, &range_string); |
| 94 EXPECT_EQ(ranges.size(), static_cast<size_t>(1)); | 60 EXPECT_EQ(range_string, std::string("17")); |
| 95 EXPECT_EQ(ranges[0].start(), 17); | |
| 96 EXPECT_EQ(ranges[0].stop(), 17); | |
| 97 | 61 |
| 98 chunks.clear(); | 62 chunks.clear(); |
| 99 ranges.clear(); | 63 range_string.clear(); |
| 100 | 64 |
| 101 // Test duplicates. | 65 // Test duplicates. |
| 102 chunks.push_back(1); | 66 chunks.push_back(1); |
| 103 chunks.push_back(2); | 67 chunks.push_back(2); |
| 104 chunks.push_back(2); | 68 chunks.push_back(2); |
| 105 chunks.push_back(2); | 69 chunks.push_back(2); |
| 106 chunks.push_back(3); | 70 chunks.push_back(3); |
| 107 chunks.push_back(7); | 71 chunks.push_back(7); |
| 108 chunks.push_back(7); | 72 chunks.push_back(7); |
| 109 chunks.push_back(7); | 73 chunks.push_back(7); |
| 110 chunks.push_back(7); | 74 chunks.push_back(7); |
| 111 ChunksToRanges(chunks, &ranges); | 75 ChunksToRangeString(chunks, &range_string); |
| 112 EXPECT_EQ(ranges.size(), static_cast<size_t>(2)); | 76 EXPECT_EQ(range_string, std::string("1-3,7")); |
| 113 EXPECT_EQ(ranges[0].start(), 1); | 77 |
| 114 EXPECT_EQ(ranges[0].stop(), 3); | 78 // Test unsorted chunks. |
| 115 EXPECT_EQ(ranges[1].start(), 7); | 79 chunks.push_back(4); |
| 116 EXPECT_EQ(ranges[1].stop(), 7); | 80 chunks.push_back(1); |
| 81 chunks.push_back(7); |
| 82 chunks.push_back(3); |
| 83 chunks.push_back(2); |
| 84 ChunksToRangeString(chunks, &range_string); |
| 85 EXPECT_EQ(range_string, std::string("1-4,7")); |
| 86 |
| 87 chunks.clear(); |
| 88 range_string.clear(); |
| 117 } | 89 } |
| 118 | 90 |
| 119 | |
| 120 TEST(SafeBrowsingChunkRangeTest, TestStringToRanges) { | 91 TEST(SafeBrowsingChunkRangeTest, TestStringToRanges) { |
| 121 std::vector<ChunkRange> ranges; | 92 std::vector<ChunkRange> ranges; |
| 122 | 93 |
| 123 std::string input = "1-100,398,415,1138-2001,2019"; | 94 std::string input = "1-100,398,415,1138-2001,2019"; |
| 124 EXPECT_TRUE(StringToRanges(input, &ranges)); | 95 EXPECT_TRUE(StringToRanges(input, &ranges)); |
| 125 EXPECT_EQ(ranges.size(), static_cast<size_t>(5)); | 96 EXPECT_EQ(ranges.size(), static_cast<size_t>(5)); |
| 126 EXPECT_EQ(ranges[0].start(), 1); | 97 EXPECT_EQ(ranges[0].start(), 1); |
| 127 EXPECT_EQ(ranges[0].stop(), 100); | 98 EXPECT_EQ(ranges[0].stop(), 100); |
| 128 EXPECT_EQ(ranges[1].start(), 398); | 99 EXPECT_EQ(ranges[1].start(), 398); |
| 129 EXPECT_EQ(ranges[1].stop(), 398); | 100 EXPECT_EQ(ranges[1].stop(), 398); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 EXPECT_TRUE(IsChunkInRange(7, ranges)); | 155 EXPECT_TRUE(IsChunkInRange(7, ranges)); |
| 185 EXPECT_TRUE(IsChunkInRange(300, ranges)); | 156 EXPECT_TRUE(IsChunkInRange(300, ranges)); |
| 186 EXPECT_TRUE(IsChunkInRange(555, ranges)); | 157 EXPECT_TRUE(IsChunkInRange(555, ranges)); |
| 187 EXPECT_TRUE(IsChunkInRange(1, ranges)); | 158 EXPECT_TRUE(IsChunkInRange(1, ranges)); |
| 188 EXPECT_TRUE(IsChunkInRange(1000, ranges)); | 159 EXPECT_TRUE(IsChunkInRange(1000, ranges)); |
| 189 | 160 |
| 190 EXPECT_FALSE(IsChunkInRange(11, ranges)); | 161 EXPECT_FALSE(IsChunkInRange(11, ranges)); |
| 191 EXPECT_FALSE(IsChunkInRange(990, ranges)); | 162 EXPECT_FALSE(IsChunkInRange(990, ranges)); |
| 192 EXPECT_FALSE(IsChunkInRange(2000, ranges)); | 163 EXPECT_FALSE(IsChunkInRange(2000, ranges)); |
| 193 } | 164 } |
| OLD | NEW |