mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-06 14:43:31 +00:00
This macro has some advantages over the standard library one: - It prints the place where the macro was triggered - It "references" the condition even in Release to avoid warnings - In release, if possible, it gives compiler hints It is basically is stripped down version of the ASSERT macros I wrote for the Daemon engine in src/common/Assert.h This commit also removes the stray "backend" namespaces for common/ code.
85 lines
2.4 KiB
C++
85 lines
2.4 KiB
C++
// Copyright 2017 The NXT Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
#include "common/BitSetIterator.h"
|
|
|
|
// This is ANGLE's BitSetIterator_unittests.cpp file.
|
|
|
|
class BitSetIteratorTest : public testing::Test {
|
|
protected:
|
|
std::bitset<40> mStateBits;
|
|
};
|
|
|
|
// Simple iterator test.
|
|
TEST_F(BitSetIteratorTest, Iterator) {
|
|
std::set<unsigned long> originalValues;
|
|
originalValues.insert(2);
|
|
originalValues.insert(6);
|
|
originalValues.insert(8);
|
|
originalValues.insert(35);
|
|
|
|
for (unsigned long value : originalValues) {
|
|
mStateBits.set(value);
|
|
}
|
|
|
|
std::set<unsigned long> readValues;
|
|
for (unsigned long bit : IterateBitSet(mStateBits)) {
|
|
EXPECT_EQ(1u, originalValues.count(bit));
|
|
EXPECT_EQ(0u, readValues.count(bit));
|
|
readValues.insert(bit);
|
|
}
|
|
|
|
EXPECT_EQ(originalValues.size(), readValues.size());
|
|
}
|
|
|
|
// Test an empty iterator.
|
|
TEST_F(BitSetIteratorTest, EmptySet) {
|
|
// We don't use the FAIL gtest macro here since it returns immediately,
|
|
// causing an unreachable code warning in MSVS
|
|
bool sawBit = false;
|
|
for (unsigned long bit : IterateBitSet(mStateBits)) {
|
|
(void) bit;
|
|
sawBit = true;
|
|
}
|
|
EXPECT_FALSE(sawBit);
|
|
}
|
|
|
|
// Test iterating a result of combining two bitsets.
|
|
TEST_F(BitSetIteratorTest, NonLValueBitset) {
|
|
std::bitset<40> otherBits;
|
|
|
|
mStateBits.set(1);
|
|
mStateBits.set(2);
|
|
mStateBits.set(3);
|
|
mStateBits.set(4);
|
|
|
|
otherBits.set(0);
|
|
otherBits.set(1);
|
|
otherBits.set(3);
|
|
otherBits.set(5);
|
|
|
|
std::set<unsigned long> seenBits;
|
|
|
|
for (unsigned long bit : IterateBitSet(mStateBits & otherBits)) {
|
|
EXPECT_EQ(0u, seenBits.count(bit));
|
|
seenBits.insert(bit);
|
|
EXPECT_TRUE(mStateBits[bit]);
|
|
EXPECT_TRUE(otherBits[bit]);
|
|
}
|
|
|
|
EXPECT_EQ((mStateBits & otherBits).count(), seenBits.size());
|
|
}
|