Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing header in mocked version #982

Closed
JuPrgn opened this issue Oct 24, 2024 · 13 comments
Closed

Missing header in mocked version #982

JuPrgn opened this issue Oct 24, 2024 · 13 comments

Comments

@JuPrgn
Copy link
Contributor

JuPrgn commented Oct 24, 2024

Hi,

I am currently switching from Ceedling 0.31 to 1.0.0 on a project that is already fully tested.

Usually my modules are arranged like that :

  • Module.c (all functions definitions)
  • Module.h ("public" functions declarations and typedef struct...)
  • Module_private.h (STATIC functions)
  • test_Module.c (test "public" functions while mocking "private" functions)
  • test_Module_private.c (test "private" functions)

Module.c includes both Module.h and Module_private.h
Module_private.h include Module.h to get specific typedef

On my test files test_Module.c include Module.h and mock Module_private.h

This configurations was working with previous versions but on latest CMock (2.6.0) Module.h is not included in the mocked Module_private.h and the compiler complains about some types that are not defined (typedef structs from Module.h).

I generated a new project with latestCeedling pre-release to get default configuration yaml and then applied my old configuration following new documentation, maybe I missed something there ? Or this is no more achievable and there is now a better way to do it ?

# =========================================================================
#   Ceedling - Test-Centered Build System for C
#   ThrowTheSwitch.org
#   Copyright (c) 2010-24 Mike Karlesky, Mark VanderVoord, & Greg Williams
#   SPDX-License-Identifier: MIT
# =========================================================================

---
:project:
  :which_ceedling: vendor/ceedling
  :ceedling_version: 1.0.0

  :use_mocks: TRUE
  :use_test_preprocessor: :all
  :use_backtrace: :simple
  :use_decorators: :auto #Decorate Ceedling's output text. Your options are :auto, :all, or :none

  :build_root: build_test
  :test_file_prefix: test_
  :default_tasks:
    - test:all

  :test_threads: 8
  :compile_threads: 8
  :release_build: FALSE

:mixins:
  :enabled: []
  :load_paths: []

:test_build:
  :use_assembly: FALSE
  
:release_build:
  :output: MyApp.out
  :use_assembly: FALSE
  :artifacts: []

:plugins:
  :load_paths: []
  :enabled:
    - report_tests_pretty_stdout
    - report_tests_raw_output_log

:extension:
  :executable: .hex

