mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
94 lines
2.2 KiB
C
94 lines
2.2 KiB
C
/*
|
|
* 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 <gaetan.harter@fu-berlin.de>
|
|
*
|
|
* @}
|
|
*/
|
|
|
|
/*
|
|
* Make some different functions visible between newlib and newlib-nano
|
|
*/
|
|
#define _DEFAULT_SOURCE 1
|
|
|
|
#include <stdio.h>
|
|
#include "embUnit.h"
|
|
|
|
#ifdef MODULE_NEWLIB
|
|
#include <newlib.h>
|
|
|
|
/* 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;
|
|
}
|