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

          Line data    Source code
       1             : // Copyright 2024 Accenture.
       2             : 
       3             : #include "estd/deque.h"
       4             : 
       5             : #include "estd/algorithm.h"
       6             : #include "estd/constructor.h"
       7             : 
       8             : #include <gtest/gtest.h>
       9             : 
      10             : namespace
      11             : {
      12           1 : void example_construction()
      13             : {
      14             :     // EXAMPLE_START declare
      15             :     // construction of a defaulted estd::declare::deque that stores up to 10 elements
      16           1 :     ::estd::declare::deque<uint8_t, 10> deq1;
      17             : 
      18             :     // construction of deques prefilled with a given number of elements
      19           1 :     ::estd::declare::deque<uint8_t, 10> deq2(8);
      20           1 :     ::estd::declare::deque<uint8_t, 10> deq3(8, 255);
      21             : 
      22             :     // construction of a deque from another deque
      23           1 :     ::estd::declare::deque<uint8_t, 20> deq4(deq3);
      24             : 
      25             :     // function taking an estd::deque parameter
      26           1 :     auto size = [](::estd::deque<uint8_t> const& d) { return d.size(); };
      27           1 :     size(deq4);
      28             :     // EXAMPLE_END declare
      29           1 : }
      30             : 
      31             : using IntDeque = ::estd::deque<int32_t>;
      32             : 
      33             : // EXAMPLE_START iterate
      34           3 : TEST(DequeIterator, Comparable)
      35             : {
      36           1 :     IntDeque::iterator itr;
      37           1 :     IntDeque::iterator itr2(itr);
      38           1 :     ASSERT_TRUE(itr == itr2);
      39           1 :     ASSERT_FALSE(itr != itr2);
      40             : }
      41             : 
      42             : // EXAMPLE_END iterate
      43             : 
      44           1 : void example_capacity()
      45             : {
      46             :     // EXAMPLE_START capacity
      47           1 :     ::estd::declare::deque<uint8_t, 10> deq6;
      48           1 :     deq6.push_back(1);
      49           1 :     deq6.push_back(2);
      50             : 
      51           1 :     assert(deq6.size() == 2);        // returns true if the size of deq6 is 2
      52           1 :     ASSERT_EQ(10U, deq6.max_size()); // returns true if value matches maximum size of deq6
      53             : 
      54           1 :     deq6.clear();
      55           2 :     ASSERT_TRUE(deq6.empty()); // returns true if the deq6 is empty or not
      56             :     // EXAMPLE_END capacity
      57           1 : }
      58             : 
      59             : class Foo
      60             : {
      61             : public:
      62             :     Foo() = default;
      63             : 
      64           1 :     Foo(int x, int y) : x_(x), y_(y) {}
      65             : 
      66             :     Foo(Foo const&)            = delete; // Copy constructor
      67             :     Foo& operator=(Foo const&) = delete; // Copy assignment operator
      68             : 
      69             : private:
      70             :     int x_;
      71             :     int y_;
      72             : };
      73             : 
      74           1 : void example_construct()
      75             : {
      76             :     // EXAMPLE_START modify
      77           1 :     using std::begin;
      78           1 :     using std::end;
      79             : 
      80           1 :     ::estd::declare::deque<uint8_t, 10> deq7;
      81             : 
      82             :     // resize deque from size 0 to size 2, growing two elements with value 255
      83           1 :     deq7.resize(2, 255);
      84             : 
      85           1 :     ::estd::declare::deque<uint8_t, 5> deq8;
      86             : 
      87             :     // assign range to deque
      88           1 :     uint8_t testData[] = {0, 1, 2, 3, 4};
      89           1 :     deq8.assign(begin(testData), end(testData));
      90             : 
      91             :     // pushing beyond the limit will result in a failed assert.
      92           1 :     ::estd::declare::deque<uint8_t, 10> deq9;
      93           1 :     deq9.push_back(1);
      94           1 :     deq9.push_front(0);
      95           1 :     deq9.insert(deq9.cbegin(), 3, 5);
      96           1 :     deq9.insert(deq9.cbegin(), -1);
      97             : 
      98           1 :     deq9.pop_front(); // removes one element in the front()
      99           1 :     deq9.pop_back();  // removes one element in the back()
     100             : 
     101           1 :     deq9.erase(deq9.cbegin());              // erase using position
     102           1 :     deq9.erase(deq9.cbegin(), deq9.cend()); // erase using range of position
     103             : 
     104             :     // instantiation of a deque of a noncopyable non default constructible type
     105           1 :     ::estd::declare::deque<Foo, 10> deq10;
     106           1 :     deq10.emplace_back().construct(13, 17);
     107             :     // EXAMPLE_END modify
     108           1 : }
     109             : 
     110           1 : void example_compare()
     111             : {
     112             :     // EXAMPLE_START compare
     113             :     // create deques and push elements to them
     114           1 :     ::estd::declare::deque<uint8_t, 10> deq11;
     115           1 :     ::estd::declare::deque<uint8_t, 10> deq12;
     116             : 
     117           1 :     deq11.push_back(1);
     118           1 :     deq12.push_back(1);
     119           1 :     deq11.push_back(2);
     120             : 
     121             :     // deques with different sizes are compared below
     122             : 
     123           1 :     ASSERT_NE(deq11, deq12);
     124           1 :     ASSERT_FALSE(deq11 < deq12);
     125             : 
     126           1 :     deq12.push_back(2);
     127             : 
     128             :     // deques with same sizes are compared below
     129           1 :     ASSERT_EQ(deq11, deq12);
     130           1 :     ASSERT_TRUE((deq11 == deq12));
     131           1 :     ASSERT_GE(deq11, deq12);
     132           1 :     ASSERT_TRUE((deq11 >= deq12));
     133           1 :     ASSERT_GE(deq12, deq11);
     134           1 :     ASSERT_TRUE((deq12 >= deq11));
     135           1 :     ASSERT_LE(deq11, deq12);
     136           1 :     ASSERT_TRUE((deq11 <= deq12));
     137           1 :     ASSERT_LE(deq12, deq11);
     138           2 :     ASSERT_TRUE((deq12 <= deq11));
     139             :     // EXAMPLE_END compare
     140           1 : }
     141             : } // namespace
     142             : 
     143           3 : TEST(Deque, run_examples)
     144             : {
     145           1 :     example_construction();
     146           1 :     example_capacity();
     147           1 :     example_construct();
     148           1 :     example_compare();
     149           1 : }

Generated by: LCOV version 1.14