:paths:
  :test:
    - +:test/**
    - -:test/support
  :source:
    - src/**
  :include:
    - src/** # In simple projects, this entry often duplicates :source
    - test/support 
  :support:
    - test/support
  :libraries: []

:files:
  :test: []
  :source: []

:defines:
  :commmon: &common_defines
    - UNITY_INT_WIDTH=16
    - CMOCK_MEM_INDEX_TYPE=uint16_t
    # - CMOCK_MEM_PTR_AS_INT=uint16_t # segmentation fault avec GCC dès l'utilisation de ExpectAndReturn si spécifié
    - CMOCK_MEM_ALIGN=1
    - CMOCK_MEM_SIZE=4096
  :test:
    - *common_defines
    - TEST # Simple list option to add symbol 'TEST' to compilation of all files in all test executables
    # - __eds__=
  :test_preprocess:
    - *common_defines
    - TEST
  :release: []

  # Enable to inject name of a test as a unique compilation symbol into its respective executable build. 
  :use_test_definition: FALSE 

:cmock:
  # Core conffiguration
  :plugins:                        # What plugins should be used by CMock?
    - :ignore
    - :callback
  :verbosity:  2                   # the options being 0 errors only, 1 warnings and errors, 2 normal info, 3 verbose
  :when_no_prototypes:  :warn      # the options being :ignore, :warn, or :erro

  # File configuration
  :skeleton_path:  ''              # Subdirectory to store stubs when generated (default: '')
  :mock_prefix:  'mock_'           # Prefix to append to filenames for mocks
  :mock_suffix:  ''                # Suffix to append to filenames for mocks

  # Parser configuration
  :strippables:  ['(?:__attribute__\s*\([ (]*.*?[ )]*\)+)']
  :attributes:
     - __ramfunc
     - __irq
     - __fiq
     - register
     - extern
  :c_calling_conventions:
     - __stdcall
     - __cdecl
     - __fastcall
  :treat_externs:  :exclude        # the options being :include or :exclude
  :treat_inlines:  :include        # the options being :include or :exclude

  # Type handling configuration
  #:unity_helper_path: ''          # specify a string of where to find a unity_helper.h file to discover custom type assertions
  :treat_as:                       # optionally add additional types to map custom types
    uint8:    HEX8
    uint16:   HEX16
    uint32:   UINT32
    uint64:   UINT64
    int8:     INT8
    bool:     UINT8
  #:treat_as_array:  {}            # hint to cmock that these types are pointers to something
  #:treat_as_void:  []             # hint to cmock that these types are actually aliases of void
  :memcmp_if_unknown:  true        # allow cmock to use the memory comparison assertions for unknown types
  :when_ptr:  :compare_data        # hint to cmock how to handle pointers in general, the options being :compare_ptr, :compare_data, or :smart

  # Mock generation configuration
  :weak:  ''                       # Symbol to use to declare weak functions
  :enforce_strict_ordering: true   # Do we want cmock to enforce ordering of all function calls?
  :fail_on_unexpected_calls: true  # Do we want cmock to fail when it encounters a function call that wasn't expected?
  :callback_include_count: true    # Do we want cmock to include the number of calls to this callback, when using callbacks?
  :callback_after_arg_check: false # Do we want cmock to enforce an argument check first when using a callback?
  #:includes: []                   # You can add additional includes here, or specify the location with the options below
  :includes_h_pre_orig_header: [] 
  #:includes_h_post_orig_header: []
  #:includes_c_pre_header:  []
  #:includes_c_post_header:  []
  #:array_size_type:  []            # Specify a type or types that should be used for array lengths
  #:array_size_name:  'size|len'    # Specify a name or names that CMock might automatically recognize as the length of an array
  :exclude_setjmp_h:  false        # Don't use setjmp when running CMock. Note that this might result in late reporting or out-of-order failures.
...

@JuPrgn
Copy link
Contributor Author

JuPrgn commented Oct 24, 2024

Using previous Ceedling there was no Module_private.h on test/mocks/ something strange is that this file now contains a single header clock.h that is included in others included headers on the original files but the others header are not included :

  • Module.h include : Error.h and MyTypes.h
  • MyTypes.h include : MyConfig.h, LoadAnalysis.h, include clock.h and pins.h

If I disable prepocessor on my configuration, only Module.h is now included in this test/mocks/Module_private.h but my STATIC functions are not parsed to remove the static keyword. #define STATIC using this #ifdef TEST trick to remove static on tests.

@JuPrgn
Copy link
Contributor Author

JuPrgn commented Oct 25, 2024

I did a small example to reproduce this if you want to give it a try. On this example there is no more clock.h but the only header included in test/mocks/Timer_private.h is MyTypes.h instead of Timer.h
SimpleTest.zip

@JuPrgn
Copy link
Contributor Author

JuPrgn commented Oct 29, 2024

I've tried a lot with different configurations and haven't found a solution, if anyone uses a similar module structure and you have a tip I'm interested =)

@JuPrgn
Copy link
Contributor Author

JuPrgn commented Nov 1, 2024

Related to #938, #706

@mkarlesky
Copy link
Member

Hi, @JuPrgn. Thank you for this report. I suspect it is largely related to the Ceedling issue you cited.

I confess that I am having a little trouble following your report. The code structure and conventions you are using seem sensible and smart. I'm struggling to follow where the header files and other details that were previously working are no longer working.

Could you kindly provide the following? (I apologize that this is not necessarily a small request.)

  1. The simple example you provided with the build directory in the archive from a 0.31.x build (omit any compilation artifacts or executables).
  2. The same as above but with the build directory from a 1.0.0 prerelease build (again, no compilation artifacts or executables).
  3. Using each version of Ceedling's verbose debugging logging output, the 1.0.0 failing compilation command line and the corresponding successful compilation command line for 0.31.

Ultimately, I suspect that you were getting “lucky” with 0.31. We've been on a winding path of finding the right way to do things with 1.0.0 that supports as many advanced scenarios as possible while also fixing a number of bugs in 0.31. In particular, we unknowingly regressed on static and inline mocking while fixing other problems. We have a much better approach now in the works. It might be all that you need, but it's not quite ready yet.

@JuPrgn
Copy link
Contributor Author

JuPrgn commented Nov 22, 2024

Hi @mkarlesky, thanks for your interest in my problem.
This code architecture was specifically defined to allow via Ceedling to test the "public API" and the "private functions" I completely understand that it may no longer work it was a kind of tinkering to achieve our ends.

I hope I understood your requests, I removed the .hex and the artifacts folder in build, please let me know if I can provide something else or modify if I forgot something.

You will find a folder with the project configured for version 0.31.0 I left the script folder with the command line that I execute through my Docker image (also available in the folder if needed). You will also find the same thing configured with version 1.0.0-9fc30fb.

And below, following, the compilation outputs with verbosity at 4 for both projects:

0.31.0 Output :
ceedling verbosity[4] project:project_GCC test:all

   Ceedling:: 0.31.0
      Unity:: 2.5.2
      CMock:: 2.5.3
 CException:: 1.3.3
mkdir -p build/test/mocks
mkdir -p build/artifacts
mkdir -p build/artifacts/test
mkdir -p build/test/runners
mkdir -p build/test/results
mkdir -p build/test/out
mkdir -p build/test/out/asm
mkdir -p build/test/out/c
mkdir -p build/test/cache
mkdir -p build/test/dependencies
mkdir -p build/logs
mkdir -p build/temp
mkdir -p build/test/preprocess/includes
mkdir -p build/test/preprocess/files
mkdir -p build/gcov/out
mkdir -p build/gcov/results
mkdir -p build/gcov/dependencies
mkdir -p build/artifacts/gcov


Test 'test_Timer.c'
-------------------
> Shell executed command:
'gcc -E -MM -MG -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER "build/temp/_test_Timer.c"'
> Produced output:
_test_Timer.o: build/temp/_test_Timer.c \
 /project/vendor/ceedling/vendor/unity/src/unity.h \
 /project/vendor/ceedling/vendor/unity/src/unity_internals.h @@@@unity.h \
 src/Error.h src/MyTypes.h @@@@Error.h src/Timer.h src/Error.h \
 @@@@Timer.h mock_Timer_private.h @@@@mock_Timer_private.h

Preprocessing Timer_private.h...
Generating include list for Timer_private.h...
> Shell executed command:
'gcc -E -MM -MG -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER "build/temp/_Timer_private.h"'
> Produced output:
_Timer_private.o: build/temp/_Timer_private.h src/Timer.h src/Error.h \
 src/MyTypes.h @@@@Timer.h

> Shell executed command:
'gcc -E -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER "src/Timer_private.h" -o "build/test/preprocess/files/Timer_private.h"'

Creating mock for Timer_private...
> Shell executed command:
'gcc -E -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER "test/test_Timer.c" -o "build/test/preprocess/files/test_Timer.c"'

Generating dependencies for test_Timer.c...
> Shell executed command:
'gcc -E -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -MT "build/test/out/c/test_Timer.o" -MM -MD -MG -MF "build/test/dependencies/test_Timer.d" -c "test/test_Timer.c"'

Generating dependencies for mock_Timer_private.c...
> Shell executed command:
'gcc -E -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -MT "build/test/out/c/mock_Timer_private.o" -MM -MD -MG -MF "build/test/dependencies/mock_Timer_private.d" -c "build/test/mocks/mock_Timer_private.c"'

Generating dependencies for unity.c...
> Shell executed command:
'gcc -E -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -MT "build/test/out/c/unity.o" -MM -MD -MG -MF "build/test/dependencies/unity.d" -c "/project/vendor/ceedling/vendor/unity/src/unity.c"'

Generating dependencies for Timer.c...
> Shell executed command:
'gcc -E -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -MT "build/test/out/c/Timer.o" -MM -MD -MG -MF "build/test/dependencies/Timer.d" -c "src/Timer.c"'

Generating runner for test_Timer.c...
Compiling test_Timer_runner.c...
> Shell executed command:
'gcc -fpack-struct -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -g -c "build/test/runners/test_Timer_runner.c" -o "build/test/out/c/test_Timer_runner.o" -MMD -MF "build/test/dependencies/test_Timer_runner.d"'

Compiling test_Timer.c...
> Shell executed command:
'gcc -fpack-struct -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -g -c "test/test_Timer.c" -o "build/test/out/c/test_Timer.o" -MMD -MF "build/test/dependencies/test_Timer.d"'

Compiling mock_Timer_private.c...
> Shell executed command:
'gcc -fpack-struct -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -g -c "build/test/mocks/mock_Timer_private.c" -o "build/test/out/c/mock_Timer_private.o" -MMD -MF "build/test/dependencies/mock_Timer_private.d"'

Compiling unity.c...
> Shell executed command:
'gcc -fpack-struct -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -g -c "/project/vendor/ceedling/vendor/unity/src/unity.c" -o "build/test/out/c/unity.o" -MMD -MF "build/test/dependencies/unity.d"'

Compiling Timer.c...
> Shell executed command:
'gcc -fpack-struct -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -g -c "src/Timer.c" -o "build/test/out/c/Timer.o" -MMD -MF "build/test/dependencies/Timer.d"'

Compiling cmock.c...
> Shell executed command:
'gcc -fpack-struct -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -g -c "/project/vendor/ceedling/vendor/cmock/src/cmock.c" -o "build/test/out/c/cmock.o" -MMD -MF "build/test/dependencies/cmock.d"'

Linking test_Timer.hex...
> Shell executed command:
'gcc -Wl,--allow-multiple-definition "build/test/out/c/test_Timer_runner.o" "build/test/out/c/test_Timer.o" "build/test/out/c/mock_Timer_private.o" "build/test/out/c/unity.o" "build/test/out/c/Timer.o" "build/test/out/c/cmock.o" -o "build/test/out/test_Timer.hex" -lm'

Running test_Timer.hex...
> Shell executed command:
'build/test/out/test_Timer.hex 2>&1'
> Produced output:
test_Timer.c:94:test_TMR_Init:PASS
test_Timer.c:101:test_TMR_Clear_NullPointer:PASS
test_Timer.c:101:test_TMR_Clear:PASS
test_Timer.c:131:test_TMR_SetInterval_NullPointer:PASS
test_Timer.c:137:test_TMR_SetInterval_TimerEnabled:PASS
test_Timer.c:137:test_TMR_SetInterval:PASS
test_Timer.c:154:test_TMR_SetSingleShot_NullPointer:PASS
test_Timer.c:160:test_TMR_SetSingleShot_TimerEnabled:PASS
test_Timer.c:160:test_TMR_SetSingleShot:PASS
test_Timer.c:175:test_TMR_SetCallBack_NullPointers:PASS
test_Timer.c:181:test_TMR_SetCallBack_NullTimer:PASS
test_Timer.c:187:test_TMR_SetCallBack_NullCallback:PASS
test_Timer.c:193:test_TMR_SetCallBack_TimerEnabled:PASS
test_Timer.c:193:test_TMR_SetCallBack:PASS
test_Timer.c:208:test_TMR_ResetElapsedTime_Nullpointer:PASS
test_Timer.c:208:test_TMR_ResetElapsedTime:PASS
test_Timer.c:223:test_TMR_Start_NullPointer:PASS
test_Timer.c:231:test_TMR_Start_TimerEnabled:PASS
test_Timer.c:231:test_TMR_Start:PASS
test_Timer.c:248:test_TMR_Stop_NullPointer:PASS
test_Timer.c:255:test_TMR_Stop_TimerDisabled:PASS
test_Timer.c:262:test_TMR_Stop_TimerEnabled:PASS
test_Timer.c:269:test_TMR_AddTimer_NullPointer:PASS
test_Timer.c:275:test_TMR_AddTimer_WrongParameters:PASS
test_Timer.c:282:test_TMR_AddTimer_TimerAlreadyInList:PASS
test_Timer.c:282:test_TMR_AddTimer:PASS
test_Timer.c:305:test_TMR_RemoveTimer_NullPointer:PASS
test_Timer.c:311:test_TMR_RemoveTimer_TimerNotInList:PASS
test_Timer.c:311:test_TMR_RemoveTimer:PASS
test_Timer.c:332:test_TMR_CheckTimersToUpdate_NoTimer:PASS
test_Timer.c:338:test_TMR_CheckTimersToUpdate_OneTimerFirstIndex:PASS
test_Timer.c:346:test_TMR_CheckTimersToUpdate_OneTimerLastIndex:PASS
test_Timer.c:354:test_TMR_CheckTimersToUpdate_16Timers:PASS
test_Timer.c:369:test_TMR_CheckTimersToUpdate_32Timers:PASS

-----------------------
34 Tests 0 Failures 0 Ignored
OK



Test 'test_Timer_private.c'
---------------------------
> Shell executed command:
'gcc -E -MM -MG -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER "build/temp/_test_Timer_private.c"'
> Produced output:
_test_Timer_private.o: build/temp/_test_Timer_private.c \
 /project/vendor/ceedling/vendor/unity/src/unity.h \
 /project/vendor/ceedling/vendor/unity/src/unity_internals.h @@@@unity.h \
 src/Timer_private.h src/Timer.h src/Error.h src/MyTypes.h \
 @@@@Timer_private.h src/Error.h @@@@Error.h src/Timer.h @@@@Timer.h

> Shell executed command:
'gcc -E -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER "test/test_Timer_private.c" -o "build/test/preprocess/files/test_Timer_private.c"'

Generating dependencies for test_Timer_private.c...
> Shell executed command:
'gcc -E -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -MT "build/test/out/c/test_Timer_private.o" -MM -MD -MG -MF "build/test/dependencies/test_Timer_private.d" -c "test/test_Timer_private.c"'

Generating runner for test_Timer_private.c...
Compiling test_Timer_private_runner.c...
> Shell executed command:
'gcc -fpack-struct -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -g -c "build/test/runners/test_Timer_private_runner.c" -o "build/test/out/c/test_Timer_private_runner.o" -MMD -MF "build/test/dependencies/test_Timer_private_runner.d"'

Compiling test_Timer_private.c...
> Shell executed command:
'gcc -fpack-struct -I"/project/vendor/ceedling/vendor/unity/src" -I"/project/vendor/ceedling/vendor/cmock/src" -I"build/test/mocks" -I"test" -I"src" -DUNITY_INT_WIDTH=16 -DCMOCK_MEM_INDEX_TYPE=uint16_t -DCMOCK_MEM_ALIGN=1 -DCMOCK_MEM_SIZE=4096 -DTEST -DTEST_GCC -DGNU_COMPILER -g -c "test/test_Timer_private.c" -o "build/test/out/c/test_Timer_private.o" -MMD -MF "build/test/dependencies/test_Timer_private.d"'

Linking test_Timer_private.hex...
> Shell executed command:
'gcc -Wl,--allow-multiple-definition "build/test/out/c/test_Timer_private_runner.o" "build/test/out/c/test_Timer_private.o" "build/test/out/c/unity.o" "build/test/out/c/Timer.o" "build/test/out/c/cmock.o" -o "build/test/out/test_Timer_private.hex" -lm'

Running test_Timer_private.hex...
> Shell executed command:
'build/test/out/test_Timer_private.hex 2>&1'
> Produced output:
test_Timer_private.c:82:test_TMR_CheckParameters_Interval_Null:PASS
test_Timer_private.c:88:test_TMR_CheckParameters_Timeout_Null:PASS
test_Timer_private.c:94:test_TMR_CheckParameters_IntervalAndTimeout_Null:PASS
test_Timer_private.c:94:test_TMR_CheckParameters:PASS
test_Timer_private.c:106:test_TMR_UpdateTimer_Disabled:PASS
test_Timer_private.c:111:test_TMR_UpdateTimer_Enabled:PASS
test_Timer_private.c:120:test_TMR_UpdateTimer_Enabled_Elapsed_Singleshot:PASS
test_Timer_private.c:132:test_TMR_UpdateTimer_Enabled_Elapsed_NotSingleshot:PASS
test_Timer_private.c:144:test_TMR_Timeout_NullPointer:PASS
test_Timer_private.c:144:test_TMR_Timeout:PASS
test_Timer_private.c:157:test_TMR_RoundInterval_RatioZero:PASS
test_Timer_private.c:157:test_TMR_RoundInterval:PASS
test_Timer_private.c:170:test_TMR_ResetList:PASS
test_Timer_private.c:185:test_TMR_AddItem_ListFull:PASS
test_Timer_private.c:192:test_TMR_AddItem_LastFreeIndex:PASS
test_Timer_private.c:192:test_TMR_AddItem:PASS
test_Timer_private.c:220:test_TMR_RemoveItem_ItemNotFound:PASS
test_Timer_private.c:226:test_TMR_RemoveItem_ItemFound_ListFull:PASS
test_Timer_private.c:244:test_TMR_RemoveItem_ItemFound_ListNotFull:PASS
test_Timer_private.c:262:test_TMR_SearchItem_ItemNotFound:PASS
test_Timer_private.c:269:test_TMR_SearchItem_ItemFound_1Item:PASS
test_Timer_private.c:277:test_TMR_SearchItem_ItemFound_32Items:PASS

-----------------------
22 Tests 0 Failures 0 Ignored
OK


--------------------
OVERALL TEST SUMMARY
--------------------
TESTED:  56
PASSED:  56
FAILED:   0
IGNORED:  0

1.0.0 Output :
ceedling --verbosity=debug --project=project.yml --mixin=project_GCC.yml test:all

🌱 Welcome to Ceedling!

  Ceedling => 1.0.0-9fc30fb
  ----------------------
  /usr/local/bundle/gems/ceedling-1.0.0/

  Build Frameworks
  ----------------------
       CMock => 2.6.0
       Unity => 2.6.0
  CException => 1.3.4
🚧 Loaded project configuration from command line argument.
 > Using: /project/project.yml
 > Working directory: /project
 + Merging command line mixin using project_GCC.yml
 > Set which Ceedling from config :project ↳ :which_ceedling => gem
 > Launching Ceedling from /usr/local/bundle/gems/ceedling-1.0.0/

🚧 Application & Build Frameworks
   Ceedling => 1.0.0-9fc30fb
      CMock => 2.6.0
      Unity => 2.6.0
 CException => 1.3.4

🚧 Validating configuration contains minimum required sections...

🚧 Project Configuration Handling
---------------------------------
Processing environment variables...
Processing Unity configuration...
Processing CMock configuration...

🚧 Plugin Handling
------------------
Discovering all plugins...
 > Rake plugins: gcov
 > Programmatic plugins: report_tests_pretty_stdout, report_tests_raw_output_log, gcov
 > Config plugins: report_tests_pretty_stdout
Merging configuration from plugin report_tests_pretty_stdout...
{:plugins=>{:display_raw_test_results=>false}}

🚧 Assembling Default Settings
------------------------------
Collecting default tool configurations...
Collecting CMock defaults...
Collecting Plugin YAML defaults...
 - gcov >> {:gcov=>{:summaries=>true, :report_task=>false, :utilities=>["gcovr"], :reports=>[], :gcovr=>{:report_root=>".", :merge_mode_function=>"merge-use-line-max"}, :report_generator=>{:verbosity=>"Warning", :collection_paths_source=>[], :custom_args=>[], :gcov_exclude=>[]}}}
Collecting Plugin Ruby hash defaults...
 - gcov >> {:tools=>{:gcov_compiler=>{:executable=>"gcc", :name=>"default_gcov_compiler", :optional=>false, :arguments=>["-g", "-fprofile-arcs", "-ftest-coverage", "-I\"${5}\"", "-D\"${6}\"", "-DGCOV_COMPILER", "-DCODE_COVERAGE", "-c \"${1}\"", "-o \"${2}\"", "-MMD", "-MF \"${4}\""]}, :gcov_linker=>{:executable=>"gcc", :name=>"default_gcov_linker", :optional=>false, :arguments=>["-g", "-fprofile-arcs", "-ftest-coverage", "${1}", "${5}", "-o \"${2}\"", "${4}"]}, :gcov_fixture=>{:executable=>"${1}", :name=>"default_gcov_fixture", :optional=>false, :arguments=>[]}, :gcov_summary=>{:executable=>"gcov", :name=>"default_gcov_summary", :optional=>true, :arguments=>["-n", "-p", "-b", "-o \"${2}\"", "\"${1}\""]}, :gcov_report=>{:executable=>"gcov", :name=>"default_gcov_report", :optional=>true, :arguments=>["-b", "-c", "-r", "-x", "${1}"]}, :gcov_gcovr_report=>{:executable=>"gcovr", :name=>"default_gcov_gcovr_report", :optional=>true, :arguments=>["${1}"]}, :gcov_reportgenerator_report=>{:executable=>"reportgenerator", :name=>"default_gcov_reportgenerator_report", :optional=>true, :arguments=>["${1}"]}}}
Populating project configuration with collected default values...

🚧 Completing Project Configuration
-----------------------------------
Populating test runner generation settings...
Unity configuration >> {:defines=>["UNITY_EXCLUDE_FLOAT"], :vendor_path=>"/usr/local/bundle/gems/ceedling-1.0.0/vendor", :use_param_tests=>false}
CMock configuration >> {:plugins=>[:ignore, :callback], :verbosity=>2, :when_no_prototypes=>:warn, :skeleton_path=>"", :mock_prefix=>"mock_", :mock_suffix=>"", :strippables=>["(?:__attribute__\\s*\\([ (]*.*?[ )]*\\)+)"], :attributes=>["__ramfunc", "__irq", "__fiq", "register", "extern"], :c_calling_conventions=>["__stdcall", "__cdecl", "__fastcall"], :treat_externs=>:exclude, :treat_inlines=>:include, :treat_as=>{"uint8"=>"HEX8", "uint16"=>"HEX16", "uint32"=>"UINT32", "uint64"=>"UINT64", "int8"=>"INT8", "bool"=>"UINT8"}, :memcmp_if_unknown=>true, :when_ptr=>:compare_data, :weak=>"", :enforce_strict_ordering=>true, :fail_on_unexpected_calls=>true, :callback_include_count=>true, :callback_after_arg_check=>false, :exclude_setjmp_h=>false, :vendor_path=>"/usr/local/bundle/gems/ceedling-1.0.0/vendor", :includes=>[], :unity_helper_path=>[], :defines=>[], :mock_path=>"build/test/mocks"}
Test Runner configuration >> {:cmdline_args=>true, :includes=>[], :defines=>["UNITY_EXCLUDE_FLOAT"], :file_suffix=>"_runner", :mock_prefix=>"mock_", :mock_suffix=>"", :enforce_strict_ordering=>true, :use_param_tests=>false}
CException configuration >> {:vendor_path=>"/usr/local/bundle/gems/ceedling-1.0.0/vendor", :defines=>[]}
Processing environment variables...
Processing path entries and expanding any string replacements...
Expanding any string replacements in :flags entries...
Expanding any string replacements in :defines entries...
Standardizing all paths...
Populating tool definition settings and expanding any string replacements...
Processing tool definition shortcuts...
 > test_linker
   arguments: "-lm"
 > gcov_linker
   arguments: "-lm"

🚧 Validating final project configuration...
Build paths:
 - build/test/mocks
 - build/artifacts
 - build/test
 - build/vendor
 - build/artifacts/test
 - build/test/runners
 - build/test/results
 - build/test/out
 - build/test/cache
 - build/test/dependencies
 - build/vendor/unity/src
 - build/vendor/cmock/src
 - build/logs
 - build/test/preprocess/includes
 - build/test/preprocess/files

🚧 Loading Plugins
------------------
Adding plugin gcov to Rake load list...
Instantiating plugin class ReportTestsPrettyStdout...
Instantiating plugin class ReportTestsRawOutputLog...
Instantiating plugin class Gcov...

Ceedling set up completed in 306 milliseconds
mkdir -p build/gcov/out
mkdir -p build/gcov/results
mkdir -p build/gcov/dependencies
mkdir -p build/artifacts/gcov

👟 Preparing Build Paths...

👟 Collecting Test Context
--------------------------
Parsing test_Timer.c for build directive macros...
Parsing test_Timer_private.c for build directive macros...

👟 Ingesting Test Configurations
--------------------------------
Collecting search paths, flags, and defines test_Timer.c...
Collecting search paths, flags, and defines test_Timer_private.c...

👟 Collecting Test Context
--------------------------
Preprocessing #include statements for test_Timer.c...
Preprocessing #include statements for test_Timer_private.c...
Extracting #include statements via preprocessor from test_Timer.c...
Command: {:name=>"default_test_shallow_includes_preprocessor", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -E -MM -MG -MP -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -DGNU_COMPILER -nostdinc -x c \"test/test_Timer.c\""}
Extracting #include statements via preprocessor from test_Timer_private.c...
Command: {:name=>"default_test_shallow_includes_preprocessor", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -E -MM -MG -MP -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -DGNU_COMPILER -nostdinc -x c \"test/test_Timer_private.c\""}

> Shell executed command:
`gcc -fpack-struct -E -MM -MG -MP -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -DGNU_COMPILER -nostdinc -x c "test/test_Timer.c"`
> With $stdout:
test_Timer.o: test/test_Timer.c unity.h Error.h Timer.h \
 mock_Timer_private.h
unity.h:
Error.h:
Timer.h:
mock_Timer_private.h:
> With $stderr: <empty>
> And terminated with status: pid 19 exit 0

Command: {:name=>"default_test_nested_includes_preprocessor", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -E -MM -MG -H -I\"build/test/mocks/test_Timer\" -I\"src\" -I\"build/vendor/unity/src\" -I\"build/vendor/cmock/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -DGNU_COMPILER -nostdinc -x c \"test/test_Timer.c\""}

> Shell executed command:
`gcc -fpack-struct -E -MM -MG -MP -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -DGNU_COMPILER -nostdinc -x c "test/test_Timer_private.c"`
> With $stdout:
test_Timer_private.o: test/test_Timer_private.c unity.h Timer_private.h \
 Error.h Timer.h
unity.h:
Timer_private.h:
Error.h:
Timer.h:
> With $stderr: <empty>
> And terminated with status: pid 24 exit 0

Command: {:name=>"default_test_nested_includes_preprocessor", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -E -MM -MG -H -I\"build/test/mocks/test_Timer_private\" -I\"src\" -I\"build/vendor/unity/src\" -I\"build/vendor/cmock/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -DGNU_COMPILER -nostdinc -x c \"test/test_Timer_private.c\""}

> Shell executed command:
`gcc -fpack-struct -E -MM -MG -H -I"build/test/mocks/test_Timer" -I"src" -I"build/vendor/unity/src" -I"build/vendor/cmock/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -DGNU_COMPILER -nostdinc -x c "test/test_Timer.c"`
> With $stdout:
test_Timer.o: test/test_Timer.c build/vendor/unity/src/unity.h \
 build/vendor/unity/src/unity_internals.h src/Error.h src/MyTypes.h \
 src/Timer.h src/Error.h mock_Timer_private.h
> With $stderr:
. build/vendor/unity/src/unity.h
.. build/vendor/unity/src/unity_internals.h
. src/Error.h
.. src/MyTypes.h
. src/Timer.h
.. src/Error.h
> And terminated with status: pid 31 exit 0

Extracted #include list from test/test_Timer.c:
 - build/vendor/unity/src/unity.h
 - src/Error.h
 - src/Timer.h
 - mock_Timer_private.h


> Shell executed command:
`gcc -fpack-struct -E -MM -MG -H -I"build/test/mocks/test_Timer_private" -I"src" -I"build/vendor/unity/src" -I"build/vendor/cmock/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -DGNU_COMPILER -nostdinc -x c "test/test_Timer_private.c"`
> With $stdout:
test_Timer_private.o: test/test_Timer_private.c \
 build/vendor/unity/src/unity.h build/vendor/unity/src/unity_internals.h \
 src/Timer_private.h src/Timer.h src/Error.h src/MyTypes.h src/Error.h \
 src/Timer.h
> With $stderr:
. build/vendor/unity/src/unity.h
.. build/vendor/unity/src/unity_internals.h
. src/Timer_private.h
.. src/Timer.h
... src/Error.h
.... src/MyTypes.h
. src/Error.h
. src/Timer.h
> And terminated with status: pid 36 exit 0

Extracted #include list from test/test_Timer_private.c:
 - build/vendor/unity/src/unity.h
 - src/Timer_private.h
 - src/Timer.h
 - src/Error.h


👟 Determining Files to be Generated...

👟 Preprocessing for Mocks
--------------------------
Preprocessing test_Timer::Timer_private.h...
Extracting #include statements via preprocessor from test_Timer::Timer_private.h...
Command: {:name=>"default_test_shallow_includes_preprocessor", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -E -MM -MG -MP -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -DGNU_COMPILER -nostdinc -x c \"src/Timer_private.h\""}

> Shell executed command:
`gcc -fpack-struct -E -MM -MG -MP -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -DGNU_COMPILER -nostdinc -x c "src/Timer_private.h"`
> With $stdout:
Timer_private.o: src/Timer_private.h src/Timer.h src/Error.h \
 src/MyTypes.h
src/Timer.h:
src/Error.h:
src/MyTypes.h:
> With $stderr:
In file included from src/Error.h:4,
                 from src/Timer.h:4,
                 from src/Timer_private.h:4:
src/MyTypes.h:8:21: error: no include path in which to search for stdbool.h
    8 | #include <stdbool.h>
      |                     ^
src/MyTypes.h:9:20: error: no include path in which to search for stdint.h
    9 | #include <stdint.h>
      |                    ^
src/MyTypes.h:10:34: error: no include path in which to search for stdlib.h
   10 | #include <stdlib.h> // macro NULL
      |                                  ^
> And terminated with status: pid 46 exit 1

Command: {:name=>"default_test_nested_includes_preprocessor", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -E -MM -MG -H -I\"build/test/mocks/test_Timer\" -I\"src\" -I\"build/vendor/unity/src\" -I\"build/vendor/cmock/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -DGNU_COMPILER -nostdinc -x c \"src/Timer_private.h\""}

> Shell executed command:
`gcc -fpack-struct -E -MM -MG -H -I"build/test/mocks/test_Timer" -I"src" -I"build/vendor/unity/src" -I"build/vendor/cmock/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -DGNU_COMPILER -nostdinc -x c "src/Timer_private.h"`
> With $stdout:
Timer_private.o: src/Timer_private.h src/Timer.h src/Error.h \
 src/MyTypes.h
> With $stderr:
. src/Timer.h
.. src/Error.h
... src/MyTypes.h
> And terminated with status: pid 52 exit 0

Extracted #include list from src/Timer_private.h:
 - src/Timer.h
 - src/Error.h
 - src/MyTypes.h

Command: {:name=>"default_test_file_preprocessor", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -E -I\"build/test/mocks/test_Timer\" -I\"src\" -I\"build/vendor/unity/src\" -I\"build/vendor/cmock/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -DGNU_COMPILER -x c \"src/Timer_private.h\" -o \"build/test/preprocess/files/test_Timer/Timer_private.h\""}

> Shell executed command:
`gcc -fpack-struct -E -I"build/test/mocks/test_Timer" -I"src" -I"build/vendor/unity/src" -I"build/vendor/cmock/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -DGNU_COMPILER -x c "src/Timer_private.h" -o "build/test/preprocess/files/test_Timer/Timer_private.h"`
> With $stdout: <empty>
> With $stderr: <empty>
> And terminated with status: pid 58 exit 0


👟 Mocking
----------
Generating mock for test_Timer::Timer_private.h...
Creating mock for Timer_private...

👟 Preprocessing Test Files
---------------------------
Preprocessing test_Timer.c...
Preprocessing test_Timer_private.c...
Loading #include statement listing file for test_Timer.c...
Loading #include statement listing file for test_Timer_private.c...
Loaded existing #include list from build/test/preprocess/includes/test_Timer/test_Timer.c.yml:
 - build/vendor/unity/src/unity.h
 - src/Error.h
 - src/Timer.h
 - mock_Timer_private.h

Command: {:name=>"default_test_file_preprocessor", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -E -I\"build/test/mocks/test_Timer\" -I\"src\" -I\"build/vendor/unity/src\" -I\"build/vendor/cmock/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -DGNU_COMPILER -x c \"test/test_Timer.c\" -o \"build/test/preprocess/files/test_Timer/test_Timer.c\""}
Loaded existing #include list from build/test/preprocess/includes/test_Timer_private/test_Timer_private.c.yml:
 - build/vendor/unity/src/unity.h
 - src/Timer_private.h
 - src/Timer.h
 - src/Error.h

Command: {:name=>"default_test_file_preprocessor", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -E -I\"build/test/mocks/test_Timer_private\" -I\"src\" -I\"build/vendor/unity/src\" -I\"build/vendor/cmock/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -DGNU_COMPILER -x c \"test/test_Timer_private.c\" -o \"build/test/preprocess/files/test_Timer_private/test_Timer_private.c\""}

> Shell executed command:
`gcc -fpack-struct -E -I"build/test/mocks/test_Timer_private" -I"src" -I"build/vendor/unity/src" -I"build/vendor/cmock/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -DGNU_COMPILER -x c "test/test_Timer_private.c" -o "build/test/preprocess/files/test_Timer_private/test_Timer_private.c"`
> With $stdout: <empty>
> With $stderr: <empty>
> And terminated with status: pid 72 exit 0


> Shell executed command:
`gcc -fpack-struct -E -I"build/test/mocks/test_Timer" -I"src" -I"build/vendor/unity/src" -I"build/vendor/cmock/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -DGNU_COMPILER -x c "test/test_Timer.c" -o "build/test/preprocess/files/test_Timer/test_Timer.c"`
> With $stdout: <empty>
> With $stderr: <empty>
> And terminated with status: pid 67 exit 0


👟 Collecting Test Context
--------------------------
Parsing test case names test_Timer.c...
Parsing test case names test_Timer_private.c...
Test cases found in test/test_Timer.c:
 - 94:test_TMR_Init()
 - 101:test_TMR_Clear_NullPointer()
 - 101:test_TMR_Clear()
 - 131:test_TMR_SetInterval_NullPointer()
 - 137:test_TMR_SetInterval_TimerEnabled()
 - 137:test_TMR_SetInterval()
 - 154:test_TMR_SetSingleShot_NullPointer()
 - 160:test_TMR_SetSingleShot_TimerEnabled()
 - 160:test_TMR_SetSingleShot()
 - 175:test_TMR_SetCallBack_NullPointers()
 - 181:test_TMR_SetCallBack_NullTimer()
 - 187:test_TMR_SetCallBack_NullCallback()
 - 193:test_TMR_SetCallBack_TimerEnabled()
 - 193:test_TMR_SetCallBack()
 - 208:test_TMR_ResetElapsedTime_Nullpointer()
 - 208:test_TMR_ResetElapsedTime()
 - 223:test_TMR_Start_NullPointer()
 - 231:test_TMR_Start_TimerEnabled()
 - 231:test_TMR_Start()
 - 248:test_TMR_Stop_NullPointer()
 - 255:test_TMR_Stop_TimerDisabled()
 - 262:test_TMR_Stop_TimerEnabled()
 - 269:test_TMR_AddTimer_NullPointer()
 - 275:test_TMR_AddTimer_WrongParameters()
 - 282:test_TMR_AddTimer_TimerAlreadyInList()
 - 282:test_TMR_AddTimer()
 - 305:test_TMR_RemoveTimer_NullPointer()
 - 311:test_TMR_RemoveTimer_TimerNotInList()
 - 311:test_TMR_RemoveTimer()
 - 332:test_TMR_CheckTimersToUpdate_NoTimer()
 - 338:test_TMR_CheckTimersToUpdate_OneTimerFirstIndex()
 - 346:test_TMR_CheckTimersToUpdate_OneTimerLastIndex()
 - 354:test_TMR_CheckTimersToUpdate_16Timers()
 - 369:test_TMR_CheckTimersToUpdate_32Timers()
Test cases found in test/test_Timer_private.c:
 - 82:test_TMR_CheckParameters_Interval_Null()
 - 88:test_TMR_CheckParameters_Timeout_Null()
 - 94:test_TMR_CheckParameters_IntervalAndTimeout_Null()
 - 94:test_TMR_CheckParameters()
 - 106:test_TMR_UpdateTimer_Disabled()
 - 111:test_TMR_UpdateTimer_Enabled()
 - 120:test_TMR_UpdateTimer_Enabled_Elapsed_Singleshot()
 - 132:test_TMR_UpdateTimer_Enabled_Elapsed_NotSingleshot()
 - 144:test_TMR_Timeout_NullPointer()
 - 144:test_TMR_Timeout()
 - 157:test_TMR_RoundInterval_RatioZero()
 - 157:test_TMR_RoundInterval()
 - 170:test_TMR_ResetList()
 - 185:test_TMR_AddItem_ListFull()
 - 192:test_TMR_AddItem_LastFreeIndex()
 - 192:test_TMR_AddItem()
 - 220:test_TMR_RemoveItem_ItemNotFound()
 - 226:test_TMR_RemoveItem_ItemFound_ListFull()
 - 244:test_TMR_RemoveItem_ItemFound_ListNotFull()
 - 262:test_TMR_SearchItem_ItemNotFound()
 - 269:test_TMR_SearchItem_ItemFound_1Item()
 - 277:test_TMR_SearchItem_ItemFound_32Items()

👟 Test Runners
---------------
Generating runner for test_Timer.c...
Generating runner for test_Timer_private.c...

👟 Determining Artifacts to Be Built...

👟 Building Objects
-------------------
Compiling test_Timer.c...
Command: {:name=>"default_test_compiler", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -I\"build/test/mocks/test_Timer\" -I\"src\" -I\"build/vendor/unity/src\" -I\"build/vendor/cmock/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -D\"UNITY_USE_COMMAND_LINE_ARGS\" -DGNU_COMPILER -g -c \"test/test_Timer.c\" -o \"build/test/out/test_Timer/test_Timer.o\" -MMD -MF \"build/test/dependencies/test_Timer.d\""}
Compiling test_Timer::Timer.c...
Command: {:name=>"default_test_compiler", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -I\"build/test/mocks/test_Timer\" -I\"src\" -I\"build/vendor/unity/src\" -I\"build/vendor/cmock/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -D\"UNITY_USE_COMMAND_LINE_ARGS\" -DGNU_COMPILER -g -c \"src/Timer.c\" -o \"build/test/out/test_Timer/Timer.o\" -MMD -MF \"build/test/dependencies/Timer.d\""}
Compiling test_Timer::test_Timer_runner.c...
Command: {:name=>"default_test_compiler", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -I\"build/test/mocks/test_Timer\" -I\"src\" -I\"build/vendor/unity/src\" -I\"build/vendor/cmock/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -D\"UNITY_USE_COMMAND_LINE_ARGS\" -DGNU_COMPILER -g -c \"build/test/runners/test_Timer_runner.c\" -o \"build/test/out/test_Timer/test_Timer_runner.o\" -MMD -MF \"build/test/dependencies/test_Timer_runner.d\""}
Compiling test_Timer::unity.c...
Command: {:name=>"default_test_compiler", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -I\"build/vendor/unity/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -D\"UNITY_USE_COMMAND_LINE_ARGS\" -DGNU_COMPILER -g -c \"build/vendor/unity/src/unity.c\" -o \"build/test/out/test_Timer/unity.o\" -MMD -MF \"build/test/dependencies/unity.d\""}
Compiling test_Timer::cmock.c...
Command: {:name=>"default_test_compiler", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -I\"build/vendor/unity/src\" -I\"build/vendor/cmock/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -D\"UNITY_USE_COMMAND_LINE_ARGS\" -DGNU_COMPILER -g -c \"build/vendor/cmock/src/cmock.c\" -o \"build/test/out/test_Timer/cmock.o\" -MMD -MF \"build/test/dependencies/cmock.d\""}
Compiling test_Timer::mock_Timer_private.c...
Command: {:name=>"default_test_compiler", :executable=>"gcc", :options=>{}, :line=>"gcc -fpack-struct -I\"build/test/mocks/test_Timer\" -I\"src\" -I\"build/vendor/unity/src\" -I\"build/vendor/cmock/src\" -D\"UNITY_INT_WIDTH=16\" -D\"CMOCK_MEM_INDEX_TYPE=uint16_t\" -D\"CMOCK_MEM_ALIGN=1\" -D\"CMOCK_MEM_SIZE=4096\" -D\"TEST\" -D\"TEST_GCC\" -D\"UNITY_EXCLUDE_FLOAT\" -D\"UNITY_USE_COMMAND_LINE_ARGS\" -DGNU_COMPILER -g -c \"build/test/mocks/test_Timer/mock_Timer_private.c\" -o \"build/test/out/test_Timer/mock_Timer_private.o\" -MMD -MF \"build/test/dependencies/mock_Timer_private.d\""}

> Shell executed command:
`gcc -fpack-struct -I"build/vendor/unity/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -D"UNITY_USE_COMMAND_LINE_ARGS" -DGNU_COMPILER -g -c "build/vendor/unity/src/unity.c" -o "build/test/out/test_Timer/unity.o" -MMD -MF "build/test/dependencies/unity.d"`
> With $stdout: <empty>
> With $stderr: <empty>
> And terminated with status: pid 107 exit 0


> Shell executed command:
`gcc -fpack-struct -I"build/vendor/unity/src" -I"build/vendor/cmock/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -D"UNITY_USE_COMMAND_LINE_ARGS" -DGNU_COMPILER -g -c "build/vendor/cmock/src/cmock.c" -o "build/test/out/test_Timer/cmock.o" -MMD -MF "build/test/dependencies/cmock.d"`
> With $stdout: <empty>
> With $stderr: <empty>
> And terminated with status: pid 113 exit 0


> Shell executed command:
`gcc -fpack-struct -I"build/test/mocks/test_Timer" -I"src" -I"build/vendor/unity/src" -I"build/vendor/cmock/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -D"UNITY_USE_COMMAND_LINE_ARGS" -DGNU_COMPILER -g -c "src/Timer.c" -o "build/test/out/test_Timer/Timer.o" -MMD -MF "build/test/dependencies/Timer.d"`
> With $stdout: <empty>
> With $stderr: <empty>
> And terminated with status: pid 96 exit 0


> Shell executed command:
`gcc -fpack-struct -I"build/test/mocks/test_Timer" -I"src" -I"build/vendor/unity/src" -I"build/vendor/cmock/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -D"UNITY_USE_COMMAND_LINE_ARGS" -DGNU_COMPILER -g -c "build/test/runners/test_Timer_runner.c" -o "build/test/out/test_Timer/test_Timer_runner.o" -MMD -MF "build/test/dependencies/test_Timer_runner.d"`
> With $stdout: <empty>
> With $stderr: <empty>
> And terminated with status: pid 101 exit 0


> Shell executed command:
`gcc -fpack-struct -I"build/test/mocks/test_Timer" -I"src" -I"build/vendor/unity/src" -I"build/vendor/cmock/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -D"UNITY_USE_COMMAND_LINE_ARGS" -DGNU_COMPILER -g -c "test/test_Timer.c" -o "build/test/out/test_Timer/test_Timer.o" -MMD -MF "build/test/dependencies/test_Timer.d"`
> With $stdout: <empty>
> With $stderr: <empty>
> And terminated with status: pid 91 exit 0


> Shell executed command:
`gcc -fpack-struct -I"build/test/mocks/test_Timer" -I"src" -I"build/vendor/unity/src" -I"build/vendor/cmock/src" -D"UNITY_INT_WIDTH=16" -D"CMOCK_MEM_INDEX_TYPE=uint16_t" -D"CMOCK_MEM_ALIGN=1" -D"CMOCK_MEM_SIZE=4096" -D"TEST" -D"TEST_GCC" -D"UNITY_EXCLUDE_FLOAT" -D"UNITY_USE_COMMAND_LINE_ARGS" -DGNU_COMPILER -g -c "build/test/mocks/test_Timer/mock_Timer_private.c" -o "build/test/out/test_Timer/mock_Timer_private.o" -MMD -MF "build/test/dependencies/mock_Timer_private.d"`
> With $stdout: <empty>
> With $stderr:
In file included from build/test/mocks/test_Timer/mock_Timer_private.h:6,
                 from build/test/mocks/test_Timer/mock_Timer_private.c:6:
build/test/mocks/test_Timer/Timer_private.h:8:23: error: unknown type name ‘TMR_TIMEOUT_t’
    8 |  void TMR_UpdateTimer(TMR_TIMEOUT_t *pTmr);
      |                       ^~~~~~~~~~~~~
build/test/mocks/test_Timer/Timer_private.h:14:32: error: unknown type name ‘TMR_TIMEOUT_t’
   14 |            TMR_CheckParameters(TMR_TIMEOUT_t *pTmr);
      |                                ^~~~~~~~~~~~~
build/test/mocks/test_Timer/Timer_private.h:16:19: error: unknown type name ‘TMR_TIMEOUT_t’
   16 |  void TMR_Timeout(TMR_TIMEOUT_t *pTmr);
      |                   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/Timer_private.h:22:20: error: unknown type name ‘TMR_TIMEOUT_t’
   22 |  ERR_t TMR_AddItem(TMR_TIMEOUT_t *pTmr);
      |                    ^~~~~~~~~~~~~
build/test/mocks/test_Timer/Timer_private.h:24:23: error: unknown type name ‘TMR_TIMEOUT_t’
   24 |  ERR_t TMR_RemoveItem(TMR_TIMEOUT_t *pTmr);
      |                       ^~~~~~~~~~~~~
build/test/mocks/test_Timer/Timer_private.h:30:44: error: unknown type name ‘TMR_TIMEOUT_t’
   30 |            TMR_SearchItem(uint16_t *index, TMR_TIMEOUT_t *pTmr);
      |                                            ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:38:62: error: unknown type name ‘TMR_TIMEOUT_t’
   38 | void TMR_UpdateTimer_CMockExpect(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr);
      |                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:39:49: error: unknown type name ‘TMR_TIMEOUT_t’
   39 | typedef void (* CMOCK_TMR_UpdateTimer_CALLBACK)(TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                                 ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:40:34: error: unknown type name ‘CMOCK_TMR_UpdateTimer_CALLBACK’
   40 | void TMR_UpdateTimer_AddCallback(CMOCK_TMR_UpdateTimer_CALLBACK Callback);
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:41:27: error: unknown type name ‘CMOCK_TMR_UpdateTimer_CALLBACK’
   41 | void TMR_UpdateTimer_Stub(CMOCK_TMR_UpdateTimer_CALLBACK Callback);
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:50:75: error: unknown type name ‘TMR_TIMEOUT_t’
   50 | void TMR_CheckParameters_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, _Bool cmock_to_return);
      |                                                                           ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:51:54: error: unknown type name ‘TMR_TIMEOUT_t’
   51 | typedef _Bool (* CMOCK_TMR_CheckParameters_CALLBACK)(TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:52:38: error: unknown type name ‘CMOCK_TMR_CheckParameters_CALLBACK’
   52 | void TMR_CheckParameters_AddCallback(CMOCK_TMR_CheckParameters_CALLBACK Callback);
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:53:31: error: unknown type name ‘CMOCK_TMR_CheckParameters_CALLBACK’
   53 | void TMR_CheckParameters_Stub(CMOCK_TMR_CheckParameters_CALLBACK Callback);
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:62:58: error: unknown type name ‘TMR_TIMEOUT_t’
   62 | void TMR_Timeout_CMockExpect(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr);
      |                                                          ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:63:45: error: unknown type name ‘TMR_TIMEOUT_t’
   63 | typedef void (* CMOCK_TMR_Timeout_CALLBACK)(TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                             ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:64:30: error: unknown type name ‘CMOCK_TMR_Timeout_CALLBACK’
   64 | void TMR_Timeout_AddCallback(CMOCK_TMR_Timeout_CALLBACK Callback);
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:65:23: error: unknown type name ‘CMOCK_TMR_Timeout_CALLBACK’
   65 | void TMR_Timeout_Stub(CMOCK_TMR_Timeout_CALLBACK Callback);
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:98:67: error: unknown type name ‘TMR_TIMEOUT_t’
   98 | void TMR_AddItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, ERR_t cmock_to_return);
      |                                                                   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:99:46: error: unknown type name ‘TMR_TIMEOUT_t’
   99 | typedef ERR_t (* CMOCK_TMR_AddItem_CALLBACK)(TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:100:30: error: unknown type name ‘CMOCK_TMR_AddItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  100 | void TMR_AddItem_AddCallback(CMOCK_TMR_AddItem_CALLBACK Callback);
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                              CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.h:101:23: error: unknown type name ‘CMOCK_TMR_AddItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  101 | void TMR_AddItem_Stub(CMOCK_TMR_AddItem_CALLBACK Callback);
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                       CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.h:110:70: error: unknown type name ‘TMR_TIMEOUT_t’
  110 | void TMR_RemoveItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, ERR_t cmock_to_return);
      |                                                                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:111:49: error: unknown type name ‘TMR_TIMEOUT_t’
  111 | typedef ERR_t (* CMOCK_TMR_RemoveItem_CALLBACK)(TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                                 ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:112:33: error: unknown type name ‘CMOCK_TMR_RemoveItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  112 | void TMR_RemoveItem_AddCallback(CMOCK_TMR_RemoveItem_CALLBACK Callback);
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                 CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.h:113:26: error: unknown type name ‘CMOCK_TMR_RemoveItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  113 | void TMR_RemoveItem_Stub(CMOCK_TMR_RemoveItem_CALLBACK Callback);
      |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                          CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.h:122:87: error: unknown type name ‘TMR_TIMEOUT_t’
  122 | void TMR_SearchItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, uint16_t* index, TMR_TIMEOUT_t* pTmr, _Bool cmock_to_return);
      |                                                                                       ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:123:66: error: unknown type name ‘TMR_TIMEOUT_t’
  123 | typedef _Bool (* CMOCK_TMR_SearchItem_CALLBACK)(uint16_t* index, TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                                                  ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:124:33: error: unknown type name ‘CMOCK_TMR_SearchItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  124 | void TMR_SearchItem_AddCallback(CMOCK_TMR_SearchItem_CALLBACK Callback);
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                 CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.h:125:26: error: unknown type name ‘CMOCK_TMR_SearchItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  125 | void TMR_SearchItem_Stub(CMOCK_TMR_SearchItem_CALLBACK Callback);
      |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                          CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.c:24:3: error: unknown type name ‘TMR_TIMEOUT_t’
   24 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:33:3: error: unknown type name ‘TMR_TIMEOUT_t’
   33 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:41:3: error: unknown type name ‘TMR_TIMEOUT_t’
   41 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:66:3: error: unknown type name ‘TMR_TIMEOUT_t’
   66 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:75:3: error: unknown type name ‘TMR_TIMEOUT_t’
   75 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:85:3: error: unknown type name ‘TMR_TIMEOUT_t’
   85 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:93:3: error: unknown type name ‘CMOCK_TMR_UpdateTimer_CALLBACK’
   93 |   CMOCK_TMR_UpdateTimer_CALLBACK TMR_UpdateTimer_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:99:3: error: unknown type name ‘CMOCK_TMR_CheckParameters_CALLBACK’
   99 |   CMOCK_TMR_CheckParameters_CALLBACK TMR_CheckParameters_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:104:3: error: unknown type name ‘CMOCK_TMR_Timeout_CALLBACK’
  104 |   CMOCK_TMR_Timeout_CALLBACK TMR_Timeout_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:121:3: error: unknown type name ‘CMOCK_TMR_AddItem_CALLBACK’
  121 |   CMOCK_TMR_AddItem_CALLBACK TMR_AddItem_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:127:3: error: unknown type name ‘CMOCK_TMR_RemoveItem_CALLBACK’
  127 |   CMOCK_TMR_RemoveItem_CALLBACK TMR_RemoveItem_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:133:3: error: unknown type name ‘CMOCK_TMR_SearchItem_CALLBACK’
  133 |   CMOCK_TMR_SearchItem_CALLBACK TMR_SearchItem_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c: In function ‘mock_Timer_private_Verify’:
build/test/mocks/test_Timer/mock_Timer_private.c:153:52: warning: comparison between pointer and integer
  153 |   if (Mock.TMR_UpdateTimer_CallbackFunctionPointer != NULL)
      |                                                    ^~
build/test/mocks/test_Timer/mock_Timer_private.c:166:56: warning: comparison between pointer and integer
  166 |   if (Mock.TMR_CheckParameters_CallbackFunctionPointer != NULL)
      |                                                        ^~
build/test/mocks/test_Timer/mock_Timer_private.c:179:48: warning: comparison between pointer and integer
  179 |   if (Mock.TMR_Timeout_CallbackFunctionPointer != NULL)
      |                                                ^~
build/test/mocks/test_Timer/mock_Timer_private.c:218:48: warning: comparison between pointer and integer
  218 |   if (Mock.TMR_AddItem_CallbackFunctionPointer != NULL)
      |                                                ^~
build/test/mocks/test_Timer/mock_Timer_private.c:231:51: warning: comparison between pointer and integer
  231 |   if (Mock.TMR_RemoveItem_CallbackFunctionPointer != NULL)
      |                                                   ^~
build/test/mocks/test_Timer/mock_Timer_private.c:244:51: warning: comparison between pointer and integer
  244 |   if (Mock.TMR_SearchItem_CallbackFunctionPointer != NULL)
      |                                                   ^~
build/test/mocks/test_Timer/mock_Timer_private.c: At top level:
build/test/mocks/test_Timer/mock_Timer_private.c:264:22: error: unknown type name ‘TMR_TIMEOUT_t’
  264 | void TMR_UpdateTimer(TMR_TIMEOUT_t* pTmr)
      |                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:300:102: error: unknown type name ‘TMR_TIMEOUT_t’
  300 | void CMockExpectParameters_TMR_UpdateTimer(CMOCK_TMR_UpdateTimer_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr);
      |                                                                                                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:301:102: error: unknown type name ‘TMR_TIMEOUT_t’
  301 | void CMockExpectParameters_TMR_UpdateTimer(CMOCK_TMR_UpdateTimer_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr)
      |                                                                                                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:316:62: error: unknown type name ‘TMR_TIMEOUT_t’
  316 | void TMR_UpdateTimer_CMockExpect(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr)
      |                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:329:34: error: unknown type name ‘CMOCK_TMR_UpdateTimer_CALLBACK’; did you mean ‘CMOCK_TMR_UpdateTimer_CALL_INSTANCE’?
  329 | void TMR_UpdateTimer_AddCallback(CMOCK_TMR_UpdateTimer_CALLBACK Callback)
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                  CMOCK_TMR_UpdateTimer_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:336:27: error: unknown type name ‘CMOCK_TMR_UpdateTimer_CALLBACK’; did you mean ‘CMOCK_TMR_UpdateTimer_CALL_INSTANCE’?
  336 | void TMR_UpdateTimer_Stub(CMOCK_TMR_UpdateTimer_CALLBACK Callback)
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                           CMOCK_TMR_UpdateTimer_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:343:27: error: unknown type name ‘TMR_TIMEOUT_t’
  343 | _Bool TMR_CheckParameters(TMR_TIMEOUT_t* pTmr)
      |                           ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:384:110: error: unknown type name ‘TMR_TIMEOUT_t’
  384 | void CMockExpectParameters_TMR_CheckParameters(CMOCK_TMR_CheckParameters_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr);
      |                                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:385:110: error: unknown type name ‘TMR_TIMEOUT_t’
  385 | void CMockExpectParameters_TMR_CheckParameters(CMOCK_TMR_CheckParameters_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr)
      |                                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:410:75: error: unknown type name ‘TMR_TIMEOUT_t’
  410 | void TMR_CheckParameters_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, _Bool cmock_to_return)
      |                                                                           ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:425:38: error: unknown type name ‘CMOCK_TMR_CheckParameters_CALLBACK’; did you mean ‘CMOCK_TMR_CheckParameters_CALL_INSTANCE’?
  425 | void TMR_CheckParameters_AddCallback(CMOCK_TMR_CheckParameters_CALLBACK Callback)
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                      CMOCK_TMR_CheckParameters_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:432:31: error: unknown type name ‘CMOCK_TMR_CheckParameters_CALLBACK’; did you mean ‘CMOCK_TMR_CheckParameters_CALL_INSTANCE’?
  432 | void TMR_CheckParameters_Stub(CMOCK_TMR_CheckParameters_CALLBACK Callback)
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                               CMOCK_TMR_CheckParameters_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:439:18: error: unknown type name ‘TMR_TIMEOUT_t’
  439 | void TMR_Timeout(TMR_TIMEOUT_t* pTmr)
      |                  ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:475:94: error: unknown type name ‘TMR_TIMEOUT_t’
  475 | void CMockExpectParameters_TMR_Timeout(CMOCK_TMR_Timeout_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr);
      |                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:476:94: error: unknown type name ‘TMR_TIMEOUT_t’
  476 | void CMockExpectParameters_TMR_Timeout(CMOCK_TMR_Timeout_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr)
      |                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:491:58: error: unknown type name ‘TMR_TIMEOUT_t’
  491 | void TMR_Timeout_CMockExpect(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr)
      |                                                          ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:504:30: error: unknown type name ‘CMOCK_TMR_Timeout_CALLBACK’; did you mean ‘CMOCK_TMR_Timeout_CALL_INSTANCE’?
  504 | void TMR_Timeout_AddCallback(CMOCK_TMR_Timeout_CALLBACK Callback)
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                              CMOCK_TMR_Timeout_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:511:23: error: unknown type name ‘CMOCK_TMR_Timeout_CALLBACK’; did you mean ‘CMOCK_TMR_Timeout_CALL_INSTANCE’?
  511 | void TMR_Timeout_Stub(CMOCK_TMR_Timeout_CALLBACK Callback)
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                       CMOCK_TMR_Timeout_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:680:19: error: unknown type name ‘TMR_TIMEOUT_t’
  680 | ERR_t TMR_AddItem(TMR_TIMEOUT_t* pTmr)
      |                   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:721:94: error: unknown type name ‘TMR_TIMEOUT_t’
  721 | void CMockExpectParameters_TMR_AddItem(CMOCK_TMR_AddItem_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr);
      |                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:722:94: error: unknown type name ‘TMR_TIMEOUT_t’
  722 | void CMockExpectParameters_TMR_AddItem(CMOCK_TMR_AddItem_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr)
      |                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:747:67: error: unknown type name ‘TMR_TIMEOUT_t’
  747 | void TMR_AddItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, ERR_t cmock_to_return)
      |                                                                   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:762:30: error: unknown type name ‘CMOCK_TMR_AddItem_CALLBACK’; did you mean ‘CMOCK_TMR_AddItem_CALL_INSTANCE’?
  762 | void TMR_AddItem_AddCallback(CMOCK_TMR_AddItem_CALLBACK Callback)
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                              CMOCK_TMR_AddItem_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:769:23: error: unknown type name ‘CMOCK_TMR_AddItem_CALLBACK’; did you mean ‘CMOCK_TMR_AddItem_CALL_INSTANCE’?
  769 | void TMR_AddItem_Stub(CMOCK_TMR_AddItem_CALLBACK Callback)
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                       CMOCK_TMR_AddItem_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:776:22: error: unknown type name ‘TMR_TIMEOUT_t’
  776 | ERR_t TMR_RemoveItem(TMR_TIMEOUT_t* pTmr)
      |                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:817:100: error: unknown type name ‘TMR_TIMEOUT_t’
  817 | void CMockExpectParameters_TMR_RemoveItem(CMOCK_TMR_RemoveItem_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr);
      |                                                                                                    ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:818:100: error: unknown type name ‘TMR_TIMEOUT_t’
  818 | void CMockExpectParameters_TMR_RemoveItem(CMOCK_TMR_RemoveItem_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr)
      |                                                                                                    ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:843:70: error: unknown type name ‘TMR_TIMEOUT_t’
  843 | void TMR_RemoveItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, ERR_t cmock_to_return)
      |                                                                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:858:33: error: unknown type name ‘CMOCK_TMR_RemoveItem_CALLBACK’; did you mean ‘CMOCK_TMR_RemoveItem_CALL_INSTANCE’?
  858 | void TMR_RemoveItem_AddCallback(CMOCK_TMR_RemoveItem_CALLBACK Callback)
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                 CMOCK_TMR_RemoveItem_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:865:26: error: unknown type name ‘CMOCK_TMR_RemoveItem_CALLBACK’; did you mean ‘CMOCK_TMR_RemoveItem_CALL_INSTANCE’?
  865 | void TMR_RemoveItem_Stub(CMOCK_TMR_RemoveItem_CALLBACK Callback)
      |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                          CMOCK_TMR_RemoveItem_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:872:39: error: unknown type name ‘TMR_TIMEOUT_t’
  872 | _Bool TMR_SearchItem(uint16_t* index, TMR_TIMEOUT_t* pTmr)
      |                                       ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:920:117: error: unknown type name ‘TMR_TIMEOUT_t’
  920 | void CMockExpectParameters_TMR_SearchItem(CMOCK_TMR_SearchItem_CALL_INSTANCE* cmock_call_instance, uint16_t* index, TMR_TIMEOUT_t* pTmr);
      |
    ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:921:117: error: unknown type name ‘TMR_TIMEOUT_t’
  921 | void CMockExpectParameters_TMR_SearchItem(CMOCK_TMR_SearchItem_CALL_INSTANCE* cmock_call_instance, uint16_t* index, TMR_TIMEOUT_t* pTmr)
      |
    ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:947:87: error: unknown type name ‘TMR_TIMEOUT_t’
  947 | void TMR_SearchItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, uint16_t* index, TMR_TIMEOUT_t* pTmr, _Bool cmock_to_return)
      |                                                                                       ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:962:33: error: unknown type name ‘CMOCK_TMR_SearchItem_CALLBACK’; did you mean ‘CMOCK_TMR_SearchItem_CALL_INSTANCE’?
  962 | void TMR_SearchItem_AddCallback(CMOCK_TMR_SearchItem_CALLBACK Callback)
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                 CMOCK_TMR_SearchItem_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:969:26: error: unknown type name ‘CMOCK_TMR_SearchItem_CALLBACK’; did you mean ‘CMOCK_TMR_SearchItem_CALL_INSTANCE’?
  969 | void TMR_SearchItem_Stub(CMOCK_TMR_SearchItem_CALLBACK Callback)
      |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                          CMOCK_TMR_SearchItem_CALL_INSTANCE
> And terminated with status: pid 119 exit 1

🧨 EXCEPTION: ShellExecutionException ==> Tool 'Default Test Compiler' (gcc) terminated with exit code [1] and output >> "In file included from build/test/mocks/test_Timer/mock_Timer_private.h:6,
                 from build/test/mocks/test_Timer/mock_Timer_private.c:6:
build/test/mocks/test_Timer/Timer_private.h:8:23: error: unknown type name ‘TMR_TIMEOUT_t’
    8 |  void TMR_UpdateTimer(TMR_TIMEOUT_t *pTmr);
      |                       ^~~~~~~~~~~~~
build/test/mocks/test_Timer/Timer_private.h:14:32: error: unknown type name ‘TMR_TIMEOUT_t’
   14 |            TMR_CheckParameters(TMR_TIMEOUT_t *pTmr);
      |                                ^~~~~~~~~~~~~
build/test/mocks/test_Timer/Timer_private.h:16:19: error: unknown type name ‘TMR_TIMEOUT_t’
   16 |  void TMR_Timeout(TMR_TIMEOUT_t *pTmr);
      |                   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/Timer_private.h:22:20: error: unknown type name ‘TMR_TIMEOUT_t’
   22 |  ERR_t TMR_AddItem(TMR_TIMEOUT_t *pTmr);
      |                    ^~~~~~~~~~~~~
build/test/mocks/test_Timer/Timer_private.h:24:23: error: unknown type name ‘TMR_TIMEOUT_t’
   24 |  ERR_t TMR_RemoveItem(TMR_TIMEOUT_t *pTmr);
      |                       ^~~~~~~~~~~~~
build/test/mocks/test_Timer/Timer_private.h:30:44: error: unknown type name ‘TMR_TIMEOUT_t’
   30 |            TMR_SearchItem(uint16_t *index, TMR_TIMEOUT_t *pTmr);
      |                                            ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:38:62: error: unknown type name ‘TMR_TIMEOUT_t’
   38 | void TMR_UpdateTimer_CMockExpect(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr);
      |                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:39:49: error: unknown type name ‘TMR_TIMEOUT_t’
   39 | typedef void (* CMOCK_TMR_UpdateTimer_CALLBACK)(TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                                 ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:40:34: error: unknown type name ‘CMOCK_TMR_UpdateTimer_CALLBACK’
   40 | void TMR_UpdateTimer_AddCallback(CMOCK_TMR_UpdateTimer_CALLBACK Callback);
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:41:27: error: unknown type name ‘CMOCK_TMR_UpdateTimer_CALLBACK’
   41 | void TMR_UpdateTimer_Stub(CMOCK_TMR_UpdateTimer_CALLBACK Callback);
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:50:75: error: unknown type name ‘TMR_TIMEOUT_t’
   50 | void TMR_CheckParameters_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, _Bool cmock_to_return);
      |                                                                           ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:51:54: error: unknown type name ‘TMR_TIMEOUT_t’
   51 | typedef _Bool (* CMOCK_TMR_CheckParameters_CALLBACK)(TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:52:38: error: unknown type name ‘CMOCK_TMR_CheckParameters_CALLBACK’
   52 | void TMR_CheckParameters_AddCallback(CMOCK_TMR_CheckParameters_CALLBACK Callback);
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:53:31: error: unknown type name ‘CMOCK_TMR_CheckParameters_CALLBACK’
   53 | void TMR_CheckParameters_Stub(CMOCK_TMR_CheckParameters_CALLBACK Callback);
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:62:58: error: unknown type name ‘TMR_TIMEOUT_t’
   62 | void TMR_Timeout_CMockExpect(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr);
      |                                                          ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:63:45: error: unknown type name ‘TMR_TIMEOUT_t’
   63 | typedef void (* CMOCK_TMR_Timeout_CALLBACK)(TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                             ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:64:30: error: unknown type name ‘CMOCK_TMR_Timeout_CALLBACK’
   64 | void TMR_Timeout_AddCallback(CMOCK_TMR_Timeout_CALLBACK Callback);
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:65:23: error: unknown type name ‘CMOCK_TMR_Timeout_CALLBACK’
   65 | void TMR_Timeout_Stub(CMOCK_TMR_Timeout_CALLBACK Callback);
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:98:67: error: unknown type name ‘TMR_TIMEOUT_t’
   98 | void TMR_AddItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, ERR_t cmock_to_return);
      |                                                                   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:99:46: error: unknown type name ‘TMR_TIMEOUT_t’
   99 | typedef ERR_t (* CMOCK_TMR_AddItem_CALLBACK)(TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:100:30: error: unknown type name ‘CMOCK_TMR_AddItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  100 | void TMR_AddItem_AddCallback(CMOCK_TMR_AddItem_CALLBACK Callback);
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                              CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.h:101:23: error: unknown type name ‘CMOCK_TMR_AddItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  101 | void TMR_AddItem_Stub(CMOCK_TMR_AddItem_CALLBACK Callback);
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                       CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.h:110:70: error: unknown type name ‘TMR_TIMEOUT_t’
  110 | void TMR_RemoveItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, ERR_t cmock_to_return);
      |                                                                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:111:49: error: unknown type name ‘TMR_TIMEOUT_t’
  111 | typedef ERR_t (* CMOCK_TMR_RemoveItem_CALLBACK)(TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                                 ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:112:33: error: unknown type name ‘CMOCK_TMR_RemoveItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  112 | void TMR_RemoveItem_AddCallback(CMOCK_TMR_RemoveItem_CALLBACK Callback);
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                 CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.h:113:26: error: unknown type name ‘CMOCK_TMR_RemoveItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  113 | void TMR_RemoveItem_Stub(CMOCK_TMR_RemoveItem_CALLBACK Callback);
      |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                          CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.h:122:87: error: unknown type name ‘TMR_TIMEOUT_t’
  122 | void TMR_SearchItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, uint16_t* index, TMR_TIMEOUT_t* pTmr, _Bool cmock_to_return);
      |                                                                                       ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:123:66: error: unknown type name ‘TMR_TIMEOUT_t’
  123 | typedef _Bool (* CMOCK_TMR_SearchItem_CALLBACK)(uint16_t* index, TMR_TIMEOUT_t* pTmr, int cmock_num_calls);
      |                                                                  ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.h:124:33: error: unknown type name ‘CMOCK_TMR_SearchItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  124 | void TMR_SearchItem_AddCallback(CMOCK_TMR_SearchItem_CALLBACK Callback);
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                 CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.h:125:26: error: unknown type name ‘CMOCK_TMR_SearchItem_CALLBACK’; did you mean ‘CMOCK_TMR_ResetList_CALLBACK’?
  125 | void TMR_SearchItem_Stub(CMOCK_TMR_SearchItem_CALLBACK Callback);
      |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                          CMOCK_TMR_ResetList_CALLBACK
build/test/mocks/test_Timer/mock_Timer_private.c:24:3: error: unknown type name ‘TMR_TIMEOUT_t’
   24 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:33:3: error: unknown type name ‘TMR_TIMEOUT_t’
   33 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:41:3: error: unknown type name ‘TMR_TIMEOUT_t’
   41 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:66:3: error: unknown type name ‘TMR_TIMEOUT_t’
   66 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:75:3: error: unknown type name ‘TMR_TIMEOUT_t’
   75 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:85:3: error: unknown type name ‘TMR_TIMEOUT_t’
   85 |   TMR_TIMEOUT_t* Expected_pTmr;
      |   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:93:3: error: unknown type name ‘CMOCK_TMR_UpdateTimer_CALLBACK’
   93 |   CMOCK_TMR_UpdateTimer_CALLBACK TMR_UpdateTimer_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:99:3: error: unknown type name ‘CMOCK_TMR_CheckParameters_CALLBACK’
   99 |   CMOCK_TMR_CheckParameters_CALLBACK TMR_CheckParameters_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:104:3: error: unknown type name ‘CMOCK_TMR_Timeout_CALLBACK’
  104 |   CMOCK_TMR_Timeout_CALLBACK TMR_Timeout_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:121:3: error: unknown type name ‘CMOCK_TMR_AddItem_CALLBACK’
  121 |   CMOCK_TMR_AddItem_CALLBACK TMR_AddItem_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:127:3: error: unknown type name ‘CMOCK_TMR_RemoveItem_CALLBACK’
  127 |   CMOCK_TMR_RemoveItem_CALLBACK TMR_RemoveItem_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:133:3: error: unknown type name ‘CMOCK_TMR_SearchItem_CALLBACK’
  133 |   CMOCK_TMR_SearchItem_CALLBACK TMR_SearchItem_CallbackFunctionPointer;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c: In function ‘mock_Timer_private_Verify’:
build/test/mocks/test_Timer/mock_Timer_private.c:153:52: warning: comparison between pointer and integer
  153 |   if (Mock.TMR_UpdateTimer_CallbackFunctionPointer != NULL)
      |                                                    ^~
build/test/mocks/test_Timer/mock_Timer_private.c:166:56: warning: comparison between pointer and integer
  166 |   if (Mock.TMR_CheckParameters_CallbackFunctionPointer != NULL)
      |                                                        ^~
build/test/mocks/test_Timer/mock_Timer_private.c:179:48: warning: comparison between pointer and integer
  179 |   if (Mock.TMR_Timeout_CallbackFunctionPointer != NULL)
      |                                                ^~
build/test/mocks/test_Timer/mock_Timer_private.c:218:48: warning: comparison between pointer and integer
  218 |   if (Mock.TMR_AddItem_CallbackFunctionPointer != NULL)
      |                                                ^~
build/test/mocks/test_Timer/mock_Timer_private.c:231:51: warning: comparison between pointer and integer
  231 |   if (Mock.TMR_RemoveItem_CallbackFunctionPointer != NULL)
      |                                                   ^~
build/test/mocks/test_Timer/mock_Timer_private.c:244:51: warning: comparison between pointer and integer
  244 |   if (Mock.TMR_SearchItem_CallbackFunctionPointer != NULL)
      |                                                   ^~
build/test/mocks/test_Timer/mock_Timer_private.c: At top level:
build/test/mocks/test_Timer/mock_Timer_private.c:264:22: error: unknown type name ‘TMR_TIMEOUT_t’
  264 | void TMR_UpdateTimer(TMR_TIMEOUT_t* pTmr)
      |                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:300:102: error: unknown type name ‘TMR_TIMEOUT_t’
  300 | void CMockExpectParameters_TMR_UpdateTimer(CMOCK_TMR_UpdateTimer_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr);
      |                                                                                                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:301:102: error: unknown type name ‘TMR_TIMEOUT_t’
  301 | void CMockExpectParameters_TMR_UpdateTimer(CMOCK_TMR_UpdateTimer_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr)
      |                                                                                                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:316:62: error: unknown type name ‘TMR_TIMEOUT_t’
  316 | void TMR_UpdateTimer_CMockExpect(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr)
      |                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:329:34: error: unknown type name ‘CMOCK_TMR_UpdateTimer_CALLBACK’; did you mean ‘CMOCK_TMR_UpdateTimer_CALL_INSTANCE’?
  329 | void TMR_UpdateTimer_AddCallback(CMOCK_TMR_UpdateTimer_CALLBACK Callback)
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                  CMOCK_TMR_UpdateTimer_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:336:27: error: unknown type name ‘CMOCK_TMR_UpdateTimer_CALLBACK’; did you mean ‘CMOCK_TMR_UpdateTimer_CALL_INSTANCE’?
  336 | void TMR_UpdateTimer_Stub(CMOCK_TMR_UpdateTimer_CALLBACK Callback)
      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                           CMOCK_TMR_UpdateTimer_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:343:27: error: unknown type name ‘TMR_TIMEOUT_t’
  343 | _Bool TMR_CheckParameters(TMR_TIMEOUT_t* pTmr)
      |                           ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:384:110: error: unknown type name ‘TMR_TIMEOUT_t’
  384 | void CMockExpectParameters_TMR_CheckParameters(CMOCK_TMR_CheckParameters_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr);
      |                                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:385:110: error: unknown type name ‘TMR_TIMEOUT_t’
  385 | void CMockExpectParameters_TMR_CheckParameters(CMOCK_TMR_CheckParameters_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr)
      |                                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:410:75: error: unknown type name ‘TMR_TIMEOUT_t’
  410 | void TMR_CheckParameters_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, _Bool cmock_to_return)
      |                                                                           ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:425:38: error: unknown type name ‘CMOCK_TMR_CheckParameters_CALLBACK’; did you mean ‘CMOCK_TMR_CheckParameters_CALL_INSTANCE’?
  425 | void TMR_CheckParameters_AddCallback(CMOCK_TMR_CheckParameters_CALLBACK Callback)
      |                                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                      CMOCK_TMR_CheckParameters_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:432:31: error: unknown type name ‘CMOCK_TMR_CheckParameters_CALLBACK’; did you mean ‘CMOCK_TMR_CheckParameters_CALL_INSTANCE’?
  432 | void TMR_CheckParameters_Stub(CMOCK_TMR_CheckParameters_CALLBACK Callback)
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                               CMOCK_TMR_CheckParameters_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:439:18: error: unknown type name ‘TMR_TIMEOUT_t’
  439 | void TMR_Timeout(TMR_TIMEOUT_t* pTmr)
      |                  ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:475:94: error: unknown type name ‘TMR_TIMEOUT_t’
  475 | void CMockExpectParameters_TMR_Timeout(CMOCK_TMR_Timeout_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr);
      |                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:476:94: error: unknown type name ‘TMR_TIMEOUT_t’
  476 | void CMockExpectParameters_TMR_Timeout(CMOCK_TMR_Timeout_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr)
      |                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:491:58: error: unknown type name ‘TMR_TIMEOUT_t’
  491 | void TMR_Timeout_CMockExpect(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr)
      |                                                          ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:504:30: error: unknown type name ‘CMOCK_TMR_Timeout_CALLBACK’; did you mean ‘CMOCK_TMR_Timeout_CALL_INSTANCE’?
  504 | void TMR_Timeout_AddCallback(CMOCK_TMR_Timeout_CALLBACK Callback)
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                              CMOCK_TMR_Timeout_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:511:23: error: unknown type name ‘CMOCK_TMR_Timeout_CALLBACK’; did you mean ‘CMOCK_TMR_Timeout_CALL_INSTANCE’?
  511 | void TMR_Timeout_Stub(CMOCK_TMR_Timeout_CALLBACK Callback)
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                       CMOCK_TMR_Timeout_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:680:19: error: unknown type name ‘TMR_TIMEOUT_t’
  680 | ERR_t TMR_AddItem(TMR_TIMEOUT_t* pTmr)
      |                   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:721:94: error: unknown type name ‘TMR_TIMEOUT_t’
  721 | void CMockExpectParameters_TMR_AddItem(CMOCK_TMR_AddItem_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr);
      |                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:722:94: error: unknown type name ‘TMR_TIMEOUT_t’
  722 | void CMockExpectParameters_TMR_AddItem(CMOCK_TMR_AddItem_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr)
      |                                                                                              ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:747:67: error: unknown type name ‘TMR_TIMEOUT_t’
  747 | void TMR_AddItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, ERR_t cmock_to_return)
      |                                                                   ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:762:30: error: unknown type name ‘CMOCK_TMR_AddItem_CALLBACK’; did you mean ‘CMOCK_TMR_AddItem_CALL_INSTANCE’?
  762 | void TMR_AddItem_AddCallback(CMOCK_TMR_AddItem_CALLBACK Callback)
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                              CMOCK_TMR_AddItem_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:769:23: error: unknown type name ‘CMOCK_TMR_AddItem_CALLBACK’; did you mean ‘CMOCK_TMR_AddItem_CALL_INSTANCE’?
  769 | void TMR_AddItem_Stub(CMOCK_TMR_AddItem_CALLBACK Callback)
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                       CMOCK_TMR_AddItem_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:776:22: error: unknown type name ‘TMR_TIMEOUT_t’
  776 | ERR_t TMR_RemoveItem(TMR_TIMEOUT_t* pTmr)
      |                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:817:100: error: unknown type name ‘TMR_TIMEOUT_t’
  817 | void CMockExpectParameters_TMR_RemoveItem(CMOCK_TMR_RemoveItem_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr);
      |                                                                                                    ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:818:100: error: unknown type name ‘TMR_TIMEOUT_t’
  818 | void CMockExpectParameters_TMR_RemoveItem(CMOCK_TMR_RemoveItem_CALL_INSTANCE* cmock_call_instance, TMR_TIMEOUT_t* pTmr)
      |                                                                                                    ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:843:70: error: unknown type name ‘TMR_TIMEOUT_t’
  843 | void TMR_RemoveItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, TMR_TIMEOUT_t* pTmr, ERR_t cmock_to_return)
      |                                                                      ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:858:33: error: unknown type name ‘CMOCK_TMR_RemoveItem_CALLBACK’; did you mean ‘CMOCK_TMR_RemoveItem_CALL_INSTANCE’?
  858 | void TMR_RemoveItem_AddCallback(CMOCK_TMR_RemoveItem_CALLBACK Callback)
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                 CMOCK_TMR_RemoveItem_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:865:26: error: unknown type name ‘CMOCK_TMR_RemoveItem_CALLBACK’; did you mean ‘CMOCK_TMR_RemoveItem_CALL_INSTANCE’?
  865 | void TMR_RemoveItem_Stub(CMOCK_TMR_RemoveItem_CALLBACK Callback)
      |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                          CMOCK_TMR_RemoveItem_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:872:39: error: unknown type name ‘TMR_TIMEOUT_t’
  872 | _Bool TMR_SearchItem(uint16_t* index, TMR_TIMEOUT_t* pTmr)
      |                                       ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:920:117: error: unknown type name ‘TMR_TIMEOUT_t’
  920 | void CMockExpectParameters_TMR_SearchItem(CMOCK_TMR_SearchItem_CALL_INSTANCE* cmock_call_instance, uint16_t* index, TMR_TIMEOUT_t* pTmr);
      |
    ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:921:117: error: unknown type name ‘TMR_TIMEOUT_t’
  921 | void CMockExpectParameters_TMR_SearchItem(CMOCK_TMR_SearchItem_CALL_INSTANCE* cmock_call_instance, uint16_t* index, TMR_TIMEOUT_t* pTmr)
      |
    ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:947:87: error: unknown type name ‘TMR_TIMEOUT_t’
  947 | void TMR_SearchItem_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, uint16_t* index, TMR_TIMEOUT_t* pTmr, _Bool cmock_to_return)
      |                                                                                       ^~~~~~~~~~~~~
build/test/mocks/test_Timer/mock_Timer_private.c:962:33: error: unknown type name ‘CMOCK_TMR_SearchItem_CALLBACK’; did you mean ‘CMOCK_TMR_SearchItem_CALL_INSTANCE’?
  962 | void TMR_SearchItem_AddCallback(CMOCK_TMR_SearchItem_CALLBACK Callback)
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                 CMOCK_TMR_SearchItem_CALL_INSTANCE
build/test/mocks/test_Timer/mock_Timer_private.c:969:26: error: unknown type name ‘CMOCK_TMR_SearchItem_CALLBACK’; did you mean ‘CMOCK_TMR_SearchItem_CALL_INSTANCE’?
  969 | void TMR_SearchItem_Stub(CMOCK_TMR_SearchItem_CALLBACK Callback)
      |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                          CMOCK_TMR_SearchItem_CALL_INSTANCE"
Backtrace ==>
/usr/local/bundle/gems/ceedling-1.0.0/lib/ceedling/tool_executor.rb:91:in `exec'
/usr/local/bundle/gems/ceedling-1.0.0/lib/ceedling/generator.rb:168:in `generate_object_file_c'
/usr/local/bundle/gems/ceedling-1.0.0/lib/ceedling/test_invoker.rb:460:in `compile_test_component'
/usr/local/bundle/gems/ceedling-1.0.0/lib/ceedling/rules_tests.rake:22:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.3.0/gems/rake-13.1.0/lib/rake/task.rb:281:in `block in execute'
/usr/local/lib/ruby/gems/3.3.0/gems/rake-13.1.0/lib/rake/task.rb:281:in `each'
/usr/local/lib/ruby/gems/3.3.0/gems/rake-13.1.0/lib/rake/task.rb:281:in `execute'
/usr/local/lib/ruby/gems/3.3.0/gems/rake-13.1.0/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/usr/local/lib/ruby/gems/3.3.0/gems/rake-13.1.0/lib/rake/task.rb:199:in `synchronize'
/usr/local/lib/ruby/gems/3.3.0/gems/rake-13.1.0/lib/rake/task.rb:199:in `invoke_with_call_chain'
/usr/local/lib/ruby/gems/3.3.0/gems/rake-13.1.0/lib/rake/task.rb:188:in `invoke'
/usr/local/bundle/gems/ceedling-1.0.0/lib/ceedling/task_invoker.rb:60:in `block in invoke_test_objects'
/usr/local/bundle/gems/ceedling-1.0.0/lib/ceedling/build_batchinator.rb:59:in `block (3 levels) in exec'
<internal:kernel>:187:in `loop'
/usr/local/bundle/gems/ceedling-1.0.0/lib/ceedling/build_batchinator.rb:57:in `block (2 levels) in exec'
🌱 Ceedling could not complete operations because of errors
Plugin | ReportTestsRawOutputLog > :post_error...

Running Raw Tests Output Report
-------------------------------
Tests produced no extra console output.

It complains about : error: unknown type name ‘TMR_TIMEOUT_t’ which is unknown at this time because this structure is defined in Timer.h but not included in the new/generated timer_private.h file in the build/mocks folder that only includes #include "MyTypes.h" while my original Timer_private.h file in src includes #include "Timer.h".
There was no generated timer_private.h in Ceedling 0.31.0 or should I say CMock 2.5.3 I think it was reusing my original file.

I noticed that in the generated timer_private.h (in the mocked folder) always include a wrong header that is included in Timer.h instead of including Timer.h itself as if there was an error of include level n-2 instead of n-1. I don't know if this is intentional or a bug?

I hope I was clearer, please let me know if I can help !

2024-11-22_SimpleTest_0_31_0.zip
2024-11-22_SimpleTest_1_0_0.zip

@JuPrgn
Copy link
Contributor Author

JuPrgn commented Jan 6, 2025

Happy new year !

Just retested this simple project with latest release 2.6.0 but I still get Timer_private.h generated in build/test/mocks/ with missing includes compared to my original Timer_private.h in src.

Generated build/test/mocks/Timer_private.h :

#ifndef _TIMER_PRIVATE_H_ 
#define _TIMER_PRIVATE_H_

#include "MyTypes.h"

 void TMR_UpdateTimer(TMR_TIMEOUT_t *pTmr);

      _Bool
           TMR_CheckParameters(TMR_TIMEOUT_t *pTmr);
 void TMR_Timeout(TMR_TIMEOUT_t *pTmr);
 uint32_t TMR_RoundInterval(uint32_t interval);
 void TMR_ResetList(void);
 ERR_t TMR_AddItem(TMR_TIMEOUT_t *pTmr);
 ERR_t TMR_RemoveItem(TMR_TIMEOUT_t *pTmr);

      _Bool
           TMR_SearchItem(uint16_t *index, TMR_TIMEOUT_t *pTmr);

#endif 

Original src/Timer_private.h :

#ifndef TIMER_PRIVATE_H
#define TIMER_PRIVATE_H

#include "Timer.h"

STATIC void TMR_UpdateTimer(TMR_TIMEOUT_t *pTmr);
STATIC bool TMR_CheckParameters(TMR_TIMEOUT_t *pTmr);
STATIC void TMR_Timeout(TMR_TIMEOUT_t *pTmr);
STATIC uint32_t TMR_RoundInterval(uint32_t interval);
STATIC void TMR_ResetList(void);
STATIC ERR_t TMR_AddItem(TMR_TIMEOUT_t *pTmr);
STATIC ERR_t TMR_RemoveItem(TMR_TIMEOUT_t *pTmr);
STATIC bool TMR_SearchItem(uint16_t *index, TMR_TIMEOUT_t *pTmr);

#endif // TIMER_PRIVATE_H

Output complains about unknown type TMR_TIMEOUT_t as this one is declared inside Timer.h and cannot be find using generated build/test/mocks/Timer_private.h from CMock

Any hint on this ? Where could I find the generation of this header on Cmock sources or commits related to this change please ?

@mvandervoord
Copy link
Member

Hi @JuPrgn -- I AM able to reproduce your problem. I'm digging into it.

@mvandervoord
Copy link
Member

Hi again @JuPrgn .

(1) I've fixed the bug that you were running into. The root problem is that the regex that was in charge of stripping out the paths from the header files was too greedy. If there were multiple consecutive includes with paths, it was clobbering all but the last. Yikes! You can find the fix here: 65ce792

Once this is fixed, there's a problem with "duplicate definitions" of some symbols. This one's on you. In your attached example, you have functions defined in Timer.h... and then you're mocking those same functions in the private header file. Once linked together, you have both versions.

One way of fixing this is to replace inline with INLINE, much like how you are already replacing static with STATIC. Then in MyTypes.h, you can do the following, since you're already using gcc:

#ifdef TEST
#define STATIC
#define INLINE __attribute__((weak))
#else
#define STATIC static
#define INLINE inline
#endif

For tests, all your inline functions are defined as non-inline weak functions, allowing your mocks to replace them when linking. During release, they're normal inline functions.

Let me know if you have further issues!

@JuPrgn
Copy link
Contributor Author

JuPrgn commented Jan 8, 2025

Thank you very much @mvandervoord, I tested the first part and it works very well! Ultimately it was Ceedling's side and not Cmock.
The generated header now include Timer.h and also add 2 of the headers already included in Timer.h is this expected ?

Okay for the second part I have quite a bit of code which uses this principle which worked well on the previous version of ceedling, the two parts were tested separately and I still obtain complete coverage with gcov of the two test files combined for the same source .c. I will adapt the structure of my projects to get the same functionalities with 1.0.0.

Thanks for all the work you've done, the new version looks awesome and thanks for your great support!

@mvandervoord
Copy link
Member

Hm. That's interesting that it worked in the previous release. I'm a little unclear how that could have been... I don't believe we were stripping inlines from the C file itself?

The slicing of files into smaller testable parts is something we'd like to push further into (not just for inlines, but for static functions, etc). This entire idea will be getting more attention, but it's outside the scope of this issue.

Thanks for helping us debug and improve!

@mkarlesky
Copy link
Member

To answer your question, @JuPrgn, yes, the multiple #includes you're seeing in the generated mock are expected. It's far more challenging than you'd think to extract #include statements from C files. The method we're using when preprocessing is involved tends to discover a few more #includes than in the original file further up the dependency chain. This is nearly always harmless.

@mkarlesky mkarlesky transferred this issue from ThrowTheSwitch/CMock Jan 9, 2025
@JuPrgn
Copy link
Contributor Author

JuPrgn commented Jan 10, 2025

@mvandervoord I did not know this was not a feature of Ceedling when I used it like that but this was working very well and then structured almost all my projects since to use this pseudo 2 abstraction layers for complex modules (some project features are already refactored in multiple submodules and I did not want to add another abstraction layer for functions that could be inlined as "private"). I will check how is it possible that this was working.

@mkarlesky Thanks for the clarification. 😊

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants