blob: 5e6c872556cb8f7ea50ab6b60dd88b26846cd710 [file] [log] [blame]
//
// Copyright 2018 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.
//
// FixedVector_unittest:
// Tests of the FixedVector class
//
#include <gtest/gtest.h>
#include "common/FixedVector.h"
namespace angle
{
// Make sure the various constructors compile and do basic checks
TEST(FixedVector, Constructors)
{
FixedVector<int, 5> defaultContructor;
EXPECT_EQ(0u, defaultContructor.size());
FixedVector<int, 5> count(3);
EXPECT_EQ(3u, count.size());
FixedVector<int, 5> countAndValue(3, 2);
EXPECT_EQ(3u, countAndValue.size());
EXPECT_EQ(2, countAndValue[1]);
FixedVector<int, 5> copy(countAndValue);
EXPECT_EQ(copy, countAndValue);
FixedVector<int, 5> copyRValue(std::move(count));
EXPECT_EQ(3u, copyRValue.size());
FixedVector<int, 5> initializerList{1, 2, 3, 4, 5};
EXPECT_EQ(5u, initializerList.size());
EXPECT_EQ(3, initializerList[2]);
FixedVector<int, 5> assignCopy(copyRValue);
EXPECT_EQ(3u, assignCopy.size());
FixedVector<int, 5> assignRValue(std::move(assignCopy));
EXPECT_EQ(3u, assignRValue.size());
FixedVector<int, 5> assignmentInitializerList = {1, 2, 3, 4, 5};
EXPECT_EQ(5u, assignmentInitializerList.size());
EXPECT_EQ(3, assignmentInitializerList[2]);
}
// Test indexing operations (at, operator[])
TEST(FixedVector, Indexing)
{
FixedVector<int, 5> vec = {0, 1, 2, 3, 4};
EXPECT_EQ(0, vec.at(0));
EXPECT_EQ(vec[0], vec.at(0));
}
// Test the push_back functions
TEST(FixedVector, PushBack)
{
FixedVector<int, 5> vec;
vec.push_back(1);
EXPECT_EQ(1, vec[0]);
vec.push_back(1);
vec.push_back(1);
vec.push_back(1);
vec.push_back(1);
EXPECT_EQ(vec.size(), vec.max_size());
}
// Test the pop_back function
TEST(FixedVector, PopBack)
{
FixedVector<int, 5> vec;
vec.push_back(1);
EXPECT_EQ(1, (int)vec.size());
vec.pop_back();
EXPECT_EQ(0, (int)vec.size());
}
// Test the back function
TEST(FixedVector, Back)
{
FixedVector<int, 5> vec;
vec.push_back(1);
vec.push_back(2);
EXPECT_EQ(2, vec.back());
}
// Test the sizing operations
TEST(FixedVector, Size)
{
FixedVector<int, 5> vec;
EXPECT_TRUE(vec.empty());
EXPECT_EQ(0u, vec.size());
EXPECT_EQ(5u, vec.max_size());
vec.push_back(1);
EXPECT_FALSE(vec.empty());
EXPECT_EQ(1u, vec.size());
}
// Test clearing the vector
TEST(FixedVector, Clear)
{
FixedVector<int, 5> vec = {0, 1, 2, 3, 4};
vec.clear();
EXPECT_TRUE(vec.empty());
}
// Test resizing the vector
TEST(FixedVector, Resize)
{
FixedVector<int, 5> vec;
vec.resize(5u, 1);
EXPECT_EQ(5u, vec.size());
EXPECT_EQ(1, vec[4]);
vec.resize(2u);
EXPECT_EQ(2u, vec.size());
}
// Test iterating over the vector
TEST(FixedVector, Iteration)
{
FixedVector<int, 5> vec = {0, 1, 2, 3};
int vistedCount = 0;
for (int value : vec)
{
EXPECT_EQ(vistedCount, value);
vistedCount++;
}
EXPECT_EQ(4, vistedCount);
}
// Test the "full" method.
TEST(FixedVector, Full)
{
FixedVector<int, 2> vec;
EXPECT_FALSE(vec.full());
vec.push_back(0);
EXPECT_FALSE(vec.full());
vec.push_back(1);
EXPECT_TRUE(vec.full());
}
} // namespace angle