annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "pfc-lite.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "pfc.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include "string-conv-lite.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include "SmartStrStr.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 namespace {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 class foo {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 inline pfc::string_base& operator<<(pfc::string_base& p_fmt, foo p_source) { (void)p_source; p_fmt.add_string_("FOO"); return p_fmt; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 namespace {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 using namespace pfc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 class thread_selftest : public thread {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 void threadProc() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 pfc::event ev;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 ev.wait_for(1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 m_event.set_state(true);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 ev.wait_for(1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 pfc::event m_event;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 void selftest() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 lores_timer timer; timer.start();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 this->start(arg_t());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 if (!m_event.wait_for(-1)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 PFC_ASSERT(!"Should not get here");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 PFC_ASSERT(fabs(timer.query() - 1.0) < 0.1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 this->waitTillDone();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 PFC_ASSERT(fabs(timer.query() - 2.0) < 0.1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 namespace pfc {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 static pfc::string8 testFormatter() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 return PFC_string_formatter() << "foo" << 1 << 2 << 3;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 // Self test routines that need to be executed to do their payload
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 void selftest_runtime() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 string test = "foo123";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 auto wide = pfc::wideFromUTF8(test);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 auto narrow = pfc::utf8FromWide(wide);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 PFC_ASSERT(test == narrow);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 auto fmt = testFormatter();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 PFC_ASSERT(fmt == "foo123");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 auto fmt = pfc::format("foo", 1, 2, 3);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 PFC_ASSERT(fmt == "foo123");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 #if 0 // misfires occassionally, don't run it each time
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 thread_selftest t; t.selftest();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 stringLite s = "foo";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 PFC_ASSERT( (s + 2) == (s.c_str() + 2) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 stringLite s = "foo";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 s.insert_chars(2, "00");
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 PFC_ASSERT( strcmp(s, "fo00o" ) == 0 );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 s.remove_chars(2, 2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 PFC_ASSERT( strcmp(s, "foo" ) == 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 pfc::map_t<pfc::string8, int> map;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 map["1"] = 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 map["2"] = 2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 map["3"] = 3;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 PFC_ASSERT(map.get_count() == 3);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 PFC_ASSERT(map["1"] == 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 PFC_ASSERT(map["2"] == 2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 PFC_ASSERT(map["3"] == 3);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 // Self test routines that fail at compile time if there's something seriously wrong
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 void selftest_static() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 PFC_STATIC_ASSERT(sizeof(t_uint8) == 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 PFC_STATIC_ASSERT(sizeof(t_uint16) == 2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 PFC_STATIC_ASSERT(sizeof(t_uint32) == 4);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 PFC_STATIC_ASSERT(sizeof(t_uint64) == 8);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 PFC_STATIC_ASSERT(sizeof(t_int8) == 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 PFC_STATIC_ASSERT(sizeof(t_int16) == 2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 PFC_STATIC_ASSERT(sizeof(t_int32) == 4);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 PFC_STATIC_ASSERT(sizeof(t_int64) == 8);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 PFC_STATIC_ASSERT(sizeof(t_float32) == 4);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 PFC_STATIC_ASSERT(sizeof(t_float64) == 8);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 PFC_STATIC_ASSERT(sizeof(t_size) == sizeof(void*));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 PFC_STATIC_ASSERT(sizeof(t_ssize) == sizeof(void*));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 PFC_STATIC_ASSERT(sizeof(wchar_t) == 2 || sizeof(wchar_t) == 4);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 PFC_STATIC_ASSERT(sizeof(GUID) == 16);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 typedef pfc::avltree_t<int> t_asdf;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 t_asdf asdf; asdf.add_item(1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 t_asdf::iterator iter = asdf._first_var();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 t_asdf::const_iterator iter2 = asdf._first_var();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 PFC_string_formatter() << "foo" << 1337 << foo();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 pfc::list_t<int> l; l.add_item(3);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 void selftest() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 selftest_static(); selftest_runtime();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 debugLog out; out << "PFC selftest OK";
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 }