| 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 |