LCOV - code coverage report
Current view: top level - estd/examples - vector.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 37 37 100.0 %
Date: 2025-01-20 13:53:09 Functions: 4 5 80.0 %

          Line data    Source code
       1             : // Copyright 2024 Accenture.
       2             : 
       3             : #include "estd/vector.h"
       4             : 
       5             : #include <gtest/gtest.h>
       6             : 
       7             : namespace
       8             : {
       9           1 : void example_construction()
      10             : {
      11             :     // EXAMPLE_START construction
      12             :     // construction of a defaulted ::estd::declare::vector that stores up to 10 elements
      13           1 :     ::estd::declare::vector<uint8_t, 10> vec1;
      14             : 
      15             :     // construction of vectors prefilled with a given number of elements
      16           1 :     ::estd::declare::vector<uint8_t, 10> vec2(8);
      17           1 :     ::estd::declare::vector<uint8_t, 10> vec3(8, 255);
      18             : 
      19             :     // construction of a vector from another vector
      20           1 :     ::estd::declare::vector<uint8_t, 20> vec4(vec3);
      21             : 
      22             :     // EXAMPLE_END construction
      23           1 : }
      24             : 
      25           1 : void example_iterate()
      26             : {
      27             :     // EXAMPLE_START iterate
      28             : 
      29           1 :     ::estd::declare::vector<int, 10> int_vec(8);
      30             : 
      31             :     // iterate over all elements, modify them
      32           1 :     uint8_t counter = 0;
      33           1 :     for (auto& x : int_vec)
      34             :     {
      35             :         x = counter++;
      36             :     }
      37             : 
      38             :     // iterate over elements in reverse order
      39           1 :     for (auto rev_it = int_vec.rbegin(); rev_it != int_vec.rend(); ++rev_it)
      40             :     {
      41             :         *rev_it = (*rev_it) * (*rev_it);
      42             :     }
      43             : 
      44             :     // EXAMPLE_END iterate
      45           1 : }
      46             : 
      47             : #if 0
      48             : void example_element_access() // don't run - asserts on purpose!
      49             : {
      50             :     // EXAMPLE_START element_access
      51             :     ::estd::declare::vector<uint8_t, 10> vec;
      52             :     vec.push_back(1);
      53             :     vec.push_back(2);
      54             : 
      55             :     EXPECT_EQ(2, vec.size());
      56             :     ASSERT_FALSE(vec.empty());
      57             :     ASSERT_FALSE(vec.full());
      58             :     EXPECT_EQ(2, vec.back());
      59             : 
      60             :     vec.at(0) = 42; // assign 42 to the first element
      61             :     vec[1]    = 43; // assign 43 to the second element
      62             : 
      63             :     // access out of bounds - will fail an assert
      64             :     vec.at(2);
      65             :     // access out of bounds - undefined behavior (use operator[] with caution!)
      66             :     vec[2];
      67             : 
      68             :     uint8_t* ptr = vec.data(); // points to first element
      69             :     EXPECT_EQ(ptr, &vec.front());
      70             :     // EXAMPLE_END element_access
      71             : }
      72             : #endif
      73             : 
      74             : #if 0
      75             : void example_modify() // don't run - asserts on purpose!
      76             : {
      77             :     // EXAMPLE_START modify
      78             :     ::estd::declare::vector<uint8_t, 10> vec7;
      79             : 
      80             :     // resize vector from size 0 to size 2, growing two elements with value 255
      81             :     vec7.resize(2, 255);
      82             : 
      83             :     ::estd::declare::vector<uint8_t, 5> vec8;
      84             : 
      85             :     // assign range to vector
      86             :     uint8_t const testData[] = {0, 1, 2, 3, 4};
      87             :     vec8.assign(std::begin(testData), std::end(testData));
      88             : 
      89             :     // pushing beyond the limit will result in a failed assert.
      90             :     ::estd::declare::vector<uint8_t, 1> vec9;
      91             :     vec9.push_back(0);
      92             :     vec9.push_back(1); // assert fails!
      93             : 
      94             :     class Foo
      95             :     {
      96             :     public:
      97             :         Foo(int32_t m, int32_t n) : _m(m), _n(n) {}
      98             : 
      99             :         Foo(Foo const&)            = delete;
     100             :         void operator=(Foo const&) = delete;
     101             : 
     102             :         int32_t _m;
     103             :         int32_t _n;
     104             :     };
     105             : 
     106             :     // instantiation of a vector of a noncopyable non default constructible type
     107             :     ::estd::declare::vector<Foo, 10> vec10;
     108             :     vec10.emplace_back().construct(13, 17);
     109             : 
     110             :     ::estd::declare::vector<uint8_t, 10> vec11;
     111             :     vec11.clear();
     112             : 
     113             :     // insert elements in the vector
     114             :     vec11.insert(vec11.begin(), 1);
     115             :     vec11.insert(vec11.begin() + 1, 2, 1);
     116             :     vec11.emplace(vec11.begin() + 1U).construct(11);
     117             : 
     118             :     // remove elements in the vector
     119             :     vec11.pop_back();
     120             :     vec11.erase(vec11.begin());
     121             :     vec11.erase(vec11.end() - 2, vec11.end());
     122             : 
     123             :     // assign elements to the vector
     124             :     vec11.assign(10, 42);
     125             :     vec11.assign(vec11.begin(), vec11.end());
     126             :     // EXAMPLE_END modify
     127             : }
     128             : #endif
     129             : 
     130           1 : void example_compare()
     131             : {
     132             :     // EXAMPLE_START compare
     133           1 :     uint8_t testData[] = {0, 1, 2, 3, 4};
     134           1 :     ::estd::declare::vector<int32_t, 5> vec_0_1_2_3_4;
     135           1 :     vec_0_1_2_3_4.assign(std::begin(testData), std::end(testData));
     136             : 
     137           1 :     ::estd::declare::vector<int32_t, 3> vec_99_99(2, 99);
     138           1 :     ::estd::declare::vector<int32_t, 3> vec_99_15(2);
     139           1 :     vec_99_15[0] = 99;
     140           1 :     vec_99_15[1] = 15;
     141             : 
     142             :     // vectors of different sizes are not equal and "less than/greater than" relation is undefined
     143           1 :     EXPECT_TRUE(vec_99_99 != vec_0_1_2_3_4);
     144           1 :     EXPECT_FALSE(vec_99_99 > vec_0_1_2_3_4);
     145           1 :     EXPECT_FALSE(vec_99_99 < vec_0_1_2_3_4);
     146           1 :     EXPECT_FALSE(vec_0_1_2_3_4 > vec_99_99);
     147           1 :     EXPECT_FALSE(vec_0_1_2_3_4 < vec_99_99);
     148             : 
     149             :     // vectors of same size are compared lexicographically
     150           1 :     EXPECT_TRUE(vec_99_99 != vec_99_15);
     151           1 :     EXPECT_TRUE(vec_99_99 > vec_99_15);
     152           1 :     EXPECT_FALSE(vec_99_99 < vec_99_15);
     153             : 
     154             :     // vectors with same element size and value
     155           1 :     EXPECT_TRUE(vec_0_1_2_3_4 == vec_0_1_2_3_4);
     156           1 :     EXPECT_TRUE(vec_0_1_2_3_4 <= vec_0_1_2_3_4);
     157           2 :     EXPECT_TRUE(vec_0_1_2_3_4 >= vec_0_1_2_3_4);
     158             :     // EXAMPLE_END compare
     159           1 : }
     160             : 
     161             : } // namespace
     162             : 
     163           3 : TEST(Vector, run_examples)
     164             : {
     165           1 :     example_construction();
     166           1 :     example_iterate();
     167           1 :     example_compare();
     168           1 : }

Generated by: LCOV version 1.14