aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/ryml/ext/c4core/test
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2026-02-23 11:19:52 +0100
committerGitHub Enterprise <[email protected]>2026-02-23 11:19:52 +0100
commit9aac0fd369b87e965fb34b5168646387de7ea1cd (patch)
tree367a820685a829adbab31cd1374b1af2cece4b7e /thirdparty/ryml/ext/c4core/test
parentchanged command names and descriptions to use class members instead of string... (diff)
downloadzen-9aac0fd369b87e965fb34b5168646387de7ea1cd.tar.xz
zen-9aac0fd369b87e965fb34b5168646387de7ea1cd.zip
implement yaml generation (#774)
this implements a yaml generation strategy similar to the JSON generation where we just build a string instead of building a ryml tree. This also removes the dependency on ryml for reduced binary/build times.
Diffstat (limited to 'thirdparty/ryml/ext/c4core/test')
-rw-r--r--thirdparty/ryml/ext/c4core/test/c4/libtest/archetypes.cpp9
-rw-r--r--thirdparty/ryml/ext/c4core/test/c4/libtest/archetypes.hpp551
-rw-r--r--thirdparty/ryml/ext/c4core/test/c4/libtest/supprwarn_pop.hpp12
-rw-r--r--thirdparty/ryml/ext/c4core/test/c4/libtest/supprwarn_push.hpp48
-rw-r--r--thirdparty/ryml/ext/c4core/test/c4/libtest/test.cpp7
-rw-r--r--thirdparty/ryml/ext/c4core/test/c4/main.cpp3
-rw-r--r--thirdparty/ryml/ext/c4core/test/c4/test.hpp324
-rw-r--r--thirdparty/ryml/ext/c4core/test/printintegers.py107
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_allocator.cpp246
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_base64.cpp265
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_bitmask.cpp385
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_blob.cpp43
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_char_traits.cpp67
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_charconv.cpp2743
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_ctor_dtor.cpp306
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_dump.cpp1220
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_enum.cpp158
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_enum_common.hpp213
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_error.cpp635
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_error_exception.cpp108
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_format.cpp1054
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_log.cpp70
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_memory_resource.cpp255
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_memory_util.cpp415
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_numbers.hpp1863
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_preprocessor.cpp55
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_singleheader/libc4core_singleheader.cpp2
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_span.cpp944
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_std_string.cpp125
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_std_vector.cpp133
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_substr.cpp4507
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_szconv.cpp166
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_type_name.cpp49
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_types.cpp81
-rw-r--r--thirdparty/ryml/ext/c4core/test/test_utf.cpp48
-rw-r--r--thirdparty/ryml/ext/c4core/test/utfchars.inc6274
36 files changed, 0 insertions, 23491 deletions
diff --git a/thirdparty/ryml/ext/c4core/test/c4/libtest/archetypes.cpp b/thirdparty/ryml/ext/c4core/test/c4/libtest/archetypes.cpp
deleted file mode 100644
index 9c4fb4310..000000000
--- a/thirdparty/ryml/ext/c4core/test/c4/libtest/archetypes.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "c4/libtest/archetypes.hpp"
-
-namespace c4 {
-namespace archetypes {
-
-int IdOwner::s_current = 0;
-
-} // namespace archetypes
-} // namespace c4
diff --git a/thirdparty/ryml/ext/c4core/test/c4/libtest/archetypes.hpp b/thirdparty/ryml/ext/c4core/test/c4/libtest/archetypes.hpp
deleted file mode 100644
index 87a4644e9..000000000
--- a/thirdparty/ryml/ext/c4core/test/c4/libtest/archetypes.hpp
+++ /dev/null
@@ -1,551 +0,0 @@
-#ifndef _C4_TEST_ARCHETYPES_HPP_
-#define _C4_TEST_ARCHETYPES_HPP_
-
-#ifdef C4CORE_SINGLE_HEADER
-#include "c4/c4core_all.hpp"
-#else
-#include "c4/memory_resource.hpp"
-#include "c4/allocator.hpp"
-#include "c4/char_traits.hpp"
-#endif
-#include "c4/test.hpp"
-
-#include <vector>
-#include <string>
-#include <array>
-
-namespace c4 {
-
-template< class String > class sstream;
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-namespace archetypes {
-
-template< class T > void check_archetype(T const& a) { a.check(); }
-template< class T > void check_archetype(T const& a, T const& ref) { a.check(ref); }
-inline void check_archetype(char ) {}
-inline void check_archetype(wchar_t ) {}
-inline void check_archetype(int8_t ) {}
-inline void check_archetype(uint8_t ) {}
-inline void check_archetype(int16_t ) {}
-inline void check_archetype(uint16_t) {}
-inline void check_archetype(int32_t ) {}
-inline void check_archetype(uint32_t) {}
-inline void check_archetype(int64_t ) {}
-inline void check_archetype(uint64_t) {}
-inline void check_archetype(float ) {}
-inline void check_archetype(double ) {}
-inline void check_archetype(char a, char ref) { CHECK_EQ(a, ref); }
-inline void check_archetype(wchar_t a, wchar_t ref) { CHECK_EQ(a, ref); }
-inline void check_archetype(int8_t a, int8_t ref) { CHECK_EQ(a, ref); }
-inline void check_archetype(uint8_t a, uint8_t ref) { CHECK_EQ(a, ref); }
-inline void check_archetype(int16_t a, int16_t ref) { CHECK_EQ(a, ref); }
-inline void check_archetype(uint16_t a, uint16_t ref) { CHECK_EQ(a, ref); }
-inline void check_archetype(int32_t a, int32_t ref) { CHECK_EQ(a, ref); }
-inline void check_archetype(uint32_t a, uint32_t ref) { CHECK_EQ(a, ref); }
-inline void check_archetype(int64_t a, int64_t ref) { CHECK_EQ(a, ref); }
-inline void check_archetype(uint64_t a, uint64_t ref) { CHECK_EQ(a, ref); }
-inline void check_archetype(float a, float ref) { CHECK_EQ((double)a, doctest::Approx((double)ref)); }
-inline void check_archetype(double a, double ref) { CHECK_EQ(a, doctest::Approx(ref)); }
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-template< class T, class Proto >
-struct archetype_proto_base
-{
- static T const& get(size_t which)
- {
- auto const& a = Proto::arr();
- C4_ASSERT(which < (int)a.size());
- return a[which];
- }
- static std::array< T, 8 > dup()
- {
- std::array< T, 8 > d = Proto::arr;
- return d;
- }
- static std::array< Counting<T>, 8 > cdup()
- {
- std::array< Counting<T>, 8 > d = Proto::carr;
- return d;
- }
- static std::vector< T > dup(size_t n)
- {
- auto const& a = Proto::arr();
- std::vector< T > d;
- d.reserve(n);
- for(size_t i = 0, pos = 0; i < n; ++i, pos = ((pos+1)%a.size()))
- {
- d.push_back(a[pos]);
- }
- return d;
- }
- static std::vector< Counting<T> > cdup(size_t n)
- {
- auto const& a = Proto::arr();
- std::vector< Counting<T> > d;
- d.reserve(n);
- for(size_t i = 0, pos = 0; i < n; ++i, pos = ((pos+1)%a.size()))
- {
- d.push_back(a[pos]);
- }
- return d;
- }
-};
-
-#ifdef __clang__
-# pragma clang diagnostic push
-# pragma clang diagnostic ignored "-Wmissing-braces" // warning : suggest braces around initialization of subobject [-Wmissing-braces]
-#endif
-
-// for scalar types: ints and floats
-template< class T >
-struct archetype_proto : public archetype_proto_base< T, archetype_proto<T> >
-{
- static_assert(std::is_fundamental< T >::value, "T must be a fundamental type");
- static std::array<T, 8> const& arr()
- {
- static const std::array<T, 8> arr_{0, 1, 2, 3, 4, 5, 6, 7};
- return arr_;
- }
- static std::array<Counting<T>, 8> const& carr()
- {
- static const std::array<Counting<T>, 8> arr_ = {0, 1, 2, 3, 4, 5, 6, 7};
- return arr_;
- }
- static std::initializer_list< T > il()
- {
- static const std::initializer_list< T > l{0, 1, 2, 3, 4, 5, 6, 7};
- return l;
- }
- static std::initializer_list< Counting<T> > cil()
- {
- static const std::initializer_list< Counting<T> > l = {0, 1, 2, 3, 4, 5, 6, 7};
- C4_ASSERT(l.size() == 8);
- return l;
- }
-};
-
-#define _C4_DECLARE_ARCHETYPE_PROTO(ty, ...) \
-template<> \
-struct archetype_proto<ty> : public archetype_proto_base< ty, archetype_proto<ty> > \
-{ \
- static std::array<ty, 8> const& arr() \
- { \
- static const std::array<ty, 8> arr_{__VA_ARGS__}; \
- return arr_; \
- } \
- static std::array<Counting<ty>, 8> const& carr() \
- { \
- static const std::array<Counting<ty>, 8> arr_{__VA_ARGS__}; \
- return arr_; \
- } \
- static std::initializer_list< ty > il() \
- { \
- static const std::initializer_list< ty > l{__VA_ARGS__}; \
- return l; \
- } \
- static std::initializer_list< Counting<ty> > cil() \
- { \
- static const std::initializer_list< Counting<ty> > l{__VA_ARGS__}; \
- return l; \
- } \
-}
-
-#define _C4_DECLARE_ARCHETYPE_PROTO_TPL1(tplparam1, ty, ...) \
-template< tplparam1 > \
-struct archetype_proto< ty > : public archetype_proto_base< ty, archetype_proto<ty> > \
-{ \
- static std::array<ty, 8> const& arr() \
- { \
- static const std::array<ty, 8> arr_{__VA_ARGS__}; \
- return arr_; \
- } \
- static std::array<Counting<ty>, 8> const& carr() \
- { \
- static const std::array<Counting<ty>, 8> arr_{__VA_ARGS__}; \
- return arr_; \
- } \
- static std::initializer_list< ty > il() \
- { \
- static const std::initializer_list< ty > l{__VA_ARGS__}; \
- return l; \
- } \
- static std::initializer_list< Counting<ty> > cil() \
- { \
- static const std::initializer_list< Counting<ty> > l{__VA_ARGS__}; \
- return l; \
- } \
-}
-
-_C4_DECLARE_ARCHETYPE_PROTO(std::string,
- "str0", "str1", "str2", "str3",
- "str4", "str5", "str6", "str7");
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-/** Resource-owning archetype */
-
-template< class T >
-struct exvec3
-{
- T x, y, z;
- bool operator== (exvec3 const& that) const
- {
- return x == that.x && y == that.y && z == that.z;
- }
-};
-template< class String, class T >
-sstream< String >& operator<< (sstream< String >& ss, exvec3<T> const& v)
-{
- using char_type = typename sstream< String >::char_type;
- ss.printp(C4_TXTTY("({},{},{})", char_type), v.x, v.y, v.z);
- return ss;
-}
-template< class String, class T >
-sstream< String >& operator>> (sstream< String >& ss, exvec3<T> & v)
-{
- using char_type = typename sstream< String >::char_type;
- ss.scanp(C4_TXTTY("({},{},{})", char_type), v.x, v.y, v.z);
- return ss;
-}
-
-#define _ C4_COMMA
-#define c4v(v0, v1, v2) exvec3<T>{v0 _ v1 _ v2}
-_C4_DECLARE_ARCHETYPE_PROTO_TPL1(class T, exvec3<T>,
- c4v(0, 1, 2), c4v(3, 4, 5), c4v(6, 7, 8), c4v(9, 10, 11),
- c4v(100, 101, 102), c4v(103, 104, 105), c4v(106, 107, 108), c4v(109, 110, 111)
- );
-#undef c4v
-#undef _
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-/** Resource-owning archetype */
-struct IdOwner
-{
- static int s_current;
- int id;
- int val;
-
- void check() const
- {
- CHECK_UNARY(id > 0);
- }
- void check(IdOwner const& that) const
- {
- check();
- CHECK_NE(id, that.id);
- }
-
- IdOwner(int v = 0) { id = ++s_current; val = v; }
- ~IdOwner() { if(id > 0) --s_current; }
- IdOwner(IdOwner const& that) { id = ++s_current; val = that.val; }
- IdOwner(IdOwner && that) { id = that.id; val = that.val; that.id = 0; }
- IdOwner& operator= (IdOwner const& that) { C4_CHECK(id > 0); --s_current; id = ++s_current; val = that.val; return *this; }
- IdOwner& operator= (IdOwner && that) { C4_CHECK(id > 0); --s_current; id = that.id; val = that.val; that.id = 0; return *this; }
- bool operator== (IdOwner const& that) const
- {
- return val == that.val;
- }
-};
-
-_C4_DECLARE_ARCHETYPE_PROTO(IdOwner, 0, 1, 2, 3, 4, 5, 6, 7);
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-/** Memory-owning archetype, raw mem resource calls */
-template< class T >
-struct MemOwner
-{
- T *mem;
- // prevent initialization order problems by using a memory resource here
- MemoryResourceMalloc mr;
-
- void check() const
- {
- EXPECT_NE(mem, nullptr);
- check_archetype(*mem);
- }
- void check(MemOwner const& that) const
- {
- EXPECT_NE(mem, that.mem);
- }
-
- ~MemOwner()
- {
- if(!mem) return;
- mem->~T();
- mr.deallocate(mem, sizeof(T), alignof(T));
- mem = nullptr;
- }
-
- MemOwner()
- {
- mem = (T*)mr.allocate(sizeof(T), alignof(T));
- new (mem) T();
- }
- template< class ...Args >
- MemOwner(varargs_t, Args && ...args)
- {
- mem = (T*)mr.allocate(sizeof(T), alignof(T));
- new (mem) T(std::forward< Args >(args)...);
- }
- MemOwner(MemOwner const& that)
- {
- mem = (T*)mr.allocate(sizeof(T), alignof(T));
- new (mem) T(*that.mem);
- }
- MemOwner(MemOwner && that)
- {
- mem = that.mem;
- that.mem = nullptr;
- }
- MemOwner& operator= (MemOwner const& that)
- {
- if(!mem)
- {
- mem = (T*)mr.allocate(sizeof(T), alignof(T));
- }
- else
- {
- mem->~T();
- }
- new (mem) T(*that.mem);
- return *this;
- }
- MemOwner& operator= (MemOwner && that)
- {
- if(mem)
- {
- mem->~T();
- mr.deallocate(mem, sizeof(T), alignof(T));
- }
- mem = that.mem;
- that.mem = nullptr;
- return *this;
- }
- bool operator== (MemOwner const& that) const
- {
- return *mem == *that.mem;
- }
-};
-
-#define _ C4_COMMA
-#define c4v(which) MemOwner<T>{varargs _ archetype_proto<T>::get(which)}
-_C4_DECLARE_ARCHETYPE_PROTO_TPL1(class T, MemOwner<T>,
- c4v(0), c4v(1), c4v(2), c4v(3),
- c4v(4), c4v(5), c4v(6), c4v(7)
- );
-#undef c4v
-#undef _
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-/** Memory-owning archetype, with allocator */
-template< class T >
-struct MemOwnerAlloc
-{
- T *mem;
- // prevent initialization order problems by using a memory resource here
- MemoryResourceMalloc mr;
- c4::Allocator< T > m_alloc;
- using alloc_traits = std::allocator_traits< c4::Allocator< T > >;
-
- void check() const
- {
- EXPECT_NE(mem, nullptr);
- check_archetype(*mem);
- }
- void check(MemOwnerAlloc const& that) const
- {
- check();
- EXPECT_NE(mem, that.mem);
- }
-
- void free()
- {
- alloc_traits::destroy(m_alloc, mem);
- alloc_traits::deallocate(m_alloc, mem, 1);
- mem = nullptr;
- }
- ~MemOwnerAlloc()
- {
- if(!mem) return;
- free();
- }
-
- MemOwnerAlloc() : m_alloc(&mr)
- {
- C4_ASSERT(m_alloc.resource() == &mr);
- mem = alloc_traits::allocate(m_alloc, 1);
- alloc_traits::construct(m_alloc, mem);
- }
- template< class ...Args >
- MemOwnerAlloc(varargs_t, Args && ...args) : m_alloc(&mr)
- {
- mem = alloc_traits::allocate(m_alloc, 1);
- alloc_traits::construct(m_alloc, mem, std::forward< Args >(args)...);
- }
-
- MemOwnerAlloc(MemOwnerAlloc const& that) : m_alloc(&mr)
- {
- mem = alloc_traits::allocate(m_alloc, 1);
- alloc_traits::construct(m_alloc, mem, *that.mem);
- }
- MemOwnerAlloc(MemOwnerAlloc && that) : m_alloc(&mr)
- {
- mem = that.mem;
- that.mem = nullptr;
- }
-
- MemOwnerAlloc& operator= (MemOwnerAlloc const& that)
- {
- if(!mem)
- {
- mem = alloc_traits::allocate(m_alloc, 1);
- }
- else
- {
- mem->~T();
- }
- alloc_traits::construct(m_alloc, mem, *that.mem);
- return *this;
- }
- MemOwnerAlloc& operator= (MemOwnerAlloc && that)
- {
- if(mem)
- {
- free();
- }
- mem = that.mem;
- that.mem = nullptr;
- return *this;
- }
-
- bool operator== (MemOwnerAlloc const& that) const
- {
- return *mem == *that.mem;
- }
-};
-
-#define _ C4_COMMA
-#define c4v(which) MemOwnerAlloc<T>{varargs _ archetype_proto<T>::get(which)}
-_C4_DECLARE_ARCHETYPE_PROTO_TPL1(class T, MemOwnerAlloc<T>,
- c4v(0), c4v(1), c4v(2), c4v(3),
- c4v(4), c4v(5), c4v(6), c4v(7)
- );
-#undef c4v
-#undef _
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-/** base class archetype */
-struct Base
-{
- virtual ~Base() = default;
-protected:
- Base() = default;
-};
-/** derived class archetype */
-struct Derived : public Base
-{
-
-};
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-template< class T >
-struct InsidePtr
-{
- T a;
- T b;
- T c;
- T *ptr;
-
- InsidePtr(int which = 0) : a(), b(), c(), ptr(&a + (which % 3)) {}
- InsidePtr(InsidePtr const& that) : a(that.a), b(that.b), c(that.c), ptr(&a + (that.ptr - &that.a)) {}
- InsidePtr(InsidePtr && that) : a(std::move(that.a)), b(std::move(that.b)), c(std::move(that.c)), ptr(&a + (that.ptr - &that.a)) { that.ptr = nullptr; }
- InsidePtr& operator= (InsidePtr const& that) { a = (that.a); b = (that.b); c = (that.c); ptr = (&a + (that.ptr - &that.a)); return *this; }
- InsidePtr& operator= (InsidePtr && that) { a = std::move(that.a); b = std::move(that.b); c = std::move(that.c); ptr = (&a + (that.ptr - &that.a)); that.ptr = nullptr; return *this; }
- ~InsidePtr() { EXPECT_TRUE(ptr == &a || ptr == &b || ptr == &c || ptr == nullptr); }
-
- void check() const
- {
- EXPECT_TRUE(ptr == &a || ptr == &b || ptr == &c);
- }
- void check(InsidePtr const& that) const
- {
- check();
- EXPECT_EQ(ptr - &a, that.ptr - &that.a);
- }
- bool operator== (InsidePtr const& that) const
- {
- return that.a == a && that.b == b && that.c == c && (ptr - &a) == (that.ptr - &that.a);
- }
-
-};
-
-#define _ C4_COMMA
-_C4_DECLARE_ARCHETYPE_PROTO_TPL1(class T, InsidePtr<T>,
- 0, 1, 2, 3, 4, 5, 6, 7
- );
-#undef _
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-# define CALL_FOR_SCALAR_ARCHETYPES(mcr) \
- mcr(int , int) \
- mcr(uint64_t , uint64_t)
-
-# define CALL_FOR_CONTAINEE_ARCHETYPES(mcr) \
- CALL_FOR_SCALAR_ARCHETYPES(mcr) \
- mcr(MemOwnerAlloc_std_string , archetypes::MemOwnerAlloc<std::string>)
-
-
-
-using scalars_quick = std::tuple<int, uint64_t>;
-using scalars = std::tuple<
- char, wchar_t, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t, float, double
->;
-using containees_quick = std::tuple<
- int,
- uint64_t,
- archetypes::MemOwnerAlloc<std::string>
->;
-using containees = std::tuple<
- char, wchar_t, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t, float, double,
- archetypes::exvec3<int>,
- archetypes::exvec3<float>,
- archetypes::IdOwner,
- archetypes::MemOwner<int>,
- archetypes::MemOwner<std::string>,
- archetypes::MemOwnerAlloc<int>,
- archetypes::MemOwnerAlloc<std::string>,
- archetypes::InsidePtr<int>,
- archetypes::InsidePtr<std::string>
->;
-
-
-#ifdef __clang__
-# pragma clang diagnostic pop
-#endif
-
-} // namespace archetypes
-} // namespace c4
-
-#endif // _C4_TEST_ARCHETYPES_HPP_
diff --git a/thirdparty/ryml/ext/c4core/test/c4/libtest/supprwarn_pop.hpp b/thirdparty/ryml/ext/c4core/test/c4/libtest/supprwarn_pop.hpp
deleted file mode 100644
index 695035ef6..000000000
--- a/thirdparty/ryml/ext/c4core/test/c4/libtest/supprwarn_pop.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef _C4_SUPPRWARN_POP_HPP_
-#define _C4_SUPPRWARN_POP_HPP_
-
-#ifdef __clang__
-# pragma clang diagnostic pop
-#elif defined(__GNUC__)
-# pragma GCC diagnostic pop
-#elif defined(_MSC_VER)
-# pragma warning(pop)
-#endif
-
-#endif /* SUPPRWARN_POP_H */
diff --git a/thirdparty/ryml/ext/c4core/test/c4/libtest/supprwarn_push.hpp b/thirdparty/ryml/ext/c4core/test/c4/libtest/supprwarn_push.hpp
deleted file mode 100644
index 4651e227c..000000000
--- a/thirdparty/ryml/ext/c4core/test/c4/libtest/supprwarn_push.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef _C4_LIBTEST_SUPPRWARN_PUSH_HPP_
-#define _C4_LIBTEST_SUPPRWARN_PUSH_HPP_
-
-/** @file supprwarn_push.hpp this file contains directives to make the
- * compiler ignore warnings in test code. It should NOT be used for c4stl
- * itself, but only in test code. */
-
-#ifdef __clang__
-# pragma clang diagnostic push
- /* NOTE: using , ## __VA_ARGS__ to deal with zero-args calls to
- * variadic macros is not portable, but works in clang, gcc, msvc, icc.
- * clang requires switching off compiler warnings for pedantic mode.
- * @see http://stackoverflow.com/questions/32047685/variadic-macro-without-arguments */
-# pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments" // warning: token pasting of ',' and __VA_ARGS__ is a GNU extension
-# pragma clang diagnostic ignored "-Wunused-local-typedef"
-# pragma clang diagnostic ignored "-Wsign-compare" // warning: comparison of integers of different signs: 'const unsigned long' and 'const int'
-# pragma clang diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe
-# pragma clang diagnostic ignored "-Wwritable-strings" // ISO C++11 does not allow conversion from string literal to char*
-# pragma clang diagnostic ignored "-Wunused-variable"
-# pragma clang diagnostic ignored "-Wunused-parameter"
-#elif defined(__GNUC__)
-# pragma GCC diagnostic push
- /* GCC also issues a warning for zero-args calls to variadic macros.
- * This warning is switched on with -pedantic and apparently there is no
- * easy way to turn it off as with clang. But marking this as a system
- * header works.
- * @see https://gcc.gnu.org/onlinedocs/cpp/System-Headers.html
- * @see http://stackoverflow.com/questions/35587137/ */
-# pragma GCC system_header
-# pragma GCC diagnostic ignored "-Wvariadic-macros"
-# pragma GCC diagnostic ignored "-Wwrite-strings" // ISO C++ forbids converting a string constant to โ€˜C* {aka char*}โ€™
-# pragma GCC diagnostic ignored "-Wunused-local-typedefs"
-# pragma GCC diagnostic ignored "-Wunused-variable"
-# pragma GCC diagnostic ignored "-Wunused-parameter"
-# pragma GCC diagnostic ignored "-Wsign-compare" // warning: comparison of integers of different signs: 'const unsigned long' and 'const int'
-# pragma GCC diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe
-# pragma GCC diagnostic ignored "-Wpedantic"
-# pragma GCC diagnostic ignored "-pedantic"
-#elif defined(_MSC_VER)
-# pragma warning(push)
-# pragma warning(disable:4018) // '>=': signed/unsigned mismatch
-# pragma warning(disable:4127) // conditional expression is constant
-# pragma warning(disable:4189) // local variable is initialized but not referenced
-# pragma warning(disable:4389) // '==': signed/unsigned mismatch
-# pragma warning(disable:4702) // unreachable code
-#endif
-
-#endif /* _C4_LIBTEST_SUPPRWARN_PUSH_HPP_ */
diff --git a/thirdparty/ryml/ext/c4core/test/c4/libtest/test.cpp b/thirdparty/ryml/ext/c4core/test/c4/libtest/test.cpp
deleted file mode 100644
index f005d24ac..000000000
--- a/thirdparty/ryml/ext/c4core/test/c4/libtest/test.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "c4/test.hpp"
-
-namespace c4 {
-
-size_t TestErrorOccurs::num_errors = 0;
-
-} // namespace c4
diff --git a/thirdparty/ryml/ext/c4core/test/c4/main.cpp b/thirdparty/ryml/ext/c4core/test/c4/main.cpp
deleted file mode 100644
index 36c8001e6..000000000
--- a/thirdparty/ryml/ext/c4core/test/c4/main.cpp
+++ /dev/null
@@ -1,3 +0,0 @@
-#define DOCTEST_CONFIG_SUPER_FAST_ASSERTS
-#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
-#include <doctest/doctest.h>
diff --git a/thirdparty/ryml/ext/c4core/test/c4/test.hpp b/thirdparty/ryml/ext/c4core/test/c4/test.hpp
deleted file mode 100644
index 936283a2a..000000000
--- a/thirdparty/ryml/ext/c4core/test/c4/test.hpp
+++ /dev/null
@@ -1,324 +0,0 @@
-#ifndef _C4_TEST_HPP_
-#define _C4_TEST_HPP_
-
-#ifdef C4CORE_SINGLE_HEADER
-#include "c4/c4core_all.hpp"
-#else
-#include "c4/config.hpp"
-#include "c4/memory_resource.hpp"
-#include "c4/allocator.hpp"
-#include "c4/substr.hpp"
-#endif
-#include <cstdio>
-#include <iostream>
-
-// FIXME - these are just dumb placeholders
-#define C4_LOGF_ERR(...) fprintf(stderr, __VA_ARGS__)
-#define C4_LOGF_WARN(...) fprintf(stderr, __VA_ARGS__)
-#define C4_LOGP(msg, ...) printf(msg)
-
-#define DOCTEST_CONFIG_SUPER_FAST_ASSERTS
-#include <doctest/doctest.h>
-
-#define CHECK_STREQ(lhs, rhs) CHECK_EQ(c4::to_csubstr(lhs), c4::to_csubstr(rhs))
-#define CHECK_FLOAT_EQ(lhs, rhs) CHECK((double)(lhs) == doctest::Approx((double)(rhs)))
-
-
-namespace c4 {
-
-template<class C>
-inline std::ostream& operator<< (std::ostream& stream, c4::basic_substring<C> s)
-{
- stream.write(s.str, std::streamsize(s.len));
- return stream;
-}
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-/** RAII class that tests whether an error occurs inside a scope. */
-struct TestErrorOccurs
-{
- TestErrorOccurs(size_t num_expected_errors = 1)
- :
- expected_errors(num_expected_errors),
- tmp_settings(c4::ON_ERROR_CALLBACK, &TestErrorOccurs::error_callback)
- {
- num_errors = 0;
- }
- ~TestErrorOccurs()
- {
- CHECK_EQ(num_errors, expected_errors);
- num_errors = 0;
- }
-
- size_t expected_errors;
- static size_t num_errors;
- ScopedErrorSettings tmp_settings;
- static void error_callback(const char* /*msg*/, size_t /*msg_size*/)
- {
- ++num_errors;
- }
-};
-
-#define C4_EXPECT_ERROR_OCCURS(...) \
- auto _testerroroccurs##__LINE__ = TestErrorOccurs(__VA_ARGS__)
-
-#if C4_USE_ASSERT
-# define C4_EXPECT_ASSERT_TRIGGERS(...) C4_EXPECT_ERROR_OCCURS(__VA_ARGS__)
-#else
-# define C4_EXPECT_ASSERT_TRIGGERS(...)
-#endif
-
-#if C4_USE_XASSERT
-# define C4_EXPECT_XASSERT_TRIGGERS(...) C4_EXPECT_ERROR_OCCURS(__VA_ARGS__)
-#else
-# define C4_EXPECT_XASSERT_TRIGGERS(...)
-#endif
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-/** count constructors, destructors and assigns */
-template< class T >
-struct Counting
-{
- using value_type = T;
-
- T obj;
-
- bool operator== (T const& that) const { return obj == that; }
-
- static bool log_ctors;
- static size_t num_ctors;
- template< class ...Args >
- Counting(Args && ...args);
-
- static bool log_dtors;
- static size_t num_dtors;
- ~Counting();
-
- static bool log_copy_ctors;
- static size_t num_copy_ctors;
- Counting(Counting const& that);
-
- static bool log_move_ctors;
- static size_t num_move_ctors;
- Counting(Counting && that);
-
- static bool log_copy_assigns;
- static size_t num_copy_assigns;
- Counting& operator= (Counting const& that);
-
- static bool log_move_assigns;
- static size_t num_move_assigns;
- Counting& operator= (Counting && that);
-
-
- struct check_num
- {
- char const* name;
- size_t const& what;
- size_t const initial;
- size_t const must_be_num;
- check_num(char const* nm, size_t const& w, size_t n) : name(nm), what(w), initial(what), must_be_num(n) {}
- ~check_num()
- {
- size_t del = what - initial;
- INFO("# of " << name << " calls: expected " << must_be_num << ", but got " << del);
- CHECK_EQ(del, must_be_num);
- }
- };
-
- static check_num check_ctors(size_t n) { return check_num("ctor", num_ctors, n); }
- static check_num check_dtors(size_t n) { return check_num("dtor", num_dtors, n); }
- static check_num check_copy_ctors(size_t n) { return check_num("copy_ctor", num_copy_ctors, n); }
- static check_num check_move_ctors(size_t n) { return check_num("move_ctor", num_move_ctors, n); }
- static check_num check_copy_assigns(size_t n) { return check_num("copy_assign", num_copy_assigns, n); }
- static check_num check_move_assigns(size_t n) { return check_num("move_assign", num_move_assigns, n); }
-
- struct check_num_ctors_dtors
- {
- check_num ctors, dtors;
- check_num_ctors_dtors(size_t _ctors, size_t _dtors)
- :
- ctors(check_ctors(_ctors)),
- dtors(check_dtors(_dtors))
- {
- }
- };
- static check_num_ctors_dtors check_ctors_dtors(size_t _ctors, size_t _dtors)
- {
- return check_num_ctors_dtors(_ctors, _dtors);
- }
-
- struct check_num_all
- {
- check_num ctors, dtors, cp_ctors, mv_ctors, cp_assigns, mv_assigns;
- check_num_all(size_t _ctors, size_t _dtors, size_t _cp_ctors, size_t _mv_ctors, size_t _cp_assigns, size_t _mv_assigns)
- {
- ctors = check_ctors(_ctors);
- dtors = check_dtors(_dtors);
- cp_ctors = check_copy_ctors(_cp_ctors);
- mv_ctors = check_move_ctors(_mv_ctors);
- cp_assigns = check_copy_assigns(_cp_assigns);
- mv_assigns = check_move_assigns(_mv_assigns);
- }
- };
- static check_num_all check_all(size_t _ctors, size_t _dtors, size_t _cp_ctors, size_t _move_ctors, size_t _cp_assigns, size_t _mv_assigns)
- {
- return check_num_all(_ctors, _dtors, _cp_ctors, _move_ctors, _cp_assigns, _mv_assigns);
- }
-
- static void reset()
- {
- num_ctors = 0;
- num_dtors = 0;
- num_copy_ctors = 0;
- num_move_ctors = 0;
- num_copy_assigns = 0;
- num_move_assigns = 0;
- }
-};
-
-template< class T > size_t Counting< T >::num_ctors = 0;
-template< class T > bool Counting< T >::log_ctors = false;
-template< class T > size_t Counting< T >::num_dtors = 0;
-template< class T > bool Counting< T >::log_dtors = false;
-template< class T > size_t Counting< T >::num_copy_ctors = 0;
-template< class T > bool Counting< T >::log_copy_ctors = false;
-template< class T > size_t Counting< T >::num_move_ctors = 0;
-template< class T > bool Counting< T >::log_move_ctors = false;
-template< class T > size_t Counting< T >::num_copy_assigns = 0;
-template< class T > bool Counting< T >::log_copy_assigns = false;
-template< class T > size_t Counting< T >::num_move_assigns = 0;
-template< class T > bool Counting< T >::log_move_assigns = false;
-
-template< class T >
-template< class ...Args >
-Counting< T >::Counting(Args && ...args) : obj(std::forward< Args >(args)...)
-{
- if(log_ctors) C4_LOGP("Counting[{}]::ctor #{}\n", (void*)this, num_ctors);
- ++num_ctors;
-}
-
-template< class T >
-Counting< T >::~Counting()
-{
- if(log_dtors) C4_LOGP("Counting[{}]::dtor #{}\n", (void*)this, num_dtors);
- ++num_dtors;
-}
-
-template< class T >
-Counting< T >::Counting(Counting const& that) : obj(that.obj)
-{
- if(log_copy_ctors) C4_LOGP("Counting[{}]::copy_ctor #{}\n", (void*)this, num_copy_ctors);
- ++num_copy_ctors;
-}
-
-template< class T >
-Counting< T >::Counting(Counting && that) : obj(std::move(that.obj))
-{
- if(log_move_ctors) C4_LOGP("Counting[{}]::move_ctor #{}\n", (void*)this, num_move_ctors);
- ++num_move_ctors;
-}
-
-template< class T >
-Counting< T >& Counting< T >::operator= (Counting const& that)
-{
- obj = that.obj;
- if(log_copy_assigns) C4_LOGP("Counting[{}]::copy_assign #{}\n", (void*)this, num_copy_assigns);
- ++num_copy_assigns;
- return *this;
-}
-
-template< class T >
-Counting< T >& Counting< T >::operator= (Counting && that)
-{
- obj = std::move(that.obj);
- if(log_move_assigns) C4_LOGP("Counting[{}]::move_assign #{}\n", (void*)this, num_move_assigns);
- ++num_move_assigns;
- return *this;
-}
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-/** @todo refactor to use RAII @see Counting */
-struct AllocationCountsChecker : public ScopedMemoryResourceCounts
-{
- AllocationCounts first;
-
-public:
-
- AllocationCountsChecker()
- :
- ScopedMemoryResourceCounts(),
- first(mr.counts())
- {
- }
-
- AllocationCountsChecker(MemoryResource *mr_)
- :
- ScopedMemoryResourceCounts(mr_),
- first(mr.counts())
- {
- }
-
- void reset()
- {
- first = mr.counts();
- }
-
- /** check value of curr allocations and size */
- void check_curr(ssize_t expected_allocs, ssize_t expected_size) const
- {
- CHECK_EQ(mr.counts().curr.allocs, expected_allocs);
- CHECK_EQ(mr.counts().curr.size, expected_size);
- }
- /** check delta of curr allocations and size since construction or last reset() */
- void check_curr_delta(ssize_t expected_allocs, ssize_t expected_size) const
- {
- AllocationCounts delta = mr.counts() - first;
- CHECK_EQ(delta.curr.allocs, expected_allocs);
- CHECK_EQ(delta.curr.size, expected_size);
- }
-
- /** check value of total allocations and size */
- void check_total(ssize_t expected_allocs, ssize_t expected_size) const
- {
- CHECK_EQ(mr.counts().total.allocs, expected_allocs);
- CHECK_EQ(mr.counts().total.size, expected_size);
- }
- /** check delta of total allocations and size since construction or last reset() */
- void check_total_delta(ssize_t expected_allocs, ssize_t expected_size) const
- {
- AllocationCounts delta = mr.counts() - first;
- CHECK_EQ(delta.total.allocs, expected_allocs);
- CHECK_EQ(delta.total.size, expected_size);
- }
-
- /** check value of max allocations and size */
- void check_max(ssize_t expected_max_allocs, ssize_t expected_max_size) const
- {
- CHECK_EQ(mr.counts().max.allocs, expected_max_allocs);
- CHECK_EQ(mr.counts().max.size, expected_max_size);
- }
-
- /** check that since construction or the last reset():
- * - num_allocs occcurred
- * - totaling total_size
- * - of which the largest is max_size */
- void check_all_delta(ssize_t num_allocs, ssize_t total_size, ssize_t max_size) const
- {
- check_curr_delta(num_allocs, total_size);
- check_total_delta(num_allocs, total_size);
- check_max(num_allocs > mr.counts().max.allocs ? num_allocs : mr.counts().max.allocs,
- max_size > mr.counts().max.size ? max_size : mr.counts().max.size);
- }
-};
-
-} // namespace c4
-
-#endif // _C4_LIBTEST_TEST_HPP_
diff --git a/thirdparty/ryml/ext/c4core/test/printintegers.py b/thirdparty/ryml/ext/c4core/test/printintegers.py
deleted file mode 100644
index de7532491..000000000
--- a/thirdparty/ryml/ext/c4core/test/printintegers.py
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-def nb(val):
- return [val-1, val, val+1]
-
-
-def ipowers2(min, max):
- vals = []
- v = int(min / 2)
- while v < -10:
- vals += nb(v)
- v = int(v / 2)
- vals += upowers2(max)
- return vals
-
-
-def upowers2(max):
- vals = []
- v = 16
- while v < max:
- vals += nb(v)
- v *= 2
- return vals
-
-
-def ipowers10(min, max):
- vals = []
- v = -100
- while v > min:
- vals += nb(v)
- v *= 10
- vals += upowers10(max)
- return vals
-
-
-def upowers10(max):
- vals = []
- v = 10
- while v < max:
- vals += nb(v)
- v *= 10
- return vals
-
-
-def idiv10(min, max):
- vals = []
- v = int(min / 10)
- while v < -10:
- vals.append(v)
- v = int(v / 10)
- vals += udiv10(max)
- return vals
-
-
-def udiv10(max):
- vals = []
- v = int(max / 10)
- while v > 10:
- vals += nb(v)
- v = int(v / 10)
- return vals
-
-
-def ivals(bits):
- min = -(1 << (bits-1))
- max = -min-1
- vals = [min, min+1, min+2, min+3, min+4, min+5]
- vals += ipowers2(min, max)
- vals += ipowers10(min, max)
- vals += idiv10(min, max)
- vals += [-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
- vals += [max-5, max-4, max-3, max-2, max-1, max]
- return sorted(list(set(vals)))
-
-
-def uvals(bits):
- max = (1 << bits) - 1
- vals = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
- vals += upowers2(max)
- vals += upowers10(max)
- vals += udiv10(max)
- vals += [max-5, max-4, max-3, max-2, max-1, max]
- return sorted(list(set(vals)))
-
-
-
-def p(v):
- return f' nc({v}, "{v}", "{hex(v)}", "{oct(v)}", "{bin(v)}"),'
-
-
-def pn(numbits, fn):
- print()
- for a in fn(numbits):
- print(p(a))
-
-
-pn(8, ivals)
-pn(8, uvals)
-
-pn(16, ivals)
-pn(16, uvals)
-
-pn(32, ivals)
-pn(32, uvals)
-
-pn(64, ivals)
-pn(64, uvals)
diff --git a/thirdparty/ryml/ext/c4core/test/test_allocator.cpp b/thirdparty/ryml/ext/c4core/test/test_allocator.cpp
deleted file mode 100644
index 78d0daf88..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_allocator.cpp
+++ /dev/null
@@ -1,246 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/allocator.hpp"
-#endif
-
-#include "c4/test.hpp"
-#include "c4/libtest/supprwarn_push.hpp"
-
-#include <vector>
-#include <string>
-#include <map>
-
-namespace c4 {
-
-template< class T > using small_adapter = c4::small_allocator< T >;
-template< class T > using small_adapter_mr = c4::small_allocator_mr< T >;
-
-#define _c4definealloctypes(Alloc) \
-using AllocInt = typename Alloc::template rebind<int>::other;\
-using AllocChar = typename Alloc::template rebind<char>::other;\
-using _string = std::basic_string< char, std::char_traits<char>, AllocChar >;\
-using AllocString = typename Alloc::template rebind<_string>::other;\
-using AllocPair = typename Alloc::template rebind<std::pair<const _string,int>>::other;\
-using _vector_int = std::vector<int, AllocInt >;\
-using _vector_string = std::vector<_string, AllocString >;\
-using _map_string_int = std::map<_string, int, std::less<_string>, AllocPair >;
-
-//-----------------------------------------------------------------------------
-template< class Alloc >
-void test_traits_compat_construct(typename Alloc::value_type const& val, Alloc &a)
-{
- using atraits = std::allocator_traits< Alloc >;
- using value_type = typename Alloc::value_type;
-
- value_type *mem = a.allocate(1);
- REQUIRE_NE(mem, nullptr);
- atraits::construct(a, mem, val);
- CHECK_EQ(*mem, val);
-
- atraits::destroy(a, mem);
- a.deallocate(mem, 1);
-}
-
-TEST_CASE("allocator.traits_compat_construct")
-{
- allocator<int> a;
- test_traits_compat_construct(1, a);
-}
-
-TEST_CASE("small_allocator.traits_compat_construct")
-{
- small_allocator<int> a;
- test_traits_compat_construct(1, a);
-}
-
-TEST_CASE("allocator_mr_global.traits_compat_construct")
-{
- allocator_mr<int> a;
- test_traits_compat_construct(1, a);
-}
-
-TEST_CASE("allocator_mr_linear.traits_compat_construct")
-{
- MemoryResourceLinear mr(1024);
- allocator_mr<int> a(&mr);
- test_traits_compat_construct(1, a);
-}
-
-TEST_CASE("allocator_mr_linear_arr.traits_compat_construct")
-{
- MemoryResourceLinearArr<1024> mr;
- allocator_mr<int> a(&mr);
- test_traits_compat_construct(1, a);
-}
-
-TEST_CASE("small_allocator_mr_global.traits_compat_construct")
-{
- small_allocator_mr<int> a;
- test_traits_compat_construct(1, a);
-}
-
-TEST_CASE("small_allocator_mr_linear.traits_compat_construct")
-{
- MemoryResourceLinear mr(1024);
- small_allocator_mr<int> a(&mr);
- test_traits_compat_construct(1, a);
-}
-
-TEST_CASE("small_allocator_mr_linear_arr.traits_compat_construct")
-{
- MemoryResourceLinearArr<1024> mr;
- small_allocator_mr<int> a(&mr);
- test_traits_compat_construct(1, a);
-}
-
-//-----------------------------------------------------------------------------
-
-template< class Alloc >
-void clear_mr(Alloc a)
-{
- auto mrl = dynamic_cast<MemoryResourceLinear*>(a.resource());
- if(mrl)
- {
- mrl->clear();
- }
-}
-
-template< class Alloc >
-void do_std_containers_test(Alloc alloc)
-{
- _c4definealloctypes(Alloc);
-
- {
- _string v(alloc);
- v.reserve(256);
- v = "adskjhsdfkjdflkjsdfkjhsdfkjh";
- CHECK_EQ(v, "adskjhsdfkjdflkjsdfkjhsdfkjh");
- }
-
- clear_mr(alloc);
-
- {
- int arr[128];
- for(int &i : arr)
- {
- i = 42;
- }
- _vector_int vi(arr, arr+C4_COUNTOF(arr), alloc);
- for(int i : vi)
- {
- CHECK_EQ(i, 42);
- }
- }
-
- clear_mr(alloc);
-
- {
- AllocChar a = alloc;
- _vector_string v({"foo", "bar", "baz", "bat", "bax"}, a);
- CHECK_EQ(v.size(), 5);
- CHECK_EQ(v[0], "foo");
- CHECK_EQ(v[1], "bar");
- CHECK_EQ(v[2], "baz");
- CHECK_EQ(v[3], "bat");
- CHECK_EQ(v[4], "bax");
- }
-
- clear_mr(alloc);
-
- {
- AllocString a = alloc;
- _vector_string v(a);
- v.resize(4);
- int count = 0;
- for(auto &s : v)
- {
- _string ss(size_t(64), (char)('0' + count++));
- s = ss;
- }
- }
-
- clear_mr(alloc);
-
- {
-#if !defined(__GNUC__) || (__GNUC__ >= 5)
- /* constructor does not exist on gcc < 5) */
- AllocPair a = alloc;
- _map_string_int v(a);
-#else
- _map_string_int v;
-#endif
- CHECK_EQ(v.size(), 0);
- v["foo"] = 0;
- v["bar"] = 1;
- v["baz"] = 2;
- v["bat"] = 3;
- CHECK_EQ(v.size(), 4);
- CHECK_EQ(v["foo"], 0);
- CHECK_EQ(v["bar"], 1);
- CHECK_EQ(v["baz"], 2);
- CHECK_EQ(v["bat"], 3);
- }
-}
-
-TEST_CASE("allocator_global.std_containers")
-{
- allocator<int> a;
- do_std_containers_test(a);
-}
-
-TEST_CASE("small_allocator_global.std_containers")
-{
- /* this is failing, investigate
- small_allocator<int> a;
- do_std_containers_test(a);
- */
-}
-
-TEST_CASE("allocator_mr_global.std_containers")
-{
- allocator_mr<int> a;
- do_std_containers_test(a);
-}
-
-TEST_CASE("allocator_mr_linear.std_containers")
-{
- MemoryResourceLinear mr(1024);
- allocator_mr<int> a(&mr);
- do_std_containers_test(a);
-}
-
-TEST_CASE("allocator_mr_linear_arr.std_containers")
-{
- MemoryResourceLinearArr<1024> mr;
- allocator_mr<int> a(&mr);
- do_std_containers_test(a);
-}
-
-TEST_CASE("small_allocator_mr_global.std_containers")
-{
- /* this is failing, investigate
- small_allocator_mr<int> a;
- do_std_containers_test(a);
- */
-}
-
-TEST_CASE("small_allocator_mr_linear.std_containers")
-{
- /* this is failing, investigate
- MemoryResourceLinear mr(1024);
- small_allocator_mr<int> a(&mr);
- do_std_containers_test(a);
- */
-}
-
-TEST_CASE("small_allocator_mr_linear_arr.std_containers")
-{
- /* this is failing, investigate
- MemoryResourceLinearArr<1024> mr;
- small_allocator_mr<int> a(&mr);
- do_std_containers_test(a);
- */
-}
-
-} // namespace c4
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_base64.cpp b/thirdparty/ryml/ext/c4core/test/test_base64.cpp
deleted file mode 100644
index e638a0d81..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_base64.cpp
+++ /dev/null
@@ -1,265 +0,0 @@
-#include "c4/test.hpp"
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/std/string.hpp"
-#include "c4/std/vector.hpp"
-#include "c4/format.hpp"
-#include "c4/base64.hpp"
-#endif
-
-#include "c4/libtest/supprwarn_push.hpp"
-
-#include <cstring>
-
-C4_SUPPRESS_WARNING_MSVC_WITH_PUSH(4310) // cast truncates constant value
-
-namespace c4 {
-
-namespace detail {
-void base64_test_tables();
-TEST_CASE("base64.infrastructure")
-{
- #ifndef NDEBUG
- detail::base64_test_tables();
- #endif
-}
-// Since some the macros in c4/cpu.cpp cannot identify endanness at compile
-// time, we use a simple runtime endianness-detection routine.
-bool is_little_endian()
-{
- unsigned long const v = 1UL;
- unsigned char b[sizeof(v)];
- std::memcpy(&b[0], &v, sizeof(v));
- return !!b[0];
-}
-} // namespace detail
-
-csubstr native(csubstr little_endian, csubstr big_endian)
-{
- return detail::is_little_endian() ? little_endian : big_endian;
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-template<class T, class U>
-void test_base64_str_roundtrip(T const& val, csubstr expected, U *ws)
-{
- char buf_[512];
- substr buf(buf_);
-
- csubstr encoded = to_chars_sub(buf, fmt::base64(val));
- CHECK(base64_valid(encoded));
- CHECK_EQ(encoded, expected);
- CHECK_EQ(encoded.len % 4, 0);
-
- auto req = fmt::base64(*ws);
- size_t written = from_chars(encoded, &req);
- CHECK_EQ(ws->first(written), val);
-}
-
-template<class T>
-void test_base64_roundtrip(T const& val, csubstr expected)
-{
- char buf_[512];
- substr buf(buf_);
-
- csubstr encoded = to_chars_sub(buf, fmt::base64(val));
- CHECK(base64_valid(encoded));
- CHECK_EQ(encoded, expected);
- CHECK_EQ(encoded.len % 4, 0);
-
- T ws = {};
- auto req = fmt::base64(ws);
- size_t written = from_chars(encoded, &req);
- CHECK_EQ(written, sizeof(T));
- CHECK_EQ(ws, val);
-}
-
-template<class T>
-struct base64_test_pair
-{
- T val;
- csubstr encoded;
-};
-
-base64_test_pair<csubstr> base64_str_pairs[] = {
-#define __(val, expected) {csubstr(val), csubstr(expected)}
- __("" , "" ),
- __("0" , "MA==" ),
- __("1" , "MQ==" ),
- __("2" , "Mg==" ),
- __("3" , "Mw==" ),
- __("4" , "NA==" ),
- __("5" , "NQ==" ),
- __("6" , "Ng==" ),
- __("7" , "Nw==" ),
- __("8" , "OA==" ),
- __("9" , "OQ==" ),
- __("10" , "MTA=" ),
- __("123" , "MTIz" ),
- __("1234" , "MTIzNA==" ),
- __("1235" , "MTIzNQ==" ),
- __("Man" , "TWFu" ),
- __("Ma" , "TWE=" ),
- __("M" , "TQ==" ),
- __("deadbeef" , "ZGVhZGJlZWY=" ),
- __("any carnal pleasure.", "YW55IGNhcm5hbCBwbGVhc3VyZS4="),
- __("any carnal pleasure" , "YW55IGNhcm5hbCBwbGVhc3VyZQ=="),
- __("any carnal pleasur" , "YW55IGNhcm5hbCBwbGVhc3Vy" ),
- __("any carnal pleasu" , "YW55IGNhcm5hbCBwbGVhc3U=" ),
- __("any carnal pleas" , "YW55IGNhcm5hbCBwbGVhcw==" ),
- __( "pleasure.", "cGxlYXN1cmUu" ),
- __( "leasure.", "bGVhc3VyZS4=" ),
- __( "easure.", "ZWFzdXJlLg==" ),
- __( "asure.", "YXN1cmUu" ),
- __( "sure.", "c3VyZS4=" ),
-#undef __
-};
-
-
-TEST_CASE("base64.str")
-{
- char buf_[512];
- substr buf(buf_);
- for(auto p : base64_str_pairs)
- {
- INFO(p.val);
- test_base64_str_roundtrip(p.val, p.encoded, &buf);
- }
-}
-
-TEST_CASE_TEMPLATE("base64.8bit", T, int8_t, uint8_t)
-{
- base64_test_pair<T> pairs[] = {
- {(T) 0, csubstr("AA==")},
- {(T) 1, csubstr("AQ==")},
- {(T) 2, csubstr("Ag==")},
- {(T) 3, csubstr("Aw==")},
- {(T) 4, csubstr("BA==")},
- {(T) 5, csubstr("BQ==")},
- {(T) 6, csubstr("Bg==")},
- {(T) 7, csubstr("Bw==")},
- {(T) 8, csubstr("CA==")},
- {(T) 9, csubstr("CQ==")},
- {(T) 10, csubstr("Cg==")},
- {(T) 11, csubstr("Cw==")},
- {(T) 12, csubstr("DA==")},
- {(T) 13, csubstr("DQ==")},
- {(T) 14, csubstr("Dg==")},
- {(T) 15, csubstr("Dw==")},
- {(T) 16, csubstr("EA==")},
- {(T) 17, csubstr("EQ==")},
- {(T) 18, csubstr("Eg==")},
- {(T) 19, csubstr("Ew==")},
- {(T) 20, csubstr("FA==")},
- {(T)127, csubstr("fw==")},
- {(T)128, csubstr("gA==")},
- {(T)254, csubstr("/g==")},
- {(T)255, csubstr("/w==")},
- };
- for(auto p : pairs)
- {
- INFO("val=" << (int)p.val << " expected=" << p.encoded);
- test_base64_roundtrip(p.val, p.encoded);
- }
-}
-
-TEST_CASE_TEMPLATE("base64.16bit", T, int16_t, uint16_t)
-{
- base64_test_pair<T> pairs[] = {
- { 0, native("AAA=", "AAA=")},
- { 1, native("AQA=", "AAE=")},
- { 2, native("AgA=", "AAI=")},
- { 3, native("AwA=", "AAM=")},
- { 4, native("BAA=", "AAQ=")},
- { 5, native("BQA=", "AAU=")},
- { 6, native("BgA=", "AAY=")},
- { 7, native("BwA=", "AAc=")},
- { 8, native("CAA=", "AAg=")},
- { 9, native("CQA=", "AAk=")},
- { 10, native("CgA=", "AAo=")},
- {1234, native("0gQ=", "BNI=")},
- };
- for(auto p : pairs)
- {
- INFO("val=" << p.val << " expected=" << p.encoded);
- test_base64_roundtrip(p.val, p.encoded);
- }
-}
-
-TEST_CASE_TEMPLATE("base64.32bit", T, int32_t, uint32_t)
-{
- base64_test_pair<T> pairs[] = {
- { 0, native("AAAAAA==", "AAAAAA==")},
- { 1, native("AQAAAA==", "AAAAAQ==")},
- { 2, native("AgAAAA==", "AAAAAg==")},
- { 3, native("AwAAAA==", "AAAAAw==")},
- { 4, native("BAAAAA==", "AAAABA==")},
- { 5, native("BQAAAA==", "AAAABQ==")},
- { 6, native("BgAAAA==", "AAAABg==")},
- { 7, native("BwAAAA==", "AAAABw==")},
- { 8, native("CAAAAA==", "AAAACA==")},
- { 9, native("CQAAAA==", "AAAACQ==")},
- { 10, native("CgAAAA==", "AAAACg==")},
- {1234, native("0gQAAA==", "AAAE0g==")},
- };
- for(auto p : pairs)
- {
- INFO("val=" << p.val << " expected=" << p.encoded);
- test_base64_roundtrip(p.val, p.encoded);
- }
-}
-
-TEST_CASE_TEMPLATE("base64.64bit", T, int64_t, uint64_t)
-{
- base64_test_pair<T> pairs[] = {
- { 0, native("AAAAAAAAAAA=", "AAAAAAAAAAA=")},
- { 1, native("AQAAAAAAAAA=", "AAAAAAAAAAE=")},
- { 2, native("AgAAAAAAAAA=", "AAAAAAAAAAI=")},
- { 3, native("AwAAAAAAAAA=", "AAAAAAAAAAM=")},
- { 4, native("BAAAAAAAAAA=", "AAAAAAAAAAQ=")},
- { 5, native("BQAAAAAAAAA=", "AAAAAAAAAAU=")},
- { 6, native("BgAAAAAAAAA=", "AAAAAAAAAAY=")},
- { 7, native("BwAAAAAAAAA=", "AAAAAAAAAAc=")},
- { 8, native("CAAAAAAAAAA=", "AAAAAAAAAAg=")},
- { 9, native("CQAAAAAAAAA=", "AAAAAAAAAAk=")},
- { 10, native("CgAAAAAAAAA=", "AAAAAAAAAAo=")},
- {1234, native("0gQAAAAAAAA=", "AAAAAAAABNI=")},
- {0xdeadbeef, native("776t3gAAAAA=", "AAAAAN6tvu8=")},
- };
- for(auto p : pairs)
- {
- INFO("val=" << p.val << " expected=" << p.encoded);
- test_base64_roundtrip(p.val, p.encoded);
- }
-}
-
-TEST_CASE("base64.high_bits_u32")
-{
- test_base64_roundtrip(UINT32_C(0xdeadbeef), native("776t3g==", "3q2+7w=="));
- test_base64_roundtrip(UINT32_MAX, native("/////w==", "/////w=="));
-}
-
-TEST_CASE("base64.high_bits_i32")
-{
- test_base64_roundtrip(INT32_C(0x7fffffff), native("////fw==", "f////w=="));
- test_base64_roundtrip(INT32_MAX, native("////fw==", "f////w=="));
-}
-
-TEST_CASE("base64.high_bits_u64")
-{
- test_base64_roundtrip(UINT64_MAX, native("//////////8=", "//////////8="));
-}
-
-TEST_CASE("base64.high_bits_i64")
-{
- test_base64_roundtrip(INT64_MAX, native("/////////38=", "f/////////8="));
-}
-
-} // namespace c4
-
-C4_SUPPRESS_WARNING_MSVC_POP
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_bitmask.cpp b/thirdparty/ryml/ext/c4core/test/test_bitmask.cpp
deleted file mode 100644
index e7137d2a5..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_bitmask.cpp
+++ /dev/null
@@ -1,385 +0,0 @@
-#include <vector>
-#include <sstream>
-
-#ifndef C4CORE_SINGLE_HEADER
-#include <c4/bitmask.hpp>
-#include <c4/std/vector.hpp>
-#endif
-
-#include <c4/test.hpp>
-
-#include "./test_enum_common.hpp"
-
-template<typename Enum>
-void cmp_enum(Enum lhs, Enum rhs)
-{
- using I = typename std::underlying_type<Enum>::type;
- CHECK_EQ(static_cast<I>(lhs), static_cast<I>(rhs));
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-
-TEST_CASE("str2bm.simple_bitmask")
-{
- using namespace c4;
- std::vector<char> str;
-
- CHECK_EQ(BM_NONE, str2bm<MyBitmask>("BM_NONE"));
- CHECK_EQ(BM_NONE, str2bm<MyBitmask>("NONE"));
- CHECK_EQ(BM_NONE, str2bm<MyBitmask>("0"));
- CHECK_EQ(BM_NONE, str2bm<MyBitmask>("0x0"));
-
- CHECK_EQ(BM_FOO, str2bm<MyBitmask>("BM_FOO"));
- CHECK_EQ(BM_FOO, str2bm<MyBitmask>("FOO"));
- CHECK_EQ(BM_FOO, str2bm<MyBitmask>("1"));
- CHECK_EQ(BM_FOO, str2bm<MyBitmask>("0x1"));
- CHECK_EQ(BM_FOO, str2bm<MyBitmask>("BM_NONE|0x1"));
-
- CHECK_EQ(BM_BAR, str2bm<MyBitmask>("BM_BAR"));
- CHECK_EQ(BM_BAR, str2bm<MyBitmask>("BAR"));
- CHECK_EQ(BM_BAR, str2bm<MyBitmask>("2"));
- CHECK_EQ(BM_BAR, str2bm<MyBitmask>("0x2"));
- CHECK_EQ(BM_BAR, str2bm<MyBitmask>("BM_NONE|0x2"));
-
- CHECK_EQ(BM_BAZ, str2bm<MyBitmask>("BM_BAZ"));
- CHECK_EQ(BM_BAZ, str2bm<MyBitmask>("BAZ"));
- CHECK_EQ(BM_BAZ, str2bm<MyBitmask>("4"));
- CHECK_EQ(BM_BAZ, str2bm<MyBitmask>("0x4"));
-
- CHECK_EQ(BM_FOO_BAR, str2bm<MyBitmask>("BM_FOO|BM_BAR"));
- CHECK_EQ(BM_FOO_BAR, str2bm<MyBitmask>("BM_FOO|BAR"));
- CHECK_EQ(BM_FOO_BAR, str2bm<MyBitmask>("FOO|BM_BAR"));
- CHECK_EQ(BM_FOO_BAR, str2bm<MyBitmask>("BM_FOO_BAR"));
- CHECK_EQ(BM_FOO_BAR, str2bm<MyBitmask>("FOO_BAR"));
- CHECK_EQ(BM_FOO_BAR, str2bm<MyBitmask>("FOO|BAR"));
- CHECK_EQ(BM_FOO_BAR, str2bm<MyBitmask>("0x1|0x2"));
- CHECK_EQ(BM_FOO_BAR, str2bm<MyBitmask>("1|2"));
- CHECK_EQ(BM_FOO_BAR, str2bm<MyBitmask>("0x3"));
- CHECK_EQ(BM_FOO_BAR, str2bm<MyBitmask>("3"));
-
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("BM_FOO|BM_BAR|BM_BAZ"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("BM_FOO|BM_BAR|BAZ"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("BM_FOO|BAR|BM_BAZ"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("FOO|BM_BAR|BM_BAZ"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("FOO|BM_BAR|BAZ"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("FOO|BAR|BM_BAZ"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("FOO|BAR|BAZ"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("FOO_BAR|BAZ"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("BM_FOO_BAR|BAZ"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("0x1|BAR|BAZ"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("FOO|0x2|BAZ"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("FOO|BAR|0x4"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("0x1|0x2|0x4"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("0x7"));
- CHECK_EQ(BM_FOO_BAR_BAZ, str2bm<MyBitmask>("7"));
-}
-
-TEST_CASE("str2bm.scoped_bitmask")
-{
- using namespace c4;
- std::vector<char> str;
- using bmt = MyBitmaskClass;
-
- cmp_enum(bmt::BM_NONE, (bmt)str2bm<bmt>("MyBitmaskClass::BM_NONE"));
- cmp_enum(bmt::BM_FOO, (bmt)str2bm<bmt>("MyBitmaskClass::BM_FOO"));
- cmp_enum(bmt::BM_BAR, (bmt)str2bm<bmt>("MyBitmaskClass::BM_BAR"));
- cmp_enum(bmt::BM_BAZ, (bmt)str2bm<bmt>("MyBitmaskClass::BM_BAZ"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("MyBitmaskClass::BM_FOO_BAR"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("MyBitmaskClass::BM_FOO_BAR_BAZ"));
- cmp_enum(bmt::BM_NONE, (bmt)str2bm<bmt>("BM_NONE"));
- cmp_enum(bmt::BM_FOO, (bmt)str2bm<bmt>("BM_FOO"));
- cmp_enum(bmt::BM_BAR, (bmt)str2bm<bmt>("BM_BAR"));
- cmp_enum(bmt::BM_BAZ, (bmt)str2bm<bmt>("BM_BAZ"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("BM_FOO_BAR"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("BM_FOO_BAR_BAZ"));
- cmp_enum(bmt::BM_NONE, (bmt)str2bm<bmt>("NONE"));
- cmp_enum(bmt::BM_FOO, (bmt)str2bm<bmt>("FOO"));
- cmp_enum(bmt::BM_BAR, (bmt)str2bm<bmt>("BAR"));
- cmp_enum(bmt::BM_BAZ, (bmt)str2bm<bmt>("BAZ"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("FOO_BAR"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("FOO_BAR_BAZ"));
-
- cmp_enum(bmt::BM_NONE, (bmt)str2bm<bmt>("NONE"));
- cmp_enum(bmt::BM_NONE, (bmt)str2bm<bmt>("BM_NONE"));
- cmp_enum(bmt::BM_NONE, (bmt)str2bm<bmt>("MyBitmaskClass::BM_NONE"));
- cmp_enum(bmt::BM_NONE, (bmt)str2bm<bmt>("0"));
- cmp_enum(bmt::BM_NONE, (bmt)str2bm<bmt>("0x0"));
- cmp_enum(bmt::BM_FOO, (bmt)str2bm<bmt>("FOO"));
- cmp_enum(bmt::BM_FOO, (bmt)str2bm<bmt>("BM_FOO"));
- cmp_enum(bmt::BM_FOO, (bmt)str2bm<bmt>("MyBitmaskClass::BM_FOO"));
- cmp_enum(bmt::BM_FOO, (bmt)str2bm<bmt>("1"));
- cmp_enum(bmt::BM_FOO, (bmt)str2bm<bmt>("0x1"));
- cmp_enum(bmt::BM_FOO, (bmt)str2bm<bmt>("NONE|0x1"));
- cmp_enum(bmt::BM_FOO, (bmt)str2bm<bmt>("BM_NONE|0x1"));
- cmp_enum(bmt::BM_FOO, (bmt)str2bm<bmt>("MyBitmaskClass::BM_NONE|0x1"));
- cmp_enum(bmt::BM_BAR, (bmt)str2bm<bmt>("BAR"));
- cmp_enum(bmt::BM_BAR, (bmt)str2bm<bmt>("BM_BAR"));
- cmp_enum(bmt::BM_BAR, (bmt)str2bm<bmt>("MyBitmaskClass::BM_BAR"));
- cmp_enum(bmt::BM_BAR, (bmt)str2bm<bmt>("2"));
- cmp_enum(bmt::BM_BAR, (bmt)str2bm<bmt>("0x2"));
- cmp_enum(bmt::BM_BAZ, (bmt)str2bm<bmt>("BAZ"));
- cmp_enum(bmt::BM_BAZ, (bmt)str2bm<bmt>("BM_BAZ"));
- cmp_enum(bmt::BM_BAZ, (bmt)str2bm<bmt>("MyBitmaskClass::BM_BAZ"));
- cmp_enum(bmt::BM_BAR, (bmt)str2bm<bmt>("BM_NONE|0x2"));
- cmp_enum(bmt::BM_BAR, (bmt)str2bm<bmt>("MyBitmaskClass::BM_NONE|0x2"));
- cmp_enum(bmt::BM_BAZ, (bmt)str2bm<bmt>("4"));
- cmp_enum(bmt::BM_BAZ, (bmt)str2bm<bmt>("0x4"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("BM_FOO|BM_BAR"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("MyBitmaskClass::BM_FOO|MyBitmaskClass::BM_BAR"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("BM_FOO|BAR"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("MyBitmaskClass::BM_FOO|BAR"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("FOO|BM_BAR"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("FOO|MyBitmaskClass::BM_BAR"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("BM_FOO_BAR"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("MyBitmaskClass::BM_FOO_BAR"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("FOO_BAR"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("FOO|BAR"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("0x1|0x2"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("1|2"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("0x3"));
- cmp_enum(bmt::BM_FOO_BAR, (bmt)str2bm<bmt>("3"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("BM_FOO|BM_BAR|BM_BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("MyBitmaskClass::BM_FOO|MyBitmaskClass::BM_BAR|MyBitmaskClass::BM_BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("BM_FOO|BM_BAR|BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("MyBitmaskClass::BM_FOO|MyBitmaskClass::BM_BAR|BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("BM_FOO|BAR|BM_BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("BM_FOO|BAR|MyBitmaskClass::BM_BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("FOO|BM_BAR|BM_BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("FOO|MyBitmaskClass::BM_BAR|MyBitmaskClass::BM_BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("FOO|BM_BAR|BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("FOO|MyBitmaskClass::BM_BAR|BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("FOO|BAR|BM_BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("FOO|BAR|MyBitmaskClass::BM_BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("FOO|BAR|BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("FOO_BAR|BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("MyBitmaskClass::BM_FOO_BAR|BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("0x1|BAR|BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("FOO|0x2|BAZ"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("FOO|BAR|0x4"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("0x1|0x2|0x4"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("0x7"));
- cmp_enum(bmt::BM_FOO_BAR_BAZ, (bmt)str2bm<bmt>("0x7"));
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-
-template<class Enum>
-const char* do_bm2str(Enum e, std::vector<char> *s, c4::EnumOffsetType which)
-{
- size_t len = c4::bm2str<Enum>(e, nullptr, 0, which);
- C4_CHECK(len > 0);
- s->resize(len);
- C4_CHECK(s->data() != nullptr);
- c4::bm2str<Enum>(e, s->data(), s->size(), which);
- return s->data();
-}
-
-TEST_CASE("bm2str.simple_bitmask")
-{
- using namespace c4;
- std::vector<char> str;
-
- CHECK_STREQ(do_bm2str(BM_NONE, &str, EOFFS_NONE), "BM_NONE");
- CHECK_STREQ(do_bm2str(BM_FOO, &str, EOFFS_NONE), "BM_FOO");
- CHECK_STREQ(do_bm2str(BM_BAR, &str, EOFFS_NONE), "BM_BAR");
- CHECK_STREQ(do_bm2str(BM_BAZ, &str, EOFFS_NONE), "BM_BAZ");
- CHECK_STREQ(do_bm2str(BM_FOO_BAR, &str, EOFFS_NONE), "BM_FOO_BAR");
- CHECK_STREQ(do_bm2str(BM_FOO_BAR_BAZ, &str, EOFFS_NONE), "BM_FOO_BAR_BAZ");
- CHECK_STREQ(do_bm2str(BM_NONE, &str, EOFFS_CLS ), "BM_NONE");
- CHECK_STREQ(do_bm2str(BM_FOO, &str, EOFFS_CLS ), "BM_FOO");
- CHECK_STREQ(do_bm2str(BM_BAR, &str, EOFFS_CLS ), "BM_BAR");
- CHECK_STREQ(do_bm2str(BM_BAZ, &str, EOFFS_CLS ), "BM_BAZ");
- CHECK_STREQ(do_bm2str(BM_FOO_BAR, &str, EOFFS_CLS ), "BM_FOO_BAR");
- CHECK_STREQ(do_bm2str(BM_FOO_BAR_BAZ, &str, EOFFS_CLS ), "BM_FOO_BAR_BAZ");
- CHECK_STREQ(do_bm2str(BM_NONE, &str, EOFFS_PFX ), "NONE");
- CHECK_STREQ(do_bm2str(BM_FOO, &str, EOFFS_PFX ), "FOO");
- CHECK_STREQ(do_bm2str(BM_BAR, &str, EOFFS_PFX ), "BAR");
- CHECK_STREQ(do_bm2str(BM_BAZ, &str, EOFFS_PFX ), "BAZ");
- CHECK_STREQ(do_bm2str(BM_FOO_BAR, &str, EOFFS_PFX ), "FOO_BAR");
- CHECK_STREQ(do_bm2str(BM_FOO_BAR_BAZ, &str, EOFFS_PFX ), "FOO_BAR_BAZ");
-}
-
-TEST_CASE("bm2str.scoped_bitmask")
-{
- using namespace c4;
- std::vector<char> str;
-
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_NONE, &str, EOFFS_NONE), "MyBitmaskClass::BM_NONE");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_FOO, &str, EOFFS_NONE), "MyBitmaskClass::BM_FOO");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_BAR, &str, EOFFS_NONE), "MyBitmaskClass::BM_BAR");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_BAZ, &str, EOFFS_NONE), "MyBitmaskClass::BM_BAZ");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_FOO_BAR, &str, EOFFS_NONE), "MyBitmaskClass::BM_FOO_BAR");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_FOO_BAR_BAZ, &str, EOFFS_NONE), "MyBitmaskClass::BM_FOO_BAR_BAZ");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_NONE, &str, EOFFS_CLS ), "BM_NONE");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_FOO, &str, EOFFS_CLS ), "BM_FOO");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_BAR, &str, EOFFS_CLS ), "BM_BAR");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_BAZ, &str, EOFFS_CLS ), "BM_BAZ");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_FOO_BAR, &str, EOFFS_CLS ), "BM_FOO_BAR");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_FOO_BAR_BAZ, &str, EOFFS_CLS ), "BM_FOO_BAR_BAZ");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_NONE, &str, EOFFS_PFX ), "NONE");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_FOO, &str, EOFFS_PFX ), "FOO");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_BAR, &str, EOFFS_PFX ), "BAR");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_BAZ, &str, EOFFS_PFX ), "BAZ");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_FOO_BAR, &str, EOFFS_PFX ), "FOO_BAR");
- CHECK_STREQ(do_bm2str(MyBitmaskClass::BM_FOO_BAR_BAZ, &str, EOFFS_PFX ), "FOO_BAR_BAZ");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-
-template<class Enum>
-std::string do_bm2stream(Enum e, c4::EnumOffsetType which)
-{
- std::stringstream ss;
- c4::bm2stream<Enum>(ss, e, which);
- return ss.str();
-}
-
-TEST_CASE("bm2stream.simple_bitmask")
-{
- using namespace c4;
-
- CHECK_EQ(do_bm2stream(BM_NONE, EOFFS_NONE), "BM_NONE");
- CHECK_EQ(do_bm2stream(BM_FOO, EOFFS_NONE), "BM_FOO");
- CHECK_EQ(do_bm2stream(BM_BAR, EOFFS_NONE), "BM_BAR");
- CHECK_EQ(do_bm2stream(BM_BAZ, EOFFS_NONE), "BM_BAZ");
- CHECK_EQ(do_bm2stream(BM_FOO_BAR, EOFFS_NONE), "BM_FOO_BAR");
- CHECK_EQ(do_bm2stream(BM_FOO_BAR_BAZ, EOFFS_NONE), "BM_FOO_BAR_BAZ");
- CHECK_EQ(do_bm2stream(BM_NONE, EOFFS_CLS ), "BM_NONE");
- CHECK_EQ(do_bm2stream(BM_FOO, EOFFS_CLS ), "BM_FOO");
- CHECK_EQ(do_bm2stream(BM_BAR, EOFFS_CLS ), "BM_BAR");
- CHECK_EQ(do_bm2stream(BM_BAZ, EOFFS_CLS ), "BM_BAZ");
- CHECK_EQ(do_bm2stream(BM_FOO_BAR, EOFFS_CLS ), "BM_FOO_BAR");
- CHECK_EQ(do_bm2stream(BM_FOO_BAR_BAZ, EOFFS_CLS ), "BM_FOO_BAR_BAZ");
- CHECK_EQ(do_bm2stream(BM_NONE, EOFFS_PFX ), "NONE");
- CHECK_EQ(do_bm2stream(BM_FOO, EOFFS_PFX ), "FOO");
- CHECK_EQ(do_bm2stream(BM_BAR, EOFFS_PFX ), "BAR");
- CHECK_EQ(do_bm2stream(BM_BAZ, EOFFS_PFX ), "BAZ");
- CHECK_EQ(do_bm2stream(BM_FOO_BAR, EOFFS_PFX ), "FOO_BAR");
- CHECK_EQ(do_bm2stream(BM_FOO_BAR_BAZ, EOFFS_PFX ), "FOO_BAR_BAZ");
-}
-
-TEST_CASE("bm2stream.scoped_bitmask")
-{
- using namespace c4;
-
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_NONE, EOFFS_NONE), "MyBitmaskClass::BM_NONE");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_FOO, EOFFS_NONE), "MyBitmaskClass::BM_FOO");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_BAR, EOFFS_NONE), "MyBitmaskClass::BM_BAR");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_BAZ, EOFFS_NONE), "MyBitmaskClass::BM_BAZ");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_FOO_BAR, EOFFS_NONE), "MyBitmaskClass::BM_FOO_BAR");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_FOO_BAR_BAZ, EOFFS_NONE), "MyBitmaskClass::BM_FOO_BAR_BAZ");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_NONE, EOFFS_CLS ), "BM_NONE");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_FOO, EOFFS_CLS ), "BM_FOO");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_BAR, EOFFS_CLS ), "BM_BAR");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_BAZ, EOFFS_CLS ), "BM_BAZ");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_FOO_BAR, EOFFS_CLS ), "BM_FOO_BAR");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_FOO_BAR_BAZ, EOFFS_CLS ), "BM_FOO_BAR_BAZ");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_NONE, EOFFS_PFX ), "NONE");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_FOO, EOFFS_PFX ), "FOO");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_BAR, EOFFS_PFX ), "BAR");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_BAZ, EOFFS_PFX ), "BAZ");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_FOO_BAR, EOFFS_PFX ), "FOO_BAR");
- CHECK_EQ(do_bm2stream(MyBitmaskClass::BM_FOO_BAR_BAZ, EOFFS_PFX ), "FOO_BAR_BAZ");
-}
-
-TEST_CASE("bm2stream.simple_bitmask_without_null_symbol")
-{
- using namespace c4;
-
- CHECK_EQ(do_bm2stream(BM_KABOOM, EOFFS_NONE), "KABOOM");
- CHECK_EQ(do_bm2stream<BmWithoutNull>((BmWithoutNull)0, EOFFS_NONE), "0");
-}
-
-TEST_CASE("bm2stream.bitmask_class_without_null_symbol")
-{
- using namespace c4;
-
- CHECK_EQ(do_bm2stream(BmClassWithoutNull::BM_KABOOM, EOFFS_PFX), "KABOOM");
- CHECK_EQ(do_bm2stream<BmClassWithoutNull>((BmClassWithoutNull)0, EOFFS_NONE), "0");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-
-// TODO
-template<typename Enum>
-void test_bm2str()
-{
- using namespace c4;
- using I = typename std::underlying_type<Enum>::type;
- int combination_depth = 4;
- auto syms = esyms<Enum>();
-
- std::vector<int> indices;
- std::string str;
- std::vector<char> ws;
- I val = 0, res;
- size_t len;
-
- for(int k = 1; k <= combination_depth; ++k)
- {
- indices.clear();
- indices.resize(static_cast<size_t>(k));
- while(1)
- {
- str.clear();
- val = 0;
- for(auto i : indices)
- {
- if(!str.empty()) str += '|';
- str += syms[i].name;
- val |= static_cast<I>(syms[i].value);
- //printf("%d", i);
- }
- //len = bm2str<Enum>(val); // needed length
- //ws.resize(len);
- //bm2str<Enum>(val, &ws[0], len);
- //printf(": %s (%zu) %s\n", str.c_str(), (uint64_t)val, ws.data());
-
- res = str2bm<Enum>(str.data());
- CHECK_EQ(res, val);
-
- len = bm2str<Enum>(res); // needed length
- ws.resize(len);
- bm2str<Enum>(val, &ws[0], len);
- res = str2bm<Enum>(ws.data());
- CHECK_EQ(res, val);
-
- // write a string with the bitmask as an int
- c4::catrs(&ws, val);
- res = str2bm<Enum>(str.data());
- CHECK_EQ(res, val);
-
- bool carry = true;
- for(size_t i = static_cast<size_t>(k-1); i != size_t(-1); --i)
- {
- if(indices[i] + 1 < syms.size())
- {
- ++indices[i];
- carry = false;
- break;
- }
- else
- {
- indices[i] = 0;
- }
- }
- if(carry)
- {
- break;
- }
- } // while(1)
- } // for k
-}
diff --git a/thirdparty/ryml/ext/c4core/test/test_blob.cpp b/thirdparty/ryml/ext/c4core/test/test_blob.cpp
deleted file mode 100644
index b803ba864..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_blob.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/blob.hpp"
-#endif
-
-#include "c4/test.hpp"
-
-#ifdef __clang__
-# pragma clang diagnostic push
-# pragma clang diagnostic ignored "-Wcast-align"
-#elif defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wcast-align"
-#endif
-
-
-namespace c4 {
-
-template<class T>
-void test_blob()
-{
- T v;
- blob b(v);
- CHECK_EQ((T*)b.buf, &v);
- CHECK_EQ(b.len, sizeof(T));
-
- blob b2 = b;
- CHECK_EQ((T*)b2.buf, &v);
- CHECK_EQ(b2.len, sizeof(T));
-}
-
-TEST_CASE("blob.basic")
-{
- test_blob<int>();
-}
-
-
-#ifdef __clang__
-# pragma clang diagnostic pop
-#elif defined(__GNUC__)
-# pragma GCC diagnostic pop
-#endif
-
-} // namespace c4
diff --git a/thirdparty/ryml/ext/c4core/test/test_char_traits.cpp b/thirdparty/ryml/ext/c4core/test/test_char_traits.cpp
deleted file mode 100644
index 0f4e01518..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_char_traits.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/char_traits.hpp"
-#endif
-
-#include "c4/test.hpp"
-
-namespace c4 {
-
-TEST_CASE("num_needed_chars.char")
-{
- CHECK_EQ(num_needed_chars<char>(0), 0);
- CHECK_EQ(num_needed_chars<char>(1), 1);
- CHECK_EQ(num_needed_chars<char>(2), 2);
- CHECK_EQ(num_needed_chars<char>(3), 3);
- CHECK_EQ(num_needed_chars<char>(4), 4);
- for(int i = 0; i < 100; ++i)
- {
- CHECK_EQ(num_needed_chars<char>(i), i);
- }
-}
-
-TEST_CASE("num_needed_chars.wchar_t")
-{
-#if defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4127) // C4127: conditional expression is constant
-#endif
- if(sizeof(wchar_t) == 2)
- {
- CHECK_EQ(num_needed_chars<wchar_t>( 0), 0);
- CHECK_EQ(num_needed_chars<wchar_t>( 1), 1);
- CHECK_EQ(num_needed_chars<wchar_t>( 2), 1);
- CHECK_EQ(num_needed_chars<wchar_t>( 3), 2);
- CHECK_EQ(num_needed_chars<wchar_t>( 4), 2);
- CHECK_EQ(num_needed_chars<wchar_t>( 97), 49);
- CHECK_EQ(num_needed_chars<wchar_t>( 98), 49);
- CHECK_EQ(num_needed_chars<wchar_t>( 99), 50);
- CHECK_EQ(num_needed_chars<wchar_t>(100), 50);
- CHECK_EQ(num_needed_chars<wchar_t>(101), 51);
- }
- else if(sizeof(wchar_t) == 4)
- {
- CHECK_EQ(num_needed_chars<wchar_t>( 0), 0);
- CHECK_EQ(num_needed_chars<wchar_t>( 1), 1);
- CHECK_EQ(num_needed_chars<wchar_t>( 2), 1);
- CHECK_EQ(num_needed_chars<wchar_t>( 3), 1);
- CHECK_EQ(num_needed_chars<wchar_t>( 4), 1);
- CHECK_EQ(num_needed_chars<wchar_t>( 5), 2);
- CHECK_EQ(num_needed_chars<wchar_t>( 6), 2);
- CHECK_EQ(num_needed_chars<wchar_t>( 7), 2);
- CHECK_EQ(num_needed_chars<wchar_t>( 8), 2);
- CHECK_EQ(num_needed_chars<wchar_t>( 93), 24);
- CHECK_EQ(num_needed_chars<wchar_t>( 94), 24);
- CHECK_EQ(num_needed_chars<wchar_t>( 95), 24);
- CHECK_EQ(num_needed_chars<wchar_t>( 96), 24);
- CHECK_EQ(num_needed_chars<wchar_t>( 97), 25);
- CHECK_EQ(num_needed_chars<wchar_t>( 98), 25);
- CHECK_EQ(num_needed_chars<wchar_t>( 99), 25);
- CHECK_EQ(num_needed_chars<wchar_t>(100), 25);
- CHECK_EQ(num_needed_chars<wchar_t>(101), 26);
- }
-#if defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-}
-
-} // namespace c4
diff --git a/thirdparty/ryml/ext/c4core/test/test_charconv.cpp b/thirdparty/ryml/ext/c4core/test/test_charconv.cpp
deleted file mode 100644
index baa840d1e..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_charconv.cpp
+++ /dev/null
@@ -1,2743 +0,0 @@
-#ifdef C4CORE_SINGLE_HEADER
-#include "c4/c4core_all.hpp"
-#else
-#include "c4/std/std.hpp"
-#include "c4/charconv.hpp"
-#include "c4/format.hpp"
-#include "c4/type_name.hpp"
-#endif
-
-#include "c4/libtest/supprwarn_push.hpp"
-
-C4_SUPPRESS_WARNING_GCC_PUSH
-C4_SUPPRESS_WARNING_GCC("-Wfloat-equal")
-C4_SUPPRESS_WARNING_GCC("-Wuseless-cast")
-C4_SUPPRESS_WARNING_GCC("-Wconversion")
-C4_SUPPRESS_WARNING_GCC("-Wtype-limits")
-C4_SUPPRESS_WARNING_GCC("-Wfloat-equal")
-#if defined (__GNUC__) && __GNUC_MAJOR__ >= 7
-C4_SUPPRESS_WARNING_GCC("-Wno-noexcept-type")
-#endif
-C4_SUPPRESS_WARNING_CLANG_PUSH
-C4_SUPPRESS_WARNING_CLANG("-Wfloat-equal")
-
-#include <c4/test.hpp>
-
-#include "./test_numbers.hpp"
-
-namespace c4 {
-
-namespace {
-
-// skip the radix prefix: 0x, -0x, 0X, -0X, 0b, -0B, etc
-csubstr nopfx(csubstr num)
-{
- if(num.begins_with('-'))
- num = num.sub(1);
- if(num.len >= 2 && num[0] == '0')
- {
- switch(num[1])
- {
- case 'x': case 'X':
- case 'o': case 'O':
- case 'b': case 'B':
- num = num.sub(2);
- }
- }
- return num;
-}
-
-// filter out the radix prefix from anywhere: 0x, -0x, 0X, -0X, 0b, -0B, etc
-csubstr nopfx(substr buf, csubstr num)
-{
- REQUIRE_GE(buf.len, num.len);
- if(num.begins_with('-'))
- num = num.sub(1);
- size_t pos = 0;
- for(size_t i = 0; i < num.len; ++i)
- {
- const char c = num.str[i];
- if(c == '0')
- {
- const char n = i+1 < num.len ? num.str[i+1] : '\0';
- switch(n)
- {
- case 'x': case 'X':
- case 'o': case 'O':
- case 'b': case 'B':
- ++i;
- break;
- default:
- buf[pos++] = c;
- break;
- }
- }
- else
- {
- buf[pos++] = c;
- }
- }
- return buf.first(pos);
-}
-
-// capitalize the alphabetical characters
-// eg 0xdeadbeef --> 0XDEADBEEF
-substr capitalize(substr buf, csubstr str)
-{
- C4_ASSERT(!buf.overlaps(str));
- memcpy(buf.str, str.str, str.len);
- substr ret = buf.first(str.len);
- ret.toupper();
- return ret;
-}
-
-// prepend zeroes to the left of the number:
-// eg 1234 --> 00001234
-// eg -1234 --> -00001234
-// eg 0x1234 --> 0x00001234
-// eg -0x1234 --> -0x00001234
-substr zpad(substr buf, csubstr str, size_t num_zeroes)
-{
- C4_ASSERT(!buf.overlaps(str));
- size_t pos = 0;
- if(str.len > 0 && str[0] == '-')
- buf.str[pos++] = '-';
- if(str.len >= pos+2 && str[pos] == '0')
- {
- switch(str[pos+1])
- {
- case 'x': case 'X':
- case 'o': case 'O':
- case 'b': case 'B':
- memcpy(buf.str + pos, str.str + pos, 2);
- pos += 2;
- }
- }
- memset(buf.str + pos, '0', num_zeroes);
- csubstr rem = str.sub(pos);
- memcpy(buf.str + pos + num_zeroes, rem.str, rem.len);
- return buf.first(str.len + num_zeroes);
-}
-
-// get the front element of the type's test numbers
-template<class T>
-number_case<T> const& front(size_t skip=0)
-{
- return *(numbers<T>::vals + skip);
-}
-
-// get the back element of the type's test numbers
-template<class T>
-number_case<T> const& back(size_t skip=0)
-{
- return *(numbers<T>::vals + C4_COUNTOF(numbers<T>::vals) - 1 - skip);
-}
-
-// given an element, get the n-th element previous to that
-template<class T>
-number_case<T> const& prev(number_case<T> const& curr, size_t less=1)
-{
- C4_ASSERT(less >= 0);
- size_t num = C4_COUNTOF(numbers<T>::vals);
- C4_ASSERT(&curr >= numbers<T>::vals);
- C4_ASSERT(&curr < numbers<T>::vals + num);
- size_t icurr = (size_t)(&curr - numbers<T>::vals);
- size_t prev = (icurr + num - less) % num;
- return *(numbers<T>::vals + prev);
-}
-
-// given an element, get the n-th element after that
-template<class T>
-number_case<T> const& next(number_case<T> const& curr, size_t more=1)
-{
- C4_ASSERT(more >= 0);
- size_t num = C4_COUNTOF(numbers<T>::vals);
- C4_ASSERT(&curr >= numbers<T>::vals);
- C4_ASSERT(&curr < numbers<T>::vals + num);
- size_t icurr = (size_t)(&curr - numbers<T>::vals);
- size_t next = (icurr + more) % num;
- return *(numbers<T>::vals + next);
-}
-
-// construct a string of a value such that it overflows an original value by a given amount
-template<class T>
-csubstr overflow_by(substr buf, T val, T how_much, T radix)
-{
- C4_STATIC_ASSERT(std::is_integral<T>::value);
- C4_STATIC_ASSERT(sizeof(T) < sizeof(int64_t));
- using upcast_t = typename std::conditional<std::is_signed<T>::value, int64_t, uint64_t>::type;
- upcast_t uval = (upcast_t) val;
- uval += (upcast_t) how_much;
- size_t len = xtoa(buf, uval, (upcast_t)radix);
- REQUIRE_GE(buf.len, len);
- return buf.first(len);
-}
-
-// construct a string of a value such that it underflows an original value by a given amount
-template<class T>
-csubstr underflow_by(substr buf, T val, T how_much, T radix)
-{
- C4_STATIC_ASSERT(std::is_integral<T>::value);
- C4_STATIC_ASSERT(sizeof(T) < sizeof(int64_t));
- using upcast_t = typename std::conditional<std::is_signed<T>::value, int64_t, uint64_t>::type;
- upcast_t uval = (upcast_t) val;
- uval -= (upcast_t) how_much;
- size_t len = xtoa(buf, uval, (upcast_t)radix);
- REQUIRE_GE(buf.len, len);
- return buf.first(len);
-}
-
-} // namespace
-
-TEST_CASE("charconv.to_chars_format")
-{
-#if C4CORE_HAVE_STD_TO_CHARS
- CHECK(FTOA_FLOAT == static_cast<std::underlying_type<std::chars_format>::type>(std::chars_format::fixed));
- CHECK(FTOA_SCIENT == static_cast<std::underlying_type<std::chars_format>::type>(std::chars_format::scientific));
- CHECK(FTOA_FLEX == static_cast<std::underlying_type<std::chars_format>::type>(std::chars_format::general));
- CHECK(FTOA_HEXA == static_cast<std::underlying_type<std::chars_format>::type>(std::chars_format::hex));
-#elif !C4CORE_HAVE_FAST_FLOAT
- CHECK(FTOA_FLOAT == 'f');
- CHECK(FTOA_SCIENT == 'e');
- CHECK(FTOA_FLEX == 'g');
- CHECK(FTOA_HEXA == 'a');
-#endif
-}
-
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-TEST_CASE_TEMPLATE("test_util.number_cases", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- CHECK_GT(number.dec.len, 0);
- CHECK_GT(number.hex.len, 2);
- CHECK_GT(number.oct.len, 2);
- CHECK_GT(number.bin.len, 2);
- CHECK_UNARY(number.hex.begins_with("0x"));
- CHECK_UNARY(number.oct.begins_with("0o"));
- CHECK_UNARY(number.bin.begins_with("0b"));
- }
- REQUIRE_GT(C4_COUNTOF(numbers<T>::vals), 2);
- //
- CHECK_EQ(&front<T>(), numbers<T>::vals + 0);
- CHECK_EQ(&front<T>(0), numbers<T>::vals + 0);
- CHECK_EQ(&front<T>(1), numbers<T>::vals + 1);
- //
- CHECK_EQ(&back<T>(), numbers<T>::vals + C4_COUNTOF(numbers<T>::vals) - 1);
- CHECK_EQ(&back<T>(0), numbers<T>::vals + C4_COUNTOF(numbers<T>::vals) - 1);
- CHECK_EQ(&back<T>(1), numbers<T>::vals + C4_COUNTOF(numbers<T>::vals) - 2);
- //
- CHECK_EQ(&next(front<T>() ), numbers<T>::vals + 1);
- CHECK_EQ(&next(front<T>(), T(1)), numbers<T>::vals + 1);
- CHECK_EQ(&next(front<T>(), T(2)), numbers<T>::vals + 2);
- //
- CHECK_EQ(&next(back<T>() ), numbers<T>::vals + 0);
- CHECK_EQ(&next(back<T>(), T(1)), numbers<T>::vals + 0);
- CHECK_EQ(&next(back<T>(), T(2)), numbers<T>::vals + 1);
- CHECK_EQ(&next(back<T>(), T(3)), numbers<T>::vals + 2);
- //
- CHECK_EQ(&prev(front<T>()), numbers<T>::vals + C4_COUNTOF(numbers<T>::vals) - 1);
- CHECK_EQ(&prev(front<T>(), T(1)), numbers<T>::vals + C4_COUNTOF(numbers<T>::vals) - 1);
- CHECK_EQ(&prev(front<T>(), T(2)), numbers<T>::vals + C4_COUNTOF(numbers<T>::vals) - 2);
- //
- CHECK_EQ(&prev(back<T>()), numbers<T>::vals + C4_COUNTOF(numbers<T>::vals) - 2);
- CHECK_EQ(&prev(back<T>(), T(1)), numbers<T>::vals + C4_COUNTOF(numbers<T>::vals) - 2);
- CHECK_EQ(&prev(back<T>(), T(2)), numbers<T>::vals + C4_COUNTOF(numbers<T>::vals) - 3);
-}
-
-TEST_CASE("test_util.overflow_by")
-{
- char buf_[128];
- substr buf = buf_;
- REQUIRE_EQ(overflow_by<int8_t>(buf, INT8_C(127), INT8_C(0), INT8_C(10)), "127");
- REQUIRE_EQ(overflow_by<int8_t>(buf, INT8_C(127), INT8_C(0), INT8_C(16)), "0x7f");
- REQUIRE_EQ(overflow_by<int8_t>(buf, INT8_C(127), INT8_C(1), INT8_C(10)), "128");
- REQUIRE_EQ(overflow_by<int8_t>(buf, INT8_C(127), INT8_C(1), INT8_C(16)), "0x80");
- REQUIRE_EQ(overflow_by<int8_t>(buf, INT8_C(127), INT8_C(2), INT8_C(10)), "129");
- REQUIRE_EQ(overflow_by<int8_t>(buf, INT8_C(127), INT8_C(2), INT8_C(16)), "0x81");
-}
-
-TEST_CASE("test_util.underflow_by")
-{
- char buf_[128];
- substr buf = buf_;
- REQUIRE_EQ(underflow_by<int8_t>(buf, INT8_C(-128), INT8_C(0), INT8_C(10)), "-128");
- REQUIRE_EQ(underflow_by<int8_t>(buf, INT8_C(-128), INT8_C(0), INT8_C(16)), "-0x80");
- REQUIRE_EQ(underflow_by<int8_t>(buf, INT8_C(-128), INT8_C(1), INT8_C(10)), "-129");
- REQUIRE_EQ(underflow_by<int8_t>(buf, INT8_C(-128), INT8_C(1), INT8_C(16)), "-0x81");
- REQUIRE_EQ(underflow_by<int8_t>(buf, INT8_C(-128), INT8_C(2), INT8_C(10)), "-130");
- REQUIRE_EQ(underflow_by<int8_t>(buf, INT8_C(-128), INT8_C(2), INT8_C(16)), "-0x82");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-TEST_CASE_TEMPLATE("digits_dec", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- CHECK_EQ(digits_dec(number.val), nopfx(number.dec).len);
- }
-}
-
-TEST_CASE_TEMPLATE("digits_hex", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- CHECK_EQ(digits_hex(number.val), nopfx(number.hex).len);
- }
-}
-
-TEST_CASE_TEMPLATE("digits_oct", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- CHECK_EQ(digits_oct(number.val), nopfx(number.oct).len);
- }
-}
-
-
-TEST_CASE_TEMPLATE("digits_bin", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- CHECK_EQ(digits_bin(number.val), nopfx(number.bin).len);
- }
-}
-
-
-//-----------------------------------------------------------------------------
-TEST_CASE_TEMPLATE("write_dec_unchecked", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- unsigned digits = digits_dec(number.val);
- REQUIRE_GE(buf.len, digits);
- write_dec_unchecked(buf, number.val, digits);
- CHECK_EQ(buf.first(digits), nopfx(number.dec));
- }
-}
-
-TEST_CASE_TEMPLATE("write_hex_unchecked", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- unsigned digits = digits_hex(number.val);
- REQUIRE_GE(buf.len, digits);
- write_hex_unchecked(buf, number.val, digits);
- CHECK_EQ(buf.first(digits), nopfx(number.hex));
- }
-}
-
-TEST_CASE_TEMPLATE("write_oct_unchecked", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- unsigned digits = digits_hex(number.val);
- REQUIRE_GE(buf.len, digits);
- write_hex_unchecked(buf, number.val, digits);
- CHECK_EQ(buf.first(digits), nopfx(number.hex));
- }
-}
-
-TEST_CASE_TEMPLATE("write_bin_unchecked", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- unsigned digits = digits_bin(number.val);
- REQUIRE_GE(buf.len, digits);
- write_bin_unchecked(buf, number.val, digits);
- CHECK_EQ(buf.first(digits), nopfx(number.bin));
- }
-}
-
-
-//-----------------------------------------------------------------------------
-TEST_CASE_TEMPLATE("write_dec", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- REQUIRE_GE(buf.len, number.dec.len);
- size_t retn = write_dec(substr{}, number.val);
- CHECK_EQ(retn, number.dec.len);
- size_t retb = write_dec(buf, number.val);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retb, number.dec.len);
- CHECK_EQ(buf.first(retb), number.dec);
- }
-}
-
-TEST_CASE_TEMPLATE("write_hex", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- REQUIRE_GE(buf.len, number.hex.sub(2).len);
- size_t retn = write_hex(substr{}, number.val);
- CHECK_EQ(retn, number.hex.sub(2).len);
- size_t retb = write_hex(buf, number.val);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retb, number.hex.sub(2).len);
- CHECK_EQ(buf.first(retb), number.hex.sub(2));
- }
-}
-
-TEST_CASE_TEMPLATE("write_oct", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- REQUIRE_GE(buf.len, number.oct.sub(2).len);
- size_t retn = write_oct(substr{}, number.val);
- CHECK_EQ(retn, number.oct.sub(2).len);
- size_t retb = write_oct(buf, number.val);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retb, number.oct.sub(2).len);
- CHECK_EQ(buf.first(retb), nopfx(number.oct));
- }
-}
-
-TEST_CASE_TEMPLATE("write_bin", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- REQUIRE_GE(buf.len, number.bin.sub(2).len);
- size_t retb = write_bin(substr{}, number.val);
- CHECK_EQ(retb, number.bin.sub(2).len);
- size_t retn = write_bin(buf, number.val);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retb, number.bin.sub(2).len);
- CHECK_EQ(buf.first(retb), nopfx(number.bin));
- }
-}
-
-
-//-----------------------------------------------------------------------------
-TEST_CASE_TEMPLATE("write_dec_digits", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- SUBCASE("num digits smaller than length")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- for(int less_ : {0, 1, 2, 4, 8, (int)number.dec.len})
- {
- size_t less = (size_t) less_;
- if(less > number.dec.len)
- continue;
- size_t num_digits = number.dec.len - less;
- INFO("less=" << less << " num_digits=" << num_digits);
- size_t retn = write_dec(substr{}, number.val, num_digits);
- CHECK_EQ(retn, number.dec.len); // the number must always be written
- size_t retb = write_dec(buf, number.val, num_digits);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retb, number.dec.len);
- CHECK_EQ(buf.first(retb), number.dec);
- }
- }
- }
- SUBCASE("num digits larger than length")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- for(int more_ : {1, 2, 4, 8})
- {
- size_t more = (size_t) more_;
- size_t num_digits = number.dec.len + more;
- INFO("more=" << more << " num_digits=" << num_digits);
- size_t retn = write_dec(substr{}, number.val, num_digits);
- CHECK_EQ(retn, num_digits);
- size_t retb = write_dec(buf, number.val, num_digits);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retb, num_digits);
- csubstr result = buf.first(retb);
- CHECK_EQ(result.last(number.dec.len), number.dec);
- if(number.val)
- {
- CHECK_EQ(result.triml('0'), number.dec);
- CHECK_EQ(result.first_not_of('0'), more);
- }
- else
- {
- CHECK(result.begins_with('0'));
- CHECK_EQ(result.first_not_of('0'), csubstr::npos);
- }
- }
- }
- }
-}
-
-TEST_CASE_TEMPLATE("write_hex_digits", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- SUBCASE("num digits smaller than length")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- for(int less_ : {0, 1, 2, 4, 8, (int)number.hex.len})
- {
- const csubstr hex = nopfx(number.hex);
- size_t less = (size_t) less_;
- if(less > hex.len)
- continue;
- size_t num_digits = hex.len - less;
- INFO("less=" << less << " num_digits=" << num_digits);
- size_t retn = write_hex(substr{}, number.val, num_digits);
- CHECK_EQ(retn, hex.len); // the number must always be written
- size_t retb = write_hex(buf, number.val, num_digits);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retb, hex.len);
- CHECK_EQ(buf.first(retb), hex);
- }
- }
- }
- SUBCASE("num digits larger than length")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- for(int more_ : {1, 2, 4, 8})
- {
- const csubstr hex = nopfx(number.hex);
- size_t more = (size_t) more_;
- size_t num_digits = hex.len + more;
- INFO("more=" << more << " num_digits=" << num_digits);
- size_t retn = write_hex(substr{}, number.val, num_digits);
- CHECK_EQ(retn, num_digits);
- size_t retb = write_hex(buf, number.val, num_digits);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retn, num_digits);
- csubstr result = buf.first(retn);
- CHECK_EQ(result.last(hex.len), hex);
- if(number.val)
- {
- CHECK_EQ(result.triml('0'), hex);
- CHECK_EQ(result.first_not_of('0'), more);
- }
- else
- {
- CHECK(result.begins_with('0'));
- CHECK_EQ(result.first_not_of('0'), csubstr::npos);
- }
- }
- }
- }
-}
-
-TEST_CASE_TEMPLATE("write_oct_digits", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- SUBCASE("num digits smaller than length")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- for(int less_ : {0, 1, 2, 4, 8, (int)number.oct.len})
- {
- const csubstr oct = nopfx(number.oct);
- size_t less = (size_t) less_;
- if(less > oct.len)
- continue;
- size_t num_digits = oct.len - less;
- INFO("less=" << less << " num_digits=" << num_digits);
- size_t retn = write_oct(substr{}, number.val, num_digits);
- CHECK_EQ(retn, oct.len); // the number must always be written
- size_t retb = write_oct(buf, number.val, num_digits);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retb, oct.len);
- CHECK_EQ(buf.first(retb), oct);
- }
- }
- }
- SUBCASE("num digits larger than length")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- for(int more_ : {1, 2, 4, 8})
- {
- const csubstr oct = nopfx(number.oct);
- size_t more = (size_t) more_;
- size_t num_digits = oct.len + more;
- INFO("more=" << more << " num_digits=" << num_digits);
- size_t retn = write_oct(substr{}, number.val, num_digits);
- CHECK_EQ(retn, num_digits);
- size_t retb = write_oct(buf, number.val, num_digits);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retb, num_digits);
- csubstr result = buf.first(retb);
- CHECK_EQ(result.last(oct.len), oct);
- if(number.val)
- {
- CHECK_EQ(result.triml('0'), oct);
- CHECK_EQ(result.first_not_of('0'), more);
- }
- else
- {
- CHECK(result.begins_with('0'));
- CHECK_EQ(result.first_not_of('0'), csubstr::npos);
- }
- }
- }
- }
-}
-
-TEST_CASE_TEMPLATE("write_bin_digits", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- SUBCASE("num digits smaller than length")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- for(int less_ : {0, 1, 2, 4, 8, (int)number.bin.len})
- {
- const csubstr bin = nopfx(number.bin);
- size_t less = (size_t) less_;
- if(less > bin.len)
- continue;
- size_t num_digits = bin.len - less;
- INFO("less=" << less << " num_digits=" << num_digits);
- size_t retn = write_bin(substr{}, number.val, num_digits);
- CHECK_EQ(retn, bin.len); // the number must always be written
- size_t retb = write_bin(buf, number.val, num_digits);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retb, bin.len);
- CHECK_EQ(buf.first(retb), bin);
- }
- }
- }
- SUBCASE("num digits larger than length")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < 0)
- continue;
- INFO(number);
- for(int more_ : {1, 2, 4, 8})
- {
- const csubstr bin = nopfx(number.bin);
- size_t more = (size_t) more_;
- size_t num_digits = bin.len + more;
- INFO("more=" << more << " num_digits=" << num_digits);
- size_t retn = write_bin(substr{}, number.val, num_digits);
- CHECK_EQ(retn, num_digits);
- size_t retb = write_bin(buf, number.val, num_digits);
- CHECK_EQ(retb, retn);
- REQUIRE_EQ(retn, num_digits);
- csubstr result = buf.first(retn);
- CHECK_EQ(result.last(bin.len), bin);
- if(number.val)
- {
- CHECK_EQ(result.triml('0'), bin);
- CHECK_EQ(result.first_not_of('0'), more);
- }
- else
- {
- CHECK(result.begins_with('0'));
- CHECK_EQ(result.first_not_of('0'), csubstr::npos);
- }
- }
- }
- }
-}
-
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE_TEMPLATE("xtoa", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- {
- buf.fill('?');
- size_t retn = xtoa(substr{}, number.val);
- CHECK_EQ(retn, number.dec.len);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val);
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- CHECK_EQ(buf.first(retb), number.dec);
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- }
-}
-
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE_TEMPLATE("xtoa_radix.dec", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- {
- buf.fill('?');
- size_t retn = xtoa(substr{}, number.val, T(10));
- CHECK_EQ(retn, number.dec.len);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(10));
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- CHECK_EQ(buf.first(retb), number.dec);
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- const size_t adj = size_t(number.val < 0);
- REQUIRE_LT(adj, number.dec.len);
- const size_t dec_digits = number.dec.len - adj;
- for(size_t more_digits = 0; more_digits < 6; ++more_digits)
- {
- buf.fill('?');
- size_t reqdigits = dec_digits + more_digits;
- INFO("dec_digits=" << dec_digits << " more_digits=" << more_digits << " req_digits=" << reqdigits);
- size_t retn = xtoa(substr{}, number.val, T(10), reqdigits);
- CHECK_EQ(retn, reqdigits + size_t(number.val < 0));
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(10), reqdigits);
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- CHECK(buf.first(retb).ends_with(number.dec.sub(number.val < 0)));
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- for(size_t less_digits = 0; less_digits < dec_digits; ++less_digits)
- {
- buf.fill('?');
- size_t reqdigits = dec_digits - less_digits;
- INFO("dec_digits=" << dec_digits << " less_digits=" << less_digits << " req_digits=" << reqdigits);
- size_t retn = xtoa(substr{}, number.val, T(10), reqdigits);
- CHECK_EQ(retn, number.dec.len);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(10), reqdigits);
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- CHECK(buf.first(retb).ends_with(number.dec.sub(number.val < 0)));
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- }
-}
-
-TEST_CASE_TEMPLATE("xtoa_radix.hex", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- {
- buf.fill('?');
- size_t retn = xtoa(substr{}, number.val, T(16));
- CHECK_EQ(retn, number.hex.len);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(16));
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- CHECK_EQ(buf.first(retb), number.hex);
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- const size_t adj = size_t(number.val < 0) + size_t(2); // 2 for 0x
- REQUIRE_LT(adj, number.hex.len);
- const size_t hex_digits = number.hex.len - adj;
- for(size_t more_digits = 0; more_digits < 6; ++more_digits)
- {
- buf.fill('?');
- size_t reqdigits = hex_digits + more_digits;
- INFO("more_digits=" << more_digits << " reqdigits=" << reqdigits);
- size_t retn = xtoa(substr{}, number.val, T(16), reqdigits);
- CHECK_EQ(retn, reqdigits + adj);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(16), reqdigits);
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- csubstr result = buf.first(retb);
- csubstr ref = number.hex.sub(adj);
- INFO("result=" << result << " ref=" << ref);
- if(number.val < 0)
- CHECK(buf.first(retb).begins_with('-'));
- CHECK(result.ends_with(ref));
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- for(size_t less_digits = 0; less_digits < hex_digits; ++less_digits)
- {
- buf.fill('?');
- size_t reqdigits = hex_digits - less_digits;
- INFO("hex_digits=" << hex_digits << " less_digits=" << less_digits << " req_digits=" << reqdigits);
- size_t retn = xtoa(substr{}, number.val, T(16), reqdigits);
- CHECK_EQ(retn, number.hex.len);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(16), reqdigits);
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- CHECK(buf.first(retb).ends_with(number.hex.sub(number.val < 0)));
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- }
-}
-
-TEST_CASE_TEMPLATE("xtoa_radix.oct", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- {
- buf.fill('?');
- size_t retn = xtoa(substr{}, number.val, T(8));
- CHECK_EQ(retn, number.oct.len);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(8));
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- CHECK_EQ(buf.first(retb), number.oct);
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- const size_t adj = size_t(number.val < 0) + size_t(2); // 2 for 0o
- REQUIRE_LT(adj, number.oct.len);
- const size_t oct_digits = number.oct.len - adj;
- for(size_t more_digits = 0; more_digits < 6; ++more_digits)
- {
- buf.fill('?');
- size_t reqdigits = oct_digits + more_digits;
- INFO("more_digits=" << more_digits << " reqdigits=" << reqdigits);
- size_t retn = xtoa(substr{}, number.val, T(8), reqdigits);
- CHECK_EQ(retn, reqdigits + adj);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(8), reqdigits);
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- csubstr result = buf.first(retb);
- csubstr ref = number.oct.sub(adj);
- INFO("result=" << result << " ref=" << ref);
- if(number.val < 0)
- CHECK(buf.first(retb).begins_with('-'));
- CHECK(result.ends_with(ref));
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- for(size_t less_digits = 0; less_digits < oct_digits; ++less_digits)
- {
- buf.fill('?');
- size_t reqdigits = oct_digits - less_digits;
- INFO("oct_digits=" << oct_digits << " less_digits=" << less_digits << " req_digits=" << reqdigits);
- size_t retn = xtoa(substr{}, number.val, T(8), reqdigits);
- CHECK_EQ(retn, number.oct.len);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(8), reqdigits);
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- CHECK(buf.first(retb).ends_with(number.oct.sub(number.val < 0)));
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- }
-}
-
-TEST_CASE_TEMPLATE("xtoa_radix.bin", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- {
- buf.fill('?');
- size_t retn = xtoa(substr{}, number.val, T(2));
- CHECK_EQ(retn, number.bin.len);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(2));
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- CHECK_EQ(buf.first(retb), number.bin);
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- const size_t adj = size_t(number.val < 0) + size_t(2); // 2 for 0b
- REQUIRE_LT(adj, number.bin.len);
- const size_t bin_digits = number.bin.len - adj;
- for(size_t more_digits = 0; more_digits < 6; ++more_digits)
- {
- buf.fill('?');
- size_t reqdigits = bin_digits + more_digits;
- INFO("more_digits=" << more_digits << " reqdigits=" << reqdigits);
- size_t retn = xtoa(substr{}, number.val, T(2), reqdigits);
- CHECK_EQ(retn, reqdigits + adj);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(2), reqdigits);
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- csubstr result = buf.first(retb);
- csubstr ref = number.bin.sub(adj);
- INFO("result=" << result << " ref=" << ref);
- if(number.val < 0)
- CHECK(buf.first(retb).begins_with('-'));
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- for(size_t less_digits = 0; less_digits < bin_digits; ++less_digits)
- {
- buf.fill('?');
- size_t reqdigits = bin_digits - less_digits;
- INFO("bin_digits=" << bin_digits << " less_digits=" << less_digits << " req_digits=" << reqdigits);
- size_t retn = xtoa(substr{}, number.val, T(2), reqdigits);
- CHECK_EQ(retn, number.bin.len);
- CHECK_UNARY(buf.begins_with('?') && buf.first_not_of('?') == csubstr::npos);
- size_t retb = xtoa(buf, number.val, T(2), reqdigits);
- CHECK_EQ(retn, retb);
- REQUIRE_LE(retb, buf.len);
- CHECK(buf.first(retb).ends_with(number.bin.sub(number.val < 0)));
- T after_roundtrip = number.val + T(1);
- CHECK(atox(buf.first(retb), &after_roundtrip));
- CHECK_EQ(after_roundtrip, number.val);
- }
- }
-}
-
-
-//-----------------------------------------------------------------------------
-
-
-TEST_CASE_TEMPLATE("overflows.in_range_does_not_overflow", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- SUBCASE("dec")
- {
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- CHECK_FALSE(overflows<T>(number.dec));
- CHECK_FALSE(overflows<T>(capitalize(buf, number.dec)));
- for(size_t numz : {1u, 4u, 6u})
- {
- substr buf2 = zpad(buf, number.dec, numz);
- CHECK_FALSE(overflows<T>(buf2));
- buf2.toupper();
- CHECK_FALSE(overflows<T>(buf2));
- }
- }
- }
- SUBCASE("hex")
- {
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- CHECK_FALSE(overflows<T>(number.hex));
- CHECK_FALSE(overflows<T>(capitalize(buf, number.hex)));
- for(size_t numz : {1u, 4u, 6u})
- {
- substr buf2 = zpad(buf, number.hex, numz);
- CHECK_FALSE(overflows<T>(buf2));
- buf2.toupper();
- CHECK_FALSE(overflows<T>(buf2));
- }
- }
- }
- SUBCASE("oct")
- {
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- CHECK_FALSE(overflows<T>(number.oct));
- CHECK_FALSE(overflows<T>(capitalize(buf, number.oct)));
- for(size_t numz : {1u, 4u, 6u})
- {
- substr buf2 = zpad(buf, number.oct, numz);
- CHECK_FALSE(overflows<T>(buf2));
- buf2.toupper();
- CHECK_FALSE(overflows<T>(buf2));
- }
- }
- }
- SUBCASE("bin")
- {
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- CHECK_FALSE(overflows<T>(number.bin));
- CHECK_FALSE(overflows<T>(capitalize(buf, number.bin)));
- for(size_t numz : {1u, 4u, 6u})
- {
- substr buf2 = zpad(buf, number.bin, numz);
- CHECK_FALSE(overflows<T>(buf2));
- buf2.toupper();
- CHECK_FALSE(overflows<T>(buf2));
- }
- }
- }
-}
-
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE_TEMPLATE("read_dec", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- SUBCASE("numbers")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < T(0))
- continue;
- INFO(number);
- {
- T val = number.val + T(1);
- CHECK(read_dec(number.dec, &val));
- CHECK_EQ(val, number.val);
- }
- // capitalize
- {
- T val = number.val + T(1);
- csubstr cbuf = capitalize(buf, number.dec);
- CHECK(read_dec(cbuf, &val));
- CHECK_EQ(val, number.val);
- }
- // zero-prefix
- for(size_t numz : {1u, 4u, 6u})
- {
- T val = number.val + T(1);
- substr buf2 = zpad(buf, number.dec, numz);
- INFO("zprefix=" << buf2);
- CHECK(read_dec(buf2, &val));
- CHECK_EQ(val, number.val);
- buf2.toupper();
- CHECK(read_dec(buf2, &val));
- CHECK_EQ(val, number.val);
- }
- }
- }
- SUBCASE("fail")
- {
- T val = {};
- for(auto ic : invalid_cases)
- {
- if(ic.dec.empty())
- continue;
- INFO(ic.dec);
- CHECK(!read_dec(ic.dec, &val));
- }
- }
-}
-
-TEST_CASE_TEMPLATE("read_hex", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- SUBCASE("numbers")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < T(0))
- continue;
- INFO(number);
- // must not accept 0x prefix
- {
- T val = number.val + T(1);
- CHECK(!read_hex(number.hex, &val));
- }
- // must accept without prefix
- csubstr hex = nopfx(number.hex);
- INFO("nopfx(hex)=" << hex);
- {
- T val = number.val + T(1);
- CHECK(read_hex(hex, &val));
- CHECK_EQ(val, number.val);
- }
- // capitalize
- {
- csubstr cbuf = capitalize(buf, hex);
- INFO("capitalized=" << buf);
- REQUIRE_EQ(cbuf.len, hex.len);
- T val = number.val + T(1);
- CHECK(read_hex(cbuf, &val));
- CHECK_EQ(val, number.val);
- }
- // zero-prefix
- for(size_t numz : {1u, 4u, 6u})
- {
- T val = number.val + T(1);
- substr zprefix = zpad(buf, hex, numz);
- INFO("zprefix='" << zprefix << "'");
- CHECK(read_hex(zprefix, &val));
- CHECK_EQ(val, number.val);
- zprefix.toupper();
- CHECK(read_hex(zprefix, &val));
- CHECK_EQ(val, number.val);
- }
- }
- }
- SUBCASE("fail")
- {
- char buf2_[128] = {};
- substr buf2 = buf2_;
- size_t icase = 0;
- for(auto const& ic : invalid_cases)
- {
- csubstr cbuf = nopfx(buf, ic.hex);
- csubstr cbuf2 = capitalize(buf2, cbuf);
- INFO("case#=" << icase << " hex='" << ic.hex << "' nopfx(hex)='" << cbuf << "' capitalize(nopfx(hex))='" << cbuf2 << "'");
- REQUIRE_EQ(cbuf2.len, cbuf.len);
- // must not accept 0x prefix
- if(ic.hex.len)
- {
- T val = {};
- CHECK(!read_hex(ic.hex, &val));
- }
- // it is invalid; must not accept even without 0x prefix
- if(cbuf.len)
- {
- T val = {};
- CHECK(!read_hex(cbuf, &val));
- }
- // capitalize
- if(cbuf2.len)
- {
- T val = {};
- CHECK(!read_hex(cbuf2, &val));
- }
- ++icase;
- }
- }
-}
-
-TEST_CASE_TEMPLATE("read_oct", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- SUBCASE("numbers")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < T(0))
- continue;
- INFO(number);
- // must not accept 0x prefix
- {
- T val = number.val + T(1);
- CHECK(!read_oct(number.oct, &val));
- }
- // must accept without prefix
- csubstr oct = nopfx(number.oct);
- INFO("nopfx(oct)=" << oct);
- {
- T val = number.val + T(1);
- CHECK(read_oct(oct, &val));
- CHECK_EQ(val, number.val);
- }
- // capitalize
- {
- csubstr cbuf = capitalize(buf, oct);
- INFO("capitalized=" << buf);
- REQUIRE_EQ(cbuf.len, oct.len);
- T val = number.val + T(1);
- CHECK(read_oct(cbuf, &val));
- CHECK_EQ(val, number.val);
- }
- // zero-prefix
- for(size_t numz : {1u, 4u, 6u})
- {
- T val = number.val + T(1);
- substr zprefix = zpad(buf, oct, numz);
- INFO("zprefix=" << zprefix);
- CHECK(read_oct(zprefix, &val));
- CHECK_EQ(val, number.val);
- zprefix.toupper();
- CHECK(read_oct(zprefix, &val));
- CHECK_EQ(val, number.val);
- }
- }
- }
- SUBCASE("fail")
- {
- char buf2_[128] = {};
- substr buf2 = buf2_;
- size_t icase = 0;
- for(auto const& ic : invalid_cases)
- {
- csubstr cbuf = nopfx(buf, ic.oct);
- csubstr cbuf2 = capitalize(buf2, cbuf);
- INFO("case#=" << icase << " oct='" << ic.oct << "' nopfx(oct)='" << cbuf << "' capitalize(nopfx(oct))='" << cbuf2 << "'");
- REQUIRE_EQ(cbuf2.len, cbuf.len);
- // must not accept 0x prefix
- if(ic.oct.len)
- {
- T val = {};
- CHECK(!read_oct(ic.oct, &val));
- }
- // it is invalid; must not accept even without 0x prefix
- if(cbuf.len)
- {
- T val = {};
- CHECK(!read_oct(cbuf, &val));
- }
- // capitalize
- if(cbuf2.len)
- {
- T val = {};
- CHECK(!read_oct(cbuf2, &val));
- }
- ++icase;
- }
- }
-}
-
-TEST_CASE_TEMPLATE("read_bin", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- SUBCASE("numbers")
- {
- ITER_NUMBERS(T, number)
- {
- if(number.val < T(0))
- continue;
- INFO(number);
- // must not accept 0x prefix
- {
- T val = number.val + T(1);
- CHECK(!read_bin(number.bin, &val));
- }
- // must accept without prefix
- csubstr bin = nopfx(number.bin);
- INFO("nopfx(bin)=" << bin);
- {
- T val = number.val + T(1);
- CHECK(read_bin(bin, &val));
- CHECK_EQ(val, number.val);
- }
- // capitalize
- {
- csubstr cbuf = capitalize(buf, bin);
- INFO("capitalized=" << buf);
- REQUIRE_EQ(cbuf.len, bin.len);
- T val = number.val + T(1);
- CHECK(read_bin(cbuf, &val));
- CHECK_EQ(val, number.val);
- }
- // zero-prefix
- for(size_t numz : {1u, 4u, 6u})
- {
- T val = number.val + T(1);
- substr zprefix = zpad(buf, bin, numz);
- INFO("zprefix=" << zprefix);
- CHECK(read_bin(zprefix, &val));
- CHECK_EQ(val, number.val);
- zprefix.toupper();
- CHECK(read_bin(zprefix, &val));
- CHECK_EQ(val, number.val);
- }
- }
- }
- SUBCASE("fail")
- {
- char buf2_[128] = {};
- substr buf2 = buf2_;
- size_t icase = 0;
- for(auto const& ic : invalid_cases)
- {
- csubstr cbuf = nopfx(buf, ic.bin);
- csubstr cbuf2 = capitalize(buf2, cbuf);
- INFO("case#=" << icase << " bin='" << ic.bin << "' nopfx(bin)='" << cbuf << "' capitalize(nopfx(bin))='" << cbuf2 << "'");
- REQUIRE_EQ(cbuf2.len, cbuf.len);
- // must not accept 0x prefix
- if(ic.bin.len)
- {
- T val = {};
- CHECK(!read_bin(ic.bin, &val));
- }
- // it is invalid; must not accept even without 0x prefix
- if(cbuf.len)
- {
- T val = {};
- CHECK(!read_bin(cbuf, &val));
- }
- // capitalize
- if(cbuf2.len)
- {
- T val = {};
- CHECK(!read_bin(cbuf2, &val));
- }
- ++icase;
- }
- }
-}
-
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE_TEMPLATE("atox", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- SUBCASE("dec")
- {
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- {
- T val = number.val + T(1);
- CHECK(atox(number.dec, &val));
- CHECK_EQ(val, number.val);
- }
- // zero-prefix
- for(size_t numz : {1u, 4u, 6u})
- {
- T val = number.val + T(1);
- substr zprefix = zpad(buf, number.dec, numz);
- INFO("zprefix=" << zprefix);
- CHECK(atox(zprefix, &val));
- CHECK_EQ(val, number.val);
- }
- }
- }
- SUBCASE("hex")
- {
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- {
- T val = number.val + T(1);
- CHECK(atox(number.hex, &val));
- CHECK_EQ(val, number.val);
- }
- // capitalize
- {
- T val = number.val + T(1);
- csubstr cbuf = capitalize(buf, number.hex);
- CHECK(atox(cbuf, &val));
- CHECK_EQ(val, number.val);
- }
- // zero-prefix
- for(size_t numz : {1u, 4u, 6u})
- {
- T val = number.val + T(1);
- substr zprefix = zpad(buf, number.hex, numz);
- INFO("zprefix=" << zprefix);
- CHECK(atox(zprefix, &val));
- CHECK_EQ(val, number.val);
- zprefix.toupper();
- CHECK(atox(zprefix, &val));
- CHECK_EQ(val, number.val);
- }
- }
- }
- SUBCASE("oct")
- {
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- {
- T val = number.val + T(1);
- CHECK(atox(number.oct, &val));
- CHECK_EQ(val, number.val);
- }
- // capitalize
- {
- T val = number.val + T(1);
- csubstr cbuf = capitalize(buf, number.oct);
- CHECK(atox(cbuf, &val));
- CHECK_EQ(val, number.val);
- }
- // zero-prefix
- for(size_t numz : {1u, 4u, 6u})
- {
- T val = number.val + T(1);
- substr zprefix = zpad(buf, number.oct, numz);
- INFO("zprefix=" << zprefix);
- CHECK(atox(zprefix, &val));
- CHECK_EQ(val, number.val);
- zprefix.toupper();
- CHECK(atox(zprefix, &val));
- CHECK_EQ(val, number.val);
- }
- }
- }
- SUBCASE("bin")
- {
- ITER_NUMBERS(T, number)
- {
- INFO(number);
- {
- T val = number.val + T(1);
- CHECK(atox(number.bin, &val));
- CHECK_EQ(val, number.val);
- }
- // capitalize
- {
- T val = number.val + T(1);
- csubstr cbuf = capitalize(buf, number.bin);
- CHECK(atox(cbuf, &val));
- CHECK_EQ(val, number.val);
- }
- // zero-prefix
- for(size_t numz : {1u, 4u, 6u})
- {
- T val = number.val + T(1);
- substr zprefix = zpad(buf, number.oct, numz);
- INFO("zprefix=" << zprefix);
- CHECK(atox(zprefix, &val));
- CHECK_EQ(val, number.val);
- zprefix.toupper();
- CHECK(atox(zprefix, &val));
- CHECK_EQ(val, number.val);
- }
- }
- }
-}
-
-TEST_CASE_TEMPLATE("atox.fail", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- SUBCASE("dec")
- {
- size_t icase = 0;
- for(auto const& ic : invalid_cases)
- {
- csubstr cdec = capitalize(buf, ic.dec);
- INFO("case#=" << icase << " dec='" << ic.dec << "' capitalize='" << cdec << "'");
- REQUIRE_EQ(cdec.len, ic.dec.len);
- {
- T val = {};
- CHECK(!atox(ic.dec, &val));
- }
- {
- T val = {};
- CHECK(!atox(cdec, &val));
- }
- ++icase;
- }
- }
- SUBCASE("hex")
- {
- size_t icase = 0;
- for(auto const& ic : invalid_cases)
- {
- csubstr chex = capitalize(buf, ic.hex);
- INFO("case#=" << icase << " hex='" << ic.hex << "' capitalize='" << chex << "'");
- REQUIRE_EQ(chex.len, ic.hex.len);
- {
- T val = {};
- CHECK(!atox(ic.hex, &val));
- }
- {
- T val = {};
- CHECK(!atox(chex, &val));
- }
- ++icase;
- }
- }
- SUBCASE("oct")
- {
- size_t icase = 0;
- for(auto const& ic : invalid_cases)
- {
- csubstr coct = capitalize(buf, ic.oct);
- INFO("case#=" << icase << " oct='" << ic.oct << "' capitalize='" << coct << "'");
- REQUIRE_EQ(coct.len, ic.oct.len);
- {
- T val = {};
- CHECK(!atox(ic.oct, &val));
- }
- {
- T val = {};
- CHECK(!atox(coct, &val));
- }
- ++icase;
- }
- }
- SUBCASE("bin")
- {
- size_t icase = 0;
- for(auto const& ic : invalid_cases)
- {
- csubstr cbin = capitalize(buf, ic.bin);
- INFO("case#=" << icase << " bin='" << ic.bin << "' capitalize='" << cbin << "'");
- REQUIRE_EQ(cbin.len, ic.bin.len);
- {
- T val = {};
- CHECK(!atox(ic.bin, &val));
- }
- {
- T val = {};
- CHECK(!atox(cbin, &val));
- }
- ++icase;
- }
- }
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-template<class T>
-void test_overflows(std::initializer_list<const char *> args)
-{
- for(const char *s : args)
- CHECK_MESSAGE(overflows<T>(to_csubstr(s)), "num=" << s);
-}
-
-template<class T>
-void test_no_overflows(std::initializer_list<const char *> args)
-{
- for(const char *s : args)
- CHECK_MESSAGE(!overflows<T>(to_csubstr(s)), "num=" << s);
-}
-
-template<class T>
-auto test_no_overflow_zeroes()
- -> typename std::enable_if<std::is_signed<T>::value, void>::type
-{
- test_no_overflows<T>({ "-", "-0", "-000", "-0b0", "-0B0", "-0x0", "-0X0", "-0o0", "-0O0" });
- test_no_overflows<T>({ "", "0", "000", "0b0", "0B0", "0x0", "0X0", "0o0", "0O0" });
-}
-
-template<class T>
-auto test_no_overflow_zeroes()
- -> typename std::enable_if<std::is_unsigned<T>::value, void>::type
-{
- test_no_overflows<T>({ "", "0", "000", "0b0", "0B0", "0x0", "0X0", "0o0", "0O0" });
-}
-
-
-// test overflow in sizes smaller than 64 bit by upcasting
-TEST_CASE_TEMPLATE("atox.overflow", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t)
-{
- char buf_[128];
- substr buf = buf_;
- auto do_test = [](bool is_overflow, number_case<T> const& num, csubstr exceeded, number_case<T> const& wrapped){
- char buf2_[128] = {};
- substr buf2 = buf2_;
- INFO("exceeded=" << exceeded << " is_overflow=" << is_overflow);
- INFO("num=" << num);
- INFO("wrapped=" << wrapped);
- CHECK_EQ(is_overflow, overflows<T>(exceeded));
- if(is_overflow)
- CHECK_NE(&num, &wrapped);
- else
- CHECK_EQ(&num, &wrapped);
- {
- T val = num.val + T(1);
- CHECK(atox(exceeded, &val));
- CHECK_EQ(val, wrapped.val);
- }
- // capitalize
- buf2 = capitalize(buf2_, exceeded);
- INFO(buf2);
- CHECK_EQ(is_overflow, overflows<T>(buf2));
- {
- T val = num.val + T(1);
- CHECK(atox(buf2, &val));
- CHECK_EQ(val, wrapped.val);
- }
- // zero-pad on the left
- for(size_t numz : {1u, 4u, 6u})
- {
- buf2 = zpad(buf2_, exceeded, numz);
- CHECK_EQ(is_overflow, overflows<T>(buf2));
- {
- T val = num.val + T(1);
- CHECK(atox(buf2, &val));
- CHECK_EQ(val, wrapped.val);
- }
- buf2.toupper();
- CHECK_EQ(is_overflow, overflows<T>(buf2));
- {
- T val = num.val + T(1);
- CHECK(atox(buf2, &val));
- CHECK_EQ(val, wrapped.val);
- }
- }
- };
- auto do_test_overflow = [&](T exceed_how_much, T radix){
- REQUIRE(exceed_how_much >= 0);
- number_case<T> const& backelm = back<T>();
- number_case<T> const& wrapelm = next(backelm, (size_t)exceed_how_much);
- csubstr exceeded = overflow_by(buf, backelm.val, exceed_how_much, radix);
- do_test(exceed_how_much > 0, backelm, exceeded, wrapelm);
- };
- auto do_test_underflow = [&](T exceed_how_much, T radix){
- REQUIRE(exceed_how_much >= 0);
- number_case<T> const& frntelm = front<T>();
- number_case<T> const& wrapelm = prev(frntelm, (size_t)exceed_how_much);
- csubstr exceeded = underflow_by(buf, frntelm.val, exceed_how_much, radix);
- do_test(exceed_how_much > 0, frntelm, exceeded, wrapelm);
- };
- SUBCASE("zeroes")
- {
- test_no_overflow_zeroes<T>();
- }
- SUBCASE("dec")
- {
- do_test_underflow(T(0), T(10));
- do_test_underflow(T(1), T(10));
- do_test_underflow(T(2), T(10));
- do_test_underflow(T(3), T(10));
- do_test_underflow(T(4), T(10));
- do_test_underflow(T(5), T(10));
- do_test_overflow(T(0), T(10));
- do_test_overflow(T(1), T(10));
- do_test_overflow(T(2), T(10));
- do_test_overflow(T(3), T(10));
- do_test_overflow(T(4), T(10));
- do_test_overflow(T(5), T(10));
- }
- SUBCASE("hex")
- {
- do_test_underflow(T(0), T(16));
- do_test_underflow(T(1), T(16));
- do_test_underflow(T(2), T(16));
- do_test_underflow(T(3), T(16));
- do_test_underflow(T(4), T(16));
- do_test_underflow(T(5), T(16));
- do_test_overflow(T(0), T(16));
- do_test_overflow(T(1), T(16));
- do_test_overflow(T(2), T(16));
- do_test_overflow(T(3), T(16));
- do_test_overflow(T(4), T(16));
- do_test_overflow(T(5), T(16));
- }
- SUBCASE("oct")
- {
- do_test_underflow(T(0), T(8));
- do_test_underflow(T(1), T(8));
- do_test_underflow(T(2), T(8));
- do_test_underflow(T(3), T(8));
- do_test_underflow(T(4), T(8));
- do_test_underflow(T(5), T(8));
- do_test_overflow(T(0), T(8));
- do_test_overflow(T(1), T(8));
- do_test_overflow(T(2), T(8));
- do_test_overflow(T(3), T(8));
- do_test_overflow(T(4), T(8));
- do_test_overflow(T(5), T(8));
- }
- SUBCASE("bin")
- {
- do_test_underflow(T(0), T(2));
- do_test_underflow(T(1), T(2));
- do_test_underflow(T(2), T(2));
- do_test_underflow(T(3), T(2));
- do_test_underflow(T(4), T(2));
- do_test_underflow(T(5), T(2));
- do_test_overflow(T(0), T(2));
- do_test_overflow(T(1), T(2));
- do_test_overflow(T(2), T(2));
- do_test_overflow(T(3), T(2));
- do_test_overflow(T(4), T(2));
- do_test_overflow(T(5), T(2));
- }
-}
-
-TEST_CASE_TEMPLATE("atox.overflow64", T, int64_t, uint64_t)
-{
- char buf_[128] = {};
- substr buf = buf_;
- auto test_atox = [](csubstr s, overflow64case<T> const& c){
- INFO("s=" << s);
- T val = c.wrapped + T(1);
- if(std::is_signed<T>::value || !s.begins_with('-'))
- {
- CHECK(atox(s, &val));
- CHECK_EQ(val, c.wrapped);
- }
- else
- {
- CHECK(!atox(s, &val));
- }
- };
- SUBCASE("zeroes")
- {
- test_no_overflow_zeroes<T>();
- }
- SUBCASE("dec")
- {
- for(auto c : overflow64cases<T>::values)
- {
- INFO(c.dec);
- CHECK_EQ(c.is_overflow, overflows<T>(c.dec));
- test_atox(c.dec, c);
- csubstr capitalized = capitalize(buf, c.dec);
- CHECK_EQ(c.is_overflow, overflows<T>(capitalized));
- test_atox(capitalized, c);
- for(size_t numz : {1u, 4u, 6u})
- {
- substr buf2 = zpad(buf, c.dec, numz);
- CHECK_EQ(c.is_overflow, overflows<T>(buf2));
- test_atox(buf2, c);
- buf2.toupper();
- CHECK_EQ(c.is_overflow, overflows<T>(buf2));
- test_atox(buf2, c);
- }
- }
- }
- SUBCASE("hex")
- {
- for(auto c : overflow64cases<T>::values)
- {
- INFO(c.hex);
- CHECK_EQ(c.is_overflow, overflows<T>(c.hex));
- test_atox(c.hex, c);
- csubstr capitalized = capitalize(buf, c.hex);
- CHECK_EQ(c.is_overflow, overflows<T>(capitalized));
- test_atox(capitalized, c);
- for(size_t numz : {1u, 4u, 6u})
- {
- substr buf2 = zpad(buf, c.hex, numz);
- CHECK_EQ(c.is_overflow, overflows<T>(buf2));
- test_atox(buf2, c);
- buf2.toupper();
- CHECK_EQ(c.is_overflow, overflows<T>(buf2));
- test_atox(buf2, c);
- }
- }
- }
- SUBCASE("oct")
- {
- for(auto c : overflow64cases<T>::values)
- {
- INFO(c.oct);
- CHECK_EQ(c.is_overflow, overflows<T>(c.oct));
- test_atox(c.oct, c);
- csubstr capitalized = capitalize(buf, c.oct);
- CHECK_EQ(c.is_overflow, overflows<T>(capitalized));
- test_atox(capitalized, c);
- for(size_t numz : {1u, 4u, 6u})
- {
- substr buf2 = zpad(buf, c.oct, numz);
- CHECK_EQ(c.is_overflow, overflows<T>(buf2));
- test_atox(buf2, c);
- buf2.toupper();
- CHECK_EQ(c.is_overflow, overflows<T>(buf2));
- test_atox(buf2, c);
- }
- }
- }
- SUBCASE("bin")
- {
- for(auto c : overflow64cases<T>::values)
- {
- INFO(c.bin);
- CHECK_EQ(c.is_overflow, overflows<T>(c.bin));
- test_atox(c.bin, c);
- csubstr capitalized = capitalize(buf, c.bin);
- CHECK_EQ(c.is_overflow, overflows<T>(capitalized));
- test_atox(capitalized, c);
- for(size_t numz : {1u, 4u, 6u})
- {
- substr buf2 = zpad(buf, c.bin, numz);
- CHECK_EQ(c.is_overflow, overflows<T>(buf2));
- test_atox(buf2, c);
- buf2.toupper();
- CHECK_EQ(c.is_overflow, overflows<T>(buf2));
- test_atox(buf2, c);
- }
- }
- }
-}
-
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-template<class T>
-void test_overflows_hex()
-{
- T x = {};
- std::string str;
- if (std::is_unsigned<T>::value)
- {
- /* with leading zeroes */
- str = "0x0" + std::string(sizeof (T) * 2, 'F');
- CHECK_MESSAGE(!overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(std::numeric_limits<T>::max(), x);
-
- str = "0x01" + std::string(sizeof (T) * 2, '0');
- CHECK_MESSAGE(overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(std::numeric_limits<T>::min(), x);
- }
- else
- {
- /* with leading zeroes */
- str = "0x07" + std::string(sizeof (T) * 2 - 1, 'F');
- CHECK_MESSAGE(!overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(std::numeric_limits<T>::max(), x);
-
- str = "0x0" + std::string(sizeof (T) * 2, 'F');
- CHECK_MESSAGE(overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(-1, x);
-
- str = "-0x08" + std::string(sizeof (T) * 2 - 1, '0');
- CHECK_MESSAGE(!overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(std::numeric_limits<T>::min(), x);
-
- str = "-0x08" + std::string(sizeof (T) * 2 - 2, '0') + "1";
- CHECK_MESSAGE(overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(std::numeric_limits<T>::max(), x);
- }
-}
-
-template<class T>
-void test_overflows_bin()
-{
- T x = {};
- std::string str;
- if (std::is_unsigned<T>::value)
- {
- /* with leading zeroes */
- str = "0b0" + std::string(sizeof (T) * 8, '1');
- CHECK_MESSAGE(!overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(std::numeric_limits<T>::max(), x);
-
- str = "0b01" + std::string(sizeof (T) * 8, '0');
- CHECK_MESSAGE(overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(std::numeric_limits<T>::min(), x);
- }
- else
- {
- /* with leading zeroes */
- str = "0b0" + std::string(sizeof (T) * 8 - 1, '1');
- CHECK_MESSAGE(!overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(std::numeric_limits<T>::max(), x);
-
- str = "0b0" + std::string(sizeof (T) * 8, '1');
- CHECK_MESSAGE(overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(-1, x);
-
- str = "-0b01" + std::string(sizeof (T) * 8 - 1, '0');
- CHECK_MESSAGE(!overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(std::numeric_limits<T>::min(), x);
-
- str = "-0b01" + std::string(sizeof (T) * 8 - 2, '0') + "1";
- CHECK_MESSAGE(overflows<T>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(std::numeric_limits<T>::max(), x);
- }
-}
-
-// TODO: test_overflows_oct
-
-template<class T>
-typename std::enable_if<std::is_unsigned<T>::value, void>::type
-test_overflows()
-{
- for(int radix : { 2, 8, 10, 16 })
- {
- char bufc[100] = {0};
- substr s(bufc);
- INFO("radix=" << radix << " num=" << s);
-
- uint64_t max = (uint64_t) std::numeric_limits<T>::max();
- size_t sz = utoa<uint64_t>(s, max, (uint64_t)radix);
- REQUIRE_LE(sz, s.size());
- CHECK(!overflows<T>(s.first(sz)));
- memset(s.str, 0, s.len);
- sz = utoa<uint64_t>(s, max + 1, (uint64_t)radix);
- REQUIRE_LE(sz, s.size());
- CHECK(overflows<T>(s.first(sz)));
- }
-
- test_overflows_hex<T>();
- test_overflows_bin<T>();
- // TODO: octal
-}
-
-template<class T>
-typename std::enable_if<std::is_signed<T>::value, void>::type
-test_overflows()
-{
- for(int radix : { 2, 8, 10, 16 })
- {
- char bufc[100] = {0};
- substr s(bufc);
- INFO("radix=" << radix << " num=" << s);
-
- int64_t max = (int64_t) std::numeric_limits<T>::max();
- size_t sz = itoa<int64_t>(s, max, (int64_t)radix);
- REQUIRE_LE(sz, s.size());
- CHECK(!overflows<T>(s.first(sz)));
- memset(s.str, 0, s.len);
- sz = itoa<int64_t>(s, max + 1, (int64_t)radix);
- REQUIRE_LE(sz, s.size());
- CHECK(overflows<T>(s.first(sz)));
-
- int64_t min = (int64_t) std::numeric_limits<T>::min();
- sz = itoa<int64_t>(s, min, (int64_t)radix);
- REQUIRE_LE(sz, s.size());
- CHECK(!overflows<T>(s.first(sz)));
- memset(s.str, 0, s.len);
- sz = itoa<int64_t>(s, min - 1, (int64_t)radix);
- REQUIRE_LE(sz, s.size());
- CHECK(overflows<T>(s.first(sz)));
- }
-
- test_overflows_hex<T>();
- test_overflows_bin<T>();
- // TODO: octal
-}
-
-TEST_CASE_TEMPLATE("overflows.8bit_32bit", T, uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t)
-{
- test_overflows<T>();
-}
-
-TEST_CASE("overflows.u64")
-{
- CHECK(!overflows<uint64_t>("18446744073709551614"));
- CHECK(!overflows<uint64_t>("18446744073709551615"));
- CHECK(overflows<uint64_t>("18446744073709551616"));
-
- // more chars but leading zeroes
- CHECK(!overflows<uint64_t>("0018446744073709551615"));
-
- { /* with leading zeroes */
- std::string str;
- uint64_t x = {};
- str = "0o01" + std::string(21, '7');
- CHECK_MESSAGE(!overflows<uint64_t>(to_csubstr(str)), "num=" << str);
- str = "0o02" + std::string(21, '0');
- CHECK_MESSAGE(overflows<uint64_t>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(0, x);
- }
-
- test_overflows_hex<uint64_t>();
- test_overflows_bin<uint64_t>();
-}
-
-TEST_CASE("overflows.i64")
-{
- CHECK(!overflows<int64_t>("9223372036854775806"));
- CHECK(!overflows<int64_t>("9223372036854775807"));
- CHECK(overflows<int64_t>("9223372036854775808"));
- CHECK(!overflows<int64_t>("-9223372036854775808"));
- CHECK(overflows<int64_t>("-9223372036854775809"));
-
- // more chars, but leading zeroes
- CHECK(!overflows<int64_t>("0009223372036854775807"));
- CHECK(!overflows<int64_t>("-0009223372036854775807"));
-
- { /* with leading zeroes */
- std::string str;
- int64_t x = {};
- str = "0o0" + std::string(21, '7');
- CHECK_MESSAGE(!overflows<int64_t>(to_csubstr(str)), "num=" << str);
- str = "0o01" + std::string(21, '0');
- CHECK_MESSAGE(overflows<int64_t>(to_csubstr(str)), "num=" << str);
- CHECK(atox(to_csubstr(str), &x));
- CHECK_EQ(std::numeric_limits<int64_t>::min(), x);
- }
-
- test_overflows_hex<int64_t>();
- test_overflows_bin<int64_t>();
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-/** remove trailing digits after precision */
-template<class T>
-T remprec10(T val, int precision)
-{
- T fprec = T(1);
- for(int i = 0; i < precision; ++i)
- fprec *= T(10);
- T rval = val * fprec;
- return ((T)((int64_t)rval)) / fprec;
-}
-
-template<class T>
-T test_ator(csubstr s, T ref)
-{
- INFO("str=" << s << " ref=" << ref);
- T rval;
- CHECK(atox(s, &rval));
- INFO("rval=" << rval);
- CHECK_EQ(memcmp(&rval, &ref, sizeof(T)), 0);
- return rval;
-}
-
-template<class Real>
-void test_rtoa(substr buf, Real f, int precision, const char *scient, const char *flt, const char* flex, const char *hexa, const char *hexa_alternative=nullptr)
-{
- size_t ret;
- Real pf = remprec10(f, precision);
-
- {
- INFO("num=" << f << " precision=" << precision << " scient=" << scient);
- memset(buf.str, 0, buf.len);
- ret = xtoa(buf, f, precision, FTOA_SCIENT);
- REQUIRE_LE(ret, buf.len);
- CHECK_EQ(buf.first(ret), to_csubstr(scient));
- test_ator(buf.first(ret), pf);
- }
-
- {
- INFO("num=" << f << " precision=" << precision << " flt=" << flt);
- memset(buf.str, 0, ret);
- ret = xtoa(buf, f, precision, FTOA_FLOAT);
- REQUIRE_LE(ret, buf.len);
- CHECK_EQ(buf.first(ret), to_csubstr(flt));
- test_ator(buf.first(ret), pf);
- }
-
- {
- INFO("num=" << f << " precision=" << precision << " flex=" << flex);
- memset(buf.str, 0, ret);
- ret = xtoa(buf, f, precision+1, FTOA_FLEX);
- REQUIRE_LE(ret, buf.len);
- CHECK_EQ(buf.first(ret), to_csubstr(flex));
- test_ator(buf.first(ret), pf);
- }
-
- {
- if(!hexa_alternative)
- hexa_alternative = hexa;
- INFO("num=" << f << " precision=" << precision << " hexa=" << hexa << " hexa_alternative=" << hexa_alternative);
- memset(buf.str, 0, ret);
- ret = xtoa(buf, f, precision, FTOA_HEXA);
- REQUIRE_LE(ret, buf.len);
- INFO("buf='" << buf.first(ret) << "'");
-
- CHECK((buf.first(ret) == to_csubstr(hexa) || buf.first(ret) == to_csubstr(hexa_alternative)));
- Real readback = {};
- CHECK(atox(buf.first(ret), &readback));
- INFO("readback=" << readback);
- REQUIRE_EQ(xtoa(buf, readback, precision, FTOA_HEXA), ret);
- Real readback2 = {};
- CHECK(atox(buf.first(ret), &readback2));
- INFO("readback2=" << readback2);
- CHECK_EQ(memcmp(&readback2, &readback, sizeof(Real)), 0);
- }
-}
-
-
-TEST_CASE("ftoa.basic")
-{
- char bufc[128];
- substr buf(bufc);
- C4_ASSERT(buf.len == sizeof(bufc)-1);
-
- // earlier versions of emscripten's sprintf() do not respect some
- // precision values when printing in hexadecimal format.
- //
- // @see https://github.com/biojppm/c4core/pull/52
- #if defined(__EMSCRIPTEN__) && __EMSCRIPTEN_major__ < 3
- #define _c4emscripten_alt(alt) , alt
- #define _c4emscripten_alt2(alt1, alt2) , alt2
- #else
- #define _c4emscripten_alt(alt)
- #define _c4emscripten_alt2(alt1, alt2) , alt1
- #endif
-
- float f = 1.1234123f;
- double d = 1.1234123;
-
- test_rtoa(buf, f, 0, /*scient*/"1e+00", /*flt*/"1", /*flex*/"1", /*hexa*/"0x1p+0");
- test_rtoa(buf, d, 0, /*scient*/"1e+00", /*flt*/"1", /*flex*/"1", /*hexa*/"0x1p+0");
-
- test_rtoa(buf, f, 1, /*scient*/"1.1e+00", /*flt*/"1.1", /*flex*/"1.1", /*hexa*/"0x1.2p+0");
- test_rtoa(buf, d, 1, /*scient*/"1.1e+00", /*flt*/"1.1", /*flex*/"1.1", /*hexa*/"0x1.2p+0");
-
- test_rtoa(buf, f, 2, /*scient*/"1.12e+00", /*flt*/"1.12", /*flex*/"1.12", /*hexa*/"0x1.20p+0" _c4emscripten_alt("0x1.1f8p+0"));
- test_rtoa(buf, d, 2, /*scient*/"1.12e+00", /*flt*/"1.12", /*flex*/"1.12", /*hexa*/"0x1.20p+0" _c4emscripten_alt("0x1.1f8p+0"));
-
- test_rtoa(buf, f, 3, /*scient*/"1.123e+00", /*flt*/"1.123", /*flex*/"1.123", /*hexa*/"0x1.1f9p+0" _c4emscripten_alt("0x1.1f98p+0"));
- test_rtoa(buf, d, 3, /*scient*/"1.123e+00", /*flt*/"1.123", /*flex*/"1.123", /*hexa*/"0x1.1f9p+0" _c4emscripten_alt("0x1.1f98p+0"));
-
- test_rtoa(buf, f, 4, /*scient*/"1.1234e+00", /*flt*/"1.1234", /*flex*/"1.1234", /*hexa*/"0x1.1f98p+0");
- test_rtoa(buf, d, 4, /*scient*/"1.1234e+00", /*flt*/"1.1234", /*flex*/"1.1234", /*hexa*/"0x1.1f98p+0");
-
- f = 1.01234123f;
- d = 1.01234123;
-
- test_rtoa(buf, f, 0, /*scient*/"1e+00", /*flt*/"1", /*flex*/"1", /*hexa*/"0x1p+0");
- test_rtoa(buf, d, 0, /*scient*/"1e+00", /*flt*/"1", /*flex*/"1", /*hexa*/"0x1p+0");
-
- test_rtoa(buf, f, 1, /*scient*/"1.0e+00", /*flt*/"1.0", /*flex*/"1", /*hexa*/"0x1.0p+0");
- test_rtoa(buf, d, 1, /*scient*/"1.0e+00", /*flt*/"1.0", /*flex*/"1", /*hexa*/"0x1.0p+0");
-
- test_rtoa(buf, f, 2, /*scient*/"1.01e+00", /*flt*/"1.01", /*flex*/"1.01", /*hexa*/"0x1.03p+0");
- test_rtoa(buf, d, 2, /*scient*/"1.01e+00", /*flt*/"1.01", /*flex*/"1.01", /*hexa*/"0x1.03p+0");
-
- test_rtoa(buf, f, 3, /*scient*/"1.012e+00", /*flt*/"1.012", /*flex*/"1.012", /*hexa*/"0x1.033p+0" _c4emscripten_alt2("0x1.032p+0", "0x1.0328p+0"));
- test_rtoa(buf, d, 3, /*scient*/"1.012e+00", /*flt*/"1.012", /*flex*/"1.012", /*hexa*/"0x1.033p+0" _c4emscripten_alt2("0x1.032p+0", "0x1.0328p+0"));
-
- test_rtoa(buf, f, 4, /*scient*/"1.0123e+00", /*flt*/"1.0123", /*flex*/"1.0123", /*hexa*/"0x1.0329p+0");
- test_rtoa(buf, d, 4, /*scient*/"1.0123e+00", /*flt*/"1.0123", /*flex*/"1.0123", /*hexa*/"0x1.0329p+0");
-
- f = 0.f;
- d = 0.;
-
- test_rtoa(buf, f, 0, /*scient*/"0e+00", /*flt*/"0", /*flex*/"0", /*hexa*/"0x0p+0");
- test_rtoa(buf, d, 0, /*scient*/"0e+00", /*flt*/"0", /*flex*/"0", /*hexa*/"0x0p+0");
-
- test_rtoa(buf, f, 1, /*scient*/"0.0e+00", /*flt*/"0.0", /*flex*/"0", /*hexa*/"0x0.0p+0");
- test_rtoa(buf, d, 1, /*scient*/"0.0e+00", /*flt*/"0.0", /*flex*/"0", /*hexa*/"0x0.0p+0");
-
- test_rtoa(buf, f, 2, /*scient*/"0.00e+00", /*flt*/"0.00", /*flex*/"0", /*hexa*/"0x0.00p+0");
- test_rtoa(buf, d, 2, /*scient*/"0.00e+00", /*flt*/"0.00", /*flex*/"0", /*hexa*/"0x0.00p+0");
-
- test_rtoa(buf, f, 3, /*scient*/"0.000e+00", /*flt*/"0.000", /*flex*/"0", /*hexa*/"0x0.000p+0" _c4emscripten_alt2("0x0.000p+0", "0x0.000p+0"));
- test_rtoa(buf, d, 3, /*scient*/"0.000e+00", /*flt*/"0.000", /*flex*/"0", /*hexa*/"0x0.000p+0" _c4emscripten_alt2("0x0.000p+0", "0x0.000p+0"));
-
- test_rtoa(buf, f, 4, /*scient*/"0.0000e+00", /*flt*/"0.0000", /*flex*/"0", /*hexa*/"0x0.0000p+0");
- test_rtoa(buf, d, 4, /*scient*/"0.0000e+00", /*flt*/"0.0000", /*flex*/"0", /*hexa*/"0x0.0000p+0");
-
- f = 1.f;
- d = 1.;
-
- test_rtoa(buf, f, 0, /*scient*/"1e+00", /*flt*/"1", /*flex*/"1", /*hexa*/"0x1p+0");
- test_rtoa(buf, d, 0, /*scient*/"1e+00", /*flt*/"1", /*flex*/"1", /*hexa*/"0x1p+0");
-
- test_rtoa(buf, f, 1, /*scient*/"1.0e+00", /*flt*/"1.0", /*flex*/"1", /*hexa*/"0x1.0p+0");
- test_rtoa(buf, d, 1, /*scient*/"1.0e+00", /*flt*/"1.0", /*flex*/"1", /*hexa*/"0x1.0p+0");
-
- test_rtoa(buf, f, 2, /*scient*/"1.00e+00", /*flt*/"1.00", /*flex*/"1", /*hexa*/"0x1.00p+0");
- test_rtoa(buf, d, 2, /*scient*/"1.00e+00", /*flt*/"1.00", /*flex*/"1", /*hexa*/"0x1.00p+0");
-
- test_rtoa(buf, f, 3, /*scient*/"1.000e+00", /*flt*/"1.000", /*flex*/"1", /*hexa*/"0x1.000p+0" _c4emscripten_alt2("0x1.000p+0", "0x1.000p+0"));
- test_rtoa(buf, d, 3, /*scient*/"1.000e+00", /*flt*/"1.000", /*flex*/"1", /*hexa*/"0x1.000p+0" _c4emscripten_alt2("0x1.000p+0", "0x1.000p+0"));
-
- test_rtoa(buf, f, 4, /*scient*/"1.0000e+00", /*flt*/"1.0000", /*flex*/"1", /*hexa*/"0x1.0000p+0");
- test_rtoa(buf, d, 4, /*scient*/"1.0000e+00", /*flt*/"1.0000", /*flex*/"1", /*hexa*/"0x1.0000p+0");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-TEST_CASE_TEMPLATE("atof.integral", T, float, double)
-{
- auto t_ = [](csubstr str, int val){
- T rval = (T)10 * (T)val;
- INFO("str=" << str);
- bool ret = atox(str, &rval);
- CHECK_EQ(ret, true);
- CHECK_EQ(static_cast<int>(rval), val);
- CHECK_EQ(rval, (T)val);
- };
-
- csubstr s = "12345678";
- t_(s, 12345678);
- t_(s.first(8), 12345678);
- t_(s.first(7), 1234567);
- t_(s.first(6), 123456);
- t_(s.first(5), 12345);
- t_(s.first(4), 1234);
- t_(s.first(3), 123);
- t_(s.first(2), 12);
- t_(s.first(1), 1);
-}
-
-TEST_CASE_TEMPLATE("atof.hexa", T, float, double)
-{
- auto t_ = [](csubstr str, bool isok){
- T rval = {};
- INFO("str=" << str);
- CHECK_EQ(atox(str, &rval), isok);
- };
- #if C4CORE_NO_FAST_FLOAT
- #define _scanf_accepts(expected) !expected
- #else
- #define _scanf_accepts(expected) expected
- #endif
- t_("0x1.p+0", true);
- t_("0x1.p", _scanf_accepts(false));
- t_("0x1.p+", _scanf_accepts(false));
- t_("0x12p+0", true);
- t_("0x12p", _scanf_accepts(false));
- t_("0xabcdef.abcdefp+0", true);
- t_("0xABCDEF.ABCDEFp+0", true);
- t_("0x1g", _scanf_accepts(false));
- t_("0x1.2", true);
- t_("0x1.", true);
- t_("0x1.0329p+0", true);
- t_("0x1.0329P+0", true);
- t_("0x1.aAaAaAp+0", true);
- t_("0x1.agA+0", _scanf_accepts(false));
-}
-
-TEST_CASE_TEMPLATE("atof.infnan", T, float, double)
-{
- T pinf = std::numeric_limits<T>::infinity();
- T ninf = -std::numeric_limits<T>::infinity();
- T nan = std::numeric_limits<T>::quiet_NaN();
- T rval = {};
- test_ator("infinity", pinf);
- test_ator("inf", pinf);
- test_ator("-infinity", ninf);
- test_ator("-inf", ninf);
- test_ator("nan", nan);
-}
-
-TEST_CASE_TEMPLATE("atof.fail_parse", T, float, double)
-{
- auto t_ = [](csubstr str){
- T rval;
- INFO("str=" << str << " rval=" << rval);
- CHECK_EQ(atox(str, &rval), false);
- };
- t_(".inf");
- t_("-.inf");
- t_(".nan");
- t_("-.nan");
- t_("not a float!");
- #ifndef C4CORE_NO_FAST_FLOAT
- t_("0xfonix!");
- #endif
- //t_("123.45not a float!");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-TEST_CASE_TEMPLATE("to_chars.empty_buffer", T, uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, void*)
-{
- char buf_[100];
- substr buf = buf_;
- CHECK_EQ(to_chars({}, T(101)), to_chars(buf_, T(101)));
- CHECK_EQ(to_chars({}, T(101)), to_chars(buf , T(101)));
-}
-// due to an implementation quirk with sprintf, for floats the empty is GE
-TEST_CASE_TEMPLATE("to_chars.empty_buffer", T, float, double)
-{
- char buf_[100];
- substr buf = buf_;
- CHECK_GE(to_chars({}, T(101)), to_chars(buf_, T(101)));
- CHECK_GE(to_chars({}, T(101)), to_chars(buf , T(101)));
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-TEST_CASE("to_chars.std_string")
-{
- std::string foo("foo");
- char buf_[32];
- substr buf(buf_);
- size_t result = to_chars(buf, foo);
- CHECK_EQ(result, 3);
- CHECK_EQ(buf.first(3), "foo");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-TEST_CASE("to_chars.bool")
-{
- char buf_[32];
- substr buf(buf_);
- csubstr result = to_chars_sub(buf, true);
- CHECK_EQ(result, "1");
- result = to_chars_sub(buf, false);
- CHECK_EQ(result, "0");
-}
-
-TEST_CASE("from_chars.bool")
-{
- bool result = false;
- for(const char *s : {"1", "true", "True", "TRUE"})
- {
- INFO("s='" << s << "'");
- bool ok = from_chars(to_csubstr(s), &result);
- CHECK_UNARY(ok);
- CHECK_UNARY(result);
- }
- for(const char *s : {"0", "false", "False", "FALSE"})
- {
- INFO("s='" << s << "'");
- bool ok = from_chars(to_csubstr(s), &result);
- CHECK_UNARY(ok);
- CHECK_UNARY_FALSE(result);
- }
-}
-
-TEST_CASE("from_chars_first.bool")
-{
- bool result = false;
- for(const char *s : {"1", "10000", "2", "3", "10", "010", "001", "0001", "true", "True", "TRUE"})
- {
- INFO("s='" << s << "'");
- bool ok = from_chars(to_csubstr(s), &result);
- CHECK_UNARY(ok);
- CHECK_UNARY(result);
- }
- for(const char *s : {"0", "00", "000", "0000", "false", "False", "FALSE"})
- {
- INFO("s='" << s << "'");
- bool ok = from_chars(to_csubstr(s), &result);
- CHECK_UNARY(ok);
- CHECK_UNARY_FALSE(result);
- }
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-// test that no characters are trimmed at the end of
-// the number due to printf-based implementations
-// needing space for the \0
-template<class T>
-void test_trimmed_fit(T v, csubstr expected)
-{
- char buf_[128] = {};
- char buf2_[128] = {};
- substr buf(buf_);
- substr buf2(buf_);
- REQUIRE_GE(buf.len, expected.len);
- REQUIRE_GE(buf2.len, expected.len);
- csubstr result = to_chars_sub(buf, v);
- CHECK_EQ(result, expected);
- csubstr result2 = to_chars_sub(buf2.sub(result.len), v);
- CHECK_EQ(result2, result);
- std::string str;
- catrs(&str, v);
- CHECK_EQ(expected, to_csubstr(str));
- CHECK_EQ(result, to_csubstr(str));
-}
-
-TEST_CASE("to_chars.trimmed_fit_int")
-{
- test_trimmed_fit(12345678, "12345678");
-}
-
-TEST_CASE("to_chars.trimmed_fit_float")
-{
- test_trimmed_fit(0.374f, "0.374");
- test_trimmed_fit(12.374f, "12.374");
-}
-
-TEST_CASE("to_chars.trimmed_fit_double")
-{
- test_trimmed_fit(0.374, "0.374");
- test_trimmed_fit(12.374, "12.374");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-template<class T>
-void to_chars_roundtrip(substr buf, T const& val, csubstr expected)
-{
- T cp = {};
- INFO("val=" << val);
- csubstr res = to_chars_sub(buf, val);
- CHECK_EQ(res, expected);
- bool ok = from_chars(res, &cp);
- CHECK_UNARY(ok);
- CHECK_EQ(cp, val);
-}
-
-template<size_t N>
-void to_chars_roundtrip(char (&buf)[N], csubstr val)
-{
- char cp_[N] = {};
- substr cp = cp_;
- INFO("val=" << val);
- REQUIRE_LE(val.len, N);
- csubstr res = to_chars_sub(buf, val);
- CHECK_EQ(res.len, val.len);
- CHECK_EQ(res, val);
- bool ok = from_chars(res, &cp);
- CHECK_UNARY(ok);
- CHECK_EQ(cp, val);
-}
-
-
-TEST_CASE("to_chars.roundtrip_bool")
-{
- char buf[128];
- to_chars_roundtrip<bool>(buf, false, "0");
- to_chars_roundtrip<bool>(buf, true, "1");
-}
-
-
-TEST_CASE("to_chars.roundtrip_char")
-{
- char buf[128];
- to_chars_roundtrip<char>(buf, 'a', "a");
- to_chars_roundtrip<char>(buf, 'b', "b");
- to_chars_roundtrip<char>(buf, 'c', "c");
- to_chars_roundtrip<char>(buf, 'd', "d");
-}
-
-#define C4_TEST_ROUNDTRIP_INT(ty) \
-TEST_CASE("to_chars.roundtrip_" #ty)\
-{\
- char buf[128];\
- to_chars_roundtrip<ty>(buf, 0, "0");\
- to_chars_roundtrip<ty>(buf, 1, "1");\
- to_chars_roundtrip<ty>(buf, 2, "2");\
- to_chars_roundtrip<ty>(buf, 3, "3");\
- to_chars_roundtrip<ty>(buf, 4, "4");\
-}
-C4_TEST_ROUNDTRIP_INT(int8_t)
-C4_TEST_ROUNDTRIP_INT(int16_t)
-C4_TEST_ROUNDTRIP_INT(int32_t)
-C4_TEST_ROUNDTRIP_INT(int64_t)
-C4_TEST_ROUNDTRIP_INT(uint8_t)
-C4_TEST_ROUNDTRIP_INT(uint16_t)
-C4_TEST_ROUNDTRIP_INT(uint32_t)
-C4_TEST_ROUNDTRIP_INT(uint64_t)
-// some of the following types are not the same as above:
-using ulong = unsigned long;
-using uint = unsigned int;
-C4_TEST_ROUNDTRIP_INT(int)
-C4_TEST_ROUNDTRIP_INT(uint)
-C4_TEST_ROUNDTRIP_INT(long)
-C4_TEST_ROUNDTRIP_INT(ulong)
-C4_TEST_ROUNDTRIP_INT(size_t)
-C4_TEST_ROUNDTRIP_INT(intptr_t)
-C4_TEST_ROUNDTRIP_INT(uintptr_t)
-
-#define C4_TEST_ROUNDTRIP_REAL(ty) \
-TEST_CASE("to_chars.roundtrip_" #ty)\
-{\
- char buf[128];\
- to_chars_roundtrip<ty>(buf, ty(0.0), "0");\
- to_chars_roundtrip<ty>(buf, ty(1.0), "1");\
- to_chars_roundtrip<ty>(buf, ty(2.0), "2");\
- to_chars_roundtrip<ty>(buf, ty(3.0), "3");\
- to_chars_roundtrip<ty>(buf, ty(4.0), "4");\
-}
-C4_TEST_ROUNDTRIP_REAL(float)
-C4_TEST_ROUNDTRIP_REAL(double)
-
-TEST_CASE("to_chars.roundtrip_substr")
-{
- char buf[128];
- to_chars_roundtrip(buf, "");
- to_chars_roundtrip(buf, "0");
- to_chars_roundtrip(buf, "1");
- to_chars_roundtrip(buf, "2");
- to_chars_roundtrip(buf, "3");
- to_chars_roundtrip(buf, "4");
- to_chars_roundtrip(buf, "zhis iz a test");
-}
-
-TEST_CASE("to_chars.substr_enough_size")
-{
- char orig_[] = "0123456789";
- substr orig = orig_;
- char result_[20];
- substr result = result_;
- size_t len = to_chars(result, orig);
- CHECK_EQ(len, orig.len);
- CHECK_NE(result.str, orig.str);
- CHECK_EQ(result.first(10), orig);
-}
-
-TEST_CASE("to_chars.substr_insufficient_size")
-{
- char orig_[] = "0123456789";
- substr orig = orig_;
- char result_[11] = {};
- substr result = result_;
- result.len = 5;
- size_t len = to_chars(result, orig);
- CHECK_EQ(len, orig.len);
- CHECK_NE(result.str, orig.str);
- CHECK_EQ(result.first(5), "01234");
- CHECK_EQ(substr(result_).last(5), "\0\0\0\0\0");
-}
-
-TEST_CASE("from_chars.csubstr")
-{
- csubstr orig = "0123456789";
- csubstr result;
- CHECK_NE(result.str, orig.str);
- CHECK_NE(result.len, orig.len);
- bool ok = from_chars(orig, &result);
- CHECK(ok);
- CHECK_EQ(result.str, orig.str);
- CHECK_EQ(result.len, orig.len);
-}
-
-TEST_CASE("from_chars.substr_enough_size")
-{
- char buf_[128] = {};
- substr result = buf_;
- for(char r : result)
- {
- CHECK_EQ(r, '\0');
- }
- bool ok = from_chars("0123456789", &result);
- CHECK(ok);
- CHECK_EQ(result.len, 10);
- CHECK_EQ(result.str, buf_);
- CHECK_EQ(result, "0123456789");
-}
-
-TEST_CASE("from_chars.substr_insufficient_size")
-{
- char buf_[128] = {};
- substr buf = buf_;
- buf.len = 0;
- bool ok = from_chars("0123456789", &buf);
- CHECK_FALSE(ok);
- for(size_t i = 0; i < 10; ++i)
- {
- CHECK_EQ(buf_[i], '\0');
- }
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-struct ptr_expected { void *ptr; c4::csubstr str; };
-const ptr_expected ptr_cases[] = {
- {(void*)0x0, c4::csubstr("0x0")},
- {(void*)0x1234, c4::csubstr("0x1234")},
- {(void*)-0x1234, c4::csubstr("-0x1234")},
-};
-
-template<class T>
-void test_xtoa_ptr(const char *type_name)
-{
- INFO("type=" << type_name);
- char buf_[128] = {};
- c4::substr buf(buf_);
- for(auto &pe : ptr_cases)
- {
- INFO("val=" << pe.str);
- size_t ret = xtoa(buf, (T const*)pe.ptr);
- CHECK_EQ(ret, pe.str.len);
- CHECK_EQ(buf.first(ret), pe.str);
- }
-}
-
-template<class T>
-void test_to_chars_ptr(const char *type_name)
-{
- INFO("type=" << type_name);
- char buf_[128] = {};
- c4::substr buf(buf_);
- for(auto &pe : ptr_cases)
- {
- INFO("val=" << pe.str);
- size_t ret = to_chars(buf, (T const*)pe.ptr);
- CHECK_EQ(ret, pe.str.len);
- CHECK_EQ(buf.first(ret), pe.str);
- }
-}
-
-template<class T>
-void test_atox_ptr(const char *type_name)
-{
- INFO("type=" << type_name);
- for(auto &pe : ptr_cases)
- {
- T *ptr = nullptr;
- INFO("val=" << pe.str);
- bool ret = atox(pe.str, &ptr);
- CHECK(ret);
- CHECK_EQ((void*)ptr, pe.ptr);
- }
-}
-
-template<class T>
-void test_from_chars_ptr(const char *type_name)
-{
- INFO("type=" << type_name);
- for(auto &pe : ptr_cases)
- {
- T *ptr = nullptr;
- INFO("val=" << pe.str);
- bool ret = from_chars(pe.str, &ptr);
- CHECK(ret);
- CHECK_EQ((void*)ptr, pe.ptr);
- }
-}
-
-template<class T>
-void test_from_chars_first_ptr(const char *type_name)
-{
- INFO("type=" << type_name);
- for(auto &pe : ptr_cases)
- {
- T *ptr = nullptr;
- INFO("val=" << pe.str);
- bool ret = from_chars(pe.str, &ptr);
- CHECK(ret);
- CHECK_EQ((void*)ptr, pe.ptr);
- }
-}
-
-
-TEST_CASE("xtoa.ptr")
-{
- test_xtoa_ptr<void>("void");
- test_xtoa_ptr<int>("int");
- test_xtoa_ptr<std::vector<int>>("std::vector<int>");
-}
-
-TEST_CASE("atox.ptr")
-{
- test_atox_ptr<void>("void");
- test_atox_ptr<int>("int");
- test_atox_ptr<std::vector<int>>("std::vector<int>");
-}
-
-TEST_CASE("to_chars.ptr")
-{
- test_to_chars_ptr<void>("void");
- test_to_chars_ptr<int>("int");
- test_to_chars_ptr<std::vector<int>>("std::vector<int>");
-}
-
-TEST_CASE("from_chars.ptr")
-{
- test_from_chars_ptr<void>("void");
- test_from_chars_ptr<int>("int");
- test_from_chars_ptr<std::vector<int>>("std::vector<int>");
-}
-
-TEST_CASE("from_chars_first.ptr")
-{
- test_from_chars_first_ptr<void>("void");
- test_from_chars_first_ptr<int>("int");
- test_from_chars_first_ptr<std::vector<int>>("std::vector<int>");
-}
-
-} // namespace c4
-
-
-C4_SUPPRESS_WARNING_GCC_POP
-C4_SUPPRESS_WARNING_CLANG_POP
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_ctor_dtor.cpp b/thirdparty/ryml/ext/c4core/test/test_ctor_dtor.cpp
deleted file mode 100644
index f655fb17c..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_ctor_dtor.cpp
+++ /dev/null
@@ -1,306 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/ctor_dtor.hpp"
-#endif
-
-#include "c4/libtest/supprwarn_push.hpp"
-
-#include <c4/test.hpp>
-#include <string>
-#include <vector>
-
-namespace c4 {
-
-namespace {
-struct subject
-{
- static size_t ct_cp, ct_mv, cp, mv;
- static void clear() { ct_cp = ct_mv = cp = mv = 0; }
- subject(Counting<std::string> const&)
- {
- ++ct_cp;
- }
- subject(Counting<std::string> &&)
- {
- ++ct_mv;
- }
- subject(subject const&)
- {
- ++cp;
- }
- subject(subject &&)
- {
- ++mv;
- }
-};
-size_t subject::ct_cp = 0;
-size_t subject::ct_mv = 0;
-size_t subject::cp = 0;
-size_t subject::mv = 0;
-} // empty namespace
-
-
-TEST_CASE("ctor_dtor.construct_n")
-{
- using T = Counting<subject>;
- C4_STATIC_ASSERT(sizeof(T) % alignof(T) == 0);
- alignas(T) char buf1[100 * sizeof(T)];
- T* mem1 = reinterpret_cast<T*>(buf1);
-
- using cs = Counting<std::string>;
-
- decltype(subject::ct_cp) num = 10;
-
- {
- auto chc = T::check_num_ctors_dtors(num, 0);
- auto ch = cs::check_num_ctors_dtors(1, 1);
- cs s("bla");
- construct_n(mem1, num, s);
- CHECK_EQ(subject::ct_cp, num);
- subject::clear();
- }
-
- {
- auto chc = T::check_num_ctors_dtors(num, 0);
- auto ch = cs::check_num_ctors_dtors(1, 1);
- construct_n(mem1, num, cs("bla")); // BAD!!! will call 10 moves
- CHECK_EQ(subject::ct_cp, num);
- subject::clear();
- }
-}
-
-
-//-----------------------------------------------------------------------------
-template<class T>
-void create_make_room_buffer(std::vector<T> &orig)
-{
- C4_STATIC_ASSERT(std::is_integral<T>::value);
- for(int i = 0, e = (int)orig.size(); i < e; ++i)
- {
- orig[static_cast<size_t>(i)] = (T)(33 + i % (122 - 33)); // assign characters
- }
-}
-template<>
-void create_make_room_buffer<std::string>(std::vector<std::string> &orig)
-{
- for(int i = 0, e = (int)orig.size(); i < e; ++i)
- {
- char c = (char)(33 + i % (122 - 33));
- orig[static_cast<size_t>(i)].assign(10, c);
- }
-}
-
-template<class T>
-void do_make_room_inplace(std::vector<T> const& orig, std::vector<T> & buf,
- size_t bufsz, size_t room, size_t pos)
-{
- buf = orig;
- make_room(buf.data() + pos, bufsz, room);
-}
-
-template<class T>
-void do_make_room_srcdst(std::vector<T> const& orig, std::vector<T> & buf,
- size_t bufsz, size_t room, size_t pos)
-{
- buf.resize(orig.size());
- for(auto &t : buf)
- {
- t = T();
- }
- make_room(buf.data(), orig.data(), bufsz, room, pos);
-}
-
-template<class T>
-void do_make_room_check(std::vector<T> const& orig, std::vector<T> & buf,
- size_t bufsz, size_t room, size_t pos)
-{
- for(size_t i = 0, e = orig.size(); i < e; ++i)
- {
- INFO("i=" << (int)i);
- if(i < pos)
- {
- // memory before the move, must be untouched
- CHECK_EQ(buf[i], orig[i]);
- }
- else
- {
- if(i >= pos && i < pos + room)
- {
- // this is the memory that was moved (at its origin)
- //CHECK_EQ(buf[i], orig[i]) << "i=" << (int)i;
- }
- else if(i >= pos + room && i < pos + room + bufsz)
- {
- // this is the memory that was moved (at its destination)
- CHECK_EQ(buf[i], orig[i - room]);
- }
- else
- {
- // this is memory at the end, must be untouched
- CHECK_EQ(buf[i], orig[i]);
- }
- }
- }
-};
-
-template<class T>
-void do_make_room_inplace_test(std::vector<T> const& orig, std::vector<T> & buf,
- size_t bufsz, size_t room, size_t pos)
-{
- do_make_room_inplace(orig, buf, bufsz, room, pos);
- do_make_room_check(orig, buf, bufsz, room, pos);
-}
-
-template<class T>
-void do_make_room_srcdst_test(std::vector<T> const& orig, std::vector<T> & buf,
- size_t /*bufsz*/, size_t room, size_t pos)
-{
- do_make_room_srcdst(orig, buf, buf.size() - room, room, pos);
- do_make_room_check(orig, buf, buf.size() - room, room, pos);
-}
-
-template<class T, class Func>
-void test_make_room(Func test_func)
-{
- std::vector<T> orig(100), buf(100);
-
- create_make_room_buffer(orig);
-
- {
- INFO("in the beginning without overlap");
- test_func(orig, buf, /*bufsz*/10, /*room*/10, /*pos*/0);
- }
-
- {
- INFO("in the beginning with overlap");
- test_func(orig, buf, /*bufsz*/10, /*room*/15, /*pos*/0);
- }
-
- {
- INFO("in the middle without overlap");
- test_func(orig, buf, /*bufsz*/10, /*room*/10, /*pos*/10);
- }
-
- {
- INFO("in the middle with overlap");
- test_func(orig, buf, /*bufsz*/10, /*room*/15, /*pos*/10);
- }
-}
-
-TEST_CASE_TEMPLATE("ctor_dtor.make_room_inplace", T, uint8_t, uint64_t, std::string)
-{
- test_make_room<T>(do_make_room_inplace_test<T>);
-}
-
-TEST_CASE_TEMPLATE("ctor_dtor.make_room_srcdst", T, uint8_t, uint64_t, std::string)
-{
- test_make_room<T>(&do_make_room_srcdst_test<T>);
-}
-
-
-//-----------------------------------------------------------------------------
-
-template<class T>
-void do_destroy_room_inplace(std::vector<T> const& orig, std::vector<T> & buf,
- size_t bufsz, size_t room, size_t pos)
-{
- buf = orig;
- destroy_room(buf.data() + pos, bufsz - pos, room);
-}
-
-template<class T>
-void do_destroy_room_srcdst(std::vector<T> const& orig, std::vector<T> & buf,
- size_t bufsz, size_t room, size_t pos)
-{
- buf = orig;
- destroy_room(buf.data(), orig.data(), bufsz, room, pos);
-}
-
-template<class T>
-void do_destroy_room_check(std::vector<T> const& orig, std::vector<T> & buf,
- size_t bufsz, size_t room, size_t pos)
-{
- for(size_t i = 0, e = orig.size(); i < e; ++i)
- {
- INFO("i=" << (int)i << " room=" << room << " pos=" << pos);
- if(i < pos)
- {
- // memory before the destroy, should be untouched
- CHECK_EQ(buf[i], orig[i]);
- }
- else
- {
- if(i >= pos && i < pos + room)
- {
- // this is the memory that was destroyed (at its origin)
- }
- else if(i >= pos + room && i < pos + room + bufsz)
- {
- // this is the memory that was moved (at its destination)
- CHECK_EQ(buf[i - room], orig[i]);
- }
- else
- {
- // this is memory at the end, should be untouched
- CHECK_EQ(buf[i], orig[i]);
- }
- }
- }
-};
-
-template<class T>
-void do_destroy_room_inplace_test(std::vector<T> const& orig, std::vector<T> & buf,
- size_t room, size_t pos)
-{
- do_destroy_room_inplace(orig, buf, buf.size(), room, pos);
- do_destroy_room_check(orig, buf, buf.size(), room, pos);
-}
-
-template<class T>
-void do_destroy_room_srcdst_test(std::vector<T> const& orig, std::vector<T> & buf,
- size_t room, size_t pos)
-{
- do_destroy_room_srcdst(orig, buf, buf.size(), room, pos);
- do_destroy_room_check(orig, buf, buf.size(), room, pos);
-}
-
-template<class T, class Func>
-void test_destroy_room(Func test_func)
-{
- std::vector<T> orig(100), buf(100);
-
- create_make_room_buffer(orig);
-
- {
- INFO("in the beginning, room=10");
- test_func(orig, buf, /*room*/10, /*pos*/0);
- }
-
- {
- INFO("in the beginning, room=20");
- test_func(orig, buf, /*room*/20, /*pos*/0);
- }
-
- {
- INFO("in the middle, room=10");
- test_func(orig, buf, /*room*/10, /*pos*/10);
- }
-
- {
- INFO("in the middle, room=20");
- test_func(orig, buf, /*room*/20, /*pos*/10);
- }
-}
-
-TEST_CASE_TEMPLATE("ctor_dtor.destroy_room_inplace", T, uint8_t, uint64_t, std::string)
-{
- test_destroy_room<T>(do_destroy_room_inplace_test<T>);
-}
-
-TEST_CASE_TEMPLATE("ctor_dtor.destroy_room_srcdst", T, uint8_t, uint64_t, std::string)
-{
- test_destroy_room<T>(&do_destroy_room_srcdst_test<T>);
-}
-
-} // namespace c4
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_dump.cpp b/thirdparty/ryml/ext/c4core/test/test_dump.cpp
deleted file mode 100644
index cfa7d991c..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_dump.cpp
+++ /dev/null
@@ -1,1220 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/substr.hpp"
-#include "c4/std/std.hpp"
-#include "c4/dump.hpp"
-#include "c4/format.hpp"
-#endif
-
-#include <c4/test.hpp>
-#include "c4/libtest/supprwarn_push.hpp"
-
-#ifdef __clang__
-# pragma clang diagnostic push
-#elif defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wuseless-cast"
-#endif
-
-namespace c4 {
-
-
-namespace example {
-
-std::string test_dumper_target = {};
-void test_dumper(csubstr str)
-{
- test_dumper_target.append(str.str, str.len);
-}
-
-template<class ...Args>
-void printf(csubstr fmt, Args&& ...args)
-{
- static thread_local std::string writebuf(16, '\0');
- DumpResults results = format_dump_resume<&test_dumper>(c4::to_substr(writebuf), fmt, std::forward<Args>(args)...);
- if(C4_UNLIKELY(results.bufsize > writebuf.size())) // bufsize will be that of the largest element serialized. Eg int(1), will require 1 byte.
- {
- size_t dup = 2 * writebuf.size();
- writebuf.resize(dup > results.bufsize ? dup : results.bufsize);
- format_dump_resume<&test_dumper>(results, c4::to_substr(writebuf), fmt, std::forward<Args>(args)...);
- }
-}
-} // namespace example
-
-TEST_CASE("printf_example")
-{
- example::test_dumper_target.clear();
- SUBCASE("1")
- {
- example::printf("{} coffees per day.\n", 3);
- CHECK_EQ(example::test_dumper_target, "3 coffees per day.\n");
- }
- SUBCASE("2")
- {
- example::printf("{} would be {}.", "brecky", "nice");
- CHECK_EQ(example::test_dumper_target, "brecky would be nice.");
- }
- SUBCASE("resize writebuf")
- {
- // printed strings will not use the writebuf, so we write a zero-padded integer
- size_t dim = 128; // pad with 128 zeroes
- std::string s1(dim, '0');
- std::string s2(dim, '0');
- s1.back() = '1';
- s2.back() = '2';
- example::printf("{} cannot be {}", fmt::zpad(1, dim), fmt::zpad(2, dim));
- CHECK_EQ(example::test_dumper_target, s1 + " cannot be " + s2);
- }
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-TEST_CASE("DumpResults")
-{
- DumpResults dr = {};
- CHECK_EQ(dr.bufsize, 0u);
- CHECK_EQ(dr.lastok, DumpResults::noarg);
- CHECK_UNARY(dr.write_arg(0));
- CHECK_FALSE(dr.success_until(0));
- CHECK_EQ(dr.argfail(), 0);
-}
-
-struct DumpChecker
-{
- static size_t s_num_calls;
- static char s_workspace[100];
- static size_t s_accum_pos;
- static char s_accum[100];
- static void s_reset()
- {
- s_num_calls = 0;
- s_accum_pos = 0;
- for(size_t i = 0; i < sizeof(s_workspace); ++i)
- s_workspace[i] = '+';
- for(size_t i = 0; i < sizeof(s_accum); ++i)
- s_accum[i] = '.';
- }
- static void s_dump(csubstr buf)
- {
- REQUIRE_LT(buf.len, sizeof(s_workspace));
- REQUIRE_LT(s_accum_pos + buf.len, sizeof(s_accum));
- ++s_num_calls;
- memcpy(s_accum + s_accum_pos, buf.str, buf.len);
- s_accum_pos += buf.len;
- }
-};
-size_t DumpChecker::s_num_calls = 0;
-char DumpChecker::s_workspace[100] = {};
-size_t DumpChecker::s_accum_pos = {};
-char DumpChecker::s_accum[100] = {};
-
-struct CatDumpTplArg
-{
- template<class ...Args>
- static size_t call_cat_dump(Args&& ...args)
- {
- return cat_dump<&DumpChecker::s_dump>(std::forward<Args>(args)...);
- }
- template<class ...Args>
- static DumpResults call_cat_dump_resume(Args&& ...args)
- {
- return cat_dump_resume<&DumpChecker::s_dump>(std::forward<Args>(args)...);
- }
- template<class ...Args>
- static size_t call_catsep_dump(Args&& ...args)
- {
- return catsep_dump<&DumpChecker::s_dump>(std::forward<Args>(args)...);
- }
- template<class ...Args>
- static DumpResults call_catsep_dump_resume(Args&& ...args)
- {
- return catsep_dump_resume<&DumpChecker::s_dump>(std::forward<Args>(args)...);
- }
- template<class ...Args>
- static size_t call_format_dump(Args&& ...args)
- {
- return format_dump<&DumpChecker::s_dump>(std::forward<Args>(args)...);
- }
- template<class ...Args>
- static DumpResults call_format_dump_resume(Args&& ...args)
- {
- return format_dump_resume<&DumpChecker::s_dump>(std::forward<Args>(args)...);
- }
-};
-
-struct CatDumpFnArg
-{
- template<class ...Args>
- static size_t call_cat_dump(Args&& ...args)
- {
- return cat_dump(&DumpChecker::s_dump, std::forward<Args>(args)...);
- }
- template<class ...Args>
- static DumpResults call_cat_dump_resume(Args&& ...args)
- {
- return cat_dump_resume(&DumpChecker::s_dump, std::forward<Args>(args)...);
- }
- template<class ...Args>
- static size_t call_catsep_dump(Args&& ...args)
- {
- return catsep_dump(&DumpChecker::s_dump, std::forward<Args>(args)...);
- }
- template<class ...Args>
- static DumpResults call_catsep_dump_resume(Args&& ...args)
- {
- return catsep_dump_resume(&DumpChecker::s_dump, std::forward<Args>(args)...);
- }
- template<class ...Args>
- static size_t call_format_dump(Args&& ...args)
- {
- return format_dump(&DumpChecker::s_dump, std::forward<Args>(args)...);
- }
- template<class ...Args>
- static DumpResults call_format_dump_resume(Args&& ...args)
- {
- return format_dump_resume(&DumpChecker::s_dump, std::forward<Args>(args)...);
- }
-};
-
-namespace buffers {
-int b1 = 1;
-int b2 = 22;
-int b3 = 333;
-int b4 = 4444;
-int sep = 90009;
-size_t seplen = 5;
-}
-
-TEST_CASE_TEMPLATE("cat_dump", T, CatDumpTplArg, CatDumpFnArg)
-{
- using namespace buffers;
- substr buf = DumpChecker::s_workspace;
- auto accum = [&]{ return csubstr(DumpChecker::s_accum).first(DumpChecker::s_accum_pos); };
- SUBCASE("dont use the buffer with strings")
- {
- DumpChecker::s_reset();
- size_t needed_size = T::call_cat_dump(buf.first(0), b1);
- CHECK_EQ(needed_size, 1);
- CHECK_EQ(accum(), csubstr(""));
- needed_size = T::call_cat_dump(buf.first(0), b1, b2);
- CHECK_EQ(needed_size, 2);
- CHECK_EQ(accum(), csubstr(""));
- needed_size = T::call_cat_dump(buf.first(0), b1, b2, b3);
- CHECK_EQ(needed_size, 3);
- CHECK_EQ(accum(), csubstr(""));
- needed_size = T::call_cat_dump(buf.first(0), b1, b2, b3, b4);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(0), ("1"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr(""));
- needed_size = T::call_cat_dump(buf.first(0), ("1"), ("22"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr(""));
- needed_size = T::call_cat_dump(buf.first(0), ("1"), ("22"), ("333"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr(""));
- needed_size = T::call_cat_dump(buf.first(0), ("1"), ("22"), ("333"), ("4444"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(0), csubstr("1"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr(""));
- needed_size = T::call_cat_dump(buf.first(0), csubstr("1"), csubstr("22"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr(""));
- needed_size = T::call_cat_dump(buf.first(0), csubstr("1"), csubstr("22"), csubstr("333"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr(""));
- needed_size = T::call_cat_dump(buf.first(0), csubstr("1"), csubstr("22"), csubstr("333"), csubstr("4444"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(1), b1);
- CHECK_EQ(needed_size, 1);
- CHECK_EQ(accum(), csubstr("1"));
- needed_size = T::call_cat_dump(buf.first(1), b1, b2);
- CHECK_EQ(needed_size, 2);
- CHECK_EQ(accum(), csubstr("11"));
- needed_size = T::call_cat_dump(buf.first(1), b1, b2, b3);
- CHECK_EQ(needed_size, 3);
- CHECK_EQ(accum(), csubstr("111"));
- needed_size = T::call_cat_dump(buf.first(1), b1, b2, b3, b4);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(accum(), csubstr("1111"));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(1), ("1"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr("1"));
- needed_size = T::call_cat_dump(buf.first(1), ("1"), ("22"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr("1122"));
- needed_size = T::call_cat_dump(buf.first(1), ("1"), ("22"), ("333"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr("1122122333"));
- needed_size = T::call_cat_dump(buf.first(1), ("1"), ("22"), ("333"), ("4444"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr("11221223331223334444"));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(1), csubstr("1"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr("1"));
- needed_size = T::call_cat_dump(buf.first(1), csubstr("1"), csubstr("22"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr("1122"));
- needed_size = T::call_cat_dump(buf.first(1), csubstr("1"), csubstr("22"), csubstr("333"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr("1122122333"));
- needed_size = T::call_cat_dump(buf.first(1), csubstr("1"), csubstr("22"), csubstr("333"), csubstr("4444"));
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(accum(), csubstr("11221223331223334444"));
- }
- SUBCASE("1")
- {
- DumpChecker::s_reset();
- size_t needed_size = T::call_cat_dump(buf.first(0), b1);
- CHECK_EQ(needed_size, 1u);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(1), csubstr("+")); // nothing was written
- CHECK_EQ(accum(), csubstr("")); // nothing was written
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf, b1);
- CHECK_EQ(needed_size, 1u);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(1), csubstr("1"));
- CHECK_EQ(accum(), csubstr("1"));
- }
- SUBCASE("1 2")
- {
- DumpChecker::s_reset();
- size_t needed_size = T::call_cat_dump(buf.first(0), b1, b2);
- CHECK_EQ(needed_size, 2);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(2), csubstr("++")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(1), b1, b2);
- CHECK_EQ(needed_size, 2);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(2), csubstr("1+")); // only the first character of b2 was written
- CHECK_EQ(accum(), csubstr("1"));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf, b1, b2);
- CHECK_EQ(needed_size, 2);
- CHECK_EQ(DumpChecker::s_num_calls, 2);
- CHECK_EQ(buf.first(2), csubstr("22"));
- CHECK_EQ(accum(), csubstr("122"));
- }
- SUBCASE("2 1")
- {
- DumpChecker::s_reset();
- size_t needed_size = T::call_cat_dump(buf, b2, b1);
- CHECK_EQ(needed_size, 2);
- CHECK_EQ(DumpChecker::s_num_calls, 2);
- CHECK_EQ(buf.first(2), csubstr("12")); // wrote 2 then 1
- CHECK_EQ(accum(), csubstr("221"));
- }
- SUBCASE("1 2 3 4")
- {
- DumpChecker::s_reset();
- size_t needed_size = T::call_cat_dump(buf.first(0), b1, b2, b3, b4);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(1), b1, b2, b3, b4);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(4), csubstr("1+++"));
- CHECK_EQ(accum(), csubstr("1"));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(2), b1, b2, b3, b4);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(DumpChecker::s_num_calls, 2);
- CHECK_EQ(buf.first(4), csubstr("22++"));
- CHECK_EQ(accum(), csubstr("122"));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(3), b1, b2, b3, b4);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(4), csubstr("333+"));
- CHECK_EQ(accum(), csubstr("122333"));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf, b1, b2, b3, b4);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(DumpChecker::s_num_calls, 4);
- CHECK_EQ(buf.first(4), csubstr("4444"));
- CHECK_EQ(accum(), csubstr("1223334444"));
- }
- SUBCASE("4 3 2 1")
- {
- DumpChecker::s_reset();
- size_t needed_size = T::call_cat_dump(buf.first(0), b4, b3, b2, b1);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(1), b4, b3, b2, b1);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(2), b4, b3, b2, b1);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf.first(3), b4, b3, b2, b1);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_cat_dump(buf, b4, b3, b2, b1);
- CHECK_EQ(needed_size, 4);
- CHECK_EQ(DumpChecker::s_num_calls, 4);
- CHECK_EQ(buf.first(4), csubstr("1234"));
- CHECK_EQ(accum(), csubstr("4444333221"));
- }
-}
-
-TEST_CASE_TEMPLATE("cat_dump_resume", T, CatDumpTplArg, CatDumpFnArg)
-{
- using namespace buffers;
- substr buf = DumpChecker::s_workspace;
- auto accum = [&]{ return csubstr(DumpChecker::s_accum).first(DumpChecker::s_accum_pos); };
- SUBCASE("1")
- {
- DumpChecker::s_reset();
- DumpResults ret = T::call_cat_dump_resume(buf.first(0), b1);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_EQ(ret.bufsize, 1);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(1), csubstr("+")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- DumpResults retry = T::call_cat_dump_resume(ret, buf.first(1), b1);
- CHECK_UNARY(retry.success_until(0));
- CHECK_UNARY(!retry.success_until(1));
- CHECK_UNARY(!retry.success_until(2));
- CHECK_EQ(retry.bufsize, 1);
- CHECK_EQ(retry.lastok, 0);
- CHECK_EQ(retry.argfail(), 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(1), csubstr("1"));
- CHECK_EQ(accum(), csubstr("1"));
- }
- SUBCASE("1 2")
- {
- DumpChecker::s_reset();
- DumpResults ret = T::call_cat_dump_resume(buf.first(0), b1, b2);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_EQ(ret.bufsize, 2); // finds the buf size at once
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(2), csubstr("++")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_cat_dump_resume(ret, buf.first(1), b1, b2);
- CHECK_UNARY(!ret.success_until(0)); // ret.bufsize signals buffer is at least 2
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_EQ(ret.bufsize, 2);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(2), csubstr("++"));
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_cat_dump_resume(ret, buf.first(2), b1, b2);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_EQ(ret.bufsize, 2);
- CHECK_EQ(ret.lastok, 1);
- CHECK_EQ(ret.argfail(), 2);
- CHECK_EQ(DumpChecker::s_num_calls, 2);
- CHECK_EQ(buf.first(2), csubstr("22"));
- CHECK_EQ(accum(), csubstr("122"));
- }
- SUBCASE("1 2 3 4")
- {
- DumpChecker::s_reset();
- DumpResults ret = T::call_cat_dump_resume(buf.first(0), b1, b2, b3, b4);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_UNARY(!ret.success_until(3));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(4), csubstr("++++")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_cat_dump_resume(ret, buf.first(1), b1, b2, b3, b4);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_UNARY(!ret.success_until(3));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_cat_dump_resume(ret, buf.first(2), b1, b2, b3, b4);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_UNARY(!ret.success_until(3));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_cat_dump_resume(ret, buf.first(3), b1, b2, b3, b4);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_UNARY(!ret.success_until(3));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_cat_dump_resume(ret, buf.first(4), b1, b2, b3, b4);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(ret.success_until(1));
- CHECK_UNARY(ret.success_until(2));
- CHECK_UNARY(ret.success_until(3));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, 3);
- CHECK_EQ(ret.argfail(), 4);
- CHECK_EQ(DumpChecker::s_num_calls, 4);
- CHECK_EQ(buf.first(4), csubstr("4444"));
- CHECK_EQ(accum(), csubstr("1223334444"));
- }
- SUBCASE("4 3 2 1")
- {
- DumpChecker::s_reset();
- DumpResults ret = T::call_cat_dump_resume(buf.first(0), b4, b3, b2, b1);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_UNARY(!ret.success_until(3));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(4), csubstr("++++")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_cat_dump_resume(ret, buf.first(1), b4, b3, b2, b1);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_UNARY(!ret.success_until(3));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_cat_dump_resume(ret, buf.first(2), b4, b3, b2, b1);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_UNARY(!ret.success_until(3));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_cat_dump_resume(ret, buf.first(3), b4, b3, b2, b1);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_UNARY(!ret.success_until(3));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_cat_dump_resume(ret, buf.first(4), b4, b3, b2, b1);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(ret.success_until(1));
- CHECK_UNARY(ret.success_until(2));
- CHECK_UNARY(ret.success_until(3));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, 3);
- CHECK_EQ(ret.argfail(), 4);
- CHECK_EQ(DumpChecker::s_num_calls, 4);
- CHECK_EQ(buf.first(4), csubstr("1234"));
- CHECK_EQ(accum(), csubstr("4444333221"));
- }
-}
-
-
-
-TEST_CASE_TEMPLATE("catsep_dump", T, CatDumpTplArg, CatDumpFnArg)
-{
- using namespace buffers;
- size_t needed_size;
- substr buf = DumpChecker::s_workspace;
- auto accum = [&]{ return csubstr(DumpChecker::s_accum).first(DumpChecker::s_accum_pos); };
- SUBCASE("1")
- {
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(0), sep, b1);
- CHECK_EQ(needed_size, 1);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(1), csubstr("+")); // nothing was written
- CHECK_EQ(accum(), csubstr("")); // nothing was written
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(1), sep, b1);
- CHECK_EQ(needed_size, 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(1), csubstr("1"));
- CHECK_EQ(accum(), csubstr("1"));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(1 + seplen), sep, b1);
- CHECK_EQ(needed_size, 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1); // sep was not written
- CHECK_EQ(buf.first(1), csubstr("1"));
- CHECK_EQ(accum(), csubstr("1"));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf, sep, b1);
- CHECK_EQ(needed_size, 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1); // sep was not written
- CHECK_EQ(buf.first(1), csubstr("1"));
- CHECK_EQ(accum(), csubstr("1"));
- }
- SUBCASE("1 2")
- {
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(0), sep, b1, b2);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(2), csubstr("++")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(1), sep, b1, b2);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(2), csubstr("1+"));
- CHECK_EQ(accum(), csubstr("1"));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(seplen), sep, b1, b2);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("22"));
- CHECK_EQ(accum(), csubstr("19000922"));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf, sep, b1, b2);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("22"));
- CHECK_EQ(accum(), csubstr("19000922"));
- }
- SUBCASE("2 1")
- {
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(0), sep, b2, b1);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(2), csubstr("++")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(1), sep, b2, b1);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(2), csubstr("++"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(seplen), sep, b2, b1);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("10"));
- CHECK_EQ(accum(), csubstr("22900091"));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf, sep, b2, b1);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("10"));
- CHECK_EQ(accum(), csubstr("22900091"));
- }
- SUBCASE("1 2 3 4")
- {
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(0), sep, b1, b2, b3, b4);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(1), sep, b1, b2, b3, b4);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(4), csubstr("1+++"));
- CHECK_EQ(accum(), csubstr("1"));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(2), sep, b1, b2, b3, b4);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(4), csubstr("1+++"));
- CHECK_EQ(accum(), csubstr("1"));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(3), sep, b1, b2, b3, b4);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(4), csubstr("1+++"));
- CHECK_EQ(accum(), csubstr("1"));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf, sep, b1, b2, b3, b4);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 7);
- CHECK_EQ(buf.first(4), csubstr("4444"));
- CHECK_EQ(accum(), csubstr("1900092290009333900094444"));
- }
- SUBCASE("4 3 2 1")
- {
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(0), sep, b4, b3, b2, b1);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(1), sep, b4, b3, b2, b1);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(2), sep, b4, b3, b2, b1);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf.first(3), sep, b4, b3, b2, b1);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- needed_size = T::call_catsep_dump(buf, sep, b4, b3, b2, b1);
- CHECK_EQ(needed_size, seplen);
- CHECK_EQ(DumpChecker::s_num_calls, 7);
- CHECK_EQ(buf.first(4), csubstr("1000"));
- CHECK_EQ(accum(), csubstr("4444900093339000922900091"));
- }
-}
-
-
-TEST_CASE_TEMPLATE("catsep_dump_resume", T, CatDumpTplArg, CatDumpFnArg)
-{
- using namespace buffers;
- substr buf = DumpChecker::s_workspace;
- auto accum = [&]{ return csubstr(DumpChecker::s_accum).first(DumpChecker::s_accum_pos); };
- SUBCASE("1")
- {
- DumpChecker::s_reset();
- DumpResults ret = T::call_catsep_dump_resume(buf.first(0), sep, b1);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_EQ(ret.bufsize, 1);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(1), csubstr("+")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_catsep_dump_resume(ret, buf.first(1), sep, b1);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_EQ(ret.bufsize, 1);
- CHECK_EQ(ret.lastok, 0);
- CHECK_EQ(ret.argfail(), 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(1), csubstr("1"));
- CHECK_EQ(accum(), csubstr("1"));
- ret = T::call_catsep_dump_resume(ret, buf, sep, b1);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_EQ(ret.bufsize, 1);
- CHECK_EQ(ret.lastok, 0);
- CHECK_EQ(ret.argfail(), 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(1), csubstr("1"));
- CHECK_EQ(accum(), csubstr("1"));
- }
- SUBCASE("1 2")
- {
- DumpChecker::s_reset();
- DumpResults ret = T::call_catsep_dump_resume(buf.first(0), sep, b1, b2);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_EQ(ret.bufsize, seplen); // finds the buf size at once
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(2), csubstr("++")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_catsep_dump_resume(ret, buf.first(1), sep, b1, b2);
- CHECK_UNARY(ret.success_until(0)); // b1
- CHECK_UNARY(!ret.success_until(1)); // sep
- CHECK_UNARY(!ret.success_until(2)); // b2
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, 0);
- CHECK_EQ(ret.argfail(), 1); // sep
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(2), csubstr("1+"));
- CHECK_EQ(accum(), csubstr("1"));
- ret = T::call_catsep_dump_resume(ret, buf.first(2), sep, b1, b2);
- CHECK_UNARY(ret.success_until(0)); // b1
- CHECK_UNARY(!ret.success_until(1)); // sep
- CHECK_UNARY(!ret.success_until(2)); // b2
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, 0);
- CHECK_EQ(ret.argfail(), 1); // sep
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(2), csubstr("1+"));
- CHECK_EQ(accum(), csubstr("1"));
- ret = T::call_catsep_dump_resume(ret, buf.first(seplen), sep, b1, b2);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(ret.success_until(1));
- CHECK_UNARY(ret.success_until(2));
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, 2);
- CHECK_EQ(ret.argfail(), 3);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("22"));
- CHECK_EQ(accum(), csubstr("19000922"));
- }
- SUBCASE("1 2 3 4")
- {
- DumpChecker::s_reset();
- DumpResults ret = T::call_catsep_dump_resume(buf.first(0), sep, b1, b2, b3, b4);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(4), csubstr("++++")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_catsep_dump_resume(ret, buf.first(1), sep, b1, b2, b3, b4);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, 0);
- CHECK_EQ(ret.argfail(), 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(4), csubstr("1+++")); // failed while writing sep
- CHECK_EQ(accum(), csubstr("1"));
- ret = T::call_catsep_dump_resume(ret, buf.first(2), sep, b1, b2, b3, b4);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, 0);
- CHECK_EQ(ret.argfail(), 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(4), csubstr("1+++")); // failed while writing sep
- CHECK_EQ(accum(), csubstr("1"));
- ret = T::call_catsep_dump_resume(ret, buf.first(3), sep, b1, b2, b3, b4);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, 0);
- CHECK_EQ(ret.argfail(), 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(4), csubstr("1+++"));
- CHECK_EQ(accum(), csubstr("1"));
- ret = T::call_catsep_dump_resume(ret, buf.first(4), sep, b1, b2, b3, b4);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, 0);
- CHECK_EQ(ret.argfail(), 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(4), csubstr("1+++"));
- CHECK_EQ(accum(), csubstr("1"));
- ret = T::call_catsep_dump_resume(ret, buf.first(seplen), sep, b1, b2, b3, b4);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(ret.success_until(1));
- CHECK_UNARY(ret.success_until(2));
- CHECK_UNARY(ret.success_until(3));
- CHECK_UNARY(ret.success_until(4));
- CHECK_UNARY(ret.success_until(5));
- CHECK_UNARY(ret.success_until(6));
- CHECK_UNARY(!ret.success_until(7));
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, 6);
- CHECK_EQ(ret.argfail(), 7);
- CHECK_EQ(DumpChecker::s_num_calls, 7);
- CHECK_EQ(buf.first(seplen), csubstr("44449"));
- CHECK_EQ(accum(), csubstr("1900092290009333900094444"));
- }
- SUBCASE("4 3 2 1")
- {
- DumpChecker::s_reset();
- DumpResults ret = T::call_catsep_dump_resume(buf.first(0), sep, b4, b3, b2, b1);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(4), csubstr("++++")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_catsep_dump_resume(ret, buf.first(1), sep, b4, b3, b2, b1);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_catsep_dump_resume(ret, buf.first(2), sep, b4, b3, b2, b1);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(4), csubstr("++++"));
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_catsep_dump_resume(ret, buf.first(seplen), sep, b4, b3, b2, b1);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(ret.success_until(1));
- CHECK_UNARY(ret.success_until(2));
- CHECK_UNARY(ret.success_until(3));
- CHECK_UNARY(ret.success_until(4));
- CHECK_UNARY(ret.success_until(5));
- CHECK_UNARY(ret.success_until(6));
- CHECK_UNARY(!ret.success_until(7));
- CHECK_EQ(ret.bufsize, seplen);
- CHECK_EQ(ret.lastok, 6);
- CHECK_EQ(ret.argfail(), 7);
- CHECK_EQ(DumpChecker::s_num_calls, 7);
- CHECK_EQ(buf.first(seplen), csubstr("10009"));
- CHECK_EQ(accum(), csubstr("4444900093339000922900091"));
- }
- SUBCASE("1 2 3 4 with seplen==3")
- {
- int s = 999;
- DumpChecker::s_reset();
- DumpResults ret = T::call_catsep_dump_resume(buf.first(0), s, b1, b2, b3, b4);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(4), csubstr("++++")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_catsep_dump_resume(ret, buf.first(1), s, b1, b2, b3, b4);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, 0);
- CHECK_EQ(ret.argfail(), 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(4), csubstr("1+++")); // failed while writing sep
- CHECK_EQ(accum(), csubstr("1"));
- ret = T::call_catsep_dump_resume(ret, buf.first(2), s, b1, b2, b3, b4);
- CHECK_UNARY(ret.success_until(0)); // b1
- CHECK_UNARY(!ret.success_until(1)); // s
- CHECK_UNARY(!ret.success_until(2)); // b2
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, 0);
- CHECK_EQ(ret.argfail(), 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(4), csubstr("1+++")); // failed while writing sep
- CHECK_EQ(accum(), csubstr("1"));
- ret = T::call_catsep_dump_resume(ret, buf.first(3), s, b1, b2, b3, b4);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(ret.success_until(1));
- CHECK_UNARY(ret.success_until(2));
- CHECK_UNARY(ret.success_until(3));
- CHECK_UNARY(ret.success_until(4));
- CHECK_UNARY(ret.success_until(5));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, 5);
- CHECK_EQ(ret.argfail(), 6);
- CHECK_EQ(DumpChecker::s_num_calls, 6);
- CHECK_EQ(buf.first(4), csubstr("999+")); // failed while writing b4
- CHECK_EQ(accum(), csubstr("199922999333999"));
- ret = T::call_catsep_dump_resume(ret, buf.first(4), s, b1, b2, b3, b4);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(ret.success_until(1));
- CHECK_UNARY(ret.success_until(2));
- CHECK_UNARY(ret.success_until(3));
- CHECK_UNARY(ret.success_until(4));
- CHECK_UNARY(ret.success_until(5));
- CHECK_UNARY(ret.success_until(6));
- CHECK_UNARY(!ret.success_until(7));
- CHECK_EQ(ret.bufsize, 4);
- CHECK_EQ(ret.lastok, 6);
- CHECK_EQ(ret.argfail(), 7);
- CHECK_EQ(DumpChecker::s_num_calls, 7);
- CHECK_EQ(buf.first(5), csubstr("4444+"));
- CHECK_EQ(accum(), csubstr("1999229993339994444"));
- }
-}
-
-
-TEST_CASE_TEMPLATE("format_dump", T, CatDumpTplArg, CatDumpFnArg)
-{
- using namespace buffers;
- size_t needed_size;
- substr buf = DumpChecker::s_workspace;
- auto accum = [&]{ return csubstr(DumpChecker::s_accum).first(DumpChecker::s_accum_pos); };
- SUBCASE("no buffer is needed for strings")
- {
- csubstr fmt = "{}-{}-{}-{}";
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(0), fmt, "1", "22", "333", "4444"); // no buffer!
- CHECK_EQ(needed_size, 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(1), csubstr("+"));
- CHECK_EQ(accum(), csubstr(""));
- DumpChecker::s_reset();
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- needed_size = T::call_format_dump(buf.first(1), fmt, "1", "22", "333", "4444"); // 1-len buffer, unused
- CHECK_EQ(needed_size, 0); // no intermediate serialization is needed, since these are strings
- CHECK_EQ(DumpChecker::s_num_calls, 7); // calls everything even when the buffer is empty
- CHECK_EQ(accum(), csubstr("1-22-333-4444")); // dumped the full format string
- }
- SUBCASE("0")
- {
- csubstr fmt = "01234567890123456789";
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(0), fmt, b1, b2, b3, b4);
- CHECK_EQ(needed_size, 0); // the longest sized argument format argument
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls when the buffer is empty
- CHECK_EQ(buf.first(needed_size), csubstr("")); // nothing was written
- CHECK_EQ(accum(), csubstr("")); // dumped the full format string
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf, fmt, b1, b2, b3, b4);
- CHECK_EQ(needed_size, 0); // the longest sized argument format argument
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(needed_size), csubstr("")); // nothing was written
- CHECK_EQ(accum(), fmt); // dumped the full format string
- }
- SUBCASE("1")
- {
- // ____1____ 2 __3__
- csubstr fmt = "012345678_{}_34567";
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(0), fmt, b1);
- CHECK_EQ(needed_size, 1); // the longest sized argument format argument
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(2), csubstr("++")); // nothing was written
- CHECK_EQ(accum(), csubstr("")); // dumped first part of the format string
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(1), fmt, b1);
- CHECK_EQ(needed_size, 1);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("1+"));
- CHECK_EQ(accum(), csubstr("012345678_1_34567"));
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(1), fmt, b1, b2, b3, b4); // check that extra arguments are ignored
- CHECK_EQ(needed_size, 1);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("1+"));
- CHECK_EQ(accum(), csubstr("012345678_1_34567"));
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(1), fmt); // check that missing arguments are skipped
- CHECK_EQ(needed_size, 0u);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(2), csubstr("++"));
- CHECK_EQ(accum(), csubstr("012345678_{}_34567"));
- }
- SUBCASE("1 2")
- {
- // ____1____ 2 __3__ 4 _5_
- csubstr fmt = "012345678_{}_34567_{}_aaa";
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(0), fmt, b1, b2);
- CHECK_EQ(needed_size, 2); // the longest sized argument format argument
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(2), csubstr("++")); // nothing was written
- CHECK_EQ(accum(), csubstr("")); // dumped first part of the format string
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(1), fmt, b1, b2);
- CHECK_EQ(needed_size, 2);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("1+"));
- CHECK_EQ(accum(), csubstr("012345678_1_34567_"));
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(2), fmt, b1, b2);
- CHECK_EQ(needed_size, 2);
- CHECK_EQ(DumpChecker::s_num_calls, 5);
- CHECK_EQ(buf.first(2), csubstr("22"));
- CHECK_EQ(accum(), csubstr("012345678_1_34567_22_aaa"));
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(1), fmt); // check that missing arguments are skipped
- CHECK_EQ(needed_size, 0u);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(2), csubstr("++"));
- CHECK_EQ(accum(), csubstr("012345678_{}_34567_{}_aaa"));
- }
- SUBCASE("1 2 3")
- {
- // 1 2 3 4 5 6
- csubstr fmt = "012345678_{}_34567_{}_aaa___{}";
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(0), fmt, b1, b2, b3);
- CHECK_EQ(needed_size, 3); // the longest sized argument format argument
- CHECK_EQ(DumpChecker::s_num_calls, 0);
- CHECK_EQ(buf.first(2), csubstr("++")); // nothing was written
- CHECK_EQ(accum(), csubstr("")); // dumped first part of the format string
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(1), fmt, b1, b2, b3);
- CHECK_EQ(needed_size, 3);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("1+"));
- CHECK_EQ(accum(), csubstr("012345678_1_34567_"));
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(2), fmt, b1, b2, b3);
- CHECK_EQ(needed_size, 3);
- CHECK_EQ(DumpChecker::s_num_calls, 5);
- CHECK_EQ(buf.first(2), csubstr("22"));
- CHECK_EQ(accum(), csubstr("012345678_1_34567_22_aaa___"));
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf.first(3), fmt, b1, b2, b3);
- CHECK_EQ(needed_size, 3);
- CHECK_EQ(DumpChecker::s_num_calls, 6);
- CHECK_EQ(buf.first(2), csubstr("33"));
- CHECK_EQ(accum(), csubstr("012345678_1_34567_22_aaa___333"));
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf, fmt); // check that missing arguments are skipped
- CHECK_EQ(needed_size, 0u);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(2), csubstr("++"));
- CHECK_EQ(accum(), csubstr("012345678_{}_34567_{}_aaa___{}"));
- DumpChecker::s_reset();
- needed_size = T::call_format_dump(buf, fmt, b1); // check that missing arguments are skipped
- CHECK_EQ(needed_size, 1);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("1+"));
- CHECK_EQ(accum(), csubstr("012345678_1_34567_{}_aaa___{}"));
- }
-}
-
-
-TEST_CASE_TEMPLATE("format_dump_resume", T, CatDumpTplArg, CatDumpFnArg)
-{
- using namespace buffers;
- substr buf = DumpChecker::s_workspace;
- auto accum = [&]{ return csubstr(DumpChecker::s_accum).first(DumpChecker::s_accum_pos); };
- SUBCASE("1")
- {
- csubstr fmt = "aaa_then_{}_then_bbb";
- DumpChecker::s_reset();
- DumpResults ret = T::call_format_dump_resume(buf.first(0), fmt, b1);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_UNARY(!ret.success_until(2));
- CHECK_EQ(ret.bufsize, 1);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(1), csubstr("+")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_format_dump_resume(ret, buf.first(1), fmt, b1);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(ret.success_until(1));
- CHECK_UNARY(ret.success_until(2));
- CHECK_EQ(ret.bufsize, 1);
- CHECK_EQ(ret.lastok, 2);
- CHECK_EQ(ret.argfail(), 3);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("1+"));
- CHECK_EQ(accum(), csubstr("aaa_then_1_then_bbb"));
- }
- SUBCASE("2")
- {
- csubstr fmt = "aaa_then_{}_then_bbb_then_{}__then_epilogue";
- DumpChecker::s_reset();
- DumpResults ret = T::call_format_dump_resume(buf.first(0), fmt, b1, b2);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_EQ(ret.bufsize, 2);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(1), csubstr("+")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_format_dump_resume(ret, buf.first(1), fmt, b1, b2);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(ret.success_until(1));
- CHECK_UNARY(ret.success_until(2));
- CHECK_UNARY(!ret.success_until(3));
- CHECK_EQ(ret.bufsize, 2);
- CHECK_EQ(ret.lastok, 2);
- CHECK_EQ(ret.argfail(), 3);
- CHECK_EQ(DumpChecker::s_num_calls, 3);
- CHECK_EQ(buf.first(2), csubstr("1+"));
- CHECK_EQ(accum(), csubstr("aaa_then_1_then_bbb_then_"));
- ret = T::call_format_dump_resume(ret, buf.first(2), fmt, b1, b2);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(ret.success_until(1));
- CHECK_UNARY(ret.success_until(2));
- CHECK_UNARY(ret.success_until(3));
- CHECK_UNARY(ret.success_until(4));
- CHECK_EQ(ret.bufsize, 2);
- CHECK_EQ(ret.lastok, 4);
- CHECK_EQ(ret.argfail(), 5);
- CHECK_EQ(DumpChecker::s_num_calls, 5);
- CHECK_EQ(buf.first(2), csubstr("22"));
- CHECK_EQ(accum(), csubstr("aaa_then_1_then_bbb_then_22__then_epilogue"));
- }
- SUBCASE("no args")
- {
- csubstr fmt = "no args { -- }";
- DumpChecker::s_reset();
- DumpResults ret = T::call_format_dump_resume(buf.first(0), fmt, b1, b2);
- CHECK_UNARY(!ret.success_until(0));
- CHECK_EQ(ret.bufsize, 0);
- CHECK_EQ(ret.lastok, DumpResults::noarg);
- CHECK_EQ(ret.argfail(), 0);
- CHECK_EQ(DumpChecker::s_num_calls, 0); // no calls to dump
- CHECK_EQ(buf.first(1), csubstr("+")); // nothing was written
- CHECK_EQ(accum(), csubstr(""));
- ret = T::call_format_dump_resume(ret, buf.first(1), fmt, b1, b2);
- CHECK_UNARY(ret.success_until(0));
- CHECK_UNARY(!ret.success_until(1));
- CHECK_EQ(ret.bufsize, 0);
- CHECK_EQ(ret.lastok, 0);
- CHECK_EQ(ret.argfail(), 1);
- CHECK_EQ(DumpChecker::s_num_calls, 1);
- CHECK_EQ(buf.first(2), "++");
- CHECK_EQ(accum(), fmt);
- }
-}
-
-} // namespace c4
-
-#ifdef __clang__
-# pragma clang diagnostic pop
-#elif defined(__GNUC__)
-# pragma GCC diagnostic pop
-#endif
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_enum.cpp b/thirdparty/ryml/ext/c4core/test/test_enum.cpp
deleted file mode 100644
index b2dad0bbd..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_enum.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include <c4/std/std.hpp>
-#include <c4/substr.hpp>
-#include <c4/enum.hpp>
-#endif
-
-#include <c4/test.hpp>
-
-#include "./test_enum_common.hpp"
-#include "c4/libtest/supprwarn_push.hpp"
-#include <vector>
-
-
-TEST_CASE("eoffs.simple_enum")
-{
- using namespace c4;
- CHECK_EQ(eoffs_cls<MyEnum>(), 0);
- CHECK_EQ(eoffs_pfx<MyEnum>(), 0);
-}
-
-TEST_CASE("eoffs.scoped_enum")
-{
- using namespace c4;
- CHECK_EQ(eoffs_cls<MyEnumClass>(), strlen("MyEnumClass::"));
- CHECK_EQ(eoffs_pfx<MyEnumClass>(), 0);
-}
-
-TEST_CASE("eoffs.simple_bitmask")
-{
- using namespace c4;
- CHECK_EQ(eoffs_cls<MyBitmask>(), 0);
- CHECK_EQ(eoffs_pfx<MyBitmask>(), strlen("BM_"));
-}
-
-TEST_CASE("eoffs.scoped_bitmask")
-{
- using namespace c4;
- CHECK_EQ(eoffs_cls<MyBitmaskClass>(), strlen("MyBitmaskClass::"));
- CHECK_EQ(eoffs_pfx<MyBitmaskClass>(), strlen("MyBitmaskClass::BM_"));
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-#ifdef __clang__
-# pragma clang diagnostic push
-#elif defined(__GNUC__)
-# pragma GCC diagnostic push
-# if __GNUC__ >= 6
-# pragma GCC diagnostic ignored "-Wnull-dereference"
-# endif
-#endif
-
-template<typename Enum>
-void cmp_enum(Enum lhs, Enum rhs)
-{
- using I = typename std::underlying_type<Enum>::type;
- CHECK_EQ(static_cast<I>(lhs), static_cast<I>(rhs));
-}
-
-template<class Enum>
-void test_esyms()
-{
- auto ss = c4::esyms<Enum>();
- CHECK_NE(ss.size(), 0);
- CHECK_FALSE(ss.empty());
- for(auto s : ss)
- {
- REQUIRE_NE(ss.find(s.name), nullptr);
- REQUIRE_NE(ss.find(s.value), nullptr);
- CHECK_STREQ(ss.find(s.name)->name, s.name);
- CHECK_STREQ(ss.find(s.value)->name, s.name);
- cmp_enum(ss.find(s.name)->value, s.value);
- cmp_enum(ss.find(s.value)->value, s.value);
- }
-}
-
-#ifdef __clang__
-# pragma clang diagnostic pop
-#elif defined(__GNUC__)
-# pragma GCC diagnostic pop
-#endif
-
-
-TEST_CASE("esyms.simple_enum")
-{
- test_esyms<MyEnum>();
-}
-
-TEST_CASE("esyms.scoped_enum")
-{
- test_esyms<MyEnumClass>();
-}
-
-TEST_CASE("esyms.simple_bitmask")
-{
- test_esyms<MyBitmask>();
-}
-
-TEST_CASE("esyms.scoped_bitmask")
-{
- test_esyms<MyBitmaskClass>();
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-
-template<typename Enum>
-void test_e2str()
-{
- using namespace c4;
- using I = typename std::underlying_type<Enum>::type;
- auto ss = esyms<Enum>();
- CHECK_NE(ss.size(), 0);
- CHECK_FALSE(ss.empty());
- for(auto const& p : ss)
- {
- // test round trips
- cmp_enum(str2e<Enum>(e2str(p.value)), p.value);
- CHECK_STREQ(e2str(str2e<Enum>(p.name)), p.name);
- }
-}
-
-
-TEST_CASE("e2str.simple_enum")
-{
- test_e2str<MyEnum>();
-}
-
-TEST_CASE("e2str.scoped_enum")
-{
- test_e2str<MyEnumClass>();
- cmp_enum(c4::str2e<MyEnumClass>("MyEnumClass::FOO"), MyEnumClass::FOO);
- cmp_enum(c4::str2e<MyEnumClass>("FOO"), MyEnumClass::FOO);
-}
-
-TEST_CASE("e2str.simple_bitmask")
-{
- test_e2str<MyBitmask>();
- cmp_enum(c4::str2e<MyBitmask>("BM_FOO"), BM_FOO);
- cmp_enum(c4::str2e<MyBitmask>("FOO"), BM_FOO);
-}
-
-TEST_CASE("e2str.scoped_bitmask")
-{
- using I = typename std::underlying_type<MyBitmaskClass>::type;
- test_e2str<MyBitmaskClass>();
- cmp_enum(c4::str2e<MyBitmaskClass>("MyBitmaskClass::BM_FOO"), MyBitmaskClass::BM_FOO);
- cmp_enum(c4::str2e<MyBitmaskClass>("BM_FOO"), MyBitmaskClass::BM_FOO);
- cmp_enum(c4::str2e<MyBitmaskClass>("FOO"), MyBitmaskClass::BM_FOO);
-}
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_enum_common.hpp b/thirdparty/ryml/ext/c4core/test/test_enum_common.hpp
deleted file mode 100644
index 9acd621cf..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_enum_common.hpp
+++ /dev/null
@@ -1,213 +0,0 @@
-#ifndef _C4_ENUM_COMMON_HPP_
-#define _C4_ENUM_COMMON_HPP_
-
-#ifndef C4CORE_SINGLE_HEADER
-#include <c4/enum.hpp>
-#endif
-
-typedef enum {
- FOO = 0,
- BAR,
- BAZ,
-} MyEnum;
-
-namespace c4 {
-template<>
-inline const EnumSymbols<MyEnum> esyms<MyEnum>()
-{
- static const EnumSymbols<MyEnum>::Sym rs[] =
- {
- {FOO, "FOO"},
- {BAR, "BAR"},
- {BAZ, "BAZ"},
- };
- EnumSymbols<MyEnum> r(rs);
- return r;
-}
-} // namespace c4
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-enum class MyEnumClass {
- FOO = 0,
- BAR,
- BAZ,
-};
-
-
-namespace c4 {
-template<>
-inline const EnumSymbols<MyEnumClass> esyms<MyEnumClass>()
-{
- static const EnumSymbols<MyEnumClass>::Sym rs[] =
- {
- {MyEnumClass::FOO, "MyEnumClass::FOO"},
- {MyEnumClass::BAR, "MyEnumClass::BAR"},
- {MyEnumClass::BAZ, "MyEnumClass::BAZ"},
- };
- EnumSymbols<MyEnumClass> r(rs);
- return r;
-}
-
-
-template<>
-inline size_t eoffs_cls<MyEnumClass>()
-{
- return 13; // same as strlen("MyEnumClass::")
-}
-} // namespace c4
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-typedef enum {
- BM_NONE = 0,
- BM_FOO = 1 << 0,
- BM_BAR = 1 << 1,
- BM_BAZ = 1 << 2,
- BM_FOO_BAR = BM_FOO|BM_BAR,
- BM_FOO_BAR_BAZ = BM_FOO|BM_BAR|BM_BAZ,
-} MyBitmask;
-
-namespace c4 {
-template<>
-inline const EnumSymbols<MyBitmask> esyms<MyBitmask>()
-{
- static const EnumSymbols<MyBitmask>::Sym rs[] =
- {
- {BM_NONE, "BM_NONE"},
- {BM_FOO, "BM_FOO"},
- {BM_BAR, "BM_BAR"},
- {BM_BAZ, "BM_BAZ"},
- {BM_FOO_BAR, "BM_FOO_BAR"},
- {BM_FOO_BAR_BAZ, "BM_FOO_BAR_BAZ"},
- };
- EnumSymbols<MyBitmask> r(rs);
- return r;
-}
-
-template<>
-inline size_t eoffs_pfx<MyBitmask>()
-{
- return 3; // same as strlen("BM_")
-}
-} // namespace c4
-
-
-
-typedef enum {
- // no null value
- BM_KABOOM = 1,
- BM_PAFF = 2,
- BM_PEW = 4,
- BM_POW = 7,
-} BmWithoutNull;
-
-
-namespace c4 {
-template<>
-inline const c4::EnumSymbols<BmWithoutNull> esyms<BmWithoutNull>()
-{
- static const EnumSymbols<BmWithoutNull>::Sym rs[] =
- {
- {BM_KABOOM, "KABOOM"},
- {BM_PAFF , "PAFF"},
- {BM_PEW , "PEW"},
- {BM_POW , "POW"},
- };
- EnumSymbols<BmWithoutNull> r(rs);
- return r;
-}
-
-template<>
-inline size_t eoffs_pfx<BmWithoutNull>()
-{
- return 3; // same as strlen("BM_")
-}
-} // namespace c4
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-enum class MyBitmaskClass {
- BM_NONE = 0,
- BM_FOO = 1 << 0,
- BM_BAR = 1 << 1,
- BM_BAZ = 1 << 2,
- BM_FOO_BAR = BM_FOO|BM_BAR,
- BM_FOO_BAR_BAZ = BM_FOO|BM_BAR|BM_BAZ,
-};
-
-namespace c4 {
-
-template<>
-inline const EnumSymbols<MyBitmaskClass> esyms<MyBitmaskClass>()
-{
- static const EnumSymbols<MyBitmaskClass>::Sym rs[] =
- {
- {MyBitmaskClass::BM_NONE, "MyBitmaskClass::BM_NONE"},
- {MyBitmaskClass::BM_FOO, "MyBitmaskClass::BM_FOO"},
- {MyBitmaskClass::BM_BAR, "MyBitmaskClass::BM_BAR"},
- {MyBitmaskClass::BM_BAZ, "MyBitmaskClass::BM_BAZ"},
- {MyBitmaskClass::BM_FOO_BAR, "MyBitmaskClass::BM_FOO_BAR"},
- {MyBitmaskClass::BM_FOO_BAR_BAZ, "MyBitmaskClass::BM_FOO_BAR_BAZ"},
- };
- EnumSymbols<MyBitmaskClass> r(rs);
- return r;
-}
-
-template<> inline size_t eoffs_cls< MyBitmaskClass >()
-{
- return 16; // same as strlen("MyBitmaskClass::")
-}
-template<> inline size_t eoffs_pfx< MyBitmaskClass >()
-{
- return 19; // same as strlen("MyBitmaskClass::BM_")
-}
-
-} // namespace c4
-
-
-enum class BmClassWithoutNull {
- // no null value
- BM_KABOOM = 1,
- BM_PAFF = 2,
- BM_PEW = 4,
- BM_POW = 7,
-};
-
-
-namespace c4 {
-template<>
-inline const c4::EnumSymbols<BmClassWithoutNull> esyms<BmClassWithoutNull>()
-{
- static const EnumSymbols<BmClassWithoutNull>::Sym rs[] =
- {
- {BmClassWithoutNull::BM_KABOOM, "BmClassWithoutNull::BM_KABOOM"},
- {BmClassWithoutNull::BM_PAFF , "BmClassWithoutNull::BM_PAFF"},
- {BmClassWithoutNull::BM_PEW , "BmClassWithoutNull::BM_PEW"},
- {BmClassWithoutNull::BM_POW , "BmClassWithoutNull::BM_POW"},
- };
- EnumSymbols<BmClassWithoutNull> r(rs);
- return r;
-}
-
-template<> inline size_t eoffs_cls<BmClassWithoutNull>()
-{
- return strlen("BmClassWithoutNull::");
-}
-template<> inline size_t eoffs_pfx<BmClassWithoutNull>()
-{
- return strlen("BmClassWithoutNull::BM_");
-}
-} // namespace c4
-
-
-#endif /* _C4_ENUM_COMMON_HPP_ */
diff --git a/thirdparty/ryml/ext/c4core/test/test_error.cpp b/thirdparty/ryml/ext/c4core/test/test_error.cpp
deleted file mode 100644
index 96584ab92..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_error.cpp
+++ /dev/null
@@ -1,635 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/error.hpp"
-#endif
-
-#include "c4/test.hpp"
-#include "c4/libtest/supprwarn_push.hpp"
-
-C4_BEGIN_HIDDEN_NAMESPACE
-bool got_an_error = false;
-void error_callback(const char *msg, size_t msg_sz)
-{
- CHECK_EQ(strncmp(msg, "bla bla", msg_sz), 0);
- CHECK_EQ(msg_sz, 7);
- got_an_error = true;
-}
-inline c4::ScopedErrorSettings tmp_err()
-{
- got_an_error = false;
- return c4::ScopedErrorSettings(c4::ON_ERROR_CALLBACK, error_callback);
-}
-C4_END_HIDDEN_NAMESPACE
-
-namespace c4 {
-
-TEST_CASE("Error.scoped_callback")
-{
- auto orig = get_error_callback();
- {
- auto tmp = tmp_err();
- CHECK_EQ(get_error_callback() == error_callback, true);
- C4_ERROR("bla bla");
- CHECK_EQ(got_an_error, true);
- }
- CHECK_EQ(get_error_callback() == orig, true);
-}
-
-} // namespace c4
-
-TEST_CASE("Error.outside_of_c4_namespace")
-{
- auto orig = c4::get_error_callback();
- {
- auto tmp = tmp_err();
- CHECK_EQ(c4::get_error_callback() == error_callback, true);
- C4_ERROR("bla bla");
- CHECK_EQ(got_an_error, true);
- }
- CHECK_EQ(c4::get_error_callback() == orig, true);
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-// WIP: new error handling code
-
-
-#include <string> // temporary; just for the exception example
-#include <iostream> // temporary; just for the exception example
-
-namespace c4 {
-
-#define C4_ERR_FMT_BUFFER_SIZE 256
-
-using locref = c4::srcloc const& C4_RESTRICT;
-
-using pfn_err = void (*)(locref loc, void *data);
-using pfn_warn = void (*)(locref loc, void *data);
-using pfn_msg_begin = void (*)(locref loc, void *data);
-using pfn_msg_part = void (*)(const char* msg, size_t size, void *data);
-using pfn_msg_end = void (*)(void *data);
-
-struct ErrorCallbacks
-{
- void *user_data;
-
- pfn_err err;
- pfn_warn warn;
- pfn_msg_begin msg_begin;
- pfn_msg_part msg_part;
- pfn_msg_end msg_end;
-
- bool msg_enabled() const { return msg_begin != nullptr; }
-
- template<size_t N>
- void msg(const char (&s)[N])
- {
- msg_part(s, N-1, user_data);
- }
- void msg(const char *msg, size_t sz)
- {
- msg_part(msg, sz, user_data);
- }
- void msg(char c)
- {
- msg_part(&c, 1, user_data);
- }
-};
-
-#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 8 && __GNUC__ < 5
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
-#endif
-TEST_CASE("ErrorCallbacks.default_obj")
-{
- ErrorCallbacks cb {};
- CHECK_EQ(cb.user_data, nullptr);
- CHECK_EQ(cb.err, nullptr);
- CHECK_EQ(cb.warn, nullptr);
- CHECK_EQ(cb.msg_begin, nullptr);
- CHECK_EQ(cb.msg_part, nullptr);
- CHECK_EQ(cb.msg_end, nullptr);
-}
-#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 8 && __GNUC__ < 5
-#pragma GCC diagnostic pop
-#endif
-
-template<class ErrBhv>
-struct ErrorCallbacksBridgeFull
-{
- ErrorCallbacks callbacks() const
- {
- return {
- (ErrBhv*)this,
- ErrorCallbacksBridgeFull<ErrBhv>::on_err,
- ErrorCallbacksBridgeFull<ErrBhv>::on_warn,
- ErrorCallbacksBridgeFull<ErrBhv>::on_msg_begin,
- ErrorCallbacksBridgeFull<ErrBhv>::on_msg_part,
- ErrorCallbacksBridgeFull<ErrBhv>::on_msg_end,
- };
- }
- static void on_err(locref loc, void *data)
- {
- ((ErrBhv*)data)->err(loc);
- }
- static void on_warn(locref loc, void *data)
- {
- ((ErrBhv*)data)->warn(loc);
- }
- static void on_msg_begin(locref loc, void *data)
- {
- ((ErrBhv*)data)->msg_begin(loc);
- }
- static void on_msg_part(const char *part, size_t size, void *data)
- {
- ((ErrBhv*)data)->msg_part(part, size);
- }
- static void on_msg_end(void *data)
- {
- ((ErrBhv*)data)->msg_end();
- }
-};
-
-template<class ErrBhv>
-struct ErrorCallbacksBridge
-{
- ErrorCallbacks callbacks() const
- {
- return {
- (ErrBhv*)this,
- ErrorCallbacksBridge<ErrBhv>::on_err,
- ErrorCallbacksBridge<ErrBhv>::on_warn,
- (pfn_msg_begin)nullptr,
- (pfn_msg_part)nullptr,
- (pfn_msg_end)nullptr
- };
- }
- static void on_err(locref loc, void *data)
- {
- ((ErrBhv*)data)->err(loc);
- }
- static void on_warn(locref loc, void *data)
- {
- ((ErrBhv*)data)->warn(loc);
- }
-};
-
-
-void fputi(int val, FILE *f);
-
-void _errmsg(locref loc)
-{
- fputs(loc.file, stderr);
- fputc(':', stderr);
- fputi(loc.line, stderr);
- fputs(": ", stderr);
- fflush(stderr);
-}
-
-void _errmsg(const char *part, size_t part_size)
-{
- fwrite(part, 1u, part_size, stderr);
- fflush(stderr);
-}
-
-/** example implementation using old-style abort */
-struct ErrorBehaviorAbort : public ErrorCallbacksBridgeFull<ErrorBehaviorAbort>
-{
- static void msg_begin(locref loc)
- {
- fputc('\n', stderr);
- _errmsg(loc);
- }
- static void msg_part(const char *part, size_t part_size)
- {
- _errmsg(part, part_size);
- }
- static void msg_end()
- {
- fputc('\n', stderr);
- fflush(stderr);
- }
- static void err(locref)
- {
- abort();
- }
- static void warn(locref)
- {
- // nothing to do
- }
-};
-
-
-TEST_CASE("ErrorBehaviorAbort.default_obj")
-{
- ErrorBehaviorAbort bhv;
- auto cb = bhv.callbacks();
- CHECK_NE(cb.user_data, nullptr);
- CHECK_NE(cb.err, nullptr);
- CHECK_NE(cb.warn, nullptr);
- CHECK_NE(cb.msg_begin, nullptr);
- CHECK_NE(cb.msg_part, nullptr);
- CHECK_NE(cb.msg_end, nullptr);
-}
-
-
-void fputi(int val, FILE *f);
-void _append(std::string *s, int line);
-
-/** example implementation using vanilla c++ std::runtime_error */
-struct ErrorBehaviorRuntimeError : public ErrorCallbacksBridgeFull<ErrorBehaviorRuntimeError>
-{
- std::string exc_msg{};
-
- void msg_begin(locref loc)
- {
- exc_msg.reserve(strlen(loc.file) + 16);
- exc_msg = '\n';
- exc_msg += loc.file;
- exc_msg += ':';
- _append(&exc_msg, loc.line);
- exc_msg += ": ";
- }
- void msg_part(const char *part, size_t part_size)
- {
- exc_msg.append(part, part_size);
- }
- void msg_end()
- {
- std::cerr << exc_msg << "\n";
- }
- void err(locref)
- {
- throw std::runtime_error(exc_msg);
- }
- void warn(locref)
- {
- }
-};
-
-
-
-TEST_CASE("ErrorBehaviorRuntimeError.default_obj")
-{
- ErrorBehaviorRuntimeError bhv;
- auto cb = bhv.callbacks();
- CHECK_NE(cb.user_data, nullptr);
- CHECK_NE(cb.err, nullptr);
- CHECK_NE(cb.warn, nullptr);
- CHECK_NE(cb.msg_begin, nullptr);
- CHECK_NE(cb.msg_part, nullptr);
- CHECK_NE(cb.msg_end, nullptr);
-}
-
-
-
-
-ErrorBehaviorAbort s_err_abort = ErrorBehaviorAbort();
-ErrorCallbacks s_err_callbacks = s_err_abort.callbacks();
-
-
-void new_handle_error(locref loc, size_t msg_size, const char *msg)
-{
- if(s_err_callbacks.msg_enabled())
- {
- s_err_callbacks.msg_begin(loc, s_err_callbacks.user_data);
- s_err_callbacks.msg("ERROR: ");
- s_err_callbacks.msg(msg, msg_size);
- s_err_callbacks.msg_end(s_err_callbacks.user_data);
- }
- s_err_callbacks.err(loc, s_err_callbacks.user_data);
-}
-
-void new_handle_warning(locref loc, size_t msg_size, const char *msg)
-{
- if(s_err_callbacks.msg_enabled())
- {
- s_err_callbacks.msg_begin(loc, s_err_callbacks.user_data);
- s_err_callbacks.msg("WARNING: ");
- s_err_callbacks.msg(msg, msg_size);
- s_err_callbacks.msg_end(s_err_callbacks.user_data);
- }
- s_err_callbacks.warn(loc, s_err_callbacks.user_data);
-}
-
-template<size_t N>
-C4_ALWAYS_INLINE void new_handle_error(locref loc, const char (&msg)[N])
-{
- new_handle_error(loc, N-1, msg);
-}
-
-template<size_t N>
-C4_ALWAYS_INLINE void new_handle_warning(locref loc, const char (&msg)[N])
-{
- new_handle_warning(loc, N-1, msg);
-}
-
-
-#define C4_ERROR_NEW(msg) c4::new_handle_error(C4_SRCLOC(), msg)
-#define C4_WARNING_NEW(msg) c4::new_handle_warning(C4_SRCLOC(), msg)
-
-#define C4_ERROR_NEW_SZ(msg, msglen) c4::new_handle_error(C4_SRCLOC(), msglen, msg)
-#define C4_WARNING_NEW_SZ(msg, msglen) c4::new_handle_warning(C4_SRCLOC(), msglen, msg)
-
-} // namespace c4
-
-#ifndef C4CORE_SINGLE_HEADER
-#include <c4/substr.hpp>
-#include <c4/charconv.hpp>
-#endif
-
-namespace c4 {
-
-void fputi(int val, FILE *f)
-{
- char buf[16];
- size_t ret = c4::itoa(buf, val);
- ret = ret < sizeof(buf) ? ret : sizeof(buf);
- fwrite(buf, 1u, ret, f);
-}
-
-// to avoid using std::to_string()
-void _append(std::string *s, int line)
-{
- auto sz = s->size();
- s->resize(sz + 16);
- auto ret = itoa(substr(&((*s)[0]) + sz, 16u), line);
- s->resize(sz + ret);
- if(ret >= sz)
- {
- itoa(substr(&((*s)[0]) + sz, 16u), line);
- }
-}
-
-} // namespace c4
-template<class ErrorBehavior>
-struct ScopedErrorBehavior
-{
- c4::ErrorCallbacks m_prev;
- ErrorBehavior m_tmp;
- const char *m_name;
- ScopedErrorBehavior(const char* name) : m_prev(c4::s_err_callbacks), m_tmp(), m_name(name)
- {
- c4::s_err_callbacks = m_tmp.callbacks();
- }
- ~ScopedErrorBehavior()
- {
- c4::s_err_callbacks = m_prev;
- }
-};
-#define C4_TMP_ERR_BHV(bhv_ty) ScopedErrorBehavior<c4::bhv_ty>(#bhv_ty)
-
-template<size_t N>
-void test_error_exception(const char (&msg)[N])
-{
- INFO(msg);
- {
- auto tmp1 = C4_TMP_ERR_BHV(ErrorBehaviorAbort);
-
- {
- auto tmp2 = C4_TMP_ERR_BHV(ErrorBehaviorRuntimeError);
-
- bool got_exc = false;
- try {
- C4_ERROR_NEW(msg);
- }
- catch(std::exception const& e) {
- // check that the error terminates with the given message
- auto what = c4::to_csubstr(e.what()).last(N-1);
- CHECK_EQ(what, msg);
- got_exc = (what == msg);
- }
- CHECK(got_exc);
-
- got_exc = false;
- try {
- C4_ERROR_NEW_SZ(msg, N-1);
- }
- catch(std::exception const& e) {
- // check that the error terminates with the given message
- auto what = c4::to_csubstr(e.what()).last(N-1);
- CHECK_EQ(what, msg);
- got_exc = (what == msg);
- }
- CHECK(got_exc);
- }
- }
-}
-
-template<size_t N>
-void test_warning_exception(const char (&msg)[N])
-{
- auto tmp = C4_TMP_ERR_BHV(ErrorBehaviorRuntimeError);
- C4_WARNING_NEW(msg);
- auto const& wmsg = tmp.m_tmp.exc_msg;
- REQUIRE_FALSE(wmsg.empty());
- REQUIRE_GT(wmsg.size(), N);
- auto what = c4::to_csubstr(wmsg.c_str()).last(N-1);
- CHECK_EQ(what, msg);
-
- C4_WARNING_NEW_SZ(msg, N-1);
- REQUIRE_FALSE(wmsg.empty());
- REQUIRE_GT(wmsg.size(), N);
- what = c4::to_csubstr(wmsg.c_str()).last(N-1);
- CHECK_EQ(what, msg);
-}
-
-TEST_CASE("error.exception")
-{
- test_error_exception("some error with some message");
- test_error_exception("some error with another message");
-}
-
-TEST_CASE("warning.exception")
-{
- test_warning_exception("some warning");
- test_warning_exception("some other warning");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-#ifndef C4CORE_SINGLE_HEADER
-#include <c4/substr.hpp>
-#include <c4/charconv.hpp>
-#endif
-
-namespace c4 {
-
-template<class T>
-void _err_send(T const& arg)
-{
- char buf[C4_ERR_FMT_BUFFER_SIZE];
- size_t num = to_chars(buf, arg);
- num = num < C4_ERR_FMT_BUFFER_SIZE ? num : C4_ERR_FMT_BUFFER_SIZE;
- s_err_callbacks.msg_part(buf, num, s_err_callbacks.user_data);
-}
-
-
-size_t _find_fmt(const char *C4_RESTRICT fmt, size_t len)
-{
- for(size_t i = 0; i < len; ++i)
- {
- if(fmt[i] != '{')
- {
- continue;
- }
- if(i + 1 == len)
- {
- break;
- }
- if(fmt[i+1] == '}')
- {
- return i;
- }
- }
- return (size_t)-1;
-}
-
-void _err_fmt(size_t fmt_size, const char *C4_RESTRICT fmt)
-{
- s_err_callbacks.msg_part(fmt, fmt_size, s_err_callbacks.user_data);
-}
-
-template<class Arg, class ...Args>
-void _err_fmt(size_t fmt_size, const char *C4_RESTRICT fmt, Arg const& C4_RESTRICT arg, Args const& C4_RESTRICT ...args)
-{
- size_t pos = _find_fmt(fmt, fmt_size);
- if(pos == (size_t)-1)
- {
- s_err_callbacks.msg_part(fmt, fmt_size, s_err_callbacks.user_data);
- return;
- }
- s_err_callbacks.msg_part(fmt, pos, s_err_callbacks.user_data);
- _err_send(arg);
- pos += 2;
- _err_fmt(fmt_size - pos, fmt + pos, args...);
-}
-
-template<class ...Args>
-void err_fmt(locref loc, size_t fmt_size, const char *fmt, Args const& C4_RESTRICT ...args)
-{
- s_err_callbacks.msg_begin(loc, s_err_callbacks.user_data);
- s_err_callbacks.msg("ERROR: ");
- _err_fmt(fmt_size, fmt, args...);
- s_err_callbacks.msg_end(s_err_callbacks.user_data);
- s_err_callbacks.err(loc, s_err_callbacks.user_data);
-}
-
-template<class ...Args>
-void warn_fmt(locref loc, size_t fmt_size, const char *fmt, Args const& C4_RESTRICT ...args)
-{
- s_err_callbacks.msg_begin(loc, s_err_callbacks.user_data);
- s_err_callbacks.msg("WARNING: ");
- _err_fmt(fmt_size, fmt, args...);
- s_err_callbacks.msg_end(s_err_callbacks.user_data);
- s_err_callbacks.warn(loc, s_err_callbacks.user_data);
-}
-
-template<size_t N, class ...Args>
-void err_fmt(locref loc, const char (&fmt)[N], Args const& C4_RESTRICT ...args)
-{
- err_fmt(loc, N-1, fmt, args...);
-}
-
-template<size_t N, class ...Args>
-void warn_fmt(locref loc, const char (&fmt)[N], Args const& C4_RESTRICT ...args)
-{
- warn_fmt(loc, N-1, fmt, args...);
-}
-
-#define C4_ERROR_FMT_NEW(fmt, ...) c4::err_fmt(C4_SRCLOC(), fmt, __VA_ARGS__)
-#define C4_WARNING_FMT_NEW(msg, ...) c4::warn_fmt(C4_SRCLOC(), fmt, __VA_ARGS__)
-
-#define C4_ERROR_FMT_NEW_SZ(fmt, fmtlen, ...) c4::err_fmt(C4_SRCLOC(), fmtlen, fmt, __VA_ARGS__)
-#define C4_WARNING_FMT_NEW_SZ(fmt, fmtlen, ...) c4::warn_fmt(C4_SRCLOC(), fmtlen, fmt, __VA_ARGS__)
-
-} // namespace c4
-
-template<size_t N, size_t M, class... Args>
-void test_error_fmt_exception(const char (&expected)[M], const char (&fmt)[N], Args const& ...args)
-{
- INFO(expected);
- {
- auto tmp1 = C4_TMP_ERR_BHV(ErrorBehaviorAbort);
-
- {
- auto tmp2 = C4_TMP_ERR_BHV(ErrorBehaviorRuntimeError);
-
- bool got_exc = false;
- try {
- C4_ERROR_FMT_NEW(fmt, args...);
- }
- catch(std::exception const& e) {
- // check that the error terminates with the given message
- auto what = c4::to_csubstr(e.what()).last(M-1);
- CHECK_EQ(what, expected);
- got_exc = (what == expected);
- }
- CHECK(got_exc);
-
- got_exc = false;
- try {
- C4_ERROR_FMT_NEW_SZ(fmt, N-1, args...);
- }
- catch(std::exception const& e) {
- // check that the error terminates with the given message
- auto what = c4::to_csubstr(e.what()).last(M-1);
- CHECK_EQ(what, expected);
- got_exc = (what == expected);
- }
- CHECK(got_exc);
- }
- }
-}
-
-template<size_t N, size_t M, class... Args>
-void test_warning_fmt_exception(const char (&expected)[M], const char (&fmt)[N], Args const& ...args)
-{
- INFO(expected);
-
- auto tmp = C4_TMP_ERR_BHV(ErrorBehaviorRuntimeError);
- auto const& wmsg = tmp.m_tmp.exc_msg;
- C4_WARNING_FMT_NEW(fmt, args...);
- REQUIRE_FALSE(wmsg.empty());
- REQUIRE_GT(wmsg.size(), M);
- auto what = c4::to_csubstr(wmsg.c_str()).last(M-1);
- CHECK_EQ(what, expected);
-
- C4_WARNING_FMT_NEW_SZ(fmt, N-1, args...);
- REQUIRE_FALSE(wmsg.empty());
- REQUIRE_GT(wmsg.size(), M);
- what = c4::to_csubstr(wmsg.c_str()).last(M-1);
- CHECK_EQ(what, expected);
-}
-
-
-TEST_CASE("error.fmt")
-{
- test_error_fmt_exception("aaa is 2 is it not?",
- "{} is {} is it not?", "aaa", 2);
- test_error_fmt_exception("aaa is bbb is it not?",
- "{} is {} is it not?", "aaa", "bbb");
- test_error_fmt_exception("aaa is {} is it not?",
- "{} is {} is it not?", "aaa");
- test_error_fmt_exception("aaa is {} is it not?",
- "{} is {} is it not?", "aaa");
-}
-
-TEST_CASE("warning.fmt")
-{
- test_warning_fmt_exception("aaa is 2 is it not?",
- "{} is {} is it not?", "aaa", 2);
- test_warning_fmt_exception("aaa is bbb is it not?",
- "{} is {} is it not?", "aaa", "bbb");
- test_warning_fmt_exception("aaa is {} is it not?",
- "{} is {} is it not?", "aaa");
- test_warning_fmt_exception("aaa is {} is it not?",
- "{} is {} is it not?", "aaa");
-}
-
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_error_exception.cpp b/thirdparty/ryml/ext/c4core/test/test_error_exception.cpp
deleted file mode 100644
index fae0020b8..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_error_exception.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/error.hpp"
-#endif
-
-#include "c4/test.hpp"
-#include <string>
-#include <stdexcept>
-
-
-C4_BEGIN_HIDDEN_NAMESPACE
-bool got_an_error = false;
-bool got_an_exception = false;
-C4_END_HIDDEN_NAMESPACE
-
-void error_callback_throwing_exception(const char *msg_, size_t msg_sz)
-{
- got_an_error = true;
- c4::csubstr s(msg_, msg_sz);
- if (s == "err1") throw 1;
- else if(s == "err2") throw 2;
- else if(s == "err3") throw 3;
- else if(s == "err4") throw 4;
- else throw std::runtime_error({msg_, msg_+msg_sz});
-}
-
-inline c4::ScopedErrorSettings tmp_err()
-{
- got_an_error = false;
- return c4::ScopedErrorSettings(c4::ON_ERROR_CALLBACK, error_callback_throwing_exception);
-}
-
-
-void test_exception(int which)
-{
- if(which == 0) return;
- CHECK_FALSE(got_an_exception);
- CHECK_EQ(c4::get_error_callback() == error_callback_throwing_exception, false);
- {
- auto tmp = tmp_err();
- CHECK_EQ(got_an_error, false);
- CHECK_EQ(c4::get_error_callback() == error_callback_throwing_exception, true);
- try
- {
- if (which == 1) { C4_ERROR("err1"); }
- else if(which == 2) { C4_ERROR("err2"); }
- else if(which == 3) { C4_ERROR("err3"); }
- else if(which == 4) { C4_ERROR("err4"); }
- else { C4_ERROR("unknown error"); }
- }
- catch(int i)
- {
- got_an_exception = true;
- CHECK_EQ(got_an_error, true);
- CHECK_EQ(i, which);
- throw;
- }
- catch(std::runtime_error const& e)
- {
- got_an_exception = true;
- CHECK_EQ(got_an_error, true);
- CHECK_STREQ(e.what(), "unknown error");
- throw;
- }
- // if we get here it means no exception was thrown
- // so the test failed
- FAIL("an exception was thrown");
- }
- CHECK_EQ(c4::get_error_callback() == error_callback_throwing_exception, false);
-}
-
-
-// Although c4core does not use exceptions by default (*), you can have your
-// error callback throw an exception which you can then catch on your code.
-// This test covers that possibility.
-//
-// (*) Note that you can also configure c4core to throw an exception on error.
-
-TEST_CASE("error.exception_from_callback")
-{
- // works!
- got_an_exception = false;
- CHECK_THROWS_AS(test_exception(-1), std::runtime_error);
- CHECK(got_an_exception);
-
- got_an_exception = false;
- CHECK_NOTHROW(test_exception(0));
- CHECK_FALSE(got_an_exception);
-
- got_an_exception = false;
- CHECK_THROWS_AS(test_exception(1), int);
- CHECK(got_an_exception);
-
- got_an_exception = false;
- CHECK_THROWS_AS(test_exception(2), int);
- CHECK(got_an_exception);
-
- got_an_exception = false;
- CHECK_THROWS_AS(test_exception(3), int);
- CHECK(got_an_exception);
-
- got_an_exception = false;
- CHECK_THROWS_AS(test_exception(4), int);
- CHECK(got_an_exception);
-
- got_an_exception = false;
- CHECK_THROWS_AS(test_exception(6), std::runtime_error);
- CHECK(got_an_exception);
-}
diff --git a/thirdparty/ryml/ext/c4core/test/test_format.cpp b/thirdparty/ryml/ext/c4core/test/test_format.cpp
deleted file mode 100644
index 42a50dc75..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_format.cpp
+++ /dev/null
@@ -1,1054 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/substr.hpp"
-#include "c4/std/std.hpp"
-#include "c4/format.hpp"
-#endif
-
-#include <c4/test.hpp>
-#include "c4/libtest/supprwarn_push.hpp"
-
-#ifdef __clang__
-# pragma clang diagnostic push
-#elif defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wuseless-cast"
-#endif
-
-namespace c4 {
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-
-TEST_CASE_TEMPLATE("to_chars.fmt.bin", T, uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t)
-{
- char bufc[128];
- substr buf(bufc);
-
- CHECK_EQ(to_chars_sub(buf, fmt::integral(T(21), T(2))), "0b10101");
- CHECK_EQ(to_chars_sub(buf, fmt::integral((T*)21, T(2))), "0b10101");
- CHECK_EQ(to_chars_sub(buf, fmt::integral((T const*)21, T(2))), "0b10101");
- CHECK_EQ(to_chars_sub(buf, fmt::integral(nullptr, T(2))), "0b0");
- CHECK_EQ(to_chars_sub(buf, fmt::bin(T(21))), "0b10101");
- CHECK_EQ(to_chars_sub(buf, fmt::bin((T*)21)), "0b10101");
- CHECK_EQ(to_chars_sub(buf, fmt::bin((T const*)21)), "0b10101");
- CHECK_EQ(to_chars_sub(buf, fmt::bin(nullptr)), "0b0");
-}
-
-TEST_CASE_TEMPLATE("to_chars.fmt.zpad.bin", T, uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t)
-{
- char bufc[128];
- substr buf(bufc);
- using namespace fmt;
- CHECK_EQ(to_chars_sub(buf, zpad(integral(T(21), T(2)), 8u)), "0b00010101");
- CHECK_EQ(to_chars_sub(buf, zpad(integral((T*)21, T(2)), 8u)), "0b00010101");
- CHECK_EQ(to_chars_sub(buf, zpad(integral((T const*)21, T(2)), 8u)), "0b00010101");
- CHECK_EQ(to_chars_sub(buf, zpad(bin(T(21)), 8u)), "0b00010101");
- CHECK_EQ(to_chars_sub(buf, zpad(bin((T*)21), 8u)), "0b00010101");
- CHECK_EQ(to_chars_sub(buf, zpad(bin((T const*)21), 8u)), "0b00010101");
-}
-
-TEST_CASE_TEMPLATE("to_chars.fmt.oct", T, uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t)
-{
- char bufc[128];
- substr buf(bufc);
-
- CHECK_EQ(to_chars_sub(buf, fmt::integral(T(65), T(8))), "0o101");
- CHECK_EQ(to_chars_sub(buf, fmt::integral((T*)65, T(8))), "0o101");
- CHECK_EQ(to_chars_sub(buf, fmt::integral((T const*)65, T(8))), "0o101");
- CHECK_EQ(to_chars_sub(buf, fmt::integral(nullptr, T(8))), "0o0");
- CHECK_EQ(to_chars_sub(buf, fmt::oct(T(65))), "0o101");
- CHECK_EQ(to_chars_sub(buf, fmt::oct((T*)65)), "0o101");
- CHECK_EQ(to_chars_sub(buf, fmt::oct((T const*)65)), "0o101");
- CHECK_EQ(to_chars_sub(buf, fmt::oct(nullptr)), "0o0");
-}
-
-TEST_CASE_TEMPLATE("to_chars.fmt.zpad.oct", T, uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t)
-{
- char bufc[128];
- substr buf(bufc);
- using namespace fmt;
- CHECK_EQ(to_chars_sub(buf, zpad(integral(T(65), T(8)), 5u)), "0o00101");
- CHECK_EQ(to_chars_sub(buf, zpad(integral((T*)65, T(8)), 5u)), "0o00101");
- CHECK_EQ(to_chars_sub(buf, zpad(integral((T const*)65, T(8)), 5u)), "0o00101");
- CHECK_EQ(to_chars_sub(buf, zpad(oct(T(65)), 5u)), "0o00101");
- CHECK_EQ(to_chars_sub(buf, zpad(oct((T*)65), 5u)), "0o00101");
- CHECK_EQ(to_chars_sub(buf, zpad(oct((T const*)65), 5u)), "0o00101");
-}
-
-TEST_CASE_TEMPLATE("to_chars.fmt.hex", T, uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t)
-{
- char bufc[128];
- substr buf(bufc);
- CHECK_EQ(to_chars_sub(buf, fmt::integral(T(0x7f), T(16))), "0x7f");
- CHECK_EQ(to_chars_sub(buf, fmt::integral((T*)0x7f, T(16))), "0x7f");
- CHECK_EQ(to_chars_sub(buf, fmt::integral((T const*)0x7f, T(16))), "0x7f");
- CHECK_EQ(to_chars_sub(buf, fmt::integral(nullptr, T(16))), "0x0");
- CHECK_EQ(to_chars_sub(buf, fmt::hex(T(0x7f))), "0x7f");
- CHECK_EQ(to_chars_sub(buf, fmt::hex((T*)0x7f)), "0x7f");
- CHECK_EQ(to_chars_sub(buf, fmt::hex((T const*)0x7f)), "0x7f");
- CHECK_EQ(to_chars_sub(buf, fmt::hex(nullptr)), "0x0");
-}
-
-TEST_CASE_TEMPLATE("to_chars.fmt.zpad.hex", T, uint8_t, int8_t)
-{
- char bufc[128];
- substr buf(bufc);
- using namespace fmt;
- buf.fill('?');
- CHECK_EQ(to_chars_sub(buf, zpad(integral(T(0x7f), T(16)), 5u)), "0x0007f");
- CHECK_EQ(to_chars_sub(buf, zpad(integral((T*)0x7f, T(16)), 5u)), "0x0007f");
- CHECK_EQ(to_chars_sub(buf, zpad(integral((T const*)0x7f, T(16)), 5u)), "0x0007f");
- CHECK_EQ(to_chars_sub(buf, zpad(hex(T(0x7f)), 5u)), "0x0007f");
- CHECK_EQ(to_chars_sub(buf, zpad(hex((T*)0x7f), 5u)), "0x0007f");
- CHECK_EQ(to_chars_sub(buf, zpad(hex((T const*)0x7f), 5u)), "0x0007f");
-}
-
-
-TEST_CASE_TEMPLATE("to_chars.fmt.zpad", T, uint8_t, int8_t)
-{
- char bufc[128];
- substr buf(bufc);
- using namespace fmt;
- CHECK_EQ(to_chars_sub(buf, zpad(T(10), 0)), "10");
- CHECK_EQ(to_chars_sub(buf, zpad(T(10), 1)), "10");
- CHECK_EQ(to_chars_sub(buf, zpad(T(10), 2)), "10");
- CHECK_EQ(to_chars_sub(buf, zpad(T(10), 3)), "010");
- CHECK_EQ(to_chars_sub(buf, zpad(T(10), 4)), "0010");
- CHECK_EQ(to_chars_sub(buf, zpad((T const*)17, 0)), "0x11");
- CHECK_EQ(to_chars_sub(buf, zpad((T const*)17, 1)), "0x11");
- CHECK_EQ(to_chars_sub(buf, zpad((T const*)17, 2)), "0x11");
- CHECK_EQ(to_chars_sub(buf, zpad((T const*)17, 3)), "0x011");
- CHECK_EQ(to_chars_sub(buf, zpad((T const*)17, 4)), "0x0011");
- CHECK_EQ(to_chars_sub(buf, zpad((T *)17, 0)), "0x11");
- CHECK_EQ(to_chars_sub(buf, zpad((T *)17, 1)), "0x11");
- CHECK_EQ(to_chars_sub(buf, zpad((T *)17, 2)), "0x11");
- CHECK_EQ(to_chars_sub(buf, zpad((T *)17, 3)), "0x011");
- CHECK_EQ(to_chars_sub(buf, zpad((T *)17, 4)), "0x0011");
- CHECK_EQ(to_chars_sub(buf, zpad(nullptr, 0)), "0x0");
- CHECK_EQ(to_chars_sub(buf, zpad(nullptr, 1)), "0x0");
- CHECK_EQ(to_chars_sub(buf, zpad(nullptr, 2)), "0x00");
- CHECK_EQ(to_chars_sub(buf, zpad(nullptr, 3)), "0x000");
- CHECK_EQ(to_chars_sub(buf, zpad(nullptr, 4)), "0x0000");
- CHECK_EQ(to_chars_sub(buf, zpad(integral(nullptr, T(10)), 0u)), "0");
- CHECK_EQ(to_chars_sub(buf, zpad(integral(nullptr, T(16)), 0u)), "0x0");
- CHECK_EQ(to_chars_sub(buf, zpad(integral(nullptr, T(2)), 0u)), "0b0");
- CHECK_EQ(to_chars_sub(buf, zpad(integral(nullptr, T(8)), 0u)), "0o0");
- CHECK_EQ(to_chars_sub(buf, zpad(hex(nullptr), 0u)), "0x0");
- CHECK_EQ(to_chars_sub(buf, zpad(bin(nullptr), 0u)), "0b0");
- CHECK_EQ(to_chars_sub(buf, zpad(oct(nullptr), 0u)), "0o0");
- CHECK_EQ(to_chars_sub(buf, zpad(integral(nullptr, T(10)), 5u)), "00000");
- CHECK_EQ(to_chars_sub(buf, zpad(integral(nullptr, T(16)), 5u)), "0x00000");
- CHECK_EQ(to_chars_sub(buf, zpad(integral(nullptr, T(2)), 5u)), "0b00000");
- CHECK_EQ(to_chars_sub(buf, zpad(integral(nullptr, T(8)), 5u)), "0o00000");
- CHECK_EQ(to_chars_sub(buf, zpad(hex(nullptr), 5u)), "0x00000");
- CHECK_EQ(to_chars_sub(buf, zpad(bin(nullptr), 5u)), "0b00000");
- CHECK_EQ(to_chars_sub(buf, zpad(oct(nullptr), 5u)), "0o00000");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-template<class T>
-void test_to_chars_real(T f, int precision, const char* flt, T fltv, const char *scient, T scientv)
-{
- char bufc[64];
- substr buf(bufc);
- substr r;
- T copy;
-
- INFO("num=" << f);
-
- r = to_chars_sub(buf, fmt::real(f, precision));
- CHECK_EQ(r, to_csubstr(flt));
- from_chars(r, &copy);
- if(sizeof(T) == sizeof(float))
- {
- CHECK_FLOAT_EQ((float)fltv, (float)copy);
- }
- else
- {
- CHECK_FLOAT_EQ(fltv, copy);
- }
-
- r = to_chars_sub(buf, fmt::real(f, precision, FTOA_SCIENT));
- CHECK_EQ(r, to_csubstr(scient));
- from_chars(r, &copy);
- if(sizeof(T) == sizeof(float))
- {
- CHECK_FLOAT_EQ((float)scientv, (float)copy);
- }
- else
- {
- CHECK_FLOAT_EQ(scientv, copy);
- }
-}
-
-TEST_CASE_TEMPLATE("to_chars.fmt.real", T, float, double)
-{
- char bufc[128];
- substr buf(bufc);
-
- T f = static_cast<T>(256.064);
- test_to_chars_real<T>(f, 0, "256", T(256.), "3e+02", T(300.));
- test_to_chars_real<T>(f, 1, "256.1", T(256.1), "2.6e+02", T(260.));
- test_to_chars_real<T>(f, 2, "256.06", T(256.06), "2.56e+02", T(256.));
- test_to_chars_real<T>(f, 3, "256.064", T(256.064), "2.561e+02", T(256.1));
- test_to_chars_real<T>(f, 4, "256.0640", T(256.0640), "2.5606e+02", T(256.06));
- test_to_chars_real<T>(f, 5, "256.06400", T(256.06400), "2.56064e+02", T(256.064));
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-TEST_CASE("to_chars.fmt.boolalpha")
-{
- char bufc[128];
- substr buf(bufc);
-
- CHECK_EQ(to_chars_sub(buf, true), "1");
- CHECK_EQ(to_chars_sub(buf, false), "0");
- CHECK_EQ(to_chars_sub(buf, fmt::boolalpha(true)), "true");
- CHECK_EQ(to_chars_sub(buf, 1), "1");
- CHECK_EQ(to_chars_sub(buf, fmt::boolalpha(1)), "true");
- CHECK_EQ(to_chars_sub(buf, fmt::boolalpha(10)), "true");
- CHECK_EQ(to_chars_sub(buf, fmt::boolalpha(false)), "false");
- CHECK_EQ(to_chars_sub(buf, fmt::boolalpha(0)), "false");
- CHECK_EQ(to_chars_sub(buf, fmt::boolalpha(0u)), "false");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-TEST_CASE("align.left.overflow")
-{
- CHECK_EQ(to_chars(substr(), fmt::left(' ', 91u)), 91u);
- CHECK_EQ(to_chars(substr(), fmt::left("0123456789.123456789.123456789.123456789", 91u)), 91u);
- CHECK_EQ(to_chars(substr(), fmt::left("0123456789.123456789.123456789.123456789", 30u)), 40u);
-}
-
-TEST_CASE("align.right.overflow")
-{
- CHECK_EQ(to_chars(substr(), fmt::right(' ', 91u)), 91u);
- CHECK_EQ(to_chars(substr(), fmt::right("0123456789.123456789.123456789.123456789", 91u)), 91u);
- CHECK_EQ(to_chars(substr(), fmt::right("0123456789.123456789.123456789.123456789", 30u)), 40u);
-}
-
-TEST_CASE("align.left")
-{
- char buf[128] = {};
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 1)), "1");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 2)), "1 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 3)), "1 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 4)), "1 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 5)), "1 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 6)), "1 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 7)), "1 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 8)), "1 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 9)), "1 ");
-
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 1, '+')), "1");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 2, '+')), "1+");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 3, '+')), "1++");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 4, '+')), "1+++");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 5, '+')), "1++++");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 6, '+')), "1+++++");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 7, '+')), "1++++++");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 8, '+')), "1+++++++");
- CHECK_EQ(to_chars_sub(buf, fmt::left("1", 9, '+')), "1++++++++");
-
- CHECK_EQ(to_chars_sub(buf, fmt::left("01234", 0)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::left("01234", 1)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::left("01234", 2)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::left("01234", 3)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::left("01234", 4)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::left("01234", 5)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::left("01234", 6)), "01234 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left("01234", 7)), "01234 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left("01234", 8)), "01234 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left("01234", 9)), "01234 ");
-
- CHECK_EQ(to_chars_sub(buf, fmt::left(1234, 0)), "1234");
- CHECK_EQ(to_chars_sub(buf, fmt::left(1234, 1)), "1234");
- CHECK_EQ(to_chars_sub(buf, fmt::left(1234, 2)), "1234");
- CHECK_EQ(to_chars_sub(buf, fmt::left(1234, 3)), "1234");
- CHECK_EQ(to_chars_sub(buf, fmt::left(1234, 4)), "1234");
- CHECK_EQ(to_chars_sub(buf, fmt::left(1234, 5)), "1234 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left(1234, 6)), "1234 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left(1234, 7)), "1234 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left(1234, 8)), "1234 ");
- CHECK_EQ(to_chars_sub(buf, fmt::left(1234, 9)), "1234 ");
-}
-
-
-TEST_CASE("align.right")
-{
- char buf[128] = {};
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 1)), "1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 2)), " 1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 3)), " 1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 4)), " 1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 5)), " 1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 6)), " 1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 7)), " 1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 8)), " 1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 9)), " 1");
-
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 1, '+')), "1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 2, '+')), "+1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 3, '+')), "++1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 4, '+')), "+++1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 5, '+')), "++++1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 6, '+')), "+++++1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 7, '+')), "++++++1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 8, '+')), "+++++++1");
- CHECK_EQ(to_chars_sub(buf, fmt::right("1", 9, '+')), "++++++++1");
-
- CHECK_EQ(to_chars_sub(buf, fmt::right("01234", 0)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::right("01234", 1)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::right("01234", 2)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::right("01234", 3)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::right("01234", 4)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::right("01234", 5)), "01234");
- CHECK_EQ(to_chars_sub(buf, fmt::right("01234", 6)), " 01234");
- CHECK_EQ(to_chars_sub(buf, fmt::right("01234", 7)), " 01234");
- CHECK_EQ(to_chars_sub(buf, fmt::right("01234", 8)), " 01234");
- CHECK_EQ(to_chars_sub(buf, fmt::right("01234", 9)), " 01234");
-
- CHECK_EQ(to_chars_sub(buf, fmt::right(1234, 0)), "1234");
- CHECK_EQ(to_chars_sub(buf, fmt::right(1234, 1)), "1234");
- CHECK_EQ(to_chars_sub(buf, fmt::right(1234, 2)), "1234");
- CHECK_EQ(to_chars_sub(buf, fmt::right(1234, 3)), "1234");
- CHECK_EQ(to_chars_sub(buf, fmt::right(1234, 4)), "1234");
- CHECK_EQ(to_chars_sub(buf, fmt::right(1234, 5)), " 1234");
- CHECK_EQ(to_chars_sub(buf, fmt::right(1234, 6)), " 1234");
- CHECK_EQ(to_chars_sub(buf, fmt::right(1234, 7)), " 1234");
- CHECK_EQ(to_chars_sub(buf, fmt::right(1234, 8)), " 1234");
- CHECK_EQ(to_chars_sub(buf, fmt::right(1234, 9)), " 1234");
-
- CHECK_EQ(to_chars_sub(buf, fmt::real(0.124, 1)), "0.1"); // we assume this in what follows
- CHECK_EQ(to_chars_sub(buf, fmt::real(0.124, 2)), "0.12");
- CHECK_EQ(to_chars_sub(buf, fmt::real(0.124, 3)), "0.124");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 1), 0)), "0.1");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 1), 1)), "0.1");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 1), 2)), "0.1");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 1), 3)), "0.1");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 1), 4)), " 0.1");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 1), 5)), " 0.1");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 1), 6)), " 0.1");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 1), 7)), " 0.1");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 2), 0)), "0.12");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 2), 1)), "0.12");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 2), 2)), "0.12");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 2), 3)), "0.12");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 2), 4)), "0.12");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 2), 5)), " 0.12");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 2), 6)), " 0.12");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 2), 7)), " 0.12");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 3), 0)), "0.124");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 3), 1)), "0.124");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 3), 2)), "0.124");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 3), 3)), "0.124");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 3), 4)), "0.124");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 3), 5)), "0.124");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 3), 6)), " 0.124");
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(0.124, 3), 7)), " 0.124");
-
- CHECK_EQ(to_chars_sub(buf, fmt::right(fmt::real(1234.5222, 1), 7)), " 1234.5");
- auto r = [](double val, size_t width) { return fmt::right(fmt::real(val, 1), width); };
- CHECK_EQ(to_chars_sub(buf, r(1234.5, 7)), " 1234.5");
- c4::format(buf, "freq={}Hz\0", r(1234.5, 7));
- CHECK_EQ(to_csubstr(buf).len, to_csubstr("freq= 1234.5Hz").len);
- CHECK_EQ(to_csubstr(buf), "freq= 1234.5Hz");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-TEST_CASE("cat.vars")
-{
- char buf[256];
- substr sp(buf);
- csubstr result;
- size_t sz;
-
- sz = cat(buf, 1, ' ', 2, ' ', 3, ' ', 4);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 2 3 4");
-}
-
-#ifdef C4_TUPLE_TO_STR
-TEST_CASE("cat.tuple")
-{
- char buf[256];
- substr sp(buf);
- csubstr result;
- size_t sz;
-
- sz = cat(buf, std::forward_as_tuple(1, ' ', 2, ' ', 3, ' ', 4));
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 2 3 4");
-}
-#endif // C4_TUPLE_TO_STR
-
-TEST_CASE("uncat.vars")
-{
- size_t sz;
- size_t npos = csubstr::npos;
- int v1 = 0, v2 = 0, v3 = 0, v4 = 0;
-
- sz = uncat("1 2 3 4", v1, v2, v3, v4);
- CHECK_NE(sz, npos);
- CHECK_EQ(sz, 7);
- CHECK_EQ(v1, 1);
- CHECK_EQ(v2, 2);
- CHECK_EQ(v3, 3);
- CHECK_EQ(v4, 4);
-}
-
-#ifdef C4_TUPLE_TO_STR
-TEST_CASE("uncat.tuple")
-{
- size_t sz;
- int v1 = 0, v2 = 0, v3 = 0, v4 = 0;
-
- auto tp = std::forward_as_tuple(v1, v2, v3, v4);
- sz = uncat("1 2 3 4", tp);
- CHECK_NE(sz, csubstr::npos);
- CHECK_EQ(sz, 7);
- CHECK_EQ(v1, 1);
- CHECK_EQ(v2, 2);
- CHECK_EQ(v3, 3);
- CHECK_EQ(v4, 4);
-}
-#endif // C4_TUPLE_TO_STR
-
-
-TEST_CASE("catsep.vars")
-{
- char buf[256];
- substr sp(buf);
- csubstr result;
- size_t sz;
-
- sz = catsep(buf, ' ', 1, 2);
- CHECK_EQ(sz, 3);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 2");
-
- sz = catsep(buf, '/', 1, 2);
- CHECK_EQ(sz, 3);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1/2");
-
- sz = catsep(buf, ' ', 1, 2, 3, 4);
- CHECK_EQ(sz, 7);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 2 3 4");
-
- sz = catsep(buf, '/', 1, 2, 3, 4);
- CHECK_EQ(sz, 7);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1/2/3/4");
-}
-
-#ifdef C4_TUPLE_TO_STR
-TEST_CASE("catsep.tuple")
-{
- char buf[256];
- substr sp(buf);
- csubstr result;
- size_t sz;
-
- sz = catsep(buf, ' ', std::forward_as_tuple(1, 2));
- CHECK_EQ(sz, 3);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 2");
-
- sz = catsep(buf, '/', std::forward_as_tuple(1, 2));
- CHECK_EQ(sz, 3);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1/2");
-
- sz = catsep(buf, ' ', std::forward_as_tuple(1, 2, 3, 4));
- CHECK_EQ(sz, 7);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 2 3 4");
-
- sz = catsep(buf, '/', std::forward_as_tuple(1, 2, 3, 4));
- CHECK_EQ(sz, 7);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1/2/3/4");
-}
-#endif // C4_TUPLE_TO_STR
-
-TEST_CASE("uncatsep.vars")
-{
- size_t sz;
- int v1 = 0, v2 = 0, v3 = 0, v4 = 0;
- char sep;
-
- sz = uncatsep("1 2 3 4", sep, v1, v2, v3, v4);
- CHECK_EQ(sz, 7);
- CHECK_EQ(v1, 1);
- CHECK_EQ(v2, 2);
- CHECK_EQ(v3, 3);
- CHECK_EQ(v4, 4);
-}
-
-#ifdef C4_TUPLE_TO_STR
-TEST_CASE("uncatsep.tuple")
-{
- size_t sz;
- int v1 = 0, v2 = 0, v3 = 0, v4 = 0;
- char sep;
-
- auto tp = std::forward_as_tuple(v1, v2, v3, v4);
- sz = uncatsep("1 2 3 4", sep, tp);
- CHECK_EQ(sz, 7);
- CHECK_EQ(v1, 1);
- CHECK_EQ(v2, 2);
- CHECK_EQ(v3, 3);
- CHECK_EQ(v4, 4);
-}
-#endif // C4_TUPLE_TO_STR
-
-TEST_CASE("format.vars")
-{
- char buf[256];
- substr sp(buf);
- csubstr result;
- size_t sz;
-
- sz = format(buf, "{} and {} and {} and {}", 1, 2, 3, 4);
- CHECK_EQ(sz, strlen("1 and 2 and 3 and 4"));
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 and 2 and 3 and 4");
-
- sz = format(buf, "{} and {} and {} and {}", 1, 2, 3, 4, 5, 6, 7);
- CHECK_EQ(sz, 19);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 and 2 and 3 and 4");
-
- sz = format(buf, "{} and {} and {} and {}", 1, 2, 3);
- CHECK_EQ(sz, 20);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 and 2 and 3 and {}");
-
- sz = format(buf, "{} and {} and {} and {}", 1, 2);
- CHECK_EQ(sz, 21);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 and 2 and {} and {}");
-
- sz = format(buf, "{} and {} and {} and {}", 1);
- CHECK_EQ(sz, 22);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 and {} and {} and {}");
-
- sz = format(buf, "{} and {} and {} and {}");
- CHECK_EQ(sz, 23);
- result = sp.left_of(sz);
- CHECK_EQ(result, "{} and {} and {} and {}");
-
- sz = format(buf, "{} args only at the begin", 1);
- CHECK_EQ(sz, csubstr("1 args only at the begin").len);
- result = sp.left_of(sz);
- CHECK_EQ(result, csubstr("1 args only at the begin"));
-}
-
-TEST_CASE("format.empty_buffer")
-{
- size_t sz = format({}, "{} and {} and {} and {}", 1, 2, 3, 4);
- CHECK_EQ(sz, strlen("1 and 2 and 3 and 4"));
- char buf_[128];
- substr buf = buf_;
- sz = format(buf, "{} and {} and {} and {}", 1, 2, 3, 4);
- CHECK_EQ(sz, strlen("1 and 2 and 3 and 4"));
- CHECK_EQ(format(buf, "{} and {} and {} and {}", 1, 2, 3, 4),
- format({} , "{} and {} and {} and {}", 1, 2, 3, 4));
- CHECK_EQ(to_chars({}, 101), to_chars(buf, 101)); // eq for all integers
- CHECK_GE(to_chars({}, 0.1f), to_chars(buf, 0.1f)); // ge for all floats, due to a sprintf quirk
- CHECK_EQ(format(buf, "a={} foo {} {} bar {}", 101, 10, 11, 12),
- format({} , "a={} foo {} {} bar {}", 101, 10, 11, 12));
-}
-
-#ifdef C4_TUPLE_TO_STR
-TEST_CASE("format.tuple")
-{
- char buf[256];
- substr sp(buf);
- csubstr result;
- size_t sz;
-
- sz = format(buf, "{} and {} and {} and {}", std::forward_as_tuple(1, 2, 3, 4));
- CHECK_EQ(sz, 19);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 and 2 and 3 and 4");
-
- sz = format(buf, "{} and {} and {} and {}", std::forward_as_tuple(1, 2, 3, 4, 5, 6, 7));
- CHECK_EQ(sz, 19);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 and 2 and 3 and 4");
-
- sz = format(buf, "{} and {} and {} and {}", std::forward_as_tuple(1, 2, 3));
- CHECK_EQ(sz, 20);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 and 2 and 3 and {}");
-
- sz = format(buf, "{} and {} and {} and {}", std::forward_as_tuple(1, 2));
- CHECK_EQ(sz, 21);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 and 2 and {} and {}");
-
- sz = format(buf, "{} and {} and {} and {}", std::forward_as_tuple(1));
- CHECK_EQ(sz, 22);
- result = sp.left_of(sz);
- CHECK_EQ(result, "1 and {} and {} and {}");
-
- sz = format(buf, "{} and {} and {} and {}");
- CHECK_EQ(sz, 23);
- result = sp.left_of(sz);
- CHECK_EQ(result, "{} and {} and {} and {}");
-}
-#endif // C4_TUPLE_TO_STR
-
-TEST_CASE("unformat.vars")
-{
- size_t sz;
- int v1 = 0, v2 = 0, v3 = 0, v4 = 0;
-
- sz = unformat("1 and 2 and 3 and 4", "{} and {} and {} and {}", v1, v2, v3, v4);
- CHECK_EQ(sz, 19);
- CHECK_EQ(v1, 1);
- CHECK_EQ(v2, 2);
- CHECK_EQ(v3, 3);
- CHECK_EQ(v4, 4);
-
- v1 = 0;
- sz = unformat("1 and 2 and 3 and 4" , "3", v1);
- CHECK_EQ(sz, 1);
- CHECK_EQ(v1, 0);
-
- v1 = 0;
- sz = unformat("1,2,3,,,", "{},{},{}", v1, v2, v3);
- CHECK_EQ(sz, 5);
- CHECK_EQ(v1, 1);
- CHECK_EQ(v2, 2);
- CHECK_EQ(v3, 3);
-
- v1 = v2 = v3 = 0;
- sz = unformat("1,2,3,,,", "{},{},{},,,", v1, v2, v3);
- CHECK_EQ(sz, 8); // make sure we count the trailing characters in the format
- CHECK_EQ(v1, 1);
- CHECK_EQ(v2, 2);
- CHECK_EQ(v3, 3);
-}
-
-#ifdef C4_TUPLE_TO_STR
-TEST_CASE("unformat.tuple")
-{
- size_t sz;
- int v1 = 0, v2 = 0, v3 = 0, v4 = 0;
-
- auto tp = std::forward_as_tuple(v1, v2, v3, v4);
- sz = unformat("1 and 2 and 3 and 4", "{} and {} and {} and {}", tp);
- CHECK_EQ(sz, 19);
- CHECK_EQ(v1, 1);
- CHECK_EQ(v2, 2);
- CHECK_EQ(v3, 3);
- CHECK_EQ(v4, 4);
-}
-#endif // C4_TUPLE_TO_STR
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-TEST_CASE("catrs.basic")
-{
- std::vector<char> buf;
-
- catrs(&buf);
- CHECK_EQ(to_csubstr(buf), "");
-
- catrs(&buf, 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1234");
- catrs(&buf, 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "5678");
-}
-
-TEST_CASE("catrs.basic_return")
-{
- auto bufv = catrs<std::vector<char>>(9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
- CHECK_EQ(to_csubstr(bufv), "9876543210");
- bufv = catrs<std::vector<char>>();
- CHECK_EQ(to_csubstr(bufv), "");
- CHECK(bufv.empty());
-
- auto bufs = catrs<std::string>(9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
- CHECK_EQ(to_csubstr(bufs), "9876543210");
-}
-
-TEST_CASE("catrs.basic_append")
-{
- std::vector<char> buf;
-
- catrs(append, &buf);
- CHECK_EQ(to_csubstr(buf), "");
-
- catrs(append, &buf, 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1234");
- catrs(append, &buf, 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "12345678");
- catrs(append, &buf, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "123456789012345678");
-}
-
-template<class... Args>
-void catrs_perfect_fwd(Args && ...args)
-{
- catrs(std::forward<Args>(args)...);
-}
-
-TEST_CASE("catrs.perfect_fwd")
-{
- std::vector<char> buf;
- catrs_perfect_fwd(&buf, 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1234");
- catrs_perfect_fwd(&buf, 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "5678");
-}
-
-template<class... Args>
-void catrs_const_fwd(Args const& ...args)
-{
- catrs(args...);
-}
-
-TEST_CASE("catrs.const_fwd")
-{
- std::vector<char> buf;
- catrs_const_fwd(&buf, 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1234");
- catrs_const_fwd(&buf, 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "5678");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-TEST_CASE("catseprs.basic")
-{
- std::vector<char> buf;
-
- catseprs(&buf, ' ');
- CHECK_EQ(to_csubstr(buf), "");
-
- catseprs(&buf, ' ', 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1 2 3 4");
- catseprs(&buf, ' ', 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "5 6 7 8");
-
- catseprs(&buf, ',', 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1,2,3,4");
- catseprs(&buf, ',', 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "5,6,7,8");
-
- catseprs(&buf, '/', 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1/2/3/4");
- catseprs(&buf, '/', 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "5/6/7/8");
-
- catseprs(&buf, "///", 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1///2///3///4");
- catseprs(&buf, "///", 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "5///6///7///8");
-
- catseprs(&buf, 5678, 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1567825678356784");
- catseprs(&buf, 1234, 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "5123461234712348");
-}
-
-TEST_CASE("catseprs.basic_return")
-{
- auto bufv = catseprs<std::vector<char>>('a', 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
- CHECK_EQ(to_csubstr(bufv), "9a8a7a6a5a4a3a2a1a0");
-
- auto bufs = catseprs<std::string >('a', 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
- CHECK_EQ(to_csubstr(bufs), "9a8a7a6a5a4a3a2a1a0");
-}
-
-TEST_CASE("catseprs.basic_append")
-{
- std::vector<char> buf;
-
- auto ret = catseprs(append, &buf, ' ');
- CHECK_EQ(to_csubstr(buf), "");
- CHECK_EQ(ret, "");
-
- ret = catseprs(append, &buf, ' ', 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1 2 3 4");
- CHECK_EQ(ret, "1 2 3 4");
- ret = catseprs(append, &buf, ' ', 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "1 2 3 45 6 7 8");
- CHECK_EQ(ret, "5 6 7 8");
- ret = catseprs(append, &buf, ' ', 9, 0, 1, 2, 3, 4, 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "1 2 3 45 6 7 89 0 1 2 3 4 5 6 7 8");
- CHECK_EQ(ret, "9 0 1 2 3 4 5 6 7 8");
-
- ret = catseprs(append, &buf, ' ');
- CHECK_EQ(to_csubstr(buf), "1 2 3 45 6 7 89 0 1 2 3 4 5 6 7 8");
- CHECK_EQ(ret, "");
-}
-
-template<class... Args>
-void catseprs_perfect_fwd(Args && ...args)
-{
- catseprs(std::forward<Args>(args)...);
-}
-
-template<class... Args>
-void catseprs_const_fwd(Args const& ...args)
-{
- catseprs(args...);
-}
-
-TEST_CASE("catseprs.perfect_fwd")
-{
- std::vector<char> buf;
- catseprs_perfect_fwd(&buf, '.', 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1.2.3.4");
- catseprs_perfect_fwd(&buf, 0, 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "5060708");
-}
-
-TEST_CASE("catseprs.const_fwd")
-{
- std::vector<char> buf;
- catseprs_const_fwd(&buf, '.', 1, 2, 3, 4);
- CHECK_EQ(to_csubstr(buf), "1.2.3.4");
- catseprs_const_fwd(&buf, 0, 5, 6, 7, 8);
- CHECK_EQ(to_csubstr(buf), "5060708");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-TEST_CASE("formatrs.basic")
-{
- std::vector<char> buf;
-
- formatrs(&buf, "");
- CHECK(buf.empty());
-
- formatrs(&buf, "{} goes with food, {} goes with heat, {} anytime", "wine", "beer", "coffee");
- CHECK_EQ(to_csubstr(buf), "wine goes with food, beer goes with heat, coffee anytime");
-
- formatrs(&buf, "");
- CHECK(buf.empty());
-}
-
-TEST_CASE("formatrs.basic_return")
-{
- auto bufv = formatrs<std::vector<char>>("{} goes with food, {} goes with heat, {} anytime", "wine", "beer", "coffee");
- CHECK_EQ(to_csubstr(bufv), "wine goes with food, beer goes with heat, coffee anytime");
-
- auto bufs = formatrs<std::string>("{} goes with food, {} goes with heat, {} anytime", "wine", "beer", "coffee");
- CHECK_EQ(to_csubstr(bufs), "wine goes with food, beer goes with heat, coffee anytime");
-}
-
-TEST_CASE("formatrs.basic_append")
-{
- std::vector<char> buf;
-
- formatrs(append, &buf, "{} goes with food", "wine");
- CHECK_EQ(to_csubstr(buf), "wine goes with food");
- formatrs(append, &buf, ", {} goes with heat", "beer");
- CHECK_EQ(to_csubstr(buf), "wine goes with food, beer goes with heat");
- formatrs(append, &buf, ", {} anytime", "coffee");
- CHECK_EQ(to_csubstr(buf), "wine goes with food, beer goes with heat, coffee anytime");
-
- formatrs(append, &buf, ". And water. {} glass of {}cl in the morning clears you up for the day", 1, 40);
- CHECK_EQ(to_csubstr(buf), "wine goes with food, beer goes with heat, coffee anytime. And water. 1 glass of 40cl in the morning clears you up for the day");
-}
-
-template<class... Args>
-void formatrs_perfect_fwd(Args && ...args)
-{
- formatrs(std::forward<Args>(args)...);
-}
-
-template<class... Args>
-void formatrs_const_fwd(Args const& ...args)
-{
- formatrs(args...);
-}
-
-TEST_CASE("formatrs.perfect_fwd")
-{
- std::vector<char> buf;
- formatrs_perfect_fwd(&buf, "Too much of anything is bad, but too much {} is {}.", "Champagne", "just right");
- CHECK_EQ(to_csubstr(buf), "Too much of anything is bad, but too much Champagne is just right.");
- formatrs_perfect_fwd(&buf, "{}, I am tasting the {}", "Come quickly", "stars!");
- CHECK_EQ(to_csubstr(buf), "Come quickly, I am tasting the stars!");
- formatrs_perfect_fwd(&buf, "{} the only wine that leaves a {} {} after {}.", "Champagne is", "woman", "beautiful", "drinking it");
- CHECK_EQ(to_csubstr(buf), "Champagne is the only wine that leaves a woman beautiful after drinking it.");
- formatrs_perfect_fwd(&buf, "Remember {}, it's not just {} we are fighting for, it's {}", "gentlemen", "France", "Champagne!");
- CHECK_EQ(to_csubstr(buf), "Remember gentlemen, it's not just France we are fighting for, it's Champagne!");
- // https://www.townandcountrymag.com/leisure/drinks/how-to/g828/the-10-best-quotes-about-champagne/
-}
-
-TEST_CASE("formatrs.const_fwd")
-{
- std::vector<char> buf;
- formatrs_const_fwd(&buf, "Too much of anything is bad, but too much {} is {}.", "Champagne", "just right");
- CHECK_EQ(to_csubstr(buf), "Too much of anything is bad, but too much Champagne is just right.");
- formatrs_const_fwd(&buf, "{}, I am tasting the {}", "Come quickly", "stars!");
- CHECK_EQ(to_csubstr(buf), "Come quickly, I am tasting the stars!");
- formatrs_const_fwd(&buf, "{} the only wine that leaves a {} {} after {}.", "Champagne is", "woman", "beautiful", "drinking it");
- CHECK_EQ(to_csubstr(buf), "Champagne is the only wine that leaves a woman beautiful after drinking it.");
- formatrs_const_fwd(&buf, "Remember {}, it's not just {} we are fighting for, it's {}", "gentlemen", "France", "Champagne!");
- CHECK_EQ(to_csubstr(buf), "Remember gentlemen, it's not just France we are fighting for, it's Champagne!");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-template<class T>
-void test_hex(T in, csubstr expected)
-{
- INFO("expected=" << expected);
- SUBCASE("charbuf")
- {
- char buf_[128] = {};
- substr buf = buf_;
- buf.fill('?'); // this will be executed before each case
- SUBCASE("sz=0")
- {
- CHECK_EQ(cat(buf.first(0), fmt::hex(in)), expected.len);
- CHECK_EQ(buf[0], '?');
- CHECK_EQ(buf.trimr('?'), "");
- }
- SUBCASE("sz=1")
- {
- CHECK_EQ(cat(buf.first(1), fmt::hex(in)), expected.len);
- CHECK_EQ(buf[0], '?');
- CHECK_EQ(buf.trimr('?'), "");
- }
- SUBCASE("sz=2")
- {
- CHECK_EQ(cat(buf.first(2), fmt::hex(in)), expected.len);
- CHECK_EQ(buf[0], '?');
- CHECK_EQ(buf.trimr('?'), "");
- }
- SUBCASE("full")
- {
- REQUIRE_EQ(cat(buf, fmt::hex(in)), expected.len);
- CHECK_EQ(buf.first(expected.len), expected);
- CHECK_EQ(buf.trimr('?'), expected);
- }
- }
- SUBCASE("vector")
- {
- std::vector<char> buf;
- catrs(&buf, fmt::hex(in));
- CHECK_EQ(buf.size(), expected.len);
- CHECK_EQ(to_csubstr(buf), expected);
- }
-}
-
-TEST_CASE("fmt.hex")
-{
- test_hex(0, "0x0");
- test_hex(nullptr, "0x0");
- test_hex(254, "0xfe");
- test_hex(255, "0xff");
- test_hex(256, "0x100");
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-template<class T> void test_raw_roundtrip(const char *valstr, T const& orig)
-{
- INFO("valstr=" << valstr);
- alignas(alignof(T)) char buf_[2 * (sizeof(T) + alignof(T))] = {};
- substr buf = buf_;
-
- fmt::const_raw_wrapper rawwrap = fmt::raw(orig);
- REQUIRE_EQ((void*)rawwrap.buf, (void*)&orig);
- REQUIRE_EQ(rawwrap.len, sizeof(orig));
-
- for(size_t i = 0; i < alignof(T); ++i)
- {
- INFO(" i=" << i);
- // make sure to cover unaligned buffers
- substr sbuf = buf.sub(i);
- size_t szwrite = c4::to_chars(sbuf, fmt::raw(orig));
- REQUIRE_LE(szwrite, sbuf.len);
- if(i == 0)
- {
- REQUIRE_EQ(szwrite, sizeof(T));
- }
- else
- {
- REQUIRE_GT(szwrite, sizeof(T));
- }
- T copy = {};
- REQUIRE_NE(copy, orig);
- bool ok = c4::from_chars_first(sbuf, fmt::raw(copy));
- REQUIRE_EQ(ok, true);
- CHECK_EQ(copy, orig);
-
- // cover also insufficient buffers
- sbuf = sbuf.first(sizeof(T)-1);
- memset(buf.str, 0, buf.len);
- szwrite = c4::to_chars(sbuf, fmt::raw(orig));
- REQUIRE_GT(szwrite, sbuf.len);
- for(char c : buf)
- {
- CHECK_EQ(c, 0);
- }
- }
-}
-
-TEST_CASE("fmt.raw_int")
-{
- #define _(v) test_raw_roundtrip(#v, v)
-
- _(int(1));
- _(int(2));
- _(int(-1));
- _(int(-2));
-
- #undef _
-}
-
-} // namespace c4
-
-#ifdef __clang__
-# pragma clang diagnostic pop
-#elif defined(__GNUC__)
-# pragma GCC diagnostic pop
-#endif
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_log.cpp b/thirdparty/ryml/ext/c4core/test/test_log.cpp
deleted file mode 100644
index 2f5b56734..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_log.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-#include "c4/log.hpp"
-
-#include "c4/libtest/supprwarn_push.hpp"
-#include "c4/test.hpp"
-
-namespace c4 {
-
-TEST(LogBuffer, basic)
-{
-#define _CHECK(s, str) \
- EXPECT_EQ(strncmp(s.rd(), str, s.pos), 0) << " string was '" << s.rd() << "'"; \
- s.clear(); \
- EXPECT_EQ(s.pos, 0);\
- EXPECT_EQ(s.buf[0], '\0')
-
- LogBuffer b;
- const char *foo = "Foo";
- const char *bars_str = "123";
- int bars = 123;
-
- // raw writing
- b.write("hello world I am ");
- b.write(foo);
- b.write(" and I frobnicate ");
- b.write(bars_str); // only accepts const char*
- b.write(" Bars");
- _CHECK(b, "hello world I am Foo and I frobnicate 123 Bars");
-
- // chevron-style AKA iostream-style
- b << "hello world I am " << foo << " and I frobnicate " << bars << " Bars";
- _CHECK(b, "hello world I am Foo and I frobnicate 123 Bars");
-
- // c-style, not type safe
- b.printf("hello world I am %s and I frobnicate %d Bars", foo, bars);
- _CHECK(b, "hello world I am Foo and I frobnicate 123 Bars");
-
- // python-style, type safe
- b.print("hello world I am {} and I frobnicate {} Bars", foo, bars);
- _CHECK(b, "hello world I am Foo and I frobnicate 123 Bars");
-
- // r-style, type safe
- b.cat("hello world I am ", foo, " and I frobnicate ", bars, " Bars");
- _CHECK(b, "hello world I am Foo and I frobnicate 123 Bars");
-
- // using separators: this is unpractical...
- const char *s[] = {"now", "we", "have", "11", "strings", "to", "cat", "one", "after", "the", "other"};
- b.cat(s[0], ' ', s[1], ' ', s[2], ' ', s[3], ' ', s[4], ' ',
- s[5], ' ', s[6], ' ', s[7], ' ', s[8], ' ', s[9], ' ', s[10]);
- _CHECK(b, "now we have 11 strings to cat one after the other");
-
- // ... and this resolves it
- b.catsep(' ', s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9], s[10]);
- _CHECK(b, "now we have 11 strings to cat one after the other");
-
- b.catsep('_', s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9], s[10]);
- _CHECK(b, "now_we_have_11_strings_to_cat_one_after_the_other");
-
- // can be a full string
- b.catsep("____", s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9], s[10]);
- _CHECK(b, "now____we____have____11____strings____to____cat____one____after____the____other");
-
- // or just a general object
- b.catsep(22, s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9], s[10]);
- _CHECK(b, "now22we22have221122strings22to22cat22one22after22the22other");
-
-}
-
-} // namespace c4
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_memory_resource.cpp b/thirdparty/ryml/ext/c4core/test/test_memory_resource.cpp
deleted file mode 100644
index 7ae7a71ac..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_memory_resource.cpp
+++ /dev/null
@@ -1,255 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/memory_resource.hpp"
-#endif
-
-#include "c4/libtest/supprwarn_push.hpp"
-
-#include <limits>
-
-#include "c4/test.hpp"
-
-namespace c4 {
-
-TEST_CASE("set_aalloc.basic")
-{
- auto a = get_aalloc();
- set_aalloc(nullptr);
- CHECK_EQ(get_aalloc(), nullptr);
- set_aalloc(a);
- CHECK_EQ(get_aalloc(), a);
-}
-
-TEST_CASE("set_afree.basic")
-{
- auto a = get_afree();
- set_afree(nullptr);
- CHECK_EQ(get_afree(), nullptr);
- set_afree(a);
- CHECK_EQ(get_afree(), a);
-}
-
-TEST_CASE("set_arealloc.basic")
-{
- auto a = get_arealloc();
- set_arealloc(nullptr);
- CHECK_EQ(get_arealloc(), nullptr);
- set_arealloc(a);
- CHECK_EQ(get_arealloc(), a);
-}
-
-//-----------------------------------------------------------------------------
-namespace detail {
-void* aalloc_impl(size_t size, size_t alignment=alignof(max_align_t));
-void* arealloc_impl(void *ptr, size_t oldsz, size_t newsz, size_t alignment=alignof(max_align_t));
-void afree_impl(void *ptr);
-} // namespace detail
-
-TEST_CASE("aalloc_impl.error_bad_align")
-{
-#if defined(C4_POSIX)
- C4_EXPECT_ERROR_OCCURS(1);
- auto *mem = detail::aalloc_impl(64, 9); // allocating with a non-power of two value is invalid
- CHECK_EQ(mem, nullptr);
-#endif
-}
-
-TEST_CASE("aalloc_impl.error_out_of_mem")
-{
-#if defined(C4_POSIX)
- if(sizeof(size_t) != 8) return; // valgrind complains that size is -1
- C4_EXPECT_ERROR_OCCURS(1);
- size_t sz = std::numeric_limits<size_t>::max();
- sz /= 2;
- auto *mem = detail::aalloc_impl(sz);
- CHECK_EQ(mem, nullptr);
-#endif
-}
-
-//-----------------------------------------------------------------------------
-
-void do_test_realloc(arealloc_pfn fn)
-{
-#define _set(dim) for(uint8_t i = 0; i < dim; ++i) { mem[i] = static_cast<char>(i); }
-#define _check(dim) for(uint8_t i = 0; i < dim; ++i) { CHECK_EQ(mem[i], i); }
-
- char *mem = (char*) aalloc(16, alignof(max_align_t));
- _set(16u);
- _check(16u);
- mem = (char*) fn(mem, 16, 20, alignof(max_align_t));
- _check(16u);
- mem = (char*) fn(mem, 8, 20, alignof(max_align_t));
- _check(8u);
- afree(mem);
-
-#undef _set
-#undef _check
-}
-
-TEST_CASE("realloc_impl.basic")
-{
- do_test_realloc(&detail::arealloc_impl);
-}
-
-TEST_CASE("realloc.basic")
-{
- do_test_realloc(&arealloc);
-}
-
-
-//-----------------------------------------------------------------------------
-
-void do_memreslinear_realloc_test(MemoryResourceLinear &mr)
-{
- C4_ASSERT(mr.capacity() >= 128); // this is needed for the tests below
-
- char * mem = (char*) mr.allocate(32);
- CHECK_EQ(mem-(char*)mr.mem(), 0);
- CHECK_EQ(mr.size(), 32);
- CHECK_EQ(mr.slack(), mr.capacity() - 32);
-
- mem = (char*) mr.reallocate(mem, 32, 16);
- CHECK_EQ(mem-(char*)mr.mem(), 0);
- CHECK_EQ(mr.size(), 16);
- CHECK_EQ(mr.slack(), mr.capacity() - 16);
-
- mem = (char*) mr.reallocate(mem, 16, 64);
- CHECK_EQ(mem-(char*)mr.mem(), 0);
- CHECK_EQ(mr.size(), 64);
- CHECK_EQ(mr.slack(), mr.capacity() - 64);
-
- mem = (char*) mr.reallocate(mem, 64, 32);
- CHECK_EQ(mem-(char*)mr.mem(), 0);
- CHECK_EQ(mr.size(), 32);
- CHECK_EQ(mr.slack(), mr.capacity() - 32);
-
-
- char *mem2 = (char*) mr.allocate(32);
- CHECK_EQ(mem-(char*)mr.mem(), 0);
- CHECK_EQ(mem2-(char*)mr.mem(), 32);
- CHECK_EQ(mr.size(), 64);
- CHECK_EQ(mr.slack(), mr.capacity() - 64);
-
- mem = (char*) mr.reallocate(mem, 32, 16);
- CHECK_EQ(mem-(char*)mr.mem(), 0);
- CHECK_EQ(mr.size(), 64);
- CHECK_EQ(mr.slack(), mr.capacity() - 64);
-}
-
-TEST_CASE("MemoryResourceLinear.reallocate")
-{
- MemoryResourceLinear mr(128);
- do_memreslinear_realloc_test(mr);
-}
-
-TEST_CASE("MemoryResourceLinearArr.reallocate")
-{
- MemoryResourceLinearArr<128> mr;
- do_memreslinear_realloc_test(mr);
-}
-
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE("MemoryResourceLinear.error_out_of_mem")
-{
- {
- C4_EXPECT_ERROR_OCCURS(0);
- MemoryResourceLinear mr(8);
- mr.allocate(2);
- }
-
- {
- C4_EXPECT_ERROR_OCCURS(2);
- MemoryResourceLinear mr(8);
- mr.allocate(9);
- }
-}
-
-TEST_CASE("MemoryResourceLinearArr.error_out_of_mem")
-{
- {
- C4_EXPECT_ERROR_OCCURS(0);
- MemoryResourceLinearArr<8> mr;
- mr.allocate(2);
- }
-
- {
- C4_EXPECT_ERROR_OCCURS(2);
- MemoryResourceLinearArr<8> mr;
- mr.allocate(9);
- }
-}
-
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE("ScopedMemoryResource.basic")
-{
- auto *before = get_memory_resource();
- {
- MemoryResourceCounts mrc;
- ScopedMemoryResource smr(&mrc);
- CHECK_EQ(get_memory_resource(), &mrc);
- }
- CHECK_EQ(get_memory_resource(), before);
-}
-
-TEST_CASE("ScopedMemoryResourceCounts.basic")
-{
- auto *before = get_memory_resource();
- {
- auto sac = ScopedMemoryResourceCounts{};
- CHECK_EQ(get_memory_resource(), &sac.mr);
- }
- CHECK_EQ(get_memory_resource(), before);
-}
-
-TEST_CASE("ScopedMemoryResourceCounts.counts")
-{
- auto *before = get_memory_resource();
- C4_UNUSED(before);
-
- {
- auto checker = AllocationCountsChecker();
- auto *mr = &checker.mr;
-
- for(size_t sz : {16u, 32u, 64u, 128u})
- {
- void *mem = mr->allocate(sz);
- checker.check_all_delta(1, static_cast<ssize_t>(sz), static_cast<ssize_t>(sz));
- mr->deallocate(mem, sz);
- checker.reset();
- }
- checker.check_curr(0, 0);
- checker.check_total(4, 240);
- checker.check_max(1, 128);
- }
-
- {
- auto checker = AllocationCountsChecker();
- auto *mr = &checker.mr;
-
- std::pair<void *, size_t> mem[4] = {{0,16}, {0,32}, {0,64}, {0,128}};
- for(auto& m : mem)
- {
- m.first = mr->allocate(m.second);
- checker.check_curr_delta(1, static_cast<ssize_t>(m.second));
- checker.reset();
- }
- checker.check_curr(4, 240);
- checker.check_total(4, 240);
- checker.check_max(4, 240);
- for(auto& m : mem)
- {
- mr->deallocate(m.first, m.second);
- }
- checker.check_curr(0, 0);
- checker.check_total(4, 240);
- checker.check_max(4, 240);
- }
-
-}
-
-} // namespace c4
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_memory_util.cpp b/thirdparty/ryml/ext/c4core/test/test_memory_util.cpp
deleted file mode 100644
index 36509070c..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_memory_util.cpp
+++ /dev/null
@@ -1,415 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/memory_util.hpp"
-#endif
-
-#include "c4/libtest/supprwarn_push.hpp"
-
-#include <c4/test.hpp>
-#include <limits>
-
-namespace c4 {
-
-TEST_CASE("mem_overlaps")
-{
- csubstr buf = "0123456789012345678901234567890123456789";
- CHECK_EQ(buf.len, 40);
- auto overlaps = [](csubstr lhs, csubstr rhs){
- bool res = mem_overlaps(lhs.str, rhs.str, lhs.len, rhs.len);
- CHECK(res == lhs.overlaps(rhs));
- return res;
- };
- CHECK(!overlaps(buf.first(0), buf.last(0)));
- CHECK(!overlaps(buf.first(5), buf.last(5)));
- CHECK(!overlaps(buf.first(10), buf.last(10)));
- CHECK(!overlaps(buf.first(20), buf.last(20)));
- CHECK(overlaps(buf.first(21), buf.last(20)));
- CHECK(overlaps(buf.first(20), buf.last(21)));
- CHECK(!overlaps(buf.first(0), buf));
- CHECK(overlaps(buf.first(1), buf));
- CHECK(!overlaps(buf, buf.last(0)));
- CHECK(overlaps(buf, buf.last(1)));
- CHECK(!overlaps(buf.first(20), buf.last(20)));
- CHECK(overlaps(buf.first(21), buf.last(20)));
- CHECK(overlaps(buf.first(20), buf.first(21)));
-}
-
-TEST_CASE("mem_repeatT.one_repetition")
-{
- char buf[120] = {0};
-
- mem_repeat(buf, "123", 2, 1);
- CHECK_EQ(strcmp(buf, "12"), 0);
-
- mem_repeat(buf, "123", 3, 1);
- CHECK_EQ(strcmp(buf, "123"), 0);
-}
-
-TEST_CASE("mem_repeatT.basic")
-{
- char buf[120] = {0};
-
- mem_zero(buf);
-
- mem_repeat(buf, "123", 2, 2);
- CHECK_EQ(strcmp(buf, "1212"), 0);
- CHECK_EQ(buf[4], '\0');
-
- mem_zero(buf);
-
- mem_repeat(buf, "123", 3, 2);
- CHECK_EQ(strcmp(buf, "123123"), 0);
- CHECK_EQ(buf[6], '\0');
-
- mem_zero(buf);
-
- mem_repeat(buf, "123", 2, 3);
- CHECK_EQ(strcmp(buf, "121212"), 0);
- CHECK_EQ(buf[6], '\0');
-
- mem_zero(buf, sizeof(buf));
-
- mem_repeat(buf, "123", 3, 3);
- CHECK_EQ(strcmp(buf, "123123123"), 0);
- CHECK_EQ(buf[9], '\0');
-
- mem_zero(buf, sizeof(buf));
-
- mem_repeat(buf, "123", 2, 4);
- CHECK_EQ(strcmp(buf, "12121212"), 0);
- CHECK_EQ(buf[8], '\0');
-
- mem_zero(buf, sizeof(buf));
-
- mem_repeat(buf, "123", 3, 4);
- CHECK_EQ(strcmp(buf, "123123123123"), 0);
- CHECK_EQ(buf[12], '\0');
-
- mem_zero(buf, sizeof(buf));
-
- mem_repeat(buf, "123", 2, 5);
- CHECK_EQ(strcmp(buf, "1212121212"), 0);
- CHECK_EQ(buf[10], '\0');
-
- mem_zero(buf, sizeof(buf));
-
- mem_repeat(buf, "123", 3, 5);
- CHECK_EQ(strcmp(buf, "123123123123123"), 0);
- CHECK_EQ(buf[15], '\0');
-
- mem_zero(buf, sizeof(buf));
-
- mem_repeat(buf, "123", 2, 6);
- CHECK_EQ(strcmp(buf, "121212121212"), 0);
- CHECK_EQ(buf[12], '\0');
-
- mem_zero(buf, sizeof(buf));
-
- mem_repeat(buf, "123", 3, 6);
- CHECK_EQ(strcmp(buf, "123123123123123123"), 0);
- CHECK_EQ(buf[18], '\0');
-}
-
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE("is_aligned.basic")
-{
- CHECK(is_aligned<int>((int*)0x0));
- CHECK_FALSE(is_aligned<int>((int*)0x1));
- CHECK_FALSE(is_aligned<int>((int*)0x2));
- CHECK_FALSE(is_aligned<int>((int*)0x3));
- CHECK_FALSE(is_aligned<int>((int*)0x3));
- CHECK(is_aligned<int>((int*)0x4));
-}
-
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE_TEMPLATE("lsb.basic", T, uint8_t, uint16_t, uint32_t, uint64_t)
-{
- //CHECK_EQ(lsb<T>( 0), T(0));
- CHECK_EQ(lsb<T>( 1), T(0));
- CHECK_EQ(lsb<T>( 2), T(1));
- CHECK_EQ(lsb<T>( 3), T(0));
- CHECK_EQ(lsb<T>( 4), T(2));
- CHECK_EQ(lsb<T>( 5), T(0));
- CHECK_EQ(lsb<T>( 6), T(1));
- CHECK_EQ(lsb<T>( 7), T(0));
- CHECK_EQ(lsb<T>( 8), T(3));
- CHECK_EQ(lsb<T>( 9), T(0));
- CHECK_EQ(lsb<T>(10), T(1));
- CHECK_EQ(lsb<T>(11), T(0));
- CHECK_EQ(lsb<T>(12), T(2));
- CHECK_EQ(lsb<T>(13), T(0));
- CHECK_EQ(lsb<T>(14), T(1));
- CHECK_EQ(lsb<T>(15), T(0));
- CHECK_EQ(lsb<T>(16), T(4));
-}
-
-TEST_CASE_TEMPLATE("lsb11.basic", T, uint8_t, uint16_t, uint32_t, uint64_t)
-{
- //CHECK_EQ((lsb11<T, 0>::value), T(0));
- CHECK_EQ((lsb11<T, 1>::value), T(0));
- CHECK_EQ((lsb11<T, 2>::value), T(1));
- CHECK_EQ((lsb11<T, 3>::value), T(0));
- CHECK_EQ((lsb11<T, 4>::value), T(2));
- CHECK_EQ((lsb11<T, 5>::value), T(0));
- CHECK_EQ((lsb11<T, 6>::value), T(1));
- CHECK_EQ((lsb11<T, 7>::value), T(0));
- CHECK_EQ((lsb11<T, 8>::value), T(3));
- CHECK_EQ((lsb11<T, 9>::value), T(0));
- CHECK_EQ((lsb11<T,10>::value), T(1));
- CHECK_EQ((lsb11<T,11>::value), T(0));
- CHECK_EQ((lsb11<T,12>::value), T(2));
- CHECK_EQ((lsb11<T,13>::value), T(0));
- CHECK_EQ((lsb11<T,14>::value), T(1));
- CHECK_EQ((lsb11<T,15>::value), T(0));
- CHECK_EQ((lsb11<T,16>::value), T(4));
-}
-
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE_TEMPLATE("ipow.float", T, float, double)
-{
- SUBCASE("base 1, signed exponent")
- {
- CHECK_FLOAT_EQ(ipow(T(1), int(0)), T(1));
- CHECK_FLOAT_EQ(ipow(T(1), int(1)), T(1));
- CHECK_FLOAT_EQ(ipow(T(1), int(2)), T(1));
- CHECK_FLOAT_EQ(ipow(T(1), -int(1)), T(1));
- CHECK_FLOAT_EQ(ipow(T(1), -int(2)), T(1));
- CHECK_FLOAT_EQ((ipow<T, int, 1>(int(0))), T(1));
- CHECK_FLOAT_EQ((ipow<T, int, 1>(int(1))), T(1));
- CHECK_FLOAT_EQ((ipow<T, int, 1>(int(2))), T(1));
- CHECK_FLOAT_EQ((ipow<T, int, 1>(-int(1))), T(1));
- CHECK_FLOAT_EQ((ipow<T, int, 1>(-int(2))), T(1));
- }
- SUBCASE("base 1, unsigned exponent")
- {
- CHECK_FLOAT_EQ(ipow(T(1), unsigned(0)), T(1));
- CHECK_FLOAT_EQ(ipow(T(1), unsigned(1)), T(1));
- CHECK_FLOAT_EQ(ipow(T(1), unsigned(2)), T(1));
- CHECK_FLOAT_EQ((ipow<T, int, 1>(unsigned(0))), T(1));
- CHECK_FLOAT_EQ((ipow<T, int, 1>(unsigned(1))), T(1));
- CHECK_FLOAT_EQ((ipow<T, int, 1>(unsigned(2))), T(1));
- }
- SUBCASE("base 2, signed exponent")
- {
- CHECK_FLOAT_EQ(ipow(T(2), int(0)), T(1));
- CHECK_FLOAT_EQ(ipow(T(2), int(1)), T(2));
- CHECK_FLOAT_EQ(ipow(T(2), int(2)), T(4));
- CHECK_FLOAT_EQ(ipow(T(2), int(7)), T(128));
- CHECK_FLOAT_EQ(ipow(T(2), -int(1)), T(0.5));
- CHECK_FLOAT_EQ(ipow(T(2), -int(2)), T(0.25));
- CHECK_FLOAT_EQ(ipow(T(2), -int(3)), T(0.125));
- CHECK_FLOAT_EQ(ipow(T(2), -int(4)), T(0.0625));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(int(0))), T(1));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(int(1))), T(2));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(int(2))), T(4));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(int(7))), T(128));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(-int(1))), T(0.5));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(-int(2))), T(0.25));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(-int(3))), T(0.125));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(-int(4))), T(0.0625));
- }
- SUBCASE("base 2, unsigned exponent")
- {
- CHECK_FLOAT_EQ(ipow(T(2), unsigned(0)), T(1));
- CHECK_FLOAT_EQ(ipow(T(2), unsigned(1)), T(2));
- CHECK_FLOAT_EQ(ipow(T(2), unsigned(2)), T(4));
- CHECK_FLOAT_EQ(ipow(T(2), unsigned(6)), T(64));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(unsigned(0))), T(1));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(unsigned(1))), T(2));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(unsigned(2))), T(4));
- CHECK_FLOAT_EQ((ipow<T, int, 2>(unsigned(6))), T(64));
- }
-}
-
-TEST_CASE_TEMPLATE("ipow", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- SUBCASE("base 1, signed exponent")
- {
- CHECK_EQ(ipow(T(1), int(0)), T(1));
- CHECK_EQ(ipow(T(1), int(1)), T(1));
- CHECK_EQ(ipow(T(1), int(2)), T(1));
- CHECK_EQ(ipow(T(1), -int(1)), T(1));
- CHECK_EQ(ipow(T(1), -int(2)), T(1));
- CHECK_EQ(ipow<T, T(1)>(int(0)), T(1));
- CHECK_EQ(ipow<T, T(1)>(int(1)), T(1));
- CHECK_EQ(ipow<T, T(1)>(int(2)), T(1));
- CHECK_EQ(ipow<T, T(1)>(-int(1)), T(1));
- CHECK_EQ(ipow<T, T(1)>(-int(2)), T(1));
- }
- SUBCASE("base 1, unsigned exponent")
- {
- CHECK_EQ(ipow(T(1), unsigned(0)), T(1));
- CHECK_EQ(ipow(T(1), unsigned(1)), T(1));
- CHECK_EQ(ipow(T(1), unsigned(2)), T(1));
- CHECK_EQ(ipow<T, T(1)>(unsigned(0)), T(1));
- CHECK_EQ(ipow<T, T(1)>(unsigned(1)), T(1));
- CHECK_EQ(ipow<T, T(1)>(unsigned(2)), T(1));
- }
- SUBCASE("base 2, signed exponent")
- {
- CHECK_EQ(ipow(T(2), int(0)), T(1));
- CHECK_EQ(ipow(T(2), int(1)), T(2));
- CHECK_EQ(ipow(T(2), int(2)), T(4));
- CHECK_EQ(ipow(T(2), int(6)), T(64));
- CHECK_EQ(ipow(T(2), -int(1)), T(0));
- CHECK_EQ(ipow(T(2), -int(2)), T(0));
- CHECK_EQ(ipow(T(2), -int(6)), T(0));
- CHECK_EQ(ipow<T, T(2)>(int(0)), T(1));
- CHECK_EQ(ipow<T, T(2)>(int(1)), T(2));
- CHECK_EQ(ipow<T, T(2)>(int(2)), T(4));
- CHECK_EQ(ipow<T, T(2)>(int(6)), T(64));
- CHECK_EQ(ipow<T, T(2)>(-int(1)), T(0));
- CHECK_EQ(ipow<T, T(2)>(-int(2)), T(0));
- CHECK_EQ(ipow<T, T(2)>(-int(7)), T(0));
- }
- SUBCASE("base 2, unsigned exponent")
- {
- CHECK_EQ(ipow(T(2), unsigned(0)), T(1));
- CHECK_EQ(ipow(T(2), unsigned(1)), T(2));
- CHECK_EQ(ipow(T(2), unsigned(2)), T(4));
- CHECK_EQ(ipow(T(2), unsigned(6)), T(64));
- CHECK_EQ(ipow<T, T(2)>(unsigned(0)), T(1));
- CHECK_EQ(ipow<T, T(2)>(unsigned(1)), T(2));
- CHECK_EQ(ipow<T, T(2)>(unsigned(2)), T(4));
- CHECK_EQ(ipow<T, T(2)>(unsigned(6)), T(64));
- }
-}
-
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE_TEMPLATE("msb.basic", T, uint8_t, uint16_t, uint32_t, uint64_t)
-{
- CHECK_EQ(msb(T( 1)), 0u);
- CHECK_EQ(msb(T( 2)), 1u);
- CHECK_EQ(msb(T( 3)), 1u);
- CHECK_EQ(msb(T( 4)), 2u);
- CHECK_EQ(msb(T( 5)), 2u);
- CHECK_EQ(msb(T( 6)), 2u);
- CHECK_EQ(msb(T( 7)), 2u);
- CHECK_EQ(msb(T( 8)), 3u);
- CHECK_EQ(msb(T( 9)), 3u);
- CHECK_EQ(msb(T(10)), 3u);
- CHECK_EQ(msb(T(11)), 3u);
- CHECK_EQ(msb(T(12)), 3u);
- CHECK_EQ(msb(T(13)), 3u);
- CHECK_EQ(msb(T(14)), 3u);
- CHECK_EQ(msb(T(15)), 3u);
- CHECK_EQ(msb(T(16)), 4u);
- CHECK_EQ(msb(std::numeric_limits<T>::max()), 8u * sizeof(T) - 1u);
-}
-
-TEST_CASE_TEMPLATE("msb11.basic", T, uint8_t, uint16_t, uint32_t, uint64_t)
-{
- CHECK_EQ((msb11<T,T( 1)>::value), T(0));
- CHECK_EQ((msb11<T,T( 2)>::value), T(1));
- CHECK_EQ((msb11<T,T( 3)>::value), T(1));
- CHECK_EQ((msb11<T,T( 4)>::value), T(2));
- CHECK_EQ((msb11<T,T( 5)>::value), T(2));
- CHECK_EQ((msb11<T,T( 6)>::value), T(2));
- CHECK_EQ((msb11<T,T( 7)>::value), T(2));
- CHECK_EQ((msb11<T,T( 8)>::value), T(3));
- CHECK_EQ((msb11<T,T( 9)>::value), T(3));
- CHECK_EQ((msb11<T,T(10)>::value), T(3));
- CHECK_EQ((msb11<T,T(11)>::value), T(3));
- CHECK_EQ((msb11<T,T(12)>::value), T(3));
- CHECK_EQ((msb11<T,T(13)>::value), T(3));
- CHECK_EQ((msb11<T,T(14)>::value), T(3));
- CHECK_EQ((msb11<T,T(15)>::value), T(3));
- CHECK_EQ((msb11<T,T(16)>::value), T(4));
- CHECK_EQ((msb11<T,std::numeric_limits<T>::max()>::value), 8u * sizeof(T) - 1u);
-}
-
-
-//-----------------------------------------------------------------------------
-// contiguous mask
-
-template<class T> T _mask() { return T(0); }
-template<class T, class... Bits> T _mask(int bit, Bits ...bits) { return (T)(T(1) << bit | _mask<T>(bits...)); }
-
-TEST_CASE_TEMPLATE("contiguous_mask.basic", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- CHECK_EQ(contiguous_mask(0, 0), _mask<T>());
- CHECK_EQ(contiguous_mask(0, 1), _mask<T>(0));
- CHECK_EQ(contiguous_mask(0, 2), _mask<T>(0, 1));
- CHECK_EQ(contiguous_mask(0, 3), _mask<T>(0, 1, 2));
- CHECK_EQ(contiguous_mask(0, 4), _mask<T>(0, 1, 2, 3));
- CHECK_EQ(contiguous_mask(1, 4), _mask<T>( 1, 2, 3));
- CHECK_EQ(contiguous_mask(2, 4), _mask<T>( 2, 3));
- CHECK_EQ(contiguous_mask(3, 4), _mask<T>( 3));
- CHECK_EQ(contiguous_mask(4, 4), _mask<T>());
-}
-
-TEST_CASE_TEMPLATE("contiguous_mask11.basic", T, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t)
-{
- CHECK_EQ((contiguous_mask11<T, 0, 0>::value), _mask<T>());
- CHECK_EQ((contiguous_mask11<T, 0, 1>::value), _mask<T>(0));
- CHECK_EQ((contiguous_mask11<T, 0, 2>::value), _mask<T>(0, 1));
- CHECK_EQ((contiguous_mask11<T, 0, 3>::value), _mask<T>(0, 1, 2));
- CHECK_EQ((contiguous_mask11<T, 0, 4>::value), _mask<T>(0, 1, 2, 3));
- CHECK_EQ((contiguous_mask11<T, 1, 4>::value), _mask<T>( 1, 2, 3));
- CHECK_EQ((contiguous_mask11<T, 2, 4>::value), _mask<T>( 2, 3));
- CHECK_EQ((contiguous_mask11<T, 3, 4>::value), _mask<T>( 3));
- CHECK_EQ((contiguous_mask11<T, 4, 4>::value), _mask<T>());
-}
-
-
-//-----------------------------------------------------------------------------
-
-
-template<size_t N> struct sz { char buf[N]; };
-template< > struct sz<0> { };
-template<size_t F, size_t S> void check_tp()
-{
- #if defined(__clang__)
- # pragma clang diagnostic push
- #elif defined(__GNUC__)
- # pragma GCC diagnostic push
- # if __GNUC__ >= 7
- # pragma GCC diagnostic ignored "-Wduplicated-branches"
- # endif
- #endif
- size_t expected;
- if(F != 0 && S != 0) expected = F+S;
- else if(F == 0 && S != 0) expected = S;
- else if(F != 0 && S == 0) expected = F; // -Wduplicated-branches: false positive here
- else /* F == 0 && S == 0)*/expected = 1;
- #if defined(__clang__)
- # pragma clang diagnostic pop
- #elif defined(__GNUC__)
- # pragma GCC diagnostic pop
- #endif
- INFO("F=" << F << " S=" << S);
- CHECK_EQ(sizeof(tight_pair<sz<F>, sz<S>>), expected);
-}
-
-
-TEST_CASE("tight_pair.basic")
-{
- check_tp<0,0>();
- check_tp<0,1>();
- check_tp<0,2>();
- check_tp<0,3>();
- check_tp<0,4>();
-
- check_tp<0,0>();
- check_tp<1,0>();
- check_tp<2,0>();
- check_tp<3,0>();
- check_tp<4,0>();
-
- check_tp<0,0>();
- check_tp<1,1>();
- check_tp<2,2>();
- check_tp<3,3>();
- check_tp<4,4>();
-}
-
-} // namespace c4
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_numbers.hpp b/thirdparty/ryml/ext/c4core/test/test_numbers.hpp
deleted file mode 100644
index d310b36ba..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_numbers.hpp
+++ /dev/null
@@ -1,1863 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include <stdint.h>
-#include <c4/substr.hpp>
-#endif
-#include <iostream>
-
-namespace c4 {
-
-template<class T>
-struct overflow64case
-{
- bool is_overflow;
- T wrapped;
- csubstr dec;
- csubstr hex;
- csubstr oct;
- csubstr bin;
-};
-
-template<class T>
-struct overflow64cases;
-
-#define oc(T, is_overflow, wrapped, dec, hex, oct, bin) \
- overflow64case<T>{is_overflow, wrapped, csubstr{dec}, csubstr{hex}, csubstr{oct}, csubstr{bin}}
-
-template<>
-struct overflow64cases<int64_t>
-{
- #define INT64_1(v) INT64_C(v) - INT64_C(1) // the min value is not representable!
- static constexpr const overflow64case<int64_t> values[] = {
- oc(int64_t, true , INT64_C( 9223372036854775803), "-9223372036854775813", "-0x8000000000000005", "-0o1000000000000000000005", "-0b1000000000000000000000000000000000000000000000000000000000000101"),
- oc(int64_t, true , INT64_C( 9223372036854775804), "-9223372036854775812", "-0x8000000000000004", "-0o1000000000000000000004", "-0b1000000000000000000000000000000000000000000000000000000000000100"),
- oc(int64_t, true , INT64_C( 9223372036854775805), "-9223372036854775811", "-0x8000000000000003", "-0o1000000000000000000003", "-0b1000000000000000000000000000000000000000000000000000000000000011"),
- oc(int64_t, true , INT64_C( 9223372036854775806), "-9223372036854775810", "-0x8000000000000002", "-0o1000000000000000000002", "-0b1000000000000000000000000000000000000000000000000000000000000010"),
- oc(int64_t, true , INT64_C( 9223372036854775807), "-9223372036854775809", "-0x8000000000000001", "-0o1000000000000000000001", "-0b1000000000000000000000000000000000000000000000000000000000000001"),
- oc(int64_t, false, INT64_1(-9223372036854775807), "-9223372036854775808", "-0x8000000000000000", "-0o1000000000000000000000", "-0b1000000000000000000000000000000000000000000000000000000000000000"),
- oc(int64_t, false, INT64_C(-9223372036854775807), "-9223372036854775807", "-0x7fffffffffffffff", "-0o777777777777777777777" , "-0b111111111111111111111111111111111111111111111111111111111111111"),
- oc(int64_t, false, INT64_C(-9223372036854775806), "-9223372036854775806", "-0x7ffffffffffffffe", "-0o777777777777777777776" , "-0b111111111111111111111111111111111111111111111111111111111111110"),
- oc(int64_t, false, INT64_C(-9223372036854775805), "-9223372036854775805", "-0x7ffffffffffffffd", "-0o777777777777777777775" , "-0b111111111111111111111111111111111111111111111111111111111111101"),
- oc(int64_t, false, INT64_C( 9223372036854775804), "9223372036854775804", "0x7ffffffffffffffc", "0o777777777777777777774" , "0b111111111111111111111111111111111111111111111111111111111111100"),
- oc(int64_t, false, INT64_C( 9223372036854775805), "9223372036854775805", "0x7ffffffffffffffd", "0o777777777777777777775" , "0b111111111111111111111111111111111111111111111111111111111111101"),
- oc(int64_t, false, INT64_C( 9223372036854775806), "9223372036854775806", "0x7ffffffffffffffe", "0o777777777777777777776" , "0b111111111111111111111111111111111111111111111111111111111111110"),
- oc(int64_t, false, INT64_C( 9223372036854775807), "9223372036854775807", "0x7fffffffffffffff", "0o777777777777777777777" , "0b111111111111111111111111111111111111111111111111111111111111111"),
- oc(int64_t, true , INT64_1(-9223372036854775807), "9223372036854775808", "0x8000000000000000", "0o1000000000000000000000", "0b1000000000000000000000000000000000000000000000000000000000000000"),
- oc(int64_t, true , INT64_C(-9223372036854775807), "9223372036854775809", "0x8000000000000001", "0o1000000000000000000001", "0b1000000000000000000000000000000000000000000000000000000000000001"),
- oc(int64_t, true , INT64_C(-9223372036854775806), "9223372036854775810", "0x8000000000000002", "0o1000000000000000000002", "0b1000000000000000000000000000000000000000000000000000000000000010"),
- oc(int64_t, true , INT64_C(-9223372036854775805), "9223372036854775811", "0x8000000000000003", "0o1000000000000000000003", "0b1000000000000000000000000000000000000000000000000000000000000011"),
- oc(int64_t, true , INT64_C(-9223372036854775804), "9223372036854775812", "0x8000000000000004", "0o1000000000000000000004", "0b1000000000000000000000000000000000000000000000000000000000000100"),
- };
-};
-
-template<>
-struct overflow64cases<uint64_t>
-{
- static constexpr const overflow64case<uint64_t> values[] = {
- oc(uint64_t, true , UINT64_C(18446744073709551611), "-5" , "-0x5" , "-0o5" , "-0b101"),
- oc(uint64_t, true , UINT64_C(18446744073709551612), "-4" , "-0x4" , "-0o4" , "-0b100"),
- oc(uint64_t, true , UINT64_C(18446744073709551613), "-3" , "-0x3" , "-0o3" , "-0b11"),
- oc(uint64_t, true , UINT64_C(18446744073709551614), "-2" , "-0x2" , "-0o2" , "-0b10"),
- oc(uint64_t, true , UINT64_C(18446744073709551615), "-1" , "-0x1" , "-0o1" , "-0b1"),
- oc(uint64_t, false, UINT64_C( 0), "0" , "0x0" , "0o0" , "0b0"),
- oc(uint64_t, false, UINT64_C( 1), "1" , "0x1" , "0o1" , "0b1"),
- oc(uint64_t, false, UINT64_C( 2), "2" , "0x2" , "0o2" , "0b10"),
- oc(uint64_t, false, UINT64_C( 3), "3" , "0x3" , "0o3" , "0b11"),
- oc(uint64_t, false, UINT64_C(18446744073709551612), "18446744073709551612", "0xfffffffffffffffc" , "0o1777777777777777777774" , "0b1111111111111111111111111111111111111111111111111111111111111100"),
- oc(uint64_t, false, UINT64_C(18446744073709551613), "18446744073709551613", "0xfffffffffffffffd" , "0o1777777777777777777775" , "0b1111111111111111111111111111111111111111111111111111111111111101"),
- oc(uint64_t, false, UINT64_C(18446744073709551614), "18446744073709551614", "0xfffffffffffffffe" , "0o1777777777777777777776" , "0b1111111111111111111111111111111111111111111111111111111111111110"),
- oc(uint64_t, false, UINT64_C(18446744073709551615), "18446744073709551615", "0xffffffffffffffff" , "0o1777777777777777777777" , "0b1111111111111111111111111111111111111111111111111111111111111111"),
- oc(uint64_t, true , UINT64_C( 0), "18446744073709551616", "0x10000000000000000", "0o20000000000000000000000", "0b10000000000000000000000000000000000000000000000000000000000000000"),
- oc(uint64_t, true , UINT64_C( 1), "18446744073709551617", "0x10000000000000001", "0o20000000000000000000001", "0b10000000000000000000000000000000000000000000000000000000000000001"),
- oc(uint64_t, true , UINT64_C( 2), "18446744073709551618", "0x10000000000000002", "0o20000000000000000000002", "0b10000000000000000000000000000000000000000000000000000000000000010"),
- oc(uint64_t, true , UINT64_C( 3), "18446744073709551619", "0x10000000000000003", "0o20000000000000000000003", "0b10000000000000000000000000000000000000000000000000000000000000011"),
- oc(uint64_t, true , UINT64_C( 4), "18446744073709551620", "0x10000000000000004", "0o20000000000000000000004", "0b10000000000000000000000000000000000000000000000000000000000000100"),
- oc(uint64_t, true , UINT64_C( 5), "18446744073709551621", "0x10000000000000005", "0o20000000000000000000005", "0b10000000000000000000000000000000000000000000000000000000000000101"),
- };
-};
-
-constexpr const overflow64case<int64_t> overflow64cases<int64_t>::values[];
-constexpr const overflow64case<uint64_t> overflow64cases<uint64_t>::values[];
-
-#undef oc
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-struct invalid_case
-{
- csubstr dec, hex, oct, bin;
-};
-
-C4_INLINE_CONSTEXPR const invalid_case invalid_cases[] = {
-#define ic(dec, hex, oct, bin) \
- invalid_case{csubstr{dec}, csubstr{hex}, csubstr{oct}, csubstr{bin}}
- ic("" , "" , "" , ""),
- ic(" " , " " , " " , " "),
- ic("." , "." , "." , "."),
- ic("-" , "-" , "-" , "-"),
- ic("\t" , "\t" , "\t" , "\t"),
- ic("\n" , "\n" , "\n" , "\n"),
- ic("...", "..." , "..." , "..."),
- ic("===", "===" , "===" , "==="),
- ic("=??", "???" , "???" , "???"),
- ic("12a", "0x12g", "0o128", "0b102"),
- ic("0.1", "0x1.2", "0o1.2", "0b1.1"),
- ic("0,1", "0x1,2", "0o1,2", "0b1,1"),
- ic("zz" , "0xzz" , "0ozz" , "0bzz"),
- ic("" , "0x" , "0o" , "0b"),
- ic("- " , "-0x" , "-0o" , "-0b"),
- ic("2 0", "0x2 0", "0o2 0", "0b1 0"),
- ic(" 2" , " 0x2" , " 0o2" , " 0b1"),
- ic("\t2", "\t0x2", "\t0o2", "\t0b1"),
- ic("\n2", "nt0x2", "\n0o2", "\n0b1"),
- ic("2 " , "0x2 " , "0o2 " , "0b1 "),
- ic("2\t", "0x2\t", "0o2\t", "0b1\t"),
- ic("2\n", "0x2\n", "0o2\n", "0b1\n"),
- ic("nan", "nan", "nan", "nan"),
- ic("NaN", "NaN", "NaN", "NaN"),
- ic("Inf", "Inf", "Inf", "Inf"),
- ic("inf", "inf", "inf", "inf"),
- ic("infinity", "infinity", "infinity", "infinity"),
- ic("Infinity", "Infinity", "Infinity", "Infinity"),
- ic("somevalue", "somevalue", "somevalue", "somevalue"),
- ic("2345kjhiuy3245", "2345kjhiuy3245", "2345kjhiuy3245", "2345kjhiuy3245"),
-#undef ic
-};
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-template<class T>
-struct number_case
-{
- T val;
- csubstr dec;
- csubstr hex;
- csubstr oct;
- csubstr bin;
-};
-
-template<class T>
-std::ostream& operator<< (std::ostream& s, number_case<T> const& nc)
-{
- using upcast_t = typename std::conditional<sizeof(T)!=1, T,
- typename std::conditional<std::is_signed<T>::value,
- int64_t,
- uint64_t>::type>::type;
- s << "val=" << (upcast_t)nc.val << " "
- << "dec=" << nc.dec << " "
- << "hex=" << nc.hex << " "
- << "oct=" << nc.oct << " "
- << "bin=" << nc.bin;
- return s;
-}
-
-template<class T> struct numbers;
-
-#define ITER_NUMBERS(ty, number_name) for(number_case<ty> const& C4_RESTRICT number_name : numbers<ty>::vals)
-
-C4_SUPPRESS_WARNING_MSVC_PUSH
-C4_SUPPRESS_WARNING_MSVC(4146)
-C4_SUPPRESS_WARNING_MSVC(4305)
-C4_SUPPRESS_WARNING_MSVC(4310)
-
-// these numbers were generated with printintegers.py, in this dir.
-
-template<>
-struct numbers<int8_t>
-{
- using value_type = int8_t;
- static C4_INLINE_CONSTEXPR const number_case<int8_t> vals[] = {
-#define nc(val, dec, hex, bin, oct) \
- number_case<value_type>{(value_type)INT8_C(val), csubstr{dec}, csubstr{hex}, csubstr{bin}, csubstr{oct}}
- nc(-128, "-128", "-0x80", "-0o200", "-0b10000000"),
- nc(-127, "-127", "-0x7f", "-0o177", "-0b1111111"),
- nc(-126, "-126", "-0x7e", "-0o176", "-0b1111110"),
- nc(-125, "-125", "-0x7d", "-0o175", "-0b1111101"),
- nc(-124, "-124", "-0x7c", "-0o174", "-0b1111100"),
- nc(-123, "-123", "-0x7b", "-0o173", "-0b1111011"),
- nc(-101, "-101", "-0x65", "-0o145", "-0b1100101"),
- nc(-100, "-100", "-0x64", "-0o144", "-0b1100100"),
- nc(-99, "-99", "-0x63", "-0o143", "-0b1100011"),
- nc(-65, "-65", "-0x41", "-0o101", "-0b1000001"),
- nc(-64, "-64", "-0x40", "-0o100", "-0b1000000"),
- nc(-63, "-63", "-0x3f", "-0o77", "-0b111111"),
- nc(-33, "-33", "-0x21", "-0o41", "-0b100001"),
- nc(-32, "-32", "-0x20", "-0o40", "-0b100000"),
- nc(-31, "-31", "-0x1f", "-0o37", "-0b11111"),
- nc(-17, "-17", "-0x11", "-0o21", "-0b10001"),
- nc(-16, "-16", "-0x10", "-0o20", "-0b10000"),
- nc(-15, "-15", "-0xf", "-0o17", "-0b1111"),
- nc(-12, "-12", "-0xc", "-0o14", "-0b1100"),
- nc(-11, "-11", "-0xb", "-0o13", "-0b1011"),
- nc(-10, "-10", "-0xa", "-0o12", "-0b1010"),
- nc(-9, "-9", "-0x9", "-0o11", "-0b1001"),
- nc(-8, "-8", "-0x8", "-0o10", "-0b1000"),
- nc(-7, "-7", "-0x7", "-0o7", "-0b111"),
- nc(-6, "-6", "-0x6", "-0o6", "-0b110"),
- nc(-5, "-5", "-0x5", "-0o5", "-0b101"),
- nc(-4, "-4", "-0x4", "-0o4", "-0b100"),
- nc(-3, "-3", "-0x3", "-0o3", "-0b11"),
- nc(-2, "-2", "-0x2", "-0o2", "-0b10"),
- nc(-1, "-1", "-0x1", "-0o1", "-0b1"),
- nc(0, "0", "0x0", "0o0", "0b0"),
- nc(1, "1", "0x1", "0o1", "0b1"),
- nc(2, "2", "0x2", "0o2", "0b10"),
- nc(3, "3", "0x3", "0o3", "0b11"),
- nc(4, "4", "0x4", "0o4", "0b100"),
- nc(5, "5", "0x5", "0o5", "0b101"),
- nc(6, "6", "0x6", "0o6", "0b110"),
- nc(7, "7", "0x7", "0o7", "0b111"),
- nc(8, "8", "0x8", "0o10", "0b1000"),
- nc(9, "9", "0x9", "0o11", "0b1001"),
- nc(10, "10", "0xa", "0o12", "0b1010"),
- nc(11, "11", "0xb", "0o13", "0b1011"),
- nc(12, "12", "0xc", "0o14", "0b1100"),
- nc(13, "13", "0xd", "0o15", "0b1101"),
- nc(15, "15", "0xf", "0o17", "0b1111"),
- nc(16, "16", "0x10", "0o20", "0b10000"),
- nc(17, "17", "0x11", "0o21", "0b10001"),
- nc(31, "31", "0x1f", "0o37", "0b11111"),
- nc(32, "32", "0x20", "0o40", "0b100000"),
- nc(33, "33", "0x21", "0o41", "0b100001"),
- nc(63, "63", "0x3f", "0o77", "0b111111"),
- nc(64, "64", "0x40", "0o100", "0b1000000"),
- nc(65, "65", "0x41", "0o101", "0b1000001"),
- nc(99, "99", "0x63", "0o143", "0b1100011"),
- nc(100, "100", "0x64", "0o144", "0b1100100"),
- nc(101, "101", "0x65", "0o145", "0b1100101"),
- nc(122, "122", "0x7a", "0o172", "0b1111010"),
- nc(123, "123", "0x7b", "0o173", "0b1111011"),
- nc(124, "124", "0x7c", "0o174", "0b1111100"),
- nc(125, "125", "0x7d", "0o175", "0b1111101"),
- nc(126, "126", "0x7e", "0o176", "0b1111110"),
- nc(127, "127", "0x7f", "0o177", "0b1111111"),
-#undef nc
- };
-};
-
-
-template<>
-struct numbers<uint8_t>
-{
- using value_type = uint8_t;
- static C4_INLINE_CONSTEXPR const number_case<uint8_t> vals[] = {
-#define nc(val, dec, hex, bin, oct) \
- number_case<value_type>{(value_type)UINT8_C(val), csubstr{dec}, csubstr{hex}, csubstr{bin}, csubstr{oct}}
- nc(0, "0", "0x0", "0o0", "0b0"),
- nc(1, "1", "0x1", "0o1", "0b1"),
- nc(2, "2", "0x2", "0o2", "0b10"),
- nc(3, "3", "0x3", "0o3", "0b11"),
- nc(4, "4", "0x4", "0o4", "0b100"),
- nc(5, "5", "0x5", "0o5", "0b101"),
- nc(6, "6", "0x6", "0o6", "0b110"),
- nc(7, "7", "0x7", "0o7", "0b111"),
- nc(8, "8", "0x8", "0o10", "0b1000"),
- nc(9, "9", "0x9", "0o11", "0b1001"),
- nc(10, "10", "0xa", "0o12", "0b1010"),
- nc(11, "11", "0xb", "0o13", "0b1011"),
- nc(15, "15", "0xf", "0o17", "0b1111"),
- nc(16, "16", "0x10", "0o20", "0b10000"),
- nc(17, "17", "0x11", "0o21", "0b10001"),
- nc(24, "24", "0x18", "0o30", "0b11000"),
- nc(25, "25", "0x19", "0o31", "0b11001"),
- nc(26, "26", "0x1a", "0o32", "0b11010"),
- nc(31, "31", "0x1f", "0o37", "0b11111"),
- nc(32, "32", "0x20", "0o40", "0b100000"),
- nc(33, "33", "0x21", "0o41", "0b100001"),
- nc(63, "63", "0x3f", "0o77", "0b111111"),
- nc(64, "64", "0x40", "0o100", "0b1000000"),
- nc(65, "65", "0x41", "0o101", "0b1000001"),
- nc(99, "99", "0x63", "0o143", "0b1100011"),
- nc(100, "100", "0x64", "0o144", "0b1100100"),
- nc(101, "101", "0x65", "0o145", "0b1100101"),
- nc(127, "127", "0x7f", "0o177", "0b1111111"),
- nc(128, "128", "0x80", "0o200", "0b10000000"),
- nc(129, "129", "0x81", "0o201", "0b10000001"),
- nc(251, "251", "0xfb", "0o373", "0b11111011"),
- nc(252, "252", "0xfc", "0o374", "0b11111100"),
- nc(253, "253", "0xfd", "0o375", "0b11111101"),
- nc(254, "254", "0xfe", "0o376", "0b11111110"),
- nc(255, "255", "0xff", "0o377", "0b11111111"),
-#undef nc
- };
-};
-
-
-template<>
-struct numbers<int16_t>
-{
- using value_type = int16_t;
- static C4_INLINE_CONSTEXPR const number_case<int16_t> vals[] = {
-#define nc(val, dec, hex, bin, oct) \
- number_case<value_type>{(value_type)INT16_C(val), csubstr{dec}, csubstr{hex}, csubstr{bin}, csubstr{oct}}
- nc(-32768, "-32768", "-0x8000", "-0o100000", "-0b1000000000000000"),
- nc(-32767, "-32767", "-0x7fff", "-0o77777", "-0b111111111111111"),
- nc(-32766, "-32766", "-0x7ffe", "-0o77776", "-0b111111111111110"),
- nc(-32765, "-32765", "-0x7ffd", "-0o77775", "-0b111111111111101"),
- nc(-32764, "-32764", "-0x7ffc", "-0o77774", "-0b111111111111100"),
- nc(-32763, "-32763", "-0x7ffb", "-0o77773", "-0b111111111111011"),
- nc(-16385, "-16385", "-0x4001", "-0o40001", "-0b100000000000001"),
- nc(-16384, "-16384", "-0x4000", "-0o40000", "-0b100000000000000"),
- nc(-16383, "-16383", "-0x3fff", "-0o37777", "-0b11111111111111"),
- nc(-10001, "-10001", "-0x2711", "-0o23421", "-0b10011100010001"),
- nc(-10000, "-10000", "-0x2710", "-0o23420", "-0b10011100010000"),
- nc(-9999, "-9999", "-0x270f", "-0o23417", "-0b10011100001111"),
- nc(-8193, "-8193", "-0x2001", "-0o20001", "-0b10000000000001"),
- nc(-8192, "-8192", "-0x2000", "-0o20000", "-0b10000000000000"),
- nc(-8191, "-8191", "-0x1fff", "-0o17777", "-0b1111111111111"),
- nc(-4097, "-4097", "-0x1001", "-0o10001", "-0b1000000000001"),
- nc(-4096, "-4096", "-0x1000", "-0o10000", "-0b1000000000000"),
- nc(-4095, "-4095", "-0xfff", "-0o7777", "-0b111111111111"),
- nc(-3276, "-3276", "-0xccc", "-0o6314", "-0b110011001100"),
- nc(-2049, "-2049", "-0x801", "-0o4001", "-0b100000000001"),
- nc(-2048, "-2048", "-0x800", "-0o4000", "-0b100000000000"),
- nc(-2047, "-2047", "-0x7ff", "-0o3777", "-0b11111111111"),
- nc(-1025, "-1025", "-0x401", "-0o2001", "-0b10000000001"),
- nc(-1024, "-1024", "-0x400", "-0o2000", "-0b10000000000"),
- nc(-1023, "-1023", "-0x3ff", "-0o1777", "-0b1111111111"),
- nc(-1001, "-1001", "-0x3e9", "-0o1751", "-0b1111101001"),
- nc(-1000, "-1000", "-0x3e8", "-0o1750", "-0b1111101000"),
- nc(-999, "-999", "-0x3e7", "-0o1747", "-0b1111100111"),
- nc(-513, "-513", "-0x201", "-0o1001", "-0b1000000001"),
- nc(-512, "-512", "-0x200", "-0o1000", "-0b1000000000"),
- nc(-511, "-511", "-0x1ff", "-0o777", "-0b111111111"),
- nc(-327, "-327", "-0x147", "-0o507", "-0b101000111"),
- nc(-257, "-257", "-0x101", "-0o401", "-0b100000001"),
- nc(-256, "-256", "-0x100", "-0o400", "-0b100000000"),
- nc(-255, "-255", "-0xff", "-0o377", "-0b11111111"),
- nc(-129, "-129", "-0x81", "-0o201", "-0b10000001"),
- nc(-128, "-128", "-0x80", "-0o200", "-0b10000000"),
- nc(-127, "-127", "-0x7f", "-0o177", "-0b1111111"),
- nc(-101, "-101", "-0x65", "-0o145", "-0b1100101"),
- nc(-100, "-100", "-0x64", "-0o144", "-0b1100100"),
- nc(-99, "-99", "-0x63", "-0o143", "-0b1100011"),
- nc(-65, "-65", "-0x41", "-0o101", "-0b1000001"),
- nc(-64, "-64", "-0x40", "-0o100", "-0b1000000"),
- nc(-63, "-63", "-0x3f", "-0o77", "-0b111111"),
- nc(-33, "-33", "-0x21", "-0o41", "-0b100001"),
- nc(-32, "-32", "-0x20", "-0o40", "-0b100000"),
- nc(-31, "-31", "-0x1f", "-0o37", "-0b11111"),
- nc(-17, "-17", "-0x11", "-0o21", "-0b10001"),
- nc(-16, "-16", "-0x10", "-0o20", "-0b10000"),
- nc(-15, "-15", "-0xf", "-0o17", "-0b1111"),
- nc(-11, "-11", "-0xb", "-0o13", "-0b1011"),
- nc(-10, "-10", "-0xa", "-0o12", "-0b1010"),
- nc(-9, "-9", "-0x9", "-0o11", "-0b1001"),
- nc(-8, "-8", "-0x8", "-0o10", "-0b1000"),
- nc(-7, "-7", "-0x7", "-0o7", "-0b111"),
- nc(-6, "-6", "-0x6", "-0o6", "-0b110"),
- nc(-5, "-5", "-0x5", "-0o5", "-0b101"),
- nc(-4, "-4", "-0x4", "-0o4", "-0b100"),
- nc(-3, "-3", "-0x3", "-0o3", "-0b11"),
- nc(-2, "-2", "-0x2", "-0o2", "-0b10"),
- nc(-1, "-1", "-0x1", "-0o1", "-0b1"),
- nc(0, "0", "0x0", "0o0", "0b0"),
- nc(1, "1", "0x1", "0o1", "0b1"),
- nc(2, "2", "0x2", "0o2", "0b10"),
- nc(3, "3", "0x3", "0o3", "0b11"),
- nc(4, "4", "0x4", "0o4", "0b100"),
- nc(5, "5", "0x5", "0o5", "0b101"),
- nc(6, "6", "0x6", "0o6", "0b110"),
- nc(7, "7", "0x7", "0o7", "0b111"),
- nc(8, "8", "0x8", "0o10", "0b1000"),
- nc(9, "9", "0x9", "0o11", "0b1001"),
- nc(10, "10", "0xa", "0o12", "0b1010"),
- nc(11, "11", "0xb", "0o13", "0b1011"),
- nc(15, "15", "0xf", "0o17", "0b1111"),
- nc(16, "16", "0x10", "0o20", "0b10000"),
- nc(17, "17", "0x11", "0o21", "0b10001"),
- nc(31, "31", "0x1f", "0o37", "0b11111"),
- nc(32, "32", "0x20", "0o40", "0b100000"),
- nc(33, "33", "0x21", "0o41", "0b100001"),
- nc(63, "63", "0x3f", "0o77", "0b111111"),
- nc(64, "64", "0x40", "0o100", "0b1000000"),
- nc(65, "65", "0x41", "0o101", "0b1000001"),
- nc(99, "99", "0x63", "0o143", "0b1100011"),
- nc(100, "100", "0x64", "0o144", "0b1100100"),
- nc(101, "101", "0x65", "0o145", "0b1100101"),
- nc(127, "127", "0x7f", "0o177", "0b1111111"),
- nc(128, "128", "0x80", "0o200", "0b10000000"),
- nc(129, "129", "0x81", "0o201", "0b10000001"),
- nc(255, "255", "0xff", "0o377", "0b11111111"),
- nc(256, "256", "0x100", "0o400", "0b100000000"),
- nc(257, "257", "0x101", "0o401", "0b100000001"),
- nc(326, "326", "0x146", "0o506", "0b101000110"),
- nc(327, "327", "0x147", "0o507", "0b101000111"),
- nc(328, "328", "0x148", "0o510", "0b101001000"),
- nc(511, "511", "0x1ff", "0o777", "0b111111111"),
- nc(512, "512", "0x200", "0o1000", "0b1000000000"),
- nc(513, "513", "0x201", "0o1001", "0b1000000001"),
- nc(999, "999", "0x3e7", "0o1747", "0b1111100111"),
- nc(1000, "1000", "0x3e8", "0o1750", "0b1111101000"),
- nc(1001, "1001", "0x3e9", "0o1751", "0b1111101001"),
- nc(1023, "1023", "0x3ff", "0o1777", "0b1111111111"),
- nc(1024, "1024", "0x400", "0o2000", "0b10000000000"),
- nc(1025, "1025", "0x401", "0o2001", "0b10000000001"),
- nc(2047, "2047", "0x7ff", "0o3777", "0b11111111111"),
- nc(2048, "2048", "0x800", "0o4000", "0b100000000000"),
- nc(2049, "2049", "0x801", "0o4001", "0b100000000001"),
- nc(3275, "3275", "0xccb", "0o6313", "0b110011001011"),
- nc(3276, "3276", "0xccc", "0o6314", "0b110011001100"),
- nc(3277, "3277", "0xccd", "0o6315", "0b110011001101"),
- nc(4095, "4095", "0xfff", "0o7777", "0b111111111111"),
- nc(4096, "4096", "0x1000", "0o10000", "0b1000000000000"),
- nc(4097, "4097", "0x1001", "0o10001", "0b1000000000001"),
- nc(8191, "8191", "0x1fff", "0o17777", "0b1111111111111"),
- nc(8192, "8192", "0x2000", "0o20000", "0b10000000000000"),
- nc(8193, "8193", "0x2001", "0o20001", "0b10000000000001"),
- nc(9999, "9999", "0x270f", "0o23417", "0b10011100001111"),
- nc(10000, "10000", "0x2710", "0o23420", "0b10011100010000"),
- nc(10001, "10001", "0x2711", "0o23421", "0b10011100010001"),
- nc(16383, "16383", "0x3fff", "0o37777", "0b11111111111111"),
- nc(16384, "16384", "0x4000", "0o40000", "0b100000000000000"),
- nc(16385, "16385", "0x4001", "0o40001", "0b100000000000001"),
- nc(32762, "32762", "0x7ffa", "0o77772", "0b111111111111010"),
- nc(32763, "32763", "0x7ffb", "0o77773", "0b111111111111011"),
- nc(32764, "32764", "0x7ffc", "0o77774", "0b111111111111100"),
- nc(32765, "32765", "0x7ffd", "0o77775", "0b111111111111101"),
- nc(32766, "32766", "0x7ffe", "0o77776", "0b111111111111110"),
- nc(32767, "32767", "0x7fff", "0o77777", "0b111111111111111"),
-#undef nc
- };
-};
-
-
-template<>
-struct numbers<uint16_t>
-{
- using value_type = uint16_t;
- static C4_INLINE_CONSTEXPR const number_case<uint16_t> vals[] = {
-#define nc(val, dec, hex, bin, oct) \
- number_case<value_type>{(value_type)UINT16_C(val), csubstr{dec}, csubstr{hex}, csubstr{bin}, csubstr{oct}}
- nc(0, "0", "0x0", "0o0", "0b0"),
- nc(1, "1", "0x1", "0o1", "0b1"),
- nc(2, "2", "0x2", "0o2", "0b10"),
- nc(3, "3", "0x3", "0o3", "0b11"),
- nc(4, "4", "0x4", "0o4", "0b100"),
- nc(5, "5", "0x5", "0o5", "0b101"),
- nc(6, "6", "0x6", "0o6", "0b110"),
- nc(7, "7", "0x7", "0o7", "0b111"),
- nc(8, "8", "0x8", "0o10", "0b1000"),
- nc(9, "9", "0x9", "0o11", "0b1001"),
- nc(10, "10", "0xa", "0o12", "0b1010"),
- nc(11, "11", "0xb", "0o13", "0b1011"),
- nc(15, "15", "0xf", "0o17", "0b1111"),
- nc(16, "16", "0x10", "0o20", "0b10000"),
- nc(17, "17", "0x11", "0o21", "0b10001"),
- nc(31, "31", "0x1f", "0o37", "0b11111"),
- nc(32, "32", "0x20", "0o40", "0b100000"),
- nc(33, "33", "0x21", "0o41", "0b100001"),
- nc(63, "63", "0x3f", "0o77", "0b111111"),
- nc(64, "64", "0x40", "0o100", "0b1000000"),
- nc(65, "65", "0x41", "0o101", "0b1000001"),
- nc(66, "66", "0x42", "0o102", "0b1000010"),
- nc(99, "99", "0x63", "0o143", "0b1100011"),
- nc(100, "100", "0x64", "0o144", "0b1100100"),
- nc(101, "101", "0x65", "0o145", "0b1100101"),
- nc(127, "127", "0x7f", "0o177", "0b1111111"),
- nc(128, "128", "0x80", "0o200", "0b10000000"),
- nc(129, "129", "0x81", "0o201", "0b10000001"),
- nc(255, "255", "0xff", "0o377", "0b11111111"),
- nc(256, "256", "0x100", "0o400", "0b100000000"),
- nc(257, "257", "0x101", "0o401", "0b100000001"),
- nc(511, "511", "0x1ff", "0o777", "0b111111111"),
- nc(512, "512", "0x200", "0o1000", "0b1000000000"),
- nc(513, "513", "0x201", "0o1001", "0b1000000001"),
- nc(654, "654", "0x28e", "0o1216", "0b1010001110"),
- nc(655, "655", "0x28f", "0o1217", "0b1010001111"),
- nc(656, "656", "0x290", "0o1220", "0b1010010000"),
- nc(999, "999", "0x3e7", "0o1747", "0b1111100111"),
- nc(1000, "1000", "0x3e8", "0o1750", "0b1111101000"),
- nc(1001, "1001", "0x3e9", "0o1751", "0b1111101001"),
- nc(1023, "1023", "0x3ff", "0o1777", "0b1111111111"),
- nc(1024, "1024", "0x400", "0o2000", "0b10000000000"),
- nc(1025, "1025", "0x401", "0o2001", "0b10000000001"),
- nc(2047, "2047", "0x7ff", "0o3777", "0b11111111111"),
- nc(2048, "2048", "0x800", "0o4000", "0b100000000000"),
- nc(2049, "2049", "0x801", "0o4001", "0b100000000001"),
- nc(4095, "4095", "0xfff", "0o7777", "0b111111111111"),
- nc(4096, "4096", "0x1000", "0o10000", "0b1000000000000"),
- nc(4097, "4097", "0x1001", "0o10001", "0b1000000000001"),
- nc(6552, "6552", "0x1998", "0o14630", "0b1100110011000"),
- nc(6553, "6553", "0x1999", "0o14631", "0b1100110011001"),
- nc(6554, "6554", "0x199a", "0o14632", "0b1100110011010"),
- nc(8191, "8191", "0x1fff", "0o17777", "0b1111111111111"),
- nc(8192, "8192", "0x2000", "0o20000", "0b10000000000000"),
- nc(8193, "8193", "0x2001", "0o20001", "0b10000000000001"),
- nc(9999, "9999", "0x270f", "0o23417", "0b10011100001111"),
- nc(10000, "10000", "0x2710", "0o23420", "0b10011100010000"),
- nc(10001, "10001", "0x2711", "0o23421", "0b10011100010001"),
- nc(16383, "16383", "0x3fff", "0o37777", "0b11111111111111"),
- nc(16384, "16384", "0x4000", "0o40000", "0b100000000000000"),
- nc(16385, "16385", "0x4001", "0o40001", "0b100000000000001"),
- nc(32767, "32767", "0x7fff", "0o77777", "0b111111111111111"),
- nc(32768, "32768", "0x8000", "0o100000", "0b1000000000000000"),
- nc(32769, "32769", "0x8001", "0o100001", "0b1000000000000001"),
- nc(65531, "65531", "0xfffb", "0o177773", "0b1111111111111011"),
- nc(65532, "65532", "0xfffc", "0o177774", "0b1111111111111100"),
- nc(65533, "65533", "0xfffd", "0o177775", "0b1111111111111101"),
- nc(65534, "65534", "0xfffe", "0o177776", "0b1111111111111110"),
- nc(65535, "65535", "0xffff", "0o177777", "0b1111111111111111"),
-#undef nc
- };
-};
-
-
-template<>
-struct numbers<int32_t>
-{
- using value_type = int32_t;
- static C4_INLINE_CONSTEXPR const number_case<int32_t> vals[] = {
-#define nc(val, dec, hex, bin, oct) \
- number_case<value_type>{(value_type)INT32_C(val), csubstr{dec}, csubstr{hex}, csubstr{bin}, csubstr{oct}}
- nc(-2147483648, "-2147483648", "-0x80000000", "-0o20000000000", "-0b10000000000000000000000000000000"),
- nc(-2147483647, "-2147483647", "-0x7fffffff", "-0o17777777777", "-0b1111111111111111111111111111111"),
- nc(-2147483646, "-2147483646", "-0x7ffffffe", "-0o17777777776", "-0b1111111111111111111111111111110"),
- nc(-2147483645, "-2147483645", "-0x7ffffffd", "-0o17777777775", "-0b1111111111111111111111111111101"),
- nc(-2147483644, "-2147483644", "-0x7ffffffc", "-0o17777777774", "-0b1111111111111111111111111111100"),
- nc(-2147483643, "-2147483643", "-0x7ffffffb", "-0o17777777773", "-0b1111111111111111111111111111011"),
- nc(-1073741825, "-1073741825", "-0x40000001", "-0o10000000001", "-0b1000000000000000000000000000001"),
- nc(-1073741824, "-1073741824", "-0x40000000", "-0o10000000000", "-0b1000000000000000000000000000000"),
- nc(-1073741823, "-1073741823", "-0x3fffffff", "-0o7777777777", "-0b111111111111111111111111111111"),
- nc(-1000000001, "-1000000001", "-0x3b9aca01", "-0o7346545001", "-0b111011100110101100101000000001"),
- nc(-1000000000, "-1000000000", "-0x3b9aca00", "-0o7346545000", "-0b111011100110101100101000000000"),
- nc(-999999999, "-999999999", "-0x3b9ac9ff", "-0o7346544777", "-0b111011100110101100100111111111"),
- nc(-536870913, "-536870913", "-0x20000001", "-0o4000000001", "-0b100000000000000000000000000001"),
- nc(-536870912, "-536870912", "-0x20000000", "-0o4000000000", "-0b100000000000000000000000000000"),
- nc(-536870911, "-536870911", "-0x1fffffff", "-0o3777777777", "-0b11111111111111111111111111111"),
- nc(-268435457, "-268435457", "-0x10000001", "-0o2000000001", "-0b10000000000000000000000000001"),
- nc(-268435456, "-268435456", "-0x10000000", "-0o2000000000", "-0b10000000000000000000000000000"),
- nc(-268435455, "-268435455", "-0xfffffff", "-0o1777777777", "-0b1111111111111111111111111111"),
- nc(-214748364, "-214748364", "-0xccccccc", "-0o1463146314", "-0b1100110011001100110011001100"),
- nc(-134217729, "-134217729", "-0x8000001", "-0o1000000001", "-0b1000000000000000000000000001"),
- nc(-134217728, "-134217728", "-0x8000000", "-0o1000000000", "-0b1000000000000000000000000000"),
- nc(-134217727, "-134217727", "-0x7ffffff", "-0o777777777", "-0b111111111111111111111111111"),
- nc(-100000001, "-100000001", "-0x5f5e101", "-0o575360401", "-0b101111101011110000100000001"),
- nc(-100000000, "-100000000", "-0x5f5e100", "-0o575360400", "-0b101111101011110000100000000"),
- nc(-99999999, "-99999999", "-0x5f5e0ff", "-0o575360377", "-0b101111101011110000011111111"),
- nc(-67108865, "-67108865", "-0x4000001", "-0o400000001", "-0b100000000000000000000000001"),
- nc(-67108864, "-67108864", "-0x4000000", "-0o400000000", "-0b100000000000000000000000000"),
- nc(-67108863, "-67108863", "-0x3ffffff", "-0o377777777", "-0b11111111111111111111111111"),
- nc(-33554433, "-33554433", "-0x2000001", "-0o200000001", "-0b10000000000000000000000001"),
- nc(-33554432, "-33554432", "-0x2000000", "-0o200000000", "-0b10000000000000000000000000"),
- nc(-33554431, "-33554431", "-0x1ffffff", "-0o177777777", "-0b1111111111111111111111111"),
- nc(-21474836, "-21474836", "-0x147ae14", "-0o121727024", "-0b1010001111010111000010100"),
- nc(-16777217, "-16777217", "-0x1000001", "-0o100000001", "-0b1000000000000000000000001"),
- nc(-16777216, "-16777216", "-0x1000000", "-0o100000000", "-0b1000000000000000000000000"),
- nc(-16777215, "-16777215", "-0xffffff", "-0o77777777", "-0b111111111111111111111111"),
- nc(-10000001, "-10000001", "-0x989681", "-0o46113201", "-0b100110001001011010000001"),
- nc(-10000000, "-10000000", "-0x989680", "-0o46113200", "-0b100110001001011010000000"),
- nc(-9999999, "-9999999", "-0x98967f", "-0o46113177", "-0b100110001001011001111111"),
- nc(-8388609, "-8388609", "-0x800001", "-0o40000001", "-0b100000000000000000000001"),
- nc(-8388608, "-8388608", "-0x800000", "-0o40000000", "-0b100000000000000000000000"),
- nc(-8388607, "-8388607", "-0x7fffff", "-0o37777777", "-0b11111111111111111111111"),
- nc(-4194305, "-4194305", "-0x400001", "-0o20000001", "-0b10000000000000000000001"),
- nc(-4194304, "-4194304", "-0x400000", "-0o20000000", "-0b10000000000000000000000"),
- nc(-4194303, "-4194303", "-0x3fffff", "-0o17777777", "-0b1111111111111111111111"),
- nc(-2147483, "-2147483", "-0x20c49b", "-0o10142233", "-0b1000001100010010011011"),
- nc(-2097153, "-2097153", "-0x200001", "-0o10000001", "-0b1000000000000000000001"),
- nc(-2097152, "-2097152", "-0x200000", "-0o10000000", "-0b1000000000000000000000"),
- nc(-2097151, "-2097151", "-0x1fffff", "-0o7777777", "-0b111111111111111111111"),
- nc(-1048577, "-1048577", "-0x100001", "-0o4000001", "-0b100000000000000000001"),
- nc(-1048576, "-1048576", "-0x100000", "-0o4000000", "-0b100000000000000000000"),
- nc(-1048575, "-1048575", "-0xfffff", "-0o3777777", "-0b11111111111111111111"),
- nc(-1000001, "-1000001", "-0xf4241", "-0o3641101", "-0b11110100001001000001"),
- nc(-1000000, "-1000000", "-0xf4240", "-0o3641100", "-0b11110100001001000000"),
- nc(-999999, "-999999", "-0xf423f", "-0o3641077", "-0b11110100001000111111"),
- nc(-524289, "-524289", "-0x80001", "-0o2000001", "-0b10000000000000000001"),
- nc(-524288, "-524288", "-0x80000", "-0o2000000", "-0b10000000000000000000"),
- nc(-524287, "-524287", "-0x7ffff", "-0o1777777", "-0b1111111111111111111"),
- nc(-262145, "-262145", "-0x40001", "-0o1000001", "-0b1000000000000000001"),
- nc(-262144, "-262144", "-0x40000", "-0o1000000", "-0b1000000000000000000"),
- nc(-262143, "-262143", "-0x3ffff", "-0o777777", "-0b111111111111111111"),
- nc(-214748, "-214748", "-0x346dc", "-0o643334", "-0b110100011011011100"),
- nc(-131073, "-131073", "-0x20001", "-0o400001", "-0b100000000000000001"),
- nc(-131072, "-131072", "-0x20000", "-0o400000", "-0b100000000000000000"),
- nc(-131071, "-131071", "-0x1ffff", "-0o377777", "-0b11111111111111111"),
- nc(-100001, "-100001", "-0x186a1", "-0o303241", "-0b11000011010100001"),
- nc(-100000, "-100000", "-0x186a0", "-0o303240", "-0b11000011010100000"),
- nc(-99999, "-99999", "-0x1869f", "-0o303237", "-0b11000011010011111"),
- nc(-65537, "-65537", "-0x10001", "-0o200001", "-0b10000000000000001"),
- nc(-65536, "-65536", "-0x10000", "-0o200000", "-0b10000000000000000"),
- nc(-65535, "-65535", "-0xffff", "-0o177777", "-0b1111111111111111"),
- nc(-32769, "-32769", "-0x8001", "-0o100001", "-0b1000000000000001"),
- nc(-32768, "-32768", "-0x8000", "-0o100000", "-0b1000000000000000"),
- nc(-32767, "-32767", "-0x7fff", "-0o77777", "-0b111111111111111"),
- nc(-21474, "-21474", "-0x53e2", "-0o51742", "-0b101001111100010"),
- nc(-16385, "-16385", "-0x4001", "-0o40001", "-0b100000000000001"),
- nc(-16384, "-16384", "-0x4000", "-0o40000", "-0b100000000000000"),
- nc(-16383, "-16383", "-0x3fff", "-0o37777", "-0b11111111111111"),
- nc(-10001, "-10001", "-0x2711", "-0o23421", "-0b10011100010001"),
- nc(-10000, "-10000", "-0x2710", "-0o23420", "-0b10011100010000"),
- nc(-9999, "-9999", "-0x270f", "-0o23417", "-0b10011100001111"),
- nc(-8193, "-8193", "-0x2001", "-0o20001", "-0b10000000000001"),
- nc(-8192, "-8192", "-0x2000", "-0o20000", "-0b10000000000000"),
- nc(-8191, "-8191", "-0x1fff", "-0o17777", "-0b1111111111111"),
- nc(-4097, "-4097", "-0x1001", "-0o10001", "-0b1000000000001"),
- nc(-4096, "-4096", "-0x1000", "-0o10000", "-0b1000000000000"),
- nc(-4095, "-4095", "-0xfff", "-0o7777", "-0b111111111111"),
- nc(-2147, "-2147", "-0x863", "-0o4143", "-0b100001100011"),
- nc(-2049, "-2049", "-0x801", "-0o4001", "-0b100000000001"),
- nc(-2048, "-2048", "-0x800", "-0o4000", "-0b100000000000"),
- nc(-2047, "-2047", "-0x7ff", "-0o3777", "-0b11111111111"),
- nc(-1025, "-1025", "-0x401", "-0o2001", "-0b10000000001"),
- nc(-1024, "-1024", "-0x400", "-0o2000", "-0b10000000000"),
- nc(-1023, "-1023", "-0x3ff", "-0o1777", "-0b1111111111"),
- nc(-1001, "-1001", "-0x3e9", "-0o1751", "-0b1111101001"),
- nc(-1000, "-1000", "-0x3e8", "-0o1750", "-0b1111101000"),
- nc(-999, "-999", "-0x3e7", "-0o1747", "-0b1111100111"),
- nc(-513, "-513", "-0x201", "-0o1001", "-0b1000000001"),
- nc(-512, "-512", "-0x200", "-0o1000", "-0b1000000000"),
- nc(-511, "-511", "-0x1ff", "-0o777", "-0b111111111"),
- nc(-257, "-257", "-0x101", "-0o401", "-0b100000001"),
- nc(-256, "-256", "-0x100", "-0o400", "-0b100000000"),
- nc(-255, "-255", "-0xff", "-0o377", "-0b11111111"),
- nc(-214, "-214", "-0xd6", "-0o326", "-0b11010110"),
- nc(-129, "-129", "-0x81", "-0o201", "-0b10000001"),
- nc(-128, "-128", "-0x80", "-0o200", "-0b10000000"),
- nc(-127, "-127", "-0x7f", "-0o177", "-0b1111111"),
- nc(-101, "-101", "-0x65", "-0o145", "-0b1100101"),
- nc(-100, "-100", "-0x64", "-0o144", "-0b1100100"),
- nc(-99, "-99", "-0x63", "-0o143", "-0b1100011"),
- nc(-65, "-65", "-0x41", "-0o101", "-0b1000001"),
- nc(-64, "-64", "-0x40", "-0o100", "-0b1000000"),
- nc(-63, "-63", "-0x3f", "-0o77", "-0b111111"),
- nc(-33, "-33", "-0x21", "-0o41", "-0b100001"),
- nc(-32, "-32", "-0x20", "-0o40", "-0b100000"),
- nc(-31, "-31", "-0x1f", "-0o37", "-0b11111"),
- nc(-21, "-21", "-0x15", "-0o25", "-0b10101"),
- nc(-17, "-17", "-0x11", "-0o21", "-0b10001"),
- nc(-16, "-16", "-0x10", "-0o20", "-0b10000"),
- nc(-15, "-15", "-0xf", "-0o17", "-0b1111"),
- nc(-11, "-11", "-0xb", "-0o13", "-0b1011"),
- nc(-10, "-10", "-0xa", "-0o12", "-0b1010"),
- nc(-9, "-9", "-0x9", "-0o11", "-0b1001"),
- nc(-8, "-8", "-0x8", "-0o10", "-0b1000"),
- nc(-7, "-7", "-0x7", "-0o7", "-0b111"),
- nc(-6, "-6", "-0x6", "-0o6", "-0b110"),
- nc(-5, "-5", "-0x5", "-0o5", "-0b101"),
- nc(-4, "-4", "-0x4", "-0o4", "-0b100"),
- nc(-3, "-3", "-0x3", "-0o3", "-0b11"),
- nc(-2, "-2", "-0x2", "-0o2", "-0b10"),
- nc(-1, "-1", "-0x1", "-0o1", "-0b1"),
- nc(0, "0", "0x0", "0o0", "0b0"),
- nc(1, "1", "0x1", "0o1", "0b1"),
- nc(2, "2", "0x2", "0o2", "0b10"),
- nc(3, "3", "0x3", "0o3", "0b11"),
- nc(4, "4", "0x4", "0o4", "0b100"),
- nc(5, "5", "0x5", "0o5", "0b101"),
- nc(6, "6", "0x6", "0o6", "0b110"),
- nc(7, "7", "0x7", "0o7", "0b111"),
- nc(8, "8", "0x8", "0o10", "0b1000"),
- nc(9, "9", "0x9", "0o11", "0b1001"),
- nc(10, "10", "0xa", "0o12", "0b1010"),
- nc(11, "11", "0xb", "0o13", "0b1011"),
- nc(15, "15", "0xf", "0o17", "0b1111"),
- nc(16, "16", "0x10", "0o20", "0b10000"),
- nc(17, "17", "0x11", "0o21", "0b10001"),
- nc(20, "20", "0x14", "0o24", "0b10100"),
- nc(21, "21", "0x15", "0o25", "0b10101"),
- nc(22, "22", "0x16", "0o26", "0b10110"),
- nc(31, "31", "0x1f", "0o37", "0b11111"),
- nc(32, "32", "0x20", "0o40", "0b100000"),
- nc(33, "33", "0x21", "0o41", "0b100001"),
- nc(63, "63", "0x3f", "0o77", "0b111111"),
- nc(64, "64", "0x40", "0o100", "0b1000000"),
- nc(65, "65", "0x41", "0o101", "0b1000001"),
- nc(99, "99", "0x63", "0o143", "0b1100011"),
- nc(100, "100", "0x64", "0o144", "0b1100100"),
- nc(101, "101", "0x65", "0o145", "0b1100101"),
- nc(127, "127", "0x7f", "0o177", "0b1111111"),
- nc(128, "128", "0x80", "0o200", "0b10000000"),
- nc(129, "129", "0x81", "0o201", "0b10000001"),
- nc(213, "213", "0xd5", "0o325", "0b11010101"),
- nc(214, "214", "0xd6", "0o326", "0b11010110"),
- nc(215, "215", "0xd7", "0o327", "0b11010111"),
- nc(255, "255", "0xff", "0o377", "0b11111111"),
- nc(256, "256", "0x100", "0o400", "0b100000000"),
- nc(257, "257", "0x101", "0o401", "0b100000001"),
- nc(511, "511", "0x1ff", "0o777", "0b111111111"),
- nc(512, "512", "0x200", "0o1000", "0b1000000000"),
- nc(513, "513", "0x201", "0o1001", "0b1000000001"),
- nc(999, "999", "0x3e7", "0o1747", "0b1111100111"),
- nc(1000, "1000", "0x3e8", "0o1750", "0b1111101000"),
- nc(1001, "1001", "0x3e9", "0o1751", "0b1111101001"),
- nc(1023, "1023", "0x3ff", "0o1777", "0b1111111111"),
- nc(1024, "1024", "0x400", "0o2000", "0b10000000000"),
- nc(1025, "1025", "0x401", "0o2001", "0b10000000001"),
- nc(2047, "2047", "0x7ff", "0o3777", "0b11111111111"),
- nc(2048, "2048", "0x800", "0o4000", "0b100000000000"),
- nc(2049, "2049", "0x801", "0o4001", "0b100000000001"),
- nc(2146, "2146", "0x862", "0o4142", "0b100001100010"),
- nc(2147, "2147", "0x863", "0o4143", "0b100001100011"),
- nc(2148, "2148", "0x864", "0o4144", "0b100001100100"),
- nc(4095, "4095", "0xfff", "0o7777", "0b111111111111"),
- nc(4096, "4096", "0x1000", "0o10000", "0b1000000000000"),
- nc(4097, "4097", "0x1001", "0o10001", "0b1000000000001"),
- nc(8191, "8191", "0x1fff", "0o17777", "0b1111111111111"),
- nc(8192, "8192", "0x2000", "0o20000", "0b10000000000000"),
- nc(8193, "8193", "0x2001", "0o20001", "0b10000000000001"),
- nc(9999, "9999", "0x270f", "0o23417", "0b10011100001111"),
- nc(10000, "10000", "0x2710", "0o23420", "0b10011100010000"),
- nc(10001, "10001", "0x2711", "0o23421", "0b10011100010001"),
- nc(16383, "16383", "0x3fff", "0o37777", "0b11111111111111"),
- nc(16384, "16384", "0x4000", "0o40000", "0b100000000000000"),
- nc(16385, "16385", "0x4001", "0o40001", "0b100000000000001"),
- nc(21473, "21473", "0x53e1", "0o51741", "0b101001111100001"),
- nc(21474, "21474", "0x53e2", "0o51742", "0b101001111100010"),
- nc(21475, "21475", "0x53e3", "0o51743", "0b101001111100011"),
- nc(32767, "32767", "0x7fff", "0o77777", "0b111111111111111"),
- nc(32768, "32768", "0x8000", "0o100000", "0b1000000000000000"),
- nc(32769, "32769", "0x8001", "0o100001", "0b1000000000000001"),
- nc(65535, "65535", "0xffff", "0o177777", "0b1111111111111111"),
- nc(65536, "65536", "0x10000", "0o200000", "0b10000000000000000"),
- nc(65537, "65537", "0x10001", "0o200001", "0b10000000000000001"),
- nc(99999, "99999", "0x1869f", "0o303237", "0b11000011010011111"),
- nc(100000, "100000", "0x186a0", "0o303240", "0b11000011010100000"),
- nc(100001, "100001", "0x186a1", "0o303241", "0b11000011010100001"),
- nc(131071, "131071", "0x1ffff", "0o377777", "0b11111111111111111"),
- nc(131072, "131072", "0x20000", "0o400000", "0b100000000000000000"),
- nc(131073, "131073", "0x20001", "0o400001", "0b100000000000000001"),
- nc(214747, "214747", "0x346db", "0o643333", "0b110100011011011011"),
- nc(214748, "214748", "0x346dc", "0o643334", "0b110100011011011100"),
- nc(214749, "214749", "0x346dd", "0o643335", "0b110100011011011101"),
- nc(262143, "262143", "0x3ffff", "0o777777", "0b111111111111111111"),
- nc(262144, "262144", "0x40000", "0o1000000", "0b1000000000000000000"),
- nc(262145, "262145", "0x40001", "0o1000001", "0b1000000000000000001"),
- nc(524287, "524287", "0x7ffff", "0o1777777", "0b1111111111111111111"),
- nc(524288, "524288", "0x80000", "0o2000000", "0b10000000000000000000"),
- nc(524289, "524289", "0x80001", "0o2000001", "0b10000000000000000001"),
- nc(999999, "999999", "0xf423f", "0o3641077", "0b11110100001000111111"),
- nc(1000000, "1000000", "0xf4240", "0o3641100", "0b11110100001001000000"),
- nc(1000001, "1000001", "0xf4241", "0o3641101", "0b11110100001001000001"),
- nc(1048575, "1048575", "0xfffff", "0o3777777", "0b11111111111111111111"),
- nc(1048576, "1048576", "0x100000", "0o4000000", "0b100000000000000000000"),
- nc(1048577, "1048577", "0x100001", "0o4000001", "0b100000000000000000001"),
- nc(2097151, "2097151", "0x1fffff", "0o7777777", "0b111111111111111111111"),
- nc(2097152, "2097152", "0x200000", "0o10000000", "0b1000000000000000000000"),
- nc(2097153, "2097153", "0x200001", "0o10000001", "0b1000000000000000000001"),
- nc(2147482, "2147482", "0x20c49a", "0o10142232", "0b1000001100010010011010"),
- nc(2147483, "2147483", "0x20c49b", "0o10142233", "0b1000001100010010011011"),
- nc(2147484, "2147484", "0x20c49c", "0o10142234", "0b1000001100010010011100"),
- nc(4194303, "4194303", "0x3fffff", "0o17777777", "0b1111111111111111111111"),
- nc(4194304, "4194304", "0x400000", "0o20000000", "0b10000000000000000000000"),
- nc(4194305, "4194305", "0x400001", "0o20000001", "0b10000000000000000000001"),
- nc(8388607, "8388607", "0x7fffff", "0o37777777", "0b11111111111111111111111"),
- nc(8388608, "8388608", "0x800000", "0o40000000", "0b100000000000000000000000"),
- nc(8388609, "8388609", "0x800001", "0o40000001", "0b100000000000000000000001"),
- nc(9999999, "9999999", "0x98967f", "0o46113177", "0b100110001001011001111111"),
- nc(10000000, "10000000", "0x989680", "0o46113200", "0b100110001001011010000000"),
- nc(10000001, "10000001", "0x989681", "0o46113201", "0b100110001001011010000001"),
- nc(16777215, "16777215", "0xffffff", "0o77777777", "0b111111111111111111111111"),
- nc(16777216, "16777216", "0x1000000", "0o100000000", "0b1000000000000000000000000"),
- nc(16777217, "16777217", "0x1000001", "0o100000001", "0b1000000000000000000000001"),
- nc(21474835, "21474835", "0x147ae13", "0o121727023", "0b1010001111010111000010011"),
- nc(21474836, "21474836", "0x147ae14", "0o121727024", "0b1010001111010111000010100"),
- nc(21474837, "21474837", "0x147ae15", "0o121727025", "0b1010001111010111000010101"),
- nc(33554431, "33554431", "0x1ffffff", "0o177777777", "0b1111111111111111111111111"),
- nc(33554432, "33554432", "0x2000000", "0o200000000", "0b10000000000000000000000000"),
- nc(33554433, "33554433", "0x2000001", "0o200000001", "0b10000000000000000000000001"),
- nc(67108863, "67108863", "0x3ffffff", "0o377777777", "0b11111111111111111111111111"),
- nc(67108864, "67108864", "0x4000000", "0o400000000", "0b100000000000000000000000000"),
- nc(67108865, "67108865", "0x4000001", "0o400000001", "0b100000000000000000000000001"),
- nc(99999999, "99999999", "0x5f5e0ff", "0o575360377", "0b101111101011110000011111111"),
- nc(100000000, "100000000", "0x5f5e100", "0o575360400", "0b101111101011110000100000000"),
- nc(100000001, "100000001", "0x5f5e101", "0o575360401", "0b101111101011110000100000001"),
- nc(134217727, "134217727", "0x7ffffff", "0o777777777", "0b111111111111111111111111111"),
- nc(134217728, "134217728", "0x8000000", "0o1000000000", "0b1000000000000000000000000000"),
- nc(134217729, "134217729", "0x8000001", "0o1000000001", "0b1000000000000000000000000001"),
- nc(214748363, "214748363", "0xccccccb", "0o1463146313", "0b1100110011001100110011001011"),
- nc(214748364, "214748364", "0xccccccc", "0o1463146314", "0b1100110011001100110011001100"),
- nc(214748365, "214748365", "0xccccccd", "0o1463146315", "0b1100110011001100110011001101"),
- nc(268435455, "268435455", "0xfffffff", "0o1777777777", "0b1111111111111111111111111111"),
- nc(268435456, "268435456", "0x10000000", "0o2000000000", "0b10000000000000000000000000000"),
- nc(268435457, "268435457", "0x10000001", "0o2000000001", "0b10000000000000000000000000001"),
- nc(536870911, "536870911", "0x1fffffff", "0o3777777777", "0b11111111111111111111111111111"),
- nc(536870912, "536870912", "0x20000000", "0o4000000000", "0b100000000000000000000000000000"),
- nc(536870913, "536870913", "0x20000001", "0o4000000001", "0b100000000000000000000000000001"),
- nc(999999999, "999999999", "0x3b9ac9ff", "0o7346544777", "0b111011100110101100100111111111"),
- nc(1000000000, "1000000000", "0x3b9aca00", "0o7346545000", "0b111011100110101100101000000000"),
- nc(1000000001, "1000000001", "0x3b9aca01", "0o7346545001", "0b111011100110101100101000000001"),
- nc(1073741823, "1073741823", "0x3fffffff", "0o7777777777", "0b111111111111111111111111111111"),
- nc(1073741824, "1073741824", "0x40000000", "0o10000000000", "0b1000000000000000000000000000000"),
- nc(1073741825, "1073741825", "0x40000001", "0o10000000001", "0b1000000000000000000000000000001"),
- nc(2147483642, "2147483642", "0x7ffffffa", "0o17777777772", "0b1111111111111111111111111111010"),
- nc(2147483643, "2147483643", "0x7ffffffb", "0o17777777773", "0b1111111111111111111111111111011"),
- nc(2147483644, "2147483644", "0x7ffffffc", "0o17777777774", "0b1111111111111111111111111111100"),
- nc(2147483645, "2147483645", "0x7ffffffd", "0o17777777775", "0b1111111111111111111111111111101"),
- nc(2147483646, "2147483646", "0x7ffffffe", "0o17777777776", "0b1111111111111111111111111111110"),
- nc(2147483647, "2147483647", "0x7fffffff", "0o17777777777", "0b1111111111111111111111111111111"),
-#undef nc
- };
-};
-
-
-template<>
-struct numbers<uint32_t>
-{
- using value_type = uint32_t;
- static C4_INLINE_CONSTEXPR const number_case<uint32_t> vals[] = {
-#define nc(val, dec, hex, bin, oct) \
- number_case<value_type>{(value_type)UINT32_C(val), csubstr{dec}, csubstr{hex}, csubstr{bin}, csubstr{oct}}
- nc(0, "0", "0x0", "0o0", "0b0"),
- nc(1, "1", "0x1", "0o1", "0b1"),
- nc(2, "2", "0x2", "0o2", "0b10"),
- nc(3, "3", "0x3", "0o3", "0b11"),
- nc(4, "4", "0x4", "0o4", "0b100"),
- nc(5, "5", "0x5", "0o5", "0b101"),
- nc(6, "6", "0x6", "0o6", "0b110"),
- nc(7, "7", "0x7", "0o7", "0b111"),
- nc(8, "8", "0x8", "0o10", "0b1000"),
- nc(9, "9", "0x9", "0o11", "0b1001"),
- nc(10, "10", "0xa", "0o12", "0b1010"),
- nc(11, "11", "0xb", "0o13", "0b1011"),
- nc(15, "15", "0xf", "0o17", "0b1111"),
- nc(16, "16", "0x10", "0o20", "0b10000"),
- nc(17, "17", "0x11", "0o21", "0b10001"),
- nc(31, "31", "0x1f", "0o37", "0b11111"),
- nc(32, "32", "0x20", "0o40", "0b100000"),
- nc(33, "33", "0x21", "0o41", "0b100001"),
- nc(41, "41", "0x29", "0o51", "0b101001"),
- nc(42, "42", "0x2a", "0o52", "0b101010"),
- nc(43, "43", "0x2b", "0o53", "0b101011"),
- nc(63, "63", "0x3f", "0o77", "0b111111"),
- nc(64, "64", "0x40", "0o100", "0b1000000"),
- nc(65, "65", "0x41", "0o101", "0b1000001"),
- nc(99, "99", "0x63", "0o143", "0b1100011"),
- nc(100, "100", "0x64", "0o144", "0b1100100"),
- nc(101, "101", "0x65", "0o145", "0b1100101"),
- nc(127, "127", "0x7f", "0o177", "0b1111111"),
- nc(128, "128", "0x80", "0o200", "0b10000000"),
- nc(129, "129", "0x81", "0o201", "0b10000001"),
- nc(255, "255", "0xff", "0o377", "0b11111111"),
- nc(256, "256", "0x100", "0o400", "0b100000000"),
- nc(257, "257", "0x101", "0o401", "0b100000001"),
- nc(428, "428", "0x1ac", "0o654", "0b110101100"),
- nc(429, "429", "0x1ad", "0o655", "0b110101101"),
- nc(430, "430", "0x1ae", "0o656", "0b110101110"),
- nc(511, "511", "0x1ff", "0o777", "0b111111111"),
- nc(512, "512", "0x200", "0o1000", "0b1000000000"),
- nc(513, "513", "0x201", "0o1001", "0b1000000001"),
- nc(999, "999", "0x3e7", "0o1747", "0b1111100111"),
- nc(1000, "1000", "0x3e8", "0o1750", "0b1111101000"),
- nc(1001, "1001", "0x3e9", "0o1751", "0b1111101001"),
- nc(1023, "1023", "0x3ff", "0o1777", "0b1111111111"),
- nc(1024, "1024", "0x400", "0o2000", "0b10000000000"),
- nc(1025, "1025", "0x401", "0o2001", "0b10000000001"),
- nc(2047, "2047", "0x7ff", "0o3777", "0b11111111111"),
- nc(2048, "2048", "0x800", "0o4000", "0b100000000000"),
- nc(2049, "2049", "0x801", "0o4001", "0b100000000001"),
- nc(4095, "4095", "0xfff", "0o7777", "0b111111111111"),
- nc(4096, "4096", "0x1000", "0o10000", "0b1000000000000"),
- nc(4097, "4097", "0x1001", "0o10001", "0b1000000000001"),
- nc(4293, "4293", "0x10c5", "0o10305", "0b1000011000101"),
- nc(4294, "4294", "0x10c6", "0o10306", "0b1000011000110"),
- nc(4295, "4295", "0x10c7", "0o10307", "0b1000011000111"),
- nc(8191, "8191", "0x1fff", "0o17777", "0b1111111111111"),
- nc(8192, "8192", "0x2000", "0o20000", "0b10000000000000"),
- nc(8193, "8193", "0x2001", "0o20001", "0b10000000000001"),
- nc(9999, "9999", "0x270f", "0o23417", "0b10011100001111"),
- nc(10000, "10000", "0x2710", "0o23420", "0b10011100010000"),
- nc(10001, "10001", "0x2711", "0o23421", "0b10011100010001"),
- nc(16383, "16383", "0x3fff", "0o37777", "0b11111111111111"),
- nc(16384, "16384", "0x4000", "0o40000", "0b100000000000000"),
- nc(16385, "16385", "0x4001", "0o40001", "0b100000000000001"),
- nc(32767, "32767", "0x7fff", "0o77777", "0b111111111111111"),
- nc(32768, "32768", "0x8000", "0o100000", "0b1000000000000000"),
- nc(32769, "32769", "0x8001", "0o100001", "0b1000000000000001"),
- nc(42948, "42948", "0xa7c4", "0o123704", "0b1010011111000100"),
- nc(42949, "42949", "0xa7c5", "0o123705", "0b1010011111000101"),
- nc(42950, "42950", "0xa7c6", "0o123706", "0b1010011111000110"),
- nc(65535, "65535", "0xffff", "0o177777", "0b1111111111111111"),
- nc(65536, "65536", "0x10000", "0o200000", "0b10000000000000000"),
- nc(65537, "65537", "0x10001", "0o200001", "0b10000000000000001"),
- nc(99999, "99999", "0x1869f", "0o303237", "0b11000011010011111"),
- nc(100000, "100000", "0x186a0", "0o303240", "0b11000011010100000"),
- nc(100001, "100001", "0x186a1", "0o303241", "0b11000011010100001"),
- nc(131071, "131071", "0x1ffff", "0o377777", "0b11111111111111111"),
- nc(131072, "131072", "0x20000", "0o400000", "0b100000000000000000"),
- nc(131073, "131073", "0x20001", "0o400001", "0b100000000000000001"),
- nc(262143, "262143", "0x3ffff", "0o777777", "0b111111111111111111"),
- nc(262144, "262144", "0x40000", "0o1000000", "0b1000000000000000000"),
- nc(262145, "262145", "0x40001", "0o1000001", "0b1000000000000000001"),
- nc(429495, "429495", "0x68db7", "0o1506667", "0b1101000110110110111"),
- nc(429496, "429496", "0x68db8", "0o1506670", "0b1101000110110111000"),
- nc(429497, "429497", "0x68db9", "0o1506671", "0b1101000110110111001"),
- nc(524287, "524287", "0x7ffff", "0o1777777", "0b1111111111111111111"),
- nc(524288, "524288", "0x80000", "0o2000000", "0b10000000000000000000"),
- nc(524289, "524289", "0x80001", "0o2000001", "0b10000000000000000001"),
- nc(999999, "999999", "0xf423f", "0o3641077", "0b11110100001000111111"),
- nc(1000000, "1000000", "0xf4240", "0o3641100", "0b11110100001001000000"),
- nc(1000001, "1000001", "0xf4241", "0o3641101", "0b11110100001001000001"),
- nc(1048575, "1048575", "0xfffff", "0o3777777", "0b11111111111111111111"),
- nc(1048576, "1048576", "0x100000", "0o4000000", "0b100000000000000000000"),
- nc(1048577, "1048577", "0x100001", "0o4000001", "0b100000000000000000001"),
- nc(2097151, "2097151", "0x1fffff", "0o7777777", "0b111111111111111111111"),
- nc(2097152, "2097152", "0x200000", "0o10000000", "0b1000000000000000000000"),
- nc(2097153, "2097153", "0x200001", "0o10000001", "0b1000000000000000000001"),
- nc(4194303, "4194303", "0x3fffff", "0o17777777", "0b1111111111111111111111"),
- nc(4194304, "4194304", "0x400000", "0o20000000", "0b10000000000000000000000"),
- nc(4194305, "4194305", "0x400001", "0o20000001", "0b10000000000000000000001"),
- nc(4294966, "4294966", "0x418936", "0o20304466", "0b10000011000100100110110"),
- nc(4294967, "4294967", "0x418937", "0o20304467", "0b10000011000100100110111"),
- nc(4294968, "4294968", "0x418938", "0o20304470", "0b10000011000100100111000"),
- nc(8388607, "8388607", "0x7fffff", "0o37777777", "0b11111111111111111111111"),
- nc(8388608, "8388608", "0x800000", "0o40000000", "0b100000000000000000000000"),
- nc(8388609, "8388609", "0x800001", "0o40000001", "0b100000000000000000000001"),
- nc(9999999, "9999999", "0x98967f", "0o46113177", "0b100110001001011001111111"),
- nc(10000000, "10000000", "0x989680", "0o46113200", "0b100110001001011010000000"),
- nc(10000001, "10000001", "0x989681", "0o46113201", "0b100110001001011010000001"),
- nc(16777215, "16777215", "0xffffff", "0o77777777", "0b111111111111111111111111"),
- nc(16777216, "16777216", "0x1000000", "0o100000000", "0b1000000000000000000000000"),
- nc(16777217, "16777217", "0x1000001", "0o100000001", "0b1000000000000000000000001"),
- nc(33554431, "33554431", "0x1ffffff", "0o177777777", "0b1111111111111111111111111"),
- nc(33554432, "33554432", "0x2000000", "0o200000000", "0b10000000000000000000000000"),
- nc(33554433, "33554433", "0x2000001", "0o200000001", "0b10000000000000000000000001"),
- nc(42949671, "42949671", "0x28f5c27", "0o243656047", "0b10100011110101110000100111"),
- nc(42949672, "42949672", "0x28f5c28", "0o243656050", "0b10100011110101110000101000"),
- nc(42949673, "42949673", "0x28f5c29", "0o243656051", "0b10100011110101110000101001"),
- nc(67108863, "67108863", "0x3ffffff", "0o377777777", "0b11111111111111111111111111"),
- nc(67108864, "67108864", "0x4000000", "0o400000000", "0b100000000000000000000000000"),
- nc(67108865, "67108865", "0x4000001", "0o400000001", "0b100000000000000000000000001"),
- nc(99999999, "99999999", "0x5f5e0ff", "0o575360377", "0b101111101011110000011111111"),
- nc(100000000, "100000000", "0x5f5e100", "0o575360400", "0b101111101011110000100000000"),
- nc(100000001, "100000001", "0x5f5e101", "0o575360401", "0b101111101011110000100000001"),
- nc(134217727, "134217727", "0x7ffffff", "0o777777777", "0b111111111111111111111111111"),
- nc(134217728, "134217728", "0x8000000", "0o1000000000", "0b1000000000000000000000000000"),
- nc(134217729, "134217729", "0x8000001", "0o1000000001", "0b1000000000000000000000000001"),
- nc(268435455, "268435455", "0xfffffff", "0o1777777777", "0b1111111111111111111111111111"),
- nc(268435456, "268435456", "0x10000000", "0o2000000000", "0b10000000000000000000000000000"),
- nc(268435457, "268435457", "0x10000001", "0o2000000001", "0b10000000000000000000000000001"),
- nc(429496728, "429496728", "0x19999998", "0o3146314630", "0b11001100110011001100110011000"),
- nc(429496729, "429496729", "0x19999999", "0o3146314631", "0b11001100110011001100110011001"),
- nc(429496730, "429496730", "0x1999999a", "0o3146314632", "0b11001100110011001100110011010"),
- nc(536870911, "536870911", "0x1fffffff", "0o3777777777", "0b11111111111111111111111111111"),
- nc(536870912, "536870912", "0x20000000", "0o4000000000", "0b100000000000000000000000000000"),
- nc(536870913, "536870913", "0x20000001", "0o4000000001", "0b100000000000000000000000000001"),
- nc(999999999, "999999999", "0x3b9ac9ff", "0o7346544777", "0b111011100110101100100111111111"),
- nc(1000000000, "1000000000", "0x3b9aca00", "0o7346545000", "0b111011100110101100101000000000"),
- nc(1000000001, "1000000001", "0x3b9aca01", "0o7346545001", "0b111011100110101100101000000001"),
- nc(1073741823, "1073741823", "0x3fffffff", "0o7777777777", "0b111111111111111111111111111111"),
- nc(1073741824, "1073741824", "0x40000000", "0o10000000000", "0b1000000000000000000000000000000"),
- nc(1073741825, "1073741825", "0x40000001", "0o10000000001", "0b1000000000000000000000000000001"),
- nc(2147483647, "2147483647", "0x7fffffff", "0o17777777777", "0b1111111111111111111111111111111"),
- nc(2147483648, "2147483648", "0x80000000", "0o20000000000", "0b10000000000000000000000000000000"),
- nc(2147483649, "2147483649", "0x80000001", "0o20000000001", "0b10000000000000000000000000000001"),
- nc(4294967291, "4294967291", "0xfffffffb", "0o37777777773", "0b11111111111111111111111111111011"),
- nc(4294967292, "4294967292", "0xfffffffc", "0o37777777774", "0b11111111111111111111111111111100"),
- nc(4294967293, "4294967293", "0xfffffffd", "0o37777777775", "0b11111111111111111111111111111101"),
- nc(4294967294, "4294967294", "0xfffffffe", "0o37777777776", "0b11111111111111111111111111111110"),
- nc(4294967295, "4294967295", "0xffffffff", "0o37777777777", "0b11111111111111111111111111111111"),
-#undef nc
- };
-};
-
-
-template<>
-struct numbers<int64_t>
-{
- using value_type = int64_t;
- static C4_INLINE_CONSTEXPR const number_case<int64_t> vals[] = {
-#define nc(val, dec, hex, bin, oct) \
- number_case<value_type>{(value_type)INT64_C(val), csubstr{dec}, csubstr{hex}, csubstr{bin}, csubstr{oct}}
-#define ncm1(val, dec, hex, bin, oct) \
- number_case<value_type>{(value_type)(INT64_C(val)-INT64_C(1)), csubstr{dec}, csubstr{hex}, csubstr{bin}, csubstr{oct}}
- ncm1(-9223372036854775807, "-9223372036854775808", "-0x8000000000000000", "-0o1000000000000000000000", "-0b1000000000000000000000000000000000000000000000000000000000000000"),
- nc(-9223372036854775807, "-9223372036854775807", "-0x7fffffffffffffff", "-0o777777777777777777777", "-0b111111111111111111111111111111111111111111111111111111111111111"),
- nc(-9223372036854775806, "-9223372036854775806", "-0x7ffffffffffffffe", "-0o777777777777777777776", "-0b111111111111111111111111111111111111111111111111111111111111110"),
- nc(-9223372036854775805, "-9223372036854775805", "-0x7ffffffffffffffd", "-0o777777777777777777775", "-0b111111111111111111111111111111111111111111111111111111111111101"),
- nc(-9223372036854775804, "-9223372036854775804", "-0x7ffffffffffffffc", "-0o777777777777777777774", "-0b111111111111111111111111111111111111111111111111111111111111100"),
- nc(-9223372036854775803, "-9223372036854775803", "-0x7ffffffffffffffb", "-0o777777777777777777773", "-0b111111111111111111111111111111111111111111111111111111111111011"),
- nc(-4611686018427387905, "-4611686018427387905", "-0x4000000000000001", "-0o400000000000000000001", "-0b100000000000000000000000000000000000000000000000000000000000001"),
- nc(-4611686018427387904, "-4611686018427387904", "-0x4000000000000000", "-0o400000000000000000000", "-0b100000000000000000000000000000000000000000000000000000000000000"),
- nc(-4611686018427387903, "-4611686018427387903", "-0x3fffffffffffffff", "-0o377777777777777777777", "-0b11111111111111111111111111111111111111111111111111111111111111"),
- nc(-2305843009213693953, "-2305843009213693953", "-0x2000000000000001", "-0o200000000000000000001", "-0b10000000000000000000000000000000000000000000000000000000000001"),
- nc(-2305843009213693952, "-2305843009213693952", "-0x2000000000000000", "-0o200000000000000000000", "-0b10000000000000000000000000000000000000000000000000000000000000"),
- nc(-2305843009213693951, "-2305843009213693951", "-0x1fffffffffffffff", "-0o177777777777777777777", "-0b1111111111111111111111111111111111111111111111111111111111111"),
- nc(-1152921504606846977, "-1152921504606846977", "-0x1000000000000001", "-0o100000000000000000001", "-0b1000000000000000000000000000000000000000000000000000000000001"),
- nc(-1152921504606846976, "-1152921504606846976", "-0x1000000000000000", "-0o100000000000000000000", "-0b1000000000000000000000000000000000000000000000000000000000000"),
- nc(-1152921504606846975, "-1152921504606846975", "-0xfffffffffffffff", "-0o77777777777777777777", "-0b111111111111111111111111111111111111111111111111111111111111"),
- nc(-1000000000000000001, "-1000000000000000001", "-0xde0b6b3a7640001", "-0o67405553164731000001", "-0b110111100000101101101011001110100111011001000000000000000001"),
- nc(-1000000000000000000, "-1000000000000000000", "-0xde0b6b3a7640000", "-0o67405553164731000000", "-0b110111100000101101101011001110100111011001000000000000000000"),
- nc(-999999999999999999, "-999999999999999999", "-0xde0b6b3a763ffff", "-0o67405553164730777777", "-0b110111100000101101101011001110100111011000111111111111111111"),
- nc(-922337203685477632, "-922337203685477632", "-0xccccccccccccd00", "-0o63146314631463146400", "-0b110011001100110011001100110011001100110011001100110100000000"),
- nc(-576460752303423489, "-576460752303423489", "-0x800000000000001", "-0o40000000000000000001", "-0b100000000000000000000000000000000000000000000000000000000001"),
- nc(-576460752303423488, "-576460752303423488", "-0x800000000000000", "-0o40000000000000000000", "-0b100000000000000000000000000000000000000000000000000000000000"),
- nc(-576460752303423487, "-576460752303423487", "-0x7ffffffffffffff", "-0o37777777777777777777", "-0b11111111111111111111111111111111111111111111111111111111111"),
- nc(-288230376151711745, "-288230376151711745", "-0x400000000000001", "-0o20000000000000000001", "-0b10000000000000000000000000000000000000000000000000000000001"),
- nc(-288230376151711744, "-288230376151711744", "-0x400000000000000", "-0o20000000000000000000", "-0b10000000000000000000000000000000000000000000000000000000000"),
- nc(-288230376151711743, "-288230376151711743", "-0x3ffffffffffffff", "-0o17777777777777777777", "-0b1111111111111111111111111111111111111111111111111111111111"),
- nc(-144115188075855873, "-144115188075855873", "-0x200000000000001", "-0o10000000000000000001", "-0b1000000000000000000000000000000000000000000000000000000001"),
- nc(-144115188075855872, "-144115188075855872", "-0x200000000000000", "-0o10000000000000000000", "-0b1000000000000000000000000000000000000000000000000000000000"),
- nc(-144115188075855871, "-144115188075855871", "-0x1ffffffffffffff", "-0o7777777777777777777", "-0b111111111111111111111111111111111111111111111111111111111"),
- nc(-100000000000000001, "-100000000000000001", "-0x16345785d8a0001", "-0o5432127413542400001", "-0b101100011010001010111100001011101100010100000000000000001"),
- nc(-100000000000000000, "-100000000000000000", "-0x16345785d8a0000", "-0o5432127413542400000", "-0b101100011010001010111100001011101100010100000000000000000"),
- nc(-99999999999999999, "-99999999999999999", "-0x16345785d89ffff", "-0o5432127413542377777", "-0b101100011010001010111100001011101100010011111111111111111"),
- nc(-92233720368547760, "-92233720368547760", "-0x147ae147ae147b0", "-0o5075341217270243660", "-0b101000111101011100001010001111010111000010100011110110000"),
- nc(-72057594037927937, "-72057594037927937", "-0x100000000000001", "-0o4000000000000000001", "-0b100000000000000000000000000000000000000000000000000000001"),
- nc(-72057594037927936, "-72057594037927936", "-0x100000000000000", "-0o4000000000000000000", "-0b100000000000000000000000000000000000000000000000000000000"),
- nc(-72057594037927935, "-72057594037927935", "-0xffffffffffffff", "-0o3777777777777777777", "-0b11111111111111111111111111111111111111111111111111111111"),
- nc(-36028797018963969, "-36028797018963969", "-0x80000000000001", "-0o2000000000000000001", "-0b10000000000000000000000000000000000000000000000000000001"),
- nc(-36028797018963968, "-36028797018963968", "-0x80000000000000", "-0o2000000000000000000", "-0b10000000000000000000000000000000000000000000000000000000"),
- nc(-36028797018963967, "-36028797018963967", "-0x7fffffffffffff", "-0o1777777777777777777", "-0b1111111111111111111111111111111111111111111111111111111"),
- nc(-18014398509481985, "-18014398509481985", "-0x40000000000001", "-0o1000000000000000001", "-0b1000000000000000000000000000000000000000000000000000001"),
- nc(-18014398509481984, "-18014398509481984", "-0x40000000000000", "-0o1000000000000000000", "-0b1000000000000000000000000000000000000000000000000000000"),
- nc(-18014398509481983, "-18014398509481983", "-0x3fffffffffffff", "-0o777777777777777777", "-0b111111111111111111111111111111111111111111111111111111"),
- nc(-10000000000000001, "-10000000000000001", "-0x2386f26fc10001", "-0o434157115760200001", "-0b100011100001101111001001101111110000010000000000000001"),
- nc(-10000000000000000, "-10000000000000000", "-0x2386f26fc10000", "-0o434157115760200000", "-0b100011100001101111001001101111110000010000000000000000"),
- nc(-9999999999999999, "-9999999999999999", "-0x2386f26fc0ffff", "-0o434157115760177777", "-0b100011100001101111001001101111110000001111111111111111"),
- nc(-9223372036854776, "-9223372036854776", "-0x20c49ba5e353f8", "-0o406111564570651770", "-0b100000110001001001101110100101111000110101001111111000"),
- nc(-9007199254740993, "-9007199254740993", "-0x20000000000001", "-0o400000000000000001", "-0b100000000000000000000000000000000000000000000000000001"),
- nc(-9007199254740992, "-9007199254740992", "-0x20000000000000", "-0o400000000000000000", "-0b100000000000000000000000000000000000000000000000000000"),
- nc(-9007199254740991, "-9007199254740991", "-0x1fffffffffffff", "-0o377777777777777777", "-0b11111111111111111111111111111111111111111111111111111"),
- nc(-4503599627370497, "-4503599627370497", "-0x10000000000001", "-0o200000000000000001", "-0b10000000000000000000000000000000000000000000000000001"),
- nc(-4503599627370496, "-4503599627370496", "-0x10000000000000", "-0o200000000000000000", "-0b10000000000000000000000000000000000000000000000000000"),
- nc(-4503599627370495, "-4503599627370495", "-0xfffffffffffff", "-0o177777777777777777", "-0b1111111111111111111111111111111111111111111111111111"),
- nc(-2251799813685249, "-2251799813685249", "-0x8000000000001", "-0o100000000000000001", "-0b1000000000000000000000000000000000000000000000000001"),
- nc(-2251799813685248, "-2251799813685248", "-0x8000000000000", "-0o100000000000000000", "-0b1000000000000000000000000000000000000000000000000000"),
- nc(-2251799813685247, "-2251799813685247", "-0x7ffffffffffff", "-0o77777777777777777", "-0b111111111111111111111111111111111111111111111111111"),
- nc(-1125899906842625, "-1125899906842625", "-0x4000000000001", "-0o40000000000000001", "-0b100000000000000000000000000000000000000000000000001"),
- nc(-1125899906842624, "-1125899906842624", "-0x4000000000000", "-0o40000000000000000", "-0b100000000000000000000000000000000000000000000000000"),
- nc(-1125899906842623, "-1125899906842623", "-0x3ffffffffffff", "-0o37777777777777777", "-0b11111111111111111111111111111111111111111111111111"),
- nc(-1000000000000001, "-1000000000000001", "-0x38d7ea4c68001", "-0o34327724461500001", "-0b11100011010111111010100100110001101000000000000001"),
- nc(-1000000000000000, "-1000000000000000", "-0x38d7ea4c68000", "-0o34327724461500000", "-0b11100011010111111010100100110001101000000000000000"),
- nc(-999999999999999, "-999999999999999", "-0x38d7ea4c67fff", "-0o34327724461477777", "-0b11100011010111111010100100110001100111111111111111"),
- nc(-922337203685477, "-922337203685477", "-0x346dc5d638865", "-0o32155613530704145", "-0b11010001101101110001011101011000111000100001100101"),
- nc(-562949953421313, "-562949953421313", "-0x2000000000001", "-0o20000000000000001", "-0b10000000000000000000000000000000000000000000000001"),
- nc(-562949953421312, "-562949953421312", "-0x2000000000000", "-0o20000000000000000", "-0b10000000000000000000000000000000000000000000000000"),
- nc(-562949953421311, "-562949953421311", "-0x1ffffffffffff", "-0o17777777777777777", "-0b1111111111111111111111111111111111111111111111111"),
- nc(-281474976710657, "-281474976710657", "-0x1000000000001", "-0o10000000000000001", "-0b1000000000000000000000000000000000000000000000001"),
- nc(-281474976710656, "-281474976710656", "-0x1000000000000", "-0o10000000000000000", "-0b1000000000000000000000000000000000000000000000000"),
- nc(-281474976710655, "-281474976710655", "-0xffffffffffff", "-0o7777777777777777", "-0b111111111111111111111111111111111111111111111111"),
- nc(-140737488355329, "-140737488355329", "-0x800000000001", "-0o4000000000000001", "-0b100000000000000000000000000000000000000000000001"),
- nc(-140737488355328, "-140737488355328", "-0x800000000000", "-0o4000000000000000", "-0b100000000000000000000000000000000000000000000000"),
- nc(-140737488355327, "-140737488355327", "-0x7fffffffffff", "-0o3777777777777777", "-0b11111111111111111111111111111111111111111111111"),
- nc(-100000000000001, "-100000000000001", "-0x5af3107a4001", "-0o2657142036440001", "-0b10110101111001100010000011110100100000000000001"),
- nc(-100000000000000, "-100000000000000", "-0x5af3107a4000", "-0o2657142036440000", "-0b10110101111001100010000011110100100000000000000"),
- nc(-99999999999999, "-99999999999999", "-0x5af3107a3fff", "-0o2657142036437777", "-0b10110101111001100010000011110100011111111111111"),
- nc(-92233720368547, "-92233720368547", "-0x53e2d6238da3", "-0o2476132610706643", "-0b10100111110001011010110001000111000110110100011"),
- nc(-70368744177665, "-70368744177665", "-0x400000000001", "-0o2000000000000001", "-0b10000000000000000000000000000000000000000000001"),
- nc(-70368744177664, "-70368744177664", "-0x400000000000", "-0o2000000000000000", "-0b10000000000000000000000000000000000000000000000"),
- nc(-70368744177663, "-70368744177663", "-0x3fffffffffff", "-0o1777777777777777", "-0b1111111111111111111111111111111111111111111111"),
- nc(-35184372088833, "-35184372088833", "-0x200000000001", "-0o1000000000000001", "-0b1000000000000000000000000000000000000000000001"),
- nc(-35184372088832, "-35184372088832", "-0x200000000000", "-0o1000000000000000", "-0b1000000000000000000000000000000000000000000000"),
- nc(-35184372088831, "-35184372088831", "-0x1fffffffffff", "-0o777777777777777", "-0b111111111111111111111111111111111111111111111"),
- nc(-17592186044417, "-17592186044417", "-0x100000000001", "-0o400000000000001", "-0b100000000000000000000000000000000000000000001"),
- nc(-17592186044416, "-17592186044416", "-0x100000000000", "-0o400000000000000", "-0b100000000000000000000000000000000000000000000"),
- nc(-17592186044415, "-17592186044415", "-0xfffffffffff", "-0o377777777777777", "-0b11111111111111111111111111111111111111111111"),
- nc(-10000000000001, "-10000000000001", "-0x9184e72a001", "-0o221411634520001", "-0b10010001100001001110011100101010000000000001"),
- nc(-10000000000000, "-10000000000000", "-0x9184e72a000", "-0o221411634520000", "-0b10010001100001001110011100101010000000000000"),
- nc(-9999999999999, "-9999999999999", "-0x9184e729fff", "-0o221411634517777", "-0b10010001100001001110011100101001111111111111"),
- nc(-9223372036854, "-9223372036854", "-0x8637bd05af6", "-0o206157364055366", "-0b10000110001101111011110100000101101011110110"),
- nc(-8796093022209, "-8796093022209", "-0x80000000001", "-0o200000000000001", "-0b10000000000000000000000000000000000000000001"),
- nc(-8796093022208, "-8796093022208", "-0x80000000000", "-0o200000000000000", "-0b10000000000000000000000000000000000000000000"),
- nc(-8796093022207, "-8796093022207", "-0x7ffffffffff", "-0o177777777777777", "-0b1111111111111111111111111111111111111111111"),
- nc(-4398046511105, "-4398046511105", "-0x40000000001", "-0o100000000000001", "-0b1000000000000000000000000000000000000000001"),
- nc(-4398046511104, "-4398046511104", "-0x40000000000", "-0o100000000000000", "-0b1000000000000000000000000000000000000000000"),
- nc(-4398046511103, "-4398046511103", "-0x3ffffffffff", "-0o77777777777777", "-0b111111111111111111111111111111111111111111"),
- nc(-2199023255553, "-2199023255553", "-0x20000000001", "-0o40000000000001", "-0b100000000000000000000000000000000000000001"),
- nc(-2199023255552, "-2199023255552", "-0x20000000000", "-0o40000000000000", "-0b100000000000000000000000000000000000000000"),
- nc(-2199023255551, "-2199023255551", "-0x1ffffffffff", "-0o37777777777777", "-0b11111111111111111111111111111111111111111"),
- nc(-1099511627777, "-1099511627777", "-0x10000000001", "-0o20000000000001", "-0b10000000000000000000000000000000000000001"),
- nc(-1099511627776, "-1099511627776", "-0x10000000000", "-0o20000000000000", "-0b10000000000000000000000000000000000000000"),
- nc(-1099511627775, "-1099511627775", "-0xffffffffff", "-0o17777777777777", "-0b1111111111111111111111111111111111111111"),
- nc(-1000000000001, "-1000000000001", "-0xe8d4a51001", "-0o16432451210001", "-0b1110100011010100101001010001000000000001"),
- nc(-1000000000000, "-1000000000000", "-0xe8d4a51000", "-0o16432451210000", "-0b1110100011010100101001010001000000000000"),
- nc(-999999999999, "-999999999999", "-0xe8d4a50fff", "-0o16432451207777", "-0b1110100011010100101001010000111111111111"),
- nc(-922337203685, "-922337203685", "-0xd6bf94d5e5", "-0o15327745152745", "-0b1101011010111111100101001101010111100101"),
- nc(-549755813889, "-549755813889", "-0x8000000001", "-0o10000000000001", "-0b1000000000000000000000000000000000000001"),
- nc(-549755813888, "-549755813888", "-0x8000000000", "-0o10000000000000", "-0b1000000000000000000000000000000000000000"),
- nc(-549755813887, "-549755813887", "-0x7fffffffff", "-0o7777777777777", "-0b111111111111111111111111111111111111111"),
- nc(-274877906945, "-274877906945", "-0x4000000001", "-0o4000000000001", "-0b100000000000000000000000000000000000001"),
- nc(-274877906944, "-274877906944", "-0x4000000000", "-0o4000000000000", "-0b100000000000000000000000000000000000000"),
- nc(-274877906943, "-274877906943", "-0x3fffffffff", "-0o3777777777777", "-0b11111111111111111111111111111111111111"),
- nc(-137438953473, "-137438953473", "-0x2000000001", "-0o2000000000001", "-0b10000000000000000000000000000000000001"),
- nc(-137438953472, "-137438953472", "-0x2000000000", "-0o2000000000000", "-0b10000000000000000000000000000000000000"),
- nc(-137438953471, "-137438953471", "-0x1fffffffff", "-0o1777777777777", "-0b1111111111111111111111111111111111111"),
- nc(-100000000001, "-100000000001", "-0x174876e801", "-0o1351035564001", "-0b1011101001000011101101110100000000001"),
- nc(-100000000000, "-100000000000", "-0x174876e800", "-0o1351035564000", "-0b1011101001000011101101110100000000000"),
- nc(-99999999999, "-99999999999", "-0x174876e7ff", "-0o1351035563777", "-0b1011101001000011101101110011111111111"),
- nc(-92233720368, "-92233720368", "-0x15798ee230", "-0o1257143561060", "-0b1010101111001100011101110001000110000"),
- nc(-68719476737, "-68719476737", "-0x1000000001", "-0o1000000000001", "-0b1000000000000000000000000000000000001"),
- nc(-68719476736, "-68719476736", "-0x1000000000", "-0o1000000000000", "-0b1000000000000000000000000000000000000"),
- nc(-68719476735, "-68719476735", "-0xfffffffff", "-0o777777777777", "-0b111111111111111111111111111111111111"),
- nc(-34359738369, "-34359738369", "-0x800000001", "-0o400000000001", "-0b100000000000000000000000000000000001"),
- nc(-34359738368, "-34359738368", "-0x800000000", "-0o400000000000", "-0b100000000000000000000000000000000000"),
- nc(-34359738367, "-34359738367", "-0x7ffffffff", "-0o377777777777", "-0b11111111111111111111111111111111111"),
- nc(-17179869185, "-17179869185", "-0x400000001", "-0o200000000001", "-0b10000000000000000000000000000000001"),
- nc(-17179869184, "-17179869184", "-0x400000000", "-0o200000000000", "-0b10000000000000000000000000000000000"),
- nc(-17179869183, "-17179869183", "-0x3ffffffff", "-0o177777777777", "-0b1111111111111111111111111111111111"),
- nc(-10000000001, "-10000000001", "-0x2540be401", "-0o112402762001", "-0b1001010100000010111110010000000001"),
- nc(-10000000000, "-10000000000", "-0x2540be400", "-0o112402762000", "-0b1001010100000010111110010000000000"),
- nc(-9999999999, "-9999999999", "-0x2540be3ff", "-0o112402761777", "-0b1001010100000010111110001111111111"),
- nc(-9223372036, "-9223372036", "-0x225c17d04", "-0o104560276404", "-0b1000100101110000010111110100000100"),
- nc(-8589934593, "-8589934593", "-0x200000001", "-0o100000000001", "-0b1000000000000000000000000000000001"),
- nc(-8589934592, "-8589934592", "-0x200000000", "-0o100000000000", "-0b1000000000000000000000000000000000"),
- nc(-8589934591, "-8589934591", "-0x1ffffffff", "-0o77777777777", "-0b111111111111111111111111111111111"),
- nc(-4294967297, "-4294967297", "-0x100000001", "-0o40000000001", "-0b100000000000000000000000000000001"),
- nc(-4294967296, "-4294967296", "-0x100000000", "-0o40000000000", "-0b100000000000000000000000000000000"),
- nc(-4294967295, "-4294967295", "-0xffffffff", "-0o37777777777", "-0b11111111111111111111111111111111"),
- nc(-2147483649, "-2147483649", "-0x80000001", "-0o20000000001", "-0b10000000000000000000000000000001"),
- nc(-2147483648, "-2147483648", "-0x80000000", "-0o20000000000", "-0b10000000000000000000000000000000"),
- nc(-2147483647, "-2147483647", "-0x7fffffff", "-0o17777777777", "-0b1111111111111111111111111111111"),
- nc(-1073741825, "-1073741825", "-0x40000001", "-0o10000000001", "-0b1000000000000000000000000000001"),
- nc(-1073741824, "-1073741824", "-0x40000000", "-0o10000000000", "-0b1000000000000000000000000000000"),
- nc(-1073741823, "-1073741823", "-0x3fffffff", "-0o7777777777", "-0b111111111111111111111111111111"),
- nc(-1000000001, "-1000000001", "-0x3b9aca01", "-0o7346545001", "-0b111011100110101100101000000001"),
- nc(-1000000000, "-1000000000", "-0x3b9aca00", "-0o7346545000", "-0b111011100110101100101000000000"),
- nc(-999999999, "-999999999", "-0x3b9ac9ff", "-0o7346544777", "-0b111011100110101100100111111111"),
- nc(-922337203, "-922337203", "-0x36f9bfb3", "-0o6676337663", "-0b110110111110011011111110110011"),
- nc(-536870913, "-536870913", "-0x20000001", "-0o4000000001", "-0b100000000000000000000000000001"),
- nc(-536870912, "-536870912", "-0x20000000", "-0o4000000000", "-0b100000000000000000000000000000"),
- nc(-536870911, "-536870911", "-0x1fffffff", "-0o3777777777", "-0b11111111111111111111111111111"),
- nc(-268435457, "-268435457", "-0x10000001", "-0o2000000001", "-0b10000000000000000000000000001"),
- nc(-268435456, "-268435456", "-0x10000000", "-0o2000000000", "-0b10000000000000000000000000000"),
- nc(-268435455, "-268435455", "-0xfffffff", "-0o1777777777", "-0b1111111111111111111111111111"),
- nc(-134217729, "-134217729", "-0x8000001", "-0o1000000001", "-0b1000000000000000000000000001"),
- nc(-134217728, "-134217728", "-0x8000000", "-0o1000000000", "-0b1000000000000000000000000000"),
- nc(-134217727, "-134217727", "-0x7ffffff", "-0o777777777", "-0b111111111111111111111111111"),
- nc(-100000001, "-100000001", "-0x5f5e101", "-0o575360401", "-0b101111101011110000100000001"),
- nc(-100000000, "-100000000", "-0x5f5e100", "-0o575360400", "-0b101111101011110000100000000"),
- nc(-99999999, "-99999999", "-0x5f5e0ff", "-0o575360377", "-0b101111101011110000011111111"),
- nc(-92233720, "-92233720", "-0x57f5ff8", "-0o537657770", "-0b101011111110101111111111000"),
- nc(-67108865, "-67108865", "-0x4000001", "-0o400000001", "-0b100000000000000000000000001"),
- nc(-67108864, "-67108864", "-0x4000000", "-0o400000000", "-0b100000000000000000000000000"),
- nc(-67108863, "-67108863", "-0x3ffffff", "-0o377777777", "-0b11111111111111111111111111"),
- nc(-33554433, "-33554433", "-0x2000001", "-0o200000001", "-0b10000000000000000000000001"),
- nc(-33554432, "-33554432", "-0x2000000", "-0o200000000", "-0b10000000000000000000000000"),
- nc(-33554431, "-33554431", "-0x1ffffff", "-0o177777777", "-0b1111111111111111111111111"),
- nc(-16777217, "-16777217", "-0x1000001", "-0o100000001", "-0b1000000000000000000000001"),
- nc(-16777216, "-16777216", "-0x1000000", "-0o100000000", "-0b1000000000000000000000000"),
- nc(-16777215, "-16777215", "-0xffffff", "-0o77777777", "-0b111111111111111111111111"),
- nc(-10000001, "-10000001", "-0x989681", "-0o46113201", "-0b100110001001011010000001"),
- nc(-10000000, "-10000000", "-0x989680", "-0o46113200", "-0b100110001001011010000000"),
- nc(-9999999, "-9999999", "-0x98967f", "-0o46113177", "-0b100110001001011001111111"),
- nc(-9223372, "-9223372", "-0x8cbccc", "-0o43136314", "-0b100011001011110011001100"),
- nc(-8388609, "-8388609", "-0x800001", "-0o40000001", "-0b100000000000000000000001"),
- nc(-8388608, "-8388608", "-0x800000", "-0o40000000", "-0b100000000000000000000000"),
- nc(-8388607, "-8388607", "-0x7fffff", "-0o37777777", "-0b11111111111111111111111"),
- nc(-4194305, "-4194305", "-0x400001", "-0o20000001", "-0b10000000000000000000001"),
- nc(-4194304, "-4194304", "-0x400000", "-0o20000000", "-0b10000000000000000000000"),
- nc(-4194303, "-4194303", "-0x3fffff", "-0o17777777", "-0b1111111111111111111111"),
- nc(-2097153, "-2097153", "-0x200001", "-0o10000001", "-0b1000000000000000000001"),
- nc(-2097152, "-2097152", "-0x200000", "-0o10000000", "-0b1000000000000000000000"),
- nc(-2097151, "-2097151", "-0x1fffff", "-0o7777777", "-0b111111111111111111111"),
- nc(-1048577, "-1048577", "-0x100001", "-0o4000001", "-0b100000000000000000001"),
- nc(-1048576, "-1048576", "-0x100000", "-0o4000000", "-0b100000000000000000000"),
- nc(-1048575, "-1048575", "-0xfffff", "-0o3777777", "-0b11111111111111111111"),
- nc(-1000001, "-1000001", "-0xf4241", "-0o3641101", "-0b11110100001001000001"),
- nc(-1000000, "-1000000", "-0xf4240", "-0o3641100", "-0b11110100001001000000"),
- nc(-999999, "-999999", "-0xf423f", "-0o3641077", "-0b11110100001000111111"),
- nc(-922337, "-922337", "-0xe12e1", "-0o3411341", "-0b11100001001011100001"),
- nc(-524289, "-524289", "-0x80001", "-0o2000001", "-0b10000000000000000001"),
- nc(-524288, "-524288", "-0x80000", "-0o2000000", "-0b10000000000000000000"),
- nc(-524287, "-524287", "-0x7ffff", "-0o1777777", "-0b1111111111111111111"),
- nc(-262145, "-262145", "-0x40001", "-0o1000001", "-0b1000000000000000001"),
- nc(-262144, "-262144", "-0x40000", "-0o1000000", "-0b1000000000000000000"),
- nc(-262143, "-262143", "-0x3ffff", "-0o777777", "-0b111111111111111111"),
- nc(-131073, "-131073", "-0x20001", "-0o400001", "-0b100000000000000001"),
- nc(-131072, "-131072", "-0x20000", "-0o400000", "-0b100000000000000000"),
- nc(-131071, "-131071", "-0x1ffff", "-0o377777", "-0b11111111111111111"),
- nc(-100001, "-100001", "-0x186a1", "-0o303241", "-0b11000011010100001"),
- nc(-100000, "-100000", "-0x186a0", "-0o303240", "-0b11000011010100000"),
- nc(-99999, "-99999", "-0x1869f", "-0o303237", "-0b11000011010011111"),
- nc(-92233, "-92233", "-0x16849", "-0o264111", "-0b10110100001001001"),
- nc(-65537, "-65537", "-0x10001", "-0o200001", "-0b10000000000000001"),
- nc(-65536, "-65536", "-0x10000", "-0o200000", "-0b10000000000000000"),
- nc(-65535, "-65535", "-0xffff", "-0o177777", "-0b1111111111111111"),
- nc(-32769, "-32769", "-0x8001", "-0o100001", "-0b1000000000000001"),
- nc(-32768, "-32768", "-0x8000", "-0o100000", "-0b1000000000000000"),
- nc(-32767, "-32767", "-0x7fff", "-0o77777", "-0b111111111111111"),
- nc(-16385, "-16385", "-0x4001", "-0o40001", "-0b100000000000001"),
- nc(-16384, "-16384", "-0x4000", "-0o40000", "-0b100000000000000"),
- nc(-16383, "-16383", "-0x3fff", "-0o37777", "-0b11111111111111"),
- nc(-10001, "-10001", "-0x2711", "-0o23421", "-0b10011100010001"),
- nc(-10000, "-10000", "-0x2710", "-0o23420", "-0b10011100010000"),
- nc(-9999, "-9999", "-0x270f", "-0o23417", "-0b10011100001111"),
- nc(-9223, "-9223", "-0x2407", "-0o22007", "-0b10010000000111"),
- nc(-8193, "-8193", "-0x2001", "-0o20001", "-0b10000000000001"),
- nc(-8192, "-8192", "-0x2000", "-0o20000", "-0b10000000000000"),
- nc(-8191, "-8191", "-0x1fff", "-0o17777", "-0b1111111111111"),
- nc(-4097, "-4097", "-0x1001", "-0o10001", "-0b1000000000001"),
- nc(-4096, "-4096", "-0x1000", "-0o10000", "-0b1000000000000"),
- nc(-4095, "-4095", "-0xfff", "-0o7777", "-0b111111111111"),
- nc(-2049, "-2049", "-0x801", "-0o4001", "-0b100000000001"),
- nc(-2048, "-2048", "-0x800", "-0o4000", "-0b100000000000"),
- nc(-2047, "-2047", "-0x7ff", "-0o3777", "-0b11111111111"),
- nc(-1025, "-1025", "-0x401", "-0o2001", "-0b10000000001"),
- nc(-1024, "-1024", "-0x400", "-0o2000", "-0b10000000000"),
- nc(-1023, "-1023", "-0x3ff", "-0o1777", "-0b1111111111"),
- nc(-1001, "-1001", "-0x3e9", "-0o1751", "-0b1111101001"),
- nc(-1000, "-1000", "-0x3e8", "-0o1750", "-0b1111101000"),
- nc(-999, "-999", "-0x3e7", "-0o1747", "-0b1111100111"),
- nc(-922, "-922", "-0x39a", "-0o1632", "-0b1110011010"),
- nc(-513, "-513", "-0x201", "-0o1001", "-0b1000000001"),
- nc(-512, "-512", "-0x200", "-0o1000", "-0b1000000000"),
- nc(-511, "-511", "-0x1ff", "-0o777", "-0b111111111"),
- nc(-257, "-257", "-0x101", "-0o401", "-0b100000001"),
- nc(-256, "-256", "-0x100", "-0o400", "-0b100000000"),
- nc(-255, "-255", "-0xff", "-0o377", "-0b11111111"),
- nc(-129, "-129", "-0x81", "-0o201", "-0b10000001"),
- nc(-128, "-128", "-0x80", "-0o200", "-0b10000000"),
- nc(-127, "-127", "-0x7f", "-0o177", "-0b1111111"),
- nc(-101, "-101", "-0x65", "-0o145", "-0b1100101"),
- nc(-100, "-100", "-0x64", "-0o144", "-0b1100100"),
- nc(-99, "-99", "-0x63", "-0o143", "-0b1100011"),
- nc(-92, "-92", "-0x5c", "-0o134", "-0b1011100"),
- nc(-65, "-65", "-0x41", "-0o101", "-0b1000001"),
- nc(-64, "-64", "-0x40", "-0o100", "-0b1000000"),
- nc(-63, "-63", "-0x3f", "-0o77", "-0b111111"),
- nc(-33, "-33", "-0x21", "-0o41", "-0b100001"),
- nc(-32, "-32", "-0x20", "-0o40", "-0b100000"),
- nc(-31, "-31", "-0x1f", "-0o37", "-0b11111"),
- nc(-17, "-17", "-0x11", "-0o21", "-0b10001"),
- nc(-16, "-16", "-0x10", "-0o20", "-0b10000"),
- nc(-15, "-15", "-0xf", "-0o17", "-0b1111"),
- nc(-11, "-11", "-0xb", "-0o13", "-0b1011"),
- nc(-10, "-10", "-0xa", "-0o12", "-0b1010"),
- nc(-9, "-9", "-0x9", "-0o11", "-0b1001"),
- nc(-8, "-8", "-0x8", "-0o10", "-0b1000"),
- nc(-7, "-7", "-0x7", "-0o7", "-0b111"),
- nc(-6, "-6", "-0x6", "-0o6", "-0b110"),
- nc(-5, "-5", "-0x5", "-0o5", "-0b101"),
- nc(-4, "-4", "-0x4", "-0o4", "-0b100"),
- nc(-3, "-3", "-0x3", "-0o3", "-0b11"),
- nc(-2, "-2", "-0x2", "-0o2", "-0b10"),
- nc(-1, "-1", "-0x1", "-0o1", "-0b1"),
- nc(0, "0", "0x0", "0o0", "0b0"),
- nc(1, "1", "0x1", "0o1", "0b1"),
- nc(2, "2", "0x2", "0o2", "0b10"),
- nc(3, "3", "0x3", "0o3", "0b11"),
- nc(4, "4", "0x4", "0o4", "0b100"),
- nc(5, "5", "0x5", "0o5", "0b101"),
- nc(6, "6", "0x6", "0o6", "0b110"),
- nc(7, "7", "0x7", "0o7", "0b111"),
- nc(8, "8", "0x8", "0o10", "0b1000"),
- nc(9, "9", "0x9", "0o11", "0b1001"),
- nc(10, "10", "0xa", "0o12", "0b1010"),
- nc(11, "11", "0xb", "0o13", "0b1011"),
- nc(15, "15", "0xf", "0o17", "0b1111"),
- nc(16, "16", "0x10", "0o20", "0b10000"),
- nc(17, "17", "0x11", "0o21", "0b10001"),
- nc(31, "31", "0x1f", "0o37", "0b11111"),
- nc(32, "32", "0x20", "0o40", "0b100000"),
- nc(33, "33", "0x21", "0o41", "0b100001"),
- nc(63, "63", "0x3f", "0o77", "0b111111"),
- nc(64, "64", "0x40", "0o100", "0b1000000"),
- nc(65, "65", "0x41", "0o101", "0b1000001"),
- nc(91, "91", "0x5b", "0o133", "0b1011011"),
- nc(92, "92", "0x5c", "0o134", "0b1011100"),
- nc(93, "93", "0x5d", "0o135", "0b1011101"),
- nc(99, "99", "0x63", "0o143", "0b1100011"),
- nc(100, "100", "0x64", "0o144", "0b1100100"),
- nc(101, "101", "0x65", "0o145", "0b1100101"),
- nc(127, "127", "0x7f", "0o177", "0b1111111"),
- nc(128, "128", "0x80", "0o200", "0b10000000"),
- nc(129, "129", "0x81", "0o201", "0b10000001"),
- nc(255, "255", "0xff", "0o377", "0b11111111"),
- nc(256, "256", "0x100", "0o400", "0b100000000"),
- nc(257, "257", "0x101", "0o401", "0b100000001"),
- nc(511, "511", "0x1ff", "0o777", "0b111111111"),
- nc(512, "512", "0x200", "0o1000", "0b1000000000"),
- nc(513, "513", "0x201", "0o1001", "0b1000000001"),
- nc(921, "921", "0x399", "0o1631", "0b1110011001"),
- nc(922, "922", "0x39a", "0o1632", "0b1110011010"),
- nc(923, "923", "0x39b", "0o1633", "0b1110011011"),
- nc(999, "999", "0x3e7", "0o1747", "0b1111100111"),
- nc(1000, "1000", "0x3e8", "0o1750", "0b1111101000"),
- nc(1001, "1001", "0x3e9", "0o1751", "0b1111101001"),
- nc(1023, "1023", "0x3ff", "0o1777", "0b1111111111"),
- nc(1024, "1024", "0x400", "0o2000", "0b10000000000"),
- nc(1025, "1025", "0x401", "0o2001", "0b10000000001"),
- nc(2047, "2047", "0x7ff", "0o3777", "0b11111111111"),
- nc(2048, "2048", "0x800", "0o4000", "0b100000000000"),
- nc(2049, "2049", "0x801", "0o4001", "0b100000000001"),
- nc(4095, "4095", "0xfff", "0o7777", "0b111111111111"),
- nc(4096, "4096", "0x1000", "0o10000", "0b1000000000000"),
- nc(4097, "4097", "0x1001", "0o10001", "0b1000000000001"),
- nc(8191, "8191", "0x1fff", "0o17777", "0b1111111111111"),
- nc(8192, "8192", "0x2000", "0o20000", "0b10000000000000"),
- nc(8193, "8193", "0x2001", "0o20001", "0b10000000000001"),
- nc(9222, "9222", "0x2406", "0o22006", "0b10010000000110"),
- nc(9223, "9223", "0x2407", "0o22007", "0b10010000000111"),
- nc(9224, "9224", "0x2408", "0o22010", "0b10010000001000"),
- nc(9999, "9999", "0x270f", "0o23417", "0b10011100001111"),
- nc(10000, "10000", "0x2710", "0o23420", "0b10011100010000"),
- nc(10001, "10001", "0x2711", "0o23421", "0b10011100010001"),
- nc(16383, "16383", "0x3fff", "0o37777", "0b11111111111111"),
- nc(16384, "16384", "0x4000", "0o40000", "0b100000000000000"),
- nc(16385, "16385", "0x4001", "0o40001", "0b100000000000001"),
- nc(32767, "32767", "0x7fff", "0o77777", "0b111111111111111"),
- nc(32768, "32768", "0x8000", "0o100000", "0b1000000000000000"),
- nc(32769, "32769", "0x8001", "0o100001", "0b1000000000000001"),
- nc(65535, "65535", "0xffff", "0o177777", "0b1111111111111111"),
- nc(65536, "65536", "0x10000", "0o200000", "0b10000000000000000"),
- nc(65537, "65537", "0x10001", "0o200001", "0b10000000000000001"),
- nc(92232, "92232", "0x16848", "0o264110", "0b10110100001001000"),
- nc(92233, "92233", "0x16849", "0o264111", "0b10110100001001001"),
- nc(92234, "92234", "0x1684a", "0o264112", "0b10110100001001010"),
- nc(99999, "99999", "0x1869f", "0o303237", "0b11000011010011111"),
- nc(100000, "100000", "0x186a0", "0o303240", "0b11000011010100000"),
- nc(100001, "100001", "0x186a1", "0o303241", "0b11000011010100001"),
- nc(131071, "131071", "0x1ffff", "0o377777", "0b11111111111111111"),
- nc(131072, "131072", "0x20000", "0o400000", "0b100000000000000000"),
- nc(131073, "131073", "0x20001", "0o400001", "0b100000000000000001"),
- nc(262143, "262143", "0x3ffff", "0o777777", "0b111111111111111111"),
- nc(262144, "262144", "0x40000", "0o1000000", "0b1000000000000000000"),
- nc(262145, "262145", "0x40001", "0o1000001", "0b1000000000000000001"),
- nc(524287, "524287", "0x7ffff", "0o1777777", "0b1111111111111111111"),
- nc(524288, "524288", "0x80000", "0o2000000", "0b10000000000000000000"),
- nc(524289, "524289", "0x80001", "0o2000001", "0b10000000000000000001"),
- nc(922336, "922336", "0xe12e0", "0o3411340", "0b11100001001011100000"),
- nc(922337, "922337", "0xe12e1", "0o3411341", "0b11100001001011100001"),
- nc(922338, "922338", "0xe12e2", "0o3411342", "0b11100001001011100010"),
- nc(999999, "999999", "0xf423f", "0o3641077", "0b11110100001000111111"),
- nc(1000000, "1000000", "0xf4240", "0o3641100", "0b11110100001001000000"),
- nc(1000001, "1000001", "0xf4241", "0o3641101", "0b11110100001001000001"),
- nc(1048575, "1048575", "0xfffff", "0o3777777", "0b11111111111111111111"),
- nc(1048576, "1048576", "0x100000", "0o4000000", "0b100000000000000000000"),
- nc(1048577, "1048577", "0x100001", "0o4000001", "0b100000000000000000001"),
- nc(2097151, "2097151", "0x1fffff", "0o7777777", "0b111111111111111111111"),
- nc(2097152, "2097152", "0x200000", "0o10000000", "0b1000000000000000000000"),
- nc(2097153, "2097153", "0x200001", "0o10000001", "0b1000000000000000000001"),
- nc(4194303, "4194303", "0x3fffff", "0o17777777", "0b1111111111111111111111"),
- nc(4194304, "4194304", "0x400000", "0o20000000", "0b10000000000000000000000"),
- nc(4194305, "4194305", "0x400001", "0o20000001", "0b10000000000000000000001"),
- nc(8388607, "8388607", "0x7fffff", "0o37777777", "0b11111111111111111111111"),
- nc(8388608, "8388608", "0x800000", "0o40000000", "0b100000000000000000000000"),
- nc(8388609, "8388609", "0x800001", "0o40000001", "0b100000000000000000000001"),
- nc(9223371, "9223371", "0x8cbccb", "0o43136313", "0b100011001011110011001011"),
- nc(9223372, "9223372", "0x8cbccc", "0o43136314", "0b100011001011110011001100"),
- nc(9223373, "9223373", "0x8cbccd", "0o43136315", "0b100011001011110011001101"),
- nc(9999999, "9999999", "0x98967f", "0o46113177", "0b100110001001011001111111"),
- nc(10000000, "10000000", "0x989680", "0o46113200", "0b100110001001011010000000"),
- nc(10000001, "10000001", "0x989681", "0o46113201", "0b100110001001011010000001"),
- nc(16777215, "16777215", "0xffffff", "0o77777777", "0b111111111111111111111111"),
- nc(16777216, "16777216", "0x1000000", "0o100000000", "0b1000000000000000000000000"),
- nc(16777217, "16777217", "0x1000001", "0o100000001", "0b1000000000000000000000001"),
- nc(33554431, "33554431", "0x1ffffff", "0o177777777", "0b1111111111111111111111111"),
- nc(33554432, "33554432", "0x2000000", "0o200000000", "0b10000000000000000000000000"),
- nc(33554433, "33554433", "0x2000001", "0o200000001", "0b10000000000000000000000001"),
- nc(67108863, "67108863", "0x3ffffff", "0o377777777", "0b11111111111111111111111111"),
- nc(67108864, "67108864", "0x4000000", "0o400000000", "0b100000000000000000000000000"),
- nc(67108865, "67108865", "0x4000001", "0o400000001", "0b100000000000000000000000001"),
- nc(92233719, "92233719", "0x57f5ff7", "0o537657767", "0b101011111110101111111110111"),
- nc(92233720, "92233720", "0x57f5ff8", "0o537657770", "0b101011111110101111111111000"),
- nc(92233721, "92233721", "0x57f5ff9", "0o537657771", "0b101011111110101111111111001"),
- nc(99999999, "99999999", "0x5f5e0ff", "0o575360377", "0b101111101011110000011111111"),
- nc(100000000, "100000000", "0x5f5e100", "0o575360400", "0b101111101011110000100000000"),
- nc(100000001, "100000001", "0x5f5e101", "0o575360401", "0b101111101011110000100000001"),
- nc(134217727, "134217727", "0x7ffffff", "0o777777777", "0b111111111111111111111111111"),
- nc(134217728, "134217728", "0x8000000", "0o1000000000", "0b1000000000000000000000000000"),
- nc(134217729, "134217729", "0x8000001", "0o1000000001", "0b1000000000000000000000000001"),
- nc(268435455, "268435455", "0xfffffff", "0o1777777777", "0b1111111111111111111111111111"),
- nc(268435456, "268435456", "0x10000000", "0o2000000000", "0b10000000000000000000000000000"),
- nc(268435457, "268435457", "0x10000001", "0o2000000001", "0b10000000000000000000000000001"),
- nc(536870911, "536870911", "0x1fffffff", "0o3777777777", "0b11111111111111111111111111111"),
- nc(536870912, "536870912", "0x20000000", "0o4000000000", "0b100000000000000000000000000000"),
- nc(536870913, "536870913", "0x20000001", "0o4000000001", "0b100000000000000000000000000001"),
- nc(922337202, "922337202", "0x36f9bfb2", "0o6676337662", "0b110110111110011011111110110010"),
- nc(922337203, "922337203", "0x36f9bfb3", "0o6676337663", "0b110110111110011011111110110011"),
- nc(922337204, "922337204", "0x36f9bfb4", "0o6676337664", "0b110110111110011011111110110100"),
- nc(999999999, "999999999", "0x3b9ac9ff", "0o7346544777", "0b111011100110101100100111111111"),
- nc(1000000000, "1000000000", "0x3b9aca00", "0o7346545000", "0b111011100110101100101000000000"),
- nc(1000000001, "1000000001", "0x3b9aca01", "0o7346545001", "0b111011100110101100101000000001"),
- nc(1073741823, "1073741823", "0x3fffffff", "0o7777777777", "0b111111111111111111111111111111"),
- nc(1073741824, "1073741824", "0x40000000", "0o10000000000", "0b1000000000000000000000000000000"),
- nc(1073741825, "1073741825", "0x40000001", "0o10000000001", "0b1000000000000000000000000000001"),
- nc(2147483647, "2147483647", "0x7fffffff", "0o17777777777", "0b1111111111111111111111111111111"),
- nc(2147483648, "2147483648", "0x80000000", "0o20000000000", "0b10000000000000000000000000000000"),
- nc(2147483649, "2147483649", "0x80000001", "0o20000000001", "0b10000000000000000000000000000001"),
- nc(4294967295, "4294967295", "0xffffffff", "0o37777777777", "0b11111111111111111111111111111111"),
- nc(4294967296, "4294967296", "0x100000000", "0o40000000000", "0b100000000000000000000000000000000"),
- nc(4294967297, "4294967297", "0x100000001", "0o40000000001", "0b100000000000000000000000000000001"),
- nc(8589934591, "8589934591", "0x1ffffffff", "0o77777777777", "0b111111111111111111111111111111111"),
- nc(8589934592, "8589934592", "0x200000000", "0o100000000000", "0b1000000000000000000000000000000000"),
- nc(8589934593, "8589934593", "0x200000001", "0o100000000001", "0b1000000000000000000000000000000001"),
- nc(9223372035, "9223372035", "0x225c17d03", "0o104560276403", "0b1000100101110000010111110100000011"),
- nc(9223372036, "9223372036", "0x225c17d04", "0o104560276404", "0b1000100101110000010111110100000100"),
- nc(9223372037, "9223372037", "0x225c17d05", "0o104560276405", "0b1000100101110000010111110100000101"),
- nc(9999999999, "9999999999", "0x2540be3ff", "0o112402761777", "0b1001010100000010111110001111111111"),
- nc(10000000000, "10000000000", "0x2540be400", "0o112402762000", "0b1001010100000010111110010000000000"),
- nc(10000000001, "10000000001", "0x2540be401", "0o112402762001", "0b1001010100000010111110010000000001"),
- nc(17179869183, "17179869183", "0x3ffffffff", "0o177777777777", "0b1111111111111111111111111111111111"),
- nc(17179869184, "17179869184", "0x400000000", "0o200000000000", "0b10000000000000000000000000000000000"),
- nc(17179869185, "17179869185", "0x400000001", "0o200000000001", "0b10000000000000000000000000000000001"),
- nc(34359738367, "34359738367", "0x7ffffffff", "0o377777777777", "0b11111111111111111111111111111111111"),
- nc(34359738368, "34359738368", "0x800000000", "0o400000000000", "0b100000000000000000000000000000000000"),
- nc(34359738369, "34359738369", "0x800000001", "0o400000000001", "0b100000000000000000000000000000000001"),
- nc(68719476735, "68719476735", "0xfffffffff", "0o777777777777", "0b111111111111111111111111111111111111"),
- nc(68719476736, "68719476736", "0x1000000000", "0o1000000000000", "0b1000000000000000000000000000000000000"),
- nc(68719476737, "68719476737", "0x1000000001", "0o1000000000001", "0b1000000000000000000000000000000000001"),
- nc(92233720367, "92233720367", "0x15798ee22f", "0o1257143561057", "0b1010101111001100011101110001000101111"),
- nc(92233720368, "92233720368", "0x15798ee230", "0o1257143561060", "0b1010101111001100011101110001000110000"),
- nc(92233720369, "92233720369", "0x15798ee231", "0o1257143561061", "0b1010101111001100011101110001000110001"),
- nc(99999999999, "99999999999", "0x174876e7ff", "0o1351035563777", "0b1011101001000011101101110011111111111"),
- nc(100000000000, "100000000000", "0x174876e800", "0o1351035564000", "0b1011101001000011101101110100000000000"),
- nc(100000000001, "100000000001", "0x174876e801", "0o1351035564001", "0b1011101001000011101101110100000000001"),
- nc(137438953471, "137438953471", "0x1fffffffff", "0o1777777777777", "0b1111111111111111111111111111111111111"),
- nc(137438953472, "137438953472", "0x2000000000", "0o2000000000000", "0b10000000000000000000000000000000000000"),
- nc(137438953473, "137438953473", "0x2000000001", "0o2000000000001", "0b10000000000000000000000000000000000001"),
- nc(274877906943, "274877906943", "0x3fffffffff", "0o3777777777777", "0b11111111111111111111111111111111111111"),
- nc(274877906944, "274877906944", "0x4000000000", "0o4000000000000", "0b100000000000000000000000000000000000000"),
- nc(274877906945, "274877906945", "0x4000000001", "0o4000000000001", "0b100000000000000000000000000000000000001"),
- nc(549755813887, "549755813887", "0x7fffffffff", "0o7777777777777", "0b111111111111111111111111111111111111111"),
- nc(549755813888, "549755813888", "0x8000000000", "0o10000000000000", "0b1000000000000000000000000000000000000000"),
- nc(549755813889, "549755813889", "0x8000000001", "0o10000000000001", "0b1000000000000000000000000000000000000001"),
- nc(922337203684, "922337203684", "0xd6bf94d5e4", "0o15327745152744", "0b1101011010111111100101001101010111100100"),
- nc(922337203685, "922337203685", "0xd6bf94d5e5", "0o15327745152745", "0b1101011010111111100101001101010111100101"),
- nc(922337203686, "922337203686", "0xd6bf94d5e6", "0o15327745152746", "0b1101011010111111100101001101010111100110"),
- nc(999999999999, "999999999999", "0xe8d4a50fff", "0o16432451207777", "0b1110100011010100101001010000111111111111"),
- nc(1000000000000, "1000000000000", "0xe8d4a51000", "0o16432451210000", "0b1110100011010100101001010001000000000000"),
- nc(1000000000001, "1000000000001", "0xe8d4a51001", "0o16432451210001", "0b1110100011010100101001010001000000000001"),
- nc(1099511627775, "1099511627775", "0xffffffffff", "0o17777777777777", "0b1111111111111111111111111111111111111111"),
- nc(1099511627776, "1099511627776", "0x10000000000", "0o20000000000000", "0b10000000000000000000000000000000000000000"),
- nc(1099511627777, "1099511627777", "0x10000000001", "0o20000000000001", "0b10000000000000000000000000000000000000001"),
- nc(2199023255551, "2199023255551", "0x1ffffffffff", "0o37777777777777", "0b11111111111111111111111111111111111111111"),
- nc(2199023255552, "2199023255552", "0x20000000000", "0o40000000000000", "0b100000000000000000000000000000000000000000"),
- nc(2199023255553, "2199023255553", "0x20000000001", "0o40000000000001", "0b100000000000000000000000000000000000000001"),
- nc(4398046511103, "4398046511103", "0x3ffffffffff", "0o77777777777777", "0b111111111111111111111111111111111111111111"),
- nc(4398046511104, "4398046511104", "0x40000000000", "0o100000000000000", "0b1000000000000000000000000000000000000000000"),
- nc(4398046511105, "4398046511105", "0x40000000001", "0o100000000000001", "0b1000000000000000000000000000000000000000001"),
- nc(8796093022207, "8796093022207", "0x7ffffffffff", "0o177777777777777", "0b1111111111111111111111111111111111111111111"),
- nc(8796093022208, "8796093022208", "0x80000000000", "0o200000000000000", "0b10000000000000000000000000000000000000000000"),
- nc(8796093022209, "8796093022209", "0x80000000001", "0o200000000000001", "0b10000000000000000000000000000000000000000001"),
- nc(9223372036853, "9223372036853", "0x8637bd05af5", "0o206157364055365", "0b10000110001101111011110100000101101011110101"),
- nc(9223372036854, "9223372036854", "0x8637bd05af6", "0o206157364055366", "0b10000110001101111011110100000101101011110110"),
- nc(9223372036855, "9223372036855", "0x8637bd05af7", "0o206157364055367", "0b10000110001101111011110100000101101011110111"),
- nc(9999999999999, "9999999999999", "0x9184e729fff", "0o221411634517777", "0b10010001100001001110011100101001111111111111"),
- nc(10000000000000, "10000000000000", "0x9184e72a000", "0o221411634520000", "0b10010001100001001110011100101010000000000000"),
- nc(10000000000001, "10000000000001", "0x9184e72a001", "0o221411634520001", "0b10010001100001001110011100101010000000000001"),
- nc(17592186044415, "17592186044415", "0xfffffffffff", "0o377777777777777", "0b11111111111111111111111111111111111111111111"),
- nc(17592186044416, "17592186044416", "0x100000000000", "0o400000000000000", "0b100000000000000000000000000000000000000000000"),
- nc(17592186044417, "17592186044417", "0x100000000001", "0o400000000000001", "0b100000000000000000000000000000000000000000001"),
- nc(35184372088831, "35184372088831", "0x1fffffffffff", "0o777777777777777", "0b111111111111111111111111111111111111111111111"),
- nc(35184372088832, "35184372088832", "0x200000000000", "0o1000000000000000", "0b1000000000000000000000000000000000000000000000"),
- nc(35184372088833, "35184372088833", "0x200000000001", "0o1000000000000001", "0b1000000000000000000000000000000000000000000001"),
- nc(70368744177663, "70368744177663", "0x3fffffffffff", "0o1777777777777777", "0b1111111111111111111111111111111111111111111111"),
- nc(70368744177664, "70368744177664", "0x400000000000", "0o2000000000000000", "0b10000000000000000000000000000000000000000000000"),
- nc(70368744177665, "70368744177665", "0x400000000001", "0o2000000000000001", "0b10000000000000000000000000000000000000000000001"),
- nc(92233720368546, "92233720368546", "0x53e2d6238da2", "0o2476132610706642", "0b10100111110001011010110001000111000110110100010"),
- nc(92233720368547, "92233720368547", "0x53e2d6238da3", "0o2476132610706643", "0b10100111110001011010110001000111000110110100011"),
- nc(92233720368548, "92233720368548", "0x53e2d6238da4", "0o2476132610706644", "0b10100111110001011010110001000111000110110100100"),
- nc(99999999999999, "99999999999999", "0x5af3107a3fff", "0o2657142036437777", "0b10110101111001100010000011110100011111111111111"),
- nc(100000000000000, "100000000000000", "0x5af3107a4000", "0o2657142036440000", "0b10110101111001100010000011110100100000000000000"),
- nc(100000000000001, "100000000000001", "0x5af3107a4001", "0o2657142036440001", "0b10110101111001100010000011110100100000000000001"),
- nc(140737488355327, "140737488355327", "0x7fffffffffff", "0o3777777777777777", "0b11111111111111111111111111111111111111111111111"),
- nc(140737488355328, "140737488355328", "0x800000000000", "0o4000000000000000", "0b100000000000000000000000000000000000000000000000"),
- nc(140737488355329, "140737488355329", "0x800000000001", "0o4000000000000001", "0b100000000000000000000000000000000000000000000001"),
- nc(281474976710655, "281474976710655", "0xffffffffffff", "0o7777777777777777", "0b111111111111111111111111111111111111111111111111"),
- nc(281474976710656, "281474976710656", "0x1000000000000", "0o10000000000000000", "0b1000000000000000000000000000000000000000000000000"),
- nc(281474976710657, "281474976710657", "0x1000000000001", "0o10000000000000001", "0b1000000000000000000000000000000000000000000000001"),
- nc(562949953421311, "562949953421311", "0x1ffffffffffff", "0o17777777777777777", "0b1111111111111111111111111111111111111111111111111"),
- nc(562949953421312, "562949953421312", "0x2000000000000", "0o20000000000000000", "0b10000000000000000000000000000000000000000000000000"),
- nc(562949953421313, "562949953421313", "0x2000000000001", "0o20000000000000001", "0b10000000000000000000000000000000000000000000000001"),
- nc(922337203685476, "922337203685476", "0x346dc5d638864", "0o32155613530704144", "0b11010001101101110001011101011000111000100001100100"),
- nc(922337203685477, "922337203685477", "0x346dc5d638865", "0o32155613530704145", "0b11010001101101110001011101011000111000100001100101"),
- nc(922337203685478, "922337203685478", "0x346dc5d638866", "0o32155613530704146", "0b11010001101101110001011101011000111000100001100110"),
- nc(999999999999999, "999999999999999", "0x38d7ea4c67fff", "0o34327724461477777", "0b11100011010111111010100100110001100111111111111111"),
- nc(1000000000000000, "1000000000000000", "0x38d7ea4c68000", "0o34327724461500000", "0b11100011010111111010100100110001101000000000000000"),
- nc(1000000000000001, "1000000000000001", "0x38d7ea4c68001", "0o34327724461500001", "0b11100011010111111010100100110001101000000000000001"),
- nc(1125899906842623, "1125899906842623", "0x3ffffffffffff", "0o37777777777777777", "0b11111111111111111111111111111111111111111111111111"),
- nc(1125899906842624, "1125899906842624", "0x4000000000000", "0o40000000000000000", "0b100000000000000000000000000000000000000000000000000"),
- nc(1125899906842625, "1125899906842625", "0x4000000000001", "0o40000000000000001", "0b100000000000000000000000000000000000000000000000001"),
- nc(2251799813685247, "2251799813685247", "0x7ffffffffffff", "0o77777777777777777", "0b111111111111111111111111111111111111111111111111111"),
- nc(2251799813685248, "2251799813685248", "0x8000000000000", "0o100000000000000000", "0b1000000000000000000000000000000000000000000000000000"),
- nc(2251799813685249, "2251799813685249", "0x8000000000001", "0o100000000000000001", "0b1000000000000000000000000000000000000000000000000001"),
- nc(4503599627370495, "4503599627370495", "0xfffffffffffff", "0o177777777777777777", "0b1111111111111111111111111111111111111111111111111111"),
- nc(4503599627370496, "4503599627370496", "0x10000000000000", "0o200000000000000000", "0b10000000000000000000000000000000000000000000000000000"),
- nc(4503599627370497, "4503599627370497", "0x10000000000001", "0o200000000000000001", "0b10000000000000000000000000000000000000000000000000001"),
- nc(9007199254740991, "9007199254740991", "0x1fffffffffffff", "0o377777777777777777", "0b11111111111111111111111111111111111111111111111111111"),
- nc(9007199254740992, "9007199254740992", "0x20000000000000", "0o400000000000000000", "0b100000000000000000000000000000000000000000000000000000"),
- nc(9007199254740993, "9007199254740993", "0x20000000000001", "0o400000000000000001", "0b100000000000000000000000000000000000000000000000000001"),
- nc(9223372036854775, "9223372036854775", "0x20c49ba5e353f7", "0o406111564570651767", "0b100000110001001001101110100101111000110101001111110111"),
- nc(9223372036854776, "9223372036854776", "0x20c49ba5e353f8", "0o406111564570651770", "0b100000110001001001101110100101111000110101001111111000"),
- nc(9223372036854777, "9223372036854777", "0x20c49ba5e353f9", "0o406111564570651771", "0b100000110001001001101110100101111000110101001111111001"),
- nc(9999999999999999, "9999999999999999", "0x2386f26fc0ffff", "0o434157115760177777", "0b100011100001101111001001101111110000001111111111111111"),
- nc(10000000000000000, "10000000000000000", "0x2386f26fc10000", "0o434157115760200000", "0b100011100001101111001001101111110000010000000000000000"),
- nc(10000000000000001, "10000000000000001", "0x2386f26fc10001", "0o434157115760200001", "0b100011100001101111001001101111110000010000000000000001"),
- nc(18014398509481983, "18014398509481983", "0x3fffffffffffff", "0o777777777777777777", "0b111111111111111111111111111111111111111111111111111111"),
- nc(18014398509481984, "18014398509481984", "0x40000000000000", "0o1000000000000000000", "0b1000000000000000000000000000000000000000000000000000000"),
- nc(18014398509481985, "18014398509481985", "0x40000000000001", "0o1000000000000000001", "0b1000000000000000000000000000000000000000000000000000001"),
- nc(36028797018963967, "36028797018963967", "0x7fffffffffffff", "0o1777777777777777777", "0b1111111111111111111111111111111111111111111111111111111"),
- nc(36028797018963968, "36028797018963968", "0x80000000000000", "0o2000000000000000000", "0b10000000000000000000000000000000000000000000000000000000"),
- nc(36028797018963969, "36028797018963969", "0x80000000000001", "0o2000000000000000001", "0b10000000000000000000000000000000000000000000000000000001"),
- nc(72057594037927935, "72057594037927935", "0xffffffffffffff", "0o3777777777777777777", "0b11111111111111111111111111111111111111111111111111111111"),
- nc(72057594037927936, "72057594037927936", "0x100000000000000", "0o4000000000000000000", "0b100000000000000000000000000000000000000000000000000000000"),
- nc(72057594037927937, "72057594037927937", "0x100000000000001", "0o4000000000000000001", "0b100000000000000000000000000000000000000000000000000000001"),
- nc(92233720368547759, "92233720368547759", "0x147ae147ae147af", "0o5075341217270243657", "0b101000111101011100001010001111010111000010100011110101111"),
- nc(92233720368547760, "92233720368547760", "0x147ae147ae147b0", "0o5075341217270243660", "0b101000111101011100001010001111010111000010100011110110000"),
- nc(92233720368547761, "92233720368547761", "0x147ae147ae147b1", "0o5075341217270243661", "0b101000111101011100001010001111010111000010100011110110001"),
- nc(99999999999999999, "99999999999999999", "0x16345785d89ffff", "0o5432127413542377777", "0b101100011010001010111100001011101100010011111111111111111"),
- nc(100000000000000000, "100000000000000000", "0x16345785d8a0000", "0o5432127413542400000", "0b101100011010001010111100001011101100010100000000000000000"),
- nc(100000000000000001, "100000000000000001", "0x16345785d8a0001", "0o5432127413542400001", "0b101100011010001010111100001011101100010100000000000000001"),
- nc(144115188075855871, "144115188075855871", "0x1ffffffffffffff", "0o7777777777777777777", "0b111111111111111111111111111111111111111111111111111111111"),
- nc(144115188075855872, "144115188075855872", "0x200000000000000", "0o10000000000000000000", "0b1000000000000000000000000000000000000000000000000000000000"),
- nc(144115188075855873, "144115188075855873", "0x200000000000001", "0o10000000000000000001", "0b1000000000000000000000000000000000000000000000000000000001"),
- nc(288230376151711743, "288230376151711743", "0x3ffffffffffffff", "0o17777777777777777777", "0b1111111111111111111111111111111111111111111111111111111111"),
- nc(288230376151711744, "288230376151711744", "0x400000000000000", "0o20000000000000000000", "0b10000000000000000000000000000000000000000000000000000000000"),
- nc(288230376151711745, "288230376151711745", "0x400000000000001", "0o20000000000000000001", "0b10000000000000000000000000000000000000000000000000000000001"),
- nc(576460752303423487, "576460752303423487", "0x7ffffffffffffff", "0o37777777777777777777", "0b11111111111111111111111111111111111111111111111111111111111"),
- nc(576460752303423488, "576460752303423488", "0x800000000000000", "0o40000000000000000000", "0b100000000000000000000000000000000000000000000000000000000000"),
- nc(576460752303423489, "576460752303423489", "0x800000000000001", "0o40000000000000000001", "0b100000000000000000000000000000000000000000000000000000000001"),
- nc(922337203685477631, "922337203685477631", "0xcccccccccccccff", "0o63146314631463146377", "0b110011001100110011001100110011001100110011001100110011111111"),
- nc(922337203685477632, "922337203685477632", "0xccccccccccccd00", "0o63146314631463146400", "0b110011001100110011001100110011001100110011001100110100000000"),
- nc(922337203685477633, "922337203685477633", "0xccccccccccccd01", "0o63146314631463146401", "0b110011001100110011001100110011001100110011001100110100000001"),
- nc(999999999999999999, "999999999999999999", "0xde0b6b3a763ffff", "0o67405553164730777777", "0b110111100000101101101011001110100111011000111111111111111111"),
- nc(1000000000000000000, "1000000000000000000", "0xde0b6b3a7640000", "0o67405553164731000000", "0b110111100000101101101011001110100111011001000000000000000000"),
- nc(1000000000000000001, "1000000000000000001", "0xde0b6b3a7640001", "0o67405553164731000001", "0b110111100000101101101011001110100111011001000000000000000001"),
- nc(1152921504606846975, "1152921504606846975", "0xfffffffffffffff", "0o77777777777777777777", "0b111111111111111111111111111111111111111111111111111111111111"),
- nc(1152921504606846976, "1152921504606846976", "0x1000000000000000", "0o100000000000000000000", "0b1000000000000000000000000000000000000000000000000000000000000"),
- nc(1152921504606846977, "1152921504606846977", "0x1000000000000001", "0o100000000000000000001", "0b1000000000000000000000000000000000000000000000000000000000001"),
- nc(2305843009213693951, "2305843009213693951", "0x1fffffffffffffff", "0o177777777777777777777", "0b1111111111111111111111111111111111111111111111111111111111111"),
- nc(2305843009213693952, "2305843009213693952", "0x2000000000000000", "0o200000000000000000000", "0b10000000000000000000000000000000000000000000000000000000000000"),
- nc(2305843009213693953, "2305843009213693953", "0x2000000000000001", "0o200000000000000000001", "0b10000000000000000000000000000000000000000000000000000000000001"),
- nc(4611686018427387903, "4611686018427387903", "0x3fffffffffffffff", "0o377777777777777777777", "0b11111111111111111111111111111111111111111111111111111111111111"),
- nc(4611686018427387904, "4611686018427387904", "0x4000000000000000", "0o400000000000000000000", "0b100000000000000000000000000000000000000000000000000000000000000"),
- nc(4611686018427387905, "4611686018427387905", "0x4000000000000001", "0o400000000000000000001", "0b100000000000000000000000000000000000000000000000000000000000001"),
- nc(9223372036854775802, "9223372036854775802", "0x7ffffffffffffffa", "0o777777777777777777772", "0b111111111111111111111111111111111111111111111111111111111111010"),
- nc(9223372036854775803, "9223372036854775803", "0x7ffffffffffffffb", "0o777777777777777777773", "0b111111111111111111111111111111111111111111111111111111111111011"),
- nc(9223372036854775804, "9223372036854775804", "0x7ffffffffffffffc", "0o777777777777777777774", "0b111111111111111111111111111111111111111111111111111111111111100"),
- nc(9223372036854775805, "9223372036854775805", "0x7ffffffffffffffd", "0o777777777777777777775", "0b111111111111111111111111111111111111111111111111111111111111101"),
- nc(9223372036854775806, "9223372036854775806", "0x7ffffffffffffffe", "0o777777777777777777776", "0b111111111111111111111111111111111111111111111111111111111111110"),
- nc(9223372036854775807, "9223372036854775807", "0x7fffffffffffffff", "0o777777777777777777777", "0b111111111111111111111111111111111111111111111111111111111111111"),
-#undef nc
- };
-};
-
-
-template<>
-struct numbers<uint64_t>
-{
- using value_type = uint64_t;
- static C4_INLINE_CONSTEXPR const number_case<uint64_t> vals[] = {
-#define nc(val, dec, hex, bin, oct) \
- number_case<value_type>{UINT64_C(val), csubstr{dec}, csubstr{hex}, csubstr{bin}, csubstr{oct}}
- nc(0, "0", "0x0", "0o0", "0b0"),
- nc(1, "1", "0x1", "0o1", "0b1"),
- nc(2, "2", "0x2", "0o2", "0b10"),
- nc(3, "3", "0x3", "0o3", "0b11"),
- nc(4, "4", "0x4", "0o4", "0b100"),
- nc(5, "5", "0x5", "0o5", "0b101"),
- nc(6, "6", "0x6", "0o6", "0b110"),
- nc(7, "7", "0x7", "0o7", "0b111"),
- nc(8, "8", "0x8", "0o10", "0b1000"),
- nc(9, "9", "0x9", "0o11", "0b1001"),
- nc(10, "10", "0xa", "0o12", "0b1010"),
- nc(11, "11", "0xb", "0o13", "0b1011"),
- nc(15, "15", "0xf", "0o17", "0b1111"),
- nc(16, "16", "0x10", "0o20", "0b10000"),
- nc(17, "17", "0x11", "0o21", "0b10001"),
- nc(18, "18", "0x12", "0o22", "0b10010"),
- nc(19, "19", "0x13", "0o23", "0b10011"),
- nc(31, "31", "0x1f", "0o37", "0b11111"),
- nc(32, "32", "0x20", "0o40", "0b100000"),
- nc(33, "33", "0x21", "0o41", "0b100001"),
- nc(63, "63", "0x3f", "0o77", "0b111111"),
- nc(64, "64", "0x40", "0o100", "0b1000000"),
- nc(65, "65", "0x41", "0o101", "0b1000001"),
- nc(99, "99", "0x63", "0o143", "0b1100011"),
- nc(100, "100", "0x64", "0o144", "0b1100100"),
- nc(101, "101", "0x65", "0o145", "0b1100101"),
- nc(127, "127", "0x7f", "0o177", "0b1111111"),
- nc(128, "128", "0x80", "0o200", "0b10000000"),
- nc(129, "129", "0x81", "0o201", "0b10000001"),
- nc(183, "183", "0xb7", "0o267", "0b10110111"),
- nc(184, "184", "0xb8", "0o270", "0b10111000"),
- nc(185, "185", "0xb9", "0o271", "0b10111001"),
- nc(255, "255", "0xff", "0o377", "0b11111111"),
- nc(256, "256", "0x100", "0o400", "0b100000000"),
- nc(257, "257", "0x101", "0o401", "0b100000001"),
- nc(511, "511", "0x1ff", "0o777", "0b111111111"),
- nc(512, "512", "0x200", "0o1000", "0b1000000000"),
- nc(513, "513", "0x201", "0o1001", "0b1000000001"),
- nc(999, "999", "0x3e7", "0o1747", "0b1111100111"),
- nc(1000, "1000", "0x3e8", "0o1750", "0b1111101000"),
- nc(1001, "1001", "0x3e9", "0o1751", "0b1111101001"),
- nc(1023, "1023", "0x3ff", "0o1777", "0b1111111111"),
- nc(1024, "1024", "0x400", "0o2000", "0b10000000000"),
- nc(1025, "1025", "0x401", "0o2001", "0b10000000001"),
- nc(1843, "1843", "0x733", "0o3463", "0b11100110011"),
- nc(1844, "1844", "0x734", "0o3464", "0b11100110100"),
- nc(1845, "1845", "0x735", "0o3465", "0b11100110101"),
- nc(2047, "2047", "0x7ff", "0o3777", "0b11111111111"),
- nc(2048, "2048", "0x800", "0o4000", "0b100000000000"),
- nc(2049, "2049", "0x801", "0o4001", "0b100000000001"),
- nc(4095, "4095", "0xfff", "0o7777", "0b111111111111"),
- nc(4096, "4096", "0x1000", "0o10000", "0b1000000000000"),
- nc(4097, "4097", "0x1001", "0o10001", "0b1000000000001"),
- nc(8191, "8191", "0x1fff", "0o17777", "0b1111111111111"),
- nc(8192, "8192", "0x2000", "0o20000", "0b10000000000000"),
- nc(8193, "8193", "0x2001", "0o20001", "0b10000000000001"),
- nc(9999, "9999", "0x270f", "0o23417", "0b10011100001111"),
- nc(10000, "10000", "0x2710", "0o23420", "0b10011100010000"),
- nc(10001, "10001", "0x2711", "0o23421", "0b10011100010001"),
- nc(16383, "16383", "0x3fff", "0o37777", "0b11111111111111"),
- nc(16384, "16384", "0x4000", "0o40000", "0b100000000000000"),
- nc(16385, "16385", "0x4001", "0o40001", "0b100000000000001"),
- nc(18445, "18445", "0x480d", "0o44015", "0b100100000001101"),
- nc(18446, "18446", "0x480e", "0o44016", "0b100100000001110"),
- nc(18447, "18447", "0x480f", "0o44017", "0b100100000001111"),
- nc(32767, "32767", "0x7fff", "0o77777", "0b111111111111111"),
- nc(32768, "32768", "0x8000", "0o100000", "0b1000000000000000"),
- nc(32769, "32769", "0x8001", "0o100001", "0b1000000000000001"),
- nc(65535, "65535", "0xffff", "0o177777", "0b1111111111111111"),
- nc(65536, "65536", "0x10000", "0o200000", "0b10000000000000000"),
- nc(65537, "65537", "0x10001", "0o200001", "0b10000000000000001"),
- nc(99999, "99999", "0x1869f", "0o303237", "0b11000011010011111"),
- nc(100000, "100000", "0x186a0", "0o303240", "0b11000011010100000"),
- nc(100001, "100001", "0x186a1", "0o303241", "0b11000011010100001"),
- nc(131071, "131071", "0x1ffff", "0o377777", "0b11111111111111111"),
- nc(131072, "131072", "0x20000", "0o400000", "0b100000000000000000"),
- nc(131073, "131073", "0x20001", "0o400001", "0b100000000000000001"),
- nc(184466, "184466", "0x2d092", "0o550222", "0b101101000010010010"),
- nc(184467, "184467", "0x2d093", "0o550223", "0b101101000010010011"),
- nc(184468, "184468", "0x2d094", "0o550224", "0b101101000010010100"),
- nc(262143, "262143", "0x3ffff", "0o777777", "0b111111111111111111"),
- nc(262144, "262144", "0x40000", "0o1000000", "0b1000000000000000000"),
- nc(262145, "262145", "0x40001", "0o1000001", "0b1000000000000000001"),
- nc(524287, "524287", "0x7ffff", "0o1777777", "0b1111111111111111111"),
- nc(524288, "524288", "0x80000", "0o2000000", "0b10000000000000000000"),
- nc(524289, "524289", "0x80001", "0o2000001", "0b10000000000000000001"),
- nc(999999, "999999", "0xf423f", "0o3641077", "0b11110100001000111111"),
- nc(1000000, "1000000", "0xf4240", "0o3641100", "0b11110100001001000000"),
- nc(1000001, "1000001", "0xf4241", "0o3641101", "0b11110100001001000001"),
- nc(1048575, "1048575", "0xfffff", "0o3777777", "0b11111111111111111111"),
- nc(1048576, "1048576", "0x100000", "0o4000000", "0b100000000000000000000"),
- nc(1048577, "1048577", "0x100001", "0o4000001", "0b100000000000000000001"),
- nc(1844673, "1844673", "0x1c25c1", "0o7022701", "0b111000010010111000001"),
- nc(1844674, "1844674", "0x1c25c2", "0o7022702", "0b111000010010111000010"),
- nc(1844675, "1844675", "0x1c25c3", "0o7022703", "0b111000010010111000011"),
- nc(2097151, "2097151", "0x1fffff", "0o7777777", "0b111111111111111111111"),
- nc(2097152, "2097152", "0x200000", "0o10000000", "0b1000000000000000000000"),
- nc(2097153, "2097153", "0x200001", "0o10000001", "0b1000000000000000000001"),
- nc(4194303, "4194303", "0x3fffff", "0o17777777", "0b1111111111111111111111"),
- nc(4194304, "4194304", "0x400000", "0o20000000", "0b10000000000000000000000"),
- nc(4194305, "4194305", "0x400001", "0o20000001", "0b10000000000000000000001"),
- nc(8388607, "8388607", "0x7fffff", "0o37777777", "0b11111111111111111111111"),
- nc(8388608, "8388608", "0x800000", "0o40000000", "0b100000000000000000000000"),
- nc(8388609, "8388609", "0x800001", "0o40000001", "0b100000000000000000000001"),
- nc(9999999, "9999999", "0x98967f", "0o46113177", "0b100110001001011001111111"),
- nc(10000000, "10000000", "0x989680", "0o46113200", "0b100110001001011010000000"),
- nc(10000001, "10000001", "0x989681", "0o46113201", "0b100110001001011010000001"),
- nc(16777215, "16777215", "0xffffff", "0o77777777", "0b111111111111111111111111"),
- nc(16777216, "16777216", "0x1000000", "0o100000000", "0b1000000000000000000000000"),
- nc(16777217, "16777217", "0x1000001", "0o100000001", "0b1000000000000000000000001"),
- nc(18446743, "18446743", "0x1197997", "0o106274627", "0b1000110010111100110010111"),
- nc(18446744, "18446744", "0x1197998", "0o106274630", "0b1000110010111100110011000"),
- nc(18446745, "18446745", "0x1197999", "0o106274631", "0b1000110010111100110011001"),
- nc(33554431, "33554431", "0x1ffffff", "0o177777777", "0b1111111111111111111111111"),
- nc(33554432, "33554432", "0x2000000", "0o200000000", "0b10000000000000000000000000"),
- nc(33554433, "33554433", "0x2000001", "0o200000001", "0b10000000000000000000000001"),
- nc(67108863, "67108863", "0x3ffffff", "0o377777777", "0b11111111111111111111111111"),
- nc(67108864, "67108864", "0x4000000", "0o400000000", "0b100000000000000000000000000"),
- nc(67108865, "67108865", "0x4000001", "0o400000001", "0b100000000000000000000000001"),
- nc(99999999, "99999999", "0x5f5e0ff", "0o575360377", "0b101111101011110000011111111"),
- nc(100000000, "100000000", "0x5f5e100", "0o575360400", "0b101111101011110000100000000"),
- nc(100000001, "100000001", "0x5f5e101", "0o575360401", "0b101111101011110000100000001"),
- nc(134217727, "134217727", "0x7ffffff", "0o777777777", "0b111111111111111111111111111"),
- nc(134217728, "134217728", "0x8000000", "0o1000000000", "0b1000000000000000000000000000"),
- nc(134217729, "134217729", "0x8000001", "0o1000000001", "0b1000000000000000000000000001"),
- nc(184467439, "184467439", "0xafebfef", "0o1277537757", "0b1010111111101011111111101111"),
- nc(184467440, "184467440", "0xafebff0", "0o1277537760", "0b1010111111101011111111110000"),
- nc(184467441, "184467441", "0xafebff1", "0o1277537761", "0b1010111111101011111111110001"),
- nc(268435455, "268435455", "0xfffffff", "0o1777777777", "0b1111111111111111111111111111"),
- nc(268435456, "268435456", "0x10000000", "0o2000000000", "0b10000000000000000000000000000"),
- nc(268435457, "268435457", "0x10000001", "0o2000000001", "0b10000000000000000000000000001"),
- nc(536870911, "536870911", "0x1fffffff", "0o3777777777", "0b11111111111111111111111111111"),
- nc(536870912, "536870912", "0x20000000", "0o4000000000", "0b100000000000000000000000000000"),
- nc(536870913, "536870913", "0x20000001", "0o4000000001", "0b100000000000000000000000000001"),
- nc(999999999, "999999999", "0x3b9ac9ff", "0o7346544777", "0b111011100110101100100111111111"),
- nc(1000000000, "1000000000", "0x3b9aca00", "0o7346545000", "0b111011100110101100101000000000"),
- nc(1000000001, "1000000001", "0x3b9aca01", "0o7346545001", "0b111011100110101100101000000001"),
- nc(1073741823, "1073741823", "0x3fffffff", "0o7777777777", "0b111111111111111111111111111111"),
- nc(1073741824, "1073741824", "0x40000000", "0o10000000000", "0b1000000000000000000000000000000"),
- nc(1073741825, "1073741825", "0x40000001", "0o10000000001", "0b1000000000000000000000000000001"),
- nc(1844674406, "1844674406", "0x6df37f66", "0o15574677546", "0b1101101111100110111111101100110"),
- nc(1844674407, "1844674407", "0x6df37f67", "0o15574677547", "0b1101101111100110111111101100111"),
- nc(1844674408, "1844674408", "0x6df37f68", "0o15574677550", "0b1101101111100110111111101101000"),
- nc(2147483647, "2147483647", "0x7fffffff", "0o17777777777", "0b1111111111111111111111111111111"),
- nc(2147483648, "2147483648", "0x80000000", "0o20000000000", "0b10000000000000000000000000000000"),
- nc(2147483649, "2147483649", "0x80000001", "0o20000000001", "0b10000000000000000000000000000001"),
- nc(4294967295, "4294967295", "0xffffffff", "0o37777777777", "0b11111111111111111111111111111111"),
- nc(4294967296, "4294967296", "0x100000000", "0o40000000000", "0b100000000000000000000000000000000"),
- nc(4294967297, "4294967297", "0x100000001", "0o40000000001", "0b100000000000000000000000000000001"),
- nc(8589934591, "8589934591", "0x1ffffffff", "0o77777777777", "0b111111111111111111111111111111111"),
- nc(8589934592, "8589934592", "0x200000000", "0o100000000000", "0b1000000000000000000000000000000000"),
- nc(8589934593, "8589934593", "0x200000001", "0o100000000001", "0b1000000000000000000000000000000001"),
- nc(9999999999, "9999999999", "0x2540be3ff", "0o112402761777", "0b1001010100000010111110001111111111"),
- nc(10000000000, "10000000000", "0x2540be400", "0o112402762000", "0b1001010100000010111110010000000000"),
- nc(10000000001, "10000000001", "0x2540be401", "0o112402762001", "0b1001010100000010111110010000000001"),
- nc(17179869183, "17179869183", "0x3ffffffff", "0o177777777777", "0b1111111111111111111111111111111111"),
- nc(17179869184, "17179869184", "0x400000000", "0o200000000000", "0b10000000000000000000000000000000000"),
- nc(17179869185, "17179869185", "0x400000001", "0o200000000001", "0b10000000000000000000000000000000001"),
- nc(18446744072, "18446744072", "0x44b82fa08", "0o211340575010", "0b10001001011100000101111101000001000"),
- nc(18446744073, "18446744073", "0x44b82fa09", "0o211340575011", "0b10001001011100000101111101000001001"),
- nc(18446744074, "18446744074", "0x44b82fa0a", "0o211340575012", "0b10001001011100000101111101000001010"),
- nc(34359738367, "34359738367", "0x7ffffffff", "0o377777777777", "0b11111111111111111111111111111111111"),
- nc(34359738368, "34359738368", "0x800000000", "0o400000000000", "0b100000000000000000000000000000000000"),
- nc(34359738369, "34359738369", "0x800000001", "0o400000000001", "0b100000000000000000000000000000000001"),
- nc(68719476735, "68719476735", "0xfffffffff", "0o777777777777", "0b111111111111111111111111111111111111"),
- nc(68719476736, "68719476736", "0x1000000000", "0o1000000000000", "0b1000000000000000000000000000000000000"),
- nc(68719476737, "68719476737", "0x1000000001", "0o1000000000001", "0b1000000000000000000000000000000000001"),
- nc(99999999999, "99999999999", "0x174876e7ff", "0o1351035563777", "0b1011101001000011101101110011111111111"),
- nc(100000000000, "100000000000", "0x174876e800", "0o1351035564000", "0b1011101001000011101101110100000000000"),
- nc(100000000001, "100000000001", "0x174876e801", "0o1351035564001", "0b1011101001000011101101110100000000001"),
- nc(137438953471, "137438953471", "0x1fffffffff", "0o1777777777777", "0b1111111111111111111111111111111111111"),
- nc(137438953472, "137438953472", "0x2000000000", "0o2000000000000", "0b10000000000000000000000000000000000000"),
- nc(137438953473, "137438953473", "0x2000000001", "0o2000000000001", "0b10000000000000000000000000000000000001"),
- nc(184467440736, "184467440736", "0x2af31dc460", "0o2536307342140", "0b10101011110011000111011100010001100000"),
- nc(184467440737, "184467440737", "0x2af31dc461", "0o2536307342141", "0b10101011110011000111011100010001100001"),
- nc(184467440738, "184467440738", "0x2af31dc462", "0o2536307342142", "0b10101011110011000111011100010001100010"),
- nc(274877906943, "274877906943", "0x3fffffffff", "0o3777777777777", "0b11111111111111111111111111111111111111"),
- nc(274877906944, "274877906944", "0x4000000000", "0o4000000000000", "0b100000000000000000000000000000000000000"),
- nc(274877906945, "274877906945", "0x4000000001", "0o4000000000001", "0b100000000000000000000000000000000000001"),
- nc(549755813887, "549755813887", "0x7fffffffff", "0o7777777777777", "0b111111111111111111111111111111111111111"),
- nc(549755813888, "549755813888", "0x8000000000", "0o10000000000000", "0b1000000000000000000000000000000000000000"),
- nc(549755813889, "549755813889", "0x8000000001", "0o10000000000001", "0b1000000000000000000000000000000000000001"),
- nc(999999999999, "999999999999", "0xe8d4a50fff", "0o16432451207777", "0b1110100011010100101001010000111111111111"),
- nc(1000000000000, "1000000000000", "0xe8d4a51000", "0o16432451210000", "0b1110100011010100101001010001000000000000"),
- nc(1000000000001, "1000000000001", "0xe8d4a51001", "0o16432451210001", "0b1110100011010100101001010001000000000001"),
- nc(1099511627775, "1099511627775", "0xffffffffff", "0o17777777777777", "0b1111111111111111111111111111111111111111"),
- nc(1099511627776, "1099511627776", "0x10000000000", "0o20000000000000", "0b10000000000000000000000000000000000000000"),
- nc(1099511627777, "1099511627777", "0x10000000001", "0o20000000000001", "0b10000000000000000000000000000000000000001"),
- nc(1844674407369, "1844674407369", "0x1ad7f29abc9", "0o32657712325711", "0b11010110101111111001010011010101111001001"),
- nc(1844674407370, "1844674407370", "0x1ad7f29abca", "0o32657712325712", "0b11010110101111111001010011010101111001010"),
- nc(1844674407371, "1844674407371", "0x1ad7f29abcb", "0o32657712325713", "0b11010110101111111001010011010101111001011"),
- nc(2199023255551, "2199023255551", "0x1ffffffffff", "0o37777777777777", "0b11111111111111111111111111111111111111111"),
- nc(2199023255552, "2199023255552", "0x20000000000", "0o40000000000000", "0b100000000000000000000000000000000000000000"),
- nc(2199023255553, "2199023255553", "0x20000000001", "0o40000000000001", "0b100000000000000000000000000000000000000001"),
- nc(4398046511103, "4398046511103", "0x3ffffffffff", "0o77777777777777", "0b111111111111111111111111111111111111111111"),
- nc(4398046511104, "4398046511104", "0x40000000000", "0o100000000000000", "0b1000000000000000000000000000000000000000000"),
- nc(4398046511105, "4398046511105", "0x40000000001", "0o100000000000001", "0b1000000000000000000000000000000000000000001"),
- nc(8796093022207, "8796093022207", "0x7ffffffffff", "0o177777777777777", "0b1111111111111111111111111111111111111111111"),
- nc(8796093022208, "8796093022208", "0x80000000000", "0o200000000000000", "0b10000000000000000000000000000000000000000000"),
- nc(8796093022209, "8796093022209", "0x80000000001", "0o200000000000001", "0b10000000000000000000000000000000000000000001"),
- nc(9999999999999, "9999999999999", "0x9184e729fff", "0o221411634517777", "0b10010001100001001110011100101001111111111111"),
- nc(10000000000000, "10000000000000", "0x9184e72a000", "0o221411634520000", "0b10010001100001001110011100101010000000000000"),
- nc(10000000000001, "10000000000001", "0x9184e72a001", "0o221411634520001", "0b10010001100001001110011100101010000000000001"),
- nc(17592186044415, "17592186044415", "0xfffffffffff", "0o377777777777777", "0b11111111111111111111111111111111111111111111"),
- nc(17592186044416, "17592186044416", "0x100000000000", "0o400000000000000", "0b100000000000000000000000000000000000000000000"),
- nc(17592186044417, "17592186044417", "0x100000000001", "0o400000000000001", "0b100000000000000000000000000000000000000000001"),
- nc(18446744073708, "18446744073708", "0x10c6f7a0b5ec", "0o414336750132754", "0b100001100011011110111101000001011010111101100"),
- nc(18446744073709, "18446744073709", "0x10c6f7a0b5ed", "0o414336750132755", "0b100001100011011110111101000001011010111101101"),
- nc(18446744073710, "18446744073710", "0x10c6f7a0b5ee", "0o414336750132756", "0b100001100011011110111101000001011010111101110"),
- nc(35184372088831, "35184372088831", "0x1fffffffffff", "0o777777777777777", "0b111111111111111111111111111111111111111111111"),
- nc(35184372088832, "35184372088832", "0x200000000000", "0o1000000000000000", "0b1000000000000000000000000000000000000000000000"),
- nc(35184372088833, "35184372088833", "0x200000000001", "0o1000000000000001", "0b1000000000000000000000000000000000000000000001"),
- nc(70368744177663, "70368744177663", "0x3fffffffffff", "0o1777777777777777", "0b1111111111111111111111111111111111111111111111"),
- nc(70368744177664, "70368744177664", "0x400000000000", "0o2000000000000000", "0b10000000000000000000000000000000000000000000000"),
- nc(70368744177665, "70368744177665", "0x400000000001", "0o2000000000000001", "0b10000000000000000000000000000000000000000000001"),
- nc(99999999999999, "99999999999999", "0x5af3107a3fff", "0o2657142036437777", "0b10110101111001100010000011110100011111111111111"),
- nc(100000000000000, "100000000000000", "0x5af3107a4000", "0o2657142036440000", "0b10110101111001100010000011110100100000000000000"),
- nc(100000000000001, "100000000000001", "0x5af3107a4001", "0o2657142036440001", "0b10110101111001100010000011110100100000000000001"),
- nc(140737488355327, "140737488355327", "0x7fffffffffff", "0o3777777777777777", "0b11111111111111111111111111111111111111111111111"),
- nc(140737488355328, "140737488355328", "0x800000000000", "0o4000000000000000", "0b100000000000000000000000000000000000000000000000"),
- nc(140737488355329, "140737488355329", "0x800000000001", "0o4000000000000001", "0b100000000000000000000000000000000000000000000001"),
- nc(184467440737094, "184467440737094", "0xa7c5ac471b46", "0o5174265421615506", "0b101001111100010110101100010001110001101101000110"),
- nc(184467440737095, "184467440737095", "0xa7c5ac471b47", "0o5174265421615507", "0b101001111100010110101100010001110001101101000111"),
- nc(184467440737096, "184467440737096", "0xa7c5ac471b48", "0o5174265421615510", "0b101001111100010110101100010001110001101101001000"),
- nc(281474976710655, "281474976710655", "0xffffffffffff", "0o7777777777777777", "0b111111111111111111111111111111111111111111111111"),
- nc(281474976710656, "281474976710656", "0x1000000000000", "0o10000000000000000", "0b1000000000000000000000000000000000000000000000000"),
- nc(281474976710657, "281474976710657", "0x1000000000001", "0o10000000000000001", "0b1000000000000000000000000000000000000000000000001"),
- nc(562949953421311, "562949953421311", "0x1ffffffffffff", "0o17777777777777777", "0b1111111111111111111111111111111111111111111111111"),
- nc(562949953421312, "562949953421312", "0x2000000000000", "0o20000000000000000", "0b10000000000000000000000000000000000000000000000000"),
- nc(562949953421313, "562949953421313", "0x2000000000001", "0o20000000000000001", "0b10000000000000000000000000000000000000000000000001"),
- nc(999999999999999, "999999999999999", "0x38d7ea4c67fff", "0o34327724461477777", "0b11100011010111111010100100110001100111111111111111"),
- nc(1000000000000000, "1000000000000000", "0x38d7ea4c68000", "0o34327724461500000", "0b11100011010111111010100100110001101000000000000000"),
- nc(1000000000000001, "1000000000000001", "0x38d7ea4c68001", "0o34327724461500001", "0b11100011010111111010100100110001101000000000000001"),
- nc(1125899906842623, "1125899906842623", "0x3ffffffffffff", "0o37777777777777777", "0b11111111111111111111111111111111111111111111111111"),
- nc(1125899906842624, "1125899906842624", "0x4000000000000", "0o40000000000000000", "0b100000000000000000000000000000000000000000000000000"),
- nc(1125899906842625, "1125899906842625", "0x4000000000001", "0o40000000000000001", "0b100000000000000000000000000000000000000000000000001"),
- nc(1844674407370954, "1844674407370954", "0x68db8bac710ca", "0o64333427261610312", "0b110100011011011100010111010110001110001000011001010"),
- nc(1844674407370955, "1844674407370955", "0x68db8bac710cb", "0o64333427261610313", "0b110100011011011100010111010110001110001000011001011"),
- nc(1844674407370956, "1844674407370956", "0x68db8bac710cc", "0o64333427261610314", "0b110100011011011100010111010110001110001000011001100"),
- nc(2251799813685247, "2251799813685247", "0x7ffffffffffff", "0o77777777777777777", "0b111111111111111111111111111111111111111111111111111"),
- nc(2251799813685248, "2251799813685248", "0x8000000000000", "0o100000000000000000", "0b1000000000000000000000000000000000000000000000000000"),
- nc(2251799813685249, "2251799813685249", "0x8000000000001", "0o100000000000000001", "0b1000000000000000000000000000000000000000000000000001"),
- nc(4503599627370495, "4503599627370495", "0xfffffffffffff", "0o177777777777777777", "0b1111111111111111111111111111111111111111111111111111"),
- nc(4503599627370496, "4503599627370496", "0x10000000000000", "0o200000000000000000", "0b10000000000000000000000000000000000000000000000000000"),
- nc(4503599627370497, "4503599627370497", "0x10000000000001", "0o200000000000000001", "0b10000000000000000000000000000000000000000000000000001"),
- nc(9007199254740991, "9007199254740991", "0x1fffffffffffff", "0o377777777777777777", "0b11111111111111111111111111111111111111111111111111111"),
- nc(9007199254740992, "9007199254740992", "0x20000000000000", "0o400000000000000000", "0b100000000000000000000000000000000000000000000000000000"),
- nc(9007199254740993, "9007199254740993", "0x20000000000001", "0o400000000000000001", "0b100000000000000000000000000000000000000000000000000001"),
- nc(9999999999999999, "9999999999999999", "0x2386f26fc0ffff", "0o434157115760177777", "0b100011100001101111001001101111110000001111111111111111"),
- nc(10000000000000000, "10000000000000000", "0x2386f26fc10000", "0o434157115760200000", "0b100011100001101111001001101111110000010000000000000000"),
- nc(10000000000000001, "10000000000000001", "0x2386f26fc10001", "0o434157115760200001", "0b100011100001101111001001101111110000010000000000000001"),
- nc(18014398509481983, "18014398509481983", "0x3fffffffffffff", "0o777777777777777777", "0b111111111111111111111111111111111111111111111111111111"),
- nc(18014398509481984, "18014398509481984", "0x40000000000000", "0o1000000000000000000", "0b1000000000000000000000000000000000000000000000000000000"),
- nc(18014398509481985, "18014398509481985", "0x40000000000001", "0o1000000000000000001", "0b1000000000000000000000000000000000000000000000000000001"),
- nc(18446744073709551, "18446744073709551", "0x4189374bc6a7ef", "0o1014223351361523757", "0b1000001100010010011011101001011110001101010011111101111"),
- nc(18446744073709552, "18446744073709552", "0x4189374bc6a7f0", "0o1014223351361523760", "0b1000001100010010011011101001011110001101010011111110000"),
- nc(18446744073709553, "18446744073709553", "0x4189374bc6a7f1", "0o1014223351361523761", "0b1000001100010010011011101001011110001101010011111110001"),
- nc(36028797018963967, "36028797018963967", "0x7fffffffffffff", "0o1777777777777777777", "0b1111111111111111111111111111111111111111111111111111111"),
- nc(36028797018963968, "36028797018963968", "0x80000000000000", "0o2000000000000000000", "0b10000000000000000000000000000000000000000000000000000000"),
- nc(36028797018963969, "36028797018963969", "0x80000000000001", "0o2000000000000000001", "0b10000000000000000000000000000000000000000000000000000001"),
- nc(72057594037927935, "72057594037927935", "0xffffffffffffff", "0o3777777777777777777", "0b11111111111111111111111111111111111111111111111111111111"),
- nc(72057594037927936, "72057594037927936", "0x100000000000000", "0o4000000000000000000", "0b100000000000000000000000000000000000000000000000000000000"),
- nc(72057594037927937, "72057594037927937", "0x100000000000001", "0o4000000000000000001", "0b100000000000000000000000000000000000000000000000000000001"),
- nc(99999999999999999, "99999999999999999", "0x16345785d89ffff", "0o5432127413542377777", "0b101100011010001010111100001011101100010011111111111111111"),
- nc(100000000000000000, "100000000000000000", "0x16345785d8a0000", "0o5432127413542400000", "0b101100011010001010111100001011101100010100000000000000000"),
- nc(100000000000000001, "100000000000000001", "0x16345785d8a0001", "0o5432127413542400001", "0b101100011010001010111100001011101100010100000000000000001"),
- nc(144115188075855871, "144115188075855871", "0x1ffffffffffffff", "0o7777777777777777777", "0b111111111111111111111111111111111111111111111111111111111"),
- nc(144115188075855872, "144115188075855872", "0x200000000000000", "0o10000000000000000000", "0b1000000000000000000000000000000000000000000000000000000000"),
- nc(144115188075855873, "144115188075855873", "0x200000000000001", "0o10000000000000000001", "0b1000000000000000000000000000000000000000000000000000000001"),
- nc(184467440737095519, "184467440737095519", "0x28f5c28f5c28f5f", "0o12172702436560507537", "0b1010001111010111000010100011110101110000101000111101011111"),
- nc(184467440737095520, "184467440737095520", "0x28f5c28f5c28f60", "0o12172702436560507540", "0b1010001111010111000010100011110101110000101000111101100000"),
- nc(184467440737095521, "184467440737095521", "0x28f5c28f5c28f61", "0o12172702436560507541", "0b1010001111010111000010100011110101110000101000111101100001"),
- nc(288230376151711743, "288230376151711743", "0x3ffffffffffffff", "0o17777777777777777777", "0b1111111111111111111111111111111111111111111111111111111111"),
- nc(288230376151711744, "288230376151711744", "0x400000000000000", "0o20000000000000000000", "0b10000000000000000000000000000000000000000000000000000000000"),
- nc(288230376151711745, "288230376151711745", "0x400000000000001", "0o20000000000000000001", "0b10000000000000000000000000000000000000000000000000000000001"),
- nc(576460752303423487, "576460752303423487", "0x7ffffffffffffff", "0o37777777777777777777", "0b11111111111111111111111111111111111111111111111111111111111"),
- nc(576460752303423488, "576460752303423488", "0x800000000000000", "0o40000000000000000000", "0b100000000000000000000000000000000000000000000000000000000000"),
- nc(576460752303423489, "576460752303423489", "0x800000000000001", "0o40000000000000000001", "0b100000000000000000000000000000000000000000000000000000000001"),
- nc(999999999999999999, "999999999999999999", "0xde0b6b3a763ffff", "0o67405553164730777777", "0b110111100000101101101011001110100111011000111111111111111111"),
- nc(1000000000000000000, "1000000000000000000", "0xde0b6b3a7640000", "0o67405553164731000000", "0b110111100000101101101011001110100111011001000000000000000000"),
- nc(1000000000000000001, "1000000000000000001", "0xde0b6b3a7640001", "0o67405553164731000001", "0b110111100000101101101011001110100111011001000000000000000001"),
- nc(1152921504606846975, "1152921504606846975", "0xfffffffffffffff", "0o77777777777777777777", "0b111111111111111111111111111111111111111111111111111111111111"),
- nc(1152921504606846976, "1152921504606846976", "0x1000000000000000", "0o100000000000000000000", "0b1000000000000000000000000000000000000000000000000000000000000"),
- nc(1152921504606846977, "1152921504606846977", "0x1000000000000001", "0o100000000000000000001", "0b1000000000000000000000000000000000000000000000000000000000001"),
- nc(1844674407370955263, "1844674407370955263", "0x19999999999999ff", "0o146314631463146314777", "0b1100110011001100110011001100110011001100110011001100111111111"),
- nc(1844674407370955264, "1844674407370955264", "0x1999999999999a00", "0o146314631463146315000", "0b1100110011001100110011001100110011001100110011001101000000000"),
- nc(1844674407370955265, "1844674407370955265", "0x1999999999999a01", "0o146314631463146315001", "0b1100110011001100110011001100110011001100110011001101000000001"),
- nc(2305843009213693951, "2305843009213693951", "0x1fffffffffffffff", "0o177777777777777777777", "0b1111111111111111111111111111111111111111111111111111111111111"),
- nc(2305843009213693952, "2305843009213693952", "0x2000000000000000", "0o200000000000000000000", "0b10000000000000000000000000000000000000000000000000000000000000"),
- nc(2305843009213693953, "2305843009213693953", "0x2000000000000001", "0o200000000000000000001", "0b10000000000000000000000000000000000000000000000000000000000001"),
- nc(4611686018427387903, "4611686018427387903", "0x3fffffffffffffff", "0o377777777777777777777", "0b11111111111111111111111111111111111111111111111111111111111111"),
- nc(4611686018427387904, "4611686018427387904", "0x4000000000000000", "0o400000000000000000000", "0b100000000000000000000000000000000000000000000000000000000000000"),
- nc(4611686018427387905, "4611686018427387905", "0x4000000000000001", "0o400000000000000000001", "0b100000000000000000000000000000000000000000000000000000000000001"),
- nc(9223372036854775807, "9223372036854775807", "0x7fffffffffffffff", "0o777777777777777777777", "0b111111111111111111111111111111111111111111111111111111111111111"),
- nc(9223372036854775808, "9223372036854775808", "0x8000000000000000", "0o1000000000000000000000", "0b1000000000000000000000000000000000000000000000000000000000000000"),
- nc(9223372036854775809, "9223372036854775809", "0x8000000000000001", "0o1000000000000000000001", "0b1000000000000000000000000000000000000000000000000000000000000001"),
- nc(9999999999999999999, "9999999999999999999", "0x8ac7230489e7ffff", "0o1053071060221171777777", "0b1000101011000111001000110000010010001001111001111111111111111111"),
- nc(10000000000000000000, "10000000000000000000", "0x8ac7230489e80000", "0o1053071060221172000000", "0b1000101011000111001000110000010010001001111010000000000000000000"),
- nc(10000000000000000001, "10000000000000000001", "0x8ac7230489e80001", "0o1053071060221172000001", "0b1000101011000111001000110000010010001001111010000000000000000001"),
- nc(18446744073709551611, "18446744073709551611", "0xfffffffffffffffb", "0o1777777777777777777773", "0b1111111111111111111111111111111111111111111111111111111111111011"),
- nc(18446744073709551612, "18446744073709551612", "0xfffffffffffffffc", "0o1777777777777777777774", "0b1111111111111111111111111111111111111111111111111111111111111100"),
- nc(18446744073709551613, "18446744073709551613", "0xfffffffffffffffd", "0o1777777777777777777775", "0b1111111111111111111111111111111111111111111111111111111111111101"),
- nc(18446744073709551614, "18446744073709551614", "0xfffffffffffffffe", "0o1777777777777777777776", "0b1111111111111111111111111111111111111111111111111111111111111110"),
- nc(18446744073709551615, "18446744073709551615", "0xffffffffffffffff", "0o1777777777777777777777", "0b1111111111111111111111111111111111111111111111111111111111111111"),
-#undef nc
- };
-};
-
-C4_INLINE_CONSTEXPR const number_case<int8_t> numbers<int8_t>::vals[];
-C4_INLINE_CONSTEXPR const number_case<uint8_t> numbers<uint8_t>::vals[];
-
-C4_INLINE_CONSTEXPR const number_case<int16_t> numbers<int16_t>::vals[];
-C4_INLINE_CONSTEXPR const number_case<uint16_t> numbers<uint16_t>::vals[];
-
-C4_INLINE_CONSTEXPR const number_case<int32_t> numbers<int32_t>::vals[];
-C4_INLINE_CONSTEXPR const number_case<uint32_t> numbers<uint32_t>::vals[];
-
-C4_INLINE_CONSTEXPR const number_case<int64_t> numbers<int64_t>::vals[];
-C4_INLINE_CONSTEXPR const number_case<uint64_t> numbers<uint64_t>::vals[];
-
-C4_SUPPRESS_WARNING_MSVC_POP
-
-} // namespace c4
diff --git a/thirdparty/ryml/ext/c4core/test/test_preprocessor.cpp b/thirdparty/ryml/ext/c4core/test/test_preprocessor.cpp
deleted file mode 100644
index bd2619ae4..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_preprocessor.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/preprocessor.hpp"
-#include "c4/language.hpp"
-#endif
-
-#ifdef WE_LL_GET_THERE___MSVC_CANT_HANDLE_THE_FOREACH_MACRO___NEEDS_TO_BE_FIXED
-#include <string>
-#include <map>
-
-struct SomeStruct
-{
- int32_t a;
- int32_t b;
- int32_t c;
- int32_t d;
-};
-
-TEST(TestForEach, print_offsets)
-{
-#define M_OFFS_(structure, field) m[#field] = offsetof(structure, field)
-#define M_OFFS(field) M_OFFS_(SomeStruct, field)
-
- std::map< std::string, size_t > m;
-
- C4_FOR_EACH(M_OFFS, a, b, c);
- C4_FOR_EACH(M_OFFS, d);
-
- EXPECT_EQ(m["a"], 0);
- EXPECT_EQ(m["b"], 4);
- EXPECT_EQ(m["c"], 8);
- EXPECT_EQ(m["d"], 12);
-}
-
-//-----------------------------------------------------------------------------
-// C4_BEGIN_NAMESPACE()/C4_END_NAMESPACE() are implemented with C4_FOR_EACH().
-// Test these here too.
-
-namespace a, b, c {
-int a_var = 0;
-} // namespace c, b
-int var = 1; // a::var
-namespace b {
-int var = 2; // a::b::var
-namespace c {
-int var = 3; // a::b::c::var
-} // namespace c, b, a
-
-TEST(TestForEach, begin_end_namespace)
-{
- EXPECT_EQ(a::b::c::a_var, 0);
- EXPECT_EQ(a::var, 1);
- EXPECT_EQ(a::b::var, 2);
- EXPECT_EQ(a::b::c::var, 3);
-}
-#endif
diff --git a/thirdparty/ryml/ext/c4core/test/test_singleheader/libc4core_singleheader.cpp b/thirdparty/ryml/ext/c4core/test/test_singleheader/libc4core_singleheader.cpp
deleted file mode 100644
index 078c77d1e..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_singleheader/libc4core_singleheader.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-#define C4CORE_SINGLE_HDR_DEFINE_NOW
-#include <c4/c4core_all.hpp>
diff --git a/thirdparty/ryml/ext/c4core/test/test_span.cpp b/thirdparty/ryml/ext/c4core/test/test_span.cpp
deleted file mode 100644
index c492013d7..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_span.cpp
+++ /dev/null
@@ -1,944 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/span.hpp"
-#endif
-
-#include "c4/libtest/supprwarn_push.hpp"
-
-#include <c4/test.hpp>
-
-namespace c4 {
-
-//-----------------------------------------------------------------------------
-TEST_CASE_TEMPLATE("span.default_init", SpanClass, span<int>, spanrs<int>, spanrsl<int>)
-{
- SpanClass s;
- CHECK_EQ(s.size(), 0);
- CHECK_EQ(s.capacity(), 0);
- CHECK_EQ(s.data(), nullptr);
-}
-
-
-template<template<class, class> class Span, class T, class I>
-Span<const T, I> cvt_to_const(Span<T, I> const& s)
-{
- Span<const T, I> ret = s;
- return ret;
-}
-
-TEST_CASE_TEMPLATE("span.convert_to_const", SpanClass, span<int>, spanrs<int>, spanrsl<int>)
-{
- SpanClass s;
- auto cs = cvt_to_const(s);
- CHECK_EQ(s.size(), cs.size());
- CHECK_EQ(s.data(), cs.data());
- CHECK_EQ(s.end(), cs.end());
-}
-
-
-//-----------------------------------------------------------------------------
-TEST_CASE("span.empty_init")
-{
- int arr[10];
- span<int> s(arr, 0);
- CHECK_EQ(s.size(), 0);
- CHECK_EQ(s.capacity(), 0);
- CHECK_NE(s.data(), nullptr);
-}
-
-TEST_CASE("spanrs.empty_init")
-{
- int arr[10];
-
- {
- spanrs<int> s(arr, 0);
- CHECK_EQ(s.size(), 0);
- CHECK_EQ(s.capacity(), 0);
- CHECK_EQ(s.data(), arr);
- }
-
- {
- spanrs<int> s(arr, 0, C4_COUNTOF(arr));
- CHECK_EQ(s.size(), 0);
- CHECK_EQ(s.capacity(), 10);
- CHECK_EQ(s.data(), arr);
- }
-}
-
-TEST_CASE("spanrsl.empty_init")
-{
- int arr[10];
-
- {
- spanrsl<int> s(arr, 0);
- CHECK_EQ(s.size(), 0);
- CHECK_EQ(s.capacity(), 0);
- CHECK_EQ(s.data(), arr);
- CHECK_EQ(s.offset(), 0);
- }
-
- {
- spanrsl<int> s(arr, 0, C4_COUNTOF(arr));
- CHECK_EQ(s.size(), 0);
- CHECK_EQ(s.capacity(), 10);
- CHECK_EQ(s.data(), arr);
- CHECK_EQ(s.offset(), 0);
- }
-}
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE_TEMPLATE("span.fromArray", SpanClass,
- span<char>, span<int>, span<uint32_t>,
- spanrs<char>, spanrs<int>, spanrs<uint32_t>,
- spanrsl<char>, spanrsl<int>, spanrsl<uint32_t>
- )
-{
- using ConstSpanClass = typename SpanClass::const_type;
- using T = typename SpanClass::value_type;
- T arr1[10];
- T arr2[20];
-
- T a = 0;
- for(auto &v : arr1) { v = a; ++a; }
- for(auto &v : arr2) { v = a; ++a; }
-
- {
- SpanClass s(arr1);
- CHECK_EQ(s.size(), C4_COUNTOF(arr1));
- CHECK_EQ(s.capacity(), C4_COUNTOF(arr1));
- CHECK_EQ(s.data(), arr1);
- }
-
- {
- ConstSpanClass s(arr1);
- CHECK_EQ(s.size(), C4_COUNTOF(arr1));
- CHECK_EQ(s.capacity(), C4_COUNTOF(arr1));
- CHECK_EQ(s.data(), arr1);
- }
-
- {
- SpanClass s = arr1;
- CHECK_EQ(s.size(), C4_COUNTOF(arr1));
- CHECK_EQ(s.capacity(), C4_COUNTOF(arr1));
- CHECK_EQ(s.data(), arr1);
- }
-
- {
- ConstSpanClass s = arr1;
- CHECK_EQ(s.size(), C4_COUNTOF(arr1));
- CHECK_EQ(s.capacity(), C4_COUNTOF(arr1));
- CHECK_EQ(s.data(), arr1);
- }
-
- {
- SpanClass s = arr1;
- CHECK_EQ(s.size(), C4_COUNTOF(arr1));
- CHECK_EQ(s.capacity(), C4_COUNTOF(arr1));
- CHECK_EQ(s.data(), arr1);
- s = arr2;
- CHECK_EQ(s.size(), C4_COUNTOF(arr2));
- CHECK_EQ(s.capacity(), C4_COUNTOF(arr2));
- CHECK_EQ(s.data(), arr2);
- }
-
- {
- ConstSpanClass s = arr1;
- CHECK_EQ(s.size(), C4_COUNTOF(arr1));
- CHECK_EQ(s.capacity(), C4_COUNTOF(arr1));
- CHECK_EQ(s.data(), arr1);
- s = arr2;
- CHECK_EQ(s.size(), C4_COUNTOF(arr2));
- CHECK_EQ(s.capacity(), C4_COUNTOF(arr2));
- CHECK_EQ(s.data(), arr2);
- }
-}
-
-
-//-----------------------------------------------------------------------------
-TEST_CASE("span.subspan")
-{
- int arr[10];
- span<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.subspan(0)), decltype(s)>::value));
-
- {
- auto ss = s.subspan(0, 5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), arr);
-
- ss = s.subspan(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), &arr[5]);
-
- // fine to obtain an empty span at the end
- ss = s.subspan(10);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), std::end(arr));
- // fine to obtain an empty span at the end
- ss = s.subspan(10, 0);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), std::end(arr));
- }
- {
- int buf10[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- int buf_5[] = {-1, 0, 1, 2, 3, 4};
- int *buf5 = buf_5 + 1; // to make sure that one does not immediately follow the other in memory
-
- span<int> n(buf10);
- span<int> m(buf5, 5);
-
- auto ss = n.subspan(0);
- CHECK_EQ(ss.data(), buf10);
- CHECK_EQ(ss.size(), 10);
- ss = m.subspan(0);
- CHECK_EQ(ss.data(), buf5);
- CHECK_EQ(ss.size(), 5);
- ss = n.subspan(0, 0);
- CHECK_NE(ss.data(), nullptr);
- CHECK_EQ(ss.data(), &buf10[0]);
- CHECK_EQ(ss.size(), 0);
- ss = m.subspan(0, 0);
- CHECK_NE(ss.data(), nullptr);
- CHECK_EQ(ss.data(), &buf5[0]);
- CHECK_EQ(ss.size(), 0);
- }
-}
-TEST_CASE("spanrs.subspan")
-{
- int arr[10];
- spanrs<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.subspan(0)), decltype(s)>::value));
-
- auto ss = s.subspan(0, 5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss = s.subspan(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), &arr[5]);
-
- // fine to obtain an empty span at the end
- ss = s.subspan(10);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), std::end(arr));
- // fine to obtain an empty span at the end
- ss = s.subspan(10, 0);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), std::end(arr));
-}
-TEST_CASE("spanrsl.subspan")
-{
- int arr[10];
- spanrsl<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.subspan(0)), decltype(s)>::value));
-
- auto ss = s.subspan(0, 5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
- CHECK_EQ(ss.offset(), 0);
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
- CHECK_EQ(ss.offset(), 0);
-
- ss = s.subspan(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), &arr[5]);
- CHECK_EQ(ss.offset(), 5);
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
- CHECK_EQ(ss.offset(), 0);
-
- // fine to obtain an empty span at the end
- ss = s.subspan(10);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), std::end(arr));
- // fine to obtain an empty span at the end
- ss = s.subspan(10, 0);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), std::end(arr));
-}
-
-//-----------------------------------------------------------------------------
-TEST_CASE("span.range")
-{
- int arr[10];
- span<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.range(0)), decltype(s)>::value));
-
- auto ss = s.range(0, 5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), arr);
-
- ss = s.range(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), &arr[5]);
-
- ss = s.range(5, 10);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), &arr[5]);
-
- ss = s.range(10, 10);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), std::end(arr));
-
- SUBCASE("empty_span")
- {
- s = {};
- ss = s.range(0, 0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), nullptr);
- s = arr;
- ss = s.range(0, 0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr);
- ss = s.range(10, 10);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr + 10);
- ss = s.range(10);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr + 10);
- }
-}
-TEST_CASE("spanrs.range")
-{
- int arr[10];
- spanrs<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.range(0)), decltype(s)>::value));
-
- auto ss = s.range(0, 5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss = s.range(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), &arr[5]);
-
- ss = s.range(5, 10);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), &arr[5]);
-
- ss = s.range(10, 10);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), std::end(arr));
-
- SUBCASE("empty_span")
- {
- s = {};
- ss = s.range(0, 0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), nullptr);
- s = arr;
- ss = s.range(0, 0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr);
- ss = s.range(10, 10);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr + 10);
- ss = s.range(10);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr + 10);
- }
-}
-TEST_CASE("spanrsl.range")
-{
- int arr[10];
- spanrsl<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.range(0)), decltype(s)>::value));
-
- auto ss = s.range(0, 5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss = s.range(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), &arr[5]);
-
- ss = s.range(5, 10);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), &arr[5]);
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss = s.range(10, 10);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), std::end(arr));
-
- SUBCASE("empty_span")
- {
- s = {};
- ss = s.range(0, 0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), nullptr);
- s = arr;
- ss = s.range(0, 0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr);
- ss = s.range(10, 10);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr + 10);
- ss = s.range(10);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr + 10);
- }
-}
-
-//-----------------------------------------------------------------------------
-TEST_CASE("span.first")
-{
- int arr[10];
- span<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.first(1)), decltype(s)>::value));
-
- auto ss = s.first(0);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), arr);
-
- ss = s.first(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), arr);
-
- SUBCASE("empty")
- {
- s = {};
- ss = s.first(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), nullptr);
- s = arr;
- ss = s.first(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr);
- }
-}
-TEST_CASE("spanrs.first")
-{
- int arr[10];
- spanrs<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.first(1)), decltype(s)>::value));
-
- auto ss = s.first(0);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss = s.first(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- SUBCASE("empty")
- {
- s = {};
- ss = s.first(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), nullptr);
- s = arr;
- ss = s.first(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr);
- }
-}
-TEST_CASE("spanrsl.first")
-{
- int arr[10];
- spanrsl<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.first(1)), decltype(s)>::value));
-
- auto ss = s.first(0);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss = s.first(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- SUBCASE("empty")
- {
- s = {};
- ss = s.first(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), nullptr);
- s = arr;
- ss = s.first(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr);
- }
-}
-
-//-----------------------------------------------------------------------------
-TEST_CASE("span.last")
-{
- int arr[10];
- span<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.last(1)), decltype(s)>::value));
-
- auto ss = s.last(0);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), arr + s.size());
-
- ss = s.last(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), arr + 5);
-
- SUBCASE("empty")
- {
- s = {};
- ss = s.last(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), nullptr);
- s = arr;
- ss = s.last(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr + 10);
- }
-}
-TEST_CASE("spanrs.last")
-{
- int arr[10];
- spanrs<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.last(1)), decltype(s)>::value));
-
- auto ss = s.last(0);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), arr + s.size());
-
- ss = s.last(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), arr + 5);
-
- SUBCASE("empty")
- {
- s = {};
- ss = s.last(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), nullptr);
- s = arr;
- ss = s.last(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr + 10);
- }
-}
-TEST_CASE("spanrsl.last")
-{
- int arr[10];
- spanrsl<int> s(arr);
- C4_STATIC_ASSERT((std::is_same<decltype(s.last(1)), decltype(s)>::value));
-
- auto ss = s.last(0);
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.capacity(), 0);
- CHECK_EQ(ss.data(), arr + s.size());
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss = s.last(5);
- CHECK_EQ(ss.size(), 5);
- CHECK_EQ(ss.capacity(), 5);
- CHECK_EQ(ss.data(), arr + 5);
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- SUBCASE("empty")
- {
- s = {};
- ss = s.last(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), nullptr);
- s = arr;
- ss = s.last(0);
- CHECK(ss.empty());
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.data(), arr + 10);
- }
-}
-
-
-//-----------------------------------------------------------------------------
-TEST_CASE_TEMPLATE("span.is_subspan", SpanClass, span<int>, spanrs<int>, spanrsl<int>)
-{
- int buf10[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- int buf_5[] = {-1, 0, 1, 2, 3, 4};
- int *buf5 = buf_5 + 1; // to make sure that one does not immediately follow the other in memory
-
- SpanClass n(buf10);
- SpanClass m(buf5, 5);
-
- CHECK_EQ(n.data(), buf10);
- CHECK_EQ(m.data(), buf5);
-
- CHECK_UNARY(n.is_subspan(n.subspan(0 )));
- CHECK_UNARY(n.is_subspan(n.subspan(0, 3)));
- CHECK_UNARY(n.is_subspan(n.subspan(0, 0)));
-
- CHECK_FALSE(n.is_subspan(m.subspan(0 )));
- CHECK_FALSE(n.is_subspan(m.subspan(0, 3)));
- CHECK_FALSE(n.is_subspan(m.subspan(0, 0)));
-}
-
-//-----------------------------------------------------------------------------
-TEST_CASE_TEMPLATE("span.compll", SpanClass, span<int>, spanrs<int>, spanrsl<int>)
-{
- int buf10[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-
- SpanClass n(buf10);
-
- CHECK_EQ(n.compll(n.subspan(0)), n.subspan(0, 0));
- CHECK_EQ(n.is_subspan(n.compll(n.subspan(0))), true);
- CHECK_EQ(n.compll(n.subspan(0, 0)), n.subspan(0, 0));
- CHECK_EQ(n.is_subspan(n.compll(n.subspan(0, 0))), true);
-
- CHECK_EQ(n.compll(n.subspan(0, 1)), n.subspan(0, 0));
- CHECK_EQ(n.compll(n.subspan(0, 3)), n.subspan(0, 0));
-
- CHECK_EQ(n.compll(n.range(5, 10)), n.subspan(0, 5));
- CHECK_EQ(n.compll(n.range(5, 5)), n.subspan(0, 5));
-
- CHECK_EQ(n.compll(n.subspan(n.size(), 0)), n);
- CHECK_EQ(n.compll(n.range(n.size(), n.size())), n);
-}
-
-
-//-----------------------------------------------------------------------------
-
-TEST_CASE_TEMPLATE("span.complr", SpanClass, span<int>, spanrs<int>, spanrsl<int>)
-{
- int buf10[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-
- SpanClass n(buf10);
-
- CHECK_EQ(n.complr(n.subspan(0)), n.subspan(0, 0));
- CHECK_EQ(n.is_subspan(n.complr(n.subspan(0))), true);
- CHECK_EQ(n.complr(n.subspan(0, 0)), n.subspan(0));
- CHECK_EQ(n.is_subspan(n.complr(n.subspan(0, 0))), true);
-
- CHECK_EQ(n.complr(n.subspan(0, 1)), n.subspan(1));
- CHECK_EQ(n.complr(n.subspan(0, 3)), n.subspan(3));
-
- CHECK_EQ(n.complr(n.subspan(5)), n.subspan(0, 0));
- CHECK_EQ(n.complr(n.range(5, 10)), n.subspan(0, 0));
-
- CHECK_EQ(n.complr(n.subspan(5, 0)), n.subspan(5));
- CHECK_EQ(n.complr(n.range(5, 5)), n.subspan(5));
-
- CHECK_EQ(n.complr(n.subspan(0, 0)), n);
- CHECK_EQ(n.complr(n.range(0, 0)), n);
-}
-
-
-//-----------------------------------------------------------------------------
-TEST_CASE("span.rtrim")
-{
- int arr[10];
- span<int> s(arr);
- auto ss = s;
-
- ss.rtrim(0);
- CHECK_EQ(ss.size(), s.size());
- CHECK_EQ(ss.capacity(), s.capacity());
- CHECK_EQ(ss.data(), arr);
-
- ss.rtrim(5);
- CHECK_EQ(ss.size(), s.size() - 5);
- CHECK_EQ(ss.capacity(), s.capacity() - 5);
- CHECK_EQ(ss.data(), arr);
-}
-TEST_CASE("spanrs.rtrim")
-{
- int arr[10];
- spanrs<int> s(arr);
- auto ss = s;
-
- ss.rtrim(0);
- CHECK_EQ(ss.size(), s.size());
- CHECK_EQ(ss.capacity(), s.capacity());
- CHECK_EQ(ss.data(), arr);
-
- ss.rtrim(5);
- CHECK_EQ(ss.size(), s.size() - 5);
- CHECK_EQ(ss.capacity(), s.capacity());
- CHECK_EQ(ss.data(), arr);
-}
-TEST_CASE("spanrsl.rtrim")
-{
- int arr[10];
- spanrsl<int> s(arr);
- auto ss = s;
-
- ss.rtrim(0);
- CHECK_EQ(ss.size(), s.size());
- CHECK_EQ(ss.capacity(), s.capacity());
- CHECK_EQ(ss.data(), arr);
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss.rtrim(5);
- CHECK_EQ(ss.size(), s.size() - 5);
- CHECK_EQ(ss.capacity(), s.capacity());
- CHECK_EQ(ss.data(), arr);
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-}
-
-//-----------------------------------------------------------------------------
-TEST_CASE("span.ltrim")
-{
- int arr[10];
- span<int> s(arr);
- auto ss = s;
-
- ss.ltrim(0);
- CHECK_EQ(ss.size(), s.size());
- CHECK_EQ(ss.capacity(), s.capacity());
- CHECK_EQ(ss.data(), arr);
-
- ss.ltrim(5);
- CHECK_EQ(ss.size(), s.size() - 5);
- CHECK_EQ(ss.capacity(), s.capacity() - 5);
- CHECK_EQ(ss.data(), arr + 5);
-}
-TEST_CASE("spanrs.ltrim")
-{
- int arr[10];
- spanrs<int> s(arr);
- auto ss = s;
-
- ss.ltrim(0);
- CHECK_EQ(ss.size(), s.size());
- CHECK_EQ(ss.capacity(), ss.capacity());
- CHECK_EQ(ss.data(), arr);
-
- ss.ltrim(5);
- CHECK_EQ(ss.size(), s.size() - 5);
- CHECK_EQ(ss.capacity(), s.size() - 5);
- CHECK_EQ(ss.data(), arr + 5);
-}
-TEST_CASE("spanrsl.ltrim")
-{
- int arr[10];
- spanrsl<int> s(arr);
- auto ss = s;
-
- ss.ltrim(0);
- CHECK_EQ(ss.size(), s.size());
- CHECK_EQ(ss.capacity(), ss.capacity());
- CHECK_EQ(ss.data(), arr);
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-
- ss.ltrim(5);
- CHECK_EQ(ss.size(), s.size() - 5);
- CHECK_EQ(ss.capacity(), s.size() - 5);
- CHECK_EQ(ss.data(), arr + 5);
-
- ss = ss.original();
- CHECK_EQ(ss.size(), 10);
- CHECK_EQ(ss.capacity(), 10);
- CHECK_EQ(ss.data(), arr);
-}
-
-//-----------------------------------------------------------------------------
-const char larrc[11] = "0123456789";
-const char rarrc[11] = "1234567890";
-const int larri[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
-const int rarri[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
-TEST_CASE("span.reverse_iter")
-{
- cspan<int> s(larri);
- REQUIRE_EQ(s.data(), larri);
- REQUIRE_EQ(s.begin(), std::begin(larri));
- REQUIRE_EQ(s.end(), std::end(larri));
- REQUIRE_EQ(&*s.rbegin(), s.end()-1);
- using rit = cspan<int>::const_reverse_iterator;
- int pos = szconv<int>(s.size()) - 1;
- size_t count = 0;
- //for(rit b = s.rbegin(), e = s.rend(); b != e; ++b) // BUG: b != e is never true on arm-eabi-g++-7
- for(rit b = s.rbegin(), e = s.rend(); b < e; ++b)
- {
- CHECK_EQ(&(*b), s.data() + pos);
- auto spos = szconv<size_t>(pos);
- REQUIRE_EQ(&*b, &s[spos]);
- REQUIRE_GE(pos, 0);
- REQUIRE_LT(pos, szconv<int>(s.size()));
- REQUIRE_LT(count, s.size());
- CHECK_EQ(*b, s[spos]);
- --pos;
- ++count;
- }
- CHECK_EQ(pos, -1);
- CHECK_EQ(count, s.size());
-}
-
-//-----------------------------------------------------------------------------
-TEST_CASE("span_impl.eq")
-{
- CHECK_EQ(cspan <char>(larrc), cspan <char>(larrc));
- CHECK_EQ(cspanrs<char>(larrc), cspan <char>(larrc));
- CHECK_EQ(cspan <char>(larrc), cspanrs<char>(larrc));
- CHECK_EQ(cspanrs<char>(larrc), cspanrs<char>(larrc));
-
- CHECK_EQ(cspan <int>(larri) , cspan <int>(larri));
- CHECK_EQ(cspanrs<int>(larri) , cspan <int>(larri));
- CHECK_EQ(cspan <int>(larri) , cspanrs<int>(larri));
- CHECK_EQ(cspanrs<int>(larri) , cspanrs<int>(larri));
-}
-
-TEST_CASE("span_impl.lt")
-{
- CHECK_LT(cspan <char>(larrc), cspan <char>(rarrc));
- CHECK_LT(cspanrs<char>(larrc), cspan <char>(rarrc));
- CHECK_LT(cspan <char>(larrc), cspanrs<char>(rarrc));
- CHECK_LT(cspanrs<char>(larrc), cspanrs<char>(rarrc));
-
- CHECK_LT(cspan <int>(larri) , cspan <int>(rarri));
- CHECK_LT(cspanrs<int>(larri) , cspan <int>(rarri));
- CHECK_LT(cspan <int>(larri) , cspanrs<int>(rarri));
- CHECK_LT(cspanrs<int>(larri) , cspanrs<int>(rarri));
-}
-TEST_CASE("span_impl.gt")
-{
- CHECK_GT(cspan <char>(rarrc), cspan <char>(larrc));
- CHECK_GT(cspan <char>(rarrc), cspanrs<char>(larrc));
- CHECK_GT(cspanrs<char>(rarrc), cspan <char>(larrc));
- CHECK_GT(cspanrs<char>(rarrc), cspanrs<char>(larrc));
-
- CHECK_GT(cspan <int>(rarri) , cspan <int>(larri));
- CHECK_GT(cspan <int>(rarri) , cspanrs<int>(larri));
- CHECK_GT(cspanrs<int>(rarri) , cspan <int>(larri));
- CHECK_GT(cspanrs<int>(rarri) , cspanrs<int>(larri));
-}
-
-TEST_CASE("span_impl.ge")
-{
- CHECK_GE(cspan <char>(rarrc), cspan <char>(larrc));
- CHECK_GE(cspan <char>(rarrc), cspanrs<char>(larrc));
- CHECK_GE(cspanrs<char>(rarrc), cspan <char>(larrc));
- CHECK_GE(cspanrs<char>(rarrc), cspanrs<char>(larrc));
- CHECK_GE(cspan <char>(larrc), cspan <char>(larrc));
- CHECK_GE(cspan <char>(larrc), cspanrs<char>(larrc));
- CHECK_GE(cspanrs<char>(larrc), cspan <char>(larrc));
- CHECK_GE(cspanrs<char>(larrc), cspanrs<char>(larrc));
- CHECK_GE(cspan <int>(rarri) , cspan <int>(larri));
- CHECK_GE(cspan <int>(rarri) , cspanrs<int>(larri));
- CHECK_GE(cspanrs<int>(rarri) , cspan <int>(larri));
- CHECK_GE(cspanrs<int>(rarri) , cspanrs<int>(larri));
- CHECK_GE(cspan <int>(larri) , cspan <int>(larri));
- CHECK_GE(cspan <int>(larri) , cspanrs<int>(larri));
- CHECK_GE(cspanrs<int>(larri) , cspan <int>(larri));
- CHECK_GE(cspanrs<int>(larri) , cspanrs<int>(larri));
-}
-TEST_CASE("span_impl.le")
-{
- CHECK_LE(cspan <char>(larrc), cspan <char>(rarrc));
- CHECK_LE(cspanrs<char>(larrc), cspan <char>(rarrc));
- CHECK_LE(cspan <char>(larrc), cspanrs<char>(rarrc));
- CHECK_LE(cspanrs<char>(larrc), cspanrs<char>(rarrc));
- CHECK_LE(cspan <char>(larrc), cspan <char>(larrc));
- CHECK_LE(cspanrs<char>(larrc), cspan <char>(larrc));
- CHECK_LE(cspan <char>(larrc), cspanrs<char>(larrc));
- CHECK_LE(cspanrs<char>(larrc), cspanrs<char>(larrc));
- CHECK_LE(cspan <int>(larri) , cspan <int>(rarri));
- CHECK_LE(cspanrs<int>(larri) , cspan <int>(rarri));
- CHECK_LE(cspan <int>(larri) , cspanrs<int>(rarri));
- CHECK_LE(cspanrs<int>(larri) , cspanrs<int>(rarri));
- CHECK_LE(cspan <int>(larri) , cspan <int>(larri));
- CHECK_LE(cspanrs<int>(larri) , cspan <int>(larri));
- CHECK_LE(cspan <int>(larri) , cspanrs<int>(larri));
- CHECK_LE(cspanrs<int>(larri) , cspanrs<int>(larri));
-}
-
-} // namespace c4
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_std_string.cpp b/thirdparty/ryml/ext/c4core/test/test_std_string.cpp
deleted file mode 100644
index de5b3739b..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_std_string.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-#include "c4/test.hpp"
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/std/string_fwd.hpp"
-#include "c4/std/string.hpp"
-#endif
-
-namespace c4 {
-
-TEST_CASE("std_string.to_substr")
-{
- std::string s("barnabe");
- substr ss = to_substr(s);
- CHECK_EQ(ss.str, s.data());
- CHECK_EQ(ss.len, s.size());
- s[0] = 'B';
- CHECK_EQ(ss[0], 'B');
- ss[0] = 'b';
- CHECK_EQ(s[0], 'b');
-}
-
-TEST_CASE("std_string.to_csubstr")
-{
- std::string s("barnabe");
- csubstr ss = to_csubstr(s);
- CHECK_EQ(ss.str, s.data());
- CHECK_EQ(ss.len, s.size());
- s[0] = 'B';
- CHECK_EQ(ss[0], 'B');
-}
-
-TEST_CASE("std_string.compare_csubstr")
-{
- std::string s0 = "000";
- std::string s1 = "111";
- csubstr ss0 = "000";
- csubstr ss1 = "111";
- CHECK_NE(s0.data(), ss0.data());
- CHECK_NE(s1.data(), ss1.data());
- //
- CHECK_EQ(s0, ss0);
- CHECK_EQ(s1, ss1);
- CHECK_EQ(ss0, s0);
- CHECK_EQ(ss1, s1);
- //
- CHECK_NE(s1, ss0);
- CHECK_NE(s0, ss1);
- CHECK_NE(ss1, s0);
- CHECK_NE(ss0, s1);
- //
- CHECK_GE(s0, ss0);
- CHECK_LE(s1, ss1);
- CHECK_GE(ss0, s0);
- CHECK_LE(ss1, s1);
- CHECK_GE(s1, ss0);
- CHECK_LE(s0, ss1);
- CHECK_GE(ss1, s0);
- CHECK_LE(ss0, s1);
- //
- CHECK_GT(s1, ss0);
- CHECK_LT(s0, ss1);
- CHECK_GT(ss1, s0);
- CHECK_LT(ss0, s1);
-}
-
-TEST_CASE("std_string.compare_substr")
-{
- std::string s0 = "000";
- std::string s1 = "111";
- char buf0[] = "000";
- char buf1[] = "111";
- substr ss0 = buf0;
- substr ss1 = buf1;
- CHECK_NE(s0.data(), ss0.data());
- CHECK_NE(s1.data(), ss1.data());
- //
- CHECK_EQ(s0, ss0);
- CHECK_EQ(s1, ss1);
- CHECK_EQ(ss0, s0);
- CHECK_EQ(ss1, s1);
- //
- CHECK_NE(s1, ss0);
- CHECK_NE(s0, ss1);
- CHECK_NE(ss1, s0);
- CHECK_NE(ss0, s1);
- //
- CHECK_GE(s0, ss0);
- CHECK_LE(s1, ss1);
- CHECK_GE(ss0, s0);
- CHECK_LE(ss1, s1);
- CHECK_GE(s1, ss0);
- CHECK_LE(s0, ss1);
- CHECK_GE(ss1, s0);
- CHECK_LE(ss0, s1);
- //
- CHECK_GT(s1, ss0);
- CHECK_LT(s0, ss1);
- CHECK_GT(ss1, s0);
- CHECK_LT(ss0, s1);
-}
-
-TEST_CASE("std_string.to_chars")
-{
- const std::string s0 = "000";
- char buf_[100] = {};
- substr buf = buf_;
- CHECK_NE(buf.data(), s0.data());
- size_t ret = to_chars({}, s0);
- CHECK_EQ(ret, s0.size());
- CHECK_NE(buf.first(ret), s0);
- ret = to_chars(buf, s0);
- CHECK_EQ(ret, s0.size());
- CHECK_EQ(buf.first(ret), s0);
-}
-
-TEST_CASE("std_string.from_chars")
-{
- std::string s0;
- csubstr buf = "0123456798";
- CHECK_NE(buf.data(), s0.data());
- bool ok = from_chars(buf, &s0);
- CHECK(ok);
- CHECK_EQ(buf, s0);
-}
-
-} // namespace c4
diff --git a/thirdparty/ryml/ext/c4core/test/test_std_vector.cpp b/thirdparty/ryml/ext/c4core/test/test_std_vector.cpp
deleted file mode 100644
index 1cfe54f94..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_std_vector.cpp
+++ /dev/null
@@ -1,133 +0,0 @@
-#include "c4/test.hpp"
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/std/vector_fwd.hpp"
-#include "c4/std/vector.hpp"
-#endif
-
-namespace c4 {
-
-template<size_t N>
-std::vector<char> ctor(const char (&s)[N])
-{
- return std::vector<char>(s, s+N-1);
-}
-
-TEST_CASE("std_vector.to_csubstr")
-{
- std::vector<char> s = ctor("barnabe");
- csubstr ss = to_csubstr(s);
- CHECK_EQ(ss, csubstr("barnabe"));
- CHECK_EQ(ss.str, s.data());
- CHECK_EQ(ss.len, s.size());
-}
-
-TEST_CASE("std_vector.to_substr")
-{
- std::vector<char> s = ctor("barnabe");
- substr ss = to_substr(s);
- CHECK_EQ(ss, csubstr("barnabe"));
- CHECK_EQ(ss.str, s.data());
- CHECK_EQ(ss.len, s.size());
- //
- CHECK_EQ(s[0], 'b');
- ss[0] = 'B';
- CHECK_EQ(s[0], 'B');
- ss[0] = 'A';
- CHECK_EQ(s[0], 'A');
-}
-
-TEST_CASE("std_vector.compare_csubstr")
-{
- std::vector<char> s0 = ctor("000");
- std::vector<char> s1 = ctor("111");
- csubstr ss0 = "000";
- csubstr ss1 = "111";
- CHECK_NE(s0.data(), ss0.data());
- CHECK_NE(s1.data(), ss1.data());
- //
- CHECK_EQ(s0, ss0);
- CHECK_EQ(s1, ss1);
- CHECK_EQ(ss0, s0);
- CHECK_EQ(ss1, s1);
- //
- CHECK_NE(s1, ss0);
- CHECK_NE(s0, ss1);
- CHECK_NE(ss1, s0);
- CHECK_NE(ss0, s1);
- //
- CHECK_GE(s0, ss0);
- CHECK_LE(s1, ss1);
- CHECK_GE(ss0, s0);
- CHECK_LE(ss1, s1);
- CHECK_GE(s1, ss0);
- CHECK_LE(s0, ss1);
- CHECK_GE(ss1, s0);
- CHECK_LE(ss0, s1);
- //
- CHECK_GT(s1, ss0);
- CHECK_LT(s0, ss1);
- CHECK_GT(ss1, s0);
- CHECK_LT(ss0, s1);
-}
-
-TEST_CASE("std_vector.compare_substr")
-{
- std::vector<char> s0 = ctor("000");
- std::vector<char> s1 = ctor("111");
- char buf0[] = "000";
- char buf1[] = "111";
- substr ss0 = buf0;
- substr ss1 = buf1;
- CHECK_NE(s0.data(), ss0.data());
- CHECK_NE(s1.data(), ss1.data());
- //
- CHECK_EQ(s0, ss0);
- CHECK_EQ(s1, ss1);
- CHECK_EQ(ss0, s0);
- CHECK_EQ(ss1, s1);
- //
- CHECK_NE(s1, ss0);
- CHECK_NE(s0, ss1);
- CHECK_NE(ss1, s0);
- CHECK_NE(ss0, s1);
- //
- CHECK_GE(s0, ss0);
- CHECK_LE(s1, ss1);
- CHECK_GE(ss0, s0);
- CHECK_LE(ss1, s1);
- CHECK_GE(s1, ss0);
- CHECK_LE(s0, ss1);
- CHECK_GE(ss1, s0);
- CHECK_LE(ss0, s1);
- //
- CHECK_GT(s1, ss0);
- CHECK_LT(s0, ss1);
- CHECK_GT(ss1, s0);
- CHECK_LT(ss0, s1);
-}
-
-TEST_CASE("std_vector.to_chars")
-{
- const std::vector<char> s0 = ctor("000");
- char buf_[100] = {};
- substr buf = buf_;
- CHECK_NE(buf.data(), s0.data());
- size_t ret = to_chars({}, s0);
- CHECK_EQ(ret, s0.size());
- CHECK_NE(buf.first(ret), s0);
- ret = to_chars(buf, s0);
- CHECK_EQ(ret, s0.size());
- CHECK_EQ(buf.first(ret), s0);
-}
-
-TEST_CASE("std_vector.from_chars")
-{
- std::vector<char> s0;
- csubstr buf = "0123456798";
- CHECK_NE(buf.data(), s0.data());
- bool ok = from_chars(buf, &s0);
- CHECK(ok);
- CHECK_EQ(buf, s0);
-}
-
-} // namespace c4
diff --git a/thirdparty/ryml/ext/c4core/test/test_substr.cpp b/thirdparty/ryml/ext/c4core/test/test_substr.cpp
deleted file mode 100644
index 777b4b4b0..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_substr.cpp
+++ /dev/null
@@ -1,4507 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/std/std.hpp"
-#include "c4/substr.hpp"
-#endif
-
-#include <c4/test.hpp>
-
-#include "c4/libtest/supprwarn_push.hpp"
-#include <iostream>
-
-namespace c4 {
-
-TEST_CASE("substr.ctor_from_char")
-{
- char buf1[] = "{foo: 1}";
- char buf2[] = "{foo: 2}";
- substr s(buf1);
- CHECK_EQ(s, "{foo: 1}");
- s = buf2;
- CHECK_EQ(s, "{foo: 2}");
-}
-
-TEST_CASE("csubstr.ctor_from_char")
-{
- char buf1[] = "{foo: 1}";
- char buf2[] = "{foo: 2}";
- csubstr s(buf1);
- CHECK_EQ(s, "{foo: 1}");
- s = buf2;
- CHECK_EQ(s, "{foo: 2}");
-}
-
-TEST_CASE("csubstr.empty_vs_null")
-{
- csubstr s;
- CHECK_UNARY(s.empty());
- CHECK_UNARY(s.len == 0);
- CHECK_UNARY(s.str == nullptr);
- CHECK_UNARY(s == nullptr);
-
- s = "";
- CHECK_UNARY(s.empty());
- CHECK_UNARY(s.len == 0);
- CHECK_UNARY(s.str != nullptr);
- CHECK_UNARY(s != nullptr);
-
- s = nullptr;
- CHECK_UNARY(s.empty());
- CHECK_UNARY(s.len == 0);
- CHECK_UNARY(s.str == nullptr);
- CHECK_UNARY(s == nullptr);
-
- s = "";
- CHECK_UNARY(s.empty());
- CHECK_UNARY(s.len == 0);
- CHECK_UNARY(s.str != nullptr);
- CHECK_UNARY(s != nullptr);
-
- s = {};
- CHECK_UNARY(s.empty());
- CHECK_UNARY(s.len == 0);
- CHECK_UNARY(s.str == nullptr);
- CHECK_UNARY(s == nullptr);
-
- csubstr pp(nullptr);
- CHECK_UNARY(pp.empty());
- CHECK_UNARY(pp.len == 0);
- CHECK_UNARY(pp.str == nullptr);
- CHECK_UNARY(pp == nullptr);
-}
-
-TEST_CASE("substr.is_sub")
-{
- csubstr buf = "0123456789";
-
- // ref
- csubstr s;
- csubstr ref = buf.select("345");
- CHECK_EQ(ref, "345");
- CHECK_UNARY(buf.is_super(ref));
- CHECK_UNARY(ref.is_sub(buf));
- CHECK_FALSE(ref.is_super(buf));
- CHECK_FALSE(buf.is_sub(ref));
-
- buf.clear();
- ref.clear();
- CHECK_FALSE(buf.is_super(ref));
- CHECK_FALSE(ref.is_super(buf));
- CHECK_FALSE(ref.is_sub(buf));
- CHECK_FALSE(buf.is_sub(ref));
-
- buf = "";
- ref = buf;
- CHECK_FALSE(buf.is_super("a"));
- CHECK_UNARY(buf.is_super(ref));
-}
-
-TEST_CASE("substr.overlaps")
-{
- csubstr buf = "0123456789";
-
- // ref
- csubstr s;
- csubstr ref = buf.select("345");
- CHECK_EQ(ref.len, 3);
- CHECK_EQ(ref, "345");
-
- // all_left
- s = buf.sub(0, 2);
- CHECK_EQ(s, "01");
- CHECK_FALSE(ref.overlaps(s));
- CHECK_FALSE(s.overlaps(ref));
-
- // all_left_tight
- s = buf.sub(0, 3);
- CHECK_EQ(s, "012");
- CHECK_FALSE(ref.overlaps(s));
- CHECK_FALSE(s.overlaps(ref));
-
- // overlap_left
- s = buf.sub(0, 4);
- CHECK_EQ(s, "0123");
- CHECK_UNARY(ref.overlaps(s));
- CHECK_UNARY(s.overlaps(ref));
-
- // inside_tight_left
- s = buf.sub(3, 1);
- CHECK_EQ(s, "3");
- CHECK_UNARY(ref.overlaps(s));
- CHECK_UNARY(s.overlaps(ref));
- s = buf.sub(3, 2);
- CHECK_EQ(s, "34");
- CHECK_UNARY(ref.overlaps(s));
- CHECK_UNARY(s.overlaps(ref));
-
- // all_inside_tight
- s = buf.sub(4, 1);
- CHECK_EQ(s, "4");
- CHECK_UNARY(ref.overlaps(s));
- CHECK_UNARY(s.overlaps(ref));
- s = buf.sub(3, 3);
- CHECK_EQ(s, "345");
- CHECK_UNARY(ref.overlaps(s));
- CHECK_UNARY(s.overlaps(ref));
-
- // inside_tight_right
- s = buf.sub(4, 2);
- CHECK_EQ(s, "45");
- CHECK_UNARY(ref.overlaps(s));
- CHECK_UNARY(s.overlaps(ref));
- s = buf.sub(5, 1);
- CHECK_EQ(s, "5");
- CHECK_UNARY(ref.overlaps(s));
- CHECK_UNARY(s.overlaps(ref));
-
- // overlap_right
- s = buf.sub(5, 2);
- CHECK_EQ(s, "56");
- CHECK_UNARY(ref.overlaps(s));
- CHECK_UNARY(s.overlaps(ref));
- s = buf.sub(5, 3);
- CHECK_EQ(s, "567");
- CHECK_UNARY(ref.overlaps(s));
- CHECK_UNARY(s.overlaps(ref));
-
- // all_right_tight
- s = buf.sub(6, 1);
- CHECK_EQ(s, "6");
- CHECK_FALSE(ref.overlaps(s));
- CHECK_FALSE(s.overlaps(ref));
- s = buf.sub(6, 2);
- CHECK_EQ(s, "67");
- CHECK_FALSE(ref.overlaps(s));
- CHECK_FALSE(s.overlaps(ref));
-
- // all_right
- s = buf.sub(7, 1);
- CHECK_EQ(s, "7");
- CHECK_FALSE(ref.overlaps(s));
- CHECK_FALSE(s.overlaps(ref));
- s = buf.sub(7, 2);
- CHECK_EQ(s, "78");
- CHECK_FALSE(ref.overlaps(s));
- CHECK_FALSE(s.overlaps(ref));
-
- // null vs null
- csubstr n1, n2;
- CHECK_EQ(n1.str, nullptr);
- CHECK_EQ(n2.str, nullptr);
- CHECK_EQ(n1.len, 0);
- CHECK_EQ(n2.len, 0);
- CHECK_FALSE(n1.overlaps(n2));
- CHECK_FALSE(n2.overlaps(n1));
-}
-
-TEST_CASE("substr.sub")
-{
- CHECK_EQ(csubstr("10]").sub(0, 2), "10");
-}
-
-TEST_CASE("substr.range")
-{
- csubstr s = "0123456789";
- CHECK_EQ(s.range(0, 10), "0123456789");
- CHECK_EQ(s.range(0 ), "0123456789");
- CHECK_EQ(s.range(1, 10), "123456789");
- CHECK_EQ(s.range(1 ), "123456789");
- CHECK_EQ(s.range(2, 10), "23456789");
- CHECK_EQ(s.range(2 ), "23456789");
- CHECK_EQ(s.range(3, 10), "3456789");
- CHECK_EQ(s.range(3 ), "3456789");
- CHECK_EQ(s.range(4, 10), "456789");
- CHECK_EQ(s.range(4 ), "456789");
- CHECK_EQ(s.range(5, 10), "56789");
- CHECK_EQ(s.range(5 ), "56789");
- CHECK_EQ(s.range(6, 10), "6789");
- CHECK_EQ(s.range(6 ), "6789");
- CHECK_EQ(s.range(7, 10), "789");
- CHECK_EQ(s.range(7 ), "789");
- CHECK_EQ(s.range(8, 10), "89");
- CHECK_EQ(s.range(8 ), "89");
- CHECK_EQ(s.range(9, 10), "9");
- CHECK_EQ(s.range(9 ), "9");
- CHECK_EQ(s.range(10, 10), "");
- CHECK_EQ(s.range(10 ), "");
-
- CHECK_EQ(s.range(0 , 9), "012345678");
- CHECK_EQ(s.range(1 , 9), "12345678");
- CHECK_EQ(s.range(2 , 9), "2345678");
- CHECK_EQ(s.range(3 , 9), "345678");
- CHECK_EQ(s.range(4 , 9), "45678");
- CHECK_EQ(s.range(5 , 9), "5678");
- CHECK_EQ(s.range(6 , 9), "678");
- CHECK_EQ(s.range(7 , 9), "78");
- CHECK_EQ(s.range(8 , 9), "8");
- CHECK_EQ(s.range(9 , 9), "");
-
- CHECK_EQ(s.range(0 , 7), "0123456");
- CHECK_EQ(s.range(1 , 7), "123456");
- CHECK_EQ(s.range(2 , 7), "23456");
- CHECK_EQ(s.range(3 , 7), "3456");
- CHECK_EQ(s.range(4 , 7), "456");
- CHECK_EQ(s.range(5 , 7), "56");
- CHECK_EQ(s.range(6 , 7), "6");
- CHECK_EQ(s.range(7 , 7), "");
-
- CHECK_EQ(s.range(0 , 5), "01234");
- CHECK_EQ(s.range(1 , 5), "1234");
- CHECK_EQ(s.range(2 , 5), "234");
- CHECK_EQ(s.range(3 , 5), "34");
- CHECK_EQ(s.range(4 , 5), "4");
- CHECK_EQ(s.range(5 , 5), "");
-
- CHECK_EQ(s.range(0 , 3), "012");
- CHECK_EQ(s.range(1 , 3), "12");
- CHECK_EQ(s.range(2 , 3), "2");
- CHECK_EQ(s.range(3 , 3), "");
-
- CHECK_EQ(s.range(0 , 2), "01");
- CHECK_EQ(s.range(1 , 2), "1");
- CHECK_EQ(s.range(2 , 2), "");
-
- CHECK_EQ(s.range(0 , 1), "0");
- CHECK_EQ(s.range(1 , 1), "");
-}
-
-TEST_CASE("substr.first")
-{
- csubstr s = "0123456789";
-
- CHECK_EQ(s.first(csubstr::npos), s);
-
- CHECK_EQ(s.first(10), "0123456789");
- CHECK_EQ(s.first(9), "012345678");
- CHECK_EQ(s.first(8), "01234567");
- CHECK_EQ(s.first(7), "0123456");
- CHECK_EQ(s.first(6), "012345");
- CHECK_EQ(s.first(5), "01234");
- CHECK_EQ(s.first(4), "0123");
- CHECK_EQ(s.first(3), "012");
- CHECK_EQ(s.first(2), "01");
- CHECK_EQ(s.first(1), "0");
- CHECK_EQ(s.first(0), "");
-}
-
-TEST_CASE("substr.last")
-{
- csubstr s = "0123456789";
-
- CHECK_EQ(s.last(csubstr::npos), s);
-
- CHECK_EQ(s.last(10), "0123456789");
- CHECK_EQ(s.last(9), "123456789");
- CHECK_EQ(s.last(8), "23456789");
- CHECK_EQ(s.last(7), "3456789");
- CHECK_EQ(s.last(6), "456789");
- CHECK_EQ(s.last(5), "56789");
- CHECK_EQ(s.last(4), "6789");
- CHECK_EQ(s.last(3), "789");
- CHECK_EQ(s.last(2), "89");
- CHECK_EQ(s.last(1), "9");
- CHECK_EQ(s.last(0), "");
-}
-
-TEST_CASE("substr.offs")
-{
- csubstr s = "0123456789";
-
- CHECK_EQ(s.offs(0, 0), s);
-
- CHECK_EQ(s.offs(1, 0), "123456789");
- CHECK_EQ(s.offs(0, 1), "012345678");
- CHECK_EQ(s.offs(1, 1), "12345678");
-
- CHECK_EQ(s.offs(1, 2), "1234567");
- CHECK_EQ(s.offs(2, 1), "2345678");
- CHECK_EQ(s.offs(2, 2), "234567");
-
- CHECK_EQ(s.offs(2, 3), "23456");
- CHECK_EQ(s.offs(3, 2), "34567");
- CHECK_EQ(s.offs(3, 3), "3456");
-
- CHECK_EQ(s.offs(3, 4), "345");
- CHECK_EQ(s.offs(4, 3), "456");
- CHECK_EQ(s.offs(4, 4), "45");
-
- CHECK_EQ(s.offs(4, 5), "4");
- CHECK_EQ(s.offs(5, 4), "5");
- CHECK_EQ(s.offs(5, 5), "");
-}
-
-TEST_CASE("substr.count")
-{
- csubstr buf = "0123456789";
-
- CHECK_EQ(buf.count('0'), 1);
- CHECK_EQ(buf.count('0', 0), 1);
- CHECK_EQ(buf.count('0', 1), 0);
- CHECK_EQ(buf.count('0', buf.len), 0);
-
- CHECK_EQ(buf.count("01"), 1);
- CHECK_EQ(buf.count("01", 0), 1);
- CHECK_EQ(buf.count("01", 1), 0);
- CHECK_EQ(buf.count("01", buf.len), 0);
-
- CHECK_EQ(buf.count('1'), 1);
- CHECK_EQ(buf.count('1', 0), 1);
- CHECK_EQ(buf.count('1', 1), 1);
- CHECK_EQ(buf.count('1', 2), 0);
- CHECK_EQ(buf.count('1', buf.len), 0);
-
- CHECK_EQ(buf.count("12"), 1);
- CHECK_EQ(buf.count("12", 0), 1);
- CHECK_EQ(buf.count("12", 1), 1);
- CHECK_EQ(buf.count("12", 2), 0);
- CHECK_EQ(buf.count("12", buf.len), 0);
-
- CHECK_EQ(buf.count('2'), 1);
- CHECK_EQ(buf.count('2', 0), 1);
- CHECK_EQ(buf.count('2', 1), 1);
- CHECK_EQ(buf.count('2', 2), 1);
- CHECK_EQ(buf.count('2', 3), 0);
- CHECK_EQ(buf.count('2', buf.len), 0);
-
- CHECK_EQ(buf.count("23"), 1);
- CHECK_EQ(buf.count("23", 0), 1);
- CHECK_EQ(buf.count("23", 1), 1);
- CHECK_EQ(buf.count("23", 2), 1);
- CHECK_EQ(buf.count("23", 3), 0);
- CHECK_EQ(buf.count("23", buf.len), 0);
-
- CHECK_EQ(buf.count('3'), 1);
- CHECK_EQ(buf.count('3', 0), 1);
- CHECK_EQ(buf.count('3', 1), 1);
- CHECK_EQ(buf.count('3', 2), 1);
- CHECK_EQ(buf.count('3', 3), 1);
- CHECK_EQ(buf.count('3', 4), 0);
- CHECK_EQ(buf.count('3', buf.len), 0);
-
- CHECK_EQ(buf.count("34"), 1);
- CHECK_EQ(buf.count("34", 0), 1);
- CHECK_EQ(buf.count("34", 1), 1);
- CHECK_EQ(buf.count("34", 2), 1);
- CHECK_EQ(buf.count("34", 3), 1);
- CHECK_EQ(buf.count("34", 4), 0);
- CHECK_EQ(buf.count("34", buf.len), 0);
-
- CHECK_EQ(buf.count('4'), 1);
- CHECK_EQ(buf.count('4', 0), 1);
- CHECK_EQ(buf.count('4', 1), 1);
- CHECK_EQ(buf.count('4', 2), 1);
- CHECK_EQ(buf.count('4', 3), 1);
- CHECK_EQ(buf.count('4', 4), 1);
- CHECK_EQ(buf.count('4', 5), 0);
- CHECK_EQ(buf.count('4', buf.len), 0);
-
- CHECK_EQ(buf.count("45"), 1);
- CHECK_EQ(buf.count("45", 0), 1);
- CHECK_EQ(buf.count("45", 1), 1);
- CHECK_EQ(buf.count("45", 2), 1);
- CHECK_EQ(buf.count("45", 3), 1);
- CHECK_EQ(buf.count("45", 4), 1);
- CHECK_EQ(buf.count("45", 5), 0);
- CHECK_EQ(buf.count("45", buf.len), 0);
-
- CHECK_EQ(buf.count('5'), 1);
- CHECK_EQ(buf.count('5', 0), 1);
- CHECK_EQ(buf.count('5', 1), 1);
- CHECK_EQ(buf.count('5', 2), 1);
- CHECK_EQ(buf.count('5', 3), 1);
- CHECK_EQ(buf.count('5', 4), 1);
- CHECK_EQ(buf.count('5', 5), 1);
- CHECK_EQ(buf.count('5', 6), 0);
- CHECK_EQ(buf.count('5', buf.len), 0);
-
- CHECK_EQ(buf.count("56"), 1);
- CHECK_EQ(buf.count("56", 0), 1);
- CHECK_EQ(buf.count("56", 1), 1);
- CHECK_EQ(buf.count("56", 2), 1);
- CHECK_EQ(buf.count("56", 3), 1);
- CHECK_EQ(buf.count("56", 4), 1);
- CHECK_EQ(buf.count("56", 5), 1);
- CHECK_EQ(buf.count("56", 6), 0);
- CHECK_EQ(buf.count("56", buf.len), 0);
-
- CHECK_EQ(buf.count('a'), 0);
- CHECK_EQ(buf.count('a', 0), 0);
- CHECK_EQ(buf.count('a', 1), 0);
- CHECK_EQ(buf.count('a', 2), 0);
- CHECK_EQ(buf.count('a', 3), 0);
- CHECK_EQ(buf.count('a', 4), 0);
- CHECK_EQ(buf.count('a', 5), 0);
- CHECK_EQ(buf.count('a', 6), 0);
- CHECK_EQ(buf.count('a', buf.len), 0);
-
- CHECK_EQ(buf.count("ab"), 0);
- CHECK_EQ(buf.count("ab", 0), 0);
- CHECK_EQ(buf.count("ab", 1), 0);
- CHECK_EQ(buf.count("ab", 2), 0);
- CHECK_EQ(buf.count("ab", 3), 0);
- CHECK_EQ(buf.count("ab", 4), 0);
- CHECK_EQ(buf.count("ab", 5), 0);
- CHECK_EQ(buf.count("ab", 6), 0);
- CHECK_EQ(buf.count("ab", buf.len), 0);
-
- buf = "00110022003300440055";
- CHECK_EQ(buf.count('0', 0), 10);
- CHECK_EQ(buf.count('0', 1), 9);
- CHECK_EQ(buf.count('0', 2), 8);
- CHECK_EQ(buf.count('0', 3), 8);
- CHECK_EQ(buf.count('0', 4), 8);
- CHECK_EQ(buf.count('0', 5), 7);
- CHECK_EQ(buf.count('0', 6), 6);
- CHECK_EQ(buf.count('0', 7), 6);
- CHECK_EQ(buf.count('0', 8), 6);
- CHECK_EQ(buf.count('0', 9), 5);
- CHECK_EQ(buf.count('0', 10), 4);
- CHECK_EQ(buf.count('0', 11), 4);
- CHECK_EQ(buf.count('0', 12), 4);
- CHECK_EQ(buf.count('0', 13), 3);
- CHECK_EQ(buf.count('0', 14), 2);
- CHECK_EQ(buf.count('0', 15), 2);
- CHECK_EQ(buf.count('0', 16), 2);
- CHECK_EQ(buf.count('0', 17), 1);
- CHECK_EQ(buf.count('0', 18), 0);
- CHECK_EQ(buf.count('0', 19), 0);
- CHECK_EQ(buf.count('0', 20), 0);
-
- CHECK_EQ(buf.count('1', 0), 2);
- CHECK_EQ(buf.count('1', 1), 2);
- CHECK_EQ(buf.count('1', 2), 2);
- CHECK_EQ(buf.count('1', 3), 1);
- CHECK_EQ(buf.count('1', 4), 0);
- CHECK_EQ(buf.count('1', 5), 0);
-
- CHECK_EQ(buf.count("01" ), 1);
- CHECK_EQ(buf.count("01", 2), 0);
- CHECK_EQ(buf.count("10" ), 1);
- CHECK_EQ(buf.count("10", 4), 0);
- CHECK_EQ(buf.count("00", 0), 5);
- CHECK_EQ(buf.count("00", 1), 4);
- CHECK_EQ(buf.count("00", 2), 4);
- CHECK_EQ(buf.count("00", 3), 4);
- CHECK_EQ(buf.count("00", 4), 4);
- CHECK_EQ(buf.count("00", 5), 3);
- CHECK_EQ(buf.count("00", 6), 3);
- CHECK_EQ(buf.count("00", 7), 3);
- CHECK_EQ(buf.count("00", 8), 3);
- CHECK_EQ(buf.count("00", 9), 2);
- CHECK_EQ(buf.count("00", 10), 2);
- CHECK_EQ(buf.count("00", 11), 2);
- CHECK_EQ(buf.count("00", 12), 2);
- CHECK_EQ(buf.count("00", 13), 1);
- CHECK_EQ(buf.count("00", 14), 1);
- CHECK_EQ(buf.count("00", 15), 1);
- CHECK_EQ(buf.count("00", 16), 1);
- CHECK_EQ(buf.count("00", 17), 0);
- CHECK_EQ(buf.count("00", 18), 0);
- CHECK_EQ(buf.count("00", 19), 0);
- CHECK_EQ(buf.count("00", 20), 0);
-}
-
-TEST_CASE("substr.select")
-{
- csubstr buf = "0123456789";
-
- CHECK_EQ(buf.select('0'), "0");
- CHECK_EQ(buf.select('1'), "1");
- CHECK_EQ(buf.select('2'), "2");
- CHECK_EQ(buf.select('8'), "8");
- CHECK_EQ(buf.select('9'), "9");
-
- CHECK_EQ(buf.select('a').str, nullptr);
- CHECK_EQ(buf.select('a').len, 0);
- CHECK_EQ(buf.select('a'), "");
-
- CHECK_EQ(buf.select("a").str, nullptr);
- CHECK_EQ(buf.select("a").len, 0);
- CHECK_EQ(buf.select("a"), "");
-
- CHECK_EQ(buf.select("0"), "0");
- CHECK_EQ(buf.select("0").str, buf.str+0);
- CHECK_EQ(buf.select("0").len, 1);
-
- CHECK_EQ(buf.select("1"), "1");
- CHECK_EQ(buf.select("1").str, buf.str+1);
- CHECK_EQ(buf.select("1").len, 1);
-
- CHECK_EQ(buf.select("2"), "2");
- CHECK_EQ(buf.select("2").str, buf.str+2);
- CHECK_EQ(buf.select("2").len, 1);
-
- CHECK_EQ(buf.select("9"), "9");
- CHECK_EQ(buf.select("9").str, buf.str+9);
- CHECK_EQ(buf.select("9").len, 1);
-
- CHECK_EQ(buf.select("012"), "012");
- CHECK_EQ(buf.select("012").str, buf.str+0);
- CHECK_EQ(buf.select("012").len, 3);
-
- CHECK_EQ(buf.select("345"), "345");
- CHECK_EQ(buf.select("345").str, buf.str+3);
- CHECK_EQ(buf.select("345").len, 3);
-
- CHECK_EQ(buf.select("789"), "789");
- CHECK_EQ(buf.select("789").str, buf.str+7);
- CHECK_EQ(buf.select("789").len, 3);
-
- CHECK_EQ(buf.select("89a"), "");
- CHECK_EQ(buf.select("89a").str, nullptr);
- CHECK_EQ(buf.select("89a").len, 0);
-}
-
-TEST_CASE("substr.begins_with")
-{
- CHECK (csubstr(": ").begins_with(":" ));
- CHECK (csubstr(": ").begins_with(':' ));
- CHECK_FALSE(csubstr(":") .begins_with(": "));
-
- CHECK (csubstr( "1234").begins_with('0', 0));
- CHECK (csubstr( "01234").begins_with('0', 1));
- CHECK_FALSE(csubstr( "01234").begins_with('0', 2));
- CHECK (csubstr( "001234").begins_with('0', 1));
- CHECK (csubstr( "001234").begins_with('0', 2));
- CHECK_FALSE(csubstr( "001234").begins_with('0', 3));
- CHECK (csubstr( "0001234").begins_with('0', 1));
- CHECK (csubstr( "0001234").begins_with('0', 2));
- CHECK (csubstr( "0001234").begins_with('0', 3));
- CHECK_FALSE(csubstr( "0001234").begins_with('0', 4));
- CHECK (csubstr("00001234").begins_with('0', 1));
- CHECK (csubstr("00001234").begins_with('0', 2));
- CHECK (csubstr("00001234").begins_with('0', 3));
- CHECK (csubstr("00001234").begins_with('0', 4));
- CHECK_FALSE(csubstr("00001234").begins_with('0', 5));
-}
-
-TEST_CASE("substr.ends_with")
-{
- CHECK_UNARY(csubstr("{% if foo %}bar{% endif %}").ends_with("{% endif %}"));
-
- CHECK (csubstr("1234" ).ends_with('0', 0));
- CHECK (csubstr("12340" ).ends_with('0', 1));
- CHECK_FALSE(csubstr("12340" ).ends_with('0', 2));
- CHECK (csubstr("123400" ).ends_with('0', 1));
- CHECK (csubstr("123400" ).ends_with('0', 2));
- CHECK_FALSE(csubstr("123400" ).ends_with('0', 3));
- CHECK (csubstr("1234000" ).ends_with('0', 1));
- CHECK (csubstr("1234000" ).ends_with('0', 2));
- CHECK (csubstr("1234000" ).ends_with('0', 3));
- CHECK_FALSE(csubstr("1234000" ).ends_with('0', 4));
- CHECK (csubstr("12340000").ends_with('0', 1));
- CHECK (csubstr("12340000").ends_with('0', 2));
- CHECK (csubstr("12340000").ends_with('0', 3));
- CHECK (csubstr("12340000").ends_with('0', 4));
- CHECK_FALSE(csubstr("12340000").ends_with('0', 5));
-}
-
-TEST_CASE("substr.find")
-{
- csubstr s012345 = "012345";
- CHECK(s012345.find('a') == csubstr::npos);
- CHECK(s012345.find('0' ) == 0u);
- CHECK(s012345.find('0', 1u) == csubstr::npos);
- CHECK(s012345.find('1' ) == 1u);
- CHECK(s012345.find('1', 2u) == csubstr::npos);
- CHECK(s012345.find('2' ) == 2u);
- CHECK(s012345.find('2', 3u) == csubstr::npos);
- CHECK(s012345.find('3' ) == 3u);
- CHECK(s012345.find('3', 4u) == csubstr::npos);
- CHECK(s012345.find("ab" ) == csubstr::npos);
- CHECK(s012345.find("01" ) == 0u);
- CHECK(s012345.find("01", 1u) == csubstr::npos);
- CHECK(s012345.find("12" ) == 1u);
- CHECK(s012345.find("12", 2u) == csubstr::npos);
- CHECK(s012345.find("23" ) == 2u);
- CHECK(s012345.find("23", 3u) == csubstr::npos);
-}
-
-TEST_CASE("substr.first_of")
-{
- size_t npos = csubstr::npos;
-
- CHECK_EQ(csubstr("012345").first_of('a'), npos);
- CHECK_EQ(csubstr("012345").first_of("ab"), npos);
-
- CHECK_EQ(csubstr("012345").first_of('0'), 0u);
- CHECK_EQ(csubstr("012345").first_of("0"), 0u);
- CHECK_EQ(csubstr("012345").first_of("01"), 0u);
- CHECK_EQ(csubstr("012345").first_of("10"), 0u);
- CHECK_EQ(csubstr("012345").first_of("012"), 0u);
- CHECK_EQ(csubstr("012345").first_of("210"), 0u);
- CHECK_EQ(csubstr("012345").first_of("0123"), 0u);
- CHECK_EQ(csubstr("012345").first_of("3210"), 0u);
- CHECK_EQ(csubstr("012345").first_of("01234"), 0u);
- CHECK_EQ(csubstr("012345").first_of("43210"), 0u);
- CHECK_EQ(csubstr("012345").first_of("012345"), 0u);
- CHECK_EQ(csubstr("012345").first_of("543210"), 0u);
-
- CHECK_EQ(csubstr("012345").first_of('0', 2u), npos);
- CHECK_EQ(csubstr("012345").first_of("0", 2u), npos);
- CHECK_EQ(csubstr("012345").first_of("01", 2u), npos);
- CHECK_EQ(csubstr("012345").first_of("10", 2u), npos);
- CHECK_EQ(csubstr("012345").first_of("012", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("210", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("0123", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("3210", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("01234", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("43210", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("012345", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("543210", 2u), 2u);
-
- CHECK_EQ(csubstr("012345").first_of('5'), 5u);
- CHECK_EQ(csubstr("012345").first_of("5"), 5u);
- CHECK_EQ(csubstr("012345").first_of("45"), 4u);
- CHECK_EQ(csubstr("012345").first_of("54"), 4u);
- CHECK_EQ(csubstr("012345").first_of("345"), 3u);
- CHECK_EQ(csubstr("012345").first_of("543"), 3u);
- CHECK_EQ(csubstr("012345").first_of("2345"), 2u);
- CHECK_EQ(csubstr("012345").first_of("5432"), 2u);
- CHECK_EQ(csubstr("012345").first_of("12345"), 1u);
- CHECK_EQ(csubstr("012345").first_of("54321"), 1u);
- CHECK_EQ(csubstr("012345").first_of("012345"), 0u);
- CHECK_EQ(csubstr("012345").first_of("543210"), 0u);
-
- CHECK_EQ(csubstr("012345").first_of('5', 2u), 5u);
- CHECK_EQ(csubstr("012345").first_of("5", 2u), 5u);
- CHECK_EQ(csubstr("012345").first_of("45", 2u), 4u);
- CHECK_EQ(csubstr("012345").first_of("54", 2u), 4u);
- CHECK_EQ(csubstr("012345").first_of("345", 2u), 3u);
- CHECK_EQ(csubstr("012345").first_of("543", 2u), 3u);
- CHECK_EQ(csubstr("012345").first_of("2345", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("5432", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("12345", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("54321", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("012345", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_of("543210", 2u), 2u);
-
- CHECK_EQ(csubstr{}.first_of('0'), npos);
- CHECK_EQ(csubstr{}.first_of('0', 0u), npos);
- CHECK_EQ(csubstr("012345").first_of('0', 6u), npos);
- CHECK_EQ(csubstr("012345").first_of('5', 6u), npos);
- CHECK_EQ(csubstr("012345").first_of("012345", 6u), npos);
-}
-
-TEST_CASE("substr.last_of")
-{
- size_t npos = csubstr::npos;
-
- CHECK_EQ(csubstr("012345").last_of('a'), npos);
- CHECK_EQ(csubstr("012345").last_of("ab"), npos);
-
- CHECK_EQ(csubstr("012345").last_of('0'), 0u);
- CHECK_EQ(csubstr("012345").last_of("0"), 0u);
- CHECK_EQ(csubstr("012345").last_of("01"), 1u);
- CHECK_EQ(csubstr("012345").last_of("10"), 1u);
- CHECK_EQ(csubstr("012345").last_of("012"), 2u);
- CHECK_EQ(csubstr("012345").last_of("210"), 2u);
- CHECK_EQ(csubstr("012345").last_of("0123"), 3u);
- CHECK_EQ(csubstr("012345").last_of("3210"), 3u);
- CHECK_EQ(csubstr("012345").last_of("01234"), 4u);
- CHECK_EQ(csubstr("012345").last_of("43210"), 4u);
- CHECK_EQ(csubstr("012345").last_of("012345"), 5u);
- CHECK_EQ(csubstr("012345").last_of("543210"), 5u);
-
- CHECK_EQ(csubstr("012345").last_of('0', 2u), 0u);
- CHECK_EQ(csubstr("012345").last_of("0", 2u), 0u);
- CHECK_EQ(csubstr("012345").last_of("01", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("10", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("012", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("210", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("0123", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("3210", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("01234", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("43210", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("012345", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("543210", 2u), 1u);
-
- CHECK_EQ(csubstr("012345").last_of('5'), 5u);
- CHECK_EQ(csubstr("012345").last_of("5"), 5u);
- CHECK_EQ(csubstr("012345").last_of("45"), 5u);
- CHECK_EQ(csubstr("012345").last_of("54"), 5u);
- CHECK_EQ(csubstr("012345").last_of("345"), 5u);
- CHECK_EQ(csubstr("012345").last_of("543"), 5u);
- CHECK_EQ(csubstr("012345").last_of("2345"), 5u);
- CHECK_EQ(csubstr("012345").last_of("5432"), 5u);
- CHECK_EQ(csubstr("012345").last_of("12345"), 5u);
- CHECK_EQ(csubstr("012345").last_of("54321"), 5u);
- CHECK_EQ(csubstr("012345").last_of("012345"), 5u);
- CHECK_EQ(csubstr("012345").last_of("543210"), 5u);
-
- CHECK_EQ(csubstr("012345").last_of('5', 2u), npos);
- CHECK_EQ(csubstr("012345").last_of("5", 2u), npos);
- CHECK_EQ(csubstr("012345").last_of("45", 2u), npos);
- CHECK_EQ(csubstr("012345").last_of("54", 2u), npos);
- CHECK_EQ(csubstr("012345").last_of("345", 2u), npos);
- CHECK_EQ(csubstr("012345").last_of("543", 2u), npos);
- CHECK_EQ(csubstr("012345").last_of("2345", 2u), npos);
- CHECK_EQ(csubstr("012345").last_of("5432", 2u), npos);
- CHECK_EQ(csubstr("012345").last_of("12345", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("54321", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("012345", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_of("543210", 2u), 1u);
-
- CHECK_EQ(csubstr{}.last_of('?'), npos);
- CHECK_EQ(csubstr("012345").last_of('0', 6u), 0u);
- CHECK_EQ(csubstr("012345").last_of('5', 6u), 5u);
- CHECK_EQ(csubstr("012345").last_of("012345", 6u), 5u);
-}
-
-TEST_CASE("substr.first_not_of")
-{
- size_t npos = csubstr::npos;
-
- CHECK_EQ(csubstr("012345").first_not_of('a'), 0u);
- CHECK_EQ(csubstr("012345").first_not_of("ab"), 0u);
-
- CHECK_EQ(csubstr("012345").first_not_of('0'), 1u);
- CHECK_EQ(csubstr("012345").first_not_of("0"), 1u);
- CHECK_EQ(csubstr("012345").first_not_of("01"), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("10"), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("012"), 3u);
- CHECK_EQ(csubstr("012345").first_not_of("210"), 3u);
- CHECK_EQ(csubstr("012345").first_not_of("0123"), 4u);
- CHECK_EQ(csubstr("012345").first_not_of("3210"), 4u);
- CHECK_EQ(csubstr("012345").first_not_of("01234"), 5u);
- CHECK_EQ(csubstr("012345").first_not_of("43210"), 5u);
- CHECK_EQ(csubstr("012345").first_not_of("012345"), npos);
- CHECK_EQ(csubstr("012345").first_not_of("543210"), npos);
-
- CHECK_EQ(csubstr("012345").first_not_of('0', 2u), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("0", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("01", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("10", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("012", 2u), 3u);
- CHECK_EQ(csubstr("012345").first_not_of("210", 2u), 3u);
- CHECK_EQ(csubstr("012345").first_not_of("0123", 2u), 4u);
- CHECK_EQ(csubstr("012345").first_not_of("3210", 2u), 4u);
- CHECK_EQ(csubstr("012345").first_not_of("01234", 2u), 5u);
- CHECK_EQ(csubstr("012345").first_not_of("43210", 2u), 5u);
- CHECK_EQ(csubstr("012345").first_not_of("012345", 2u), npos);
- CHECK_EQ(csubstr("012345").first_not_of("543210", 2u), npos);
-
- CHECK_EQ(csubstr("012345").first_not_of('5'), 0u);
- CHECK_EQ(csubstr("012345").first_not_of("5"), 0u);
- CHECK_EQ(csubstr("012345").first_not_of("45"), 0u);
- CHECK_EQ(csubstr("012345").first_not_of("54"), 0u);
- CHECK_EQ(csubstr("012345").first_not_of("345"), 0u);
- CHECK_EQ(csubstr("012345").first_not_of("543"), 0u);
- CHECK_EQ(csubstr("012345").first_not_of("2345"), 0u);
- CHECK_EQ(csubstr("012345").first_not_of("5432"), 0u);
- CHECK_EQ(csubstr("012345").first_not_of("12345"), 0u);
- CHECK_EQ(csubstr("012345").first_not_of("54321"), 0u);
- CHECK_EQ(csubstr("012345").first_not_of("012345"), npos);
- CHECK_EQ(csubstr("012345").first_not_of("543210"), npos);
-
- CHECK_EQ(csubstr("012345").first_not_of('5', 2u), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("5", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("45", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("54", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("345", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("543", 2u), 2u);
- CHECK_EQ(csubstr("012345").first_not_of("2345", 2u), npos);
- CHECK_EQ(csubstr("012345").first_not_of("5432", 2u), npos);
- CHECK_EQ(csubstr("012345").first_not_of("12345", 2u), npos);
- CHECK_EQ(csubstr("012345").first_not_of("54321", 2u), npos);
- CHECK_EQ(csubstr("012345").first_not_of("012345", 2u), npos);
- CHECK_EQ(csubstr("012345").first_not_of("543210", 2u), npos);
-
- CHECK_EQ(csubstr("").first_not_of('0', 0u), npos);
- CHECK_EQ(csubstr("012345").first_not_of('5', 6u), npos);
- CHECK_EQ(csubstr("012345").first_not_of("012345", 6u), npos);
-}
-
-TEST_CASE("substr.last_not_of")
-{
- size_t npos = csubstr::npos;
-
- CHECK_EQ(csubstr("012345").last_not_of('a'), 5u);
- CHECK_EQ(csubstr("012345").last_not_of("ab"), 5u);
-
- CHECK_EQ(csubstr("012345").last_not_of('5'), 4u);
- CHECK_EQ(csubstr("012345").last_not_of("5"), 4u);
- CHECK_EQ(csubstr("012345").last_not_of("45"), 3u);
- CHECK_EQ(csubstr("012345").last_not_of("54"), 3u);
- CHECK_EQ(csubstr("012345").last_not_of("345"), 2u);
- CHECK_EQ(csubstr("012345").last_not_of("543"), 2u);
- CHECK_EQ(csubstr("012345").last_not_of("2345"), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("5432"), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("12345"), 0u);
- CHECK_EQ(csubstr("012345").last_not_of("54321"), 0u);
- CHECK_EQ(csubstr("012345").last_not_of("012345"), npos);
- CHECK_EQ(csubstr("012345").last_not_of("543210"), npos);
-
- CHECK_EQ(csubstr("012345").last_not_of('5', 2u), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("5", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("45", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("54", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("345", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("543", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("2345", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("5432", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("12345", 2u), 0u);
- CHECK_EQ(csubstr("012345").last_not_of("54321", 2u), 0u);
- CHECK_EQ(csubstr("012345").last_not_of("012345", 2u), npos);
- CHECK_EQ(csubstr("012345").last_not_of("543210", 2u), npos);
-
- CHECK_EQ(csubstr("012345").last_not_of('0'), 5u);
- CHECK_EQ(csubstr("012345").last_not_of("0"), 5u);
- CHECK_EQ(csubstr("012345").last_not_of("01"), 5u);
- CHECK_EQ(csubstr("012345").last_not_of("10"), 5u);
- CHECK_EQ(csubstr("012345").last_not_of("012"), 5u);
- CHECK_EQ(csubstr("012345").last_not_of("210"), 5u);
- CHECK_EQ(csubstr("012345").last_not_of("0123"), 5u);
- CHECK_EQ(csubstr("012345").last_not_of("3210"), 5u);
- CHECK_EQ(csubstr("012345").last_not_of("01234"), 5u);
- CHECK_EQ(csubstr("012345").last_not_of("43210"), 5u);
- CHECK_EQ(csubstr("012345").last_not_of("012345"), npos);
- CHECK_EQ(csubstr("012345").last_not_of("543210"), npos);
-
- CHECK_EQ(csubstr("012345").last_not_of('0', 2u), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("0", 2u), 1u);
- CHECK_EQ(csubstr("012345").last_not_of("01", 2u), npos);
- CHECK_EQ(csubstr("012345").last_not_of("10", 2u), npos);
- CHECK_EQ(csubstr("012345").last_not_of("012", 2u), npos);
- CHECK_EQ(csubstr("012345").last_not_of("210", 2u), npos);
- CHECK_EQ(csubstr("012345").last_not_of("0123", 2u), npos);
- CHECK_EQ(csubstr("012345").last_not_of("3210", 2u), npos);
- CHECK_EQ(csubstr("012345").last_not_of("01234", 2u), npos);
- CHECK_EQ(csubstr("012345").last_not_of("43210", 2u), npos);
- CHECK_EQ(csubstr("012345").last_not_of("012345", 2u), npos);
- CHECK_EQ(csubstr("012345").last_not_of("543210", 2u), npos);
-
- CHECK_EQ(csubstr("").last_not_of('0', 0u), npos);
- CHECK_EQ(csubstr("012345").last_not_of('5', 6u), 4u);
-}
-
-TEST_CASE("substr.left_of")
-{
- csubstr s = "012345";
-
- CHECK_EQ(s.left_of(csubstr::npos), s);
- CHECK_EQ(s.left_of(csubstr::npos, /*include_pos*/false), s);
- CHECK_EQ(s.left_of(csubstr::npos, /*include_pos*/true), s);
-
-
- CHECK_EQ(s.left_of(0), "");
- CHECK_EQ(s.left_of(1), "0");
- CHECK_EQ(s.left_of(2), "01");
- CHECK_EQ(s.left_of(3), "012");
- CHECK_EQ(s.left_of(4), "0123");
- CHECK_EQ(s.left_of(5), "01234");
- CHECK_EQ(s.left_of(6), "012345");
-
- CHECK_EQ(s.left_of(0, /*include_pos*/false), "");
- CHECK_EQ(s.left_of(1, /*include_pos*/false), "0");
- CHECK_EQ(s.left_of(2, /*include_pos*/false), "01");
- CHECK_EQ(s.left_of(3, /*include_pos*/false), "012");
- CHECK_EQ(s.left_of(4, /*include_pos*/false), "0123");
- CHECK_EQ(s.left_of(5, /*include_pos*/false), "01234");
- CHECK_EQ(s.left_of(6, /*include_pos*/false), "012345");
-
- CHECK_UNARY(s.is_super(s.left_of(0, /*include_pos*/false)));
- CHECK_UNARY(s.is_super(s.left_of(1, /*include_pos*/false)));
- CHECK_UNARY(s.is_super(s.left_of(2, /*include_pos*/false)));
- CHECK_UNARY(s.is_super(s.left_of(3, /*include_pos*/false)));
- CHECK_UNARY(s.is_super(s.left_of(4, /*include_pos*/false)));
-
-
- CHECK_EQ(s.left_of(0, /*include_pos*/true), "0");
- CHECK_EQ(s.left_of(1, /*include_pos*/true), "01");
- CHECK_EQ(s.left_of(2, /*include_pos*/true), "012");
- CHECK_EQ(s.left_of(3, /*include_pos*/true), "0123");
- CHECK_EQ(s.left_of(4, /*include_pos*/true), "01234");
- CHECK_EQ(s.left_of(5, /*include_pos*/true), "012345");
-
- CHECK_UNARY(s.is_super(s.left_of(0, /*include_pos*/true)));
- CHECK_UNARY(s.is_super(s.left_of(1, /*include_pos*/true)));
- CHECK_UNARY(s.is_super(s.left_of(2, /*include_pos*/true)));
- CHECK_UNARY(s.is_super(s.left_of(3, /*include_pos*/true)));
- CHECK_UNARY(s.is_super(s.left_of(4, /*include_pos*/true)));
-
-
- CHECK_EQ(s.sub(5), "5");
- CHECK_EQ(s.sub(4), "45");
- CHECK_EQ(s.sub(3), "345");
- CHECK_EQ(s.sub(2), "2345");
- CHECK_EQ(s.sub(1), "12345");
- CHECK_EQ(s.sub(0), "012345");
-
- CHECK_EQ(s.left_of(s.sub(5)), "01234");
- CHECK_EQ(s.left_of(s.sub(4)), "0123");
- CHECK_EQ(s.left_of(s.sub(3)), "012");
- CHECK_EQ(s.left_of(s.sub(2)), "01");
- CHECK_EQ(s.left_of(s.sub(1)), "0");
- CHECK_EQ(s.left_of(s.sub(0)), "");
-
- CHECK_UNARY(s.is_super(s.left_of(s.sub(5))));
- CHECK_UNARY(s.is_super(s.left_of(s.sub(4))));
- CHECK_UNARY(s.is_super(s.left_of(s.sub(3))));
- CHECK_UNARY(s.is_super(s.left_of(s.sub(2))));
- CHECK_UNARY(s.is_super(s.left_of(s.sub(1))));
- CHECK_UNARY(s.is_super(s.left_of(s.sub(0))));
-}
-
-TEST_CASE("substr.right_of")
-{
- csubstr s = "012345";
-
- CHECK_EQ(s.right_of(csubstr::npos), "");
- CHECK_EQ(s.right_of(csubstr::npos), "");
-
- CHECK_EQ(s.right_of(csubstr::npos, /*include_pos*/false), "");
- CHECK_EQ(s.right_of(csubstr::npos, /*include_pos*/true), "");
-
-
- CHECK_EQ(s.right_of(0), "12345");
- CHECK_EQ(s.right_of(1), "2345");
- CHECK_EQ(s.right_of(2), "345");
- CHECK_EQ(s.right_of(3), "45");
- CHECK_EQ(s.right_of(4), "5");
- CHECK_EQ(s.right_of(5), "");
-
- CHECK_EQ(s.right_of(0, /*include_pos*/false), "12345");
- CHECK_EQ(s.right_of(1, /*include_pos*/false), "2345");
- CHECK_EQ(s.right_of(2, /*include_pos*/false), "345");
- CHECK_EQ(s.right_of(3, /*include_pos*/false), "45");
- CHECK_EQ(s.right_of(4, /*include_pos*/false), "5");
- CHECK_EQ(s.right_of(5, /*include_pos*/false), "");
-
- CHECK_UNARY(s.is_super(s.right_of(0)));
- CHECK_UNARY(s.is_super(s.right_of(1)));
- CHECK_UNARY(s.is_super(s.right_of(2)));
- CHECK_UNARY(s.is_super(s.right_of(3)));
- CHECK_UNARY(s.is_super(s.right_of(4)));
- CHECK_UNARY(s.is_super(s.right_of(5)));
-
- CHECK_UNARY(s.is_super(s.right_of(0, /*include_pos*/false)));
- CHECK_UNARY(s.is_super(s.right_of(1, /*include_pos*/false)));
- CHECK_UNARY(s.is_super(s.right_of(2, /*include_pos*/false)));
- CHECK_UNARY(s.is_super(s.right_of(3, /*include_pos*/false)));
- CHECK_UNARY(s.is_super(s.right_of(4, /*include_pos*/false)));
- CHECK_UNARY(s.is_super(s.right_of(5, /*include_pos*/false)));
-
-
- CHECK_EQ(s.right_of(0, /*include_pos*/true), "012345");
- CHECK_EQ(s.right_of(1, /*include_pos*/true), "12345");
- CHECK_EQ(s.right_of(2, /*include_pos*/true), "2345");
- CHECK_EQ(s.right_of(3, /*include_pos*/true), "345");
- CHECK_EQ(s.right_of(4, /*include_pos*/true), "45");
- CHECK_EQ(s.right_of(5, /*include_pos*/true), "5");
- CHECK_EQ(s.right_of(6, /*include_pos*/true), "");
-
- CHECK_UNARY(s.is_super(s.right_of(0, /*include_pos*/true)));
- CHECK_UNARY(s.is_super(s.right_of(1, /*include_pos*/true)));
- CHECK_UNARY(s.is_super(s.right_of(2, /*include_pos*/true)));
- CHECK_UNARY(s.is_super(s.right_of(3, /*include_pos*/true)));
- CHECK_UNARY(s.is_super(s.right_of(4, /*include_pos*/true)));
- CHECK_UNARY(s.is_super(s.right_of(5, /*include_pos*/true)));
- CHECK_UNARY(s.is_super(s.right_of(6, /*include_pos*/true)));
-
-
- CHECK_EQ(s.sub(0, 0), "");
- CHECK_EQ(s.sub(0, 1), "0");
- CHECK_EQ(s.sub(0, 2), "01");
- CHECK_EQ(s.sub(0, 3), "012");
- CHECK_EQ(s.sub(0, 4), "0123");
- CHECK_EQ(s.sub(0, 5), "01234");
- CHECK_EQ(s.sub(0, 6), "012345");
-
- CHECK_EQ(s.right_of(s.sub(0, 0)), "012345");
- CHECK_EQ(s.right_of(s.sub(0, 1)), "12345");
- CHECK_EQ(s.right_of(s.sub(0, 2)), "2345");
- CHECK_EQ(s.right_of(s.sub(0, 3)), "345");
- CHECK_EQ(s.right_of(s.sub(0, 4)), "45");
- CHECK_EQ(s.right_of(s.sub(0, 5)), "5");
- CHECK_EQ(s.right_of(s.sub(0, 6)), "");
-
- CHECK_UNARY(s.is_super(s.right_of(s.sub(0, 0))));
- CHECK_UNARY(s.is_super(s.right_of(s.sub(0, 1))));
- CHECK_UNARY(s.is_super(s.right_of(s.sub(0, 2))));
- CHECK_UNARY(s.is_super(s.right_of(s.sub(0, 3))));
- CHECK_UNARY(s.is_super(s.right_of(s.sub(0, 4))));
- CHECK_UNARY(s.is_super(s.right_of(s.sub(0, 5))));
- CHECK_UNARY(s.is_super(s.right_of(s.sub(0, 6))));
-}
-
-TEST_CASE("substr.compare_different_length")
-{
- const char s1[] = "one empty doc";
- const char s2[] = "one empty doc, explicit termination";
- csubstr c1(s1), c2(s2);
- CHECK_NE(c1, c2);
- CHECK_NE(c1, s2);
- CHECK_NE(s1, c2);
- CHECK_LT(c1, c2);
- CHECK_LT(c1, s2);
- CHECK_LT(s1, c2);
- CHECK_GT(c2, c1);
- CHECK_GT(c2, s1);
- CHECK_GT(s2, c1);
- CHECK_NE((c1 > c2), (c1 < c2));
- CHECK_NE((c1 > s2), (c1 < s2));
- CHECK_NE((s1 > c2), (s1 < c2));
- CHECK_NE((c2 > c1), (c2 < c1));
- CHECK_NE((c2 > s1), (c2 < s1));
- CHECK_NE((s2 > c1), (s2 < c1));
- CHECK_NE((c1 == c2), (c1 != c2));
- CHECK_NE((c1 == s2), (c1 != s2));
- CHECK_NE((s1 == c2), (s1 != c2));
- CHECK_NE((c2 == c1), (c2 != c1));
- CHECK_NE((c2 == s1), (c2 != s1));
- CHECK_NE((s2 == c1), (s2 != c1));
-}
-
-TEST_CASE("substr.compare_null")
-{
- csubstr s1, s2, sp(" ");
- CHECK_EQ(s1, "");
- CHECK_EQ(s1, s2);
- CHECK(!(s1 > s2));
- CHECK(!(s1 < s2));
- CHECK((s1 <= s2));
- CHECK((s1 >= s2));
- CHECK(!(s1 != s2));
- CHECK_EQ(s1.compare('-'), -1);
- CHECK_EQ(sp.compare(' '), 0);
- CHECK_EQ(s1.compare("-", 1u), -1);
- CHECK_EQ(s1.compare("-", 0u), 0);
- CHECK_EQ(s1.compare((const char*)0, 0u), 0);
- CHECK_EQ(sp.compare((const char*)0, 0u), 1);
- CHECK_EQ(sp.compare(" ", 0u), 1);
- CHECK_EQ(sp.compare(" ", 1u), 0);
-}
-
-TEST_CASE("substr.compare_vs_char")
-{
- CHECK_EQ(csubstr().compare('1'), -1); // str==null, len==0
- CHECK_EQ(csubstr("0123").first(0).compare('1'), -1); // str!=null, len==0
- CHECK_EQ(csubstr("0123").first(1).compare('1'), -1);
-
- CHECK_EQ(csubstr("-"), '-');
- CHECK_NE(csubstr("+"), '-');
-
- CHECK_NE(csubstr("---"), '-');
- CHECK_NE(csubstr("---"), "-");
-
- CHECK_NE(csubstr("aaa"), 'a');
- CHECK_NE(csubstr("aaa"), "a");
-
- CHECK_NE(csubstr("aaa"), 'b');
- CHECK_NE(csubstr("aaa"), "b");
-
- CHECK_LT(csubstr("aaa"), 'b');
- CHECK_LT(csubstr("aaa"), "b");
-
- CHECK_LE(csubstr("aaa"), 'b');
- CHECK_LE(csubstr("aaa"), "b");
-
- CHECK_NE(csubstr("bbb"), 'a');
- CHECK_NE(csubstr("bbb"), "a");
-
- CHECK_GT(csubstr("bbb"), 'a');
- CHECK_GT(csubstr("bbb"), "a");
-
- CHECK_GE(csubstr("bbb"), 'a');
- CHECK_GE(csubstr("bbb"), "a");
-}
-
-TEST_CASE("substr.mixed_cmp")
-{
- // c++20 introduced new comparison rules and clang10 fails:
- //
- // error: ISO C++20 considers use of overloaded operator '==' (with operand
- // types 'const c4::basic_substring<char>' and 'const
- // c4::basic_substring<char>') to be ambiguous despite there being a unique
- // best viable function [-Werror,-Wambiguous-reversed-operator]
-
- char sa_[] = "a";
- char sb_[] = "b";
- csubstr csa = "a"; substr sa = sa_;
- csubstr csb = "b"; substr sb = sb_;
-
- CHECK_EQ(csa, csa);
- CHECK_EQ(sa, sa); // this fails
- CHECK_EQ(csa, sa);
- CHECK_EQ(sa, csa);
-
- CHECK_NE(sa, sb);
- CHECK_NE(csa, csb);
- CHECK_NE(csa, sb);
- CHECK_NE(sa, csb);
-
- CHECK_LT(sa, sb);
- CHECK_LT(csa, csb);
- CHECK_LT(csa, sb);
- CHECK_LT(sa, csb);
-
- CHECK_LE(sa, sb);
- CHECK_LE(csa, csb);
- CHECK_LE(csa, sb);
- CHECK_LE(sa, csb);
-
- CHECK_LE(sa, sa);
- CHECK_LE(csa, csa);
- CHECK_LE(csa, sa);
- CHECK_LE(sa, csa);
-
- CHECK_GT(sb, sa);
- CHECK_GT(csb, csa);
- CHECK_GT(csb, sa);
- CHECK_GT( sb, csa);
-
- CHECK_GE(sb, sa);
- CHECK_GE(csb, csa);
- CHECK_GE(csb, sa);
- CHECK_GE( sb, csa);
-
- CHECK_GE(sb, sb);
- CHECK_GE(csb, csb);
- CHECK_GE(csb, sb);
- CHECK_GE( sb, csb);
-}
-
-TEST_CASE("substr.eqne")
-{
- char buf[128];
- for(size_t i = 0; i < 5; ++i) buf[i] = (char)('0' + i);
- csubstr cmp(buf, 5);
-
- CHECK_EQ(csubstr("01234"), cmp);
- CHECK_EQ( "01234" , cmp);
- CHECK_EQ( cmp, "01234");
- CHECK_NE(csubstr("0123"), cmp);
- CHECK_NE( "0123" , cmp);
- CHECK_NE( cmp, "0123");
- CHECK_NE(csubstr("012345"), cmp);
- CHECK_NE( "012345" , cmp);
- CHECK_NE( cmp, "012345");
-}
-
-TEST_CASE("substr.substr2csubstr")
-{
- char b[] = "some string";
- substr s(b);
- csubstr sc = s;
- CHECK_EQ(sc, s);
- const substr cs(b);
- const csubstr csc(b);
-}
-
-template <class ...Args>
-void test_first_of_any(csubstr input, bool true_or_false, size_t which, size_t pos, Args... args)
-{
- csubstr::first_of_any_result r = input.first_of_any(to_csubstr(args)...);
- //std::cout << input << ": " << (bool(r) ? "true" : "false") << "/which:" << r.which << "/pos:" << r.pos << "\n";
- CHECK_EQ(r, true_or_false);
- if(true_or_false)
- {
- CHECK_UNARY(r);
- }
- else
- {
- CHECK_FALSE(r);
- }
- CHECK_EQ(r.which, which);
- CHECK_EQ(r.pos, pos);
-}
-
-TEST_CASE("substr.first_of_any")
-{
- size_t NONE = csubstr::NONE;
- size_t npos = csubstr::npos;
-
- test_first_of_any("foobar" , true , 0u , 3u, "bar", "barbell", "bark", "barff");
- test_first_of_any("foobar" , false, NONE, npos, "barbell", "bark", "barff");
- test_first_of_any("foobart" , false, NONE, npos, "barbell", "bark", "barff");
-
- test_first_of_any("10" , false, NONE, npos, "0x", "0X", "-0x", "-0X");
- test_first_of_any("10]" , false, NONE, npos, "0x", "0X", "-0x", "-0X");
- test_first_of_any(csubstr("10]").first(2), false, NONE, npos, "0x", "0X", "-0x", "-0X");
-
-
- test_first_of_any("baz{% endif %}", true, 0u, 3u, "{% endif %}", "{% if " , "{% elif bar %}" , "{% else %}" );
- test_first_of_any("baz{% endif %}", true, 1u, 3u, "{% if " , "{% endif %}" , "{% elif bar %}" , "{% else %}" );
- test_first_of_any("baz{% endif %}", true, 2u, 3u, "{% if " , "{% elif bar %}" , "{% endif %}" , "{% else %}" );
- test_first_of_any("baz{% endif %}", true, 3u, 3u, "{% if " , "{% elif bar %}" , "{% else %}" , "{% endif %}");
-
- test_first_of_any("baz{% e..if %}", false, NONE, npos, "{% endif %}", "{% if " , "{% elif bar %}" , "{% else %}" );
- test_first_of_any("baz{% e..if %}", false, NONE, npos, "{% if " , "{% endif %}" , "{% elif bar %}" , "{% else %}" );
- test_first_of_any("baz{% e..if %}", false, NONE, npos, "{% if " , "{% elif bar %}" , "{% endif %}" , "{% else %}" );
- test_first_of_any("baz{% e..if %}", false, NONE, npos, "{% if " , "{% elif bar %}" , "{% else %}" , "{% endif %}");
-
-
- test_first_of_any("bar{% else %}baz{% endif %}", true, 0u, 3u, "{% else %}" , "{% if " , "{% elif bar %}" , "{% endif %}");
- test_first_of_any("bar{% else %}baz{% endif %}", true, 1u, 3u, "{% if " , "{% else %}" , "{% elif bar %}" , "{% endif %}");
- test_first_of_any("bar{% else %}baz{% endif %}", true, 2u, 3u, "{% if " , "{% elif bar %}" , "{% else %}" , "{% endif %}");
- test_first_of_any("bar{% else %}baz{% endif %}", true, 3u, 3u, "{% if " , "{% elif bar %}" , "{% endif %}" , "{% else %}" );
-
- test_first_of_any("bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% else %}" , "{% if " , "{% elif bar %}" , "{% endif %}");
- test_first_of_any("bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% if " , "{% else %}" , "{% elif bar %}" , "{% endif %}");
- test_first_of_any("bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% if " , "{% elif bar %}" , "{% else %}" , "{% endif %}");
- test_first_of_any("bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% if " , "{% elif bar %}" , "{% endif %}" , "{% else %}" );
-
-
- test_first_of_any("foo{% elif bar %}bar{% else %}baz{% endif %}", true, 0u, 3u, "{% elif bar %}" , "{% if " , "{% else %}" , "{% endif %}" );
- test_first_of_any("foo{% elif bar %}bar{% else %}baz{% endif %}", true, 1u, 3u, "{% if " , "{% elif bar %}" , "{% else %}" , "{% endif %}" );
- test_first_of_any("foo{% elif bar %}bar{% else %}baz{% endif %}", true, 2u, 3u, "{% if " , "{% else %}" , "{% elif bar %}" , "{% endif %}" );
- test_first_of_any("foo{% elif bar %}bar{% else %}baz{% endif %}", true, 3u, 3u, "{% if " , "{% else %}" , "{% endif %}" , "{% elif bar %}");
-
- test_first_of_any("foo{% e..f bar %}bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% elif bar %}" , "{% if " , "{% else %}" , "{% endif %}" );
- test_first_of_any("foo{% e..f bar %}bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% if " , "{% elif bar %}" , "{% else %}" , "{% endif %}" );
- test_first_of_any("foo{% e..f bar %}bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% if " , "{% else %}" , "{% elif bar %}" , "{% endif %}" );
- test_first_of_any("foo{% e..f bar %}bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% if " , "{% else %}" , "{% endif %}" , "{% elif bar %}");
-
-
- test_first_of_any("{% if foo %}foo{% elif bar %}bar{% else %}baz{% endif %}", true, 0u, 0u, "{% if " , "{% elif bar %}" , "{% else %}" , "{% endif %}" );
- test_first_of_any("{% if foo %}foo{% elif bar %}bar{% else %}baz{% endif %}", true, 1u, 0u, "{% elif bar %}" , "{% if " , "{% else %}" , "{% endif %}" );
- test_first_of_any("{% if foo %}foo{% elif bar %}bar{% else %}baz{% endif %}", true, 2u, 0u, "{% elif bar %}" , "{% else %}" , "{% if " , "{% endif %}" );
- test_first_of_any("{% if foo %}foo{% elif bar %}bar{% else %}baz{% endif %}", true, 3u, 0u, "{% elif bar %}" , "{% else %}" , "{% endif %}", "{% if " );
-
- test_first_of_any("{% .. foo %}foo{% e..f bar %}bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% if " , "{% elif bar %}" , "{% else %}" , "{% endif %}" );
- test_first_of_any("{% .. foo %}foo{% e..f bar %}bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% elif bar %}" , "{% if " , "{% else %}" , "{% endif %}" );
- test_first_of_any("{% .. foo %}foo{% e..f bar %}bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% elif bar %}" , "{% else %}" , "{% if " , "{% endif %}" );
- test_first_of_any("{% .. foo %}foo{% e..f bar %}bar{% e..e %}baz{% e..if %}", false, NONE, npos, "{% elif bar %}" , "{% else %}" , "{% endif %}", "{% if " );
-}
-
-
-TEST_CASE("substr.pair_range_esc")
-{
- const char q = '\'';
- CHECK_EQ(csubstr("").pair_range_esc(q), "");
- CHECK_EQ(csubstr("'").pair_range_esc(q), "");
- CHECK_EQ(csubstr("''").pair_range_esc(q), "''");
- CHECK_EQ(csubstr("'\\'\\''").pair_range_esc(q), "'\\'\\''");
- CHECK_EQ(csubstr("asdasdasd''asdasd").pair_range_esc(q), "''");
- CHECK_EQ(csubstr("asdasdasd'abc'asdasda").pair_range_esc(q), "'abc'");
-}
-
-TEST_CASE("substr.pair_range")
-{
- CHECK_EQ(csubstr("").pair_range('{', '}'), "");
- CHECK_EQ(csubstr("{").pair_range('{', '}'), "");
- CHECK_EQ(csubstr("}").pair_range('{', '}'), "");
- CHECK_EQ(csubstr("{}").pair_range('{', '}'), "{}");
- CHECK_EQ(csubstr("{abc}").pair_range('{', '}'), "{abc}");
- CHECK_EQ(csubstr("123{abc}456").pair_range('{', '}'), "{abc}");
-}
-
-TEST_CASE("substr.pair_range_nested")
-{
- CHECK_EQ(csubstr("").pair_range_nested('{', '}'), "");
- CHECK_EQ(csubstr("{").pair_range_nested('{', '}'), "");
- CHECK_EQ(csubstr("}").pair_range_nested('{', '}'), "");
- CHECK_EQ(csubstr("{}").pair_range_nested('{', '}'), "{}");
- CHECK_EQ(csubstr("{abc}").pair_range_nested('{', '}'), "{abc}");
- CHECK_EQ(csubstr("123{abc}456").pair_range_nested('{', '}'), "{abc}");
- CHECK_EQ(csubstr("123{abc}456{def}").pair_range_nested('{', '}'), "{abc}");
- CHECK_EQ(csubstr( "{{}}").pair_range_nested('{', '}'), "{{}}");
- CHECK_EQ(csubstr("123{{}}456").pair_range_nested('{', '}'), "{{}}");
- CHECK_EQ(csubstr( "{a{}b{}c}").pair_range_nested('{', '}'), "{a{}b{}c}");
- CHECK_EQ(csubstr("123{a{}b{}c}456").pair_range_nested('{', '}'), "{a{}b{}c}");
- CHECK_EQ(csubstr( "{a{{}}b{{}}c}").pair_range_nested('{', '}'), "{a{{}}b{{}}c}");
- CHECK_EQ(csubstr("123{a{{}}b{{}}c}456").pair_range_nested('{', '}'), "{a{{}}b{{}}c}");
- CHECK_EQ(csubstr( "{{{}}a{{}}b{{}}c{{}}}").pair_range_nested('{', '}'), "{{{}}a{{}}b{{}}c{{}}}");
- CHECK_EQ(csubstr("123{{{}}a{{}}b{{}}c{{}}}456").pair_range_nested('{', '}'), "{{{}}a{{}}b{{}}c{{}}}");
-}
-
-TEST_CASE("substr.unquoted")
-{
- CHECK_EQ(csubstr("").unquoted(), "");
-
- CHECK_EQ(csubstr("''").unquoted(), "");
- CHECK_EQ(csubstr("\"\"").unquoted(), "");
-
- CHECK_EQ(csubstr("'\''").unquoted(), "'");
-
- CHECK_EQ(csubstr("aa").unquoted(), "aa");
- CHECK_EQ(csubstr("'aa'").unquoted(), "aa");
- CHECK_EQ(csubstr("\"aa\"").unquoted(), "aa");
- CHECK_EQ(csubstr("'aa\''").unquoted(), "aa'");
-}
-
-
-TEST_CASE("substr.first_non_empty_span")
-{
- CHECK_EQ(csubstr("foo bar").first_non_empty_span(), "foo");
- CHECK_EQ(csubstr(" foo bar").first_non_empty_span(), "foo");
- CHECK_EQ(csubstr("\n \r \t foo bar").first_non_empty_span(), "foo");
- CHECK_EQ(csubstr("\n \r \t foo\n\r\t bar").first_non_empty_span(), "foo");
- CHECK_EQ(csubstr("\n \r \t foo\n\r\t bar").first_non_empty_span(), "foo");
- CHECK_EQ(csubstr(",\n \r \t foo\n\r\t bar").first_non_empty_span(), ",");
-}
-
-TEST_CASE("substr.first_uint_span")
-{
- CHECK_EQ(csubstr("1234").first_uint_span(), "1234");
- CHECK_EQ(csubstr("+1234").first_uint_span(), "+1234");
- CHECK_EQ(csubstr("-1234").first_uint_span(), "");
- CHECK_EQ(csubstr("1234 asdkjh").first_uint_span(), "1234");
- CHECK_EQ(csubstr("1234\rasdkjh").first_uint_span(), "1234");
- CHECK_EQ(csubstr("1234\tasdkjh").first_uint_span(), "1234");
- CHECK_EQ(csubstr("1234\nasdkjh").first_uint_span(), "1234");
- CHECK_EQ(csubstr("1234]asdkjh").first_uint_span(), "1234");
- CHECK_EQ(csubstr("1234)asdkjh").first_uint_span(), "1234");
- CHECK_EQ(csubstr("1234gasdkjh").first_uint_span(), "");
- CHECK_EQ(csubstr("1").first_uint_span(), "1");
- CHECK_EQ(csubstr("+1").first_uint_span(), "+1");
- CHECK_EQ(csubstr("-1").first_uint_span(), "");
- CHECK_EQ(csubstr("-0").first_uint_span(), "");
- CHECK_EQ(csubstr("0").first_uint_span(), "0");
- CHECK_EQ(csubstr("+0").first_uint_span(), "+0");
- CHECK_EQ(csubstr("-0").first_uint_span(), "");
- CHECK_EQ(csubstr("1234 abc").first_uint_span(), "1234");
- CHECK_EQ(csubstr("abc 1234 abc").first_uint_span(), "");
- CHECK_EQ(csubstr("+0x1234 abc").first_uint_span(), "+0x1234");
- CHECK_EQ(csubstr("-0x1234 abc").first_uint_span(), "");
- CHECK_EQ(csubstr("0x1234 abc").first_uint_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234\rabc").first_uint_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234\nabc").first_uint_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234\tabc").first_uint_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234]abc").first_uint_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234)abc").first_uint_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234g").first_uint_span(), "");
- CHECK_EQ(csubstr("0b01").first_uint_span(), "0b01");
- CHECK_EQ(csubstr("+0b01").first_uint_span(), "+0b01");
- CHECK_EQ(csubstr("-0b01").first_uint_span(), "");
- CHECK_EQ(csubstr("0b01 asdasd").first_uint_span(), "0b01");
- CHECK_EQ(csubstr("0b01\rasdasd").first_uint_span(), "0b01");
- CHECK_EQ(csubstr("0b01\tasdasd").first_uint_span(), "0b01");
- CHECK_EQ(csubstr("0b01\nasdasd").first_uint_span(), "0b01");
- CHECK_EQ(csubstr("0b01]asdasd").first_uint_span(), "0b01");
- CHECK_EQ(csubstr("0b01)asdasd").first_uint_span(), "0b01");
- CHECK_EQ(csubstr("0b01hasdasd").first_uint_span(), "");
- CHECK_EQ(csubstr("+").first_uint_span(), "");
- CHECK_EQ(csubstr("-").first_uint_span(), "");
-}
-
-TEST_CASE("substr.first_int_span")
-{
- CHECK_EQ(csubstr("1234").first_int_span(), "1234");
- CHECK_EQ(csubstr("+1234").first_int_span(), "+1234");
- CHECK_EQ(csubstr("-1234").first_int_span(), "-1234");
- CHECK_EQ(csubstr("-1234 asdkjh").first_int_span(), "-1234");
- CHECK_EQ(csubstr("-1234\rasdkjh").first_int_span(), "-1234");
- CHECK_EQ(csubstr("-1234\tasdkjh").first_int_span(), "-1234");
- CHECK_EQ(csubstr("-1234\nasdkjh").first_int_span(), "-1234");
- CHECK_EQ(csubstr("-1234]asdkjh").first_int_span(), "-1234");
- CHECK_EQ(csubstr("-1234)asdkjh").first_int_span(), "-1234");
- CHECK_EQ(csubstr("-1234gasdkjh").first_int_span(), "");
- CHECK_EQ(csubstr("1").first_int_span(), "1");
- CHECK_EQ(csubstr("+1").first_int_span(), "+1");
- CHECK_EQ(csubstr("-1").first_int_span(), "-1");
- CHECK_EQ(csubstr("-0").first_int_span(), "-0");
- CHECK_EQ(csubstr("0").first_int_span(), "0");
- CHECK_EQ(csubstr("+0").first_int_span(), "+0");
- CHECK_EQ(csubstr("-0").first_int_span(), "-0");
- CHECK_EQ(csubstr("1234 abc").first_int_span(), "1234");
- CHECK_EQ(csubstr("abc 1234 abc").first_int_span(), "");
- CHECK_EQ(csubstr("+0x1234 abc").first_int_span(), "+0x1234");
- CHECK_EQ(csubstr("-0x1234 abc").first_int_span(), "-0x1234");
- CHECK_EQ(csubstr("0x1234 abc").first_int_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234\rabc").first_int_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234\nabc").first_int_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234\tabc").first_int_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234]abc").first_int_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234)abc").first_int_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234gabc").first_int_span(), "");
- CHECK_EQ(csubstr("0b01").first_int_span(), "0b01");
- CHECK_EQ(csubstr("+0b01").first_int_span(), "+0b01");
- CHECK_EQ(csubstr("-0b01").first_int_span(), "-0b01");
- CHECK_EQ(csubstr("0b01 asdasd").first_int_span(), "0b01");
- CHECK_EQ(csubstr("0b01\rasdasd").first_int_span(), "0b01");
- CHECK_EQ(csubstr("0b01\tasdasd").first_int_span(), "0b01");
- CHECK_EQ(csubstr("0b01\nasdasd").first_int_span(), "0b01");
- CHECK_EQ(csubstr("0b01]asdasd").first_int_span(), "0b01");
- CHECK_EQ(csubstr("0b01)asdasd").first_int_span(), "0b01");
- CHECK_EQ(csubstr("0b01gasdasd").first_int_span(), "");
-}
-
-TEST_CASE("substr.first_real_span")
-{
- // all integers are reals
- CHECK_EQ(csubstr("1234").first_real_span(), "1234");
- CHECK_EQ(csubstr("+1234").first_real_span(), "+1234");
- CHECK_EQ(csubstr("-1234").first_real_span(), "-1234");
- CHECK_EQ(csubstr("-1234 asdkjh").first_real_span(), "-1234");
- CHECK_EQ(csubstr("-1234\rasdkjh").first_real_span(), "-1234");
- CHECK_EQ(csubstr("-1234\tasdkjh").first_real_span(), "-1234");
- CHECK_EQ(csubstr("-1234\nasdkjh").first_real_span(), "-1234");
- CHECK_EQ(csubstr("-1234]asdkjh").first_real_span(), "-1234");
- CHECK_EQ(csubstr("-1234)asdkjh").first_real_span(), "-1234");
- CHECK_EQ(csubstr("-1234gasdkjh").first_real_span(), "");
- CHECK_EQ(csubstr("1").first_real_span(), "1");
- CHECK_EQ(csubstr("+1").first_real_span(), "+1");
- CHECK_EQ(csubstr("-1").first_real_span(), "-1");
- CHECK_EQ(csubstr("-0").first_real_span(), "-0");
- CHECK_EQ(csubstr("0").first_real_span(), "0");
- CHECK_EQ(csubstr("+0").first_real_span(), "+0");
- CHECK_EQ(csubstr("-0").first_real_span(), "-0");
- CHECK_EQ(csubstr("1234 abc").first_real_span(), "1234");
- CHECK_EQ(csubstr("abc 1234 abc").first_real_span(), "");
- CHECK_EQ(csubstr("+0x1234 abc").first_real_span(), "+0x1234");
- CHECK_EQ(csubstr("-0x1234 abc").first_real_span(), "-0x1234");
- CHECK_EQ(csubstr("0x1234 abc").first_real_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234\rabc").first_real_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234\nabc").first_real_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234\tabc").first_real_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234]abc").first_real_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234)abc").first_real_span(), "0x1234");
- CHECK_EQ(csubstr("0x1234gabc").first_real_span(), "");
- CHECK_EQ(csubstr("0b01").first_real_span(), "0b01");
- CHECK_EQ(csubstr("+0b01").first_real_span(), "+0b01");
- CHECK_EQ(csubstr("-0b01").first_real_span(), "-0b01");
- CHECK_EQ(csubstr("0b01 asdasd").first_real_span(), "0b01");
- CHECK_EQ(csubstr("0b01\rasdasd").first_real_span(), "0b01");
- CHECK_EQ(csubstr("0b01\tasdasd").first_real_span(), "0b01");
- CHECK_EQ(csubstr("0b01\nasdasd").first_real_span(), "0b01");
- CHECK_EQ(csubstr("0b01]asdasd").first_real_span(), "0b01");
- CHECK_EQ(csubstr("0b01)asdasd").first_real_span(), "0b01");
- CHECK_EQ(csubstr("0b01gasdasd").first_real_span(), "");
- CHECK_EQ(csubstr("0b1.01 asdasd").first_real_span(), "0b1.01");
- CHECK_EQ(csubstr("0b1.01\rasdasd").first_real_span(), "0b1.01");
- CHECK_EQ(csubstr("0b1.01\tasdasd").first_real_span(), "0b1.01");
- CHECK_EQ(csubstr("0b1.01\nasdasd").first_real_span(), "0b1.01");
- CHECK_EQ(csubstr("0b1.01]asdasd").first_real_span(), "0b1.01");
- CHECK_EQ(csubstr("0b1.01)asdasd").first_real_span(), "0b1.01");
- CHECK_EQ(csubstr("0b1.01gasdasd").first_real_span(), "");
- CHECK_EQ(csubstr("0b1.02 asdasd").first_real_span(), "");
- CHECK_EQ(csubstr("0b1.02\rasdasd").first_real_span(), "");
- CHECK_EQ(csubstr("0b1.02\tasdasd").first_real_span(), "");
- CHECK_EQ(csubstr("0b1.02\nasdasd").first_real_span(), "");
- CHECK_EQ(csubstr("0b1.02]asdasd").first_real_span(), "");
- CHECK_EQ(csubstr("0b1.02)asdasd").first_real_span(), "");
- CHECK_EQ(csubstr("0b1.02gasdasd").first_real_span(), "");
- CHECK_EQ(csubstr("+").first_real_span(), "");
- CHECK_EQ(csubstr("-").first_real_span(), "");
- CHECK_EQ(csubstr("+0x").first_real_span(), "");
- CHECK_EQ(csubstr("-0x").first_real_span(), "");
- CHECK_EQ(csubstr("+0b").first_real_span(), "");
- CHECK_EQ(csubstr("-0b").first_real_span(), "");
- CHECK_EQ(csubstr("+0o").first_real_span(), "");
- CHECK_EQ(csubstr("-0o").first_real_span(), "");
- CHECK_EQ(csubstr("-1.234 asdkjh").first_real_span(), "-1.234");
-// CHECK_EQ(csubstr("-1.234e5 asdkjh").first_real_span(), "-1.234e5");
- CHECK_EQ(csubstr("-1.234e+5 asdkjh").first_real_span(), "-1.234e+5");
- CHECK_EQ(csubstr("-1.234e-5 asdkjh").first_real_span(), "-1.234e-5");
- CHECK_EQ(csubstr("0x1.e8480p+19 asdkjh").first_real_span(), "0x1.e8480p+19");
- CHECK_EQ(csubstr("0x1.e8480p-19 asdkjh").first_real_span(), "0x1.e8480p-19");
- CHECK_EQ(csubstr("-0x1.e8480p+19 asdkjh").first_real_span(), "-0x1.e8480p+19");
- CHECK_EQ(csubstr("-0x1.e8480p-19 asdkjh").first_real_span(), "-0x1.e8480p-19");
- CHECK_EQ(csubstr("+0x1.e8480p+19 asdkjh").first_real_span(), "+0x1.e8480p+19");
- CHECK_EQ(csubstr("+0x1.e8480p-19 asdkjh").first_real_span(), "+0x1.e8480p-19");
- CHECK_EQ(csubstr("infinity").first_real_span(), "infinity");
- CHECK_EQ(csubstr(" infinity").first_real_span(), "infinity");
- CHECK_EQ(csubstr("-infinity").first_real_span(), "-infinity");
- CHECK_EQ(csubstr(" -infinity").first_real_span(), "-infinity");
- CHECK_EQ(csubstr("+infinity").first_real_span(), "+infinity");
- CHECK_EQ(csubstr(" +infinity").first_real_span(), "+infinity");
- CHECK_EQ(csubstr("infinity ").first_real_span(), "infinity");
- CHECK_EQ(csubstr(" infinity ").first_real_span(), "infinity");
- CHECK_EQ(csubstr("-infinity ").first_real_span(), "-infinity");
- CHECK_EQ(csubstr(" -infinity ").first_real_span(), "-infinity");
- CHECK_EQ(csubstr("+infinity ").first_real_span(), "+infinity");
- CHECK_EQ(csubstr(" +infinity ").first_real_span(), "+infinity");
- CHECK_EQ(csubstr("infinity1").first_real_span(), "");
- CHECK_EQ(csubstr(" infinity1").first_real_span(), "");
- CHECK_EQ(csubstr("-infinity1").first_real_span(), "");
- CHECK_EQ(csubstr(" -infinity1").first_real_span(), "");
- CHECK_EQ(csubstr("+infinity1").first_real_span(), "");
- CHECK_EQ(csubstr(" +infinity1").first_real_span(), "");
- CHECK_EQ(csubstr("infin").first_real_span(), "");
- CHECK_EQ(csubstr(" infin").first_real_span(), "");
- CHECK_EQ(csubstr("-infin").first_real_span(), "");
- CHECK_EQ(csubstr(" -infin").first_real_span(), "");
- CHECK_EQ(csubstr("+infin").first_real_span(), "");
- CHECK_EQ(csubstr(" +infin").first_real_span(), "");
- CHECK_EQ(csubstr("inflated").first_real_span(), "");
- CHECK_EQ(csubstr(" inflated").first_real_span(), "");
- CHECK_EQ(csubstr("-inflated").first_real_span(), "");
- CHECK_EQ(csubstr(" -inflated").first_real_span(), "");
- CHECK_EQ(csubstr("+inflated").first_real_span(), "");
- CHECK_EQ(csubstr(" +inflated").first_real_span(), "");
- CHECK_EQ(csubstr("inf").first_real_span(), "inf");
- CHECK_EQ(csubstr(" inf").first_real_span(), "inf");
- CHECK_EQ(csubstr("-inf").first_real_span(), "-inf");
- CHECK_EQ(csubstr(" -inf").first_real_span(), "-inf");
- CHECK_EQ(csubstr("+inf").first_real_span(), "+inf");
- CHECK_EQ(csubstr(" +inf").first_real_span(), "+inf");
- CHECK_EQ(csubstr("inf ").first_real_span(), "inf");
- CHECK_EQ(csubstr(" inf ").first_real_span(), "inf");
- CHECK_EQ(csubstr("-inf ").first_real_span(), "-inf");
- CHECK_EQ(csubstr(" -inf ").first_real_span(), "-inf");
- CHECK_EQ(csubstr("+inf ").first_real_span(), "+inf");
- CHECK_EQ(csubstr(" +inf ").first_real_span(), "+inf");
- CHECK_EQ(csubstr("inf1").first_real_span(), "");
- CHECK_EQ(csubstr(" inf1").first_real_span(), "");
- CHECK_EQ(csubstr("-inf1").first_real_span(), "");
- CHECK_EQ(csubstr(" -inf1").first_real_span(), "");
- CHECK_EQ(csubstr("+inf1").first_real_span(), "");
- CHECK_EQ(csubstr(" +inf1").first_real_span(), "");
- CHECK_EQ(csubstr("nan").first_real_span(), "nan");
- CHECK_EQ(csubstr(" nan").first_real_span(), "nan");
- CHECK_EQ(csubstr("-nan").first_real_span(), "-nan");
- CHECK_EQ(csubstr(" -nan").first_real_span(), "-nan");
- CHECK_EQ(csubstr("+nan").first_real_span(), "+nan");
- CHECK_EQ(csubstr(" +nan").first_real_span(), "+nan");
- CHECK_EQ(csubstr("nan ").first_real_span(), "nan");
- CHECK_EQ(csubstr(" nan ").first_real_span(), "nan");
- CHECK_EQ(csubstr("-nan ").first_real_span(), "-nan");
- CHECK_EQ(csubstr(" -nan ").first_real_span(), "-nan");
- CHECK_EQ(csubstr("+nan ").first_real_span(), "+nan");
- CHECK_EQ(csubstr(" +nan ").first_real_span(), "+nan");
- CHECK_EQ(csubstr("nan1").first_real_span(), "");
- CHECK_EQ(csubstr(" nan1").first_real_span(), "");
- CHECK_EQ(csubstr("-nan1").first_real_span(), "");
- CHECK_EQ(csubstr(" -nan1").first_real_span(), "");
- CHECK_EQ(csubstr("+nan1").first_real_span(), "");
- CHECK_EQ(csubstr(" +nan1").first_real_span(), "");
-}
-
-// start with some obvious direct tests
-TEST_CASE("substr.is_unsigned_integer")
-{
- SUBCASE("empty_string")
- {
- CHECK_FALSE(csubstr().is_unsigned_integer());
- CHECK_FALSE(csubstr("").is_unsigned_integer());
- }
- SUBCASE("signs")
- {
- CHECK_FALSE(csubstr("-").is_unsigned_integer());
- CHECK_FALSE(csubstr("+").is_unsigned_integer());
- CHECK_FALSE(csubstr("-1").is_unsigned_integer());
- CHECK_UNARY(csubstr("+1").is_unsigned_integer());
- }
- SUBCASE("whitespace_before")
- {
- CHECK_FALSE(csubstr(" 0").is_unsigned_integer());
- CHECK_FALSE(csubstr(" 1").is_unsigned_integer());
- CHECK_FALSE(csubstr(" -1").is_unsigned_integer());
- CHECK_FALSE(csubstr(" 0.1").is_unsigned_integer());
- CHECK_FALSE(csubstr(" -0.1").is_unsigned_integer());
- }
- SUBCASE("whitespace_after")
- {
- CHECK_FALSE(csubstr("0 ").is_unsigned_integer());
- CHECK_FALSE(csubstr("1 ").is_unsigned_integer());
- CHECK_FALSE(csubstr("-1 ").is_unsigned_integer());
- CHECK_FALSE(csubstr("0.1 ").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0.1 ").is_unsigned_integer());
- }
- SUBCASE("whitespace_only")
- {
- CHECK_FALSE(csubstr(" ").is_unsigned_integer());
- CHECK_FALSE(csubstr("\t\t\t\t").is_unsigned_integer());
- CHECK_FALSE(csubstr("\n\n\n\n").is_unsigned_integer());
- CHECK_FALSE(csubstr("\r\r\r\r").is_unsigned_integer());
- }
- SUBCASE("decimal")
- {
- CHECK_UNARY(csubstr("0").is_unsigned_integer());
- CHECK_UNARY(csubstr("1").is_unsigned_integer());
- CHECK_FALSE(csubstr("-1").is_unsigned_integer());
- CHECK_FALSE(csubstr("0.1").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0.1").is_unsigned_integer());
- }
- SUBCASE("hexadecimal")
- {
- CHECK_FALSE(csubstr("0x").is_unsigned_integer());
- CHECK_FALSE(csubstr("0X").is_unsigned_integer());
- CHECK_UNARY(csubstr("0x1").is_unsigned_integer());
- CHECK_UNARY(csubstr("0X1").is_unsigned_integer());
- CHECK_UNARY(csubstr("0x0").is_unsigned_integer());
- CHECK_UNARY(csubstr("0X0").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xa").is_unsigned_integer());
- CHECK_UNARY(csubstr("0Xa").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xb").is_unsigned_integer());
- CHECK_UNARY(csubstr("0Xb").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xc").is_unsigned_integer());
- CHECK_UNARY(csubstr("0Xc").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xd").is_unsigned_integer());
- CHECK_UNARY(csubstr("0Xd").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xe").is_unsigned_integer());
- CHECK_UNARY(csubstr("0Xe").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xf").is_unsigned_integer());
- CHECK_UNARY(csubstr("0Xf").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xA").is_unsigned_integer());
- CHECK_UNARY(csubstr("0XA").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xB").is_unsigned_integer());
- CHECK_UNARY(csubstr("0XB").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xC").is_unsigned_integer());
- CHECK_UNARY(csubstr("0XC").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xD").is_unsigned_integer());
- CHECK_UNARY(csubstr("0XD").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xE").is_unsigned_integer());
- CHECK_UNARY(csubstr("0XE").is_unsigned_integer());
- CHECK_UNARY(csubstr("0xF").is_unsigned_integer());
- CHECK_UNARY(csubstr("0XF").is_unsigned_integer());
- CHECK_FALSE(csubstr("0xg").is_unsigned_integer());
- CHECK_FALSE(csubstr("0Xg").is_unsigned_integer());
- CHECK_FALSE(csubstr("0xG").is_unsigned_integer());
- CHECK_FALSE(csubstr("0XG").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0x1").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0X1").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0x0").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0X0").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xa").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0Xa").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xb").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0Xb").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xc").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0Xc").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xd").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0Xd").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xe").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0Xe").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xf").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0Xf").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xA").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0XA").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xB").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0XB").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xC").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0XC").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xD").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0XD").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xE").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0XE").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xF").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0XF").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xg").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0Xg").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0xG").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0XG").is_unsigned_integer());
- }
- SUBCASE("binary")
- {
- CHECK_FALSE(csubstr("0b").is_unsigned_integer());
- CHECK_FALSE(csubstr("0B").is_unsigned_integer());
- CHECK_UNARY(csubstr("0b0").is_unsigned_integer());
- CHECK_UNARY(csubstr("0B0").is_unsigned_integer());
- CHECK_UNARY(csubstr("0b1").is_unsigned_integer());
- CHECK_UNARY(csubstr("0B1").is_unsigned_integer());
- CHECK_FALSE(csubstr("0b2").is_unsigned_integer());
- CHECK_FALSE(csubstr("0B2").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0b0").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0B0").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0b1").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0B1").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0b2").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0B2").is_unsigned_integer());
- }
- SUBCASE("octal")
- {
- CHECK_FALSE(csubstr("0o").is_unsigned_integer());
- CHECK_FALSE(csubstr("0O").is_unsigned_integer());
- CHECK_UNARY(csubstr("0o0").is_unsigned_integer());
- CHECK_UNARY(csubstr("0O0").is_unsigned_integer());
- CHECK_UNARY(csubstr("0o1").is_unsigned_integer());
- CHECK_UNARY(csubstr("0O1").is_unsigned_integer());
- CHECK_UNARY(csubstr("0o6").is_unsigned_integer());
- CHECK_UNARY(csubstr("0O6").is_unsigned_integer());
- CHECK_UNARY(csubstr("0o6").is_unsigned_integer());
- CHECK_UNARY(csubstr("0O6").is_unsigned_integer());
- CHECK_UNARY(csubstr("0o7").is_unsigned_integer());
- CHECK_UNARY(csubstr("0O7").is_unsigned_integer());
- CHECK_FALSE(csubstr("0o8").is_unsigned_integer());
- CHECK_FALSE(csubstr("0O8").is_unsigned_integer());
- CHECK_FALSE(csubstr("0o9").is_unsigned_integer());
- CHECK_FALSE(csubstr("0O9").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0o0").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0O0").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0o1").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0O1").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0o6").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0O6").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0o6").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0O6").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0o7").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0O7").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0o8").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0O8").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0o9").is_unsigned_integer());
- CHECK_FALSE(csubstr("-0O9").is_unsigned_integer());
- }
-}
-
-TEST_CASE("substr.is_integer")
-{
- SUBCASE("empty_string")
- {
- CHECK_FALSE(csubstr().is_integer());
- CHECK_FALSE(csubstr("").is_integer());
- }
- SUBCASE("signs")
- {
- CHECK_FALSE(csubstr("-").is_integer());
- CHECK_FALSE(csubstr("+").is_integer());
- CHECK_UNARY(csubstr("-1").is_integer());
- CHECK_UNARY(csubstr("+1").is_integer());
- }
- SUBCASE("whitespace_before")
- {
- CHECK_FALSE(csubstr(" 0").is_integer());
- CHECK_FALSE(csubstr(" 1").is_integer());
- CHECK_FALSE(csubstr(" -1").is_integer());
- CHECK_FALSE(csubstr(" 0.1").is_integer());
- CHECK_FALSE(csubstr(" -0.1").is_integer());
- }
- SUBCASE("whitespace_after")
- {
- CHECK_FALSE(csubstr("0 ").is_integer());
- CHECK_FALSE(csubstr("1 ").is_integer());
- CHECK_FALSE(csubstr("-1 ").is_integer());
- CHECK_FALSE(csubstr("0.1 ").is_integer());
- CHECK_FALSE(csubstr("-0.1 ").is_integer());
- }
- SUBCASE("whitespace_only")
- {
- CHECK_FALSE(csubstr(" ").is_integer());
- CHECK_FALSE(csubstr("\t\t\t\t").is_integer());
- CHECK_FALSE(csubstr("\n\n\n\n").is_integer());
- CHECK_FALSE(csubstr("\r\r\r\r").is_integer());
- }
- SUBCASE("decimal")
- {
- CHECK_UNARY(csubstr("0").is_integer());
- CHECK_UNARY(csubstr("1").is_integer());
- CHECK_UNARY(csubstr("-1").is_integer());
- CHECK_FALSE(csubstr("0.1").is_integer());
- CHECK_FALSE(csubstr("-0.1").is_integer());
- }
- SUBCASE("hexadecimal")
- {
- CHECK_FALSE(csubstr("0x").is_integer());
- CHECK_FALSE(csubstr("0X").is_integer());
- CHECK_UNARY(csubstr("0x1").is_integer());
- CHECK_UNARY(csubstr("0X1").is_integer());
- CHECK_UNARY(csubstr("0x0").is_integer());
- CHECK_UNARY(csubstr("0X0").is_integer());
- CHECK_UNARY(csubstr("0xa").is_integer());
- CHECK_UNARY(csubstr("0Xa").is_integer());
- CHECK_UNARY(csubstr("0xb").is_integer());
- CHECK_UNARY(csubstr("0Xb").is_integer());
- CHECK_UNARY(csubstr("0xc").is_integer());
- CHECK_UNARY(csubstr("0Xc").is_integer());
- CHECK_UNARY(csubstr("0xd").is_integer());
- CHECK_UNARY(csubstr("0Xd").is_integer());
- CHECK_UNARY(csubstr("0xe").is_integer());
- CHECK_UNARY(csubstr("0Xe").is_integer());
- CHECK_UNARY(csubstr("0xf").is_integer());
- CHECK_UNARY(csubstr("0Xf").is_integer());
- CHECK_UNARY(csubstr("0xA").is_integer());
- CHECK_UNARY(csubstr("0XA").is_integer());
- CHECK_UNARY(csubstr("0xB").is_integer());
- CHECK_UNARY(csubstr("0XB").is_integer());
- CHECK_UNARY(csubstr("0xC").is_integer());
- CHECK_UNARY(csubstr("0XC").is_integer());
- CHECK_UNARY(csubstr("0xD").is_integer());
- CHECK_UNARY(csubstr("0XD").is_integer());
- CHECK_UNARY(csubstr("0xE").is_integer());
- CHECK_UNARY(csubstr("0XE").is_integer());
- CHECK_UNARY(csubstr("0xF").is_integer());
- CHECK_UNARY(csubstr("0XF").is_integer());
- CHECK_FALSE(csubstr("0xg").is_integer());
- CHECK_FALSE(csubstr("0Xg").is_integer());
- CHECK_FALSE(csubstr("0xG").is_integer());
- CHECK_FALSE(csubstr("0XG").is_integer());
- CHECK_UNARY(csubstr("-0x1").is_integer());
- CHECK_UNARY(csubstr("-0X1").is_integer());
- CHECK_UNARY(csubstr("-0x0").is_integer());
- CHECK_UNARY(csubstr("-0X0").is_integer());
- CHECK_UNARY(csubstr("-0xa").is_integer());
- CHECK_UNARY(csubstr("-0Xa").is_integer());
- CHECK_UNARY(csubstr("-0xb").is_integer());
- CHECK_UNARY(csubstr("-0Xb").is_integer());
- CHECK_UNARY(csubstr("-0xc").is_integer());
- CHECK_UNARY(csubstr("-0Xc").is_integer());
- CHECK_UNARY(csubstr("-0xd").is_integer());
- CHECK_UNARY(csubstr("-0Xd").is_integer());
- CHECK_UNARY(csubstr("-0xe").is_integer());
- CHECK_UNARY(csubstr("-0Xe").is_integer());
- CHECK_UNARY(csubstr("-0xf").is_integer());
- CHECK_UNARY(csubstr("-0Xf").is_integer());
- CHECK_UNARY(csubstr("-0xA").is_integer());
- CHECK_UNARY(csubstr("-0XA").is_integer());
- CHECK_UNARY(csubstr("-0xB").is_integer());
- CHECK_UNARY(csubstr("-0XB").is_integer());
- CHECK_UNARY(csubstr("-0xC").is_integer());
- CHECK_UNARY(csubstr("-0XC").is_integer());
- CHECK_UNARY(csubstr("-0xD").is_integer());
- CHECK_UNARY(csubstr("-0XD").is_integer());
- CHECK_UNARY(csubstr("-0xE").is_integer());
- CHECK_UNARY(csubstr("-0XE").is_integer());
- CHECK_UNARY(csubstr("-0xF").is_integer());
- CHECK_UNARY(csubstr("-0XF").is_integer());
- CHECK_FALSE(csubstr("-0xg").is_integer());
- CHECK_FALSE(csubstr("-0Xg").is_integer());
- CHECK_FALSE(csubstr("-0xG").is_integer());
- CHECK_FALSE(csubstr("-0XG").is_integer());
- }
- SUBCASE("binary")
- {
- CHECK_FALSE(csubstr("0b").is_integer());
- CHECK_FALSE(csubstr("0B").is_integer());
- CHECK_UNARY(csubstr("0b0").is_integer());
- CHECK_UNARY(csubstr("0B0").is_integer());
- CHECK_UNARY(csubstr("0b1").is_integer());
- CHECK_UNARY(csubstr("0B1").is_integer());
- CHECK_FALSE(csubstr("0b2").is_integer());
- CHECK_FALSE(csubstr("0B2").is_integer());
- CHECK_UNARY(csubstr("-0b0").is_integer());
- CHECK_UNARY(csubstr("-0B0").is_integer());
- CHECK_UNARY(csubstr("-0b1").is_integer());
- CHECK_UNARY(csubstr("-0B1").is_integer());
- CHECK_FALSE(csubstr("-0b2").is_integer());
- CHECK_FALSE(csubstr("-0B2").is_integer());
- }
- SUBCASE("octal")
- {
- CHECK_FALSE(csubstr("0o").is_integer());
- CHECK_FALSE(csubstr("0O").is_integer());
- CHECK_UNARY(csubstr("0o0").is_integer());
- CHECK_UNARY(csubstr("0O0").is_integer());
- CHECK_UNARY(csubstr("0o1").is_integer());
- CHECK_UNARY(csubstr("0O1").is_integer());
- CHECK_UNARY(csubstr("0o6").is_integer());
- CHECK_UNARY(csubstr("0O6").is_integer());
- CHECK_UNARY(csubstr("0o6").is_integer());
- CHECK_UNARY(csubstr("0O6").is_integer());
- CHECK_UNARY(csubstr("0o7").is_integer());
- CHECK_UNARY(csubstr("0O7").is_integer());
- CHECK_FALSE(csubstr("0o8").is_integer());
- CHECK_FALSE(csubstr("0O8").is_integer());
- CHECK_FALSE(csubstr("0o9").is_integer());
- CHECK_FALSE(csubstr("0O9").is_integer());
- CHECK_UNARY(csubstr("-0o0").is_integer());
- CHECK_UNARY(csubstr("-0O0").is_integer());
- CHECK_UNARY(csubstr("-0o1").is_integer());
- CHECK_UNARY(csubstr("-0O1").is_integer());
- CHECK_UNARY(csubstr("-0o6").is_integer());
- CHECK_UNARY(csubstr("-0O6").is_integer());
- CHECK_UNARY(csubstr("-0o6").is_integer());
- CHECK_UNARY(csubstr("-0O6").is_integer());
- CHECK_UNARY(csubstr("-0o7").is_integer());
- CHECK_UNARY(csubstr("-0O7").is_integer());
- CHECK_FALSE(csubstr("-0o8").is_integer());
- CHECK_FALSE(csubstr("-0O8").is_integer());
- CHECK_FALSE(csubstr("-0o9").is_integer());
- CHECK_FALSE(csubstr("-0O9").is_integer());
- }
-}
-
-TEST_CASE("substr.is_real")
-{
- SUBCASE("empty_string")
- {
- CHECK_FALSE(csubstr().is_real());
- CHECK_FALSE(csubstr("").is_real());
- }
- SUBCASE("signs")
- {
- CHECK_FALSE(csubstr("-").is_real());
- CHECK_FALSE(csubstr("+").is_real());
- CHECK_UNARY(csubstr("-1").is_real());
- CHECK_UNARY(csubstr("+1").is_real());
- }
- SUBCASE("whitespace_before")
- {
- CHECK_FALSE(csubstr(" 0").is_real());
- CHECK_FALSE(csubstr(" 1").is_real());
- CHECK_FALSE(csubstr(" -1").is_real());
- CHECK_FALSE(csubstr(" 0.1").is_real());
- CHECK_FALSE(csubstr(" -0.1").is_real());
- }
- SUBCASE("whitespace_after")
- {
- CHECK_FALSE(csubstr("0 ").is_real());
- CHECK_FALSE(csubstr("1 ").is_real());
- CHECK_FALSE(csubstr("-1 ").is_real());
- CHECK_FALSE(csubstr("0.1 ").is_real());
- CHECK_FALSE(csubstr("-0.1 ").is_real());
- }
- SUBCASE("whitespace_only")
- {
- CHECK_FALSE(csubstr(" ").is_real());
- CHECK_FALSE(csubstr("\t\t\t\t").is_real());
- CHECK_FALSE(csubstr("\n\n\n\n").is_real());
- CHECK_FALSE(csubstr("\r\r\r\r").is_real());
- }
- SUBCASE("decimal")
- {
- CHECK_UNARY(csubstr("0").is_real());
- CHECK_UNARY(csubstr("1").is_real());
- CHECK_UNARY(csubstr("-1").is_real());
- CHECK_UNARY(csubstr("0.1").is_real());
- CHECK_UNARY(csubstr("-0.1").is_real());
- }
- SUBCASE("hexadecimal")
- {
- CHECK_FALSE(csubstr("0x").is_real());
- CHECK_FALSE(csubstr("0X").is_real());
- CHECK_UNARY(csubstr("0x1").is_real());
- CHECK_UNARY(csubstr("0X1").is_real());
- CHECK_UNARY(csubstr("0x0").is_real());
- CHECK_UNARY(csubstr("0X0").is_real());
- CHECK_UNARY(csubstr("0xa").is_real());
- CHECK_UNARY(csubstr("0Xa").is_real());
- CHECK_UNARY(csubstr("0xb").is_real());
- CHECK_UNARY(csubstr("0Xb").is_real());
- CHECK_UNARY(csubstr("0xc").is_real());
- CHECK_UNARY(csubstr("0Xc").is_real());
- CHECK_UNARY(csubstr("0xd").is_real());
- CHECK_UNARY(csubstr("0Xd").is_real());
- CHECK_UNARY(csubstr("0xe").is_real());
- CHECK_UNARY(csubstr("0Xe").is_real());
- CHECK_UNARY(csubstr("0xf").is_real());
- CHECK_UNARY(csubstr("0Xf").is_real());
- CHECK_UNARY(csubstr("0xA").is_real());
- CHECK_UNARY(csubstr("0XA").is_real());
- CHECK_UNARY(csubstr("0xB").is_real());
- CHECK_UNARY(csubstr("0XB").is_real());
- CHECK_UNARY(csubstr("0xC").is_real());
- CHECK_UNARY(csubstr("0XC").is_real());
- CHECK_UNARY(csubstr("0xD").is_real());
- CHECK_UNARY(csubstr("0XD").is_real());
- CHECK_UNARY(csubstr("0xE").is_real());
- CHECK_UNARY(csubstr("0XE").is_real());
- CHECK_UNARY(csubstr("0xF").is_real());
- CHECK_UNARY(csubstr("0XF").is_real());
- CHECK_FALSE(csubstr("0xg").is_real());
- CHECK_FALSE(csubstr("0Xg").is_real());
- CHECK_FALSE(csubstr("0xG").is_real());
- CHECK_FALSE(csubstr("0XG").is_real());
- CHECK_UNARY(csubstr("-0x1").is_real());
- CHECK_UNARY(csubstr("-0X1").is_real());
- CHECK_UNARY(csubstr("-0x0").is_real());
- CHECK_UNARY(csubstr("-0X0").is_real());
- CHECK_UNARY(csubstr("-0xa").is_real());
- CHECK_UNARY(csubstr("-0Xa").is_real());
- CHECK_UNARY(csubstr("-0xb").is_real());
- CHECK_UNARY(csubstr("-0Xb").is_real());
- CHECK_UNARY(csubstr("-0xc").is_real());
- CHECK_UNARY(csubstr("-0Xc").is_real());
- CHECK_UNARY(csubstr("-0xd").is_real());
- CHECK_UNARY(csubstr("-0Xd").is_real());
- CHECK_UNARY(csubstr("-0xe").is_real());
- CHECK_UNARY(csubstr("-0Xe").is_real());
- CHECK_UNARY(csubstr("-0xf").is_real());
- CHECK_UNARY(csubstr("-0Xf").is_real());
- CHECK_UNARY(csubstr("-0xA").is_real());
- CHECK_UNARY(csubstr("-0XA").is_real());
- CHECK_UNARY(csubstr("-0xB").is_real());
- CHECK_UNARY(csubstr("-0XB").is_real());
- CHECK_UNARY(csubstr("-0xC").is_real());
- CHECK_UNARY(csubstr("-0XC").is_real());
- CHECK_UNARY(csubstr("-0xD").is_real());
- CHECK_UNARY(csubstr("-0XD").is_real());
- CHECK_UNARY(csubstr("-0xE").is_real());
- CHECK_UNARY(csubstr("-0XE").is_real());
- CHECK_UNARY(csubstr("-0xF").is_real());
- CHECK_UNARY(csubstr("-0XF").is_real());
- CHECK_FALSE(csubstr("-0xg").is_real());
- CHECK_FALSE(csubstr("-0Xg").is_real());
- CHECK_FALSE(csubstr("-0xG").is_real());
- CHECK_FALSE(csubstr("-0XG").is_real());
- CHECK_UNARY(csubstr("0x1.e8480p+19").is_real());
- CHECK_UNARY(csubstr("0X1.e8480P+19").is_real());
- CHECK_UNARY(csubstr("0x1.e8480P+19").is_real());
- CHECK_UNARY(csubstr("0X1.e8480p+19").is_real());
- CHECK_UNARY(csubstr("-0x1.e8480p+19").is_real());
- CHECK_UNARY(csubstr("-0X1.e8480P+19").is_real());
- CHECK_UNARY(csubstr("-0x1.e8480P+19").is_real());
- CHECK_UNARY(csubstr("-0X1.e8480p+19").is_real());
- }
- SUBCASE("binary")
- {
- CHECK_FALSE(csubstr("0b").is_real());
- CHECK_FALSE(csubstr("0B").is_real());
- CHECK_UNARY(csubstr("0b0").is_real());
- CHECK_UNARY(csubstr("0B0").is_real());
- CHECK_UNARY(csubstr("0b1").is_real());
- CHECK_UNARY(csubstr("0B1").is_real());
- CHECK_FALSE(csubstr("0b2").is_real());
- CHECK_FALSE(csubstr("0B2").is_real());
- CHECK_UNARY(csubstr("-0b0").is_real());
- CHECK_UNARY(csubstr("-0B0").is_real());
- CHECK_UNARY(csubstr("-0b1").is_real());
- CHECK_UNARY(csubstr("-0B1").is_real());
- CHECK_FALSE(csubstr("-0b2").is_real());
- CHECK_FALSE(csubstr("-0B2").is_real());
- }
- SUBCASE("octal")
- {
- CHECK_FALSE(csubstr("0o").is_real());
- CHECK_FALSE(csubstr("0O").is_real());
- CHECK_UNARY(csubstr("0o0").is_real());
- CHECK_UNARY(csubstr("0O0").is_real());
- CHECK_UNARY(csubstr("0o1").is_real());
- CHECK_UNARY(csubstr("0O1").is_real());
- CHECK_UNARY(csubstr("0o6").is_real());
- CHECK_UNARY(csubstr("0O6").is_real());
- CHECK_UNARY(csubstr("0o6").is_real());
- CHECK_UNARY(csubstr("0O6").is_real());
- CHECK_UNARY(csubstr("0o7").is_real());
- CHECK_UNARY(csubstr("0O7").is_real());
- CHECK_FALSE(csubstr("0o8").is_real());
- CHECK_FALSE(csubstr("0O8").is_real());
- CHECK_FALSE(csubstr("0o9").is_real());
- CHECK_FALSE(csubstr("0O9").is_real());
- CHECK_UNARY(csubstr("-0o0").is_real());
- CHECK_UNARY(csubstr("-0O0").is_real());
- CHECK_UNARY(csubstr("-0o1").is_real());
- CHECK_UNARY(csubstr("-0O1").is_real());
- CHECK_UNARY(csubstr("-0o6").is_real());
- CHECK_UNARY(csubstr("-0O6").is_real());
- CHECK_UNARY(csubstr("-0o6").is_real());
- CHECK_UNARY(csubstr("-0O6").is_real());
- CHECK_UNARY(csubstr("-0o7").is_real());
- CHECK_UNARY(csubstr("-0O7").is_real());
- CHECK_FALSE(csubstr("-0o8").is_real());
- CHECK_FALSE(csubstr("-0O8").is_real());
- CHECK_FALSE(csubstr("-0o9").is_real());
- CHECK_FALSE(csubstr("-0O9").is_real());
- }
- SUBCASE("infinity")
- {
- CHECK_UNARY(csubstr("infinity").is_real());
- CHECK_FALSE(csubstr(" infinity").is_real());
- CHECK_UNARY(csubstr("-infinity").is_real());
- CHECK_FALSE(csubstr(" -infinity").is_real());
- CHECK_UNARY(csubstr("+infinity").is_real());
- CHECK_FALSE(csubstr(" +infinity").is_real());
- CHECK_FALSE(csubstr("infinity ").is_real());
- CHECK_FALSE(csubstr(" infinity ").is_real());
- CHECK_FALSE(csubstr("-infinity ").is_real());
- CHECK_FALSE(csubstr(" -infinity ").is_real());
- CHECK_FALSE(csubstr("+infinity ").is_real());
- CHECK_FALSE(csubstr(" +infinity ").is_real());
- CHECK_FALSE(csubstr("infinity1").is_real());
- CHECK_FALSE(csubstr(" infinity1").is_real());
- CHECK_FALSE(csubstr("-infinity1").is_real());
- CHECK_FALSE(csubstr(" -infinity1").is_real());
- CHECK_FALSE(csubstr("+infinity1").is_real());
- CHECK_FALSE(csubstr(" +infinity1").is_real());
- CHECK_FALSE(csubstr("infin").is_real());
- CHECK_FALSE(csubstr(" infin").is_real());
- CHECK_FALSE(csubstr("-infin").is_real());
- CHECK_FALSE(csubstr(" -infin").is_real());
- CHECK_FALSE(csubstr("+infin").is_real());
- CHECK_FALSE(csubstr(" +infin").is_real());
- CHECK_FALSE(csubstr("inflated").is_real());
- CHECK_FALSE(csubstr(" inflated").is_real());
- CHECK_FALSE(csubstr("-inflated").is_real());
- CHECK_FALSE(csubstr(" -inflated").is_real());
- CHECK_FALSE(csubstr("+inflated").is_real());
- CHECK_FALSE(csubstr(" +inflated").is_real());
- }
- SUBCASE("inf")
- {
- CHECK_UNARY(csubstr("inf").is_real());
- CHECK_FALSE(csubstr(" inf").is_real());
- CHECK_UNARY(csubstr("-inf").is_real());
- CHECK_FALSE(csubstr(" -inf").is_real());
- CHECK_UNARY(csubstr("+inf").is_real());
- CHECK_FALSE(csubstr(" +inf").is_real());
- CHECK_FALSE(csubstr("inf ").is_real());
- CHECK_FALSE(csubstr(" inf ").is_real());
- CHECK_FALSE(csubstr("-inf ").is_real());
- CHECK_FALSE(csubstr(" -inf ").is_real());
- CHECK_FALSE(csubstr("+inf ").is_real());
- CHECK_FALSE(csubstr(" +inf ").is_real());
- CHECK_FALSE(csubstr("inf1").is_real());
- CHECK_FALSE(csubstr(" inf1").is_real());
- CHECK_FALSE(csubstr("-inf1").is_real());
- CHECK_FALSE(csubstr(" -inf1").is_real());
- CHECK_FALSE(csubstr("+inf1").is_real());
- CHECK_FALSE(csubstr(" +inf1").is_real());
- }
- SUBCASE("nan")
- {
- CHECK_UNARY(csubstr("nan").is_real());
- CHECK_FALSE(csubstr(" nan").is_real());
- CHECK_UNARY(csubstr("-nan").is_real());
- CHECK_FALSE(csubstr(" -nan").is_real());
- CHECK_UNARY(csubstr("+nan").is_real());
- CHECK_FALSE(csubstr(" +nan").is_real());
- CHECK_FALSE(csubstr("nan ").is_real());
- CHECK_FALSE(csubstr(" nan ").is_real());
- CHECK_FALSE(csubstr("-nan ").is_real());
- CHECK_FALSE(csubstr(" -nan ").is_real());
- CHECK_FALSE(csubstr("+nan ").is_real());
- CHECK_FALSE(csubstr(" +nan ").is_real());
- CHECK_FALSE(csubstr("nan1").is_real());
- CHECK_FALSE(csubstr(" nan1").is_real());
- CHECK_FALSE(csubstr("-nan1").is_real());
- CHECK_FALSE(csubstr(" -nan1").is_real());
- CHECK_FALSE(csubstr("+nan1").is_real());
- CHECK_FALSE(csubstr(" +nan1").is_real());
- }
-}
-
-typedef enum : uint8_t { kIsNone = 0, kIsUint = 1, kIsInt = 3, kIsReal = 7 } NumberClass;
-struct number
-{
- csubstr num;
- NumberClass cls;
-
- template<size_t N>
- number(const char (&n)[N], NumberClass c) : num(n), cls(c) {}
- number(csubstr n, NumberClass c) : num(n), cls(c) {}
-
- void test(csubstr ref={})
- {
- if(ref.empty())
- ref = num;
- INFO("num=" << num);
- INFO("ref=" << ref);
- switch(cls)
- {
- case kIsUint:
- {
- INFO("uint");
- CHECK_EQ(num.first_uint_span(), ref);
- CHECK_EQ(num.first_int_span(), ref);
- CHECK_EQ(num.first_real_span(), ref);
- CHECK_UNARY(num.first_uint_span().is_unsigned_integer());
- CHECK_UNARY(num.first_uint_span().is_integer());
- CHECK_UNARY(num.first_uint_span().is_number());
- break;
- }
- case kIsInt:
- {
- INFO("int");
- CHECK_EQ(num.first_uint_span(), "");
- CHECK_EQ(num.first_int_span(), ref);
- CHECK_EQ(num.first_real_span(), ref);
- CHECK_FALSE(num.first_int_span().is_unsigned_integer());
- CHECK_UNARY(num.first_int_span().is_integer());
- CHECK_UNARY(num.first_int_span().is_number());
- break;
- }
- case kIsReal:
- {
- INFO("real");
- CHECK_EQ(num.first_uint_span(), "");
- CHECK_EQ(num.first_int_span(), "");
- CHECK_EQ(num.first_real_span(), ref);
- CHECK_FALSE(num.first_real_span().is_unsigned_integer());
- CHECK_FALSE(num.first_real_span().is_integer());
- CHECK_UNARY(num .first_real_span().is_number());
- break;
- }
- case kIsNone:
- {
- INFO("none");
- CHECK_EQ(num.first_uint_span(), "");
- CHECK_EQ(num.first_int_span(), "");
- CHECK_EQ(num.first_real_span(), "");
- CHECK_FALSE(num.is_unsigned_integer());
- CHECK_FALSE(num.is_integer());
- CHECK_FALSE(num.is_number());
- break;
- }
- default:
- {
- CHECK_UNARY(false);//FAIL();
- break;
- }
- }
- }
-};
-
-const number numbers[] = {
- {"", kIsNone},
- {"0x", kIsNone},
- {"0b", kIsNone},
- {"0o", kIsNone},
- {".", kIsNone},
- {"0x.", kIsNone},
- {"0b.", kIsNone},
- {"0o.", kIsNone},
- {"-", kIsNone},
- {"0x-", kIsNone},
- {"0b-", kIsNone},
- {"0o-", kIsNone},
- {"+", kIsNone},
- {"0x+", kIsNone},
- {"0b+", kIsNone},
- {"0o+", kIsNone},
- {".e", kIsNone},
- {".e+", kIsNone},
- {".e-", kIsNone},
- {"0x.p", kIsNone},
- {"0x.p+", kIsNone},
- {"0x.p-", kIsNone},
- {"0b.p", kIsNone},
- {"0b.p+", kIsNone},
- {"0b.p-", kIsNone},
- {"0o.p", kIsNone},
- {"0o.p+", kIsNone},
- {"0o.p-", kIsNone},
- {"0x.p+", kIsNone},
- {"0x0.p+", kIsNone},
- {"0x.0p+", kIsNone},
- {"0x.p+0", kIsNone},
- {"0x.p+00", kIsNone},
- {"0x0.0p+", kIsNone},
- {"0x.0p+0", kIsReal},
- {"0x0.p+0", kIsReal},
- {"0x0.0p+0", kIsReal},
- {"0x0.0p+00", kIsReal},
- {"0x00.00p+00", kIsReal},
- {"0x0p0.00p+00", kIsNone},
- {"0x00.0p0p+00", kIsNone},
- {"0x00.00p+0p0", kIsNone},
- {"0x00.00p+00p", kIsNone},
- {"0b.p+", kIsNone},
- {"0b0.p+", kIsNone},
- {"0b.0p+", kIsNone},
- {"0b.p+0", kIsNone},
- {"0b.p+00", kIsNone},
- {"0b0.0p+", kIsNone},
- {"0b.0p+0", kIsReal},
- {"0b0.p+0", kIsReal},
- {"0b0.0p+0", kIsReal},
- {"0b0.0p+00", kIsReal},
- {"0b00.00p+00", kIsReal},
- {"0b0p0.00p+00", kIsNone},
- {"0b00.0p0p+00", kIsNone},
- {"0b00.00p+0p0", kIsNone},
- {"0b00.00p+00p", kIsNone},
- {"0o.p+", kIsNone},
- {"0o0.p+", kIsNone},
- {"0o.0p+", kIsNone},
- {"0o.p+0", kIsNone},
- {"0o.p+00", kIsNone},
- {"0o0.0p+", kIsNone},
- {"0o.0p+0", kIsReal},
- {"0o0.p+0", kIsReal},
- {"0o0.0p+0", kIsReal},
- {"0o0.0p+00", kIsReal},
- {"0o00.00p+00", kIsReal},
- {"0o0p0.00p+00", kIsNone},
- {"0o00.0p0p+00", kIsNone},
- {"0o00.00p+0p0", kIsNone},
- {"0o00.00p+00p", kIsNone},
- {".e+", kIsNone},
- {"0.e+", kIsNone},
- {".0e+", kIsNone},
- {".e+0", kIsNone},
- {".e+00", kIsNone},
- {"0.0e+", kIsNone},
- {".0e+0", kIsReal},
- {"0.e+0", kIsReal},
- {"0.0e+0", kIsReal},
- {"0.0e+00", kIsReal},
- {"00.00e+00", kIsReal},
- {"0e0.00e+00", kIsNone},
- {"00.0e0e+00", kIsNone},
- {"00.00e+0e0", kIsNone},
- {"00.00e+00e", kIsNone},
- {"0x1234.", kIsReal},
- {"+0x1234.", kIsReal},
- {"-0x1234.", kIsReal},
- {"0x.1234", kIsReal},
- {"0x0.1.2.3", kIsNone},
- {"0o0.1.2.3", kIsNone},
- {"0b0.1.0.1", kIsNone},
- {"a", kIsNone},
- {"b", kIsNone},
- {"?", kIsNone},
- {"0.0.1", kIsNone},
- {"0.0.9", kIsNone},
- {"0.0.10", kIsNone},
- {"0.1.0", kIsNone},
- {"0.9.0", kIsNone},
- {"0.10.0", kIsNone},
- {"1.0.0", kIsNone},
- {"9.0.0", kIsNone},
- {"10.0.0", kIsNone},
- {".0", kIsReal},
- {"0.", kIsReal},
- {"0.0", kIsReal},
- {"1234", kIsUint},
- {"+1234", kIsUint},
- {"-1234", kIsInt},
- {"1234.0", kIsReal},
- {"+1234.0", kIsReal},
- {"-1234.0", kIsReal},
- {"0000", kIsUint},
- {"0123", kIsUint},
- {"0", kIsUint},
- {"1", kIsUint},
- {"1.", kIsReal},
- {".1", kIsReal},
- {"0x1234", kIsUint},
- {"+0x1234", kIsUint},
- {"-0x1234", kIsInt},
- {"0b01", kIsUint},
- {"1e+1", kIsReal},
- {"1e-1", kIsReal},
- {"1.e-1", kIsReal},
- {"1.e+1", kIsReal},
- {"1.0e-1", kIsReal},
- {"1.0e+1", kIsReal},
- {"1e+123", kIsReal},
- {"1e-123", kIsReal},
- {"1.e-123", kIsReal},
- {"1.e+123", kIsReal},
- {"1.0e123", kIsReal},
- {"1.0e-123", kIsReal},
- {"1.0e+123", kIsReal},
- {"0x1.e8480p+19", kIsReal},
- {"0x1.g8480p+19", kIsNone},
- {"0xg.e8480p+19", kIsNone},
- {"0b101.011p+19", kIsReal},
- {"0b101.012p+19", kIsNone},
- {"0b102.011p+19", kIsNone},
- {"0o173.045p+19", kIsReal},
- {"0o173.048p+19", kIsNone},
- {"0o178.045p+19", kIsNone},
- {"infinity", kIsReal},
- {"inf", kIsReal},
- {"nan", kIsReal},
-};
-
-TEST_CASE("substr.is_number")
-{
- SUBCASE("basic.hex")
- {
- CHECK_EQ(csubstr("0x.0p+0").first_real_span(), csubstr("0x.0p+0"));
- CHECK_EQ(csubstr("0x)sdkjhsdfkju").first_int_span(), csubstr{});
- CHECK_EQ(csubstr("0x)sdkjhsdfkju").first_uint_span(), csubstr{});
- CHECK_EQ(csubstr("0x)sdkjhsdfkju").first_real_span(), csubstr{});
- CHECK_EQ(csubstr("0x0)sdkjhsdfkju").first_int_span(), csubstr("0x0"));
- CHECK_EQ(csubstr("0x0)sdkjhsdfkju").first_uint_span(), csubstr("0x0"));
- CHECK_EQ(csubstr("0x0)sdkjhsdfkju").first_real_span(), csubstr("0x0"));
- }
- SUBCASE("basic.dec")
- {
- CHECK_EQ(csubstr("+infinity").first_real_span(), csubstr("+infinity"));
- CHECK_EQ(csubstr("-infinity").first_real_span(), csubstr("-infinity"));
- CHECK_EQ(csubstr("+inf").first_real_span(), csubstr("+inf"));
- CHECK_EQ(csubstr("-inf").first_real_span(), csubstr("-inf"));
- CHECK_EQ(csubstr("0.e+0").first_real_span(), csubstr("0.e+0"));
- CHECK_EQ(csubstr("0.e-0").first_real_span(), csubstr("0.e-0"));
- }
- SUBCASE("plain")
- {
- for(number n : numbers)
- {
- n.test();
- }
- }
- char buf[128];
- SUBCASE("leading+")
- {
- for(number n : numbers)
- {
- INFO("orig=" << n.num);
- substr withplus = cat_sub(buf, '+', n.num);
- NumberClass cls = n.cls;
- if(withplus.begins_with("+-") || withplus.begins_with("++"))
- cls = kIsNone;
- number cp(withplus, cls);
- cp.test();
- }
- }
- SUBCASE("leading-")
- {
- for(number n : numbers)
- {
- INFO("orig=" << n.num);
- substr withminus = cat_sub(buf, '-', n.num);
- NumberClass cls = n.cls;
- if(cls == kIsUint)
- cls = kIsInt;
- if(withminus.begins_with("--") || withminus.begins_with("-+"))
- cls = kIsNone;
- number cp(withminus, cls);
- cp.test();
- }
- }
- SUBCASE("capital_e")
- {
- for(number n : numbers)
- {
- INFO("orig=" << n.num);
- substr replaced = cat_sub(buf, n.num);
- replaced.replace('e', 'E');
- number cp(replaced, n.cls);
- cp.test();
- }
- }
- SUBCASE("capital_p")
- {
- for(number n : numbers)
- {
- INFO("orig=" << n.num);
- substr replaced = cat_sub(buf, n.num);
- replaced.replace('p', 'P');
- number cp(replaced, n.cls);
- cp.test();
- }
- }
- SUBCASE("capital_0x")
- {
- for(number n : numbers)
- {
- INFO("orig=" << n.num);
- substr replaced = cat_sub(buf, n.num);
- replaced.replace('x', 'X');
- number cp(replaced, n.cls);
- cp.test();
- }
- }
- SUBCASE("capital_0b")
- {
- for(number n : numbers)
- {
- INFO("orig=" << n.num);
- substr replaced = cat_sub(buf, n.num);
- replaced.replace('b', 'B');
- number cp(replaced, n.cls);
- cp.test();
- }
- }
- SUBCASE("capital_0o")
- {
- for(number n : numbers)
- {
- INFO("orig=" << n.num);
- substr replaced = cat_sub(buf, n.num);
- replaced.replace('o', 'O');
- number cp(replaced, n.cls);
- cp.test();
- }
- }
- SUBCASE("numbers before")
- {
- char numbuf_[16] = {};
- substr numbuf = numbuf_;
- for(number n : numbers)
- {
- INFO("orig=" << n.num);
- for(char c : {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'})
- {
- numbuf.fill(c);
- substr result = cat_sub(buf, numbuf, n.num);
- number cp(result.sub(numbuf.len), n.cls);
- cp.test();
- }
- }
- }
- SUBCASE("numbers after")
- {
- char numbuf_[16] = {};
- substr numbuf = numbuf_;
- for(number n : numbers)
- {
- INFO("orig=" << n.num);
- for(char c : {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'})
- {
- numbuf.fill(c);
- substr result = cat_sub(buf, n.num, numbuf);
- number cp(result.first(n.num.len), n.cls);
- cp.test();
- }
- }
- }
- SUBCASE("delimiter after")
- {
- for(number n : numbers)
- {
- INFO("orig=" << n.num);
- for(char c : {' ', '\n', ']', ')', '}', ',', ';', '\r', '\t','\0'})
- {
- INFO("delimiter='" << c << "'");
- substr result = cat_sub(buf, n.num, c);
- number cp(result, n.cls);
- cp.test(n.num);
- }
- }
- }
- csubstr garbage = "sdkjhsdfkju";
- SUBCASE("prepend")
- {
- // adding anything before the number will make it not be a number
- for(number n : numbers)
- {
- if(n.num.empty())
- continue;
- INFO("orig=" << n.num);
- for(int i = 0; i < 127; ++i)
- {
- char c = (char)i;
- csubstr fmtd = cat_sub(buf, garbage, c, n.num);
- number cp(fmtd, kIsNone);
- cp.test();
- }
- }
- }
- SUBCASE("append")
- {
- // adding after may or may not make it a number
- for(number const& n : numbers)
- {
- INFO("orig=" << n.num);
- for(int i = 0; i < 127; ++i)
- {
- number cp = n;
- char c = (char)i;
- cp.num = cat_sub(buf, n.num, c, garbage);
- if(!csubstr::_is_delim_char(c))
- {
- cp.cls = kIsNone;
- }
- cp.test(n.num);
- }
- }
- }
-}
-
-TEST_CASE("substr.triml")
-{
- using S = csubstr;
-
- CHECK_EQ(S("aaabbb" ).triml('a' ), "bbb");
- CHECK_EQ(S("aaabbb" ).triml('b' ), "aaabbb");
- CHECK_EQ(S("aaabbb" ).triml('c' ), "aaabbb");
- CHECK_EQ(S("aaabbb" ).triml("ab"), "");
- CHECK_EQ(S("aaabbb" ).triml("ba"), "");
- CHECK_EQ(S("aaabbb" ).triml("cd"), "aaabbb");
- CHECK_EQ(S("aaa...bbb").triml('a' ), "...bbb");
- CHECK_EQ(S("aaa...bbb").triml('b' ), "aaa...bbb");
- CHECK_EQ(S("aaa...bbb").triml('c' ), "aaa...bbb");
- CHECK_EQ(S("aaa...bbb").triml("ab"), "...bbb");
- CHECK_EQ(S("aaa...bbb").triml("ba"), "...bbb");
- CHECK_EQ(S("aaa...bbb").triml("ab."), "");
- CHECK_EQ(S("aaa...bbb").triml("a."), "bbb");
- CHECK_EQ(S("aaa...bbb").triml(".a"), "bbb");
- CHECK_EQ(S("aaa...bbb").triml("b."), "aaa...bbb");
- CHECK_EQ(S("aaa...bbb").triml(".b"), "aaa...bbb");
- CHECK_EQ(S("aaa...bbb").triml("cd"), "aaa...bbb");
-
- CHECK_EQ(S("ab" ).triml('a' ), "b");
- CHECK_EQ(S("ab" ).triml('b' ), "ab");
- CHECK_EQ(S("ab" ).triml('c' ), "ab");
- CHECK_EQ(S("ab" ).triml("ab"), "");
- CHECK_EQ(S("ab" ).triml("ba"), "");
- CHECK_EQ(S("ab" ).triml("cd"), "ab");
- CHECK_EQ(S("a...b").triml('a' ), "...b");
- CHECK_EQ(S("a...b").triml('b' ), "a...b");
- CHECK_EQ(S("a...b").triml('c' ), "a...b");
- CHECK_EQ(S("a...b").triml("ab"), "...b");
- CHECK_EQ(S("a...b").triml("ba"), "...b");
- CHECK_EQ(S("a...b").triml("ab."), "");
- CHECK_EQ(S("a...b").triml("a."), "b");
- CHECK_EQ(S("a...b").triml(".a"), "b");
- CHECK_EQ(S("a...b").triml("b."), "a...b");
- CHECK_EQ(S("a...b").triml(".b"), "a...b");
- CHECK_EQ(S("a...b").triml("cd"), "a...b");
-}
-
-TEST_CASE("substr.trimr")
-{
- using S = csubstr;
-
- CHECK_EQ(S("aaabbb" ).trimr('a' ), "aaabbb");
- CHECK_EQ(S("aaabbb" ).trimr('b' ), "aaa");
- CHECK_EQ(S("aaabbb" ).trimr('c' ), "aaabbb");
- CHECK_EQ(S("aaabbb" ).trimr("ab"), "");
- CHECK_EQ(S("aaabbb" ).trimr("ba"), "");
- CHECK_EQ(S("aaabbb" ).trimr("cd"), "aaabbb");
- CHECK_EQ(S("aaa...bbb").trimr('a' ), "aaa...bbb");
- CHECK_EQ(S("aaa...bbb").trimr('b' ), "aaa...");
- CHECK_EQ(S("aaa...bbb").trimr('c' ), "aaa...bbb");
- CHECK_EQ(S("aaa...bbb").trimr("ab"), "aaa...");
- CHECK_EQ(S("aaa...bbb").trimr("ba"), "aaa...");
- CHECK_EQ(S("aaa...bbb").trimr("ab."), "");
- CHECK_EQ(S("aaa...bbb").trimr("a."), "aaa...bbb");
- CHECK_EQ(S("aaa...bbb").trimr(".a"), "aaa...bbb");
- CHECK_EQ(S("aaa...bbb").trimr("b."), "aaa");
- CHECK_EQ(S("aaa...bbb").trimr(".b"), "aaa");
- CHECK_EQ(S("aaa...bbb").trimr("cd"), "aaa...bbb");
-
- CHECK_EQ(S("ab" ).trimr('a' ), "ab");
- CHECK_EQ(S("ab" ).trimr('b' ), "a");
- CHECK_EQ(S("ab" ).trimr('c' ), "ab");
- CHECK_EQ(S("ab" ).trimr("ab"), "");
- CHECK_EQ(S("ab" ).trimr("ba"), "");
- CHECK_EQ(S("ab" ).trimr("cd"), "ab");
- CHECK_EQ(S("a...b").trimr('a' ), "a...b");
- CHECK_EQ(S("a...b").trimr('b' ), "a...");
- CHECK_EQ(S("a...b").trimr('c' ), "a...b");
- CHECK_EQ(S("a...b").trimr("ab"), "a...");
- CHECK_EQ(S("a...b").trimr("ba"), "a...");
- CHECK_EQ(S("a...b").trimr("ab."), "");
- CHECK_EQ(S("a...b").trimr("a."), "a...b");
- CHECK_EQ(S("a...b").trimr(".a"), "a...b");
- CHECK_EQ(S("a...b").trimr("b."), "a");
- CHECK_EQ(S("a...b").trimr(".b"), "a");
- CHECK_EQ(S("a...b").trimr("cd"), "a...b");
-}
-
-TEST_CASE("substr.trim")
-{
- using S = csubstr;
-
- CHECK_EQ(S("aaabbb" ).trim('a' ), "bbb");
- CHECK_EQ(S("aaabbb" ).trim('b' ), "aaa");
- CHECK_EQ(S("aaabbb" ).trim('c' ), "aaabbb");
- CHECK_EQ(S("aaabbb" ).trim("ab"), "");
- CHECK_EQ(S("aaabbb" ).trim("ba"), "");
- CHECK_EQ(S("aaabbb" ).trim("cd"), "aaabbb");
- CHECK_EQ(S("aaa...bbb").trim('a' ), "...bbb");
- CHECK_EQ(S("aaa...bbb").trim('b' ), "aaa...");
- CHECK_EQ(S("aaa...bbb").trim('c' ), "aaa...bbb");
- CHECK_EQ(S("aaa...bbb").trim("ab"), "...");
- CHECK_EQ(S("aaa...bbb").trim("ba"), "...");
- CHECK_EQ(S("aaa...bbb").trim('c' ), "aaa...bbb");
- CHECK_EQ(S("aaa...bbb").trim("ab."), "");
- CHECK_EQ(S("aaa...bbb").trim("." ), "aaa...bbb");
- CHECK_EQ(S("aaa...bbb").trim("a."), "bbb");
- CHECK_EQ(S("aaa...bbb").trim(".a"), "bbb");
- CHECK_EQ(S("aaa...bbb").trim("b."), "aaa");
- CHECK_EQ(S("aaa...bbb").trim(".b"), "aaa");
- CHECK_EQ(S("aaa...bbb").trim("cd"), "aaa...bbb");
-
- CHECK_EQ(S("ab" ).trim('a' ), "b");
- CHECK_EQ(S("ab" ).trim('b' ), "a");
- CHECK_EQ(S("ab" ).trim('c' ), "ab");
- CHECK_EQ(S("ab" ).trim("ab"), "");
- CHECK_EQ(S("ab" ).trim("ba"), "");
- CHECK_EQ(S("ab" ).trim("cd"), "ab");
- CHECK_EQ(S("a...b").trim('a' ), "...b");
- CHECK_EQ(S("a...b").trim('b' ), "a...");
- CHECK_EQ(S("a...b").trim('c' ), "a...b");
- CHECK_EQ(S("a...b").trim("ab"), "...");
- CHECK_EQ(S("a...b").trim("ba"), "...");
- CHECK_EQ(S("a...b").trim('c' ), "a...b");
- CHECK_EQ(S("a...b").trim("ab."), "");
- CHECK_EQ(S("a...b").trim("." ), "a...b");
- CHECK_EQ(S("a...b").trim("a."), "b");
- CHECK_EQ(S("a...b").trim(".a"), "b");
- CHECK_EQ(S("a...b").trim("b."), "a");
- CHECK_EQ(S("a...b").trim(".b"), "a");
- CHECK_EQ(S("a...b").trim("cd"), "a...b");
-}
-
-TEST_CASE("substr.pop_right")
-{
- using S = csubstr;
-
- CHECK_EQ(S("0/1/2" ).pop_right('/' ), "2");
- CHECK_EQ(S("0/1/2" ).pop_right('/', true), "2");
- CHECK_EQ(S("0/1/2/" ).pop_right('/' ), "");
- CHECK_EQ(S("0/1/2/" ).pop_right('/', true), "2/");
- CHECK_EQ(S("0/1/2///" ).pop_right('/' ), "");
- CHECK_EQ(S("0/1/2///" ).pop_right('/', true), "2///");
-
- CHECK_EQ(S("0/1//2" ).pop_right('/' ), "2");
- CHECK_EQ(S("0/1//2" ).pop_right('/', true), "2");
- CHECK_EQ(S("0/1//2/" ).pop_right('/' ), "");
- CHECK_EQ(S("0/1//2/" ).pop_right('/', true), "2/");
- CHECK_EQ(S("0/1//2///" ).pop_right('/' ), "");
- CHECK_EQ(S("0/1//2///" ).pop_right('/', true), "2///");
-
- CHECK_EQ(S("0/1///2" ).pop_right('/' ), "2");
- CHECK_EQ(S("0/1///2" ).pop_right('/', true), "2");
- CHECK_EQ(S("0/1///2/" ).pop_right('/' ), "");
- CHECK_EQ(S("0/1///2/" ).pop_right('/', true), "2/");
- CHECK_EQ(S("0/1///2///" ).pop_right('/' ), "");
- CHECK_EQ(S("0/1///2///" ).pop_right('/', true), "2///");
-
- CHECK_EQ(S("/0/1/2" ).pop_right('/' ), "2");
- CHECK_EQ(S("/0/1/2" ).pop_right('/', true), "2");
- CHECK_EQ(S("/0/1/2/" ).pop_right('/' ), "");
- CHECK_EQ(S("/0/1/2/" ).pop_right('/', true), "2/");
- CHECK_EQ(S("/0/1/2///").pop_right('/' ), "");
- CHECK_EQ(S("/0/1/2///").pop_right('/', true), "2///");
-
- CHECK_EQ(S("0" ).pop_right('/' ), "0");
- CHECK_EQ(S("0" ).pop_right('/', true), "0");
- CHECK_EQ(S("0/" ).pop_right('/' ), "");
- CHECK_EQ(S("0/" ).pop_right('/', true), "0/");
- CHECK_EQ(S("0///" ).pop_right('/' ), "");
- CHECK_EQ(S("0///" ).pop_right('/', true), "0///");
-
- CHECK_EQ(S("/0" ).pop_right('/' ), "0");
- CHECK_EQ(S("/0" ).pop_right('/', true), "0");
- CHECK_EQ(S("/0/" ).pop_right('/' ), "");
- CHECK_EQ(S("/0/" ).pop_right('/', true), "0/");
- CHECK_EQ(S("/0///" ).pop_right('/' ), "");
- CHECK_EQ(S("/0///" ).pop_right('/', true), "0///");
-
- CHECK_EQ(S("/" ).pop_right('/' ), "");
- CHECK_EQ(S("/" ).pop_right('/', true), "");
- CHECK_EQ(S("///" ).pop_right('/' ), "");
- CHECK_EQ(S("///" ).pop_right('/', true), "");
-
- CHECK_EQ(S("" ).pop_right('/' ), "");
- CHECK_EQ(S("" ).pop_right('/', true), "");
-
- CHECK_EQ(S("0-1-2" ).pop_right('-' ), "2");
- CHECK_EQ(S("0-1-2" ).pop_right('-', true), "2");
- CHECK_EQ(S("0-1-2-" ).pop_right('-' ), "");
- CHECK_EQ(S("0-1-2-" ).pop_right('-', true), "2-");
- CHECK_EQ(S("0-1-2---" ).pop_right('-' ), "");
- CHECK_EQ(S("0-1-2---" ).pop_right('-', true), "2---");
-
- CHECK_EQ(S("0-1--2" ).pop_right('-' ), "2");
- CHECK_EQ(S("0-1--2" ).pop_right('-', true), "2");
- CHECK_EQ(S("0-1--2-" ).pop_right('-' ), "");
- CHECK_EQ(S("0-1--2-" ).pop_right('-', true), "2-");
- CHECK_EQ(S("0-1--2---" ).pop_right('-' ), "");
- CHECK_EQ(S("0-1--2---" ).pop_right('-', true), "2---");
-
- CHECK_EQ(S("0-1---2" ).pop_right('-' ), "2");
- CHECK_EQ(S("0-1---2" ).pop_right('-', true), "2");
- CHECK_EQ(S("0-1---2-" ).pop_right('-' ), "");
- CHECK_EQ(S("0-1---2-" ).pop_right('-', true), "2-");
- CHECK_EQ(S("0-1---2---" ).pop_right('-' ), "");
- CHECK_EQ(S("0-1---2---" ).pop_right('-', true), "2---");
-
- CHECK_EQ(S("-0-1-2" ).pop_right('-' ), "2");
- CHECK_EQ(S("-0-1-2" ).pop_right('-', true), "2");
- CHECK_EQ(S("-0-1-2-" ).pop_right('-' ), "");
- CHECK_EQ(S("-0-1-2-" ).pop_right('-', true), "2-");
- CHECK_EQ(S("-0-1-2---").pop_right('-' ), "");
- CHECK_EQ(S("-0-1-2---").pop_right('-', true), "2---");
-
- CHECK_EQ(S("0" ).pop_right('-' ), "0");
- CHECK_EQ(S("0" ).pop_right('-', true), "0");
- CHECK_EQ(S("0-" ).pop_right('-' ), "");
- CHECK_EQ(S("0-" ).pop_right('-', true), "0-");
- CHECK_EQ(S("0---" ).pop_right('-' ), "");
- CHECK_EQ(S("0---" ).pop_right('-', true), "0---");
-
- CHECK_EQ(S("-0" ).pop_right('-' ), "0");
- CHECK_EQ(S("-0" ).pop_right('-', true), "0");
- CHECK_EQ(S("-0-" ).pop_right('-' ), "");
- CHECK_EQ(S("-0-" ).pop_right('-', true), "0-");
- CHECK_EQ(S("-0---" ).pop_right('-' ), "");
- CHECK_EQ(S("-0---" ).pop_right('-', true), "0---");
-
- CHECK_EQ(S("-" ).pop_right('-' ), "");
- CHECK_EQ(S("-" ).pop_right('-', true), "");
- CHECK_EQ(S("---" ).pop_right('-' ), "");
- CHECK_EQ(S("---" ).pop_right('-', true), "");
-
- CHECK_EQ(S("" ).pop_right('-' ), "");
- CHECK_EQ(S("" ).pop_right('-', true), "");
-}
-
-TEST_CASE("substr.pop_left")
-{
- using S = csubstr;
-
- CHECK_EQ(S("0/1/2" ).pop_left('/' ), "0");
- CHECK_EQ(S("0/1/2" ).pop_left('/', true), "0");
- CHECK_EQ(S("0/1/2/" ).pop_left('/' ), "0");
- CHECK_EQ(S("0/1/2/" ).pop_left('/', true), "0");
- CHECK_EQ(S("0/1/2///" ).pop_left('/' ), "0");
- CHECK_EQ(S("0/1/2///" ).pop_left('/', true), "0");
-
- CHECK_EQ(S("0//1/2" ).pop_left('/' ), "0");
- CHECK_EQ(S("0//1/2" ).pop_left('/', true), "0");
- CHECK_EQ(S("0//1/2/" ).pop_left('/' ), "0");
- CHECK_EQ(S("0//1/2/" ).pop_left('/', true), "0");
- CHECK_EQ(S("0//1/2///" ).pop_left('/' ), "0");
- CHECK_EQ(S("0//1/2///" ).pop_left('/', true), "0");
-
- CHECK_EQ(S("0///1/2" ).pop_left('/' ), "0");
- CHECK_EQ(S("0///1/2" ).pop_left('/', true), "0");
- CHECK_EQ(S("0///1/2/" ).pop_left('/' ), "0");
- CHECK_EQ(S("0///1/2/" ).pop_left('/', true), "0");
- CHECK_EQ(S("0///1/2///" ).pop_left('/' ), "0");
- CHECK_EQ(S("0///1/2///" ).pop_left('/', true), "0");
-
- CHECK_EQ(S("/0/1/2" ).pop_left('/' ), "");
- CHECK_EQ(S("/0/1/2" ).pop_left('/', true), "/0");
- CHECK_EQ(S("/0/1/2/" ).pop_left('/' ), "");
- CHECK_EQ(S("/0/1/2/" ).pop_left('/', true), "/0");
- CHECK_EQ(S("/0/1/2///").pop_left('/' ), "");
- CHECK_EQ(S("/0/1/2///").pop_left('/', true), "/0");
- CHECK_EQ(S("///0/1/2" ).pop_left('/' ), "");
- CHECK_EQ(S("///0/1/2" ).pop_left('/', true), "///0");
- CHECK_EQ(S("///0/1/2/").pop_left('/' ), "");
- CHECK_EQ(S("///0/1/2/").pop_left('/', true), "///0");
- CHECK_EQ(S("///0/1/2/").pop_left('/' ), "");
- CHECK_EQ(S("///0/1/2/").pop_left('/', true), "///0");
-
- CHECK_EQ(S("0" ).pop_left('/' ), "0");
- CHECK_EQ(S("0" ).pop_left('/', true), "0");
- CHECK_EQ(S("0/" ).pop_left('/' ), "0");
- CHECK_EQ(S("0/" ).pop_left('/', true), "0");
- CHECK_EQ(S("0///" ).pop_left('/' ), "0");
- CHECK_EQ(S("0///" ).pop_left('/', true), "0");
-
- CHECK_EQ(S("/0" ).pop_left('/' ), "");
- CHECK_EQ(S("/0" ).pop_left('/', true), "/0");
- CHECK_EQ(S("/0/" ).pop_left('/' ), "");
- CHECK_EQ(S("/0/" ).pop_left('/', true), "/0");
- CHECK_EQ(S("/0///" ).pop_left('/' ), "");
- CHECK_EQ(S("/0///" ).pop_left('/', true), "/0");
- CHECK_EQ(S("///0///" ).pop_left('/' ), "");
- CHECK_EQ(S("///0///" ).pop_left('/', true), "///0");
-
- CHECK_EQ(S("/" ).pop_left('/' ), "");
- CHECK_EQ(S("/" ).pop_left('/', true), "");
- CHECK_EQ(S("///" ).pop_left('/' ), "");
- CHECK_EQ(S("///" ).pop_left('/', true), "");
-
- CHECK_EQ(S("" ).pop_left('/' ), "");
- CHECK_EQ(S("" ).pop_left('/', true), "");
-
- CHECK_EQ(S("0-1-2" ).pop_left('-' ), "0");
- CHECK_EQ(S("0-1-2" ).pop_left('-', true), "0");
- CHECK_EQ(S("0-1-2-" ).pop_left('-' ), "0");
- CHECK_EQ(S("0-1-2-" ).pop_left('-', true), "0");
- CHECK_EQ(S("0-1-2---" ).pop_left('-' ), "0");
- CHECK_EQ(S("0-1-2---" ).pop_left('-', true), "0");
-
- CHECK_EQ(S("0--1-2" ).pop_left('-' ), "0");
- CHECK_EQ(S("0--1-2" ).pop_left('-', true), "0");
- CHECK_EQ(S("0--1-2-" ).pop_left('-' ), "0");
- CHECK_EQ(S("0--1-2-" ).pop_left('-', true), "0");
- CHECK_EQ(S("0--1-2---" ).pop_left('-' ), "0");
- CHECK_EQ(S("0--1-2---" ).pop_left('-', true), "0");
-
- CHECK_EQ(S("0---1-2" ).pop_left('-' ), "0");
- CHECK_EQ(S("0---1-2" ).pop_left('-', true), "0");
- CHECK_EQ(S("0---1-2-" ).pop_left('-' ), "0");
- CHECK_EQ(S("0---1-2-" ).pop_left('-', true), "0");
- CHECK_EQ(S("0---1-2---" ).pop_left('-' ), "0");
- CHECK_EQ(S("0---1-2---" ).pop_left('-', true), "0");
-
- CHECK_EQ(S("-0-1-2" ).pop_left('-' ), "");
- CHECK_EQ(S("-0-1-2" ).pop_left('-', true), "-0");
- CHECK_EQ(S("-0-1-2-" ).pop_left('-' ), "");
- CHECK_EQ(S("-0-1-2-" ).pop_left('-', true), "-0");
- CHECK_EQ(S("-0-1-2---").pop_left('-' ), "");
- CHECK_EQ(S("-0-1-2---").pop_left('-', true), "-0");
- CHECK_EQ(S("---0-1-2" ).pop_left('-' ), "");
- CHECK_EQ(S("---0-1-2" ).pop_left('-', true), "---0");
- CHECK_EQ(S("---0-1-2-").pop_left('-' ), "");
- CHECK_EQ(S("---0-1-2-").pop_left('-', true), "---0");
- CHECK_EQ(S("---0-1-2-").pop_left('-' ), "");
- CHECK_EQ(S("---0-1-2-").pop_left('-', true), "---0");
-
- CHECK_EQ(S("0" ).pop_left('-' ), "0");
- CHECK_EQ(S("0" ).pop_left('-', true), "0");
- CHECK_EQ(S("0-" ).pop_left('-' ), "0");
- CHECK_EQ(S("0-" ).pop_left('-', true), "0");
- CHECK_EQ(S("0---" ).pop_left('-' ), "0");
- CHECK_EQ(S("0---" ).pop_left('-', true), "0");
-
- CHECK_EQ(S("-0" ).pop_left('-' ), "");
- CHECK_EQ(S("-0" ).pop_left('-', true), "-0");
- CHECK_EQ(S("-0-" ).pop_left('-' ), "");
- CHECK_EQ(S("-0-" ).pop_left('-', true), "-0");
- CHECK_EQ(S("-0---" ).pop_left('-' ), "");
- CHECK_EQ(S("-0---" ).pop_left('-', true), "-0");
- CHECK_EQ(S("---0---" ).pop_left('-' ), "");
- CHECK_EQ(S("---0---" ).pop_left('-', true), "---0");
-
- CHECK_EQ(S("-" ).pop_left('-' ), "");
- CHECK_EQ(S("-" ).pop_left('-', true), "");
- CHECK_EQ(S("---" ).pop_left('-' ), "");
- CHECK_EQ(S("---" ).pop_left('-', true), "");
-
- CHECK_EQ(S("" ).pop_left('-' ), "");
- CHECK_EQ(S("" ).pop_left('-', true), "");
-}
-
-TEST_CASE("substr.gpop_left")
-{
- using S = csubstr;
-
- CHECK_EQ(S("0/1/2" ).gpop_left('/' ), "0/1");
- CHECK_EQ(S("0/1/2" ).gpop_left('/', true), "0/1");
- CHECK_EQ(S("0/1/2/" ).gpop_left('/' ), "0/1/2");
- CHECK_EQ(S("0/1/2/" ).gpop_left('/', true), "0/1");
- CHECK_EQ(S("0/1/2//" ).gpop_left('/' ), "0/1/2/");
- CHECK_EQ(S("0/1/2//" ).gpop_left('/', true), "0/1");
- CHECK_EQ(S("0/1/2///" ).gpop_left('/' ), "0/1/2//");
- CHECK_EQ(S("0/1/2///" ).gpop_left('/', true), "0/1");
-
- CHECK_EQ(S("0/1//2" ).gpop_left('/' ), "0/1/");
- CHECK_EQ(S("0/1//2" ).gpop_left('/', true), "0/1");
- CHECK_EQ(S("0/1//2/" ).gpop_left('/' ), "0/1//2");
- CHECK_EQ(S("0/1//2/" ).gpop_left('/', true), "0/1");
- CHECK_EQ(S("0/1//2//" ).gpop_left('/' ), "0/1//2/");
- CHECK_EQ(S("0/1//2//" ).gpop_left('/', true), "0/1");
- CHECK_EQ(S("0/1//2///" ).gpop_left('/' ), "0/1//2//");
- CHECK_EQ(S("0/1//2///" ).gpop_left('/', true), "0/1");
-
- CHECK_EQ(S("0/1///2" ).gpop_left('/' ), "0/1//");
- CHECK_EQ(S("0/1///2" ).gpop_left('/', true), "0/1");
- CHECK_EQ(S("0/1///2/" ).gpop_left('/' ), "0/1///2");
- CHECK_EQ(S("0/1///2/" ).gpop_left('/', true), "0/1");
- CHECK_EQ(S("0/1///2//" ).gpop_left('/' ), "0/1///2/");
- CHECK_EQ(S("0/1///2//" ).gpop_left('/', true), "0/1");
- CHECK_EQ(S("0/1///2///" ).gpop_left('/' ), "0/1///2//");
- CHECK_EQ(S("0/1///2///" ).gpop_left('/', true), "0/1");
-
- CHECK_EQ(S("/0/1/2" ).gpop_left('/' ), "/0/1");
- CHECK_EQ(S("/0/1/2" ).gpop_left('/', true), "/0/1");
- CHECK_EQ(S("/0/1/2/" ).gpop_left('/' ), "/0/1/2");
- CHECK_EQ(S("/0/1/2/" ).gpop_left('/', true), "/0/1");
- CHECK_EQ(S("/0/1/2//" ).gpop_left('/' ), "/0/1/2/");
- CHECK_EQ(S("/0/1/2//" ).gpop_left('/', true), "/0/1");
- CHECK_EQ(S("/0/1/2///" ).gpop_left('/' ), "/0/1/2//");
- CHECK_EQ(S("/0/1/2///" ).gpop_left('/', true), "/0/1");
-
- CHECK_EQ(S("//0/1/2" ).gpop_left('/' ), "//0/1");
- CHECK_EQ(S("//0/1/2" ).gpop_left('/', true), "//0/1");
- CHECK_EQ(S("//0/1/2/" ).gpop_left('/' ), "//0/1/2");
- CHECK_EQ(S("//0/1/2/" ).gpop_left('/', true), "//0/1");
- CHECK_EQ(S("//0/1/2//" ).gpop_left('/' ), "//0/1/2/");
- CHECK_EQ(S("//0/1/2//" ).gpop_left('/', true), "//0/1");
- CHECK_EQ(S("//0/1/2///" ).gpop_left('/' ), "//0/1/2//");
- CHECK_EQ(S("//0/1/2///" ).gpop_left('/', true), "//0/1");
-
- CHECK_EQ(S("///0/1/2" ).gpop_left('/' ), "///0/1");
- CHECK_EQ(S("///0/1/2" ).gpop_left('/', true), "///0/1");
- CHECK_EQ(S("///0/1/2/" ).gpop_left('/' ), "///0/1/2");
- CHECK_EQ(S("///0/1/2/" ).gpop_left('/', true), "///0/1");
- CHECK_EQ(S("///0/1/2//" ).gpop_left('/' ), "///0/1/2/");
- CHECK_EQ(S("///0/1/2//" ).gpop_left('/', true), "///0/1");
- CHECK_EQ(S("///0/1/2///").gpop_left('/' ), "///0/1/2//");
- CHECK_EQ(S("///0/1/2///").gpop_left('/', true), "///0/1");
-
-
- CHECK_EQ(S("0/1" ).gpop_left('/' ), "0");
- CHECK_EQ(S("0/1" ).gpop_left('/', true), "0");
- CHECK_EQ(S("0/1/" ).gpop_left('/' ), "0/1");
- CHECK_EQ(S("0/1/" ).gpop_left('/', true), "0");
- CHECK_EQ(S("0/1//" ).gpop_left('/' ), "0/1/");
- CHECK_EQ(S("0/1//" ).gpop_left('/', true), "0");
- CHECK_EQ(S("0/1///" ).gpop_left('/' ), "0/1//");
- CHECK_EQ(S("0/1///" ).gpop_left('/', true), "0");
-
- CHECK_EQ(S("0//1" ).gpop_left('/' ), "0/");
- CHECK_EQ(S("0//1" ).gpop_left('/', true), "0");
- CHECK_EQ(S("0//1/" ).gpop_left('/' ), "0//1");
- CHECK_EQ(S("0//1/" ).gpop_left('/', true), "0");
- CHECK_EQ(S("0//1//" ).gpop_left('/' ), "0//1/");
- CHECK_EQ(S("0//1//" ).gpop_left('/', true), "0");
- CHECK_EQ(S("0//1///" ).gpop_left('/' ), "0//1//");
- CHECK_EQ(S("0//1///" ).gpop_left('/', true), "0");
-
- CHECK_EQ(S("0///1" ).gpop_left('/' ), "0//");
- CHECK_EQ(S("0///1" ).gpop_left('/', true), "0");
- CHECK_EQ(S("0///1/" ).gpop_left('/' ), "0///1");
- CHECK_EQ(S("0///1/" ).gpop_left('/', true), "0");
- CHECK_EQ(S("0///1//" ).gpop_left('/' ), "0///1/");
- CHECK_EQ(S("0///1//" ).gpop_left('/', true), "0");
- CHECK_EQ(S("0///1///" ).gpop_left('/' ), "0///1//");
- CHECK_EQ(S("0///1///" ).gpop_left('/', true), "0");
-
- CHECK_EQ(S("/0/1" ).gpop_left('/' ), "/0");
- CHECK_EQ(S("/0/1" ).gpop_left('/', true), "/0");
- CHECK_EQ(S("/0/1/" ).gpop_left('/' ), "/0/1");
- CHECK_EQ(S("/0/1/" ).gpop_left('/', true), "/0");
- CHECK_EQ(S("/0/1//" ).gpop_left('/' ), "/0/1/");
- CHECK_EQ(S("/0/1//" ).gpop_left('/', true), "/0");
- CHECK_EQ(S("/0/1///" ).gpop_left('/' ), "/0/1//");
- CHECK_EQ(S("/0/1///" ).gpop_left('/', true), "/0");
-
- CHECK_EQ(S("/0//1" ).gpop_left('/' ), "/0/");
- CHECK_EQ(S("/0//1" ).gpop_left('/', true), "/0");
- CHECK_EQ(S("/0//1/" ).gpop_left('/' ), "/0//1");
- CHECK_EQ(S("/0//1/" ).gpop_left('/', true), "/0");
- CHECK_EQ(S("/0//1//" ).gpop_left('/' ), "/0//1/");
- CHECK_EQ(S("/0//1//" ).gpop_left('/', true), "/0");
- CHECK_EQ(S("/0//1///" ).gpop_left('/' ), "/0//1//");
- CHECK_EQ(S("/0//1///" ).gpop_left('/', true), "/0");
-
- CHECK_EQ(S("/0///1" ).gpop_left('/' ), "/0//");
- CHECK_EQ(S("/0///1" ).gpop_left('/', true), "/0");
- CHECK_EQ(S("/0///1/" ).gpop_left('/' ), "/0///1");
- CHECK_EQ(S("/0///1/" ).gpop_left('/', true), "/0");
- CHECK_EQ(S("/0///1//" ).gpop_left('/' ), "/0///1/");
- CHECK_EQ(S("/0///1//" ).gpop_left('/', true), "/0");
- CHECK_EQ(S("/0///1///" ).gpop_left('/' ), "/0///1//");
- CHECK_EQ(S("/0///1///" ).gpop_left('/', true), "/0");
-
- CHECK_EQ(S("//0/1" ).gpop_left('/' ), "//0");
- CHECK_EQ(S("//0/1" ).gpop_left('/', true), "//0");
- CHECK_EQ(S("//0/1/" ).gpop_left('/' ), "//0/1");
- CHECK_EQ(S("//0/1/" ).gpop_left('/', true), "//0");
- CHECK_EQ(S("//0/1//" ).gpop_left('/' ), "//0/1/");
- CHECK_EQ(S("//0/1//" ).gpop_left('/', true), "//0");
- CHECK_EQ(S("//0/1///" ).gpop_left('/' ), "//0/1//");
- CHECK_EQ(S("//0/1///" ).gpop_left('/', true), "//0");
-
- CHECK_EQ(S("//0//1" ).gpop_left('/' ), "//0/");
- CHECK_EQ(S("//0//1" ).gpop_left('/', true), "//0");
- CHECK_EQ(S("//0//1/" ).gpop_left('/' ), "//0//1");
- CHECK_EQ(S("//0//1/" ).gpop_left('/', true), "//0");
- CHECK_EQ(S("//0//1//" ).gpop_left('/' ), "//0//1/");
- CHECK_EQ(S("//0//1//" ).gpop_left('/', true), "//0");
- CHECK_EQ(S("//0//1///" ).gpop_left('/' ), "//0//1//");
- CHECK_EQ(S("//0//1///" ).gpop_left('/', true), "//0");
-
- CHECK_EQ(S("//0///1" ).gpop_left('/' ), "//0//");
- CHECK_EQ(S("//0///1" ).gpop_left('/', true), "//0");
- CHECK_EQ(S("//0///1/" ).gpop_left('/' ), "//0///1");
- CHECK_EQ(S("//0///1/" ).gpop_left('/', true), "//0");
- CHECK_EQ(S("//0///1//" ).gpop_left('/' ), "//0///1/");
- CHECK_EQ(S("//0///1//" ).gpop_left('/', true), "//0");
- CHECK_EQ(S("//0///1///" ).gpop_left('/' ), "//0///1//");
- CHECK_EQ(S("//0///1///" ).gpop_left('/', true), "//0");
-
- CHECK_EQ(S("0" ).gpop_left('/' ), "");
- CHECK_EQ(S("0" ).gpop_left('/', true), "");
- CHECK_EQ(S("0/" ).gpop_left('/' ), "0");
- CHECK_EQ(S("0/" ).gpop_left('/', true), "");
- CHECK_EQ(S("0//" ).gpop_left('/' ), "0/");
- CHECK_EQ(S("0//" ).gpop_left('/', true), "");
- CHECK_EQ(S("0///" ).gpop_left('/' ), "0//");
- CHECK_EQ(S("0///" ).gpop_left('/', true), "");
-
- CHECK_EQ(S("/0" ).gpop_left('/' ), "");
- CHECK_EQ(S("/0" ).gpop_left('/', true), "");
- CHECK_EQ(S("/0/" ).gpop_left('/' ), "/0");
- CHECK_EQ(S("/0/" ).gpop_left('/', true), "");
- CHECK_EQ(S("/0//" ).gpop_left('/' ), "/0/");
- CHECK_EQ(S("/0//" ).gpop_left('/', true), "");
- CHECK_EQ(S("/0///" ).gpop_left('/' ), "/0//");
- CHECK_EQ(S("/0///" ).gpop_left('/', true), "");
-
- CHECK_EQ(S("//0" ).gpop_left('/' ), "/");
- CHECK_EQ(S("//0" ).gpop_left('/', true), "");
- CHECK_EQ(S("//0/" ).gpop_left('/' ), "//0");
- CHECK_EQ(S("//0/" ).gpop_left('/', true), "");
- CHECK_EQ(S("//0//" ).gpop_left('/' ), "//0/");
- CHECK_EQ(S("//0//" ).gpop_left('/', true), "");
- CHECK_EQ(S("//0///" ).gpop_left('/' ), "//0//");
- CHECK_EQ(S("//0///" ).gpop_left('/', true), "");
-
- CHECK_EQ(S("///0" ).gpop_left('/' ), "//");
- CHECK_EQ(S("///0" ).gpop_left('/', true), "");
- CHECK_EQ(S("///0/" ).gpop_left('/' ), "///0");
- CHECK_EQ(S("///0/" ).gpop_left('/', true), "");
- CHECK_EQ(S("///0//" ).gpop_left('/' ), "///0/");
- CHECK_EQ(S("///0//" ).gpop_left('/', true), "");
- CHECK_EQ(S("///0///" ).gpop_left('/' ), "///0//");
- CHECK_EQ(S("///0///" ).gpop_left('/', true), "");
-
- CHECK_EQ(S("/" ).gpop_left('/' ), "");
- CHECK_EQ(S("/" ).gpop_left('/', true), "");
- CHECK_EQ(S("//" ).gpop_left('/' ), "/");
- CHECK_EQ(S("//" ).gpop_left('/', true), "");
- CHECK_EQ(S("///" ).gpop_left('/' ), "//");
- CHECK_EQ(S("///" ).gpop_left('/', true), "");
-
- CHECK_EQ(S("" ).gpop_left('/' ), "");
- CHECK_EQ(S("" ).gpop_left('/', true), "");
-}
-
-TEST_CASE("substr.gpop_right")
-{
- using S = csubstr;
-
- CHECK_EQ(S("0/1/2" ).gpop_right('/' ), "1/2");
- CHECK_EQ(S("0/1/2" ).gpop_right('/', true), "1/2");
- CHECK_EQ(S("0/1/2/" ).gpop_right('/' ), "1/2/");
- CHECK_EQ(S("0/1/2/" ).gpop_right('/', true), "1/2/");
- CHECK_EQ(S("0/1/2//" ).gpop_right('/' ), "1/2//");
- CHECK_EQ(S("0/1/2//" ).gpop_right('/', true), "1/2//");
- CHECK_EQ(S("0/1/2///" ).gpop_right('/' ), "1/2///");
- CHECK_EQ(S("0/1/2///" ).gpop_right('/', true), "1/2///");
-
- CHECK_EQ(S("0//1/2" ).gpop_right('/' ), "/1/2");
- CHECK_EQ(S("0//1/2" ).gpop_right('/', true), "1/2");
- CHECK_EQ(S("0//1/2/" ).gpop_right('/' ), "/1/2/");
- CHECK_EQ(S("0//1/2/" ).gpop_right('/', true), "1/2/");
- CHECK_EQ(S("0//1/2//" ).gpop_right('/' ), "/1/2//");
- CHECK_EQ(S("0//1/2//" ).gpop_right('/', true), "1/2//");
- CHECK_EQ(S("0//1/2///" ).gpop_right('/' ), "/1/2///");
- CHECK_EQ(S("0//1/2///" ).gpop_right('/', true), "1/2///");
-
- CHECK_EQ(S("0///1/2" ).gpop_right('/' ), "//1/2");
- CHECK_EQ(S("0///1/2" ).gpop_right('/', true), "1/2");
- CHECK_EQ(S("0///1/2/" ).gpop_right('/' ), "//1/2/");
- CHECK_EQ(S("0///1/2/" ).gpop_right('/', true), "1/2/");
- CHECK_EQ(S("0///1/2//" ).gpop_right('/' ), "//1/2//");
- CHECK_EQ(S("0///1/2//" ).gpop_right('/', true), "1/2//");
- CHECK_EQ(S("0///1/2///" ).gpop_right('/' ), "//1/2///");
- CHECK_EQ(S("0///1/2///" ).gpop_right('/', true), "1/2///");
-
-
- CHECK_EQ(S("/0/1/2" ).gpop_right('/' ), "0/1/2");
- CHECK_EQ(S("/0/1/2" ).gpop_right('/', true), "1/2");
- CHECK_EQ(S("/0/1/2/" ).gpop_right('/' ), "0/1/2/");
- CHECK_EQ(S("/0/1/2/" ).gpop_right('/', true), "1/2/");
- CHECK_EQ(S("/0/1/2//" ).gpop_right('/' ), "0/1/2//");
- CHECK_EQ(S("/0/1/2//" ).gpop_right('/', true), "1/2//");
- CHECK_EQ(S("/0/1/2///" ).gpop_right('/' ), "0/1/2///");
- CHECK_EQ(S("/0/1/2///" ).gpop_right('/', true), "1/2///");
-
- CHECK_EQ(S("/0//1/2" ).gpop_right('/' ), "0//1/2");
- CHECK_EQ(S("/0//1/2" ).gpop_right('/', true), "1/2");
- CHECK_EQ(S("/0//1/2/" ).gpop_right('/' ), "0//1/2/");
- CHECK_EQ(S("/0//1/2/" ).gpop_right('/', true), "1/2/");
- CHECK_EQ(S("/0//1/2//" ).gpop_right('/' ), "0//1/2//");
- CHECK_EQ(S("/0//1/2//" ).gpop_right('/', true), "1/2//");
- CHECK_EQ(S("/0//1/2///" ).gpop_right('/' ), "0//1/2///");
- CHECK_EQ(S("/0//1/2///" ).gpop_right('/', true), "1/2///");
-
- CHECK_EQ(S("/0///1/2" ).gpop_right('/' ), "0///1/2");
- CHECK_EQ(S("/0///1/2" ).gpop_right('/', true), "1/2");
- CHECK_EQ(S("/0///1/2/" ).gpop_right('/' ), "0///1/2/");
- CHECK_EQ(S("/0///1/2/" ).gpop_right('/', true), "1/2/");
- CHECK_EQ(S("/0///1/2//" ).gpop_right('/' ), "0///1/2//");
- CHECK_EQ(S("/0///1/2//" ).gpop_right('/', true), "1/2//");
- CHECK_EQ(S("/0///1/2///" ).gpop_right('/' ), "0///1/2///");
- CHECK_EQ(S("/0///1/2///" ).gpop_right('/', true), "1/2///");
-
-
- CHECK_EQ(S("//0/1/2" ).gpop_right('/' ), "/0/1/2");
- CHECK_EQ(S("//0/1/2" ).gpop_right('/', true), "1/2");
- CHECK_EQ(S("//0/1/2/" ).gpop_right('/' ), "/0/1/2/");
- CHECK_EQ(S("//0/1/2/" ).gpop_right('/', true), "1/2/");
- CHECK_EQ(S("//0/1/2//" ).gpop_right('/' ), "/0/1/2//");
- CHECK_EQ(S("//0/1/2//" ).gpop_right('/', true), "1/2//");
- CHECK_EQ(S("//0/1/2///" ).gpop_right('/' ), "/0/1/2///");
- CHECK_EQ(S("//0/1/2///" ).gpop_right('/', true), "1/2///");
-
- CHECK_EQ(S("//0//1/2" ).gpop_right('/' ), "/0//1/2");
- CHECK_EQ(S("//0//1/2" ).gpop_right('/', true), "1/2");
- CHECK_EQ(S("//0//1/2/" ).gpop_right('/' ), "/0//1/2/");
- CHECK_EQ(S("//0//1/2/" ).gpop_right('/', true), "1/2/");
- CHECK_EQ(S("//0//1/2//" ).gpop_right('/' ), "/0//1/2//");
- CHECK_EQ(S("//0//1/2//" ).gpop_right('/', true), "1/2//");
- CHECK_EQ(S("//0//1/2///" ).gpop_right('/' ), "/0//1/2///");
- CHECK_EQ(S("//0//1/2///" ).gpop_right('/', true), "1/2///");
-
- CHECK_EQ(S("//0///1/2" ).gpop_right('/' ), "/0///1/2");
- CHECK_EQ(S("//0///1/2" ).gpop_right('/', true), "1/2");
- CHECK_EQ(S("//0///1/2/" ).gpop_right('/' ), "/0///1/2/");
- CHECK_EQ(S("//0///1/2/" ).gpop_right('/', true), "1/2/");
- CHECK_EQ(S("//0///1/2//" ).gpop_right('/' ), "/0///1/2//");
- CHECK_EQ(S("//0///1/2//" ).gpop_right('/', true), "1/2//");
- CHECK_EQ(S("//0///1/2///" ).gpop_right('/' ), "/0///1/2///");
- CHECK_EQ(S("//0///1/2///" ).gpop_right('/', true), "1/2///");
-
-
- CHECK_EQ(S("0/1" ).gpop_right('/' ), "1");
- CHECK_EQ(S("0/1" ).gpop_right('/', true), "1");
- CHECK_EQ(S("0/1/" ).gpop_right('/' ), "1/");
- CHECK_EQ(S("0/1/" ).gpop_right('/', true), "1/");
- CHECK_EQ(S("0/1//" ).gpop_right('/' ), "1//");
- CHECK_EQ(S("0/1//" ).gpop_right('/', true), "1//");
- CHECK_EQ(S("0/1///" ).gpop_right('/' ), "1///");
- CHECK_EQ(S("0/1///" ).gpop_right('/', true), "1///");
-
- CHECK_EQ(S("0//1" ).gpop_right('/' ), "/1");
- CHECK_EQ(S("0//1" ).gpop_right('/', true), "1");
- CHECK_EQ(S("0//1/" ).gpop_right('/' ), "/1/");
- CHECK_EQ(S("0//1/" ).gpop_right('/', true), "1/");
- CHECK_EQ(S("0//1//" ).gpop_right('/' ), "/1//");
- CHECK_EQ(S("0//1//" ).gpop_right('/', true), "1//");
- CHECK_EQ(S("0//1///" ).gpop_right('/' ), "/1///");
- CHECK_EQ(S("0//1///" ).gpop_right('/', true), "1///");
-
- CHECK_EQ(S("0///1" ).gpop_right('/' ), "//1");
- CHECK_EQ(S("0///1" ).gpop_right('/', true), "1");
- CHECK_EQ(S("0///1/" ).gpop_right('/' ), "//1/");
- CHECK_EQ(S("0///1/" ).gpop_right('/', true), "1/");
- CHECK_EQ(S("0///1//" ).gpop_right('/' ), "//1//");
- CHECK_EQ(S("0///1//" ).gpop_right('/', true), "1//");
- CHECK_EQ(S("0///1///" ).gpop_right('/' ), "//1///");
- CHECK_EQ(S("0///1///" ).gpop_right('/', true), "1///");
-
-
- CHECK_EQ(S("/0/1" ).gpop_right('/' ), "0/1");
- CHECK_EQ(S("/0/1" ).gpop_right('/', true), "1");
- CHECK_EQ(S("/0/1/" ).gpop_right('/' ), "0/1/");
- CHECK_EQ(S("/0/1/" ).gpop_right('/', true), "1/");
- CHECK_EQ(S("/0/1//" ).gpop_right('/' ), "0/1//");
- CHECK_EQ(S("/0/1//" ).gpop_right('/', true), "1//");
- CHECK_EQ(S("/0/1///" ).gpop_right('/' ), "0/1///");
- CHECK_EQ(S("/0/1///" ).gpop_right('/', true), "1///");
-
- CHECK_EQ(S("/0//1" ).gpop_right('/' ), "0//1");
- CHECK_EQ(S("/0//1" ).gpop_right('/', true), "1");
- CHECK_EQ(S("/0//1/" ).gpop_right('/' ), "0//1/");
- CHECK_EQ(S("/0//1/" ).gpop_right('/', true), "1/");
- CHECK_EQ(S("/0//1//" ).gpop_right('/' ), "0//1//");
- CHECK_EQ(S("/0//1//" ).gpop_right('/', true), "1//");
- CHECK_EQ(S("/0//1///" ).gpop_right('/' ), "0//1///");
- CHECK_EQ(S("/0//1///" ).gpop_right('/', true), "1///");
-
- CHECK_EQ(S("/0///1" ).gpop_right('/' ), "0///1");
- CHECK_EQ(S("/0///1" ).gpop_right('/', true), "1");
- CHECK_EQ(S("/0///1/" ).gpop_right('/' ), "0///1/");
- CHECK_EQ(S("/0///1/" ).gpop_right('/', true), "1/");
- CHECK_EQ(S("/0///1//" ).gpop_right('/' ), "0///1//");
- CHECK_EQ(S("/0///1//" ).gpop_right('/', true), "1//");
- CHECK_EQ(S("/0///1///" ).gpop_right('/' ), "0///1///");
- CHECK_EQ(S("/0///1///" ).gpop_right('/', true), "1///");
-
-
- CHECK_EQ(S("//0/1" ).gpop_right('/' ), "/0/1");
- CHECK_EQ(S("//0/1" ).gpop_right('/', true), "1");
- CHECK_EQ(S("//0/1/" ).gpop_right('/' ), "/0/1/");
- CHECK_EQ(S("//0/1/" ).gpop_right('/', true), "1/");
- CHECK_EQ(S("//0/1//" ).gpop_right('/' ), "/0/1//");
- CHECK_EQ(S("//0/1//" ).gpop_right('/', true), "1//");
- CHECK_EQ(S("//0/1///" ).gpop_right('/' ), "/0/1///");
- CHECK_EQ(S("//0/1///" ).gpop_right('/', true), "1///");
-
- CHECK_EQ(S("//0//1" ).gpop_right('/' ), "/0//1");
- CHECK_EQ(S("//0//1" ).gpop_right('/', true), "1");
- CHECK_EQ(S("//0//1/" ).gpop_right('/' ), "/0//1/");
- CHECK_EQ(S("//0//1/" ).gpop_right('/', true), "1/");
- CHECK_EQ(S("//0//1//" ).gpop_right('/' ), "/0//1//");
- CHECK_EQ(S("//0//1//" ).gpop_right('/', true), "1//");
- CHECK_EQ(S("//0//1///" ).gpop_right('/' ), "/0//1///");
- CHECK_EQ(S("//0//1///" ).gpop_right('/', true), "1///");
-
- CHECK_EQ(S("//0///1" ).gpop_right('/' ), "/0///1");
- CHECK_EQ(S("//0///1" ).gpop_right('/', true), "1");
- CHECK_EQ(S("//0///1/" ).gpop_right('/' ), "/0///1/");
- CHECK_EQ(S("//0///1/" ).gpop_right('/', true), "1/");
- CHECK_EQ(S("//0///1//" ).gpop_right('/' ), "/0///1//");
- CHECK_EQ(S("//0///1//" ).gpop_right('/', true), "1//");
- CHECK_EQ(S("//0///1///" ).gpop_right('/' ), "/0///1///");
- CHECK_EQ(S("//0///1///" ).gpop_right('/', true), "1///");
-
-
- CHECK_EQ(S("0" ).gpop_right('/' ), "");
- CHECK_EQ(S("0" ).gpop_right('/', true), "");
- CHECK_EQ(S("0/" ).gpop_right('/' ), "");
- CHECK_EQ(S("0/" ).gpop_right('/', true), "");
- CHECK_EQ(S("0//" ).gpop_right('/' ), "/");
- CHECK_EQ(S("0//" ).gpop_right('/', true), "");
- CHECK_EQ(S("0///" ).gpop_right('/' ), "//");
- CHECK_EQ(S("0///" ).gpop_right('/', true), "");
-
- CHECK_EQ(S("/0" ).gpop_right('/' ), "0");
- CHECK_EQ(S("/0" ).gpop_right('/', true), "");
- CHECK_EQ(S("/0/" ).gpop_right('/' ), "0/");
- CHECK_EQ(S("/0/" ).gpop_right('/', true), "");
- CHECK_EQ(S("/0//" ).gpop_right('/' ), "0//");
- CHECK_EQ(S("/0//" ).gpop_right('/', true), "");
- CHECK_EQ(S("/0///" ).gpop_right('/' ), "0///");
- CHECK_EQ(S("/0///" ).gpop_right('/', true), "");
-
- CHECK_EQ(S("//0" ).gpop_right('/' ), "/0");
- CHECK_EQ(S("//0" ).gpop_right('/', true), "");
- CHECK_EQ(S("//0/" ).gpop_right('/' ), "/0/");
- CHECK_EQ(S("//0/" ).gpop_right('/', true), "");
- CHECK_EQ(S("//0//" ).gpop_right('/' ), "/0//");
- CHECK_EQ(S("//0//" ).gpop_right('/', true), "");
- CHECK_EQ(S("//0///" ).gpop_right('/' ), "/0///");
- CHECK_EQ(S("//0///" ).gpop_right('/', true), "");
-
- CHECK_EQ(S("///0" ).gpop_right('/' ), "//0");
- CHECK_EQ(S("///0" ).gpop_right('/', true), "");
- CHECK_EQ(S("///0/" ).gpop_right('/' ), "//0/");
- CHECK_EQ(S("///0/" ).gpop_right('/', true), "");
- CHECK_EQ(S("///0//" ).gpop_right('/' ), "//0//");
- CHECK_EQ(S("///0//" ).gpop_right('/', true), "");
- CHECK_EQ(S("///0///" ).gpop_right('/' ), "//0///");
- CHECK_EQ(S("///0///" ).gpop_right('/', true), "");
-
- CHECK_EQ(S("/" ).gpop_right('/' ), "");
- CHECK_EQ(S("/" ).gpop_right('/', true), "");
- CHECK_EQ(S("//" ).gpop_right('/' ), "/");
- CHECK_EQ(S("//" ).gpop_right('/', true), "");
- CHECK_EQ(S("///" ).gpop_right('/' ), "//");
- CHECK_EQ(S("///" ).gpop_right('/', true), "");
-
- CHECK_EQ(S("" ).gpop_right('/' ), "");
- CHECK_EQ(S("" ).gpop_right('/', true), "");
-}
-
-TEST_CASE("substr.basename")
-{
- using S = csubstr;
- CHECK_EQ(S("0/1/2").basename(), "2");
- CHECK_EQ(S("0/1/2/").basename(), "2");
- CHECK_EQ(S("0/1/2///").basename(), "2");
- CHECK_EQ(S("/0/1/2").basename(), "2");
- CHECK_EQ(S("/0/1/2/").basename(), "2");
- CHECK_EQ(S("/0/1/2///").basename(), "2");
- CHECK_EQ(S("///0/1/2").basename(), "2");
- CHECK_EQ(S("///0/1/2/").basename(), "2");
- CHECK_EQ(S("///0/1/2///").basename(), "2");
- CHECK_EQ(S("/").basename(), "");
- CHECK_EQ(S("//").basename(), "");
- CHECK_EQ(S("///").basename(), "");
- CHECK_EQ(S("////").basename(), "");
- CHECK_EQ(S("").basename(), "");
-}
-
-TEST_CASE("substr.dirname")
-{
- using S = csubstr;
- CHECK_EQ(S("0/1/2").dirname(), "0/1/");
- CHECK_EQ(S("0/1/2/").dirname(), "0/1/");
- CHECK_EQ(S("/0/1/2").dirname(), "/0/1/");
- CHECK_EQ(S("/0/1/2/").dirname(), "/0/1/");
- CHECK_EQ(S("///0/1/2").dirname(), "///0/1/");
- CHECK_EQ(S("///0/1/2/").dirname(), "///0/1/");
- CHECK_EQ(S("/0").dirname(), "/");
- CHECK_EQ(S("/").dirname(), "/");
- CHECK_EQ(S("//").dirname(), "//");
- CHECK_EQ(S("///").dirname(), "///");
- CHECK_EQ(S("////").dirname(), "////");
- CHECK_EQ(S("").dirname(), "");
-}
-
-TEST_CASE("substr.extshort")
-{
- using S = csubstr;
- CHECK_EQ(S("filename.with.ext").extshort(), "ext");
- CHECK_EQ(S("filename.with.ext.").extshort(), "");
- CHECK_EQ(S(".a.b").extshort(), "b");
- CHECK_EQ(S(".a.b.").extshort(), "");
- CHECK_EQ(S(".b..").extshort(), "");
- CHECK_EQ(S("..b.").extshort(), "");
-}
-
-TEST_CASE("substr.extlong")
-{
- using S = csubstr;
- CHECK_EQ(S("filename.with.ext").extlong(), "with.ext");
- CHECK_EQ(S("filename.with.ext.").extlong(), "with.ext.");
- CHECK_EQ(S(".a.b").extlong(), "a.b");
- CHECK_EQ(S(".a.b.").extlong(), "a.b.");
- CHECK_EQ(S(".b..").extlong(), "b..");
- CHECK_EQ(S("..b.").extlong(), ".b.");
-}
-
-TEST_CASE("substr.next_split")
-{
- using S = csubstr;
-
- {
- S const n;
- typename S::size_type pos = 0;
- S ss;
- CHECK_EQ(n.next_split(':', &pos, &ss), false);
- CHECK_EQ(ss.empty(), true);
- CHECK_EQ(n.next_split(':', &pos, &ss), false);
- CHECK_EQ(ss.empty(), true);
- pos = 0;
- CHECK_EQ(n.next_split(',', &pos, &ss), false);
- CHECK_EQ(ss.empty(), true);
- CHECK_EQ(n.next_split(',', &pos, &ss), false);
- CHECK_EQ(ss.empty(), true);
- }
-
- {
- S const n("0");
- typename S::size_type pos = 0;
- S ss;
- CHECK_EQ(n.next_split(':', &pos, &ss), true);
- CHECK_EQ(ss.empty(), false);
- CHECK_EQ(n.next_split(':', &pos, &ss), false);
- CHECK_EQ(ss.empty(), true);
- CHECK_EQ(n.next_split(':', &pos, &ss), false);
- CHECK_EQ(ss.empty(), true);
- pos = 0;
- CHECK_EQ(n.next_split(',', &pos, &ss), true);
- CHECK_EQ(ss.empty(), false);
- CHECK_EQ(n.next_split(',', &pos, &ss), false);
- CHECK_EQ(ss.empty(), true);
- CHECK_EQ(n.next_split(',', &pos, &ss), false);
- CHECK_EQ(ss.empty(), true);
- }
-
- {
- S const n;
- typename S::size_type pos = 0;
- typename S::size_type count = 0;
- S ss;
- while(n.next_split(':', &pos, &ss))
- {
- ++count;
- }
- CHECK_EQ(count, 0);
- }
-
- {
- S const n("0123456");
- typename S::size_type pos = 0;
- typename S::size_type count = 0;
- S ss;
- while(n.next_split(':', &pos, &ss))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), n.size());
- CHECK_EQ(ss.empty(), false);
- break;
- default:
- CHECK_UNARY(false);//GTEST_FAIL();
- break;
- }
- ++count;
- }
- CHECK_EQ(count, 1);
- }
-
- {
- S const n("0123456:");
- typename S::size_type pos = 0;
- typename S::size_type count = 0;
- S ss;
- while(n.next_split(':', &pos, &ss))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), n.size()-1);
- CHECK_EQ(ss.empty(), false);
- break;
- case 1:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- default:
- CHECK_UNARY(false);//GTEST_FAIL();
- break;
- }
- ++count;
- }
- CHECK_EQ(count, 2);
- }
-
- {
- S const n(":0123456:");
- typename S::size_type pos = 0;
- typename S::size_type count = 0;
- S ss;
- while(n.next_split(':', &pos, &ss))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- case 1:
- CHECK_EQ(ss.size(), n.size()-2);
- CHECK_EQ(ss.empty(), false);
- break;
- case 2:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- default:
- CHECK_UNARY(false);//GTEST_FAIL();
- break;
- }
- ++count;
- }
- CHECK_EQ(count, 3);
- }
-
- {
- S const n(":");
- typename S::size_type pos = 0;
- typename S::size_type count = 0;
- S ss;
- while(n.next_split(':', &pos, &ss))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- case 1:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- default:
- CHECK_UNARY(false);//GTEST_FAIL();
- break;
- }
- ++count;
- }
- CHECK_EQ(count, 2);
- }
-
- {
- S const n("01:23:45:67");
- typename S::size_type pos = 0;
- typename S::size_type count = 0;
- S ss;
- while(n.next_split(':', &pos, &ss))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "01");
- CHECK_NE(ss, "01:");
- CHECK_NE(ss, ":01:");
- CHECK_NE(ss, ":01");
- break;
- case 1:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "23");
- CHECK_NE(ss, "23:");
- CHECK_NE(ss, ":23:");
- CHECK_NE(ss, ":23");
- break;
- case 2:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "45");
- CHECK_NE(ss, "45:");
- CHECK_NE(ss, ":45:");
- CHECK_NE(ss, ":45");
- break;
- case 3:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "67");
- CHECK_NE(ss, "67:");
- CHECK_NE(ss, ":67:");
- CHECK_NE(ss, ":67");
- break;
- default:
- CHECK_UNARY(false);//GTEST_FAIL();
- break;
- }
- count++;
- }
- CHECK_EQ(count, 4);
- }
-
- {
- const S n(":01:23:45:67:");
- typename S::size_type pos = 0;
- typename S::size_type count = 0;
- S ss;
- while(n.next_split(':', &pos, &ss))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- case 1:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "01");
- CHECK_NE(ss, "01:");
- CHECK_NE(ss, ":01:");
- CHECK_NE(ss, ":01");
- break;
- case 2:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "23");
- CHECK_NE(ss, "23:");
- CHECK_NE(ss, ":23:");
- CHECK_NE(ss, ":23");
- break;
- case 3:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "45");
- CHECK_NE(ss, "45:");
- CHECK_NE(ss, ":45:");
- CHECK_NE(ss, ":45");
- break;
- case 4:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "67");
- CHECK_NE(ss, "67:");
- CHECK_NE(ss, ":67:");
- CHECK_NE(ss, ":67");
- break;
- case 5:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- default:
- CHECK_UNARY(false);//GTEST_FAIL();
- break;
- }
- count++;
- }
- CHECK_EQ(count, 6);
- }
-
- {
- const S n("::::01:23:45:67::::");
- typename S::size_type pos = 0;
- typename S::size_type count = 0;
- S ss;
- while(n.next_split(':', &pos, &ss))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 1:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 2:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 3:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 4:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "01");
- CHECK_NE(ss, "01:");
- CHECK_NE(ss, ":01:");
- CHECK_NE(ss, ":01");
- break;
- case 5:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "23");
- CHECK_NE(ss, "23:");
- CHECK_NE(ss, ":23:");
- CHECK_NE(ss, ":23");
- break;
- case 6:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "45");
- CHECK_NE(ss, "45:");
- CHECK_NE(ss, ":45:");
- CHECK_NE(ss, ":45");
- break;
- case 7:
- CHECK_EQ(ss.size(), 2);
- CHECK_EQ(ss, "67");
- CHECK_NE(ss, "67:");
- CHECK_NE(ss, ":67:");
- CHECK_NE(ss, ":67");
- break;
- case 8:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 9:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 10:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 11:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- default:
- CHECK_UNARY(false);//GTEST_FAIL();
- break;
- }
- count++;
- }
- CHECK_EQ(count, 12);
- }
-}
-
-TEST_CASE("substr.split")
-{
- using S = csubstr;
-
- {
- S const n;
- {
- auto spl = n.split(':');
- auto beg = spl.begin();
- auto end = spl.end();
- CHECK_UNARY(beg == end);
- }
- }
-
- {
- S const n("foo:bar:baz");
- auto spl = n.split(':');
- auto beg = spl.begin();
- auto end = spl.end();
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(end->size(), 0);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- auto it = beg;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "foo");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it == beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- ++it;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "bar");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- ++it;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "baz");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- ++it;
- CHECK_EQ(it->size(), 0);
- CHECK_UNARY(it == end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- it = beg;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "foo");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it == beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- it++;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "bar");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- it++;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "baz");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- it++;
- CHECK_EQ(it->size(), 0);
- CHECK_UNARY(it == end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- }
-
- {
- S const n("foo:bar:baz:");
- auto spl = n.split(':');
- auto beg = spl.begin();
- auto end = spl.end();
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(end->size(), 0);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- auto it = beg;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "foo");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it == beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- ++it;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "bar");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- ++it;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "baz");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- ++it;
- CHECK_EQ(it->size(), 0);
- CHECK_EQ(*it, "");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- ++it;
- CHECK_EQ(it->size(), 0);
- CHECK_UNARY(it == end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- //--------------------------
- it = beg;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "foo");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it == beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- it++;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "bar");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- it++;
- CHECK_EQ(it->size(), 3);
- CHECK_EQ(*it, "baz");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- it++;
- CHECK_EQ(it->size(), 0);
- CHECK_EQ(*it, "");
- CHECK_UNARY(it != end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- it++;
- CHECK_EQ(it->size(), 0);
- CHECK_UNARY(it == end);
- CHECK_UNARY(it != beg);
- CHECK_EQ(beg->size(), 3);
- CHECK_EQ(*beg, "foo");
- CHECK_UNARY(beg != end);
- }
-
- {
- S const n;
- auto s = n.split(':');
- // check that multiple calls to begin() always yield the same result
- CHECK_EQ(*s.begin(), "");
- CHECK_EQ(*s.begin(), "");
- CHECK_EQ(*s.begin(), "");
- // check that multiple calls to end() always yield the same result
- auto e = s.end();
- CHECK_UNARY(s.end() == e);
- CHECK_UNARY(s.end() == e);
- //
- auto it = s.begin();
- CHECK_EQ(*it, "");
- CHECK_EQ(it->empty(), true);
- CHECK_EQ(it->size(), 0);
- ++it;
- CHECK_UNARY(it == e);
- }
-
- {
- S const n("01:23:45:67");
- auto s = n.split(':');
- // check that multiple calls to begin() always yield the same result
- CHECK_EQ(*s.begin(), "01");
- CHECK_EQ(*s.begin(), "01");
- CHECK_EQ(*s.begin(), "01");
- // check that multiple calls to end() always yield the same result
- auto e = s.end();
- CHECK_UNARY(s.end() == e);
- CHECK_UNARY(s.end() == e);
- CHECK_UNARY(s.end() == e);
- //
- auto it = s.begin();
- CHECK_EQ(*it, "01");
- CHECK_EQ(it->size(), 2);
- ++it;
- CHECK_EQ(*it, "23");
- CHECK_EQ(it->size(), 2);
- ++it;
- CHECK_EQ(*it, "45");
- CHECK_EQ(it->size(), 2);
- ++it;
- CHECK_EQ(*it, "67");
- CHECK_EQ(it->size(), 2);
- ++it;
- CHECK_UNARY(it == s.end());
- }
-
- {
- S const n;
- typename S::size_type count = 0;
- for(auto &ss : n.split(':'))
- {
- ++count;
- }
- CHECK_EQ(count, 0);
- }
-
- {
- S const n("0123456");
- {
- auto spl = n.split(':');
- auto beg = spl.begin();
- auto end = spl.end();
- CHECK_EQ(beg->size(), n.size());
- CHECK_EQ(end->size(), 0);
- }
- typename S::size_type count = 0;
- for(auto &ss : n.split(':'))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), n.size());
- CHECK_EQ(ss.empty(), false);
- break;
- }
- ++count;
- }
- CHECK_EQ(count, 1);
- }
-
- {
- S const n("foo:bar");
- typename S::size_type count = 0;
- for(auto &ss : n.split(':'))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), 3);
- CHECK_EQ(ss.empty(), false);
- CHECK_EQ(ss, "foo");
- break;
- case 1:
- CHECK_EQ(ss.size(), 3);
- CHECK_EQ(ss.empty(), false);
- CHECK_EQ(ss, "bar");
- break;
- }
- ++count;
- }
- CHECK_EQ(count, 2);
- }
-
- {
- S const n("0123456:");
- typename S::size_type count = 0;
- for(auto &ss : n.split(':'))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), n.size()-1);
- CHECK_EQ(ss.empty(), false);
- break;
- case 1:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- }
- ++count;
- }
- CHECK_EQ(count, 2);
- }
-
- {
- S const n(":0123456:");
- typename S::size_type count = 0;
- for(auto &ss : n.split(':'))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- case 1:
- CHECK_EQ(ss.size(), n.size()-2);
- CHECK_EQ(ss.empty(), false);
- break;
- case 2:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- }
- ++count;
- }
- CHECK_EQ(count, 3);
- }
-
- {
- S const n(":");
- typename S::size_type count = 0;
- for(auto &ss : n.split(':'))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- case 1:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- }
- ++count;
- }
- CHECK_EQ(count, 2);
- }
-
- {
- S const n("01:23:45:67");
- typename S::size_type count = 0;
- for(auto &ss : n.split(':'))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss, "01");
- CHECK_NE(ss, "01:");
- CHECK_NE(ss, ":01:");
- CHECK_NE(ss, ":01");
- break;
- case 1:
- CHECK_EQ(ss, "23");
- CHECK_NE(ss, "23:");
- CHECK_NE(ss, ":23:");
- CHECK_NE(ss, ":23");
- break;
- case 2:
- CHECK_EQ(ss, "45");
- CHECK_NE(ss, "45:");
- CHECK_NE(ss, ":45:");
- CHECK_NE(ss, ":45");
- break;
- case 3:
- CHECK_EQ(ss, "67");
- CHECK_NE(ss, "67:");
- CHECK_NE(ss, ":67:");
- CHECK_NE(ss, ":67");
- break;
- }
- count++;
- }
- CHECK_EQ(count, 4);
- }
-
- {
- const S n(":01:23:45:67:");
- typename S::size_type count = 0;
- for(auto &ss : n.split(':'))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- case 1:
- CHECK_EQ(ss, "01");
- CHECK_NE(ss, "01:");
- CHECK_NE(ss, ":01:");
- CHECK_NE(ss, ":01");
- break;
- case 2:
- CHECK_EQ(ss, "23");
- CHECK_NE(ss, "23:");
- CHECK_NE(ss, ":23:");
- CHECK_NE(ss, ":23");
- break;
- case 3:
- CHECK_EQ(ss, "45");
- CHECK_NE(ss, "45:");
- CHECK_NE(ss, ":45:");
- CHECK_NE(ss, ":45");
- break;
- case 4:
- CHECK_EQ(ss, "67");
- CHECK_NE(ss, "67:");
- CHECK_NE(ss, ":67:");
- CHECK_NE(ss, ":67");
- break;
- case 5:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- break;
- }
- count++;
- }
- CHECK_EQ(count, 6);
- }
-
- {
- const S n("::::01:23:45:67::::");
- typename S::size_type count = 0;
- for(auto &ss : n.split(':'))
- {
- switch(count)
- {
- case 0:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 1:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 2:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 3:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 4:
- CHECK_EQ(ss, "01");
- CHECK_NE(ss, "01:");
- CHECK_NE(ss, ":01:");
- CHECK_NE(ss, ":01");
- break;
- case 5:
- CHECK_EQ(ss, "23");
- CHECK_NE(ss, "23:");
- CHECK_NE(ss, ":23:");
- CHECK_NE(ss, ":23");
- break;
- case 6:
- CHECK_EQ(ss, "45");
- CHECK_NE(ss, "45:");
- CHECK_NE(ss, ":45:");
- CHECK_NE(ss, ":45");
- break;
- case 7:
- CHECK_EQ(ss, "67");
- CHECK_NE(ss, "67:");
- CHECK_NE(ss, ":67:");
- CHECK_NE(ss, ":67");
- break;
- case 8:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 9:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 10:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- case 11:
- CHECK_EQ(ss.size(), 0);
- CHECK_EQ(ss.empty(), true);
- CHECK_NE(ss, "::");
- break;
- }
- count++;
- }
- CHECK_EQ(count, 12);
- }
-}
-
-
-//-----------------------------------------------------------------------------
-TEST_CASE("substr.copy_from")
-{
- char buf[128] = {0};
- substr s = buf;
- CHECK_EQ(s.size(), sizeof(buf)-1);
- CHECK_NE(s.first(3), "123");
- s.copy_from("123");
- CHECK_EQ(s.first(3), "123");
- CHECK_EQ(s.first(6), "123\0\0\0");
- s.copy_from("+++", 3);
- CHECK_EQ(s.first(6), "123+++");
- CHECK_EQ(s.first(9), "123+++\0\0\0");
- s.copy_from("456", 6);
- CHECK_EQ(s.first(9), "123+++456");
- CHECK_EQ(s.first(12), "123+++456\0\0\0");
- s.copy_from("***", 3);
- CHECK_EQ(s.first(9), "123***456");
- CHECK_EQ(s.first(12), "123***456\0\0\0");
-
- // make sure that it's safe to pass source strings that don't fit
- // in the remaining destination space
- substr ss = s.first(9);
- ss.copy_from("987654321", 9); // should be a no-op
- CHECK_EQ(s.first(12), "123***456\0\0\0");
- ss.copy_from("987654321", 6);
- CHECK_EQ(s.first(12), "123***987\0\0\0");
- ss.copy_from("987654321", 3);
- CHECK_EQ(s.first(12), "123987654\0\0\0");
- ss.first(3).copy_from("987654321");
- CHECK_EQ(s.first(12), "987987654\0\0\0");
-}
-
-
-//-----------------------------------------------------------------------------
-void do_test_reverse(substr s, csubstr orig, csubstr expected)
-{
- CHECK_EQ(s, orig);
- s.reverse();
- CHECK_EQ(s, expected);
- s.reverse();
- CHECK_EQ(s, orig);
- //
- CHECK_EQ(s, orig);
- s.reverse_sub(0, s.len);
- CHECK_EQ(s, expected);
- s.reverse_sub(0, s.len);
- CHECK_EQ(s, orig);
- //
- CHECK_EQ(s, orig);
- s.reverse_range(0, s.len);
- CHECK_EQ(s, expected);
- s.reverse_range(0, s.len);
- CHECK_EQ(s, orig);
-}
-
-TEST_CASE("substr.reverse")
-{
- char buf[] = "0123456789";
- do_test_reverse(buf, "0123456789", "9876543210");
- do_test_reverse(buf, "0123456789", "9876543210");
-
- // in the middle
- substr s = buf;
- s.sub(2, 2).reverse();
- CHECK_EQ(s, "0132456789");
- s.sub(2, 2).reverse();
- CHECK_EQ(s, "0123456789");
-
- s.sub(4, 2).reverse();
- CHECK_EQ(s, "0123546789");
- s.sub(4, 2).reverse();
- CHECK_EQ(s, "0123456789");
-
- // at the beginning
- s.first(3).reverse();
- CHECK_EQ(s, "2103456789");
- s.first(3).reverse();
- CHECK_EQ(s, "0123456789");
-
- // at the end
- s.last(3).reverse();
- CHECK_EQ(s, "0123456987");
- s.last(3).reverse();
- CHECK_EQ(s, "0123456789");
-}
-
-
-TEST_CASE("substr.reverse_sub")
-{
- char buf[] = "0123456789";
- substr s = buf;
-
- s.reverse_sub(0, s.len);
- CHECK_EQ(s, "9876543210");
- s.reverse_sub(0, s.len);
- CHECK_EQ(s, "0123456789");
-
- s.reverse_sub(0, 0);
- CHECK_EQ(s, "0123456789");
- s.reverse_sub(s.len, 0);
- CHECK_EQ(s, "0123456789");
-
- s.reverse_sub(1, 3);
- CHECK_EQ(s, "0321456789");
- s.reverse_sub(1, 3);
- CHECK_EQ(s, "0123456789");
-}
-
-TEST_CASE("substr.reverse_range")
-{
- char buf[] = "0123456789";
- substr s = buf;
-
- s.reverse_range(0, s.len);
- CHECK_EQ(s, "9876543210");
- s.reverse_range(0, s.len);
- CHECK_EQ(s, "0123456789");
-
- s.reverse_range(0, 0);
- CHECK_EQ(s, "0123456789");
- s.reverse_range(s.len, s.len);
- CHECK_EQ(s, "0123456789");
-
- s.reverse_range(1, 3);
- CHECK_EQ(s, "0213456789");
- s.reverse_range(1, 3);
- CHECK_EQ(s, "0123456789");
-}
-
-
-//-----------------------------------------------------------------------------
-TEST_CASE("substr.erase")
-{
- char buf[] = "0123456789";
-
- substr s = buf;
- CHECK_EQ(s.len, s.size());
- CHECK_EQ(s.len, 10);
- CHECK_EQ(s, "0123456789");
-
- substr ss = s.first(6);
- CHECK_EQ(ss.len, 6);
- for(size_t i = 0; i <= ss.len; ++i)
- {
- ss.erase(i, 0); // must be a no-op
- CHECK_EQ(s, "0123456789");
- ss.erase_range(i, i); // must be a no-op
- CHECK_EQ(s, "0123456789");
- ss.erase(ss.len-i, i); // must be a no-op
- CHECK_EQ(s, "0123456789");
- }
-
- substr r;
- ss = ss.erase(0, 1);
- CHECK_EQ(ss.len, 5);
- CHECK_EQ(ss, "12345");
- CHECK_EQ(s, "1234556789");
- ss = ss.erase(0, 2);
- CHECK_EQ(ss.len, 3);
- CHECK_EQ(ss, "345");
- CHECK_EQ(s, "3454556789");
-
- csubstr s55 = s.sub(4, 2);
- ss = s.erase(s55);
- CHECK_EQ(s, "3454678989");
-}
-
-
-//-----------------------------------------------------------------------------
-TEST_CASE("substr.replace")
-{
- char buf[] = "0.1.2.3.4.5.6.7.8.9";
-
- substr s = buf;
-
- auto ret = s.replace('+', '.');
- CHECK_EQ(ret, 0);
-
- ret = s.replace('.', '.', s.len);
- CHECK_EQ(s, "0.1.2.3.4.5.6.7.8.9");
- CHECK_EQ(ret, 0);
- ret = s.replace('.', '.');
- CHECK_EQ(ret, 9);
- CHECK_EQ(s, "0.1.2.3.4.5.6.7.8.9");
-
- ret = s.replace('.', '+', s.len);
- CHECK_EQ(s, "0.1.2.3.4.5.6.7.8.9");
- CHECK_EQ(ret, 0);
- ret = s.replace('.', '+');
- CHECK_EQ(ret, 9);
- CHECK_EQ(s, "0+1+2+3+4+5+6+7+8+9");
-
- ret = s.replace("16", '.', s.len);
- CHECK_EQ(s, "0+1+2+3+4+5+6+7+8+9");
- CHECK_EQ(ret, 0);
- ret = s.replace("16", '.');
- CHECK_EQ(ret, 2);
- CHECK_EQ(s, "0+.+2+3+4+5+.+7+8+9");
- ret = s.replace("3+2", '_');
- CHECK_EQ(ret, 11);
- CHECK_EQ(s, "0_._____4_5_._7_8_9");
-
- // must accept empty string
- ret = s.sub(0, 0).replace('0', '1');
- CHECK_EQ(ret, 0);
- CHECK_EQ(s, "0_._____4_5_._7_8_9");
- ret = s.sub(0, 0).replace("0", '1');
- CHECK_EQ(ret, 0);
- CHECK_EQ(s, "0_._____4_5_._7_8_9");
-}
-
-TEST_CASE("substr.replace_all")
-{
- char buf[] = "0.1.2.3.4.5.6.7.8.9";
- std::string tmp, out("0+1+2+3+4+5+6+7+8+9");
-
- // must accept empty string
- substr(buf).sub(0, 0).replace_all(to_substr(tmp), "0", "X");
- CHECK_EQ(csubstr(buf), "0.1.2.3.4.5.6.7.8.9");
-
- substr r;
- auto replall = [&](csubstr pattern, csubstr repl) -> substr {
- tmp = out;
- csubstr rtmp = to_csubstr(tmp);
- out.resize(128);
- substr dst = to_substr(out);
- size_t sz = rtmp.replace_all(dst, pattern, repl);
- CHECK_LE(sz, out.size());
- out.resize(sz);
- return dst.first(sz);
- };
- r = replall("0+1", "0+++++1");
- // the result must be a view of out
- CHECK_FALSE(r.empty());
- CHECK_FALSE(out.empty());
- CHECK_EQ(r.size(), out.size());
- CHECK_EQ(r.front(), out.front());
- CHECK_EQ(r.back(), out.back());
- CHECK_EQ(r, "0+++++1+2+3+4+5+6+7+8+9");
-
- r = replall("+", "");
- CHECK_EQ(r, "0123456789");
-
- r = replall("+", "");
- CHECK_EQ(r, "0123456789"); // must not change
-
- r = replall("0123456789", "9876543210");
- CHECK_EQ(r, "9876543210");
-
- r = replall("987", ".");
- CHECK_EQ(r, ".6543210");
-
- r = replall("210", ".");
- CHECK_EQ(r, ".6543.");
-
- r = replall("6543", ":");
- CHECK_EQ(r, ".:.");
-
- r = replall(".:.", "");
- CHECK_EQ(r, "");
-}
-
-TEST_CASE("substr.short_integer")
-{
- char buf[] = "-";
- CHECK_FALSE(substr(buf).is_integer());
- CHECK_FALSE(csubstr("-").is_integer());
- CHECK_FALSE(csubstr("+").is_integer());
-}
-
-} // namespace c4
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_szconv.cpp b/thirdparty/ryml/ext/c4core/test/test_szconv.cpp
deleted file mode 100644
index d54bf48a0..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_szconv.cpp
+++ /dev/null
@@ -1,166 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/szconv.hpp"
-#endif
-
-#include "c4/libtest/supprwarn_push.hpp"
-#include "c4/test.hpp"
-
-#define C4_EXPECT_NARROWER(yes_or_no, ty_out, ty_in) \
- CHECK_UNARY(( yes_or_no (is_narrower_size<ty_out C4_COMMA ty_in>::value)));
-
-namespace c4 {
-
-TEST_CASE("is_narrower_size.signed_types")
-{
- C4_EXPECT_NARROWER( ! , int8_t , int8_t );
- C4_EXPECT_NARROWER( , int8_t , int16_t);
- C4_EXPECT_NARROWER( , int8_t , int32_t);
- C4_EXPECT_NARROWER( , int8_t , int64_t);
- C4_EXPECT_NARROWER( , int8_t , uint8_t );
- C4_EXPECT_NARROWER( , int8_t , uint16_t);
- C4_EXPECT_NARROWER( , int8_t , uint32_t);
- C4_EXPECT_NARROWER( , int8_t , uint64_t);
- C4_EXPECT_NARROWER( ! , int16_t , int8_t );
- C4_EXPECT_NARROWER( ! , int16_t , int16_t);
- C4_EXPECT_NARROWER( , int16_t , int32_t);
- C4_EXPECT_NARROWER( , int16_t , int64_t);
- C4_EXPECT_NARROWER( ! , int16_t , uint8_t );
- C4_EXPECT_NARROWER( , int16_t , uint16_t);
- C4_EXPECT_NARROWER( , int16_t , uint32_t);
- C4_EXPECT_NARROWER( , int16_t , uint64_t);
- C4_EXPECT_NARROWER( ! , int32_t , int8_t );
- C4_EXPECT_NARROWER( ! , int32_t , int16_t);
- C4_EXPECT_NARROWER( ! , int32_t , int32_t);
- C4_EXPECT_NARROWER( , int32_t , int64_t);
- C4_EXPECT_NARROWER( ! , int32_t , uint8_t );
- C4_EXPECT_NARROWER( ! , int32_t , uint16_t);
- C4_EXPECT_NARROWER( , int32_t , uint32_t);
- C4_EXPECT_NARROWER( , int32_t , uint64_t);
- C4_EXPECT_NARROWER( ! , int64_t , int8_t );
- C4_EXPECT_NARROWER( ! , int64_t , int16_t);
- C4_EXPECT_NARROWER( ! , int64_t , int32_t);
- C4_EXPECT_NARROWER( ! , int64_t , int64_t);
- C4_EXPECT_NARROWER( ! , int64_t , uint8_t );
- C4_EXPECT_NARROWER( ! , int64_t , uint16_t);
- C4_EXPECT_NARROWER( ! , int64_t , uint32_t);
- C4_EXPECT_NARROWER( , int64_t , uint64_t);
-}
-
-TEST_CASE("is_narrower_size.unsigned_types")
-{
- C4_EXPECT_NARROWER( ! , uint8_t , int8_t );
- C4_EXPECT_NARROWER( , uint8_t , int16_t);
- C4_EXPECT_NARROWER( , uint8_t , int32_t);
- C4_EXPECT_NARROWER( , uint8_t , int64_t);
- C4_EXPECT_NARROWER( ! , uint8_t , uint8_t );
- C4_EXPECT_NARROWER( , uint8_t , uint16_t);
- C4_EXPECT_NARROWER( , uint8_t , uint32_t);
- C4_EXPECT_NARROWER( , uint8_t , uint64_t);
- C4_EXPECT_NARROWER( ! , uint16_t , int8_t );
- C4_EXPECT_NARROWER( ! , uint16_t , int16_t);
- C4_EXPECT_NARROWER( , uint16_t , int32_t);
- C4_EXPECT_NARROWER( , uint16_t , int64_t);
- C4_EXPECT_NARROWER( ! , uint16_t , uint8_t );
- C4_EXPECT_NARROWER( ! , uint16_t , uint16_t);
- C4_EXPECT_NARROWER( , uint16_t , uint32_t);
- C4_EXPECT_NARROWER( , uint16_t , uint64_t);
- C4_EXPECT_NARROWER( ! , uint32_t , int8_t );
- C4_EXPECT_NARROWER( ! , uint32_t , int16_t);
- C4_EXPECT_NARROWER( ! , uint32_t , int32_t);
- C4_EXPECT_NARROWER( , uint32_t , int64_t);
- C4_EXPECT_NARROWER( ! , uint32_t , uint8_t );
- C4_EXPECT_NARROWER( ! , uint32_t , uint16_t);
- C4_EXPECT_NARROWER( ! , uint32_t , uint32_t);
- C4_EXPECT_NARROWER( , uint32_t , uint64_t);
- C4_EXPECT_NARROWER( ! , uint64_t , int8_t );
- C4_EXPECT_NARROWER( ! , uint64_t , int16_t);
- C4_EXPECT_NARROWER( ! , uint64_t , int32_t);
- C4_EXPECT_NARROWER( ! , uint64_t , int64_t);
- C4_EXPECT_NARROWER( ! , uint64_t , uint8_t );
- C4_EXPECT_NARROWER( ! , uint64_t , uint16_t);
- C4_EXPECT_NARROWER( ! , uint64_t , uint32_t);
- C4_EXPECT_NARROWER( ! , uint64_t , uint64_t);
-}
-
-template<typename I, typename O>
-typename std::enable_if<std::is_same<I, O>::value, void>::type
-test_szconv()
-{
- // nothing to do here
-}
-
-template<typename I, typename O>
-typename std::enable_if< ! std::is_same<I, O>::value, void>::type
-test_szconv()
-{
- C4_STATIC_ASSERT(std::is_integral<I>::value);
- C4_STATIC_ASSERT(std::is_integral<O>::value);
-
- const I imax = std::numeric_limits<I>::max();
- const I imin = std::numeric_limits<I>::min();
- const O omax = std::numeric_limits<O>::max();
- const O omin = std::numeric_limits<O>::min();
-
- CHECK_EQ(szconv<O>(I(0)), O(0));
- CHECK_EQ(szconv<I>(I(0)), I(0));
-
-#if C4_USE_XASSERT
- if((uint64_t)omax < (uint64_t)imax)
- {
- C4_EXPECT_ERROR_OCCURS();
- O out = szconv<O>(imax);
- }
- else if((uint64_t)omax > (uint64_t)imax)
- {
- C4_EXPECT_ERROR_OCCURS();
- I out = szconv<I>(omax);
- }
-#endif
-}
-
-#define DO_TEST_SZCONV(ty) \
- TEST_CASE("szconv." #ty "_to_int8") \
- { \
- test_szconv<ty##_t, int8_t>(); \
- } \
- TEST_CASE("zconv." #ty "_to_uint8") \
- { \
- test_szconv<ty##_t, uint8_t>(); \
- } \
- TEST_CASE("zconv." #ty "_to_int16") \
- { \
- test_szconv<ty##_t, int16_t>(); \
- } \
- TEST_CASE("zconv." #ty "_to_uint16") \
- { \
- test_szconv<ty##_t, uint16_t>(); \
- } \
- TEST_CASE("zconv." #ty "_to_int32") \
- { \
- test_szconv<ty##_t, int32_t>(); \
- } \
- TEST_CASE("zconv." #ty "_to_uint32") \
- { \
- test_szconv<ty##_t, uint32_t>(); \
- } \
- TEST_CASE("zconv." #ty "_to_int64") \
- { \
- test_szconv<ty##_t, int64_t>(); \
- } \
- TEST_CASE("szconv." #ty "_to_uint64") \
- { \
- test_szconv<ty##_t, uint64_t>(); \
- }
-
-DO_TEST_SZCONV(int8)
-DO_TEST_SZCONV(uint8)
-DO_TEST_SZCONV(int16)
-DO_TEST_SZCONV(uint16)
-DO_TEST_SZCONV(int32)
-DO_TEST_SZCONV(uint32)
-DO_TEST_SZCONV(int64)
-DO_TEST_SZCONV(uint64)
-
-} // namespace c4
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_type_name.cpp b/thirdparty/ryml/ext/c4core/test/test_type_name.cpp
deleted file mode 100644
index 422676bcf..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_type_name.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-#include "c4/test.hpp"
-
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/type_name.hpp"
-#endif
-
-class SomeTypeName {};
-struct SomeStructName {};
-
-namespace c4 {
-
-class SomeTypeNameInsideANamespace {};
-struct SomeStructNameInsideANamespace {};
-
-template<size_t N>
-cspan<char> cstr(const char (&s)[N])
-{
- cspan<char> o(s, N-1);
- return o;
-}
-
-TEST_CASE("type_name.intrinsic_types")
-{
- CHECK_EQ(type_name<int>(), cstr("int"));
- CHECK_EQ(type_name<float>(), cstr("float"));
- CHECK_EQ(type_name<double>(), cstr("double"));
-}
-TEST_CASE("type_name.classes")
-{
- CHECK_EQ(type_name<SomeTypeName>(), cstr("SomeTypeName"));
- CHECK_EQ(type_name<::SomeTypeName>(), cstr("SomeTypeName"));
-}
-TEST_CASE("type_name.structs")
-{
- CHECK_EQ(type_name<SomeStructName>(), cstr("SomeStructName"));
- CHECK_EQ(type_name<::SomeStructName>(), cstr("SomeStructName"));
-}
-TEST_CASE("type_name.inside_namespace")
-{
- CHECK_EQ(type_name<SomeTypeNameInsideANamespace>(), cstr("c4::SomeTypeNameInsideANamespace"));
- CHECK_EQ(type_name<c4::SomeTypeNameInsideANamespace>(), cstr("c4::SomeTypeNameInsideANamespace"));
- CHECK_EQ(type_name<::c4::SomeTypeNameInsideANamespace>(), cstr("c4::SomeTypeNameInsideANamespace"));
-
- CHECK_EQ(type_name<SomeStructNameInsideANamespace>(), cstr("c4::SomeStructNameInsideANamespace"));
- CHECK_EQ(type_name<c4::SomeStructNameInsideANamespace>(), cstr("c4::SomeStructNameInsideANamespace"));
- CHECK_EQ(type_name<::c4::SomeStructNameInsideANamespace>(), cstr("c4::SomeStructNameInsideANamespace"));
-}
-
-} // namespace c4
diff --git a/thirdparty/ryml/ext/c4core/test/test_types.cpp b/thirdparty/ryml/ext/c4core/test/test_types.cpp
deleted file mode 100644
index 697ce289d..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_types.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/config.hpp"
-#endif
-#include <string>
-
-#include "c4/libtest/supprwarn_push.hpp"
-#include "c4/test.hpp"
-
-namespace c4 {
-
-C4_STATIC_ASSERT((std::is_same< fastcref< char >, char >::value));
-C4_STATIC_ASSERT((std::is_same< fastcref< i8 >, i8 >::value));
-C4_STATIC_ASSERT((std::is_same< fastcref< u8 >, u8 >::value));
-C4_STATIC_ASSERT((std::is_same< fastcref< i16 >, i16 >::value));
-C4_STATIC_ASSERT((std::is_same< fastcref< u16 >, u16 >::value));
-C4_STATIC_ASSERT((std::is_same< fastcref< i32 >, i32 >::value));
-C4_STATIC_ASSERT((std::is_same< fastcref< u32 >, u32 >::value));
-C4_STATIC_ASSERT((std::is_same< fastcref< i64 >, i64 >::value));
-C4_STATIC_ASSERT((std::is_same< fastcref< u64 >, u64 >::value));
-
-using carr64 = char[64];
-C4_STATIC_ASSERT((std::is_same< fastcref< carr64 >, carr64 const& >::value));
-C4_STATIC_ASSERT((std::is_same< fastcref< std::string >, std::string const& >::value));
-
-//-----------------------------------------------------------------------------
-
-C4_BEGIN_HIDDEN_NAMESPACE
-template< class T > struct ufonix { T a; };
-using F = ufonix< uint32_t >;
-C4_END_HIDDEN_NAMESPACE
-
-TEST_CASE("TestSizeStructs.min_remainder")
-{
- CHECK_EQ(min_remainder(4, 6), 2);
- CHECK_EQ(min_remainder(6, 6), 0);
- CHECK_EQ(min_remainder(8, 6), 0);
-}
-
-TEST_CASE("TestSizeStructs.mult_remainder")
-{
- CHECK_EQ(mult_remainder(6, 1), 0);
- CHECK_EQ(mult_remainder(6, 2), 0);
- CHECK_EQ(mult_remainder(6, 3), 0);
- CHECK_EQ(mult_remainder(6, 4), 2);
- CHECK_EQ(mult_remainder(6, 5), 4);
- CHECK_EQ(mult_remainder(6, 6), 0);
- CHECK_EQ(mult_remainder(6, 7), 1);
-}
-TEST_CASE("TestSizeStructs.Padded")
-{
- CHECK_EQ(sizeof(F), sizeof(uint32_t));
- CHECK_EQ((sizeof(Padded< F, 0 >)), sizeof(F));
- CHECK_EQ((sizeof(Padded< F, 1 >)), sizeof(F)+1);
- CHECK_EQ((sizeof(Padded< F, 2 >)), sizeof(F)+2);
- CHECK_EQ((sizeof(Padded< F, 3 >)), sizeof(F)+3);
-}
-TEST_CASE("TestSizeStructs.MinSized")
-{
- CHECK_EQ((sizeof(MinSized< F, 14 >)), 14);
- CHECK_EQ((sizeof(MinSized< F, 15 >)), 15);
- CHECK_EQ((sizeof(MinSized< F, 16 >)), 16);
- CHECK_EQ((sizeof(MinSized< F, 17 >)), 17);
-}
-TEST_CASE("TestSizeStructs.MultSized")
-{
- using G = ufonix< char[8] >;
- CHECK_EQ((sizeof(MultSized< G, 7 >)), 14);
- CHECK_EQ((sizeof(MultSized< G, 6 >)), 12);
- CHECK_EQ((sizeof(MultSized< G, 5 >)), 10);
- CHECK_EQ((sizeof(MultSized< G, 4 >)), 8);
-}
-TEST_CASE("TestSizeStructs.UbufSized")
-{
- CHECK_EQ((sizeof(UbufSized<ufonix<char[63]>>)), 64);
- CHECK_EQ((sizeof(UbufSized<ufonix<char[64]>>)), 64);
- CHECK_EQ((sizeof(UbufSized<ufonix<char[65]>>)), 80);
-}
-
-} // namespace c4
-
-#include "c4/libtest/supprwarn_pop.hpp"
diff --git a/thirdparty/ryml/ext/c4core/test/test_utf.cpp b/thirdparty/ryml/ext/c4core/test/test_utf.cpp
deleted file mode 100644
index ffa4fb338..000000000
--- a/thirdparty/ryml/ext/c4core/test/test_utf.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "c4/test.hpp"
-#ifndef C4CORE_SINGLE_HEADER
-#include "c4/std/string.hpp"
-#include "c4/std/vector.hpp"
-#include "c4/format.hpp"
-#include "c4/utf.hpp"
-#endif
-
-#include "c4/libtest/supprwarn_push.hpp"
-
-#include <cstring>
-
-namespace c4 {
-
-struct utft
-{
- csubstr code_point;
- csubstr character;
- uint32_t character_val;
- csubstr character_val_hex;
-};
-constexpr const utft utf_chars[] = {
-#include "./utfchars.inc"
-};
-
-TEST_CASE("utf.decode_code_point")
-{
- size_t i = 0;
- char decoded_buf[64];
- for(auto uc : utf_chars)
- {
- INFO("utfchars[", i, "]: codepoint=", uc.code_point, ' ',
- "character=", uc.character.empty() ? csubstr{} : uc.character, ' ',
- "val=", uc.character_val_hex, '(', uc.character_val, ')');
- i++;
- csubstr cpstr = uc.code_point.sub(2).triml('0');
- if(cpstr.empty())
- continue;
- csubstr decoded = decode_code_point(decoded_buf, cpstr);
- CHECK_UNARY(uc.code_point.begins_with("U+"));
- if(uc.character.empty())
- continue;
- CHECK_EQ(decoded.len, uc.character.len);
- CHECK_EQ(decoded, uc.character);
- }
-}
-
-} // namespace c4
diff --git a/thirdparty/ryml/ext/c4core/test/utfchars.inc b/thirdparty/ryml/ext/c4core/test/utfchars.inc
deleted file mode 100644
index b0b23d4c0..000000000
--- a/thirdparty/ryml/ext/c4core/test/utfchars.inc
+++ /dev/null
@@ -1,6274 +0,0 @@
-// https://www.utf8-chartable.de/unicode-utf8-table.pl
-#define _c(cp, wysiwyg, hex) utft{csubstr{#cp}, csubstr{wysiwyg}, UINT32_C(0x##hex), csubstr{"0x" #hex}}
-_c(U+0000, "\0", 00),
-_c(U+0001, "", 01),
-_c(U+0002, "", 02),
-_c(U+0003, "", 03),
-_c(U+0004, "", 04),
-_c(U+0005, "", 05),
-_c(U+0006, "", 06),
-_c(U+0007, "", 07),
-_c(U+0008, "\b", 08),
-_c(U+0009, "\t", 09),
-_c(U+000A, "\n", 0a),
-_c(U+000B, "", 0b),
-_c(U+000C, "", 0c),
-_c(U+000D, "\r", 0d),
-_c(U+000E, "", 0e),
-_c(U+000F, "", 0f),
-_c(U+0010, "", 10),
-_c(U+0011, "", 11),
-_c(U+0012, "", 12),
-_c(U+0013, "", 13),
-_c(U+0014, "", 14),
-_c(U+0015, "", 15),
-_c(U+0016, "", 16),
-_c(U+0017, "", 17),
-_c(U+0018, "", 18),
-_c(U+0019, "", 19),
-_c(U+001A, "", 1a),
-_c(U+001B, "", 1b),
-_c(U+001C, "", 1c),
-_c(U+001D, "", 1d),
-_c(U+001E, "", 1e),
-_c(U+001F, "", 1f),
-_c(U+0020, " ", 20),
-_c(U+0021, "!", 21),
-_c(U+0022, "\"", 22),
-_c(U+0023, "#", 23),
-_c(U+0024, "$", 24),
-_c(U+0025, "%", 25),
-_c(U+0026, "&", 26),
-_c(U+0027, "'", 27),
-_c(U+0028, "(", 28),
-_c(U+0029, ")", 29),
-_c(U+002A, "*", 2a),
-_c(U+002B, "+", 2b),
-_c(U+002C, ",", 2c),
-_c(U+002D, "-", 2d),
-_c(U+002E, ".", 2e),
-_c(U+002F, "/", 2f),
-_c(U+0030, "0", 30),
-_c(U+0031, "1", 31),
-_c(U+0032, "2", 32),
-_c(U+0033, "3", 33),
-_c(U+0034, "4", 34),
-_c(U+0035, "5", 35),
-_c(U+0036, "6", 36),
-_c(U+0037, "7", 37),
-_c(U+0038, "8", 38),
-_c(U+0039, "9", 39),
-_c(U+003A, ":", 3a),
-_c(U+003B, ";", 3b),
-_c(U+003C, "<", 3c),
-_c(U+003D, "=", 3d),
-_c(U+003E, ">", 3e),
-_c(U+003F, "?", 3f),
-_c(U+0040, "@", 40),
-_c(U+0041, "A", 41),
-_c(U+0042, "B", 42),
-_c(U+0043, "C", 43),
-_c(U+0044, "D", 44),
-_c(U+0045, "E", 45),
-_c(U+0046, "F", 46),
-_c(U+0047, "G", 47),
-_c(U+0048, "H", 48),
-_c(U+0049, "I", 49),
-_c(U+004A, "J", 4a),
-_c(U+004B, "K", 4b),
-_c(U+004C, "L", 4c),
-_c(U+004D, "M", 4d),
-_c(U+004E, "N", 4e),
-_c(U+004F, "O", 4f),
-_c(U+0050, "P", 50),
-_c(U+0051, "Q", 51),
-_c(U+0052, "R", 52),
-_c(U+0053, "S", 53),
-_c(U+0054, "T", 54),
-_c(U+0055, "U", 55),
-_c(U+0056, "V", 56),
-_c(U+0057, "W", 57),
-_c(U+0058, "X", 58),
-_c(U+0059, "Y", 59),
-_c(U+005A, "Z", 5a),
-_c(U+005B, "[", 5b),
-_c(U+005C, "\\", 5c),
-_c(U+005D, "]", 5d),
-_c(U+005E, "^", 5e),
-_c(U+005F, "_", 5f),
-_c(U+0060, "`", 60),
-_c(U+0061, "a", 61),
-_c(U+0062, "b", 62),
-_c(U+0063, "c", 63),
-_c(U+0064, "d", 64),
-_c(U+0065, "e", 65),
-_c(U+0066, "f", 66),
-_c(U+0067, "g", 67),
-_c(U+0068, "h", 68),
-_c(U+0069, "i", 69),
-_c(U+006A, "j", 6a),
-_c(U+006B, "k", 6b),
-_c(U+006C, "l", 6c),
-_c(U+006D, "m", 6d),
-_c(U+006E, "n", 6e),
-_c(U+006F, "o", 6f),
-_c(U+0070, "p", 70),
-_c(U+0071, "q", 71),
-_c(U+0072, "r", 72),
-_c(U+0073, "s", 73),
-_c(U+0074, "t", 74),
-_c(U+0075, "u", 75),
-_c(U+0076, "v", 76),
-_c(U+0077, "w", 77),
-_c(U+0078, "x", 78),
-_c(U+0079, "y", 79),
-_c(U+007A, "z", 7a),
-_c(U+007B, "", 7b),
-_c(U+007C, "|", 7c),
-_c(U+007D, "}", 7d),
-_c(U+007E, "~", 7e),
-_c(U+007F, "", 7f), // del
-_c(U+0080, "", c280),
-_c(U+0081, "", c281),
-_c(U+0082, "", c282),
-_c(U+0083, "", c283),
-_c(U+0084, "", c284),
-_c(U+0085, "", c285),
-_c(U+0086, "", c286),
-_c(U+0087, "", c287),
-_c(U+0088, "", c288),
-_c(U+0089, "", c289),
-_c(U+008A, "", c28a),
-_c(U+008B, "", c28b),
-_c(U+008C, "", c28c),
-_c(U+008D, "", c28d),
-_c(U+008E, "", c28e),
-_c(U+008F, "", c28f),
-_c(U+0090, "", c290),
-_c(U+0091, "", c291),
-_c(U+0092, "", c292),
-_c(U+0093, "", c293),
-_c(U+0094, "", c294),
-_c(U+0095, "", c295),
-_c(U+0096, "", c296),
-_c(U+0097, "", c297),
-_c(U+0098, "", c298),
-_c(U+0099, "", c299),
-_c(U+009A, "", c29a),
-_c(U+009B, "", c29b),
-_c(U+009C, "", c29c),
-_c(U+009D, "", c29d),
-_c(U+009E, "", c29e),
-_c(U+009F, "", c29f),
-_c(U+00A0, "", c2a0),
-_c(U+00A1, "ยก", c2a1),
-_c(U+00A2, "ยข", c2a2),
-_c(U+00A3, "ยฃ", c2a3),
-_c(U+00A4, "ยค", c2a4),
-_c(U+00A5, "ยฅ", c2a5),
-_c(U+00A6, "ยฆ", c2a6),
-_c(U+00A7, "ยง", c2a7),
-_c(U+00A8, "ยจ", c2a8),
-_c(U+00A9, "ยฉ", c2a9),
-_c(U+00AA, "ยช", c2aa),
-_c(U+00AB, "ยซ", c2ab),
-_c(U+00AC, "ยฌ", c2ac),
-_c(U+00AD, "ยญ", c2ad),
-_c(U+00AE, "ยฎ", c2ae),
-_c(U+00AF, "ยฏ", c2af),
-_c(U+00B0, "ยฐ", c2b0),
-_c(U+00B1, "ยฑ", c2b1),
-_c(U+00B2, "ยฒ", c2b2),
-_c(U+00B3, "ยณ", c2b3),
-_c(U+00B4, "ยด", c2b4),
-_c(U+00B5, "ยต", c2b5),
-_c(U+00B6, "ยถ", c2b6),
-_c(U+00B7, "ยท", c2b7),
-_c(U+00B8, "ยธ", c2b8),
-_c(U+00B9, "ยน", c2b9),
-_c(U+00BA, "ยบ", c2ba),
-_c(U+00BB, "ยป", c2bb),
-_c(U+00BC, "ยผ", c2bc),
-_c(U+00BD, "ยฝ", c2bd),
-_c(U+00BE, "ยพ", c2be),
-_c(U+00BF, "ยฟ", c2bf),
-_c(U+00C0, "ร€", c380),
-_c(U+00C1, "ร", c381),
-_c(U+00C2, "ร‚", c382),
-_c(U+00C3, "รƒ", c383),
-_c(U+00C4, "ร„", c384),
-_c(U+00C5, "ร…", c385),
-_c(U+00C6, "ร†", c386),
-_c(U+00C7, "ร‡", c387),
-_c(U+00C8, "รˆ", c388),
-_c(U+00C9, "ร‰", c389),
-_c(U+00CA, "รŠ", c38a),
-_c(U+00CB, "ร‹", c38b),
-_c(U+00CC, "รŒ", c38c),
-_c(U+00CD, "ร", c38d),
-_c(U+00CE, "รŽ", c38e),
-_c(U+00CF, "ร", c38f),
-_c(U+00D0, "ร", c390),
-_c(U+00D1, "ร‘", c391),
-_c(U+00D2, "ร’", c392),
-_c(U+00D3, "ร“", c393),
-_c(U+00D4, "ร”", c394),
-_c(U+00D5, "ร•", c395),
-_c(U+00D6, "ร–", c396),
-_c(U+00D7, "ร—", c397),
-_c(U+00D8, "ร˜", c398),
-_c(U+00D9, "ร™", c399),
-_c(U+00DA, "รš", c39a),
-_c(U+00DB, "ร›", c39b),
-_c(U+00DC, "รœ", c39c),
-_c(U+00DD, "ร", c39d),
-_c(U+00DE, "รž", c39e),
-_c(U+00DF, "รŸ", c39f),
-_c(U+00E0, "ร ", c3a0),
-_c(U+00E1, "รก", c3a1),
-_c(U+00E2, "รข", c3a2),
-_c(U+00E3, "รฃ", c3a3),
-_c(U+00E4, "รค", c3a4),
-_c(U+00E5, "รฅ", c3a5),
-_c(U+00E6, "รฆ", c3a6),
-_c(U+00E7, "รง", c3a7),
-_c(U+00E8, "รจ", c3a8),
-_c(U+00E9, "รฉ", c3a9),
-_c(U+00EA, "รช", c3aa),
-_c(U+00EB, "รซ", c3ab),
-_c(U+00EC, "รฌ", c3ac),
-_c(U+00ED, "รญ", c3ad),
-_c(U+00EE, "รฎ", c3ae),
-_c(U+00EF, "รฏ", c3af),
-_c(U+00F0, "รฐ", c3b0),
-_c(U+00F1, "รฑ", c3b1),
-_c(U+00F2, "รฒ", c3b2),
-_c(U+00F3, "รณ", c3b3),
-_c(U+00F4, "รด", c3b4),
-_c(U+00F5, "รต", c3b5),
-_c(U+00F6, "รถ", c3b6),
-_c(U+00F7, "รท", c3b7),
-_c(U+00F8, "รธ", c3b8),
-_c(U+00F9, "รน", c3b9),
-_c(U+00FA, "รบ", c3ba),
-_c(U+00FB, "รป", c3bb),
-_c(U+00FC, "รผ", c3bc),
-_c(U+00FD, "รฝ", c3bd),
-_c(U+00FE, "รพ", c3be),
-_c(U+00FF, "รฟ", c3bf),
-_c(U+0100, "ฤ€", c480),
-_c(U+0101, "ฤ", c481),
-_c(U+0102, "ฤ‚", c482),
-_c(U+0103, "ฤƒ", c483),
-_c(U+0104, "ฤ„", c484),
-_c(U+0105, "ฤ…", c485),
-_c(U+0106, "ฤ†", c486),
-_c(U+0107, "ฤ‡", c487),
-_c(U+0108, "ฤˆ", c488),
-_c(U+0109, "ฤ‰", c489),
-_c(U+010A, "ฤŠ", c48a),
-_c(U+010B, "ฤ‹", c48b),
-_c(U+010C, "ฤŒ", c48c),
-_c(U+010D, "ฤ", c48d),
-_c(U+010E, "ฤŽ", c48e),
-_c(U+010F, "ฤ", c48f),
-_c(U+0110, "ฤ", c490),
-_c(U+0111, "ฤ‘", c491),
-_c(U+0112, "ฤ’", c492),
-_c(U+0113, "ฤ“", c493),
-_c(U+0114, "ฤ”", c494),
-_c(U+0115, "ฤ•", c495),
-_c(U+0116, "ฤ–", c496),
-_c(U+0117, "ฤ—", c497),
-_c(U+0118, "ฤ˜", c498),
-_c(U+0119, "ฤ™", c499),
-_c(U+011A, "ฤš", c49a),
-_c(U+011B, "ฤ›", c49b),
-_c(U+011C, "ฤœ", c49c),
-_c(U+011D, "ฤ", c49d),
-_c(U+011E, "ฤž", c49e),
-_c(U+011F, "ฤŸ", c49f),
-_c(U+0120, "ฤ ", c4a0),
-_c(U+0121, "ฤก", c4a1),
-_c(U+0122, "ฤข", c4a2),
-_c(U+0123, "ฤฃ", c4a3),
-_c(U+0124, "ฤค", c4a4),
-_c(U+0125, "ฤฅ", c4a5),
-_c(U+0126, "ฤฆ", c4a6),
-_c(U+0127, "ฤง", c4a7),
-_c(U+0128, "ฤจ", c4a8),
-_c(U+0129, "ฤฉ", c4a9),
-_c(U+012A, "ฤช", c4aa),
-_c(U+012B, "ฤซ", c4ab),
-_c(U+012C, "ฤฌ", c4ac),
-_c(U+012D, "ฤญ", c4ad),
-_c(U+012E, "ฤฎ", c4ae),
-_c(U+012F, "ฤฏ", c4af),
-_c(U+0130, "ฤฐ", c4b0),
-_c(U+0131, "ฤฑ", c4b1),
-_c(U+0132, "ฤฒ", c4b2),
-_c(U+0133, "ฤณ", c4b3),
-_c(U+0134, "ฤด", c4b4),
-_c(U+0135, "ฤต", c4b5),
-_c(U+0136, "ฤถ", c4b6),
-_c(U+0137, "ฤท", c4b7),
-_c(U+0138, "ฤธ", c4b8),
-_c(U+0139, "ฤน", c4b9),
-_c(U+013A, "ฤบ", c4ba),
-_c(U+013B, "ฤป", c4bb),
-_c(U+013C, "ฤผ", c4bc),
-_c(U+013D, "ฤฝ", c4bd),
-_c(U+013E, "ฤพ", c4be),
-_c(U+013F, "ฤฟ", c4bf),
-_c(U+0140, "ล€", c580),
-_c(U+0141, "ล", c581),
-_c(U+0142, "ล‚", c582),
-_c(U+0143, "ลƒ", c583),
-_c(U+0144, "ล„", c584),
-_c(U+0145, "ล…", c585),
-_c(U+0146, "ล†", c586),
-_c(U+0147, "ล‡", c587),
-_c(U+0148, "ลˆ", c588),
-_c(U+0149, "ล‰", c589),
-_c(U+014A, "ลŠ", c58a),
-_c(U+014B, "ล‹", c58b),
-_c(U+014C, "ลŒ", c58c),
-_c(U+014D, "ล", c58d),
-_c(U+014E, "ลŽ", c58e),
-_c(U+014F, "ล", c58f),
-_c(U+0150, "ล", c590),
-_c(U+0151, "ล‘", c591),
-_c(U+0152, "ล’", c592),
-_c(U+0153, "ล“", c593),
-_c(U+0154, "ล”", c594),
-_c(U+0155, "ล•", c595),
-_c(U+0156, "ล–", c596),
-_c(U+0157, "ล—", c597),
-_c(U+0158, "ล˜", c598),
-_c(U+0159, "ล™", c599),
-_c(U+015A, "ลš", c59a),
-_c(U+015B, "ล›", c59b),
-_c(U+015C, "ลœ", c59c),
-_c(U+015D, "ล", c59d),
-_c(U+015E, "ลž", c59e),
-_c(U+015F, "ลŸ", c59f),
-_c(U+0160, "ล ", c5a0),
-_c(U+0161, "ลก", c5a1),
-_c(U+0162, "ลข", c5a2),
-_c(U+0163, "ลฃ", c5a3),
-_c(U+0164, "ลค", c5a4),
-_c(U+0165, "ลฅ", c5a5),
-_c(U+0166, "ลฆ", c5a6),
-_c(U+0167, "ลง", c5a7),
-_c(U+0168, "ลจ", c5a8),
-_c(U+0169, "ลฉ", c5a9),
-_c(U+016A, "ลช", c5aa),
-_c(U+016B, "ลซ", c5ab),
-_c(U+016C, "ลฌ", c5ac),
-_c(U+016D, "ลญ", c5ad),
-_c(U+016E, "ลฎ", c5ae),
-_c(U+016F, "ลฏ", c5af),
-_c(U+0170, "ลฐ", c5b0),
-_c(U+0171, "ลฑ", c5b1),
-_c(U+0172, "ลฒ", c5b2),
-_c(U+0173, "ลณ", c5b3),
-_c(U+0174, "ลด", c5b4),
-_c(U+0175, "ลต", c5b5),
-_c(U+0176, "ลถ", c5b6),
-_c(U+0177, "ลท", c5b7),
-_c(U+0178, "ลธ", c5b8),
-_c(U+0179, "ลน", c5b9),
-_c(U+017A, "ลบ", c5ba),
-_c(U+017B, "ลป", c5bb),
-_c(U+017C, "ลผ", c5bc),
-_c(U+017D, "ลฝ", c5bd),
-_c(U+017E, "ลพ", c5be),
-_c(U+017F, "ลฟ", c5bf),
-_c(U+0180, "ฦ€", c680),
-_c(U+0181, "ฦ", c681),
-_c(U+0182, "ฦ‚", c682),
-_c(U+0183, "ฦƒ", c683),
-_c(U+0184, "ฦ„", c684),
-_c(U+0185, "ฦ…", c685),
-_c(U+0186, "ฦ†", c686),
-_c(U+0187, "ฦ‡", c687),
-_c(U+0188, "ฦˆ", c688),
-_c(U+0189, "ฦ‰", c689),
-_c(U+018A, "ฦŠ", c68a),
-_c(U+018B, "ฦ‹", c68b),
-_c(U+018C, "ฦŒ", c68c),
-_c(U+018D, "ฦ", c68d),
-_c(U+018E, "ฦŽ", c68e),
-_c(U+018F, "ฦ", c68f),
-_c(U+0190, "ฦ", c690),
-_c(U+0191, "ฦ‘", c691),
-_c(U+0192, "ฦ’", c692),
-_c(U+0193, "ฦ“", c693),
-_c(U+0194, "ฦ”", c694),
-_c(U+0195, "ฦ•", c695),
-_c(U+0196, "ฦ–", c696),
-_c(U+0197, "ฦ—", c697),
-_c(U+0198, "ฦ˜", c698),
-_c(U+0199, "ฦ™", c699),
-_c(U+019A, "ฦš", c69a),
-_c(U+019B, "ฦ›", c69b),
-_c(U+019C, "ฦœ", c69c),
-_c(U+019D, "ฦ", c69d),
-_c(U+019E, "ฦž", c69e),
-_c(U+019F, "ฦŸ", c69f),
-_c(U+01A0, "ฦ ", c6a0),
-_c(U+01A1, "ฦก", c6a1),
-_c(U+01A2, "ฦข", c6a2),
-_c(U+01A3, "ฦฃ", c6a3),
-_c(U+01A4, "ฦค", c6a4),
-_c(U+01A5, "ฦฅ", c6a5),
-_c(U+01A6, "ฦฆ", c6a6),
-_c(U+01A7, "ฦง", c6a7),
-_c(U+01A8, "ฦจ", c6a8),
-_c(U+01A9, "ฦฉ", c6a9),
-_c(U+01AA, "ฦช", c6aa),
-_c(U+01AB, "ฦซ", c6ab),
-_c(U+01AC, "ฦฌ", c6ac),
-_c(U+01AD, "ฦญ", c6ad),
-_c(U+01AE, "ฦฎ", c6ae),
-_c(U+01AF, "ฦฏ", c6af),
-_c(U+01B0, "ฦฐ", c6b0),
-_c(U+01B1, "ฦฑ", c6b1),
-_c(U+01B2, "ฦฒ", c6b2),
-_c(U+01B3, "ฦณ", c6b3),
-_c(U+01B4, "ฦด", c6b4),
-_c(U+01B5, "ฦต", c6b5),
-_c(U+01B6, "ฦถ", c6b6),
-_c(U+01B7, "ฦท", c6b7),
-_c(U+01B8, "ฦธ", c6b8),
-_c(U+01B9, "ฦน", c6b9),
-_c(U+01BA, "ฦบ", c6ba),
-_c(U+01BB, "ฦป", c6bb),
-_c(U+01BC, "ฦผ", c6bc),
-_c(U+01BD, "ฦฝ", c6bd),
-_c(U+01BE, "ฦพ", c6be),
-_c(U+01BF, "ฦฟ", c6bf),
-_c(U+01C0, "ว€", c780),
-_c(U+01C1, "ว", c781),
-_c(U+01C2, "ว‚", c782),
-_c(U+01C3, "วƒ", c783),
-_c(U+01C4, "ว„", c784),
-_c(U+01C5, "ว…", c785),
-_c(U+01C6, "ว†", c786),
-_c(U+01C7, "ว‡", c787),
-_c(U+01C8, "วˆ", c788),
-_c(U+01C9, "ว‰", c789),
-_c(U+01CA, "วŠ", c78a),
-_c(U+01CB, "ว‹", c78b),
-_c(U+01CC, "วŒ", c78c),
-_c(U+01CD, "ว", c78d),
-_c(U+01CE, "วŽ", c78e),
-_c(U+01CF, "ว", c78f),
-_c(U+01D0, "ว", c790),
-_c(U+01D1, "ว‘", c791),
-_c(U+01D2, "ว’", c792),
-_c(U+01D3, "ว“", c793),
-_c(U+01D4, "ว”", c794),
-_c(U+01D5, "ว•", c795),
-_c(U+01D6, "ว–", c796),
-_c(U+01D7, "ว—", c797),
-_c(U+01D8, "ว˜", c798),
-_c(U+01D9, "ว™", c799),
-_c(U+01DA, "วš", c79a),
-_c(U+01DB, "ว›", c79b),
-_c(U+01DC, "วœ", c79c),
-_c(U+01DD, "ว", c79d),
-_c(U+01DE, "วž", c79e),
-_c(U+01DF, "วŸ", c79f),
-_c(U+01E0, "ว ", c7a0),
-_c(U+01E1, "วก", c7a1),
-_c(U+01E2, "วข", c7a2),
-_c(U+01E3, "วฃ", c7a3),
-_c(U+01E4, "วค", c7a4),
-_c(U+01E5, "วฅ", c7a5),
-_c(U+01E6, "วฆ", c7a6),
-_c(U+01E7, "วง", c7a7),
-_c(U+01E8, "วจ", c7a8),
-_c(U+01E9, "วฉ", c7a9),
-_c(U+01EA, "วช", c7aa),
-_c(U+01EB, "วซ", c7ab),
-_c(U+01EC, "วฌ", c7ac),
-_c(U+01ED, "วญ", c7ad),
-_c(U+01EE, "วฎ", c7ae),
-_c(U+01EF, "วฏ", c7af),
-_c(U+01F0, "วฐ", c7b0),
-_c(U+01F1, "วฑ", c7b1),
-_c(U+01F2, "วฒ", c7b2),
-_c(U+01F3, "วณ", c7b3),
-_c(U+01F4, "วด", c7b4),
-_c(U+01F5, "วต", c7b5),
-_c(U+01F6, "วถ", c7b6),
-_c(U+01F7, "วท", c7b7),
-_c(U+01F8, "วธ", c7b8),
-_c(U+01F9, "วน", c7b9),
-_c(U+01FA, "วบ", c7ba),
-_c(U+01FB, "วป", c7bb),
-_c(U+01FC, "วผ", c7bc),
-_c(U+01FD, "วฝ", c7bd),
-_c(U+01FE, "วพ", c7be),
-_c(U+01FF, "วฟ", c7bf),
-_c(U+0200, "ศ€", c880),
-_c(U+0201, "ศ", c881),
-_c(U+0202, "ศ‚", c882),
-_c(U+0203, "ศƒ", c883),
-_c(U+0204, "ศ„", c884),
-_c(U+0205, "ศ…", c885),
-_c(U+0206, "ศ†", c886),
-_c(U+0207, "ศ‡", c887),
-_c(U+0208, "ศˆ", c888),
-_c(U+0209, "ศ‰", c889),
-_c(U+020A, "ศŠ", c88a),
-_c(U+020B, "ศ‹", c88b),
-_c(U+020C, "ศŒ", c88c),
-_c(U+020D, "ศ", c88d),
-_c(U+020E, "ศŽ", c88e),
-_c(U+020F, "ศ", c88f),
-_c(U+0210, "ศ", c890),
-_c(U+0211, "ศ‘", c891),
-_c(U+0212, "ศ’", c892),
-_c(U+0213, "ศ“", c893),
-_c(U+0214, "ศ”", c894),
-_c(U+0215, "ศ•", c895),
-_c(U+0216, "ศ–", c896),
-_c(U+0217, "ศ—", c897),
-_c(U+0218, "ศ˜", c898),
-_c(U+0219, "ศ™", c899),
-_c(U+021A, "ศš", c89a),
-_c(U+021B, "ศ›", c89b),
-_c(U+021C, "ศœ", c89c),
-_c(U+021D, "ศ", c89d),
-_c(U+021E, "ศž", c89e),
-_c(U+021F, "ศŸ", c89f),
-_c(U+0220, "ศ ", c8a0),
-_c(U+0221, "ศก", c8a1),
-_c(U+0222, "ศข", c8a2),
-_c(U+0223, "ศฃ", c8a3),
-_c(U+0224, "ศค", c8a4),
-_c(U+0225, "ศฅ", c8a5),
-_c(U+0226, "ศฆ", c8a6),
-_c(U+0227, "ศง", c8a7),
-_c(U+0228, "ศจ", c8a8),
-_c(U+0229, "ศฉ", c8a9),
-_c(U+022A, "ศช", c8aa),
-_c(U+022B, "ศซ", c8ab),
-_c(U+022C, "ศฌ", c8ac),
-_c(U+022D, "ศญ", c8ad),
-_c(U+022E, "ศฎ", c8ae),
-_c(U+022F, "ศฏ", c8af),
-_c(U+0230, "ศฐ", c8b0),
-_c(U+0231, "ศฑ", c8b1),
-_c(U+0232, "ศฒ", c8b2),
-_c(U+0233, "ศณ", c8b3),
-_c(U+0234, "ศด", c8b4),
-_c(U+0235, "ศต", c8b5),
-_c(U+0236, "ศถ", c8b6),
-_c(U+0237, "ศท", c8b7),
-_c(U+0238, "ศธ", c8b8),
-_c(U+0239, "ศน", c8b9),
-_c(U+023A, "ศบ", c8ba),
-_c(U+023B, "ศป", c8bb),
-_c(U+023C, "ศผ", c8bc),
-_c(U+023D, "ศฝ", c8bd),
-_c(U+023E, "ศพ", c8be),
-_c(U+023F, "ศฟ", c8bf),
-_c(U+0240, "ษ€", c980),
-_c(U+0241, "ษ", c981),
-_c(U+0242, "ษ‚", c982),
-_c(U+0243, "ษƒ", c983),
-_c(U+0244, "ษ„", c984),
-_c(U+0245, "ษ…", c985),
-_c(U+0246, "ษ†", c986),
-_c(U+0247, "ษ‡", c987),
-_c(U+0248, "ษˆ", c988),
-_c(U+0249, "ษ‰", c989),
-_c(U+024A, "ษŠ", c98a),
-_c(U+024B, "ษ‹", c98b),
-_c(U+024C, "ษŒ", c98c),
-_c(U+024D, "ษ", c98d),
-_c(U+024E, "ษŽ", c98e),
-_c(U+024F, "ษ", c98f),
-_c(U+0250, "ษ", c990),
-_c(U+0251, "ษ‘", c991),
-_c(U+0252, "ษ’", c992),
-_c(U+0253, "ษ“", c993),
-_c(U+0254, "ษ”", c994),
-_c(U+0255, "ษ•", c995),
-_c(U+0256, "ษ–", c996),
-_c(U+0257, "ษ—", c997),
-_c(U+0258, "ษ˜", c998),
-_c(U+0259, "ษ™", c999),
-_c(U+025A, "ษš", c99a),
-_c(U+025B, "ษ›", c99b),
-_c(U+025C, "ษœ", c99c),
-_c(U+025D, "ษ", c99d),
-_c(U+025E, "ษž", c99e),
-_c(U+025F, "ษŸ", c99f),
-_c(U+0260, "ษ ", c9a0),
-_c(U+0261, "ษก", c9a1),
-_c(U+0262, "ษข", c9a2),
-_c(U+0263, "ษฃ", c9a3),
-_c(U+0264, "ษค", c9a4),
-_c(U+0265, "ษฅ", c9a5),
-_c(U+0266, "ษฆ", c9a6),
-_c(U+0267, "ษง", c9a7),
-_c(U+0268, "ษจ", c9a8),
-_c(U+0269, "ษฉ", c9a9),
-_c(U+026A, "ษช", c9aa),
-_c(U+026B, "ษซ", c9ab),
-_c(U+026C, "ษฌ", c9ac),
-_c(U+026D, "ษญ", c9ad),
-_c(U+026E, "ษฎ", c9ae),
-_c(U+026F, "ษฏ", c9af),
-_c(U+0270, "ษฐ", c9b0),
-_c(U+0271, "ษฑ", c9b1),
-_c(U+0272, "ษฒ", c9b2),
-_c(U+0273, "ษณ", c9b3),
-_c(U+0274, "ษด", c9b4),
-_c(U+0275, "ษต", c9b5),
-_c(U+0276, "ษถ", c9b6),
-_c(U+0277, "ษท", c9b7),
-_c(U+0278, "ษธ", c9b8),
-_c(U+0279, "ษน", c9b9),
-_c(U+027A, "ษบ", c9ba),
-_c(U+027B, "ษป", c9bb),
-_c(U+027C, "ษผ", c9bc),
-_c(U+027D, "ษฝ", c9bd),
-_c(U+027E, "ษพ", c9be),
-_c(U+027F, "ษฟ", c9bf),
-_c(U+0280, "ส€", ca80),
-_c(U+0281, "ส", ca81),
-_c(U+0282, "ส‚", ca82),
-_c(U+0283, "สƒ", ca83),
-_c(U+0284, "ส„", ca84),
-_c(U+0285, "ส…", ca85),
-_c(U+0286, "ส†", ca86),
-_c(U+0287, "ส‡", ca87),
-_c(U+0288, "สˆ", ca88),
-_c(U+0289, "ส‰", ca89),
-_c(U+028A, "สŠ", ca8a),
-_c(U+028B, "ส‹", ca8b),
-_c(U+028C, "สŒ", ca8c),
-_c(U+028D, "ส", ca8d),
-_c(U+028E, "สŽ", ca8e),
-_c(U+028F, "ส", ca8f),
-_c(U+0290, "ส", ca90),
-_c(U+0291, "ส‘", ca91),
-_c(U+0292, "ส’", ca92),
-_c(U+0293, "ส“", ca93),
-_c(U+0294, "ส”", ca94),
-_c(U+0295, "ส•", ca95),
-_c(U+0296, "ส–", ca96),
-_c(U+0297, "ส—", ca97),
-_c(U+0298, "ส˜", ca98),
-_c(U+0299, "ส™", ca99),
-_c(U+029A, "สš", ca9a),
-_c(U+029B, "ส›", ca9b),
-_c(U+029C, "สœ", ca9c),
-_c(U+029D, "ส", ca9d),
-_c(U+029E, "สž", ca9e),
-_c(U+029F, "สŸ", ca9f),
-_c(U+02A0, "ส ", caa0),
-_c(U+02A1, "สก", caa1),
-_c(U+02A2, "สข", caa2),
-_c(U+02A3, "สฃ", caa3),
-_c(U+02A4, "สค", caa4),
-_c(U+02A5, "สฅ", caa5),
-_c(U+02A6, "สฆ", caa6),
-_c(U+02A7, "สง", caa7),
-_c(U+02A8, "สจ", caa8),
-_c(U+02A9, "สฉ", caa9),
-_c(U+02AA, "สช", caaa),
-_c(U+02AB, "สซ", caab),
-_c(U+02AC, "สฌ", caac),
-_c(U+02AD, "สญ", caad),
-_c(U+02AE, "สฎ", caae),
-_c(U+02AF, "สฏ", caaf),
-_c(U+02B0, "สฐ", cab0),
-_c(U+02B1, "สฑ", cab1),
-_c(U+02B2, "สฒ", cab2),
-_c(U+02B3, "สณ", cab3),
-_c(U+02B4, "สด", cab4),
-_c(U+02B5, "สต", cab5),
-_c(U+02B6, "สถ", cab6),
-_c(U+02B7, "สท", cab7),
-_c(U+02B8, "สธ", cab8),
-_c(U+02B9, "สน", cab9),
-_c(U+02BA, "สบ", caba),
-_c(U+02BB, "สป", cabb),
-_c(U+02BC, "สผ", cabc),
-_c(U+02BD, "สฝ", cabd),
-_c(U+02BE, "สพ", cabe),
-_c(U+02BF, "สฟ", cabf),
-_c(U+02C0, "ห€", cb80),
-_c(U+02C1, "ห", cb81),
-_c(U+02C2, "ห‚", cb82),
-_c(U+02C3, "หƒ", cb83),
-_c(U+02C4, "ห„", cb84),
-_c(U+02C5, "ห…", cb85),
-_c(U+02C6, "ห†", cb86),
-_c(U+02C7, "ห‡", cb87),
-_c(U+02C8, "หˆ", cb88),
-_c(U+02C9, "ห‰", cb89),
-_c(U+02CA, "หŠ", cb8a),
-_c(U+02CB, "ห‹", cb8b),
-_c(U+02CC, "หŒ", cb8c),
-_c(U+02CD, "ห", cb8d),
-_c(U+02CE, "หŽ", cb8e),
-_c(U+02CF, "ห", cb8f),
-_c(U+02D0, "ห", cb90),
-_c(U+02D1, "ห‘", cb91),
-_c(U+02D2, "ห’", cb92),
-_c(U+02D3, "ห“", cb93),
-_c(U+02D4, "ห”", cb94),
-_c(U+02D5, "ห•", cb95),
-_c(U+02D6, "ห–", cb96),
-_c(U+02D7, "ห—", cb97),
-_c(U+02D8, "ห˜", cb98),
-_c(U+02D9, "ห™", cb99),
-_c(U+02DA, "หš", cb9a),
-_c(U+02DB, "ห›", cb9b),
-_c(U+02DC, "หœ", cb9c),
-_c(U+02DD, "ห", cb9d),
-_c(U+02DE, "หž", cb9e),
-_c(U+02DF, "หŸ", cb9f),
-_c(U+02E0, "ห ", cba0),
-_c(U+02E1, "หก", cba1),
-_c(U+02E2, "หข", cba2),
-_c(U+02E3, "หฃ", cba3),
-_c(U+02E4, "หค", cba4),
-_c(U+02E5, "หฅ", cba5),
-_c(U+02E6, "หฆ", cba6),
-_c(U+02E7, "หง", cba7),
-_c(U+02E8, "หจ", cba8),
-_c(U+02E9, "หฉ", cba9),
-_c(U+02EA, "หช", cbaa),
-_c(U+02EB, "หซ", cbab),
-_c(U+02EC, "หฌ", cbac),
-_c(U+02ED, "หญ", cbad),
-_c(U+02EE, "หฎ", cbae),
-_c(U+02EF, "หฏ", cbaf),
-_c(U+02F0, "หฐ", cbb0),
-_c(U+02F1, "หฑ", cbb1),
-_c(U+02F2, "หฒ", cbb2),
-_c(U+02F3, "หณ", cbb3),
-_c(U+02F4, "หด", cbb4),
-_c(U+02F5, "หต", cbb5),
-_c(U+02F6, "หถ", cbb6),
-_c(U+02F7, "หท", cbb7),
-_c(U+02F8, "หธ", cbb8),
-_c(U+02F9, "หน", cbb9),
-_c(U+02FA, "หบ", cbba),
-_c(U+02FB, "หป", cbbb),
-_c(U+02FC, "หผ", cbbc),
-_c(U+02FD, "หฝ", cbbd),
-_c(U+02FE, "หพ", cbbe),
-//_c(U+02FF, "หฟ", cbbf),
-//_c(U+0300, ฬ€"ฬ€ ", cc80),
-//_c(U+0301, ฬ" ", cc81),
-//_c(U+0302, ฬ‚" ", cc82),
-//_c(U+0303, ฬƒ" ", cc83),
-//_c(U+0304, ฬ„" ", cc84),
-//_c(U+0305, "ฬ…" , cc85),
-//_c(U+0306, ฬ†" ", cc86),
-//_c(U+0307, ฬ‡" ", cc87),
-//_c(U+0308, ฬˆ" ", cc88),
-//_c(U+0309, ฬ‰" ", cc89),
-//_c(U+030A, ฬŠ" ", cc8a),
-//_c(U+030B, ฬ‹" ", cc8b),
-//_c(U+030C, ฬŒ" ", cc8c),
-//_c(U+030D, "ฬ" , cc8d),
-//_c(U+030E, "ฬŽ" , cc8e),
-//_c(U+030F, ฬ" ", cc8f),
-//_c(U+0310, "ฬ" , cc90),
-//_c(U+0311, ฬ‘" ", cc91),
-//_c(U+0312, ฬ’" ", cc92),
-//_c(U+0313, "ฬ“" , cc93),
-//_c(U+0314, "ฬ”" , cc94),
-//_c(U+0315, "ฬ•" , cc95),
-//_c(U+0316, "ฬ–" , cc96),
-//_c(U+0317, "ฬ—" , cc97),
-//_c(U+0318, "ฬ˜" , cc98),
-//_c(U+0319, "ฬ™" , cc99),
-//_c(U+031A, "ฬš" , cc9a),
-//_c(U+031B, ฬ›" ", cc9b),
-//_c(U+031C, "ฬœ" , cc9c),
-//_c(U+031D, "ฬ" , cc9d),
-//_c(U+031E, "ฬž" , cc9e),
-_c(U+031F, "ฬŸ" , cc9f),
-_c(U+0320, "ฬ " , cca0),
-_c(U+0321, "ฬก" , cca1),
-_c(U+0322, "ฬข" , cca2),
-//_c(U+0323, ฬฃ" ", cca3),
-//_c(U+0324, ฬค" ", cca4),
-_c(U+0325, "ฬฅ" , cca5),
-//_c(U+0326, ฬฆ" ", cca6),
-//_c(U+0327, ฬง" ", cca7),
-//_c(U+0328, ฬจ" ", cca8),
-//_c(U+0329, "ฬฉ" , cca9),
-_c(U+032A, "ฬช" , ccaa),
-_c(U+032B, "ฬซ" , ccab),
-_c(U+032C, "ฬฌ" , ccac),
-_c(U+032D, "ฬญ" , ccad),
-//_c(U+032E, ฬฎ" ", ccae),
-_c(U+032F, "ฬฏ" , ccaf),
-_c(U+0330, "ฬฐ" , ccb0),
-//_c(U+0331, ฬฑ" ", ccb1),
-_c(U+0332, "ฬฒ" , ccb2),
-_c(U+0333, "ฬณ" , ccb3),
-_c(U+0334, "ฬด" , ccb4),
-//_c(U+0335, ฬต" ", ccb5),
-//_c(U+0336, ฬถ" ", ccb6),
-_c(U+0337, "ฬท" , ccb7),
-_c(U+0338, "ฬธ" , ccb8),
-_c(U+0339, "ฬน" , ccb9),
-_c(U+033A, "ฬบ" , ccba),
-_c(U+033B, "ฬป" , ccbb),
-_c(U+033C, "ฬผ" , ccbc),
-_c(U+033D, "ฬฝ" , ccbd),
-_c(U+033E, "ฬพ" , ccbe),
-_c(U+033F, "ฬฟ" , ccbf),
-_c(U+0340, "อ€" , cd80),
-_c(U+0341, "อ" , cd81),
-_c(U+0342, "อ‚" , cd82),
-_c(U+0343, "อƒ" , cd83),
-_c(U+0344, "อ„" , cd84),
-_c(U+0345, "อ…" , cd85),
-_c(U+0346, "อ†" , cd86),
-_c(U+0347, "อ‡" , cd87),
-_c(U+0348, "อˆ" , cd88),
-_c(U+0349, "อ‰" , cd89),
-_c(U+034A, "อŠ" , cd8a),
-_c(U+034B, "อ‹" , cd8b),
-_c(U+034C, "อŒ" , cd8c),
-_c(U+034D, "อ" , cd8d),
-_c(U+034E, "อŽ" , cd8e),
-_c(U+034F, "อ" , cd8f),
-_c(U+0350, "อ" , cd90),
-_c(U+0351, "อ‘" , cd91),
-_c(U+0352, "อ’" , cd92),
-_c(U+0353, "อ“" , cd93),
-_c(U+0354, "อ”" , cd94),
-_c(U+0355, "อ•" , cd95),
-_c(U+0356, "อ–" , cd96),
-_c(U+0357, "อ—" , cd97),
-_c(U+0358, "อ˜" , cd98),
-_c(U+0359, "อ™" , cd99),
-_c(U+035A, "อš" , cd9a),
-_c(U+035B, "อ›" , cd9b),
-_c(U+035C, "อœ" , cd9c),
-_c(U+035D, "อ" , cd9d),
-_c(U+035E, "อž" , cd9e),
-_c(U+035F, "อŸ" , cd9f),
-_c(U+0360, "อ " , cda0),
-_c(U+0361, "อก" , cda1),
-_c(U+0362, "อข" , cda2),
-_c(U+0363, "อฃ" , cda3),
-_c(U+0364, "อค" , cda4),
-_c(U+0365, "อฅ" , cda5),
-_c(U+0366, "อฆ" , cda6),
-_c(U+0367, "อง" , cda7),
-_c(U+0368, "อจ" , cda8),
-_c(U+0369, "อฉ" , cda9),
-_c(U+036A, "อช" , cdaa),
-_c(U+036B, "อซ" , cdab),
-_c(U+036C, "อฌ" , cdac),
-_c(U+036D, "อญ" , cdad),
-_c(U+036E, "อฎ" , cdae),
-_c(U+036F, "อฏ" , cdaf),
-_c(U+0370, "อฐ", cdb0),
-_c(U+0371, "อฑ", cdb1),
-_c(U+0372, "อฒ", cdb2),
-_c(U+0373, "อณ", cdb3),
-_c(U+0374, "อด", cdb4),
-_c(U+0375, "อต", cdb5),
-_c(U+0376, "อถ", cdb6),
-_c(U+0377, "อท", cdb7),
-_c(U+0378, "อธ", cdb8),
-_c(U+0379, "อน", cdb9),
-_c(U+037A, "อบ", cdba),
-_c(U+037B, "อป", cdbb),
-_c(U+037C, "อผ", cdbc),
-_c(U+037D, "อฝ", cdbd),
-_c(U+037E, "อพ", cdbe),
-_c(U+037F, "อฟ", cdbf),
-_c(U+0380, "ฮ€", ce80),
-_c(U+0381, "ฮ", ce81),
-_c(U+0382, "ฮ‚", ce82),
-_c(U+0383, "ฮƒ", ce83),
-_c(U+0384, "ฮ„", ce84),
-_c(U+0385, "ฮ…", ce85),
-_c(U+0386, "ฮ†", ce86),
-_c(U+0387, "ฮ‡", ce87),
-_c(U+0388, "ฮˆ", ce88),
-_c(U+0389, "ฮ‰", ce89),
-_c(U+038A, "ฮŠ", ce8a),
-_c(U+038B, "ฮ‹", ce8b),
-_c(U+038C, "ฮŒ", ce8c),
-_c(U+038D, "ฮ", ce8d),
-_c(U+038E, "ฮŽ", ce8e),
-_c(U+038F, "ฮ", ce8f),
-_c(U+0390, "ฮ", ce90),
-_c(U+0391, "ฮ‘", ce91),
-_c(U+0392, "ฮ’", ce92),
-_c(U+0393, "ฮ“", ce93),
-_c(U+0394, "ฮ”", ce94),
-_c(U+0395, "ฮ•", ce95),
-_c(U+0396, "ฮ–", ce96),
-_c(U+0397, "ฮ—", ce97),
-_c(U+0398, "ฮ˜", ce98),
-_c(U+0399, "ฮ™", ce99),
-_c(U+039A, "ฮš", ce9a),
-_c(U+039B, "ฮ›", ce9b),
-_c(U+039C, "ฮœ", ce9c),
-_c(U+039D, "ฮ", ce9d),
-_c(U+039E, "ฮž", ce9e),
-_c(U+039F, "ฮŸ", ce9f),
-_c(U+03A0, "ฮ ", cea0),
-_c(U+03A1, "ฮก", cea1),
-_c(U+03A2, "ฮข", cea2),
-_c(U+03A3, "ฮฃ", cea3),
-_c(U+03A4, "ฮค", cea4),
-_c(U+03A5, "ฮฅ", cea5),
-_c(U+03A6, "ฮฆ", cea6),
-_c(U+03A7, "ฮง", cea7),
-_c(U+03A8, "ฮจ", cea8),
-_c(U+03A9, "ฮฉ", cea9),
-_c(U+03AA, "ฮช", ceaa),
-_c(U+03AB, "ฮซ", ceab),
-_c(U+03AC, "ฮฌ", ceac),
-_c(U+03AD, "ฮญ", cead),
-_c(U+03AE, "ฮฎ", ceae),
-_c(U+03AF, "ฮฏ", ceaf),
-_c(U+03B0, "ฮฐ", ceb0),
-_c(U+03B1, "ฮฑ", ceb1),
-_c(U+03B2, "ฮฒ", ceb2),
-_c(U+03B3, "ฮณ", ceb3),
-_c(U+03B4, "ฮด", ceb4),
-_c(U+03B5, "ฮต", ceb5),
-_c(U+03B6, "ฮถ", ceb6),
-_c(U+03B7, "ฮท", ceb7),
-_c(U+03B8, "ฮธ", ceb8),
-_c(U+03B9, "ฮน", ceb9),
-_c(U+03BA, "ฮบ", ceba),
-_c(U+03BB, "ฮป", cebb),
-_c(U+03BC, "ฮผ", cebc),
-_c(U+03BD, "ฮฝ", cebd),
-_c(U+03BE, "ฮพ", cebe),
-_c(U+03BF, "ฮฟ", cebf),
-_c(U+03C0, "ฯ€", cf80),
-_c(U+03C1, "ฯ", cf81),
-_c(U+03C2, "ฯ‚", cf82),
-_c(U+03C3, "ฯƒ", cf83),
-_c(U+03C4, "ฯ„", cf84),
-_c(U+03C5, "ฯ…", cf85),
-_c(U+03C6, "ฯ†", cf86),
-_c(U+03C7, "ฯ‡", cf87),
-_c(U+03C8, "ฯˆ", cf88),
-_c(U+03C9, "ฯ‰", cf89),
-_c(U+03CA, "ฯŠ", cf8a),
-_c(U+03CB, "ฯ‹", cf8b),
-_c(U+03CC, "ฯŒ", cf8c),
-_c(U+03CD, "ฯ", cf8d),
-_c(U+03CE, "ฯŽ", cf8e),
-_c(U+03CF, "ฯ", cf8f),
-_c(U+03D0, "ฯ", cf90),
-_c(U+03D1, "ฯ‘", cf91),
-_c(U+03D2, "ฯ’", cf92),
-_c(U+03D3, "ฯ“", cf93),
-_c(U+03D4, "ฯ”", cf94),
-_c(U+03D5, "ฯ•", cf95),
-_c(U+03D6, "ฯ–", cf96),
-_c(U+03D7, "ฯ—", cf97),
-_c(U+03D8, "ฯ˜", cf98),
-_c(U+03D9, "ฯ™", cf99),
-_c(U+03DA, "ฯš", cf9a),
-_c(U+03DB, "ฯ›", cf9b),
-_c(U+03DC, "ฯœ", cf9c),
-_c(U+03DD, "ฯ", cf9d),
-_c(U+03DE, "ฯž", cf9e),
-_c(U+03DF, "ฯŸ", cf9f),
-_c(U+03E0, "ฯ ", cfa0),
-_c(U+03E1, "ฯก", cfa1),
-_c(U+03E2, "ฯข", cfa2),
-_c(U+03E3, "ฯฃ", cfa3),
-_c(U+03E4, "ฯค", cfa4),
-_c(U+03E5, "ฯฅ", cfa5),
-_c(U+03E6, "ฯฆ", cfa6),
-_c(U+03E7, "ฯง", cfa7),
-_c(U+03E8, "ฯจ", cfa8),
-_c(U+03E9, "ฯฉ", cfa9),
-_c(U+03EA, "ฯช", cfaa),
-_c(U+03EB, "ฯซ", cfab),
-_c(U+03EC, "ฯฌ", cfac),
-_c(U+03ED, "ฯญ", cfad),
-_c(U+03EE, "ฯฎ", cfae),
-_c(U+03EF, "ฯฏ", cfaf),
-_c(U+03F0, "ฯฐ", cfb0),
-_c(U+03F1, "ฯฑ", cfb1),
-_c(U+03F2, "ฯฒ", cfb2),
-_c(U+03F3, "ฯณ", cfb3),
-_c(U+03F4, "ฯด", cfb4),
-_c(U+03F5, "ฯต", cfb5),
-_c(U+03F6, "ฯถ", cfb6),
-_c(U+03F7, "ฯท", cfb7),
-_c(U+03F8, "ฯธ", cfb8),
-_c(U+03F9, "ฯน", cfb9),
-_c(U+03FA, "ฯบ", cfba),
-_c(U+03FB, "ฯป", cfbb),
-_c(U+03FC, "ฯผ", cfbc),
-_c(U+03FD, "ฯฝ", cfbd),
-_c(U+03FE, "ฯพ", cfbe),
-_c(U+03FF, "ฯฟ", cfbf),
-_c(U+0400, "ะ€", d080),
-_c(U+0401, "ะ", d081),
-_c(U+0402, "ะ‚", d082),
-_c(U+0403, "ะƒ", d083),
-_c(U+0404, "ะ„", d084),
-_c(U+0405, "ะ…", d085),
-_c(U+0406, "ะ†", d086),
-_c(U+0407, "ะ‡", d087),
-_c(U+0408, "ะˆ", d088),
-_c(U+0409, "ะ‰", d089),
-_c(U+040A, "ะŠ", d08a),
-_c(U+040B, "ะ‹", d08b),
-_c(U+040C, "ะŒ", d08c),
-_c(U+040D, "ะ", d08d),
-_c(U+040E, "ะŽ", d08e),
-_c(U+040F, "ะ", d08f),
-_c(U+0410, "ะ", d090),
-_c(U+0411, "ะ‘", d091),
-_c(U+0412, "ะ’", d092),
-_c(U+0413, "ะ“", d093),
-_c(U+0414, "ะ”", d094),
-_c(U+0415, "ะ•", d095),
-_c(U+0416, "ะ–", d096),
-_c(U+0417, "ะ—", d097),
-_c(U+0418, "ะ˜", d098),
-_c(U+0419, "ะ™", d099),
-_c(U+041A, "ะš", d09a),
-_c(U+041B, "ะ›", d09b),
-_c(U+041C, "ะœ", d09c),
-_c(U+041D, "ะ", d09d),
-_c(U+041E, "ะž", d09e),
-_c(U+041F, "ะŸ", d09f),
-_c(U+0420, "ะ ", d0a0),
-_c(U+0421, "ะก", d0a1),
-_c(U+0422, "ะข", d0a2),
-_c(U+0423, "ะฃ", d0a3),
-_c(U+0424, "ะค", d0a4),
-_c(U+0425, "ะฅ", d0a5),
-_c(U+0426, "ะฆ", d0a6),
-_c(U+0427, "ะง", d0a7),
-_c(U+0428, "ะจ", d0a8),
-_c(U+0429, "ะฉ", d0a9),
-_c(U+042A, "ะช", d0aa),
-_c(U+042B, "ะซ", d0ab),
-_c(U+042C, "ะฌ", d0ac),
-_c(U+042D, "ะญ", d0ad),
-_c(U+042E, "ะฎ", d0ae),
-_c(U+042F, "ะฏ", d0af),
-_c(U+0430, "ะฐ", d0b0),
-_c(U+0431, "ะฑ", d0b1),
-_c(U+0432, "ะฒ", d0b2),
-_c(U+0433, "ะณ", d0b3),
-_c(U+0434, "ะด", d0b4),
-_c(U+0435, "ะต", d0b5),
-_c(U+0436, "ะถ", d0b6),
-_c(U+0437, "ะท", d0b7),
-_c(U+0438, "ะธ", d0b8),
-_c(U+0439, "ะน", d0b9),
-_c(U+043A, "ะบ", d0ba),
-_c(U+043B, "ะป", d0bb),
-_c(U+043C, "ะผ", d0bc),
-_c(U+043D, "ะฝ", d0bd),
-_c(U+043E, "ะพ", d0be),
-_c(U+043F, "ะฟ", d0bf),
-_c(U+0440, "ั€", d180),
-_c(U+0441, "ั", d181),
-_c(U+0442, "ั‚", d182),
-_c(U+0443, "ัƒ", d183),
-_c(U+0444, "ั„", d184),
-_c(U+0445, "ั…", d185),
-_c(U+0446, "ั†", d186),
-_c(U+0447, "ั‡", d187),
-_c(U+0448, "ัˆ", d188),
-_c(U+0449, "ั‰", d189),
-_c(U+044A, "ัŠ", d18a),
-_c(U+044B, "ั‹", d18b),
-_c(U+044C, "ัŒ", d18c),
-_c(U+044D, "ั", d18d),
-_c(U+044E, "ัŽ", d18e),
-_c(U+044F, "ั", d18f),
-_c(U+0450, "ั", d190),
-_c(U+0451, "ั‘", d191),
-_c(U+0452, "ั’", d192),
-_c(U+0453, "ั“", d193),
-_c(U+0454, "ั”", d194),
-_c(U+0455, "ั•", d195),
-_c(U+0456, "ั–", d196),
-_c(U+0457, "ั—", d197),
-_c(U+0458, "ั˜", d198),
-_c(U+0459, "ั™", d199),
-_c(U+045A, "ัš", d19a),
-_c(U+045B, "ั›", d19b),
-_c(U+045C, "ัœ", d19c),
-_c(U+045D, "ั", d19d),
-_c(U+045E, "ัž", d19e),
-_c(U+045F, "ัŸ", d19f),
-_c(U+0460, "ั ", d1a0),
-_c(U+0461, "ัก", d1a1),
-_c(U+0462, "ัข", d1a2),
-_c(U+0463, "ัฃ", d1a3),
-_c(U+0464, "ัค", d1a4),
-_c(U+0465, "ัฅ", d1a5),
-_c(U+0466, "ัฆ", d1a6),
-_c(U+0467, "ัง", d1a7),
-_c(U+0468, "ัจ", d1a8),
-_c(U+0469, "ัฉ", d1a9),
-_c(U+046A, "ัช", d1aa),
-_c(U+046B, "ัซ", d1ab),
-_c(U+046C, "ัฌ", d1ac),
-_c(U+046D, "ัญ", d1ad),
-_c(U+046E, "ัฎ", d1ae),
-_c(U+046F, "ัฏ", d1af),
-_c(U+0470, "ัฐ", d1b0),
-_c(U+0471, "ัฑ", d1b1),
-_c(U+0472, "ัฒ", d1b2),
-_c(U+0473, "ัณ", d1b3),
-_c(U+0474, "ัด", d1b4),
-_c(U+0475, "ัต", d1b5),
-_c(U+0476, "ัถ", d1b6),
-_c(U+0477, "ัท", d1b7),
-_c(U+0478, "ัธ", d1b8),
-_c(U+0479, "ัน", d1b9),
-_c(U+047A, "ับ", d1ba),
-_c(U+047B, "ัป", d1bb),
-_c(U+047C, "ัผ", d1bc),
-_c(U+047D, "ัฝ", d1bd),
-_c(U+047E, "ัพ", d1be),
-_c(U+047F, "ัฟ", d1bf),
-_c(U+20A0, "โ‚ ", e282a0),
-_c(U+20A1, "โ‚ก", e282a1),
-_c(U+20A2, "โ‚ข", e282a2),
-_c(U+20A3, "โ‚ฃ", e282a3),
-_c(U+20A4, "โ‚ค", e282a4),
-_c(U+20A5, "โ‚ฅ", e282a5),
-_c(U+20A6, "โ‚ฆ", e282a6),
-_c(U+20A7, "โ‚ง", e282a7),
-_c(U+20A8, "โ‚จ", e282a8),
-_c(U+20A9, "โ‚ฉ", e282a9),
-_c(U+20AA, "โ‚ช", e282aa),
-_c(U+20AB, "โ‚ซ", e282ab),
-_c(U+20AC, "โ‚ฌ", e282ac),
-_c(U+20AD, "โ‚ญ", e282ad),
-_c(U+20AE, "โ‚ฎ", e282ae),
-_c(U+20AF, "โ‚ฏ", e282af),
-_c(U+20B0, "โ‚ฐ", e282b0),
-_c(U+20B1, "โ‚ฑ", e282b1),
-_c(U+20B2, "โ‚ฒ", e282b2),
-_c(U+20B3, "โ‚ณ", e282b3),
-_c(U+20B4, "โ‚ด", e282b4),
-_c(U+20B5, "โ‚ต", e282b5),
-_c(U+20B6, "โ‚ถ", e282b6),
-_c(U+20B7, "โ‚ท", e282b7),
-_c(U+20B8, "โ‚ธ", e282b8),
-_c(U+20B9, "โ‚น", e282b9),
-_c(U+20BA, "โ‚บ", e282ba),
-_c(U+20BB, "โ‚ป", e282bb),
-_c(U+20BC, "โ‚ผ", e282bc),
-_c(U+20BD, "โ‚ฝ", e282bd),
-_c(U+20BE, "โ‚พ", e282be),
-_c(U+20BF, "โ‚ฟ", e282bf),
-_c(U+20C0, "โƒ€", e28380),
-_c(U+20C1, "โƒ", e28381),
-_c(U+20C2, "โƒ‚", e28382),
-_c(U+20C3, "โƒƒ", e28383),
-_c(U+20C4, "โƒ„", e28384),
-_c(U+20C5, "โƒ…", e28385),
-_c(U+20C6, "โƒ†", e28386),
-_c(U+20C7, "โƒ‡", e28387),
-_c(U+20C8, "โƒˆ", e28388),
-_c(U+20C9, "โƒ‰", e28389),
-_c(U+20CA, "โƒŠ", e2838a),
-_c(U+20CB, "โƒ‹", e2838b),
-_c(U+20CC, "โƒŒ", e2838c),
-_c(U+20CD, "โƒ", e2838d),
-_c(U+20CE, "โƒŽ", e2838e),
-_c(U+20CF, "โƒ", e2838f),
-_c(U+20D0, "โƒ", e28390),
-_c(U+20D1, "โƒ‘", e28391),
-_c(U+20D2, "โƒ’", e28392),
-_c(U+20D3, "โƒ“", e28393),
-_c(U+20D4, "โƒ”", e28394),
-_c(U+20D5, "โƒ•", e28395),
-_c(U+20D6, "โƒ–", e28396),
-_c(U+20D7, "โƒ—", e28397),
-_c(U+20D8, "โƒ˜", e28398),
-_c(U+20D9, "โƒ™", e28399),
-_c(U+20DA, "โƒš", e2839a),
-_c(U+20DB, "โƒ›", e2839b),
-_c(U+20DC, "โƒœ", e2839c),
-_c(U+20DD, "โƒ", e2839d),
-_c(U+20DE, "โƒž", e2839e),
-_c(U+20DF, "โƒŸ", e2839f),
-_c(U+20E0, "โƒ ", e283a0),
-_c(U+20E1, "โƒก", e283a1),
-_c(U+20E2, "โƒข", e283a2),
-_c(U+20E3, "โƒฃ", e283a3),
-_c(U+20E4, "โƒค", e283a4),
-_c(U+20E5, "โƒฅ", e283a5),
-_c(U+20E6, "โƒฆ", e283a6),
-_c(U+20E7, "โƒง", e283a7),
-_c(U+20E8, "โƒจ", e283a8),
-_c(U+20E9, "โƒฉ", e283a9),
-_c(U+20EA, "โƒช", e283aa),
-_c(U+20EB, "โƒซ", e283ab),
-_c(U+20EC, "โƒฌ", e283ac),
-_c(U+20ED, "โƒญ", e283ad),
-_c(U+20EE, "โƒฎ", e283ae),
-_c(U+20EF, "โƒฏ", e283af),
-_c(U+20F0, "โƒฐ", e283b0),
-_c(U+20F1, "โƒฑ", e283b1),
-_c(U+20F2, "โƒฒ", e283b2),
-_c(U+20F3, "โƒณ", e283b3),
-_c(U+20F4, "โƒด", e283b4),
-_c(U+20F5, "โƒต", e283b5),
-_c(U+20F6, "โƒถ", e283b6),
-_c(U+20F7, "โƒท", e283b7),
-_c(U+20F8, "โƒธ", e283b8),
-_c(U+20F9, "โƒน", e283b9),
-_c(U+20FA, "โƒบ", e283ba),
-_c(U+20FB, "โƒป", e283bb),
-_c(U+20FC, "โƒผ", e283bc),
-_c(U+20FD, "โƒฝ", e283bd),
-_c(U+20FE, "โƒพ", e283be),
-_c(U+20FF, "โƒฟ", e283bf),
-_c(U+2100, "โ„€", e28480),
-_c(U+2101, "โ„", e28481),
-_c(U+2102, "โ„‚", e28482),
-_c(U+2103, "โ„ƒ", e28483),
-_c(U+2104, "โ„„", e28484),
-_c(U+2105, "โ„…", e28485),
-_c(U+2106, "โ„†", e28486),
-_c(U+2107, "โ„‡", e28487),
-_c(U+2108, "โ„ˆ", e28488),
-_c(U+2109, "โ„‰", e28489),
-_c(U+210A, "โ„Š", e2848a),
-_c(U+210B, "โ„‹", e2848b),
-_c(U+210C, "โ„Œ", e2848c),
-_c(U+210D, "โ„", e2848d),
-_c(U+210E, "โ„Ž", e2848e),
-_c(U+210F, "โ„", e2848f),
-_c(U+2110, "โ„", e28490),
-_c(U+2111, "โ„‘", e28491),
-_c(U+2112, "โ„’", e28492),
-_c(U+2113, "โ„“", e28493),
-_c(U+2114, "โ„”", e28494),
-_c(U+2115, "โ„•", e28495),
-_c(U+2116, "โ„–", e28496),
-_c(U+2117, "โ„—", e28497),
-_c(U+2118, "โ„˜", e28498),
-_c(U+2119, "โ„™", e28499),
-_c(U+211A, "โ„š", e2849a),
-_c(U+211B, "โ„›", e2849b),
-_c(U+211C, "โ„œ", e2849c),
-_c(U+211D, "โ„", e2849d),
-_c(U+211E, "โ„ž", e2849e),
-_c(U+211F, "โ„Ÿ", e2849f),
-_c(U+2120, "โ„ ", e284a0),
-_c(U+2121, "โ„ก", e284a1),
-_c(U+2122, "โ„ข", e284a2),
-_c(U+2123, "โ„ฃ", e284a3),
-_c(U+2124, "โ„ค", e284a4),
-_c(U+2125, "โ„ฅ", e284a5),
-_c(U+2126, "โ„ฆ", e284a6),
-_c(U+2127, "โ„ง", e284a7),
-_c(U+2128, "โ„จ", e284a8),
-_c(U+2129, "โ„ฉ", e284a9),
-_c(U+212A, "โ„ช", e284aa),
-_c(U+212B, "โ„ซ", e284ab),
-_c(U+212C, "โ„ฌ", e284ac),
-_c(U+212D, "โ„ญ", e284ad),
-_c(U+212E, "โ„ฎ", e284ae),
-_c(U+212F, "โ„ฏ", e284af),
-_c(U+2130, "โ„ฐ", e284b0),
-_c(U+2131, "โ„ฑ", e284b1),
-_c(U+2132, "โ„ฒ", e284b2),
-_c(U+2133, "โ„ณ", e284b3),
-_c(U+2134, "โ„ด", e284b4),
-_c(U+2135, "โ„ต", e284b5),
-_c(U+2136, "โ„ถ", e284b6),
-_c(U+2137, "โ„ท", e284b7),
-_c(U+2138, "โ„ธ", e284b8),
-_c(U+2139, "โ„น", e284b9),
-_c(U+213A, "โ„บ", e284ba),
-_c(U+213B, "โ„ป", e284bb),
-_c(U+213C, "โ„ผ", e284bc),
-_c(U+213D, "โ„ฝ", e284bd),
-_c(U+213E, "โ„พ", e284be),
-_c(U+213F, "โ„ฟ", e284bf),
-_c(U+2140, "โ…€", e28580),
-_c(U+2141, "โ…", e28581),
-_c(U+2142, "โ…‚", e28582),
-_c(U+2143, "โ…ƒ", e28583),
-_c(U+2144, "โ…„", e28584),
-_c(U+2145, "โ……", e28585),
-_c(U+2146, "โ…†", e28586),
-_c(U+2147, "โ…‡", e28587),
-_c(U+2148, "โ…ˆ", e28588),
-_c(U+2149, "โ…‰", e28589),
-_c(U+214A, "โ…Š", e2858a),
-_c(U+214B, "โ…‹", e2858b),
-_c(U+214C, "โ…Œ", e2858c),
-_c(U+214D, "โ…", e2858d),
-_c(U+214E, "โ…Ž", e2858e),
-_c(U+214F, "โ…", e2858f),
-_c(U+2150, "โ…", e28590),
-_c(U+2151, "โ…‘", e28591),
-_c(U+2152, "โ…’", e28592),
-_c(U+2153, "โ…“", e28593),
-_c(U+2154, "โ…”", e28594),
-_c(U+2155, "โ…•", e28595),
-_c(U+2156, "โ…–", e28596),
-_c(U+2157, "โ…—", e28597),
-_c(U+2158, "โ…˜", e28598),
-_c(U+2159, "โ…™", e28599),
-_c(U+215A, "โ…š", e2859a),
-_c(U+215B, "โ…›", e2859b),
-_c(U+215C, "โ…œ", e2859c),
-_c(U+215D, "โ…", e2859d),
-_c(U+215E, "โ…ž", e2859e),
-_c(U+215F, "โ…Ÿ", e2859f),
-_c(U+2160, "โ… ", e285a0),
-_c(U+2161, "โ…ก", e285a1),
-_c(U+2162, "โ…ข", e285a2),
-_c(U+2163, "โ…ฃ", e285a3),
-_c(U+2164, "โ…ค", e285a4),
-_c(U+2165, "โ…ฅ", e285a5),
-_c(U+2166, "โ…ฆ", e285a6),
-_c(U+2167, "โ…ง", e285a7),
-_c(U+2168, "โ…จ", e285a8),
-_c(U+2169, "โ…ฉ", e285a9),
-_c(U+216A, "โ…ช", e285aa),
-_c(U+216B, "โ…ซ", e285ab),
-_c(U+216C, "โ…ฌ", e285ac),
-_c(U+216D, "โ…ญ", e285ad),
-_c(U+216E, "โ…ฎ", e285ae),
-_c(U+216F, "โ…ฏ", e285af),
-_c(U+2170, "โ…ฐ", e285b0),
-_c(U+2171, "โ…ฑ", e285b1),
-_c(U+2172, "โ…ฒ", e285b2),
-_c(U+2173, "โ…ณ", e285b3),
-_c(U+2174, "โ…ด", e285b4),
-_c(U+2175, "โ…ต", e285b5),
-_c(U+2176, "โ…ถ", e285b6),
-_c(U+2177, "โ…ท", e285b7),
-_c(U+2178, "โ…ธ", e285b8),
-_c(U+2179, "โ…น", e285b9),
-_c(U+217A, "โ…บ", e285ba),
-_c(U+217B, "โ…ป", e285bb),
-_c(U+217C, "โ…ผ", e285bc),
-_c(U+217D, "โ…ฝ", e285bd),
-_c(U+217E, "โ…พ", e285be),
-_c(U+217F, "โ…ฟ", e285bf),
-_c(U+2180, "โ†€", e28680),
-_c(U+2181, "โ†", e28681),
-_c(U+2182, "โ†‚", e28682),
-_c(U+2183, "โ†ƒ", e28683),
-_c(U+2184, "โ†„", e28684),
-_c(U+2185, "โ†…", e28685),
-_c(U+2186, "โ††", e28686),
-_c(U+2187, "โ†‡", e28687),
-_c(U+2188, "โ†ˆ", e28688),
-_c(U+2189, "โ†‰", e28689),
-_c(U+218A, "โ†Š", e2868a),
-_c(U+218B, "โ†‹", e2868b),
-_c(U+218C, "โ†Œ", e2868c),
-_c(U+218D, "โ†", e2868d),
-_c(U+218E, "โ†Ž", e2868e),
-_c(U+218F, "โ†", e2868f),
-_c(U+2190, "โ†", e28690),
-_c(U+2191, "โ†‘", e28691),
-_c(U+2192, "โ†’", e28692),
-_c(U+2193, "โ†“", e28693),
-_c(U+2194, "โ†”", e28694),
-_c(U+2195, "โ†•", e28695),
-_c(U+2196, "โ†–", e28696),
-_c(U+2197, "โ†—", e28697),
-_c(U+2198, "โ†˜", e28698),
-_c(U+2199, "โ†™", e28699),
-_c(U+219A, "โ†š", e2869a),
-_c(U+219B, "โ†›", e2869b),
-_c(U+219C, "โ†œ", e2869c),
-_c(U+219D, "โ†", e2869d),
-_c(U+219E, "โ†ž", e2869e),
-_c(U+219F, "โ†Ÿ", e2869f),
-_c(U+21A0, "โ† ", e286a0),
-_c(U+21A1, "โ†ก", e286a1),
-_c(U+21A2, "โ†ข", e286a2),
-_c(U+21A3, "โ†ฃ", e286a3),
-_c(U+21A4, "โ†ค", e286a4),
-_c(U+21A5, "โ†ฅ", e286a5),
-_c(U+21A6, "โ†ฆ", e286a6),
-_c(U+21A7, "โ†ง", e286a7),
-_c(U+21A8, "โ†จ", e286a8),
-_c(U+21A9, "โ†ฉ", e286a9),
-_c(U+21AA, "โ†ช", e286aa),
-_c(U+21AB, "โ†ซ", e286ab),
-_c(U+21AC, "โ†ฌ", e286ac),
-_c(U+21AD, "โ†ญ", e286ad),
-_c(U+21AE, "โ†ฎ", e286ae),
-_c(U+21AF, "โ†ฏ", e286af),
-_c(U+21B0, "โ†ฐ", e286b0),
-_c(U+21B1, "โ†ฑ", e286b1),
-_c(U+21B2, "โ†ฒ", e286b2),
-_c(U+21B3, "โ†ณ", e286b3),
-_c(U+21B4, "โ†ด", e286b4),
-_c(U+21B5, "โ†ต", e286b5),
-_c(U+21B6, "โ†ถ", e286b6),
-_c(U+21B7, "โ†ท", e286b7),
-_c(U+21B8, "โ†ธ", e286b8),
-_c(U+21B9, "โ†น", e286b9),
-_c(U+21BA, "โ†บ", e286ba),
-_c(U+21BB, "โ†ป", e286bb),
-_c(U+21BC, "โ†ผ", e286bc),
-_c(U+21BD, "โ†ฝ", e286bd),
-_c(U+21BE, "โ†พ", e286be),
-_c(U+21BF, "โ†ฟ", e286bf),
-_c(U+21C0, "โ‡€", e28780),
-_c(U+21C1, "โ‡", e28781),
-_c(U+21C2, "โ‡‚", e28782),
-_c(U+21C3, "โ‡ƒ", e28783),
-_c(U+21C4, "โ‡„", e28784),
-_c(U+21C5, "โ‡…", e28785),
-_c(U+21C6, "โ‡†", e28786),
-_c(U+21C7, "โ‡‡", e28787),
-_c(U+21C8, "โ‡ˆ", e28788),
-_c(U+21C9, "โ‡‰", e28789),
-_c(U+21CA, "โ‡Š", e2878a),
-_c(U+21CB, "โ‡‹", e2878b),
-_c(U+21CC, "โ‡Œ", e2878c),
-_c(U+21CD, "โ‡", e2878d),
-_c(U+21CE, "โ‡Ž", e2878e),
-_c(U+21CF, "โ‡", e2878f),
-_c(U+21D0, "โ‡", e28790),
-_c(U+21D1, "โ‡‘", e28791),
-_c(U+21D2, "โ‡’", e28792),
-_c(U+21D3, "โ‡“", e28793),
-_c(U+21D4, "โ‡”", e28794),
-_c(U+21D5, "โ‡•", e28795),
-_c(U+21D6, "โ‡–", e28796),
-_c(U+21D7, "โ‡—", e28797),
-_c(U+21D8, "โ‡˜", e28798),
-_c(U+21D9, "โ‡™", e28799),
-_c(U+21DA, "โ‡š", e2879a),
-_c(U+21DB, "โ‡›", e2879b),
-_c(U+21DC, "โ‡œ", e2879c),
-_c(U+21DD, "โ‡", e2879d),
-_c(U+21DE, "โ‡ž", e2879e),
-_c(U+21DF, "โ‡Ÿ", e2879f),
-_c(U+21E0, "โ‡ ", e287a0),
-_c(U+21E1, "โ‡ก", e287a1),
-_c(U+21E2, "โ‡ข", e287a2),
-_c(U+21E3, "โ‡ฃ", e287a3),
-_c(U+21E4, "โ‡ค", e287a4),
-_c(U+21E5, "โ‡ฅ", e287a5),
-_c(U+21E6, "โ‡ฆ", e287a6),
-_c(U+21E7, "โ‡ง", e287a7),
-_c(U+21E8, "โ‡จ", e287a8),
-_c(U+21E9, "โ‡ฉ", e287a9),
-_c(U+21EA, "โ‡ช", e287aa),
-_c(U+21EB, "โ‡ซ", e287ab),
-_c(U+21EC, "โ‡ฌ", e287ac),
-_c(U+21ED, "โ‡ญ", e287ad),
-_c(U+21EE, "โ‡ฎ", e287ae),
-_c(U+21EF, "โ‡ฏ", e287af),
-_c(U+21F0, "โ‡ฐ", e287b0),
-_c(U+21F1, "โ‡ฑ", e287b1),
-_c(U+21F2, "โ‡ฒ", e287b2),
-_c(U+21F3, "โ‡ณ", e287b3),
-_c(U+21F4, "โ‡ด", e287b4),
-_c(U+21F5, "โ‡ต", e287b5),
-_c(U+21F6, "โ‡ถ", e287b6),
-_c(U+21F7, "โ‡ท", e287b7),
-_c(U+21F8, "โ‡ธ", e287b8),
-_c(U+21F9, "โ‡น", e287b9),
-_c(U+21FA, "โ‡บ", e287ba),
-_c(U+21FB, "โ‡ป", e287bb),
-_c(U+21FC, "โ‡ผ", e287bc),
-_c(U+21FD, "โ‡ฝ", e287bd),
-_c(U+21FE, "โ‡พ", e287be),
-_c(U+21FF, "โ‡ฟ", e287bf),
-_c(U+2200, "โˆ€", e28880),
-_c(U+2201, "โˆ", e28881),
-_c(U+2202, "โˆ‚", e28882),
-_c(U+2203, "โˆƒ", e28883),
-_c(U+2204, "โˆ„", e28884),
-_c(U+2205, "โˆ…", e28885),
-_c(U+2206, "โˆ†", e28886),
-_c(U+2207, "โˆ‡", e28887),
-_c(U+2208, "โˆˆ", e28888),
-_c(U+2209, "โˆ‰", e28889),
-_c(U+220A, "โˆŠ", e2888a),
-_c(U+220B, "โˆ‹", e2888b),
-_c(U+220C, "โˆŒ", e2888c),
-_c(U+220D, "โˆ", e2888d),
-_c(U+220E, "โˆŽ", e2888e),
-_c(U+220F, "โˆ", e2888f),
-_c(U+2210, "โˆ", e28890),
-_c(U+2211, "โˆ‘", e28891),
-_c(U+2212, "โˆ’", e28892),
-_c(U+2213, "โˆ“", e28893),
-_c(U+2214, "โˆ”", e28894),
-_c(U+2215, "โˆ•", e28895),
-_c(U+2216, "โˆ–", e28896),
-_c(U+2217, "โˆ—", e28897),
-_c(U+2218, "โˆ˜", e28898),
-_c(U+2219, "โˆ™", e28899),
-_c(U+221A, "โˆš", e2889a),
-_c(U+221B, "โˆ›", e2889b),
-_c(U+221C, "โˆœ", e2889c),
-_c(U+221D, "โˆ", e2889d),
-_c(U+221E, "โˆž", e2889e),
-_c(U+221F, "โˆŸ", e2889f),
-_c(U+2220, "โˆ ", e288a0),
-_c(U+2221, "โˆก", e288a1),
-_c(U+2222, "โˆข", e288a2),
-_c(U+2223, "โˆฃ", e288a3),
-_c(U+2224, "โˆค", e288a4),
-_c(U+2225, "โˆฅ", e288a5),
-_c(U+2226, "โˆฆ", e288a6),
-_c(U+2227, "โˆง", e288a7),
-_c(U+2228, "โˆจ", e288a8),
-_c(U+2229, "โˆฉ", e288a9),
-_c(U+222A, "โˆช", e288aa),
-_c(U+222B, "โˆซ", e288ab),
-_c(U+222C, "โˆฌ", e288ac),
-_c(U+222D, "โˆญ", e288ad),
-_c(U+222E, "โˆฎ", e288ae),
-_c(U+222F, "โˆฏ", e288af),
-_c(U+2230, "โˆฐ", e288b0),
-_c(U+2231, "โˆฑ", e288b1),
-_c(U+2232, "โˆฒ", e288b2),
-_c(U+2233, "โˆณ", e288b3),
-_c(U+2234, "โˆด", e288b4),
-_c(U+2235, "โˆต", e288b5),
-_c(U+2236, "โˆถ", e288b6),
-_c(U+2237, "โˆท", e288b7),
-_c(U+2238, "โˆธ", e288b8),
-_c(U+2239, "โˆน", e288b9),
-_c(U+223A, "โˆบ", e288ba),
-_c(U+223B, "โˆป", e288bb),
-_c(U+223C, "โˆผ", e288bc),
-_c(U+223D, "โˆฝ", e288bd),
-_c(U+223E, "โˆพ", e288be),
-_c(U+223F, "โˆฟ", e288bf),
-_c(U+2240, "โ‰€", e28980),
-_c(U+2241, "โ‰", e28981),
-_c(U+2242, "โ‰‚", e28982),
-_c(U+2243, "โ‰ƒ", e28983),
-_c(U+2244, "โ‰„", e28984),
-_c(U+2245, "โ‰…", e28985),
-_c(U+2246, "โ‰†", e28986),
-_c(U+2247, "โ‰‡", e28987),
-_c(U+2248, "โ‰ˆ", e28988),
-_c(U+2249, "โ‰‰", e28989),
-_c(U+224A, "โ‰Š", e2898a),
-_c(U+224B, "โ‰‹", e2898b),
-_c(U+224C, "โ‰Œ", e2898c),
-_c(U+224D, "โ‰", e2898d),
-_c(U+224E, "โ‰Ž", e2898e),
-_c(U+224F, "โ‰", e2898f),
-_c(U+2250, "โ‰", e28990),
-_c(U+2251, "โ‰‘", e28991),
-_c(U+2252, "โ‰’", e28992),
-_c(U+2253, "โ‰“", e28993),
-_c(U+2254, "โ‰”", e28994),
-_c(U+2255, "โ‰•", e28995),
-_c(U+2256, "โ‰–", e28996),
-_c(U+2257, "โ‰—", e28997),
-_c(U+2258, "โ‰˜", e28998),
-_c(U+2259, "โ‰™", e28999),
-_c(U+225A, "โ‰š", e2899a),
-_c(U+225B, "โ‰›", e2899b),
-_c(U+225C, "โ‰œ", e2899c),
-_c(U+225D, "โ‰", e2899d),
-_c(U+225E, "โ‰ž", e2899e),
-_c(U+225F, "โ‰Ÿ", e2899f),
-_c(U+2260, "โ‰ ", e289a0),
-_c(U+2261, "โ‰ก", e289a1),
-_c(U+2262, "โ‰ข", e289a2),
-_c(U+2263, "โ‰ฃ", e289a3),
-_c(U+2264, "โ‰ค", e289a4),
-_c(U+2265, "โ‰ฅ", e289a5),
-_c(U+2266, "โ‰ฆ", e289a6),
-_c(U+2267, "โ‰ง", e289a7),
-_c(U+2268, "โ‰จ", e289a8),
-_c(U+2269, "โ‰ฉ", e289a9),
-_c(U+226A, "โ‰ช", e289aa),
-_c(U+226B, "โ‰ซ", e289ab),
-_c(U+226C, "โ‰ฌ", e289ac),
-_c(U+226D, "โ‰ญ", e289ad),
-_c(U+226E, "โ‰ฎ", e289ae),
-_c(U+226F, "โ‰ฏ", e289af),
-_c(U+2270, "โ‰ฐ", e289b0),
-_c(U+2271, "โ‰ฑ", e289b1),
-_c(U+2272, "โ‰ฒ", e289b2),
-_c(U+2273, "โ‰ณ", e289b3),
-_c(U+2274, "โ‰ด", e289b4),
-_c(U+2275, "โ‰ต", e289b5),
-_c(U+2276, "โ‰ถ", e289b6),
-_c(U+2277, "โ‰ท", e289b7),
-_c(U+2278, "โ‰ธ", e289b8),
-_c(U+2279, "โ‰น", e289b9),
-_c(U+227A, "โ‰บ", e289ba),
-_c(U+227B, "โ‰ป", e289bb),
-_c(U+227C, "โ‰ผ", e289bc),
-_c(U+227D, "โ‰ฝ", e289bd),
-_c(U+227E, "โ‰พ", e289be),
-_c(U+227F, "โ‰ฟ", e289bf),
-_c(U+2280, "โŠ€", e28a80),
-_c(U+2281, "โЁ", e28a81),
-_c(U+2282, "โŠ‚", e28a82),
-_c(U+2283, "โŠƒ", e28a83),
-_c(U+2284, "โŠ„", e28a84),
-_c(U+2285, "โŠ…", e28a85),
-_c(U+2286, "โІ", e28a86),
-_c(U+2287, "โЇ", e28a87),
-_c(U+2288, "โŠˆ", e28a88),
-_c(U+2289, "โЉ", e28a89),
-_c(U+228A, "โŠŠ", e28a8a),
-_c(U+228B, "โŠ‹", e28a8b),
-_c(U+228C, "โŠŒ", e28a8c),
-_c(U+228D, "โŠ", e28a8d),
-_c(U+228E, "โŠŽ", e28a8e),
-_c(U+228F, "โŠ", e28a8f),
-_c(U+2290, "โА", e28a90),
-_c(U+2291, "โŠ‘", e28a91),
-_c(U+2292, "โŠ’", e28a92),
-_c(U+2293, "โŠ“", e28a93),
-_c(U+2294, "โŠ”", e28a94),
-_c(U+2295, "โŠ•", e28a95),
-_c(U+2296, "โŠ–", e28a96),
-_c(U+2297, "โŠ—", e28a97),
-_c(U+2298, "โŠ˜", e28a98),
-_c(U+2299, "โŠ™", e28a99),
-_c(U+229A, "โŠš", e28a9a),
-_c(U+229B, "โŠ›", e28a9b),
-_c(U+229C, "โŠœ", e28a9c),
-_c(U+229D, "โŠ", e28a9d),
-_c(U+229E, "โŠž", e28a9e),
-_c(U+229F, "โŠŸ", e28a9f),
-_c(U+22A0, "โŠ ", e28aa0),
-_c(U+22A1, "โŠก", e28aa1),
-_c(U+22A2, "โŠข", e28aa2),
-_c(U+22A3, "โŠฃ", e28aa3),
-_c(U+22A4, "โŠค", e28aa4),
-_c(U+22A5, "โŠฅ", e28aa5),
-_c(U+22A6, "โŠฆ", e28aa6),
-_c(U+22A7, "โŠง", e28aa7),
-_c(U+22A8, "โŠจ", e28aa8),
-_c(U+22A9, "โŠฉ", e28aa9),
-_c(U+22AA, "โŠช", e28aaa),
-_c(U+22AB, "โŠซ", e28aab),
-_c(U+22AC, "โŠฌ", e28aac),
-_c(U+22AD, "โŠญ", e28aad),
-_c(U+22AE, "โŠฎ", e28aae),
-_c(U+22AF, "โŠฏ", e28aaf),
-_c(U+22B0, "โŠฐ", e28ab0),
-_c(U+22B1, "โŠฑ", e28ab1),
-_c(U+22B2, "โŠฒ", e28ab2),
-_c(U+22B3, "โŠณ", e28ab3),
-_c(U+22B4, "โŠด", e28ab4),
-_c(U+22B5, "โŠต", e28ab5),
-_c(U+22B6, "โŠถ", e28ab6),
-_c(U+22B7, "โŠท", e28ab7),
-_c(U+22B8, "โŠธ", e28ab8),
-_c(U+22B9, "โŠน", e28ab9),
-_c(U+22BA, "โŠบ", e28aba),
-_c(U+22BB, "โŠป", e28abb),
-_c(U+22BC, "โŠผ", e28abc),
-_c(U+22BD, "โŠฝ", e28abd),
-_c(U+22BE, "โŠพ", e28abe),
-_c(U+22BF, "โŠฟ", e28abf),
-_c(U+22C0, "โ‹€", e28b80),
-_c(U+22C1, "โ‹", e28b81),
-_c(U+22C2, "โ‹‚", e28b82),
-_c(U+22C3, "โ‹ƒ", e28b83),
-_c(U+22C4, "โ‹„", e28b84),
-_c(U+22C5, "โ‹…", e28b85),
-_c(U+22C6, "โ‹†", e28b86),
-_c(U+22C7, "โ‹‡", e28b87),
-_c(U+22C8, "โ‹ˆ", e28b88),
-_c(U+22C9, "โ‹‰", e28b89),
-_c(U+22CA, "โ‹Š", e28b8a),
-_c(U+22CB, "โ‹‹", e28b8b),
-_c(U+22CC, "โ‹Œ", e28b8c),
-_c(U+22CD, "โ‹", e28b8d),
-_c(U+22CE, "โ‹Ž", e28b8e),
-_c(U+22CF, "โ‹", e28b8f),
-_c(U+22D0, "โ‹", e28b90),
-_c(U+22D1, "โ‹‘", e28b91),
-_c(U+22D2, "โ‹’", e28b92),
-_c(U+22D3, "โ‹“", e28b93),
-_c(U+22D4, "โ‹”", e28b94),
-_c(U+22D5, "โ‹•", e28b95),
-_c(U+22D6, "โ‹–", e28b96),
-_c(U+22D7, "โ‹—", e28b97),
-_c(U+22D8, "โ‹˜", e28b98),
-_c(U+22D9, "โ‹™", e28b99),
-_c(U+22DA, "โ‹š", e28b9a),
-_c(U+22DB, "โ‹›", e28b9b),
-_c(U+22DC, "โ‹œ", e28b9c),
-_c(U+22DD, "โ‹", e28b9d),
-_c(U+22DE, "โ‹ž", e28b9e),
-_c(U+22DF, "โ‹Ÿ", e28b9f),
-_c(U+22E0, "โ‹ ", e28ba0),
-_c(U+22E1, "โ‹ก", e28ba1),
-_c(U+22E2, "โ‹ข", e28ba2),
-_c(U+22E3, "โ‹ฃ", e28ba3),
-_c(U+22E4, "โ‹ค", e28ba4),
-_c(U+22E5, "โ‹ฅ", e28ba5),
-_c(U+22E6, "โ‹ฆ", e28ba6),
-_c(U+22E7, "โ‹ง", e28ba7),
-_c(U+22E8, "โ‹จ", e28ba8),
-_c(U+22E9, "โ‹ฉ", e28ba9),
-_c(U+22EA, "โ‹ช", e28baa),
-_c(U+22EB, "โ‹ซ", e28bab),
-_c(U+22EC, "โ‹ฌ", e28bac),
-_c(U+22ED, "โ‹ญ", e28bad),
-_c(U+22EE, "โ‹ฎ", e28bae),
-_c(U+22EF, "โ‹ฏ", e28baf),
-_c(U+22F0, "โ‹ฐ", e28bb0),
-_c(U+22F1, "โ‹ฑ", e28bb1),
-_c(U+22F2, "โ‹ฒ", e28bb2),
-_c(U+22F3, "โ‹ณ", e28bb3),
-_c(U+22F4, "โ‹ด", e28bb4),
-_c(U+22F5, "โ‹ต", e28bb5),
-_c(U+22F6, "โ‹ถ", e28bb6),
-_c(U+22F7, "โ‹ท", e28bb7),
-_c(U+22F8, "โ‹ธ", e28bb8),
-_c(U+22F9, "โ‹น", e28bb9),
-_c(U+22FA, "โ‹บ", e28bba),
-_c(U+22FB, "โ‹ป", e28bbb),
-_c(U+22FC, "โ‹ผ", e28bbc),
-_c(U+22FD, "โ‹ฝ", e28bbd),
-_c(U+22FE, "โ‹พ", e28bbe),
-_c(U+22FF, "โ‹ฟ", e28bbf),
-_c(U+2300, "โŒ€", e28c80),
-_c(U+2301, "โŒ", e28c81),
-_c(U+2302, "โŒ‚", e28c82),
-_c(U+2303, "โŒƒ", e28c83),
-_c(U+2304, "โŒ„", e28c84),
-_c(U+2305, "โŒ…", e28c85),
-_c(U+2306, "โŒ†", e28c86),
-_c(U+2307, "โŒ‡", e28c87),
-_c(U+2308, "โŒˆ", e28c88),
-_c(U+2309, "โŒ‰", e28c89),
-_c(U+230A, "โŒŠ", e28c8a),
-_c(U+230B, "โŒ‹", e28c8b),
-_c(U+230C, "โŒŒ", e28c8c),
-_c(U+230D, "โŒ", e28c8d),
-_c(U+230E, "โŒŽ", e28c8e),
-_c(U+230F, "โŒ", e28c8f),
-_c(U+2310, "โŒ", e28c90),
-_c(U+2311, "โŒ‘", e28c91),
-_c(U+2312, "โŒ’", e28c92),
-_c(U+2313, "โŒ“", e28c93),
-_c(U+2314, "โŒ”", e28c94),
-_c(U+2315, "โŒ•", e28c95),
-_c(U+2316, "โŒ–", e28c96),
-_c(U+2317, "โŒ—", e28c97),
-_c(U+2318, "โŒ˜", e28c98),
-_c(U+2319, "โŒ™", e28c99),
-_c(U+231A, "โŒš", e28c9a),
-_c(U+231B, "โŒ›", e28c9b),
-_c(U+231C, "โŒœ", e28c9c),
-_c(U+231D, "โŒ", e28c9d),
-_c(U+231E, "โŒž", e28c9e),
-_c(U+231F, "โŒŸ", e28c9f),
-_c(U+2320, "โŒ ", e28ca0),
-_c(U+2321, "โŒก", e28ca1),
-_c(U+2322, "โŒข", e28ca2),
-_c(U+2323, "โŒฃ", e28ca3),
-_c(U+2324, "โŒค", e28ca4),
-_c(U+2325, "โŒฅ", e28ca5),
-_c(U+2326, "โŒฆ", e28ca6),
-_c(U+2327, "โŒง", e28ca7),
-_c(U+2328, "โŒจ", e28ca8),
-_c(U+2329, "โŒฉ", e28ca9),
-_c(U+232A, "โŒช", e28caa),
-_c(U+232B, "โŒซ", e28cab),
-_c(U+232C, "โŒฌ", e28cac),
-_c(U+232D, "โŒญ", e28cad),
-_c(U+232E, "โŒฎ", e28cae),
-_c(U+232F, "โŒฏ", e28caf),
-_c(U+2330, "โŒฐ", e28cb0),
-_c(U+2331, "โŒฑ", e28cb1),
-_c(U+2332, "โŒฒ", e28cb2),
-_c(U+2333, "โŒณ", e28cb3),
-_c(U+2334, "โŒด", e28cb4),
-_c(U+2335, "โŒต", e28cb5),
-_c(U+2336, "โŒถ", e28cb6),
-_c(U+2337, "โŒท", e28cb7),
-_c(U+2338, "โŒธ", e28cb8),
-_c(U+2339, "โŒน", e28cb9),
-_c(U+233A, "โŒบ", e28cba),
-_c(U+233B, "โŒป", e28cbb),
-_c(U+233C, "โŒผ", e28cbc),
-_c(U+233D, "โŒฝ", e28cbd),
-_c(U+233E, "โŒพ", e28cbe),
-_c(U+233F, "โŒฟ", e28cbf),
-_c(U+2340, "โ€", e28d80),
-_c(U+2341, "โ", e28d81),
-_c(U+2342, "โ‚", e28d82),
-_c(U+2343, "โƒ", e28d83),
-_c(U+2344, "โ„", e28d84),
-_c(U+2345, "โ…", e28d85),
-_c(U+2346, "โ†", e28d86),
-_c(U+2347, "โ‡", e28d87),
-_c(U+2348, "โˆ", e28d88),
-_c(U+2349, "โ‰", e28d89),
-_c(U+234A, "โŠ", e28d8a),
-_c(U+234B, "โ‹", e28d8b),
-_c(U+234C, "โŒ", e28d8c),
-_c(U+234D, "โ", e28d8d),
-_c(U+234E, "โŽ", e28d8e),
-_c(U+234F, "โ", e28d8f),
-_c(U+2350, "โ", e28d90),
-_c(U+2351, "โ‘", e28d91),
-_c(U+2352, "โ’", e28d92),
-_c(U+2353, "โ“", e28d93),
-_c(U+2354, "โ”", e28d94),
-_c(U+2355, "โ•", e28d95),
-_c(U+2356, "โ–", e28d96),
-_c(U+2357, "โ—", e28d97),
-_c(U+2358, "โ˜", e28d98),
-_c(U+2359, "โ™", e28d99),
-_c(U+235A, "โš", e28d9a),
-_c(U+235B, "โ›", e28d9b),
-_c(U+235C, "โœ", e28d9c),
-_c(U+235D, "โ", e28d9d),
-_c(U+235E, "โž", e28d9e),
-_c(U+235F, "โŸ", e28d9f),
-_c(U+2360, "โ ", e28da0),
-_c(U+2361, "โก", e28da1),
-_c(U+2362, "โข", e28da2),
-_c(U+2363, "โฃ", e28da3),
-_c(U+2364, "โค", e28da4),
-_c(U+2365, "โฅ", e28da5),
-_c(U+2366, "โฆ", e28da6),
-_c(U+2367, "โง", e28da7),
-_c(U+2368, "โจ", e28da8),
-_c(U+2369, "โฉ", e28da9),
-_c(U+236A, "โช", e28daa),
-_c(U+236B, "โซ", e28dab),
-_c(U+236C, "โฌ", e28dac),
-_c(U+236D, "โญ", e28dad),
-_c(U+236E, "โฎ", e28dae),
-_c(U+236F, "โฏ", e28daf),
-_c(U+2370, "โฐ", e28db0),
-_c(U+2371, "โฑ", e28db1),
-_c(U+2372, "โฒ", e28db2),
-_c(U+2373, "โณ", e28db3),
-_c(U+2374, "โด", e28db4),
-_c(U+2375, "โต", e28db5),
-_c(U+2376, "โถ", e28db6),
-_c(U+2377, "โท", e28db7),
-_c(U+2378, "โธ", e28db8),
-_c(U+2379, "โน", e28db9),
-_c(U+237A, "โบ", e28dba),
-_c(U+237B, "โป", e28dbb),
-_c(U+237C, "โผ", e28dbc),
-_c(U+237D, "โฝ", e28dbd),
-_c(U+237E, "โพ", e28dbe),
-_c(U+237F, "โฟ", e28dbf),
-_c(U+2380, "โŽ€", e28e80),
-_c(U+2381, "โށ", e28e81),
-_c(U+2382, "โŽ‚", e28e82),
-_c(U+2383, "โŽƒ", e28e83),
-_c(U+2384, "โŽ„", e28e84),
-_c(U+2385, "โŽ…", e28e85),
-_c(U+2386, "โކ", e28e86),
-_c(U+2387, "โއ", e28e87),
-_c(U+2388, "โŽˆ", e28e88),
-_c(U+2389, "โމ", e28e89),
-_c(U+238A, "โŽŠ", e28e8a),
-_c(U+238B, "โŽ‹", e28e8b),
-_c(U+238C, "โŽŒ", e28e8c),
-_c(U+238D, "โŽ", e28e8d),
-_c(U+238E, "โŽŽ", e28e8e),
-_c(U+238F, "โŽ", e28e8f),
-_c(U+2390, "โސ", e28e90),
-_c(U+2391, "โŽ‘", e28e91),
-_c(U+2392, "โŽ’", e28e92),
-_c(U+2393, "โŽ“", e28e93),
-_c(U+2394, "โŽ”", e28e94),
-_c(U+2395, "โŽ•", e28e95),
-_c(U+2396, "โŽ–", e28e96),
-_c(U+2397, "โŽ—", e28e97),
-_c(U+2398, "โŽ˜", e28e98),
-_c(U+2399, "โŽ™", e28e99),
-_c(U+239A, "โŽš", e28e9a),
-_c(U+239B, "โŽ›", e28e9b),
-_c(U+239C, "โŽœ", e28e9c),
-_c(U+239D, "โŽ", e28e9d),
-_c(U+239E, "โŽž", e28e9e),
-_c(U+239F, "โŽŸ", e28e9f),
-_c(U+23A0, "โŽ ", e28ea0),
-_c(U+23A1, "โŽก", e28ea1),
-_c(U+23A2, "โŽข", e28ea2),
-_c(U+23A3, "โŽฃ", e28ea3),
-_c(U+23A4, "โŽค", e28ea4),
-_c(U+23A5, "โŽฅ", e28ea5),
-_c(U+23A6, "โŽฆ", e28ea6),
-_c(U+23A7, "โŽง", e28ea7),
-_c(U+23A8, "โŽจ", e28ea8),
-_c(U+23A9, "โŽฉ", e28ea9),
-_c(U+23AA, "โŽช", e28eaa),
-_c(U+23AB, "โŽซ", e28eab),
-_c(U+23AC, "โŽฌ", e28eac),
-_c(U+23AD, "โŽญ", e28ead),
-_c(U+23AE, "โŽฎ", e28eae),
-_c(U+23AF, "โŽฏ", e28eaf),
-_c(U+23B0, "โŽฐ", e28eb0),
-_c(U+23B1, "โŽฑ", e28eb1),
-_c(U+23B2, "โŽฒ", e28eb2),
-_c(U+23B3, "โŽณ", e28eb3),
-_c(U+23B4, "โŽด", e28eb4),
-_c(U+23B5, "โŽต", e28eb5),
-_c(U+23B6, "โŽถ", e28eb6),
-_c(U+23B7, "โŽท", e28eb7),
-_c(U+23B8, "โŽธ", e28eb8),
-_c(U+23B9, "โŽน", e28eb9),
-_c(U+23BA, "โŽบ", e28eba),
-_c(U+23BB, "โŽป", e28ebb),
-_c(U+23BC, "โŽผ", e28ebc),
-_c(U+23BD, "โŽฝ", e28ebd),
-_c(U+23BE, "โŽพ", e28ebe),
-_c(U+23BF, "โŽฟ", e28ebf),
-_c(U+23C0, "โ€", e28f80),
-_c(U+23C1, "โ", e28f81),
-_c(U+23C2, "โ‚", e28f82),
-_c(U+23C3, "โƒ", e28f83),
-_c(U+23C4, "โ„", e28f84),
-_c(U+23C5, "โ…", e28f85),
-_c(U+23C6, "โ†", e28f86),
-_c(U+23C7, "โ‡", e28f87),
-_c(U+23C8, "โˆ", e28f88),
-_c(U+23C9, "โ‰", e28f89),
-_c(U+23CA, "โŠ", e28f8a),
-_c(U+23CB, "โ‹", e28f8b),
-_c(U+23CC, "โŒ", e28f8c),
-_c(U+23CD, "โ", e28f8d),
-_c(U+23CE, "โŽ", e28f8e),
-_c(U+23CF, "โ", e28f8f),
-_c(U+23D0, "โ", e28f90),
-_c(U+23D1, "โ‘", e28f91),
-_c(U+23D2, "โ’", e28f92),
-_c(U+23D3, "โ“", e28f93),
-_c(U+23D4, "โ”", e28f94),
-_c(U+23D5, "โ•", e28f95),
-_c(U+23D6, "โ–", e28f96),
-_c(U+23D7, "โ—", e28f97),
-_c(U+23D8, "โ˜", e28f98),
-_c(U+23D9, "โ™", e28f99),
-_c(U+23DA, "โš", e28f9a),
-_c(U+23DB, "โ›", e28f9b),
-_c(U+23DC, "โœ", e28f9c),
-_c(U+23DD, "โ", e28f9d),
-_c(U+23DE, "โž", e28f9e),
-_c(U+23DF, "โŸ", e28f9f),
-_c(U+23E0, "โ ", e28fa0),
-_c(U+23E1, "โก", e28fa1),
-_c(U+23E2, "โข", e28fa2),
-_c(U+23E3, "โฃ", e28fa3),
-_c(U+23E4, "โค", e28fa4),
-_c(U+23E5, "โฅ", e28fa5),
-_c(U+23E6, "โฆ", e28fa6),
-_c(U+23E7, "โง", e28fa7),
-_c(U+23E8, "โจ", e28fa8),
-_c(U+23E9, "โฉ", e28fa9),
-_c(U+23EA, "โช", e28faa),
-_c(U+23EB, "โซ", e28fab),
-_c(U+23EC, "โฌ", e28fac),
-_c(U+23ED, "โญ", e28fad),
-_c(U+23EE, "โฎ", e28fae),
-_c(U+23EF, "โฏ", e28faf),
-_c(U+23F0, "โฐ", e28fb0),
-_c(U+23F1, "โฑ", e28fb1),
-_c(U+23F2, "โฒ", e28fb2),
-_c(U+23F3, "โณ", e28fb3),
-_c(U+23F4, "โด", e28fb4),
-_c(U+23F5, "โต", e28fb5),
-_c(U+23F6, "โถ", e28fb6),
-_c(U+23F7, "โท", e28fb7),
-_c(U+23F8, "โธ", e28fb8),
-_c(U+23F9, "โน", e28fb9),
-_c(U+23FA, "โบ", e28fba),
-_c(U+23FB, "โป", e28fbb),
-_c(U+23FC, "โผ", e28fbc),
-_c(U+23FD, "โฝ", e28fbd),
-_c(U+23FE, "โพ", e28fbe),
-_c(U+23FF, "โฟ", e28fbf),
-_c(U+2400, "โ€", e29080),
-_c(U+2401, "โ", e29081),
-_c(U+2402, "โ‚", e29082),
-_c(U+2403, "โƒ", e29083),
-_c(U+2404, "โ„", e29084),
-_c(U+2405, "โ…", e29085),
-_c(U+2406, "โ†", e29086),
-_c(U+2407, "โ‡", e29087),
-_c(U+2408, "โˆ", e29088),
-_c(U+2409, "โ‰", e29089),
-_c(U+240A, "โŠ", e2908a),
-_c(U+240B, "โ‹", e2908b),
-_c(U+240C, "โŒ", e2908c),
-_c(U+240D, "โ", e2908d),
-_c(U+240E, "โŽ", e2908e),
-_c(U+240F, "โ", e2908f),
-_c(U+2410, "โ", e29090),
-_c(U+2411, "โ‘", e29091),
-_c(U+2412, "โ’", e29092),
-_c(U+2413, "โ“", e29093),
-_c(U+2414, "โ”", e29094),
-_c(U+2415, "โ•", e29095),
-_c(U+2416, "โ–", e29096),
-_c(U+2417, "โ—", e29097),
-_c(U+2418, "โ˜", e29098),
-_c(U+2419, "โ™", e29099),
-_c(U+241A, "โš", e2909a),
-_c(U+241B, "โ›", e2909b),
-_c(U+241C, "โœ", e2909c),
-_c(U+241D, "โ", e2909d),
-_c(U+241E, "โž", e2909e),
-_c(U+241F, "โŸ", e2909f),
-_c(U+2420, "โ ", e290a0),
-_c(U+2421, "โก", e290a1),
-_c(U+2422, "โข", e290a2),
-_c(U+2423, "โฃ", e290a3),
-_c(U+2424, "โค", e290a4),
-_c(U+2425, "โฅ", e290a5),
-_c(U+2426, "โฆ", e290a6),
-_c(U+2427, "โง", e290a7),
-_c(U+2428, "โจ", e290a8),
-_c(U+2429, "โฉ", e290a9),
-_c(U+242A, "โช", e290aa),
-_c(U+242B, "โซ", e290ab),
-_c(U+242C, "โฌ", e290ac),
-_c(U+242D, "โญ", e290ad),
-_c(U+242E, "โฎ", e290ae),
-_c(U+242F, "โฏ", e290af),
-_c(U+2430, "โฐ", e290b0),
-_c(U+2431, "โฑ", e290b1),
-_c(U+2432, "โฒ", e290b2),
-_c(U+2433, "โณ", e290b3),
-_c(U+2434, "โด", e290b4),
-_c(U+2435, "โต", e290b5),
-_c(U+2436, "โถ", e290b6),
-_c(U+2437, "โท", e290b7),
-_c(U+2438, "โธ", e290b8),
-_c(U+2439, "โน", e290b9),
-_c(U+243A, "โบ", e290ba),
-_c(U+243B, "โป", e290bb),
-_c(U+243C, "โผ", e290bc),
-_c(U+243D, "โฝ", e290bd),
-_c(U+243E, "โพ", e290be),
-_c(U+243F, "โฟ", e290bf),
-_c(U+2440, "โ‘€", e29180),
-_c(U+2441, "โ‘", e29181),
-_c(U+2442, "โ‘‚", e29182),
-_c(U+2443, "โ‘ƒ", e29183),
-_c(U+2444, "โ‘„", e29184),
-_c(U+2445, "โ‘…", e29185),
-_c(U+2446, "โ‘†", e29186),
-_c(U+2447, "โ‘‡", e29187),
-_c(U+2448, "โ‘ˆ", e29188),
-_c(U+2449, "โ‘‰", e29189),
-_c(U+244A, "โ‘Š", e2918a),
-_c(U+244B, "โ‘‹", e2918b),
-_c(U+244C, "โ‘Œ", e2918c),
-_c(U+244D, "โ‘", e2918d),
-_c(U+244E, "โ‘Ž", e2918e),
-_c(U+244F, "โ‘", e2918f),
-_c(U+2450, "โ‘", e29190),
-_c(U+2451, "โ‘‘", e29191),
-_c(U+2452, "โ‘’", e29192),
-_c(U+2453, "โ‘“", e29193),
-_c(U+2454, "โ‘”", e29194),
-_c(U+2455, "โ‘•", e29195),
-_c(U+2456, "โ‘–", e29196),
-_c(U+2457, "โ‘—", e29197),
-_c(U+2458, "โ‘˜", e29198),
-_c(U+2459, "โ‘™", e29199),
-_c(U+245A, "โ‘š", e2919a),
-_c(U+245B, "โ‘›", e2919b),
-_c(U+245C, "โ‘œ", e2919c),
-_c(U+245D, "โ‘", e2919d),
-_c(U+245E, "โ‘ž", e2919e),
-_c(U+245F, "โ‘Ÿ", e2919f),
-_c(U+2460, "โ‘ ", e291a0),
-_c(U+2461, "โ‘ก", e291a1),
-_c(U+2462, "โ‘ข", e291a2),
-_c(U+2463, "โ‘ฃ", e291a3),
-_c(U+2464, "โ‘ค", e291a4),
-_c(U+2465, "โ‘ฅ", e291a5),
-_c(U+2466, "โ‘ฆ", e291a6),
-_c(U+2467, "โ‘ง", e291a7),
-_c(U+2468, "โ‘จ", e291a8),
-_c(U+2469, "โ‘ฉ", e291a9),
-_c(U+246A, "โ‘ช", e291aa),
-_c(U+246B, "โ‘ซ", e291ab),
-_c(U+246C, "โ‘ฌ", e291ac),
-_c(U+246D, "โ‘ญ", e291ad),
-_c(U+246E, "โ‘ฎ", e291ae),
-_c(U+246F, "โ‘ฏ", e291af),
-_c(U+2470, "โ‘ฐ", e291b0),
-_c(U+2471, "โ‘ฑ", e291b1),
-_c(U+2472, "โ‘ฒ", e291b2),
-_c(U+2473, "โ‘ณ", e291b3),
-_c(U+2474, "โ‘ด", e291b4),
-_c(U+2475, "โ‘ต", e291b5),
-_c(U+2476, "โ‘ถ", e291b6),
-_c(U+2477, "โ‘ท", e291b7),
-_c(U+2478, "โ‘ธ", e291b8),
-_c(U+2479, "โ‘น", e291b9),
-_c(U+247A, "โ‘บ", e291ba),
-_c(U+247B, "โ‘ป", e291bb),
-_c(U+247C, "โ‘ผ", e291bc),
-_c(U+247D, "โ‘ฝ", e291bd),
-_c(U+247E, "โ‘พ", e291be),
-_c(U+247F, "โ‘ฟ", e291bf),
-_c(U+2480, "โ’€", e29280),
-_c(U+2481, "โ’", e29281),
-_c(U+2482, "โ’‚", e29282),
-_c(U+2483, "โ’ƒ", e29283),
-_c(U+2484, "โ’„", e29284),
-_c(U+2485, "โ’…", e29285),
-_c(U+2486, "โ’†", e29286),
-_c(U+2487, "โ’‡", e29287),
-_c(U+2488, "โ’ˆ", e29288),
-_c(U+2489, "โ’‰", e29289),
-_c(U+248A, "โ’Š", e2928a),
-_c(U+248B, "โ’‹", e2928b),
-_c(U+248C, "โ’Œ", e2928c),
-_c(U+248D, "โ’", e2928d),
-_c(U+248E, "โ’Ž", e2928e),
-_c(U+248F, "โ’", e2928f),
-_c(U+2490, "โ’", e29290),
-_c(U+2491, "โ’‘", e29291),
-_c(U+2492, "โ’’", e29292),
-_c(U+2493, "โ’“", e29293),
-_c(U+2494, "โ’”", e29294),
-_c(U+2495, "โ’•", e29295),
-_c(U+2496, "โ’–", e29296),
-_c(U+2497, "โ’—", e29297),
-_c(U+2498, "โ’˜", e29298),
-_c(U+2499, "โ’™", e29299),
-_c(U+249A, "โ’š", e2929a),
-_c(U+249B, "โ’›", e2929b),
-_c(U+249C, "โ’œ", e2929c),
-_c(U+249D, "โ’", e2929d),
-_c(U+249E, "โ’ž", e2929e),
-_c(U+249F, "โ’Ÿ", e2929f),
-_c(U+2601, "โ˜", e29881),
-_c(U+2602, "โ˜‚", e29882),
-_c(U+2603, "โ˜ƒ", e29883),
-_c(U+2604, "โ˜„", e29884),
-_c(U+2605, "โ˜…", e29885),
-_c(U+2606, "โ˜†", e29886),
-_c(U+2607, "โ˜‡", e29887),
-_c(U+2608, "โ˜ˆ", e29888),
-_c(U+2609, "โ˜‰", e29889),
-_c(U+260A, "โ˜Š", e2988a),
-_c(U+260B, "โ˜‹", e2988b),
-_c(U+260C, "โ˜Œ", e2988c),
-_c(U+260D, "โ˜", e2988d),
-_c(U+260E, "โ˜Ž", e2988e),
-_c(U+260F, "โ˜", e2988f),
-_c(U+2610, "โ˜", e29890),
-_c(U+2611, "โ˜‘", e29891),
-_c(U+2612, "โ˜’", e29892),
-_c(U+2613, "โ˜“", e29893),
-_c(U+2614, "โ˜”", e29894),
-_c(U+2615, "โ˜•", e29895),
-_c(U+2616, "โ˜–", e29896),
-_c(U+2617, "โ˜—", e29897),
-_c(U+2618, "โ˜˜", e29898),
-_c(U+2619, "โ˜™", e29899),
-_c(U+261A, "โ˜š", e2989a),
-_c(U+261B, "โ˜›", e2989b),
-_c(U+261C, "โ˜œ", e2989c),
-_c(U+261D, "โ˜", e2989d),
-_c(U+261E, "โ˜ž", e2989e),
-_c(U+261F, "โ˜Ÿ", e2989f),
-_c(U+2620, "โ˜ ", e298a0),
-_c(U+2621, "โ˜ก", e298a1),
-_c(U+2622, "โ˜ข", e298a2),
-_c(U+2623, "โ˜ฃ", e298a3),
-_c(U+2624, "โ˜ค", e298a4),
-_c(U+2625, "โ˜ฅ", e298a5),
-_c(U+2626, "โ˜ฆ", e298a6),
-_c(U+2627, "โ˜ง", e298a7),
-_c(U+2628, "โ˜จ", e298a8),
-_c(U+2629, "โ˜ฉ", e298a9),
-_c(U+262A, "โ˜ช", e298aa),
-_c(U+262B, "โ˜ซ", e298ab),
-_c(U+262C, "โ˜ฌ", e298ac),
-_c(U+262D, "โ˜ญ", e298ad),
-_c(U+262E, "โ˜ฎ", e298ae),
-_c(U+262F, "โ˜ฏ", e298af),
-_c(U+2630, "โ˜ฐ", e298b0),
-_c(U+2631, "โ˜ฑ", e298b1),
-_c(U+2632, "โ˜ฒ", e298b2),
-_c(U+2633, "โ˜ณ", e298b3),
-_c(U+2634, "โ˜ด", e298b4),
-_c(U+2635, "โ˜ต", e298b5),
-_c(U+2636, "โ˜ถ", e298b6),
-_c(U+2637, "โ˜ท", e298b7),
-_c(U+2638, "โ˜ธ", e298b8),
-_c(U+2639, "โ˜น", e298b9),
-_c(U+263A, "โ˜บ", e298ba),
-_c(U+263B, "โ˜ป", e298bb),
-_c(U+263C, "โ˜ผ", e298bc),
-_c(U+263D, "โ˜ฝ", e298bd),
-_c(U+263E, "โ˜พ", e298be),
-_c(U+263F, "โ˜ฟ", e298bf),
-_c(U+2640, "โ™€", e29980),
-_c(U+2641, "โ™", e29981),
-_c(U+2642, "โ™‚", e29982),
-_c(U+2643, "โ™ƒ", e29983),
-_c(U+2644, "โ™„", e29984),
-_c(U+2645, "โ™…", e29985),
-_c(U+2646, "โ™†", e29986),
-_c(U+2647, "โ™‡", e29987),
-_c(U+2648, "โ™ˆ", e29988),
-_c(U+2649, "โ™‰", e29989),
-_c(U+264A, "โ™Š", e2998a),
-_c(U+264B, "โ™‹", e2998b),
-_c(U+264C, "โ™Œ", e2998c),
-_c(U+264D, "โ™", e2998d),
-_c(U+264E, "โ™Ž", e2998e),
-_c(U+264F, "โ™", e2998f),
-_c(U+2650, "โ™", e29990),
-_c(U+2651, "โ™‘", e29991),
-_c(U+2652, "โ™’", e29992),
-_c(U+2653, "โ™“", e29993),
-_c(U+2654, "โ™”", e29994),
-_c(U+2655, "โ™•", e29995),
-_c(U+2656, "โ™–", e29996),
-_c(U+2657, "โ™—", e29997),
-_c(U+2658, "โ™˜", e29998),
-_c(U+2659, "โ™™", e29999),
-_c(U+265A, "โ™š", e2999a),
-_c(U+265B, "โ™›", e2999b),
-_c(U+265C, "โ™œ", e2999c),
-_c(U+265D, "โ™", e2999d),
-_c(U+265E, "โ™ž", e2999e),
-_c(U+265F, "โ™Ÿ", e2999f),
-_c(U+2660, "โ™ ", e299a0),
-_c(U+2661, "โ™ก", e299a1),
-_c(U+2662, "โ™ข", e299a2),
-_c(U+2663, "โ™ฃ", e299a3),
-_c(U+2664, "โ™ค", e299a4),
-_c(U+2665, "โ™ฅ", e299a5),
-_c(U+2666, "โ™ฆ", e299a6),
-_c(U+2667, "โ™ง", e299a7),
-_c(U+2668, "โ™จ", e299a8),
-_c(U+2669, "โ™ฉ", e299a9),
-_c(U+266A, "โ™ช", e299aa),
-_c(U+266B, "โ™ซ", e299ab),
-_c(U+266C, "โ™ฌ", e299ac),
-_c(U+266D, "โ™ญ", e299ad),
-_c(U+266E, "โ™ฎ", e299ae),
-_c(U+266F, "โ™ฏ", e299af),
-_c(U+2670, "โ™ฐ", e299b0),
-_c(U+2671, "โ™ฑ", e299b1),
-_c(U+2672, "โ™ฒ", e299b2),
-_c(U+2673, "โ™ณ", e299b3),
-_c(U+2674, "โ™ด", e299b4),
-_c(U+2675, "โ™ต", e299b5),
-_c(U+2676, "โ™ถ", e299b6),
-_c(U+2677, "โ™ท", e299b7),
-_c(U+2678, "โ™ธ", e299b8),
-_c(U+2679, "โ™น", e299b9),
-_c(U+267A, "โ™บ", e299ba),
-_c(U+267B, "โ™ป", e299bb),
-_c(U+267C, "โ™ผ", e299bc),
-_c(U+267D, "โ™ฝ", e299bd),
-_c(U+267E, "โ™พ", e299be),
-_c(U+267F, "โ™ฟ", e299bf),
-_c(U+2680, "โš€", e29a80),
-_c(U+2681, "โš", e29a81),
-_c(U+2682, "โš‚", e29a82),
-_c(U+2683, "โšƒ", e29a83),
-_c(U+2684, "โš„", e29a84),
-_c(U+2685, "โš…", e29a85),
-_c(U+2686, "โš†", e29a86),
-_c(U+2687, "โš‡", e29a87),
-_c(U+2688, "โšˆ", e29a88),
-_c(U+2689, "โš‰", e29a89),
-_c(U+268A, "โšŠ", e29a8a),
-_c(U+268B, "โš‹", e29a8b),
-_c(U+268C, "โšŒ", e29a8c),
-_c(U+268D, "โš", e29a8d),
-_c(U+268E, "โšŽ", e29a8e),
-_c(U+268F, "โš", e29a8f),
-_c(U+2690, "โš", e29a90),
-_c(U+2691, "โš‘", e29a91),
-_c(U+2692, "โš’", e29a92),
-_c(U+2693, "โš“", e29a93),
-_c(U+2694, "โš”", e29a94),
-_c(U+2695, "โš•", e29a95),
-_c(U+2696, "โš–", e29a96),
-_c(U+2697, "โš—", e29a97),
-_c(U+2698, "โš˜", e29a98),
-_c(U+2699, "โš™", e29a99),
-_c(U+269A, "โšš", e29a9a),
-_c(U+269B, "โš›", e29a9b),
-_c(U+269C, "โšœ", e29a9c),
-_c(U+269D, "โš", e29a9d),
-_c(U+269E, "โšž", e29a9e),
-_c(U+269F, "โšŸ", e29a9f),
-_c(U+26A0, "โš ", e29aa0),
-_c(U+26A1, "โšก", e29aa1),
-_c(U+26A2, "โšข", e29aa2),
-_c(U+26A3, "โšฃ", e29aa3),
-_c(U+26A4, "โšค", e29aa4),
-_c(U+26A5, "โšฅ", e29aa5),
-_c(U+26A6, "โšฆ", e29aa6),
-_c(U+26A7, "โšง", e29aa7),
-_c(U+26A8, "โšจ", e29aa8),
-_c(U+26A9, "โšฉ", e29aa9),
-_c(U+26AA, "โšช", e29aaa),
-_c(U+26AB, "โšซ", e29aab),
-_c(U+26AC, "โšฌ", e29aac),
-_c(U+26AD, "โšญ", e29aad),
-_c(U+26AE, "โšฎ", e29aae),
-_c(U+26AF, "โšฏ", e29aaf),
-_c(U+26B0, "โšฐ", e29ab0),
-_c(U+26B1, "โšฑ", e29ab1),
-_c(U+26B2, "โšฒ", e29ab2),
-_c(U+26B3, "โšณ", e29ab3),
-_c(U+26B4, "โšด", e29ab4),
-_c(U+26B5, "โšต", e29ab5),
-_c(U+26B6, "โšถ", e29ab6),
-_c(U+26B7, "โšท", e29ab7),
-_c(U+26B8, "โšธ", e29ab8),
-_c(U+26B9, "โšน", e29ab9),
-_c(U+26BA, "โšบ", e29aba),
-_c(U+26BB, "โšป", e29abb),
-_c(U+26BC, "โšผ", e29abc),
-_c(U+26BD, "โšฝ", e29abd),
-_c(U+26BE, "โšพ", e29abe),
-_c(U+26BF, "โšฟ", e29abf),
-_c(U+26C0, "โ›€", e29b80),
-_c(U+26C1, "โ›", e29b81),
-_c(U+26C2, "โ›‚", e29b82),
-_c(U+26C3, "โ›ƒ", e29b83),
-_c(U+26C4, "โ›„", e29b84),
-_c(U+26C5, "โ›…", e29b85),
-_c(U+26C6, "โ›†", e29b86),
-_c(U+26C7, "โ›‡", e29b87),
-_c(U+26C8, "โ›ˆ", e29b88),
-_c(U+26C9, "โ›‰", e29b89),
-_c(U+26CA, "โ›Š", e29b8a),
-_c(U+26CB, "โ›‹", e29b8b),
-_c(U+26CC, "โ›Œ", e29b8c),
-_c(U+26CD, "โ›", e29b8d),
-_c(U+26CE, "โ›Ž", e29b8e),
-_c(U+26CF, "โ›", e29b8f),
-_c(U+26D0, "โ›", e29b90),
-_c(U+26D1, "โ›‘", e29b91),
-_c(U+26D2, "โ›’", e29b92),
-_c(U+26D3, "โ›“", e29b93),
-_c(U+26D4, "โ›”", e29b94),
-_c(U+26D5, "โ›•", e29b95),
-_c(U+26D6, "โ›–", e29b96),
-_c(U+26D7, "โ›—", e29b97),
-_c(U+26D8, "โ›˜", e29b98),
-_c(U+26D9, "โ›™", e29b99),
-_c(U+26DA, "โ›š", e29b9a),
-_c(U+26DB, "โ››", e29b9b),
-_c(U+26DC, "โ›œ", e29b9c),
-_c(U+26DD, "โ›", e29b9d),
-_c(U+26DE, "โ›ž", e29b9e),
-_c(U+26DF, "โ›Ÿ", e29b9f),
-_c(U+26E0, "โ› ", e29ba0),
-_c(U+26E1, "โ›ก", e29ba1),
-_c(U+26E2, "โ›ข", e29ba2),
-_c(U+26E3, "โ›ฃ", e29ba3),
-_c(U+26E4, "โ›ค", e29ba4),
-_c(U+26E5, "โ›ฅ", e29ba5),
-_c(U+26E6, "โ›ฆ", e29ba6),
-_c(U+26E7, "โ›ง", e29ba7),
-_c(U+26E8, "โ›จ", e29ba8),
-_c(U+26E9, "โ›ฉ", e29ba9),
-_c(U+26EA, "โ›ช", e29baa),
-_c(U+26EB, "โ›ซ", e29bab),
-_c(U+26EC, "โ›ฌ", e29bac),
-_c(U+26ED, "โ›ญ", e29bad),
-_c(U+26EE, "โ›ฎ", e29bae),
-_c(U+26EF, "โ›ฏ", e29baf),
-_c(U+26F0, "โ›ฐ", e29bb0),
-_c(U+26F1, "โ›ฑ", e29bb1),
-_c(U+26F2, "โ›ฒ", e29bb2),
-_c(U+26F3, "โ›ณ", e29bb3),
-_c(U+26F4, "โ›ด", e29bb4),
-_c(U+26F5, "โ›ต", e29bb5),
-_c(U+26F6, "โ›ถ", e29bb6),
-_c(U+26F7, "โ›ท", e29bb7),
-_c(U+26F8, "โ›ธ", e29bb8),
-_c(U+26F9, "โ›น", e29bb9),
-_c(U+26FA, "โ›บ", e29bba),
-_c(U+26FB, "โ›ป", e29bbb),
-_c(U+26FC, "โ›ผ", e29bbc),
-_c(U+26FD, "โ›ฝ", e29bbd),
-_c(U+26FE, "โ›พ", e29bbe),
-_c(U+26FF, "โ›ฟ", e29bbf),
-_c(U+2700, "โœ€", e29c80),
-_c(U+2701, "โœ", e29c81),
-_c(U+2702, "โœ‚", e29c82),
-_c(U+2703, "โœƒ", e29c83),
-_c(U+2704, "โœ„", e29c84),
-_c(U+2705, "โœ…", e29c85),
-_c(U+2706, "โœ†", e29c86),
-_c(U+2707, "โœ‡", e29c87),
-_c(U+2708, "โœˆ", e29c88),
-_c(U+2709, "โœ‰", e29c89),
-_c(U+270A, "โœŠ", e29c8a),
-_c(U+270B, "โœ‹", e29c8b),
-_c(U+270C, "โœŒ", e29c8c),
-_c(U+270D, "โœ", e29c8d),
-_c(U+270E, "โœŽ", e29c8e),
-_c(U+270F, "โœ", e29c8f),
-_c(U+2710, "โœ", e29c90),
-_c(U+2711, "โœ‘", e29c91),
-_c(U+2712, "โœ’", e29c92),
-_c(U+2713, "โœ“", e29c93),
-_c(U+2714, "โœ”", e29c94),
-_c(U+2715, "โœ•", e29c95),
-_c(U+2716, "โœ–", e29c96),
-_c(U+2717, "โœ—", e29c97),
-_c(U+2718, "โœ˜", e29c98),
-_c(U+2719, "โœ™", e29c99),
-_c(U+271A, "โœš", e29c9a),
-_c(U+271B, "โœ›", e29c9b),
-_c(U+271C, "โœœ", e29c9c),
-_c(U+271D, "โœ", e29c9d),
-_c(U+271E, "โœž", e29c9e),
-_c(U+271F, "โœŸ", e29c9f),
-_c(U+2720, "โœ ", e29ca0),
-_c(U+2721, "โœก", e29ca1),
-_c(U+2722, "โœข", e29ca2),
-_c(U+2723, "โœฃ", e29ca3),
-_c(U+2724, "โœค", e29ca4),
-_c(U+2725, "โœฅ", e29ca5),
-_c(U+2726, "โœฆ", e29ca6),
-_c(U+2727, "โœง", e29ca7),
-_c(U+2728, "โœจ", e29ca8),
-_c(U+2729, "โœฉ", e29ca9),
-_c(U+272A, "โœช", e29caa),
-_c(U+272B, "โœซ", e29cab),
-_c(U+272C, "โœฌ", e29cac),
-_c(U+272D, "โœญ", e29cad),
-_c(U+272E, "โœฎ", e29cae),
-_c(U+272F, "โœฏ", e29caf),
-_c(U+2730, "โœฐ", e29cb0),
-_c(U+2731, "โœฑ", e29cb1),
-_c(U+2732, "โœฒ", e29cb2),
-_c(U+2733, "โœณ", e29cb3),
-_c(U+2734, "โœด", e29cb4),
-_c(U+2735, "โœต", e29cb5),
-_c(U+2736, "โœถ", e29cb6),
-_c(U+2737, "โœท", e29cb7),
-_c(U+2738, "โœธ", e29cb8),
-_c(U+2739, "โœน", e29cb9),
-_c(U+273A, "โœบ", e29cba),
-_c(U+273B, "โœป", e29cbb),
-_c(U+273C, "โœผ", e29cbc),
-_c(U+273D, "โœฝ", e29cbd),
-_c(U+273E, "โœพ", e29cbe),
-_c(U+273F, "โœฟ", e29cbf),
-_c(U+2740, "โ€", e29d80),
-_c(U+2741, "โ", e29d81),
-_c(U+2742, "โ‚", e29d82),
-_c(U+2743, "โƒ", e29d83),
-_c(U+2744, "โ„", e29d84),
-_c(U+2745, "โ…", e29d85),
-_c(U+2746, "โ†", e29d86),
-_c(U+2747, "โ‡", e29d87),
-_c(U+2748, "โˆ", e29d88),
-_c(U+2749, "โ‰", e29d89),
-_c(U+274A, "โŠ", e29d8a),
-_c(U+274B, "โ‹", e29d8b),
-_c(U+274C, "โŒ", e29d8c),
-_c(U+274D, "โ", e29d8d),
-_c(U+274E, "โŽ", e29d8e),
-_c(U+274F, "โ", e29d8f),
-_c(U+2750, "โ", e29d90),
-_c(U+2751, "โ‘", e29d91),
-_c(U+2752, "โ’", e29d92),
-_c(U+2753, "โ“", e29d93),
-_c(U+2754, "โ”", e29d94),
-_c(U+2755, "โ•", e29d95),
-_c(U+2756, "โ–", e29d96),
-_c(U+2757, "โ—", e29d97),
-_c(U+2758, "โ˜", e29d98),
-_c(U+2759, "โ™", e29d99),
-_c(U+275A, "โš", e29d9a),
-_c(U+275B, "โ›", e29d9b),
-_c(U+275C, "โœ", e29d9c),
-_c(U+275D, "โ", e29d9d),
-_c(U+275E, "โž", e29d9e),
-_c(U+275F, "โŸ", e29d9f),
-_c(U+2760, "โ ", e29da0),
-_c(U+2761, "โก", e29da1),
-_c(U+2762, "โข", e29da2),
-_c(U+2763, "โฃ", e29da3),
-_c(U+2764, "โค", e29da4),
-_c(U+2765, "โฅ", e29da5),
-_c(U+2766, "โฆ", e29da6),
-_c(U+2767, "โง", e29da7),
-_c(U+2768, "โจ", e29da8),
-_c(U+2769, "โฉ", e29da9),
-_c(U+276A, "โช", e29daa),
-_c(U+276B, "โซ", e29dab),
-_c(U+276C, "โฌ", e29dac),
-_c(U+276D, "โญ", e29dad),
-_c(U+276E, "โฎ", e29dae),
-_c(U+276F, "โฏ", e29daf),
-_c(U+2770, "โฐ", e29db0),
-_c(U+2771, "โฑ", e29db1),
-_c(U+2772, "โฒ", e29db2),
-_c(U+2773, "โณ", e29db3),
-_c(U+2774, "โด", e29db4),
-_c(U+2775, "โต", e29db5),
-_c(U+2776, "โถ", e29db6),
-_c(U+2777, "โท", e29db7),
-_c(U+2778, "โธ", e29db8),
-_c(U+2779, "โน", e29db9),
-_c(U+277A, "โบ", e29dba),
-_c(U+277B, "โป", e29dbb),
-_c(U+277C, "โผ", e29dbc),
-_c(U+277D, "โฝ", e29dbd),
-_c(U+277E, "โพ", e29dbe),
-_c(U+277F, "โฟ", e29dbf),
-_c(U+2780, "โž€", e29e80),
-_c(U+2781, "โž", e29e81),
-_c(U+2782, "โž‚", e29e82),
-_c(U+2783, "โžƒ", e29e83),
-_c(U+2784, "โž„", e29e84),
-_c(U+2785, "โž…", e29e85),
-_c(U+2786, "โž†", e29e86),
-_c(U+2787, "โž‡", e29e87),
-_c(U+2788, "โžˆ", e29e88),
-_c(U+2789, "โž‰", e29e89),
-_c(U+278A, "โžŠ", e29e8a),
-_c(U+278B, "โž‹", e29e8b),
-_c(U+278C, "โžŒ", e29e8c),
-_c(U+278D, "โž", e29e8d),
-_c(U+278E, "โžŽ", e29e8e),
-_c(U+278F, "โž", e29e8f),
-_c(U+2790, "โž", e29e90),
-_c(U+2791, "โž‘", e29e91),
-_c(U+2792, "โž’", e29e92),
-_c(U+2793, "โž“", e29e93),
-_c(U+2794, "โž”", e29e94),
-_c(U+2795, "โž•", e29e95),
-_c(U+2796, "โž–", e29e96),
-_c(U+2797, "โž—", e29e97),
-_c(U+2798, "โž˜", e29e98),
-_c(U+2799, "โž™", e29e99),
-_c(U+279A, "โžš", e29e9a),
-_c(U+279B, "โž›", e29e9b),
-_c(U+279C, "โžœ", e29e9c),
-_c(U+279D, "โž", e29e9d),
-_c(U+279E, "โžž", e29e9e),
-_c(U+279F, "โžŸ", e29e9f),
-_c(U+27A0, "โž ", e29ea0),
-_c(U+27A1, "โžก", e29ea1),
-_c(U+27A2, "โžข", e29ea2),
-_c(U+27A3, "โžฃ", e29ea3),
-_c(U+27A4, "โžค", e29ea4),
-_c(U+27A5, "โžฅ", e29ea5),
-_c(U+27A6, "โžฆ", e29ea6),
-_c(U+27A7, "โžง", e29ea7),
-_c(U+27A8, "โžจ", e29ea8),
-_c(U+27A9, "โžฉ", e29ea9),
-_c(U+27AA, "โžช", e29eaa),
-_c(U+27AB, "โžซ", e29eab),
-_c(U+27AC, "โžฌ", e29eac),
-_c(U+27AD, "โžญ", e29ead),
-_c(U+27AE, "โžฎ", e29eae),
-_c(U+27AF, "โžฏ", e29eaf),
-_c(U+27B0, "โžฐ", e29eb0),
-_c(U+27B1, "โžฑ", e29eb1),
-_c(U+27B2, "โžฒ", e29eb2),
-_c(U+27B3, "โžณ", e29eb3),
-_c(U+27B4, "โžด", e29eb4),
-_c(U+27B5, "โžต", e29eb5),
-_c(U+27B6, "โžถ", e29eb6),
-_c(U+27B7, "โžท", e29eb7),
-_c(U+27B8, "โžธ", e29eb8),
-_c(U+27B9, "โžน", e29eb9),
-_c(U+27BA, "โžบ", e29eba),
-_c(U+27BB, "โžป", e29ebb),
-_c(U+27BC, "โžผ", e29ebc),
-_c(U+27BD, "โžฝ", e29ebd),
-_c(U+27BE, "โžพ", e29ebe),
-_c(U+27BF, "โžฟ", e29ebf),
-_c(U+27C0, "โŸ€", e29f80),
-_c(U+27C1, "โŸ", e29f81),
-_c(U+27C2, "โŸ‚", e29f82),
-_c(U+27C3, "โŸƒ", e29f83),
-_c(U+27C4, "โŸ„", e29f84),
-_c(U+27C5, "โŸ…", e29f85),
-_c(U+27C6, "โŸ†", e29f86),
-_c(U+27C7, "โŸ‡", e29f87),
-_c(U+27C8, "โŸˆ", e29f88),
-_c(U+27C9, "โŸ‰", e29f89),
-_c(U+27CA, "โŸŠ", e29f8a),
-_c(U+27CB, "โŸ‹", e29f8b),
-_c(U+27CC, "โŸŒ", e29f8c),
-_c(U+27CD, "โŸ", e29f8d),
-_c(U+27CE, "โŸŽ", e29f8e),
-_c(U+27CF, "โŸ", e29f8f),
-_c(U+27D0, "โŸ", e29f90),
-_c(U+27D1, "โŸ‘", e29f91),
-_c(U+27D2, "โŸ’", e29f92),
-_c(U+27D3, "โŸ“", e29f93),
-_c(U+27D4, "โŸ”", e29f94),
-_c(U+27D5, "โŸ•", e29f95),
-_c(U+27D6, "โŸ–", e29f96),
-_c(U+27D7, "โŸ—", e29f97),
-_c(U+27D8, "โŸ˜", e29f98),
-_c(U+27D9, "โŸ™", e29f99),
-_c(U+27DA, "โŸš", e29f9a),
-_c(U+27DB, "โŸ›", e29f9b),
-_c(U+27DC, "โŸœ", e29f9c),
-_c(U+27DD, "โŸ", e29f9d),
-_c(U+27DE, "โŸž", e29f9e),
-_c(U+27DF, "โŸŸ", e29f9f),
-_c(U+27E0, "โŸ ", e29fa0),
-_c(U+27E1, "โŸก", e29fa1),
-_c(U+27E2, "โŸข", e29fa2),
-_c(U+27E3, "โŸฃ", e29fa3),
-_c(U+27E4, "โŸค", e29fa4),
-_c(U+27E5, "โŸฅ", e29fa5),
-_c(U+27E6, "โŸฆ", e29fa6),
-_c(U+27E7, "โŸง", e29fa7),
-_c(U+27E8, "โŸจ", e29fa8),
-_c(U+27E9, "โŸฉ", e29fa9),
-_c(U+27EA, "โŸช", e29faa),
-_c(U+27EB, "โŸซ", e29fab),
-_c(U+27EC, "โŸฌ", e29fac),
-_c(U+27ED, "โŸญ", e29fad),
-_c(U+27EE, "โŸฎ", e29fae),
-_c(U+27EF, "โŸฏ", e29faf),
-_c(U+27F0, "โŸฐ", e29fb0),
-_c(U+27F1, "โŸฑ", e29fb1),
-_c(U+27F2, "โŸฒ", e29fb2),
-_c(U+27F3, "โŸณ", e29fb3),
-_c(U+27F4, "โŸด", e29fb4),
-_c(U+27F5, "โŸต", e29fb5),
-_c(U+27F6, "โŸถ", e29fb6),
-_c(U+27F7, "โŸท", e29fb7),
-_c(U+27F8, "โŸธ", e29fb8),
-_c(U+27F9, "โŸน", e29fb9),
-_c(U+27FA, "โŸบ", e29fba),
-_c(U+27FB, "โŸป", e29fbb),
-_c(U+27FC, "โŸผ", e29fbc),
-_c(U+27FD, "โŸฝ", e29fbd),
-_c(U+27FE, "โŸพ", e29fbe),
-_c(U+27FF, "โŸฟ", e29fbf),
-_c(U+2800, "โ €", e2a080),
-_c(U+2801, "โ ", e2a081),
-_c(U+2802, "โ ‚", e2a082),
-_c(U+2803, "โ ƒ", e2a083),
-_c(U+2804, "โ „", e2a084),
-_c(U+2805, "โ …", e2a085),
-_c(U+2806, "โ †", e2a086),
-_c(U+2807, "โ ‡", e2a087),
-_c(U+2808, "โ ˆ", e2a088),
-_c(U+2809, "โ ‰", e2a089),
-_c(U+280A, "โ Š", e2a08a),
-_c(U+280B, "โ ‹", e2a08b),
-_c(U+280C, "โ Œ", e2a08c),
-_c(U+280D, "โ ", e2a08d),
-_c(U+280E, "โ Ž", e2a08e),
-_c(U+280F, "โ ", e2a08f),
-_c(U+2810, "โ ", e2a090),
-_c(U+2811, "โ ‘", e2a091),
-_c(U+2812, "โ ’", e2a092),
-_c(U+2813, "โ “", e2a093),
-_c(U+2814, "โ ”", e2a094),
-_c(U+2815, "โ •", e2a095),
-_c(U+2816, "โ –", e2a096),
-_c(U+2817, "โ —", e2a097),
-_c(U+2818, "โ ˜", e2a098),
-_c(U+2819, "โ ™", e2a099),
-_c(U+281A, "โ š", e2a09a),
-_c(U+281B, "โ ›", e2a09b),
-_c(U+281C, "โ œ", e2a09c),
-_c(U+281D, "โ ", e2a09d),
-_c(U+281E, "โ ž", e2a09e),
-_c(U+281F, "โ Ÿ", e2a09f),
-_c(U+2820, "โ  ", e2a0a0),
-_c(U+2821, "โ ก", e2a0a1),
-_c(U+2822, "โ ข", e2a0a2),
-_c(U+2823, "โ ฃ", e2a0a3),
-_c(U+2824, "โ ค", e2a0a4),
-_c(U+2825, "โ ฅ", e2a0a5),
-_c(U+2826, "โ ฆ", e2a0a6),
-_c(U+2827, "โ ง", e2a0a7),
-_c(U+2828, "โ จ", e2a0a8),
-_c(U+2829, "โ ฉ", e2a0a9),
-_c(U+282A, "โ ช", e2a0aa),
-_c(U+282B, "โ ซ", e2a0ab),
-_c(U+282C, "โ ฌ", e2a0ac),
-_c(U+282D, "โ ญ", e2a0ad),
-_c(U+282E, "โ ฎ", e2a0ae),
-_c(U+282F, "โ ฏ", e2a0af),
-_c(U+2830, "โ ฐ", e2a0b0),
-_c(U+2831, "โ ฑ", e2a0b1),
-_c(U+2832, "โ ฒ", e2a0b2),
-_c(U+2833, "โ ณ", e2a0b3),
-_c(U+2834, "โ ด", e2a0b4),
-_c(U+2835, "โ ต", e2a0b5),
-_c(U+2836, "โ ถ", e2a0b6),
-_c(U+2837, "โ ท", e2a0b7),
-_c(U+2838, "โ ธ", e2a0b8),
-_c(U+2839, "โ น", e2a0b9),
-_c(U+283A, "โ บ", e2a0ba),
-_c(U+283B, "โ ป", e2a0bb),
-_c(U+283C, "โ ผ", e2a0bc),
-_c(U+283D, "โ ฝ", e2a0bd),
-_c(U+283E, "โ พ", e2a0be),
-_c(U+283F, "โ ฟ", e2a0bf),
-_c(U+2840, "โก€", e2a180),
-_c(U+2841, "โก", e2a181),
-_c(U+2842, "โก‚", e2a182),
-_c(U+2843, "โกƒ", e2a183),
-_c(U+2844, "โก„", e2a184),
-_c(U+2845, "โก…", e2a185),
-_c(U+2846, "โก†", e2a186),
-_c(U+2847, "โก‡", e2a187),
-_c(U+2848, "โกˆ", e2a188),
-_c(U+2849, "โก‰", e2a189),
-_c(U+284A, "โกŠ", e2a18a),
-_c(U+284B, "โก‹", e2a18b),
-_c(U+284C, "โกŒ", e2a18c),
-_c(U+284D, "โก", e2a18d),
-_c(U+284E, "โกŽ", e2a18e),
-_c(U+284F, "โก", e2a18f),
-_c(U+2850, "โก", e2a190),
-_c(U+2851, "โก‘", e2a191),
-_c(U+2852, "โก’", e2a192),
-_c(U+2853, "โก“", e2a193),
-_c(U+2854, "โก”", e2a194),
-_c(U+2855, "โก•", e2a195),
-_c(U+2856, "โก–", e2a196),
-_c(U+2857, "โก—", e2a197),
-_c(U+2858, "โก˜", e2a198),
-_c(U+2859, "โก™", e2a199),
-_c(U+285A, "โกš", e2a19a),
-_c(U+285B, "โก›", e2a19b),
-_c(U+285C, "โกœ", e2a19c),
-_c(U+285D, "โก", e2a19d),
-_c(U+285E, "โกž", e2a19e),
-_c(U+285F, "โกŸ", e2a19f),
-_c(U+2860, "โก ", e2a1a0),
-_c(U+2861, "โกก", e2a1a1),
-_c(U+2862, "โกข", e2a1a2),
-_c(U+2863, "โกฃ", e2a1a3),
-_c(U+2864, "โกค", e2a1a4),
-_c(U+2865, "โกฅ", e2a1a5),
-_c(U+2866, "โกฆ", e2a1a6),
-_c(U+2867, "โกง", e2a1a7),
-_c(U+2868, "โกจ", e2a1a8),
-_c(U+2869, "โกฉ", e2a1a9),
-_c(U+286A, "โกช", e2a1aa),
-_c(U+286B, "โกซ", e2a1ab),
-_c(U+286C, "โกฌ", e2a1ac),
-_c(U+286D, "โกญ", e2a1ad),
-_c(U+286E, "โกฎ", e2a1ae),
-_c(U+286F, "โกฏ", e2a1af),
-_c(U+2870, "โกฐ", e2a1b0),
-_c(U+2871, "โกฑ", e2a1b1),
-_c(U+2872, "โกฒ", e2a1b2),
-_c(U+2873, "โกณ", e2a1b3),
-_c(U+2874, "โกด", e2a1b4),
-_c(U+2875, "โกต", e2a1b5),
-_c(U+2876, "โกถ", e2a1b6),
-_c(U+2877, "โกท", e2a1b7),
-_c(U+2878, "โกธ", e2a1b8),
-_c(U+2879, "โกน", e2a1b9),
-_c(U+287A, "โกบ", e2a1ba),
-_c(U+287B, "โกป", e2a1bb),
-_c(U+287C, "โกผ", e2a1bc),
-_c(U+287D, "โกฝ", e2a1bd),
-_c(U+287E, "โกพ", e2a1be),
-_c(U+287F, "โกฟ", e2a1bf),
-_c(U+2880, "โข€", e2a280),
-_c(U+2881, "โข", e2a281),
-_c(U+2882, "โข‚", e2a282),
-_c(U+2883, "โขƒ", e2a283),
-_c(U+2884, "โข„", e2a284),
-_c(U+2885, "โข…", e2a285),
-_c(U+2886, "โข†", e2a286),
-_c(U+2887, "โข‡", e2a287),
-_c(U+2888, "โขˆ", e2a288),
-_c(U+2889, "โข‰", e2a289),
-_c(U+288A, "โขŠ", e2a28a),
-_c(U+288B, "โข‹", e2a28b),
-_c(U+288C, "โขŒ", e2a28c),
-_c(U+288D, "โข", e2a28d),
-_c(U+288E, "โขŽ", e2a28e),
-_c(U+288F, "โข", e2a28f),
-_c(U+2890, "โข", e2a290),
-_c(U+2891, "โข‘", e2a291),
-_c(U+2892, "โข’", e2a292),
-_c(U+2893, "โข“", e2a293),
-_c(U+2894, "โข”", e2a294),
-_c(U+2895, "โข•", e2a295),
-_c(U+2896, "โข–", e2a296),
-_c(U+2897, "โข—", e2a297),
-_c(U+2898, "โข˜", e2a298),
-_c(U+2899, "โข™", e2a299),
-_c(U+289A, "โขš", e2a29a),
-_c(U+289B, "โข›", e2a29b),
-_c(U+289C, "โขœ", e2a29c),
-_c(U+289D, "โข", e2a29d),
-_c(U+289E, "โขž", e2a29e),
-_c(U+289F, "โขŸ", e2a29f),
-_c(U+28A0, "โข ", e2a2a0),
-_c(U+28A1, "โขก", e2a2a1),
-_c(U+28A2, "โขข", e2a2a2),
-_c(U+28A3, "โขฃ", e2a2a3),
-_c(U+28A4, "โขค", e2a2a4),
-_c(U+28A5, "โขฅ", e2a2a5),
-_c(U+28A6, "โขฆ", e2a2a6),
-_c(U+28A7, "โขง", e2a2a7),
-_c(U+28A8, "โขจ", e2a2a8),
-_c(U+28A9, "โขฉ", e2a2a9),
-_c(U+28AA, "โขช", e2a2aa),
-_c(U+28AB, "โขซ", e2a2ab),
-_c(U+28AC, "โขฌ", e2a2ac),
-_c(U+28AD, "โขญ", e2a2ad),
-_c(U+28AE, "โขฎ", e2a2ae),
-_c(U+28AF, "โขฏ", e2a2af),
-_c(U+28B0, "โขฐ", e2a2b0),
-_c(U+28B1, "โขฑ", e2a2b1),
-_c(U+28B2, "โขฒ", e2a2b2),
-_c(U+28B3, "โขณ", e2a2b3),
-_c(U+28B4, "โขด", e2a2b4),
-_c(U+28B5, "โขต", e2a2b5),
-_c(U+28B6, "โขถ", e2a2b6),
-_c(U+28B7, "โขท", e2a2b7),
-_c(U+28B8, "โขธ", e2a2b8),
-_c(U+28B9, "โขน", e2a2b9),
-_c(U+28BA, "โขบ", e2a2ba),
-_c(U+28BB, "โขป", e2a2bb),
-_c(U+28BC, "โขผ", e2a2bc),
-_c(U+28BD, "โขฝ", e2a2bd),
-_c(U+28BE, "โขพ", e2a2be),
-_c(U+28BF, "โขฟ", e2a2bf),
-_c(U+28C0, "โฃ€", e2a380),
-_c(U+28C1, "โฃ", e2a381),
-_c(U+28C2, "โฃ‚", e2a382),
-_c(U+28C3, "โฃƒ", e2a383),
-_c(U+28C4, "โฃ„", e2a384),
-_c(U+28C5, "โฃ…", e2a385),
-_c(U+28C6, "โฃ†", e2a386),
-_c(U+28C7, "โฃ‡", e2a387),
-_c(U+28C8, "โฃˆ", e2a388),
-_c(U+28C9, "โฃ‰", e2a389),
-_c(U+28CA, "โฃŠ", e2a38a),
-_c(U+28CB, "โฃ‹", e2a38b),
-_c(U+28CC, "โฃŒ", e2a38c),
-_c(U+28CD, "โฃ", e2a38d),
-_c(U+28CE, "โฃŽ", e2a38e),
-_c(U+28CF, "โฃ", e2a38f),
-_c(U+28D0, "โฃ", e2a390),
-_c(U+28D1, "โฃ‘", e2a391),
-_c(U+28D2, "โฃ’", e2a392),
-_c(U+28D3, "โฃ“", e2a393),
-_c(U+28D4, "โฃ”", e2a394),
-_c(U+28D5, "โฃ•", e2a395),
-_c(U+28D6, "โฃ–", e2a396),
-_c(U+28D7, "โฃ—", e2a397),
-_c(U+28D8, "โฃ˜", e2a398),
-_c(U+28D9, "โฃ™", e2a399),
-_c(U+28DA, "โฃš", e2a39a),
-_c(U+28DB, "โฃ›", e2a39b),
-_c(U+28DC, "โฃœ", e2a39c),
-_c(U+28DD, "โฃ", e2a39d),
-_c(U+28DE, "โฃž", e2a39e),
-_c(U+28DF, "โฃŸ", e2a39f),
-_c(U+28E0, "โฃ ", e2a3a0),
-_c(U+28E1, "โฃก", e2a3a1),
-_c(U+28E2, "โฃข", e2a3a2),
-_c(U+28E3, "โฃฃ", e2a3a3),
-_c(U+28E4, "โฃค", e2a3a4),
-_c(U+28E5, "โฃฅ", e2a3a5),
-_c(U+28E6, "โฃฆ", e2a3a6),
-_c(U+28E7, "โฃง", e2a3a7),
-_c(U+28E8, "โฃจ", e2a3a8),
-_c(U+28E9, "โฃฉ", e2a3a9),
-_c(U+28EA, "โฃช", e2a3aa),
-_c(U+28EB, "โฃซ", e2a3ab),
-_c(U+28EC, "โฃฌ", e2a3ac),
-_c(U+28ED, "โฃญ", e2a3ad),
-_c(U+28EE, "โฃฎ", e2a3ae),
-_c(U+28EF, "โฃฏ", e2a3af),
-_c(U+28F0, "โฃฐ", e2a3b0),
-_c(U+28F1, "โฃฑ", e2a3b1),
-_c(U+28F2, "โฃฒ", e2a3b2),
-_c(U+28F3, "โฃณ", e2a3b3),
-_c(U+28F4, "โฃด", e2a3b4),
-_c(U+28F5, "โฃต", e2a3b5),
-_c(U+28F6, "โฃถ", e2a3b6),
-_c(U+28F7, "โฃท", e2a3b7),
-_c(U+28F8, "โฃธ", e2a3b8),
-_c(U+28F9, "โฃน", e2a3b9),
-_c(U+28FA, "โฃบ", e2a3ba),
-_c(U+28FB, "โฃป", e2a3bb),
-_c(U+28FC, "โฃผ", e2a3bc),
-_c(U+28FD, "โฃฝ", e2a3bd),
-_c(U+28FE, "โฃพ", e2a3be),
-_c(U+28FF, "โฃฟ", e2a3bf),
-_c(U+2900, "โค€", e2a480),
-_c(U+2901, "โค", e2a481),
-_c(U+2902, "โค‚", e2a482),
-_c(U+2903, "โคƒ", e2a483),
-_c(U+2904, "โค„", e2a484),
-_c(U+2905, "โค…", e2a485),
-_c(U+2906, "โค†", e2a486),
-_c(U+2907, "โค‡", e2a487),
-_c(U+2908, "โคˆ", e2a488),
-_c(U+2909, "โค‰", e2a489),
-_c(U+290A, "โคŠ", e2a48a),
-_c(U+290B, "โค‹", e2a48b),
-_c(U+290C, "โคŒ", e2a48c),
-_c(U+290D, "โค", e2a48d),
-_c(U+290E, "โคŽ", e2a48e),
-_c(U+290F, "โค", e2a48f),
-_c(U+2910, "โค", e2a490),
-_c(U+2911, "โค‘", e2a491),
-_c(U+2912, "โค’", e2a492),
-_c(U+2913, "โค“", e2a493),
-_c(U+2914, "โค”", e2a494),
-_c(U+2915, "โค•", e2a495),
-_c(U+2916, "โค–", e2a496),
-_c(U+2917, "โค—", e2a497),
-_c(U+2918, "โค˜", e2a498),
-_c(U+2919, "โค™", e2a499),
-_c(U+291A, "โคš", e2a49a),
-_c(U+291B, "โค›", e2a49b),
-_c(U+291C, "โคœ", e2a49c),
-_c(U+291D, "โค", e2a49d),
-_c(U+291E, "โคž", e2a49e),
-_c(U+291F, "โคŸ", e2a49f),
-_c(U+2920, "โค ", e2a4a0),
-_c(U+2921, "โคก", e2a4a1),
-_c(U+2922, "โคข", e2a4a2),
-_c(U+2923, "โคฃ", e2a4a3),
-_c(U+2924, "โคค", e2a4a4),
-_c(U+2925, "โคฅ", e2a4a5),
-_c(U+2926, "โคฆ", e2a4a6),
-_c(U+2927, "โคง", e2a4a7),
-_c(U+2928, "โคจ", e2a4a8),
-_c(U+2929, "โคฉ", e2a4a9),
-_c(U+292A, "โคช", e2a4aa),
-_c(U+292B, "โคซ", e2a4ab),
-_c(U+292C, "โคฌ", e2a4ac),
-_c(U+292D, "โคญ", e2a4ad),
-_c(U+292E, "โคฎ", e2a4ae),
-_c(U+292F, "โคฏ", e2a4af),
-_c(U+2930, "โคฐ", e2a4b0),
-_c(U+2931, "โคฑ", e2a4b1),
-_c(U+2932, "โคฒ", e2a4b2),
-_c(U+2933, "โคณ", e2a4b3),
-_c(U+2934, "โคด", e2a4b4),
-_c(U+2935, "โคต", e2a4b5),
-_c(U+2936, "โคถ", e2a4b6),
-_c(U+2937, "โคท", e2a4b7),
-_c(U+2938, "โคธ", e2a4b8),
-_c(U+2939, "โคน", e2a4b9),
-_c(U+293A, "โคบ", e2a4ba),
-_c(U+293B, "โคป", e2a4bb),
-_c(U+293C, "โคผ", e2a4bc),
-_c(U+293D, "โคฝ", e2a4bd),
-_c(U+293E, "โคพ", e2a4be),
-_c(U+293F, "โคฟ", e2a4bf),
-_c(U+2940, "โฅ€", e2a580),
-_c(U+2941, "โฅ", e2a581),
-_c(U+2942, "โฅ‚", e2a582),
-_c(U+2943, "โฅƒ", e2a583),
-_c(U+2944, "โฅ„", e2a584),
-_c(U+2945, "โฅ…", e2a585),
-_c(U+2946, "โฅ†", e2a586),
-_c(U+2947, "โฅ‡", e2a587),
-_c(U+2948, "โฅˆ", e2a588),
-_c(U+2949, "โฅ‰", e2a589),
-_c(U+294A, "โฅŠ", e2a58a),
-_c(U+294B, "โฅ‹", e2a58b),
-_c(U+294C, "โฅŒ", e2a58c),
-_c(U+294D, "โฅ", e2a58d),
-_c(U+294E, "โฅŽ", e2a58e),
-_c(U+294F, "โฅ", e2a58f),
-_c(U+2950, "โฅ", e2a590),
-_c(U+2951, "โฅ‘", e2a591),
-_c(U+2952, "โฅ’", e2a592),
-_c(U+2953, "โฅ“", e2a593),
-_c(U+2954, "โฅ”", e2a594),
-_c(U+2955, "โฅ•", e2a595),
-_c(U+2956, "โฅ–", e2a596),
-_c(U+2957, "โฅ—", e2a597),
-_c(U+2958, "โฅ˜", e2a598),
-_c(U+2959, "โฅ™", e2a599),
-_c(U+295A, "โฅš", e2a59a),
-_c(U+295B, "โฅ›", e2a59b),
-_c(U+295C, "โฅœ", e2a59c),
-_c(U+295D, "โฅ", e2a59d),
-_c(U+295E, "โฅž", e2a59e),
-_c(U+295F, "โฅŸ", e2a59f),
-_c(U+2960, "โฅ ", e2a5a0),
-_c(U+2961, "โฅก", e2a5a1),
-_c(U+2962, "โฅข", e2a5a2),
-_c(U+2963, "โฅฃ", e2a5a3),
-_c(U+2964, "โฅค", e2a5a4),
-_c(U+2965, "โฅฅ", e2a5a5),
-_c(U+2966, "โฅฆ", e2a5a6),
-_c(U+2967, "โฅง", e2a5a7),
-_c(U+2968, "โฅจ", e2a5a8),
-_c(U+2969, "โฅฉ", e2a5a9),
-_c(U+296A, "โฅช", e2a5aa),
-_c(U+296B, "โฅซ", e2a5ab),
-_c(U+296C, "โฅฌ", e2a5ac),
-_c(U+296D, "โฅญ", e2a5ad),
-_c(U+296E, "โฅฎ", e2a5ae),
-_c(U+296F, "โฅฏ", e2a5af),
-_c(U+2970, "โฅฐ", e2a5b0),
-_c(U+2971, "โฅฑ", e2a5b1),
-_c(U+2972, "โฅฒ", e2a5b2),
-_c(U+2973, "โฅณ", e2a5b3),
-_c(U+2974, "โฅด", e2a5b4),
-_c(U+2975, "โฅต", e2a5b5),
-_c(U+2976, "โฅถ", e2a5b6),
-_c(U+2977, "โฅท", e2a5b7),
-_c(U+2978, "โฅธ", e2a5b8),
-_c(U+2979, "โฅน", e2a5b9),
-_c(U+297A, "โฅบ", e2a5ba),
-_c(U+297B, "โฅป", e2a5bb),
-_c(U+297C, "โฅผ", e2a5bc),
-_c(U+297D, "โฅฝ", e2a5bd),
-_c(U+297E, "โฅพ", e2a5be),
-_c(U+297F, "โฅฟ", e2a5bf),
-_c(U+2980, "โฆ€", e2a680),
-_c(U+2981, "โฆ", e2a681),
-_c(U+2982, "โฆ‚", e2a682),
-_c(U+2983, "โฆƒ", e2a683),
-_c(U+2984, "โฆ„", e2a684),
-_c(U+2985, "โฆ…", e2a685),
-_c(U+2986, "โฆ†", e2a686),
-_c(U+2987, "โฆ‡", e2a687),
-_c(U+2988, "โฆˆ", e2a688),
-_c(U+2989, "โฆ‰", e2a689),
-_c(U+298A, "โฆŠ", e2a68a),
-_c(U+298B, "โฆ‹", e2a68b),
-_c(U+298C, "โฆŒ", e2a68c),
-_c(U+298D, "โฆ", e2a68d),
-_c(U+298E, "โฆŽ", e2a68e),
-_c(U+298F, "โฆ", e2a68f),
-_c(U+2990, "โฆ", e2a690),
-_c(U+2991, "โฆ‘", e2a691),
-_c(U+2992, "โฆ’", e2a692),
-_c(U+2993, "โฆ“", e2a693),
-_c(U+2994, "โฆ”", e2a694),
-_c(U+2995, "โฆ•", e2a695),
-_c(U+2996, "โฆ–", e2a696),
-_c(U+2997, "โฆ—", e2a697),
-_c(U+2998, "โฆ˜", e2a698),
-_c(U+2999, "โฆ™", e2a699),
-_c(U+299A, "โฆš", e2a69a),
-_c(U+299B, "โฆ›", e2a69b),
-_c(U+299C, "โฆœ", e2a69c),
-_c(U+299D, "โฆ", e2a69d),
-_c(U+299E, "โฆž", e2a69e),
-_c(U+299F, "โฆŸ", e2a69f),
-_c(U+29A0, "โฆ ", e2a6a0),
-_c(U+29A1, "โฆก", e2a6a1),
-_c(U+29A2, "โฆข", e2a6a2),
-_c(U+29A3, "โฆฃ", e2a6a3),
-_c(U+29A4, "โฆค", e2a6a4),
-_c(U+29A5, "โฆฅ", e2a6a5),
-_c(U+29A6, "โฆฆ", e2a6a6),
-_c(U+29A7, "โฆง", e2a6a7),
-_c(U+29A8, "โฆจ", e2a6a8),
-_c(U+29A9, "โฆฉ", e2a6a9),
-_c(U+29AA, "โฆช", e2a6aa),
-_c(U+29AB, "โฆซ", e2a6ab),
-_c(U+29AC, "โฆฌ", e2a6ac),
-_c(U+29AD, "โฆญ", e2a6ad),
-_c(U+29AE, "โฆฎ", e2a6ae),
-_c(U+29AF, "โฆฏ", e2a6af),
-_c(U+29B0, "โฆฐ", e2a6b0),
-_c(U+29B1, "โฆฑ", e2a6b1),
-_c(U+29B2, "โฆฒ", e2a6b2),
-_c(U+29B3, "โฆณ", e2a6b3),
-_c(U+29B4, "โฆด", e2a6b4),
-_c(U+29B5, "โฆต", e2a6b5),
-_c(U+29B6, "โฆถ", e2a6b6),
-_c(U+29B7, "โฆท", e2a6b7),
-_c(U+29B8, "โฆธ", e2a6b8),
-_c(U+29B9, "โฆน", e2a6b9),
-_c(U+29BA, "โฆบ", e2a6ba),
-_c(U+29BB, "โฆป", e2a6bb),
-_c(U+29BC, "โฆผ", e2a6bc),
-_c(U+29BD, "โฆฝ", e2a6bd),
-_c(U+29BE, "โฆพ", e2a6be),
-_c(U+29BF, "โฆฟ", e2a6bf),
-_c(U+29C0, "โง€", e2a780),
-_c(U+29C1, "โง", e2a781),
-_c(U+29C2, "โง‚", e2a782),
-_c(U+29C3, "โงƒ", e2a783),
-_c(U+29C4, "โง„", e2a784),
-_c(U+29C5, "โง…", e2a785),
-_c(U+29C6, "โง†", e2a786),
-_c(U+29C7, "โง‡", e2a787),
-_c(U+29C8, "โงˆ", e2a788),
-_c(U+29C9, "โง‰", e2a789),
-_c(U+29CA, "โงŠ", e2a78a),
-_c(U+29CB, "โง‹", e2a78b),
-_c(U+29CC, "โงŒ", e2a78c),
-_c(U+29CD, "โง", e2a78d),
-_c(U+29CE, "โงŽ", e2a78e),
-_c(U+29CF, "โง", e2a78f),
-_c(U+29D0, "โง", e2a790),
-_c(U+29D1, "โง‘", e2a791),
-_c(U+29D2, "โง’", e2a792),
-_c(U+29D3, "โง“", e2a793),
-_c(U+29D4, "โง”", e2a794),
-_c(U+29D5, "โง•", e2a795),
-_c(U+29D6, "โง–", e2a796),
-_c(U+29D7, "โง—", e2a797),
-_c(U+29D8, "โง˜", e2a798),
-_c(U+29D9, "โง™", e2a799),
-_c(U+29DA, "โงš", e2a79a),
-_c(U+29DB, "โง›", e2a79b),
-_c(U+29DC, "โงœ", e2a79c),
-_c(U+29DD, "โง", e2a79d),
-_c(U+29DE, "โงž", e2a79e),
-_c(U+29DF, "โงŸ", e2a79f),
-_c(U+29E0, "โง ", e2a7a0),
-_c(U+29E1, "โงก", e2a7a1),
-_c(U+29E2, "โงข", e2a7a2),
-_c(U+29E3, "โงฃ", e2a7a3),
-_c(U+29E4, "โงค", e2a7a4),
-_c(U+29E5, "โงฅ", e2a7a5),
-_c(U+29E6, "โงฆ", e2a7a6),
-_c(U+29E7, "โงง", e2a7a7),
-_c(U+29E8, "โงจ", e2a7a8),
-_c(U+29E9, "โงฉ", e2a7a9),
-_c(U+29EA, "โงช", e2a7aa),
-_c(U+29EB, "โงซ", e2a7ab),
-_c(U+29EC, "โงฌ", e2a7ac),
-_c(U+29ED, "โงญ", e2a7ad),
-_c(U+29EE, "โงฎ", e2a7ae),
-_c(U+29EF, "โงฏ", e2a7af),
-_c(U+29F0, "โงฐ", e2a7b0),
-_c(U+29F1, "โงฑ", e2a7b1),
-_c(U+29F2, "โงฒ", e2a7b2),
-_c(U+29F3, "โงณ", e2a7b3),
-_c(U+29F4, "โงด", e2a7b4),
-_c(U+29F5, "โงต", e2a7b5),
-_c(U+29F6, "โงถ", e2a7b6),
-_c(U+29F7, "โงท", e2a7b7),
-_c(U+29F8, "โงธ", e2a7b8),
-_c(U+29F9, "โงน", e2a7b9),
-_c(U+29FA, "โงบ", e2a7ba),
-_c(U+29FB, "โงป", e2a7bb),
-_c(U+29FC, "โงผ", e2a7bc),
-_c(U+29FD, "โงฝ", e2a7bd),
-_c(U+29FE, "โงพ", e2a7be),
-_c(U+29FF, "โงฟ", e2a7bf),
-_c(U+1D100, "๐„€", f09d8480),
-_c(U+1D101, "๐„", f09d8481),
-_c(U+1D102, "๐„‚", f09d8482),
-_c(U+1D103, "๐„ƒ", f09d8483),
-_c(U+1D104, "๐„„", f09d8484),
-_c(U+1D105, "๐„…", f09d8485),
-_c(U+1D106, "๐„†", f09d8486),
-_c(U+1D107, "๐„‡", f09d8487),
-_c(U+1D108, "๐„ˆ", f09d8488),
-_c(U+1D109, "๐„‰", f09d8489),
-_c(U+1D10A, "๐„Š", f09d848a),
-_c(U+1D10B, "๐„‹", f09d848b),
-_c(U+1D10C, "๐„Œ", f09d848c),
-_c(U+1D10D, "๐„", f09d848d),
-_c(U+1D10E, "๐„Ž", f09d848e),
-_c(U+1D10F, "๐„", f09d848f),
-_c(U+1D110, "๐„", f09d8490),
-_c(U+1D111, "๐„‘", f09d8491),
-_c(U+1D112, "๐„’", f09d8492),
-_c(U+1D113, "๐„“", f09d8493),
-_c(U+1D114, "๐„”", f09d8494),
-_c(U+1D115, "๐„•", f09d8495),
-_c(U+1D116, "๐„–", f09d8496),
-_c(U+1D117, "๐„—", f09d8497),
-_c(U+1D118, "๐„˜", f09d8498),
-_c(U+1D119, "๐„™", f09d8499),
-_c(U+1D11A, "๐„š", f09d849a),
-_c(U+1D11B, "๐„›", f09d849b),
-_c(U+1D11C, "๐„œ", f09d849c),
-_c(U+1D11D, "๐„", f09d849d),
-_c(U+1D11E, "๐„ž", f09d849e),
-_c(U+1D11F, "๐„Ÿ", f09d849f),
-_c(U+1D120, "๐„ ", f09d84a0),
-_c(U+1D121, "๐„ก", f09d84a1),
-_c(U+1D122, "๐„ข", f09d84a2),
-_c(U+1D123, "๐„ฃ", f09d84a3),
-_c(U+1D124, "๐„ค", f09d84a4),
-_c(U+1D125, "๐„ฅ", f09d84a5),
-_c(U+1D126, "๐„ฆ", f09d84a6),
-_c(U+1D127, "๐„ง", f09d84a7),
-_c(U+1D128, "๐„จ", f09d84a8),
-_c(U+1D129, "๐„ฉ", f09d84a9),
-_c(U+1D12A, "๐„ช", f09d84aa),
-_c(U+1D12B, "๐„ซ", f09d84ab),
-_c(U+1D12C, "๐„ฌ", f09d84ac),
-_c(U+1D12D, "๐„ญ", f09d84ad),
-_c(U+1D12E, "๐„ฎ", f09d84ae),
-_c(U+1D12F, "๐„ฏ", f09d84af),
-_c(U+1D130, "๐„ฐ", f09d84b0),
-_c(U+1D131, "๐„ฑ", f09d84b1),
-_c(U+1D132, "๐„ฒ", f09d84b2),
-_c(U+1D133, "๐„ณ", f09d84b3),
-_c(U+1D134, "๐„ด", f09d84b4),
-_c(U+1D135, "๐„ต", f09d84b5),
-_c(U+1D136, "๐„ถ", f09d84b6),
-_c(U+1D137, "๐„ท", f09d84b7),
-_c(U+1D138, "๐„ธ", f09d84b8),
-_c(U+1D139, "๐„น", f09d84b9),
-_c(U+1D13A, "๐„บ", f09d84ba),
-_c(U+1D13B, "๐„ป", f09d84bb),
-_c(U+1D13C, "๐„ผ", f09d84bc),
-_c(U+1D13D, "๐„ฝ", f09d84bd),
-_c(U+1D13E, "๐„พ", f09d84be),
-_c(U+1D13F, "๐„ฟ", f09d84bf),
-_c(U+1D140, "๐…€", f09d8580),
-_c(U+1D141, "๐…", f09d8581),
-_c(U+1D142, "๐…‚", f09d8582),
-_c(U+1D143, "๐…ƒ", f09d8583),
-_c(U+1D144, "๐…„", f09d8584),
-_c(U+1D145, "๐……", f09d8585),
-_c(U+1D146, "๐…†", f09d8586),
-_c(U+1D147, "๐…‡", f09d8587),
-_c(U+1D148, "๐…ˆ", f09d8588),
-_c(U+1D149, "๐…‰", f09d8589),
-_c(U+1D14A, "๐…Š", f09d858a),
-_c(U+1D14B, "๐…‹", f09d858b),
-_c(U+1D14C, "๐…Œ", f09d858c),
-_c(U+1D14D, "๐…", f09d858d),
-_c(U+1D14E, "๐…Ž", f09d858e),
-_c(U+1D14F, "๐…", f09d858f),
-_c(U+1D150, "๐…", f09d8590),
-_c(U+1D151, "๐…‘", f09d8591),
-_c(U+1D152, "๐…’", f09d8592),
-_c(U+1D153, "๐…“", f09d8593),
-_c(U+1D154, "๐…”", f09d8594),
-_c(U+1D155, "๐…•", f09d8595),
-_c(U+1D156, "๐…–", f09d8596),
-_c(U+1D157, "๐…—", f09d8597),
-_c(U+1D158, "๐…˜", f09d8598),
-_c(U+1D159, "๐…™", f09d8599),
-_c(U+1D15A, "๐…š", f09d859a),
-_c(U+1D15B, "๐…›", f09d859b),
-_c(U+1D15C, "๐…œ", f09d859c),
-_c(U+1D15D, "๐…", f09d859d),
-_c(U+1D15E, "๐…ž", f09d859e),
-_c(U+1D15F, "๐…Ÿ", f09d859f),
-_c(U+1D160, "๐… ", f09d85a0),
-_c(U+1D161, "๐…ก", f09d85a1),
-_c(U+1D162, "๐…ข", f09d85a2),
-_c(U+1D163, "๐…ฃ", f09d85a3),
-_c(U+1D164, "๐…ค", f09d85a4),
-_c(U+1D165, "๐…ฅ", f09d85a5),
-_c(U+1D166, "๐…ฆ", f09d85a6),
-_c(U+1D167, "๐…ง", f09d85a7),
-_c(U+1D168, "๐…จ", f09d85a8),
-_c(U+1D169, "๐…ฉ", f09d85a9),
-_c(U+1D16A, "๐…ช", f09d85aa),
-_c(U+1D16B, "๐…ซ", f09d85ab),
-_c(U+1D16C, "๐…ฌ", f09d85ac),
-_c(U+1D16D, "๐…ญ", f09d85ad),
-_c(U+1D16E, "๐…ฎ", f09d85ae),
-_c(U+1D16F, "๐…ฏ", f09d85af),
-_c(U+1D170, "๐…ฐ", f09d85b0),
-_c(U+1D171, "๐…ฑ", f09d85b1),
-_c(U+1D172, "๐…ฒ", f09d85b2),
-_c(U+1D173, "๐…ณ", f09d85b3),
-_c(U+1D174, "๐…ด", f09d85b4),
-_c(U+1D175, "๐…ต", f09d85b5),
-_c(U+1D176, "๐…ถ", f09d85b6),
-_c(U+1D177, "๐…ท", f09d85b7),
-_c(U+1D178, "๐…ธ", f09d85b8),
-_c(U+1D179, "๐…น", f09d85b9),
-_c(U+1D17A, "๐…บ", f09d85ba),
-_c(U+1D17B, "๐…ป", f09d85bb),
-_c(U+1D17C, "๐…ผ", f09d85bc),
-_c(U+1D17D, "๐…ฝ", f09d85bd),
-_c(U+1D17E, "๐…พ", f09d85be),
-_c(U+1D17F, "๐…ฟ", f09d85bf),
-_c(U+1D180, "๐†€", f09d8680),
-_c(U+1D181, "๐†", f09d8681),
-_c(U+1D182, "๐†‚", f09d8682),
-_c(U+1D183, "๐†ƒ", f09d8683),
-_c(U+1D184, "๐†„", f09d8684),
-_c(U+1D185, "๐†…", f09d8685),
-_c(U+1D186, "๐††", f09d8686),
-_c(U+1D187, "๐†‡", f09d8687),
-_c(U+1D188, "๐†ˆ", f09d8688),
-_c(U+1D189, "๐†‰", f09d8689),
-_c(U+1D18A, "๐†Š", f09d868a),
-_c(U+1D18B, "๐†‹", f09d868b),
-_c(U+1D18C, "๐†Œ", f09d868c),
-_c(U+1D18D, "๐†", f09d868d),
-_c(U+1D18E, "๐†Ž", f09d868e),
-_c(U+1D18F, "๐†", f09d868f),
-_c(U+1D190, "๐†", f09d8690),
-_c(U+1D191, "๐†‘", f09d8691),
-_c(U+1D192, "๐†’", f09d8692),
-_c(U+1D193, "๐†“", f09d8693),
-_c(U+1D194, "๐†”", f09d8694),
-_c(U+1D195, "๐†•", f09d8695),
-_c(U+1D196, "๐†–", f09d8696),
-_c(U+1D197, "๐†—", f09d8697),
-_c(U+1D198, "๐†˜", f09d8698),
-_c(U+1D199, "๐†™", f09d8699),
-_c(U+1D19A, "๐†š", f09d869a),
-_c(U+1D19B, "๐†›", f09d869b),
-_c(U+1D19C, "๐†œ", f09d869c),
-_c(U+1D19D, "๐†", f09d869d),
-_c(U+1D19E, "๐†ž", f09d869e),
-_c(U+1D19F, "๐†Ÿ", f09d869f),
-_c(U+1D1A0, "๐† ", f09d86a0),
-_c(U+1D1A1, "๐†ก", f09d86a1),
-_c(U+1D1A2, "๐†ข", f09d86a2),
-_c(U+1D1A3, "๐†ฃ", f09d86a3),
-_c(U+1D1A4, "๐†ค", f09d86a4),
-_c(U+1D1A5, "๐†ฅ", f09d86a5),
-_c(U+1D1A6, "๐†ฆ", f09d86a6),
-_c(U+1D1A7, "๐†ง", f09d86a7),
-_c(U+1D1A8, "๐†จ", f09d86a8),
-_c(U+1D1A9, "๐†ฉ", f09d86a9),
-_c(U+1D1AA, "๐†ช", f09d86aa),
-_c(U+1D1AB, "๐†ซ", f09d86ab),
-_c(U+1D1AC, "๐†ฌ", f09d86ac),
-_c(U+1D1AD, "๐†ญ", f09d86ad),
-_c(U+1D1AE, "๐†ฎ", f09d86ae),
-_c(U+1D1AF, "๐†ฏ", f09d86af),
-_c(U+1D1B0, "๐†ฐ", f09d86b0),
-_c(U+1D1B1, "๐†ฑ", f09d86b1),
-_c(U+1D1B2, "๐†ฒ", f09d86b2),
-_c(U+1D1B3, "๐†ณ", f09d86b3),
-_c(U+1D1B4, "๐†ด", f09d86b4),
-_c(U+1D1B5, "๐†ต", f09d86b5),
-_c(U+1D1B6, "๐†ถ", f09d86b6),
-_c(U+1D1B7, "๐†ท", f09d86b7),
-_c(U+1D1B8, "๐†ธ", f09d86b8),
-_c(U+1D1B9, "๐†น", f09d86b9),
-_c(U+1D1BA, "๐†บ", f09d86ba),
-_c(U+1D1BB, "๐†ป", f09d86bb),
-_c(U+1D1BC, "๐†ผ", f09d86bc),
-_c(U+1D1BD, "๐†ฝ", f09d86bd),
-_c(U+1D1BE, "๐†พ", f09d86be),
-_c(U+1D1BF, "๐†ฟ", f09d86bf),
-_c(U+1D1C0, "๐‡€", f09d8780),
-_c(U+1D1C1, "๐‡", f09d8781),
-_c(U+1D1C2, "๐‡‚", f09d8782),
-_c(U+1D1C3, "๐‡ƒ", f09d8783),
-_c(U+1D1C4, "๐‡„", f09d8784),
-_c(U+1D1C5, "๐‡…", f09d8785),
-_c(U+1D1C6, "๐‡†", f09d8786),
-_c(U+1D1C7, "๐‡‡", f09d8787),
-_c(U+1D1C8, "๐‡ˆ", f09d8788),
-_c(U+1D1C9, "๐‡‰", f09d8789),
-_c(U+1D1CA, "๐‡Š", f09d878a),
-_c(U+1D1CB, "๐‡‹", f09d878b),
-_c(U+1D1CC, "๐‡Œ", f09d878c),
-_c(U+1D1CD, "๐‡", f09d878d),
-_c(U+1D1CE, "๐‡Ž", f09d878e),
-_c(U+1D1CF, "๐‡", f09d878f),
-_c(U+1D1D0, "๐‡", f09d8790),
-_c(U+1D1D1, "๐‡‘", f09d8791),
-_c(U+1D1D2, "๐‡’", f09d8792),
-_c(U+1D1D3, "๐‡“", f09d8793),
-_c(U+1D1D4, "๐‡”", f09d8794),
-_c(U+1D1D5, "๐‡•", f09d8795),
-_c(U+1D1D6, "๐‡–", f09d8796),
-_c(U+1D1D7, "๐‡—", f09d8797),
-_c(U+1D1D8, "๐‡˜", f09d8798),
-_c(U+1D1D9, "๐‡™", f09d8799),
-_c(U+1D1DA, "๐‡š", f09d879a),
-_c(U+1D1DB, "๐‡›", f09d879b),
-_c(U+1D1DC, "๐‡œ", f09d879c),
-_c(U+1D1DD, "๐‡", f09d879d),
-_c(U+1D1DE, "๐‡ž", f09d879e),
-_c(U+1D1DF, "๐‡Ÿ", f09d879f),
-_c(U+1D1E0, "๐‡ ", f09d87a0),
-_c(U+1D1E1, "๐‡ก", f09d87a1),
-_c(U+1D1E2, "๐‡ข", f09d87a2),
-_c(U+1D1E3, "๐‡ฃ", f09d87a3),
-_c(U+1D1E4, "๐‡ค", f09d87a4),
-_c(U+1D1E5, "๐‡ฅ", f09d87a5),
-_c(U+1D1E6, "๐‡ฆ", f09d87a6),
-_c(U+1D1E7, "๐‡ง", f09d87a7),
-_c(U+1D1E8, "๐‡จ", f09d87a8),
-_c(U+1D1E9, "๐‡ฉ", f09d87a9),
-_c(U+1D1EA, "๐‡ช", f09d87aa),
-_c(U+1D1EB, "๐‡ซ", f09d87ab),
-_c(U+1D1EC, "๐‡ฌ", f09d87ac),
-_c(U+1D1ED, "๐‡ญ", f09d87ad),
-_c(U+1D1EE, "๐‡ฎ", f09d87ae),
-_c(U+1D1EF, "๐‡ฏ", f09d87af),
-_c(U+1D1F0, "๐‡ฐ", f09d87b0),
-_c(U+1D1F1, "๐‡ฑ", f09d87b1),
-_c(U+1D1F2, "๐‡ฒ", f09d87b2),
-_c(U+1D1F3, "๐‡ณ", f09d87b3),
-_c(U+1D1F4, "๐‡ด", f09d87b4),
-_c(U+1D1F5, "๐‡ต", f09d87b5),
-_c(U+1D1F6, "๐‡ถ", f09d87b6),
-_c(U+1D1F7, "๐‡ท", f09d87b7),
-_c(U+1D1F8, "๐‡ธ", f09d87b8),
-_c(U+1D1F9, "๐‡น", f09d87b9),
-_c(U+1D1FA, "๐‡บ", f09d87ba),
-_c(U+1D1FB, "๐‡ป", f09d87bb),
-_c(U+1D1FC, "๐‡ผ", f09d87bc),
-_c(U+1D1FD, "๐‡ฝ", f09d87bd),
-_c(U+1D1FE, "๐‡พ", f09d87be),
-_c(U+1D1FF, "๐‡ฟ", f09d87bf),
-_c(U+1D200, "๐ˆ€", f09d8880),
-_c(U+1D201, "๐ˆ", f09d8881),
-_c(U+1D202, "๐ˆ‚", f09d8882),
-_c(U+1D203, "๐ˆƒ", f09d8883),
-_c(U+1D204, "๐ˆ„", f09d8884),
-_c(U+1D205, "๐ˆ…", f09d8885),
-_c(U+1D206, "๐ˆ†", f09d8886),
-_c(U+1D207, "๐ˆ‡", f09d8887),
-_c(U+1D208, "๐ˆˆ", f09d8888),
-_c(U+1D209, "๐ˆ‰", f09d8889),
-_c(U+1D20A, "๐ˆŠ", f09d888a),
-_c(U+1D20B, "๐ˆ‹", f09d888b),
-_c(U+1D20C, "๐ˆŒ", f09d888c),
-_c(U+1D20D, "๐ˆ", f09d888d),
-_c(U+1D20E, "๐ˆŽ", f09d888e),
-_c(U+1D20F, "๐ˆ", f09d888f),
-_c(U+1D210, "๐ˆ", f09d8890),
-_c(U+1D211, "๐ˆ‘", f09d8891),
-_c(U+1D212, "๐ˆ’", f09d8892),
-_c(U+1D213, "๐ˆ“", f09d8893),
-_c(U+1D214, "๐ˆ”", f09d8894),
-_c(U+1D215, "๐ˆ•", f09d8895),
-_c(U+1D216, "๐ˆ–", f09d8896),
-_c(U+1D217, "๐ˆ—", f09d8897),
-_c(U+1D218, "๐ˆ˜", f09d8898),
-_c(U+1D219, "๐ˆ™", f09d8899),
-_c(U+1D21A, "๐ˆš", f09d889a),
-_c(U+1D21B, "๐ˆ›", f09d889b),
-_c(U+1D21C, "๐ˆœ", f09d889c),
-_c(U+1D21D, "๐ˆ", f09d889d),
-_c(U+1D21E, "๐ˆž", f09d889e),
-_c(U+1D21F, "๐ˆŸ", f09d889f),
-_c(U+1D220, "๐ˆ ", f09d88a0),
-_c(U+1D221, "๐ˆก", f09d88a1),
-_c(U+1D222, "๐ˆข", f09d88a2),
-_c(U+1D223, "๐ˆฃ", f09d88a3),
-_c(U+1D224, "๐ˆค", f09d88a4),
-_c(U+1D225, "๐ˆฅ", f09d88a5),
-_c(U+1D226, "๐ˆฆ", f09d88a6),
-_c(U+1D227, "๐ˆง", f09d88a7),
-_c(U+1D228, "๐ˆจ", f09d88a8),
-_c(U+1D229, "๐ˆฉ", f09d88a9),
-_c(U+1D22A, "๐ˆช", f09d88aa),
-_c(U+1D22B, "๐ˆซ", f09d88ab),
-_c(U+1D22C, "๐ˆฌ", f09d88ac),
-_c(U+1D22D, "๐ˆญ", f09d88ad),
-_c(U+1D22E, "๐ˆฎ", f09d88ae),
-_c(U+1D22F, "๐ˆฏ", f09d88af),
-_c(U+1D230, "๐ˆฐ", f09d88b0),
-_c(U+1D231, "๐ˆฑ", f09d88b1),
-_c(U+1D232, "๐ˆฒ", f09d88b2),
-_c(U+1D233, "๐ˆณ", f09d88b3),
-_c(U+1D234, "๐ˆด", f09d88b4),
-_c(U+1D235, "๐ˆต", f09d88b5),
-_c(U+1D236, "๐ˆถ", f09d88b6),
-_c(U+1D237, "๐ˆท", f09d88b7),
-_c(U+1D238, "๐ˆธ", f09d88b8),
-_c(U+1D239, "๐ˆน", f09d88b9),
-_c(U+1D23A, "๐ˆบ", f09d88ba),
-_c(U+1D23B, "๐ˆป", f09d88bb),
-_c(U+1D23C, "๐ˆผ", f09d88bc),
-_c(U+1D23D, "๐ˆฝ", f09d88bd),
-_c(U+1D23E, "๐ˆพ", f09d88be),
-_c(U+1D23F, "๐ˆฟ", f09d88bf),
-_c(U+1D240, "๐‰€", f09d8980),
-_c(U+1D241, "๐‰", f09d8981),
-_c(U+1D242, "๐‰‚", f09d8982),
-_c(U+1D243, "๐‰ƒ", f09d8983),
-_c(U+1D244, "๐‰„", f09d8984),
-_c(U+1D245, "๐‰…", f09d8985),
-_c(U+1D246, "๐‰†", f09d8986),
-_c(U+1D247, "๐‰‡", f09d8987),
-_c(U+1D248, "๐‰ˆ", f09d8988),
-_c(U+1D249, "๐‰‰", f09d8989),
-_c(U+1D24A, "๐‰Š", f09d898a),
-_c(U+1D24B, "๐‰‹", f09d898b),
-_c(U+1D24C, "๐‰Œ", f09d898c),
-_c(U+1D24D, "๐‰", f09d898d),
-_c(U+1D24E, "๐‰Ž", f09d898e),
-_c(U+1D24F, "๐‰", f09d898f),
-_c(U+1D250, "๐‰", f09d8990),
-_c(U+1D251, "๐‰‘", f09d8991),
-_c(U+1D252, "๐‰’", f09d8992),
-_c(U+1D253, "๐‰“", f09d8993),
-_c(U+1D254, "๐‰”", f09d8994),
-_c(U+1D255, "๐‰•", f09d8995),
-_c(U+1D256, "๐‰–", f09d8996),
-_c(U+1D257, "๐‰—", f09d8997),
-_c(U+1D258, "๐‰˜", f09d8998),
-_c(U+1D259, "๐‰™", f09d8999),
-_c(U+1D25A, "๐‰š", f09d899a),
-_c(U+1D25B, "๐‰›", f09d899b),
-_c(U+1D25C, "๐‰œ", f09d899c),
-_c(U+1D25D, "๐‰", f09d899d),
-_c(U+1D25E, "๐‰ž", f09d899e),
-_c(U+1D25F, "๐‰Ÿ", f09d899f),
-_c(U+1D260, "๐‰ ", f09d89a0),
-_c(U+1D261, "๐‰ก", f09d89a1),
-_c(U+1D262, "๐‰ข", f09d89a2),
-_c(U+1D263, "๐‰ฃ", f09d89a3),
-_c(U+1D264, "๐‰ค", f09d89a4),
-_c(U+1D265, "๐‰ฅ", f09d89a5),
-_c(U+1D266, "๐‰ฆ", f09d89a6),
-_c(U+1D267, "๐‰ง", f09d89a7),
-_c(U+1D268, "๐‰จ", f09d89a8),
-_c(U+1D269, "๐‰ฉ", f09d89a9),
-_c(U+1D26A, "๐‰ช", f09d89aa),
-_c(U+1D26B, "๐‰ซ", f09d89ab),
-_c(U+1D26C, "๐‰ฌ", f09d89ac),
-_c(U+1D26D, "๐‰ญ", f09d89ad),
-_c(U+1D26E, "๐‰ฎ", f09d89ae),
-_c(U+1D26F, "๐‰ฏ", f09d89af),
-_c(U+1D270, "๐‰ฐ", f09d89b0),
-_c(U+1D271, "๐‰ฑ", f09d89b1),
-_c(U+1D272, "๐‰ฒ", f09d89b2),
-_c(U+1D273, "๐‰ณ", f09d89b3),
-_c(U+1D274, "๐‰ด", f09d89b4),
-_c(U+1D275, "๐‰ต", f09d89b5),
-_c(U+1D276, "๐‰ถ", f09d89b6),
-_c(U+1D277, "๐‰ท", f09d89b7),
-_c(U+1D278, "๐‰ธ", f09d89b8),
-_c(U+1D279, "๐‰น", f09d89b9),
-_c(U+1D27A, "๐‰บ", f09d89ba),
-_c(U+1D27B, "๐‰ป", f09d89bb),
-_c(U+1D27C, "๐‰ผ", f09d89bc),
-_c(U+1D27D, "๐‰ฝ", f09d89bd),
-_c(U+1D27E, "๐‰พ", f09d89be),
-_c(U+1D27F, "๐‰ฟ", f09d89bf),
-_c(U+1D280, "๐Š€", f09d8a80),
-_c(U+1D281, "๐Š", f09d8a81),
-_c(U+1D282, "๐Š‚", f09d8a82),
-_c(U+1D283, "๐Šƒ", f09d8a83),
-_c(U+1D284, "๐Š„", f09d8a84),
-_c(U+1D285, "๐Š…", f09d8a85),
-_c(U+1D286, "๐Š†", f09d8a86),
-_c(U+1D287, "๐Š‡", f09d8a87),
-_c(U+1D288, "๐Šˆ", f09d8a88),
-_c(U+1D289, "๐Š‰", f09d8a89),
-_c(U+1D28A, "๐ŠŠ", f09d8a8a),
-_c(U+1D28B, "๐Š‹", f09d8a8b),
-_c(U+1D28C, "๐ŠŒ", f09d8a8c),
-_c(U+1D28D, "๐Š", f09d8a8d),
-_c(U+1D28E, "๐ŠŽ", f09d8a8e),
-_c(U+1D28F, "๐Š", f09d8a8f),
-_c(U+1D290, "๐Š", f09d8a90),
-_c(U+1D291, "๐Š‘", f09d8a91),
-_c(U+1D292, "๐Š’", f09d8a92),
-_c(U+1D293, "๐Š“", f09d8a93),
-_c(U+1D294, "๐Š”", f09d8a94),
-_c(U+1D295, "๐Š•", f09d8a95),
-_c(U+1D296, "๐Š–", f09d8a96),
-_c(U+1D297, "๐Š—", f09d8a97),
-_c(U+1D298, "๐Š˜", f09d8a98),
-_c(U+1D299, "๐Š™", f09d8a99),
-_c(U+1D29A, "๐Šš", f09d8a9a),
-_c(U+1D29B, "๐Š›", f09d8a9b),
-_c(U+1D29C, "๐Šœ", f09d8a9c),
-_c(U+1D29D, "๐Š", f09d8a9d),
-_c(U+1D29E, "๐Šž", f09d8a9e),
-_c(U+1D29F, "๐ŠŸ", f09d8a9f),
-_c(U+1D2A0, "๐Š ", f09d8aa0),
-_c(U+1D2A1, "๐Šก", f09d8aa1),
-_c(U+1D2A2, "๐Šข", f09d8aa2),
-_c(U+1D2A3, "๐Šฃ", f09d8aa3),
-_c(U+1D2A4, "๐Šค", f09d8aa4),
-_c(U+1D2A5, "๐Šฅ", f09d8aa5),
-_c(U+1D2A6, "๐Šฆ", f09d8aa6),
-_c(U+1D2A7, "๐Šง", f09d8aa7),
-_c(U+1D2A8, "๐Šจ", f09d8aa8),
-_c(U+1D2A9, "๐Šฉ", f09d8aa9),
-_c(U+1D2AA, "๐Šช", f09d8aaa),
-_c(U+1D2AB, "๐Šซ", f09d8aab),
-_c(U+1D2AC, "๐Šฌ", f09d8aac),
-_c(U+1D2AD, "๐Šญ", f09d8aad),
-_c(U+1D2AE, "๐Šฎ", f09d8aae),
-_c(U+1D2AF, "๐Šฏ", f09d8aaf),
-_c(U+1D2B0, "๐Šฐ", f09d8ab0),
-_c(U+1D2B1, "๐Šฑ", f09d8ab1),
-_c(U+1D2B2, "๐Šฒ", f09d8ab2),
-_c(U+1D2B3, "๐Šณ", f09d8ab3),
-_c(U+1D2B4, "๐Šด", f09d8ab4),
-_c(U+1D2B5, "๐Šต", f09d8ab5),
-_c(U+1D2B6, "๐Šถ", f09d8ab6),
-_c(U+1D2B7, "๐Šท", f09d8ab7),
-_c(U+1D2B8, "๐Šธ", f09d8ab8),
-_c(U+1D2B9, "๐Šน", f09d8ab9),
-_c(U+1D2BA, "๐Šบ", f09d8aba),
-_c(U+1D2BB, "๐Šป", f09d8abb),
-_c(U+1D2BC, "๐Šผ", f09d8abc),
-_c(U+1D2BD, "๐Šฝ", f09d8abd),
-_c(U+1D2BE, "๐Šพ", f09d8abe),
-_c(U+1D2BF, "๐Šฟ", f09d8abf),
-_c(U+1D2C0, "๐‹€", f09d8b80),
-_c(U+1D2C1, "๐‹", f09d8b81),
-_c(U+1D2C2, "๐‹‚", f09d8b82),
-_c(U+1D2C3, "๐‹ƒ", f09d8b83),
-_c(U+1D2C4, "๐‹„", f09d8b84),
-_c(U+1D2C5, "๐‹…", f09d8b85),
-_c(U+1D2C6, "๐‹†", f09d8b86),
-_c(U+1D2C7, "๐‹‡", f09d8b87),
-_c(U+1D2C8, "๐‹ˆ", f09d8b88),
-_c(U+1D2C9, "๐‹‰", f09d8b89),
-_c(U+1D2CA, "๐‹Š", f09d8b8a),
-_c(U+1D2CB, "๐‹‹", f09d8b8b),
-_c(U+1D2CC, "๐‹Œ", f09d8b8c),
-_c(U+1D2CD, "๐‹", f09d8b8d),
-_c(U+1D2CE, "๐‹Ž", f09d8b8e),
-_c(U+1D2CF, "๐‹", f09d8b8f),
-_c(U+1D2D0, "๐‹", f09d8b90),
-_c(U+1D2D1, "๐‹‘", f09d8b91),
-_c(U+1D2D2, "๐‹’", f09d8b92),
-_c(U+1D2D3, "๐‹“", f09d8b93),
-_c(U+1D2D4, "๐‹”", f09d8b94),
-_c(U+1D2D5, "๐‹•", f09d8b95),
-_c(U+1D2D6, "๐‹–", f09d8b96),
-_c(U+1D2D7, "๐‹—", f09d8b97),
-_c(U+1D2D8, "๐‹˜", f09d8b98),
-_c(U+1D2D9, "๐‹™", f09d8b99),
-_c(U+1D2DA, "๐‹š", f09d8b9a),
-_c(U+1D2DB, "๐‹›", f09d8b9b),
-_c(U+1D2DC, "๐‹œ", f09d8b9c),
-_c(U+1D2DD, "๐‹", f09d8b9d),
-_c(U+1D2DE, "๐‹ž", f09d8b9e),
-_c(U+1D2DF, "๐‹Ÿ", f09d8b9f),
-_c(U+1D2E0, "๐‹ ", f09d8ba0),
-_c(U+1D2E1, "๐‹ก", f09d8ba1),
-_c(U+1D2E2, "๐‹ข", f09d8ba2),
-_c(U+1D2E3, "๐‹ฃ", f09d8ba3),
-_c(U+1D2E4, "๐‹ค", f09d8ba4),
-_c(U+1D2E5, "๐‹ฅ", f09d8ba5),
-_c(U+1D2E6, "๐‹ฆ", f09d8ba6),
-_c(U+1D2E7, "๐‹ง", f09d8ba7),
-_c(U+1D2E8, "๐‹จ", f09d8ba8),
-_c(U+1D2E9, "๐‹ฉ", f09d8ba9),
-_c(U+1D2EA, "๐‹ช", f09d8baa),
-_c(U+1D2EB, "๐‹ซ", f09d8bab),
-_c(U+1D2EC, "๐‹ฌ", f09d8bac),
-_c(U+1D2ED, "๐‹ญ", f09d8bad),
-_c(U+1D2EE, "๐‹ฎ", f09d8bae),
-_c(U+1D2EF, "๐‹ฏ", f09d8baf),
-_c(U+1D2F0, "๐‹ฐ", f09d8bb0),
-_c(U+1D2F1, "๐‹ฑ", f09d8bb1),
-_c(U+1D2F2, "๐‹ฒ", f09d8bb2),
-_c(U+1D2F3, "๐‹ณ", f09d8bb3),
-_c(U+1D2F4, "๐‹ด", f09d8bb4),
-_c(U+1D2F5, "๐‹ต", f09d8bb5),
-_c(U+1D2F6, "๐‹ถ", f09d8bb6),
-_c(U+1D2F7, "๐‹ท", f09d8bb7),
-_c(U+1D2F8, "๐‹ธ", f09d8bb8),
-_c(U+1D2F9, "๐‹น", f09d8bb9),
-_c(U+1D2FA, "๐‹บ", f09d8bba),
-_c(U+1D2FB, "๐‹ป", f09d8bbb),
-_c(U+1D2FC, "๐‹ผ", f09d8bbc),
-_c(U+1D2FD, "๐‹ฝ", f09d8bbd),
-_c(U+1D2FE, "๐‹พ", f09d8bbe),
-_c(U+1D2FF, "๐‹ฟ", f09d8bbf),
-_c(U+1D300, "๐Œ€", f09d8c80),
-_c(U+1D301, "๐Œ", f09d8c81),
-_c(U+1D302, "๐Œ‚", f09d8c82),
-_c(U+1D303, "๐Œƒ", f09d8c83),
-_c(U+1D304, "๐Œ„", f09d8c84),
-_c(U+1D305, "๐Œ…", f09d8c85),
-_c(U+1D306, "๐Œ†", f09d8c86),
-_c(U+1D307, "๐Œ‡", f09d8c87),
-_c(U+1D308, "๐Œˆ", f09d8c88),
-_c(U+1D309, "๐Œ‰", f09d8c89),
-_c(U+1D30A, "๐ŒŠ", f09d8c8a),
-_c(U+1D30B, "๐Œ‹", f09d8c8b),
-_c(U+1D30C, "๐ŒŒ", f09d8c8c),
-_c(U+1D30D, "๐Œ", f09d8c8d),
-_c(U+1D30E, "๐ŒŽ", f09d8c8e),
-_c(U+1D30F, "๐Œ", f09d8c8f),
-_c(U+1D310, "๐Œ", f09d8c90),
-_c(U+1D311, "๐Œ‘", f09d8c91),
-_c(U+1D312, "๐Œ’", f09d8c92),
-_c(U+1D313, "๐Œ“", f09d8c93),
-_c(U+1D314, "๐Œ”", f09d8c94),
-_c(U+1D315, "๐Œ•", f09d8c95),
-_c(U+1D316, "๐Œ–", f09d8c96),
-_c(U+1D317, "๐Œ—", f09d8c97),
-_c(U+1D318, "๐Œ˜", f09d8c98),
-_c(U+1D319, "๐Œ™", f09d8c99),
-_c(U+1D31A, "๐Œš", f09d8c9a),
-_c(U+1D31B, "๐Œ›", f09d8c9b),
-_c(U+1D31C, "๐Œœ", f09d8c9c),
-_c(U+1D31D, "๐Œ", f09d8c9d),
-_c(U+1D31E, "๐Œž", f09d8c9e),
-_c(U+1D31F, "๐ŒŸ", f09d8c9f),
-_c(U+1D320, "๐Œ ", f09d8ca0),
-_c(U+1D321, "๐Œก", f09d8ca1),
-_c(U+1D322, "๐Œข", f09d8ca2),
-_c(U+1D323, "๐Œฃ", f09d8ca3),
-_c(U+1D324, "๐Œค", f09d8ca4),
-_c(U+1D325, "๐Œฅ", f09d8ca5),
-_c(U+1D326, "๐Œฆ", f09d8ca6),
-_c(U+1D327, "๐Œง", f09d8ca7),
-_c(U+1D328, "๐Œจ", f09d8ca8),
-_c(U+1D329, "๐Œฉ", f09d8ca9),
-_c(U+1D32A, "๐Œช", f09d8caa),
-_c(U+1D32B, "๐Œซ", f09d8cab),
-_c(U+1D32C, "๐Œฌ", f09d8cac),
-_c(U+1D32D, "๐Œญ", f09d8cad),
-_c(U+1D32E, "๐Œฎ", f09d8cae),
-_c(U+1D32F, "๐Œฏ", f09d8caf),
-_c(U+1D330, "๐Œฐ", f09d8cb0),
-_c(U+1D331, "๐Œฑ", f09d8cb1),
-_c(U+1D332, "๐Œฒ", f09d8cb2),
-_c(U+1D333, "๐Œณ", f09d8cb3),
-_c(U+1D334, "๐Œด", f09d8cb4),
-_c(U+1D335, "๐Œต", f09d8cb5),
-_c(U+1D336, "๐Œถ", f09d8cb6),
-_c(U+1D337, "๐Œท", f09d8cb7),
-_c(U+1D338, "๐Œธ", f09d8cb8),
-_c(U+1D339, "๐Œน", f09d8cb9),
-_c(U+1D33A, "๐Œบ", f09d8cba),
-_c(U+1D33B, "๐Œป", f09d8cbb),
-_c(U+1D33C, "๐Œผ", f09d8cbc),
-_c(U+1D33D, "๐Œฝ", f09d8cbd),
-_c(U+1D33E, "๐Œพ", f09d8cbe),
-_c(U+1D33F, "๐Œฟ", f09d8cbf),
-_c(U+1D340, "๐€", f09d8d80),
-_c(U+1D341, "๐", f09d8d81),
-_c(U+1D342, "๐‚", f09d8d82),
-_c(U+1D343, "๐ƒ", f09d8d83),
-_c(U+1D344, "๐„", f09d8d84),
-_c(U+1D345, "๐…", f09d8d85),
-_c(U+1D346, "๐†", f09d8d86),
-_c(U+1D347, "๐‡", f09d8d87),
-_c(U+1D348, "๐ˆ", f09d8d88),
-_c(U+1D349, "๐‰", f09d8d89),
-_c(U+1D34A, "๐Š", f09d8d8a),
-_c(U+1D34B, "๐‹", f09d8d8b),
-_c(U+1D34C, "๐Œ", f09d8d8c),
-_c(U+1D34D, "๐", f09d8d8d),
-_c(U+1D34E, "๐Ž", f09d8d8e),
-_c(U+1D34F, "๐", f09d8d8f),
-_c(U+1D350, "๐", f09d8d90),
-_c(U+1D351, "๐‘", f09d8d91),
-_c(U+1D352, "๐’", f09d8d92),
-_c(U+1D353, "๐“", f09d8d93),
-_c(U+1D354, "๐”", f09d8d94),
-_c(U+1D355, "๐•", f09d8d95),
-_c(U+1D356, "๐–", f09d8d96),
-_c(U+1D357, "๐—", f09d8d97),
-_c(U+1D358, "๐˜", f09d8d98),
-_c(U+1D359, "๐™", f09d8d99),
-_c(U+1D35A, "๐š", f09d8d9a),
-_c(U+1D35B, "๐›", f09d8d9b),
-_c(U+1D35C, "๐œ", f09d8d9c),
-_c(U+1D35D, "๐", f09d8d9d),
-_c(U+1D35E, "๐ž", f09d8d9e),
-_c(U+1D35F, "๐Ÿ", f09d8d9f),
-_c(U+1D360, "๐ ", f09d8da0),
-_c(U+1D361, "๐ก", f09d8da1),
-_c(U+1D362, "๐ข", f09d8da2),
-_c(U+1D363, "๐ฃ", f09d8da3),
-_c(U+1D364, "๐ค", f09d8da4),
-_c(U+1D365, "๐ฅ", f09d8da5),
-_c(U+1D366, "๐ฆ", f09d8da6),
-_c(U+1D367, "๐ง", f09d8da7),
-_c(U+1D368, "๐จ", f09d8da8),
-_c(U+1D369, "๐ฉ", f09d8da9),
-_c(U+1D36A, "๐ช", f09d8daa),
-_c(U+1D36B, "๐ซ", f09d8dab),
-_c(U+1D36C, "๐ฌ", f09d8dac),
-_c(U+1D36D, "๐ญ", f09d8dad),
-_c(U+1D36E, "๐ฎ", f09d8dae),
-_c(U+1D36F, "๐ฏ", f09d8daf),
-_c(U+1D370, "๐ฐ", f09d8db0),
-_c(U+1D371, "๐ฑ", f09d8db1),
-_c(U+1D372, "๐ฒ", f09d8db2),
-_c(U+1D373, "๐ณ", f09d8db3),
-_c(U+1D374, "๐ด", f09d8db4),
-_c(U+1D375, "๐ต", f09d8db5),
-_c(U+1D376, "๐ถ", f09d8db6),
-_c(U+1D377, "๐ท", f09d8db7),
-_c(U+1D378, "๐ธ", f09d8db8),
-_c(U+1D379, "๐น", f09d8db9),
-_c(U+1D37A, "๐บ", f09d8dba),
-_c(U+1D37B, "๐ป", f09d8dbb),
-_c(U+1D37C, "๐ผ", f09d8dbc),
-_c(U+1D37D, "๐ฝ", f09d8dbd),
-_c(U+1D37E, "๐พ", f09d8dbe),
-_c(U+1D37F, "๐ฟ", f09d8dbf),
-_c(U+1D380, "๐Ž€", f09d8e80),
-_c(U+1D381, "๐Ž", f09d8e81),
-_c(U+1D382, "๐Ž‚", f09d8e82),
-_c(U+1D383, "๐Žƒ", f09d8e83),
-_c(U+1D384, "๐Ž„", f09d8e84),
-_c(U+1D385, "๐Ž…", f09d8e85),
-_c(U+1D386, "๐Ž†", f09d8e86),
-_c(U+1D387, "๐Ž‡", f09d8e87),
-_c(U+1D388, "๐Žˆ", f09d8e88),
-_c(U+1D389, "๐Ž‰", f09d8e89),
-_c(U+1D38A, "๐ŽŠ", f09d8e8a),
-_c(U+1D38B, "๐Ž‹", f09d8e8b),
-_c(U+1D38C, "๐ŽŒ", f09d8e8c),
-_c(U+1D38D, "๐Ž", f09d8e8d),
-_c(U+1D38E, "๐ŽŽ", f09d8e8e),
-_c(U+1D38F, "๐Ž", f09d8e8f),
-_c(U+1D390, "๐Ž", f09d8e90),
-_c(U+1D391, "๐Ž‘", f09d8e91),
-_c(U+1D392, "๐Ž’", f09d8e92),
-_c(U+1D393, "๐Ž“", f09d8e93),
-_c(U+1D394, "๐Ž”", f09d8e94),
-_c(U+1D395, "๐Ž•", f09d8e95),
-_c(U+1D396, "๐Ž–", f09d8e96),
-_c(U+1D397, "๐Ž—", f09d8e97),
-_c(U+1D398, "๐Ž˜", f09d8e98),
-_c(U+1D399, "๐Ž™", f09d8e99),
-_c(U+1D39A, "๐Žš", f09d8e9a),
-_c(U+1D39B, "๐Ž›", f09d8e9b),
-_c(U+1D39C, "๐Žœ", f09d8e9c),
-_c(U+1D39D, "๐Ž", f09d8e9d),
-_c(U+1D39E, "๐Žž", f09d8e9e),
-_c(U+1D39F, "๐ŽŸ", f09d8e9f),
-_c(U+1D3A0, "๐Ž ", f09d8ea0),
-_c(U+1D3A1, "๐Žก", f09d8ea1),
-_c(U+1D3A2, "๐Žข", f09d8ea2),
-_c(U+1D3A3, "๐Žฃ", f09d8ea3),
-_c(U+1D3A4, "๐Žค", f09d8ea4),
-_c(U+1D3A5, "๐Žฅ", f09d8ea5),
-_c(U+1D3A6, "๐Žฆ", f09d8ea6),
-_c(U+1D3A7, "๐Žง", f09d8ea7),
-_c(U+1D3A8, "๐Žจ", f09d8ea8),
-_c(U+1D3A9, "๐Žฉ", f09d8ea9),
-_c(U+1D3AA, "๐Žช", f09d8eaa),
-_c(U+1D3AB, "๐Žซ", f09d8eab),
-_c(U+1D3AC, "๐Žฌ", f09d8eac),
-_c(U+1D3AD, "๐Žญ", f09d8ead),
-_c(U+1D3AE, "๐Žฎ", f09d8eae),
-_c(U+1D3AF, "๐Žฏ", f09d8eaf),
-_c(U+1D3B0, "๐Žฐ", f09d8eb0),
-_c(U+1D3B1, "๐Žฑ", f09d8eb1),
-_c(U+1D3B2, "๐Žฒ", f09d8eb2),
-_c(U+1D3B3, "๐Žณ", f09d8eb3),
-_c(U+1D3B4, "๐Žด", f09d8eb4),
-_c(U+1D3B5, "๐Žต", f09d8eb5),
-_c(U+1D3B6, "๐Žถ", f09d8eb6),
-_c(U+1D3B7, "๐Žท", f09d8eb7),
-_c(U+1D3B8, "๐Žธ", f09d8eb8),
-_c(U+1D3B9, "๐Žน", f09d8eb9),
-_c(U+1D3BA, "๐Žบ", f09d8eba),
-_c(U+1D3BB, "๐Žป", f09d8ebb),
-_c(U+1D3BC, "๐Žผ", f09d8ebc),
-_c(U+1D3BD, "๐Žฝ", f09d8ebd),
-_c(U+1D3BE, "๐Žพ", f09d8ebe),
-_c(U+1D3BF, "๐Žฟ", f09d8ebf),
-_c(U+1D3C0, "๐€", f09d8f80),
-_c(U+1D3C1, "๐", f09d8f81),
-_c(U+1D3C2, "๐‚", f09d8f82),
-_c(U+1D3C3, "๐ƒ", f09d8f83),
-_c(U+1D3C4, "๐„", f09d8f84),
-_c(U+1D3C5, "๐…", f09d8f85),
-_c(U+1D3C6, "๐†", f09d8f86),
-_c(U+1D3C7, "๐‡", f09d8f87),
-_c(U+1D3C8, "๐ˆ", f09d8f88),
-_c(U+1D3C9, "๐‰", f09d8f89),
-_c(U+1D3CA, "๐Š", f09d8f8a),
-_c(U+1D3CB, "๐‹", f09d8f8b),
-_c(U+1D3CC, "๐Œ", f09d8f8c),
-_c(U+1D3CD, "๐", f09d8f8d),
-_c(U+1D3CE, "๐Ž", f09d8f8e),
-_c(U+1D3CF, "๐", f09d8f8f),
-_c(U+1D3D0, "๐", f09d8f90),
-_c(U+1D3D1, "๐‘", f09d8f91),
-_c(U+1D3D2, "๐’", f09d8f92),
-_c(U+1D3D3, "๐“", f09d8f93),
-_c(U+1D3D4, "๐”", f09d8f94),
-_c(U+1D3D5, "๐•", f09d8f95),
-_c(U+1D3D6, "๐–", f09d8f96),
-_c(U+1D3D7, "๐—", f09d8f97),
-_c(U+1D3D8, "๐˜", f09d8f98),
-_c(U+1D3D9, "๐™", f09d8f99),
-_c(U+1D3DA, "๐š", f09d8f9a),
-_c(U+1D3DB, "๐›", f09d8f9b),
-_c(U+1D3DC, "๐œ", f09d8f9c),
-_c(U+1D3DD, "๐", f09d8f9d),
-_c(U+1D3DE, "๐ž", f09d8f9e),
-_c(U+1D3DF, "๐Ÿ", f09d8f9f),
-_c(U+1D3E0, "๐ ", f09d8fa0),
-_c(U+1D3E1, "๐ก", f09d8fa1),
-_c(U+1D3E2, "๐ข", f09d8fa2),
-_c(U+1D3E3, "๐ฃ", f09d8fa3),
-_c(U+1D3E4, "๐ค", f09d8fa4),
-_c(U+1D3E5, "๐ฅ", f09d8fa5),
-_c(U+1D3E6, "๐ฆ", f09d8fa6),
-_c(U+1D3E7, "๐ง", f09d8fa7),
-_c(U+1D3E8, "๐จ", f09d8fa8),
-_c(U+1D3E9, "๐ฉ", f09d8fa9),
-_c(U+1D3EA, "๐ช", f09d8faa),
-_c(U+1D3EB, "๐ซ", f09d8fab),
-_c(U+1D3EC, "๐ฌ", f09d8fac),
-_c(U+1D3ED, "๐ญ", f09d8fad),
-_c(U+1D3EE, "๐ฎ", f09d8fae),
-_c(U+1D3EF, "๐ฏ", f09d8faf),
-_c(U+1D3F0, "๐ฐ", f09d8fb0),
-_c(U+1D3F1, "๐ฑ", f09d8fb1),
-_c(U+1D3F2, "๐ฒ", f09d8fb2),
-_c(U+1D3F3, "๐ณ", f09d8fb3),
-_c(U+1D3F4, "๐ด", f09d8fb4),
-_c(U+1D3F5, "๐ต", f09d8fb5),
-_c(U+1D3F6, "๐ถ", f09d8fb6),
-_c(U+1D3F7, "๐ท", f09d8fb7),
-_c(U+1D3F8, "๐ธ", f09d8fb8),
-_c(U+1D3F9, "๐น", f09d8fb9),
-_c(U+1D3FA, "๐บ", f09d8fba),
-_c(U+1D3FB, "๐ป", f09d8fbb),
-_c(U+1D3FC, "๐ผ", f09d8fbc),
-_c(U+1D3FD, "๐ฝ", f09d8fbd),
-_c(U+1D3FE, "๐พ", f09d8fbe),
-_c(U+1D3FF, "๐ฟ", f09d8fbf),
-_c(U+1D400, "๐€", f09d9080),
-_c(U+1D401, "๐", f09d9081),
-_c(U+1D402, "๐‚", f09d9082),
-_c(U+1D403, "๐ƒ", f09d9083),
-_c(U+1D404, "๐„", f09d9084),
-_c(U+1D405, "๐…", f09d9085),
-_c(U+1D406, "๐†", f09d9086),
-_c(U+1D407, "๐‡", f09d9087),
-_c(U+1D408, "๐ˆ", f09d9088),
-_c(U+1D409, "๐‰", f09d9089),
-_c(U+1D40A, "๐Š", f09d908a),
-_c(U+1D40B, "๐‹", f09d908b),
-_c(U+1D40C, "๐Œ", f09d908c),
-_c(U+1D40D, "๐", f09d908d),
-_c(U+1D40E, "๐Ž", f09d908e),
-_c(U+1D40F, "๐", f09d908f),
-_c(U+1D410, "๐", f09d9090),
-_c(U+1D411, "๐‘", f09d9091),
-_c(U+1D412, "๐’", f09d9092),
-_c(U+1D413, "๐“", f09d9093),
-_c(U+1D414, "๐”", f09d9094),
-_c(U+1D415, "๐•", f09d9095),
-_c(U+1D416, "๐–", f09d9096),
-_c(U+1D417, "๐—", f09d9097),
-_c(U+1D418, "๐˜", f09d9098),
-_c(U+1D419, "๐™", f09d9099),
-_c(U+1D41A, "๐š", f09d909a),
-_c(U+1D41B, "๐›", f09d909b),
-_c(U+1D41C, "๐œ", f09d909c),
-_c(U+1D41D, "๐", f09d909d),
-_c(U+1D41E, "๐ž", f09d909e),
-_c(U+1D41F, "๐Ÿ", f09d909f),
-_c(U+1D420, "๐ ", f09d90a0),
-_c(U+1D421, "๐ก", f09d90a1),
-_c(U+1D422, "๐ข", f09d90a2),
-_c(U+1D423, "๐ฃ", f09d90a3),
-_c(U+1D424, "๐ค", f09d90a4),
-_c(U+1D425, "๐ฅ", f09d90a5),
-_c(U+1D426, "๐ฆ", f09d90a6),
-_c(U+1D427, "๐ง", f09d90a7),
-_c(U+1D428, "๐จ", f09d90a8),
-_c(U+1D429, "๐ฉ", f09d90a9),
-_c(U+1D42A, "๐ช", f09d90aa),
-_c(U+1D42B, "๐ซ", f09d90ab),
-_c(U+1D42C, "๐ฌ", f09d90ac),
-_c(U+1D42D, "๐ญ", f09d90ad),
-_c(U+1D42E, "๐ฎ", f09d90ae),
-_c(U+1D42F, "๐ฏ", f09d90af),
-_c(U+1D430, "๐ฐ", f09d90b0),
-_c(U+1D431, "๐ฑ", f09d90b1),
-_c(U+1D432, "๐ฒ", f09d90b2),
-_c(U+1D433, "๐ณ", f09d90b3),
-_c(U+1D434, "๐ด", f09d90b4),
-_c(U+1D435, "๐ต", f09d90b5),
-_c(U+1D436, "๐ถ", f09d90b6),
-_c(U+1D437, "๐ท", f09d90b7),
-_c(U+1D438, "๐ธ", f09d90b8),
-_c(U+1D439, "๐น", f09d90b9),
-_c(U+1D43A, "๐บ", f09d90ba),
-_c(U+1D43B, "๐ป", f09d90bb),
-_c(U+1D43C, "๐ผ", f09d90bc),
-_c(U+1D43D, "๐ฝ", f09d90bd),
-_c(U+1D43E, "๐พ", f09d90be),
-_c(U+1D43F, "๐ฟ", f09d90bf),
-_c(U+1D440, "๐‘€", f09d9180),
-_c(U+1D441, "๐‘", f09d9181),
-_c(U+1D442, "๐‘‚", f09d9182),
-_c(U+1D443, "๐‘ƒ", f09d9183),
-_c(U+1D444, "๐‘„", f09d9184),
-_c(U+1D445, "๐‘…", f09d9185),
-_c(U+1D446, "๐‘†", f09d9186),
-_c(U+1D447, "๐‘‡", f09d9187),
-_c(U+1D448, "๐‘ˆ", f09d9188),
-_c(U+1D449, "๐‘‰", f09d9189),
-_c(U+1D44A, "๐‘Š", f09d918a),
-_c(U+1D44B, "๐‘‹", f09d918b),
-_c(U+1D44C, "๐‘Œ", f09d918c),
-_c(U+1D44D, "๐‘", f09d918d),
-_c(U+1D44E, "๐‘Ž", f09d918e),
-_c(U+1D44F, "๐‘", f09d918f),
-_c(U+1D450, "๐‘", f09d9190),
-_c(U+1D451, "๐‘‘", f09d9191),
-_c(U+1D452, "๐‘’", f09d9192),
-_c(U+1D453, "๐‘“", f09d9193),
-_c(U+1D454, "๐‘”", f09d9194),
-_c(U+1D455, "๐‘•", f09d9195),
-_c(U+1D456, "๐‘–", f09d9196),
-_c(U+1D457, "๐‘—", f09d9197),
-_c(U+1D458, "๐‘˜", f09d9198),
-_c(U+1D459, "๐‘™", f09d9199),
-_c(U+1D45A, "๐‘š", f09d919a),
-_c(U+1D45B, "๐‘›", f09d919b),
-_c(U+1D45C, "๐‘œ", f09d919c),
-_c(U+1D45D, "๐‘", f09d919d),
-_c(U+1D45E, "๐‘ž", f09d919e),
-_c(U+1D45F, "๐‘Ÿ", f09d919f),
-_c(U+1D460, "๐‘ ", f09d91a0),
-_c(U+1D461, "๐‘ก", f09d91a1),
-_c(U+1D462, "๐‘ข", f09d91a2),
-_c(U+1D463, "๐‘ฃ", f09d91a3),
-_c(U+1D464, "๐‘ค", f09d91a4),
-_c(U+1D465, "๐‘ฅ", f09d91a5),
-_c(U+1D466, "๐‘ฆ", f09d91a6),
-_c(U+1D467, "๐‘ง", f09d91a7),
-_c(U+1D468, "๐‘จ", f09d91a8),
-_c(U+1D469, "๐‘ฉ", f09d91a9),
-_c(U+1D46A, "๐‘ช", f09d91aa),
-_c(U+1D46B, "๐‘ซ", f09d91ab),
-_c(U+1D46C, "๐‘ฌ", f09d91ac),
-_c(U+1D46D, "๐‘ญ", f09d91ad),
-_c(U+1D46E, "๐‘ฎ", f09d91ae),
-_c(U+1D46F, "๐‘ฏ", f09d91af),
-_c(U+1D470, "๐‘ฐ", f09d91b0),
-_c(U+1D471, "๐‘ฑ", f09d91b1),
-_c(U+1D472, "๐‘ฒ", f09d91b2),
-_c(U+1D473, "๐‘ณ", f09d91b3),
-_c(U+1D474, "๐‘ด", f09d91b4),
-_c(U+1D475, "๐‘ต", f09d91b5),
-_c(U+1D476, "๐‘ถ", f09d91b6),
-_c(U+1D477, "๐‘ท", f09d91b7),
-_c(U+1D478, "๐‘ธ", f09d91b8),
-_c(U+1D479, "๐‘น", f09d91b9),
-_c(U+1D47A, "๐‘บ", f09d91ba),
-_c(U+1D47B, "๐‘ป", f09d91bb),
-_c(U+1D47C, "๐‘ผ", f09d91bc),
-_c(U+1D47D, "๐‘ฝ", f09d91bd),
-_c(U+1D47E, "๐‘พ", f09d91be),
-_c(U+1D47F, "๐‘ฟ", f09d91bf),
-_c(U+1D480, "๐’€", f09d9280),
-_c(U+1D481, "๐’", f09d9281),
-_c(U+1D482, "๐’‚", f09d9282),
-_c(U+1D483, "๐’ƒ", f09d9283),
-_c(U+1D484, "๐’„", f09d9284),
-_c(U+1D485, "๐’…", f09d9285),
-_c(U+1D486, "๐’†", f09d9286),
-_c(U+1D487, "๐’‡", f09d9287),
-_c(U+1D488, "๐’ˆ", f09d9288),
-_c(U+1D489, "๐’‰", f09d9289),
-_c(U+1D48A, "๐’Š", f09d928a),
-_c(U+1D48B, "๐’‹", f09d928b),
-_c(U+1D48C, "๐’Œ", f09d928c),
-_c(U+1D48D, "๐’", f09d928d),
-_c(U+1D48E, "๐’Ž", f09d928e),
-_c(U+1D48F, "๐’", f09d928f),
-_c(U+1D490, "๐’", f09d9290),
-_c(U+1D491, "๐’‘", f09d9291),
-_c(U+1D492, "๐’’", f09d9292),
-_c(U+1D493, "๐’“", f09d9293),
-_c(U+1D494, "๐’”", f09d9294),
-_c(U+1D495, "๐’•", f09d9295),
-_c(U+1D496, "๐’–", f09d9296),
-_c(U+1D497, "๐’—", f09d9297),
-_c(U+1D498, "๐’˜", f09d9298),
-_c(U+1D499, "๐’™", f09d9299),
-_c(U+1D49A, "๐’š", f09d929a),
-_c(U+1D49B, "๐’›", f09d929b),
-_c(U+1D49C, "๐’œ", f09d929c),
-_c(U+1D49D, "๐’", f09d929d),
-_c(U+1D49E, "๐’ž", f09d929e),
-_c(U+1D49F, "๐’Ÿ", f09d929f),
-_c(U+1D4A0, "๐’ ", f09d92a0),
-_c(U+1D4A1, "๐’ก", f09d92a1),
-_c(U+1D4A2, "๐’ข", f09d92a2),
-_c(U+1D4A3, "๐’ฃ", f09d92a3),
-_c(U+1D4A4, "๐’ค", f09d92a4),
-_c(U+1D4A5, "๐’ฅ", f09d92a5),
-_c(U+1D4A6, "๐’ฆ", f09d92a6),
-_c(U+1D4A7, "๐’ง", f09d92a7),
-_c(U+1D4A8, "๐’จ", f09d92a8),
-_c(U+1D4A9, "๐’ฉ", f09d92a9),
-_c(U+1D4AA, "๐’ช", f09d92aa),
-_c(U+1D4AB, "๐’ซ", f09d92ab),
-_c(U+1D4AC, "๐’ฌ", f09d92ac),
-_c(U+1D4AD, "๐’ญ", f09d92ad),
-_c(U+1D4AE, "๐’ฎ", f09d92ae),
-_c(U+1D4AF, "๐’ฏ", f09d92af),
-_c(U+1D4B0, "๐’ฐ", f09d92b0),
-_c(U+1D4B1, "๐’ฑ", f09d92b1),
-_c(U+1D4B2, "๐’ฒ", f09d92b2),
-_c(U+1D4B3, "๐’ณ", f09d92b3),
-_c(U+1D4B4, "๐’ด", f09d92b4),
-_c(U+1D4B5, "๐’ต", f09d92b5),
-_c(U+1D4B6, "๐’ถ", f09d92b6),
-_c(U+1D4B7, "๐’ท", f09d92b7),
-_c(U+1D4B8, "๐’ธ", f09d92b8),
-_c(U+1D4B9, "๐’น", f09d92b9),
-_c(U+1D4BA, "๐’บ", f09d92ba),
-_c(U+1D4BB, "๐’ป", f09d92bb),
-_c(U+1D4BC, "๐’ผ", f09d92bc),
-_c(U+1D4BD, "๐’ฝ", f09d92bd),
-_c(U+1D4BE, "๐’พ", f09d92be),
-_c(U+1D4BF, "๐’ฟ", f09d92bf),
-_c(U+1D4C0, "๐“€", f09d9380),
-_c(U+1D4C1, "๐“", f09d9381),
-_c(U+1D4C2, "๐“‚", f09d9382),
-_c(U+1D4C3, "๐“ƒ", f09d9383),
-_c(U+1D4C4, "๐“„", f09d9384),
-_c(U+1D4C5, "๐“…", f09d9385),
-_c(U+1D4C6, "๐“†", f09d9386),
-_c(U+1D4C7, "๐“‡", f09d9387),
-_c(U+1D4C8, "๐“ˆ", f09d9388),
-_c(U+1D4C9, "๐“‰", f09d9389),
-_c(U+1D4CA, "๐“Š", f09d938a),
-_c(U+1D4CB, "๐“‹", f09d938b),
-_c(U+1D4CC, "๐“Œ", f09d938c),
-_c(U+1D4CD, "๐“", f09d938d),
-_c(U+1D4CE, "๐“Ž", f09d938e),
-_c(U+1D4CF, "๐“", f09d938f),
-_c(U+1D4D0, "๐“", f09d9390),
-_c(U+1D4D1, "๐“‘", f09d9391),
-_c(U+1D4D2, "๐“’", f09d9392),
-_c(U+1D4D3, "๐““", f09d9393),
-_c(U+1D4D4, "๐“”", f09d9394),
-_c(U+1D4D5, "๐“•", f09d9395),
-_c(U+1D4D6, "๐“–", f09d9396),
-_c(U+1D4D7, "๐“—", f09d9397),
-_c(U+1D4D8, "๐“˜", f09d9398),
-_c(U+1D4D9, "๐“™", f09d9399),
-_c(U+1D4DA, "๐“š", f09d939a),
-_c(U+1D4DB, "๐“›", f09d939b),
-_c(U+1D4DC, "๐“œ", f09d939c),
-_c(U+1D4DD, "๐“", f09d939d),
-_c(U+1D4DE, "๐“ž", f09d939e),
-_c(U+1D4DF, "๐“Ÿ", f09d939f),
-_c(U+1D4E0, "๐“ ", f09d93a0),
-_c(U+1D4E1, "๐“ก", f09d93a1),
-_c(U+1D4E2, "๐“ข", f09d93a2),
-_c(U+1D4E3, "๐“ฃ", f09d93a3),
-_c(U+1D4E4, "๐“ค", f09d93a4),
-_c(U+1D4E5, "๐“ฅ", f09d93a5),
-_c(U+1D4E6, "๐“ฆ", f09d93a6),
-_c(U+1D4E7, "๐“ง", f09d93a7),
-_c(U+1D4E8, "๐“จ", f09d93a8),
-_c(U+1D4E9, "๐“ฉ", f09d93a9),
-_c(U+1D4EA, "๐“ช", f09d93aa),
-_c(U+1D4EB, "๐“ซ", f09d93ab),
-_c(U+1D4EC, "๐“ฌ", f09d93ac),
-_c(U+1D4ED, "๐“ญ", f09d93ad),
-_c(U+1D4EE, "๐“ฎ", f09d93ae),
-_c(U+1D4EF, "๐“ฏ", f09d93af),
-_c(U+1D4F0, "๐“ฐ", f09d93b0),
-_c(U+1D4F1, "๐“ฑ", f09d93b1),
-_c(U+1D4F2, "๐“ฒ", f09d93b2),
-_c(U+1D4F3, "๐“ณ", f09d93b3),
-_c(U+1D4F4, "๐“ด", f09d93b4),
-_c(U+1D4F5, "๐“ต", f09d93b5),
-_c(U+1D4F6, "๐“ถ", f09d93b6),
-_c(U+1D4F7, "๐“ท", f09d93b7),
-_c(U+1D4F8, "๐“ธ", f09d93b8),
-_c(U+1D4F9, "๐“น", f09d93b9),
-_c(U+1D4FA, "๐“บ", f09d93ba),
-_c(U+1D4FB, "๐“ป", f09d93bb),
-_c(U+1D4FC, "๐“ผ", f09d93bc),
-_c(U+1D4FD, "๐“ฝ", f09d93bd),
-_c(U+1D4FE, "๐“พ", f09d93be),
-_c(U+1D4FF, "๐“ฟ", f09d93bf),
-_c(U+1F600, "๐Ÿ˜€", f09f9880),
-_c(U+1F601, "๐Ÿ˜", f09f9881),
-_c(U+1F602, "๐Ÿ˜‚", f09f9882),
-_c(U+1F603, "๐Ÿ˜ƒ", f09f9883),
-_c(U+1F604, "๐Ÿ˜„", f09f9884),
-_c(U+1F605, "๐Ÿ˜…", f09f9885),
-_c(U+1F606, "๐Ÿ˜†", f09f9886),
-_c(U+1F607, "๐Ÿ˜‡", f09f9887),
-_c(U+1F608, "๐Ÿ˜ˆ", f09f9888),
-_c(U+1F609, "๐Ÿ˜‰", f09f9889),
-_c(U+1F60A, "๐Ÿ˜Š", f09f988a),
-_c(U+1F60B, "๐Ÿ˜‹", f09f988b),
-_c(U+1F60C, "๐Ÿ˜Œ", f09f988c),
-_c(U+1F60D, "๐Ÿ˜", f09f988d),
-_c(U+1F60E, "๐Ÿ˜Ž", f09f988e),
-_c(U+1F60F, "๐Ÿ˜", f09f988f),
-_c(U+1F610, "๐Ÿ˜", f09f9890),
-_c(U+1F611, "๐Ÿ˜‘", f09f9891),
-_c(U+1F612, "๐Ÿ˜’", f09f9892),
-_c(U+1F613, "๐Ÿ˜“", f09f9893),
-_c(U+1F614, "๐Ÿ˜”", f09f9894),
-_c(U+1F615, "๐Ÿ˜•", f09f9895),
-_c(U+1F616, "๐Ÿ˜–", f09f9896),
-_c(U+1F617, "๐Ÿ˜—", f09f9897),
-_c(U+1F618, "๐Ÿ˜˜", f09f9898),
-_c(U+1F619, "๐Ÿ˜™", f09f9899),
-_c(U+1F61A, "๐Ÿ˜š", f09f989a),
-_c(U+1F61B, "๐Ÿ˜›", f09f989b),
-_c(U+1F61C, "๐Ÿ˜œ", f09f989c),
-_c(U+1F61D, "๐Ÿ˜", f09f989d),
-_c(U+1F61E, "๐Ÿ˜ž", f09f989e),
-_c(U+1F61F, "๐Ÿ˜Ÿ", f09f989f),
-_c(U+1F620, "๐Ÿ˜ ", f09f98a0),
-_c(U+1F621, "๐Ÿ˜ก", f09f98a1),
-_c(U+1F622, "๐Ÿ˜ข", f09f98a2),
-_c(U+1F623, "๐Ÿ˜ฃ", f09f98a3),
-_c(U+1F624, "๐Ÿ˜ค", f09f98a4),
-_c(U+1F625, "๐Ÿ˜ฅ", f09f98a5),
-_c(U+1F626, "๐Ÿ˜ฆ", f09f98a6),
-_c(U+1F627, "๐Ÿ˜ง", f09f98a7),
-_c(U+1F628, "๐Ÿ˜จ", f09f98a8),
-_c(U+1F629, "๐Ÿ˜ฉ", f09f98a9),
-_c(U+1F62A, "๐Ÿ˜ช", f09f98aa),
-_c(U+1F62B, "๐Ÿ˜ซ", f09f98ab),
-_c(U+1F62C, "๐Ÿ˜ฌ", f09f98ac),
-_c(U+1F62D, "๐Ÿ˜ญ", f09f98ad),
-_c(U+1F62E, "๐Ÿ˜ฎ", f09f98ae),
-_c(U+1F62F, "๐Ÿ˜ฏ", f09f98af),
-_c(U+1F630, "๐Ÿ˜ฐ", f09f98b0),
-_c(U+1F631, "๐Ÿ˜ฑ", f09f98b1),
-_c(U+1F632, "๐Ÿ˜ฒ", f09f98b2),
-_c(U+1F633, "๐Ÿ˜ณ", f09f98b3),
-_c(U+1F634, "๐Ÿ˜ด", f09f98b4),
-_c(U+1F635, "๐Ÿ˜ต", f09f98b5),
-_c(U+1F636, "๐Ÿ˜ถ", f09f98b6),
-_c(U+1F637, "๐Ÿ˜ท", f09f98b7),
-_c(U+1F638, "๐Ÿ˜ธ", f09f98b8),
-_c(U+1F639, "๐Ÿ˜น", f09f98b9),
-_c(U+1F63A, "๐Ÿ˜บ", f09f98ba),
-_c(U+1F63B, "๐Ÿ˜ป", f09f98bb),
-_c(U+1F63C, "๐Ÿ˜ผ", f09f98bc),
-_c(U+1F63D, "๐Ÿ˜ฝ", f09f98bd),
-_c(U+1F63E, "๐Ÿ˜พ", f09f98be),
-_c(U+1F63F, "๐Ÿ˜ฟ", f09f98bf),
-_c(U+1F640, "๐Ÿ™€", f09f9980),
-_c(U+1F641, "๐Ÿ™", f09f9981),
-_c(U+1F642, "๐Ÿ™‚", f09f9982),
-_c(U+1F643, "๐Ÿ™ƒ", f09f9983),
-_c(U+1F644, "๐Ÿ™„", f09f9984),
-_c(U+1F645, "๐Ÿ™…", f09f9985),
-_c(U+1F646, "๐Ÿ™†", f09f9986),
-_c(U+1F647, "๐Ÿ™‡", f09f9987),
-_c(U+1F648, "๐Ÿ™ˆ", f09f9988),
-_c(U+1F649, "๐Ÿ™‰", f09f9989),
-_c(U+1F64A, "๐Ÿ™Š", f09f998a),
-_c(U+1F64B, "๐Ÿ™‹", f09f998b),
-_c(U+1F64C, "๐Ÿ™Œ", f09f998c),
-_c(U+1F64D, "๐Ÿ™", f09f998d),
-_c(U+1F64E, "๐Ÿ™Ž", f09f998e),
-_c(U+1F64F, "๐Ÿ™", f09f998f),
-_c(U+1F650, "๐Ÿ™", f09f9990),
-_c(U+1F651, "๐Ÿ™‘", f09f9991),
-_c(U+1F652, "๐Ÿ™’", f09f9992),
-_c(U+1F653, "๐Ÿ™“", f09f9993),
-_c(U+1F654, "๐Ÿ™”", f09f9994),
-_c(U+1F655, "๐Ÿ™•", f09f9995),
-_c(U+1F656, "๐Ÿ™–", f09f9996),
-_c(U+1F657, "๐Ÿ™—", f09f9997),
-_c(U+1F658, "๐Ÿ™˜", f09f9998),
-_c(U+1F659, "๐Ÿ™™", f09f9999),
-_c(U+1F65A, "๐Ÿ™š", f09f999a),
-_c(U+1F65B, "๐Ÿ™›", f09f999b),
-_c(U+1F65C, "๐Ÿ™œ", f09f999c),
-_c(U+1F65D, "๐Ÿ™", f09f999d),
-_c(U+1F65E, "๐Ÿ™ž", f09f999e),
-_c(U+1F65F, "๐Ÿ™Ÿ", f09f999f),
-_c(U+1F660, "๐Ÿ™ ", f09f99a0),
-_c(U+1F661, "๐Ÿ™ก", f09f99a1),
-_c(U+1F662, "๐Ÿ™ข", f09f99a2),
-_c(U+1F663, "๐Ÿ™ฃ", f09f99a3),
-_c(U+1F664, "๐Ÿ™ค", f09f99a4),
-_c(U+1F665, "๐Ÿ™ฅ", f09f99a5),
-_c(U+1F666, "๐Ÿ™ฆ", f09f99a6),
-_c(U+1F667, "๐Ÿ™ง", f09f99a7),
-_c(U+1F668, "๐Ÿ™จ", f09f99a8),
-_c(U+1F669, "๐Ÿ™ฉ", f09f99a9),
-_c(U+1F66A, "๐Ÿ™ช", f09f99aa),
-_c(U+1F66B, "๐Ÿ™ซ", f09f99ab),
-_c(U+1F66C, "๐Ÿ™ฌ", f09f99ac),
-_c(U+1F66D, "๐Ÿ™ญ", f09f99ad),
-_c(U+1F66E, "๐Ÿ™ฎ", f09f99ae),
-_c(U+1F66F, "๐Ÿ™ฏ", f09f99af),
-_c(U+1F670, "๐Ÿ™ฐ", f09f99b0),
-_c(U+1F671, "๐Ÿ™ฑ", f09f99b1),
-_c(U+1F672, "๐Ÿ™ฒ", f09f99b2),
-_c(U+1F673, "๐Ÿ™ณ", f09f99b3),
-_c(U+1F674, "๐Ÿ™ด", f09f99b4),
-_c(U+1F675, "๐Ÿ™ต", f09f99b5),
-_c(U+1F676, "๐Ÿ™ถ", f09f99b6),
-_c(U+1F677, "๐Ÿ™ท", f09f99b7),
-_c(U+1F678, "๐Ÿ™ธ", f09f99b8),
-_c(U+1F679, "๐Ÿ™น", f09f99b9),
-_c(U+1F67A, "๐Ÿ™บ", f09f99ba),
-_c(U+1F67B, "๐Ÿ™ป", f09f99bb),
-_c(U+1F67C, "๐Ÿ™ผ", f09f99bc),
-_c(U+1F67D, "๐Ÿ™ฝ", f09f99bd),
-_c(U+1F67E, "๐Ÿ™พ", f09f99be),
-_c(U+1F67F, "๐Ÿ™ฟ", f09f99bf),
-_c(U+1F680, "๐Ÿš€", f09f9a80),
-_c(U+1F681, "๐Ÿš", f09f9a81),
-_c(U+1F682, "๐Ÿš‚", f09f9a82),
-_c(U+1F683, "๐Ÿšƒ", f09f9a83),
-_c(U+1F684, "๐Ÿš„", f09f9a84),
-_c(U+1F685, "๐Ÿš…", f09f9a85),
-_c(U+1F686, "๐Ÿš†", f09f9a86),
-_c(U+1F687, "๐Ÿš‡", f09f9a87),
-_c(U+1F688, "๐Ÿšˆ", f09f9a88),
-_c(U+1F689, "๐Ÿš‰", f09f9a89),
-_c(U+1F68A, "๐ŸšŠ", f09f9a8a),
-_c(U+1F68B, "๐Ÿš‹", f09f9a8b),
-_c(U+1F68C, "๐ŸšŒ", f09f9a8c),
-_c(U+1F68D, "๐Ÿš", f09f9a8d),
-_c(U+1F68E, "๐ŸšŽ", f09f9a8e),
-_c(U+1F68F, "๐Ÿš", f09f9a8f),
-_c(U+1F690, "๐Ÿš", f09f9a90),
-_c(U+1F691, "๐Ÿš‘", f09f9a91),
-_c(U+1F692, "๐Ÿš’", f09f9a92),
-_c(U+1F693, "๐Ÿš“", f09f9a93),
-_c(U+1F694, "๐Ÿš”", f09f9a94),
-_c(U+1F695, "๐Ÿš•", f09f9a95),
-_c(U+1F696, "๐Ÿš–", f09f9a96),
-_c(U+1F697, "๐Ÿš—", f09f9a97),
-_c(U+1F698, "๐Ÿš˜", f09f9a98),
-_c(U+1F699, "๐Ÿš™", f09f9a99),
-_c(U+1F69A, "๐Ÿšš", f09f9a9a),
-_c(U+1F69B, "๐Ÿš›", f09f9a9b),
-_c(U+1F69C, "๐Ÿšœ", f09f9a9c),
-_c(U+1F69D, "๐Ÿš", f09f9a9d),
-_c(U+1F69E, "๐Ÿšž", f09f9a9e),
-_c(U+1F69F, "๐ŸšŸ", f09f9a9f),
-_c(U+1F6A0, "๐Ÿš ", f09f9aa0),
-_c(U+1F6A1, "๐Ÿšก", f09f9aa1),
-_c(U+1F6A2, "๐Ÿšข", f09f9aa2),
-_c(U+1F6A3, "๐Ÿšฃ", f09f9aa3),
-_c(U+1F6A4, "๐Ÿšค", f09f9aa4),
-_c(U+1F6A5, "๐Ÿšฅ", f09f9aa5),
-_c(U+1F6A6, "๐Ÿšฆ", f09f9aa6),
-_c(U+1F6A7, "๐Ÿšง", f09f9aa7),
-_c(U+1F6A8, "๐Ÿšจ", f09f9aa8),
-_c(U+1F6A9, "๐Ÿšฉ", f09f9aa9),
-_c(U+1F6AA, "๐Ÿšช", f09f9aaa),
-_c(U+1F6AB, "๐Ÿšซ", f09f9aab),
-_c(U+1F6AC, "๐Ÿšฌ", f09f9aac),
-_c(U+1F6AD, "๐Ÿšญ", f09f9aad),
-_c(U+1F6AE, "๐Ÿšฎ", f09f9aae),
-_c(U+1F6AF, "๐Ÿšฏ", f09f9aaf),
-_c(U+1F6B0, "๐Ÿšฐ", f09f9ab0),
-_c(U+1F6B1, "๐Ÿšฑ", f09f9ab1),
-_c(U+1F6B2, "๐Ÿšฒ", f09f9ab2),
-_c(U+1F6B3, "๐Ÿšณ", f09f9ab3),
-_c(U+1F6B4, "๐Ÿšด", f09f9ab4),
-_c(U+1F6B5, "๐Ÿšต", f09f9ab5),
-_c(U+1F6B6, "๐Ÿšถ", f09f9ab6),
-_c(U+1F6B7, "๐Ÿšท", f09f9ab7),
-_c(U+1F6B8, "๐Ÿšธ", f09f9ab8),
-_c(U+1F6B9, "๐Ÿšน", f09f9ab9),
-_c(U+1F6BA, "๐Ÿšบ", f09f9aba),
-_c(U+1F6BB, "๐Ÿšป", f09f9abb),
-_c(U+1F6BC, "๐Ÿšผ", f09f9abc),
-_c(U+1F6BD, "๐Ÿšฝ", f09f9abd),
-_c(U+1F6BE, "๐Ÿšพ", f09f9abe),
-_c(U+1F6BF, "๐Ÿšฟ", f09f9abf),
-_c(U+1F6C0, "๐Ÿ›€", f09f9b80),
-_c(U+1F6C1, "๐Ÿ›", f09f9b81),
-_c(U+1F6C2, "๐Ÿ›‚", f09f9b82),
-_c(U+1F6C3, "๐Ÿ›ƒ", f09f9b83),
-_c(U+1F6C4, "๐Ÿ›„", f09f9b84),
-_c(U+1F6C5, "๐Ÿ›…", f09f9b85),
-_c(U+1F6C6, "๐Ÿ›†", f09f9b86),
-_c(U+1F6C7, "๐Ÿ›‡", f09f9b87),
-_c(U+1F6C8, "๐Ÿ›ˆ", f09f9b88),
-_c(U+1F6C9, "๐Ÿ›‰", f09f9b89),
-_c(U+1F6CA, "๐Ÿ›Š", f09f9b8a),
-_c(U+1F6CB, "๐Ÿ›‹", f09f9b8b),
-_c(U+1F6CC, "๐Ÿ›Œ", f09f9b8c),
-_c(U+1F6CD, "๐Ÿ›", f09f9b8d),
-_c(U+1F6CE, "๐Ÿ›Ž", f09f9b8e),
-_c(U+1F6CF, "๐Ÿ›", f09f9b8f),
-_c(U+1F6D0, "๐Ÿ›", f09f9b90),
-_c(U+1F6D1, "๐Ÿ›‘", f09f9b91),
-_c(U+1F6D2, "๐Ÿ›’", f09f9b92),
-_c(U+1F6D3, "๐Ÿ›“", f09f9b93),
-_c(U+1F6D4, "๐Ÿ›”", f09f9b94),
-_c(U+1F6D5, "๐Ÿ›•", f09f9b95),
-_c(U+1F6D6, "๐Ÿ›–", f09f9b96),
-_c(U+1F6D7, "๐Ÿ›—", f09f9b97),
-_c(U+1F6D8, "๐Ÿ›˜", f09f9b98),
-_c(U+1F6D9, "๐Ÿ›™", f09f9b99),
-_c(U+1F6DA, "๐Ÿ›š", f09f9b9a),
-_c(U+1F6DB, "๐Ÿ››", f09f9b9b),
-_c(U+1F6DC, "๐Ÿ›œ", f09f9b9c),
-_c(U+1F6DD, "๐Ÿ›", f09f9b9d),
-_c(U+1F6DE, "๐Ÿ›ž", f09f9b9e),
-_c(U+1F6DF, "๐Ÿ›Ÿ", f09f9b9f),
-_c(U+1F6E0, "๐Ÿ› ", f09f9ba0),
-_c(U+1F6E1, "๐Ÿ›ก", f09f9ba1),
-_c(U+1F6E2, "๐Ÿ›ข", f09f9ba2),
-_c(U+1F6E3, "๐Ÿ›ฃ", f09f9ba3),
-_c(U+1F6E4, "๐Ÿ›ค", f09f9ba4),
-_c(U+1F6E5, "๐Ÿ›ฅ", f09f9ba5),
-_c(U+1F6E6, "๐Ÿ›ฆ", f09f9ba6),
-_c(U+1F6E7, "๐Ÿ›ง", f09f9ba7),
-_c(U+1F6E8, "๐Ÿ›จ", f09f9ba8),
-_c(U+1F6E9, "๐Ÿ›ฉ", f09f9ba9),
-_c(U+1F6EA, "๐Ÿ›ช", f09f9baa),
-_c(U+1F6EB, "๐Ÿ›ซ", f09f9bab),
-_c(U+1F6EC, "๐Ÿ›ฌ", f09f9bac),
-_c(U+1F6ED, "๐Ÿ›ญ", f09f9bad),
-_c(U+1F6EE, "๐Ÿ›ฎ", f09f9bae),
-_c(U+1F6EF, "๐Ÿ›ฏ", f09f9baf),
-_c(U+1F6F0, "๐Ÿ›ฐ", f09f9bb0),
-_c(U+1F6F1, "๐Ÿ›ฑ", f09f9bb1),
-_c(U+1F6F2, "๐Ÿ›ฒ", f09f9bb2),
-_c(U+1F6F3, "๐Ÿ›ณ", f09f9bb3),
-_c(U+1F6F4, "๐Ÿ›ด", f09f9bb4),
-_c(U+1F6F5, "๐Ÿ›ต", f09f9bb5),
-_c(U+1F6F6, "๐Ÿ›ถ", f09f9bb6),
-_c(U+1F6F7, "๐Ÿ›ท", f09f9bb7),
-_c(U+1F6F8, "๐Ÿ›ธ", f09f9bb8),
-_c(U+1F6F9, "๐Ÿ›น", f09f9bb9),
-_c(U+1F6FA, "๐Ÿ›บ", f09f9bba),
-_c(U+1F6FB, "๐Ÿ›ป", f09f9bbb),
-_c(U+1F6FC, "๐Ÿ›ผ", f09f9bbc),
-_c(U+1F6FD, "๐Ÿ›ฝ", f09f9bbd),
-_c(U+1F6FE, "๐Ÿ›พ", f09f9bbe),
-_c(U+1F6FF, "๐Ÿ›ฟ", f09f9bbf),
-_c(U+1F700, "๐Ÿœ€", f09f9c80),
-_c(U+1F701, "๐Ÿœ", f09f9c81),
-_c(U+1F702, "๐Ÿœ‚", f09f9c82),
-_c(U+1F703, "๐Ÿœƒ", f09f9c83),
-_c(U+1F704, "๐Ÿœ„", f09f9c84),
-_c(U+1F705, "๐Ÿœ…", f09f9c85),
-_c(U+1F706, "๐Ÿœ†", f09f9c86),
-_c(U+1F707, "๐Ÿœ‡", f09f9c87),
-_c(U+1F708, "๐Ÿœˆ", f09f9c88),
-_c(U+1F709, "๐Ÿœ‰", f09f9c89),
-_c(U+1F70A, "๐ŸœŠ", f09f9c8a),
-_c(U+1F70B, "๐Ÿœ‹", f09f9c8b),
-_c(U+1F70C, "๐ŸœŒ", f09f9c8c),
-_c(U+1F70D, "๐Ÿœ", f09f9c8d),
-_c(U+1F70E, "๐ŸœŽ", f09f9c8e),
-_c(U+1F70F, "๐Ÿœ", f09f9c8f),
-_c(U+1F710, "๐Ÿœ", f09f9c90),
-_c(U+1F711, "๐Ÿœ‘", f09f9c91),
-_c(U+1F712, "๐Ÿœ’", f09f9c92),
-_c(U+1F713, "๐Ÿœ“", f09f9c93),
-_c(U+1F714, "๐Ÿœ”", f09f9c94),
-_c(U+1F715, "๐Ÿœ•", f09f9c95),
-_c(U+1F716, "๐Ÿœ–", f09f9c96),
-_c(U+1F717, "๐Ÿœ—", f09f9c97),
-_c(U+1F718, "๐Ÿœ˜", f09f9c98),
-_c(U+1F719, "๐Ÿœ™", f09f9c99),
-_c(U+1F71A, "๐Ÿœš", f09f9c9a),
-_c(U+1F71B, "๐Ÿœ›", f09f9c9b),
-_c(U+1F71C, "๐Ÿœœ", f09f9c9c),
-_c(U+1F71D, "๐Ÿœ", f09f9c9d),
-_c(U+1F71E, "๐Ÿœž", f09f9c9e),
-_c(U+1F71F, "๐ŸœŸ", f09f9c9f),
-_c(U+1F720, "๐Ÿœ ", f09f9ca0),
-_c(U+1F721, "๐Ÿœก", f09f9ca1),
-_c(U+1F722, "๐Ÿœข", f09f9ca2),
-_c(U+1F723, "๐Ÿœฃ", f09f9ca3),
-_c(U+1F724, "๐Ÿœค", f09f9ca4),
-_c(U+1F725, "๐Ÿœฅ", f09f9ca5),
-_c(U+1F726, "๐Ÿœฆ", f09f9ca6),
-_c(U+1F727, "๐Ÿœง", f09f9ca7),
-_c(U+1F728, "๐Ÿœจ", f09f9ca8),
-_c(U+1F729, "๐Ÿœฉ", f09f9ca9),
-_c(U+1F72A, "๐Ÿœช", f09f9caa),
-_c(U+1F72B, "๐Ÿœซ", f09f9cab),
-_c(U+1F72C, "๐Ÿœฌ", f09f9cac),
-_c(U+1F72D, "๐Ÿœญ", f09f9cad),
-_c(U+1F72E, "๐Ÿœฎ", f09f9cae),
-_c(U+1F72F, "๐Ÿœฏ", f09f9caf),
-_c(U+1F730, "๐Ÿœฐ", f09f9cb0),
-_c(U+1F731, "๐Ÿœฑ", f09f9cb1),
-_c(U+1F732, "๐Ÿœฒ", f09f9cb2),
-_c(U+1F733, "๐Ÿœณ", f09f9cb3),
-_c(U+1F734, "๐Ÿœด", f09f9cb4),
-_c(U+1F735, "๐Ÿœต", f09f9cb5),
-_c(U+1F736, "๐Ÿœถ", f09f9cb6),
-_c(U+1F737, "๐Ÿœท", f09f9cb7),
-_c(U+1F738, "๐Ÿœธ", f09f9cb8),
-_c(U+1F739, "๐Ÿœน", f09f9cb9),
-_c(U+1F73A, "๐Ÿœบ", f09f9cba),
-_c(U+1F73B, "๐Ÿœป", f09f9cbb),
-_c(U+1F73C, "๐Ÿœผ", f09f9cbc),
-_c(U+1F73D, "๐Ÿœฝ", f09f9cbd),
-_c(U+1F73E, "๐Ÿœพ", f09f9cbe),
-_c(U+1F73F, "๐Ÿœฟ", f09f9cbf),
-_c(U+1F740, "๐Ÿ€", f09f9d80),
-_c(U+1F741, "๐Ÿ", f09f9d81),
-_c(U+1F742, "๐Ÿ‚", f09f9d82),
-_c(U+1F743, "๐Ÿƒ", f09f9d83),
-_c(U+1F744, "๐Ÿ„", f09f9d84),
-_c(U+1F745, "๐Ÿ…", f09f9d85),
-_c(U+1F746, "๐Ÿ†", f09f9d86),
-_c(U+1F747, "๐Ÿ‡", f09f9d87),
-_c(U+1F748, "๐Ÿˆ", f09f9d88),
-_c(U+1F749, "๐Ÿ‰", f09f9d89),
-_c(U+1F74A, "๐ŸŠ", f09f9d8a),
-_c(U+1F74B, "๐Ÿ‹", f09f9d8b),
-_c(U+1F74C, "๐ŸŒ", f09f9d8c),
-_c(U+1F74D, "๐Ÿ", f09f9d8d),
-_c(U+1F74E, "๐ŸŽ", f09f9d8e),
-_c(U+1F74F, "๐Ÿ", f09f9d8f),
-_c(U+1F750, "๐Ÿ", f09f9d90),
-_c(U+1F751, "๐Ÿ‘", f09f9d91),
-_c(U+1F752, "๐Ÿ’", f09f9d92),
-_c(U+1F753, "๐Ÿ“", f09f9d93),
-_c(U+1F754, "๐Ÿ”", f09f9d94),
-_c(U+1F755, "๐Ÿ•", f09f9d95),
-_c(U+1F756, "๐Ÿ–", f09f9d96),
-_c(U+1F757, "๐Ÿ—", f09f9d97),
-_c(U+1F758, "๐Ÿ˜", f09f9d98),
-_c(U+1F759, "๐Ÿ™", f09f9d99),
-_c(U+1F75A, "๐Ÿš", f09f9d9a),
-_c(U+1F75B, "๐Ÿ›", f09f9d9b),
-_c(U+1F75C, "๐Ÿœ", f09f9d9c),
-_c(U+1F75D, "๐Ÿ", f09f9d9d),
-_c(U+1F75E, "๐Ÿž", f09f9d9e),
-_c(U+1F75F, "๐ŸŸ", f09f9d9f),
-_c(U+1F760, "๐Ÿ ", f09f9da0),
-_c(U+1F761, "๐Ÿก", f09f9da1),
-_c(U+1F762, "๐Ÿข", f09f9da2),
-_c(U+1F763, "๐Ÿฃ", f09f9da3),
-_c(U+1F764, "๐Ÿค", f09f9da4),
-_c(U+1F765, "๐Ÿฅ", f09f9da5),
-_c(U+1F766, "๐Ÿฆ", f09f9da6),
-_c(U+1F767, "๐Ÿง", f09f9da7),
-_c(U+1F768, "๐Ÿจ", f09f9da8),
-_c(U+1F769, "๐Ÿฉ", f09f9da9),
-_c(U+1F76A, "๐Ÿช", f09f9daa),
-_c(U+1F76B, "๐Ÿซ", f09f9dab),
-_c(U+1F76C, "๐Ÿฌ", f09f9dac),
-_c(U+1F76D, "๐Ÿญ", f09f9dad),
-_c(U+1F76E, "๐Ÿฎ", f09f9dae),
-_c(U+1F76F, "๐Ÿฏ", f09f9daf),
-_c(U+1F770, "๐Ÿฐ", f09f9db0),
-_c(U+1F771, "๐Ÿฑ", f09f9db1),
-_c(U+1F772, "๐Ÿฒ", f09f9db2),
-_c(U+1F773, "๐Ÿณ", f09f9db3),
-_c(U+1F774, "๐Ÿด", f09f9db4),
-_c(U+1F775, "๐Ÿต", f09f9db5),
-_c(U+1F776, "๐Ÿถ", f09f9db6),
-_c(U+1F777, "๐Ÿท", f09f9db7),
-_c(U+1F778, "๐Ÿธ", f09f9db8),
-_c(U+1F779, "๐Ÿน", f09f9db9),
-_c(U+1F77A, "๐Ÿบ", f09f9dba),
-_c(U+1F77B, "๐Ÿป", f09f9dbb),
-_c(U+1F77C, "๐Ÿผ", f09f9dbc),
-_c(U+1F77D, "๐Ÿฝ", f09f9dbd),
-_c(U+1F77E, "๐Ÿพ", f09f9dbe),
-_c(U+1F77F, "๐Ÿฟ", f09f9dbf),
-_c(U+1F780, "๐Ÿž€", f09f9e80),
-_c(U+1F781, "๐Ÿž", f09f9e81),
-_c(U+1F782, "๐Ÿž‚", f09f9e82),
-_c(U+1F783, "๐Ÿžƒ", f09f9e83),
-_c(U+1F784, "๐Ÿž„", f09f9e84),
-_c(U+1F785, "๐Ÿž…", f09f9e85),
-_c(U+1F786, "๐Ÿž†", f09f9e86),
-_c(U+1F787, "๐Ÿž‡", f09f9e87),
-_c(U+1F788, "๐Ÿžˆ", f09f9e88),
-_c(U+1F789, "๐Ÿž‰", f09f9e89),
-_c(U+1F78A, "๐ŸžŠ", f09f9e8a),
-_c(U+1F78B, "๐Ÿž‹", f09f9e8b),
-_c(U+1F78C, "๐ŸžŒ", f09f9e8c),
-_c(U+1F78D, "๐Ÿž", f09f9e8d),
-_c(U+1F78E, "๐ŸžŽ", f09f9e8e),
-_c(U+1F78F, "๐Ÿž", f09f9e8f),
-_c(U+1F790, "๐Ÿž", f09f9e90),
-_c(U+1F791, "๐Ÿž‘", f09f9e91),
-_c(U+1F792, "๐Ÿž’", f09f9e92),
-_c(U+1F793, "๐Ÿž“", f09f9e93),
-_c(U+1F794, "๐Ÿž”", f09f9e94),
-_c(U+1F795, "๐Ÿž•", f09f9e95),
-_c(U+1F796, "๐Ÿž–", f09f9e96),
-_c(U+1F797, "๐Ÿž—", f09f9e97),
-_c(U+1F798, "๐Ÿž˜", f09f9e98),
-_c(U+1F799, "๐Ÿž™", f09f9e99),
-_c(U+1F79A, "๐Ÿžš", f09f9e9a),
-_c(U+1F79B, "๐Ÿž›", f09f9e9b),
-_c(U+1F79C, "๐Ÿžœ", f09f9e9c),
-_c(U+1F79D, "๐Ÿž", f09f9e9d),
-_c(U+1F79E, "๐Ÿžž", f09f9e9e),
-_c(U+1F79F, "๐ŸžŸ", f09f9e9f),
-_c(U+1F7A0, "๐Ÿž ", f09f9ea0),
-_c(U+1F7A1, "๐Ÿžก", f09f9ea1),
-_c(U+1F7A2, "๐Ÿžข", f09f9ea2),
-_c(U+1F7A3, "๐Ÿžฃ", f09f9ea3),
-_c(U+1F7A4, "๐Ÿžค", f09f9ea4),
-_c(U+1F7A5, "๐Ÿžฅ", f09f9ea5),
-_c(U+1F7A6, "๐Ÿžฆ", f09f9ea6),
-_c(U+1F7A7, "๐Ÿžง", f09f9ea7),
-_c(U+1F7A8, "๐Ÿžจ", f09f9ea8),
-_c(U+1F7A9, "๐Ÿžฉ", f09f9ea9),
-_c(U+1F7AA, "๐Ÿžช", f09f9eaa),
-_c(U+1F7AB, "๐Ÿžซ", f09f9eab),
-_c(U+1F7AC, "๐Ÿžฌ", f09f9eac),
-_c(U+1F7AD, "๐Ÿžญ", f09f9ead),
-_c(U+1F7AE, "๐Ÿžฎ", f09f9eae),
-_c(U+1F7AF, "๐Ÿžฏ", f09f9eaf),
-_c(U+1F7B0, "๐Ÿžฐ", f09f9eb0),
-_c(U+1F7B1, "๐Ÿžฑ", f09f9eb1),
-_c(U+1F7B2, "๐Ÿžฒ", f09f9eb2),
-_c(U+1F7B3, "๐Ÿžณ", f09f9eb3),
-_c(U+1F7B4, "๐Ÿžด", f09f9eb4),
-_c(U+1F7B5, "๐Ÿžต", f09f9eb5),
-_c(U+1F7B6, "๐Ÿžถ", f09f9eb6),
-_c(U+1F7B7, "๐Ÿžท", f09f9eb7),
-_c(U+1F7B8, "๐Ÿžธ", f09f9eb8),
-_c(U+1F7B9, "๐Ÿžน", f09f9eb9),
-_c(U+1F7BA, "๐Ÿžบ", f09f9eba),
-_c(U+1F7BB, "๐Ÿžป", f09f9ebb),
-_c(U+1F7BC, "๐Ÿžผ", f09f9ebc),
-_c(U+1F7BD, "๐Ÿžฝ", f09f9ebd),
-_c(U+1F7BE, "๐Ÿžพ", f09f9ebe),
-_c(U+1F7BF, "๐Ÿžฟ", f09f9ebf),
-_c(U+1F7C0, "๐ŸŸ€", f09f9f80),
-_c(U+1F7C1, "๐ŸŸ", f09f9f81),
-_c(U+1F7C2, "๐ŸŸ‚", f09f9f82),
-_c(U+1F7C3, "๐ŸŸƒ", f09f9f83),
-_c(U+1F7C4, "๐ŸŸ„", f09f9f84),
-_c(U+1F7C5, "๐ŸŸ…", f09f9f85),
-_c(U+1F7C6, "๐ŸŸ†", f09f9f86),
-_c(U+1F7C7, "๐ŸŸ‡", f09f9f87),
-_c(U+1F7C8, "๐ŸŸˆ", f09f9f88),
-_c(U+1F7C9, "๐ŸŸ‰", f09f9f89),
-_c(U+1F7CA, "๐ŸŸŠ", f09f9f8a),
-_c(U+1F7CB, "๐ŸŸ‹", f09f9f8b),
-_c(U+1F7CC, "๐ŸŸŒ", f09f9f8c),
-_c(U+1F7CD, "๐ŸŸ", f09f9f8d),
-_c(U+1F7CE, "๐ŸŸŽ", f09f9f8e),
-_c(U+1F7CF, "๐ŸŸ", f09f9f8f),
-_c(U+1F7D0, "๐ŸŸ", f09f9f90),
-_c(U+1F7D1, "๐ŸŸ‘", f09f9f91),
-_c(U+1F7D2, "๐ŸŸ’", f09f9f92),
-_c(U+1F7D3, "๐ŸŸ“", f09f9f93),
-_c(U+1F7D4, "๐ŸŸ”", f09f9f94),
-_c(U+1F7D5, "๐ŸŸ•", f09f9f95),
-_c(U+1F7D6, "๐ŸŸ–", f09f9f96),
-_c(U+1F7D7, "๐ŸŸ—", f09f9f97),
-_c(U+1F7D8, "๐ŸŸ˜", f09f9f98),
-_c(U+1F7D9, "๐ŸŸ™", f09f9f99),
-_c(U+1F7DA, "๐ŸŸš", f09f9f9a),
-_c(U+1F7DB, "๐ŸŸ›", f09f9f9b),
-_c(U+1F7DC, "๐ŸŸœ", f09f9f9c),
-_c(U+1F7DD, "๐ŸŸ", f09f9f9d),
-_c(U+1F7DE, "๐ŸŸž", f09f9f9e),
-_c(U+1F7DF, "๐ŸŸŸ", f09f9f9f),
-_c(U+1F7E0, "๐ŸŸ ", f09f9fa0),
-_c(U+1F7E1, "๐ŸŸก", f09f9fa1),
-_c(U+1F7E2, "๐ŸŸข", f09f9fa2),
-_c(U+1F7E3, "๐ŸŸฃ", f09f9fa3),
-_c(U+1F7E4, "๐ŸŸค", f09f9fa4),
-_c(U+1F7E5, "๐ŸŸฅ", f09f9fa5),
-_c(U+1F7E6, "๐ŸŸฆ", f09f9fa6),
-_c(U+1F7E7, "๐ŸŸง", f09f9fa7),
-_c(U+1F7E8, "๐ŸŸจ", f09f9fa8),
-_c(U+1F7E9, "๐ŸŸฉ", f09f9fa9),
-_c(U+1F7EA, "๐ŸŸช", f09f9faa),
-_c(U+1F7EB, "๐ŸŸซ", f09f9fab),
-_c(U+1F7EC, "๐ŸŸฌ", f09f9fac),
-_c(U+1F7ED, "๐ŸŸญ", f09f9fad),
-_c(U+1F7EE, "๐ŸŸฎ", f09f9fae),
-_c(U+1F7EF, "๐ŸŸฏ", f09f9faf),
-_c(U+1F7F0, "๐ŸŸฐ", f09f9fb0),
-_c(U+1F7F1, "๐ŸŸฑ", f09f9fb1),
-_c(U+1F7F2, "๐ŸŸฒ", f09f9fb2),
-_c(U+1F7F3, "๐ŸŸณ", f09f9fb3),
-_c(U+1F7F4, "๐ŸŸด", f09f9fb4),
-_c(U+1F7F5, "๐ŸŸต", f09f9fb5),
-_c(U+1F7F6, "๐ŸŸถ", f09f9fb6),
-_c(U+1F7F7, "๐ŸŸท", f09f9fb7),
-_c(U+1F7F8, "๐ŸŸธ", f09f9fb8),
-_c(U+1F7F9, "๐ŸŸน", f09f9fb9),
-_c(U+1F7FA, "๐ŸŸบ", f09f9fba),
-_c(U+1F7FB, "๐ŸŸป", f09f9fbb),
-_c(U+1F7FC, "๐ŸŸผ", f09f9fbc),
-_c(U+1F7FD, "๐ŸŸฝ", f09f9fbd),
-_c(U+1F7FE, "๐ŸŸพ", f09f9fbe),
-_c(U+1F7FF, "๐ŸŸฟ", f09f9fbf),
-_c(U+1F800, "๐Ÿ €", f09fa080),
-_c(U+1F801, "๐Ÿ ", f09fa081),
-_c(U+1F802, "๐Ÿ ‚", f09fa082),
-_c(U+1F803, "๐Ÿ ƒ", f09fa083),
-_c(U+1F804, "๐Ÿ „", f09fa084),
-_c(U+1F805, "๐Ÿ …", f09fa085),
-_c(U+1F806, "๐Ÿ †", f09fa086),
-_c(U+1F807, "๐Ÿ ‡", f09fa087),
-_c(U+1F808, "๐Ÿ ˆ", f09fa088),
-_c(U+1F809, "๐Ÿ ‰", f09fa089),
-_c(U+1F80A, "๐Ÿ Š", f09fa08a),
-_c(U+1F80B, "๐Ÿ ‹", f09fa08b),
-_c(U+1F80C, "๐Ÿ Œ", f09fa08c),
-_c(U+1F80D, "๐Ÿ ", f09fa08d),
-_c(U+1F80E, "๐Ÿ Ž", f09fa08e),
-_c(U+1F80F, "๐Ÿ ", f09fa08f),
-_c(U+1F810, "๐Ÿ ", f09fa090),
-_c(U+1F811, "๐Ÿ ‘", f09fa091),
-_c(U+1F812, "๐Ÿ ’", f09fa092),
-_c(U+1F813, "๐Ÿ “", f09fa093),
-_c(U+1F814, "๐Ÿ ”", f09fa094),
-_c(U+1F815, "๐Ÿ •", f09fa095),
-_c(U+1F816, "๐Ÿ –", f09fa096),
-_c(U+1F817, "๐Ÿ —", f09fa097),
-_c(U+1F818, "๐Ÿ ˜", f09fa098),
-_c(U+1F819, "๐Ÿ ™", f09fa099),
-_c(U+1F81A, "๐Ÿ š", f09fa09a),
-_c(U+1F81B, "๐Ÿ ›", f09fa09b),
-_c(U+1F81C, "๐Ÿ œ", f09fa09c),
-_c(U+1F81D, "๐Ÿ ", f09fa09d),
-_c(U+1F81E, "๐Ÿ ž", f09fa09e),
-_c(U+1F81F, "๐Ÿ Ÿ", f09fa09f),
-_c(U+1F820, "๐Ÿ  ", f09fa0a0),
-_c(U+1F821, "๐Ÿ ก", f09fa0a1),
-_c(U+1F822, "๐Ÿ ข", f09fa0a2),
-_c(U+1F823, "๐Ÿ ฃ", f09fa0a3),
-_c(U+1F824, "๐Ÿ ค", f09fa0a4),
-_c(U+1F825, "๐Ÿ ฅ", f09fa0a5),
-_c(U+1F826, "๐Ÿ ฆ", f09fa0a6),
-_c(U+1F827, "๐Ÿ ง", f09fa0a7),
-_c(U+1F828, "๐Ÿ จ", f09fa0a8),
-_c(U+1F829, "๐Ÿ ฉ", f09fa0a9),
-_c(U+1F82A, "๐Ÿ ช", f09fa0aa),
-_c(U+1F82B, "๐Ÿ ซ", f09fa0ab),
-_c(U+1F82C, "๐Ÿ ฌ", f09fa0ac),
-_c(U+1F82D, "๐Ÿ ญ", f09fa0ad),
-_c(U+1F82E, "๐Ÿ ฎ", f09fa0ae),
-_c(U+1F82F, "๐Ÿ ฏ", f09fa0af),
-_c(U+1F830, "๐Ÿ ฐ", f09fa0b0),
-_c(U+1F831, "๐Ÿ ฑ", f09fa0b1),
-_c(U+1F832, "๐Ÿ ฒ", f09fa0b2),
-_c(U+1F833, "๐Ÿ ณ", f09fa0b3),
-_c(U+1F834, "๐Ÿ ด", f09fa0b4),
-_c(U+1F835, "๐Ÿ ต", f09fa0b5),
-_c(U+1F836, "๐Ÿ ถ", f09fa0b6),
-_c(U+1F837, "๐Ÿ ท", f09fa0b7),
-_c(U+1F838, "๐Ÿ ธ", f09fa0b8),
-_c(U+1F839, "๐Ÿ น", f09fa0b9),
-_c(U+1F83A, "๐Ÿ บ", f09fa0ba),
-_c(U+1F83B, "๐Ÿ ป", f09fa0bb),
-_c(U+1F83C, "๐Ÿ ผ", f09fa0bc),
-_c(U+1F83D, "๐Ÿ ฝ", f09fa0bd),
-_c(U+1F83E, "๐Ÿ พ", f09fa0be),
-_c(U+1F83F, "๐Ÿ ฟ", f09fa0bf),
-_c(U+1F840, "๐Ÿก€", f09fa180),
-_c(U+1F841, "๐Ÿก", f09fa181),
-_c(U+1F842, "๐Ÿก‚", f09fa182),
-_c(U+1F843, "๐Ÿกƒ", f09fa183),
-_c(U+1F844, "๐Ÿก„", f09fa184),
-_c(U+1F845, "๐Ÿก…", f09fa185),
-_c(U+1F846, "๐Ÿก†", f09fa186),
-_c(U+1F847, "๐Ÿก‡", f09fa187),
-_c(U+1F848, "๐Ÿกˆ", f09fa188),
-_c(U+1F849, "๐Ÿก‰", f09fa189),
-_c(U+1F84A, "๐ŸกŠ", f09fa18a),
-_c(U+1F84B, "๐Ÿก‹", f09fa18b),
-_c(U+1F84C, "๐ŸกŒ", f09fa18c),
-_c(U+1F84D, "๐Ÿก", f09fa18d),
-_c(U+1F84E, "๐ŸกŽ", f09fa18e),
-_c(U+1F84F, "๐Ÿก", f09fa18f),
-_c(U+1F850, "๐Ÿก", f09fa190),
-_c(U+1F851, "๐Ÿก‘", f09fa191),
-_c(U+1F852, "๐Ÿก’", f09fa192),
-_c(U+1F853, "๐Ÿก“", f09fa193),
-_c(U+1F854, "๐Ÿก”", f09fa194),
-_c(U+1F855, "๐Ÿก•", f09fa195),
-_c(U+1F856, "๐Ÿก–", f09fa196),
-_c(U+1F857, "๐Ÿก—", f09fa197),
-_c(U+1F858, "๐Ÿก˜", f09fa198),
-_c(U+1F859, "๐Ÿก™", f09fa199),
-_c(U+1F85A, "๐Ÿกš", f09fa19a),
-_c(U+1F85B, "๐Ÿก›", f09fa19b),
-_c(U+1F85C, "๐Ÿกœ", f09fa19c),
-_c(U+1F85D, "๐Ÿก", f09fa19d),
-_c(U+1F85E, "๐Ÿกž", f09fa19e),
-_c(U+1F85F, "๐ŸกŸ", f09fa19f),
-_c(U+1F860, "๐Ÿก ", f09fa1a0),
-_c(U+1F861, "๐Ÿกก", f09fa1a1),
-_c(U+1F862, "๐Ÿกข", f09fa1a2),
-_c(U+1F863, "๐Ÿกฃ", f09fa1a3),
-_c(U+1F864, "๐Ÿกค", f09fa1a4),
-_c(U+1F865, "๐Ÿกฅ", f09fa1a5),
-_c(U+1F866, "๐Ÿกฆ", f09fa1a6),
-_c(U+1F867, "๐Ÿกง", f09fa1a7),
-_c(U+1F868, "๐Ÿกจ", f09fa1a8),
-_c(U+1F869, "๐Ÿกฉ", f09fa1a9),
-_c(U+1F86A, "๐Ÿกช", f09fa1aa),
-_c(U+1F86B, "๐Ÿกซ", f09fa1ab),
-_c(U+1F86C, "๐Ÿกฌ", f09fa1ac),
-_c(U+1F86D, "๐Ÿกญ", f09fa1ad),
-_c(U+1F86E, "๐Ÿกฎ", f09fa1ae),
-_c(U+1F86F, "๐Ÿกฏ", f09fa1af),
-_c(U+1F870, "๐Ÿกฐ", f09fa1b0),
-_c(U+1F871, "๐Ÿกฑ", f09fa1b1),
-_c(U+1F872, "๐Ÿกฒ", f09fa1b2),
-_c(U+1F873, "๐Ÿกณ", f09fa1b3),
-_c(U+1F874, "๐Ÿกด", f09fa1b4),
-_c(U+1F875, "๐Ÿกต", f09fa1b5),
-_c(U+1F876, "๐Ÿกถ", f09fa1b6),
-_c(U+1F877, "๐Ÿกท", f09fa1b7),
-_c(U+1F878, "๐Ÿกธ", f09fa1b8),
-_c(U+1F879, "๐Ÿกน", f09fa1b9),
-_c(U+1F87A, "๐Ÿกบ", f09fa1ba),
-_c(U+1F87B, "๐Ÿกป", f09fa1bb),
-_c(U+1F87C, "๐Ÿกผ", f09fa1bc),
-_c(U+1F87D, "๐Ÿกฝ", f09fa1bd),
-_c(U+1F87E, "๐Ÿกพ", f09fa1be),
-_c(U+1F87F, "๐Ÿกฟ", f09fa1bf),
-_c(U+1F880, "๐Ÿข€", f09fa280),
-_c(U+1F881, "๐Ÿข", f09fa281),
-_c(U+1F882, "๐Ÿข‚", f09fa282),
-_c(U+1F883, "๐Ÿขƒ", f09fa283),
-_c(U+1F884, "๐Ÿข„", f09fa284),
-_c(U+1F885, "๐Ÿข…", f09fa285),
-_c(U+1F886, "๐Ÿข†", f09fa286),
-_c(U+1F887, "๐Ÿข‡", f09fa287),
-_c(U+1F888, "๐Ÿขˆ", f09fa288),
-_c(U+1F889, "๐Ÿข‰", f09fa289),
-_c(U+1F88A, "๐ŸขŠ", f09fa28a),
-_c(U+1F88B, "๐Ÿข‹", f09fa28b),
-_c(U+1F88C, "๐ŸขŒ", f09fa28c),
-_c(U+1F88D, "๐Ÿข", f09fa28d),
-_c(U+1F88E, "๐ŸขŽ", f09fa28e),
-_c(U+1F88F, "๐Ÿข", f09fa28f),
-_c(U+1F890, "๐Ÿข", f09fa290),
-_c(U+1F891, "๐Ÿข‘", f09fa291),
-_c(U+1F892, "๐Ÿข’", f09fa292),
-_c(U+1F893, "๐Ÿข“", f09fa293),
-_c(U+1F894, "๐Ÿข”", f09fa294),
-_c(U+1F895, "๐Ÿข•", f09fa295),
-_c(U+1F896, "๐Ÿข–", f09fa296),
-_c(U+1F897, "๐Ÿข—", f09fa297),
-_c(U+1F898, "๐Ÿข˜", f09fa298),
-_c(U+1F899, "๐Ÿข™", f09fa299),
-_c(U+1F89A, "๐Ÿขš", f09fa29a),
-_c(U+1F89B, "๐Ÿข›", f09fa29b),
-_c(U+1F89C, "๐Ÿขœ", f09fa29c),
-_c(U+1F89D, "๐Ÿข", f09fa29d),
-_c(U+1F89E, "๐Ÿขž", f09fa29e),
-_c(U+1F89F, "๐ŸขŸ", f09fa29f),
-_c(U+1F8A0, "๐Ÿข ", f09fa2a0),
-_c(U+1F8A1, "๐Ÿขก", f09fa2a1),
-_c(U+1F8A2, "๐Ÿขข", f09fa2a2),
-_c(U+1F8A3, "๐Ÿขฃ", f09fa2a3),
-_c(U+1F8A4, "๐Ÿขค", f09fa2a4),
-_c(U+1F8A5, "๐Ÿขฅ", f09fa2a5),
-_c(U+1F8A6, "๐Ÿขฆ", f09fa2a6),
-_c(U+1F8A7, "๐Ÿขง", f09fa2a7),
-_c(U+1F8A8, "๐Ÿขจ", f09fa2a8),
-_c(U+1F8A9, "๐Ÿขฉ", f09fa2a9),
-_c(U+1F8AA, "๐Ÿขช", f09fa2aa),
-_c(U+1F8AB, "๐Ÿขซ", f09fa2ab),
-_c(U+1F8AC, "๐Ÿขฌ", f09fa2ac),
-_c(U+1F8AD, "๐Ÿขญ", f09fa2ad),
-_c(U+1F8AE, "๐Ÿขฎ", f09fa2ae),
-_c(U+1F8AF, "๐Ÿขฏ", f09fa2af),
-_c(U+1F8B0, "๐Ÿขฐ", f09fa2b0),
-_c(U+1F8B1, "๐Ÿขฑ", f09fa2b1),
-_c(U+1F8B2, "๐Ÿขฒ", f09fa2b2),
-_c(U+1F8B3, "๐Ÿขณ", f09fa2b3),
-_c(U+1F8B4, "๐Ÿขด", f09fa2b4),
-_c(U+1F8B5, "๐Ÿขต", f09fa2b5),
-_c(U+1F8B6, "๐Ÿขถ", f09fa2b6),
-_c(U+1F8B7, "๐Ÿขท", f09fa2b7),
-_c(U+1F8B8, "๐Ÿขธ", f09fa2b8),
-_c(U+1F8B9, "๐Ÿขน", f09fa2b9),
-_c(U+1F8BA, "๐Ÿขบ", f09fa2ba),
-_c(U+1F8BB, "๐Ÿขป", f09fa2bb),
-_c(U+1F8BC, "๐Ÿขผ", f09fa2bc),
-_c(U+1F8BD, "๐Ÿขฝ", f09fa2bd),
-_c(U+1F8BE, "๐Ÿขพ", f09fa2be),
-_c(U+1F8BF, "๐Ÿขฟ", f09fa2bf),
-_c(U+1F8C0, "๐Ÿฃ€", f09fa380),
-_c(U+1F8C1, "๐Ÿฃ", f09fa381),
-_c(U+1F8C2, "๐Ÿฃ‚", f09fa382),
-_c(U+1F8C3, "๐Ÿฃƒ", f09fa383),
-_c(U+1F8C4, "๐Ÿฃ„", f09fa384),
-_c(U+1F8C5, "๐Ÿฃ…", f09fa385),
-_c(U+1F8C6, "๐Ÿฃ†", f09fa386),
-_c(U+1F8C7, "๐Ÿฃ‡", f09fa387),
-_c(U+1F8C8, "๐Ÿฃˆ", f09fa388),
-_c(U+1F8C9, "๐Ÿฃ‰", f09fa389),
-_c(U+1F8CA, "๐ŸฃŠ", f09fa38a),
-_c(U+1F8CB, "๐Ÿฃ‹", f09fa38b),
-_c(U+1F8CC, "๐ŸฃŒ", f09fa38c),
-_c(U+1F8CD, "๐Ÿฃ", f09fa38d),
-_c(U+1F8CE, "๐ŸฃŽ", f09fa38e),
-_c(U+1F8CF, "๐Ÿฃ", f09fa38f),
-_c(U+1F8D0, "๐Ÿฃ", f09fa390),
-_c(U+1F8D1, "๐Ÿฃ‘", f09fa391),
-_c(U+1F8D2, "๐Ÿฃ’", f09fa392),
-_c(U+1F8D3, "๐Ÿฃ“", f09fa393),
-_c(U+1F8D4, "๐Ÿฃ”", f09fa394),
-_c(U+1F8D5, "๐Ÿฃ•", f09fa395),
-_c(U+1F8D6, "๐Ÿฃ–", f09fa396),
-_c(U+1F8D7, "๐Ÿฃ—", f09fa397),
-_c(U+1F8D8, "๐Ÿฃ˜", f09fa398),
-_c(U+1F8D9, "๐Ÿฃ™", f09fa399),
-_c(U+1F8DA, "๐Ÿฃš", f09fa39a),
-_c(U+1F8DB, "๐Ÿฃ›", f09fa39b),
-_c(U+1F8DC, "๐Ÿฃœ", f09fa39c),
-_c(U+1F8DD, "๐Ÿฃ", f09fa39d),
-_c(U+1F8DE, "๐Ÿฃž", f09fa39e),
-_c(U+1F8DF, "๐ŸฃŸ", f09fa39f),
-_c(U+1F8E0, "๐Ÿฃ ", f09fa3a0),
-_c(U+1F8E1, "๐Ÿฃก", f09fa3a1),
-_c(U+1F8E2, "๐Ÿฃข", f09fa3a2),
-_c(U+1F8E3, "๐Ÿฃฃ", f09fa3a3),
-_c(U+1F8E4, "๐Ÿฃค", f09fa3a4),
-_c(U+1F8E5, "๐Ÿฃฅ", f09fa3a5),
-_c(U+1F8E6, "๐Ÿฃฆ", f09fa3a6),
-_c(U+1F8E7, "๐Ÿฃง", f09fa3a7),
-_c(U+1F8E8, "๐Ÿฃจ", f09fa3a8),
-_c(U+1F8E9, "๐Ÿฃฉ", f09fa3a9),
-_c(U+1F8EA, "๐Ÿฃช", f09fa3aa),
-_c(U+1F8EB, "๐Ÿฃซ", f09fa3ab),
-_c(U+1F8EC, "๐Ÿฃฌ", f09fa3ac),
-_c(U+1F8ED, "๐Ÿฃญ", f09fa3ad),
-_c(U+1F8EE, "๐Ÿฃฎ", f09fa3ae),
-_c(U+1F8EF, "๐Ÿฃฏ", f09fa3af),
-_c(U+1F8F0, "๐Ÿฃฐ", f09fa3b0),
-_c(U+1F8F1, "๐Ÿฃฑ", f09fa3b1),
-_c(U+1F8F2, "๐Ÿฃฒ", f09fa3b2),
-_c(U+1F8F3, "๐Ÿฃณ", f09fa3b3),
-_c(U+1F8F4, "๐Ÿฃด", f09fa3b4),
-_c(U+1F8F5, "๐Ÿฃต", f09fa3b5),
-_c(U+1F8F6, "๐Ÿฃถ", f09fa3b6),
-_c(U+1F8F7, "๐Ÿฃท", f09fa3b7),
-_c(U+1F8F8, "๐Ÿฃธ", f09fa3b8),
-_c(U+1F8F9, "๐Ÿฃน", f09fa3b9),
-_c(U+1F8FA, "๐Ÿฃบ", f09fa3ba),
-_c(U+1F8FB, "๐Ÿฃป", f09fa3bb),
-_c(U+1F8FC, "๐Ÿฃผ", f09fa3bc),
-_c(U+1F8FD, "๐Ÿฃฝ", f09fa3bd),
-_c(U+1F8FE, "๐Ÿฃพ", f09fa3be),
-_c(U+1F8FF, "๐Ÿฃฟ", f09fa3bf),
-_c(U+1F900, "๐Ÿค€", f09fa480),
-_c(U+1F901, "๐Ÿค", f09fa481),
-_c(U+1F902, "๐Ÿค‚", f09fa482),
-_c(U+1F903, "๐Ÿคƒ", f09fa483),
-_c(U+1F904, "๐Ÿค„", f09fa484),
-_c(U+1F905, "๐Ÿค…", f09fa485),
-_c(U+1F906, "๐Ÿค†", f09fa486),
-_c(U+1F907, "๐Ÿค‡", f09fa487),
-_c(U+1F908, "๐Ÿคˆ", f09fa488),
-_c(U+1F909, "๐Ÿค‰", f09fa489),
-_c(U+1F90A, "๐ŸคŠ", f09fa48a),
-_c(U+1F90B, "๐Ÿค‹", f09fa48b),
-_c(U+1F90C, "๐ŸคŒ", f09fa48c),
-_c(U+1F90D, "๐Ÿค", f09fa48d),
-_c(U+1F90E, "๐ŸคŽ", f09fa48e),
-_c(U+1F90F, "๐Ÿค", f09fa48f),
-_c(U+1F910, "๐Ÿค", f09fa490),
-_c(U+1F911, "๐Ÿค‘", f09fa491),
-_c(U+1F912, "๐Ÿค’", f09fa492),
-_c(U+1F913, "๐Ÿค“", f09fa493),
-_c(U+1F914, "๐Ÿค”", f09fa494),
-_c(U+1F915, "๐Ÿค•", f09fa495),
-_c(U+1F916, "๐Ÿค–", f09fa496),
-_c(U+1F917, "๐Ÿค—", f09fa497),
-_c(U+1F918, "๐Ÿค˜", f09fa498),
-_c(U+1F919, "๐Ÿค™", f09fa499),
-_c(U+1F91A, "๐Ÿคš", f09fa49a),
-_c(U+1F91B, "๐Ÿค›", f09fa49b),
-_c(U+1F91C, "๐Ÿคœ", f09fa49c),
-_c(U+1F91D, "๐Ÿค", f09fa49d),
-_c(U+1F91E, "๐Ÿคž", f09fa49e),
-_c(U+1F91F, "๐ŸคŸ", f09fa49f),
-_c(U+1F920, "๐Ÿค ", f09fa4a0),
-_c(U+1F921, "๐Ÿคก", f09fa4a1),
-_c(U+1F922, "๐Ÿคข", f09fa4a2),
-_c(U+1F923, "๐Ÿคฃ", f09fa4a3),
-_c(U+1F924, "๐Ÿคค", f09fa4a4),
-_c(U+1F925, "๐Ÿคฅ", f09fa4a5),
-_c(U+1F926, "๐Ÿคฆ", f09fa4a6),
-_c(U+1F927, "๐Ÿคง", f09fa4a7),
-_c(U+1F928, "๐Ÿคจ", f09fa4a8),
-_c(U+1F929, "๐Ÿคฉ", f09fa4a9),
-_c(U+1F92A, "๐Ÿคช", f09fa4aa),
-_c(U+1F92B, "๐Ÿคซ", f09fa4ab),
-_c(U+1F92C, "๐Ÿคฌ", f09fa4ac),
-_c(U+1F92D, "๐Ÿคญ", f09fa4ad),
-_c(U+1F92E, "๐Ÿคฎ", f09fa4ae),
-_c(U+1F92F, "๐Ÿคฏ", f09fa4af),
-_c(U+1F930, "๐Ÿคฐ", f09fa4b0),
-_c(U+1F931, "๐Ÿคฑ", f09fa4b1),
-_c(U+1F932, "๐Ÿคฒ", f09fa4b2),
-_c(U+1F933, "๐Ÿคณ", f09fa4b3),
-_c(U+1F934, "๐Ÿคด", f09fa4b4),
-_c(U+1F935, "๐Ÿคต", f09fa4b5),
-_c(U+1F936, "๐Ÿคถ", f09fa4b6),
-_c(U+1F937, "๐Ÿคท", f09fa4b7),
-_c(U+1F938, "๐Ÿคธ", f09fa4b8),
-_c(U+1F939, "๐Ÿคน", f09fa4b9),
-_c(U+1F93A, "๐Ÿคบ", f09fa4ba),
-_c(U+1F93B, "๐Ÿคป", f09fa4bb),
-_c(U+1F93C, "๐Ÿคผ", f09fa4bc),
-_c(U+1F93D, "๐Ÿคฝ", f09fa4bd),
-_c(U+1F93E, "๐Ÿคพ", f09fa4be),
-_c(U+1F93F, "๐Ÿคฟ", f09fa4bf),
-_c(U+1F940, "๐Ÿฅ€", f09fa580),
-_c(U+1F941, "๐Ÿฅ", f09fa581),
-_c(U+1F942, "๐Ÿฅ‚", f09fa582),
-_c(U+1F943, "๐Ÿฅƒ", f09fa583),
-_c(U+1F944, "๐Ÿฅ„", f09fa584),
-_c(U+1F945, "๐Ÿฅ…", f09fa585),
-_c(U+1F946, "๐Ÿฅ†", f09fa586),
-_c(U+1F947, "๐Ÿฅ‡", f09fa587),
-_c(U+1F948, "๐Ÿฅˆ", f09fa588),
-_c(U+1F949, "๐Ÿฅ‰", f09fa589),
-_c(U+1F94A, "๐ŸฅŠ", f09fa58a),
-_c(U+1F94B, "๐Ÿฅ‹", f09fa58b),
-_c(U+1F94C, "๐ŸฅŒ", f09fa58c),
-_c(U+1F94D, "๐Ÿฅ", f09fa58d),
-_c(U+1F94E, "๐ŸฅŽ", f09fa58e),
-_c(U+1F94F, "๐Ÿฅ", f09fa58f),
-_c(U+1F950, "๐Ÿฅ", f09fa590),
-_c(U+1F951, "๐Ÿฅ‘", f09fa591),
-_c(U+1F952, "๐Ÿฅ’", f09fa592),
-_c(U+1F953, "๐Ÿฅ“", f09fa593),
-_c(U+1F954, "๐Ÿฅ”", f09fa594),
-_c(U+1F955, "๐Ÿฅ•", f09fa595),
-_c(U+1F956, "๐Ÿฅ–", f09fa596),
-_c(U+1F957, "๐Ÿฅ—", f09fa597),
-_c(U+1F958, "๐Ÿฅ˜", f09fa598),
-_c(U+1F959, "๐Ÿฅ™", f09fa599),
-_c(U+1F95A, "๐Ÿฅš", f09fa59a),
-_c(U+1F95B, "๐Ÿฅ›", f09fa59b),
-_c(U+1F95C, "๐Ÿฅœ", f09fa59c),
-_c(U+1F95D, "๐Ÿฅ", f09fa59d),
-_c(U+1F95E, "๐Ÿฅž", f09fa59e),
-_c(U+1F95F, "๐ŸฅŸ", f09fa59f),
-_c(U+1F960, "๐Ÿฅ ", f09fa5a0),
-_c(U+1F961, "๐Ÿฅก", f09fa5a1),
-_c(U+1F962, "๐Ÿฅข", f09fa5a2),
-_c(U+1F963, "๐Ÿฅฃ", f09fa5a3),
-_c(U+1F964, "๐Ÿฅค", f09fa5a4),
-_c(U+1F965, "๐Ÿฅฅ", f09fa5a5),
-_c(U+1F966, "๐Ÿฅฆ", f09fa5a6),
-_c(U+1F967, "๐Ÿฅง", f09fa5a7),
-_c(U+1F968, "๐Ÿฅจ", f09fa5a8),
-_c(U+1F969, "๐Ÿฅฉ", f09fa5a9),
-_c(U+1F96A, "๐Ÿฅช", f09fa5aa),
-_c(U+1F96B, "๐Ÿฅซ", f09fa5ab),
-_c(U+1F96C, "๐Ÿฅฌ", f09fa5ac),
-_c(U+1F96D, "๐Ÿฅญ", f09fa5ad),
-_c(U+1F96E, "๐Ÿฅฎ", f09fa5ae),
-_c(U+1F96F, "๐Ÿฅฏ", f09fa5af),
-_c(U+1F970, "๐Ÿฅฐ", f09fa5b0),
-_c(U+1F971, "๐Ÿฅฑ", f09fa5b1),
-_c(U+1F972, "๐Ÿฅฒ", f09fa5b2),
-_c(U+1F973, "๐Ÿฅณ", f09fa5b3),
-_c(U+1F974, "๐Ÿฅด", f09fa5b4),
-_c(U+1F975, "๐Ÿฅต", f09fa5b5),
-_c(U+1F976, "๐Ÿฅถ", f09fa5b6),
-_c(U+1F977, "๐Ÿฅท", f09fa5b7),
-_c(U+1F978, "๐Ÿฅธ", f09fa5b8),
-_c(U+1F979, "๐Ÿฅน", f09fa5b9),
-_c(U+1F97A, "๐Ÿฅบ", f09fa5ba),
-_c(U+1F97B, "๐Ÿฅป", f09fa5bb),
-_c(U+1F97C, "๐Ÿฅผ", f09fa5bc),
-_c(U+1F97D, "๐Ÿฅฝ", f09fa5bd),
-_c(U+1F97E, "๐Ÿฅพ", f09fa5be),
-_c(U+1F97F, "๐Ÿฅฟ", f09fa5bf),
-_c(U+1F980, "๐Ÿฆ€", f09fa680),
-_c(U+1F981, "๐Ÿฆ", f09fa681),
-_c(U+1F982, "๐Ÿฆ‚", f09fa682),
-_c(U+1F983, "๐Ÿฆƒ", f09fa683),
-_c(U+1F984, "๐Ÿฆ„", f09fa684),
-_c(U+1F985, "๐Ÿฆ…", f09fa685),
-_c(U+1F986, "๐Ÿฆ†", f09fa686),
-_c(U+1F987, "๐Ÿฆ‡", f09fa687),
-_c(U+1F988, "๐Ÿฆˆ", f09fa688),
-_c(U+1F989, "๐Ÿฆ‰", f09fa689),
-_c(U+1F98A, "๐ŸฆŠ", f09fa68a),
-_c(U+1F98B, "๐Ÿฆ‹", f09fa68b),
-_c(U+1F98C, "๐ŸฆŒ", f09fa68c),
-_c(U+1F98D, "๐Ÿฆ", f09fa68d),
-_c(U+1F98E, "๐ŸฆŽ", f09fa68e),
-_c(U+1F98F, "๐Ÿฆ", f09fa68f),
-_c(U+1F990, "๐Ÿฆ", f09fa690),
-_c(U+1F991, "๐Ÿฆ‘", f09fa691),
-_c(U+1F992, "๐Ÿฆ’", f09fa692),
-_c(U+1F993, "๐Ÿฆ“", f09fa693),
-_c(U+1F994, "๐Ÿฆ”", f09fa694),
-_c(U+1F995, "๐Ÿฆ•", f09fa695),
-_c(U+1F996, "๐Ÿฆ–", f09fa696),
-_c(U+1F997, "๐Ÿฆ—", f09fa697),
-_c(U+1F998, "๐Ÿฆ˜", f09fa698),
-_c(U+1F999, "๐Ÿฆ™", f09fa699),
-_c(U+1F99A, "๐Ÿฆš", f09fa69a),
-_c(U+1F99B, "๐Ÿฆ›", f09fa69b),
-_c(U+1F99C, "๐Ÿฆœ", f09fa69c),
-_c(U+1F99D, "๐Ÿฆ", f09fa69d),
-_c(U+1F99E, "๐Ÿฆž", f09fa69e),
-_c(U+1F99F, "๐ŸฆŸ", f09fa69f),
-_c(U+1F9A0, "๐Ÿฆ ", f09fa6a0),
-_c(U+1F9A1, "๐Ÿฆก", f09fa6a1),
-_c(U+1F9A2, "๐Ÿฆข", f09fa6a2),
-_c(U+1F9A3, "๐Ÿฆฃ", f09fa6a3),
-_c(U+1F9A4, "๐Ÿฆค", f09fa6a4),
-_c(U+1F9A5, "๐Ÿฆฅ", f09fa6a5),
-_c(U+1F9A6, "๐Ÿฆฆ", f09fa6a6),
-_c(U+1F9A7, "๐Ÿฆง", f09fa6a7),
-_c(U+1F9A8, "๐Ÿฆจ", f09fa6a8),
-_c(U+1F9A9, "๐Ÿฆฉ", f09fa6a9),
-_c(U+1F9AA, "๐Ÿฆช", f09fa6aa),
-_c(U+1F9AB, "๐Ÿฆซ", f09fa6ab),
-_c(U+1F9AC, "๐Ÿฆฌ", f09fa6ac),
-_c(U+1F9AD, "๐Ÿฆญ", f09fa6ad),
-_c(U+1F9AE, "๐Ÿฆฎ", f09fa6ae),
-_c(U+1F9AF, "๐Ÿฆฏ", f09fa6af),
-_c(U+1F9B0, "๐Ÿฆฐ", f09fa6b0),
-_c(U+1F9B1, "๐Ÿฆฑ", f09fa6b1),
-_c(U+1F9B2, "๐Ÿฆฒ", f09fa6b2),
-_c(U+1F9B3, "๐Ÿฆณ", f09fa6b3),
-_c(U+1F9B4, "๐Ÿฆด", f09fa6b4),
-_c(U+1F9B5, "๐Ÿฆต", f09fa6b5),
-_c(U+1F9B6, "๐Ÿฆถ", f09fa6b6),
-_c(U+1F9B7, "๐Ÿฆท", f09fa6b7),
-_c(U+1F9B8, "๐Ÿฆธ", f09fa6b8),
-_c(U+1F9B9, "๐Ÿฆน", f09fa6b9),
-_c(U+1F9BA, "๐Ÿฆบ", f09fa6ba),
-_c(U+1F9BB, "๐Ÿฆป", f09fa6bb),
-_c(U+1F9BC, "๐Ÿฆผ", f09fa6bc),
-_c(U+1F9BD, "๐Ÿฆฝ", f09fa6bd),
-_c(U+1F9BE, "๐Ÿฆพ", f09fa6be),
-_c(U+1F9BF, "๐Ÿฆฟ", f09fa6bf),
-_c(U+1F9C0, "๐Ÿง€", f09fa780),
-_c(U+1F9C1, "๐Ÿง", f09fa781),
-_c(U+1F9C2, "๐Ÿง‚", f09fa782),
-_c(U+1F9C3, "๐Ÿงƒ", f09fa783),
-_c(U+1F9C4, "๐Ÿง„", f09fa784),
-_c(U+1F9C5, "๐Ÿง…", f09fa785),
-_c(U+1F9C6, "๐Ÿง†", f09fa786),
-_c(U+1F9C7, "๐Ÿง‡", f09fa787),
-_c(U+1F9C8, "๐Ÿงˆ", f09fa788),
-_c(U+1F9C9, "๐Ÿง‰", f09fa789),
-_c(U+1F9CA, "๐ŸงŠ", f09fa78a),
-_c(U+1F9CB, "๐Ÿง‹", f09fa78b),
-_c(U+1F9CC, "๐ŸงŒ", f09fa78c),
-_c(U+1F9CD, "๐Ÿง", f09fa78d),
-_c(U+1F9CE, "๐ŸงŽ", f09fa78e),
-_c(U+1F9CF, "๐Ÿง", f09fa78f),
-_c(U+1F9D0, "๐Ÿง", f09fa790),
-_c(U+1F9D1, "๐Ÿง‘", f09fa791),
-_c(U+1F9D2, "๐Ÿง’", f09fa792),
-_c(U+1F9D3, "๐Ÿง“", f09fa793),
-_c(U+1F9D4, "๐Ÿง”", f09fa794),
-_c(U+1F9D5, "๐Ÿง•", f09fa795),
-_c(U+1F9D6, "๐Ÿง–", f09fa796),
-_c(U+1F9D7, "๐Ÿง—", f09fa797),
-_c(U+1F9D8, "๐Ÿง˜", f09fa798),
-_c(U+1F9D9, "๐Ÿง™", f09fa799),
-_c(U+1F9DA, "๐Ÿงš", f09fa79a),
-_c(U+1F9DB, "๐Ÿง›", f09fa79b),
-_c(U+1F9DC, "๐Ÿงœ", f09fa79c),
-_c(U+1F9DD, "๐Ÿง", f09fa79d),
-_c(U+1F9DE, "๐Ÿงž", f09fa79e),
-_c(U+1F9DF, "๐ŸงŸ", f09fa79f),
-_c(U+1F9E0, "๐Ÿง ", f09fa7a0),
-_c(U+1F9E1, "๐Ÿงก", f09fa7a1),
-_c(U+1F9E2, "๐Ÿงข", f09fa7a2),
-_c(U+1F9E3, "๐Ÿงฃ", f09fa7a3),
-_c(U+1F9E4, "๐Ÿงค", f09fa7a4),
-_c(U+1F9E5, "๐Ÿงฅ", f09fa7a5),
-_c(U+1F9E6, "๐Ÿงฆ", f09fa7a6),
-_c(U+1F9E7, "๐Ÿงง", f09fa7a7),
-_c(U+1F9E8, "๐Ÿงจ", f09fa7a8),
-_c(U+1F9E9, "๐Ÿงฉ", f09fa7a9),
-_c(U+1F9EA, "๐Ÿงช", f09fa7aa),
-_c(U+1F9EB, "๐Ÿงซ", f09fa7ab),
-_c(U+1F9EC, "๐Ÿงฌ", f09fa7ac),
-_c(U+1F9ED, "๐Ÿงญ", f09fa7ad),
-_c(U+1F9EE, "๐Ÿงฎ", f09fa7ae),
-_c(U+1F9EF, "๐Ÿงฏ", f09fa7af),
-_c(U+1F9F0, "๐Ÿงฐ", f09fa7b0),
-_c(U+1F9F1, "๐Ÿงฑ", f09fa7b1),
-_c(U+1F9F2, "๐Ÿงฒ", f09fa7b2),
-_c(U+1F9F3, "๐Ÿงณ", f09fa7b3),
-_c(U+1F9F4, "๐Ÿงด", f09fa7b4),
-_c(U+1F9F5, "๐Ÿงต", f09fa7b5),
-_c(U+1F9F6, "๐Ÿงถ", f09fa7b6),
-_c(U+1F9F7, "๐Ÿงท", f09fa7b7),
-_c(U+1F9F8, "๐Ÿงธ", f09fa7b8),
-_c(U+1F9F9, "๐Ÿงน", f09fa7b9),
-_c(U+1F9FA, "๐Ÿงบ", f09fa7ba),
-_c(U+1F9FB, "๐Ÿงป", f09fa7bb),
-_c(U+1F9FC, "๐Ÿงผ", f09fa7bc),
-_c(U+1F9FD, "๐Ÿงฝ", f09fa7bd),
-_c(U+1F9FE, "๐Ÿงพ", f09fa7be),
-_c(U+1F9FF, "๐Ÿงฟ", f09fa7bf),
-_c(U+100000, "๔€€€", f4808080),
-_c(U+100001, "๔€€", f4808081),
-_c(U+100002, "๔€€‚", f4808082),
-_c(U+100003, "๔€€ƒ", f4808083),
-_c(U+100004, "๔€€„", f4808084),
-_c(U+100005, "๔€€…", f4808085),
-_c(U+100006, "๔€€†", f4808086),
-_c(U+100007, "๔€€‡", f4808087),
-_c(U+100008, "๔€€ˆ", f4808088),
-_c(U+100009, "๔€€‰", f4808089),
-_c(U+10000A, "๔€€Š", f480808a),
-_c(U+10000B, "๔€€‹", f480808b),
-_c(U+10000C, "๔€€Œ", f480808c),
-_c(U+10000D, "๔€€", f480808d),
-_c(U+10000E, "๔€€Ž", f480808e),
-_c(U+10000F, "๔€€", f480808f),
-_c(U+100010, "๔€€", f4808090),
-_c(U+100011, "๔€€‘", f4808091),
-_c(U+100012, "๔€€’", f4808092),
-_c(U+100013, "๔€€“", f4808093),
-_c(U+100014, "๔€€”", f4808094),
-_c(U+100015, "๔€€•", f4808095),
-_c(U+100016, "๔€€–", f4808096),
-_c(U+100017, "๔€€—", f4808097),
-_c(U+100018, "๔€€˜", f4808098),
-_c(U+100019, "๔€€™", f4808099),
-_c(U+10001A, "๔€€š", f480809a),
-_c(U+10001B, "๔€€›", f480809b),
-_c(U+10001C, "๔€€œ", f480809c),
-_c(U+10001D, "๔€€", f480809d),
-_c(U+10001E, "๔€€ž", f480809e),
-_c(U+10001F, "๔€€Ÿ", f480809f),
-_c(U+100020, "๔€€ ", f48080a0),
-_c(U+100021, "๔€€ก", f48080a1),
-_c(U+100022, "๔€€ข", f48080a2),
-_c(U+100023, "๔€€ฃ", f48080a3),
-_c(U+100024, "๔€€ค", f48080a4),
-_c(U+100025, "๔€€ฅ", f48080a5),
-_c(U+100026, "๔€€ฆ", f48080a6),
-_c(U+100027, "๔€€ง", f48080a7),
-_c(U+100028, "๔€€จ", f48080a8),
-_c(U+100029, "๔€€ฉ", f48080a9),
-_c(U+10002A, "๔€€ช", f48080aa),
-_c(U+10002B, "๔€€ซ", f48080ab),
-_c(U+10002C, "๔€€ฌ", f48080ac),
-_c(U+10002D, "๔€€ญ", f48080ad),
-_c(U+10002E, "๔€€ฎ", f48080ae),
-_c(U+10002F, "๔€€ฏ", f48080af),
-_c(U+100030, "๔€€ฐ", f48080b0),
-_c(U+100031, "๔€€ฑ", f48080b1),
-_c(U+100032, "๔€€ฒ", f48080b2),
-_c(U+100033, "๔€€ณ", f48080b3),
-_c(U+100034, "๔€€ด", f48080b4),
-_c(U+100035, "๔€€ต", f48080b5),
-_c(U+100036, "๔€€ถ", f48080b6),
-_c(U+100037, "๔€€ท", f48080b7),
-_c(U+100038, "๔€€ธ", f48080b8),
-_c(U+100039, "๔€€น", f48080b9),
-_c(U+10003A, "๔€€บ", f48080ba),
-_c(U+10003B, "๔€€ป", f48080bb),
-_c(U+10003C, "๔€€ผ", f48080bc),
-_c(U+10003D, "๔€€ฝ", f48080bd),
-_c(U+10003E, "๔€€พ", f48080be),
-_c(U+10003F, "๔€€ฟ", f48080bf),
-_c(U+100040, "๔€€", f4808180),
-_c(U+100041, "๔€", f4808181),
-_c(U+100042, "๔€‚", f4808182),
-_c(U+100043, "๔€ƒ", f4808183),
-_c(U+100044, "๔€„", f4808184),
-_c(U+100045, "๔€…", f4808185),
-_c(U+100046, "๔€†", f4808186),
-_c(U+100047, "๔€‡", f4808187),
-_c(U+100048, "๔€ˆ", f4808188),
-_c(U+100049, "๔€‰", f4808189),
-_c(U+10004A, "๔€Š", f480818a),
-_c(U+10004B, "๔€‹", f480818b),
-_c(U+10004C, "๔€Œ", f480818c),
-_c(U+10004D, "๔€", f480818d),
-_c(U+10004E, "๔€Ž", f480818e),
-_c(U+10004F, "๔€", f480818f),
-_c(U+100050, "๔€", f4808190),
-_c(U+100051, "๔€‘", f4808191),
-_c(U+100052, "๔€’", f4808192),
-_c(U+100053, "๔€“", f4808193),
-_c(U+100054, "๔€”", f4808194),
-_c(U+100055, "๔€•", f4808195),
-_c(U+100056, "๔€–", f4808196),
-_c(U+100057, "๔€—", f4808197),
-_c(U+100058, "๔€˜", f4808198),
-_c(U+100059, "๔€™", f4808199),
-_c(U+10005A, "๔€š", f480819a),
-_c(U+10005B, "๔€›", f480819b),
-_c(U+10005C, "๔€œ", f480819c),
-_c(U+10005D, "๔€", f480819d),
-_c(U+10005E, "๔€ž", f480819e),
-_c(U+10005F, "๔€Ÿ", f480819f),
-_c(U+100060, "๔€ ", f48081a0),
-_c(U+100061, "๔€ก", f48081a1),
-_c(U+100062, "๔€ข", f48081a2),
-_c(U+100063, "๔€ฃ", f48081a3),
-_c(U+100064, "๔€ค", f48081a4),
-_c(U+100065, "๔€ฅ", f48081a5),
-_c(U+100066, "๔€ฆ", f48081a6),
-_c(U+100067, "๔€ง", f48081a7),
-_c(U+100068, "๔€จ", f48081a8),
-_c(U+100069, "๔€ฉ", f48081a9),
-_c(U+10006A, "๔€ช", f48081aa),
-_c(U+10006B, "๔€ซ", f48081ab),
-_c(U+10006C, "๔€ฌ", f48081ac),
-_c(U+10006D, "๔€ญ", f48081ad),
-_c(U+10006E, "๔€ฎ", f48081ae),
-_c(U+10006F, "๔€ฏ", f48081af),
-_c(U+100070, "๔€ฐ", f48081b0),
-_c(U+100071, "๔€ฑ", f48081b1),
-_c(U+100072, "๔€ฒ", f48081b2),
-_c(U+100073, "๔€ณ", f48081b3),
-_c(U+100074, "๔€ด", f48081b4),
-_c(U+100075, "๔€ต", f48081b5),
-_c(U+100076, "๔€ถ", f48081b6),
-_c(U+100077, "๔€ท", f48081b7),
-_c(U+100078, "๔€ธ", f48081b8),
-_c(U+100079, "๔€น", f48081b9),
-_c(U+10007A, "๔€บ", f48081ba),
-_c(U+10007B, "๔€ป", f48081bb),
-_c(U+10007C, "๔€ผ", f48081bc),
-_c(U+10007D, "๔€ฝ", f48081bd),
-_c(U+10007E, "๔€พ", f48081be),
-_c(U+10007F, "๔€ฟ", f48081bf),
-_c(U+100080, "๔€‚€", f4808280),
-_c(U+100081, "๔€‚", f4808281),
-_c(U+100082, "๔€‚‚", f4808282),
-_c(U+100083, "๔€‚ƒ", f4808283),
-_c(U+100084, "๔€‚„", f4808284),
-_c(U+100085, "๔€‚…", f4808285),
-_c(U+100086, "๔€‚†", f4808286),
-_c(U+100087, "๔€‚‡", f4808287),
-_c(U+100088, "๔€‚ˆ", f4808288),
-_c(U+100089, "๔€‚‰", f4808289),
-_c(U+10008A, "๔€‚Š", f480828a),
-_c(U+10008B, "๔€‚‹", f480828b),
-_c(U+10008C, "๔€‚Œ", f480828c),
-_c(U+10008D, "๔€‚", f480828d),
-_c(U+10008E, "๔€‚Ž", f480828e),
-_c(U+10008F, "๔€‚", f480828f),
-_c(U+100090, "๔€‚", f4808290),
-_c(U+100091, "๔€‚‘", f4808291),
-_c(U+100092, "๔€‚’", f4808292),
-_c(U+100093, "๔€‚“", f4808293),
-_c(U+100094, "๔€‚”", f4808294),
-_c(U+100095, "๔€‚•", f4808295),
-_c(U+100096, "๔€‚–", f4808296),
-_c(U+100097, "๔€‚—", f4808297),
-_c(U+100098, "๔€‚˜", f4808298),
-_c(U+100099, "๔€‚™", f4808299),
-_c(U+10009A, "๔€‚š", f480829a),
-_c(U+10009B, "๔€‚›", f480829b),
-_c(U+10009C, "๔€‚œ", f480829c),
-_c(U+10009D, "๔€‚", f480829d),
-_c(U+10009E, "๔€‚ž", f480829e),
-_c(U+10009F, "๔€‚Ÿ", f480829f),
-_c(U+1000A0, "๔€‚ ", f48082a0),
-_c(U+1000A1, "๔€‚ก", f48082a1),
-_c(U+1000A2, "๔€‚ข", f48082a2),
-_c(U+1000A3, "๔€‚ฃ", f48082a3),
-_c(U+1000A4, "๔€‚ค", f48082a4),
-_c(U+1000A5, "๔€‚ฅ", f48082a5),
-_c(U+1000A6, "๔€‚ฆ", f48082a6),
-_c(U+1000A7, "๔€‚ง", f48082a7),
-_c(U+1000A8, "๔€‚จ", f48082a8),
-_c(U+1000A9, "๔€‚ฉ", f48082a9),
-_c(U+1000AA, "๔€‚ช", f48082aa),
-_c(U+1000AB, "๔€‚ซ", f48082ab),
-_c(U+1000AC, "๔€‚ฌ", f48082ac),
-_c(U+1000AD, "๔€‚ญ", f48082ad),
-_c(U+1000AE, "๔€‚ฎ", f48082ae),
-_c(U+1000AF, "๔€‚ฏ", f48082af),
-_c(U+1000B0, "๔€‚ฐ", f48082b0),
-_c(U+1000B1, "๔€‚ฑ", f48082b1),
-_c(U+1000B2, "๔€‚ฒ", f48082b2),
-_c(U+1000B3, "๔€‚ณ", f48082b3),
-_c(U+1000B4, "๔€‚ด", f48082b4),
-_c(U+1000B5, "๔€‚ต", f48082b5),
-_c(U+1000B6, "๔€‚ถ", f48082b6),
-_c(U+1000B7, "๔€‚ท", f48082b7),
-_c(U+1000B8, "๔€‚ธ", f48082b8),
-_c(U+1000B9, "๔€‚น", f48082b9),
-_c(U+1000BA, "๔€‚บ", f48082ba),
-_c(U+1000BB, "๔€‚ป", f48082bb),
-_c(U+1000BC, "๔€‚ผ", f48082bc),
-_c(U+1000BD, "๔€‚ฝ", f48082bd),
-_c(U+1000BE, "๔€‚พ", f48082be),
-_c(U+1000BF, "๔€‚ฟ", f48082bf),
-_c(U+1000C0, "๔€ƒ€", f4808380),
-_c(U+1000C1, "๔€ƒ", f4808381),
-_c(U+1000C2, "๔€ƒ‚", f4808382),
-_c(U+1000C3, "๔€ƒƒ", f4808383),
-_c(U+1000C4, "๔€ƒ„", f4808384),
-_c(U+1000C5, "๔€ƒ…", f4808385),
-_c(U+1000C6, "๔€ƒ†", f4808386),
-_c(U+1000C7, "๔€ƒ‡", f4808387),
-_c(U+1000C8, "๔€ƒˆ", f4808388),
-_c(U+1000C9, "๔€ƒ‰", f4808389),
-_c(U+1000CA, "๔€ƒŠ", f480838a),
-_c(U+1000CB, "๔€ƒ‹", f480838b),
-_c(U+1000CC, "๔€ƒŒ", f480838c),
-_c(U+1000CD, "๔€ƒ", f480838d),
-_c(U+1000CE, "๔€ƒŽ", f480838e),
-_c(U+1000CF, "๔€ƒ", f480838f),
-_c(U+1000D0, "๔€ƒ", f4808390),
-_c(U+1000D1, "๔€ƒ‘", f4808391),
-_c(U+1000D2, "๔€ƒ’", f4808392),
-_c(U+1000D3, "๔€ƒ“", f4808393),
-_c(U+1000D4, "๔€ƒ”", f4808394),
-_c(U+1000D5, "๔€ƒ•", f4808395),
-_c(U+1000D6, "๔€ƒ–", f4808396),
-_c(U+1000D7, "๔€ƒ—", f4808397),
-_c(U+1000D8, "๔€ƒ˜", f4808398),
-_c(U+1000D9, "๔€ƒ™", f4808399),
-_c(U+1000DA, "๔€ƒš", f480839a),
-_c(U+1000DB, "๔€ƒ›", f480839b),
-_c(U+1000DC, "๔€ƒœ", f480839c),
-_c(U+1000DD, "๔€ƒ", f480839d),
-_c(U+1000DE, "๔€ƒž", f480839e),
-_c(U+1000DF, "๔€ƒŸ", f480839f),
-_c(U+1000E0, "๔€ƒ ", f48083a0),
-_c(U+1000E1, "๔€ƒก", f48083a1),
-_c(U+1000E2, "๔€ƒข", f48083a2),
-_c(U+1000E3, "๔€ƒฃ", f48083a3),
-_c(U+1000E4, "๔€ƒค", f48083a4),
-_c(U+1000E5, "๔€ƒฅ", f48083a5),
-_c(U+1000E6, "๔€ƒฆ", f48083a6),
-_c(U+1000E7, "๔€ƒง", f48083a7),
-_c(U+1000E8, "๔€ƒจ", f48083a8),
-_c(U+1000E9, "๔€ƒฉ", f48083a9),
-_c(U+1000EA, "๔€ƒช", f48083aa),
-_c(U+1000EB, "๔€ƒซ", f48083ab),
-_c(U+1000EC, "๔€ƒฌ", f48083ac),
-_c(U+1000ED, "๔€ƒญ", f48083ad),
-_c(U+1000EE, "๔€ƒฎ", f48083ae),
-_c(U+1000EF, "๔€ƒฏ", f48083af),
-_c(U+1000F0, "๔€ƒฐ", f48083b0),
-_c(U+1000F1, "๔€ƒฑ", f48083b1),
-_c(U+1000F2, "๔€ƒฒ", f48083b2),
-_c(U+1000F3, "๔€ƒณ", f48083b3),
-_c(U+1000F4, "๔€ƒด", f48083b4),
-_c(U+1000F5, "๔€ƒต", f48083b5),
-_c(U+1000F6, "๔€ƒถ", f48083b6),
-_c(U+1000F7, "๔€ƒท", f48083b7),
-_c(U+1000F8, "๔€ƒธ", f48083b8),
-_c(U+1000F9, "๔€ƒน", f48083b9),
-_c(U+1000FA, "๔€ƒบ", f48083ba),
-_c(U+1000FB, "๔€ƒป", f48083bb),
-_c(U+1000FC, "๔€ƒผ", f48083bc),
-_c(U+1000FD, "๔€ƒฝ", f48083bd),
-_c(U+1000FE, "๔€ƒพ", f48083be),
-_c(U+1000FF, "๔€ƒฟ", f48083bf),
-_c(U+100100, "๔€„€", f4808480),
-_c(U+100101, "๔€„", f4808481),
-_c(U+100102, "๔€„‚", f4808482),
-_c(U+100103, "๔€„ƒ", f4808483),
-_c(U+100104, "๔€„„", f4808484),
-_c(U+100105, "๔€„…", f4808485),
-_c(U+100106, "๔€„†", f4808486),
-_c(U+100107, "๔€„‡", f4808487),
-_c(U+100108, "๔€„ˆ", f4808488),
-_c(U+100109, "๔€„‰", f4808489),
-_c(U+10010A, "๔€„Š", f480848a),
-_c(U+10010B, "๔€„‹", f480848b),
-_c(U+10010C, "๔€„Œ", f480848c),
-_c(U+10010D, "๔€„", f480848d),
-_c(U+10010E, "๔€„Ž", f480848e),
-_c(U+10010F, "๔€„", f480848f),
-_c(U+100110, "๔€„", f4808490),
-_c(U+100111, "๔€„‘", f4808491),
-_c(U+100112, "๔€„’", f4808492),
-_c(U+100113, "๔€„“", f4808493),
-_c(U+100114, "๔€„”", f4808494),
-_c(U+100115, "๔€„•", f4808495),
-_c(U+100116, "๔€„–", f4808496),
-_c(U+100117, "๔€„—", f4808497),
-_c(U+100118, "๔€„˜", f4808498),
-_c(U+100119, "๔€„™", f4808499),
-_c(U+10011A, "๔€„š", f480849a),
-_c(U+10011B, "๔€„›", f480849b),
-_c(U+10011C, "๔€„œ", f480849c),
-_c(U+10011D, "๔€„", f480849d),
-_c(U+10011E, "๔€„ž", f480849e),
-_c(U+10011F, "๔€„Ÿ", f480849f),
-_c(U+100120, "๔€„ ", f48084a0),
-_c(U+100121, "๔€„ก", f48084a1),
-_c(U+100122, "๔€„ข", f48084a2),
-_c(U+100123, "๔€„ฃ", f48084a3),
-_c(U+100124, "๔€„ค", f48084a4),
-_c(U+100125, "๔€„ฅ", f48084a5),
-_c(U+100126, "๔€„ฆ", f48084a6),
-_c(U+100127, "๔€„ง", f48084a7),
-_c(U+100128, "๔€„จ", f48084a8),
-_c(U+100129, "๔€„ฉ", f48084a9),
-_c(U+10012A, "๔€„ช", f48084aa),
-_c(U+10012B, "๔€„ซ", f48084ab),
-_c(U+10012C, "๔€„ฌ", f48084ac),
-_c(U+10012D, "๔€„ญ", f48084ad),
-_c(U+10012E, "๔€„ฎ", f48084ae),
-_c(U+10012F, "๔€„ฏ", f48084af),
-_c(U+100130, "๔€„ฐ", f48084b0),
-_c(U+100131, "๔€„ฑ", f48084b1),
-_c(U+100132, "๔€„ฒ", f48084b2),
-_c(U+100133, "๔€„ณ", f48084b3),
-_c(U+100134, "๔€„ด", f48084b4),
-_c(U+100135, "๔€„ต", f48084b5),
-_c(U+100136, "๔€„ถ", f48084b6),
-_c(U+100137, "๔€„ท", f48084b7),
-_c(U+100138, "๔€„ธ", f48084b8),
-_c(U+100139, "๔€„น", f48084b9),
-_c(U+10013A, "๔€„บ", f48084ba),
-_c(U+10013B, "๔€„ป", f48084bb),
-_c(U+10013C, "๔€„ผ", f48084bc),
-_c(U+10013D, "๔€„ฝ", f48084bd),
-_c(U+10013E, "๔€„พ", f48084be),
-_c(U+10013F, "๔€„ฟ", f48084bf),
-_c(U+100140, "๔€…€", f4808580),
-_c(U+100141, "๔€…", f4808581),
-_c(U+100142, "๔€…‚", f4808582),
-_c(U+100143, "๔€…ƒ", f4808583),
-_c(U+100144, "๔€…„", f4808584),
-_c(U+100145, "๔€……", f4808585),
-_c(U+100146, "๔€…†", f4808586),
-_c(U+100147, "๔€…‡", f4808587),
-_c(U+100148, "๔€…ˆ", f4808588),
-_c(U+100149, "๔€…‰", f4808589),
-_c(U+10014A, "๔€…Š", f480858a),
-_c(U+10014B, "๔€…‹", f480858b),
-_c(U+10014C, "๔€…Œ", f480858c),
-_c(U+10014D, "๔€…", f480858d),
-_c(U+10014E, "๔€…Ž", f480858e),
-_c(U+10014F, "๔€…", f480858f),
-_c(U+100150, "๔€…", f4808590),
-_c(U+100151, "๔€…‘", f4808591),
-_c(U+100152, "๔€…’", f4808592),
-_c(U+100153, "๔€…“", f4808593),
-_c(U+100154, "๔€…”", f4808594),
-_c(U+100155, "๔€…•", f4808595),
-_c(U+100156, "๔€…–", f4808596),
-_c(U+100157, "๔€…—", f4808597),
-_c(U+100158, "๔€…˜", f4808598),
-_c(U+100159, "๔€…™", f4808599),
-_c(U+10015A, "๔€…š", f480859a),
-_c(U+10015B, "๔€…›", f480859b),
-_c(U+10015C, "๔€…œ", f480859c),
-_c(U+10015D, "๔€…", f480859d),
-_c(U+10015E, "๔€…ž", f480859e),
-_c(U+10015F, "๔€…Ÿ", f480859f),
-_c(U+100160, "๔€… ", f48085a0),
-_c(U+100161, "๔€…ก", f48085a1),
-_c(U+100162, "๔€…ข", f48085a2),
-_c(U+100163, "๔€…ฃ", f48085a3),
-_c(U+100164, "๔€…ค", f48085a4),
-_c(U+100165, "๔€…ฅ", f48085a5),
-_c(U+100166, "๔€…ฆ", f48085a6),
-_c(U+100167, "๔€…ง", f48085a7),
-_c(U+100168, "๔€…จ", f48085a8),
-_c(U+100169, "๔€…ฉ", f48085a9),
-_c(U+10016A, "๔€…ช", f48085aa),
-_c(U+10016B, "๔€…ซ", f48085ab),
-_c(U+10016C, "๔€…ฌ", f48085ac),
-_c(U+10016D, "๔€…ญ", f48085ad),
-_c(U+10016E, "๔€…ฎ", f48085ae),
-_c(U+10016F, "๔€…ฏ", f48085af),
-_c(U+100170, "๔€…ฐ", f48085b0),
-_c(U+100171, "๔€…ฑ", f48085b1),
-_c(U+100172, "๔€…ฒ", f48085b2),
-_c(U+100173, "๔€…ณ", f48085b3),
-_c(U+100174, "๔€…ด", f48085b4),
-_c(U+100175, "๔€…ต", f48085b5),
-_c(U+100176, "๔€…ถ", f48085b6),
-_c(U+100177, "๔€…ท", f48085b7),
-_c(U+100178, "๔€…ธ", f48085b8),
-_c(U+100179, "๔€…น", f48085b9),
-_c(U+10017A, "๔€…บ", f48085ba),
-_c(U+10017B, "๔€…ป", f48085bb),
-_c(U+10017C, "๔€…ผ", f48085bc),
-_c(U+10017D, "๔€…ฝ", f48085bd),
-_c(U+10017E, "๔€…พ", f48085be),
-_c(U+10017F, "๔€…ฟ", f48085bf),
-_c(U+100180, "๔€†€", f4808680),
-_c(U+100181, "๔€†", f4808681),
-_c(U+100182, "๔€†‚", f4808682),
-_c(U+100183, "๔€†ƒ", f4808683),
-_c(U+100184, "๔€†„", f4808684),
-_c(U+100185, "๔€†…", f4808685),
-_c(U+100186, "๔€††", f4808686),
-_c(U+100187, "๔€†‡", f4808687),
-_c(U+100188, "๔€†ˆ", f4808688),
-_c(U+100189, "๔€†‰", f4808689),
-_c(U+10018A, "๔€†Š", f480868a),
-_c(U+10018B, "๔€†‹", f480868b),
-_c(U+10018C, "๔€†Œ", f480868c),
-_c(U+10018D, "๔€†", f480868d),
-_c(U+10018E, "๔€†Ž", f480868e),
-_c(U+10018F, "๔€†", f480868f),
-_c(U+100190, "๔€†", f4808690),
-_c(U+100191, "๔€†‘", f4808691),
-_c(U+100192, "๔€†’", f4808692),
-_c(U+100193, "๔€†“", f4808693),
-_c(U+100194, "๔€†”", f4808694),
-_c(U+100195, "๔€†•", f4808695),
-_c(U+100196, "๔€†–", f4808696),
-_c(U+100197, "๔€†—", f4808697),
-_c(U+100198, "๔€†˜", f4808698),
-_c(U+100199, "๔€†™", f4808699),
-_c(U+10019A, "๔€†š", f480869a),
-_c(U+10019B, "๔€†›", f480869b),
-_c(U+10019C, "๔€†œ", f480869c),
-_c(U+10019D, "๔€†", f480869d),
-_c(U+10019E, "๔€†ž", f480869e),
-_c(U+10019F, "๔€†Ÿ", f480869f),
-_c(U+1001A0, "๔€† ", f48086a0),
-_c(U+1001A1, "๔€†ก", f48086a1),
-_c(U+1001A2, "๔€†ข", f48086a2),
-_c(U+1001A3, "๔€†ฃ", f48086a3),
-_c(U+1001A4, "๔€†ค", f48086a4),
-_c(U+1001A5, "๔€†ฅ", f48086a5),
-_c(U+1001A6, "๔€†ฆ", f48086a6),
-_c(U+1001A7, "๔€†ง", f48086a7),
-_c(U+1001A8, "๔€†จ", f48086a8),
-_c(U+1001A9, "๔€†ฉ", f48086a9),
-_c(U+1001AA, "๔€†ช", f48086aa),
-_c(U+1001AB, "๔€†ซ", f48086ab),
-_c(U+1001AC, "๔€†ฌ", f48086ac),
-_c(U+1001AD, "๔€†ญ", f48086ad),
-_c(U+1001AE, "๔€†ฎ", f48086ae),
-_c(U+1001AF, "๔€†ฏ", f48086af),
-_c(U+1001B0, "๔€†ฐ", f48086b0),
-_c(U+1001B1, "๔€†ฑ", f48086b1),
-_c(U+1001B2, "๔€†ฒ", f48086b2),
-_c(U+1001B3, "๔€†ณ", f48086b3),
-_c(U+1001B4, "๔€†ด", f48086b4),
-_c(U+1001B5, "๔€†ต", f48086b5),
-_c(U+1001B6, "๔€†ถ", f48086b6),
-_c(U+1001B7, "๔€†ท", f48086b7),
-_c(U+1001B8, "๔€†ธ", f48086b8),
-_c(U+1001B9, "๔€†น", f48086b9),
-_c(U+1001BA, "๔€†บ", f48086ba),
-_c(U+1001BB, "๔€†ป", f48086bb),
-_c(U+1001BC, "๔€†ผ", f48086bc),
-_c(U+1001BD, "๔€†ฝ", f48086bd),
-_c(U+1001BE, "๔€†พ", f48086be),
-_c(U+1001BF, "๔€†ฟ", f48086bf),
-_c(U+1001C0, "๔€‡€", f4808780),
-_c(U+1001C1, "๔€‡", f4808781),
-_c(U+1001C2, "๔€‡‚", f4808782),
-_c(U+1001C3, "๔€‡ƒ", f4808783),
-_c(U+1001C4, "๔€‡„", f4808784),
-_c(U+1001C5, "๔€‡…", f4808785),
-_c(U+1001C6, "๔€‡†", f4808786),
-_c(U+1001C7, "๔€‡‡", f4808787),
-_c(U+1001C8, "๔€‡ˆ", f4808788),
-_c(U+1001C9, "๔€‡‰", f4808789),
-_c(U+1001CA, "๔€‡Š", f480878a),
-_c(U+1001CB, "๔€‡‹", f480878b),
-_c(U+1001CC, "๔€‡Œ", f480878c),
-_c(U+1001CD, "๔€‡", f480878d),
-_c(U+1001CE, "๔€‡Ž", f480878e),
-_c(U+1001CF, "๔€‡", f480878f),
-_c(U+1001D0, "๔€‡", f4808790),
-_c(U+1001D1, "๔€‡‘", f4808791),
-_c(U+1001D2, "๔€‡’", f4808792),
-_c(U+1001D3, "๔€‡“", f4808793),
-_c(U+1001D4, "๔€‡”", f4808794),
-_c(U+1001D5, "๔€‡•", f4808795),
-_c(U+1001D6, "๔€‡–", f4808796),
-_c(U+1001D7, "๔€‡—", f4808797),
-_c(U+1001D8, "๔€‡˜", f4808798),
-_c(U+1001D9, "๔€‡™", f4808799),
-_c(U+1001DA, "๔€‡š", f480879a),
-_c(U+1001DB, "๔€‡›", f480879b),
-_c(U+1001DC, "๔€‡œ", f480879c),
-_c(U+1001DD, "๔€‡", f480879d),
-_c(U+1001DE, "๔€‡ž", f480879e),
-_c(U+1001DF, "๔€‡Ÿ", f480879f),
-_c(U+1001E0, "๔€‡ ", f48087a0),
-_c(U+1001E1, "๔€‡ก", f48087a1),
-_c(U+1001E2, "๔€‡ข", f48087a2),
-_c(U+1001E3, "๔€‡ฃ", f48087a3),
-_c(U+1001E4, "๔€‡ค", f48087a4),
-_c(U+1001E5, "๔€‡ฅ", f48087a5),
-_c(U+1001E6, "๔€‡ฆ", f48087a6),
-_c(U+1001E7, "๔€‡ง", f48087a7),
-_c(U+1001E8, "๔€‡จ", f48087a8),
-_c(U+1001E9, "๔€‡ฉ", f48087a9),
-_c(U+1001EA, "๔€‡ช", f48087aa),
-_c(U+1001EB, "๔€‡ซ", f48087ab),
-_c(U+1001EC, "๔€‡ฌ", f48087ac),
-_c(U+1001ED, "๔€‡ญ", f48087ad),
-_c(U+1001EE, "๔€‡ฎ", f48087ae),
-_c(U+1001EF, "๔€‡ฏ", f48087af),
-_c(U+1001F0, "๔€‡ฐ", f48087b0),
-_c(U+1001F1, "๔€‡ฑ", f48087b1),
-_c(U+1001F2, "๔€‡ฒ", f48087b2),
-_c(U+1001F3, "๔€‡ณ", f48087b3),
-_c(U+1001F4, "๔€‡ด", f48087b4),
-_c(U+1001F5, "๔€‡ต", f48087b5),
-_c(U+1001F6, "๔€‡ถ", f48087b6),
-_c(U+1001F7, "๔€‡ท", f48087b7),
-_c(U+1001F8, "๔€‡ธ", f48087b8),
-_c(U+1001F9, "๔€‡น", f48087b9),
-_c(U+1001FA, "๔€‡บ", f48087ba),
-_c(U+1001FB, "๔€‡ป", f48087bb),
-_c(U+1001FC, "๔€‡ผ", f48087bc),
-_c(U+1001FD, "๔€‡ฝ", f48087bd),
-_c(U+1001FE, "๔€‡พ", f48087be),
-_c(U+1001FF, "๔€‡ฟ", f48087bf),
-_c(U+100200, "๔€ˆ€", f4808880),
-_c(U+100201, "๔€ˆ", f4808881),
-_c(U+100202, "๔€ˆ‚", f4808882),
-_c(U+100203, "๔€ˆƒ", f4808883),
-_c(U+100204, "๔€ˆ„", f4808884),
-_c(U+100205, "๔€ˆ…", f4808885),
-_c(U+100206, "๔€ˆ†", f4808886),
-_c(U+100207, "๔€ˆ‡", f4808887),
-_c(U+100208, "๔€ˆˆ", f4808888),
-_c(U+100209, "๔€ˆ‰", f4808889),
-_c(U+10020A, "๔€ˆŠ", f480888a),
-_c(U+10020B, "๔€ˆ‹", f480888b),
-_c(U+10020C, "๔€ˆŒ", f480888c),
-_c(U+10020D, "๔€ˆ", f480888d),
-_c(U+10020E, "๔€ˆŽ", f480888e),
-_c(U+10020F, "๔€ˆ", f480888f),
-_c(U+100210, "๔€ˆ", f4808890),
-_c(U+100211, "๔€ˆ‘", f4808891),
-_c(U+100212, "๔€ˆ’", f4808892),
-_c(U+100213, "๔€ˆ“", f4808893),
-_c(U+100214, "๔€ˆ”", f4808894),
-_c(U+100215, "๔€ˆ•", f4808895),
-_c(U+100216, "๔€ˆ–", f4808896),
-_c(U+100217, "๔€ˆ—", f4808897),
-_c(U+100218, "๔€ˆ˜", f4808898),
-_c(U+100219, "๔€ˆ™", f4808899),
-_c(U+10021A, "๔€ˆš", f480889a),
-_c(U+10021B, "๔€ˆ›", f480889b),
-_c(U+10021C, "๔€ˆœ", f480889c),
-_c(U+10021D, "๔€ˆ", f480889d),
-_c(U+10021E, "๔€ˆž", f480889e),
-_c(U+10021F, "๔€ˆŸ", f480889f),
-_c(U+100220, "๔€ˆ ", f48088a0),
-_c(U+100221, "๔€ˆก", f48088a1),
-_c(U+100222, "๔€ˆข", f48088a2),
-_c(U+100223, "๔€ˆฃ", f48088a3),
-_c(U+100224, "๔€ˆค", f48088a4),
-_c(U+100225, "๔€ˆฅ", f48088a5),
-_c(U+100226, "๔€ˆฆ", f48088a6),
-_c(U+100227, "๔€ˆง", f48088a7),
-_c(U+100228, "๔€ˆจ", f48088a8),
-_c(U+100229, "๔€ˆฉ", f48088a9),
-_c(U+10022A, "๔€ˆช", f48088aa),
-_c(U+10022B, "๔€ˆซ", f48088ab),
-_c(U+10022C, "๔€ˆฌ", f48088ac),
-_c(U+10022D, "๔€ˆญ", f48088ad),
-_c(U+10022E, "๔€ˆฎ", f48088ae),
-_c(U+10022F, "๔€ˆฏ", f48088af),
-_c(U+100230, "๔€ˆฐ", f48088b0),
-_c(U+100231, "๔€ˆฑ", f48088b1),
-_c(U+100232, "๔€ˆฒ", f48088b2),
-_c(U+100233, "๔€ˆณ", f48088b3),
-_c(U+100234, "๔€ˆด", f48088b4),
-_c(U+100235, "๔€ˆต", f48088b5),
-_c(U+100236, "๔€ˆถ", f48088b6),
-_c(U+100237, "๔€ˆท", f48088b7),
-_c(U+100238, "๔€ˆธ", f48088b8),
-_c(U+100239, "๔€ˆน", f48088b9),
-_c(U+10023A, "๔€ˆบ", f48088ba),
-_c(U+10023B, "๔€ˆป", f48088bb),
-_c(U+10023C, "๔€ˆผ", f48088bc),
-_c(U+10023D, "๔€ˆฝ", f48088bd),
-_c(U+10023E, "๔€ˆพ", f48088be),
-_c(U+10023F, "๔€ˆฟ", f48088bf),
-_c(U+100240, "๔€‰€", f4808980),
-_c(U+100241, "๔€‰", f4808981),
-_c(U+100242, "๔€‰‚", f4808982),
-_c(U+100243, "๔€‰ƒ", f4808983),
-_c(U+100244, "๔€‰„", f4808984),
-_c(U+100245, "๔€‰…", f4808985),
-_c(U+100246, "๔€‰†", f4808986),
-_c(U+100247, "๔€‰‡", f4808987),
-_c(U+100248, "๔€‰ˆ", f4808988),
-_c(U+100249, "๔€‰‰", f4808989),
-_c(U+10024A, "๔€‰Š", f480898a),
-_c(U+10024B, "๔€‰‹", f480898b),
-_c(U+10024C, "๔€‰Œ", f480898c),
-_c(U+10024D, "๔€‰", f480898d),
-_c(U+10024E, "๔€‰Ž", f480898e),
-_c(U+10024F, "๔€‰", f480898f),
-_c(U+100250, "๔€‰", f4808990),
-_c(U+100251, "๔€‰‘", f4808991),
-_c(U+100252, "๔€‰’", f4808992),
-_c(U+100253, "๔€‰“", f4808993),
-_c(U+100254, "๔€‰”", f4808994),
-_c(U+100255, "๔€‰•", f4808995),
-_c(U+100256, "๔€‰–", f4808996),
-_c(U+100257, "๔€‰—", f4808997),
-_c(U+100258, "๔€‰˜", f4808998),
-_c(U+100259, "๔€‰™", f4808999),
-_c(U+10025A, "๔€‰š", f480899a),
-_c(U+10025B, "๔€‰›", f480899b),
-_c(U+10025C, "๔€‰œ", f480899c),
-_c(U+10025D, "๔€‰", f480899d),
-_c(U+10025E, "๔€‰ž", f480899e),
-_c(U+10025F, "๔€‰Ÿ", f480899f),
-_c(U+100260, "๔€‰ ", f48089a0),
-_c(U+100261, "๔€‰ก", f48089a1),
-_c(U+100262, "๔€‰ข", f48089a2),
-_c(U+100263, "๔€‰ฃ", f48089a3),
-_c(U+100264, "๔€‰ค", f48089a4),
-_c(U+100265, "๔€‰ฅ", f48089a5),
-_c(U+100266, "๔€‰ฆ", f48089a6),
-_c(U+100267, "๔€‰ง", f48089a7),
-_c(U+100268, "๔€‰จ", f48089a8),
-_c(U+100269, "๔€‰ฉ", f48089a9),
-_c(U+10026A, "๔€‰ช", f48089aa),
-_c(U+10026B, "๔€‰ซ", f48089ab),
-_c(U+10026C, "๔€‰ฌ", f48089ac),
-_c(U+10026D, "๔€‰ญ", f48089ad),
-_c(U+10026E, "๔€‰ฎ", f48089ae),
-_c(U+10026F, "๔€‰ฏ", f48089af),
-_c(U+100270, "๔€‰ฐ", f48089b0),
-_c(U+100271, "๔€‰ฑ", f48089b1),
-_c(U+100272, "๔€‰ฒ", f48089b2),
-_c(U+100273, "๔€‰ณ", f48089b3),
-_c(U+100274, "๔€‰ด", f48089b4),
-_c(U+100275, "๔€‰ต", f48089b5),
-_c(U+100276, "๔€‰ถ", f48089b6),
-_c(U+100277, "๔€‰ท", f48089b7),
-_c(U+100278, "๔€‰ธ", f48089b8),
-_c(U+100279, "๔€‰น", f48089b9),
-_c(U+10027A, "๔€‰บ", f48089ba),
-_c(U+10027B, "๔€‰ป", f48089bb),
-_c(U+10027C, "๔€‰ผ", f48089bc),
-_c(U+10027D, "๔€‰ฝ", f48089bd),
-_c(U+10027E, "๔€‰พ", f48089be),
-_c(U+10027F, "๔€‰ฟ", f48089bf),
-_c(U+100280, "๔€Š€", f4808a80),
-_c(U+100281, "๔€Š", f4808a81),
-_c(U+100282, "๔€Š‚", f4808a82),
-_c(U+100283, "๔€Šƒ", f4808a83),
-_c(U+100284, "๔€Š„", f4808a84),
-_c(U+100285, "๔€Š…", f4808a85),
-_c(U+100286, "๔€Š†", f4808a86),
-_c(U+100287, "๔€Š‡", f4808a87),
-_c(U+100288, "๔€Šˆ", f4808a88),
-_c(U+100289, "๔€Š‰", f4808a89),
-_c(U+10028A, "๔€ŠŠ", f4808a8a),
-_c(U+10028B, "๔€Š‹", f4808a8b),
-_c(U+10028C, "๔€ŠŒ", f4808a8c),
-_c(U+10028D, "๔€Š", f4808a8d),
-_c(U+10028E, "๔€ŠŽ", f4808a8e),
-_c(U+10028F, "๔€Š", f4808a8f),
-_c(U+100290, "๔€Š", f4808a90),
-_c(U+100291, "๔€Š‘", f4808a91),
-_c(U+100292, "๔€Š’", f4808a92),
-_c(U+100293, "๔€Š“", f4808a93),
-_c(U+100294, "๔€Š”", f4808a94),
-_c(U+100295, "๔€Š•", f4808a95),
-_c(U+100296, "๔€Š–", f4808a96),
-_c(U+100297, "๔€Š—", f4808a97),
-_c(U+100298, "๔€Š˜", f4808a98),
-_c(U+100299, "๔€Š™", f4808a99),
-_c(U+10029A, "๔€Šš", f4808a9a),
-_c(U+10029B, "๔€Š›", f4808a9b),
-_c(U+10029C, "๔€Šœ", f4808a9c),
-_c(U+10029D, "๔€Š", f4808a9d),
-_c(U+10029E, "๔€Šž", f4808a9e),
-_c(U+10029F, "๔€ŠŸ", f4808a9f),
-_c(U+1002A0, "๔€Š ", f4808aa0),
-_c(U+1002A1, "๔€Šก", f4808aa1),
-_c(U+1002A2, "๔€Šข", f4808aa2),
-_c(U+1002A3, "๔€Šฃ", f4808aa3),
-_c(U+1002A4, "๔€Šค", f4808aa4),
-_c(U+1002A5, "๔€Šฅ", f4808aa5),
-_c(U+1002A6, "๔€Šฆ", f4808aa6),
-_c(U+1002A7, "๔€Šง", f4808aa7),
-_c(U+1002A8, "๔€Šจ", f4808aa8),
-_c(U+1002A9, "๔€Šฉ", f4808aa9),
-_c(U+1002AA, "๔€Šช", f4808aaa),
-_c(U+1002AB, "๔€Šซ", f4808aab),
-_c(U+1002AC, "๔€Šฌ", f4808aac),
-_c(U+1002AD, "๔€Šญ", f4808aad),
-_c(U+1002AE, "๔€Šฎ", f4808aae),
-_c(U+1002AF, "๔€Šฏ", f4808aaf),
-_c(U+1002B0, "๔€Šฐ", f4808ab0),
-_c(U+1002B1, "๔€Šฑ", f4808ab1),
-_c(U+1002B2, "๔€Šฒ", f4808ab2),
-_c(U+1002B3, "๔€Šณ", f4808ab3),
-_c(U+1002B4, "๔€Šด", f4808ab4),
-_c(U+1002B5, "๔€Šต", f4808ab5),
-_c(U+1002B6, "๔€Šถ", f4808ab6),
-_c(U+1002B7, "๔€Šท", f4808ab7),
-_c(U+1002B8, "๔€Šธ", f4808ab8),
-_c(U+1002B9, "๔€Šน", f4808ab9),
-_c(U+1002BA, "๔€Šบ", f4808aba),
-_c(U+1002BB, "๔€Šป", f4808abb),
-_c(U+1002BC, "๔€Šผ", f4808abc),
-_c(U+1002BD, "๔€Šฝ", f4808abd),
-_c(U+1002BE, "๔€Šพ", f4808abe),
-_c(U+1002BF, "๔€Šฟ", f4808abf),
-_c(U+1002C0, "๔€‹€", f4808b80),
-_c(U+1002C1, "๔€‹", f4808b81),
-_c(U+1002C2, "๔€‹‚", f4808b82),
-_c(U+1002C3, "๔€‹ƒ", f4808b83),
-_c(U+1002C4, "๔€‹„", f4808b84),
-_c(U+1002C5, "๔€‹…", f4808b85),
-_c(U+1002C6, "๔€‹†", f4808b86),
-_c(U+1002C7, "๔€‹‡", f4808b87),
-_c(U+1002C8, "๔€‹ˆ", f4808b88),
-_c(U+1002C9, "๔€‹‰", f4808b89),
-_c(U+1002CA, "๔€‹Š", f4808b8a),
-_c(U+1002CB, "๔€‹‹", f4808b8b),
-_c(U+1002CC, "๔€‹Œ", f4808b8c),
-_c(U+1002CD, "๔€‹", f4808b8d),
-_c(U+1002CE, "๔€‹Ž", f4808b8e),
-_c(U+1002CF, "๔€‹", f4808b8f),
-_c(U+1002D0, "๔€‹", f4808b90),
-_c(U+1002D1, "๔€‹‘", f4808b91),
-_c(U+1002D2, "๔€‹’", f4808b92),
-_c(U+1002D3, "๔€‹“", f4808b93),
-_c(U+1002D4, "๔€‹”", f4808b94),
-_c(U+1002D5, "๔€‹•", f4808b95),
-_c(U+1002D6, "๔€‹–", f4808b96),
-_c(U+1002D7, "๔€‹—", f4808b97),
-_c(U+1002D8, "๔€‹˜", f4808b98),
-_c(U+1002D9, "๔€‹™", f4808b99),
-_c(U+1002DA, "๔€‹š", f4808b9a),
-_c(U+1002DB, "๔€‹›", f4808b9b),
-_c(U+1002DC, "๔€‹œ", f4808b9c),
-_c(U+1002DD, "๔€‹", f4808b9d),
-_c(U+1002DE, "๔€‹ž", f4808b9e),
-_c(U+1002DF, "๔€‹Ÿ", f4808b9f),
-_c(U+1002E0, "๔€‹ ", f4808ba0),
-_c(U+1002E1, "๔€‹ก", f4808ba1),
-_c(U+1002E2, "๔€‹ข", f4808ba2),
-_c(U+1002E3, "๔€‹ฃ", f4808ba3),
-_c(U+1002E4, "๔€‹ค", f4808ba4),
-_c(U+1002E5, "๔€‹ฅ", f4808ba5),
-_c(U+1002E6, "๔€‹ฆ", f4808ba6),
-_c(U+1002E7, "๔€‹ง", f4808ba7),
-_c(U+1002E8, "๔€‹จ", f4808ba8),
-_c(U+1002E9, "๔€‹ฉ", f4808ba9),
-_c(U+1002EA, "๔€‹ช", f4808baa),
-_c(U+1002EB, "๔€‹ซ", f4808bab),
-_c(U+1002EC, "๔€‹ฌ", f4808bac),
-_c(U+1002ED, "๔€‹ญ", f4808bad),
-_c(U+1002EE, "๔€‹ฎ", f4808bae),
-_c(U+1002EF, "๔€‹ฏ", f4808baf),
-_c(U+1002F0, "๔€‹ฐ", f4808bb0),
-_c(U+1002F1, "๔€‹ฑ", f4808bb1),
-_c(U+1002F2, "๔€‹ฒ", f4808bb2),
-_c(U+1002F3, "๔€‹ณ", f4808bb3),
-_c(U+1002F4, "๔€‹ด", f4808bb4),
-_c(U+1002F5, "๔€‹ต", f4808bb5),
-_c(U+1002F6, "๔€‹ถ", f4808bb6),
-_c(U+1002F7, "๔€‹ท", f4808bb7),
-_c(U+1002F8, "๔€‹ธ", f4808bb8),
-_c(U+1002F9, "๔€‹น", f4808bb9),
-_c(U+1002FA, "๔€‹บ", f4808bba),
-_c(U+1002FB, "๔€‹ป", f4808bbb),
-_c(U+1002FC, "๔€‹ผ", f4808bbc),
-_c(U+1002FD, "๔€‹ฝ", f4808bbd),
-_c(U+1002FE, "๔€‹พ", f4808bbe),
-_c(U+1002FF, "๔€‹ฟ", f4808bbf),
-_c(U+100300, "๔€Œ€", f4808c80),
-_c(U+100301, "๔€Œ", f4808c81),
-_c(U+100302, "๔€Œ‚", f4808c82),
-_c(U+100303, "๔€Œƒ", f4808c83),
-_c(U+100304, "๔€Œ„", f4808c84),
-_c(U+100305, "๔€Œ…", f4808c85),
-_c(U+100306, "๔€Œ†", f4808c86),
-_c(U+100307, "๔€Œ‡", f4808c87),
-_c(U+100308, "๔€Œˆ", f4808c88),
-_c(U+100309, "๔€Œ‰", f4808c89),
-_c(U+10030A, "๔€ŒŠ", f4808c8a),
-_c(U+10030B, "๔€Œ‹", f4808c8b),
-_c(U+10030C, "๔€ŒŒ", f4808c8c),
-_c(U+10030D, "๔€Œ", f4808c8d),
-_c(U+10030E, "๔€ŒŽ", f4808c8e),
-_c(U+10030F, "๔€Œ", f4808c8f),
-_c(U+100310, "๔€Œ", f4808c90),
-_c(U+100311, "๔€Œ‘", f4808c91),
-_c(U+100312, "๔€Œ’", f4808c92),
-_c(U+100313, "๔€Œ“", f4808c93),
-_c(U+100314, "๔€Œ”", f4808c94),
-_c(U+100315, "๔€Œ•", f4808c95),
-_c(U+100316, "๔€Œ–", f4808c96),
-_c(U+100317, "๔€Œ—", f4808c97),
-_c(U+100318, "๔€Œ˜", f4808c98),
-_c(U+100319, "๔€Œ™", f4808c99),
-_c(U+10031A, "๔€Œš", f4808c9a),
-_c(U+10031B, "๔€Œ›", f4808c9b),
-_c(U+10031C, "๔€Œœ", f4808c9c),
-_c(U+10031D, "๔€Œ", f4808c9d),
-_c(U+10031E, "๔€Œž", f4808c9e),
-_c(U+10031F, "๔€ŒŸ", f4808c9f),
-_c(U+100320, "๔€Œ ", f4808ca0),
-_c(U+100321, "๔€Œก", f4808ca1),
-_c(U+100322, "๔€Œข", f4808ca2),
-_c(U+100323, "๔€Œฃ", f4808ca3),
-_c(U+100324, "๔€Œค", f4808ca4),
-_c(U+100325, "๔€Œฅ", f4808ca5),
-_c(U+100326, "๔€Œฆ", f4808ca6),
-_c(U+100327, "๔€Œง", f4808ca7),
-_c(U+100328, "๔€Œจ", f4808ca8),
-_c(U+100329, "๔€Œฉ", f4808ca9),
-_c(U+10032A, "๔€Œช", f4808caa),
-_c(U+10032B, "๔€Œซ", f4808cab),
-_c(U+10032C, "๔€Œฌ", f4808cac),
-_c(U+10032D, "๔€Œญ", f4808cad),
-_c(U+10032E, "๔€Œฎ", f4808cae),
-_c(U+10032F, "๔€Œฏ", f4808caf),
-_c(U+100330, "๔€Œฐ", f4808cb0),
-_c(U+100331, "๔€Œฑ", f4808cb1),
-_c(U+100332, "๔€Œฒ", f4808cb2),
-_c(U+100333, "๔€Œณ", f4808cb3),
-_c(U+100334, "๔€Œด", f4808cb4),
-_c(U+100335, "๔€Œต", f4808cb5),
-_c(U+100336, "๔€Œถ", f4808cb6),
-_c(U+100337, "๔€Œท", f4808cb7),
-_c(U+100338, "๔€Œธ", f4808cb8),
-_c(U+100339, "๔€Œน", f4808cb9),
-_c(U+10033A, "๔€Œบ", f4808cba),
-_c(U+10033B, "๔€Œป", f4808cbb),
-_c(U+10033C, "๔€Œผ", f4808cbc),
-_c(U+10033D, "๔€Œฝ", f4808cbd),
-_c(U+10033E, "๔€Œพ", f4808cbe),
-_c(U+10033F, "๔€Œฟ", f4808cbf),
-_c(U+100340, "๔€€", f4808d80),
-_c(U+100341, "๔€", f4808d81),
-_c(U+100342, "๔€‚", f4808d82),
-_c(U+100343, "๔€ƒ", f4808d83),
-_c(U+100344, "๔€„", f4808d84),
-_c(U+100345, "๔€…", f4808d85),
-_c(U+100346, "๔€†", f4808d86),
-_c(U+100347, "๔€‡", f4808d87),
-_c(U+100348, "๔€ˆ", f4808d88),
-_c(U+100349, "๔€‰", f4808d89),
-_c(U+10034A, "๔€Š", f4808d8a),
-_c(U+10034B, "๔€‹", f4808d8b),
-_c(U+10034C, "๔€Œ", f4808d8c),
-_c(U+10034D, "๔€", f4808d8d),
-_c(U+10034E, "๔€Ž", f4808d8e),
-_c(U+10034F, "๔€", f4808d8f),
-_c(U+100350, "๔€", f4808d90),
-_c(U+100351, "๔€‘", f4808d91),
-_c(U+100352, "๔€’", f4808d92),
-_c(U+100353, "๔€“", f4808d93),
-_c(U+100354, "๔€”", f4808d94),
-_c(U+100355, "๔€•", f4808d95),
-_c(U+100356, "๔€–", f4808d96),
-_c(U+100357, "๔€—", f4808d97),
-_c(U+100358, "๔€˜", f4808d98),
-_c(U+100359, "๔€™", f4808d99),
-_c(U+10035A, "๔€š", f4808d9a),
-_c(U+10035B, "๔€›", f4808d9b),
-_c(U+10035C, "๔€œ", f4808d9c),
-_c(U+10035D, "๔€", f4808d9d),
-_c(U+10035E, "๔€ž", f4808d9e),
-_c(U+10035F, "๔€Ÿ", f4808d9f),
-_c(U+100360, "๔€ ", f4808da0),
-_c(U+100361, "๔€ก", f4808da1),
-_c(U+100362, "๔€ข", f4808da2),
-_c(U+100363, "๔€ฃ", f4808da3),
-_c(U+100364, "๔€ค", f4808da4),
-_c(U+100365, "๔€ฅ", f4808da5),
-_c(U+100366, "๔€ฆ", f4808da6),
-_c(U+100367, "๔€ง", f4808da7),
-_c(U+100368, "๔€จ", f4808da8),
-_c(U+100369, "๔€ฉ", f4808da9),
-_c(U+10036A, "๔€ช", f4808daa),
-_c(U+10036B, "๔€ซ", f4808dab),
-_c(U+10036C, "๔€ฌ", f4808dac),
-_c(U+10036D, "๔€ญ", f4808dad),
-_c(U+10036E, "๔€ฎ", f4808dae),
-_c(U+10036F, "๔€ฏ", f4808daf),
-_c(U+100370, "๔€ฐ", f4808db0),
-_c(U+100371, "๔€ฑ", f4808db1),
-_c(U+100372, "๔€ฒ", f4808db2),
-_c(U+100373, "๔€ณ", f4808db3),
-_c(U+100374, "๔€ด", f4808db4),
-_c(U+100375, "๔€ต", f4808db5),
-_c(U+100376, "๔€ถ", f4808db6),
-_c(U+100377, "๔€ท", f4808db7),
-_c(U+100378, "๔€ธ", f4808db8),
-_c(U+100379, "๔€น", f4808db9),
-_c(U+10037A, "๔€บ", f4808dba),
-_c(U+10037B, "๔€ป", f4808dbb),
-_c(U+10037C, "๔€ผ", f4808dbc),
-_c(U+10037D, "๔€ฝ", f4808dbd),
-_c(U+10037E, "๔€พ", f4808dbe),
-_c(U+10037F, "๔€ฟ", f4808dbf),
-_c(U+100380, "๔€Ž€", f4808e80),
-_c(U+100381, "๔€Ž", f4808e81),
-_c(U+100382, "๔€Ž‚", f4808e82),
-_c(U+100383, "๔€Žƒ", f4808e83),
-_c(U+100384, "๔€Ž„", f4808e84),
-_c(U+100385, "๔€Ž…", f4808e85),
-_c(U+100386, "๔€Ž†", f4808e86),
-_c(U+100387, "๔€Ž‡", f4808e87),
-_c(U+100388, "๔€Žˆ", f4808e88),
-_c(U+100389, "๔€Ž‰", f4808e89),
-_c(U+10038A, "๔€ŽŠ", f4808e8a),
-_c(U+10038B, "๔€Ž‹", f4808e8b),
-_c(U+10038C, "๔€ŽŒ", f4808e8c),
-_c(U+10038D, "๔€Ž", f4808e8d),
-_c(U+10038E, "๔€ŽŽ", f4808e8e),
-_c(U+10038F, "๔€Ž", f4808e8f),
-_c(U+100390, "๔€Ž", f4808e90),
-_c(U+100391, "๔€Ž‘", f4808e91),
-_c(U+100392, "๔€Ž’", f4808e92),
-_c(U+100393, "๔€Ž“", f4808e93),
-_c(U+100394, "๔€Ž”", f4808e94),
-_c(U+100395, "๔€Ž•", f4808e95),
-_c(U+100396, "๔€Ž–", f4808e96),
-_c(U+100397, "๔€Ž—", f4808e97),
-_c(U+100398, "๔€Ž˜", f4808e98),
-_c(U+100399, "๔€Ž™", f4808e99),
-_c(U+10039A, "๔€Žš", f4808e9a),
-_c(U+10039B, "๔€Ž›", f4808e9b),
-_c(U+10039C, "๔€Žœ", f4808e9c),
-_c(U+10039D, "๔€Ž", f4808e9d),
-_c(U+10039E, "๔€Žž", f4808e9e),
-_c(U+10039F, "๔€ŽŸ", f4808e9f),
-_c(U+1003A0, "๔€Ž ", f4808ea0),
-_c(U+1003A1, "๔€Žก", f4808ea1),
-_c(U+1003A2, "๔€Žข", f4808ea2),
-_c(U+1003A3, "๔€Žฃ", f4808ea3),
-_c(U+1003A4, "๔€Žค", f4808ea4),
-_c(U+1003A5, "๔€Žฅ", f4808ea5),
-_c(U+1003A6, "๔€Žฆ", f4808ea6),
-_c(U+1003A7, "๔€Žง", f4808ea7),
-_c(U+1003A8, "๔€Žจ", f4808ea8),
-_c(U+1003A9, "๔€Žฉ", f4808ea9),
-_c(U+1003AA, "๔€Žช", f4808eaa),
-_c(U+1003AB, "๔€Žซ", f4808eab),
-_c(U+1003AC, "๔€Žฌ", f4808eac),
-_c(U+1003AD, "๔€Žญ", f4808ead),
-_c(U+1003AE, "๔€Žฎ", f4808eae),
-_c(U+1003AF, "๔€Žฏ", f4808eaf),
-_c(U+1003B0, "๔€Žฐ", f4808eb0),
-_c(U+1003B1, "๔€Žฑ", f4808eb1),
-_c(U+1003B2, "๔€Žฒ", f4808eb2),
-_c(U+1003B3, "๔€Žณ", f4808eb3),
-_c(U+1003B4, "๔€Žด", f4808eb4),
-_c(U+1003B5, "๔€Žต", f4808eb5),
-_c(U+1003B6, "๔€Žถ", f4808eb6),
-_c(U+1003B7, "๔€Žท", f4808eb7),
-_c(U+1003B8, "๔€Žธ", f4808eb8),
-_c(U+1003B9, "๔€Žน", f4808eb9),
-_c(U+1003BA, "๔€Žบ", f4808eba),
-_c(U+1003BB, "๔€Žป", f4808ebb),
-_c(U+1003BC, "๔€Žผ", f4808ebc),
-_c(U+1003BD, "๔€Žฝ", f4808ebd),
-_c(U+1003BE, "๔€Žพ", f4808ebe),
-_c(U+1003BF, "๔€Žฟ", f4808ebf),
-_c(U+1003C0, "๔€€", f4808f80),
-_c(U+1003C1, "๔€", f4808f81),
-_c(U+1003C2, "๔€‚", f4808f82),
-_c(U+1003C3, "๔€ƒ", f4808f83),
-_c(U+1003C4, "๔€„", f4808f84),
-_c(U+1003C5, "๔€…", f4808f85),
-_c(U+1003C6, "๔€†", f4808f86),
-_c(U+1003C7, "๔€‡", f4808f87),
-_c(U+1003C8, "๔€ˆ", f4808f88),
-_c(U+1003C9, "๔€‰", f4808f89),
-_c(U+1003CA, "๔€Š", f4808f8a),
-_c(U+1003CB, "๔€‹", f4808f8b),
-_c(U+1003CC, "๔€Œ", f4808f8c),
-_c(U+1003CD, "๔€", f4808f8d),
-_c(U+1003CE, "๔€Ž", f4808f8e),
-_c(U+1003CF, "๔€", f4808f8f),
-_c(U+1003D0, "๔€", f4808f90),
-_c(U+1003D1, "๔€‘", f4808f91),
-_c(U+1003D2, "๔€’", f4808f92),
-_c(U+1003D3, "๔€“", f4808f93),
-_c(U+1003D4, "๔€”", f4808f94),
-_c(U+1003D5, "๔€•", f4808f95),
-_c(U+1003D6, "๔€–", f4808f96),
-_c(U+1003D7, "๔€—", f4808f97),
-_c(U+1003D8, "๔€˜", f4808f98),
-_c(U+1003D9, "๔€™", f4808f99),
-_c(U+1003DA, "๔€š", f4808f9a),
-_c(U+1003DB, "๔€›", f4808f9b),
-_c(U+1003DC, "๔€œ", f4808f9c),
-_c(U+1003DD, "๔€", f4808f9d),
-_c(U+1003DE, "๔€ž", f4808f9e),
-_c(U+1003DF, "๔€Ÿ", f4808f9f),
-_c(U+1003E0, "๔€ ", f4808fa0),
-_c(U+1003E1, "๔€ก", f4808fa1),
-_c(U+1003E2, "๔€ข", f4808fa2),
-_c(U+1003E3, "๔€ฃ", f4808fa3),
-_c(U+1003E4, "๔€ค", f4808fa4),
-_c(U+1003E5, "๔€ฅ", f4808fa5),
-_c(U+1003E6, "๔€ฆ", f4808fa6),
-_c(U+1003E7, "๔€ง", f4808fa7),
-_c(U+1003E8, "๔€จ", f4808fa8),
-_c(U+1003E9, "๔€ฉ", f4808fa9),
-_c(U+1003EA, "๔€ช", f4808faa),
-_c(U+1003EB, "๔€ซ", f4808fab),
-_c(U+1003EC, "๔€ฌ", f4808fac),
-_c(U+1003ED, "๔€ญ", f4808fad),
-_c(U+1003EE, "๔€ฎ", f4808fae),
-_c(U+1003EF, "๔€ฏ", f4808faf),
-_c(U+1003F0, "๔€ฐ", f4808fb0),
-_c(U+1003F1, "๔€ฑ", f4808fb1),
-_c(U+1003F2, "๔€ฒ", f4808fb2),
-_c(U+1003F3, "๔€ณ", f4808fb3),
-_c(U+1003F4, "๔€ด", f4808fb4),
-_c(U+1003F5, "๔€ต", f4808fb5),
-_c(U+1003F6, "๔€ถ", f4808fb6),
-_c(U+1003F7, "๔€ท", f4808fb7),
-_c(U+1003F8, "๔€ธ", f4808fb8),
-_c(U+1003F9, "๔€น", f4808fb9),
-_c(U+1003FA, "๔€บ", f4808fba),
-_c(U+1003FB, "๔€ป", f4808fbb),
-_c(U+1003FC, "๔€ผ", f4808fbc),
-_c(U+1003FD, "๔€ฝ", f4808fbd),
-_c(U+1003FE, "๔€พ", f4808fbe),
-_c(U+1003FF, "๔€ฟ", f4808fbf),
-#undef _c