/* * Copyright (C) 2018 Freie Universität Berlin * * This file is subject to the terms and conditions of the GNU Lesser * General Public License v2.1. See the file LICENSE in the top level * directory for more details. */ /** * @ingroup tests * @{ * * @file * @brief Test application for newlib/newlib-nano inclusion * * @author Gaëtan Harter * * @} */ /* * Make some different functions visible between newlib and newlib-nano */ #define _DEFAULT_SOURCE 1 #include #include "embUnit.h" #ifdef MODULE_NEWLIB #include /* Newlib-nano defines the _NANO_FORMATTED_IO macro * * Source: * * https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=newlib/newlib.hin;h=eadafc8a6a51ef7674c004a14777f6a4619115ee;hb=d34336767e45ee801ebb107e40abe4b1acbd3d14#l83 */ #ifdef MODULE_NEWLIB_NANO #ifndef _NANO_FORMATTED_IO #error newlib-nano is enabled but the header is not visible by the build system #endif /* _NANO_FORMATTED_IO */ #endif /* MODULE_NEWLIB_NANO */ #endif /* MODULE_NEWLIB */ /* Newlib-nano removed the integer only 'iprintf' functions which are now mapped * to printf. * * Source: * * https://github.com/32bitmicro/newlib-nano-1.0/blob/f157c994b9a2c4bd8d0cfe9fe8fdd9cd54f8c63b/newlib/README.nano#L32 * */ static void test_newlib(void) { /* * Be sure `iprintf` and `printf` are used when `newlib` is included as * they should be visible in the final elf file for compile time tests * * With llvm and samr21-xpro, I could not directly do 'printf == iprintf'. * But doing `(printf - iprintf) == 0` correctly checked if they are equal. */ #ifdef MODULE_NEWLIB #ifdef MODULE_NEWLIB_NANO /* Nano maps iprintf to printf */ TEST_ASSERT_MESSAGE((printf - iprintf) == 0, "iprintf == printf"); #else /* Normal newlib does not */ TEST_ASSERT_MESSAGE((printf - iprintf) != 0, "iprintf != printf"); #endif #endif } static Test *tests_newlib(void) { EMB_UNIT_TESTFIXTURES(fixtures) { new_TestFixture(test_newlib), }; EMB_UNIT_TESTCALLER(tests, NULL, NULL, fixtures); return (Test *)&tests; } int main(void) { puts("Newlib/nano test"); TESTS_START(); TESTS_RUN(tests_newlib()); TESTS_END(); return 0; }