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 |