| 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "sync/internal_api/public/base/ordinal.h" | 6 #include "sync/internal_api/public/base/ordinal.h" |
| 7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <cctype> | 10 #include <cctype> |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 struct LargeOrdinalTraits { | 31 struct LargeOrdinalTraits { |
| 32 static const uint8 kZeroDigit = 0; | 32 static const uint8 kZeroDigit = 0; |
| 33 static const uint8 kMaxDigit = kuint8max; | 33 static const uint8 kMaxDigit = kuint8max; |
| 34 static const size_t kMinLength = 1; | 34 static const size_t kMinLength = 1; |
| 35 }; | 35 }; |
| 36 | 36 |
| 37 typedef Ordinal<TestOrdinalTraits> TestOrdinal; | 37 typedef Ordinal<TestOrdinalTraits> TestOrdinal; |
| 38 typedef Ordinal<LongOrdinalTraits> LongOrdinal; | 38 typedef Ordinal<LongOrdinalTraits> LongOrdinal; |
| 39 typedef Ordinal<LargeOrdinalTraits> LargeOrdinal; | 39 typedef Ordinal<LargeOrdinalTraits> LargeOrdinal; |
| 40 | 40 |
| 41 COMPILE_ASSERT(TestOrdinal::kZeroDigit == '0', | 41 static_assert(TestOrdinal::kZeroDigit == '0', |
| 42 TestOrdinalHasCorrectZeroDigit); | 42 "incorrect TestOrdinal zero digit"); |
| 43 COMPILE_ASSERT(TestOrdinal::kOneDigit == '1', | 43 static_assert(TestOrdinal::kOneDigit == '1', |
| 44 TestOrdinalHasCorrectOneDigit); | 44 "incorrect TestOrdinal one digit"); |
| 45 COMPILE_ASSERT(TestOrdinal::kMidDigit == '2', | 45 static_assert(TestOrdinal::kMidDigit == '2', |
| 46 TestOrdinalHasCorrectMidDigit); | 46 "incorrect TestOrdinal min digit"); |
| 47 COMPILE_ASSERT(TestOrdinal::kMaxDigit == '3', | 47 static_assert(TestOrdinal::kMaxDigit == '3', |
| 48 TestOrdinalHasCorrectMaxDigit); | 48 "incorrect TestOrdinal max digit"); |
| 49 COMPILE_ASSERT(TestOrdinal::kMidDigitValue == 2, | 49 static_assert(TestOrdinal::kMidDigitValue == 2, |
| 50 TestOrdinalHasCorrectMidDigitValue); | 50 "incorrect TestOrdinal mid digit value"); |
| 51 COMPILE_ASSERT(TestOrdinal::kMaxDigitValue == 3, | 51 static_assert(TestOrdinal::kMaxDigitValue == 3, |
| 52 TestOrdinalHasCorrectMaxDigitValue); | 52 "incorrect TestOrdinal max digit value"); |
| 53 COMPILE_ASSERT(TestOrdinal::kRadix == 4, | 53 static_assert(TestOrdinal::kRadix == 4, |
| 54 TestOrdinalHasCorrectRadix); | 54 "incorrect TestOrdinal radix"); |
| 55 | 55 |
| 56 COMPILE_ASSERT(LongOrdinal::kZeroDigit == '0', | 56 static_assert(LongOrdinal::kZeroDigit == '0', |
| 57 LongOrdinalkZeroDigit_incorrect); | 57 "incorrect LongOrdinal zero digit"); |
| 58 COMPILE_ASSERT(LongOrdinal::kOneDigit == '1', | 58 static_assert(LongOrdinal::kOneDigit == '1', |
| 59 LongOrdinalkOneDigit_incorrect); | 59 "incorrect LongOrdinal one digit"); |
| 60 COMPILE_ASSERT(LongOrdinal::kMidDigit == '5', | 60 static_assert(LongOrdinal::kMidDigit == '5', |
| 61 LongOrdinalkMidDigit_incorrect); | 61 "incorrect LongOrdinal mid digit"); |
| 62 COMPILE_ASSERT(LongOrdinal::kMaxDigit == '9', | 62 static_assert(LongOrdinal::kMaxDigit == '9', |
| 63 LongOrdinalkMaxDigit_incorrect); | 63 "incorrect LongOrdinal max digit"); |
| 64 COMPILE_ASSERT(LongOrdinal::kMidDigitValue == 5, | 64 static_assert(LongOrdinal::kMidDigitValue == 5, |
| 65 LongOrdinalkMidDigitValue_incorrect); | 65 "incorrect LongOrdinal mid digit value"); |
| 66 COMPILE_ASSERT(LongOrdinal::kMaxDigitValue == 9, | 66 static_assert(LongOrdinal::kMaxDigitValue == 9, |
| 67 LongOrdinalkMaxDigitValue_incorrect); | 67 "incorrect LongOrdinal max digit value"); |
| 68 COMPILE_ASSERT(LongOrdinal::kRadix == 10, | 68 static_assert(LongOrdinal::kRadix == 10, |
| 69 LongOrdinalkRadix_incorrect); | 69 "incorrect LongOrdinal radix"); |
| 70 | 70 |
| 71 COMPILE_ASSERT(static_cast<char>(LargeOrdinal::kZeroDigit) == '\x00', | 71 static_assert(static_cast<char>(LargeOrdinal::kZeroDigit) == '\x00', |
| 72 LargeOrdinalkZeroDigit_incorrect); | 72 "incorrect LargeOrdinal zero digit"); |
| 73 COMPILE_ASSERT(static_cast<char>(LargeOrdinal::kOneDigit) == '\x01', | 73 static_assert(static_cast<char>(LargeOrdinal::kOneDigit) == '\x01', |
| 74 LargeOrdinalkOneDigit_incorrect); | 74 "incorrect LargeOrdinal one digit"); |
| 75 COMPILE_ASSERT(static_cast<char>(LargeOrdinal::kMidDigit) == '\x80', | 75 static_assert(static_cast<char>(LargeOrdinal::kMidDigit) == '\x80', |
| 76 LargeOrdinalkMidDigit_incorrect); | 76 "incorrect LargeOrdinal mid digit"); |
| 77 COMPILE_ASSERT(static_cast<char>(LargeOrdinal::kMaxDigit) == '\xff', | 77 static_assert(static_cast<char>(LargeOrdinal::kMaxDigit) == '\xff', |
| 78 LargeOrdinalkMaxDigit_incorrect); | 78 "incorrect LargeOrdinal max digit"); |
| 79 COMPILE_ASSERT(LargeOrdinal::kMidDigitValue == 128, | 79 static_assert(LargeOrdinal::kMidDigitValue == 128, |
| 80 LargeOrdinalkMidDigitValue_incorrect); | 80 "incorrect LargeOrdinal mid digit value"); |
| 81 COMPILE_ASSERT(LargeOrdinal::kMaxDigitValue == 255, | 81 static_assert(LargeOrdinal::kMaxDigitValue == 255, |
| 82 LargeOrdinalkMaxDigitValue_incorrect); | 82 "incorrect LargeOrdinal max digit value"); |
| 83 COMPILE_ASSERT(LargeOrdinal::kRadix == 256, | 83 static_assert(LargeOrdinal::kRadix == 256, |
| 84 LargeOrdinalkRadix_incorrect); | 84 "incorrect LargeOrdinal radix"); |
| 85 | 85 |
| 86 // Create Ordinals that satisfy all but one criterion for validity. | 86 // Create Ordinals that satisfy all but one criterion for validity. |
| 87 // IsValid() should return false for all of them. | 87 // IsValid() should return false for all of them. |
| 88 TEST(Ordinal, Invalid) { | 88 TEST(Ordinal, Invalid) { |
| 89 // Length criterion. | 89 // Length criterion. |
| 90 EXPECT_FALSE(TestOrdinal(std::string()).IsValid()); | 90 EXPECT_FALSE(TestOrdinal(std::string()).IsValid()); |
| 91 EXPECT_FALSE(LongOrdinal("0001").IsValid()); | 91 EXPECT_FALSE(LongOrdinal("0001").IsValid()); |
| 92 | 92 |
| 93 const char kBeforeZero[] = { '0' - 1, '\0' }; | 93 const char kBeforeZero[] = { '0' - 1, '\0' }; |
| 94 const char kAfterNine[] = { '9' + 1, '\0' }; | 94 const char kAfterNine[] = { '9' + 1, '\0' }; |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 std::vector<LongOrdinal> ordinals = sorted_ordinals; | 367 std::vector<LongOrdinal> ordinals = sorted_ordinals; |
| 368 std::random_shuffle(ordinals.begin(), ordinals.end()); | 368 std::random_shuffle(ordinals.begin(), ordinals.end()); |
| 369 std::sort(ordinals.begin(), ordinals.end(), LongOrdinal::LessThanFn()); | 369 std::sort(ordinals.begin(), ordinals.end(), LongOrdinal::LessThanFn()); |
| 370 EXPECT_TRUE(std::equal(ordinals.begin(), ordinals.end(), | 370 EXPECT_TRUE(std::equal(ordinals.begin(), ordinals.end(), |
| 371 sorted_ordinals.begin(), LongOrdinal::EqualsFn())); | 371 sorted_ordinals.begin(), LongOrdinal::EqualsFn())); |
| 372 } | 372 } |
| 373 | 373 |
| 374 } // namespace | 374 } // namespace |
| 375 | 375 |
| 376 } // namespace syncer | 376 } // namespace syncer |
| OLD | NEW |