mirror of
https://github.com/ThrowTheSwitch/Unity.git
synced 2025-12-17 22:08:07 +08:00
Merge branch 'master' into more-float
This commit is contained in:
@@ -49,11 +49,11 @@ set(UNITY_EXTENSION_FIXTURE_ENABLED $<BOOL:${UNITY_EXTENSION_FIXTURE}>)
|
|||||||
set(UNITY_EXTENSION_MEMORY_ENABLED $<OR:${UNITY_EXTENSION_FIXTURE_ENABLED},$<BOOL:${UNITY_EXTENSION_MEMORY}>>)
|
set(UNITY_EXTENSION_MEMORY_ENABLED $<OR:${UNITY_EXTENSION_FIXTURE_ENABLED},$<BOOL:${UNITY_EXTENSION_MEMORY}>>)
|
||||||
|
|
||||||
if(${UNITY_EXTENSION_FIXTURE})
|
if(${UNITY_EXTENSION_FIXTURE})
|
||||||
message(STATUS "Unity: Bulding with the fixture extension.")
|
message(STATUS "Unity: Building with the fixture extension.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(${UNITY_EXTENSION_MEMORY})
|
if(${UNITY_EXTENSION_MEMORY})
|
||||||
message(STATUS "Unity: Bulding with the memory extension.")
|
message(STATUS "Unity: Building with the memory extension.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Main target ------------------------------------------------------------------
|
# Main target ------------------------------------------------------------------
|
||||||
@@ -99,37 +99,49 @@ set_target_properties(${PROJECT_NAME}
|
|||||||
|
|
||||||
target_compile_options(${PROJECT_NAME}
|
target_compile_options(${PROJECT_NAME}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
$<$<C_COMPILER_ID:Clang>:-Wcast-align
|
# Clang
|
||||||
-Wcast-qual
|
$<$<C_COMPILER_ID:Clang>:
|
||||||
-Wconversion
|
-Wcast-align
|
||||||
-Wexit-time-destructors
|
-Wcast-qual
|
||||||
-Wglobal-constructors
|
-Wconversion
|
||||||
-Wmissing-noreturn
|
-Wexit-time-destructors
|
||||||
-Wmissing-prototypes
|
-Wglobal-constructors
|
||||||
-Wno-missing-braces
|
-Wmissing-noreturn
|
||||||
-Wold-style-cast
|
-Wmissing-prototypes
|
||||||
-Wshadow
|
-Wno-missing-braces
|
||||||
-Wweak-vtables
|
-Wold-style-cast
|
||||||
-Werror
|
-Wshadow
|
||||||
-Wall>
|
-Wweak-vtables
|
||||||
$<$<C_COMPILER_ID:GNU>:-Waddress
|
-Werror
|
||||||
-Waggregate-return
|
-Wall
|
||||||
-Wformat-nonliteral
|
$<$<VERSION_GREATER_EQUAL:$<C_COMPILER_VERSION>,8.0.0>:-Wextra-semi-stmt>
|
||||||
-Wformat-security
|
>
|
||||||
-Wformat
|
|
||||||
-Winit-self
|
# GCC
|
||||||
-Wmissing-declarations
|
$<$<C_COMPILER_ID:GNU>:
|
||||||
-Wmissing-include-dirs
|
-Waddress
|
||||||
-Wno-multichar
|
-Waggregate-return
|
||||||
-Wno-parentheses
|
-Wformat-nonliteral
|
||||||
-Wno-type-limits
|
-Wformat-security
|
||||||
-Wno-unused-parameter
|
-Wformat
|
||||||
-Wunreachable-code
|
-Winit-self
|
||||||
-Wwrite-strings
|
-Wmissing-declarations
|
||||||
-Wpointer-arith
|
-Wmissing-include-dirs
|
||||||
-Werror
|
-Wno-multichar
|
||||||
-Wall>
|
-Wno-parentheses
|
||||||
$<$<C_COMPILER_ID:MSVC>:/Wall>
|
-Wno-type-limits
|
||||||
|
-Wno-unused-parameter
|
||||||
|
-Wunreachable-code
|
||||||
|
-Wwrite-strings
|
||||||
|
-Wpointer-arith
|
||||||
|
-Werror
|
||||||
|
-Wall
|
||||||
|
>
|
||||||
|
|
||||||
|
# MSVC
|
||||||
|
$<$<C_COMPILER_ID:MSVC>:
|
||||||
|
/Wall
|
||||||
|
>
|
||||||
)
|
)
|
||||||
|
|
||||||
write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake
|
write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake
|
||||||
|
|||||||
@@ -170,16 +170,16 @@ class UnityModuleGenerator
|
|||||||
############################
|
############################
|
||||||
def neutralize_filename(name, start_cap = true)
|
def neutralize_filename(name, start_cap = true)
|
||||||
return name if name.empty?
|
return name if name.empty?
|
||||||
name = name.split(/(?:\s+|_|(?=[A-Z][a-z]))|(?<=[a-z])(?=[A-Z])/).map { |v| v.capitalize }.join('_')
|
name = name.split(/(?:\s+|_|(?=[A-Z][a-z]))|(?<=[a-z])(?=[A-Z])/).map(&:capitalize).join('_')
|
||||||
name = name[0].downcase + name[1..-1] unless start_cap
|
name = name[0].downcase + name[1..-1] unless start_cap
|
||||||
return name
|
name
|
||||||
end
|
end
|
||||||
|
|
||||||
############################
|
############################
|
||||||
def create_filename(part1, part2 = '')
|
def create_filename(part1, part2 = '')
|
||||||
name = part2.empty? ? part1 : part1 + '_' + part2
|
name = part2.empty? ? part1 : part1 + '_' + part2
|
||||||
case (@options[:naming])
|
case (@options[:naming])
|
||||||
when 'bumpy' then neutralize_filename(name,false).delete('_')
|
when 'bumpy' then neutralize_filename(name, false).delete('_')
|
||||||
when 'camel' then neutralize_filename(name).delete('_')
|
when 'camel' then neutralize_filename(name).delete('_')
|
||||||
when 'snake' then neutralize_filename(name).downcase
|
when 'snake' then neutralize_filename(name).downcase
|
||||||
when 'caps' then neutralize_filename(name).upcase
|
when 'caps' then neutralize_filename(name).upcase
|
||||||
@@ -211,8 +211,8 @@ class UnityModuleGenerator
|
|||||||
f.write("#{file[:boilerplate]}\n" % [file[:name]]) unless file[:boilerplate].nil?
|
f.write("#{file[:boilerplate]}\n" % [file[:name]]) unless file[:boilerplate].nil?
|
||||||
f.write(file[:template] % [file[:name],
|
f.write(file[:template] % [file[:name],
|
||||||
file[:includes].map { |ff| "#include \"#{ff}\"\n" }.join,
|
file[:includes].map { |ff| "#include \"#{ff}\"\n" }.join,
|
||||||
file[:name].upcase.gsub(/-/, '_'),
|
file[:name].upcase.tr('-', '_'),
|
||||||
file[:name].gsub(/-/, '_')])
|
file[:name].tr('-', '_')])
|
||||||
end
|
end
|
||||||
if @options[:update_svn]
|
if @options[:update_svn]
|
||||||
`svn add \"#{file[:path]}\"`
|
`svn add \"#{file[:path]}\"`
|
||||||
|
|||||||
@@ -9,13 +9,20 @@
|
|||||||
#define UNITY_FIXTURE_H_
|
#define UNITY_FIXTURE_H_
|
||||||
|
|
||||||
#include "unity.h"
|
#include "unity.h"
|
||||||
#include "unity_internals.h"
|
|
||||||
#include "unity_fixture_internals.h"
|
#include "unity_fixture_internals.h"
|
||||||
|
|
||||||
#ifndef UNITY_FIXTURE_NO_EXTRAS
|
#ifndef UNITY_FIXTURE_NO_EXTRAS
|
||||||
#include "unity_memory.h"
|
#include "unity_memory.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "unity_internals.h"
|
||||||
|
|
||||||
|
|
||||||
int UnityMain(int argc, const char* argv[], void (*runAllTests)(void));
|
int UnityMain(int argc, const char* argv[], void (*runAllTests)(void));
|
||||||
|
|
||||||
|
|
||||||
@@ -80,4 +87,8 @@ int UnityMain(int argc, const char* argv[], void (*runAllTests)(void));
|
|||||||
#define DOUBLES_EQUAL(expected, actual, delta) TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual))
|
#define DOUBLES_EQUAL(expected, actual, delta) TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* UNITY_FIXTURE_H_ */
|
#endif /* UNITY_FIXTURE_H_ */
|
||||||
|
|||||||
33
src/unity.c
33
src/unity.c
@@ -19,9 +19,9 @@ void UNITY_OUTPUT_CHAR(int);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Helpful macros for us to use here in Assert functions */
|
/* Helpful macros for us to use here in Assert functions */
|
||||||
#define UNITY_FAIL_AND_BAIL { Unity.CurrentTestFailed = 1; UNITY_OUTPUT_FLUSH(); TEST_ABORT(); }
|
#define UNITY_FAIL_AND_BAIL do { Unity.CurrentTestFailed = 1; UNITY_OUTPUT_FLUSH(); TEST_ABORT(); } while (0)
|
||||||
#define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; UNITY_OUTPUT_FLUSH(); TEST_ABORT(); }
|
#define UNITY_IGNORE_AND_BAIL do { Unity.CurrentTestIgnored = 1; UNITY_OUTPUT_FLUSH(); TEST_ABORT(); } while (0)
|
||||||
#define RETURN_IF_FAIL_OR_IGNORE if (Unity.CurrentTestFailed || Unity.CurrentTestIgnored) TEST_ABORT()
|
#define RETURN_IF_FAIL_OR_IGNORE do { if (Unity.CurrentTestFailed || Unity.CurrentTestIgnored) { TEST_ABORT(); } } while (0)
|
||||||
|
|
||||||
struct UNITY_STORAGE_T Unity;
|
struct UNITY_STORAGE_T Unity;
|
||||||
|
|
||||||
@@ -369,10 +369,12 @@ void UnityPrintFloat(const UNITY_DOUBLE input_number)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UNITY_INT32 n_int = 0, n;
|
UNITY_INT32 n_int = 0;
|
||||||
int exponent = 0;
|
UNITY_INT32 n;
|
||||||
int decimals, digits;
|
int exponent = 0;
|
||||||
char buf[16] = {0};
|
int decimals;
|
||||||
|
int digits;
|
||||||
|
char buf[16] = {0};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Scale up or down by powers of 10. To minimize rounding error,
|
* Scale up or down by powers of 10. To minimize rounding error,
|
||||||
@@ -450,9 +452,14 @@ void UnityPrintFloat(const UNITY_DOUBLE input_number)
|
|||||||
buf[digits++] = (char)('0' + n % 10);
|
buf[digits++] = (char)('0' + n % 10);
|
||||||
n /= 10;
|
n /= 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* print out buffer (backwards) */
|
||||||
while (digits > 0)
|
while (digits > 0)
|
||||||
{
|
{
|
||||||
if (digits == decimals) { UNITY_OUTPUT_CHAR('.'); }
|
if (digits == decimals)
|
||||||
|
{
|
||||||
|
UNITY_OUTPUT_CHAR('.');
|
||||||
|
}
|
||||||
UNITY_OUTPUT_CHAR(buf[--digits]);
|
UNITY_OUTPUT_CHAR(buf[--digits]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -765,11 +772,12 @@ void UnityAssertGreaterOrLessOrEqualNumber(const UNITY_INT threshold,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define UnityPrintPointlessAndBail() \
|
#define UnityPrintPointlessAndBail() \
|
||||||
{ \
|
do { \
|
||||||
UnityTestResultsFailBegin(lineNumber); \
|
UnityTestResultsFailBegin(lineNumber); \
|
||||||
UnityPrint(UnityStrPointless); \
|
UnityPrint(UnityStrPointless); \
|
||||||
UnityAddMsgIfSpecified(msg); \
|
UnityAddMsgIfSpecified(msg); \
|
||||||
UNITY_FAIL_AND_BAIL; }
|
UNITY_FAIL_AND_BAIL; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
/*-----------------------------------------------*/
|
/*-----------------------------------------------*/
|
||||||
void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected,
|
void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected,
|
||||||
@@ -884,11 +892,12 @@ void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected,
|
|||||||
|
|
||||||
#ifndef UNITY_EXCLUDE_FLOAT_PRINT
|
#ifndef UNITY_EXCLUDE_FLOAT_PRINT
|
||||||
#define UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(expected, actual) \
|
#define UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(expected, actual) \
|
||||||
{ \
|
do { \
|
||||||
UnityPrint(UnityStrExpected); \
|
UnityPrint(UnityStrExpected); \
|
||||||
UnityPrintFloat(expected); \
|
UnityPrintFloat(expected); \
|
||||||
UnityPrint(UnityStrWas); \
|
UnityPrint(UnityStrWas); \
|
||||||
UnityPrintFloat(actual); }
|
UnityPrintFloat(actual); \
|
||||||
|
} while (0)
|
||||||
#else
|
#else
|
||||||
#define UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(expected, actual) \
|
#define UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(expected, actual) \
|
||||||
UnityPrint(UnityStrDelta)
|
UnityPrint(UnityStrDelta)
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ void verifyTest(void);
|
|||||||
/* It is not necessary for you to call PASS. A PASS condition is assumed if nothing fails.
|
/* It is not necessary for you to call PASS. A PASS condition is assumed if nothing fails.
|
||||||
* This method allows you to abort a test immediately with a PASS state, ignoring the remainder of the test. */
|
* This method allows you to abort a test immediately with a PASS state, ignoring the remainder of the test. */
|
||||||
#define TEST_PASS() TEST_ABORT()
|
#define TEST_PASS() TEST_ABORT()
|
||||||
#define TEST_PASS_MESSAGE(message) do { UnityMessage((message), __LINE__); TEST_ABORT(); } while(0)
|
#define TEST_PASS_MESSAGE(message) do { UnityMessage((message), __LINE__); TEST_ABORT(); } while (0)
|
||||||
|
|
||||||
/* This macro does nothing, but it is useful for build tools (like Ceedling) to make use of this to figure out
|
/* This macro does nothing, but it is useful for build tools (like Ceedling) to make use of this to figure out
|
||||||
* which files should be linked to in order to perform a test. Use it like TEST_FILE("sandwiches.c") */
|
* which files should be linked to in order to perform a test. Use it like TEST_FILE("sandwiches.c") */
|
||||||
|
|||||||
@@ -287,10 +287,10 @@ typedef UNITY_FLOAT_TYPE UNITY_FLOAT;
|
|||||||
#ifdef UNITY_USE_FLUSH_STDOUT
|
#ifdef UNITY_USE_FLUSH_STDOUT
|
||||||
/* We want to use the stdout flush utility */
|
/* We want to use the stdout flush utility */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#define UNITY_OUTPUT_FLUSH() (void)fflush(stdout)
|
#define UNITY_OUTPUT_FLUSH() (void)fflush(stdout)
|
||||||
#else
|
#else
|
||||||
/* We've specified nothing, therefore flush should just be ignored */
|
/* We've specified nothing, therefore flush should just be ignored */
|
||||||
#define UNITY_OUTPUT_FLUSH()
|
#define UNITY_OUTPUT_FLUSH() (void)0
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
/* If defined as something else, make sure we declare it here so it's ready for use */
|
/* If defined as something else, make sure we declare it here so it's ready for use */
|
||||||
@@ -302,11 +302,11 @@ typedef UNITY_FLOAT_TYPE UNITY_FLOAT;
|
|||||||
#ifndef UNITY_OUTPUT_FLUSH
|
#ifndef UNITY_OUTPUT_FLUSH
|
||||||
#define UNITY_FLUSH_CALL()
|
#define UNITY_FLUSH_CALL()
|
||||||
#else
|
#else
|
||||||
#define UNITY_FLUSH_CALL() UNITY_OUTPUT_FLUSH()
|
#define UNITY_FLUSH_CALL() UNITY_OUTPUT_FLUSH()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UNITY_PRINT_EOL
|
#ifndef UNITY_PRINT_EOL
|
||||||
#define UNITY_PRINT_EOL() UNITY_OUTPUT_CHAR('\n')
|
#define UNITY_PRINT_EOL() UNITY_OUTPUT_CHAR('\n')
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UNITY_OUTPUT_START
|
#ifndef UNITY_OUTPUT_START
|
||||||
@@ -365,19 +365,19 @@ typedef UNITY_FLOAT_TYPE UNITY_FLOAT;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UNITY_EXEC_TIME_START
|
#ifndef UNITY_EXEC_TIME_START
|
||||||
#define UNITY_EXEC_TIME_START() do{}while(0)
|
#define UNITY_EXEC_TIME_START() do { /* nothing*/ } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UNITY_EXEC_TIME_STOP
|
#ifndef UNITY_EXEC_TIME_STOP
|
||||||
#define UNITY_EXEC_TIME_STOP() do{}while(0)
|
#define UNITY_EXEC_TIME_STOP() do { /* nothing*/ } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UNITY_TIME_TYPE
|
#ifndef UNITY_TIME_TYPE
|
||||||
#define UNITY_TIME_TYPE UNITY_UINT
|
#define UNITY_TIME_TYPE UNITY_UINT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UNITY_PRINT_EXEC_TIME
|
#ifndef UNITY_PRINT_EXEC_TIME
|
||||||
#define UNITY_PRINT_EXEC_TIME() do{}while(0)
|
#define UNITY_PRINT_EXEC_TIME() do { /* nothing*/ } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*-------------------------------------------------------
|
/*-------------------------------------------------------
|
||||||
@@ -516,9 +516,9 @@ void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int
|
|||||||
#define UNITY_SET_DETAIL(d1)
|
#define UNITY_SET_DETAIL(d1)
|
||||||
#define UNITY_SET_DETAILS(d1,d2)
|
#define UNITY_SET_DETAILS(d1,d2)
|
||||||
#else
|
#else
|
||||||
#define UNITY_CLR_DETAILS() { Unity.CurrentDetail1 = 0; Unity.CurrentDetail2 = 0; }
|
#define UNITY_CLR_DETAILS() do { Unity.CurrentDetail1 = 0; Unity.CurrentDetail2 = 0; } while (0)
|
||||||
#define UNITY_SET_DETAIL(d1) { Unity.CurrentDetail1 = (d1); Unity.CurrentDetail2 = 0; }
|
#define UNITY_SET_DETAIL(d1) do { Unity.CurrentDetail1 = (d1); Unity.CurrentDetail2 = 0; } while (0)
|
||||||
#define UNITY_SET_DETAILS(d1,d2) { Unity.CurrentDetail1 = (d1); Unity.CurrentDetail2 = (d2); }
|
#define UNITY_SET_DETAILS(d1,d2) do { Unity.CurrentDetail1 = (d1); Unity.CurrentDetail2 = (d2); } while (0)
|
||||||
|
|
||||||
#ifndef UNITY_DETAIL1_NAME
|
#ifndef UNITY_DETAIL1_NAME
|
||||||
#define UNITY_DETAIL1_NAME "Function"
|
#define UNITY_DETAIL1_NAME "Function"
|
||||||
@@ -798,7 +798,7 @@ int UnityTestMatches(void);
|
|||||||
* Test Asserts
|
* Test Asserts
|
||||||
*-------------------------------------------------------*/
|
*-------------------------------------------------------*/
|
||||||
|
|
||||||
#define UNITY_TEST_ASSERT(condition, line, message) do {if (condition) {} else {UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), (message));}} while(0)
|
#define UNITY_TEST_ASSERT(condition, line, message) do { if (condition) { /* nothing*/ } else { UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), (message)); } } while (0)
|
||||||
#define UNITY_TEST_ASSERT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) == NULL), (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_NOT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) != NULL), (UNITY_LINE_TYPE)(line), (message))
|
||||||
#define UNITY_TEST_ASSERT_EMPTY(pointer, line, message) UNITY_TEST_ASSERT(((pointer[0]) == 0), (UNITY_LINE_TYPE)(line), (message))
|
#define UNITY_TEST_ASSERT_EMPTY(pointer, line, message) UNITY_TEST_ASSERT(((pointer[0]) == 0), (UNITY_LINE_TYPE)(line), (message))
|
||||||
|
|||||||
Reference in New Issue
Block a user