OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "sync/internal_api/public/base/ordinal.h" | 5 #include "components/sync/base/ordinal.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <cctype> | 10 #include <cctype> |
11 #include <cstddef> | 11 #include <cstddef> |
12 #include <string> | 12 #include <string> |
13 #include <vector> | 13 #include <vector> |
14 | 14 |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 19 matching lines...) Expand all Loading... |
35 static const uint8_t kMaxDigit = UINT8_MAX; | 35 static const uint8_t kMaxDigit = UINT8_MAX; |
36 static const size_t kMinLength = 1; | 36 static const size_t kMinLength = 1; |
37 }; | 37 }; |
38 | 38 |
39 typedef Ordinal<TestOrdinalTraits> TestOrdinal; | 39 typedef Ordinal<TestOrdinalTraits> TestOrdinal; |
40 typedef Ordinal<LongOrdinalTraits> LongOrdinal; | 40 typedef Ordinal<LongOrdinalTraits> LongOrdinal; |
41 typedef Ordinal<LargeOrdinalTraits> LargeOrdinal; | 41 typedef Ordinal<LargeOrdinalTraits> LargeOrdinal; |
42 | 42 |
43 static_assert(TestOrdinal::kZeroDigit == '0', | 43 static_assert(TestOrdinal::kZeroDigit == '0', |
44 "incorrect TestOrdinal zero digit"); | 44 "incorrect TestOrdinal zero digit"); |
45 static_assert(TestOrdinal::kOneDigit == '1', | 45 static_assert(TestOrdinal::kOneDigit == '1', "incorrect TestOrdinal one digit"); |
46 "incorrect TestOrdinal one digit"); | 46 static_assert(TestOrdinal::kMidDigit == '2', "incorrect TestOrdinal min digit"); |
47 static_assert(TestOrdinal::kMidDigit == '2', | 47 static_assert(TestOrdinal::kMaxDigit == '3', "incorrect TestOrdinal max digit"); |
48 "incorrect TestOrdinal min digit"); | |
49 static_assert(TestOrdinal::kMaxDigit == '3', | |
50 "incorrect TestOrdinal max digit"); | |
51 static_assert(TestOrdinal::kMidDigitValue == 2, | 48 static_assert(TestOrdinal::kMidDigitValue == 2, |
52 "incorrect TestOrdinal mid digit value"); | 49 "incorrect TestOrdinal mid digit value"); |
53 static_assert(TestOrdinal::kMaxDigitValue == 3, | 50 static_assert(TestOrdinal::kMaxDigitValue == 3, |
54 "incorrect TestOrdinal max digit value"); | 51 "incorrect TestOrdinal max digit value"); |
55 static_assert(TestOrdinal::kRadix == 4, | 52 static_assert(TestOrdinal::kRadix == 4, "incorrect TestOrdinal radix"); |
56 "incorrect TestOrdinal radix"); | |
57 | 53 |
58 static_assert(LongOrdinal::kZeroDigit == '0', | 54 static_assert(LongOrdinal::kZeroDigit == '0', |
59 "incorrect LongOrdinal zero digit"); | 55 "incorrect LongOrdinal zero digit"); |
60 static_assert(LongOrdinal::kOneDigit == '1', | 56 static_assert(LongOrdinal::kOneDigit == '1', "incorrect LongOrdinal one digit"); |
61 "incorrect LongOrdinal one digit"); | 57 static_assert(LongOrdinal::kMidDigit == '5', "incorrect LongOrdinal mid digit"); |
62 static_assert(LongOrdinal::kMidDigit == '5', | 58 static_assert(LongOrdinal::kMaxDigit == '9', "incorrect LongOrdinal max digit"); |
63 "incorrect LongOrdinal mid digit"); | |
64 static_assert(LongOrdinal::kMaxDigit == '9', | |
65 "incorrect LongOrdinal max digit"); | |
66 static_assert(LongOrdinal::kMidDigitValue == 5, | 59 static_assert(LongOrdinal::kMidDigitValue == 5, |
67 "incorrect LongOrdinal mid digit value"); | 60 "incorrect LongOrdinal mid digit value"); |
68 static_assert(LongOrdinal::kMaxDigitValue == 9, | 61 static_assert(LongOrdinal::kMaxDigitValue == 9, |
69 "incorrect LongOrdinal max digit value"); | 62 "incorrect LongOrdinal max digit value"); |
70 static_assert(LongOrdinal::kRadix == 10, | 63 static_assert(LongOrdinal::kRadix == 10, "incorrect LongOrdinal radix"); |
71 "incorrect LongOrdinal radix"); | |
72 | 64 |
73 static_assert(static_cast<char>(LargeOrdinal::kZeroDigit) == '\x00', | 65 static_assert(static_cast<char>(LargeOrdinal::kZeroDigit) == '\x00', |
74 "incorrect LargeOrdinal zero digit"); | 66 "incorrect LargeOrdinal zero digit"); |
75 static_assert(static_cast<char>(LargeOrdinal::kOneDigit) == '\x01', | 67 static_assert(static_cast<char>(LargeOrdinal::kOneDigit) == '\x01', |
76 "incorrect LargeOrdinal one digit"); | 68 "incorrect LargeOrdinal one digit"); |
77 static_assert(static_cast<char>(LargeOrdinal::kMidDigit) == '\x80', | 69 static_assert(static_cast<char>(LargeOrdinal::kMidDigit) == '\x80', |
78 "incorrect LargeOrdinal mid digit"); | 70 "incorrect LargeOrdinal mid digit"); |
79 static_assert(static_cast<char>(LargeOrdinal::kMaxDigit) == '\xff', | 71 static_assert(static_cast<char>(LargeOrdinal::kMaxDigit) == '\xff', |
80 "incorrect LargeOrdinal max digit"); | 72 "incorrect LargeOrdinal max digit"); |
81 static_assert(LargeOrdinal::kMidDigitValue == 128, | 73 static_assert(LargeOrdinal::kMidDigitValue == 128, |
82 "incorrect LargeOrdinal mid digit value"); | 74 "incorrect LargeOrdinal mid digit value"); |
83 static_assert(LargeOrdinal::kMaxDigitValue == 255, | 75 static_assert(LargeOrdinal::kMaxDigitValue == 255, |
84 "incorrect LargeOrdinal max digit value"); | 76 "incorrect LargeOrdinal max digit value"); |
85 static_assert(LargeOrdinal::kRadix == 256, | 77 static_assert(LargeOrdinal::kRadix == 256, "incorrect LargeOrdinal radix"); |
86 "incorrect LargeOrdinal radix"); | |
87 | 78 |
88 // Create Ordinals that satisfy all but one criterion for validity. | 79 // Create Ordinals that satisfy all but one criterion for validity. |
89 // IsValid() should return false for all of them. | 80 // IsValid() should return false for all of them. |
90 TEST(Ordinal, Invalid) { | 81 TEST(Ordinal, Invalid) { |
91 // Length criterion. | 82 // Length criterion. |
92 EXPECT_FALSE(TestOrdinal(std::string()).IsValid()); | 83 EXPECT_FALSE(TestOrdinal(std::string()).IsValid()); |
93 EXPECT_FALSE(LongOrdinal("0001").IsValid()); | 84 EXPECT_FALSE(LongOrdinal("0001").IsValid()); |
94 | 85 |
95 const char kBeforeZero[] = { '0' - 1, '\0' }; | 86 const char kBeforeZero[] = {'0' - 1, '\0'}; |
96 const char kAfterNine[] = { '9' + 1, '\0' }; | 87 const char kAfterNine[] = {'9' + 1, '\0'}; |
97 | 88 |
98 // Character criterion. | 89 // Character criterion. |
99 EXPECT_FALSE(TestOrdinal(kBeforeZero).IsValid()); | 90 EXPECT_FALSE(TestOrdinal(kBeforeZero).IsValid()); |
100 EXPECT_FALSE(TestOrdinal("4").IsValid()); | 91 EXPECT_FALSE(TestOrdinal("4").IsValid()); |
101 EXPECT_FALSE(LongOrdinal(std::string("0000") + kBeforeZero).IsValid()); | 92 EXPECT_FALSE(LongOrdinal(std::string("0000") + kBeforeZero).IsValid()); |
102 EXPECT_FALSE(LongOrdinal(std::string("0000") + kAfterNine).IsValid()); | 93 EXPECT_FALSE(LongOrdinal(std::string("0000") + kAfterNine).IsValid()); |
103 | 94 |
104 // Zero criterion. | 95 // Zero criterion. |
105 EXPECT_FALSE(TestOrdinal("0").IsValid()); | 96 EXPECT_FALSE(TestOrdinal("0").IsValid()); |
106 EXPECT_FALSE(TestOrdinal("00000").IsValid()); | 97 EXPECT_FALSE(TestOrdinal("00000").IsValid()); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 for (size_t i = 0; i < str.length(); ++i) { | 209 for (size_t i = 0; i < str.length(); ++i) { |
219 if (!isprint(str[i])) | 210 if (!isprint(str[i])) |
220 return false; | 211 return false; |
221 } | 212 } |
222 return true; | 213 return true; |
223 } | 214 } |
224 | 215 |
225 // Create some invalid/valid ordinals. ToDebugString() should always | 216 // Create some invalid/valid ordinals. ToDebugString() should always |
226 // return a non-empty printable string. | 217 // return a non-empty printable string. |
227 TEST(OrdinalTest, ToDebugString) { | 218 TEST(OrdinalTest, ToDebugString) { |
228 EXPECT_TRUE( | 219 EXPECT_TRUE(IsNonEmptyPrintableString(TestOrdinal().ToDebugString())); |
229 IsNonEmptyPrintableString(TestOrdinal().ToDebugString())); | |
230 EXPECT_TRUE( | 220 EXPECT_TRUE( |
231 IsNonEmptyPrintableString(TestOrdinal("invalid string").ToDebugString())); | 221 IsNonEmptyPrintableString(TestOrdinal("invalid string").ToDebugString())); |
232 EXPECT_TRUE( | 222 EXPECT_TRUE(IsNonEmptyPrintableString(TestOrdinal("2").ToDebugString())); |
233 IsNonEmptyPrintableString(TestOrdinal("2").ToDebugString())); | 223 EXPECT_TRUE(IsNonEmptyPrintableString(LongOrdinal("12345").ToDebugString())); |
234 EXPECT_TRUE( | |
235 IsNonEmptyPrintableString(LongOrdinal("12345").ToDebugString())); | |
236 EXPECT_TRUE( | 224 EXPECT_TRUE( |
237 IsNonEmptyPrintableString(LargeOrdinal("\1\2\3\4\5").ToDebugString())); | 225 IsNonEmptyPrintableString(LargeOrdinal("\1\2\3\4\5").ToDebugString())); |
238 } | 226 } |
239 | 227 |
240 // Create three Ordinals in order. LessThanFn should return values | 228 // Create three Ordinals in order. LessThanFn should return values |
241 // consistent with that order. | 229 // consistent with that order. |
242 TEST(Ordinal, LessThanFn) { | 230 TEST(Ordinal, LessThanFn) { |
243 const TestOrdinal small_ordinal("1"); | 231 const TestOrdinal small_ordinal("1"); |
244 const TestOrdinal middle_ordinal("2"); | 232 const TestOrdinal middle_ordinal("2"); |
245 const TestOrdinal big_ordinal("3"); | 233 const TestOrdinal big_ordinal("3"); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 std::vector<LongOrdinal> ordinals = sorted_ordinals; | 357 std::vector<LongOrdinal> ordinals = sorted_ordinals; |
370 std::random_shuffle(ordinals.begin(), ordinals.end()); | 358 std::random_shuffle(ordinals.begin(), ordinals.end()); |
371 std::sort(ordinals.begin(), ordinals.end(), LongOrdinal::LessThanFn()); | 359 std::sort(ordinals.begin(), ordinals.end(), LongOrdinal::LessThanFn()); |
372 EXPECT_TRUE(std::equal(ordinals.begin(), ordinals.end(), | 360 EXPECT_TRUE(std::equal(ordinals.begin(), ordinals.end(), |
373 sorted_ordinals.begin(), LongOrdinal::EqualsFn())); | 361 sorted_ordinals.begin(), LongOrdinal::EqualsFn())); |
374 } | 362 } |
375 | 363 |
376 } // namespace | 364 } // namespace |
377 | 365 |
378 } // namespace syncer | 366 } // namespace syncer |
OLD | NEW |