From: Thomas Faber Date: Sat, 21 Nov 2015 12:04:36 +0000 (+0000) Subject: [CRT_APITEST] X-Git-Tag: ReactOS-0.4.0~69 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=bfa1295d2b35d5b30e7dda16199ec0fd97030f18;ds=sidebyside [CRT_APITEST] - Add tests for static initialization and static constructors CORE-10562 svn path=/trunk/; revision=69991 --- diff --git a/rostests/apitests/crt/msvcrt_crt_apitest.cmake b/rostests/apitests/crt/msvcrt_crt_apitest.cmake index 1f387597a7d..6412387d649 100644 --- a/rostests/apitests/crt/msvcrt_crt_apitest.cmake +++ b/rostests/apitests/crt/msvcrt_crt_apitest.cmake @@ -1261,6 +1261,8 @@ list(APPEND SOURCE_MSVCRT # wprintf_s.c # wscanf.c # wscanf_s.c + static_construct.cpp + static_init.c ) if(ARCH STREQUAL "i386") diff --git a/rostests/apitests/crt/static_construct.cpp b/rostests/apitests/crt/static_construct.cpp new file mode 100644 index 00000000000..6bf9b1d02ae --- /dev/null +++ b/rostests/apitests/crt/static_construct.cpp @@ -0,0 +1,42 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory + * PURPOSE: Test for static C++ object construction + * PROGRAMMER: Thomas Faber + */ + +#include + +extern "C" +{ +extern int static_init_counter; + +static int static_init_counter_at_startup; +static int static_construct_counter_at_startup; + +int static_construct_counter = 789; +} + +struct init_static +{ + int m_counter; + + init_static() : + m_counter(2) + { + static_init_counter_at_startup = static_init_counter; + static_construct_counter_at_startup = static_construct_counter; + static_construct_counter++; + } +} init_static; + +START_TEST(static_construct) +{ + ok(static_init_counter_at_startup == 123, "static_init_counter at startup: %d\n", static_init_counter_at_startup); + ok(static_construct_counter_at_startup == 789, "static_construct_counter at startup: %d\n", static_construct_counter_at_startup); + + ok(static_init_counter == 123, "static_init_counter: %d\n", static_init_counter); + + ok(static_construct_counter == 790, "static_construct_counter: %d\n", static_construct_counter); + ok(init_static.m_counter == 2, "init_static.m_counter: %d\n", init_static.m_counter); +} diff --git a/rostests/apitests/crt/static_init.c b/rostests/apitests/crt/static_init.c new file mode 100644 index 00000000000..7d18b5abaa7 --- /dev/null +++ b/rostests/apitests/crt/static_init.c @@ -0,0 +1,18 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory + * PURPOSE: Test for static variable initialization + * PROGRAMMER: Thomas Faber + */ + +#include + +extern int static_construct_counter; + +int static_init_counter = 123; + +START_TEST(static_init) +{ + ok(static_init_counter == 123, "static_init_counter: %d\n", static_init_counter); + ok(static_construct_counter == 790, "static_construct_counter: %d\n", static_construct_counter); +} diff --git a/rostests/apitests/crt/testlist.c b/rostests/apitests/crt/testlist.c index 49eabd6b49c..92c61113e09 100644 --- a/rostests/apitests/crt/testlist.c +++ b/rostests/apitests/crt/testlist.c @@ -17,6 +17,9 @@ extern void func_sprintf(void); extern void func_strcpy(void); extern void func_wcstombs(void); +extern void func_static_construct(void); +extern void func_static_init(void); + const struct test winetest_testlist[] = { { "_vsnprintf", func__vsnprintf }, @@ -35,6 +38,9 @@ const struct test winetest_testlist[] = #elif defined(TEST_MSVCRT) { "_vscprintf", func__vscprintf }, { "_vscwprintf", func__vscwprintf }, + + { "static_construct", func_static_construct }, + { "static_init", func_static_init }, #elif defined(TEST_NTDLL) { "_vscwprintf", func__vscwprintf }, #elif defined(TEST_CRTDLL)