28#include <jau/test/catch2_ext.hpp>
52TEST_CASE(
"JAU DArray Test 01 - jau::darray initializer list",
"[datatype][jau][darray]" ) {
82TEST_CASE(
"JAU DArray Test 02 - jau::darray immutable type (const)",
"[const][jau][darray]" ) {
120template<
class Payload>
123template<
class Payload>
126template<
class Payload>
132 std::string res =
"NSPL-Default-"+std::to_string(
name)+
"[sz "+std::to_string(
payload.size())+
"/"+std::to_string(
payload.capacity())+
": ";
138 static_assert(
true == std::is_pointer_v<const char*>);
149template<
class Payload>
155 std::string res =
"NSPL-MemMove-"+std::to_string(
name)+
"[sz "+std::to_string(
payload.size())+
"/"+std::to_string(
payload.capacity())+
": ";
169template<
class Payload>
172template<
class Payload>
175template<
class Payload>
181 std::string res =
"NPL-Default-"+std::to_string(
name)+
"[sz "+std::to_string(
payload.size())+
"/"+std::to_string(
payload.capacity())+
": ";
195template<
class Payload>
201 std::string res =
"NPL-MemMove-"+std::to_string(
name)+
"[sz "+std::to_string(
payload.size())+
"/"+std::to_string(
payload.capacity())+
": ";
215template<
class Payload>
220 std::shared_ptr<Payload> sp(std::make_shared<Payload>(
name+i ));
223 CHECK( 2 == data.
size() );
225 std::shared_ptr<Payload> sp(
new Payload(
name+i ));
228 CHECK( 4 == data.
size() );
231template<
class Payload>
234 const size_t sz0 = src.
payload.size();
237 CHECK( sz0 - 2 == src.
payload.size() );
242template<
class Payload>
247 std::shared_ptr<Payload> sp(std::make_shared<Payload>(
name+i ));
250 CHECK( 2 == data.
size() );
252 std::shared_ptr<Payload> sp(
new Payload(
name+i ));
255 CHECK( 4 == data.
size() );
258template<
class Payload>
263 Payload sp(
name+i );
266 CHECK( 2 == data.
size() );
268 Payload sp(
name+i );
271 CHECK( 4 == data.
size() );
274template<
class Payload>
279 Payload sp(
name+i );
282 CHECK( 2 == data.
size() );
284 Payload sp(
name+i );
287 CHECK( 4 == data.
size() );
291#define CHECK_TRAITS 0
293template<
class Cont >
297 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",
300 std::is_trivially_copyable_v<typename Cont::value_type>,
311 printf(
"\nContainer Type %s (!darray, a cow %d); size %d bytes\n",
316template<
class Payload>
326 CHECK(
true == std::is_trivially_copyable<Payload>::value);
332 size_t sz0 = data.
payload.size();
334 CHECK( sz0 == data.
payload.capacity() );
337 Payload def_value(1);
340 CHECK( 0 == data2.
payload.size() );
341 CHECK( 0 == data2.
payload.capacity() );
344 CHECK( 0 == data2.
payload.size() );
345 CHECK( 2 == data2.
payload.capacity() );
346 data2.
payload.resize(2, def_value);
348 CHECK( 2 == data2.
payload.size() );
349 CHECK( 2 == data2.
payload.capacity() );
350 for(Payload p : data2.
payload) {
351 CHECK(def_value == p);
353 data2.
payload.resize(4, def_value);
355 CHECK( 4 == data2.
payload.size() );
356 CHECK( 4 == data2.
payload.capacity() );
357 for(Payload p : data2.
payload) {
358 CHECK(def_value == p);
363 CHECK( 3 == data2.
payload.size() );
364 CHECK( sz0 == data2.
payload.capacity() );
368 CHECK( 3 == data2.
payload.size() );
369 CHECK( 3 == data2.
payload.capacity() );
372 Payload def_value(1);
375 CHECK( sz0 == data2.
payload.size() );
376 CHECK( sz0 == data2.
payload.capacity() );
379 CHECK( sz0-1 == data2.
payload.size() );
380 CHECK( sz0 == data2.
payload.capacity() );
381 data2.
payload.resize(sz0, def_value);
383 CHECK( sz0 == data2.
payload.size() );
384 CHECK( sz0 == data2.
payload.capacity() );
386 for(Payload p : data2.
payload) {
388 CHECK(def_value != p);
390 CHECK(def_value == p);
393 data2.
payload.resize(sz0*2, def_value);
395 CHECK( sz0*2 == data2.
payload.size() );
396 CHECK( sz0*2 == data2.
payload.capacity() );
398 for(Payload p : data2.
payload) {
400 CHECK(def_value != p);
402 CHECK(def_value == p);
407 Payload def_value(1);
410 CHECK( sz0 == data3.
payload.size() );
411 CHECK( sz0 == data3.
payload.capacity() );
414 CHECK( sz0/2 == data3.
payload.size() );
415 CHECK( sz0 == data3.
payload.capacity() );
416 data3.
payload.resize(sz0, def_value);
418 CHECK( sz0 == data3.
payload.size() );
419 CHECK( sz0 == data3.
payload.capacity() );
421 for(Payload p : data3.
payload) {
423 CHECK(def_value != p);
425 CHECK(def_value == p);
428 data3.
payload.resize(sz0*2, def_value);
430 CHECK( sz0*2 == data3.
payload.size() );
431 CHECK( sz0*2 == data3.
payload.capacity() );
433 for(Payload p : data3.
payload) {
435 CHECK(def_value != p);
437 CHECK(def_value == p);
443 CHECK( sz0 == data8.
payload.size() );
445 CHECK( 2*sz0 == data8.
payload.size() );
453 CHECK(
true == std::is_trivially_copyable<Payload>::value);
478 CHECK(
true == std::is_trivially_copyable<std::shared_ptr<Payload>>
::value);
508 Holder holder{ data };
518 r1r1 = holder.get_ref2();
525 CHECK(
true == std::is_trivially_copyable<std::shared_ptr<Payload>>
::value);
555 CHECK(
true == GattCharacteristicSpecList::uses_realloc);
557 CHECK(
true == GattCharacteristicSpecList::uses_memmove);
558 CHECK(
true == std::is_trivially_copyable<GattCharacteristicSpec>::value);
577TEST_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'.
std::string to_string(const endian_t v) noexcept
Return std::string representation of the given endian.
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 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.