1#ifdef TEST_INSTANCES 2 3#include <string.h> 4#include <stdint.h> 5 6/* Dividing by these constants produces +/- infinity. 7 * The rationale is given in UnityAssertFloatIsInf's body. 8 */ 9#ifndef UNITY_EXCLUDE_FLOAT 10static const UNITY_FLOAT f_zero = 0.0f; 11#endif 12 13#ifndef UNITY_EXCLUDE_DOUBLE 14static const UNITY_DOUBLE d_zero = 0.0; 15#endif 16 17/* Macros for Catching An Expected Failure or Ignore */ 18#define EXPECT_ABORT_BEGIN \ 19 startPutcharSpy(); \ 20 if (TEST_PROTECT()) \ 21 { 22 23#define VERIFY_FAILS_END \ 24 } \ 25 endPutcharSpy(); /* start/end Spy to suppress output of failure message */ \ 26 Unity.CurrentTestFailed = (Unity.CurrentTestFailed == 1) ? 0 : 1; \ 27 if (Unity.CurrentTestFailed == 1) { \ 28 SetToOneMeanWeAlreadyCheckedThisGuy = 1; \ 29 UnityPrintNumberUnsigned(Unity.CurrentTestLineNumber); \ 30 UNITY_OUTPUT_CHAR(':'); \ 31 UnityPrint(Unity.CurrentTestName); \ 32 UnityPrint(":FAIL: [[[[ Test Should Have Failed But Did Not ]]]]"); \ 33 UNITY_OUTPUT_CHAR('\n'); \ 34 } 35 36#define VERIFY_IGNORES_END \ 37 } \ 38 endPutcharSpy(); /* start/end Spy to suppress output of ignore message */ \ 39 Unity.CurrentTestFailed = (Unity.CurrentTestIgnored == 1) ? 0 : 1; \ 40 Unity.CurrentTestIgnored = 0; \ 41 if (Unity.CurrentTestFailed == 1) { \ 42 SetToOneMeanWeAlreadyCheckedThisGuy = 1; \ 43 UnityPrintNumberUnsigned(Unity.CurrentTestLineNumber); \ 44 UNITY_OUTPUT_CHAR(':'); \ 45 UnityPrint(Unity.CurrentTestName); \ 46 UnityPrint(":FAIL: [[[[ Test Should Have Ignored But Did Not ]]]]"); \ 47 UNITY_OUTPUT_CHAR('\n'); \ 48 } 49 50/* Tricky series of macros to set USING_OUTPUT_SPY */ 51#define USING_SPY_AS(a) EXPAND_AND_USE_2ND(ASSIGN_VALUE(a), 0) 52#define ASSIGN_VALUE(a) VAL_##a 53#define VAL_putcharSpy 0, 1 54#define EXPAND_AND_USE_2ND(a, b) SECOND_PARAM(a, b, throwaway) 55#define SECOND_PARAM(a, b, ...) b 56#if USING_SPY_AS(UNITY_OUTPUT_CHAR) 57 #define USING_OUTPUT_SPY /* true only if UNITY_OUTPUT_CHAR = putcharSpy */ 58#endif 59 60#ifdef USING_OUTPUT_SPY 61#include <stdio.h> 62#define SPY_BUFFER_MAX 40 63static char putcharSpyBuffer[SPY_BUFFER_MAX]; 64#endif 65static int indexSpyBuffer; 66static int putcharSpyEnabled; 67 68void startPutcharSpy(void) 69{ 70 indexSpyBuffer = 0; 71 putcharSpyEnabled = 1; 72} 73 74void endPutcharSpy(void) 75{ 76 putcharSpyEnabled = 0; 77} 78 79char* getBufferPutcharSpy(void) 80{ 81#ifdef USING_OUTPUT_SPY 82 putcharSpyBuffer[indexSpyBuffer] = '\0'; 83 return putcharSpyBuffer; 84#else 85 return NULL; 86#endif 87} 88 89void putcharSpy(int c) 90{ 91#ifdef USING_OUTPUT_SPY 92 if (putcharSpyEnabled) 93 { 94 if (indexSpyBuffer < SPY_BUFFER_MAX - 1) 95 putcharSpyBuffer[indexSpyBuffer++] = (char)c; 96 } else 97 putchar((char)c); 98#else 99 (void)c; 100#endif 101} 102 103/* This is for counting the calls to the flushSpy */ 104static int flushSpyEnabled; 105static int flushSpyCalls = 0; 106 107void startFlushSpy(void) 108{ 109 flushSpyCalls = 0; 110 flushSpyEnabled = 1; 111} 112 113void endFlushSpy(void) 114{ 115 flushSpyCalls = 0; 116 flushSpyEnabled = 0; 117} 118 119int getFlushSpyCalls(void) 120{ 121 return flushSpyCalls; 122} 123 124void flushSpy(void) 125{ 126 if (flushSpyEnabled){ flushSpyCalls++; } 127} 128 129#define TEST_ASSERT_EQUAL_PRINT_NUMBERS(expected, actual) { \ 130 startPutcharSpy(); UnityPrintNumber((actual)); endPutcharSpy(); \ 131 TEST_ASSERT_EQUAL_STRING((expected), getBufferPutcharSpy()); \ 132 } 133 134#define TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS(expected, actual) { \ 135 startPutcharSpy(); UnityPrintNumberUnsigned((actual)); endPutcharSpy(); \ 136 TEST_ASSERT_EQUAL_STRING((expected), getBufferPutcharSpy()); \ 137 } 138 139#define TEST_ASSERT_EQUAL_PRINT_FLOATING(expected, actual) { \ 140 startPutcharSpy(); UnityPrintFloat((actual)); endPutcharSpy(); \ 141 TEST_ASSERT_EQUAL_STRING((expected), getBufferPutcharSpy()); \ 142 } 143 144#endif 145