27#include <jau/test/catch2_ext.hpp> 
   51TEST_CASE( 
"JAU DArray Test 01 - jau::darray initializer list", 
"[datatype][jau][darray]" ) {
 
 
   81TEST_CASE( 
"JAU DArray Test 02 - jau::darray immutable type (const)", 
"[const][jau][darray]" ) {
 
 
  119template<
class Payload>
 
  122template<
class Payload>
 
  125template<
class Payload>
 
  131        std::string res = 
"NSPL-Default-"+std::to_string(
name)+
"[sz "+std::to_string(
payload.size())+
"/"+std::to_string(
payload.capacity())+
": ";
 
 
 
  145template<
class Payload>
 
  151        std::string res = 
"NSPL-MemMove-"+std::to_string(
name)+
"[sz "+std::to_string(
payload.size())+
"/"+std::to_string(
payload.capacity())+
": ";
 
 
 
  165template<
class Payload>
 
  168template<
class Payload>
 
  171template<
class Payload>
 
  177        std::string res = 
"NPL-Default-"+std::to_string(
name)+
"[sz "+std::to_string(
payload.size())+
"/"+std::to_string(
payload.capacity())+
": ";
 
 
 
  191template<
class Payload>
 
  197        std::string res = 
"NPL-MemMove-"+std::to_string(
name)+
"[sz "+std::to_string(
payload.size())+
"/"+std::to_string(
payload.capacity())+
": ";
 
 
 
  211template<
class Payload>
 
  216        std::shared_ptr<Payload> sp(std::make_shared<Payload>( 
name+i )); 
 
  219    CHECK( 2 == data.
size() );
 
  221        std::shared_ptr<Payload> sp(
new Payload( 
name+i )); 
 
  224    CHECK( 4 == data.
size() );
 
 
  227template<
class Payload>
 
  230    const size_t sz0 = src.
payload.size();
 
  233    CHECK( sz0 - 2 == src.
payload.size() );
 
 
  238template<
class Payload>
 
  243        std::shared_ptr<Payload> sp(std::make_shared<Payload>( 
name+i )); 
 
  246    CHECK( 2 == data.
size() );
 
  248        std::shared_ptr<Payload> sp(
new Payload( 
name+i )); 
 
  251    CHECK( 4 == data.
size() );
 
 
  254template<
class Payload>
 
  259        Payload sp( 
name+i ); 
 
  262    CHECK( 2 == data.
size() );
 
  264        Payload sp( 
name+i );
 
  267    CHECK( 4 == data.
size() );
 
 
  270template<
class Payload>
 
  275        Payload sp( 
name+i ); 
 
  278    CHECK( 2 == data.
size() );
 
  280        Payload sp( 
name+i );
 
  283    CHECK( 4 == data.
size() );
 
 
  287#define CHECK_TRAITS 0 
  289template< 
class Cont >
 
  293    printf(
"\nContainer Type %s (a darray, a cow %d):\n  - Uses memmove %d (trivially_copyable %d); realloc %d; base_of jau::callocator %d; secmem %d; size %d bytes\n",
 
  296                std::is_trivially_copyable_v<typename Cont::value_type>,
 
 
  307    printf(
"\nContainer Type %s (!darray, a cow %d); size %d bytes\n",
 
 
  312template<
class Payload>
 
  322        CHECK( 
true == std::is_trivially_copyable<Payload>::value);
 
  328        size_t sz0 = data.
payload.size();
 
  330        CHECK( sz0 == data.
payload.capacity() );
 
  333            Payload def_value(1);
 
  336            CHECK( 0 == data2.
payload.size() );
 
  337            CHECK( 0 == data2.
payload.capacity() );
 
  340            CHECK( 0 == data2.
payload.size() );
 
  341            CHECK( 2 == data2.
payload.capacity() );
 
  342            data2.
payload.resize(2, def_value);
 
  344            CHECK( 2 == data2.
payload.size() );
 
  345            CHECK( 2 == data2.
payload.capacity() );
 
  346            for(Payload p : data2.
payload) {
 
  347                CHECK(def_value == p);
 
  349            data2.
payload.resize(4, def_value);
 
  351            CHECK( 4 == data2.
payload.size() );
 
  352            CHECK( 4 == data2.
payload.capacity() );
 
  353            for(Payload p : data2.
payload) {
 
  354                CHECK(def_value == p);
 
  359            CHECK( 3 == data2.
payload.size() );
 
  360            CHECK( sz0 == data2.
payload.capacity() );
 
  364            CHECK( 3 == data2.
payload.size() );
 
  365            CHECK( 3 == data2.
payload.capacity() );
 
  368            Payload def_value(1);
 
  371            CHECK( sz0 == data2.
payload.size() );
 
  372            CHECK( sz0 == data2.
payload.capacity() );
 
  375            CHECK( sz0-1 == data2.
payload.size() );
 
  376            CHECK( sz0 == data2.
payload.capacity() );
 
  377            data2.
payload.resize(sz0, def_value);
 
  379            CHECK( sz0 == data2.
payload.size() );
 
  380            CHECK( sz0 == data2.
payload.capacity() );
 
  382            for(Payload p : data2.
payload) {
 
  384                    CHECK(def_value != p);
 
  386                    CHECK(def_value == p);
 
  389            data2.
payload.resize(sz0*2, def_value);
 
  391            CHECK( sz0*2 == data2.
payload.size() );
 
  392            CHECK( sz0*2 == data2.
payload.capacity() );
 
  394            for(Payload p : data2.
payload) {
 
  396                    CHECK(def_value != p);
 
  398                    CHECK(def_value == p);
 
  403            Payload def_value(1);
 
  406            CHECK( sz0 == data3.
payload.size() );
 
  407            CHECK( sz0 == data3.
payload.capacity() );
 
  410            CHECK( sz0/2 == data3.
payload.size() );
 
  411            CHECK( sz0 == data3.
payload.capacity() );
 
  412            data3.
payload.resize(sz0, def_value);
 
  414            CHECK( sz0 == data3.
payload.size() );
 
  415            CHECK( sz0 == data3.
payload.capacity() );
 
  417            for(Payload p : data3.
payload) {
 
  419                    CHECK(def_value != p);
 
  421                    CHECK(def_value == p);
 
  424            data3.
payload.resize(sz0*2, def_value);
 
  426            CHECK( sz0*2 == data3.
payload.size() );
 
  427            CHECK( sz0*2 == data3.
payload.capacity() );
 
  429            for(Payload p : data3.
payload) {
 
  431                    CHECK(def_value != p);
 
  433                    CHECK(def_value == p);
 
  439            CHECK( sz0 == data8.
payload.size() );
 
  441            CHECK( 2*sz0 == data8.
payload.size() );
 
  449        CHECK( 
true == std::is_trivially_copyable<Payload>::value);
 
  474        CHECK( 
true == std::is_trivially_copyable<std::shared_ptr<Payload>>
::value);
 
  504        Holder holder{ data };
 
  514        r1r1 = holder.get_ref2();
 
  521        CHECK( 
true == std::is_trivially_copyable<std::shared_ptr<Payload>>
::value);
 
 
  551    CHECK( 
true == GattCharacteristicSpecList::uses_realloc);
 
  553    CHECK( 
true == GattCharacteristicSpecList::uses_memmove);
 
  554    CHECK( 
true == std::is_trivially_copyable<GattCharacteristicSpec>::value);
 
 
  573TEST_CASE( 
"JAU DArray Test 10 - jau::darray value_type behavior (type traits)", 
"[datatype][jau][darray]" ) {
 
 
Implementation of a dynamic linear array storage, aka vector, including relative positional access.
constexpr iterator erase(const_iterator cpos)
Like std::vector::erase(), removes the elements at pos.
constexpr iterator end() noexcept
constexpr size_type size() const noexcept
Like std::vector::size().
constexpr void push_back(const value_type &x)
Like std::vector::push_back(), copy.
constexpr const_iterator cbegin() const noexcept
constexpr iterator begin() noexcept
static constexpr const bool uses_realloc
static constexpr const bool uses_memmove
constexpr UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f)
Like std::for_each() of 'algorithm'.
constexpr bool value(const Bool rhs) noexcept
constexpr std::string_view name(const Bool v) noexcept
uint_fast32_t nsize_t
Natural 'size_t' alternative using uint_fast32_t as its natural sized type.
__pack(...): Produces MSVC, clang and gcc compatible lead-in and -out macros.
std::string to_string(const bit_order_t v) noexcept
Return std::string representation of the given bit_order_t.
std::string toString() const noexcept
jau::darray< GattCharacteristicSpec > characteristics
PayloadListDefault< Payload > payload
std::string toString() const noexcept
PayloadListMemMove< Payload > payload
std::string toString() const noexcept
std::string toString() const noexcept
SharedPayloadListDefault< Payload > payload
std::string toString() const noexcept
SharedPayloadListMemMove< Payload > payload
A simple allocator using POSIX C functions: ::malloc(), ::free() and ::realloc().
template< class T > is_cow_type<T>::value compile-time Type Trait, determining whether the given temp...
template< class T > is_darray_type<T>::value compile-time Type Trait, determining whether the given t...
static int countGattCharacteristicSpecList01ConstRef(const jau::darray< const GattCharacteristicSpec > &clist)
static NamedSharedPayloadListDefault< Payload > makeNamedSharedPayloadListDefault(int name)
jau::darray< Payload, jau::nsize_t, jau::callocator< Payload >, true > PayloadListMemMove
static NamedSharedPayloadListMemMove< Payload > makeNamedSharedPayloadListMemMove(int name)
static void print_container_info(const std::string &type_id, const Cont &c, std::enable_if_t< jau::is_darray_type< Cont >::value, bool >=true)
static void testDArrayValueType(const std::string &type_id)
static NamedPayloadListDefault< Payload > makeNamedPayloadListDefault(int name)
static GattServiceCharacteristic returnGattSrvcChar(int i)
jau::darray< std::shared_ptr< Payload > > SharedPayloadListDefault
static NamedPayloadListMemMove< Payload > makeNamedPayloadListMemMove(int name)
TEST_CASE("JAU DArray Test 01 - jau::darray initializer list", "[datatype][jau][darray]")
static NamedSharedPayloadListDefault< Payload > modifyCopyOfNamedSharedPayloadListDefault(NamedSharedPayloadListDefault< Payload > src)
jau::darray< Payload > PayloadListDefault
static int countGattCharacteristicSpecList02Copy(jau::darray< const GattCharacteristicSpec > clist)
static void testDArrayGattServiceCharacteristic()
jau::darray< std::shared_ptr< Payload >, jau::nsize_t, jau::callocator< std::shared_ptr< Payload > >, true > SharedPayloadListMemMove
const jau::darray< const GattServiceCharacteristic * > GATT_SERVICES
@ ReliableWriteExt
FIXME: extension?
@ AuxWriteExt
FIXME: extension?
int printf(const char *format,...)
Operating Systems predefined macros.