ceedling 0.0.8 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +15 -3
- data/examples/temp_sensor/project.yml +0 -1
- data/lib/ceedling/version.rb +5 -5
- data/lib/ceedling/version.rb.erb +1 -1
- data/new_project_template/vendor/ceedling/docs/CMock Summary.pdf +0 -0
- data/new_project_template/vendor/ceedling/lib/build_invoker_helper.rb +16 -0
- data/new_project_template/vendor/ceedling/lib/configurator.rb +8 -7
- data/new_project_template/vendor/ceedling/lib/configurator_plugins.rb +1 -11
- data/new_project_template/vendor/ceedling/lib/configurator_setup.rb +14 -1
- data/new_project_template/vendor/ceedling/lib/generator_test_runner.rb +0 -1
- data/new_project_template/vendor/ceedling/lib/objects.yml +10 -2
- data/new_project_template/vendor/ceedling/lib/preprocessinator_extractor.rb +11 -2
- data/new_project_template/vendor/ceedling/lib/release_invoker.rb +14 -6
- data/new_project_template/vendor/ceedling/lib/test_invoker.rb +4 -7
- data/new_project_template/vendor/ceedling/lib/test_invoker_helper.rb +1 -11
- data/new_project_template/vendor/ceedling/plugins/xml_tests_report/xml_tests_report.rb +1 -1
- data/new_project_template/vendor/ceedling/release/build.info +1 -2
- data/new_project_template/vendor/ceedling/vendor/c_exception/release/build.info +1 -2
- data/new_project_template/vendor/ceedling/vendor/cmock/lib/cmock_config.rb +3 -2
- data/new_project_template/vendor/ceedling/vendor/cmock/release/build.info +1 -2
- data/new_project_template/vendor/ceedling/vendor/unity/auto/generate_test_runner.rb +8 -8
- data/new_project_template/vendor/ceedling/vendor/unity/release/build.info +1 -2
- data/new_project_template/vendor/ceedling/vendor/unity/src/unity.c +95 -0
- data/new_project_template/vendor/ceedling/vendor/unity/src/unity.h +17 -0
- data/new_project_template/vendor/ceedling/vendor/unity/src/unity_internals.h +55 -0
- metadata +5 -4
data/Rakefile
CHANGED
@@ -10,10 +10,22 @@ task :update_tools do
|
|
10
10
|
puts "\nRetrieving ceedling content from SourceForge..."
|
11
11
|
rm_rf "temp"
|
12
12
|
mkdir "temp"
|
13
|
+
|
14
|
+
libs = [
|
15
|
+
{:path => './vendor/unity'},
|
16
|
+
{:path => './vendor/cmock'},
|
17
|
+
{:path => './vendor/c_exception'},
|
18
|
+
{:path => '.'}
|
19
|
+
]
|
13
20
|
cd "temp" do
|
14
|
-
|
15
|
-
|
16
|
-
|
21
|
+
sh 'svn co http://ceedling.svn.sourceforge.net/svnroot/ceedling/trunk .'
|
22
|
+
libs.each do |lib|
|
23
|
+
svn_info = `svn info #{lib[:path]}/`
|
24
|
+
lib[:revision] = svn_info.split("\n")[4].match(/ (\d+)/)[1]
|
25
|
+
revision_file = "#{lib[:path]}/release/build.info"
|
26
|
+
puts "Recorded lib revision #{lib[:revision]} in #{revision_file}"
|
27
|
+
File.open(revision_file, 'w'){|f| f.write lib[:revision]}
|
28
|
+
end
|
17
29
|
rm_rf Dir["./**/.svn/"], :verbose => false # remove svn artifacts
|
18
30
|
end
|
19
31
|
|
data/lib/ceedling/version.rb
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
module Ceedling
|
3
3
|
module Version
|
4
4
|
# @private
|
5
|
-
GEM = "0.0.
|
5
|
+
GEM = "0.0.12"
|
6
6
|
|
7
7
|
# @private
|
8
|
-
CEEDLING = "0.9.
|
8
|
+
CEEDLING = "0.9.193"
|
9
9
|
# @private
|
10
|
-
CEXCEPTION = "1.2.
|
10
|
+
CEXCEPTION = "1.2.17"
|
11
11
|
# @private
|
12
|
-
CMOCK = "2.0.
|
12
|
+
CMOCK = "2.0.213"
|
13
13
|
# @private
|
14
|
-
UNITY = "2.0.
|
14
|
+
UNITY = "2.0.134"
|
15
15
|
end
|
16
16
|
end
|
data/lib/ceedling/version.rb.erb
CHANGED
Binary file
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
class BuildInvokerHelper
|
3
|
+
|
4
|
+
constructor :configurator, :streaminator
|
5
|
+
|
6
|
+
def process_exception(exception)
|
7
|
+
if (exception.message =~ /Don't know how to build task '(.+)'/i)
|
8
|
+
@streaminator.stderr_puts("ERROR: Rake could not find file referenced in source or test: '#{$1}'.")
|
9
|
+
@streaminator.stderr_puts("Possible stale dependency due to a file name change, etc. Maybe 'clean' task and try again.") if (@configurator.project_use_auxiliary_dependencies)
|
10
|
+
raise ''
|
11
|
+
else
|
12
|
+
raise exception
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -83,7 +83,7 @@ class Configurator
|
|
83
83
|
# cmock has its own internal defaults handling, but we need to set these specific values
|
84
84
|
# so they're present for the build environment to access;
|
85
85
|
# note: these need to end up in the hash given to initialize cmock for this to be successful
|
86
|
-
cmock = config[:cmock]
|
86
|
+
cmock = config[:cmock] || {}
|
87
87
|
|
88
88
|
# yes, we're duplicating the default mock_prefix in cmock, but it's because we need CMOCK_MOCK_PREFIX always available in Ceedling's environment
|
89
89
|
cmock[:mock_prefix] = 'Mock' if (cmock[:mock_prefix].nil?)
|
@@ -106,7 +106,7 @@ class Configurator
|
|
106
106
|
cmock[:includes].uniq!
|
107
107
|
end
|
108
108
|
|
109
|
-
@runner_config = cmock
|
109
|
+
@runner_config = cmock.merge(config[:test_runner] || {})
|
110
110
|
@cmock_builder.manufacture(cmock)
|
111
111
|
end
|
112
112
|
|
@@ -234,15 +234,16 @@ class Configurator
|
|
234
234
|
|
235
235
|
def validate(config)
|
236
236
|
# collect felonies and go straight to jail
|
237
|
-
raise if (not @configurator_setup.validate_required_sections(config))
|
237
|
+
raise if (not @configurator_setup.validate_required_sections( config ))
|
238
238
|
|
239
239
|
# collect all misdemeanors, everybody on probation
|
240
240
|
blotter = []
|
241
|
-
blotter << @configurator_setup.validate_required_section_values(config)
|
242
|
-
blotter << @configurator_setup.validate_paths(config)
|
243
|
-
blotter << @configurator_setup.validate_tools(config)
|
241
|
+
blotter << @configurator_setup.validate_required_section_values( config )
|
242
|
+
blotter << @configurator_setup.validate_paths( config )
|
243
|
+
blotter << @configurator_setup.validate_tools( config )
|
244
|
+
blotter << @configurator_setup.validate_plugins( config )
|
244
245
|
|
245
|
-
raise if (blotter.include?(false))
|
246
|
+
raise if (blotter.include?( false ))
|
246
247
|
end
|
247
248
|
|
248
249
|
|
@@ -3,6 +3,7 @@ require 'constants'
|
|
3
3
|
class ConfiguratorPlugins
|
4
4
|
|
5
5
|
constructor :stream_wrapper, :file_wrapper, :system_wrapper
|
6
|
+
attr_reader :rake_plugins, :script_plugins
|
6
7
|
|
7
8
|
def setup
|
8
9
|
@rake_plugins = []
|
@@ -89,15 +90,4 @@ class ConfiguratorPlugins
|
|
89
90
|
return defaults_with_path
|
90
91
|
end
|
91
92
|
|
92
|
-
|
93
|
-
def validate_plugins(enabled_plugins)
|
94
|
-
missing_plugins = Set.new(enabled_plugins) - Set.new(@rake_plugins) - Set.new(@script_plugins)
|
95
|
-
|
96
|
-
missing_plugins.each do |plugin|
|
97
|
-
@stream_wrapper.stdout_puts.stderr_puts("ERROR: Ceedling plugin '#{plugin}' contains no rake or ruby class entry point. (Misspelled or missing files?)")
|
98
|
-
end
|
99
|
-
|
100
|
-
raise if (missing_plugins.size > 0)
|
101
|
-
end
|
102
|
-
|
103
93
|
end
|
@@ -11,7 +11,7 @@ end
|
|
11
11
|
|
12
12
|
class ConfiguratorSetup
|
13
13
|
|
14
|
-
constructor :configurator_builder, :configurator_validator
|
14
|
+
constructor :configurator_builder, :configurator_validator, :configurator_plugins, :stream_wrapper
|
15
15
|
|
16
16
|
|
17
17
|
def build_project_config(config, flattened_config)
|
@@ -107,4 +107,17 @@ class ConfiguratorSetup
|
|
107
107
|
return true
|
108
108
|
end
|
109
109
|
|
110
|
+
def validate_plugins(config)
|
111
|
+
missing_plugins =
|
112
|
+
Set.new( config[:plugins][:enabled] ) -
|
113
|
+
Set.new( @configurator_plugins.rake_plugins ) -
|
114
|
+
Set.new( @configurator_plugins.script_plugins )
|
115
|
+
|
116
|
+
missing_plugins.each do |plugin|
|
117
|
+
@stream_wrapper.stderr_puts("ERROR: Ceedling plugin '#{plugin}' contains no rake or ruby class entry point. (Misspelled or missing files?)")
|
118
|
+
end
|
119
|
+
|
120
|
+
return ( (missing_plugins.size > 0) ? false : true )
|
121
|
+
end
|
122
|
+
|
110
123
|
end
|
@@ -79,6 +79,8 @@ configurator_setup:
|
|
79
79
|
compose:
|
80
80
|
- configurator_builder
|
81
81
|
- configurator_validator
|
82
|
+
- configurator_plugins
|
83
|
+
- stream_wrapper
|
82
84
|
|
83
85
|
configurator_plugins:
|
84
86
|
compose:
|
@@ -255,6 +257,7 @@ test_invoker:
|
|
255
257
|
compose:
|
256
258
|
- configurator
|
257
259
|
- test_invoker_helper
|
260
|
+
- build_invoker_helper
|
258
261
|
- streaminator
|
259
262
|
- preprocessinator
|
260
263
|
- task_invoker
|
@@ -270,13 +273,13 @@ test_invoker_helper:
|
|
270
273
|
- test_includes_extractor
|
271
274
|
- file_finder
|
272
275
|
- file_path_utils
|
273
|
-
- streaminator
|
274
276
|
- file_wrapper
|
275
277
|
|
276
278
|
release_invoker:
|
277
279
|
compose:
|
278
|
-
- release_invoker_helper
|
279
280
|
- configurator
|
281
|
+
- release_invoker_helper
|
282
|
+
- build_invoker_helper
|
280
283
|
- dependinator
|
281
284
|
- task_invoker
|
282
285
|
- file_path_utils
|
@@ -286,3 +289,8 @@ release_invoker_helper:
|
|
286
289
|
- configurator
|
287
290
|
- dependinator
|
288
291
|
- task_invoker
|
292
|
+
|
293
|
+
build_invoker_helper:
|
294
|
+
compose:
|
295
|
+
- configurator
|
296
|
+
- streaminator
|
@@ -9,15 +9,24 @@ class PreprocessinatorExtractor
|
|
9
9
|
contents = []
|
10
10
|
extract = false
|
11
11
|
|
12
|
+
# preprocessing by way of toolchain preprocessor expands macros, eliminates comments, strips out #ifdef code, etc.
|
13
|
+
# however, it also expands in place each #include'd file.
|
14
|
+
# so, we must extract only the lines of the file that belong to the file originally preprocessed
|
15
|
+
|
16
|
+
# iterate through all lines and alternate between extract and ignore modes
|
17
|
+
# all lines between a '#'line containing file name of our filepath and the next '#'line should be extracted
|
18
|
+
|
12
19
|
@file_wrapper.readlines(filepath).each do |line|
|
13
20
|
if (extract)
|
14
|
-
if
|
21
|
+
# flip to ignore mode if line begins with '#' except if it's a #pragma line
|
22
|
+
if ((line =~ /^#/) and not (line =~ /#\s*pragma/))
|
15
23
|
extract = false
|
24
|
+
# otherwise, extract the line
|
16
25
|
else
|
17
26
|
contents << line
|
18
27
|
end
|
19
28
|
end
|
20
|
-
# extract
|
29
|
+
# enable extract mode if line matches preprocessor expression for our original file name
|
21
30
|
extract = true if (line =~ /^#.*(\s|\/|\\|\")#{Regexp.escape(File.basename(filepath))}/)
|
22
31
|
end
|
23
32
|
|
@@ -2,16 +2,20 @@
|
|
2
2
|
|
3
3
|
class ReleaseInvoker
|
4
4
|
|
5
|
-
constructor :configurator, :release_invoker_helper, :dependinator, :task_invoker, :file_path_utils
|
5
|
+
constructor :configurator, :release_invoker_helper, :build_invoker_helper, :dependinator, :task_invoker, :file_path_utils
|
6
6
|
|
7
7
|
|
8
8
|
def setup_and_invoke_c_objects(c_files)
|
9
9
|
objects = ( @file_path_utils.form_release_build_c_objects_filelist( c_files ) )
|
10
10
|
|
11
|
-
|
11
|
+
begin
|
12
|
+
@release_invoker_helper.process_auxiliary_dependencies( @file_path_utils.form_release_dependencies_filelist( c_files ) )
|
12
13
|
|
13
|
-
|
14
|
-
|
14
|
+
@dependinator.enhance_release_file_dependencies( objects )
|
15
|
+
@task_invoker.invoke_release_objects( objects )
|
16
|
+
rescue => e
|
17
|
+
@build_invoker_helper.process_exception(e)
|
18
|
+
end
|
15
19
|
|
16
20
|
return objects
|
17
21
|
end
|
@@ -20,8 +24,12 @@ class ReleaseInvoker
|
|
20
24
|
def setup_and_invoke_asm_objects(asm_files)
|
21
25
|
objects = @file_path_utils.form_release_build_asm_objects_filelist( asm_files )
|
22
26
|
|
23
|
-
|
24
|
-
|
27
|
+
begin
|
28
|
+
@dependinator.enhance_release_file_dependencies( objects )
|
29
|
+
@task_invoker.invoke_release_objects( objects )
|
30
|
+
rescue => e
|
31
|
+
@build_invoker_helper.process_exception(e)
|
32
|
+
end
|
25
33
|
|
26
34
|
return objects
|
27
35
|
end
|
@@ -1,12 +1,9 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rake' # for ext()
|
3
|
-
|
4
1
|
|
5
2
|
class TestInvoker
|
6
3
|
|
7
4
|
attr_reader :sources, :tests, :mocks
|
8
5
|
|
9
|
-
constructor :configurator, :test_invoker_helper, :streaminator, :preprocessinator, :task_invoker, :dependinator, :project_config_manager, :file_path_utils
|
6
|
+
constructor :configurator, :test_invoker_helper, :build_invoker_helper, :streaminator, :preprocessinator, :task_invoker, :dependinator, :project_config_manager, :file_path_utils
|
10
7
|
|
11
8
|
def setup
|
12
9
|
@sources = []
|
@@ -54,7 +51,7 @@ class TestInvoker
|
|
54
51
|
# 3, 2, 1... launch
|
55
52
|
@task_invoker.invoke_test_results( results_pass )
|
56
53
|
rescue => e
|
57
|
-
@
|
54
|
+
@build_invoker_helper.process_exception(e)
|
58
55
|
end
|
59
56
|
|
60
57
|
# store away what's been processed
|
@@ -63,10 +60,10 @@ class TestInvoker
|
|
63
60
|
end
|
64
61
|
|
65
62
|
# post-process collected mock list
|
66
|
-
@mocks.uniq
|
63
|
+
@mocks.uniq!
|
67
64
|
|
68
65
|
# post-process collected sources list
|
69
|
-
@sources.uniq
|
66
|
+
@sources.uniq!
|
70
67
|
end
|
71
68
|
|
72
69
|
end
|
@@ -4,7 +4,7 @@ require 'rake' # for ext()
|
|
4
4
|
|
5
5
|
class TestInvokerHelper
|
6
6
|
|
7
|
-
constructor :configurator, :task_invoker, :dependinator, :test_includes_extractor, :file_finder, :file_path_utils, :
|
7
|
+
constructor :configurator, :task_invoker, :dependinator, :test_includes_extractor, :file_finder, :file_path_utils, :file_wrapper
|
8
8
|
|
9
9
|
def clean_results(results, options)
|
10
10
|
@file_wrapper.rm_f( results[:fail] )
|
@@ -28,14 +28,4 @@ class TestInvokerHelper
|
|
28
28
|
return sources.compact
|
29
29
|
end
|
30
30
|
|
31
|
-
def process_exception(exception)
|
32
|
-
if (exception.message =~ /Don't know how to build task '(.+)'/i)
|
33
|
-
@streaminator.stderr_puts("ERROR: Rake could not find file referenced in source or test: '#{$1}'.")
|
34
|
-
@streaminator.stderr_puts("Possible stale dependency due to a file name change, etc. Maybe 'clean' task and try again.") if (@configurator.project_use_auxiliary_dependencies)
|
35
|
-
raise ''
|
36
|
-
else
|
37
|
-
raise exception
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
31
|
end
|
@@ -53,7 +53,7 @@ class XmlTestsReport < Plugin
|
|
53
53
|
result[:collection].each do |item|
|
54
54
|
filename = File.join( result[:source][:path], result[:source][:file] )
|
55
55
|
|
56
|
-
stream.puts "\t\t<
|
56
|
+
stream.puts "\t\t<FailedTest id=\"#{@test_counter}\">"
|
57
57
|
stream.puts "\t\t\t<Name>#{filename}::#{item[:test]}</Name>"
|
58
58
|
stream.puts "\t\t\t<FailureType>Assertion</FailureType>"
|
59
59
|
stream.puts "\t\t\t<Location>"
|
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
193
|
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
17
|
@@ -15,7 +15,7 @@ class CMockConfig
|
|
15
15
|
:strippables => ['(?:__attribute__\s*\(+.*?\)+)'],
|
16
16
|
:attributes => ['__ramfunc', '__irq', '__fiq', 'register', 'extern'],
|
17
17
|
:enforce_strict_ordering => false,
|
18
|
-
:
|
18
|
+
:unity_helper_path => false,
|
19
19
|
:treat_as => {},
|
20
20
|
:treat_as_void => [],
|
21
21
|
:memcmp_if_unknown => true,
|
@@ -54,6 +54,7 @@ class CMockConfig
|
|
54
54
|
puts "WARNING: :#{opt.to_s} should be an array." unless (options[:verbosity] < 1)
|
55
55
|
end
|
56
56
|
end
|
57
|
+
options[:unity_helper_path] ||= options[:unity_helper]
|
57
58
|
options[:plugins].compact!
|
58
59
|
options[:plugins].map! {|p| p.to_sym}
|
59
60
|
@options = options
|
@@ -76,7 +77,7 @@ class CMockConfig
|
|
76
77
|
end
|
77
78
|
|
78
79
|
def load_unity_helper
|
79
|
-
return File.new(@options[:
|
80
|
+
return File.new(@options[:unity_helper_path]).read if (@options[:unity_helper_path])
|
80
81
|
return nil
|
81
82
|
end
|
82
83
|
|
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
213
|
@@ -31,7 +31,7 @@ class UnityTestRunnerGenerator
|
|
31
31
|
|
32
32
|
def run(input_file, output_file, options=nil)
|
33
33
|
tests = []
|
34
|
-
|
34
|
+
testfile_includes = []
|
35
35
|
used_mocks = []
|
36
36
|
|
37
37
|
@options.merge!(options) unless options.nil?
|
@@ -39,22 +39,22 @@ class UnityTestRunnerGenerator
|
|
39
39
|
|
40
40
|
#pull required data from source file
|
41
41
|
File.open(input_file, 'r') do |input|
|
42
|
-
tests
|
43
|
-
|
44
|
-
used_mocks
|
42
|
+
tests = find_tests(input)
|
43
|
+
testfile_includes = find_includes(input)
|
44
|
+
used_mocks = find_mocks(testfile_includes)
|
45
45
|
end
|
46
46
|
|
47
47
|
#build runner file
|
48
|
-
generate(input_file, output_file, tests,
|
48
|
+
generate(input_file, output_file, tests, used_mocks)
|
49
49
|
|
50
50
|
#determine which files were used to return them
|
51
51
|
all_files_used = [input_file, output_file]
|
52
|
-
all_files_used +=
|
52
|
+
all_files_used += testfile_includes.map {|filename| filename + '.c'} unless testfile_includes.empty?
|
53
53
|
all_files_used += @options[:includes] unless @options[:includes].empty?
|
54
54
|
return all_files_used.uniq
|
55
55
|
end
|
56
56
|
|
57
|
-
def generate(input_file, output_file, tests,
|
57
|
+
def generate(input_file, output_file, tests, used_mocks)
|
58
58
|
File.open(output_file, 'w') do |output|
|
59
59
|
create_header(output, used_mocks)
|
60
60
|
create_externs(output, tests, used_mocks)
|
@@ -155,7 +155,7 @@ class UnityTestRunnerGenerator
|
|
155
155
|
output.puts("extern void setUp(void);")
|
156
156
|
output.puts("extern void tearDown(void);")
|
157
157
|
tests.each do |test|
|
158
|
-
output.puts("extern void #{test[:test]}(#{test[:call]});")
|
158
|
+
output.puts("extern void #{test[:test]}(#{test[:call] || 'void'});")
|
159
159
|
end
|
160
160
|
output.puts('')
|
161
161
|
end
|
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
134
|
@@ -578,7 +578,102 @@ void UnityAssertFloatsWithin(const _UF delta,
|
|
578
578
|
UNITY_FAIL_AND_BAIL;
|
579
579
|
}
|
580
580
|
}
|
581
|
+
|
582
|
+
#endif //not UNITY_EXCLUDE_FLOAT
|
583
|
+
|
584
|
+
//-----------------------------------------------
|
585
|
+
#ifndef UNITY_EXCLUDE_DOUBLE
|
586
|
+
void UnityAssertEqualDoubleArray(const _UD* expected,
|
587
|
+
const _UD* actual,
|
588
|
+
const _UU32 num_elements,
|
589
|
+
const char* msg,
|
590
|
+
const UNITY_LINE_TYPE lineNumber)
|
591
|
+
{
|
592
|
+
_UU32 elements = num_elements;
|
593
|
+
const _UD* ptr_expected = expected;
|
594
|
+
const _UD* ptr_actual = actual;
|
595
|
+
_UD diff, tol;
|
596
|
+
|
597
|
+
UNITY_SKIP_EXECUTION;
|
598
|
+
|
599
|
+
if (elements == 0)
|
600
|
+
{
|
601
|
+
UnityTestResultsFailBegin(lineNumber);
|
602
|
+
UnityPrint(UnityStrPointless);
|
603
|
+
UnityAddMsgIfSpecified(msg);
|
604
|
+
UNITY_FAIL_AND_BAIL;
|
605
|
+
}
|
606
|
+
|
607
|
+
if (UnityCheckArraysForNull((void*)expected, (void*)actual, lineNumber, msg) == 1)
|
608
|
+
return;
|
609
|
+
|
610
|
+
while (elements--)
|
611
|
+
{
|
612
|
+
diff = *ptr_expected - *ptr_actual;
|
613
|
+
if (diff < 0.0)
|
614
|
+
diff = 0.0 - diff;
|
615
|
+
tol = UNITY_DOUBLE_PRECISION * *ptr_expected;
|
616
|
+
if (tol < 0.0)
|
617
|
+
tol = 0.0 - tol;
|
618
|
+
if (diff > tol)
|
619
|
+
{
|
620
|
+
UnityTestResultsFailBegin(lineNumber);
|
621
|
+
UnityPrint(UnityStrElement);
|
622
|
+
UnityPrintNumberByStyle((num_elements - elements - 1), UNITY_DISPLAY_STYLE_UINT);
|
623
|
+
#ifdef UNITY_DOUBLE_VERBOSE
|
624
|
+
UnityPrint(UnityStrExpected);
|
625
|
+
UnityPrintFloat((float)(*ptr_expected));
|
626
|
+
UnityPrint(UnityStrWas);
|
627
|
+
UnityPrintFloat((float)(*ptr_actual));
|
628
|
+
#else
|
629
|
+
UnityPrint(UnityStrDelta);
|
581
630
|
#endif
|
631
|
+
UnityAddMsgIfSpecified(msg);
|
632
|
+
UNITY_FAIL_AND_BAIL;
|
633
|
+
}
|
634
|
+
ptr_expected++;
|
635
|
+
ptr_actual++;
|
636
|
+
}
|
637
|
+
}
|
638
|
+
|
639
|
+
//-----------------------------------------------
|
640
|
+
void UnityAssertDoublesWithin(const _UD delta,
|
641
|
+
const _UD expected,
|
642
|
+
const _UD actual,
|
643
|
+
const char* msg,
|
644
|
+
const UNITY_LINE_TYPE lineNumber)
|
645
|
+
{
|
646
|
+
_UD diff = actual - expected;
|
647
|
+
_UD pos_delta = delta;
|
648
|
+
|
649
|
+
UNITY_SKIP_EXECUTION;
|
650
|
+
|
651
|
+
if (diff < 0)
|
652
|
+
{
|
653
|
+
diff = 0.0f - diff;
|
654
|
+
}
|
655
|
+
if (pos_delta < 0)
|
656
|
+
{
|
657
|
+
pos_delta = 0.0f - pos_delta;
|
658
|
+
}
|
659
|
+
|
660
|
+
if (pos_delta < diff)
|
661
|
+
{
|
662
|
+
UnityTestResultsFailBegin(lineNumber);
|
663
|
+
#ifdef UNITY_DOUBLE_VERBOSE
|
664
|
+
UnityPrint(UnityStrExpected);
|
665
|
+
UnityPrintFloat((float)expected);
|
666
|
+
UnityPrint(UnityStrWas);
|
667
|
+
UnityPrintFloat((float)actual);
|
668
|
+
#else
|
669
|
+
UnityPrint(UnityStrDelta);
|
670
|
+
#endif
|
671
|
+
UnityAddMsgIfSpecified(msg);
|
672
|
+
UNITY_FAIL_AND_BAIL;
|
673
|
+
}
|
674
|
+
}
|
675
|
+
|
676
|
+
#endif // not UNITY_EXCLUDE_DOUBLE
|
582
677
|
|
583
678
|
//-----------------------------------------------
|
584
679
|
void UnityAssertNumbersWithin( const _U_SINT delta,
|
@@ -24,6 +24,11 @@
|
|
24
24
|
// - define UNITY_FLOAT_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_FLOAT
|
25
25
|
// - define UNITY_FLOAT_TYPE to specify doubles instead of single precision floats
|
26
26
|
// - define UNITY_FLOAT_VERBOSE to print floating point values in errors (uses sprintf)
|
27
|
+
// - define UNITY_INCLUDE_DOUBLE to allow double floating point comparisons
|
28
|
+
// - define UNITY_EXCLUDE_DOUBLE to disallow double floating point comparisons (default)
|
29
|
+
// - define UNITY_DOUBLE_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_DOUBLE
|
30
|
+
// - define UNITY_DOUBLE_TYPE to specify something other than double
|
31
|
+
// - define UNITY_DOUBLE_VERBOSE to print floating point values in errors (uses sprintf)
|
27
32
|
|
28
33
|
// Output
|
29
34
|
// - by default, Unity prints to standard out with putchar. define UNITY_OUTPUT_CHAR(a) with a different function if desired
|
@@ -137,6 +142,12 @@
|
|
137
142
|
#define TEST_ASSERT_EQUAL_FLOAT(expected, actual) UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, __LINE__, NULL)
|
138
143
|
#define TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
139
144
|
|
145
|
+
//Double (If Enabled)
|
146
|
+
#define TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, __LINE__, NULL)
|
147
|
+
#define TEST_ASSERT_EQUAL_DOUBLE(expected, actual) UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, __LINE__, NULL)
|
148
|
+
#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, __LINE__, NULL)
|
149
|
+
|
150
|
+
|
140
151
|
//-------------------------------------------------------
|
141
152
|
// Test Asserts (with additional messages)
|
142
153
|
//-------------------------------------------------------
|
@@ -210,4 +221,10 @@
|
|
210
221
|
#define TEST_ASSERT_FLOAT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, __LINE__, message)
|
211
222
|
#define TEST_ASSERT_EQUAL_FLOAT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, __LINE__, message)
|
212
223
|
#define TEST_ASSERT_EQUAL_FLOAT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, __LINE__, message)
|
224
|
+
|
225
|
+
//Double (If Enabled)
|
226
|
+
#define TEST_ASSERT_DOUBLE_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, __LINE__, message)
|
227
|
+
#define TEST_ASSERT_EQUAL_DOUBLE_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, __LINE__, message)
|
228
|
+
#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, __LINE__, message)
|
229
|
+
|
213
230
|
#endif
|
@@ -112,6 +112,37 @@ typedef UNITY_FLOAT_TYPE _UF;
|
|
112
112
|
|
113
113
|
#endif
|
114
114
|
|
115
|
+
//-------------------------------------------------------
|
116
|
+
// Double Float Support
|
117
|
+
//-------------------------------------------------------
|
118
|
+
|
119
|
+
//unlike FLOAT, we DON'T include by default
|
120
|
+
#ifndef UNITY_EXCLUDE_DOUBLE
|
121
|
+
#ifndef UNITY_INCLUDE_DOUBLE
|
122
|
+
#define UNITY_EXCLUDE_DOUBLE
|
123
|
+
#endif
|
124
|
+
#endif
|
125
|
+
|
126
|
+
#ifdef UNITY_EXCLUDE_DOUBLE
|
127
|
+
|
128
|
+
//No Floating Point Support
|
129
|
+
#undef UNITY_DOUBLE_PRECISION
|
130
|
+
#undef UNITY_DOUBLE_TYPE
|
131
|
+
#undef UNITY_DOUBLE_VERBOSE
|
132
|
+
|
133
|
+
#else
|
134
|
+
|
135
|
+
//Floating Point Support
|
136
|
+
#ifndef UNITY_DOUBLE_PRECISION
|
137
|
+
#define UNITY_DOUBLE_PRECISION (1e-12f)
|
138
|
+
#endif
|
139
|
+
#ifndef UNITY_DOUBLE_TYPE
|
140
|
+
#define UNITY_DOUBLE_TYPE double
|
141
|
+
#endif
|
142
|
+
typedef UNITY_DOUBLE_TYPE _UD;
|
143
|
+
|
144
|
+
#endif
|
145
|
+
|
115
146
|
//-------------------------------------------------------
|
116
147
|
// Output Method
|
117
148
|
//-------------------------------------------------------
|
@@ -280,6 +311,20 @@ void UnityAssertEqualFloatArray(const _UF* expected,
|
|
280
311
|
const UNITY_LINE_TYPE lineNumber);
|
281
312
|
#endif
|
282
313
|
|
314
|
+
#ifndef UNITY_EXCLUDE_DOUBLE
|
315
|
+
void UnityAssertDoublesWithin(const _UD delta,
|
316
|
+
const _UD expected,
|
317
|
+
const _UD actual,
|
318
|
+
const char* msg,
|
319
|
+
const UNITY_LINE_TYPE lineNumber);
|
320
|
+
|
321
|
+
void UnityAssertEqualDoubleArray(const _UD* expected,
|
322
|
+
const _UD* actual,
|
323
|
+
const _UU32 num_elements,
|
324
|
+
const char* msg,
|
325
|
+
const UNITY_LINE_TYPE lineNumber);
|
326
|
+
#endif
|
327
|
+
|
283
328
|
//-------------------------------------------------------
|
284
329
|
// Basic Fail and Ignore
|
285
330
|
//-------------------------------------------------------
|
@@ -352,4 +397,14 @@ void UnityAssertEqualFloatArray(const _UF* expected,
|
|
352
397
|
#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualFloatArray((_UF*)(expected), (_UF*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line)
|
353
398
|
#endif
|
354
399
|
|
400
|
+
#ifdef UNITY_EXCLUDE_DOUBLE
|
401
|
+
#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
|
402
|
+
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
|
403
|
+
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)line, "Unity Double Precision Disabled")
|
404
|
+
#else
|
405
|
+
#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UnityAssertDoublesWithin((_UD)(delta), (_UD)(expected), (_UD)(actual), (message), (UNITY_LINE_TYPE)line)
|
406
|
+
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((_UF)(expected) * (_UD)UNITY_DOUBLE_PRECISION, (_UD)expected, (_UD)actual, (UNITY_LINE_TYPE)line, message)
|
407
|
+
#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualDoubleArray((_UD*)(expected), (_UD*)(actual), (_UU32)(num_elements), (message), (UNITY_LINE_TYPE)line)
|
408
|
+
#endif
|
409
|
+
|
355
410
|
#endif
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ceedling
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 12
|
10
|
+
version: 0.0.12
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Mike Karlesky, Mark VanderVoord
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2011-
|
20
|
+
date: 2011-05-07 00:00:00 -04:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -169,6 +169,7 @@ files:
|
|
169
169
|
- new_project_template/vendor/ceedling/docs/CMock Summary.pdf
|
170
170
|
- new_project_template/vendor/ceedling/docs/Ceedling Packet.pdf
|
171
171
|
- new_project_template/vendor/ceedling/docs/Unity Summary.pdf
|
172
|
+
- new_project_template/vendor/ceedling/lib/build_invoker_helper.rb
|
172
173
|
- new_project_template/vendor/ceedling/lib/cacheinator.rb
|
173
174
|
- new_project_template/vendor/ceedling/lib/cacheinator_helper.rb
|
174
175
|
- new_project_template/vendor/ceedling/lib/cmock_builder.rb
|