summaryrefslogtreecommitdiff
path: root/test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test.cc')
-rw-r--r--test.cc164
1 files changed, 80 insertions, 84 deletions
diff --git a/test.cc b/test.cc
index fc2135e..9255f40 100644
--- a/test.cc
+++ b/test.cc
@@ -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");