Edit

kc3-lang/angle/src/common/FixedVector_unittest.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2018-04-09 10:59:56
    Hash : 0ce016c1
    Message : FixedVector: Add "full" method. Will be useful for an optimization to the Buffer Subject/Observer pattern. Also cleans up an ASSERT. Bug: angleproject:2389 Bug: chromium:829906 Change-Id: I2f8313ab531bca61947a51cc2396c04fb5d4bb1d Reviewed-on: https://chromium-review.googlesource.com/1002883 Reviewed-by: Luc Ferron <lucferron@chromium.org> Reviewed-by: Lingfeng Yang <lfy@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • src/common/FixedVector_unittest.cpp
  • //
    // 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