| // Copyright 2014 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 "base/basictypes.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "ui/events/gesture_detection/bitset_32.h" |
| |
| namespace ui { |
| |
| class BitSet32Test : public testing::Test {}; |
| |
| TEST_F(BitSet32Test, Basic) { |
| BitSet32 bits; |
| |
| // Test the empty set. |
| EXPECT_EQ(0U, bits.count()); |
| EXPECT_TRUE(bits.is_empty()); |
| EXPECT_FALSE(bits.is_full()); |
| EXPECT_FALSE(bits.has_bit(0)); |
| EXPECT_FALSE(bits.has_bit(31)); |
| |
| // Mark the first bit. |
| bits.mark_bit(0); |
| EXPECT_EQ(1U, bits.count()); |
| EXPECT_FALSE(bits.is_empty()); |
| EXPECT_FALSE(bits.is_full()); |
| EXPECT_TRUE(bits.has_bit(0)); |
| EXPECT_FALSE(bits.has_bit(31)); |
| EXPECT_EQ(0U, bits.first_marked_bit()); |
| EXPECT_EQ(0U, bits.last_marked_bit()); |
| EXPECT_EQ(1U, bits.first_unmarked_bit()); |
| |
| // Mark the last bit. |
| bits.mark_bit(31); |
| EXPECT_EQ(2U, bits.count()); |
| EXPECT_FALSE(bits.is_empty()); |
| EXPECT_FALSE(bits.is_full()); |
| EXPECT_TRUE(bits.has_bit(0)); |
| EXPECT_TRUE(bits.has_bit(31)); |
| EXPECT_FALSE(bits.has_bit(15)); |
| EXPECT_EQ(0U, bits.first_marked_bit()); |
| EXPECT_EQ(31U, bits.last_marked_bit()); |
| EXPECT_EQ(1U, bits.first_unmarked_bit()); |
| EXPECT_EQ(0U, bits.get_index_of_bit(0)); |
| EXPECT_EQ(1U, bits.get_index_of_bit(1)); |
| EXPECT_EQ(1U, bits.get_index_of_bit(2)); |
| EXPECT_EQ(1U, bits.get_index_of_bit(31)); |
| |
| // Clear the first bit. |
| bits.clear_first_marked_bit(); |
| EXPECT_EQ(1U, bits.count()); |
| EXPECT_FALSE(bits.is_empty()); |
| EXPECT_FALSE(bits.is_full()); |
| EXPECT_FALSE(bits.has_bit(0)); |
| EXPECT_TRUE(bits.has_bit(31)); |
| EXPECT_EQ(31U, bits.first_marked_bit()); |
| EXPECT_EQ(31U, bits.last_marked_bit()); |
| EXPECT_EQ(0U, bits.first_unmarked_bit()); |
| EXPECT_EQ(0U, bits.get_index_of_bit(0)); |
| EXPECT_EQ(0U, bits.get_index_of_bit(1)); |
| EXPECT_EQ(0U, bits.get_index_of_bit(31)); |
| |
| // Clear the last bit (the set should be empty). |
| bits.clear_last_marked_bit(); |
| EXPECT_EQ(0U, bits.count()); |
| EXPECT_TRUE(bits.is_empty()); |
| EXPECT_FALSE(bits.is_full()); |
| EXPECT_FALSE(bits.has_bit(0)); |
| EXPECT_FALSE(bits.has_bit(31)); |
| EXPECT_EQ(0U, bits.get_index_of_bit(0)); |
| EXPECT_EQ(0U, bits.get_index_of_bit(31)); |
| EXPECT_EQ(BitSet32(), bits); |
| |
| // Mark the first unmarked bit (bit 0). |
| bits.mark_first_unmarked_bit(); |
| EXPECT_EQ(1U, bits.count()); |
| EXPECT_FALSE(bits.is_empty()); |
| EXPECT_FALSE(bits.is_full()); |
| EXPECT_TRUE(bits.has_bit(0)); |
| EXPECT_EQ(0U, bits.first_marked_bit()); |
| EXPECT_EQ(0U, bits.last_marked_bit()); |
| EXPECT_EQ(1U, bits.first_unmarked_bit()); |
| |
| // Mark the next unmarked bit (bit 1). |
| bits.mark_first_unmarked_bit(); |
| EXPECT_EQ(2U, bits.count()); |
| EXPECT_FALSE(bits.is_empty()); |
| EXPECT_FALSE(bits.is_full()); |
| EXPECT_TRUE(bits.has_bit(0)); |
| EXPECT_TRUE(bits.has_bit(1)); |
| EXPECT_EQ(0U, bits.first_marked_bit()); |
| EXPECT_EQ(1U, bits.last_marked_bit()); |
| EXPECT_EQ(2U, bits.first_unmarked_bit()); |
| EXPECT_EQ(0U, bits.get_index_of_bit(0)); |
| EXPECT_EQ(1U, bits.get_index_of_bit(1)); |
| EXPECT_EQ(2U, bits.get_index_of_bit(2)); |
| } |
| |
| } // namespace ui |