From 7a3146a040a4e2feac3b23e8490388bbf0a5a421 Mon Sep 17 00:00:00 2001 From: Williams Ernesto Limonchi Sandoval Date: Fri, 28 May 2021 13:04:18 -0500 Subject: [PATCH] TP3 Presentacion 1.0 --- build/test/cache/defines_dependency.yml | 3 + build/test/cache/input.yml | 241 +++++++++++++++++++++ build/test/cache/test_leds.c | 207 ++++++++++++++++++ build/test/dependencies/cmock.d | 6 + build/test/dependencies/leds.d | 1 + build/test/dependencies/test_leds.d | 4 + build/test/dependencies/test_leds_runner.d | 4 + build/test/dependencies/unity.d | 4 + build/test/out/c/cmock.o | Bin 0 -> 14960 bytes build/test/out/c/leds.o | Bin 0 -> 7944 bytes build/test/out/c/test_leds.o | Bin 0 -> 13016 bytes build/test/out/c/test_leds_runner.o | Bin 0 -> 11928 bytes build/test/out/c/unity.o | Bin 0 -> 56584 bytes build/test/out/test_leds.out | Bin 0 -> 56488 bytes build/test/preprocess/files/test_leds.c | 207 ++++++++++++++++++ build/test/preprocess/includes/test_leds.c | 3 + build/test/results/test_leds.pass | 50 +++++ build/test/runners/test_leds_runner.c | 97 +++++++++ project.yml | 101 +++++++++ src/leds.c | 57 +++++ src/leds.h | 17 ++ test/support/.gitkeep | 0 test/test_leds.c | 96 ++++++++ 23 files changed, 1098 insertions(+) create mode 100644 build/test/cache/defines_dependency.yml create mode 100644 build/test/cache/input.yml create mode 100644 build/test/cache/test_leds.c create mode 100644 build/test/dependencies/cmock.d create mode 100644 build/test/dependencies/leds.d create mode 100644 build/test/dependencies/test_leds.d create mode 100644 build/test/dependencies/test_leds_runner.d create mode 100644 build/test/dependencies/unity.d create mode 100644 build/test/out/c/cmock.o create mode 100644 build/test/out/c/leds.o create mode 100644 build/test/out/c/test_leds.o create mode 100644 build/test/out/c/test_leds_runner.o create mode 100644 build/test/out/c/unity.o create mode 100755 build/test/out/test_leds.out create mode 100644 build/test/preprocess/files/test_leds.c create mode 100644 build/test/preprocess/includes/test_leds.c create mode 100644 build/test/results/test_leds.pass create mode 100644 build/test/runners/test_leds_runner.c create mode 100644 project.yml create mode 100644 src/leds.c create mode 100644 src/leds.h create mode 100644 test/support/.gitkeep create mode 100644 test/test_leds.c diff --git a/build/test/cache/defines_dependency.yml b/build/test/cache/defines_dependency.yml new file mode 100644 index 0000000..121aebf --- /dev/null +++ b/build/test/cache/defines_dependency.yml @@ -0,0 +1,3 @@ +--- +src/leds.c: +- TEST diff --git a/build/test/cache/input.yml b/build/test/cache/input.yml new file mode 100644 index 0000000..f6d3ba1 --- /dev/null +++ b/build/test/cache/input.yml @@ -0,0 +1,241 @@ +--- +:project: + :use_exceptions: false + :use_mocks: true + :compile_threads: 1 + :test_threads: 1 + :use_test_preprocessor: true + :use_preprocessor_directives: false + :use_deep_dependencies: false + :generate_deep_dependencies: true + :test_file_prefix: test_ + :options_paths: [] + :release_build: false + :use_auxiliary_dependencies: true + :build_root: build + :which_ceedling: gem + :ceedling_version: 0.31.0 + :default_tasks: + - test:all +:release_build: + :use_assembly: false + :artifacts: [] +:paths: + :test: + - "+:test/**" + - "-:test/support" + :source: + - src/** + :support: + - test/support + :include: [] + :libraries: [] + :test_toolchain_include: [] + :release_toolchain_include: [] +:files: + :test: [] + :source: [] + :assembly: [] + :support: [] + :include: [] +:environment: +- :rake_columns: '120' +:defines: + :test: + - &1 [] + - TEST + :test_preprocess: + - *1 + - TEST + :release: [] + :release_preprocess: [] + :use_test_definition: false + :common: [] +:libraries: + :flag: "-l${1}" + :path_flag: "-L ${1}" + :test: [] + :test_preprocess: [] + :release: [] + :release_preprocess: [] + :placement: :end + :system: [] +:flags: {} +:extension: + :header: ".h" + :source: ".c" + :assembly: ".s" + :object: ".o" + :libraries: + - ".a" + - ".so" + :executable: ".out" + :map: ".map" + :list: ".lst" + :testpass: ".pass" + :testfail: ".fail" + :dependencies: ".d" +:unity: + :vendor_path: "/home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor" + :defines: [] +:cmock: + :vendor_path: "/home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor" + :defines: [] + :includes: [] + :mock_prefix: mock_ + :when_no_prototypes: :warn + :enforce_strict_ordering: true + :plugins: + - :ignore + - :callback + :treat_as: + uint8: HEX8 + uint16: HEX16 + uint32: UINT32 + int8: INT8 + bool: UINT8 + :mock_path: build/test/mocks + :verbosity: 3 + :unity_helper: false +:cexception: + :vendor_path: "/home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor" + :defines: [] +:test_runner: + :includes: [] + :file_suffix: _runner +:tools: + :test_compiler: + :executable: gcc + :name: default_test_compiler + :stderr_redirect: :none + :background_exec: :none + :optional: false + :arguments: + - '' + - '' + - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR + - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE + - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR + - "-DGNU_COMPILER" + - "-g" + - '' + - -c "${1}" + - -o "${2}" + - "-MMD" + - -MF "${4}" + :test_fixture: + :executable: "${1}" + :name: default_test_fixture + :stderr_redirect: :auto + :background_exec: :none + :optional: false + :arguments: [] + :test_linker: + :executable: gcc + :name: default_test_linker + :stderr_redirect: :none + :background_exec: :none + :optional: false + :arguments: + - '' + - '' + - '' + - '"${1}"' + - "${5}" + - -o "${2}" + - '' + - "${4}" + - '' + :test_file_preprocessor: + :executable: gcc + :name: default_test_file_preprocessor + :stderr_redirect: :none + :background_exec: :none + :optional: false + :arguments: + - '' + - '' + - "-E" + - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR + - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE + - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR + - "-D$": DEFINES_TEST_PREPROCESS + - "-DGNU_COMPILER" + - '"${1}"' + - -o "${2}" + :test_file_preprocessor_directives: + :executable: gcc + :name: default_test_file_preprocessor_directives + :stderr_redirect: :none + :background_exec: :none + :optional: false + :arguments: + - "-E" + - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR + - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE + - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR + - "-D$": DEFINES_TEST_PREPROCESS + - "-DGNU_COMPILER" + - "-fdirectives-only" + - '"${1}"' + - -o "${2}" + :test_includes_preprocessor: + :executable: gcc + :name: default_test_includes_preprocessor + :stderr_redirect: :none + :background_exec: :none + :optional: false + :arguments: + - '' + - '' + - "-E" + - "-MM" + - "-MG" + - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR + - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE + - "-D$": COLLECTION_DEFINES_TEST_AND_VENDOR + - "-D$": DEFINES_TEST_PREPROCESS + - "-DGNU_COMPILER" + - '"${1}"' +:test_compiler: + :arguments: [] +:test_linker: + :arguments: [] +:test_fixture: + :arguments: [] + :link_objects: [] +:test_includes_preprocessor: + :arguments: [] +:test_file_preprocessor: + :arguments: [] +:test_file_preprocessor_directives: + :arguments: [] +:test_dependencies_generator: + :arguments: [] +:release_compiler: + :arguments: [] +:release_linker: + :arguments: [] +:release_assembler: + :arguments: [] +:release_dependencies_generator: + :arguments: [] +:plugins: + :load_paths: + - "/home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/lib/../plugins" + :enabled: + - stdout_pretty_tests_report + - module_generator + :display_raw_test_results: false + :stdout_pretty_tests_report_path: "/home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/lib/../plugins/stdout_pretty_tests_report" + :module_generator_path: "/home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/lib/../plugins/module_generator" +:gcov: + :reports: + - HtmlDetailed + :gcovr: + :html_medium_threshold: 75 + :html_high_threshold: 90 +:module_generator: + :project_root: "./" + :source_root: src/ + :test_root: test/ diff --git a/build/test/cache/test_leds.c b/build/test/cache/test_leds.c new file mode 100644 index 0000000..a10f721 --- /dev/null +++ b/build/test/cache/test_leds.c @@ -0,0 +1,207 @@ +#include "src/leds.h" +#include "/home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity.h" + + + + + + + + + + + + + + +uint16_t ledsVirtuales; + + + +void setUp(void) + +{ + + Leds_Create(&ledsVirtuales); + +} + + + +void tearDown(void) + +{ + + + +} + + + + + +void test_LedsOffAfterCreate(void) + +{ + + ledsVirtuales = 0xFFFF; + + Leds_Create(&ledsVirtuales); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((0x0000)), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(27), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_TurnOnLedOne(void) + +{ + + Led_TurnOn(5); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((1<<(5 -1))), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(34), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_TurnOffOneLed(void) + +{ + + Led_TurnOn(5); + + Led_TurnOff(5); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((0x0000)), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(42), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_TurnOnAndOffManyLeds(void) + +{ + + Led_TurnOn(3); + + Led_TurnOn(5); + + Led_TurnOff(3); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((1 << (5 -1))), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(51), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_TurnOnAllLeds(void) + +{ + + Led_TurnOnAll(); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((0xFFFF)), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(58), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_TurnOffAllLeds(void) + +{ + + Led_TurnOn(3); + + Led_TurnOn(5); + + Led_TurnOffAll(); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((0x0000)), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(67), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_StateLedOff(void) + +{ + + Led_TurnOn(5); + + Led_TurnOff(5); + + do {if (!(Led_State(5))) {} else {UnityFail( ((("LED ON "))), (UNITY_UINT)((UNITY_UINT)(75)));}} while(0); + +} + + + + + +void test_StateLed(void) + +{ + + Led_TurnOn(5); + + do {if ((Led_State(5))) {} else {UnityFail( ((("LED OFF "))), (UNITY_UINT)((UNITY_UINT)(82)));}} while(0); + +} + + + + + +void test_ParamLed(void){ + + Led_TurnOffAll(); + + Led_TurnOn(5); + + Led_TurnOn(6); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((0x0030)), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(90), UNITY_DISPLAY_STYLE_HEX16); + +} diff --git a/build/test/dependencies/cmock.d b/build/test/dependencies/cmock.d new file mode 100644 index 0000000..353840a --- /dev/null +++ b/build/test/dependencies/cmock.d @@ -0,0 +1,6 @@ +build/test/out/c/cmock.o: \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/cmock/src/cmock.c \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/cmock/src/cmock.h \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/cmock/src/cmock_internals.h \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity.h \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity_internals.h diff --git a/build/test/dependencies/leds.d b/build/test/dependencies/leds.d new file mode 100644 index 0000000..0953253 --- /dev/null +++ b/build/test/dependencies/leds.d @@ -0,0 +1 @@ +build/test/out/c/leds.o: src/leds.c src/leds.h diff --git a/build/test/dependencies/test_leds.d b/build/test/dependencies/test_leds.d new file mode 100644 index 0000000..6510f6d --- /dev/null +++ b/build/test/dependencies/test_leds.d @@ -0,0 +1,4 @@ +build/test/out/c/test_leds.o: test/test_leds.c \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity.h \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity_internals.h \ + src/leds.h diff --git a/build/test/dependencies/test_leds_runner.d b/build/test/dependencies/test_leds_runner.d new file mode 100644 index 0000000..83ed1a8 --- /dev/null +++ b/build/test/dependencies/test_leds_runner.d @@ -0,0 +1,4 @@ +build/test/out/c/test_leds_runner.o: \ + build/test/runners/test_leds_runner.c \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity.h \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity_internals.h diff --git a/build/test/dependencies/unity.d b/build/test/dependencies/unity.d new file mode 100644 index 0000000..2dd8f5e --- /dev/null +++ b/build/test/dependencies/unity.d @@ -0,0 +1,4 @@ +build/test/out/c/unity.o: \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity.c \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity.h \ + /home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity_internals.h diff --git a/build/test/out/c/cmock.o b/build/test/out/c/cmock.o new file mode 100644 index 0000000000000000000000000000000000000000..14fdce2ef617cf5cab1214069435d4a8717ccbb0 GIT binary patch literal 14960 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 Ds?Hq? literal 0 HcmV?d00001 diff --git a/build/test/out/c/leds.o b/build/test/out/c/leds.o new file mode 100644 index 0000000000000000000000000000000000000000..e2863c9fd09004d083cc849442eb1d74afa12be6 GIT binary patch literal 7944 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 w$3~X~{Ul)aXWf9|d5`26JStBch# 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 literal 0 HcmV?d00001 diff --git a/build/test/out/c/test_leds_runner.o b/build/test/out/c/test_leds_runner.o new file mode 100644 index 0000000000000000000000000000000000000000..55d74641d04267ebefebcfee23371f8a1e7d9259 GIT binary patch literal 11928 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 literal 0 HcmV?d00001 diff --git a/build/test/out/c/unity.o b/build/test/out/c/unity.o new file mode 100644 index 0000000000000000000000000000000000000000..6a76014fc54047143f13de981d3e2271655134f2 GIT binary patch literal 56584 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 Vl0jTllOp`a|L6vbMMrSc><0&#zpelP literal 0 HcmV?d00001 diff --git a/build/test/preprocess/files/test_leds.c b/build/test/preprocess/files/test_leds.c new file mode 100644 index 0000000..a10f721 --- /dev/null +++ b/build/test/preprocess/files/test_leds.c @@ -0,0 +1,207 @@ +#include "src/leds.h" +#include "/home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity.h" + + + + + + + + + + + + + + +uint16_t ledsVirtuales; + + + +void setUp(void) + +{ + + Leds_Create(&ledsVirtuales); + +} + + + +void tearDown(void) + +{ + + + +} + + + + + +void test_LedsOffAfterCreate(void) + +{ + + ledsVirtuales = 0xFFFF; + + Leds_Create(&ledsVirtuales); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((0x0000)), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(27), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_TurnOnLedOne(void) + +{ + + Led_TurnOn(5); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((1<<(5 -1))), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(34), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_TurnOffOneLed(void) + +{ + + Led_TurnOn(5); + + Led_TurnOff(5); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((0x0000)), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(42), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_TurnOnAndOffManyLeds(void) + +{ + + Led_TurnOn(3); + + Led_TurnOn(5); + + Led_TurnOff(3); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((1 << (5 -1))), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(51), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_TurnOnAllLeds(void) + +{ + + Led_TurnOnAll(); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((0xFFFF)), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(58), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_TurnOffAllLeds(void) + +{ + + Led_TurnOn(3); + + Led_TurnOn(5); + + Led_TurnOffAll(); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((0x0000)), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(67), UNITY_DISPLAY_STYLE_HEX16); + +} + + + + + +void test_StateLedOff(void) + +{ + + Led_TurnOn(5); + + Led_TurnOff(5); + + do {if (!(Led_State(5))) {} else {UnityFail( ((("LED ON "))), (UNITY_UINT)((UNITY_UINT)(75)));}} while(0); + +} + + + + + +void test_StateLed(void) + +{ + + Led_TurnOn(5); + + do {if ((Led_State(5))) {} else {UnityFail( ((("LED OFF "))), (UNITY_UINT)((UNITY_UINT)(82)));}} while(0); + +} + + + + + +void test_ParamLed(void){ + + Led_TurnOffAll(); + + Led_TurnOn(5); + + Led_TurnOn(6); + + UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)((0x0030)), (UNITY_INT)(UNITY_INT16)((ledsVirtuales)), ( + + ((void *)0) + + ), (UNITY_UINT)(90), UNITY_DISPLAY_STYLE_HEX16); + +} diff --git a/build/test/preprocess/includes/test_leds.c b/build/test/preprocess/includes/test_leds.c new file mode 100644 index 0000000..dc6e064 --- /dev/null +++ b/build/test/preprocess/includes/test_leds.c @@ -0,0 +1,3 @@ +--- +- "/home/wels/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/ceedling-0.31.0/vendor/unity/src/unity.h" +- src/leds.h diff --git a/build/test/results/test_leds.pass b/build/test/results/test_leds.pass new file mode 100644 index 0000000..07c0ca1 --- /dev/null +++ b/build/test/results/test_leds.pass @@ -0,0 +1,50 @@ +--- +:source: + :path: test + :file: test_leds.c +:successes: +- :test: test_LedsOffAfterCreate + :line: 23 + :message: '' + :unity_test_time: 0 +- :test: test_TurnOnLedOne + :line: 31 + :message: '' + :unity_test_time: 0 +- :test: test_TurnOffOneLed + :line: 38 + :message: '' + :unity_test_time: 0 +- :test: test_TurnOnAndOffManyLeds + :line: 46 + :message: '' + :unity_test_time: 0 +- :test: test_TurnOnAllLeds + :line: 55 + :message: '' + :unity_test_time: 0 +- :test: test_TurnOffAllLeds + :line: 62 + :message: '' + :unity_test_time: 0 +- :test: test_StateLedOff + :line: 71 + :message: '' + :unity_test_time: 0 +- :test: test_StateLed + :line: 71 + :message: '' + :unity_test_time: 0 +- :test: test_ParamLed + :line: 86 + :message: '' + :unity_test_time: 0 +:failures: [] +:ignores: [] +:counts: + :total: 9 + :passed: 9 + :failed: 0 + :ignored: 0 +:stdout: [] +:time: 0.0010608639995552949 diff --git a/build/test/runners/test_leds_runner.c b/build/test/runners/test_leds_runner.c new file mode 100644 index 0000000..e35fe0b --- /dev/null +++ b/build/test/runners/test_leds_runner.c @@ -0,0 +1,97 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" + +int GlobalExpectCount; +int GlobalVerifyOrder; +char* GlobalOrderError; + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_LedsOffAfterCreate(void); +extern void test_TurnOnLedOne(void); +extern void test_TurnOffOneLed(void); +extern void test_TurnOnAndOffManyLeds(void); +extern void test_TurnOnAllLeds(void); +extern void test_TurnOffAllLeds(void); +extern void test_StateLedOff(void); +extern void test_StateLed(void); +extern void test_ParamLed(void); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + GlobalExpectCount = 0; + GlobalVerifyOrder = 0; + GlobalOrderError = NULL; +} +static void CMock_Verify(void) +{ +} +static void CMock_Destroy(void) +{ +} + +/*=======Test Reset Options=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + CMock_Verify(); + CMock_Destroy(); + CMock_Init(); + setUp(); +} +void verifyTest(void); +void verifyTest(void) +{ + CMock_Verify(); +} + +/*=======Test Runner Used To Run Each Test=====*/ +static void run_test(UnityTestFunction func, const char* name, UNITY_LINE_TYPE line_num) +{ + Unity.CurrentTestName = name; + Unity.CurrentTestLineNumber = line_num; +#ifdef UNITY_USE_COMMAND_LINE_ARGS + if (!UnityTestMatches()) + return; +#endif + Unity.NumberOfTests++; + UNITY_CLR_DETAILS(); + UNITY_EXEC_TIME_START(); + CMock_Init(); + if (TEST_PROTECT()) + { + setUp(); + func(); + } + if (TEST_PROTECT()) + { + tearDown(); + CMock_Verify(); + } + CMock_Destroy(); + UNITY_EXEC_TIME_STOP(); + UnityConcludeTest(); +} + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("test_leds.c"); + run_test(test_LedsOffAfterCreate, "test_LedsOffAfterCreate", 23); + run_test(test_TurnOnLedOne, "test_TurnOnLedOne", 31); + run_test(test_TurnOffOneLed, "test_TurnOffOneLed", 38); + run_test(test_TurnOnAndOffManyLeds, "test_TurnOnAndOffManyLeds", 46); + run_test(test_TurnOnAllLeds, "test_TurnOnAllLeds", 55); + run_test(test_TurnOffAllLeds, "test_TurnOffAllLeds", 62); + run_test(test_StateLedOff, "test_StateLedOff", 71); + run_test(test_StateLed, "test_StateLed", 71); + run_test(test_ParamLed, "test_ParamLed", 86); + + return UnityEnd(); +} diff --git a/project.yml b/project.yml new file mode 100644 index 0000000..bda040d --- /dev/null +++ b/project.yml @@ -0,0 +1,101 @@ +--- + +# Notes: +# Sample project C code is not presently written to produce a release artifact. +# As such, release build options are disabled. +# This sample, therefore, only demonstrates running a collection of unit tests. + +:project: + :use_exceptions: FALSE + :use_test_preprocessor: TRUE + :use_auxiliary_dependencies: TRUE + :build_root: build +# :release_build: TRUE + :test_file_prefix: test_ + :which_ceedling: gem + :ceedling_version: 0.31.0 + :default_tasks: + - test:all + +#:test_build: +# :use_assembly: TRUE + +#:release_build: +# :output: MyApp.out +# :use_assembly: FALSE + +:environment: + +:extension: + :executable: .out + +:paths: + :test: + - +:test/** + - -:test/support + :source: + - src/** + :support: + - test/support + :libraries: [] + +:defines: + # in order to add common defines: + # 1) remove the trailing [] from the :common: section + # 2) add entries to the :common: section (e.g. :test: has TEST defined) + :common: &common_defines [] + :test: + - *common_defines + - TEST + :test_preprocess: + - *common_defines + - TEST + +:cmock: + :mock_prefix: mock_ + :when_no_prototypes: :warn + :enforce_strict_ordering: TRUE + :plugins: + - :ignore + - :callback + :treat_as: + uint8: HEX8 + uint16: HEX16 + uint32: UINT32 + int8: INT8 + bool: UINT8 + +# Add -gcov to the plugins list to make sure of the gcov plugin +# You will need to have gcov and gcovr both installed to make it work. +# For more information on these options, see docs in plugins/gcov +:gcov: + :reports: + - HtmlDetailed + :gcovr: + :html_medium_threshold: 75 + :html_high_threshold: 90 + +#:tools: +# Ceedling defaults to using gcc for compiling, linking, etc. +# As [:tools] is blank, gcc will be used (so long as it's in your system path) +# See documentation to configure a given toolchain for use + +# LIBRARIES +# These libraries are automatically injected into the build process. Those specified as +# common will be used in all types of builds. Otherwise, libraries can be injected in just +# tests or releases. These options are MERGED with the options in supplemental yaml files. +:libraries: + :placement: :end + :flag: "-l${1}" + :path_flag: "-L ${1}" + :system: [] # for example, you might list 'm' to grab the math library + :test: [] + :release: [] + +:plugins: + :load_paths: + - "#{Ceedling.load_path}" + :enabled: + - stdout_pretty_tests_report + - module_generator +... diff --git a/src/leds.c b/src/leds.c new file mode 100644 index 0000000..8f92181 --- /dev/null +++ b/src/leds.c @@ -0,0 +1,57 @@ +#include "leds.h" + +#define ALL_LEDS_OFF 0x0000 +#define LED_ON 1 +#define LED_OFF 0 +#define LED_OFFSET 1 +#define LED_MIN 0 +#define LED_MAX 16 +#define ERROR 0 + +static uint16_t * puerto; + +uint16_t led_to_bit(uint8_t led) +{ + return (LED_ON << (led - LED_OFFSET)); +} + +void Leds_Create(uint16_t * puntero) +{ + puerto = puntero; + *puerto = ALL_LEDS_OFF; +} + +void Led_TurnOn(uint8_t led) +{ + *puerto |= led_to_bit(led); +} + +void Led_TurnOff(uint8_t led) +{ + *puerto &= ~led_to_bit(led); +} + +void Led_TurnOnAll(void) +{ + *puerto = ~ALL_LEDS_OFF; +} + +void Led_TurnOffAll(void) +{ + *puerto = ALL_LEDS_OFF; +} + +bool Led_State(uint8_t led) +{ + uint16_t state; + state = *puerto & led_to_bit(led); + if(state == LED_OFF) + { + return false; + } + else + { + return true; + } +} + diff --git a/src/leds.h b/src/leds.h new file mode 100644 index 0000000..9396197 --- /dev/null +++ b/src/leds.h @@ -0,0 +1,17 @@ +#include +#include +#include + +uint16_t led_to_bit(uint8_t led); + +void Leds_Create(uint16_t * puntero); + +void Led_TurnOn(uint8_t led); + +void Led_TurnOff(uint8_t led); + +void Led_TurnOnAll(void); + +void Led_TurnOffAll(void); + +bool Led_State(uint8_t led); \ No newline at end of file diff --git a/test/support/.gitkeep b/test/support/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/test/test_leds.c b/test/test_leds.c new file mode 100644 index 0000000..5627920 --- /dev/null +++ b/test/test_leds.c @@ -0,0 +1,96 @@ +/* +* TP3 WILLIAMS LIMONCHI +*/ + +#include "unity.h" +#include "leds.h" + +#define LED 5 + +uint16_t ledsVirtuales; + +void setUp(void) +{ + Leds_Create(&ledsVirtuales); +} + +void tearDown(void) +{ + +} + +// Después de la inicialización +void test_LedsOffAfterCreate(void) +{ + ledsVirtuales = 0xFFFF; + Leds_Create(&ledsVirtuales); + TEST_ASSERT_EQUAL_HEX16(0x0000, ledsVirtuales); +} + +// Encender Leds forma individual +void test_TurnOnLedOne(void) +{ + Led_TurnOn(LED); + TEST_ASSERT_EQUAL_HEX16(1<<(LED-1), ledsVirtuales); +} + +// Se puede apagar un LED individual +void test_TurnOffOneLed(void) +{ + Led_TurnOn(LED); + Led_TurnOff(LED); + TEST_ASSERT_EQUAL_HEX16(0x0000, ledsVirtuales); +} + +// +void test_TurnOnAndOffManyLeds(void) +{ + Led_TurnOn(3); + Led_TurnOn(LED); + Led_TurnOff(3); + TEST_ASSERT_EQUAL_HEX16(1 << (LED-1), ledsVirtuales); +} + +// Se pueden prender todos los LEDs de una vez +void test_TurnOnAllLeds(void) +{ + Led_TurnOnAll(); + TEST_ASSERT_EQUAL_HEX16(0xFFFF, ledsVirtuales); +} + +// Se pueden apagar todos los LEDs de una vez. +void test_TurnOffAllLeds(void) +{ + Led_TurnOn(3); + Led_TurnOn(LED); + Led_TurnOffAll(); + TEST_ASSERT_EQUAL_HEX16(0x0000, ledsVirtuales); +} + +// Se puede consultar el estado de un LED apagado. +void test_StateLedOff(void) +{ + Led_TurnOn(LED); + Led_TurnOff(LED); + TEST_ASSERT_FALSE_MESSAGE(Led_State(LED), "LED ON "); +} + +// Se puede consultar el estado de un LED +void test_StateLed(void) +{ + Led_TurnOn(LED); + TEST_ASSERT_TRUE_MESSAGE(Led_State(LED), "LED OFF "); +} + +// Revisar limites de los parametros. +void test_ParamLed(void){ + Led_TurnOffAll(); + Led_TurnOn(LED); + Led_TurnOn(6); + TEST_ASSERT_EQUAL_HEX16(0x0030,ledsVirtuales); +} + + + + +