mirror of
https://github.com/hathach/tinyusb.git
synced 2025-05-09 07:11:16 +08:00
cleaning
This commit is contained in:
parent
50c89192d8
commit
ec4a3f6048
76
demos/bsp/boards/board.c
Normal file
76
demos/bsp/boards/board.c
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* board.c
|
||||||
|
*
|
||||||
|
* Created on: Dec 10, 2012
|
||||||
|
* Author: hathach
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Software License Agreement (BSD License)
|
||||||
|
* Copyright (c) 2012, hathach (tinyusb.net)
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
* 3. The name of the author may not be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||||
|
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||||
|
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||||
|
* OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* This file is part of the tiny usb stack.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "board.h"
|
||||||
|
|
||||||
|
volatile uint32_t system_ticks = 0;
|
||||||
|
|
||||||
|
void SysTick_Handler (void)
|
||||||
|
{
|
||||||
|
system_ticks++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------- +
|
||||||
|
// LPCXpresso printf redirection +
|
||||||
|
//-------------------------------------------------------------------- +
|
||||||
|
#if (defined BSP_UART_ENABLE) && (__REDLIB_INTERFACE_VERSION__ >= __REDLIB_INTERFACE_VERSION__)
|
||||||
|
// Called by bottom level of printf routine within RedLib C library to write
|
||||||
|
// a character. With the default semihosting stub, this would write the character
|
||||||
|
// to the debugger console window . But this version writes
|
||||||
|
// the character to the LPC1768/RDB1768 UART.
|
||||||
|
int __sys_write (int iFileHandle, char *pcBuffer, int iLength)
|
||||||
|
{
|
||||||
|
return board_uart_send(pcBuffer, iLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called by bottom level of scanf routine within RedLib C library to read
|
||||||
|
// a character. With the default semihosting stub, this would read the character
|
||||||
|
// from the debugger console window (which acts as stdin). But this version reads
|
||||||
|
// the character from the LPC1768/RDB1768 UART.
|
||||||
|
int __sys_readc (void)
|
||||||
|
{
|
||||||
|
uint8_t c;
|
||||||
|
board_uart_recv(&c, 1);
|
||||||
|
return (int)c;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void check_failed(uint8_t *file, uint32_t line)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
@ -57,7 +57,11 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#define TICKS_PER_SECOND 1000
|
#define BSP_TICKS_PER_SECOND 1000
|
||||||
|
|
||||||
|
//#define BSP_UART_ENABLE
|
||||||
|
#define BSP_UART_BAUDRATE 115200
|
||||||
|
|
||||||
|
|
||||||
/// n-th Bit
|
/// n-th Bit
|
||||||
#ifndef BIT_
|
#ifndef BIT_
|
||||||
@ -82,6 +86,8 @@
|
|||||||
void board_init(void);
|
void board_init(void);
|
||||||
void board_leds(uint32_t mask, uint32_t state);
|
void board_leds(uint32_t mask, uint32_t state);
|
||||||
|
|
||||||
|
extern volatile uint32_t system_ticks;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
void board_init(void)
|
void board_init(void)
|
||||||
{
|
{
|
||||||
SystemInit();
|
SystemInit();
|
||||||
SysTick_Config(SystemCoreClock / TICKS_PER_SECOND); // 1 msec tick timer
|
SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SECOND); // 1 msec tick timer
|
||||||
GPIOInit();
|
GPIOInit();
|
||||||
|
|
||||||
GPIOSetDir(CFG_LED_PORT, CFG_LED_PIN, 1);
|
GPIOSetDir(CFG_LED_PORT, CFG_LED_PIN, 1);
|
||||||
|
@ -40,7 +40,8 @@
|
|||||||
#if BOARD == BOARD_LPCXPRESSO1347
|
#if BOARD == BOARD_LPCXPRESSO1347
|
||||||
|
|
||||||
#include "LPC13Uxx.h"
|
#include "LPC13Uxx.h"
|
||||||
#include "gpio.h"
|
#include "lpc13uxx/inc/gpio.h"
|
||||||
|
#include "lpc13uxx/inc/uart.h"
|
||||||
|
|
||||||
#define CFG_LED_PORT (0)
|
#define CFG_LED_PORT (0)
|
||||||
#define CFG_LED_PIN (7)
|
#define CFG_LED_PIN (7)
|
||||||
@ -50,10 +51,15 @@
|
|||||||
void board_init(void)
|
void board_init(void)
|
||||||
{
|
{
|
||||||
SystemInit();
|
SystemInit();
|
||||||
SysTick_Config(SystemCoreClock / TICKS_PER_SECOND); // 1 msec tick timer
|
SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SECOND); // 1 msec tick timer
|
||||||
GPIOInit();
|
GPIOInit();
|
||||||
|
|
||||||
|
// Leds Init
|
||||||
GPIOSetDir(CFG_LED_PORT, CFG_LED_PIN, 1);
|
GPIOSetDir(CFG_LED_PORT, CFG_LED_PIN, 1);
|
||||||
LPC_GPIO->CLR[CFG_LED_PORT] = (1 << CFG_LED_PIN);
|
LPC_GPIO->CLR[CFG_LED_PORT] = (1 << CFG_LED_PIN);
|
||||||
|
|
||||||
|
// Uart Init
|
||||||
|
UARTInit(BSP_UART_BAUDRATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void board_leds(uint32_t mask, uint32_t state)
|
void board_leds(uint32_t mask, uint32_t state)
|
||||||
@ -64,4 +70,16 @@ void board_leds(uint32_t mask, uint32_t state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t board_uart_send(uint8_t *p_buffer, uint32_t length)
|
||||||
|
{
|
||||||
|
UARTSend(p_buffer, length);
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t board_uart_recv(uint8_t *p_buffer, uint32_t length)
|
||||||
|
{
|
||||||
|
*p_buffer = get_key();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -58,8 +58,9 @@ const static struct {
|
|||||||
void board_init(void)
|
void board_init(void)
|
||||||
{
|
{
|
||||||
CGU_Init();
|
CGU_Init();
|
||||||
SysTick_Config( CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/TICKS_PER_SECOND ); /* 1 ms Timer */
|
SysTick_Config( CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE)/BSP_TICKS_PER_SECOND ); /* 1 ms Timer */
|
||||||
|
|
||||||
|
// USB Pin init
|
||||||
/* Turn on 5V USB VBUS TODO Should be Host-only */
|
/* Turn on 5V USB VBUS TODO Should be Host-only */
|
||||||
scu_pinmux(0x2, 6, MD_PUP | MD_EZI, FUNC4); // P2_6 USB1_PWR_EN, USB1 VBus function
|
scu_pinmux(0x2, 6, MD_PUP | MD_EZI, FUNC4); // P2_6 USB1_PWR_EN, USB1 VBus function
|
||||||
scu_pinmux(0x2, 5, MD_PLN | MD_EZI | MD_ZI, FUNC2); // P2_5 USB1_VBUS, MUST CONFIGURE THIS SIGNAL FOR USB1 NORMAL OPERATION
|
scu_pinmux(0x2, 5, MD_PLN | MD_EZI | MD_ZI, FUNC2); // P2_5 USB1_VBUS, MUST CONFIGURE THIS SIGNAL FOR USB1 NORMAL OPERATION
|
||||||
@ -74,6 +75,18 @@ void board_init(void)
|
|||||||
scu_pinmux(leds[i].port, leds[i].pin, MD_PUP|MD_EZI|MD_ZI, FUNC0);
|
scu_pinmux(leds[i].port, leds[i].pin, MD_PUP|MD_EZI|MD_ZI, FUNC0);
|
||||||
GPIO_SetDir(leds[i].port, BIT_(leds[i].pin), 1); // output
|
GPIO_SetDir(leds[i].port, BIT_(leds[i].pin), 1); // output
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UART init
|
||||||
|
UART_CFG_Type UARTConfigStruct;
|
||||||
|
|
||||||
|
scu_pinmux(0x6 ,4, MD_PDN|MD_EZI, FUNC2); // UART0_TXD
|
||||||
|
scu_pinmux(0x6 ,5, MD_PDN|MD_EZI, FUNC2); // UART0_RXD
|
||||||
|
|
||||||
|
UART_ConfigStructInit(&UARTConfigStruct); // default: baud = 9600, 8 bit data, 1 stop bit, no parity
|
||||||
|
UARTConfigStruct.Baud_rate = BSP_UART_BAUDRATE; // Re-configure baudrate
|
||||||
|
|
||||||
|
UART_Init((LPC_USARTn_Type*) LPC_USART0, &UARTConfigStruct); // Initialize UART port
|
||||||
|
UART_TxCmd((LPC_USARTn_Type*) LPC_USART0, ENABLE); // Enable UART
|
||||||
}
|
}
|
||||||
|
|
||||||
void board_leds(uint32_t mask, uint32_t state)
|
void board_leds(uint32_t mask, uint32_t state)
|
||||||
@ -88,4 +101,14 @@ void board_leds(uint32_t mask, uint32_t state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t board_uart_send(uint8_t *p_buffer, uint32_t length)
|
||||||
|
{
|
||||||
|
return UART_Send((LPC_USARTn_Type*) LPC_UART1, p_buffer, length, BLOCKING);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t board_uart_recv(uint8_t *p_buffer, uint32_t length)
|
||||||
|
{
|
||||||
|
return UART_Receive((LPC_USARTn_Type*) LPC_UART1, p_buffer, length, BLOCKING);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -18,13 +18,13 @@
|
|||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<configuration artifactExtension="axf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="com.crt.advproject.config.exe.debug.856400198" name="Board LPCXpresso1347" parent="com.crt.advproject.config.exe.debug" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "${BuildArtifactFileName}"; # arm-none-eabi-objcopy -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" ; checksum -p ${TargetChip} -d "${BuildArtifactFileBaseName}.bin"; ">
|
<configuration artifactExtension="axf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GmakeErrorParser" id="com.crt.advproject.config.exe.debug.856400198" name="Board LPCXpresso1347" parent="com.crt.advproject.config.exe.debug" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "${BuildArtifactFileName}"; # arm-none-eabi-objcopy -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" ; checksum -p ${TargetChip} -d "${BuildArtifactFileBaseName}.bin"; " preannouncebuildStep="" prebuildStep="">
|
||||||
<folderInfo id="com.crt.advproject.config.exe.debug.856400198." name="/" resourcePath="">
|
<folderInfo id="com.crt.advproject.config.exe.debug.856400198." name="/" resourcePath="">
|
||||||
<toolChain id="com.crt.advproject.toolchain.exe.debug.469819926" name="Code Red MCU Tools" superClass="com.crt.advproject.toolchain.exe.debug">
|
<toolChain errorParsers="" id="com.crt.advproject.toolchain.exe.debug.469819926" name="Code Red MCU Tools" superClass="com.crt.advproject.toolchain.exe.debug">
|
||||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.exe.debug.548956113" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.exe.debug"/>
|
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.exe.debug.548956113" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.exe.debug"/>
|
||||||
<builder buildPath="${workspace_loc:/device_keyboard/Debug}" id="com.crt.advproject.builder.exe.debug.1029932398" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.exe.debug"/>
|
<builder buildPath="${workspace_loc:/device_keyboard/Debug}" errorParsers="org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.CWDLocator" id="com.crt.advproject.builder.exe.debug.1029932398" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.exe.debug"/>
|
||||||
<tool id="com.crt.advproject.cpp.exe.debug.1119457813" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.exe.debug"/>
|
<tool id="com.crt.advproject.cpp.exe.debug.1119457813" name="MCU C++ Compiler" superClass="com.crt.advproject.cpp.exe.debug"/>
|
||||||
<tool id="com.crt.advproject.gcc.exe.debug.2040685134" name="MCU C Compiler" superClass="com.crt.advproject.gcc.exe.debug">
|
<tool command="arm-none-eabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" errorParsers="org.eclipse.cdt.core.GCCErrorParser" id="com.crt.advproject.gcc.exe.debug.2040685134" name="MCU C Compiler" superClass="com.crt.advproject.gcc.exe.debug">
|
||||||
<option id="com.crt.advproject.gcc.arch.658802474" name="Architecture" superClass="com.crt.advproject.gcc.arch" value="com.crt.advproject.gcc.target.cm3" valueType="enumerated"/>
|
<option id="com.crt.advproject.gcc.arch.658802474" name="Architecture" superClass="com.crt.advproject.gcc.arch" value="com.crt.advproject.gcc.target.cm3" valueType="enumerated"/>
|
||||||
<option id="com.crt.advproject.gcc.thumb.697143257" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" value="true" valueType="boolean"/>
|
<option id="com.crt.advproject.gcc.thumb.697143257" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" value="true" valueType="boolean"/>
|
||||||
<option id="gnu.c.compiler.option.preprocessor.def.symbols.371325215" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
|
<option id="gnu.c.compiler.option.preprocessor.def.symbols.371325215" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
|
||||||
@ -37,7 +37,6 @@
|
|||||||
<option id="gnu.c.compiler.option.misc.other.204394496" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections $(CFLAGS)" valueType="string"/>
|
<option id="gnu.c.compiler.option.misc.other.204394496" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections $(CFLAGS)" valueType="string"/>
|
||||||
<option id="gnu.c.compiler.option.include.paths.1207481236" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
<option id="gnu.c.compiler.option.include.paths.1207481236" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/CMSISv2p10_LPC13Uxx/inc}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/CMSISv2p10_LPC13Uxx/inc}""/>
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/bsp/lpc13uxx/inc}""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/bsp}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/bsp}""/>
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/tinyusb}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/tinyusb}""/>
|
||||||
</option>
|
</option>
|
||||||
@ -45,14 +44,14 @@
|
|||||||
<option id="com.crt.advproject.c.misc.dialect.1002654194" name="C Dialect" superClass="com.crt.advproject.c.misc.dialect" value="com.crt.advproject.misc.dialect.gnu99" valueType="enumerated"/>
|
<option id="com.crt.advproject.c.misc.dialect.1002654194" name="C Dialect" superClass="com.crt.advproject.c.misc.dialect" value="com.crt.advproject.misc.dialect.gnu99" valueType="enumerated"/>
|
||||||
<inputType id="com.crt.advproject.compiler.input.932601394" superClass="com.crt.advproject.compiler.input"/>
|
<inputType id="com.crt.advproject.compiler.input.932601394" superClass="com.crt.advproject.compiler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.crt.advproject.gas.exe.debug.1050918013" name="MCU Assembler" superClass="com.crt.advproject.gas.exe.debug">
|
<tool command="arm-none-eabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" errorParsers="org.eclipse.cdt.core.GASErrorParser" id="com.crt.advproject.gas.exe.debug.1050918013" name="MCU Assembler" superClass="com.crt.advproject.gas.exe.debug">
|
||||||
<option id="com.crt.advproject.gas.arch.1370417737" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/>
|
<option id="com.crt.advproject.gas.arch.1370417737" name="Architecture" superClass="com.crt.advproject.gas.arch" value="com.crt.advproject.gas.target.cm3" valueType="enumerated"/>
|
||||||
<option id="com.crt.advproject.gas.thumb.631765837" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/>
|
<option id="com.crt.advproject.gas.thumb.631765837" name="Thumb mode" superClass="com.crt.advproject.gas.thumb" value="true" valueType="boolean"/>
|
||||||
<option id="gnu.both.asm.option.flags.crt.1931019746" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -D__REDLIB__ -DDEBUG -D__CODE_RED" valueType="string"/>
|
<option id="gnu.both.asm.option.flags.crt.1931019746" name="Assembler flags" superClass="gnu.both.asm.option.flags.crt" value="-c -x assembler-with-cpp -D__REDLIB__ -DDEBUG -D__CODE_RED" valueType="string"/>
|
||||||
<inputType id="com.crt.advproject.assembler.input.1898367800" name="Additional Assembly Source Files" superClass="com.crt.advproject.assembler.input"/>
|
<inputType id="com.crt.advproject.assembler.input.1898367800" name="Additional Assembly Source Files" superClass="com.crt.advproject.assembler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.crt.advproject.link.cpp.exe.debug.290831412" name="MCU C++ Linker" superClass="com.crt.advproject.link.cpp.exe.debug"/>
|
<tool id="com.crt.advproject.link.cpp.exe.debug.290831412" name="MCU C++ Linker" superClass="com.crt.advproject.link.cpp.exe.debug"/>
|
||||||
<tool id="com.crt.advproject.link.exe.debug.1506176667" name="MCU Linker" superClass="com.crt.advproject.link.exe.debug">
|
<tool command="arm-none-eabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" errorParsers="org.eclipse.cdt.core.GLDErrorParser" id="com.crt.advproject.link.exe.debug.1506176667" name="MCU Linker" superClass="com.crt.advproject.link.exe.debug">
|
||||||
<option id="com.crt.advproject.link.arch.1411471839" name="Architecture" superClass="com.crt.advproject.link.arch" value="com.crt.advproject.link.target.cm3" valueType="enumerated"/>
|
<option id="com.crt.advproject.link.arch.1411471839" name="Architecture" superClass="com.crt.advproject.link.arch" value="com.crt.advproject.link.target.cm3" valueType="enumerated"/>
|
||||||
<option id="com.crt.advproject.link.thumb.897273840" name="Thumb mode" superClass="com.crt.advproject.link.thumb" value="true" valueType="boolean"/>
|
<option id="com.crt.advproject.link.thumb.897273840" name="Thumb mode" superClass="com.crt.advproject.link.thumb" value="true" valueType="boolean"/>
|
||||||
<option id="com.crt.advproject.link.script.935550147" name="Linker script" superClass="com.crt.advproject.link.script" value=""device_keyboard_LPCXpresso1347.ld"" valueType="string"/>
|
<option id="com.crt.advproject.link.script.935550147" name="Linker script" superClass="com.crt.advproject.link.script" value=""device_keyboard_LPCXpresso1347.ld"" valueType="string"/>
|
||||||
@ -667,7 +666,7 @@
|
|||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<configuration artifactExtension="axf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="microbuilder" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GmakeErrorParser" id="com.crt.advproject.config.exe.debug.856400198.534940316" name="Board at86rf2xx" parent="com.crt.advproject.config.exe.debug" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "${BuildArtifactFileName}"; # arm-none-eabi-objcopy -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" ; checksum -p ${TargetChip} -d "${BuildArtifactFileBaseName}.bin"; " preannouncebuildStep="" prebuildStep="">
|
<configuration artifactExtension="axf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="lpc11uxx from microbuilder" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GmakeErrorParser" id="com.crt.advproject.config.exe.debug.856400198.534940316" name="Board at86rf2xx" parent="com.crt.advproject.config.exe.debug" postannouncebuildStep="Performing post-build steps" postbuildStep="arm-none-eabi-size "${BuildArtifactFileName}"; # arm-none-eabi-objcopy -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" ; checksum -p ${TargetChip} -d "${BuildArtifactFileBaseName}.bin"; " preannouncebuildStep="" prebuildStep="">
|
||||||
<folderInfo id="com.crt.advproject.config.exe.debug.856400198.534940316." name="/" resourcePath="">
|
<folderInfo id="com.crt.advproject.config.exe.debug.856400198.534940316." name="/" resourcePath="">
|
||||||
<toolChain errorParsers="" id="com.crt.advproject.toolchain.exe.debug.1347871780" name="Code Red MCU Tools" superClass="com.crt.advproject.toolchain.exe.debug">
|
<toolChain errorParsers="" id="com.crt.advproject.toolchain.exe.debug.1347871780" name="Code Red MCU Tools" superClass="com.crt.advproject.toolchain.exe.debug">
|
||||||
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.exe.debug.1543738985" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.exe.debug"/>
|
<targetPlatform binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="com.crt.advproject.platform.exe.debug.1543738985" name="ARM-based MCU (Debug)" superClass="com.crt.advproject.platform.exe.debug"/>
|
||||||
@ -686,7 +685,6 @@
|
|||||||
<option id="gnu.c.compiler.option.misc.other.1222444467" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections $(CFLAGS)" valueType="string"/>
|
<option id="gnu.c.compiler.option.misc.other.1222444467" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections $(CFLAGS)" valueType="string"/>
|
||||||
<option id="gnu.c.compiler.option.include.paths.2143003127" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
<option id="gnu.c.compiler.option.include.paths.2143003127" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/CMSISv2p00_LPC11Uxx/inc}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/CMSISv2p00_LPC11Uxx/inc}""/>
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/bsp/lpc11uxx/inc}""/>
|
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/bsp}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/bsp}""/>
|
||||||
<listOptionValue builtIn="false" value=""${workspace_loc:/tinyusb}""/>
|
<listOptionValue builtIn="false" value=""${workspace_loc:/tinyusb}""/>
|
||||||
</option>
|
</option>
|
||||||
@ -1308,45 +1306,49 @@
|
|||||||
<storageModule moduleId="com.crt.config">
|
<storageModule moduleId="com.crt.config">
|
||||||
<projectStorage><?xml version="1.0" encoding="UTF-8"?>
|
<projectStorage><?xml version="1.0" encoding="UTF-8"?>
|
||||||
<TargetConfig>
|
<TargetConfig>
|
||||||
<Properties property_0="" property_3="NXP" property_4="LPC11U37/401" property_count="5" version="1"/>
|
<Properties property_0="" property_3="NXP" property_4="LPC1347" property_count="5" version="1"/>
|
||||||
<infoList vendor="NXP"><info chip="LPC11U37/401" match_id="0x00017C40" name="LPC11U37/401" stub="crt_emu_lpc11_13_nxp"><chip><name>LPC11U37/401</name>
|
<infoList vendor="NXP"><info chip="LPC1347" match_id="0x08020543" name="LPC1347" stub="crt_emu_lpc11_13_nxp"><chip><name>LPC1347</name>
|
||||||
<family>LPC11Uxx</family>
|
<family>LPC13xx (12bit ADC)</family>
|
||||||
<vendor>NXP (formerly Philips)</vendor>
|
<vendor>NXP (formerly Philips)</vendor>
|
||||||
<reset board="None" core="Real" sys="Real"/>
|
<reset board="None" core="Real" sys="Real"/>
|
||||||
<clock changeable="TRUE" freq="12MHz" is_accurate="TRUE"/>
|
<clock changeable="TRUE" freq="12MHz" is_accurate="TRUE"/>
|
||||||
<memory can_program="true" id="Flash" is_ro="true" type="Flash"/>
|
<memory can_program="true" id="Flash" is_ro="true" type="Flash"/>
|
||||||
<memory id="RAM" type="RAM"/>
|
<memory id="RAM" type="RAM"/>
|
||||||
<memory id="Periph" is_volatile="true" type="Peripheral"/>
|
<memory id="Periph" is_volatile="true" type="Peripheral"/>
|
||||||
<memoryInstance derived_from="Flash" id="MFlash128" location="0x0" size="0x20000"/>
|
<memoryInstance derived_from="Flash" id="MFlash64" location="0x0" size="0x10000"/>
|
||||||
<memoryInstance derived_from="RAM" id="RamLoc8" location="0x10000000" size="0x2000"/>
|
<memoryInstance derived_from="RAM" id="RamLoc8" location="0x10000000" size="0x2000"/>
|
||||||
<memoryInstance derived_from="RAM" id="RamUsb2" location="0x20004000" size="0x800"/>
|
<memoryInstance derived_from="RAM" id="RamUsb2" location="0x20004000" size="0x800"/>
|
||||||
<prog_flash blocksz="0x1000" location="0x0" maxprgbuff="0x400" progwithcode="TRUE" size="0x20000"/>
|
<memoryInstance derived_from="RAM" id="RamPeriph2" location="0x20000000" size="0x800"/>
|
||||||
<peripheralInstance derived_from="CM0_NVIC" id="NVIC" location="0xe000e000"/>
|
<prog_flash blocksz="0x1000" location="0x0" maxprgbuff="0x400" progwithcode="TRUE" size="0x10000"/>
|
||||||
<peripheralInstance derived_from="LPC11U_GPIO" id="GPIO" location="0x50000000"/>
|
<peripheralInstance derived_from="V7M_MPU" id="MPU" location="0xe000ed90"/>
|
||||||
<peripheralInstance derived_from="LPC11U_USBDEV" id="USB" location="0x40080000"/>
|
<peripheralInstance derived_from="V7M_NVIC" id="NVIC" location="0xe000e000"/>
|
||||||
<peripheralInstance derived_from="CM0_DCR" id="DCR" location="0xe000edf0"/>
|
<peripheralInstance derived_from="V7M_DCR" id="DCR" location="0xe000edf0"/>
|
||||||
<peripheralInstance derived_from="LPC11U_GPIO_GROUP_INT" id="GPIOGROUP0INT" location="0x40060000"/>
|
<peripheralInstance derived_from="V7M_ITM" id="ITM" location="0xe0000000"/>
|
||||||
<peripheralInstance derived_from="LPC11U_GPIO_GROUP_INT" id="GPIOGROUP1INT" location="0x4005c000"/>
|
<peripheralInstance derived_from="I2C" id="I2C" location="0x40000000"/>
|
||||||
<peripheralInstance derived_from="LPC11U_GPIO_INT" id="GPIOINT" location="0x4004c000"/>
|
<peripheralInstance derived_from="WWDT" id="WWDT" location="0x40004000"/>
|
||||||
<peripheralInstance derived_from="LPC11_13_SSP" id="SSP1" location="0x40058000"/>
|
<peripheralInstance derived_from="USART" id="USART" location="0x40008000"/>
|
||||||
<peripheralInstance derived_from="LPC11U_FMC" id="FMC" location="0x4003c000"/>
|
<peripheralInstance derived_from="CT16B0" id="CT16B0" location="0x4000c000"/>
|
||||||
<peripheralInstance derived_from="LPC11U_SYSCTL" id="SYSCTL" location="0x40048000"/>
|
<peripheralInstance derived_from="CT16B1" id="CT16B1" location="0x40010000"/>
|
||||||
<peripheralInstance derived_from="LPC11U_IOCON" id="IOCON" location="0x40044000"/>
|
<peripheralInstance derived_from="CT32B0" id="CT32B0" location="0x40014000"/>
|
||||||
<peripheralInstance derived_from="LPC11_13_SSP" id="SSP0" location="0x40040000"/>
|
<peripheralInstance derived_from="CT32B1" id="CT32B1" location="0x40018000"/>
|
||||||
<peripheralInstance derived_from="LPC11_13_PMU" id="PMU" location="0x40038000"/>
|
<peripheralInstance derived_from="ADC" id="ADC" location="0x4001c000"/>
|
||||||
<peripheralInstance derived_from="LPC11_13_ADC" id="ADC" location="0x4001c000"/>
|
<peripheralInstance derived_from="PMU" id="PMU" location="0x40038000"/>
|
||||||
<peripheralInstance derived_from="LPC11_13_TIMER32" id="TIMER1" location="0x40018000"/>
|
<peripheralInstance derived_from="FLASHCTRL" id="FLASHCTRL" location="0x4003c000"/>
|
||||||
<peripheralInstance derived_from="LPC11_13_TIMER32" id="TIMER0" location="0x40014000"/>
|
<peripheralInstance derived_from="SSP0" id="SSP0" location="0x40040000"/>
|
||||||
<peripheralInstance derived_from="LPC11_13_TIMER16" id="TMR161" location="0x40010000"/>
|
<peripheralInstance derived_from="IOCON" id="IOCON" location="0x40044000"/>
|
||||||
<peripheralInstance derived_from="LPC11_13_TIMER16" id="TMR160" location="0x4000c000"/>
|
<peripheralInstance derived_from="SYSCON" id="SYSCON" location="0x40048000"/>
|
||||||
<peripheralInstance derived_from="LPC1xxx_UART_MODEM" id="UART0" location="0x40008000"/>
|
<peripheralInstance derived_from="GPIO-PIN-INT" id="GPIO-PIN-INT" location="0x4004c000"/>
|
||||||
<peripheralInstance derived_from="LPC11_13_WDT" id="WDT" location="0x40004000"/>
|
<peripheralInstance derived_from="SSP1" id="SSP1" location="0x40058000"/>
|
||||||
<peripheralInstance derived_from="LPC11_13_I2C" id="I2C0" location="0x40000000"/>
|
<peripheralInstance derived_from="GPIO-GROUP-INT0" id="GPIO-GROUP-INT0" location="0x4005c000"/>
|
||||||
|
<peripheralInstance derived_from="GPIO-GROUP-INT1" id="GPIO-GROUP-INT1" location="0x40060000"/>
|
||||||
|
<peripheralInstance derived_from="RITIMER" id="RITIMER" location="0x40064000"/>
|
||||||
|
<peripheralInstance derived_from="USB" id="USB" location="0x40080000"/>
|
||||||
|
<peripheralInstance derived_from="GPIO-PORT" id="GPIO-PORT" location="0x50000000"/>
|
||||||
</chip>
|
</chip>
|
||||||
<processor><name gcc_name="cortex-m0">Cortex-M0</name>
|
<processor><name gcc_name="cortex-m3">Cortex-M3</name>
|
||||||
<family>Cortex-M</family>
|
<family>Cortex-M</family>
|
||||||
</processor>
|
</processor>
|
||||||
<link href="nxp_lpc11_13_peripheral.xme" show="embed" type="simple"/>
|
<link href="nxp_lpc13Uxx_peripheral.xme" show="embed" type="simple"/>
|
||||||
</info>
|
</info>
|
||||||
</infoList>
|
</infoList>
|
||||||
</TargetConfig></projectStorage>
|
</TargetConfig></projectStorage>
|
||||||
|
@ -84,7 +84,7 @@
|
|||||||
<link>
|
<link>
|
||||||
<name>bsp</name>
|
<name>bsp</name>
|
||||||
<type>2</type>
|
<type>2</type>
|
||||||
<location>C:/Users/hathach/Dropbox/tinyusb/tinyusb/demos/bsp</location>
|
<locationURI>PARENT-2-PROJECT_LOC/bsp</locationURI>
|
||||||
</link>
|
</link>
|
||||||
</linkedResources>
|
</linkedResources>
|
||||||
<filteredResources>
|
<filteredResources>
|
||||||
|
@ -12,27 +12,22 @@
|
|||||||
// See crp.h header for more information
|
// See crp.h header for more information
|
||||||
__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;
|
__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;
|
||||||
|
|
||||||
volatile uint32_t system_tick = 0;
|
|
||||||
|
|
||||||
void SysTick_Handler (void)
|
|
||||||
{
|
|
||||||
system_tick++;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
uint32_t current_tick = system_tick;
|
uint32_t current_tick = system_ticks;
|
||||||
|
|
||||||
board_init();
|
board_init();
|
||||||
tusb_init();
|
tusb_init();
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (current_tick + 1000 < system_tick)
|
if (current_tick + 1000 < system_ticks)
|
||||||
{
|
{
|
||||||
current_tick += 1000;
|
current_tick += 1000;
|
||||||
board_leds(0x01, (current_tick/1000)%2); /* Toggle LED once per second */
|
board_leds(0x01, (current_tick/1000)%2); /* Toggle LED once per second */
|
||||||
|
|
||||||
|
printf("hello world\n");
|
||||||
|
|
||||||
#ifndef CFG_CLASS_CDC
|
#ifndef CFG_CLASS_CDC
|
||||||
if (usb_isConfigured())
|
if (usb_isConfigured())
|
||||||
{
|
{
|
||||||
|
@ -10,25 +10,20 @@
|
|||||||
__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;
|
__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
volatile uint32_t system_tick = 0;
|
|
||||||
void SysTick_Handler (void)
|
|
||||||
{
|
|
||||||
system_tick++;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
uint32_t current_tick = system_tick;
|
uint32_t current_tick = system_ticks;
|
||||||
|
|
||||||
board_init();
|
board_init();
|
||||||
tusb_init(0);
|
tusb_init(0);
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (current_tick + 1000 < system_tick)
|
if (current_tick + 1000 < system_ticks)
|
||||||
{
|
{
|
||||||
current_tick += 1000;
|
current_tick += 1000;
|
||||||
board_leds(0x03, (current_tick/1000)%2); /* Toggle LED once per second */
|
board_leds(0x03, (current_tick/1000)%2); /* Toggle LED once per second */
|
||||||
|
printf("hello world");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
# ==========================================
|
|
||||||
# Unity Project - A Test Framework for C
|
|
||||||
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
# [Released under MIT License. Please refer to license.txt for details]
|
|
||||||
# ==========================================
|
|
||||||
|
|
||||||
if RUBY_PLATFORM =~/(win|w)32$/
|
|
||||||
begin
|
|
||||||
require 'Win32API'
|
|
||||||
rescue LoadError
|
|
||||||
puts "ERROR! \"Win32API\" library not found"
|
|
||||||
puts "\"Win32API\" is required for colour on a windows machine"
|
|
||||||
puts " try => \"gem install Win32API\" on the command line"
|
|
||||||
puts
|
|
||||||
end
|
|
||||||
# puts
|
|
||||||
# puts 'Windows Environment Detected...'
|
|
||||||
# puts 'Win32API Library Found.'
|
|
||||||
# puts
|
|
||||||
end
|
|
||||||
|
|
||||||
class ColourCommandLine
|
|
||||||
def initialize
|
|
||||||
if RUBY_PLATFORM =~/(win|w)32$/
|
|
||||||
get_std_handle = Win32API.new("kernel32", "GetStdHandle", ['L'], 'L')
|
|
||||||
@set_console_txt_attrb =
|
|
||||||
Win32API.new("kernel32","SetConsoleTextAttribute",['L','N'], 'I')
|
|
||||||
@hout = get_std_handle.call(-11)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def change_to(new_colour)
|
|
||||||
if RUBY_PLATFORM =~/(win|w)32$/
|
|
||||||
@set_console_txt_attrb.call(@hout,self.win32_colour(new_colour))
|
|
||||||
else
|
|
||||||
"\033[30;#{posix_colour(new_colour)};22m"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def win32_colour(colour)
|
|
||||||
case colour
|
|
||||||
when :black then 0
|
|
||||||
when :dark_blue then 1
|
|
||||||
when :dark_green then 2
|
|
||||||
when :dark_cyan then 3
|
|
||||||
when :dark_red then 4
|
|
||||||
when :dark_purple then 5
|
|
||||||
when :dark_yellow, :narrative then 6
|
|
||||||
when :default_white, :default, :dark_white then 7
|
|
||||||
when :silver then 8
|
|
||||||
when :blue then 9
|
|
||||||
when :green, :success then 10
|
|
||||||
when :cyan, :output then 11
|
|
||||||
when :red, :failure then 12
|
|
||||||
when :purple then 13
|
|
||||||
when :yellow then 14
|
|
||||||
when :white then 15
|
|
||||||
else
|
|
||||||
0
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def posix_colour(colour)
|
|
||||||
case colour
|
|
||||||
when :black then 30
|
|
||||||
when :red, :failure then 31
|
|
||||||
when :green, :success then 32
|
|
||||||
when :yellow then 33
|
|
||||||
when :blue, :narrative then 34
|
|
||||||
when :purple, :magenta then 35
|
|
||||||
when :cyan, :output then 36
|
|
||||||
when :white, :default_white, :default then 37
|
|
||||||
else
|
|
||||||
30
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def out_c(mode, colour, str)
|
|
||||||
case RUBY_PLATFORM
|
|
||||||
when /(win|w)32$/
|
|
||||||
change_to(colour)
|
|
||||||
$stdout.puts str if mode == :puts
|
|
||||||
$stdout.print str if mode == :print
|
|
||||||
change_to(:default_white)
|
|
||||||
else
|
|
||||||
$stdout.puts("#{change_to(colour)}#{str}\033[0m") if mode == :puts
|
|
||||||
$stdout.print("#{change_to(colour)}#{str}\033[0m") if mode == :print
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end # ColourCommandLine
|
|
||||||
|
|
||||||
def colour_puts(role,str) ColourCommandLine.new.out_c(:puts, role, str) end
|
|
||||||
def colour_print(role,str) ColourCommandLine.new.out_c(:print, role, str) end
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
# ==========================================
|
|
||||||
# Unity Project - A Test Framework for C
|
|
||||||
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
# [Released under MIT License. Please refer to license.txt for details]
|
|
||||||
# ==========================================
|
|
||||||
|
|
||||||
require "#{File.expand_path(File.dirname(__FILE__))}/colour_prompt"
|
|
||||||
|
|
||||||
$colour_output = true
|
|
||||||
|
|
||||||
def report(message)
|
|
||||||
if not $colour_output
|
|
||||||
$stdout.puts(message)
|
|
||||||
else
|
|
||||||
message = message.join('\n') if (message.class == Array)
|
|
||||||
message.each_line do |line|
|
|
||||||
line.chomp!
|
|
||||||
colour = case(line)
|
|
||||||
when /(?:total\s+)?tests:?\s+(\d+)\s+(?:total\s+)?failures:?\s+\d+\s+Ignored:?/i
|
|
||||||
($1.to_i == 0) ? :green : :red
|
|
||||||
when /PASS/
|
|
||||||
:green
|
|
||||||
when /^OK$/
|
|
||||||
:green
|
|
||||||
when /(?:FAIL|ERROR)/
|
|
||||||
:red
|
|
||||||
when /IGNORE/
|
|
||||||
:yellow
|
|
||||||
when /^(?:Creating|Compiling|Linking)/
|
|
||||||
:white
|
|
||||||
else
|
|
||||||
:silver
|
|
||||||
end
|
|
||||||
colour_puts(colour, line)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
$stdout.flush
|
|
||||||
$stderr.flush
|
|
||||||
end
|
|
@ -1,36 +0,0 @@
|
|||||||
#this is a sample configuration file for generate_module
|
|
||||||
#you would use it by calling generate_module with the -ygenerate_config.yml option
|
|
||||||
#files like this are useful for customizing generate_module to your environment
|
|
||||||
:generate_module:
|
|
||||||
:defaults:
|
|
||||||
#these defaults are used in place of any missing options at the command line
|
|
||||||
:path_src: ../src/
|
|
||||||
:path_inc: ../src/
|
|
||||||
:path_tst: ../test/
|
|
||||||
:update_svn: true
|
|
||||||
:includes:
|
|
||||||
#use [] for no additional includes, otherwise list the includes on separate lines
|
|
||||||
:src:
|
|
||||||
- Defs.h
|
|
||||||
- Board.h
|
|
||||||
:inc: []
|
|
||||||
:tst:
|
|
||||||
- Defs.h
|
|
||||||
- Board.h
|
|
||||||
- Exception.h
|
|
||||||
:boilerplates:
|
|
||||||
#these are inserted at the top of generated files.
|
|
||||||
#just comment out or remove if not desired.
|
|
||||||
#use %1$s where you would like the file name to appear (path/extension not included)
|
|
||||||
:src: |
|
|
||||||
//-------------------------------------------
|
|
||||||
// %1$s.c
|
|
||||||
//-------------------------------------------
|
|
||||||
:inc: |
|
|
||||||
//-------------------------------------------
|
|
||||||
// %1$s.h
|
|
||||||
//-------------------------------------------
|
|
||||||
:tst: |
|
|
||||||
//-------------------------------------------
|
|
||||||
// Test%1$s.c : Units tests for %1$s.c
|
|
||||||
//-------------------------------------------
|
|
@ -1,202 +0,0 @@
|
|||||||
# ==========================================
|
|
||||||
# Unity Project - A Test Framework for C
|
|
||||||
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
# [Released under MIT License. Please refer to license.txt for details]
|
|
||||||
# ==========================================
|
|
||||||
|
|
||||||
# This script creates all the files with start code necessary for a new module.
|
|
||||||
# A simple module only requires a source file, header file, and test file.
|
|
||||||
# Triad modules require a source, header, and test file for each triad type (like model, conductor, and hardware).
|
|
||||||
|
|
||||||
require 'rubygems'
|
|
||||||
require 'fileutils'
|
|
||||||
|
|
||||||
HERE = File.expand_path(File.dirname(__FILE__)) + '/'
|
|
||||||
|
|
||||||
#help text when requested
|
|
||||||
HELP_TEXT = [ "\nGENERATE MODULE\n-------- ------",
|
|
||||||
"\nUsage: ruby generate_module [options] module_name",
|
|
||||||
" -i\"include\" sets the path to output headers to 'include' (DEFAULT ../src)",
|
|
||||||
" -s\"../src\" sets the path to output source to '../src' (DEFAULT ../src)",
|
|
||||||
" -t\"C:/test\" sets the path to output source to 'C:/test' (DEFAULT ../test)",
|
|
||||||
" -p\"MCH\" sets the output pattern to MCH.",
|
|
||||||
" dh - driver hardware.",
|
|
||||||
" dih - driver interrupt hardware.",
|
|
||||||
" mch - model conductor hardware.",
|
|
||||||
" mvp - model view presenter.",
|
|
||||||
" src - just a single source module. (DEFAULT)",
|
|
||||||
" -d destroy module instead of creating it.",
|
|
||||||
" -u update subversion too (requires subversion command line)",
|
|
||||||
" -y\"my.yml\" selects a different yaml config file for module generation",
|
|
||||||
"" ].join("\n")
|
|
||||||
|
|
||||||
#Built in patterns
|
|
||||||
PATTERNS = { 'src' => {'' => { :inc => [] } },
|
|
||||||
'dh' => {'Driver' => { :inc => ['%1$sHardware.h'] },
|
|
||||||
'Hardware' => { :inc => [] }
|
|
||||||
},
|
|
||||||
'dih' => {'Driver' => { :inc => ['%1$sHardware.h', '%1$sInterrupt.h'] },
|
|
||||||
'Interrupt'=> { :inc => ['%1$sHardware.h'] },
|
|
||||||
'Hardware' => { :inc => [] }
|
|
||||||
},
|
|
||||||
'mch' => {'Model' => { :inc => [] },
|
|
||||||
'Conductor'=> { :inc => ['%1$sModel.h', '%1$sHardware.h'] },
|
|
||||||
'Hardware' => { :inc => [] }
|
|
||||||
},
|
|
||||||
'mvp' => {'Model' => { :inc => [] },
|
|
||||||
'Presenter'=> { :inc => ['%1$sModel.h', '%1$sView.h'] },
|
|
||||||
'View' => { :inc => [] }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#TEMPLATE_TST
|
|
||||||
TEMPLATE_TST = %q[#include "unity.h"
|
|
||||||
%2$s#include "%1$s.h"
|
|
||||||
|
|
||||||
void setUp(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void tearDown(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_%1$s_NeedToImplement(void)
|
|
||||||
{
|
|
||||||
TEST_IGNORE();
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
#TEMPLATE_SRC
|
|
||||||
TEMPLATE_SRC = %q[%2$s#include "%1$s.h"
|
|
||||||
]
|
|
||||||
|
|
||||||
#TEMPLATE_INC
|
|
||||||
TEMPLATE_INC = %q[#ifndef _%3$s_H
|
|
||||||
#define _%3$s_H%2$s
|
|
||||||
|
|
||||||
#endif // _%3$s_H
|
|
||||||
]
|
|
||||||
|
|
||||||
# Parse the command line parameters.
|
|
||||||
ARGV.each do |arg|
|
|
||||||
case(arg)
|
|
||||||
when /^-d/ then @destroy = true
|
|
||||||
when /^-u/ then @update_svn = true
|
|
||||||
when /^-p(\w+)/ then @pattern = $1
|
|
||||||
when /^-s(.+)/ then @path_src = $1
|
|
||||||
when /^-i(.+)/ then @path_inc = $1
|
|
||||||
when /^-t(.+)/ then @path_tst = $1
|
|
||||||
when /^-y(.+)/ then @yaml_config = $1
|
|
||||||
when /^(\w+)/
|
|
||||||
raise "ERROR: You can't have more than one Module name specified!" unless @module_name.nil?
|
|
||||||
@module_name = arg
|
|
||||||
when /^-(h|-help)/
|
|
||||||
puts HELP_TEXT
|
|
||||||
exit
|
|
||||||
else
|
|
||||||
raise "ERROR: Unknown option specified '#{arg}'"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
raise "ERROR: You must have a Module name specified! (use option -h for help)" if @module_name.nil?
|
|
||||||
|
|
||||||
#load yaml file if one was requested
|
|
||||||
if @yaml_config
|
|
||||||
require 'yaml'
|
|
||||||
cfg = YAML.load_file(HERE + @yaml_config)[:generate_module]
|
|
||||||
@path_src = cfg[:defaults][:path_src] if @path_src.nil?
|
|
||||||
@path_inc = cfg[:defaults][:path_inc] if @path_inc.nil?
|
|
||||||
@path_tst = cfg[:defaults][:path_tst] if @path_tst.nil?
|
|
||||||
@update_svn = cfg[:defaults][:update_svn] if @update_svn.nil?
|
|
||||||
@extra_inc = cfg[:includes]
|
|
||||||
@boilerplates = cfg[:boilerplates]
|
|
||||||
else
|
|
||||||
@boilerplates = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
# Create default file paths if none were provided
|
|
||||||
@path_src = HERE + "../src/" if @path_src.nil?
|
|
||||||
@path_inc = @path_src if @path_inc.nil?
|
|
||||||
@path_tst = HERE + "../test/" if @path_tst.nil?
|
|
||||||
@path_src += '/' unless (@path_src[-1] == 47)
|
|
||||||
@path_inc += '/' unless (@path_inc[-1] == 47)
|
|
||||||
@path_tst += '/' unless (@path_tst[-1] == 47)
|
|
||||||
@pattern = 'src' if @pattern.nil?
|
|
||||||
@includes = { :src => [], :inc => [], :tst => [] }
|
|
||||||
@includes.merge!(@extra_inc) unless @extra_inc.nil?
|
|
||||||
|
|
||||||
#create triad definition
|
|
||||||
TRIAD = [ { :ext => '.c', :path => @path_src, :template => TEMPLATE_SRC, :inc => :src, :boilerplate => @boilerplates[:src] },
|
|
||||||
{ :ext => '.h', :path => @path_inc, :template => TEMPLATE_INC, :inc => :inc, :boilerplate => @boilerplates[:inc] },
|
|
||||||
{ :ext => '.c', :path => @path_tst+'Test', :template => TEMPLATE_TST, :inc => :tst, :boilerplate => @boilerplates[:tst] },
|
|
||||||
]
|
|
||||||
|
|
||||||
#prepare the pattern for use
|
|
||||||
@patterns = PATTERNS[@pattern.downcase]
|
|
||||||
raise "ERROR: The design pattern specified isn't one that I recognize!" if @patterns.nil?
|
|
||||||
|
|
||||||
# Assemble the path/names of the files we need to work with.
|
|
||||||
files = []
|
|
||||||
TRIAD.each do |triad|
|
|
||||||
@patterns.each_pair do |pattern_file, pattern_traits|
|
|
||||||
files << {
|
|
||||||
:path => "#{triad[:path]}#{@module_name}#{pattern_file}#{triad[:ext]}",
|
|
||||||
:name => "#{@module_name}#{pattern_file}",
|
|
||||||
:template => triad[:template],
|
|
||||||
:boilerplate => triad[:boilerplate],
|
|
||||||
:includes => case(triad[:inc])
|
|
||||||
when :src then @includes[:src] | pattern_traits[:inc].map{|f| f % [@module_name]}
|
|
||||||
when :inc then @includes[:inc]
|
|
||||||
when :tst then @includes[:tst] | pattern_traits[:inc].map{|f| "Mock#{f}"% [@module_name]}
|
|
||||||
end
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# destroy files if that was what was requested
|
|
||||||
if @destroy
|
|
||||||
files.each do |filespec|
|
|
||||||
file = filespec[:path]
|
|
||||||
if File.exist?(file)
|
|
||||||
if @update_svn
|
|
||||||
`svn delete \"#{file}\" --force`
|
|
||||||
puts "File #{file} deleted and removed from source control"
|
|
||||||
else
|
|
||||||
FileUtils.remove(file)
|
|
||||||
puts "File #{file} deleted"
|
|
||||||
end
|
|
||||||
else
|
|
||||||
puts "File #{file} does not exist so cannot be removed."
|
|
||||||
end
|
|
||||||
end
|
|
||||||
puts "Destroy Complete"
|
|
||||||
exit
|
|
||||||
end
|
|
||||||
|
|
||||||
#Abort if any module already exists
|
|
||||||
files.each do |file|
|
|
||||||
raise "ERROR: File #{file[:name]} already exists. Exiting." if File.exist?(file[:path])
|
|
||||||
end
|
|
||||||
|
|
||||||
# Create Source Modules
|
|
||||||
files.each_with_index do |file, i|
|
|
||||||
File.open(file[:path], 'w') do |f|
|
|
||||||
f.write(file[:boilerplate] % [file[:name]]) unless file[:boilerplate].nil?
|
|
||||||
f.write(file[:template] % [ file[:name],
|
|
||||||
file[:includes].map{|f| "#include \"#{f}\"\n"}.join,
|
|
||||||
file[:name].upcase ]
|
|
||||||
)
|
|
||||||
end
|
|
||||||
if (@update_svn)
|
|
||||||
`svn add \"#{file[:path]}\"`
|
|
||||||
if $?.exitstatus == 0
|
|
||||||
puts "File #{file[:path]} created and added to source control"
|
|
||||||
else
|
|
||||||
puts "File #{file[:path]} created but FAILED adding to source control!"
|
|
||||||
end
|
|
||||||
else
|
|
||||||
puts "File #{file[:path]} created"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
puts 'Generate Complete'
|
|
@ -1,316 +0,0 @@
|
|||||||
# ==========================================
|
|
||||||
# Unity Project - A Test Framework for C
|
|
||||||
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
# [Released under MIT License. Please refer to license.txt for details]
|
|
||||||
# ==========================================
|
|
||||||
|
|
||||||
File.expand_path(File.join(File.dirname(__FILE__),'colour_prompt'))
|
|
||||||
|
|
||||||
class UnityTestRunnerGenerator
|
|
||||||
|
|
||||||
def initialize(options = nil)
|
|
||||||
@options = { :includes => [], :plugins => [], :framework => :unity }
|
|
||||||
case(options)
|
|
||||||
when NilClass then @options
|
|
||||||
when String then @options.merge!(UnityTestRunnerGenerator.grab_config(options))
|
|
||||||
when Hash then @options.merge!(options)
|
|
||||||
else raise "If you specify arguments, it should be a filename or a hash of options"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.grab_config(config_file)
|
|
||||||
options = { :includes => [], :plugins => [], :framework => :unity }
|
|
||||||
unless (config_file.nil? or config_file.empty?)
|
|
||||||
require 'yaml'
|
|
||||||
yaml_guts = YAML.load_file(config_file)
|
|
||||||
options.merge!(yaml_guts[:unity] ? yaml_guts[:unity] : yaml_guts[:cmock])
|
|
||||||
raise "No :unity or :cmock section found in #{config_file}" unless options
|
|
||||||
end
|
|
||||||
return(options)
|
|
||||||
end
|
|
||||||
|
|
||||||
def run(input_file, output_file, options=nil)
|
|
||||||
tests = []
|
|
||||||
testfile_includes = []
|
|
||||||
used_mocks = []
|
|
||||||
|
|
||||||
@options.merge!(options) unless options.nil?
|
|
||||||
module_name = File.basename(input_file)
|
|
||||||
|
|
||||||
#pull required data from source file
|
|
||||||
File.open(input_file, 'r') do |input|
|
|
||||||
tests = find_tests(input)
|
|
||||||
testfile_includes = find_includes(input)
|
|
||||||
used_mocks = find_mocks(testfile_includes)
|
|
||||||
end
|
|
||||||
|
|
||||||
#build runner file
|
|
||||||
generate(input_file, output_file, tests, used_mocks)
|
|
||||||
|
|
||||||
#determine which files were used to return them
|
|
||||||
all_files_used = [input_file, output_file]
|
|
||||||
all_files_used += testfile_includes.map {|filename| filename + '.c'} unless testfile_includes.empty?
|
|
||||||
all_files_used += @options[:includes] unless @options[:includes].empty?
|
|
||||||
return all_files_used.uniq
|
|
||||||
end
|
|
||||||
|
|
||||||
def generate(input_file, output_file, tests, used_mocks)
|
|
||||||
File.open(output_file, 'w') do |output|
|
|
||||||
create_header(output, used_mocks)
|
|
||||||
create_externs(output, tests, used_mocks)
|
|
||||||
create_mock_management(output, used_mocks)
|
|
||||||
create_suite_setup_and_teardown(output)
|
|
||||||
create_reset(output, used_mocks)
|
|
||||||
create_main(output, input_file, tests)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def find_tests(input_file)
|
|
||||||
tests_raw = []
|
|
||||||
tests_args = []
|
|
||||||
tests_and_line_numbers = []
|
|
||||||
|
|
||||||
input_file.rewind
|
|
||||||
source_raw = input_file.read
|
|
||||||
source_scrubbed = source_raw.gsub(/\/\/.*$/, '') # remove line comments
|
|
||||||
source_scrubbed = source_scrubbed.gsub(/\/\*.*?\*\//m, '') # remove block comments
|
|
||||||
lines = source_scrubbed.split(/(^\s*\#.*$) # Treat preprocessor directives as a logical line
|
|
||||||
| (;|\{|\}) /x) # Match ;, {, and } as end of lines
|
|
||||||
|
|
||||||
lines.each_with_index do |line, index|
|
|
||||||
#find tests
|
|
||||||
if line =~ /^((?:\s*TEST_CASE\s*\(.*?\)\s*)*)\s*void\s+(test.*?)\s*\(\s*(.*)\s*\)/
|
|
||||||
arguments = $1
|
|
||||||
name = $2
|
|
||||||
call = $3
|
|
||||||
args = nil
|
|
||||||
if (@options[:use_param_tests] and !arguments.empty?)
|
|
||||||
args = []
|
|
||||||
arguments.scan(/\s*TEST_CASE\s*\((.*)\)\s*$/) {|a| args << a[0]}
|
|
||||||
end
|
|
||||||
tests_and_line_numbers << { :test => name, :args => args, :call => call, :line_number => 0 }
|
|
||||||
tests_args = []
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
#determine line numbers and create tests to run
|
|
||||||
source_lines = source_raw.split("\n")
|
|
||||||
source_index = 0;
|
|
||||||
tests_and_line_numbers.size.times do |i|
|
|
||||||
source_lines[source_index..-1].each_with_index do |line, index|
|
|
||||||
if (line =~ /#{tests_and_line_numbers[i][:test]}/)
|
|
||||||
source_index += index
|
|
||||||
tests_and_line_numbers[i][:line_number] = source_index + 1
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return tests_and_line_numbers
|
|
||||||
end
|
|
||||||
|
|
||||||
def find_includes(input_file)
|
|
||||||
input_file.rewind
|
|
||||||
|
|
||||||
#read in file
|
|
||||||
source = input_file.read
|
|
||||||
|
|
||||||
#remove comments (block and line, in three steps to ensure correct precedence)
|
|
||||||
source.gsub!(/\/\/(?:.+\/\*|\*(?:$|[^\/])).*$/, '') # remove line comments that comment out the start of blocks
|
|
||||||
source.gsub!(/\/\*.*?\*\//m, '') # remove block comments
|
|
||||||
source.gsub!(/\/\/.*$/, '') # remove line comments (all that remain)
|
|
||||||
|
|
||||||
#parse out includes
|
|
||||||
return source.scan(/^\s*#include\s+\"\s*(.+)\.[hH]\s*\"/).flatten
|
|
||||||
end
|
|
||||||
|
|
||||||
def find_mocks(includes)
|
|
||||||
mock_headers = []
|
|
||||||
includes.each do |include_file|
|
|
||||||
mock_headers << File.basename(include_file) if (include_file =~ /^mock/i)
|
|
||||||
end
|
|
||||||
return mock_headers
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_header(output, mocks)
|
|
||||||
output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */')
|
|
||||||
create_runtest(output, mocks)
|
|
||||||
output.puts("\n//=======Automagically Detected Files To Include=====")
|
|
||||||
output.puts("#include \"#{@options[:framework].to_s}.h\"")
|
|
||||||
output.puts('#include "cmock.h"') unless (mocks.empty?)
|
|
||||||
@options[:includes].flatten.uniq.compact.each do |inc|
|
|
||||||
output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}")
|
|
||||||
end
|
|
||||||
output.puts('#include <setjmp.h>')
|
|
||||||
output.puts('#include <stdio.h>')
|
|
||||||
output.puts('#include "CException.h"') if @options[:plugins].include?(:cexception)
|
|
||||||
mocks.each do |mock|
|
|
||||||
output.puts("#include \"#{mock.gsub('.h','')}.h\"")
|
|
||||||
end
|
|
||||||
if @options[:enforce_strict_ordering]
|
|
||||||
output.puts('')
|
|
||||||
output.puts('int GlobalExpectCount;')
|
|
||||||
output.puts('int GlobalVerifyOrder;')
|
|
||||||
output.puts('char* GlobalOrderError;')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_externs(output, tests, mocks)
|
|
||||||
output.puts("\n//=======External Functions This Runner Calls=====")
|
|
||||||
output.puts("extern void setUp(void);")
|
|
||||||
output.puts("extern void tearDown(void);")
|
|
||||||
tests.each do |test|
|
|
||||||
output.puts("extern void #{test[:test]}(#{test[:call] || 'void'});")
|
|
||||||
end
|
|
||||||
output.puts('')
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_mock_management(output, mocks)
|
|
||||||
unless (mocks.empty?)
|
|
||||||
output.puts("\n//=======Mock Management=====")
|
|
||||||
output.puts("static void CMock_Init(void)")
|
|
||||||
output.puts("{")
|
|
||||||
if @options[:enforce_strict_ordering]
|
|
||||||
output.puts(" GlobalExpectCount = 0;")
|
|
||||||
output.puts(" GlobalVerifyOrder = 0;")
|
|
||||||
output.puts(" GlobalOrderError = NULL;")
|
|
||||||
end
|
|
||||||
mocks.each do |mock|
|
|
||||||
mock_clean = mock.gsub(/(?:-|\s+)/, "_")
|
|
||||||
output.puts(" #{mock_clean}_Init();")
|
|
||||||
end
|
|
||||||
output.puts("}\n")
|
|
||||||
|
|
||||||
output.puts("static void CMock_Verify(void)")
|
|
||||||
output.puts("{")
|
|
||||||
mocks.each do |mock|
|
|
||||||
mock_clean = mock.gsub(/(?:-|\s+)/, "_")
|
|
||||||
output.puts(" #{mock_clean}_Verify();")
|
|
||||||
end
|
|
||||||
output.puts("}\n")
|
|
||||||
|
|
||||||
output.puts("static void CMock_Destroy(void)")
|
|
||||||
output.puts("{")
|
|
||||||
mocks.each do |mock|
|
|
||||||
mock_clean = mock.gsub(/(?:-|\s+)/, "_")
|
|
||||||
output.puts(" #{mock_clean}_Destroy();")
|
|
||||||
end
|
|
||||||
output.puts("}\n")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_suite_setup_and_teardown(output)
|
|
||||||
unless (@options[:suite_setup].nil?)
|
|
||||||
output.puts("\n//=======Suite Setup=====")
|
|
||||||
output.puts("static int suite_setup(void)")
|
|
||||||
output.puts("{")
|
|
||||||
output.puts(@options[:suite_setup])
|
|
||||||
output.puts("}")
|
|
||||||
end
|
|
||||||
unless (@options[:suite_teardown].nil?)
|
|
||||||
output.puts("\n//=======Suite Teardown=====")
|
|
||||||
output.puts("static int suite_teardown(int num_failures)")
|
|
||||||
output.puts("{")
|
|
||||||
output.puts(@options[:suite_teardown])
|
|
||||||
output.puts("}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_runtest(output, used_mocks)
|
|
||||||
cexception = @options[:plugins].include? :cexception
|
|
||||||
va_args1 = @options[:use_param_tests] ? ', ...' : ''
|
|
||||||
va_args2 = @options[:use_param_tests] ? '__VA_ARGS__' : ''
|
|
||||||
output.puts("\n//=======Test Runner Used To Run Each Test Below=====")
|
|
||||||
output.puts("#define RUN_TEST_NO_ARGS") if @options[:use_param_tests]
|
|
||||||
output.puts("#define RUN_TEST(TestFunc, TestLineNum#{va_args1}) \\")
|
|
||||||
output.puts("{ \\")
|
|
||||||
output.puts(" Unity.CurrentTestName = #TestFunc#{va_args2.empty? ? '' : " \"(\" ##{va_args2} \")\""}; \\")
|
|
||||||
output.puts(" Unity.CurrentTestLineNumber = TestLineNum; \\")
|
|
||||||
output.puts(" Unity.NumberOfTests++; \\")
|
|
||||||
output.puts(" if (TEST_PROTECT()) \\")
|
|
||||||
output.puts(" { \\")
|
|
||||||
output.puts(" CEXCEPTION_T e; \\") if cexception
|
|
||||||
output.puts(" Try { \\") if cexception
|
|
||||||
output.puts(" CMock_Init(); \\") unless (used_mocks.empty?)
|
|
||||||
output.puts(" setUp(); \\")
|
|
||||||
output.puts(" TestFunc(#{va_args2}); \\")
|
|
||||||
output.puts(" CMock_Verify(); \\") unless (used_mocks.empty?)
|
|
||||||
output.puts(" } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, \"Unhandled Exception!\"); } \\") if cexception
|
|
||||||
output.puts(" } \\")
|
|
||||||
output.puts(" CMock_Destroy(); \\") unless (used_mocks.empty?)
|
|
||||||
output.puts(" if (TEST_PROTECT() && !TEST_IS_IGNORED) \\")
|
|
||||||
output.puts(" { \\")
|
|
||||||
output.puts(" tearDown(); \\")
|
|
||||||
output.puts(" } \\")
|
|
||||||
output.puts(" UnityConcludeTest(); \\")
|
|
||||||
output.puts("}\n")
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_reset(output, used_mocks)
|
|
||||||
output.puts("\n//=======Test Reset Option=====")
|
|
||||||
output.puts("void resetTest()")
|
|
||||||
output.puts("{")
|
|
||||||
output.puts(" CMock_Verify();") unless (used_mocks.empty?)
|
|
||||||
output.puts(" CMock_Destroy();") unless (used_mocks.empty?)
|
|
||||||
output.puts(" tearDown();")
|
|
||||||
output.puts(" CMock_Init();") unless (used_mocks.empty?)
|
|
||||||
output.puts(" setUp();")
|
|
||||||
output.puts("}")
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_main(output, filename, tests)
|
|
||||||
output.puts("\n\n//=======MAIN=====")
|
|
||||||
output.puts("int main(void)")
|
|
||||||
output.puts("{")
|
|
||||||
output.puts(" suite_setup();") unless @options[:suite_setup].nil?
|
|
||||||
output.puts(" Unity.TestFile = \"#{filename}\";")
|
|
||||||
output.puts(" UnityBegin();")
|
|
||||||
if (@options[:use_param_tests])
|
|
||||||
tests.each do |test|
|
|
||||||
if ((test[:args].nil?) or (test[:args].empty?))
|
|
||||||
output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]}, RUN_TEST_NO_ARGS);")
|
|
||||||
else
|
|
||||||
test[:args].each {|args| output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]}, #{args});")}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
tests.each { |test| output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]});") }
|
|
||||||
end
|
|
||||||
output.puts()
|
|
||||||
output.puts(" return #{@options[:suite_teardown].nil? ? "" : "suite_teardown"}(UnityEnd());")
|
|
||||||
output.puts("}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
if ($0 == __FILE__)
|
|
||||||
options = { :includes => [] }
|
|
||||||
yaml_file = nil
|
|
||||||
|
|
||||||
#parse out all the options first
|
|
||||||
ARGV.reject! do |arg|
|
|
||||||
case(arg)
|
|
||||||
when '-cexception'
|
|
||||||
options[:plugins] = [:cexception]; true
|
|
||||||
when /\.*\.yml/
|
|
||||||
options = UnityTestRunnerGenerator.grab_config(arg); true
|
|
||||||
else false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
#make sure there is at least one parameter left (the input file)
|
|
||||||
if !ARGV[0]
|
|
||||||
puts ["usage: ruby #{__FILE__} (yaml) (options) input_test_file output_test_runner (includes)",
|
|
||||||
" blah.yml - will use config options in the yml file (see docs)",
|
|
||||||
" -cexception - include cexception support"].join("\n")
|
|
||||||
exit 1
|
|
||||||
end
|
|
||||||
|
|
||||||
#create the default test runner name if not specified
|
|
||||||
ARGV[1] = ARGV[0].gsub(".c","_Runner.c") if (!ARGV[1])
|
|
||||||
|
|
||||||
#everything else is an include file
|
|
||||||
options[:includes] ||= (ARGV.slice(2..-1).flatten.compact) if (ARGV.size > 2)
|
|
||||||
|
|
||||||
UnityTestRunnerGenerator.new(options).run(ARGV[0], ARGV[1])
|
|
||||||
end
|
|
@ -1,23 +0,0 @@
|
|||||||
# ==========================================
|
|
||||||
# Unity Project - A Test Framework for C
|
|
||||||
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
# [Released under MIT License. Please refer to license.txt for details]
|
|
||||||
# ==========================================
|
|
||||||
|
|
||||||
require'yaml'
|
|
||||||
|
|
||||||
module RakefileHelpers
|
|
||||||
class TestFileFilter
|
|
||||||
def initialize(all_files = false)
|
|
||||||
@all_files = all_files
|
|
||||||
if not @all_files == true
|
|
||||||
if File.exist?('test_file_filter.yml')
|
|
||||||
filters = YAML.load_file( 'test_file_filter.yml' )
|
|
||||||
@all_files, @only_files, @exclude_files =
|
|
||||||
filters[:all_files], filters[:only_files], filters[:exclude_files]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
attr_accessor :all_files, :only_files, :exclude_files
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,139 +0,0 @@
|
|||||||
# ==========================================
|
|
||||||
# Unity Project - A Test Framework for C
|
|
||||||
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
# [Released under MIT License. Please refer to license.txt for details]
|
|
||||||
# ==========================================
|
|
||||||
|
|
||||||
#!/usr/bin/ruby
|
|
||||||
#
|
|
||||||
# unity_test_summary.rb
|
|
||||||
#
|
|
||||||
require 'fileutils'
|
|
||||||
require 'set'
|
|
||||||
|
|
||||||
class UnityTestSummary
|
|
||||||
include FileUtils::Verbose
|
|
||||||
|
|
||||||
attr_reader :report, :total_tests, :failures, :ignored
|
|
||||||
|
|
||||||
def initialize
|
|
||||||
@report = ''
|
|
||||||
@total_tests = 0
|
|
||||||
@failures = 0
|
|
||||||
@ignored = 0
|
|
||||||
end
|
|
||||||
|
|
||||||
def run
|
|
||||||
# Clean up result file names
|
|
||||||
results = @targets.map {|target| target.gsub(/\\/,'/')}
|
|
||||||
|
|
||||||
# Dig through each result file, looking for details on pass/fail:
|
|
||||||
failure_output = []
|
|
||||||
ignore_output = []
|
|
||||||
|
|
||||||
results.each do |result_file|
|
|
||||||
lines = File.readlines(result_file).map { |line| line.chomp }
|
|
||||||
if lines.length == 0
|
|
||||||
raise "Empty test result file: #{result_file}"
|
|
||||||
else
|
|
||||||
output = get_details(result_file, lines)
|
|
||||||
failure_output << output[:failures] unless output[:failures].empty?
|
|
||||||
ignore_output << output[:ignores] unless output[:ignores].empty?
|
|
||||||
tests,failures,ignored = parse_test_summary(lines)
|
|
||||||
@total_tests += tests
|
|
||||||
@failures += failures
|
|
||||||
@ignored += ignored
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if @ignored > 0
|
|
||||||
@report += "\n"
|
|
||||||
@report += "--------------------------\n"
|
|
||||||
@report += "UNITY IGNORED TEST SUMMARY\n"
|
|
||||||
@report += "--------------------------\n"
|
|
||||||
@report += ignore_output.flatten.join("\n")
|
|
||||||
end
|
|
||||||
|
|
||||||
if @failures > 0
|
|
||||||
@report += "\n"
|
|
||||||
@report += "--------------------------\n"
|
|
||||||
@report += "UNITY FAILED TEST SUMMARY\n"
|
|
||||||
@report += "--------------------------\n"
|
|
||||||
@report += failure_output.flatten.join("\n")
|
|
||||||
end
|
|
||||||
|
|
||||||
@report += "\n"
|
|
||||||
@report += "--------------------------\n"
|
|
||||||
@report += "OVERALL UNITY TEST SUMMARY\n"
|
|
||||||
@report += "--------------------------\n"
|
|
||||||
@report += "#{@total_tests} TOTAL TESTS #{@failures} TOTAL FAILURES #{@ignored} IGNORED\n"
|
|
||||||
@report += "\n"
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_targets(target_array)
|
|
||||||
@targets = target_array
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_root_path(path)
|
|
||||||
@root = path
|
|
||||||
end
|
|
||||||
|
|
||||||
def usage(err_msg=nil)
|
|
||||||
puts "\nERROR: "
|
|
||||||
puts err_msg if err_msg
|
|
||||||
puts "\nUsage: unity_test_summary.rb result_file_directory/ root_path/"
|
|
||||||
puts " result_file_directory - The location of your results files."
|
|
||||||
puts " Defaults to current directory if not specified."
|
|
||||||
puts " Should end in / if specified."
|
|
||||||
puts " root_path - Helpful for producing more verbose output if using relative paths."
|
|
||||||
exit 1
|
|
||||||
end
|
|
||||||
|
|
||||||
protected
|
|
||||||
|
|
||||||
def get_details(result_file, lines)
|
|
||||||
results = { :failures => [], :ignores => [], :successes => [] }
|
|
||||||
lines.each do |line|
|
|
||||||
src_file,src_line,test_name,status,msg = line.split(/:/)
|
|
||||||
line_out = ((@root and (@root != 0)) ? "#{@root}#{line}" : line ).gsub(/\//, "\\")
|
|
||||||
case(status)
|
|
||||||
when 'IGNORE' then results[:ignores] << line_out
|
|
||||||
when 'FAIL' then results[:failures] << line_out
|
|
||||||
when 'PASS' then results[:successes] << line_out
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return results
|
|
||||||
end
|
|
||||||
|
|
||||||
def parse_test_summary(summary)
|
|
||||||
if summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ }
|
|
||||||
[$1.to_i,$2.to_i,$3.to_i]
|
|
||||||
else
|
|
||||||
raise "Couldn't parse test results: #{summary}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def here; File.expand_path(File.dirname(__FILE__)); end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
if $0 == __FILE__
|
|
||||||
uts = UnityTestSummary.new
|
|
||||||
begin
|
|
||||||
#look in the specified or current directory for result files
|
|
||||||
ARGV[0] ||= './'
|
|
||||||
targets = "#{ARGV[0].gsub(/\\/, '/')}*.test*"
|
|
||||||
results = Dir[targets]
|
|
||||||
raise "No *.testpass or *.testfail files found in '#{targets}'" if results.empty?
|
|
||||||
uts.set_targets(results)
|
|
||||||
|
|
||||||
#set the root path
|
|
||||||
ARGV[1] ||= File.expand_path(File.dirname(__FILE__)) + '/'
|
|
||||||
uts.set_root_path(ARGV[1])
|
|
||||||
|
|
||||||
#run the summarizer
|
|
||||||
puts uts.run
|
|
||||||
rescue Exception => e
|
|
||||||
uts.usage e.message
|
|
||||||
end
|
|
||||||
end
|
|
Binary file not shown.
Binary file not shown.
@ -1,216 +0,0 @@
|
|||||||
==============
|
|
||||||
Unity Test API
|
|
||||||
==============
|
|
||||||
|
|
||||||
[Copyright (c) 2007 - 2012 Unity Project by Mike Karlesky, Mark VanderVoord, and Greg Williams]
|
|
||||||
|
|
||||||
-------------
|
|
||||||
Running Tests
|
|
||||||
-------------
|
|
||||||
|
|
||||||
RUN_TEST(func, linenum)
|
|
||||||
|
|
||||||
Each Test is run within the macro RUN_TEST. This macro performs necessary setup before the test is called and handles cleanup and result tabulation afterwards.
|
|
||||||
|
|
||||||
--------------
|
|
||||||
Ignoring Tests
|
|
||||||
--------------
|
|
||||||
|
|
||||||
There are times when a test is incomplete or not valid for some reason. At these times, TEST_IGNORE can be called. Control will immediately be returned to the caller of the test, and no failures will be returned.
|
|
||||||
|
|
||||||
TEST_IGNORE()
|
|
||||||
|
|
||||||
Ignore this test and return immediately
|
|
||||||
|
|
||||||
TEST_IGNORE_MESSAGE (message)
|
|
||||||
|
|
||||||
Ignore this test and return immediately. Output a message stating why the test was ignored.
|
|
||||||
|
|
||||||
--------------
|
|
||||||
Aborting Tests
|
|
||||||
--------------
|
|
||||||
|
|
||||||
There are times when a test will contain an infinite loop on error conditions, or there may be reason to escape from the test early without executing the rest of the test. A pair of macros support this functionality in Unity. The first (TEST_PROTECT) sets up the feature, and handles emergency abort cases. TEST_ABORT can then be used at any time within the tests to return to the last TEST_PROTECT call.
|
|
||||||
|
|
||||||
TEST_PROTECT()
|
|
||||||
|
|
||||||
Setup and Catch macro
|
|
||||||
|
|
||||||
TEST_ABORT()
|
|
||||||
|
|
||||||
Abort Test macro
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
if (TEST_PROTECT() == 0)
|
|
||||||
{
|
|
||||||
MyTest();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
If MyTest calls TEST_ABORT, program control will immediately return to TEST_PROTECT with a non-zero return value.
|
|
||||||
|
|
||||||
|
|
||||||
=======================
|
|
||||||
Unity Assertion Summary
|
|
||||||
=======================
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
Basic Validity Tests
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
TEST_ASSERT_TRUE(condition)
|
|
||||||
|
|
||||||
Evaluates whatever code is in condition and fails if it evaluates to false
|
|
||||||
|
|
||||||
TEST_ASSERT_FALSE(condition)
|
|
||||||
|
|
||||||
Evaluates whatever code is in condition and fails if it evaluates to true
|
|
||||||
|
|
||||||
TEST_ASSERT(condition)
|
|
||||||
|
|
||||||
Another way of calling TEST_ASSERT_TRUE
|
|
||||||
|
|
||||||
TEST_ASSERT_UNLESS(condition)
|
|
||||||
|
|
||||||
Another way of calling TEST_ASSERT_FALSE
|
|
||||||
|
|
||||||
TEST_FAIL()
|
|
||||||
TEST_FAIL_MESSAGE(message)
|
|
||||||
|
|
||||||
This test is automatically marked as a failure. The message is output stating why.
|
|
||||||
|
|
||||||
------------------------------
|
|
||||||
Numerical Assertions: Integers
|
|
||||||
------------------------------
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_INT(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_INT8(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_INT16(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_INT32(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_INT64(expected, actual)
|
|
||||||
|
|
||||||
Compare two integers for equality and display errors as signed integers. A cast will be performed
|
|
||||||
to your natural integer size so often this can just be used. When you need to specify the exact size,
|
|
||||||
like when comparing arrays, you can use a specific version:
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_UINT(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_UINT8(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_UINT16(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_UINT32(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_UINT64(expected, actual)
|
|
||||||
|
|
||||||
Compare two integers for equality and display errors as unsigned integers. Like INT, there are
|
|
||||||
variants for different sizes also.
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_HEX(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_HEX8(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_HEX16(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_HEX32(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_HEX64(expected, actual)
|
|
||||||
|
|
||||||
Compares two integers for equality and display errors as hexadecimal. Like the other integer comparisons,
|
|
||||||
you can specify the size... here the size will also effect how many nibbles are shown (for example, HEX16
|
|
||||||
will show 4 nibbles).
|
|
||||||
|
|
||||||
_ARRAY
|
|
||||||
|
|
||||||
You can append _ARRAY to any of these macros to make an array comparison of that type. Here you will
|
|
||||||
need to care a bit more about the actual size of the value being checked. You will also specify an
|
|
||||||
additional argument which is the number of elements to compare. For example:
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, elements)
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL(expected, actual)
|
|
||||||
|
|
||||||
Another way of calling TEST_ASSERT_EQUAL_INT
|
|
||||||
|
|
||||||
TEST_ASSERT_INT_WITHIN(delta, expected, actual)
|
|
||||||
|
|
||||||
Asserts that the actual value is within plus or minus delta of the expected value. This also comes in
|
|
||||||
size specific variants.
|
|
||||||
|
|
||||||
|
|
||||||
-----------------------------
|
|
||||||
Numerical Assertions: Bitwise
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
TEST_ASSERT_BITS(mask, expected, actual)
|
|
||||||
|
|
||||||
Use an integer mask to specify which bits should be compared between two other integers. High bits in the mask are compared, low bits ignored.
|
|
||||||
|
|
||||||
TEST_ASSERT_BITS_HIGH(mask, actual)
|
|
||||||
|
|
||||||
Use an integer mask to specify which bits should be inspected to determine if they are all set high. High bits in the mask are compared, low bits ignored.
|
|
||||||
|
|
||||||
TEST_ASSERT_BITS_LOW(mask, actual)
|
|
||||||
|
|
||||||
Use an integer mask to specify which bits should be inspected to determine if they are all set low. High bits in the mask are compared, low bits ignored.
|
|
||||||
|
|
||||||
TEST_ASSERT_BIT_HIGH(bit, actual)
|
|
||||||
|
|
||||||
Test a single bit and verify that it is high. The bit is specified 0-31 for a 32-bit integer.
|
|
||||||
|
|
||||||
TEST_ASSERT_BIT_LOW(bit, actual)
|
|
||||||
|
|
||||||
Test a single bit and verify that it is low. The bit is specified 0-31 for a 32-bit integer.
|
|
||||||
|
|
||||||
----------------------------
|
|
||||||
Numerical Assertions: Floats
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual)
|
|
||||||
|
|
||||||
Asserts that the actual value is within plus or minus delta of the expected value.
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_FLOAT(expected, actual)
|
|
||||||
TEST_ASSERT_EQUAL_DOUBLE(expected, actual)
|
|
||||||
|
|
||||||
Asserts that two floating point values are "equal" within a small % delta of the expected value.
|
|
||||||
|
|
||||||
-----------------
|
|
||||||
String Assertions
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_STRING(expected, actual)
|
|
||||||
|
|
||||||
Compare two null-terminate strings. Fail if any character is different or if the lengths are different.
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message)
|
|
||||||
|
|
||||||
Compare two null-terminate strings. Fail if any character is different or if the lengths are different. Output a custom message on failure.
|
|
||||||
|
|
||||||
------------------
|
|
||||||
Pointer Assertions
|
|
||||||
------------------
|
|
||||||
|
|
||||||
Most pointer operations can be performed by simply using the integer comparisons above. However, a couple of special cases are added for clarity.
|
|
||||||
|
|
||||||
TEST_ASSERT_NULL(pointer)
|
|
||||||
|
|
||||||
Fails if the pointer is not equal to NULL
|
|
||||||
|
|
||||||
TEST_ASSERT_NOT_NULL(pointer)
|
|
||||||
|
|
||||||
Fails if the pointer is equal to NULL
|
|
||||||
|
|
||||||
|
|
||||||
-----------------
|
|
||||||
Memory Assertions
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
TEST_ASSERT_EQUAL_MEMORY(expected, actual, len)
|
|
||||||
|
|
||||||
Compare two blocks of memory. This is a good generic assertion for types that can't be coerced into acting like
|
|
||||||
standard types... but since it's a memory compare, you have to be careful that your data types are packed.
|
|
||||||
|
|
||||||
--------
|
|
||||||
_MESSAGE
|
|
||||||
--------
|
|
||||||
|
|
||||||
you can append _MESSAGE to any of the macros to make them take an additional argument. This argument
|
|
||||||
is a string that will be printed at the end of the failure strings. This is useful for specifying more
|
|
||||||
information about the problem.
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
Copyright (c) 2007-2010 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
|
||||||
obtaining a copy of this software and associated documentation
|
|
||||||
files (the "Software"), to deal in the Software without
|
|
||||||
restriction, including without limitation the rights to use,
|
|
||||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the
|
|
||||||
Software is furnished to do so, subject to the following
|
|
||||||
conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
The end-user documentation included with the redistribution, if
|
|
||||||
any, must include the following acknowledgment: "This product
|
|
||||||
includes software developed for the Unity Project, by Mike Karlesky,
|
|
||||||
Mark VanderVoord, and Greg Williams and other contributors", in
|
|
||||||
the same place and form as other third-party acknowledgments.
|
|
||||||
Alternately, this acknowledgment may appear in the software
|
|
||||||
itself, in the same form and location as other such third-party
|
|
||||||
acknowledgments.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
||||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -1,9 +0,0 @@
|
|||||||
Copyright (c) 2010 James Grenning and Contributed to Unity Project
|
|
||||||
|
|
||||||
Unity Project - A Test Framework for C
|
|
||||||
Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
[Released under MIT License. Please refer to license.txt for details]
|
|
||||||
|
|
||||||
This Framework is an optional add-on to Unity. By including unity_framework.h in place of unity.h,
|
|
||||||
you may now work with Unity in a manner similar to CppUTest. This framework adds the concepts of
|
|
||||||
test groups and gives finer control of your tests over the command line.
|
|
@ -1,377 +0,0 @@
|
|||||||
//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
|
|
||||||
/* ==========================================
|
|
||||||
Unity Project - A Test Framework for C
|
|
||||||
Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
[Released under MIT License. Please refer to license.txt for details]
|
|
||||||
========================================== */
|
|
||||||
|
|
||||||
#include "unity_fixture.h"
|
|
||||||
#include "unity_internals.h"
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
UNITY_FIXTURE_T UnityFixture;
|
|
||||||
|
|
||||||
//If you decide to use the function pointer approach.
|
|
||||||
int (*outputChar)(int) = putchar;
|
|
||||||
|
|
||||||
int verbose = 0;
|
|
||||||
|
|
||||||
void setUp(void) { /*does nothing*/ }
|
|
||||||
void tearDown(void) { /*does nothing*/ }
|
|
||||||
|
|
||||||
void announceTestRun(unsigned int runNumber)
|
|
||||||
{
|
|
||||||
UnityPrint("Unity test run ");
|
|
||||||
UnityPrintNumber(runNumber+1);
|
|
||||||
UnityPrint(" of ");
|
|
||||||
UnityPrintNumber(UnityFixture.RepeatCount);
|
|
||||||
UNITY_OUTPUT_CHAR('\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
int UnityMain(int argc, char* argv[], void (*runAllTests)())
|
|
||||||
{
|
|
||||||
int result = UnityGetCommandLineOptions(argc, argv);
|
|
||||||
unsigned int r;
|
|
||||||
if (result != 0)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
for (r = 0; r < UnityFixture.RepeatCount; r++)
|
|
||||||
{
|
|
||||||
announceTestRun(r);
|
|
||||||
UnityBegin();
|
|
||||||
runAllTests();
|
|
||||||
UNITY_OUTPUT_CHAR('\n');
|
|
||||||
UnityEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
return UnityFailureCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
static int selected(const char * filter, const char * name)
|
|
||||||
{
|
|
||||||
if (filter == 0)
|
|
||||||
return 1;
|
|
||||||
return strstr(name, filter) ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int testSelected(const char* test)
|
|
||||||
{
|
|
||||||
return selected(UnityFixture.NameFilter, test);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int groupSelected(const char* group)
|
|
||||||
{
|
|
||||||
return selected(UnityFixture.GroupFilter, group);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void runTestCase()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void UnityTestRunner(unityfunction* setup,
|
|
||||||
unityfunction* testBody,
|
|
||||||
unityfunction* teardown,
|
|
||||||
const char * printableName,
|
|
||||||
const char * group,
|
|
||||||
const char * name,
|
|
||||||
const char * file, int line)
|
|
||||||
{
|
|
||||||
if (testSelected(name) && groupSelected(group))
|
|
||||||
{
|
|
||||||
Unity.CurrentTestFailed = 0;
|
|
||||||
Unity.TestFile = file;
|
|
||||||
Unity.CurrentTestName = printableName;
|
|
||||||
Unity.CurrentTestLineNumber = line;
|
|
||||||
if (!UnityFixture.Verbose)
|
|
||||||
UNITY_OUTPUT_CHAR('.');
|
|
||||||
else
|
|
||||||
UnityPrint(printableName);
|
|
||||||
|
|
||||||
Unity.NumberOfTests++;
|
|
||||||
UnityMalloc_StartTest();
|
|
||||||
UnityPointer_Init();
|
|
||||||
|
|
||||||
runTestCase();
|
|
||||||
if (TEST_PROTECT())
|
|
||||||
{
|
|
||||||
setup();
|
|
||||||
testBody();
|
|
||||||
}
|
|
||||||
if (TEST_PROTECT())
|
|
||||||
{
|
|
||||||
teardown();
|
|
||||||
}
|
|
||||||
if (TEST_PROTECT())
|
|
||||||
{
|
|
||||||
UnityPointer_UndoAllSets();
|
|
||||||
if (!Unity.CurrentTestFailed)
|
|
||||||
UnityMalloc_EndTest();
|
|
||||||
}
|
|
||||||
UnityConcludeFixtureTest();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void UnityIgnoreTest()
|
|
||||||
{
|
|
||||||
Unity.NumberOfTests++;
|
|
||||||
Unity.CurrentTestIgnored = 1;
|
|
||||||
UNITY_OUTPUT_CHAR('!');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
//Malloc and free stuff
|
|
||||||
//
|
|
||||||
#define MALLOC_DONT_FAIL -1
|
|
||||||
static int malloc_count;
|
|
||||||
static int malloc_fail_countdown = MALLOC_DONT_FAIL;
|
|
||||||
|
|
||||||
void UnityMalloc_StartTest()
|
|
||||||
{
|
|
||||||
malloc_count = 0;
|
|
||||||
malloc_fail_countdown = MALLOC_DONT_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UnityMalloc_EndTest()
|
|
||||||
{
|
|
||||||
malloc_fail_countdown = MALLOC_DONT_FAIL;
|
|
||||||
if (malloc_count != 0)
|
|
||||||
{
|
|
||||||
TEST_FAIL_MESSAGE("This test leaks!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void UnityMalloc_MakeMallocFailAfterCount(int countdown)
|
|
||||||
{
|
|
||||||
malloc_fail_countdown = countdown;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef malloc
|
|
||||||
#undef malloc
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef free
|
|
||||||
#undef free
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
typedef struct GuardBytes
|
|
||||||
{
|
|
||||||
int size;
|
|
||||||
char guard[sizeof(int)];
|
|
||||||
} Guard;
|
|
||||||
|
|
||||||
|
|
||||||
static const char * end = "END";
|
|
||||||
|
|
||||||
void * unity_malloc(size_t size)
|
|
||||||
{
|
|
||||||
char* mem;
|
|
||||||
Guard* guard;
|
|
||||||
|
|
||||||
if (malloc_fail_countdown != MALLOC_DONT_FAIL)
|
|
||||||
{
|
|
||||||
if (malloc_fail_countdown == 0)
|
|
||||||
return 0;
|
|
||||||
malloc_fail_countdown--;
|
|
||||||
}
|
|
||||||
|
|
||||||
malloc_count++;
|
|
||||||
|
|
||||||
guard = (Guard*)malloc(size + sizeof(Guard) + 4);
|
|
||||||
guard->size = size;
|
|
||||||
mem = (char*)&(guard[1]);
|
|
||||||
memcpy(&mem[size], end, strlen(end) + 1);
|
|
||||||
|
|
||||||
return (void*)mem;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int isOverrun(void * mem)
|
|
||||||
{
|
|
||||||
Guard* guard = (Guard*)mem;
|
|
||||||
char* memAsChar = (char*)mem;
|
|
||||||
guard--;
|
|
||||||
|
|
||||||
return strcmp(&memAsChar[guard->size], end) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void release_memory(void * mem)
|
|
||||||
{
|
|
||||||
Guard* guard = (Guard*)mem;
|
|
||||||
guard--;
|
|
||||||
|
|
||||||
malloc_count--;
|
|
||||||
free(guard);
|
|
||||||
}
|
|
||||||
|
|
||||||
void unity_free(void * mem)
|
|
||||||
{
|
|
||||||
int overrun = isOverrun(mem);//strcmp(&memAsChar[guard->size], end) != 0;
|
|
||||||
release_memory(mem);
|
|
||||||
if (overrun)
|
|
||||||
{
|
|
||||||
TEST_FAIL_MESSAGE("Buffer overrun detected during free()");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void* unity_calloc(size_t num, size_t size)
|
|
||||||
{
|
|
||||||
void* mem = unity_malloc(num * size);
|
|
||||||
memset(mem, 0, num*size);
|
|
||||||
return mem;
|
|
||||||
}
|
|
||||||
|
|
||||||
void* unity_realloc(void * oldMem, size_t size)
|
|
||||||
{
|
|
||||||
Guard* guard = (Guard*)oldMem;
|
|
||||||
// char* memAsChar = (char*)oldMem;
|
|
||||||
void* newMem;
|
|
||||||
|
|
||||||
if (oldMem == 0)
|
|
||||||
return unity_malloc(size);
|
|
||||||
|
|
||||||
guard--;
|
|
||||||
if (isOverrun(oldMem))
|
|
||||||
{
|
|
||||||
release_memory(oldMem);
|
|
||||||
TEST_FAIL_MESSAGE("Buffer overrun detected during realloc()");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (size == 0)
|
|
||||||
{
|
|
||||||
release_memory(oldMem);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (guard->size >= size)
|
|
||||||
return oldMem;
|
|
||||||
|
|
||||||
newMem = unity_malloc(size);
|
|
||||||
memcpy(newMem, oldMem, guard->size);
|
|
||||||
unity_free(oldMem);
|
|
||||||
return newMem;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------
|
|
||||||
//Automatic pointer restoration functions
|
|
||||||
typedef struct _PointerPair
|
|
||||||
{
|
|
||||||
struct _PointerPair * next;
|
|
||||||
void ** pointer;
|
|
||||||
void * old_value;
|
|
||||||
} PointerPair;
|
|
||||||
|
|
||||||
enum {MAX_POINTERS=50};
|
|
||||||
static PointerPair pointer_store[MAX_POINTERS];
|
|
||||||
static int pointer_index = 0;
|
|
||||||
|
|
||||||
void UnityPointer_Init()
|
|
||||||
{
|
|
||||||
pointer_index = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UnityPointer_Set(void ** pointer, void * newValue)
|
|
||||||
{
|
|
||||||
if (pointer_index >= MAX_POINTERS)
|
|
||||||
TEST_FAIL_MESSAGE("Too many pointers set");
|
|
||||||
|
|
||||||
pointer_store[pointer_index].pointer = pointer;
|
|
||||||
pointer_store[pointer_index].old_value = *pointer;
|
|
||||||
*pointer = newValue;
|
|
||||||
pointer_index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UnityPointer_UndoAllSets()
|
|
||||||
{
|
|
||||||
while (pointer_index > 0)
|
|
||||||
{
|
|
||||||
pointer_index--;
|
|
||||||
*(pointer_store[pointer_index].pointer) =
|
|
||||||
pointer_store[pointer_index].old_value;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int UnityFailureCount()
|
|
||||||
{
|
|
||||||
return Unity.TestFailures;
|
|
||||||
}
|
|
||||||
|
|
||||||
int UnityGetCommandLineOptions(int argc, char* argv[])
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
UnityFixture.Verbose = 0;
|
|
||||||
UnityFixture.GroupFilter = 0;
|
|
||||||
UnityFixture.NameFilter = 0;
|
|
||||||
UnityFixture.RepeatCount = 1;
|
|
||||||
|
|
||||||
if (argc == 1)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
for (i = 1; i < argc; )
|
|
||||||
{
|
|
||||||
if (strcmp(argv[i], "-v") == 0)
|
|
||||||
{
|
|
||||||
UnityFixture.Verbose = 1;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (strcmp(argv[i], "-g") == 0)
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
if (i >= argc)
|
|
||||||
return 1;
|
|
||||||
UnityFixture.GroupFilter = argv[i];
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (strcmp(argv[i], "-n") == 0)
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
if (i >= argc)
|
|
||||||
return 1;
|
|
||||||
UnityFixture.NameFilter = argv[i];
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (strcmp(argv[i], "-r") == 0)
|
|
||||||
{
|
|
||||||
UnityFixture.RepeatCount = 2;
|
|
||||||
i++;
|
|
||||||
if (i < argc)
|
|
||||||
{
|
|
||||||
if (*(argv[i]) >= '0' && *(argv[i]) <= '9')
|
|
||||||
{
|
|
||||||
UnityFixture.RepeatCount = atoi(argv[i]);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UnityConcludeFixtureTest()
|
|
||||||
{
|
|
||||||
if (Unity.CurrentTestIgnored)
|
|
||||||
{
|
|
||||||
Unity.TestIgnores++;
|
|
||||||
}
|
|
||||||
else if (!Unity.CurrentTestFailed)
|
|
||||||
{
|
|
||||||
if (UnityFixture.Verbose)
|
|
||||||
{
|
|
||||||
UnityPrint(" PASS");
|
|
||||||
UNITY_OUTPUT_CHAR('\n');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (Unity.CurrentTestFailed)
|
|
||||||
{
|
|
||||||
Unity.TestFailures++;
|
|
||||||
}
|
|
||||||
|
|
||||||
Unity.CurrentTestFailed = 0;
|
|
||||||
Unity.CurrentTestIgnored = 0;
|
|
||||||
}
|
|
||||||
|
|
@ -1,81 +0,0 @@
|
|||||||
//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
|
|
||||||
/* ==========================================
|
|
||||||
Unity Project - A Test Framework for C
|
|
||||||
Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
[Released under MIT License. Please refer to license.txt for details]
|
|
||||||
========================================== */
|
|
||||||
|
|
||||||
#ifndef UNITY_FIXTURE_H_
|
|
||||||
#define UNITY_FIXTURE_H_
|
|
||||||
|
|
||||||
#include "unity.h"
|
|
||||||
#include "unity_internals.h"
|
|
||||||
#include "unity_fixture_malloc_overrides.h"
|
|
||||||
#include "unity_fixture_internals.h"
|
|
||||||
|
|
||||||
int UnityMain(int argc, char* argv[], void (*runAllTests)());
|
|
||||||
|
|
||||||
|
|
||||||
#define TEST_GROUP(group)\
|
|
||||||
int TEST_GROUP_##group = 0
|
|
||||||
|
|
||||||
#define TEST_SETUP(group) void TEST_##group##_SETUP()
|
|
||||||
|
|
||||||
#define TEST_TEAR_DOWN(group) void TEST_##group##_TEAR_DOWN()
|
|
||||||
|
|
||||||
|
|
||||||
#define TEST(group, name) \
|
|
||||||
void TEST_##group##_##name##_();\
|
|
||||||
void TEST_##group##_##name##_run()\
|
|
||||||
{\
|
|
||||||
UnityTestRunner(TEST_##group##_SETUP,\
|
|
||||||
TEST_##group##_##name##_,\
|
|
||||||
TEST_##group##_TEAR_DOWN,\
|
|
||||||
"TEST(" #group ", " #name ")",\
|
|
||||||
#group, #name,\
|
|
||||||
__FILE__, __LINE__);\
|
|
||||||
}\
|
|
||||||
void TEST_##group##_##name##_()
|
|
||||||
|
|
||||||
#define IGNORE_TEST(group, name) \
|
|
||||||
void TEST_##group##_##name##_();\
|
|
||||||
void TEST_##group##_##name##_run()\
|
|
||||||
{\
|
|
||||||
UnityIgnoreTest();\
|
|
||||||
}\
|
|
||||||
void TEST_##group##_##name##_()
|
|
||||||
|
|
||||||
#define DECLARE_TEST_CASE(group, name) \
|
|
||||||
void TEST_##group##_##name##_run()
|
|
||||||
|
|
||||||
#define RUN_TEST_CASE(group, name) \
|
|
||||||
DECLARE_TEST_CASE(group, name);\
|
|
||||||
TEST_##group##_##name##_run();
|
|
||||||
|
|
||||||
//This goes at the bottom of each test file or in a separate c file
|
|
||||||
#define TEST_GROUP_RUNNER(group)\
|
|
||||||
void TEST_##group##_GROUP_RUNNER_runAll();\
|
|
||||||
void TEST_##group##_GROUP_RUNNER()\
|
|
||||||
{\
|
|
||||||
TEST_##group##_GROUP_RUNNER_runAll();\
|
|
||||||
}\
|
|
||||||
void TEST_##group##_GROUP_RUNNER_runAll()
|
|
||||||
|
|
||||||
//Call this from main
|
|
||||||
#define RUN_TEST_GROUP(group)\
|
|
||||||
void TEST_##group##_GROUP_RUNNER();\
|
|
||||||
TEST_##group##_GROUP_RUNNER();
|
|
||||||
|
|
||||||
//CppUTest Compatibility Macros
|
|
||||||
#define UT_PTR_SET(ptr, newPointerValue) UnityPointer_Set((void**)&ptr, (void*)newPointerValue)
|
|
||||||
#define TEST_ASSERT_POINTERS_EQUAL(expected, actual) TEST_ASSERT_EQUAL_PTR(expected, actual)
|
|
||||||
#define TEST_ASSERT_BYTES_EQUAL(expected, actual) TEST_ASSERT_EQUAL_HEX8(0xff & (expected), 0xff & (actual))
|
|
||||||
#define FAIL(message) TEST_FAIL((message))
|
|
||||||
#define CHECK(condition) TEST_ASSERT_TRUE((condition))
|
|
||||||
#define LONGS_EQUAL(expected, actual) TEST_ASSERT_EQUAL_INT((expected), (actual))
|
|
||||||
#define STRCMP_EQUAL(expected, actual) TEST_ASSERT_EQUAL_STRING((expected), (actual))
|
|
||||||
#define DOUBLES_EQUAL(expected, actual, delta) TEST_ASSERT_FLOAT_WITHIN(((expected), (actual), (delta))
|
|
||||||
|
|
||||||
void UnityMalloc_MakeMallocFailAfterCount(int count);
|
|
||||||
|
|
||||||
#endif /* UNITY_FIXTURE_H_ */
|
|
@ -1,44 +0,0 @@
|
|||||||
//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
|
|
||||||
/* ==========================================
|
|
||||||
Unity Project - A Test Framework for C
|
|
||||||
Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
[Released under MIT License. Please refer to license.txt for details]
|
|
||||||
========================================== */
|
|
||||||
|
|
||||||
#ifndef UNITY_FIXTURE_INTERNALS_H_
|
|
||||||
#define UNITY_FIXTURE_INTERNALS_H_
|
|
||||||
|
|
||||||
typedef struct _UNITY_FIXTURE_T
|
|
||||||
{
|
|
||||||
int Verbose;
|
|
||||||
unsigned int RepeatCount;
|
|
||||||
const char* NameFilter;
|
|
||||||
const char* GroupFilter;
|
|
||||||
} UNITY_FIXTURE_T;
|
|
||||||
|
|
||||||
typedef void unityfunction();
|
|
||||||
void UnityTestRunner(unityfunction * setup,
|
|
||||||
unityfunction * body,
|
|
||||||
unityfunction * teardown,
|
|
||||||
const char * printableName,
|
|
||||||
const char * group,
|
|
||||||
const char * name,
|
|
||||||
const char * file, int line);
|
|
||||||
|
|
||||||
void UnityIgnoreTest();
|
|
||||||
void UnityMalloc_StartTest();
|
|
||||||
void UnityMalloc_EndTest();
|
|
||||||
int UnityFailureCount();
|
|
||||||
int UnityGetCommandLineOptions(int argc, char* argv[]);
|
|
||||||
void UnityConcludeFixtureTest();
|
|
||||||
|
|
||||||
void UnityPointer_Set(void ** ptr, void * newValue);
|
|
||||||
void UnityPointer_UndoAllSets();
|
|
||||||
void UnityPointer_Init();
|
|
||||||
|
|
||||||
void UnityAssertEqualPointer(const void * expected,
|
|
||||||
const void * actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
#endif /* UNITY_FIXTURE_INTERNALS_H_ */
|
|
@ -1,16 +0,0 @@
|
|||||||
//- Copyright (c) 2010 James Grenning and Contributed to Unity Project
|
|
||||||
/* ==========================================
|
|
||||||
Unity Project - A Test Framework for C
|
|
||||||
Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
[Released under MIT License. Please refer to license.txt for details]
|
|
||||||
========================================== */
|
|
||||||
|
|
||||||
#ifndef UNITY_FIXTURE_MALLOC_OVERRIDES_H_
|
|
||||||
#define UNITY_FIXTURE_MALLOC_OVERRIDES_H_
|
|
||||||
|
|
||||||
#define malloc unity_malloc
|
|
||||||
#define calloc unity_calloc
|
|
||||||
#define realloc unity_realloc
|
|
||||||
#define free unity_free
|
|
||||||
|
|
||||||
#endif /* UNITY_FIXTURE_MALLOC_OVERRIDES_H_ */
|
|
@ -1,2 +0,0 @@
|
|||||||
118
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
2.1.0
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,242 +0,0 @@
|
|||||||
/* ==========================================
|
|
||||||
Unity Project - A Test Framework for C
|
|
||||||
Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
[Released under MIT License. Please refer to license.txt for details]
|
|
||||||
========================================== */
|
|
||||||
|
|
||||||
#ifndef UNITY_FRAMEWORK_H
|
|
||||||
#define UNITY_FRAMEWORK_H
|
|
||||||
|
|
||||||
#define UNITY
|
|
||||||
|
|
||||||
#include "unity_internals.h"
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Configuration Options
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
// Integers
|
|
||||||
// - Unity assumes 32 bit integers by default
|
|
||||||
// - If your compiler treats ints of a different size, define UNITY_INT_WIDTH
|
|
||||||
|
|
||||||
// Floats
|
|
||||||
// - define UNITY_EXCLUDE_FLOAT to disallow floating point comparisons
|
|
||||||
// - define UNITY_FLOAT_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_FLOAT
|
|
||||||
// - define UNITY_FLOAT_TYPE to specify doubles instead of single precision floats
|
|
||||||
// - define UNITY_FLOAT_VERBOSE to print floating point values in errors (uses sprintf)
|
|
||||||
// - define UNITY_INCLUDE_DOUBLE to allow double floating point comparisons
|
|
||||||
// - define UNITY_EXCLUDE_DOUBLE to disallow double floating point comparisons (default)
|
|
||||||
// - define UNITY_DOUBLE_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_DOUBLE
|
|
||||||
// - define UNITY_DOUBLE_TYPE to specify something other than double
|
|
||||||
// - define UNITY_DOUBLE_VERBOSE to print floating point values in errors (uses sprintf)
|
|
||||||
|
|
||||||
// Output
|
|
||||||
// - by default, Unity prints to standard out with putchar. define UNITY_OUTPUT_CHAR(a) with a different function if desired
|
|
||||||
|
|
||||||
// Optimization
|
|
||||||
// - by default, line numbers are stored in unsigned shorts. Define UNITY_LINE_TYPE with a different type if your files are huge
|
|
||||||
// - by default, test and failure counters are unsigned shorts. Define UNITY_COUNTER_TYPE with a different type if you want to save space or have more than 65535 Tests.
|
|
||||||
|
|
||||||
// Test Cases
|
|
||||||
// - define UNITY_SUPPORT_TEST_CASES to include the TEST_CASE macro, though really it's mostly about the runner generator script
|
|
||||||
|
|
||||||
// Parameterized Tests
|
|
||||||
// - you'll want to create a define of TEST_CASE(...) which basically evaluates to nothing
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Test Running Macros
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
#define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0)
|
|
||||||
|
|
||||||
#define TEST_ABORT() {longjmp(Unity.AbortFrame, 1);}
|
|
||||||
|
|
||||||
#ifndef RUN_TEST
|
|
||||||
#define RUN_TEST(func, line_num) UnityDefaultTestRun(func, #func, line_num)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TEST_LINE_NUM (Unity.CurrentTestLineNumber)
|
|
||||||
#define TEST_IS_IGNORED (Unity.CurrentTestIgnored)
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Basic Fail and Ignore
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
#define TEST_FAIL_MESSAGE(message) UNITY_TEST_FAIL(__LINE__, message)
|
|
||||||
#define TEST_FAIL() UNITY_TEST_FAIL(__LINE__, NULL)
|
|
||||||
#define TEST_IGNORE_MESSAGE(message) UNITY_TEST_IGNORE(__LINE__, message)
|
|
||||||
#define TEST_IGNORE() UNITY_TEST_IGNORE(__LINE__, NULL)
|
|
||||||
#define TEST_ONLY()
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Test Asserts (simple)
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
//Boolean
|
|
||||||
#define TEST_ASSERT(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expression Evaluated To FALSE")
|
|
||||||
#define TEST_ASSERT_TRUE(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expected TRUE Was FALSE")
|
|
||||||
#define TEST_ASSERT_UNLESS(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expression Evaluated To TRUE")
|
|
||||||
#define TEST_ASSERT_FALSE(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expected FALSE Was TRUE")
|
|
||||||
#define TEST_ASSERT_NULL(pointer) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, " Expected NULL")
|
|
||||||
#define TEST_ASSERT_NOT_NULL(pointer) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, " Expected Non-NULL")
|
|
||||||
|
|
||||||
//Integers (of all sizes)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, " Expected Not-Equal")
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX8(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX16(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX32(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX64(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_BITS(mask, expected, actual) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_BITS_HIGH(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (_UU32)(-1), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_BITS_LOW(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (_UU32)(0), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_BIT_HIGH(bit, actual) UNITY_TEST_ASSERT_BITS(((_UU32)1 << bit), (_UU32)(-1), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_BIT_LOW(bit, actual) UNITY_TEST_ASSERT_BITS(((_UU32)1 << bit), (_UU32)(0), (actual), __LINE__, NULL)
|
|
||||||
|
|
||||||
//Integer Ranges (of all sizes)
|
|
||||||
#define TEST_ASSERT_INT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT_WITHIN(delta, expected, actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_UINT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT_WITHIN(delta, expected, actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_HEX_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN(delta, expected, actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_HEX8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX8_WITHIN(delta, expected, actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_HEX16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX16_WITHIN(delta, expected, actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_HEX32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN(delta, expected, actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_HEX64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, __LINE__, NULL)
|
|
||||||
|
|
||||||
//Structs and Strings
|
|
||||||
#define TEST_ASSERT_EQUAL_PTR(expected, actual) UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_STRING(expected, actual) UNITY_TEST_ASSERT_EQUAL_STRING(expected, actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_MEMORY(expected, actual, len) UNITY_TEST_ASSERT_EQUAL_MEMORY(expected, actual, len, __LINE__, NULL)
|
|
||||||
|
|
||||||
//Arrays
|
|
||||||
#define TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements, __LINE__, NULL)
|
|
||||||
|
|
||||||
//Floating Point (If Enabled)
|
|
||||||
#define TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_FLOAT(expected, actual) UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_FLOAT_IS_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_FLOAT_IS_NEG_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_FLOAT_IS_NAN(actual) UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, __LINE__, NULL)
|
|
||||||
|
|
||||||
//Double (If Enabled)
|
|
||||||
#define TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_DOUBLE(expected, actual) UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_DOUBLE_IS_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_DOUBLE_IS_NEG_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, __LINE__, NULL)
|
|
||||||
#define TEST_ASSERT_DOUBLE_IS_NAN(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, __LINE__, NULL)
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Test Asserts (with additional messages)
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
//Boolean
|
|
||||||
#define TEST_ASSERT_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_TRUE_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_UNLESS_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_FALSE_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_NOT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, message)
|
|
||||||
|
|
||||||
//Integers (of all sizes)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_BITS_MESSAGE(mask, expected, actual, message) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_BITS_HIGH_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (_UU32)(-1), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_BITS_LOW_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (_UU32)(0), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_BIT_HIGH_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((_UU32)1 << bit), (_UU32)(-1), (actual), __LINE__, message)
|
|
||||||
#define TEST_ASSERT_BIT_LOW_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((_UU32)1 << bit), (_UU32)(0), (actual), __LINE__, message)
|
|
||||||
|
|
||||||
//Integer Ranges (of all sizes)
|
|
||||||
#define TEST_ASSERT_INT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT_WITHIN(delta, expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_UINT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT_WITHIN(delta, expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_HEX_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN(delta, expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_HEX8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX8_WITHIN(delta, expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_HEX16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX16_WITHIN(delta, expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_HEX32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN(delta, expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_HEX64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, __LINE__, message)
|
|
||||||
|
|
||||||
//Structs and Strings
|
|
||||||
#define TEST_ASSERT_EQUAL_PTR_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_PTR(expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_STRING(expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_MEMORY_MESSAGE(expected, actual, len, message) UNITY_TEST_ASSERT_EQUAL_MEMORY(expected, actual, len, __LINE__, message)
|
|
||||||
|
|
||||||
//Arrays
|
|
||||||
#define TEST_ASSERT_EQUAL_INT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_INT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_UINT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_HEX64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_PTR_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_STRING_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_MEMORY_ARRAY_MESSAGE(expected, actual, len, num_elements, message) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements, __LINE__, message)
|
|
||||||
|
|
||||||
//Floating Point (If Enabled)
|
|
||||||
#define TEST_ASSERT_FLOAT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_FLOAT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_FLOAT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_FLOAT_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_FLOAT_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_FLOAT_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, __LINE__, message)
|
|
||||||
|
|
||||||
//Double (If Enabled)
|
|
||||||
#define TEST_ASSERT_DOUBLE_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_DOUBLE_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_DOUBLE_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_DOUBLE_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, __LINE__, message)
|
|
||||||
#define TEST_ASSERT_DOUBLE_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, __LINE__, message)
|
|
||||||
#endif
|
|
@ -1,546 +0,0 @@
|
|||||||
/* ==========================================
|
|
||||||
Unity Project - A Test Framework for C
|
|
||||||
Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
|
||||||
[Released under MIT License. Please refer to license.txt for details]
|
|
||||||
========================================== */
|
|
||||||
|
|
||||||
#ifndef UNITY_INTERNALS_H
|
|
||||||
#define UNITY_INTERNALS_H
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <setjmp.h>
|
|
||||||
|
|
||||||
// Unity attempts to determine sizeof(various types)
|
|
||||||
// based on UINT_MAX, ULONG_MAX, etc. These are typically
|
|
||||||
// defined in limits.h.
|
|
||||||
#ifdef UNITY_USE_LIMITS_H
|
|
||||||
#include <limits.h>
|
|
||||||
#endif
|
|
||||||
// As a fallback, hope that including stdint.h will
|
|
||||||
// provide this information.
|
|
||||||
#ifndef UNITY_EXCLUDE_STDINT_H
|
|
||||||
#include <stdint.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Guess Widths If Not Specified
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
// Determine the size of an int, if not already specificied.
|
|
||||||
// We cannot use sizeof(int), because it is not yet defined
|
|
||||||
// at this stage in the trnslation of the C program.
|
|
||||||
// Therefore, infer it from UINT_MAX if possible.
|
|
||||||
#ifndef UNITY_INT_WIDTH
|
|
||||||
#ifdef UINT_MAX
|
|
||||||
#if (UINT_MAX == 0xFFFF)
|
|
||||||
#define UNITY_INT_WIDTH (16)
|
|
||||||
#elif (UINT_MAX == 0xFFFFFFFF)
|
|
||||||
#define UNITY_INT_WIDTH (32)
|
|
||||||
#elif (UINT_MAX == 0xFFFFFFFFFFFFFFFF)
|
|
||||||
#define UNITY_INT_WIDTH (64)
|
|
||||||
#ifndef UNITY_SUPPORT_64
|
|
||||||
#define UNITY_SUPPORT_64
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#ifndef UNITY_INT_WIDTH
|
|
||||||
#define UNITY_INT_WIDTH (32)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Determine the size of a long, if not already specified,
|
|
||||||
// by following the process used above to define
|
|
||||||
// UNITY_INT_WIDTH.
|
|
||||||
#ifndef UNITY_LONG_WIDTH
|
|
||||||
#ifdef ULONG_MAX
|
|
||||||
#if (ULONG_MAX == 0xFFFF)
|
|
||||||
#define UNITY_LONG_WIDTH (16)
|
|
||||||
#elif (ULONG_MAX == 0xFFFFFFFF)
|
|
||||||
#define UNITY_LONG_WIDTH (32)
|
|
||||||
#elif (ULONG_MAX == 0xFFFFFFFFFFFFFFFF)
|
|
||||||
#define UNITY_LONG_WIDTH (64)
|
|
||||||
#ifndef UNITY_SUPPORT_64
|
|
||||||
#define UNITY_SUPPORT_64
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#ifndef UNITY_LONG_WIDTH
|
|
||||||
#define UNITY_LONG_WIDTH (32)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Determine the size of a pointer, if not already specified,
|
|
||||||
// by following the process used above to define
|
|
||||||
// UNITY_INT_WIDTH.
|
|
||||||
#ifndef UNITY_POINTER_WIDTH
|
|
||||||
#ifdef UINTPTR_MAX
|
|
||||||
#if (UINTPTR_MAX <= 0xFFFF)
|
|
||||||
#define UNITY_POINTER_WIDTH (16)
|
|
||||||
#elif (UINTPTR_MAX <= 0xFFFFFFFF)
|
|
||||||
#define UNITY_POINTER_WIDTH (32)
|
|
||||||
#elif (UINTPTR_MAX <= 0xFFFFFFFFFFFFFFFF)
|
|
||||||
#define UNITY_POINTER_WIDTH (64)
|
|
||||||
#ifndef UNITY_SUPPORT_64
|
|
||||||
#define UNITY_SUPPORT_64
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#ifndef UNITY_POINTER_WIDTH
|
|
||||||
#ifdef INTPTR_MAX
|
|
||||||
#if (INTPTR_MAX <= 0x7FFF)
|
|
||||||
#define UNITY_POINTER_WIDTH (16)
|
|
||||||
#elif (INTPTR_MAX <= 0x7FFFFFFF)
|
|
||||||
#define UNITY_POINTER_WIDTH (32)
|
|
||||||
#elif (INTPTR_MAX <= 0x7FFFFFFFFFFFFFFF)
|
|
||||||
#define UNITY_POINTER_WIDTH (64)
|
|
||||||
#ifndef UNITY_SUPPORT_64
|
|
||||||
#define UNITY_SUPPORT_64
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#ifndef UNITY_POINTER_WIDTH
|
|
||||||
#define UNITY_POINTER_WIDTH (32)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Int Support
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
#if (UNITY_INT_WIDTH == 32)
|
|
||||||
typedef unsigned char _UU8;
|
|
||||||
typedef unsigned short _UU16;
|
|
||||||
typedef unsigned int _UU32;
|
|
||||||
typedef signed char _US8;
|
|
||||||
typedef signed short _US16;
|
|
||||||
typedef signed int _US32;
|
|
||||||
#elif (UNITY_INT_WIDTH == 16)
|
|
||||||
typedef unsigned char _UU8;
|
|
||||||
typedef unsigned int _UU16;
|
|
||||||
typedef unsigned long _UU32;
|
|
||||||
typedef signed char _US8;
|
|
||||||
typedef signed int _US16;
|
|
||||||
typedef signed long _US32;
|
|
||||||
#else
|
|
||||||
#error Invalid UNITY_INT_WIDTH specified! (16 or 32 are supported)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// 64-bit Support
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
#ifndef UNITY_SUPPORT_64
|
|
||||||
|
|
||||||
//No 64-bit Support
|
|
||||||
typedef _UU32 _U_UINT;
|
|
||||||
typedef _US32 _U_SINT;
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
//64-bit Support
|
|
||||||
#if (UNITY_LONG_WIDTH == 32)
|
|
||||||
typedef unsigned long long _UU64;
|
|
||||||
typedef signed long long _US64;
|
|
||||||
#elif (UNITY_LONG_WIDTH == 64)
|
|
||||||
typedef unsigned long _UU64;
|
|
||||||
typedef signed long _US64;
|
|
||||||
#else
|
|
||||||
#error Invalid UNITY_LONG_WIDTH specified! (32 or 64 are supported)
|
|
||||||
#endif
|
|
||||||
typedef _UU64 _U_UINT;
|
|
||||||
typedef _US64 _U_SINT;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Pointer Support
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
#if (UNITY_POINTER_WIDTH == 32)
|
|
||||||
typedef _UU32 _UP;
|
|
||||||
#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX32
|
|
||||||
#elif (UNITY_POINTER_WIDTH == 64)
|
|
||||||
#ifndef UNITY_SUPPORT_64
|
|
||||||
#error "You've Specified 64-bit pointers without enabling 64-bit Support. Define UNITY_SUPPORT_64"
|
|
||||||
#endif
|
|
||||||
typedef _UU64 _UP;
|
|
||||||
#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX64
|
|
||||||
#elif (UNITY_POINTER_WIDTH == 16)
|
|
||||||
typedef _UU16 _UP;
|
|
||||||
#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX16
|
|
||||||
#else
|
|
||||||
#error Invalid UNITY_POINTER_WIDTH specified! (16, 32 or 64 are supported)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Float Support
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
#ifdef UNITY_EXCLUDE_FLOAT
|
|
||||||
|
|
||||||
//No Floating Point Support
|
|
||||||
#undef UNITY_FLOAT_PRECISION
|
|
||||||
#undef UNITY_FLOAT_TYPE
|
|
||||||
#undef UNITY_FLOAT_VERBOSE
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
//Floating Point Support
|
|
||||||
#ifndef UNITY_FLOAT_PRECISION
|
|
||||||
#define UNITY_FLOAT_PRECISION (0.00001f)
|
|
||||||
#endif
|
|
||||||
#ifndef UNITY_FLOAT_TYPE
|
|
||||||
#define UNITY_FLOAT_TYPE float
|
|
||||||
#endif
|
|
||||||
typedef UNITY_FLOAT_TYPE _UF;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Double Float Support
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
//unlike FLOAT, we DON'T include by default
|
|
||||||
#ifndef UNITY_EXCLUDE_DOUBLE
|
|
||||||
#ifndef UNITY_INCLUDE_DOUBLE
|
|
||||||
#define UNITY_EXCLUDE_DOUBLE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef UNITY_EXCLUDE_DOUBLE
|
|
||||||
|
|
||||||
//No Floating Point Support
|
|
||||||
#undef UNITY_DOUBLE_PRECISION
|
|
||||||
#undef UNITY_DOUBLE_TYPE
|
|
||||||
#undef UNITY_DOUBLE_VERBOSE
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
//Floating Point Support
|
|
||||||
#ifndef UNITY_DOUBLE_PRECISION
|
|
||||||
#define UNITY_DOUBLE_PRECISION (1e-12f)
|
|
||||||
#endif
|
|
||||||
#ifndef UNITY_DOUBLE_TYPE
|
|
||||||
#define UNITY_DOUBLE_TYPE double
|
|
||||||
#endif
|
|
||||||
typedef UNITY_DOUBLE_TYPE _UD;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Output Method
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
#ifndef UNITY_OUTPUT_CHAR
|
|
||||||
//Default to using putchar, which is defined in stdio.h above
|
|
||||||
#define UNITY_OUTPUT_CHAR(a) putchar(a)
|
|
||||||
#else
|
|
||||||
//If defined as something else, make sure we declare it here so it's ready for use
|
|
||||||
extern int UNITY_OUTPUT_CHAR(int);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Footprint
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
#ifndef UNITY_LINE_TYPE
|
|
||||||
#define UNITY_LINE_TYPE _U_UINT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef UNITY_COUNTER_TYPE
|
|
||||||
#define UNITY_COUNTER_TYPE _U_UINT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Internal Structs Needed
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
typedef void (*UnityTestFunction)(void);
|
|
||||||
|
|
||||||
#define UNITY_DISPLAY_RANGE_INT (0x10)
|
|
||||||
#define UNITY_DISPLAY_RANGE_UINT (0x20)
|
|
||||||
#define UNITY_DISPLAY_RANGE_HEX (0x40)
|
|
||||||
#define UNITY_DISPLAY_RANGE_AUTO (0x80)
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
#if (UNITY_INT_WIDTH == 16)
|
|
||||||
UNITY_DISPLAY_STYLE_INT = 2 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
|
|
||||||
#elif (UNITY_INT_WIDTH == 32)
|
|
||||||
UNITY_DISPLAY_STYLE_INT = 4 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
|
|
||||||
#elif (UNITY_INT_WIDTH == 64)
|
|
||||||
UNITY_DISPLAY_STYLE_INT = 8 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO,
|
|
||||||
#endif
|
|
||||||
UNITY_DISPLAY_STYLE_INT8 = 1 + UNITY_DISPLAY_RANGE_INT,
|
|
||||||
UNITY_DISPLAY_STYLE_INT16 = 2 + UNITY_DISPLAY_RANGE_INT,
|
|
||||||
UNITY_DISPLAY_STYLE_INT32 = 4 + UNITY_DISPLAY_RANGE_INT,
|
|
||||||
#ifdef UNITY_SUPPORT_64
|
|
||||||
UNITY_DISPLAY_STYLE_INT64 = 8 + UNITY_DISPLAY_RANGE_INT,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (UNITY_INT_WIDTH == 16)
|
|
||||||
UNITY_DISPLAY_STYLE_UINT = 2 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
|
|
||||||
#elif (UNITY_INT_WIDTH == 32)
|
|
||||||
UNITY_DISPLAY_STYLE_UINT = 4 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
|
|
||||||
#elif (UNITY_INT_WIDTH == 64)
|
|
||||||
UNITY_DISPLAY_STYLE_UINT = 8 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO,
|
|
||||||
#endif
|
|
||||||
UNITY_DISPLAY_STYLE_UINT8 = 1 + UNITY_DISPLAY_RANGE_UINT,
|
|
||||||
UNITY_DISPLAY_STYLE_UINT16 = 2 + UNITY_DISPLAY_RANGE_UINT,
|
|
||||||
UNITY_DISPLAY_STYLE_UINT32 = 4 + UNITY_DISPLAY_RANGE_UINT,
|
|
||||||
#ifdef UNITY_SUPPORT_64
|
|
||||||
UNITY_DISPLAY_STYLE_UINT64 = 8 + UNITY_DISPLAY_RANGE_UINT,
|
|
||||||
#endif
|
|
||||||
UNITY_DISPLAY_STYLE_HEX8 = 1 + UNITY_DISPLAY_RANGE_HEX,
|
|
||||||
UNITY_DISPLAY_STYLE_HEX16 = 2 + UNITY_DISPLAY_RANGE_HEX,
|
|
||||||
UNITY_DISPLAY_STYLE_HEX32 = 4 + UNITY_DISPLAY_RANGE_HEX,
|
|
||||||
#ifdef UNITY_SUPPORT_64
|
|
||||||
UNITY_DISPLAY_STYLE_HEX64 = 8 + UNITY_DISPLAY_RANGE_HEX,
|
|
||||||
#endif
|
|
||||||
UNITY_DISPLAY_STYLE_UNKNOWN
|
|
||||||
} UNITY_DISPLAY_STYLE_T;
|
|
||||||
|
|
||||||
struct _Unity
|
|
||||||
{
|
|
||||||
const char* TestFile;
|
|
||||||
const char* CurrentTestName;
|
|
||||||
UNITY_LINE_TYPE CurrentTestLineNumber;
|
|
||||||
UNITY_COUNTER_TYPE NumberOfTests;
|
|
||||||
UNITY_COUNTER_TYPE TestFailures;
|
|
||||||
UNITY_COUNTER_TYPE TestIgnores;
|
|
||||||
UNITY_COUNTER_TYPE CurrentTestFailed;
|
|
||||||
UNITY_COUNTER_TYPE CurrentTestIgnored;
|
|
||||||
jmp_buf AbortFrame;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern struct _Unity Unity;
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Test Suite Management
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
void UnityBegin(void);
|
|
||||||
int UnityEnd(void);
|
|
||||||
void UnityConcludeTest(void);
|
|
||||||
void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum);
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Test Output
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
void UnityPrint(const char* string);
|
|
||||||
void UnityPrintMask(const _U_UINT mask, const _U_UINT number);
|
|
||||||
void UnityPrintNumberByStyle(const _U_SINT number, const UNITY_DISPLAY_STYLE_T style);
|
|
||||||
void UnityPrintNumber(const _U_SINT number);
|
|
||||||
void UnityPrintNumberUnsigned(const _U_UINT number);
|
|
||||||
void UnityPrintNumberHex(const _U_UINT number, const char nibbles);
|
|
||||||
|
|
||||||
#ifdef UNITY_FLOAT_VERBOSE
|
|
||||||
void UnityPrintFloat(const _UF number);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Test Assertion Fuctions
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Use the macros below this section instead of calling
|
|
||||||
// these directly. The macros have a consistent naming
|
|
||||||
// convention and will pull in file and line information
|
|
||||||
// for you.
|
|
||||||
|
|
||||||
void UnityAssertEqualNumber(const _U_SINT expected,
|
|
||||||
const _U_SINT actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber,
|
|
||||||
const UNITY_DISPLAY_STYLE_T style);
|
|
||||||
|
|
||||||
void UnityAssertEqualIntArray(const _U_SINT* expected,
|
|
||||||
const _U_SINT* actual,
|
|
||||||
const _UU32 num_elements,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber,
|
|
||||||
const UNITY_DISPLAY_STYLE_T style);
|
|
||||||
|
|
||||||
void UnityAssertBits(const _U_SINT mask,
|
|
||||||
const _U_SINT expected,
|
|
||||||
const _U_SINT actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertEqualString(const char* expected,
|
|
||||||
const char* actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertEqualStringArray( const char** expected,
|
|
||||||
const char** actual,
|
|
||||||
const _UU32 num_elements,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertEqualMemory( const void* expected,
|
|
||||||
const void* actual,
|
|
||||||
const _UU32 length,
|
|
||||||
const _UU32 num_elements,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertNumbersWithin(const _U_SINT delta,
|
|
||||||
const _U_SINT expected,
|
|
||||||
const _U_SINT actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber,
|
|
||||||
const UNITY_DISPLAY_STYLE_T style);
|
|
||||||
|
|
||||||
void UnityFail(const char* message, const UNITY_LINE_TYPE line);
|
|
||||||
|
|
||||||
void UnityIgnore(const char* message, const UNITY_LINE_TYPE line);
|
|
||||||
|
|
||||||
#ifndef UNITY_EXCLUDE_FLOAT
|
|
||||||
void UnityAssertFloatsWithin(const _UF delta,
|
|
||||||
const _UF expected,
|
|
||||||
const _UF actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertEqualFloatArray(const _UF* expected,
|
|
||||||
const _UF* actual,
|
|
||||||
const _UU32 num_elements,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertFloatIsInf(const _UF actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertFloatIsNegInf(const _UF actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertFloatIsNaN(const _UF actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef UNITY_EXCLUDE_DOUBLE
|
|
||||||
void UnityAssertDoublesWithin(const _UD delta,
|
|
||||||
const _UD expected,
|
|
||||||
const _UD actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertEqualDoubleArray(const _UD* expected,
|
|
||||||
const _UD* actual,
|
|
||||||
const _UU32 num_elements,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertDoubleIsInf(const _UD actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertDoubleIsNegInf(const _UD actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
|
|
||||||
void UnityAssertDoubleIsNaN(const _UD actual,
|
|
||||||
const char* msg,
|
|
||||||
const UNITY_LINE_TYPE lineNumber);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Basic Fail and Ignore
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
#define UNITY_TEST_FAIL(line, message) UnityFail( (message), (UNITY_LINE_TYPE)line);
|
|
||||||
#define UNITY_TEST_IGNORE(line, message) UnityIgnore( (message), (UNITY_LINE_TYPE)line);
|
|
||||||
|
|
||||||
//-------------------------------------------------------
|
|
||||||
// Test Asserts
|
|
||||||
//-------------------------------------------------------
|
|
||||||
|
|
||||||
#define UNITY_TEST_ASSERT(condition, line, message) if (condition) {} else {UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, message);}
|
|
||||||
#define UNITY_TEST_ASSERT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) == NULL), (UNITY_LINE_TYPE)line, message)
|
|
||||||
#define UNITY_TEST_ASSERT_NOT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) != NULL), (UNITY_LINE_TYPE)line, message)
|
|
||||||
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_INT(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_INT8(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_INT16(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_INT32(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_UINT(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_UINT8(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_UINT16(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_UINT32(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_HEX8(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US8 )(expected), (_U_SINT)(_US8 )(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX8)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_HEX16(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US16)(expected), (_U_SINT)(_US16)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX16)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_HEX32(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_US32)(expected), (_U_SINT)(_US32)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX32)
|
|
||||||
#define UNITY_TEST_ASSERT_BITS(mask, expected, actual, line, message) UnityAssertBits((_U_SINT)(mask), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
|
|
||||||
#define UNITY_TEST_ASSERT_INT_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT)
|
|
||||||
#define UNITY_TEST_ASSERT_UINT_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(delta), (_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT)
|
|
||||||
#define UNITY_TEST_ASSERT_HEX8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_U_UINT)(_UU8 )(delta), (_U_SINT)(_U_UINT)(_UU8 )(expected), (_U_SINT)(_U_UINT)(_UU8 )(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX8)
|
|
||||||
#define UNITY_TEST_ASSERT_HEX16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_U_UINT)(_UU16)(delta), (_U_SINT)(_U_UINT)(_UU16)(expected), (_U_SINT)(_U_UINT)(_UU16)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX16)
|
|
||||||
#define UNITY_TEST_ASSERT_HEX32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(_U_UINT)(_UU32)(delta), (_U_SINT)(_U_UINT)(_UU32)(expected), (_U_SINT)(_U_UINT)(_UU32)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX32)
|
|
||||||
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_PTR(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(_UP)(expected), (_U_SINT)(_UP)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_POINTER)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_STRING(expected, actual, line, message) UnityAssertEqualString((const char*)(expected), (const char*)(actual), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_MEMORY(expected, actual, len, line, message) UnityAssertEqualMemory((void*)(expected), (void*)(actual), (_UU32)(len), 1, (message), (UNITY_LINE_TYPE)line)
|
|
||||||
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT8)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT16)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT32)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT8)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT16)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT32)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX8)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX16)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX32)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(_UP*)(expected), (const _U_SINT*)(_UP*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_POINTER)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualStringArray((const char**)(expected), (const char**)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements, line, message) UnityAssertEqualMemory((void*)(expected), (void*)(actual), (_UU32)(len), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
|
|
||||||
#ifdef UNITY_SUPPORT_64
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT64)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT64)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message) UnityAssertEqualNumber((_U_SINT)(expected), (_U_SINT)(actual), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX64)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_INT64)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_UINT64)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((const _U_SINT*)(expected), (const _U_SINT*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX64)
|
|
||||||
#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((_U_SINT)(delta), (_U_SINT)(expected), (_U_SINT)(actual), NULL, (UNITY_LINE_TYPE)line, UNITY_DISPLAY_STYLE_HEX64)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef UNITY_EXCLUDE_FLOAT
|
|
||||||
#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
|
|
||||||
#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
|
|
||||||
#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
|
|
||||||
#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Floating Point Disabled")
|
|
||||||
#else
|
|
||||||
#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UnityAssertFloatsWithin((_UF)(delta), (_UF)(expected), (_UF)(actual), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((_UF)(expected) * (_UF)UNITY_FLOAT_PRECISION, (_UF)expected, (_UF)actual, (UNITY_LINE_TYPE)line, message)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualFloatArray((_UF*)(expected), (_UF*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UnityAssertFloatIsInf((_UF)(actual), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UnityAssertFloatIsNegInf((_UF)(actual), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UnityAssertFloatIsNaN((_UF)(actual), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef UNITY_EXCLUDE_DOUBLE
|
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
|
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
|
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
|
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
|
|
||||||
#else
|
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UnityAssertDoublesWithin((_UD)(delta), (_UD)(expected), (_UD)(actual), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((_UF)(expected) * (_UD)UNITY_DOUBLE_PRECISION, (_UD)expected, (_UD)actual, (UNITY_LINE_TYPE)line, message)
|
|
||||||
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualDoubleArray((_UD*)(expected), (_UD*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UnityAssertFloatIsInf((_UF)(actual), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UnityAssertFloatIsNegInf((_UF)(actual), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UnityAssertFloatIsNaN((_UF)(actual), (message), (UNITY_LINE_TYPE)line)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
1380
tinyusb/.cproject
1380
tinyusb/.cproject
File diff suppressed because it is too large
Load Diff
@ -79,4 +79,15 @@
|
|||||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
|
<filteredResources>
|
||||||
|
<filter>
|
||||||
|
<id>1355422234250</id>
|
||||||
|
<name>html</name>
|
||||||
|
<type>5</type>
|
||||||
|
<matcher>
|
||||||
|
<id>org.eclipse.ui.ide.multiFilter</id>
|
||||||
|
<arguments>1.0-name-matches-false-false-index.html</arguments>
|
||||||
|
</matcher>
|
||||||
|
</filter>
|
||||||
|
</filteredResources>
|
||||||
</projectDescription>
|
</projectDescription>
|
||||||
|
@ -118,7 +118,7 @@
|
|||||||
#define ASSERT_MESSAGE(condition, value, message) \
|
#define ASSERT_MESSAGE(condition, value, message) \
|
||||||
do{\
|
do{\
|
||||||
if (!(condition)) {\
|
if (!(condition)) {\
|
||||||
PRINTF("Assert at %s line %d: %s\n", __PRETTY_FUNCTION__, __LINE__, message); \
|
PRINTF("Assert at %s %s line %d: %s\n", __BASE_FILE__, __PRETTY_FUNCTION__, __LINE__, message); \
|
||||||
return (value);\
|
return (value);\
|
||||||
}\
|
}\
|
||||||
}while(0)
|
}while(0)
|
||||||
@ -129,7 +129,7 @@
|
|||||||
do{\
|
do{\
|
||||||
TUSB_Error_t status = (TUSB_Error_t)(sts);\
|
TUSB_Error_t status = (TUSB_Error_t)(sts);\
|
||||||
if (tERROR_NONE != status) {\
|
if (tERROR_NONE != status) {\
|
||||||
PRINTF("Assert at %s line %d: %s %s\n", __func__, __LINE__, TUSB_ErrorStr[status], message); \
|
PRINTF("Assert at %s line %d: %s %s\n", __BASE_FILE__, __PRETTY_FUNCTION__, __LINE__, TUSB_ErrorStr[status], message); \
|
||||||
return status;\
|
return status;\
|
||||||
}\
|
}\
|
||||||
}while(0)
|
}while(0)
|
||||||
|
@ -661,7 +661,7 @@ WARN_LOGFILE =
|
|||||||
# directories like "/usr/src/myproject". Separate the files or directories
|
# directories like "/usr/src/myproject". Separate the files or directories
|
||||||
# with spaces.
|
# with spaces.
|
||||||
|
|
||||||
INPUT = tinyusb overview.md license.md
|
INPUT = ./ ../overview.md ../license.md
|
||||||
|
|
||||||
# This tag can be used to specify the character encoding of the source files
|
# This tag can be used to specify the character encoding of the source files
|
||||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
|
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
|
||||||
@ -693,7 +693,7 @@ RECURSIVE = YES
|
|||||||
# Note that relative paths are relative to the directory from which doxygen is
|
# Note that relative paths are relative to the directory from which doxygen is
|
||||||
# run.
|
# run.
|
||||||
|
|
||||||
EXCLUDE = tinyusb/device/romdriver
|
EXCLUDE = device/romdriver
|
||||||
|
|
||||||
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
|
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
|
||||||
# directories that are symbolic links (a Unix file system feature) are excluded
|
# directories that are symbolic links (a Unix file system feature) are excluded
|
||||||
|
@ -46,15 +46,22 @@
|
|||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef _TUSB_TUSB_CFG_H_
|
||||||
|
#define _TUSB_TUSB_CFG_H_
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _TUSB_CFG_H_
|
/// define this symbol will make tinyusb look for external configure file
|
||||||
#define _TUSB_CFG_H_
|
#ifdef TUSB_USE_CONFIG_FILE
|
||||||
|
#include "tusb_config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/// 0: no debug infor 3: most debug infor provided
|
/// 0: no debug infor 3: most debug infor provided
|
||||||
|
#ifndef CFG_TUSB_DEBUG_LEVEL
|
||||||
#define CFG_TUSB_DEBUG_LEVEL 3
|
#define CFG_TUSB_DEBUG_LEVEL 3
|
||||||
|
#endif
|
||||||
|
|
||||||
/// Enable Host Support
|
/// Enable Host Support
|
||||||
#define CFG_TUSB_HOST
|
#define CFG_TUSB_HOST
|
||||||
@ -103,6 +110,6 @@
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _TUSB_CFG_H_ */
|
#endif /* _TUSB_TUSB_CFG_H_ */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user