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

          Line data    Source code
       1             : // Copyright 2024 Accenture.
       2             : 
       3             : #include "estd/slice.h"
       4             : 
       5             : #include "estd/array.h"
       6             : #include "estd/assert.h"
       7             : #include "estd/vector.h"
       8             : 
       9             : #include <gtest/gtest.h>
      10             : 
      11             : // clang-format off
      12             : namespace
      13             : {
      14           1 : void example_construction()
      15             : {
      16           1 :     {
      17             :     // [EXAMPLE_BEGIN estd static construction from C array]
      18           1 :     uint8_t data[] = {0, 1, 2, 3, 4};
      19             : 
      20             :     // statically-sized slice of size 5
      21           1 :     ::estd::slice<uint8_t, 5U> slice5(data);
      22             : 
      23             :     // statically-sized slice of size 3 which points to the first three elements
      24           1 :     ::estd::slice<uint8_t, 3U> slice3(data);
      25             :     // [EXAMPLE_END estd static construction from C array]
      26             :     }
      27             : 
      28           1 :     {
      29             :     // [EXAMPLE_BEGIN estd dynamic construction from C array]
      30           1 :     uint8_t data[] = {0, 1, 2, 3, 4};
      31             : 
      32             :     // dynamically-sized slice of size 5
      33           1 :     ::estd::slice<uint8_t> dynSizeSlice(data);
      34             : 
      35             :     // dynamically-sized slice can be constructed from a statically sized slice:
      36           1 :     ::estd::slice<uint8_t, 5U> slice5(data);
      37             : 
      38             :     // [EXAMPLE_END estd dynamic construction from C array]
      39             :     }
      40             : 
      41           1 :     {
      42             :     // [EXAMPLE_BEGIN estd construction from an estd array]
      43           1 :     ::estd::array<int32_t, 4U> data = {0, 1, 2, 3};
      44           1 :     ::estd::slice<int32_t, 4U> slice4(data);
      45             :     // EXAMPLE_END estd construction from an estd array
      46             :     }
      47             : 
      48           1 :     {
      49             :     // [EXAMPLE_BEGIN estd construction from pointer]
      50           1 :     uint8_t data[]                       = {0, 1, 2, 3, 4};
      51           1 :     uint8_t* pointer                     = data;
      52           1 :     ::estd::slice<uint8_t, 5U> slice5_fp = ::estd::slice<uint8_t, 5U>::from_pointer(pointer);
      53             :     // [EXAMPLE_END estd construction from pointer]
      54             :     }
      55             : 
      56           1 :     {
      57             :     // [EXAMPLE_BEGIN estd dynamic construction from estd vector]
      58           1 :     ::estd::declare::vector<int32_t, 10> v1;
      59           1 :     ::estd::slice<int32_t> s1(v1);
      60             : 
      61           1 :     ::estd::declare::vector<int32_t, 20> v2;
      62           1 :     ::estd::vector<int32_t>& v3 = v2;
      63           1 :     ::estd::slice<int32_t> s3(v3);
      64             :     // [EXAMPLE_END estd dynamic construction from estd vector]
      65           1 :     }
      66             : 
      67             : #if 0 // this won't compile, therefore disabled
      68             :     // [EXAMPLE_BEGIN estd array too small]
      69             :     ::estd::slice<uint8_t, 6U> slice6(data); // won't compile - array is smaller than the size of slice
      70             :     // [EXAMPLE_END estd array too small]
      71             : #endif
      72           1 : }
      73             : 
      74           1 : void example_make_slice()
      75             : {
      76             :     // [EXAMPLE_BEGIN estd make_slice]
      77             : 
      78           1 :     uint32_t data[] = {0, 1, 2, 3, 4};
      79           1 :     auto staticSlice = ::estd::make_static_slice(data); // staticSlice has type slice<uint32_t, 5>
      80             : 
      81             :     // [EXAMPLE_END estd make_slice]
      82             : }
      83             : 
      84           1 : void example_iterate()
      85             : {
      86             :     // [EXAMPLE_BEGIN estd iterate]
      87           1 :     uint32_t data[] = {0, 1, 2, 3, 4};
      88           1 :     ::estd::slice<uint32_t> slice5{data};
      89             : 
      90             :     // iterate over all elements, incrementing each of them:
      91           1 :     for (auto& i : slice5)
      92             :     {
      93             :         ++i;
      94             :     }
      95             : 
      96             :     // iterate over elements in reverse order
      97           1 :     for (auto rev_it = slice5.rbegin(); rev_it != slice5.rend(); ++rev_it)
      98             :     {
      99             :         *rev_it = *rev_it + 10;
     100             :     }
     101             : 
     102             :     // [EXAMPLE_END estd iterate]
     103             : }
     104             : 
     105           1 : void example_access_at()
     106             : {
     107             :     // [EXAMPLE_BEGIN estd access_at]
     108           1 :     uint8_t data[] = {0, 1, 2, 3, 4};
     109           1 :     ::estd::slice<uint8_t, 5> const slice5(data);
     110             : 
     111           1 :     slice5.at<0>() = 42; // assign 42 to the first element
     112             : 
     113             :     // [EXAMPLE_END estd access_at]
     114             : }
     115             : 
     116           1 : void example_subviews()
     117             : {
     118             :     // [EXAMPLE_BEGIN estd subviews]
     119           1 :     uint8_t data[] = {0, 1, 2, 3, 4};
     120           1 :     ::estd::slice<uint8_t> const slice(data);
     121             : 
     122             :     // [EXAMPLE_END estd subviews]
     123             : }
     124             : 
     125           1 : void example_subviews_static()
     126             : {
     127             :     // [EXAMPLE_BEGIN estd subviews_static]
     128           1 :     uint8_t data[] = {0, 1, 2, 3, 4};
     129           1 :     ::estd::slice<uint8_t, 5U> const slice5(data);
     130           1 :     ::estd::slice<uint8_t, 4U> slice4 = slice5.offset<1>();   // skip 1 element: {1, 2, 3, 4}
     131           1 :     ::estd::slice<uint8_t, 3U> slice3 = slice5.subslice<3>(); // first 3 elements: {0, 1, 2}
     132             :     // [EXAMPLE_END estd subviews_static]
     133             : }
     134             : 
     135           1 : void example_modify()
     136             : {
     137             :     // [EXAMPLE_BEGIN estd modify]
     138           1 :     uint8_t data[] = {0, 1, 2, 3, 4};
     139           1 :     ::estd::slice<uint8_t> slice(data);
     140             : 
     141           1 :     slice.advance(1U); // slice's pointer incremented by one, now points to {1, 2, 3, 4}
     142           1 :     slice.trim(2U);    // slice's size decreased to 2, now points to {1, 2}
     143             :     // [EXAMPLE_END estd modify]
     144             : }
     145             : 
     146             : } // namespace
     147             : 
     148           3 : TEST(Slice, run_examples)
     149             : {
     150           1 :     example_construction();
     151           1 :     example_make_slice();
     152           1 :     example_iterate();
     153           1 :     example_subviews();
     154           1 :     example_subviews_static();
     155           1 :     example_modify();
     156           1 :     example_access_at();
     157           1 : }
     158             : 
     159             : // clang-format off

Generated by: LCOV version 1.14