Merge branch 'master' into more-float

This commit is contained in:
Jonathan Reichelt Gjertsen
2021-12-03 18:23:22 +01:00
6 changed files with 96 additions and 64 deletions

View File

@@ -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

View File

@@ -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]}\"`

View File

@@ -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_ */

View File

@@ -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)

View File

@@ -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") */

View File

@@ -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))