summaryrefslogtreecommitdiff
path: root/rttest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'rttest.cc')
-rw-r--r--rttest.cc200
1 files changed, 200 insertions, 0 deletions
diff --git a/rttest.cc b/rttest.cc
new file mode 100644
index 0000000..6cc3b2a
--- /dev/null
+++ b/rttest.cc
@@ -0,0 +1,200 @@
+#include <cstdlib>
+#include <exception>
+#include <fmt/core.h>
+#include <source_location>
+#include <typeinfo>
+#include <zp/mem>
+#include <zp/mth>
+#include <zp/str>
+
+int main() {
+ int unsigned num;
+ int unsigned numerr;
+
+ auto const tst = [&num](char const * const cmp) noexcept {
+ ::fmt::print("\n\x1B[38;5;75mtesting\x1B[0m {}\n\n",cmp);
+
+ num = 0x0;
+ };
+
+ auto const cmp = [&num,&numerr]<typename ltyp,typename rtyp>(ltyp const & lvalref,rtyp const & rvalref,::std::source_location const srcloc = ::std::source_location::current()) {
+ char const * const ltypnm = typeid (ltyp).name();
+ char const * const rtypnm = typeid (rtyp).name();
+
+ auto const getval = []<typename typ>(typ const & valref) {
+ if constexpr (::zp::ischr<typ>) {return static_cast<::zp::i02m>(valref);}
+ else {return valref;}
+ };
+
+ auto const lval = getval(lvalref);
+ auto const rval = getval(rvalref);
+
+ ::fmt::print(" {}. comparing {} ({}) vs. {} ({})... ",num++,ltypnm,lval,rtypnm,rval);
+
+ if (lval != rval) {
+ ::fmt::print("\x1B[38;5;161munequal\x1B[0m (at #{})\n",srcloc.line());
+ //throw ::std::exception {};
+ ++numerr;
+ }
+
+ ::fmt::print("\x1B[38;5;77mequal\x1B[0m\n");
+ };
+
+ ::fmt::print("zp test\n\nAPI version: {}\nEXT version: {}\n",::zp::ver,::zp::extver);
+
+ try {
+ [&] {
+ tst("vectors");
+
+ ::zp::vec2<int> const lvec2 = {
+ .x = +0x1,
+ .y = -0x3,
+ };
+ ::zp::vec2<int> const rvec2 = {
+ .x = +0x2,
+ .y = -0x4,
+ };
+ cmp(::zp::dot(lvec2,rvec2),0xE);
+
+ ::zp::vec3<int> const lvec3 = {
+ .x = +0x1,
+ .y = -0x3,
+ .z = +0x5,
+ };
+ ::zp::vec3<int> const rvec3 = {
+ .x = +0x2,
+ .y = -0x4,
+ .z = +0x6,
+ };
+ cmp(::zp::dot(lvec3,rvec3),0x2C);
+
+ ::zp::vec4<int> const lvec4 = {
+ .x = +0x1,
+ .y = -0x3,
+ .z = +0x5,
+ .w = -0x7,
+ };
+ ::zp::vec4<int> const rvec4 = {
+ .x = +0x2,
+ .y = -0x4,
+ .z = +0x6,
+ .w = -0x8,
+ };
+ cmp(::zp::dot(lvec4,rvec4),0x64);
+
+ auto const avec2 = ::zp::vadd(lvec2,rvec2);
+ auto const svec2 = ::zp::vsub(lvec2,rvec2);
+ cmp(avec2.x,+0x3);
+ cmp(avec2.y,-0x7);
+ cmp(svec2.x,-0x1);
+ cmp(svec2.y,+0x1);
+ }();
+
+ [&] {
+ tst("special numbers");
+
+ cmp(::zp::isnan(::zp::nan<float>), true);
+ cmp(::zp::isnan(::zp::nan<double>), true);
+ cmp(::zp::isnan(::zp::nan<long double>),true);
+ }();
+
+ [&] {
+ tst("strings");
+
+ char str[] = "Hello there!";
+ wchar_t wstr[] = L"Hello there!";
+ char32_t str02[] = U"Hello there!";
+
+ ::zp::sz const len = ::zp::strlen(str);
+ ::zp::sz const wlen = ::zp::strlen(wstr);
+ ::zp::sz const len02 = ::zp::strlen(str02);
+
+ cmp(len, 0xCu);
+ cmp(wlen, 0xCu);
+ cmp(len02,0xCu);
+
+ auto const buf = new char[ len];
+ auto const wbuf = new wchar_t[ wlen];
+ auto const buf02 = new char32_t[len02];
+
+ cmp(::zp::strcpy(buf, str), len);
+ cmp(::zp::strcpy(wbuf, wstr), wlen);
+ cmp(::zp::strcpy(buf02,str02),len02);
+
+ delete[] buf;
+ delete[] wbuf;
+ delete[] buf02;
+ }();
+
+ [&] {
+ tst("UTF-8");
+
+ char32_t const src[] = U"\U0001F480";
+
+ ::zp::sz const buf8len = ::zp::utf8enclen(src);
+ cmp(buf8len,0x4u);
+
+ char8_t * buf8 = new char8_t[buf8len+0x1u];
+
+ ::zp::utf8enc(buf8,src);
+
+ cmp(buf8[0x0u],0xF0u);
+ cmp(buf8[0x1u],0x9Fu);
+ cmp(buf8[0x2u],0x92u);
+ cmp(buf8[0x3u],0x80u);
+ cmp(buf8[0x4u],0x00u);
+
+ ::zp::sz const buf02len = ::zp::utf8declen(buf8);
+ cmp(buf02len,0x1u);
+
+ char32_t * buf02 = new char32_t[buf02len+0x1u];
+
+ ::zp::utf8dec(buf02,buf8);
+
+ cmp(buf02[0x0u],0x1F480u);
+ cmp(buf02[0x1u],0x0u);
+
+ delete[] buf8;
+ delete[] buf02;
+ }();
+
+ [&] {
+ tst("UTF-16");
+
+ char32_t const src[] = U"\U0001F480\u00F0";
+
+ ::zp::sz const buf01len = ::zp::utf16enclen(src);
+ cmp(buf01len,0x3u);
+
+ char16_t * buf01 = new char16_t[buf01len+0x1u];
+
+ ::zp::utf16enc(buf01,src);
+
+ cmp(buf01[0x0u],0xD83Du);
+ cmp(buf01[0x1u],0xDC80u);
+ cmp(buf01[0x2u],0x00F0u);
+ cmp(buf01[0x3u],0x0000u);
+
+ ::zp::sz const buf02len = ::zp::utf16declen(buf01);
+ cmp(buf02len,0x2u);
+
+ char32_t * buf02 = new char32_t[buf02len+0x1u];
+
+ ::zp::utf16dec(buf02,buf01);
+
+ cmp(buf02[0x0u],0x1F480u);
+ cmp(buf02[0x1u],0xF0u);
+ cmp(buf02[0x2u],0x0u);
+
+ delete[] buf01;
+ delete[] buf02;
+ }();
+ }
+ catch (::std::exception const &) {
+ return EXIT_FAILURE;
+ }
+
+ ::fmt::print("\nDone - {} error(s)\n",numerr);
+
+ return EXIT_SUCCESS;
+}