| // |
| // Copyright 2017 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // Unit tests for VertexArray and related classes. |
| // |
| |
| #include "gmock/gmock.h" |
| #include "gtest/gtest.h" |
| |
| #include "common/bitset_utils.h" |
| #include "common/utilities.h" |
| #include "libANGLE/VertexArray.h" |
| |
| using namespace gl; |
| |
| // Tests that function GetIndexFromDirtyBit computes the index properly. |
| TEST(VertexArrayTest, VerifyGetIndexFromDirtyBit) |
| { |
| VertexArray::DirtyBits dirtyBits; |
| constexpr size_t bits[] = {1, 4, 9, 16, 25, 35}; |
| constexpr GLint count = sizeof(bits) / sizeof(size_t); |
| for (GLint i = 0; i < count; i++) |
| { |
| dirtyBits.set(bits[i]); |
| } |
| |
| for (size_t dirtyBit : dirtyBits) |
| { |
| const size_t index = VertexArray::GetVertexIndexFromDirtyBit(dirtyBit); |
| if (dirtyBit < VertexArray::DIRTY_BIT_ATTRIB_0) |
| { |
| continue; |
| } |
| else if (dirtyBit < VertexArray::DIRTY_BIT_ATTRIB_MAX) |
| { |
| EXPECT_EQ(dirtyBit - VertexArray::DIRTY_BIT_ATTRIB_0, index); |
| } |
| else if (dirtyBit < VertexArray::DIRTY_BIT_BINDING_MAX) |
| { |
| EXPECT_EQ(dirtyBit - VertexArray::DIRTY_BIT_BINDING_0, index); |
| } |
| else if (dirtyBit < VertexArray::DIRTY_BIT_BUFFER_DATA_MAX) |
| { |
| EXPECT_EQ(dirtyBit - VertexArray::DIRTY_BIT_BUFFER_DATA_0, index); |
| } |
| else |
| ASSERT_TRUE(false); |
| } |
| } |