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_bytes_t< sizeof(unsigned long int)> nsize_t
Natural 'size_t' alternative using uint<XX>_t with xx = sizeof(unsigned long int)*8 as its natural si...
__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.