summaryrefslogtreecommitdiffstats
path: root/mfbt/tests/TestBitSet.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--mfbt/tests/TestBitSet.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/mfbt/tests/TestBitSet.cpp b/mfbt/tests/TestBitSet.cpp
new file mode 100644
index 0000000000..e8a4a5267f
--- /dev/null
+++ b/mfbt/tests/TestBitSet.cpp
@@ -0,0 +1,68 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/BitSet.h"
+
+using mozilla::BitSet;
+
+// Work around issue with commas in macro use.
+template <size_t N>
+using BitSetUint8 = BitSet<N, uint8_t>;
+template <size_t N>
+using BitSetUint32 = BitSet<N, uint32_t>;
+
+void TestBitSet() {
+ MOZ_RELEASE_ASSERT(BitSetUint8<1>().Storage().LengthBytes() == 1);
+ MOZ_RELEASE_ASSERT(BitSetUint32<1>().Storage().LengthBytes() == 4);
+
+ MOZ_RELEASE_ASSERT(BitSetUint8<1>().Storage().Length() == 1);
+ MOZ_RELEASE_ASSERT(BitSetUint8<8>().Storage().Length() == 1);
+ MOZ_RELEASE_ASSERT(BitSetUint8<9>().Storage().Length() == 2);
+
+ MOZ_RELEASE_ASSERT(BitSetUint32<1>().Storage().Length() == 1);
+ MOZ_RELEASE_ASSERT(BitSetUint32<32>().Storage().Length() == 1);
+ MOZ_RELEASE_ASSERT(BitSetUint32<33>().Storage().Length() == 2);
+
+ BitSetUint8<10> bitset;
+ MOZ_RELEASE_ASSERT(!bitset.Test(3));
+ MOZ_RELEASE_ASSERT(!bitset[3]);
+
+ bitset[3] = true;
+ MOZ_RELEASE_ASSERT(bitset.Test(3));
+ MOZ_RELEASE_ASSERT(bitset[3]);
+
+ bitset.ResetAll();
+ for (size_t i = 0; i < bitset.Size(); i++) {
+ MOZ_RELEASE_ASSERT(!bitset[i]);
+ }
+
+ bitset.SetAll();
+ for (size_t i = 0; i < bitset.Size(); i++) {
+ MOZ_RELEASE_ASSERT(bitset[i]);
+ }
+
+ bitset.ResetAll();
+ for (size_t i = 0; i < bitset.Size(); i++) {
+ MOZ_RELEASE_ASSERT(!bitset[i]);
+ }
+
+ // Test trailing unused bits are not set by SetAll().
+ bitset.SetAll();
+ BitSetUint8<16> bitset2(bitset.Storage());
+ MOZ_RELEASE_ASSERT(bitset.Size() < bitset2.Size());
+ MOZ_RELEASE_ASSERT(bitset.Storage().Length() == bitset2.Storage().Length());
+ for (size_t i = 0; i < bitset.Size(); i++) {
+ MOZ_RELEASE_ASSERT(bitset2[i]);
+ }
+ for (size_t i = bitset.Size(); i < bitset2.Size(); i++) {
+ MOZ_RELEASE_ASSERT(!bitset2[i]);
+ }
+}
+
+int main() {
+ TestBitSet();
+ return 0;
+}