Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "blimp/net/helium/vector_clock.h" | |
| 6 | |
| 7 #include "base/macros.h" | |
| 8 #include "testing/gtest/include/gtest/gtest.h" | |
| 9 | |
| 10 namespace blimp { | |
| 11 namespace { | |
| 12 | |
| 13 class VectorClockComparisonTest | |
| 14 : public ::testing::TestWithParam< | |
| 15 std::tuple<VectorClock, VectorClock, VectorClock::Comparison>> { | |
| 16 public: | |
| 17 VectorClockComparisonTest() {} | |
| 18 ~VectorClockComparisonTest() override {} | |
| 19 }; | |
| 20 | |
| 21 TEST_P(VectorClockComparisonTest, CompareTo) { | |
| 22 auto param = GetParam(); | |
| 23 VectorClock v1 = std::get<0>(param); | |
| 24 VectorClock v2 = std::get<1>(param); | |
| 25 VectorClock::Comparison expected = std::get<2>(param); | |
| 26 EXPECT_EQ(expected, v1.CompareTo(v2)); | |
| 27 } | |
| 28 | |
| 29 INSTANTIATE_TEST_CASE_P( | |
|
Kevin M
2016/09/27 17:31:10
Wow, this is pretty cool. I was unaware of this st
| |
| 30 LessThan, | |
| 31 VectorClockComparisonTest, | |
| 32 ::testing::Values(std::make_tuple(VectorClock(1, 2), | |
| 33 VectorClock(1, 3), | |
| 34 VectorClock::Comparison::LessThan), | |
| 35 std::make_tuple(VectorClock(1, 2), | |
| 36 VectorClock(2, 2), | |
| 37 VectorClock::Comparison::LessThan))); | |
| 38 | |
| 39 INSTANTIATE_TEST_CASE_P( | |
| 40 GreaterThan, | |
| 41 VectorClockComparisonTest, | |
| 42 ::testing::Values(std::make_tuple(VectorClock(1, 3), | |
| 43 VectorClock(1, 2), | |
| 44 VectorClock::Comparison::GreaterThan), | |
| 45 std::make_tuple(VectorClock(2, 2), | |
| 46 VectorClock(1, 2), | |
| 47 VectorClock::Comparison::GreaterThan))); | |
| 48 | |
| 49 INSTANTIATE_TEST_CASE_P( | |
| 50 Conflicts, | |
| 51 VectorClockComparisonTest, | |
| 52 ::testing::Values(std::make_tuple(VectorClock(1, 2), | |
| 53 VectorClock(0, 1), | |
| 54 VectorClock::Comparison::Conflicts), | |
| 55 std::make_tuple(VectorClock(1, 2), | |
| 56 VectorClock(0, 3), | |
| 57 VectorClock::Comparison::Conflicts), | |
| 58 std::make_tuple(VectorClock(1, 2), | |
| 59 VectorClock(2, 3), | |
| 60 VectorClock::Comparison::Conflicts))); | |
| 61 | |
| 62 INSTANTIATE_TEST_CASE_P( | |
| 63 EqualTo, | |
| 64 VectorClockComparisonTest, | |
| 65 ::testing::Values(std::make_tuple(VectorClock(1, 1), | |
| 66 VectorClock(1, 1), | |
| 67 VectorClock::Comparison::EqualTo), | |
| 68 std::make_tuple(VectorClock(2, 3), | |
| 69 VectorClock(2, 3), | |
| 70 VectorClock::Comparison::EqualTo), | |
| 71 std::make_tuple(VectorClock(3, 2), | |
| 72 VectorClock(3, 2), | |
| 73 VectorClock::Comparison::EqualTo))); | |
| 74 | |
| 75 class VectorClockTest : public testing::Test { | |
| 76 public: | |
| 77 VectorClockTest() {} | |
| 78 ~VectorClockTest() override {} | |
| 79 | |
| 80 private: | |
| 81 DISALLOW_COPY_AND_ASSIGN(VectorClockTest); | |
| 82 }; | |
| 83 | |
| 84 TEST_F(VectorClockTest, IncrementLocal1) { | |
| 85 VectorClock v(0, 0); | |
| 86 v.IncrementLocal(); | |
| 87 EXPECT_EQ(1, v.local_revision()); | |
| 88 EXPECT_EQ(0, v.remote_revision()); | |
| 89 } | |
| 90 | |
| 91 TEST_F(VectorClockTest, IncrementLocal2) { | |
| 92 VectorClock v(4, 5); | |
| 93 v.IncrementLocal(); | |
| 94 EXPECT_EQ(5, v.local_revision()); | |
| 95 EXPECT_EQ(5, v.remote_revision()); | |
| 96 } | |
| 97 | |
| 98 TEST_F(VectorClockTest, MergeWith1) { | |
| 99 VectorClock v1(1, 2); | |
|
Kevin M
2016/09/27 17:31:10
We could cut down on the number of test cases by m
| |
| 100 VectorClock v2(1, 4); | |
| 101 | |
| 102 VectorClock v3 = v1.MergeWith(v2); | |
| 103 EXPECT_EQ(1, v3.local_revision()); | |
| 104 EXPECT_EQ(4, v3.remote_revision()); | |
| 105 } | |
| 106 | |
| 107 TEST_F(VectorClockTest, MergeWith2) { | |
| 108 VectorClock v1(1, 4); | |
| 109 VectorClock v2(1, 2); | |
| 110 | |
| 111 VectorClock v3 = v1.MergeWith(v2); | |
| 112 EXPECT_EQ(1, v3.local_revision()); | |
| 113 EXPECT_EQ(4, v3.remote_revision()); | |
| 114 } | |
| 115 | |
| 116 TEST_F(VectorClockTest, MergeWith3) { | |
| 117 VectorClock v1(1, 4); | |
| 118 VectorClock v2(2, 4); | |
| 119 | |
| 120 VectorClock v3 = v1.MergeWith(v2); | |
| 121 EXPECT_EQ(2, v3.local_revision()); | |
| 122 EXPECT_EQ(4, v3.remote_revision()); | |
| 123 } | |
| 124 | |
| 125 TEST_F(VectorClockTest, MergeWith4) { | |
| 126 VectorClock v1(2, 4); | |
| 127 VectorClock v2(1, 4); | |
| 128 | |
| 129 VectorClock v3 = v1.MergeWith(v2); | |
| 130 EXPECT_EQ(2, v3.local_revision()); | |
| 131 EXPECT_EQ(4, v3.remote_revision()); | |
| 132 } | |
| 133 | |
| 134 TEST_F(VectorClockTest, MergeWith5) { | |
| 135 VectorClock v1(1, 2); | |
| 136 VectorClock v2(3, 4); | |
| 137 | |
| 138 VectorClock v3 = v1.MergeWith(v2); | |
| 139 EXPECT_EQ(3, v3.local_revision()); | |
| 140 EXPECT_EQ(4, v3.remote_revision()); | |
| 141 } | |
| 142 | |
| 143 TEST_F(VectorClockTest, MergeWith6) { | |
| 144 VectorClock v1(3, 4); | |
| 145 VectorClock v2(1, 2); | |
| 146 | |
| 147 VectorClock v3 = v1.MergeWith(v2); | |
| 148 EXPECT_EQ(3, v3.local_revision()); | |
| 149 EXPECT_EQ(4, v3.remote_revision()); | |
| 150 } | |
| 151 | |
| 152 } // namespace | |
| 153 } // namespace blimp | |
| OLD | NEW |