]> pd.if.org Git - pdclib/blob - opt/nothread/call_once.c
Unit tests
[pdclib] / opt / nothread / call_once.c
1 #include <threads.h>\r
2 \r
3 void _PDCLIB_call_once(_PDCLIB_once_flag *flag, void (*func)(void))\r
4 {\r
5         if(*flag != _PDCLIB_ONCE_FLAG_DONE) {\r
6                 func();\r
7                 *flag = _PDCLIB_ONCE_FLAG_DONE;\r
8         }\r
9 }\r
10 \r
11 #ifdef TEST\r
12 #include <_PDCLIB_test.h>\r
13 \r
14 static int count = 0;\r
15 once_flag once = ONCE_FLAG_INIT;\r
16 \r
17 static void do_once(void)\r
18 {\r
19     count++;\r
20 }\r
21 \r
22 int main( void )\r
23 {\r
24     TESTCASE(count == 0);\r
25     call_once(&once, do_once);\r
26     TESTCASE(count == 1);\r
27     call_once(&once, do_once);\r
28     TESTCASE(count == 1);\r
29     do_once();\r
30     TESTCASE(count == 2);\r
31     return TEST_RESULTS;\r
32 }\r
33 \r
34 #endif\r