diff options
Diffstat (limited to 'sync/internal_api/public/util/enum_set_unittest.cc')
-rw-r--r-- | sync/internal_api/public/util/enum_set_unittest.cc | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/sync/internal_api/public/util/enum_set_unittest.cc b/sync/internal_api/public/util/enum_set_unittest.cc new file mode 100644 index 0000000..2caa1de --- /dev/null +++ b/sync/internal_api/public/util/enum_set_unittest.cc @@ -0,0 +1,195 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "sync/internal_api/public/util/enum_set.h" + +#include "base/basictypes.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace browser_sync { +namespace { + +enum TestEnum { + TEST_0, + TEST_MIN = TEST_0, + TEST_1, + TEST_2, + TEST_3, + TEST_4, + TEST_MAX = TEST_4, + TEST_5 +}; + +typedef EnumSet<TestEnum, TEST_MIN, TEST_MAX> TestEnumSet; + +class EnumSetTest : public ::testing::Test {}; + +TEST_F(EnumSetTest, ClassConstants) { + TestEnumSet enums; + EXPECT_EQ(TEST_MIN, TestEnumSet::kMinValue); + EXPECT_EQ(TEST_MAX, TestEnumSet::kMaxValue); + EXPECT_EQ(static_cast<size_t>(5), TestEnumSet::kValueCount); +} + +TEST_F(EnumSetTest, DefaultConstructor) { + const TestEnumSet enums; + EXPECT_TRUE(enums.Empty()); + EXPECT_EQ(static_cast<size_t>(0), enums.Size()); + EXPECT_FALSE(enums.Has(TEST_0)); + EXPECT_FALSE(enums.Has(TEST_1)); + EXPECT_FALSE(enums.Has(TEST_2)); + EXPECT_FALSE(enums.Has(TEST_3)); + EXPECT_FALSE(enums.Has(TEST_4)); +} + +TEST_F(EnumSetTest, OneArgConstructor) { + const TestEnumSet enums(TEST_3); + EXPECT_FALSE(enums.Empty()); + EXPECT_EQ(static_cast<size_t>(1), enums.Size()); + EXPECT_FALSE(enums.Has(TEST_0)); + EXPECT_FALSE(enums.Has(TEST_1)); + EXPECT_FALSE(enums.Has(TEST_2)); + EXPECT_TRUE(enums.Has(TEST_3)); + EXPECT_FALSE(enums.Has(TEST_4)); +} + +TEST_F(EnumSetTest, TwoArgConstructor) { + const TestEnumSet enums(TEST_3, TEST_1); + EXPECT_FALSE(enums.Empty()); + EXPECT_EQ(static_cast<size_t>(2), enums.Size()); + EXPECT_FALSE(enums.Has(TEST_0)); + EXPECT_TRUE(enums.Has(TEST_1)); + EXPECT_FALSE(enums.Has(TEST_2)); + EXPECT_TRUE(enums.Has(TEST_3)); + EXPECT_FALSE(enums.Has(TEST_4)); +} + +TEST_F(EnumSetTest, ThreeArgConstructor) { + const TestEnumSet enums(TEST_3, TEST_1, TEST_0); + EXPECT_FALSE(enums.Empty()); + EXPECT_EQ(static_cast<size_t>(3), enums.Size()); + EXPECT_TRUE(enums.Has(TEST_0)); + EXPECT_TRUE(enums.Has(TEST_1)); + EXPECT_FALSE(enums.Has(TEST_2)); + EXPECT_TRUE(enums.Has(TEST_3)); + EXPECT_FALSE(enums.Has(TEST_4)); +} + +TEST_F(EnumSetTest, All) { + const TestEnumSet enums(TestEnumSet::All()); + EXPECT_FALSE(enums.Empty()); + EXPECT_EQ(static_cast<size_t>(5), enums.Size()); + EXPECT_TRUE(enums.Has(TEST_0)); + EXPECT_TRUE(enums.Has(TEST_1)); + EXPECT_TRUE(enums.Has(TEST_2)); + EXPECT_TRUE(enums.Has(TEST_3)); + EXPECT_TRUE(enums.Has(TEST_4)); +} + +TEST_F(EnumSetTest, Put) { + TestEnumSet enums(TEST_3); + enums.Put(TEST_2); + EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_2, TEST_3))); + enums.Put(TEST_4); + EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_2, TEST_3, TEST_4))); +} + +TEST_F(EnumSetTest, PutAll) { + TestEnumSet enums(TEST_3, TEST_4); + enums.PutAll(TestEnumSet(TEST_2, TEST_3)); + EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_2, TEST_3, TEST_4))); +} + +TEST_F(EnumSetTest, RetainAll) { + TestEnumSet enums(TEST_3, TEST_4); + enums.RetainAll(TestEnumSet(TEST_2, TEST_3)); + EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_3))); +} + +TEST_F(EnumSetTest, Remove) { + TestEnumSet enums(TEST_3, TEST_4); + enums.Remove(TEST_0); + enums.Remove(TEST_2); + EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_3, TEST_4))); + enums.Remove(TEST_3); + EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_4))); + enums.Remove(TEST_4); + enums.Remove(TEST_5); + EXPECT_TRUE(enums.Empty()); +} + +TEST_F(EnumSetTest, RemoveAll) { + TestEnumSet enums(TEST_3, TEST_4); + enums.RemoveAll(TestEnumSet(TEST_2, TEST_3)); + EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_4))); +} + +TEST_F(EnumSetTest, Clear) { + TestEnumSet enums(TEST_3, TEST_4); + enums.Clear(); + EXPECT_TRUE(enums.Empty()); +} + +TEST_F(EnumSetTest, Has) { + const TestEnumSet enums(TEST_3, TEST_4); + EXPECT_FALSE(enums.Has(TEST_0)); + EXPECT_FALSE(enums.Has(TEST_1)); + EXPECT_FALSE(enums.Has(TEST_2)); + EXPECT_TRUE(enums.Has(TEST_3)); + EXPECT_TRUE(enums.Has(TEST_4)); + EXPECT_FALSE(enums.Has(TEST_5)); +} + +TEST_F(EnumSetTest, HasAll) { + const TestEnumSet enums1(TEST_3, TEST_4); + const TestEnumSet enums2(TEST_2, TEST_3); + const TestEnumSet enums3 = Union(enums1, enums2); + EXPECT_TRUE(enums1.HasAll(enums1)); + EXPECT_FALSE(enums1.HasAll(enums2)); + EXPECT_FALSE(enums1.HasAll(enums3)); + + EXPECT_FALSE(enums2.HasAll(enums1)); + EXPECT_TRUE(enums2.HasAll(enums2)); + EXPECT_FALSE(enums2.HasAll(enums3)); + + EXPECT_TRUE(enums3.HasAll(enums1)); + EXPECT_TRUE(enums3.HasAll(enums2)); + EXPECT_TRUE(enums3.HasAll(enums3)); +} + +TEST_F(EnumSetTest, Iterators) { + const TestEnumSet enums1(TEST_3, TEST_4); + TestEnumSet enums2; + for (TestEnumSet::Iterator it = enums1.First(); it.Good(); it.Inc()) { + enums2.Put(it.Get()); + } + EXPECT_TRUE(enums1.Equals(enums2)); +} + +TEST_F(EnumSetTest, Union) { + const TestEnumSet enums1(TEST_3, TEST_4); + const TestEnumSet enums2(TEST_2, TEST_3); + const TestEnumSet enums3 = Union(enums1, enums2); + + EXPECT_TRUE(enums3.Equals(TestEnumSet(TEST_2, TEST_3, TEST_4))); +} + +TEST_F(EnumSetTest, Intersection) { + const TestEnumSet enums1(TEST_3, TEST_4); + const TestEnumSet enums2(TEST_2, TEST_3); + const TestEnumSet enums3 = Intersection(enums1, enums2); + + EXPECT_TRUE(enums3.Equals(TestEnumSet(TEST_3))); +} + +TEST_F(EnumSetTest, Difference) { + const TestEnumSet enums1(TEST_3, TEST_4); + const TestEnumSet enums2(TEST_2, TEST_3); + const TestEnumSet enums3 = Difference(enums1, enums2); + + EXPECT_TRUE(enums3.Equals(TestEnumSet(TEST_4))); +} + +} // namespace +} // namespace browser_sync |