summaryrefslogtreecommitdiff
path: root/dux-demo/main.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dux-demo/main.cc')
-rw-r--r--dux-demo/main.cc229
1 files changed, 0 insertions, 229 deletions
diff --git a/dux-demo/main.cc b/dux-demo/main.cc
deleted file mode 100644
index 5c22ec2..0000000
--- a/dux-demo/main.cc
+++ /dev/null
@@ -1,229 +0,0 @@
-# include <dux/arr>
-# include <dux/io>
-# include <dux/math>
-# include <dux/media>
-# include <dux/mem>
-# include <dux/seq>
-# include <dux/sig>
-# include <dux/str>
-# include <dux/thrd>
-# include <dux/time>
-
-# include <signal.h>
-
-static_assert(sizeof (::dux::uwrd) >= sizeof (void *),"::dux::uwrd must be capable of holding a pointer value");
-
-static_assert(::dux::abs(0x10) == 0x10);
-static_assert(::dux::abs(-0x10) == 0x10);
-
-static_assert(::dux::fac(0x1) == 0x1);
-static_assert(::dux::fac(0x2) == 0x2);
-static_assert(::dux::fac(0x3) == 0x6);
-static_assert(::dux::fac(0x4) == 0x18);
-
-static_assert(::dux::msb(0b1) == 0b1);
-static_assert(::dux::msb(0b10) == 0b10);
-static_assert(::dux::msb(0b101) == 0b100);
-static_assert(::dux::msb(0b1010) == 0b1000);
-static_assert(::dux::msb(0b10101) == 0b10000);
-static_assert(::dux::msb(0b101010) == 0b100000);
-
-namespace dux::local {
- static auto gotsig {false};
-}
-
-static_assert([] {
- auto chk {[] (::dux::sig const _sig0,int const _sig1) {
- return static_cast<int>(_sig0) == _sig1;
- }};
- static_assert(chk(::dux::sig::abrt, SIGABRT));
- static_assert(chk(::dux::sig::alrm, SIGALRM));
- static_assert(chk(::dux::sig::bus, SIGBUS));
- static_assert(chk(::dux::sig::chld, SIGCHLD));
- static_assert(chk(::dux::sig::cont, SIGCONT));
- static_assert(chk(::dux::sig::fpe, SIGFPE));
- static_assert(chk(::dux::sig::hup, SIGHUP));
- static_assert(chk(::dux::sig::ill, SIGILL));
- static_assert(chk(::dux::sig::io, SIGIO));
- static_assert(chk(::dux::sig::intr, SIGINT));
- static_assert(chk(::dux::sig::kill, SIGKILL));
- static_assert(chk(::dux::sig::pipe, SIGPIPE));
- static_assert(chk(::dux::sig::prof, SIGPROF));
- static_assert(chk(::dux::sig::quit, SIGQUIT));
- static_assert(chk(::dux::sig::segv, SIGSEGV));
- static_assert(chk(::dux::sig::stop, SIGSTOP));
- static_assert(chk(::dux::sig::sys, SIGSYS));
- static_assert(chk(::dux::sig::term, SIGTERM));
- static_assert(chk(::dux::sig::trap, SIGTRAP));
- static_assert(chk(::dux::sig::tstp, SIGTSTP));
- static_assert(chk(::dux::sig::ttin, SIGTTIN));
- static_assert(chk(::dux::sig::ttou, SIGTTOU));
- static_assert(chk(::dux::sig::urg, SIGURG));
- static_assert(chk(::dux::sig::usr1, SIGUSR1));
- static_assert(chk(::dux::sig::usr2, SIGUSR2));
- static_assert(chk(::dux::sig::vtalrm,SIGVTALRM));
- static_assert(chk(::dux::sig::winch, SIGWINCH));
- static_assert(chk(::dux::sig::xcpu, SIGXCPU));
- static_assert(chk(::dux::sig::xfsz, SIGXFSZ));
-# if defined(SIGPOLL)
- static_assert(chk(::dux::sig::poll, SIGPOLL));
-# endif
-# if defined(SIGPWR)
- static_assert(chk(::dux::sig::pwr, SIGPWR));
-# endif
- return true;
-}());
-
-extern "C" auto ctest(void const * params) -> void;
-
-extern "C" auto dux_main(::dux::mainparams const * const restrict _params) -> ::dux::stat {
- if (_params->num() == dux_uwrdl(0x0)) {::dux::dbglog("dux.demo :: No parameters!\n");}
- else {for (auto n {dux_uwrdl(0x0)};n < _params->num();++n) {::dux::dbglog("dux.demo :: Parameter #%zu: %s\n",n + dux_uwrdl(0x1),_params->param(n).ptr);}}
- {
- constexpr auto estim {dux_uint64l(0x100)};
- ::dux::dbglog("dux.demo :: Trying to roll two identical 8-bit numbers in a row. Estimated number of tries: " dux_printfuint64 ".\n",estim);
- auto num0 {::dux::rnd<::dux::uint8>()};
- auto num1 {::dux::rnd<::dux::uint8>()};
- for (auto n = dux_uint64l(0x1);;++n) {
- if (num0 == num1) [[unlikely]] {
- ::dux::dbglog("dux.demo :: Done! Took " dux_printfuint64 " attempts (estimated: " dux_printfuint64 ") to roll the same 8-bit number (" dux_printfuint8 ") two times in a row.\n",n,estim,num0);
- ::dux::dbglog("dux.demo :: Odds: %f%%",((double)n / (double)estim) * (double)100.0);
- if (n == dux_uint64l(0x45)) {::dux::dbglog(" - Nice!");} /* 69 */
- else if (n == dux_uint64l(0x1)) {::dux::dbglog(" - bruh");}
- ::dux::dbglog("\n");
- goto test;
- }
- num0 = ::dux::rnd<::dux::uint8>();
- num1 = ::dux::rnd<::dux::uint8>();
- }
- }
-test:;
- auto const time = ::dux::gettime();
- ::dux::dbglog("dux.demo :: Current time: " dux_printfsint64 "\n",time);
- dux_ass("",time >= dux_sint64l(0x5C10DFA4));
- {
- ::dux::reseterr();
- auto const ptr {::dux::alloc<char>()};
- dux_ass("Memory allocation failed!",!::dux::haserr());
- ::dux::free(ptr);
- }
- {
- constexpr auto val {dux_uint8l(0xC4)};
- dux_ass("",::dux::getbit(val,0x0) == false);
- dux_ass("",::dux::getbit(val,0x1) == false);
- dux_ass("",::dux::getbit(val,0x2) == true);
- dux_ass("",::dux::getbit(val,0x3) == false);
- dux_ass("",::dux::getbit(val,0x4) == false);
- dux_ass("",::dux::getbit(val,0x5) == false);
- dux_ass("",::dux::getbit(val,0x6) == true);
- dux_ass("",::dux::getbit(val,0x7) == true);
- }
- {
- constexpr auto arrsz {dux_uwrdl(0x5)};
- constexpr ::dux::uint16 arr0[] {
- dux_uint16l(0xF),
- dux_uint16l(0x1F),
- dux_uint16l(0x3F),
- dux_uint16l(0x7F),
- dux_uint16l(0xFF),
- };
- auto const arr1 {::dux::alloc<::dux::uint16>(arrsz)};
- ::dux::cpy(arr0,arrsz,arr1);
- dux_ass("",arr1[dux_uwrdl(0x0)] == dux_uint16l(0xF));
- dux_ass("",arr1[dux_uwrdl(0x1)] == dux_uint16l(0x1F));
- dux_ass("",arr1[dux_uwrdl(0x2)] == dux_uint16l(0x3F));
- dux_ass("",arr1[dux_uwrdl(0x3)] == dux_uint16l(0x7F));
- dux_ass("",arr1[dux_uwrdl(0x4)] == dux_uint16l(0xFF));
- ::dux::free(arr1);
- }
- /*{
- auto * restrict ptr = ::dux::alloc<::dux::uint16>(dux_uwrdl(0x1));
- *ptr = dux_uint16l(0x10);
- dux_ass("",*ptr == dux_uint16l(0x10));
- ptr = ::dux::realloc(ptr,dux_uwrdl(0x2));
- ptr[dux_uwrdl(0x1)] = dux_uint16l(0x20);
- dux_ass("",ptr[dux_uwrdl(0x0)] == dux_uint16l(0x10));
- dux_ass("",ptr[dux_uwrdl(0x1)] == dux_uint16l(0x20));
- ::dux::free(ptr);
- }*/ /* Does not work as realloc currently does not support reallocating aligned allocations. */
- {
- constexpr auto arrsz {dux_uwrdl(0x2)};
- ::dux::uint64 arr[arrsz];
- ::dux::bytefill(arr,arrsz,dux_uint8l(0xFF));
- dux_ass("",arr[dux_uwrdl(0x0)] >= dux_uint64l(0xFFFFFFFFFFFFFFFF));
- ::dux::bytefill(arr,arrsz,dux_uint8l(0x7F));
- dux_ass("",arr[dux_uwrdl(0x1)] >= dux_uint64l(0x7F7F7F7F7F7F7F7F));
- }
- {
- ::dux::seterr(::dux::errcd::test);
- dux_ass("Error setter didn't work!",::dux::geterr() >::dux::errcd::noerr);
- ::dux::reseterr();
- }
- {
- auto x = 0x45;
- auto y = 0x1A4;
- ::dux::swp(x,y);
- dux_ass("",x == 0x1A4);
- dux_ass("",y == 0x45);
- }
- {
- ::dux::setsighandl(::dux::sig::intr,[](::dux::sig const _sig) {
- dux_ass("",_sig == ::dux::sig::intr);
- ::dux::local::gotsig = true;
- return false;
- });
- ::dux::raise(::dux::sig::intr);
- dux_ass("",::dux::local::gotsig);
- ::dux::setsighandl(::dux::sig::intr,::dux::sighandl::dfl());
- }
- {
- auto handl {[](::dux::sig) {return false;}};
- ::dux::setsighandl(::dux::sig::abrt,handl);
- auto goterr {false};
- if (::dux::haserr()) [[unlikely]] {
- goterr = true;
- ::dux::reseterr();
- }
- dux_ass("",goterr);
- }
- {
- auto const start {::dux::gettime()};
- ::dux::sleep(dux_uint64l(0x2));
- auto const stop {::dux::gettime()};
- dux_ass("",stop - start == dux_uint64l(0x2));
- }
- {
- constexpr auto arrsz {dux_uwrdl(0x8)};
- bool arr[arrsz];
- ::dux::plot(arr,arrsz,[](::dux::uwrd const _n) {return ::dux::isprime(_n);});
- dux_ass("",arr[dux_uwrdl(0x0)] == false);
- dux_ass("",arr[dux_uwrdl(0x1)] == false);
- dux_ass("",arr[dux_uwrdl(0x2)] == true);
- dux_ass("",arr[dux_uwrdl(0x3)] == true);
- dux_ass("",arr[dux_uwrdl(0x4)] == false);
- dux_ass("",arr[dux_uwrdl(0x5)] == true);
- dux_ass("",arr[dux_uwrdl(0x6)] == false);
- dux_ass("",arr[dux_uwrdl(0x7)] == true);
- }
- {
- dux_ass("",::dux::memeq("ABC",dux_uwrdl(0x3),"ABC"));
- auto file {::dux::crtfile("dux-io-demo")};
- file.write("Hello there!");
- file.open("dux-io-demo",::dux::iotyp::r);
- auto const dat {file.read(dux_uwrdl(0xC))};
- dux_ass("",dat.sz() == dux_uwrdl(0xC));
- dux_ass("",::dux::memeq(dat.craw(),dat.sz(),"Hello there!"));
- file.close();
- }
- if (::dux::haserr()) [[unlikely]] {
- ::dux::dbglog("dux.\x1B[91mdemo\x1B[0m :: Got error %S!\n",::dux::errcdnm(::dux::geterr()));
- ::dux::exit(::dux::stat::err);
- }
- ::ctest(_params);
- ::dux::onexit([](::dux::stat) {
- ::dux::onexit([](::dux::stat) {});
- dux_ass("",::dux::haserr());
- ::dux::dbglog("dux.demo :: All tests passed!\n");
- });
- ::dux::exit(::dux::stat::ok);
-}