27#include <jau/test/catch2_ext.hpp>
51TEST_CASE(
"JAU DArray Test 01 - jau::darray initializer list",
"[datatype][jau][darray]" ) {
80TEST_CASE(
"JAU DArray Test 02 - jau::darray immutable type (const)",
"[const][jau][darray]" ) {
117template<
class Payload>
121template<
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())+
": ";
146template<
class Payload>
152 std::string res =
"NSPL-MemMove-"+std::to_string(
name)+
"[sz "+std::to_string(
payload.size())+
"/"+std::to_string(
payload.capacity())+
": ";
167template<
class Payload>
171template<
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())+
": ";
196template<
class Payload>
202 std::string res =
"NPL-MemMove-"+std::to_string(
name)+
"[sz "+std::to_string(
payload.size())+
"/"+std::to_string(
payload.capacity())+
": ";
217template<
class Payload>
222 std::shared_ptr<Payload> sp(std::make_shared<Payload>(
name+i ));
225 CHECK( 2 == data.
size() );
227 std::shared_ptr<Payload> sp(
new Payload(
name+i ));
230 CHECK( 4 == data.
size() );
233template<
class Payload>
236 const size_t sz0 = src.
payload.size();
239 CHECK( sz0 - 2 == src.
payload.size() );
244template<
class Payload>
249 std::shared_ptr<Payload> sp(std::make_shared<Payload>(
name+i ));
252 CHECK( 2 == data.
size() );
254 std::shared_ptr<Payload> sp(
new Payload(
name+i ));
257 CHECK( 4 == data.
size() );
260template<
class Payload>
265 Payload sp(
name+i );
268 CHECK( 2 == data.
size() );
270 Payload sp(
name+i );
273 CHECK( 4 == data.
size() );
276template<
class Payload>
281 Payload sp(
name+i );
284 CHECK( 2 == data.
size() );
286 Payload sp(
name+i );
289 CHECK( 4 == data.
size() );
301#define CHECK_TRAITS 0
303template<
class Cont >
307 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",
310 std::is_trivially_copyable_v<typename Cont::value_type>,
321 printf(
"\nContainer Type %s (!darray, a cow %d); size %d bytes\n",
326template<
class Payload>
336 CHECK(
true == std::is_trivially_copyable<Payload>::value);
342 size_t sz0 = data.
payload.size();
344 CHECK( sz0 == data.
payload.capacity() );
347 Payload def_value(1);
350 CHECK( 0 == data2.
payload.size() );
351 CHECK( 0 == data2.
payload.capacity() );
354 CHECK( 0 == data2.
payload.size() );
355 CHECK( 2 == data2.
payload.capacity() );
356 data2.
payload.resize(2, def_value);
358 CHECK( 2 == data2.
payload.size() );
359 CHECK( 2 == data2.
payload.capacity() );
360 for(Payload p : data2.
payload) {
361 CHECK(def_value == p);
363 data2.
payload.resize(4, def_value);
365 CHECK( 4 == data2.
payload.size() );
366 CHECK( 4 == data2.
payload.capacity() );
367 for(Payload p : data2.
payload) {
368 CHECK(def_value == p);
373 CHECK( 3 == data2.
payload.size() );
374 CHECK( sz0 == data2.
payload.capacity() );
378 CHECK( 3 == data2.
payload.size() );
379 CHECK( 3 == data2.
payload.capacity() );
382 Payload def_value(1);
385 CHECK( sz0 == data2.
payload.size() );
386 CHECK( sz0 == data2.
payload.capacity() );
389 CHECK( sz0-1 == data2.
payload.size() );
390 CHECK( sz0 == data2.
payload.capacity() );
391 data2.
payload.resize(sz0, def_value);
393 CHECK( sz0 == data2.
payload.size() );
394 CHECK( sz0 == data2.
payload.capacity() );
396 for(Payload p : data2.
payload) {
398 CHECK(def_value != p);
400 CHECK(def_value == p);
403 data2.
payload.resize(sz0*2, def_value);
405 CHECK( sz0*2 == data2.
payload.size() );
406 CHECK( sz0*2 == data2.
payload.capacity() );
408 for(Payload p : data2.
payload) {
410 CHECK(def_value != p);
412 CHECK(def_value == p);
417 Payload def_value(1);
420 CHECK( sz0 == data3.
payload.size() );
421 CHECK( sz0 == data3.
payload.capacity() );
424 CHECK( sz0/2 == data3.
payload.size() );
425 CHECK( sz0 == data3.
payload.capacity() );
426 data3.
payload.resize(sz0, def_value);
428 CHECK( sz0 == data3.
payload.size() );
429 CHECK( sz0 == data3.
payload.capacity() );
431 for(Payload p : data3.
payload) {
433 CHECK(def_value != p);
435 CHECK(def_value == p);
438 data3.
payload.resize(sz0*2, def_value);
440 CHECK( sz0*2 == data3.
payload.size() );
441 CHECK( sz0*2 == data3.
payload.capacity() );
443 for(Payload p : data3.
payload) {
445 CHECK(def_value != p);
447 CHECK(def_value == p);
453 CHECK( sz0 == data8.
payload.size() );
455 CHECK( 2*sz0 == data8.
payload.size() );
463 CHECK(
true == std::is_trivially_copyable<Payload>::value);
488 CHECK(
true == std::is_trivially_copyable<std::shared_ptr<Payload>>
::value);
518 Holder holder{ data };
528 r1r1 = holder.get_ref2();
535 CHECK(
true == std::is_trivially_copyable<std::shared_ptr<Payload>>
::value);
565 CHECK(
true == GattCharacteristicSpecList::uses_realloc);
567 CHECK(
true == GattCharacteristicSpecList::uses_memmove);
568 CHECK(
true == std::is_trivially_copyable<GattCharacteristicSpec>::value);
587TEST_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
#define JAU_TYPENAME_CUE_ALL(A)
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 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.