Mercurial > foo_out_sdl
diff foosdk/sdk/pfc/selftest.cpp @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/foosdk/sdk/pfc/selftest.cpp Mon Jan 05 02:15:46 2026 -0500 @@ -0,0 +1,131 @@ +#include "pfc-lite.h" +#include "pfc.h" +#include "string-conv-lite.h" +#include "SmartStrStr.h" + +namespace { + class foo {}; +} + +inline pfc::string_base& operator<<(pfc::string_base& p_fmt, foo p_source) { (void)p_source; p_fmt.add_string_("FOO"); return p_fmt; } + +namespace { + using namespace pfc; + class thread_selftest : public thread { + public: + void threadProc() { + pfc::event ev; + ev.wait_for(1); + m_event.set_state(true); + ev.wait_for(1); + } + pfc::event m_event; + + void selftest() { + lores_timer timer; timer.start(); + this->start(arg_t()); + if (!m_event.wait_for(-1)) { + PFC_ASSERT(!"Should not get here"); + return; + } + PFC_ASSERT(fabs(timer.query() - 1.0) < 0.1); + this->waitTillDone(); + PFC_ASSERT(fabs(timer.query() - 2.0) < 0.1); + } + }; +} + +namespace pfc { + + static pfc::string8 testFormatter() { + return PFC_string_formatter() << "foo" << 1 << 2 << 3; + } + + + // Self test routines that need to be executed to do their payload + void selftest_runtime() { + + { + string test = "foo123"; + auto wide = pfc::wideFromUTF8(test); + auto narrow = pfc::utf8FromWide(wide); + PFC_ASSERT(test == narrow); + } + { + auto fmt = testFormatter(); + PFC_ASSERT(fmt == "foo123"); + } + { + auto fmt = pfc::format("foo", 1, 2, 3); + PFC_ASSERT(fmt == "foo123"); + } + + +#if 0 // misfires occassionally, don't run it each time + { + thread_selftest t; t.selftest(); + } +#endif + + { + stringLite s = "foo"; + PFC_ASSERT( (s + 2) == (s.c_str() + 2) ); + } + + { + stringLite s = "foo"; + s.insert_chars(2, "00"); + PFC_ASSERT( strcmp(s, "fo00o" ) == 0 ); + s.remove_chars(2, 2); + PFC_ASSERT( strcmp(s, "foo" ) == 0); + } + + { + pfc::map_t<pfc::string8, int> map; + map["1"] = 1; + map["2"] = 2; + map["3"] = 3; + PFC_ASSERT(map.get_count() == 3); + PFC_ASSERT(map["1"] == 1); + PFC_ASSERT(map["2"] == 2); + PFC_ASSERT(map["3"] == 3); + } + } + // Self test routines that fail at compile time if there's something seriously wrong + void selftest_static() { + PFC_STATIC_ASSERT(sizeof(t_uint8) == 1); + PFC_STATIC_ASSERT(sizeof(t_uint16) == 2); + PFC_STATIC_ASSERT(sizeof(t_uint32) == 4); + PFC_STATIC_ASSERT(sizeof(t_uint64) == 8); + + PFC_STATIC_ASSERT(sizeof(t_int8) == 1); + PFC_STATIC_ASSERT(sizeof(t_int16) == 2); + PFC_STATIC_ASSERT(sizeof(t_int32) == 4); + PFC_STATIC_ASSERT(sizeof(t_int64) == 8); + + PFC_STATIC_ASSERT(sizeof(t_float32) == 4); + PFC_STATIC_ASSERT(sizeof(t_float64) == 8); + + PFC_STATIC_ASSERT(sizeof(t_size) == sizeof(void*)); + PFC_STATIC_ASSERT(sizeof(t_ssize) == sizeof(void*)); + + PFC_STATIC_ASSERT(sizeof(wchar_t) == 2 || sizeof(wchar_t) == 4); + + PFC_STATIC_ASSERT(sizeof(GUID) == 16); + + typedef pfc::avltree_t<int> t_asdf; + t_asdf asdf; asdf.add_item(1); + t_asdf::iterator iter = asdf._first_var(); + t_asdf::const_iterator iter2 = asdf._first_var(); + + PFC_string_formatter() << "foo" << 1337 << foo(); + + pfc::list_t<int> l; l.add_item(3); + } + + void selftest() { + selftest_static(); selftest_runtime(); + + debugLog out; out << "PFC selftest OK"; + } +}
