diff options
Diffstat (limited to 'test.cc')
-rw-r--r-- | test.cc | 164 |
1 files changed, 80 insertions, 84 deletions
@@ -32,6 +32,12 @@ static_assert(::zp::isptr<int const * const volatile>::val == true); static_assert(::zp::isptr<int volatile * const volatile>::val == true); static_assert(::zp::isptr<int const volatile * const volatile>::val == true); +static_assert(::zp::isref<int>::val == false); +static_assert(::zp::isref<int &>::val == true); +static_assert(::zp::isref<int const&>::val == true); +static_assert(::zp::isref<int volatile&>::val == true); +static_assert(::zp::isref<int const volatile&>::val == true); + static_assert(::zp::typequ<int,int>::val == true); static_assert(::zp::typequ<int,int long>::val == false); @@ -57,10 +63,10 @@ static_assert(::zp::typequ<::zp::remptr<int * const>::typ, int>::val == static_assert(::zp::typequ<::zp::remptr<int * volatile>::typ, int>::val == true); static_assert(::zp::typequ<::zp::remptr<int * const volatile>::typ,int>::val == true); -static_assert(::zp::typequ<::zp::remqual<int>::typ, int>::val == true); -static_assert(::zp::typequ<::zp::remqual<int const>::typ, int>::val == true); -static_assert(::zp::typequ<::zp::remqual<int volatile>::typ, int>::val == true); -static_assert(::zp::typequ<::zp::remqual<int const volatile>::typ,int>::val == true); +static_assert(::zp::typequ<::zp::remcv<int>::typ, int>::val == true); +static_assert(::zp::typequ<::zp::remcv<int const>::typ, int>::val == true); +static_assert(::zp::typequ<::zp::remcv<int volatile>::typ, int>::val == true); +static_assert(::zp::typequ<::zp::remcv<int const volatile>::typ,int>::val == true); static_assert(::zp::typequ<::zp::sgn<int>::typ, int>::val == true); static_assert(::zp::typequ<::zp::sgn<int const>::typ, int const>::val == true); @@ -82,93 +88,69 @@ static_assert(::zp::typequ<::zp::usgn<int const volatile>::typ, int unsi static_assert(::zp::typequ<::zp::nulptrtyp,::std::nullptr_t>::val == true); -static_assert(::zp::isusgn<char>::val == ::std::is_unsigned<char>::value); -static_assert(::zp::isusgn<char16_t>::val == ::std::is_unsigned<char16_t>::value); -static_assert(::zp::isusgn<char32_t>::val == ::std::is_unsigned<char32_t>::value); -static_assert(::zp::isusgn<::zp::c8>::val == ::std::is_unsigned<::zp::c8>::value); -static_assert(::zp::isusgn<double>::val == ::std::is_unsigned<double>::value); -static_assert(::zp::isusgn<float>::val == ::std::is_unsigned<float>::value); -static_assert(::zp::isusgn<int>::val == ::std::is_unsigned<int>::value); -static_assert(::zp::isusgn<int long>::val == ::std::is_unsigned<int long>::value); -static_assert(::zp::isusgn<double long>::val == ::std::is_unsigned<double long>::value); -static_assert(::zp::isusgn<int long long>::val == ::std::is_unsigned<int long long>::value); -static_assert(::zp::isusgn<int short>::val == ::std::is_unsigned<int short>::value); -static_assert(::zp::isusgn<char signed>::val == ::std::is_unsigned<char signed>::value); -static_assert(::zp::isusgn<char unsigned>::val == ::std::is_unsigned<char unsigned>::value); -static_assert(::zp::isusgn<int unsigned>::val == ::std::is_unsigned<int unsigned>::value); -static_assert(::zp::isusgn<int long unsigned>::val == ::std::is_unsigned<int long unsigned>::value); -static_assert(::zp::isusgn<int long long unsigned>::val == ::std::is_unsigned<int long long unsigned>::value); -static_assert(::zp::isusgn<int short unsigned>::val == ::std::is_unsigned<int short unsigned>::value); -static_assert(::zp::isusgn<wchar_t>::val == ::std::is_unsigned<wchar_t>::value); - -static_assert(::zp::issgn<char>::val == ::std::is_signed<char>::value); -static_assert(::zp::issgn<double>::val == ::std::is_signed<double>::value); -static_assert(::zp::issgn<float>::val == ::std::is_signed<float>::value); -static_assert(::zp::issgn<int>::val == ::std::is_signed<int>::value); -static_assert(::zp::issgn<int long>::val == ::std::is_signed<int long>::value); -static_assert(::zp::issgn<double long>::val == ::std::is_signed<double long>::value); -static_assert(::zp::issgn<int long long>::val == ::std::is_signed<int long long>::value); -static_assert(::zp::issgn<int short>::val == ::std::is_signed<int short>::value); -static_assert(::zp::issgn<char signed>::val == ::std::is_signed<char signed>::value); -static_assert(::zp::issgn<char unsigned>::val == ::std::is_signed<char unsigned>::value); -static_assert(::zp::issgn<int unsigned>::val == ::std::is_signed<int unsigned>::value); -static_assert(::zp::issgn<int long unsigned>::val == ::std::is_signed<int long unsigned>::value); -static_assert(::zp::issgn<int long long unsigned>::val == ::std::is_signed<int long long unsigned>::value); -static_assert(::zp::issgn<int short unsigned>::val == ::std::is_signed<int short unsigned>::value); -static_assert(::zp::issgn<wchar_t>::val == ::std::is_signed<wchar_t>::value); - static_assert(::zp::bytelen == CHAR_BIT); -static_assert(::zp::minval<bool>::val == ::std::numeric_limits<bool>::lowest()); -static_assert(::zp::minval<char>::val == ::std::numeric_limits<char>::lowest()); -static_assert(::zp::minval<char16_t>::val == ::std::numeric_limits<char16_t>::lowest()); -static_assert(::zp::minval<char32_t>::val == ::std::numeric_limits<char32_t>::lowest()); -static_assert(::zp::minval<::zp::c8>::val == ::std::numeric_limits<::zp::c8>::lowest()); -static_assert(::zp::minval<double>::val == ::std::numeric_limits<double>::lowest()); -static_assert(::zp::minval<float>::val == ::std::numeric_limits<float>::lowest()); -static_assert(::zp::minval<int>::val == ::std::numeric_limits<int>::lowest()); -static_assert(::zp::minval<int long>::val == ::std::numeric_limits<int long>::lowest()); -static_assert(::zp::minval<double long>::val == ::std::numeric_limits<double long>::lowest()); -static_assert(::zp::minval<int long long>::val == ::std::numeric_limits<int long long>::lowest()); -static_assert(::zp::minval<int short>::val == ::std::numeric_limits<int short>::lowest()); -static_assert(::zp::minval<char signed>::val == ::std::numeric_limits<char signed>::lowest()); -static_assert(::zp::minval<char unsigned>::val == ::std::numeric_limits<char unsigned>::lowest()); -static_assert(::zp::minval<int short unsigned>::val == ::std::numeric_limits<int short unsigned>::lowest()); -static_assert(::zp::minval<int unsigned>::val == ::std::numeric_limits<int unsigned>::lowest()); -static_assert(::zp::minval<int long unsigned>::val == ::std::numeric_limits<int long unsigned>::lowest()); -static_assert(::zp::minval<int long long unsigned>::val == ::std::numeric_limits<int long long unsigned>::lowest()); -static_assert(::zp::minval<wchar_t>::val == ::std::numeric_limits<wchar_t>::lowest()); - -static_assert(::zp::maxval<bool>::val == ::std::numeric_limits<bool>::max()); -static_assert(::zp::maxval<char>::val == ::std::numeric_limits<char>::max()); -static_assert(::zp::maxval<char16_t>::val == ::std::numeric_limits<char16_t>::max()); -static_assert(::zp::maxval<char32_t>::val == ::std::numeric_limits<char32_t>::max()); -static_assert(::zp::maxval<::zp::c8>::val == ::std::numeric_limits<::zp::c8>::max()); -static_assert(::zp::maxval<double>::val == ::std::numeric_limits<double>::max()); -static_assert(::zp::maxval<float>::val == ::std::numeric_limits<float>::max()); -static_assert(::zp::maxval<int>::val == ::std::numeric_limits<int>::max()); -static_assert(::zp::maxval<int long>::val == ::std::numeric_limits<int long>::max()); -static_assert(::zp::maxval<double long>::val == ::std::numeric_limits<double long>::max()); -static_assert(::zp::maxval<int long long>::val == ::std::numeric_limits<int long long>::max()); -static_assert(::zp::maxval<int short>::val == ::std::numeric_limits<int short>::max()); -static_assert(::zp::maxval<char signed>::val == ::std::numeric_limits<char signed>::max()); -static_assert(::zp::maxval<char unsigned>::val == ::std::numeric_limits<char unsigned>::max()); -static_assert(::zp::maxval<int short unsigned>::val == ::std::numeric_limits<int short unsigned>::max()); -static_assert(::zp::maxval<int unsigned>::val == ::std::numeric_limits<int unsigned>::max()); -static_assert(::zp::maxval<int long unsigned>::val == ::std::numeric_limits<int long unsigned>::max()); -static_assert(::zp::maxval<int long long unsigned>::val == ::std::numeric_limits<int long long unsigned>::max()); -static_assert(::zp::maxval<wchar_t>::val == ::std::numeric_limits<wchar_t>::max()); +template<typename typtyp> constexpr static auto chktyp() noexcept -> bool { + using ::zp::inf; + using ::zp::nan; + using ::zp::nulptr; + using ::zp::typequ; + + using typ = ::zp::typ<typtyp>; + using numlim = ::std::numeric_limits<typtyp>; + + if constexpr (!typequ<typename ::zp::remcv<typtyp>::typ,bool>::val && !typ::ischr) {static_assert(typ::isint == ::std::is_integral_v<typtyp>);} + + static_assert(typ::isflt == ::std::is_floating_point_v<typtyp>); + + static_assert(nulptr<typtyp>() == nullptr); + + static_assert(typ::hassgn == numlim::is_signed); + + static_assert(typ::min == numlim::lowest()); + static_assert(typ::max == numlim::max()); + + if constexpr (typ::isflt) { + static_assert(inf<typtyp>::val == numlim::infinity()); + } + + return true; +} + +template<typename typ> constexpr static auto chktypcv() noexcept -> bool { + return ::chktyp<typ>() && ::chktyp<typ const>() && ::chktyp<typ volatile>() && ::chktyp<typ const volatile>(); +} + +static_assert(::chktypcv<bool>() == true); +static_assert(::chktypcv<char>() == true); +static_assert(::chktypcv<char signed>() == true); +static_assert(::chktypcv<char unsigned>() == true); +static_assert(::chktypcv<char16_t>() == true); +static_assert(::chktypcv<char32_t>() == true); +static_assert(::chktypcv<::zp::c8>() == true); +static_assert(::chktypcv<double>() == true); +static_assert(::chktypcv<double long>() == true); +static_assert(::chktypcv<float>() == true); +static_assert(::chktypcv<int>() == true); +static_assert(::chktypcv<int long>() == true); +static_assert(::chktypcv<int long long>() == true); +static_assert(::chktypcv<int long long unsigned>() == true); +static_assert(::chktypcv<int long unsigned>() == true); +static_assert(::chktypcv<int short>() == true); +static_assert(::chktypcv<int short unsigned>() == true); +static_assert(::chktypcv<int unsigned>() == true); +static_assert(::chktypcv<wchar_t>() == true); template<typename ltyp,typename rtyp> static auto cmp(int unsigned & numerr,int long const ln,::zp::i8 const mth,ltyp const& lvalref,rtyp const& rvalref) noexcept { char const* const ltypnm = typeid (ltyp).name(); char const* const rtypnm = typeid (rtyp).name(); auto const getval = [](auto const& valref) { - using typ = typename ::zp::remqual<typename ::zp::remref<decltype (valref)>::typ>::typ; + using typ = typename ::zp::remcv<typename ::zp::remref<decltype (valref)>::typ>::typ; - if constexpr (::zp::ischrtyp<typ>::val) {return static_cast<::zp::i02>(valref);} - else if constexpr (::zp::isptr<typ>::val) {return reinterpret_cast<void *>(valref);} - else {return valref;} + if constexpr (::zp::typ<typ>::ischr) {return static_cast<::zp::i02>(valref);} + else if constexpr (::zp::isptr<typ>::val) {return reinterpret_cast<void *>(valref);} + else {return valref;} }; auto const lval = getval(lvalref); @@ -334,8 +316,8 @@ int main() { f02 = ::zp::inf<::zp::f02>::val; f04 = ::zp::inf<::zp::f04>::val; - chkeq(f02 > ::zp::maxval<::zp::f02>::val,true); - chkeq(f04 > ::zp::maxval<::zp::f04>::val,true); + chkgt(f02,::zp::typ<::zp::f02>::max); + chkgt(f04,::zp::typ<::zp::f04>::max); }(); [&] { @@ -501,6 +483,20 @@ int main() { delete[] buf02; }(); +#if false + [&] { + tst("boxes"); + + ::zp::box<::zp::i8s,::std::allocator<::zp::i8s>> box0 = 0x4; + + chkeq(*box0,0x4); + + ::zp::box<::zp::i8s,::std::allocator<::zp::i8s>> const box1 = 0x0-box1; + + chkeq(*box1,-0x4); + }(); +#endif + [&] { tst("arrays"); |