From 38af5afb432da4f5dab2f63efca2348969ed58fa Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Wed, 18 Jan 2023 08:18:35 +0100 Subject: [PATCH 01/20] build script --- build-project.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 build-project.sh diff --git a/build-project.sh b/build-project.sh new file mode 100755 index 0000000..fbd6ce9 --- /dev/null +++ b/build-project.sh @@ -0,0 +1,5 @@ +clear +cd src/ +gcc main.c +./a.out +rm a.out From 77e31ad441df2bb901656e046a06d3a565239bf9 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Wed, 18 Jan 2023 17:25:21 +0100 Subject: [PATCH 02/20] implementation of to_string() --- build-project.sh | 5 ----- src/CustomerProperties.h | 5 +++++ src/StringManipulation.c | 24 ++++++++++++++++++++++++ src/StringManipulation.h | 3 +++ src/main.c | 7 ------- team.md | 9 --------- 6 files changed, 32 insertions(+), 21 deletions(-) delete mode 100755 build-project.sh create mode 100644 src/CustomerProperties.h create mode 100644 src/StringManipulation.c create mode 100644 src/StringManipulation.h delete mode 100644 src/main.c delete mode 100644 team.md diff --git a/build-project.sh b/build-project.sh deleted file mode 100755 index fbd6ce9..0000000 --- a/build-project.sh +++ /dev/null @@ -1,5 +0,0 @@ -clear -cd src/ -gcc main.c -./a.out -rm a.out diff --git a/src/CustomerProperties.h b/src/CustomerProperties.h new file mode 100644 index 0000000..e2ba317 --- /dev/null +++ b/src/CustomerProperties.h @@ -0,0 +1,5 @@ +typedef struct Customer{ + int ID; + char *forename,*surname,*password; + float balance; +}customer_t; diff --git a/src/StringManipulation.c b/src/StringManipulation.c new file mode 100644 index 0000000..2863f93 --- /dev/null +++ b/src/StringManipulation.c @@ -0,0 +1,24 @@ +#include "StringManipulation.h" +/*Code written by Julius Philipp Engel, fdai7057*/ +char *to_string(int number) +{ + if(number==0) + { + return "0\0"; + } + else + { + int cpy = number, len = 0; + while(number>0){ + ++len; + number /= 10; + } + char *str = calloc(len+1, sizeof(char)); + for(int i=0,j=len-1;i +#include +char *to_string(int); diff --git a/src/main.c b/src/main.c deleted file mode 100644 index 2e0147f..0000000 --- a/src/main.c +++ /dev/null @@ -1,7 +0,0 @@ -#include - -int main() -{ - - return 0; -} diff --git a/team.md b/team.md deleted file mode 100644 index 02580e9..0000000 --- a/team.md +++ /dev/null @@ -1,9 +0,0 @@ -# Bankmanagement-System - -- Can Hacioglu, Fdlt3817 -- Atharva Kishor Naik, fdai7514 -- Julius Philipp Engel, fdai7057 -- Shivam Chaudhary, fdlt3781 -- Mohamed Yahya Dahi, fdai6618 -- Haytham Daoula, fdai7207 - From 01c2f301374121579e6a4f8967c027e530dedbb5 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Thu, 19 Jan 2023 08:14:59 +0100 Subject: [PATCH 03/20] implementation of unit test for to_string() --- tests/test/support/.gitkeep | 0 tests/test/test_StringManipulation.c | 38 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 tests/test/support/.gitkeep create mode 100644 tests/test/test_StringManipulation.c diff --git a/tests/test/support/.gitkeep b/tests/test/support/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tests/test/test_StringManipulation.c b/tests/test/test_StringManipulation.c new file mode 100644 index 0000000..b8ca872 --- /dev/null +++ b/tests/test/test_StringManipulation.c @@ -0,0 +1,38 @@ +#include "unity.h" +#include "StringManipulation.h" + +void test_to_string() +{ + /*initializing test values*/ + char *result_1[] = {"0","1","2","3","4","5","6","7","8","9","10"}; + char *result_2[] = {"500","502","504","506","508","510","512","514","516","518"}; + char *result_3[] = {"1000","2000","3000","4000","5000","6000","7000","8000","9000","10000"}; + char *result_4[] = {"9999","8999","7999","6999","5999","4999","3999","2999","1999","999"}; + char *result_5[] = {"1000000","2000000","3000000","4000000","5000000","6000000","7000000", + "8000000","9000000","10000000"}; + + for(int i=0;i<=10;++i){ + printf("%s\n", to_string(i)); + TEST_ASSERT_EQUAL_STRING(result_1[i],to_string(i)); + } + + for(int i=0, j=500;i<10;++i,j+=2){ + printf("%s\n", to_string(j)); + TEST_ASSERT_EQUAL_STRING(result_2[i],to_string(j)); + } + + for(int i=0, j=1000;i<10;++i,j+=1000){ + printf("%s\n", to_string(j)); + TEST_ASSERT_EQUAL_STRING(result_3[i],to_string(j)); + } + + for(int i=0, j=9999;i<10;++i,j-=1000){ + printf("%s\n", to_string(j)); + TEST_ASSERT_EQUAL_STRING(result_4[i], to_string(j)); + } + for(int i=0, j=1000000;i<10;++i,j+=1000000){ + printf("%s\n", to_string(j)); + TEST_ASSERT_EQUAL_STRING(result_5[i],to_string(j)); + } + +} From dbff9b5a1d0c5c6dd553742a9af15b41256ceef1 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Thu, 19 Jan 2023 15:29:01 +0100 Subject: [PATCH 04/20] implementation of unit tests for generateCheckString() --- src/StringManipulation.c | 21 +- src/StringManipulation.h | 2 + tests/build/test/cache/defines_dependency.yml | 3 + tests/build/test/cache/input.yml | 242 ++++++++++++++++++ .../test/cache/test_StringManipulation.c | 195 ++++++++++++++ .../test/dependencies/StringManipulation.d | 3 + tests/build/test/dependencies/cmock.d | 6 + .../dependencies/test_StringManipulation.d | 5 + .../test_StringManipulation_runner.d | 4 + tests/build/test/dependencies/unity.d | 4 + tests/build/test/out/c/StringManipulation.o | Bin 0 -> 4384 bytes tests/build/test/out/c/cmock.o | Bin 0 -> 8152 bytes .../test/out/c/test_StringManipulation.o | Bin 0 -> 10300 bytes .../out/c/test_StringManipulation_runner.o | Bin 0 -> 7004 bytes tests/build/test/out/c/unity.o | Bin 0 -> 39856 bytes .../test/out/test_StringManipulation.out | Bin 0 -> 59008 bytes .../files/test_StringManipulation.c | 195 ++++++++++++++ .../includes/test_StringManipulation.c | 3 + .../test/results/test_StringManipulation.pass | 42 +++ .../runners/test_StringManipulation_runner.c | 89 +++++++ tests/project.yml | 101 ++++++++ tests/test/test_StringManipulation.c | 55 +++- 22 files changed, 964 insertions(+), 6 deletions(-) create mode 100644 tests/build/test/cache/defines_dependency.yml create mode 100644 tests/build/test/cache/input.yml create mode 100644 tests/build/test/cache/test_StringManipulation.c create mode 100644 tests/build/test/dependencies/StringManipulation.d create mode 100644 tests/build/test/dependencies/cmock.d create mode 100644 tests/build/test/dependencies/test_StringManipulation.d create mode 100644 tests/build/test/dependencies/test_StringManipulation_runner.d create mode 100644 tests/build/test/dependencies/unity.d create mode 100644 tests/build/test/out/c/StringManipulation.o create mode 100644 tests/build/test/out/c/cmock.o create mode 100644 tests/build/test/out/c/test_StringManipulation.o create mode 100644 tests/build/test/out/c/test_StringManipulation_runner.o create mode 100644 tests/build/test/out/c/unity.o create mode 100755 tests/build/test/out/test_StringManipulation.out create mode 100644 tests/build/test/preprocess/files/test_StringManipulation.c create mode 100644 tests/build/test/preprocess/includes/test_StringManipulation.c create mode 100644 tests/build/test/results/test_StringManipulation.pass create mode 100644 tests/build/test/runners/test_StringManipulation_runner.c create mode 100644 tests/project.yml diff --git a/src/StringManipulation.c b/src/StringManipulation.c index 2863f93..6f671da 100644 --- a/src/StringManipulation.c +++ b/src/StringManipulation.c @@ -4,7 +4,10 @@ char *to_string(int number) { if(number==0) { - return "0\0"; + char *str = calloc(2,sizeof(char)); + *(str) = '0'; + *(str+1) = '\0'; + return str; } else { @@ -22,3 +25,19 @@ char *to_string(int number) return str; } } + +char *generateCheckString(int ID, char *password) +{ + char *IDString = to_string(ID); + int IDLength = strlen(IDString); + int passwordLength = strlen(password); + /*the checkString has this form: ID=password, so in order to calculate its length the length of the ID, one byte for the =, the length of the password and + * one byte for '\0' are needed.*/ + int checkStringLength = IDLength + 1 + passwordLength + 1; + char *checkString = calloc(checkStringLength, sizeof(char)); + checkString = strcat(IDString, "="); + checkString = strcat(checkString, password); + *(checkString+checkStringLength) = '\0'; + return checkString;:w + +} diff --git a/src/StringManipulation.h b/src/StringManipulation.h index 88f06a4..d1a8b35 100644 --- a/src/StringManipulation.h +++ b/src/StringManipulation.h @@ -1,3 +1,5 @@ #include #include +#include char *to_string(int); +char *generateCheckString(int, char *); diff --git a/tests/build/test/cache/defines_dependency.yml b/tests/build/test/cache/defines_dependency.yml new file mode 100644 index 0000000..551c1ff --- /dev/null +++ b/tests/build/test/cache/defines_dependency.yml @@ -0,0 +1,3 @@ +--- +"/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.c": +- TEST diff --git a/tests/build/test/cache/input.yml b/tests/build/test/cache/input.yml new file mode 100644 index 0000000..fb9e794 --- /dev/null +++ b/tests/build/test/cache/input.yml @@ -0,0 +1,242 @@ +--- +: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 + :auto_link_deep_dependencies: false + :test_file_prefix: test_ + :options_paths: [] + :release_build: false + :use_auxiliary_dependencies: true + :build_root: build + :which_ceedling: gem + :ceedling_version: 0.31.1 + :default_tasks: + - test:all +:release_build: + :use_assembly: false + :artifacts: [] +:paths: + :test: + - "+:test/**" + - "-:test/support" + :source: + - "/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/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: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor" + :defines: [] +:cmock: + :vendor_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/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: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/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: + - "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins" + :enabled: + - stdout_pretty_tests_report + - module_generator + :display_raw_test_results: false + :stdout_pretty_tests_report_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins/stdout_pretty_tests_report" + :module_generator_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/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/tests/build/test/cache/test_StringManipulation.c b/tests/build/test/cache/test_StringManipulation.c new file mode 100644 index 0000000..0d87c99 --- /dev/null +++ b/tests/build/test/cache/test_StringManipulation.c @@ -0,0 +1,195 @@ +#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + + + + + +void test_to_string() + +{ + + + + char *result_1[] = {"0","1","2","3","4","5","6","7","8","9","10"}; + + char *result_2[] = {"500","502","504","506","508","510","512","514","516","518"}; + + char *result_3[] = {"1000","2000","3000","4000","5000","6000","7000","8000","9000","10000"}; + + char *result_4[] = {"9999","8999","7999","6999","5999","4999","3999","2999","1999","999"}; + + char *result_5[] = {"1000000","2000000","3000000","4000000","5000000","6000000","7000000", + + "8000000","9000000","10000000"}; + + + + for(int i=0;i<=10;++i){ + + UnityAssertEqualString((const char*)((result_1[i])), (const char*)((to_string(i))), ( + + ((void *)0) + + ), (UNITY_UINT)(17)); + + } + + + + for(int i=0, j=500;i<10;++i,j+=2){ + + UnityAssertEqualString((const char*)((result_2[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(21)); + + } + + + + for(int i=0, j=1000;i<10;++i,j+=1000){ + + UnityAssertEqualString((const char*)((result_3[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(25)); + + } + + + + for(int i=0, j=9999;i<10;++i,j-=1000){ + + UnityAssertEqualString((const char*)((result_4[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(29)); + + } + + for(int i=0, j=1000000;i<10;++i,j+=1000000){ + + UnityAssertEqualString((const char*)((result_5[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(32)); + + } + + + +} + + + + + +void test_generateCheckString() + +{ + + + + int numbers_1[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; + + char *strings_1[] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; + + char *result_1[] = {"0=a","1=b","2=c","3=d","4=e","5=f","6=g","7=h","8=i","9=j","10=k","11=l","12=m","13=n","14=o","15=p","16=q","17=r", "18=s","19=t","20=u","21=v","22=w","23=x","24=y","25=z"}; + + for(int i=0;i<26;++i){ + + UnityAssertEqualString((const char*)((result_1[i])), (const char*)((generateCheckString(numbers_1[i],*(strings_1+i)))), ( + + ((void *)0) + + ), (UNITY_UINT)(45)); + + } + + + + int numbers_2[] = {0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025}; + + char *strings_2[] = {"z","zy","zyx","zyxw","zyxwv","zyxwvu","zyxwvut","zyxwvuts","zyxwvutsr","zyxwvutsrq","zyxwvutsrqp", + + "zyxwvutsrqpo","zyxwvutsrqpon","zyxwvutsrqponm","zyxwvutsrqponml","zyxwvutsrqponmlk", + + "zyxwvutsrqponmlkj","zyxwvutsrqponmlkji","zyxwvutsrqponmlkjih","zyxwvutsrqponmlkjihg","zyxwvutsrqponmlkjihgf", + + "zyxwvutsrqponmlkjihgfe","zyxwvutsrqponmlkjihgfed","zyxwvutsrqponmlkjihgfedc","zyxwvutsrqponmlkjihgfedcb", + + "zyxwvutsrqponmlkjihgfedcba"}; + + char *result_2[] = {"0=z","1=zy","1=zyx","2=zyxw","3=zyxwv","5=zyxwvu","8=zyxwvut","13=zyxwvuts","21=zyxwvutsr","34=zyxwvutsrq", + + "55=zyxwvutsrqp","89=zyxwvutsrqpo","144=zyxwvutsrqpon","233=zyxwvutsrqponm","377=zyxwvutsrqponml", + + "610=zyxwvutsrqponmlk","987=zyxwvutsrqponmlkj","1597=zyxwvutsrqponmlkji","2584=zyxwvutsrqponmlkjih", + + "4181=zyxwvutsrqponmlkjihg","6765=zyxwvutsrqponmlkjihgf","10946=zyxwvutsrqponmlkjihgfe", + + "17711=zyxwvutsrqponmlkjihgfed","28657=zyxwvutsrqponmlkjihgfedc","46368=zyxwvutsrqponmlkjihgfedcb", + + "75025=zyxwvutsrqponmlkjihgfedcba"}; + + for(int i=0;i<26;++i){ + + UnityAssertEqualString((const char*)((result_2[i])), (const char*)((generateCheckString(numbers_2[i],*(strings_2+i)))), ( + + ((void *)0) + + ), (UNITY_UINT)(61)); + + } + + + + srand(time(0)); + + int random_number=0; + + char *random_numbers_strings[20]; + + int random_numbers[20]; + + for(int i=0;i<20;++i){ + + random_number = (rand() % 100) + 1; + + random_numbers_strings[i] = to_string(random_number); + + random_numbers[i] = random_number; + + } + + char *strings_3[] = {"tree","plant","tea","programming","assembler","unix","BSD","snow","mountain","table","wood","forest", "calculator","book","light","keyboard","old","paper","pencil","voltage"}; + + char *result_3[20]; + + for(int i=0;i<20;++i){ + + random_numbers_strings[i] = strcat(random_numbers_strings[i],"="); + + result_3[i] = strcat(random_numbers_strings[i],strings_3[i]); + + printf("%s\n",result_3[i]); + + } + + for(int i=0;i<20;++i){ + + UnityAssertEqualString((const char*)((result_3[i])), (const char*)((generateCheckString(random_numbers[i],strings_3[i]))), ( + + ((void *)0) + + ), (UNITY_UINT)(81)); + + } + +} diff --git a/tests/build/test/dependencies/StringManipulation.d b/tests/build/test/dependencies/StringManipulation.d new file mode 100644 index 0000000..625c690 --- /dev/null +++ b/tests/build/test/dependencies/StringManipulation.d @@ -0,0 +1,3 @@ +build/test/out/c/StringManipulation.o: \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.c \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.h diff --git a/tests/build/test/dependencies/cmock.d b/tests/build/test/dependencies/cmock.d new file mode 100644 index 0000000..82b64c9 --- /dev/null +++ b/tests/build/test/dependencies/cmock.d @@ -0,0 +1,6 @@ +build/test/out/c/cmock.o: \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock_internals.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/dependencies/test_StringManipulation.d b/tests/build/test/dependencies/test_StringManipulation.d new file mode 100644 index 0000000..2f65b3c --- /dev/null +++ b/tests/build/test/dependencies/test_StringManipulation.d @@ -0,0 +1,5 @@ +build/test/out/c/test_StringManipulation.o: \ + test/test_StringManipulation.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.h diff --git a/tests/build/test/dependencies/test_StringManipulation_runner.d b/tests/build/test/dependencies/test_StringManipulation_runner.d new file mode 100644 index 0000000..c54fbb6 --- /dev/null +++ b/tests/build/test/dependencies/test_StringManipulation_runner.d @@ -0,0 +1,4 @@ +build/test/out/c/test_StringManipulation_runner.o: \ + build/test/runners/test_StringManipulation_runner.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/dependencies/unity.d b/tests/build/test/dependencies/unity.d new file mode 100644 index 0000000..02f2997 --- /dev/null +++ b/tests/build/test/dependencies/unity.d @@ -0,0 +1,4 @@ +build/test/out/c/unity.o: \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/out/c/StringManipulation.o b/tests/build/test/out/c/StringManipulation.o new file mode 100644 index 0000000000000000000000000000000000000000..531a498d6d4ebdfe69f990feb9684a617365fc45 GIT binary patch literal 4384 zcmcguTWlOx89rxr&+gc}-uRLYNJ#YHAGofMX5lQK~Q$bCT(6;gy;$q+vn$>O2}neU%D z;~g7E@YH`b^Zoa8{{LKNU(&|UaL$=aocUNoVr;U-v7EHw80%#FZF>+h`Kfp=)jpkA zSnFB6zqz^jtwjZzg%?#;J-)D}PV;G{_K|H__)Tj~yHnThe8BqgUU-*(z!;dnEF++< zsWolmrnU~A-R)k`)_MJT^_^@cld0YQ$6ss9i~m#>?{(My*t=ZQR7(HSCv|NdN$f!` zc*j_|sjX2Ovaj-*wtDy3`uPnf*KcL6+DFLNd%N}?GT%}7GJm&sv39Gr{K}X6>z7vR z+6rH;-MZHLUvZ27>aN|QIczLwYkZ-&%In(N6WaQf*Xx(o?J&EjmHPAdKU~_@mnFL| zYvIkR+Gxkd0x32cigjBNZYb7J#VZ$R6uyjVQB7T2b!u)nt?WqiUR~SZ%bA-jfhKI! zG}zV6Dn?rI#JF{OCR`8qEY%P8EWL)6^-~L(pMM2>_!oHf*b2rzq-6&w{@{Ka#6f6$ zevvmVrl`WUaWw*^q6BX{o^g_R;GC@#hY8f+JFxlvUndV9Xo60B4?KT3I0NW}{Bsg- z+`~ICHVQ-c=fEnjvS5S^5BHLv@~U5blf-V-5ew?u2<6d$c2@mB4eLpO{Xc?XHNkZdm8*k@MH4w?UUm-cS1alCjsYB#VRu%Y;s1w%)%ou(4G#Z zXXhD@$dL-6f?-13E2rgzb+`kEuOp&LQF+GqHakvJp=k&aN0@|>@iu-q(h>4S4n*2` zd!Q97p!Bd%Xb37Sf@Ep)Lq{7YTF$m5|WLSG0S?HcQ#xKo|44R>)^1A_Tf z$2QiXpsXMi(%Dg{CwC~C9+;4^<`5>>9-z!2#BIwQc5Eo(ARammn5F%um%FQo{~EgL zW8VkI`MpRB-u4AW3lqUnrNd=M5_tAJ)y8qHgM0SWGLP+9vi@=HXq8SITL|CaiMa%%0cH{A{&= zge5bUwl6%vnXo6nPx#eCVoy#qs|lfIMK~jx6C!X`?9GT^Rrunf`J4!;Oh`^@C zMZ^-ybqRTJu`Vh?8cs1uM-1o~Mhnc1lQqC-2YS1K=* z%2TXrR`OZXn2M72vuL%2^{KF|VH#!KGDdPndd6uy8yl63JGpVg%vw3tnEAHJn$=>; zD6>kgRJNkqEa^s4nZl!C>6~6}lx<5}ZE=!OD{R%atX3(BV~-ueWXJ5#vrk=$jtqQ0 zI?x|G5gUk}=sz*gKQPcA?JHVU(@5BL=F<@MaypmD4?Z>+?aM~{GJ0j+Oy|lavsA70 zRm~Uj=2V}hrwT>|eUP*MES3X1A4h4IjnB@Gj65DaHfp5ux+%-+8|>X#C{FBNI=~?Q z&1V?DqVfY_zyBIeZWKB?_e6BHv(pjvJIZj27+vuBTKW4+@QXry3XgmBdwrC*Y!}uF z`xG7`_x2#&oULi-q__n%q)UGGw@sHP^x@|vAG1GVTPhz5Z1KeS82$Tckk9@Xp$Y)pSmD?KvI3L6P>LDL%^GIa(R!g$N9+Do^+jeN8o``lO$Ob(! z^>ciOJOSBV7mCk%?CpxmUi8Qm|Lq;}?iXs~7$uW)j}6AMhLxO6C#_u7oQb99Sn}-n z)5E97lTV*HGof8fUOYWKt|eJoFBD4YU9XK@(xm1Xjw*e80cqWG{%|&bA{f|X9q62v7wmOA}XaoCk5=eWM zZbiyR^Eix$V%(du1?%Z0H{Wq6$^U=(^~1-WpUgw~Xe^i9d~^?a{n{SjSCD>g{66^o z$W7w0(H`{HdlCD39XhI)^lrWMJ@JIIpQ51mp>xT#eHRLsC!2)?QDP*yHo9B9^AaUhm!U@og4C_eo`)X?}24G?B_Z$k|+-m#d!U$VBA037U$*q{RaRV97X^D literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/cmock.o b/tests/build/test/out/c/cmock.o new file mode 100644 index 0000000000000000000000000000000000000000..162be594be8e993b0d9cd86d186661c8be1c8c4d GIT binary patch literal 8152 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 K+ERF!e*XsoyBp*H literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/test_StringManipulation_runner.o b/tests/build/test/out/c/test_StringManipulation_runner.o new file mode 100644 index 0000000000000000000000000000000000000000..a16f5ca7cabe5425f7561602ee5f41abf3faf7d6 GIT binary patch literal 7004 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 p+(*J~wwB8TQkSQhoNa6HtdoIX9u~(&vSDl} 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 literal 0 HcmV?d00001 diff --git a/tests/build/test/preprocess/files/test_StringManipulation.c b/tests/build/test/preprocess/files/test_StringManipulation.c new file mode 100644 index 0000000..0d87c99 --- /dev/null +++ b/tests/build/test/preprocess/files/test_StringManipulation.c @@ -0,0 +1,195 @@ +#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + + + + + +void test_to_string() + +{ + + + + char *result_1[] = {"0","1","2","3","4","5","6","7","8","9","10"}; + + char *result_2[] = {"500","502","504","506","508","510","512","514","516","518"}; + + char *result_3[] = {"1000","2000","3000","4000","5000","6000","7000","8000","9000","10000"}; + + char *result_4[] = {"9999","8999","7999","6999","5999","4999","3999","2999","1999","999"}; + + char *result_5[] = {"1000000","2000000","3000000","4000000","5000000","6000000","7000000", + + "8000000","9000000","10000000"}; + + + + for(int i=0;i<=10;++i){ + + UnityAssertEqualString((const char*)((result_1[i])), (const char*)((to_string(i))), ( + + ((void *)0) + + ), (UNITY_UINT)(17)); + + } + + + + for(int i=0, j=500;i<10;++i,j+=2){ + + UnityAssertEqualString((const char*)((result_2[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(21)); + + } + + + + for(int i=0, j=1000;i<10;++i,j+=1000){ + + UnityAssertEqualString((const char*)((result_3[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(25)); + + } + + + + for(int i=0, j=9999;i<10;++i,j-=1000){ + + UnityAssertEqualString((const char*)((result_4[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(29)); + + } + + for(int i=0, j=1000000;i<10;++i,j+=1000000){ + + UnityAssertEqualString((const char*)((result_5[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(32)); + + } + + + +} + + + + + +void test_generateCheckString() + +{ + + + + int numbers_1[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; + + char *strings_1[] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; + + char *result_1[] = {"0=a","1=b","2=c","3=d","4=e","5=f","6=g","7=h","8=i","9=j","10=k","11=l","12=m","13=n","14=o","15=p","16=q","17=r", "18=s","19=t","20=u","21=v","22=w","23=x","24=y","25=z"}; + + for(int i=0;i<26;++i){ + + UnityAssertEqualString((const char*)((result_1[i])), (const char*)((generateCheckString(numbers_1[i],*(strings_1+i)))), ( + + ((void *)0) + + ), (UNITY_UINT)(45)); + + } + + + + int numbers_2[] = {0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025}; + + char *strings_2[] = {"z","zy","zyx","zyxw","zyxwv","zyxwvu","zyxwvut","zyxwvuts","zyxwvutsr","zyxwvutsrq","zyxwvutsrqp", + + "zyxwvutsrqpo","zyxwvutsrqpon","zyxwvutsrqponm","zyxwvutsrqponml","zyxwvutsrqponmlk", + + "zyxwvutsrqponmlkj","zyxwvutsrqponmlkji","zyxwvutsrqponmlkjih","zyxwvutsrqponmlkjihg","zyxwvutsrqponmlkjihgf", + + "zyxwvutsrqponmlkjihgfe","zyxwvutsrqponmlkjihgfed","zyxwvutsrqponmlkjihgfedc","zyxwvutsrqponmlkjihgfedcb", + + "zyxwvutsrqponmlkjihgfedcba"}; + + char *result_2[] = {"0=z","1=zy","1=zyx","2=zyxw","3=zyxwv","5=zyxwvu","8=zyxwvut","13=zyxwvuts","21=zyxwvutsr","34=zyxwvutsrq", + + "55=zyxwvutsrqp","89=zyxwvutsrqpo","144=zyxwvutsrqpon","233=zyxwvutsrqponm","377=zyxwvutsrqponml", + + "610=zyxwvutsrqponmlk","987=zyxwvutsrqponmlkj","1597=zyxwvutsrqponmlkji","2584=zyxwvutsrqponmlkjih", + + "4181=zyxwvutsrqponmlkjihg","6765=zyxwvutsrqponmlkjihgf","10946=zyxwvutsrqponmlkjihgfe", + + "17711=zyxwvutsrqponmlkjihgfed","28657=zyxwvutsrqponmlkjihgfedc","46368=zyxwvutsrqponmlkjihgfedcb", + + "75025=zyxwvutsrqponmlkjihgfedcba"}; + + for(int i=0;i<26;++i){ + + UnityAssertEqualString((const char*)((result_2[i])), (const char*)((generateCheckString(numbers_2[i],*(strings_2+i)))), ( + + ((void *)0) + + ), (UNITY_UINT)(61)); + + } + + + + srand(time(0)); + + int random_number=0; + + char *random_numbers_strings[20]; + + int random_numbers[20]; + + for(int i=0;i<20;++i){ + + random_number = (rand() % 100) + 1; + + random_numbers_strings[i] = to_string(random_number); + + random_numbers[i] = random_number; + + } + + char *strings_3[] = {"tree","plant","tea","programming","assembler","unix","BSD","snow","mountain","table","wood","forest", "calculator","book","light","keyboard","old","paper","pencil","voltage"}; + + char *result_3[20]; + + for(int i=0;i<20;++i){ + + random_numbers_strings[i] = strcat(random_numbers_strings[i],"="); + + result_3[i] = strcat(random_numbers_strings[i],strings_3[i]); + + printf("%s\n",result_3[i]); + + } + + for(int i=0;i<20;++i){ + + UnityAssertEqualString((const char*)((result_3[i])), (const char*)((generateCheckString(random_numbers[i],strings_3[i]))), ( + + ((void *)0) + + ), (UNITY_UINT)(81)); + + } + +} diff --git a/tests/build/test/preprocess/includes/test_StringManipulation.c b/tests/build/test/preprocess/includes/test_StringManipulation.c new file mode 100644 index 0000000..77ded96 --- /dev/null +++ b/tests/build/test/preprocess/includes/test_StringManipulation.c @@ -0,0 +1,3 @@ +--- +- "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" +- Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.h diff --git a/tests/build/test/results/test_StringManipulation.pass b/tests/build/test/results/test_StringManipulation.pass new file mode 100644 index 0000000..84a7b10 --- /dev/null +++ b/tests/build/test/results/test_StringManipulation.pass @@ -0,0 +1,42 @@ +--- +:source: + :path: test + :file: test_StringManipulation.c +:successes: +- :test: test_to_string + :line: 6 + :message: '' + :unity_test_time: 0 +- :test: test_generateCheckString + :line: 38 + :message: '' + :unity_test_time: 0 +:failures: [] +:ignores: [] +:counts: + :total: 2 + :passed: 2 + :failed: 0 + :ignored: 0 +:stdout: +- 9=tree +- 26=plant +- 92=tea +- 31=programming +- 75=assembler +- 28=unix +- 92=BSD +- 99=snow +- 10=mountain +- 43=table +- 92=wood +- 98=forest +- 3=calculator +- 32=book +- 29=light +- 92=keyboard +- 35=old +- 27=paper +- 85=pencil +- 91=voltage +:time: 0.0019293400000606198 diff --git a/tests/build/test/runners/test_StringManipulation_runner.c b/tests/build/test/runners/test_StringManipulation_runner.c new file mode 100644 index 0000000..8c93227 --- /dev/null +++ b/tests/build/test/runners/test_StringManipulation_runner.c @@ -0,0 +1,89 @@ +/* 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_to_string(); +extern void test_generateCheckString(); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + GlobalExpectCount = 0; + GlobalVerifyOrder = 0; + GlobalOrderError = NULL; +} +static void CMock_Verify(void) +{ +} +static void CMock_Destroy(void) +{ +} + +/*=======Setup (stub)=====*/ +void setUp(void) {} + +/*=======Teardown (stub)=====*/ +void tearDown(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_StringManipulation.c"); + run_test(test_to_string, "test_to_string", 6); + run_test(test_generateCheckString, "test_generateCheckString", 38); + + return UnityEnd(); +} diff --git a/tests/project.yml b/tests/project.yml new file mode 100644 index 0000000..7245e5e --- /dev/null +++ b/tests/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.1 + :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: + - /home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/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/tests/test/test_StringManipulation.c b/tests/test/test_StringManipulation.c index b8ca872..accd414 100644 --- a/tests/test/test_StringManipulation.c +++ b/tests/test/test_StringManipulation.c @@ -1,5 +1,7 @@ #include "unity.h" #include "StringManipulation.h" +#include +#include void test_to_string() { @@ -12,27 +14,70 @@ void test_to_string() "8000000","9000000","10000000"}; for(int i=0;i<=10;++i){ - printf("%s\n", to_string(i)); TEST_ASSERT_EQUAL_STRING(result_1[i],to_string(i)); } for(int i=0, j=500;i<10;++i,j+=2){ - printf("%s\n", to_string(j)); TEST_ASSERT_EQUAL_STRING(result_2[i],to_string(j)); } for(int i=0, j=1000;i<10;++i,j+=1000){ - printf("%s\n", to_string(j)); TEST_ASSERT_EQUAL_STRING(result_3[i],to_string(j)); } for(int i=0, j=9999;i<10;++i,j-=1000){ - printf("%s\n", to_string(j)); TEST_ASSERT_EQUAL_STRING(result_4[i], to_string(j)); } for(int i=0, j=1000000;i<10;++i,j+=1000000){ - printf("%s\n", to_string(j)); TEST_ASSERT_EQUAL_STRING(result_5[i],to_string(j)); } } + + +void test_generateCheckString() +{ + /*test block 1*/ + int numbers_1[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; + char *strings_1[] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; + char *result_1[] = {"0=a","1=b","2=c","3=d","4=e","5=f","6=g","7=h","8=i","9=j","10=k","11=l","12=m","13=n","14=o","15=p","16=q","17=r", "18=s","19=t","20=u","21=v","22=w","23=x","24=y","25=z"}; + for(int i=0;i<26;++i){ + TEST_ASSERT_EQUAL_STRING(result_1[i],generateCheckString(numbers_1[i],*(strings_1+i))); + } + /*test block 2*/ + int numbers_2[] = {0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025}; + char *strings_2[] = {"z","zy","zyx","zyxw","zyxwv","zyxwvu","zyxwvut","zyxwvuts","zyxwvutsr","zyxwvutsrq","zyxwvutsrqp", + "zyxwvutsrqpo","zyxwvutsrqpon","zyxwvutsrqponm","zyxwvutsrqponml","zyxwvutsrqponmlk", + "zyxwvutsrqponmlkj","zyxwvutsrqponmlkji","zyxwvutsrqponmlkjih","zyxwvutsrqponmlkjihg","zyxwvutsrqponmlkjihgf", + "zyxwvutsrqponmlkjihgfe","zyxwvutsrqponmlkjihgfed","zyxwvutsrqponmlkjihgfedc","zyxwvutsrqponmlkjihgfedcb", + "zyxwvutsrqponmlkjihgfedcba"}; + char *result_2[] = {"0=z","1=zy","1=zyx","2=zyxw","3=zyxwv","5=zyxwvu","8=zyxwvut","13=zyxwvuts","21=zyxwvutsr","34=zyxwvutsrq", + "55=zyxwvutsrqp","89=zyxwvutsrqpo","144=zyxwvutsrqpon","233=zyxwvutsrqponm","377=zyxwvutsrqponml", + "610=zyxwvutsrqponmlk","987=zyxwvutsrqponmlkj","1597=zyxwvutsrqponmlkji","2584=zyxwvutsrqponmlkjih", + "4181=zyxwvutsrqponmlkjihg","6765=zyxwvutsrqponmlkjihgf","10946=zyxwvutsrqponmlkjihgfe", + "17711=zyxwvutsrqponmlkjihgfed","28657=zyxwvutsrqponmlkjihgfedc","46368=zyxwvutsrqponmlkjihgfedcb", + "75025=zyxwvutsrqponmlkjihgfedcba"}; + for(int i=0;i<26;++i){ + TEST_ASSERT_EQUAL_STRING(result_2[i],generateCheckString(numbers_2[i],*(strings_2+i))); + } + /*test block 3*/ + srand(time(0)); + int random_number=0; + char *random_numbers_strings[20]; + int random_numbers[20]; + for(int i=0;i<20;++i){ + random_number = (rand() % 100) + 1; + random_numbers_strings[i] = to_string(random_number); + random_numbers[i] = random_number; + } + char *strings_3[] = {"tree","plant","tea","programming","assembler","unix","BSD","snow","mountain","table","wood","forest", "calculator","book","light","keyboard","old","paper","pencil","voltage"}; + char *result_3[20]; + for(int i=0;i<20;++i){ + random_numbers_strings[i] = strcat(random_numbers_strings[i],"="); + result_3[i] = strcat(random_numbers_strings[i],strings_3[i]); + printf("%s\n",result_3[i]); + } + for(int i=0;i<20;++i){ + TEST_ASSERT_EQUAL_STRING(result_3[i],generateCheckString(random_numbers[i],strings_3[i])); + } +} From 51b40e67d04baa9311e3f5d4d3f5fdbd48f0ad65 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Fri, 20 Jan 2023 15:29:20 +0100 Subject: [PATCH 05/20] refactoring: rename variables for better understanding, write comment to explain function generateCheckString(), optimize intendation --- src/StringManipulation.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/StringManipulation.c b/src/StringManipulation.c index 6f671da..cd2ad2c 100644 --- a/src/StringManipulation.c +++ b/src/StringManipulation.c @@ -11,13 +11,13 @@ char *to_string(int number) } else { - int cpy = number, len = 0; - while(number>0){ + int cpy = number, len = 0; + while(number>0){ ++len; number /= 10; - } - char *str = calloc(len+1, sizeof(char)); - for(int i=0,j=len-1;i +#include +bool checkLogin(bool); From 0155f61c652177b4aa808f297d5d4f32d67b23e6 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Fri, 20 Jan 2023 17:41:54 +0100 Subject: [PATCH 07/20] implementation of unit tests for checkLogin() --- build-project.sh | 5 - src/main.c | 7 - team.md | 9 - tests/build/test/cache/defines_dependency.yml | 3 + tests/build/test/cache/input.yml | 242 ++++++++++++++ tests/build/test/cache/test_LoginCustomer.c | 297 ++++++++++++++++++ tests/build/test/dependencies/LoginCustomer.d | 3 + tests/build/test/dependencies/cmock.d | 6 + .../test/dependencies/test_LoginCustomer.d | 4 + .../dependencies/test_LoginCustomer_runner.d | 4 + tests/build/test/dependencies/unity.d | 4 + tests/build/test/out/c/LoginCustomer.o | Bin 0 -> 2804 bytes tests/build/test/out/c/cmock.o | Bin 0 -> 8152 bytes tests/build/test/out/c/test_LoginCustomer.o | Bin 0 -> 5684 bytes .../test/out/c/test_LoginCustomer_runner.o | Bin 0 -> 6640 bytes tests/build/test/out/c/unity.o | Bin 0 -> 39856 bytes tests/build/test/out/test_LoginCustomer.out | Bin 0 -> 57036 bytes .../preprocess/files/test_LoginCustomer.c | 297 ++++++++++++++++++ .../preprocess/includes/test_LoginCustomer.c | 3 + .../test/results/test_LoginCustomer.pass | 18 ++ .../test/runners/test_LoginCustomer_runner.c | 81 +++++ tests/project.yml | 101 ++++++ tests/test/support/.gitkeep | 0 tests/test/test_LoginCustomer.c | 63 ++++ 24 files changed, 1126 insertions(+), 21 deletions(-) delete mode 100755 build-project.sh delete mode 100644 src/main.c delete mode 100644 team.md create mode 100644 tests/build/test/cache/defines_dependency.yml create mode 100644 tests/build/test/cache/input.yml create mode 100644 tests/build/test/cache/test_LoginCustomer.c create mode 100644 tests/build/test/dependencies/LoginCustomer.d create mode 100644 tests/build/test/dependencies/cmock.d create mode 100644 tests/build/test/dependencies/test_LoginCustomer.d create mode 100644 tests/build/test/dependencies/test_LoginCustomer_runner.d create mode 100644 tests/build/test/dependencies/unity.d create mode 100644 tests/build/test/out/c/LoginCustomer.o create mode 100644 tests/build/test/out/c/cmock.o create mode 100644 tests/build/test/out/c/test_LoginCustomer.o create mode 100644 tests/build/test/out/c/test_LoginCustomer_runner.o create mode 100644 tests/build/test/out/c/unity.o create mode 100755 tests/build/test/out/test_LoginCustomer.out create mode 100644 tests/build/test/preprocess/files/test_LoginCustomer.c create mode 100644 tests/build/test/preprocess/includes/test_LoginCustomer.c create mode 100644 tests/build/test/results/test_LoginCustomer.pass create mode 100644 tests/build/test/runners/test_LoginCustomer_runner.c create mode 100644 tests/project.yml create mode 100644 tests/test/support/.gitkeep create mode 100644 tests/test/test_LoginCustomer.c diff --git a/build-project.sh b/build-project.sh deleted file mode 100755 index fbd6ce9..0000000 --- a/build-project.sh +++ /dev/null @@ -1,5 +0,0 @@ -clear -cd src/ -gcc main.c -./a.out -rm a.out diff --git a/src/main.c b/src/main.c deleted file mode 100644 index 2e0147f..0000000 --- a/src/main.c +++ /dev/null @@ -1,7 +0,0 @@ -#include - -int main() -{ - - return 0; -} diff --git a/team.md b/team.md deleted file mode 100644 index 02580e9..0000000 --- a/team.md +++ /dev/null @@ -1,9 +0,0 @@ -# Bankmanagement-System - -- Can Hacioglu, Fdlt3817 -- Atharva Kishor Naik, fdai7514 -- Julius Philipp Engel, fdai7057 -- Shivam Chaudhary, fdlt3781 -- Mohamed Yahya Dahi, fdai6618 -- Haytham Daoula, fdai7207 - diff --git a/tests/build/test/cache/defines_dependency.yml b/tests/build/test/cache/defines_dependency.yml new file mode 100644 index 0000000..9f4fffc --- /dev/null +++ b/tests/build/test/cache/defines_dependency.yml @@ -0,0 +1,3 @@ +--- +"/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.c": +- TEST diff --git a/tests/build/test/cache/input.yml b/tests/build/test/cache/input.yml new file mode 100644 index 0000000..fb9e794 --- /dev/null +++ b/tests/build/test/cache/input.yml @@ -0,0 +1,242 @@ +--- +: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 + :auto_link_deep_dependencies: false + :test_file_prefix: test_ + :options_paths: [] + :release_build: false + :use_auxiliary_dependencies: true + :build_root: build + :which_ceedling: gem + :ceedling_version: 0.31.1 + :default_tasks: + - test:all +:release_build: + :use_assembly: false + :artifacts: [] +:paths: + :test: + - "+:test/**" + - "-:test/support" + :source: + - "/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/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: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor" + :defines: [] +:cmock: + :vendor_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/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: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/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: + - "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins" + :enabled: + - stdout_pretty_tests_report + - module_generator + :display_raw_test_results: false + :stdout_pretty_tests_report_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins/stdout_pretty_tests_report" + :module_generator_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/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/tests/build/test/cache/test_LoginCustomer.c b/tests/build/test/cache/test_LoginCustomer.c new file mode 100644 index 0000000..5149d92 --- /dev/null +++ b/tests/build/test/cache/test_LoginCustomer.c @@ -0,0 +1,297 @@ +#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + +void setUp(){}; + +void tearDown(){}; + + + +void test_checkLogin() + +{ + + + + + + + +_Bool + + test_1_to_true = (4==4); + + + +_Bool + + test_2_to_true = ( + + 1 + + == + + 1 + + ); + + + +_Bool + + test_3_to_true = (1==1); + + + +_Bool + + test_4_to_true = ( + + 0 + + == + + 0 + + ); + + + +_Bool + + test_5_to_true = ('z'=='z'); + + + +_Bool + + test_6_to_true = ('='=='='); + + + +_Bool + + test_7_to_true = (0x1A==0x1A); + + + + + +_Bool + + test_1_to_false = (4!=4); + + + +_Bool + + test_2_to_false = ( + + 1 + + == + + 0 + + ); + + + +_Bool + + test_3_to_false = (1==0); + + + +_Bool + + test_4_to_false = ( + + 0 + + == + + 1 + + ); + + + +_Bool + + test_5_to_false = ('z'=='x'); + + + +_Bool + + test_6_to_false = ('!'==')'); + + + +_Bool + + test_7_to_false = (0x1A==0x2B); + + + + + + + + + +_Bool + + result_1 = checkLogin(test_1_to_true); + + + +_Bool + + result_2 = checkLogin(test_2_to_true); + + + +_Bool + + result_3 = checkLogin(test_3_to_true); + + + +_Bool + + result_4 = checkLogin(test_4_to_true); + + + +_Bool + + result_5 = checkLogin(test_5_to_true); + + + +_Bool + + result_6 = checkLogin(test_6_to_true); + + + +_Bool + + result_7 = checkLogin(test_7_to_true); + + + + + +_Bool + + result_8 = checkLogin(test_1_to_false); + + + +_Bool + + result_9 = checkLogin(test_2_to_false); + + + +_Bool + + result_10 = checkLogin(test_3_to_false); + + + +_Bool + + result_11 = checkLogin(test_4_to_false); + + + +_Bool + + result_12 = checkLogin(test_5_to_false); + + + +_Bool + + result_13 = checkLogin(test_6_to_false); + + + +_Bool + + result_14 = checkLogin(test_7_to_false); + + + + + + + + do {if ((result_1== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); + + do {if ((result_2== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); + + do {if ((result_3== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); + + do {if ((result_4== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); + + do {if ((result_5== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + + do {if ((result_6== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + + do {if ((result_7== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + + + + do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + + do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); + + do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); + + do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); + + do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); + + do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + + do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + + + + + +} diff --git a/tests/build/test/dependencies/LoginCustomer.d b/tests/build/test/dependencies/LoginCustomer.d new file mode 100644 index 0000000..45e2415 --- /dev/null +++ b/tests/build/test/dependencies/LoginCustomer.d @@ -0,0 +1,3 @@ +build/test/out/c/LoginCustomer.o: \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.c \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/dependencies/cmock.d b/tests/build/test/dependencies/cmock.d new file mode 100644 index 0000000..82b64c9 --- /dev/null +++ b/tests/build/test/dependencies/cmock.d @@ -0,0 +1,6 @@ +build/test/out/c/cmock.o: \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock_internals.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/dependencies/test_LoginCustomer.d b/tests/build/test/dependencies/test_LoginCustomer.d new file mode 100644 index 0000000..1a634fe --- /dev/null +++ b/tests/build/test/dependencies/test_LoginCustomer.d @@ -0,0 +1,4 @@ +build/test/out/c/test_LoginCustomer.o: test/test_LoginCustomer.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/dependencies/test_LoginCustomer_runner.d b/tests/build/test/dependencies/test_LoginCustomer_runner.d new file mode 100644 index 0000000..1649170 --- /dev/null +++ b/tests/build/test/dependencies/test_LoginCustomer_runner.d @@ -0,0 +1,4 @@ +build/test/out/c/test_LoginCustomer_runner.o: \ + build/test/runners/test_LoginCustomer_runner.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/dependencies/unity.d b/tests/build/test/dependencies/unity.d new file mode 100644 index 0000000..02f2997 --- /dev/null +++ b/tests/build/test/dependencies/unity.d @@ -0,0 +1,4 @@ +build/test/out/c/unity.o: \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/out/c/LoginCustomer.o b/tests/build/test/out/c/LoginCustomer.o new file mode 100644 index 0000000000000000000000000000000000000000..8cb00aec5296a1fa79d354c6f99e9afe806a462d GIT binary patch literal 2804 zcmcgt+iM(E7(Zubce8fWZ7ywXjNm9OjmXaK28p#AO*Tnm=xR!nLIcV=JDJQ*vpZAf zQWL3)mqMi|2!cLDTA@!Of)Dy6_)rx51AO*H!3SRi-;BiHclMm_WEJ$OADsDp_wStV zT;`31`WenSQ^c9hdJ<#r40J7z3z%R>*%4vSLB8r`E_@1Z!b$RHx}~O7j_SQ zy|DYkog10scWyzK!N8Zl1&6_FV8?}mu?Hn;nSml$jpvr(qVfDJfi_?hWCrp=nY$vC z*&hLVChPez)ACu$pydZ15T4mpK;|!~xR%=?6NrlN9g?zDn7MY8c* zilYU+I9?p)Be|jbVLr|Zg=e5bEy?DQ+T_oU>BZB9rwUINPL3^&lKafDk7{Fl6zQ`} z*_KANV@OP;H4N1P;z+0HGcY=PA79S@EFQ#H>;lcQ+zL8Q`BKvMlBhf%*h$CnYFYKCu*S!@E||EV`*8M={92Zu)ilhl9r&&xKGgffk383R)(sNw#cX3N zF}f#}(3f(5TkMu&Zwe(7E!emGUT6B$Xzfa3+fEd1B<)_y?3NWW@wwa1MlA^1ENTT| zZ0t)SyDYpHU$|h*Ri7}b6?4+88k3dDYNcAO7^O~}_|CNJ_)h5A5UtQ|O?y+Pri_wn zls2qr+qYX`;0H-mO8i$mf4vl2&9)QCinNDpac=IkF){BnJh*a7sFvaEYB~0 z^*rNO^L%_TlevyVOGjHBZ-KML{57q1FnjSkcrZ2u`_nSE`zA;s1#}-3W!Ud~iYL_N zWl}m_zAQaiJO@gIKfO>r(wTh7q)KP^^^D+jcA!rl?33x0>X9y1l$M8k0yv!=>XSKB z9@L)^tVi{W97nVqn@mMezy5JQQwOop*g7?3x=!4sD+rvl&H9D9nHFoJj%ePBU>E9^O}k3EpZpL+1)hS*_6WU0j}&s_prX3P62k z+Chh&US|41?3lQ@r6{)S&2Eg-YHWm72N7-L1#dHg1Fo=FePpRjW4{a8?DE|oziqSEME_UJWSLJ&Q8uI@y zzY2WB{HO?s@}=JdmG2z%iYLDpF>VthN!jX<)9d&H>$n9St%Gho<)(R2yov!Ugf+o* zKguS~X-dBagOQSz-zDhMbw8A6mg>@LqUyd0Ud4cA+Yr7WMv}6<205MYHu9Ar< literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/cmock.o b/tests/build/test/out/c/cmock.o new file mode 100644 index 0000000000000000000000000000000000000000..162be594be8e993b0d9cd86d186661c8be1c8c4d GIT binary patch literal 8152 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 Cqqzpi9`7#Rokg>= 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 IKW^NA0Cv(lyZ`_I literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/test_LoginCustomer_runner.o b/tests/build/test/out/c/test_LoginCustomer_runner.o new file mode 100644 index 0000000000000000000000000000000000000000..1efa0098329f45793f30fa73f4997cbedd2b4014 GIT binary patch literal 6640 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 QoqTBr45LUBLDSLy1th;Nf&c&j literal 0 HcmV?d00001 diff --git a/tests/build/test/preprocess/files/test_LoginCustomer.c b/tests/build/test/preprocess/files/test_LoginCustomer.c new file mode 100644 index 0000000..5149d92 --- /dev/null +++ b/tests/build/test/preprocess/files/test_LoginCustomer.c @@ -0,0 +1,297 @@ +#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + +void setUp(){}; + +void tearDown(){}; + + + +void test_checkLogin() + +{ + + + + + + + +_Bool + + test_1_to_true = (4==4); + + + +_Bool + + test_2_to_true = ( + + 1 + + == + + 1 + + ); + + + +_Bool + + test_3_to_true = (1==1); + + + +_Bool + + test_4_to_true = ( + + 0 + + == + + 0 + + ); + + + +_Bool + + test_5_to_true = ('z'=='z'); + + + +_Bool + + test_6_to_true = ('='=='='); + + + +_Bool + + test_7_to_true = (0x1A==0x1A); + + + + + +_Bool + + test_1_to_false = (4!=4); + + + +_Bool + + test_2_to_false = ( + + 1 + + == + + 0 + + ); + + + +_Bool + + test_3_to_false = (1==0); + + + +_Bool + + test_4_to_false = ( + + 0 + + == + + 1 + + ); + + + +_Bool + + test_5_to_false = ('z'=='x'); + + + +_Bool + + test_6_to_false = ('!'==')'); + + + +_Bool + + test_7_to_false = (0x1A==0x2B); + + + + + + + + + +_Bool + + result_1 = checkLogin(test_1_to_true); + + + +_Bool + + result_2 = checkLogin(test_2_to_true); + + + +_Bool + + result_3 = checkLogin(test_3_to_true); + + + +_Bool + + result_4 = checkLogin(test_4_to_true); + + + +_Bool + + result_5 = checkLogin(test_5_to_true); + + + +_Bool + + result_6 = checkLogin(test_6_to_true); + + + +_Bool + + result_7 = checkLogin(test_7_to_true); + + + + + +_Bool + + result_8 = checkLogin(test_1_to_false); + + + +_Bool + + result_9 = checkLogin(test_2_to_false); + + + +_Bool + + result_10 = checkLogin(test_3_to_false); + + + +_Bool + + result_11 = checkLogin(test_4_to_false); + + + +_Bool + + result_12 = checkLogin(test_5_to_false); + + + +_Bool + + result_13 = checkLogin(test_6_to_false); + + + +_Bool + + result_14 = checkLogin(test_7_to_false); + + + + + + + + do {if ((result_1== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); + + do {if ((result_2== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); + + do {if ((result_3== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); + + do {if ((result_4== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); + + do {if ((result_5== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + + do {if ((result_6== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + + do {if ((result_7== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + + + + do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + + do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); + + do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); + + do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); + + do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); + + do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + + do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + + + + + +} diff --git a/tests/build/test/preprocess/includes/test_LoginCustomer.c b/tests/build/test/preprocess/includes/test_LoginCustomer.c new file mode 100644 index 0000000..8d24aa9 --- /dev/null +++ b/tests/build/test/preprocess/includes/test_LoginCustomer.c @@ -0,0 +1,3 @@ +--- +- "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" +- Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/results/test_LoginCustomer.pass b/tests/build/test/results/test_LoginCustomer.pass new file mode 100644 index 0000000..bd31688 --- /dev/null +++ b/tests/build/test/results/test_LoginCustomer.pass @@ -0,0 +1,18 @@ +--- +:source: + :path: test + :file: test_LoginCustomer.c +:successes: +- :test: test_checkLogin + :line: 7 + :message: '' + :unity_test_time: 0 +:failures: [] +:ignores: [] +:counts: + :total: 1 + :passed: 1 + :failed: 0 + :ignored: 0 +:stdout: [] +:time: 0.0017807170006562956 diff --git a/tests/build/test/runners/test_LoginCustomer_runner.c b/tests/build/test/runners/test_LoginCustomer_runner.c new file mode 100644 index 0000000..f847d37 --- /dev/null +++ b/tests/build/test/runners/test_LoginCustomer_runner.c @@ -0,0 +1,81 @@ +/* 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_checkLogin(); + + +/*=======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_LoginCustomer.c"); + run_test(test_checkLogin, "test_checkLogin", 7); + + return UnityEnd(); +} diff --git a/tests/project.yml b/tests/project.yml new file mode 100644 index 0000000..7245e5e --- /dev/null +++ b/tests/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.1 + :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: + - /home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/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/tests/test/support/.gitkeep b/tests/test/support/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tests/test/test_LoginCustomer.c b/tests/test/test_LoginCustomer.c new file mode 100644 index 0000000..fc23e10 --- /dev/null +++ b/tests/test/test_LoginCustomer.c @@ -0,0 +1,63 @@ +#include +#include "LoginCustomer.h" + +void setUp(){}; +void tearDown(){}; + +void test_checkLogin() +{ + /*arrange*/ + + bool test_1_to_true = (4==4); + bool test_2_to_true = (true==true); + bool test_3_to_true = (1==1); + bool test_4_to_true = (false==false); + bool test_5_to_true = ('z'=='z'); + bool test_6_to_true = ('='=='='); + bool test_7_to_true = (0x1A==0x1A); + + bool test_1_to_false = (4!=4); + bool test_2_to_false = (true==false); + bool test_3_to_false = (1==0); + bool test_4_to_false = (false==true); + bool test_5_to_false = ('z'=='x'); + bool test_6_to_false = ('!'==')'); + bool test_7_to_false = (0x1A==0x2B); + + /*act*/ + + bool result_1 = checkLogin(test_1_to_true); + bool result_2 = checkLogin(test_2_to_true); + bool result_3 = checkLogin(test_3_to_true); + bool result_4 = checkLogin(test_4_to_true); + bool result_5 = checkLogin(test_5_to_true); + bool result_6 = checkLogin(test_6_to_true); + bool result_7 = checkLogin(test_7_to_true); + + bool result_8 = checkLogin(test_1_to_false); + bool result_9 = checkLogin(test_2_to_false); + bool result_10 = checkLogin(test_3_to_false); + bool result_11 = checkLogin(test_4_to_false); + bool result_12 = checkLogin(test_5_to_false); + bool result_13 = checkLogin(test_6_to_false); + bool result_14 = checkLogin(test_7_to_false); + + /*assertions*/ + + TEST_ASSERT_TRUE(result_1); + TEST_ASSERT_TRUE(result_2); + TEST_ASSERT_TRUE(result_3); + TEST_ASSERT_TRUE(result_4); + TEST_ASSERT_TRUE(result_5); + TEST_ASSERT_TRUE(result_6); + TEST_ASSERT_TRUE(result_7); + + TEST_ASSERT_FALSE(result_8); + TEST_ASSERT_FALSE(result_9); + TEST_ASSERT_FALSE(result_10); + TEST_ASSERT_FALSE(result_11); + TEST_ASSERT_FALSE(result_12); + TEST_ASSERT_FALSE(result_13); + TEST_ASSERT_FALSE(result_14); + +} From d13b024635dbef37e247251cfec3121c08976352 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Fri, 20 Jan 2023 19:08:26 +0100 Subject: [PATCH 08/20] refactoring: replaced variables with arrays and the consecutive use of assertions with for-loops --- tests/build/test/cache/test_LoginCustomer.c | 270 ++---------------- tests/build/test/out/c/LoginCustomer.o | Bin 2804 -> 3008 bytes tests/build/test/out/c/test_LoginCustomer.o | Bin 5684 -> 4140 bytes .../test/out/c/test_LoginCustomer_runner.o | Bin 6640 -> 6640 bytes tests/build/test/out/test_LoginCustomer.out | Bin 57036 -> 56560 bytes .../preprocess/files/test_LoginCustomer.c | 270 ++---------------- .../test/results/test_LoginCustomer.pass | 4 +- .../test/runners/test_LoginCustomer_runner.c | 2 +- tests/test/test_LoginCustomer.c | 64 +---- 9 files changed, 74 insertions(+), 536 deletions(-) diff --git a/tests/build/test/cache/test_LoginCustomer.c b/tests/build/test/cache/test_LoginCustomer.c index 5149d92..28f8ec8 100644 --- a/tests/build/test/cache/test_LoginCustomer.c +++ b/tests/build/test/cache/test_LoginCustomer.c @@ -1,297 +1,87 @@ #include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" #include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" - - void setUp(){}; void tearDown(){}; - - void test_checkLogin() { - - - - -_Bool - - test_1_to_true = (4==4); - - - -_Bool - - test_2_to_true = ( - - 1 - - == - - 1 - - ); - - - -_Bool - - test_3_to_true = (1==1); - - - -_Bool - - test_4_to_true = ( - - 0 - - == - - 0 - - ); - - - -_Bool - - test_5_to_true = ('z'=='z'); - - - -_Bool - - test_6_to_true = ('='=='='); - - - -_Bool - - test_7_to_true = (0x1A==0x1A); - - - - - -_Bool - - test_1_to_false = (4!=4); - - - -_Bool - - test_2_to_false = ( - - 1 - - == - - 0 - - ); - - - -_Bool - - test_3_to_false = (1==0); - - - -_Bool - - test_4_to_false = ( - - 0 - - == - - 1 - - ); - - - -_Bool - - test_5_to_false = ('z'=='x'); - - - -_Bool - - test_6_to_false = ('!'==')'); - - - -_Bool - - test_7_to_false = (0x1A==0x2B); - - - - - - - - - -_Bool - - result_1 = checkLogin(test_1_to_true); - - - -_Bool - - result_2 = checkLogin(test_2_to_true); - - - -_Bool - - result_3 = checkLogin(test_3_to_true); - - - -_Bool - - result_4 = checkLogin(test_4_to_true); - - - -_Bool - - result_5 = checkLogin(test_5_to_true); - - - -_Bool - - result_6 = checkLogin(test_6_to_true); - _Bool - result_7 = checkLogin(test_7_to_true); + expected_test_values_compute_to_true[] = {4==4, + 1 + == - + 1 -_Bool + , 1==1, - result_8 = checkLogin(test_1_to_false); + 0 - + == -_Bool + 0 - result_9 = checkLogin(test_2_to_false); + , 'z'=='z', '='=='=',0x1A==0x1A}; - - -_Bool - - result_10 = checkLogin(test_3_to_false); - - - -_Bool - - result_11 = checkLogin(test_4_to_false); - - - -_Bool + int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof( - result_12 = checkLogin(test_5_to_false); + _Bool - + ); -_Bool - result_13 = checkLogin(test_6_to_false); _Bool - result_14 = checkLogin(test_7_to_false); - - - - - - - - do {if ((result_1== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); - - do {if ((result_2== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); - - do {if ((result_3== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); - - do {if ((result_4== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); - - do {if ((result_5== + expected_test_values_compute_to_false[] = {4!=4, -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + == - do {if ((result_6== + 0 -1 + ,1==0, -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + 0 - do {if ((result_7== + == -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + ,'z'=='x','!'==')',0x1A==0x2B}; + int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof( + _Bool - do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + ); - do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); - do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); - do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); - do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); - do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + for(int i=0;i<7;++i) { - do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + do {if ((checkLogin(expected_test_values_compute_to_true[i]))) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(16)));}} while(0); + } + for(int i=0;i<7;++i){ + do {if (!(checkLogin(expected_test_values_compute_to_false[i]))) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(19)));}} while(0); + } } diff --git a/tests/build/test/out/c/LoginCustomer.o b/tests/build/test/out/c/LoginCustomer.o index 8cb00aec5296a1fa79d354c6f99e9afe806a462d..82cb77b53f1898426f37bd91e324cb4ef976af5c 100644 GIT binary patch delta 593 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 IKW^NA0Cv(lyZ`_I diff --git a/tests/build/test/out/c/test_LoginCustomer_runner.o b/tests/build/test/out/c/test_LoginCustomer_runner.o index 1efa0098329f45793f30fa73f4997cbedd2b4014..f839ac15db6dc490a724e363b3356e2a82b4c553 100644 GIT binary patch delta 14 Vcmexh{K0s`OGZZ4&94~QBmgtQ1)~4} delta 14 Vcmexh{K0s`OGZZa&94~QBmgtc1*HH0 diff --git a/tests/build/test/out/test_LoginCustomer.out b/tests/build/test/out/test_LoginCustomer.out index 8a1d6b840aca594c50b2cb8af06caf8d3c8f2c6a..3c7dca5801f8cdc804c4dffb9f5d46be60fb1cc1 100755 GIT binary patch delta 10958 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 G@qYlX7%#g3 diff --git a/tests/build/test/preprocess/files/test_LoginCustomer.c b/tests/build/test/preprocess/files/test_LoginCustomer.c index 5149d92..28f8ec8 100644 --- a/tests/build/test/preprocess/files/test_LoginCustomer.c +++ b/tests/build/test/preprocess/files/test_LoginCustomer.c @@ -1,297 +1,87 @@ #include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" #include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" - - void setUp(){}; void tearDown(){}; - - void test_checkLogin() { - - - - -_Bool - - test_1_to_true = (4==4); - - - -_Bool - - test_2_to_true = ( - - 1 - - == - - 1 - - ); - - - -_Bool - - test_3_to_true = (1==1); - - - -_Bool - - test_4_to_true = ( - - 0 - - == - - 0 - - ); - - - -_Bool - - test_5_to_true = ('z'=='z'); - - - -_Bool - - test_6_to_true = ('='=='='); - - - -_Bool - - test_7_to_true = (0x1A==0x1A); - - - - - -_Bool - - test_1_to_false = (4!=4); - - - -_Bool - - test_2_to_false = ( - - 1 - - == - - 0 - - ); - - - -_Bool - - test_3_to_false = (1==0); - - - -_Bool - - test_4_to_false = ( - - 0 - - == - - 1 - - ); - - - -_Bool - - test_5_to_false = ('z'=='x'); - - - -_Bool - - test_6_to_false = ('!'==')'); - - - -_Bool - - test_7_to_false = (0x1A==0x2B); - - - - - - - - - -_Bool - - result_1 = checkLogin(test_1_to_true); - - - -_Bool - - result_2 = checkLogin(test_2_to_true); - - - -_Bool - - result_3 = checkLogin(test_3_to_true); - - - -_Bool - - result_4 = checkLogin(test_4_to_true); - - - -_Bool - - result_5 = checkLogin(test_5_to_true); - - - -_Bool - - result_6 = checkLogin(test_6_to_true); - _Bool - result_7 = checkLogin(test_7_to_true); + expected_test_values_compute_to_true[] = {4==4, + 1 + == - + 1 -_Bool + , 1==1, - result_8 = checkLogin(test_1_to_false); + 0 - + == -_Bool + 0 - result_9 = checkLogin(test_2_to_false); + , 'z'=='z', '='=='=',0x1A==0x1A}; - - -_Bool - - result_10 = checkLogin(test_3_to_false); - - - -_Bool - - result_11 = checkLogin(test_4_to_false); - - - -_Bool + int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof( - result_12 = checkLogin(test_5_to_false); + _Bool - + ); -_Bool - result_13 = checkLogin(test_6_to_false); _Bool - result_14 = checkLogin(test_7_to_false); - - - - - - - - do {if ((result_1== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); - - do {if ((result_2== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); - - do {if ((result_3== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); - - do {if ((result_4== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); - - do {if ((result_5== + expected_test_values_compute_to_false[] = {4!=4, -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + == - do {if ((result_6== + 0 -1 + ,1==0, -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + 0 - do {if ((result_7== + == -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + ,'z'=='x','!'==')',0x1A==0x2B}; + int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof( + _Bool - do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + ); - do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); - do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); - do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); - do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); - do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + for(int i=0;i<7;++i) { - do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + do {if ((checkLogin(expected_test_values_compute_to_true[i]))) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(16)));}} while(0); + } + for(int i=0;i<7;++i){ + do {if (!(checkLogin(expected_test_values_compute_to_false[i]))) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(19)));}} while(0); + } } diff --git a/tests/build/test/results/test_LoginCustomer.pass b/tests/build/test/results/test_LoginCustomer.pass index bd31688..730ed0b 100644 --- a/tests/build/test/results/test_LoginCustomer.pass +++ b/tests/build/test/results/test_LoginCustomer.pass @@ -4,7 +4,7 @@ :file: test_LoginCustomer.c :successes: - :test: test_checkLogin - :line: 7 + :line: 5 :message: '' :unity_test_time: 0 :failures: [] @@ -15,4 +15,4 @@ :failed: 0 :ignored: 0 :stdout: [] -:time: 0.0017807170006562956 +:time: 0.001912861000164412 diff --git a/tests/build/test/runners/test_LoginCustomer_runner.c b/tests/build/test/runners/test_LoginCustomer_runner.c index f847d37..f061ca9 100644 --- a/tests/build/test/runners/test_LoginCustomer_runner.c +++ b/tests/build/test/runners/test_LoginCustomer_runner.c @@ -75,7 +75,7 @@ static void run_test(UnityTestFunction func, const char* name, UNITY_LINE_TYPE l int main(void) { UnityBegin("test_LoginCustomer.c"); - run_test(test_checkLogin, "test_checkLogin", 7); + run_test(test_checkLogin, "test_checkLogin", 5); return UnityEnd(); } diff --git a/tests/test/test_LoginCustomer.c b/tests/test/test_LoginCustomer.c index fc23e10..610a847 100644 --- a/tests/test/test_LoginCustomer.c +++ b/tests/test/test_LoginCustomer.c @@ -1,63 +1,21 @@ #include #include "LoginCustomer.h" - void setUp(){}; void tearDown(){}; - void test_checkLogin() { /*arrange*/ - - bool test_1_to_true = (4==4); - bool test_2_to_true = (true==true); - bool test_3_to_true = (1==1); - bool test_4_to_true = (false==false); - bool test_5_to_true = ('z'=='z'); - bool test_6_to_true = ('='=='='); - bool test_7_to_true = (0x1A==0x1A); - - bool test_1_to_false = (4!=4); - bool test_2_to_false = (true==false); - bool test_3_to_false = (1==0); - bool test_4_to_false = (false==true); - bool test_5_to_false = ('z'=='x'); - bool test_6_to_false = ('!'==')'); - bool test_7_to_false = (0x1A==0x2B); + bool expected_test_values_compute_to_true[] = {4==4,true==true, 1==1, false==false, 'z'=='z', '='=='=',0x1A==0x1A}; + int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof(bool); - /*act*/ - - bool result_1 = checkLogin(test_1_to_true); - bool result_2 = checkLogin(test_2_to_true); - bool result_3 = checkLogin(test_3_to_true); - bool result_4 = checkLogin(test_4_to_true); - bool result_5 = checkLogin(test_5_to_true); - bool result_6 = checkLogin(test_6_to_true); - bool result_7 = checkLogin(test_7_to_true); - - bool result_8 = checkLogin(test_1_to_false); - bool result_9 = checkLogin(test_2_to_false); - bool result_10 = checkLogin(test_3_to_false); - bool result_11 = checkLogin(test_4_to_false); - bool result_12 = checkLogin(test_5_to_false); - bool result_13 = checkLogin(test_6_to_false); - bool result_14 = checkLogin(test_7_to_false); - - /*assertions*/ - - TEST_ASSERT_TRUE(result_1); - TEST_ASSERT_TRUE(result_2); - TEST_ASSERT_TRUE(result_3); - TEST_ASSERT_TRUE(result_4); - TEST_ASSERT_TRUE(result_5); - TEST_ASSERT_TRUE(result_6); - TEST_ASSERT_TRUE(result_7); - - TEST_ASSERT_FALSE(result_8); - TEST_ASSERT_FALSE(result_9); - TEST_ASSERT_FALSE(result_10); - TEST_ASSERT_FALSE(result_11); - TEST_ASSERT_FALSE(result_12); - TEST_ASSERT_FALSE(result_13); - TEST_ASSERT_FALSE(result_14); + bool expected_test_values_compute_to_false[] = {4!=4,true==false,1==0,false==true,'z'=='x','!'==')',0x1A==0x2B}; + int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof(bool); + /*act and assertions*/ + for(int i=0;i<7;++i) { + TEST_ASSERT_TRUE(checkLogin(expected_test_values_compute_to_true[i])); + } + for(int i=0;i<7;++i){ + TEST_ASSERT_FALSE(checkLogin(expected_test_values_compute_to_false[i])); + } } From 3e7a7d3c89873307b7cf5bc02f28bae148a24956 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Sat, 21 Jan 2023 15:02:45 +0100 Subject: [PATCH 09/20] Implementation of functions LoginAsCustomer() and Login() --- src/CustomerData.txt | 6 +++ src/CustomerProperties.h | 4 ++ src/LoginCustomer.c | 92 ++++++++++++++++++++++++++++++++++++++++ src/LoginCustomer.h | 7 +++ 4 files changed, 109 insertions(+) create mode 100644 src/CustomerData.txt create mode 100644 src/CustomerProperties.h diff --git a/src/CustomerData.txt b/src/CustomerData.txt new file mode 100644 index 0000000..3ac070f --- /dev/null +++ b/src/CustomerData.txt @@ -0,0 +1,6 @@ +1234=example +ID=1234 +forename=Max +Surname=Mustermann +password=example +balance=0 diff --git a/src/CustomerProperties.h b/src/CustomerProperties.h new file mode 100644 index 0000000..2bbab62 --- /dev/null +++ b/src/CustomerProperties.h @@ -0,0 +1,4 @@ +typedef struct Customer{ + char *ID, *forename, *surname, *password; + float balance; +}customer_t; diff --git a/src/LoginCustomer.c b/src/LoginCustomer.c index c9b956e..5c2a7a4 100644 --- a/src/LoginCustomer.c +++ b/src/LoginCustomer.c @@ -1,5 +1,97 @@ #include "LoginCustomer.h" + bool checkLogin(bool loginSuccessful) { return (loginSuccessful) ? true : false; } + +void collectCustomerDataForLogin(int attempts) +{ + customer_t c; + c.ID = calloc(15+1,sizeof(char)); + c.password = calloc(15+1, sizeof(char)); + char digitCharacterFromUser, passwordCharacterFromUser; + int IDLengthCounter = 0, passwordLengthCounter = 0; + const int IDMaxLength = 16, passwordMaxLength = 16; + + printf("Enter ID:\n"); + while(((digitCharacterFromUser=getchar()) != '\n')&&IDLengthCounter='0'&&digitCharacterFromUser<='9'){ + *(c.ID+IDLengthCounter) = digitCharacterFromUser; + } + else{ + printf("Character entered is not a digit. Aborting.\n"); + exit(-1); + } + ++IDLengthCounter; + } + *(c.ID+IDLengthCounter) = '\0'; + + if(IDLengthCounter>=IDMaxLength){ + printf("ID entered is too long. Aborting.\n"); + exit(-1); + } + + printf("Enter password:\n"); + while((passwordCharacterFromUser=getchar())!='\n'&&passwordLengthCounter=passwordMaxLength){ + printf("Password entered is too long. Aborting.\n"); + exit(-1); + } + customer_t *ptr = &c; + bool loginSuccessful = loginCustomer(ptr); + if(loginSuccessful ) { + printf("Welcome to the menu!\n"); + //call menu() + }else if(!loginSuccessful && attempts < MAX_LOGIN_ATTEMPTS){ + printf("You have %d attempts left.\n", MAX_LOGIN_ATTEMPTS - attempts); + collectCustomerDataForLogin(++attempts); + }else{ + printf("Maximum number of attempts reached. Program terminates.\n"); + exit(-1); + //call error() + } + +} + +bool loginCustomer(customer_t *c) +{ + bool foundCustomerEntryInFile = false; + char *searchForThisString = generateCheckString(c->ID,c->password); + char *lineFromCustomerFile = calloc(40,sizeof(char)); + FILE *readCustomerFile = fopen("CustomerData.txt", "r"); + if(readCustomerFile==NULL){ + printf("Could not find file. Aborting.\n"); + exit(-1); + //call error() + } + while((fscanf(readCustomerFile,"%s",lineFromCustomerFile)!=EOF)){ + if(strcmp(searchForThisString,lineFromCustomerFile)==0){ + foundCustomerEntryInFile = true; + break; + } + } + + if(checkLogin(foundCustomerEntryInFile)){ + printf("Login successful.\n"); + return foundCustomerEntryInFile; + }else{ + printf("Login not successful.\n"); + } + fclose(readCustomerFile); + return foundCustomerEntryInFile; +} + +char *generateCheckString(char *ID, char *password){ + int checkStringLength = strlen(ID) + 1 + strlen(password) + 1; + char *checkString = calloc(checkStringLength, sizeof(char)); + checkString = strcat(ID,"="); + checkString = strcat(checkString,password); + *(checkString+checkStringLength) = '\0'; + return checkString; +} diff --git a/src/LoginCustomer.h b/src/LoginCustomer.h index 7f0f8f9..809765b 100644 --- a/src/LoginCustomer.h +++ b/src/LoginCustomer.h @@ -1,3 +1,10 @@ #include +#include #include +#include +#include "CustomerProperties.h" +#define MAX_LOGIN_ATTEMPTS 3 +char *generateCheckString(char *, char*); bool checkLogin(bool); +void collectCustomerDataForLogin(int); +bool loginCustomer(customer_t *); From 2ad433c776761ebcbe178d60d9ce341831bdf286 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Thu, 26 Jan 2023 11:55:46 +0100 Subject: [PATCH 10/20] Implementation of function stringConcatenation() and creation of docs.txt to as a documentation for the functions. --- src/StringManipulation.c | 32 ++++++++++++++++++++++++++++---- src/StringManipulation.h | 1 + src/docs.txt | 14 ++++++++++++++ 3 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 src/docs.txt diff --git a/src/StringManipulation.c b/src/StringManipulation.c index cd2ad2c..7ac306e 100644 --- a/src/StringManipulation.c +++ b/src/StringManipulation.c @@ -1,5 +1,33 @@ #include "StringManipulation.h" /*Code written by Julius Philipp Engel, fdai7057*/ + +char *stringConcatenation(char *string_1, char *string_2) +{ + int lengthStringOne = strlen(string_1); + int lengthStringTwo = strlen(string_2); + + if(lengthStringOne==0||lengthStringTwo==0){ + printf("Empty strings are not allowed. Aborting.\n"); + exit(-1); + //call error(); + } + + const int totalLength = lengthStringOne + lengthStringTwo + 1; + char *result = calloc(totalLength, sizeof(char)); + int i,j; + for(i=0,j=0;i #include #include +char *stringConcatenation(char *, char *); char *to_string(int); char *generateCheckString(int, char *); diff --git a/src/docs.txt b/src/docs.txt new file mode 100644 index 0000000..c76de12 --- /dev/null +++ b/src/docs.txt @@ -0,0 +1,14 @@ +char *stringConcatenation(char string_1*, char string_2*): + +This function takes two char pointers. In this function a new string is created. This new string is the concatenation of string_1 and string_2. The size of the new string is the length of string_1 plus the length of string_2 plus one for '\0'. This function is needed when creating an unique check string for a customer. + +char *to_string(int number): + +This function takes an integer variable as its argument. It returns an string that contains the digits of number. For example to_string(176) would return "176\0". This function is needed to write data in form of characters into the customer file. + + +char *generateCheckString(int customerID, char *password): + +The purpose of this function is to generate a string that is needed when a user wants to login. This string is searched for in the customer-data file and if it is found, the login is successful. This function is needed when a new user is created because then it is written in the file for the first time. +The format of the returned string is [ID]=[PASSWORD]. +For example generateCheckString(177,"tree") would return "177=tree\0". From dc6049fa86276bdfed6568c7d3692ababa609596 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Wed, 1 Feb 2023 09:58:33 +0100 Subject: [PATCH 11/20] solve merge conflict --- build-project.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/build-project.sh b/build-project.sh index 949b9be..c7587af 100755 --- a/build-project.sh +++ b/build-project.sh @@ -1,7 +1,14 @@ clear +<<<<<<< HEAD ceedling test:all cd src/ gcc main.c createCustomer.c -o prog ./prog rm prog cd .. +======= +cd src/ +gcc main.c +./a.out +rm a.out +>>>>>>> 38af5af (build script) From 349f1738114f3419a0813d5560fc90a536c3ee32 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Wed, 1 Feb 2023 10:00:15 +0100 Subject: [PATCH 12/20] solve merge conflict --- build-project.sh | 14 -------------- src/CustomerProperties.h | 5 +++++ src/StringManipulation.c | 24 ++++++++++++++++++++++++ src/StringManipulation.h | 3 +++ src/main.c | 4 ---- team.md | 6 ------ 6 files changed, 32 insertions(+), 24 deletions(-) delete mode 100755 build-project.sh create mode 100644 src/CustomerProperties.h create mode 100644 src/StringManipulation.c create mode 100644 src/StringManipulation.h delete mode 100644 src/main.c delete mode 100644 team.md diff --git a/build-project.sh b/build-project.sh deleted file mode 100755 index c7587af..0000000 --- a/build-project.sh +++ /dev/null @@ -1,14 +0,0 @@ -clear -<<<<<<< HEAD -ceedling test:all -cd src/ -gcc main.c createCustomer.c -o prog -./prog -rm prog -cd .. -======= -cd src/ -gcc main.c -./a.out -rm a.out ->>>>>>> 38af5af (build script) diff --git a/src/CustomerProperties.h b/src/CustomerProperties.h new file mode 100644 index 0000000..e2ba317 --- /dev/null +++ b/src/CustomerProperties.h @@ -0,0 +1,5 @@ +typedef struct Customer{ + int ID; + char *forename,*surname,*password; + float balance; +}customer_t; diff --git a/src/StringManipulation.c b/src/StringManipulation.c new file mode 100644 index 0000000..2863f93 --- /dev/null +++ b/src/StringManipulation.c @@ -0,0 +1,24 @@ +#include "StringManipulation.h" +/*Code written by Julius Philipp Engel, fdai7057*/ +char *to_string(int number) +{ + if(number==0) + { + return "0\0"; + } + else + { + int cpy = number, len = 0; + while(number>0){ + ++len; + number /= 10; + } + char *str = calloc(len+1, sizeof(char)); + for(int i=0,j=len-1;i +#include +char *to_string(int); diff --git a/src/main.c b/src/main.c deleted file mode 100644 index 84a49ac..0000000 --- a/src/main.c +++ /dev/null @@ -1,4 +0,0 @@ -#include "createCustomer.h" -int main(){ - collectCustomerProperties(); -} diff --git a/team.md b/team.md deleted file mode 100644 index f0e0a28..0000000 --- a/team.md +++ /dev/null @@ -1,6 +0,0 @@ -- Can Hacioglu, fdlt3817 -- Atharva Kishor Naik, fdai7514 -- Julius Philipp Engel, fdai7057 -- Shivam Chaudhary, fdlt3781 -- Mohamed Yahya Dahi, fdai6618 -- Haytham Daoula, fdai7207 \ No newline at end of file From e9d4d56754e27c73a83ea37a7b2fcacf130cb8e9 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Thu, 19 Jan 2023 08:14:59 +0100 Subject: [PATCH 13/20] implementation of unit test for to_string() --- tests/test/support/.gitkeep | 0 tests/test/test_StringManipulation.c | 38 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 tests/test/support/.gitkeep create mode 100644 tests/test/test_StringManipulation.c diff --git a/tests/test/support/.gitkeep b/tests/test/support/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tests/test/test_StringManipulation.c b/tests/test/test_StringManipulation.c new file mode 100644 index 0000000..b8ca872 --- /dev/null +++ b/tests/test/test_StringManipulation.c @@ -0,0 +1,38 @@ +#include "unity.h" +#include "StringManipulation.h" + +void test_to_string() +{ + /*initializing test values*/ + char *result_1[] = {"0","1","2","3","4","5","6","7","8","9","10"}; + char *result_2[] = {"500","502","504","506","508","510","512","514","516","518"}; + char *result_3[] = {"1000","2000","3000","4000","5000","6000","7000","8000","9000","10000"}; + char *result_4[] = {"9999","8999","7999","6999","5999","4999","3999","2999","1999","999"}; + char *result_5[] = {"1000000","2000000","3000000","4000000","5000000","6000000","7000000", + "8000000","9000000","10000000"}; + + for(int i=0;i<=10;++i){ + printf("%s\n", to_string(i)); + TEST_ASSERT_EQUAL_STRING(result_1[i],to_string(i)); + } + + for(int i=0, j=500;i<10;++i,j+=2){ + printf("%s\n", to_string(j)); + TEST_ASSERT_EQUAL_STRING(result_2[i],to_string(j)); + } + + for(int i=0, j=1000;i<10;++i,j+=1000){ + printf("%s\n", to_string(j)); + TEST_ASSERT_EQUAL_STRING(result_3[i],to_string(j)); + } + + for(int i=0, j=9999;i<10;++i,j-=1000){ + printf("%s\n", to_string(j)); + TEST_ASSERT_EQUAL_STRING(result_4[i], to_string(j)); + } + for(int i=0, j=1000000;i<10;++i,j+=1000000){ + printf("%s\n", to_string(j)); + TEST_ASSERT_EQUAL_STRING(result_5[i],to_string(j)); + } + +} From 6c766ee827404afad6e3f0282a581ca6b0026cfb Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Thu, 19 Jan 2023 15:29:01 +0100 Subject: [PATCH 14/20] implementation of unit tests for generateCheckString() --- src/StringManipulation.c | 21 +- src/StringManipulation.h | 2 + tests/build/test/cache/defines_dependency.yml | 3 + tests/build/test/cache/input.yml | 242 ++++++++++++++++++ .../test/cache/test_StringManipulation.c | 195 ++++++++++++++ .../test/dependencies/StringManipulation.d | 3 + tests/build/test/dependencies/cmock.d | 6 + .../dependencies/test_StringManipulation.d | 5 + .../test_StringManipulation_runner.d | 4 + tests/build/test/dependencies/unity.d | 4 + tests/build/test/out/c/StringManipulation.o | Bin 0 -> 4384 bytes tests/build/test/out/c/cmock.o | Bin 0 -> 8152 bytes .../test/out/c/test_StringManipulation.o | Bin 0 -> 10300 bytes .../out/c/test_StringManipulation_runner.o | Bin 0 -> 7004 bytes tests/build/test/out/c/unity.o | Bin 0 -> 39856 bytes .../test/out/test_StringManipulation.out | Bin 0 -> 59008 bytes .../files/test_StringManipulation.c | 195 ++++++++++++++ .../includes/test_StringManipulation.c | 3 + .../test/results/test_StringManipulation.pass | 42 +++ .../runners/test_StringManipulation_runner.c | 89 +++++++ tests/project.yml | 101 ++++++++ tests/test/test_StringManipulation.c | 55 +++- 22 files changed, 964 insertions(+), 6 deletions(-) create mode 100644 tests/build/test/cache/defines_dependency.yml create mode 100644 tests/build/test/cache/input.yml create mode 100644 tests/build/test/cache/test_StringManipulation.c create mode 100644 tests/build/test/dependencies/StringManipulation.d create mode 100644 tests/build/test/dependencies/cmock.d create mode 100644 tests/build/test/dependencies/test_StringManipulation.d create mode 100644 tests/build/test/dependencies/test_StringManipulation_runner.d create mode 100644 tests/build/test/dependencies/unity.d create mode 100644 tests/build/test/out/c/StringManipulation.o create mode 100644 tests/build/test/out/c/cmock.o create mode 100644 tests/build/test/out/c/test_StringManipulation.o create mode 100644 tests/build/test/out/c/test_StringManipulation_runner.o create mode 100644 tests/build/test/out/c/unity.o create mode 100755 tests/build/test/out/test_StringManipulation.out create mode 100644 tests/build/test/preprocess/files/test_StringManipulation.c create mode 100644 tests/build/test/preprocess/includes/test_StringManipulation.c create mode 100644 tests/build/test/results/test_StringManipulation.pass create mode 100644 tests/build/test/runners/test_StringManipulation_runner.c create mode 100644 tests/project.yml diff --git a/src/StringManipulation.c b/src/StringManipulation.c index 2863f93..6f671da 100644 --- a/src/StringManipulation.c +++ b/src/StringManipulation.c @@ -4,7 +4,10 @@ char *to_string(int number) { if(number==0) { - return "0\0"; + char *str = calloc(2,sizeof(char)); + *(str) = '0'; + *(str+1) = '\0'; + return str; } else { @@ -22,3 +25,19 @@ char *to_string(int number) return str; } } + +char *generateCheckString(int ID, char *password) +{ + char *IDString = to_string(ID); + int IDLength = strlen(IDString); + int passwordLength = strlen(password); + /*the checkString has this form: ID=password, so in order to calculate its length the length of the ID, one byte for the =, the length of the password and + * one byte for '\0' are needed.*/ + int checkStringLength = IDLength + 1 + passwordLength + 1; + char *checkString = calloc(checkStringLength, sizeof(char)); + checkString = strcat(IDString, "="); + checkString = strcat(checkString, password); + *(checkString+checkStringLength) = '\0'; + return checkString;:w + +} diff --git a/src/StringManipulation.h b/src/StringManipulation.h index 88f06a4..d1a8b35 100644 --- a/src/StringManipulation.h +++ b/src/StringManipulation.h @@ -1,3 +1,5 @@ #include #include +#include char *to_string(int); +char *generateCheckString(int, char *); diff --git a/tests/build/test/cache/defines_dependency.yml b/tests/build/test/cache/defines_dependency.yml new file mode 100644 index 0000000..551c1ff --- /dev/null +++ b/tests/build/test/cache/defines_dependency.yml @@ -0,0 +1,3 @@ +--- +"/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.c": +- TEST diff --git a/tests/build/test/cache/input.yml b/tests/build/test/cache/input.yml new file mode 100644 index 0000000..fb9e794 --- /dev/null +++ b/tests/build/test/cache/input.yml @@ -0,0 +1,242 @@ +--- +: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 + :auto_link_deep_dependencies: false + :test_file_prefix: test_ + :options_paths: [] + :release_build: false + :use_auxiliary_dependencies: true + :build_root: build + :which_ceedling: gem + :ceedling_version: 0.31.1 + :default_tasks: + - test:all +:release_build: + :use_assembly: false + :artifacts: [] +:paths: + :test: + - "+:test/**" + - "-:test/support" + :source: + - "/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/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: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor" + :defines: [] +:cmock: + :vendor_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/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: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/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: + - "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins" + :enabled: + - stdout_pretty_tests_report + - module_generator + :display_raw_test_results: false + :stdout_pretty_tests_report_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/lib/../plugins/stdout_pretty_tests_report" + :module_generator_path: "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/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/tests/build/test/cache/test_StringManipulation.c b/tests/build/test/cache/test_StringManipulation.c new file mode 100644 index 0000000..0d87c99 --- /dev/null +++ b/tests/build/test/cache/test_StringManipulation.c @@ -0,0 +1,195 @@ +#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + + + + + +void test_to_string() + +{ + + + + char *result_1[] = {"0","1","2","3","4","5","6","7","8","9","10"}; + + char *result_2[] = {"500","502","504","506","508","510","512","514","516","518"}; + + char *result_3[] = {"1000","2000","3000","4000","5000","6000","7000","8000","9000","10000"}; + + char *result_4[] = {"9999","8999","7999","6999","5999","4999","3999","2999","1999","999"}; + + char *result_5[] = {"1000000","2000000","3000000","4000000","5000000","6000000","7000000", + + "8000000","9000000","10000000"}; + + + + for(int i=0;i<=10;++i){ + + UnityAssertEqualString((const char*)((result_1[i])), (const char*)((to_string(i))), ( + + ((void *)0) + + ), (UNITY_UINT)(17)); + + } + + + + for(int i=0, j=500;i<10;++i,j+=2){ + + UnityAssertEqualString((const char*)((result_2[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(21)); + + } + + + + for(int i=0, j=1000;i<10;++i,j+=1000){ + + UnityAssertEqualString((const char*)((result_3[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(25)); + + } + + + + for(int i=0, j=9999;i<10;++i,j-=1000){ + + UnityAssertEqualString((const char*)((result_4[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(29)); + + } + + for(int i=0, j=1000000;i<10;++i,j+=1000000){ + + UnityAssertEqualString((const char*)((result_5[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(32)); + + } + + + +} + + + + + +void test_generateCheckString() + +{ + + + + int numbers_1[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; + + char *strings_1[] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; + + char *result_1[] = {"0=a","1=b","2=c","3=d","4=e","5=f","6=g","7=h","8=i","9=j","10=k","11=l","12=m","13=n","14=o","15=p","16=q","17=r", "18=s","19=t","20=u","21=v","22=w","23=x","24=y","25=z"}; + + for(int i=0;i<26;++i){ + + UnityAssertEqualString((const char*)((result_1[i])), (const char*)((generateCheckString(numbers_1[i],*(strings_1+i)))), ( + + ((void *)0) + + ), (UNITY_UINT)(45)); + + } + + + + int numbers_2[] = {0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025}; + + char *strings_2[] = {"z","zy","zyx","zyxw","zyxwv","zyxwvu","zyxwvut","zyxwvuts","zyxwvutsr","zyxwvutsrq","zyxwvutsrqp", + + "zyxwvutsrqpo","zyxwvutsrqpon","zyxwvutsrqponm","zyxwvutsrqponml","zyxwvutsrqponmlk", + + "zyxwvutsrqponmlkj","zyxwvutsrqponmlkji","zyxwvutsrqponmlkjih","zyxwvutsrqponmlkjihg","zyxwvutsrqponmlkjihgf", + + "zyxwvutsrqponmlkjihgfe","zyxwvutsrqponmlkjihgfed","zyxwvutsrqponmlkjihgfedc","zyxwvutsrqponmlkjihgfedcb", + + "zyxwvutsrqponmlkjihgfedcba"}; + + char *result_2[] = {"0=z","1=zy","1=zyx","2=zyxw","3=zyxwv","5=zyxwvu","8=zyxwvut","13=zyxwvuts","21=zyxwvutsr","34=zyxwvutsrq", + + "55=zyxwvutsrqp","89=zyxwvutsrqpo","144=zyxwvutsrqpon","233=zyxwvutsrqponm","377=zyxwvutsrqponml", + + "610=zyxwvutsrqponmlk","987=zyxwvutsrqponmlkj","1597=zyxwvutsrqponmlkji","2584=zyxwvutsrqponmlkjih", + + "4181=zyxwvutsrqponmlkjihg","6765=zyxwvutsrqponmlkjihgf","10946=zyxwvutsrqponmlkjihgfe", + + "17711=zyxwvutsrqponmlkjihgfed","28657=zyxwvutsrqponmlkjihgfedc","46368=zyxwvutsrqponmlkjihgfedcb", + + "75025=zyxwvutsrqponmlkjihgfedcba"}; + + for(int i=0;i<26;++i){ + + UnityAssertEqualString((const char*)((result_2[i])), (const char*)((generateCheckString(numbers_2[i],*(strings_2+i)))), ( + + ((void *)0) + + ), (UNITY_UINT)(61)); + + } + + + + srand(time(0)); + + int random_number=0; + + char *random_numbers_strings[20]; + + int random_numbers[20]; + + for(int i=0;i<20;++i){ + + random_number = (rand() % 100) + 1; + + random_numbers_strings[i] = to_string(random_number); + + random_numbers[i] = random_number; + + } + + char *strings_3[] = {"tree","plant","tea","programming","assembler","unix","BSD","snow","mountain","table","wood","forest", "calculator","book","light","keyboard","old","paper","pencil","voltage"}; + + char *result_3[20]; + + for(int i=0;i<20;++i){ + + random_numbers_strings[i] = strcat(random_numbers_strings[i],"="); + + result_3[i] = strcat(random_numbers_strings[i],strings_3[i]); + + printf("%s\n",result_3[i]); + + } + + for(int i=0;i<20;++i){ + + UnityAssertEqualString((const char*)((result_3[i])), (const char*)((generateCheckString(random_numbers[i],strings_3[i]))), ( + + ((void *)0) + + ), (UNITY_UINT)(81)); + + } + +} diff --git a/tests/build/test/dependencies/StringManipulation.d b/tests/build/test/dependencies/StringManipulation.d new file mode 100644 index 0000000..625c690 --- /dev/null +++ b/tests/build/test/dependencies/StringManipulation.d @@ -0,0 +1,3 @@ +build/test/out/c/StringManipulation.o: \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.c \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.h diff --git a/tests/build/test/dependencies/cmock.d b/tests/build/test/dependencies/cmock.d new file mode 100644 index 0000000..82b64c9 --- /dev/null +++ b/tests/build/test/dependencies/cmock.d @@ -0,0 +1,6 @@ +build/test/out/c/cmock.o: \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/cmock/src/cmock_internals.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/dependencies/test_StringManipulation.d b/tests/build/test/dependencies/test_StringManipulation.d new file mode 100644 index 0000000..2f65b3c --- /dev/null +++ b/tests/build/test/dependencies/test_StringManipulation.d @@ -0,0 +1,5 @@ +build/test/out/c/test_StringManipulation.o: \ + test/test_StringManipulation.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.h diff --git a/tests/build/test/dependencies/test_StringManipulation_runner.d b/tests/build/test/dependencies/test_StringManipulation_runner.d new file mode 100644 index 0000000..c54fbb6 --- /dev/null +++ b/tests/build/test/dependencies/test_StringManipulation_runner.d @@ -0,0 +1,4 @@ +build/test/out/c/test_StringManipulation_runner.o: \ + build/test/runners/test_StringManipulation_runner.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/dependencies/unity.d b/tests/build/test/dependencies/unity.d new file mode 100644 index 0000000..02f2997 --- /dev/null +++ b/tests/build/test/dependencies/unity.d @@ -0,0 +1,4 @@ +build/test/out/c/unity.o: \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/out/c/StringManipulation.o b/tests/build/test/out/c/StringManipulation.o new file mode 100644 index 0000000000000000000000000000000000000000..531a498d6d4ebdfe69f990feb9684a617365fc45 GIT binary patch literal 4384 zcmcguTWlOx89rxr&+gc}-uRLYNJ#YHAGofMX5lQK~Q$bCT(6;gy;$q+vn$>O2}neU%D z;~g7E@YH`b^Zoa8{{LKNU(&|UaL$=aocUNoVr;U-v7EHw80%#FZF>+h`Kfp=)jpkA zSnFB6zqz^jtwjZzg%?#;J-)D}PV;G{_K|H__)Tj~yHnThe8BqgUU-*(z!;dnEF++< zsWolmrnU~A-R)k`)_MJT^_^@cld0YQ$6ss9i~m#>?{(My*t=ZQR7(HSCv|NdN$f!` zc*j_|sjX2Ovaj-*wtDy3`uPnf*KcL6+DFLNd%N}?GT%}7GJm&sv39Gr{K}X6>z7vR z+6rH;-MZHLUvZ27>aN|QIczLwYkZ-&%In(N6WaQf*Xx(o?J&EjmHPAdKU~_@mnFL| zYvIkR+Gxkd0x32cigjBNZYb7J#VZ$R6uyjVQB7T2b!u)nt?WqiUR~SZ%bA-jfhKI! zG}zV6Dn?rI#JF{OCR`8qEY%P8EWL)6^-~L(pMM2>_!oHf*b2rzq-6&w{@{Ka#6f6$ zevvmVrl`WUaWw*^q6BX{o^g_R;GC@#hY8f+JFxlvUndV9Xo60B4?KT3I0NW}{Bsg- z+`~ICHVQ-c=fEnjvS5S^5BHLv@~U5blf-V-5ew?u2<6d$c2@mB4eLpO{Xc?XHNkZdm8*k@MH4w?UUm-cS1alCjsYB#VRu%Y;s1w%)%ou(4G#Z zXXhD@$dL-6f?-13E2rgzb+`kEuOp&LQF+GqHakvJp=k&aN0@|>@iu-q(h>4S4n*2` zd!Q97p!Bd%Xb37Sf@Ep)Lq{7YTF$m5|WLSG0S?HcQ#xKo|44R>)^1A_Tf z$2QiXpsXMi(%Dg{CwC~C9+;4^<`5>>9-z!2#BIwQc5Eo(ARammn5F%um%FQo{~EgL zW8VkI`MpRB-u4AW3lqUnrNd=M5_tAJ)y8qHgM0SWGLP+9vi@=HXq8SITL|CaiMa%%0cH{A{&= zge5bUwl6%vnXo6nPx#eCVoy#qs|lfIMK~jx6C!X`?9GT^Rrunf`J4!;Oh`^@C zMZ^-ybqRTJu`Vh?8cs1uM-1o~Mhnc1lQqC-2YS1K=* z%2TXrR`OZXn2M72vuL%2^{KF|VH#!KGDdPndd6uy8yl63JGpVg%vw3tnEAHJn$=>; zD6>kgRJNkqEa^s4nZl!C>6~6}lx<5}ZE=!OD{R%atX3(BV~-ueWXJ5#vrk=$jtqQ0 zI?x|G5gUk}=sz*gKQPcA?JHVU(@5BL=F<@MaypmD4?Z>+?aM~{GJ0j+Oy|lavsA70 zRm~Uj=2V}hrwT>|eUP*MES3X1A4h4IjnB@Gj65DaHfp5ux+%-+8|>X#C{FBNI=~?Q z&1V?DqVfY_zyBIeZWKB?_e6BHv(pjvJIZj27+vuBTKW4+@QXry3XgmBdwrC*Y!}uF z`xG7`_x2#&oULi-q__n%q)UGGw@sHP^x@|vAG1GVTPhz5Z1KeS82$Tckk9@Xp$Y)pSmD?KvI3L6P>LDL%^GIa(R!g$N9+Do^+jeN8o``lO$Ob(! z^>ciOJOSBV7mCk%?CpxmUi8Qm|Lq;}?iXs~7$uW)j}6AMhLxO6C#_u7oQb99Sn}-n z)5E97lTV*HGof8fUOYWKt|eJoFBD4YU9XK@(xm1Xjw*e80cqWG{%|&bA{f|X9q62v7wmOA}XaoCk5=eWM zZbiyR^Eix$V%(du1?%Z0H{Wq6$^U=(^~1-WpUgw~Xe^i9d~^?a{n{SjSCD>g{66^o z$W7w0(H`{HdlCD39XhI)^lrWMJ@JIIpQ51mp>xT#eHRLsC!2)?QDP*yHo9B9^AaUhm!U@og4C_eo`)X?}24G?B_Z$k|+-m#d!U$VBA037U$*q{RaRV97X^D literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/cmock.o b/tests/build/test/out/c/cmock.o new file mode 100644 index 0000000000000000000000000000000000000000..162be594be8e993b0d9cd86d186661c8be1c8c4d GIT binary patch literal 8152 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 K+ERF!e*XsoyBp*H literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/test_StringManipulation_runner.o b/tests/build/test/out/c/test_StringManipulation_runner.o new file mode 100644 index 0000000000000000000000000000000000000000..a16f5ca7cabe5425f7561602ee5f41abf3faf7d6 GIT binary patch literal 7004 zcmbtYdu$xV9iF|rwa?ExzY^yGTp9;EO?_t@l(;D*ey2vpabmkPDe1Czw?1ETx0meg zIx!6pWYOXpi=+}DMB4BNYQ;lUi}D9;Ng+6CNC6d9<<-!Z@Q_@Qs!dA;rD@&oH#>W` zcAOTeBkg|k{a!Qk+u51fy{o&gN0KDw6p49Ro-tOp)Ye?jp@FSn%elS?oa~APmH>w* zKbXBVH#aAf;>;o3cv-A=c-PE4>;ISYc4r?)K($>t)8^-XTzaOhl*sId z|DKzhxKL_aOt&=*@a85?1@C#@D(3a6ZvWh?WU}j{|6(=!Dgw=(!wq)!u%>ohIy*Dn zSLd5}|1WdO7)k`ysnOfFV22CTWCvH~tSm@&ajmSIS>t8Qhh}k?K0v=qmt*Rz;sVCrrD=rX=|{!0x~v&>@0W3F z$K|7&%w%8T`_LBn3JuB!zq#EqeXltM$=D*w+x{QXe)>H}*~XZ{Cp^EDJv!?pf)(yR^M0kV>L6zYEC)xQMuPU7}kT)Yi* zP4br_r0gk-5l97tu$4XX3kV?l<$F04UL>7Qegmx7S795z15(24rM^~j3i_rH*YiD6 zAH1ra>IsrRynG#Z_k9dev9A`Sbb=)JOTk^hVjneKR$h;Qr{vcqe;F!)85qlNN)VTivJ2tBge4qTz z+iYc^hIH@REEM=P>E5$hUEr(mmj5V~QPLY&@C?yEN!P@I6(2w*708r!8Qp>;jYv|V zTS8*VUsytZ+@|scRHg0QW*@5i$lz$z10-Ev_7vD@E_ni>s!wof!vMf@gjGLC;n#1Z zym*fIs_)`-fClI};%7BalVelCLx36{qhwyo#zM zZ@Jr|IDjzJLdmrVj5#LSmF;%RYFPa;#>#VUkW=7*2+YkWaPWG&B`(;!>;^bh2oWE` z=4GB*#wx>X^D<{#^~-vzXt-^)4|c%3DvYk#U9Vr3lT%~WvTGC+re=PaoH1id7SlXL z;g^PUL7ebhjyE0IriUTcDylh)6V)Ha1N5>b^cbaomY3nqH&o(LE18N%Xwi%qmX5_R z%OY0Rh$Qt`%8F}|utk zFUmEW@eIZUhBJ<5JHt7O$NEzYPny$L;I z;K7b*Msj4FB(NJ(Q(W1TOlg$r;l1tw*e-Eq53>8fUM*&JW-M%lBh-{*+NGIlGSz~| zgGZ-p@lb43HQ42IllOCx-90}S6b17@iCQD9J(@Ah9)mKN9Yr;i3r;(6=gpbe9_1^1 zBy5-_8;z&O(qnX5V3=EqNdp}2?;YBq4EOdAUDv`=89gyS%m^Gc$_K^jPQtX-oJ&@r6*c}-h+Pb}cOSdw_V5RXnLi3#-5r1NK z2Wa@N2z^Oi>$lQT%@EJQ9yXtH4DX(%=vLa*E$XCBd9#z$g*+IUalv|#D`rRAIzoNU ziu96K{?)U?k&HjeE&aox&gKoF=B98ddA8&TKfK^9&a?&XbLIf8H{Hv5NELVG-_tGthRI_Q^Hl=^)4Vzr_5mM$u^|FQOR|2>|L zGI{rDSlGH7gpT&voW3uwzZGIk4?S0|h~^$2#b_ z^(4gYGwr84;Y4E@f)5q@RBexMbP?IX1v1+!e-~;l@Ue??c@6D#PIO!9Wd&|E^o8tm zLPF2a1N%lG)v1rfHv*mKL!8cePCkgciUK>n~X^DH>r z0;eoE{F|sdrP5QxXudjya!kk7eq240aDGL+u@X z-HO<}b9+{PgPFJAUluQRz}frkgO<%YGxhe;o6}ku!GWmt9*vv4Ooc~;<)0MDm*C64sKA{?%9R%S)GttP||g%%*$Z2*#8hu~WT-!Awqf=2~U2yO_z zU+{y(uV(Bp;Z=-1BJ_^}DgJTds~G#K;AepAu;9EV@I8Tl7Wj!k`Y%Ox^pk;bHPDAa zM1a&zn~?Vk`7p`Rj|A~L#_lG5Eo0vTQa=s@i;$cLNng*{V}jGqg>?;#Jtz1th~q{3 z4bb;_e2t+$5|$uZl_V@RwAv8z?@A!$SMu0DLL|H#Xp-x@1nv+xF7Qr)-xf&kF~xgK z;Ex49C-8Ry-xv6yKzgUi?;ir`|gn{0|mLkN~d5DlEXE-~a#&Hm6 z8a9qPHA72rUeswv}8QgI||5-SeNz=y~3+owE3*+$Im^Ibd9@|G7RYv${ zO*mm>ti4FXXDxI{!eh)8`e#miHl`x}o8#RV*Fw7+Ab0Fm{TDlW{~bG86P$S0ppHkD zJB9V3?*2bPIx5r$TFcvTQCV5Z7(ILHpA(DX(|=F$!Sv%LjJe`2PP}yxlD%Ws1Us5G zPNA4onsAYi6Nc`vIN zbq3|q-G{n6eJrO(J)&sSJ#m$l9ZfoQ?s@JkBc4UjrjN0ew-0|8=_E5_+Q1{*rt&@4+k^v_7 zsojGz3#dMS^EX(nB{+LjAW`cb(MU>CJ~T zuiq7F*@LQHw?2IgpTOEyxM26o@1xwqp-quv&Fhb)U5lP^>|`_AyKDAY9jx21{uAfgA12w-!98%o zhP{zvbVmCORAx{lh?X6$uhMZ9qU*<6Key|FDBi;D8BASfQ(vq*-W)mR!p#2HJd`N( z0`v&e*v12gBEdtK9zPU0e(0}ne(=YGYrE^#wMxi898Z7mj|Zj}}#&0oVf z8jqg$Dgur}iOBIcA##-w*_tFWRYcx8)Vu=;hxSu4bla}xV{Xf?sLAooq#T*ZA#T|l zX`^@cM%aG=`wTp1-~fTex3Mmv8#a(^J9O#m?b+luKLE9F>_>f?>)N`sHg5;HDe}M{ zA`eK?r6CtKN9*y zJoMg2C_kwfxP?w$PooZcjrx>EMQBt)cidi+>+%6k>9KgPL(m_JypkyY6}rS2e0Jp6 z)w;lWudqOryi4nQ0Qy=Z4>a#`H$AcY{r>KO7yrH~a+HzUt23;Rj)V`bd$->DLuh#PUl@Q! z95_4Dc6DlNr0tV~?P;yeOh7;06gkowIpRjz+WWW8JG!%~va%AR3VQSIzx#H7+JDnC zBM!i_=DH)$c*MD8)JZ~{UfBJ4{}IPFJrVZ@N1^LqiaxM6av1IGv|sQA^K3e>c~((t z~3DV2WjpB zJ6k5^g68#yoon~fRiTzAVJiE0MLa9mGN@bDCzrOF(PWh6c;_WR2Ic zji$x!gPHC%cenTZ0+o4v%jSx|U-IQkxg_c^$D?v5V)6N!RXxYnf|I3ZicC&x#wbJ2 z#0RsaWbX`;w1RAA+hfW`nG4(MW$nd*k^KKu*I?w)b9r+gYDKrv7nls1!#XKe(0Xeo zu3Bxen7Kdw+${J`Dikwqb1$oh7kjl9T;PgD@xxknu?{*_EjjUrT5d7oo0|vVB3`xD z<{(H|T@F>7o7bVgbx89%wY53jNDtQ1Ey>bM^Ga)(q|(6gwC*YGr6sIk+!EFxIuf}( zi@YRNNlAJ!y;=J{p@BM!l69tcsx#fX^WWFgovZ!7uLTxz zlOpM{)JNeor~N86L5!=?6S2&;2eDY>T?(Dr3(G>Un@_}Y+ty($NBX0B#W=Wxdsd{$oi_~2uHO~IylcB2SKsdD=HW;%Het{>Ba*3?VxgAnz}7YB z)pqQki5et@TIOVR}-P@%i%2> zb8@rM8tJ2N_@d*{jFTe4YjB$c@c@Ra)VK%}*3Z@nJ|vuPZ&W6jmOT53wVmYBjePbK zO(u!?tU}(8hguFMBIW5%PZ25F$9+5wjN8DQtj*06p(EZg;)a{Fg(szPMP<^;y=l$s zGo6^>N0az$JrwSpDj9#D8*9H{>m}b!W$N2GxSV%Ldm~3t-WO|3ZRBj}S-1T?;jhEV zCS&Z#ZCn0tEi_ROYIztDfgC1ES=9?oXmST&1JX`YN!&QO(I9?((LwF!L7`bzZHlxZ zlI-;n)RA4ZeKG}p;oKp~`ihB|-W;qrBf(bOX)q^|2>~SFo`$dmYgMf6LM^X@&;c7p zOBSMN|K-E6@L~a21n)lVZ^d$P_sh7s)eG9gSnUmJs!`>*-QIy;EPm_L{rnDVwcE=9(za|RU!SYVu!4Lt57}xT1sQEE;7Tldb zgDu+4<%2&v)Ms!qwEe|Q?2M8JV6}vN_3=by{+p23CP0@I=85VKfv*kjRFL7n*O+k{ zpEa-VW|^=A z**z1-vDWF=zmDv27Op!BlH`R%dfUUMs4o~K|HZmomUic0WrQW|HNAmYv2g<^82Y;Q zq7Iez#hiDSW}cjIj$VbQV}Wj zYi8>_6o1^^he(_FL^LB|@s{=p`e|ic)WIX!r}fRH&PnnY?b&8c744G9Xw8bw(%mSx z?do=ED~tnrqIcts#~bfyNB@&?;J$m3dc@uu+!pRwkTCp+S&?YJM% zTNEA-vgKsjkIt1LWzGBI3(vaeLE`}N)_CKsgg;Nalj3!U)Gq$eN#DrIvnOlFzljyx zblc_j)9)pE*vW%qZrjbKCa1B}F1KsY-7(-N?q_c_6~;i6f12!Ec}8*Lg?k1(d^xr` z_j(2|MqKxRzAx1)Q@A~m5;Q4#1r|ljw{81EgEPQ;ESCPeg%wiB_VZSTgN&KYuqp-$%`JZ6FiI0tP! zc+zs*8ywn?$KgGF2Zs6ci{619b)qSrjgCHTKY90bfzhk2$yEI`R@=Z>uLA>naokPf z9YDQ_DbAYnk#<@YxS?!&udAL(aMS|(lE?HA7Hat$9IacSPn*wU>h>i6ug`VY4m-JB zu(BA16?`Wf4tIF7V}2bKY3ocZX>o)g;{^W5E_UH!Z{u%H-jg@RcP5BV(>Bo5;xyji zIK}7Yn0fV{L>uomkMIf0`mn>z3!b>aETa>TGV!tGV6g{`|O-nxuJ+kz(=6|@+ z)aHNqqB-q@F#g@NWe>ctc>{m>lr>nn$;-hJiJ+IEHv+u-Ai+a-BouV^6zmI)Qt_uq z2%3d$KRc3$MwsR4V*2UNcCgUQo~LR5UmyIy^N4`S;i!J_8BTO~9qzc_<>P|WH0;R_ z3jYfi-SW<9TofIi(*4Pj8>F~9VdKYSrfnsM;pQ` zD#BHb6=l(i#&EQ{te$MkudQfmiZdG;!xdkNmDMtjN2b0Z+JPUbt*EQ0k5VW+^@?Z( zF2eIF>KYoa2+yl&sw<1GtS)5Q1!c9dil*>VnyrqM1MGP}OAroJY61+V8ec)%=u;Wo#_?OT~|{NFG7B8S#3>u zct&kQSv0()v8*QQETw|*;_8M*y0|>NIJRaDuEW!7n#xwxR+Lk>k>#oAe3e3s%%bJ1e}P^N$l=QqdGeq=aXb)zros(OU4? z?5g^PMjb}Zj9C53C`*D};o`=sm}&STr@pM-sj07YX3w9o0BIX;yTh3>HRPn?`oxKA zul>~5eIavzJb%Yi!_I0A41TgT7vDaEpWM~cam6p9-h3ZOy*LXX1314Auv)Zoxhkf}KIB63X)^+W3P&{y%hHIxd@ z*PZmwph7+9`i}rpS%59?Vb}cz%i9YtIH4^3xS=Wd^@YmdQGaL{+c#8AABBFQWzIl( zu9JQt+vjoDzXZ8csUmY3t8Hqr+wFFYS_gpTgnrK)p}&FQ3r$AT`9pt&7XzUekf=hx zLpdp-RVXJl)B^dSlio&apL6}+r*0~;)*f)(!4L_pLfxFuL|nR|HPGmD(ig)S>J``T z12dIES$Ct5J?d3A_$H|A&5W6YZq_rOD8( zN#JlN=V^-m#qB=-bdqw>jDeja|%_J7xkWjU!|r`WaBHaeet<;Q4l#P(aUbc_KM`xdno+!@*lQh-?CzTFa}a=1p1ykKA(K$ z?}h4V|2$#EdO4{NQtZo!bN9@A^5I5^^_+tUbkCCZ<>MWl@t-zh&`E7)#!Tv;m`}d) zFK5Q(H0*4tCLh@8jN_qBd(4j^0M|V~r2cdA$yffXt=J`2tgDkcmtu=(*ra^&m4Aa3 z+i1md5dRb#K(WdB_=8CjQGcOj|&mM?s>W7d%DR1E7sRZ-9@n?ik+WJzDMj6 zE7spheV1bAQfx{t`O=%_kW<_-V-Z3@*S)8c8pd_c+c0psQ}fAJey;eni!QWcsZQ!l zit!yLcUnIA%FlIv&%NYKm%hVQea|=O|A+)0*YG_bMLfDQg~OwjJ-0BTW=XCVaC!yY za7yq)=rzdeG0t%Zr(|(D?Oll;o6?o@rjz#^>sXlL ze?*(L2dw;lEOJ4rngwFsaIBhG;I=+5aX>gfHRboi9H&XMrlaD0zlvA^yDx`(AKs?v zvj7+F*{LbJA=g{W)yCz{P90?B`t@cf8#^eE!t4MMZPyuQhq6@ zXW4uMHn5C2DY-X6`Z46~r^_VOzdlySq@ssRow0hk1?+(Xo}|r1Cd&$Bxmag;HlC#@ zW!&xJrXbx?lrnpgrlU^3Nr(*hO_g%yK*uTI^|o7~t?zxb{!LZHa?xCUGnntNr2~Dx zPxrs2ib}MeVBf9u(%Y6!H|}{yjWE^B?7NpyaYUVAs+rq&A5Hv|8aozz-_~AvZ!rJ6 zs*r{Iw$|pYU~sirx;pPol;ggqvZv_s%JY^p{e4Sc23PzU8vAvjSzA;}uQ2MMYcmgV zVQRBQotaddt!fMteOm*@`md`qr8dU;TUDX4KHXUV4K>kNpJ}ZBrkY@^&mC0bxVKwd zY6q=y+&e5)owtaAd8g9r9N*URL1inWj(eA-X*o;jx0P*Jty0qZVP|A<#nf-w?jcrouGl8>A zD+NrJ*~N$?-&V97W9$`6mk&M+^V6U!@29N8dx0E%zp?eQy!%MMZ|UWO-^I#k zIF#hgVM7j8`9^RVBQ%%3xGRuyJI1_Kx}AR>_r+a-q9k8@D=^0NTk*vvL6EFI+sLZ!@N#3^@P%rsIrpD!YYfxwRWlPuQeTPNA zV(Dtf&w?&N=0Gtd{Z7B1(LcZRr+mK$ZmF4h+mp0Y$I36`cA5y?X=(A#uPiP8dCb;B z{PSyDk4&du0n6FsPx*PS<9wvsVRfdB{7wE@B;w=VS1m0gMXP^&Qh&SIUy#%eoBcAJ z%SdsH|4bPvOw4WZ$7Aj~`fsa$v?;GT?u8KV?2{HdpG%*pDlt zC)GbLY0L~-T0D{FAD85bF8<_*?CO`^EfJaSw-IT2V}}0>I|JwuK9ul`?v0uLGHt^*^X0zI-A}&)SuiNhgo|0;D;bM9DXysvBdA~jqBMf4*F8IAjTfoKK&A;`>x{1 zanLu}&YHTH9I`a(&fxjIFT!ZX;==TrKlmmlMZxR7sixOR-T&yDCA~54V&;F-r#EIW z+hN|~2=b&am(D{a73^6fqrcY)ggxq0v<-WcYuF>w&a>Kf@t9AEfOa-e%vo1qcv*zsXJJ-0+ zafaQ(tna%Sub{8iYq>ipcRsVf?~bvi>9y+n?p%{E;PksS1p*7*6c=IrGKIJ8>yCWS zGn^N?Bc4JtV~EI`#X{_ zr^1(INHzKHv?+AIpL>-Dktx7Kp`Q{?J$yAgOriTHce;y2-!wqs|MU*G6eM0)_r8F`|mE{iUmebYWEx%iq zo1KygrM@1HzuP%oCv`o$>uih!e%GCylM z+oU;e*RCcvGo@vClubnDE;+8hn^&T12-=u4UCLFa+>GwdFf0zc1>EzxQUE%ULY<-E z(AfvNG6T@nF*Pe*fQV;{30f~r$Qf^J(v0(aPev)Z1K^(SHhKyc4O$a&dpiiOeO*1LC zPwmb6V&~B2GKTc)Oc-h?+#kYmBUoxUS@=e`cf4524@ge7MoG~Fhr%y|P?02+gS#SZ zvJt*R3efZWFK=iZ6XSEoF-?stoiVYd z#xXVZD{Eur6=Q17m^h&T;<0rFRrRqkcqrKPZw1CguUJ!&EQVp6`U_WLpmdrlqO0oG z6jrlprKL?ZRbZ4xL1So(r*Y(GmQwvNw!W;k2?EHB=UaIE#mf5+IIijv9H@eoDjyG^ z+&QWzp;D!lDA(UTxJ-5P*B7b`GWLTL+6P9|!${kw(njuABlfGbN<3`K_4lq+Ss$rj zwF*_M41bqGmHC=KHb;e!>hCt^e3ca(pi{T2>`PQ;r5a?4?Qe?BDp5UxHL5$5pu8UM z%GG=O)!6+it5Rj6gi5V#w8_`qH{VF4v3xl%u!N#USTxGnfy8G8k#guzg*9v8(ZA7h#s5*ycr`4#;KPh#da$j4m zi|cy1$|_PhZ>z35R2qxBOl1*#=j7mV8ZKaxTeS{OUaRugs^A<{Om&^7GKNmnxptXKdkpkHNO$w!1Udt5(@p-r z4%Zm1^@~>_(Myk?I-Ts&Xf* zoEBANl%Gd9q86I`dCWM+*i)%;FII!Tp}H+o1v^#O$tv@4I$T6XQgX8PIG|hbBGvVJ zhBhQZ7pv}D)rIrbnUtwiLkRoSg#iCDRRIV@H5I5-*`QJ;^XFU@BGeSA?!kLhXr>b1 z=nmi;maQ_sq(U(@x=0Nt)pMEZyG7*}s?glvw^VOrMM89%!A8&$@B6$(D3((6>l zc9r=I0$k;xuPj%&&#Ii5I;%*HrlS01YQPrNzfk4PRXI>K*r>``t>ZWNv~p{2RLb8k z7=CU4pY}6qpIfC=a6oV_ulKJ)-F4^cR-*FYvir@L5Nrm2ipocT-m3cDqttfgKC?;% zA)AIC9vn(XWt4#Ifv=8WUFIFXe9h`tMfxDHs%j zTU1&LG6l!*3nPNt>pKbtDQKi}AeEz~{1^b!P?(B&b!yR3^z}w1V;p=o(=akIAYiyE zQH6#cNT^iv0lqmZJ=QtD+c(sp$tr!annCe7>Kv1+(&XwEJ6$SWvYjsJ4!@yk3XF>G z;GBv|N17JX)njF+_^X04Q|S#~3u@jg|S;Y7nwisvcWZ zpDGTTucA~%)ceTnXQMvxF%u!wA73m$mtYd6; zNeOm0{w{gVH^qczot||E`UdBy&}22BN`<284E(|cdR&xdV^sI@o!>(ZT?U)s7=oXb z#X!~rkdlH~fq1U!b;%cz8aYn&z!Y1hdXH1XjM7)BlWsd%XKw^UOl53U7#h+ZW3|z? zm~(>z(HRH6VS3r^=pY^XZKm$Gx+9HfQRhuolP9Ysg=)waHR1*}WimO2%(zhv)IDcJ z$?3$pVE{w0>rr4pBC;?NaDe%L7w@@)*a#1C zr6#L_k|cfyvFugU)~n_89SGGMaQaU4<7-dRi{5m?rDzH+;Jh8byPoXOO6Y=VdigSR zhsxZc;Pb3|RM3A#*v!dAb^)Q6O*<54TK^oqX7le*!C6>&WS|jSRJZTy<|uhh23iis z|3#rwX=jmHq|MPItAC^7h>OxD0RnT>I6_j{LH}2FVu_R!wkDh#AL|hZ9Hn9>4}BQ& zIt+a!=#k%1-LMW_tul_N^o!KEYL$(P<#_8}k_-1zTc@bp z{VE@M?oqw(QN8X_J?~L{@3E_>;CWMM4p(BsP@1x>d&xzmkuNPRE-78Iz?^>NX;XWo)NqhP9|{)nnTsOD zOCpO(m&_`jZvOVt%Z))~Q&xrlB5(kDZ#P(x^UqTVJyRhhmMeK3uz` zVPUkfmG)m1pfD{v-vMk6ncb<<}rURY9mQR(6(7nMXxXU|_U(W$I0t7?+u z86^vfmz2(4Tsj}tOp7%(qF`1*4#?tG7q`LnI4R3>sMZ0CDw<-o(I$Pc)+yB%jU6}f zR0ZPrh|XBt)Kt+Joyr^ay0WI#qOC#~H>1YZZ($=!njfoMQPH?m%8r*iGwLL4vo%jXxG)l`zQ!OlOf*c90cV430Xrt7^9t(CV%$aYi*LY^hqT<<0N>PAr>SSjwu@1x0 zX*NLI3OPP)nksR4+BiTPXwH(yGeAN7nlYdcPFFO}XlOKtyKO-_xKI>MTPG@IoHeUr zoui`#`x522?#$p>k!5Hldc%|59;q*`FE@oDUa;?wNf+eN%BQp^~GfZwzb&Lro zg%omVY3;k>MT-!IOBR&s3(x*aQa0`HPK`%1HZHBAkTPJOJdv_sS`Ub0|O@yrM#mUYu1*koQ!FdWmd&GnaJH7i%kYY5JoXk#f{ z=9s~z^XBJ>)k#N4biqhHB2!B&o>yE_k~GYjc+nOuM$6QoiLja1s9&^jR^TOzCT#NTQ)t|pKJZZNV>jwGJS!HbwOlEy0fPmIP?eo`?qku>pjBE7a? zC5^#47D_5GBx`q=d1LAPx$_rXINt;WV}be;s|FY_6{Esxl!Ts96|Htwnzc+R9t>c- ztgLkY>*o&U2?U-HV7Nt9N}~;>Yq&^>yB&jtxt@pd2tz_VA$cmd6D{JWs??77x{5PO zif1mykZlUUyukHQDPH6%Z7N%9=lYY}?cimt(x#PVTn)gFvD)&|6&12##M2Ar)QZH9 z$!ix5*%*-O%GOyGHY#O0vkSnJ=P}bP9n?wlcvg^lnAJ*)%gg6ARn4x{qkd(Ltq|Hw zuXFgGTf$`(RdILfK(JoxxIEDT!qM*}za&B@*~a*!jewQ~wDx|o6xK-aOMK$igELnQ zj_C#qDj9eQd-Z^zYdO85vJ9(YCNGNBVt6DU#0f2yvM! zo?^1raT(b5%tJh#I^H)r!boqy*B++u%J|2*T8J_~#MhqE@XB0e)abIFgN!`@;+65W zCdxVn8GHC7Nv0(slk4Je3Lkz_)?4p7BQqRqz9M3e7R6;EH~5K392NSuP0;`AXAnMV^c zz3_b3o+?X{c|0LA88Y@nTawJ32^qelVNcj4$?Q$Y@Qn<6+Am3FXF`T2v+T)4uZ;hZ zM2zqhn?1RiBy)*RD`GtJjXis6G%n-&T(?#j>6v%{ZqLES)6rJ`_Cz`3A!E{;<7nG*>;dmv*^t$SsBpC;^SgN!{- z@0IbVCdx`j%=dy}d|Mz%rhB3+z8PfSk4TaklJM~o$k=x;;xfJqw2#>aQKZ|~IpXOT zn+}7+D$X~MZeJCNr=ty+_5jlC>nGl{Fw*#9j(w%Yo91gw_~962?CUd0GT$;Xv@aJ& z?Ch&JahavYKBkXHx_zZ5p6+Xi#}HrHvu^>#)7jrYF=gPWva=2{{JJIIiRQ;7v3S#bYc%2dC8ZxXxl-&^Qj~48RxRqv;{Q z!T90`m8K^Ei}0mp%1;GO#1|(CH9Zfw5MLbO)$}r8IlerPM)_)B6kjWU1+IB85GU|- z`X=BV_|j6!-v-={uhsWGTt9?w9==TfIq)#PX9@ijkZ=9<75WH}V>galX?Y&j;mdtW z=nPyh$CrMfzTUX5#@CiN9M@Ol%XVY>cwBG57Y7zKJq6b{BXS!+(CLRXgg1k-Uiyv38eY&W9)cK`U%i` zV5=#=WBk$UiH~2`+Do(6iH~1<-Am&vmgnQgIacq-@9-V+#K-U89GU0i*HM^Y_;vJq zX}el7yyX9?#y*0|c|Lw{UJ(}SjCXOJ-wVzDl!Ykx6KMK^@kjbY(2ONZp8(BL=_#gn zL&oiB!vR7M0=)+`UyWlr=O&sF7J3HgFld{;gz56h_H}jm=Dz)K4BF6vzKJvpWS`8& z#Wv8pan1D}=^uFHvwdmKuR+`O9@C!%ZP#|B-vMpcaioufwre)h87vE5uDwY2!L?my zksb}&u7OCO2imSLNY4jtKdjFMpzYd%>2;v(I)e1ApzWH0^bXK={wKW`w4LiozX{sT z>!d#cZRc>(nP@mWUz5gx!uZ@wIs)3x!=y_=+c}ps-{ZFPD`~#GZRb+b+dgdhnew|`i6kE zb0g^@&~`2)ZB7(oi^1L@nvFZ&H{ssTyCuzALHQdvabdk@D6)7&Vs&7j&|Y?YERuMF zCE4P)mqI7Dk5J%A4=Z?YX;pV}3!n4=<0Na7H${r|etldU42xgK_W@u6{%B1SY4_uh ziU%){vb#gpY}w^VzM1#zatr{(k}hQ9Aj z?6nk*^X%Oej`eH^6&9I7^)7;W%I0}I;o)-M!IN@|Etb>npqP?QD-z#i>F|hB*DPsE zQFD@>CumOGg`Ta+#4|bgE3tn9!uxCjB=)2i+dnrHR|KYKx7J9>E~+lkaIlwMTDorH zgu*JE;9aw_G+G_2UtPFjol`oqWWiKCu3a!=#^MMb>=omQP^p8h5WQ`pHE55R-5x$v zOYk~VS>_dpyUU{@{@{o`%ft8RHDx6~?bMQq$CaA&)cfRJYO@WdpRRJt4x1{b1kd)E zDaXq`&65;eZBORe_E}WN1Z|aPW8368IXFCg`}oJB%GhQ%s83G#_q)&Ddg-TUhy-j( z$J@kH7n5?5%_lvXg;Aa-?Yc@{n$H5XrQWzr+5_&eC)i0ymLnw1(Q=+JU%JMLR+KeP zZ@3)0-+CzS_;}pY=lQG+AFi2w)A2e8uuBB@VZgu)%-@2S2u2036Wk*BZNZ0tzL}1* zk2u?Lo(EE23f587pAIBF6G;7+3DybTAb6|bcLjec_%x9E|4xLy&wS(z_dxYA0r=fX9|A~Y3Nx9q@D|al&dG6hx==$L;gA-_1s1p^4oxv z|1Oa7I|LsV{I%d-!RH0vA>sz$Js|ZS7yiEl{kTn|z6`;9Aj>TRvfK$kmOGp23h_uj z^eiKdd=QmLXQPf?kwR?6MDAL%Yn?tSEiZoa-pvWGGD9kw-ZtR_kk?`r;`4# zr0)Y#&mq!tV5iW>fz811yb%y++# zL*L_qdw|sQD$`N!>p+(Kwxk~w{HLIc+kDE0fh>0@kma65oQpR*g+E*P7YqL@2Je+0M<&FT7|2NXe|1psHyI}i-^G6RL`F%)(UqFQ2XAA#);V%?^75S*o zTEVM<)c+{cXFJZXfvnFyrbF*Lg4bgsg!Hd~toLpp)YRBJ0L$ zxhn*#fz)#)(^2jQAj`dh>B#>z!8-)`wlVqph|u$r;9G+40;z8-HajV|TJRTw?+IpN z^Ofm6fV6wK(1k)53(gb%Vxh~3sNXvBQT~mBn}IC%9;Txn-vhE9KbG`|1@{O(1El;% zLZ@T%nEJ*D&Jvt2SVx4tO+eavJrVJ}Rrt3H|A)eVNccO2|E%!eCLiT|AovN8cBJJS zyF)3jM0!>%w1yhZxkqNpOeYQ-aS5 z4#cK8%NY)2Ip+{j?-{}`5q=pF{h&_xO~P*>LVkqboZv;OT42DhqZa~V1fz&?~Nd2=UeUV_9U=@(^Eu^(EA>cdjD52FwF3?faDJ)UEw&Rfz&e*$nuH>X9_M9yg=|W!8*Zpz(6J9 zlvsuJqwwz){)5D7+>Zc#3lS$o#LF{4misc0<-Q^OcZ7db_#X;>CYUnZ$Y%=X2@V!4 z6r3nHRd6Yge!B$7aw~xJ!&jKDaKFOzSs0ImznOg4bsPC5xKAVvxgV0Ah4n3Ir0*n+ z^ruN9{W;RJ9OrkWSufH^f1fnckCC2*aRJEkQ$`rM9O7g=O8_!`7-__RfzamwDL;*T z=uL637cdt0Kg98T{$&u$GEHN8cU+%&R_308_7*-|pwquBc#UAQ;MWAV3I0g%5y3rz zZwvla@MFQx1pTflr;A{gAfHFm-ob*S1d9ZV1s4f^S&+|;neQq=K4&KVZNUcwcM85J z$n!pw`-dQ(50Xw1*@8U#L%N^fV8M}sMS>FqCksv!EEilQxJHoAimCT%!Ht49 z3Em?3O~D@s?iAc5$iGQVJv{G2d`a-2;2VNR1m73@Krq{H^7RtzCpbiq`()G`5nL=- zCfFdjUa(d0PC-5sW&Vc+pA>vi@UY;&1iJ)`d{4o_f@1~wjFbB23N90@C!!yGlZbxv z81Y=pKScDKkBJy(|3O6lRP;SQOHC(&?k)5gLQfI;Vxg;qzE0>{g#Mw>4-5TUp19IK3w@K&-xT^W;uPF(5{ogG27yztP9;vmJV!)*rxBs=QlVD~ z-5~VULSHBJEkfTa^md`YC-j3teW_z#XcbEA%X=&$d?FxsbG!p^&eb=Joh6h z_bW+%PVg1sbKjAAKN93VBk3GL{nzL~PZN5v;7Y+J!Dhj`1i5d>a(^cDZbAOX0_y)j z(8WYUTK{P;;1Z#^@5lVBg}zFV`+b!EvEVa;FA*XCme3yvW@Q-pB0>F^yCA3k${Y0X z|5Q+4mEh%qw+sG2@E3x61z!_Gzr}-c&p&g1-UOrz0VOL{|BMl z1^+3SkNq~vjS`$BI9Koz!A8Mrh|srL=x+=DMDW*wF9^O$g#4d`{#X!y*+-Wp%^ap}&wkdyr;8?+8!9{`>6H#7`&{qiF zDflD7oq|sgA^)P#ZwY=Nn1%g2`g@>YArbQD3O!HoQo(BkZy-YMn?iq2@L|EH1z#XS z?vFzMMeuXMlw6ZOln6Ttg+5#8VxbobT_#u~{B=U#BzULbcO?A*p?3+sK*YHJve0h{ z{b!+%3;n6kX;`q*{%qoSJSP#HBDhfSD@4d$BlOpV-X`=Mk{pSlkU$9OvD(THae^>BF!pHRQxJ9TZ5qdrq3wiGQ{PA8wB~c zw#nZo$iGWTntz6rI9`zJMbdn3OT0tyA;ANJ#|3*Kb}2VeaGBuM!~*Q+5espyj5r3) zDQvo;4lh9hqm2fu?Nwt%ZDF)xUDPQoFT+`?!WDP}s<5%a5KJiS^`jI(H4Uw>R9G~=hhOK@E>0zdL$8bA5?VkzfL!Iz(dYY|fz%dveQ z*F}4W;LAJ+JN>!Cql*lyZxpU6Z{@Z_ZXX5Y6Ba~Q)p-zl`a?P1^Vv^WE+ztXJtXb2 z(Z((-XUkpEL9YB1a%?-VzUouRZ4o(JPA%m2V63qpTkg$Zc>ULQljDTbjsF1JhxCWu zU$B{hMQALZ*{~n0?|v}sHPhzJgg#!#$EN)cXm7c}Z?S`dKyxiTmws~;r)Is0x zuqLw~oAzrky!v`UAMK_-#xLWF^z-;K58IEQsTZK#u*S3>rty1F(8~GB@od2gNgCze zl53kZ5^~-TW%&6RUtZe~84Wp}5wRcI$Il1&dg~EJJr*J(>wzgKUJtJ>u$|XyP!CKZ p+(*J~wwB8TQkSQhoNa6HtdoIX9u~(&vSDl} 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 literal 0 HcmV?d00001 diff --git a/tests/build/test/preprocess/files/test_StringManipulation.c b/tests/build/test/preprocess/files/test_StringManipulation.c new file mode 100644 index 0000000..0d87c99 --- /dev/null +++ b/tests/build/test/preprocess/files/test_StringManipulation.c @@ -0,0 +1,195 @@ +#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + + + + + +void test_to_string() + +{ + + + + char *result_1[] = {"0","1","2","3","4","5","6","7","8","9","10"}; + + char *result_2[] = {"500","502","504","506","508","510","512","514","516","518"}; + + char *result_3[] = {"1000","2000","3000","4000","5000","6000","7000","8000","9000","10000"}; + + char *result_4[] = {"9999","8999","7999","6999","5999","4999","3999","2999","1999","999"}; + + char *result_5[] = {"1000000","2000000","3000000","4000000","5000000","6000000","7000000", + + "8000000","9000000","10000000"}; + + + + for(int i=0;i<=10;++i){ + + UnityAssertEqualString((const char*)((result_1[i])), (const char*)((to_string(i))), ( + + ((void *)0) + + ), (UNITY_UINT)(17)); + + } + + + + for(int i=0, j=500;i<10;++i,j+=2){ + + UnityAssertEqualString((const char*)((result_2[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(21)); + + } + + + + for(int i=0, j=1000;i<10;++i,j+=1000){ + + UnityAssertEqualString((const char*)((result_3[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(25)); + + } + + + + for(int i=0, j=9999;i<10;++i,j-=1000){ + + UnityAssertEqualString((const char*)((result_4[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(29)); + + } + + for(int i=0, j=1000000;i<10;++i,j+=1000000){ + + UnityAssertEqualString((const char*)((result_5[i])), (const char*)((to_string(j))), ( + + ((void *)0) + + ), (UNITY_UINT)(32)); + + } + + + +} + + + + + +void test_generateCheckString() + +{ + + + + int numbers_1[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; + + char *strings_1[] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; + + char *result_1[] = {"0=a","1=b","2=c","3=d","4=e","5=f","6=g","7=h","8=i","9=j","10=k","11=l","12=m","13=n","14=o","15=p","16=q","17=r", "18=s","19=t","20=u","21=v","22=w","23=x","24=y","25=z"}; + + for(int i=0;i<26;++i){ + + UnityAssertEqualString((const char*)((result_1[i])), (const char*)((generateCheckString(numbers_1[i],*(strings_1+i)))), ( + + ((void *)0) + + ), (UNITY_UINT)(45)); + + } + + + + int numbers_2[] = {0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025}; + + char *strings_2[] = {"z","zy","zyx","zyxw","zyxwv","zyxwvu","zyxwvut","zyxwvuts","zyxwvutsr","zyxwvutsrq","zyxwvutsrqp", + + "zyxwvutsrqpo","zyxwvutsrqpon","zyxwvutsrqponm","zyxwvutsrqponml","zyxwvutsrqponmlk", + + "zyxwvutsrqponmlkj","zyxwvutsrqponmlkji","zyxwvutsrqponmlkjih","zyxwvutsrqponmlkjihg","zyxwvutsrqponmlkjihgf", + + "zyxwvutsrqponmlkjihgfe","zyxwvutsrqponmlkjihgfed","zyxwvutsrqponmlkjihgfedc","zyxwvutsrqponmlkjihgfedcb", + + "zyxwvutsrqponmlkjihgfedcba"}; + + char *result_2[] = {"0=z","1=zy","1=zyx","2=zyxw","3=zyxwv","5=zyxwvu","8=zyxwvut","13=zyxwvuts","21=zyxwvutsr","34=zyxwvutsrq", + + "55=zyxwvutsrqp","89=zyxwvutsrqpo","144=zyxwvutsrqpon","233=zyxwvutsrqponm","377=zyxwvutsrqponml", + + "610=zyxwvutsrqponmlk","987=zyxwvutsrqponmlkj","1597=zyxwvutsrqponmlkji","2584=zyxwvutsrqponmlkjih", + + "4181=zyxwvutsrqponmlkjihg","6765=zyxwvutsrqponmlkjihgf","10946=zyxwvutsrqponmlkjihgfe", + + "17711=zyxwvutsrqponmlkjihgfed","28657=zyxwvutsrqponmlkjihgfedc","46368=zyxwvutsrqponmlkjihgfedcb", + + "75025=zyxwvutsrqponmlkjihgfedcba"}; + + for(int i=0;i<26;++i){ + + UnityAssertEqualString((const char*)((result_2[i])), (const char*)((generateCheckString(numbers_2[i],*(strings_2+i)))), ( + + ((void *)0) + + ), (UNITY_UINT)(61)); + + } + + + + srand(time(0)); + + int random_number=0; + + char *random_numbers_strings[20]; + + int random_numbers[20]; + + for(int i=0;i<20;++i){ + + random_number = (rand() % 100) + 1; + + random_numbers_strings[i] = to_string(random_number); + + random_numbers[i] = random_number; + + } + + char *strings_3[] = {"tree","plant","tea","programming","assembler","unix","BSD","snow","mountain","table","wood","forest", "calculator","book","light","keyboard","old","paper","pencil","voltage"}; + + char *result_3[20]; + + for(int i=0;i<20;++i){ + + random_numbers_strings[i] = strcat(random_numbers_strings[i],"="); + + result_3[i] = strcat(random_numbers_strings[i],strings_3[i]); + + printf("%s\n",result_3[i]); + + } + + for(int i=0;i<20;++i){ + + UnityAssertEqualString((const char*)((result_3[i])), (const char*)((generateCheckString(random_numbers[i],strings_3[i]))), ( + + ((void *)0) + + ), (UNITY_UINT)(81)); + + } + +} diff --git a/tests/build/test/preprocess/includes/test_StringManipulation.c b/tests/build/test/preprocess/includes/test_StringManipulation.c new file mode 100644 index 0000000..77ded96 --- /dev/null +++ b/tests/build/test/preprocess/includes/test_StringManipulation.c @@ -0,0 +1,3 @@ +--- +- "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" +- Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.h diff --git a/tests/build/test/results/test_StringManipulation.pass b/tests/build/test/results/test_StringManipulation.pass new file mode 100644 index 0000000..84a7b10 --- /dev/null +++ b/tests/build/test/results/test_StringManipulation.pass @@ -0,0 +1,42 @@ +--- +:source: + :path: test + :file: test_StringManipulation.c +:successes: +- :test: test_to_string + :line: 6 + :message: '' + :unity_test_time: 0 +- :test: test_generateCheckString + :line: 38 + :message: '' + :unity_test_time: 0 +:failures: [] +:ignores: [] +:counts: + :total: 2 + :passed: 2 + :failed: 0 + :ignored: 0 +:stdout: +- 9=tree +- 26=plant +- 92=tea +- 31=programming +- 75=assembler +- 28=unix +- 92=BSD +- 99=snow +- 10=mountain +- 43=table +- 92=wood +- 98=forest +- 3=calculator +- 32=book +- 29=light +- 92=keyboard +- 35=old +- 27=paper +- 85=pencil +- 91=voltage +:time: 0.0019293400000606198 diff --git a/tests/build/test/runners/test_StringManipulation_runner.c b/tests/build/test/runners/test_StringManipulation_runner.c new file mode 100644 index 0000000..8c93227 --- /dev/null +++ b/tests/build/test/runners/test_StringManipulation_runner.c @@ -0,0 +1,89 @@ +/* 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_to_string(); +extern void test_generateCheckString(); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + GlobalExpectCount = 0; + GlobalVerifyOrder = 0; + GlobalOrderError = NULL; +} +static void CMock_Verify(void) +{ +} +static void CMock_Destroy(void) +{ +} + +/*=======Setup (stub)=====*/ +void setUp(void) {} + +/*=======Teardown (stub)=====*/ +void tearDown(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_StringManipulation.c"); + run_test(test_to_string, "test_to_string", 6); + run_test(test_generateCheckString, "test_generateCheckString", 38); + + return UnityEnd(); +} diff --git a/tests/project.yml b/tests/project.yml new file mode 100644 index 0000000..7245e5e --- /dev/null +++ b/tests/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.1 + :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: + - /home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/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/tests/test/test_StringManipulation.c b/tests/test/test_StringManipulation.c index b8ca872..accd414 100644 --- a/tests/test/test_StringManipulation.c +++ b/tests/test/test_StringManipulation.c @@ -1,5 +1,7 @@ #include "unity.h" #include "StringManipulation.h" +#include +#include void test_to_string() { @@ -12,27 +14,70 @@ void test_to_string() "8000000","9000000","10000000"}; for(int i=0;i<=10;++i){ - printf("%s\n", to_string(i)); TEST_ASSERT_EQUAL_STRING(result_1[i],to_string(i)); } for(int i=0, j=500;i<10;++i,j+=2){ - printf("%s\n", to_string(j)); TEST_ASSERT_EQUAL_STRING(result_2[i],to_string(j)); } for(int i=0, j=1000;i<10;++i,j+=1000){ - printf("%s\n", to_string(j)); TEST_ASSERT_EQUAL_STRING(result_3[i],to_string(j)); } for(int i=0, j=9999;i<10;++i,j-=1000){ - printf("%s\n", to_string(j)); TEST_ASSERT_EQUAL_STRING(result_4[i], to_string(j)); } for(int i=0, j=1000000;i<10;++i,j+=1000000){ - printf("%s\n", to_string(j)); TEST_ASSERT_EQUAL_STRING(result_5[i],to_string(j)); } } + + +void test_generateCheckString() +{ + /*test block 1*/ + int numbers_1[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; + char *strings_1[] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; + char *result_1[] = {"0=a","1=b","2=c","3=d","4=e","5=f","6=g","7=h","8=i","9=j","10=k","11=l","12=m","13=n","14=o","15=p","16=q","17=r", "18=s","19=t","20=u","21=v","22=w","23=x","24=y","25=z"}; + for(int i=0;i<26;++i){ + TEST_ASSERT_EQUAL_STRING(result_1[i],generateCheckString(numbers_1[i],*(strings_1+i))); + } + /*test block 2*/ + int numbers_2[] = {0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025}; + char *strings_2[] = {"z","zy","zyx","zyxw","zyxwv","zyxwvu","zyxwvut","zyxwvuts","zyxwvutsr","zyxwvutsrq","zyxwvutsrqp", + "zyxwvutsrqpo","zyxwvutsrqpon","zyxwvutsrqponm","zyxwvutsrqponml","zyxwvutsrqponmlk", + "zyxwvutsrqponmlkj","zyxwvutsrqponmlkji","zyxwvutsrqponmlkjih","zyxwvutsrqponmlkjihg","zyxwvutsrqponmlkjihgf", + "zyxwvutsrqponmlkjihgfe","zyxwvutsrqponmlkjihgfed","zyxwvutsrqponmlkjihgfedc","zyxwvutsrqponmlkjihgfedcb", + "zyxwvutsrqponmlkjihgfedcba"}; + char *result_2[] = {"0=z","1=zy","1=zyx","2=zyxw","3=zyxwv","5=zyxwvu","8=zyxwvut","13=zyxwvuts","21=zyxwvutsr","34=zyxwvutsrq", + "55=zyxwvutsrqp","89=zyxwvutsrqpo","144=zyxwvutsrqpon","233=zyxwvutsrqponm","377=zyxwvutsrqponml", + "610=zyxwvutsrqponmlk","987=zyxwvutsrqponmlkj","1597=zyxwvutsrqponmlkji","2584=zyxwvutsrqponmlkjih", + "4181=zyxwvutsrqponmlkjihg","6765=zyxwvutsrqponmlkjihgf","10946=zyxwvutsrqponmlkjihgfe", + "17711=zyxwvutsrqponmlkjihgfed","28657=zyxwvutsrqponmlkjihgfedc","46368=zyxwvutsrqponmlkjihgfedcb", + "75025=zyxwvutsrqponmlkjihgfedcba"}; + for(int i=0;i<26;++i){ + TEST_ASSERT_EQUAL_STRING(result_2[i],generateCheckString(numbers_2[i],*(strings_2+i))); + } + /*test block 3*/ + srand(time(0)); + int random_number=0; + char *random_numbers_strings[20]; + int random_numbers[20]; + for(int i=0;i<20;++i){ + random_number = (rand() % 100) + 1; + random_numbers_strings[i] = to_string(random_number); + random_numbers[i] = random_number; + } + char *strings_3[] = {"tree","plant","tea","programming","assembler","unix","BSD","snow","mountain","table","wood","forest", "calculator","book","light","keyboard","old","paper","pencil","voltage"}; + char *result_3[20]; + for(int i=0;i<20;++i){ + random_numbers_strings[i] = strcat(random_numbers_strings[i],"="); + result_3[i] = strcat(random_numbers_strings[i],strings_3[i]); + printf("%s\n",result_3[i]); + } + for(int i=0;i<20;++i){ + TEST_ASSERT_EQUAL_STRING(result_3[i],generateCheckString(random_numbers[i],strings_3[i])); + } +} From 79573d2381b7d1231d8a051eb12187e5197c0c52 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Fri, 20 Jan 2023 15:29:20 +0100 Subject: [PATCH 15/20] refactoring: rename variables for better understanding, write comment to explain function generateCheckString(), optimize intendation --- src/StringManipulation.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/StringManipulation.c b/src/StringManipulation.c index 6f671da..cd2ad2c 100644 --- a/src/StringManipulation.c +++ b/src/StringManipulation.c @@ -11,13 +11,13 @@ char *to_string(int number) } else { - int cpy = number, len = 0; - while(number>0){ + int cpy = number, len = 0; + while(number>0){ ++len; number /= 10; - } - char *str = calloc(len+1, sizeof(char)); - for(int i=0,j=len-1;i #include #include +char *stringConcatenation(char *, char *); char *to_string(int); char *generateCheckString(int, char *); diff --git a/src/docs.txt b/src/docs.txt new file mode 100644 index 0000000..c76de12 --- /dev/null +++ b/src/docs.txt @@ -0,0 +1,14 @@ +char *stringConcatenation(char string_1*, char string_2*): + +This function takes two char pointers. In this function a new string is created. This new string is the concatenation of string_1 and string_2. The size of the new string is the length of string_1 plus the length of string_2 plus one for '\0'. This function is needed when creating an unique check string for a customer. + +char *to_string(int number): + +This function takes an integer variable as its argument. It returns an string that contains the digits of number. For example to_string(176) would return "176\0". This function is needed to write data in form of characters into the customer file. + + +char *generateCheckString(int customerID, char *password): + +The purpose of this function is to generate a string that is needed when a user wants to login. This string is searched for in the customer-data file and if it is found, the login is successful. This function is needed when a new user is created because then it is written in the file for the first time. +The format of the returned string is [ID]=[PASSWORD]. +For example generateCheckString(177,"tree") would return "177=tree\0". From 3e76d660b0f0bd9bf003b2b7c5261c173a442a9a Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Fri, 20 Jan 2023 17:22:16 +0100 Subject: [PATCH 17/20] implementation of checkLogin() --- src/LoginCustomer.c | 5 +++++ src/LoginCustomer.h | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 src/LoginCustomer.c create mode 100644 src/LoginCustomer.h diff --git a/src/LoginCustomer.c b/src/LoginCustomer.c new file mode 100644 index 0000000..c9b956e --- /dev/null +++ b/src/LoginCustomer.c @@ -0,0 +1,5 @@ +#include "LoginCustomer.h" +bool checkLogin(bool loginSuccessful) +{ + return (loginSuccessful) ? true : false; +} diff --git a/src/LoginCustomer.h b/src/LoginCustomer.h new file mode 100644 index 0000000..7f0f8f9 --- /dev/null +++ b/src/LoginCustomer.h @@ -0,0 +1,3 @@ +#include +#include +bool checkLogin(bool); From dee4af27ad2c27bb8076081a84eb876e98d152ab Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Wed, 1 Feb 2023 10:01:11 +0100 Subject: [PATCH 18/20] solve merge conflict --- tests/build/test/cache/defines_dependency.yml | 4 + tests/build/test/cache/test_LoginCustomer.c | 297 ++++++++++++++++++ tests/build/test/dependencies/LoginCustomer.d | 3 + .../test/dependencies/test_LoginCustomer.d | 4 + .../dependencies/test_LoginCustomer_runner.d | 4 + tests/build/test/out/c/LoginCustomer.o | Bin 0 -> 2804 bytes tests/build/test/out/c/test_LoginCustomer.o | Bin 0 -> 5684 bytes .../test/out/c/test_LoginCustomer_runner.o | Bin 0 -> 6640 bytes tests/build/test/out/test_LoginCustomer.out | Bin 0 -> 57036 bytes .../preprocess/files/test_LoginCustomer.c | 297 ++++++++++++++++++ .../preprocess/includes/test_LoginCustomer.c | 3 + .../test/results/test_LoginCustomer.pass | 18 ++ .../test/runners/test_LoginCustomer_runner.c | 81 +++++ tests/test/test_LoginCustomer.c | 63 ++++ 14 files changed, 774 insertions(+) create mode 100644 tests/build/test/cache/test_LoginCustomer.c create mode 100644 tests/build/test/dependencies/LoginCustomer.d create mode 100644 tests/build/test/dependencies/test_LoginCustomer.d create mode 100644 tests/build/test/dependencies/test_LoginCustomer_runner.d create mode 100644 tests/build/test/out/c/LoginCustomer.o create mode 100644 tests/build/test/out/c/test_LoginCustomer.o create mode 100644 tests/build/test/out/c/test_LoginCustomer_runner.o create mode 100755 tests/build/test/out/test_LoginCustomer.out create mode 100644 tests/build/test/preprocess/files/test_LoginCustomer.c create mode 100644 tests/build/test/preprocess/includes/test_LoginCustomer.c create mode 100644 tests/build/test/results/test_LoginCustomer.pass create mode 100644 tests/build/test/runners/test_LoginCustomer_runner.c create mode 100644 tests/test/test_LoginCustomer.c diff --git a/tests/build/test/cache/defines_dependency.yml b/tests/build/test/cache/defines_dependency.yml index 551c1ff..f90d29b 100644 --- a/tests/build/test/cache/defines_dependency.yml +++ b/tests/build/test/cache/defines_dependency.yml @@ -1,3 +1,7 @@ --- +<<<<<<< HEAD "/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.c": +======= +"/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.c": +>>>>>>> 0155f61 (implementation of unit tests for checkLogin()) - TEST diff --git a/tests/build/test/cache/test_LoginCustomer.c b/tests/build/test/cache/test_LoginCustomer.c new file mode 100644 index 0000000..5149d92 --- /dev/null +++ b/tests/build/test/cache/test_LoginCustomer.c @@ -0,0 +1,297 @@ +#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + +void setUp(){}; + +void tearDown(){}; + + + +void test_checkLogin() + +{ + + + + + + + +_Bool + + test_1_to_true = (4==4); + + + +_Bool + + test_2_to_true = ( + + 1 + + == + + 1 + + ); + + + +_Bool + + test_3_to_true = (1==1); + + + +_Bool + + test_4_to_true = ( + + 0 + + == + + 0 + + ); + + + +_Bool + + test_5_to_true = ('z'=='z'); + + + +_Bool + + test_6_to_true = ('='=='='); + + + +_Bool + + test_7_to_true = (0x1A==0x1A); + + + + + +_Bool + + test_1_to_false = (4!=4); + + + +_Bool + + test_2_to_false = ( + + 1 + + == + + 0 + + ); + + + +_Bool + + test_3_to_false = (1==0); + + + +_Bool + + test_4_to_false = ( + + 0 + + == + + 1 + + ); + + + +_Bool + + test_5_to_false = ('z'=='x'); + + + +_Bool + + test_6_to_false = ('!'==')'); + + + +_Bool + + test_7_to_false = (0x1A==0x2B); + + + + + + + + + +_Bool + + result_1 = checkLogin(test_1_to_true); + + + +_Bool + + result_2 = checkLogin(test_2_to_true); + + + +_Bool + + result_3 = checkLogin(test_3_to_true); + + + +_Bool + + result_4 = checkLogin(test_4_to_true); + + + +_Bool + + result_5 = checkLogin(test_5_to_true); + + + +_Bool + + result_6 = checkLogin(test_6_to_true); + + + +_Bool + + result_7 = checkLogin(test_7_to_true); + + + + + +_Bool + + result_8 = checkLogin(test_1_to_false); + + + +_Bool + + result_9 = checkLogin(test_2_to_false); + + + +_Bool + + result_10 = checkLogin(test_3_to_false); + + + +_Bool + + result_11 = checkLogin(test_4_to_false); + + + +_Bool + + result_12 = checkLogin(test_5_to_false); + + + +_Bool + + result_13 = checkLogin(test_6_to_false); + + + +_Bool + + result_14 = checkLogin(test_7_to_false); + + + + + + + + do {if ((result_1== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); + + do {if ((result_2== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); + + do {if ((result_3== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); + + do {if ((result_4== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); + + do {if ((result_5== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + + do {if ((result_6== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + + do {if ((result_7== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + + + + do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + + do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); + + do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); + + do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); + + do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); + + do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + + do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + + + + + +} diff --git a/tests/build/test/dependencies/LoginCustomer.d b/tests/build/test/dependencies/LoginCustomer.d new file mode 100644 index 0000000..45e2415 --- /dev/null +++ b/tests/build/test/dependencies/LoginCustomer.d @@ -0,0 +1,3 @@ +build/test/out/c/LoginCustomer.o: \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.c \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/dependencies/test_LoginCustomer.d b/tests/build/test/dependencies/test_LoginCustomer.d new file mode 100644 index 0000000..1a634fe --- /dev/null +++ b/tests/build/test/dependencies/test_LoginCustomer.d @@ -0,0 +1,4 @@ +build/test/out/c/test_LoginCustomer.o: test/test_LoginCustomer.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h \ + /home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/dependencies/test_LoginCustomer_runner.d b/tests/build/test/dependencies/test_LoginCustomer_runner.d new file mode 100644 index 0000000..1649170 --- /dev/null +++ b/tests/build/test/dependencies/test_LoginCustomer_runner.d @@ -0,0 +1,4 @@ +build/test/out/c/test_LoginCustomer_runner.o: \ + build/test/runners/test_LoginCustomer_runner.c \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ + /var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h diff --git a/tests/build/test/out/c/LoginCustomer.o b/tests/build/test/out/c/LoginCustomer.o new file mode 100644 index 0000000000000000000000000000000000000000..8cb00aec5296a1fa79d354c6f99e9afe806a462d GIT binary patch literal 2804 zcmcgt+iM(E7(Zubce8fWZ7ywXjNm9OjmXaK28p#AO*Tnm=xR!nLIcV=JDJQ*vpZAf zQWL3)mqMi|2!cLDTA@!Of)Dy6_)rx51AO*H!3SRi-;BiHclMm_WEJ$OADsDp_wStV zT;`31`WenSQ^c9hdJ<#r40J7z3z%R>*%4vSLB8r`E_@1Z!b$RHx}~O7j_SQ zy|DYkog10scWyzK!N8Zl1&6_FV8?}mu?Hn;nSml$jpvr(qVfDJfi_?hWCrp=nY$vC z*&hLVChPez)ACu$pydZ15T4mpK;|!~xR%=?6NrlN9g?zDn7MY8c* zilYU+I9?p)Be|jbVLr|Zg=e5bEy?DQ+T_oU>BZB9rwUINPL3^&lKafDk7{Fl6zQ`} z*_KANV@OP;H4N1P;z+0HGcY=PA79S@EFQ#H>;lcQ+zL8Q`BKvMlBhf%*h$CnYFYKCu*S!@E||EV`*8M={92Zu)ilhl9r&&xKGgffk383R)(sNw#cX3N zF}f#}(3f(5TkMu&Zwe(7E!emGUT6B$Xzfa3+fEd1B<)_y?3NWW@wwa1MlA^1ENTT| zZ0t)SyDYpHU$|h*Ri7}b6?4+88k3dDYNcAO7^O~}_|CNJ_)h5A5UtQ|O?y+Pri_wn zls2qr+qYX`;0H-mO8i$mf4vl2&9)QCinNDpac=IkF){BnJh*a7sFvaEYB~0 z^*rNO^L%_TlevyVOGjHBZ-KML{57q1FnjSkcrZ2u`_nSE`zA;s1#}-3W!Ud~iYL_N zWl}m_zAQaiJO@gIKfO>r(wTh7q)KP^^^D+jcA!rl?33x0>X9y1l$M8k0yv!=>XSKB z9@L)^tVi{W97nVqn@mMezy5JQQwOop*g7?3x=!4sD+rvl&H9D9nHFoJj%ePBU>E9^O}k3EpZpL+1)hS*_6WU0j}&s_prX3P62k z+Chh&US|41?3lQ@r6{)S&2Eg-YHWm72N7-L1#dHg1Fo=FePpRjW4{a8?DE|oziqSEME_UJWSLJ&Q8uI@y zzY2WB{HO?s@}=JdmG2z%iYLDpF>VthN!jX<)9d&H>$n9St%Gho<)(R2yov!Ugf+o* zKguS~X-dBagOQSz-zDhMbw8A6mg>@LqUyd0Ud4cA+Yr7WMv}6<205MYHu9Ar< literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/test_LoginCustomer.o b/tests/build/test/out/c/test_LoginCustomer.o new file mode 100644 index 0000000000000000000000000000000000000000..7889564d3c23fab840eeb96193c5102643acd17a GIT binary patch literal 5684 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 IKW^NA0Cv(lyZ`_I literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/test_LoginCustomer_runner.o b/tests/build/test/out/c/test_LoginCustomer_runner.o new file mode 100644 index 0000000000000000000000000000000000000000..1efa0098329f45793f30fa73f4997cbedd2b4014 GIT binary patch literal 6640 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 QoqTBr45LUBLDSLy1th;Nf&c&j literal 0 HcmV?d00001 diff --git a/tests/build/test/preprocess/files/test_LoginCustomer.c b/tests/build/test/preprocess/files/test_LoginCustomer.c new file mode 100644 index 0000000..5149d92 --- /dev/null +++ b/tests/build/test/preprocess/files/test_LoginCustomer.c @@ -0,0 +1,297 @@ +#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + +void setUp(){}; + +void tearDown(){}; + + + +void test_checkLogin() + +{ + + + + + + + +_Bool + + test_1_to_true = (4==4); + + + +_Bool + + test_2_to_true = ( + + 1 + + == + + 1 + + ); + + + +_Bool + + test_3_to_true = (1==1); + + + +_Bool + + test_4_to_true = ( + + 0 + + == + + 0 + + ); + + + +_Bool + + test_5_to_true = ('z'=='z'); + + + +_Bool + + test_6_to_true = ('='=='='); + + + +_Bool + + test_7_to_true = (0x1A==0x1A); + + + + + +_Bool + + test_1_to_false = (4!=4); + + + +_Bool + + test_2_to_false = ( + + 1 + + == + + 0 + + ); + + + +_Bool + + test_3_to_false = (1==0); + + + +_Bool + + test_4_to_false = ( + + 0 + + == + + 1 + + ); + + + +_Bool + + test_5_to_false = ('z'=='x'); + + + +_Bool + + test_6_to_false = ('!'==')'); + + + +_Bool + + test_7_to_false = (0x1A==0x2B); + + + + + + + + + +_Bool + + result_1 = checkLogin(test_1_to_true); + + + +_Bool + + result_2 = checkLogin(test_2_to_true); + + + +_Bool + + result_3 = checkLogin(test_3_to_true); + + + +_Bool + + result_4 = checkLogin(test_4_to_true); + + + +_Bool + + result_5 = checkLogin(test_5_to_true); + + + +_Bool + + result_6 = checkLogin(test_6_to_true); + + + +_Bool + + result_7 = checkLogin(test_7_to_true); + + + + + +_Bool + + result_8 = checkLogin(test_1_to_false); + + + +_Bool + + result_9 = checkLogin(test_2_to_false); + + + +_Bool + + result_10 = checkLogin(test_3_to_false); + + + +_Bool + + result_11 = checkLogin(test_4_to_false); + + + +_Bool + + result_12 = checkLogin(test_5_to_false); + + + +_Bool + + result_13 = checkLogin(test_6_to_false); + + + +_Bool + + result_14 = checkLogin(test_7_to_false); + + + + + + + + do {if ((result_1== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); + + do {if ((result_2== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); + + do {if ((result_3== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); + + do {if ((result_4== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); + + do {if ((result_5== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + + do {if ((result_6== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + + do {if ((result_7== + +1 + +)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + + + + do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + + do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); + + do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); + + do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); + + do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); + + do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + + do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + + + + + +} diff --git a/tests/build/test/preprocess/includes/test_LoginCustomer.c b/tests/build/test/preprocess/includes/test_LoginCustomer.c new file mode 100644 index 0000000..8d24aa9 --- /dev/null +++ b/tests/build/test/preprocess/includes/test_LoginCustomer.c @@ -0,0 +1,3 @@ +--- +- "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" +- Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h diff --git a/tests/build/test/results/test_LoginCustomer.pass b/tests/build/test/results/test_LoginCustomer.pass new file mode 100644 index 0000000..bd31688 --- /dev/null +++ b/tests/build/test/results/test_LoginCustomer.pass @@ -0,0 +1,18 @@ +--- +:source: + :path: test + :file: test_LoginCustomer.c +:successes: +- :test: test_checkLogin + :line: 7 + :message: '' + :unity_test_time: 0 +:failures: [] +:ignores: [] +:counts: + :total: 1 + :passed: 1 + :failed: 0 + :ignored: 0 +:stdout: [] +:time: 0.0017807170006562956 diff --git a/tests/build/test/runners/test_LoginCustomer_runner.c b/tests/build/test/runners/test_LoginCustomer_runner.c new file mode 100644 index 0000000..f847d37 --- /dev/null +++ b/tests/build/test/runners/test_LoginCustomer_runner.c @@ -0,0 +1,81 @@ +/* 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_checkLogin(); + + +/*=======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_LoginCustomer.c"); + run_test(test_checkLogin, "test_checkLogin", 7); + + return UnityEnd(); +} diff --git a/tests/test/test_LoginCustomer.c b/tests/test/test_LoginCustomer.c new file mode 100644 index 0000000..fc23e10 --- /dev/null +++ b/tests/test/test_LoginCustomer.c @@ -0,0 +1,63 @@ +#include +#include "LoginCustomer.h" + +void setUp(){}; +void tearDown(){}; + +void test_checkLogin() +{ + /*arrange*/ + + bool test_1_to_true = (4==4); + bool test_2_to_true = (true==true); + bool test_3_to_true = (1==1); + bool test_4_to_true = (false==false); + bool test_5_to_true = ('z'=='z'); + bool test_6_to_true = ('='=='='); + bool test_7_to_true = (0x1A==0x1A); + + bool test_1_to_false = (4!=4); + bool test_2_to_false = (true==false); + bool test_3_to_false = (1==0); + bool test_4_to_false = (false==true); + bool test_5_to_false = ('z'=='x'); + bool test_6_to_false = ('!'==')'); + bool test_7_to_false = (0x1A==0x2B); + + /*act*/ + + bool result_1 = checkLogin(test_1_to_true); + bool result_2 = checkLogin(test_2_to_true); + bool result_3 = checkLogin(test_3_to_true); + bool result_4 = checkLogin(test_4_to_true); + bool result_5 = checkLogin(test_5_to_true); + bool result_6 = checkLogin(test_6_to_true); + bool result_7 = checkLogin(test_7_to_true); + + bool result_8 = checkLogin(test_1_to_false); + bool result_9 = checkLogin(test_2_to_false); + bool result_10 = checkLogin(test_3_to_false); + bool result_11 = checkLogin(test_4_to_false); + bool result_12 = checkLogin(test_5_to_false); + bool result_13 = checkLogin(test_6_to_false); + bool result_14 = checkLogin(test_7_to_false); + + /*assertions*/ + + TEST_ASSERT_TRUE(result_1); + TEST_ASSERT_TRUE(result_2); + TEST_ASSERT_TRUE(result_3); + TEST_ASSERT_TRUE(result_4); + TEST_ASSERT_TRUE(result_5); + TEST_ASSERT_TRUE(result_6); + TEST_ASSERT_TRUE(result_7); + + TEST_ASSERT_FALSE(result_8); + TEST_ASSERT_FALSE(result_9); + TEST_ASSERT_FALSE(result_10); + TEST_ASSERT_FALSE(result_11); + TEST_ASSERT_FALSE(result_12); + TEST_ASSERT_FALSE(result_13); + TEST_ASSERT_FALSE(result_14); + +} From 5b5c4dccea4bcf6e14735dfe6846634fe512d507 Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Fri, 20 Jan 2023 19:08:26 +0100 Subject: [PATCH 19/20] refactoring: replaced variables with arrays and the consecutive use of assertions with for-loops --- tests/build/test/cache/test_LoginCustomer.c | 270 ++---------------- tests/build/test/out/c/LoginCustomer.o | Bin 2804 -> 3008 bytes tests/build/test/out/c/test_LoginCustomer.o | Bin 5684 -> 4140 bytes .../test/out/c/test_LoginCustomer_runner.o | Bin 6640 -> 6640 bytes tests/build/test/out/test_LoginCustomer.out | Bin 57036 -> 56560 bytes .../preprocess/files/test_LoginCustomer.c | 270 ++---------------- .../test/results/test_LoginCustomer.pass | 4 +- .../test/runners/test_LoginCustomer_runner.c | 2 +- tests/test/test_LoginCustomer.c | 64 +---- 9 files changed, 74 insertions(+), 536 deletions(-) diff --git a/tests/build/test/cache/test_LoginCustomer.c b/tests/build/test/cache/test_LoginCustomer.c index 5149d92..28f8ec8 100644 --- a/tests/build/test/cache/test_LoginCustomer.c +++ b/tests/build/test/cache/test_LoginCustomer.c @@ -1,297 +1,87 @@ #include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" #include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" - - void setUp(){}; void tearDown(){}; - - void test_checkLogin() { - - - - -_Bool - - test_1_to_true = (4==4); - - - -_Bool - - test_2_to_true = ( - - 1 - - == - - 1 - - ); - - - -_Bool - - test_3_to_true = (1==1); - - - -_Bool - - test_4_to_true = ( - - 0 - - == - - 0 - - ); - - - -_Bool - - test_5_to_true = ('z'=='z'); - - - -_Bool - - test_6_to_true = ('='=='='); - - - -_Bool - - test_7_to_true = (0x1A==0x1A); - - - - - -_Bool - - test_1_to_false = (4!=4); - - - -_Bool - - test_2_to_false = ( - - 1 - - == - - 0 - - ); - - - -_Bool - - test_3_to_false = (1==0); - - - -_Bool - - test_4_to_false = ( - - 0 - - == - - 1 - - ); - - - -_Bool - - test_5_to_false = ('z'=='x'); - - - -_Bool - - test_6_to_false = ('!'==')'); - - - -_Bool - - test_7_to_false = (0x1A==0x2B); - - - - - - - - - -_Bool - - result_1 = checkLogin(test_1_to_true); - - - -_Bool - - result_2 = checkLogin(test_2_to_true); - - - -_Bool - - result_3 = checkLogin(test_3_to_true); - - - -_Bool - - result_4 = checkLogin(test_4_to_true); - - - -_Bool - - result_5 = checkLogin(test_5_to_true); - - - -_Bool - - result_6 = checkLogin(test_6_to_true); - _Bool - result_7 = checkLogin(test_7_to_true); + expected_test_values_compute_to_true[] = {4==4, + 1 + == - + 1 -_Bool + , 1==1, - result_8 = checkLogin(test_1_to_false); + 0 - + == -_Bool + 0 - result_9 = checkLogin(test_2_to_false); + , 'z'=='z', '='=='=',0x1A==0x1A}; - - -_Bool - - result_10 = checkLogin(test_3_to_false); - - - -_Bool - - result_11 = checkLogin(test_4_to_false); - - - -_Bool + int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof( - result_12 = checkLogin(test_5_to_false); + _Bool - + ); -_Bool - result_13 = checkLogin(test_6_to_false); _Bool - result_14 = checkLogin(test_7_to_false); - - - - - - - - do {if ((result_1== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); - - do {if ((result_2== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); - - do {if ((result_3== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); - - do {if ((result_4== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); - - do {if ((result_5== + expected_test_values_compute_to_false[] = {4!=4, -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + == - do {if ((result_6== + 0 -1 + ,1==0, -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + 0 - do {if ((result_7== + == -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + ,'z'=='x','!'==')',0x1A==0x2B}; + int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof( + _Bool - do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + ); - do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); - do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); - do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); - do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); - do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + for(int i=0;i<7;++i) { - do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + do {if ((checkLogin(expected_test_values_compute_to_true[i]))) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(16)));}} while(0); + } + for(int i=0;i<7;++i){ + do {if (!(checkLogin(expected_test_values_compute_to_false[i]))) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(19)));}} while(0); + } } diff --git a/tests/build/test/out/c/LoginCustomer.o b/tests/build/test/out/c/LoginCustomer.o index 8cb00aec5296a1fa79d354c6f99e9afe806a462d..82cb77b53f1898426f37bd91e324cb4ef976af5c 100644 GIT binary patch delta 593 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 IKW^NA0Cv(lyZ`_I diff --git a/tests/build/test/out/c/test_LoginCustomer_runner.o b/tests/build/test/out/c/test_LoginCustomer_runner.o index 1efa0098329f45793f30fa73f4997cbedd2b4014..f839ac15db6dc490a724e363b3356e2a82b4c553 100644 GIT binary patch delta 14 Vcmexh{K0s`OGZZ4&94~QBmgtQ1)~4} delta 14 Vcmexh{K0s`OGZZa&94~QBmgtc1*HH0 diff --git a/tests/build/test/out/test_LoginCustomer.out b/tests/build/test/out/test_LoginCustomer.out index 8a1d6b840aca594c50b2cb8af06caf8d3c8f2c6a..3c7dca5801f8cdc804c4dffb9f5d46be60fb1cc1 100755 GIT binary patch delta 10958 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 G@qYlX7%#g3 diff --git a/tests/build/test/preprocess/files/test_LoginCustomer.c b/tests/build/test/preprocess/files/test_LoginCustomer.c index 5149d92..28f8ec8 100644 --- a/tests/build/test/preprocess/files/test_LoginCustomer.c +++ b/tests/build/test/preprocess/files/test_LoginCustomer.c @@ -1,297 +1,87 @@ #include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" #include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" - - void setUp(){}; void tearDown(){}; - - void test_checkLogin() { - - - - -_Bool - - test_1_to_true = (4==4); - - - -_Bool - - test_2_to_true = ( - - 1 - - == - - 1 - - ); - - - -_Bool - - test_3_to_true = (1==1); - - - -_Bool - - test_4_to_true = ( - - 0 - - == - - 0 - - ); - - - -_Bool - - test_5_to_true = ('z'=='z'); - - - -_Bool - - test_6_to_true = ('='=='='); - - - -_Bool - - test_7_to_true = (0x1A==0x1A); - - - - - -_Bool - - test_1_to_false = (4!=4); - - - -_Bool - - test_2_to_false = ( - - 1 - - == - - 0 - - ); - - - -_Bool - - test_3_to_false = (1==0); - - - -_Bool - - test_4_to_false = ( - - 0 - - == - - 1 - - ); - - - -_Bool - - test_5_to_false = ('z'=='x'); - - - -_Bool - - test_6_to_false = ('!'==')'); - - - -_Bool - - test_7_to_false = (0x1A==0x2B); - - - - - - - - - -_Bool - - result_1 = checkLogin(test_1_to_true); - - - -_Bool - - result_2 = checkLogin(test_2_to_true); - - - -_Bool - - result_3 = checkLogin(test_3_to_true); - - - -_Bool - - result_4 = checkLogin(test_4_to_true); - - - -_Bool - - result_5 = checkLogin(test_5_to_true); - - - -_Bool - - result_6 = checkLogin(test_6_to_true); - _Bool - result_7 = checkLogin(test_7_to_true); + expected_test_values_compute_to_true[] = {4==4, + 1 + == - + 1 -_Bool + , 1==1, - result_8 = checkLogin(test_1_to_false); + 0 - + == -_Bool + 0 - result_9 = checkLogin(test_2_to_false); + , 'z'=='z', '='=='=',0x1A==0x1A}; - - -_Bool - - result_10 = checkLogin(test_3_to_false); - - - -_Bool - - result_11 = checkLogin(test_4_to_false); - - - -_Bool + int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof( - result_12 = checkLogin(test_5_to_false); + _Bool - + ); -_Bool - result_13 = checkLogin(test_6_to_false); _Bool - result_14 = checkLogin(test_7_to_false); - - - - - - - - do {if ((result_1== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(47)));}} while(0); - - do {if ((result_2== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(48)));}} while(0); - - do {if ((result_3== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(49)));}} while(0); - - do {if ((result_4== - -1 - -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(50)));}} while(0); - - do {if ((result_5== + expected_test_values_compute_to_false[] = {4!=4, -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(51)));}} while(0); + == - do {if ((result_6== + 0 -1 + ,1==0, -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(52)));}} while(0); + 0 - do {if ((result_7== + == -1 + 1 -)) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(53)));}} while(0); + ,'z'=='x','!'==')',0x1A==0x2B}; + int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof( + _Bool - do {if (!(result_8)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(55)));}} while(0); + ); - do {if (!(result_9)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(56)));}} while(0); - do {if (!(result_10)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(57)));}} while(0); - do {if (!(result_11)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(58)));}} while(0); - do {if (!(result_12)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(59)));}} while(0); - do {if (!(result_13)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(60)));}} while(0); + for(int i=0;i<7;++i) { - do {if (!(result_14)) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(61)));}} while(0); + do {if ((checkLogin(expected_test_values_compute_to_true[i]))) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(16)));}} while(0); + } + for(int i=0;i<7;++i){ + do {if (!(checkLogin(expected_test_values_compute_to_false[i]))) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(19)));}} while(0); + } } diff --git a/tests/build/test/results/test_LoginCustomer.pass b/tests/build/test/results/test_LoginCustomer.pass index bd31688..730ed0b 100644 --- a/tests/build/test/results/test_LoginCustomer.pass +++ b/tests/build/test/results/test_LoginCustomer.pass @@ -4,7 +4,7 @@ :file: test_LoginCustomer.c :successes: - :test: test_checkLogin - :line: 7 + :line: 5 :message: '' :unity_test_time: 0 :failures: [] @@ -15,4 +15,4 @@ :failed: 0 :ignored: 0 :stdout: [] -:time: 0.0017807170006562956 +:time: 0.001912861000164412 diff --git a/tests/build/test/runners/test_LoginCustomer_runner.c b/tests/build/test/runners/test_LoginCustomer_runner.c index f847d37..f061ca9 100644 --- a/tests/build/test/runners/test_LoginCustomer_runner.c +++ b/tests/build/test/runners/test_LoginCustomer_runner.c @@ -75,7 +75,7 @@ static void run_test(UnityTestFunction func, const char* name, UNITY_LINE_TYPE l int main(void) { UnityBegin("test_LoginCustomer.c"); - run_test(test_checkLogin, "test_checkLogin", 7); + run_test(test_checkLogin, "test_checkLogin", 5); return UnityEnd(); } diff --git a/tests/test/test_LoginCustomer.c b/tests/test/test_LoginCustomer.c index fc23e10..610a847 100644 --- a/tests/test/test_LoginCustomer.c +++ b/tests/test/test_LoginCustomer.c @@ -1,63 +1,21 @@ #include #include "LoginCustomer.h" - void setUp(){}; void tearDown(){}; - void test_checkLogin() { /*arrange*/ - - bool test_1_to_true = (4==4); - bool test_2_to_true = (true==true); - bool test_3_to_true = (1==1); - bool test_4_to_true = (false==false); - bool test_5_to_true = ('z'=='z'); - bool test_6_to_true = ('='=='='); - bool test_7_to_true = (0x1A==0x1A); - - bool test_1_to_false = (4!=4); - bool test_2_to_false = (true==false); - bool test_3_to_false = (1==0); - bool test_4_to_false = (false==true); - bool test_5_to_false = ('z'=='x'); - bool test_6_to_false = ('!'==')'); - bool test_7_to_false = (0x1A==0x2B); + bool expected_test_values_compute_to_true[] = {4==4,true==true, 1==1, false==false, 'z'=='z', '='=='=',0x1A==0x1A}; + int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof(bool); - /*act*/ - - bool result_1 = checkLogin(test_1_to_true); - bool result_2 = checkLogin(test_2_to_true); - bool result_3 = checkLogin(test_3_to_true); - bool result_4 = checkLogin(test_4_to_true); - bool result_5 = checkLogin(test_5_to_true); - bool result_6 = checkLogin(test_6_to_true); - bool result_7 = checkLogin(test_7_to_true); - - bool result_8 = checkLogin(test_1_to_false); - bool result_9 = checkLogin(test_2_to_false); - bool result_10 = checkLogin(test_3_to_false); - bool result_11 = checkLogin(test_4_to_false); - bool result_12 = checkLogin(test_5_to_false); - bool result_13 = checkLogin(test_6_to_false); - bool result_14 = checkLogin(test_7_to_false); - - /*assertions*/ - - TEST_ASSERT_TRUE(result_1); - TEST_ASSERT_TRUE(result_2); - TEST_ASSERT_TRUE(result_3); - TEST_ASSERT_TRUE(result_4); - TEST_ASSERT_TRUE(result_5); - TEST_ASSERT_TRUE(result_6); - TEST_ASSERT_TRUE(result_7); - - TEST_ASSERT_FALSE(result_8); - TEST_ASSERT_FALSE(result_9); - TEST_ASSERT_FALSE(result_10); - TEST_ASSERT_FALSE(result_11); - TEST_ASSERT_FALSE(result_12); - TEST_ASSERT_FALSE(result_13); - TEST_ASSERT_FALSE(result_14); + bool expected_test_values_compute_to_false[] = {4!=4,true==false,1==0,false==true,'z'=='x','!'==')',0x1A==0x2B}; + int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof(bool); + /*act and assertions*/ + for(int i=0;i<7;++i) { + TEST_ASSERT_TRUE(checkLogin(expected_test_values_compute_to_true[i])); + } + for(int i=0;i<7;++i){ + TEST_ASSERT_FALSE(checkLogin(expected_test_values_compute_to_false[i])); + } } From de53d4ef958a4359f08abca5f20a34c472de92be Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Wed, 1 Feb 2023 10:01:47 +0100 Subject: [PATCH 20/20] solve merge conflict --- src/CustomerData.txt | 6 +++ src/CustomerProperties.h | 4 ++ src/LoginCustomer.c | 92 ++++++++++++++++++++++++++++++++++++++++ src/LoginCustomer.h | 7 +++ 4 files changed, 109 insertions(+) create mode 100644 src/CustomerData.txt diff --git a/src/CustomerData.txt b/src/CustomerData.txt new file mode 100644 index 0000000..3ac070f --- /dev/null +++ b/src/CustomerData.txt @@ -0,0 +1,6 @@ +1234=example +ID=1234 +forename=Max +Surname=Mustermann +password=example +balance=0 diff --git a/src/CustomerProperties.h b/src/CustomerProperties.h index e2ba317..a78b4cc 100644 --- a/src/CustomerProperties.h +++ b/src/CustomerProperties.h @@ -1,5 +1,9 @@ typedef struct Customer{ +<<<<<<< HEAD int ID; char *forename,*surname,*password; +======= + char *ID, *forename, *surname, *password; +>>>>>>> 3e7a7d3 (Implementation of functions LoginAsCustomer() and Login()) float balance; }customer_t; diff --git a/src/LoginCustomer.c b/src/LoginCustomer.c index c9b956e..5c2a7a4 100644 --- a/src/LoginCustomer.c +++ b/src/LoginCustomer.c @@ -1,5 +1,97 @@ #include "LoginCustomer.h" + bool checkLogin(bool loginSuccessful) { return (loginSuccessful) ? true : false; } + +void collectCustomerDataForLogin(int attempts) +{ + customer_t c; + c.ID = calloc(15+1,sizeof(char)); + c.password = calloc(15+1, sizeof(char)); + char digitCharacterFromUser, passwordCharacterFromUser; + int IDLengthCounter = 0, passwordLengthCounter = 0; + const int IDMaxLength = 16, passwordMaxLength = 16; + + printf("Enter ID:\n"); + while(((digitCharacterFromUser=getchar()) != '\n')&&IDLengthCounter='0'&&digitCharacterFromUser<='9'){ + *(c.ID+IDLengthCounter) = digitCharacterFromUser; + } + else{ + printf("Character entered is not a digit. Aborting.\n"); + exit(-1); + } + ++IDLengthCounter; + } + *(c.ID+IDLengthCounter) = '\0'; + + if(IDLengthCounter>=IDMaxLength){ + printf("ID entered is too long. Aborting.\n"); + exit(-1); + } + + printf("Enter password:\n"); + while((passwordCharacterFromUser=getchar())!='\n'&&passwordLengthCounter=passwordMaxLength){ + printf("Password entered is too long. Aborting.\n"); + exit(-1); + } + customer_t *ptr = &c; + bool loginSuccessful = loginCustomer(ptr); + if(loginSuccessful ) { + printf("Welcome to the menu!\n"); + //call menu() + }else if(!loginSuccessful && attempts < MAX_LOGIN_ATTEMPTS){ + printf("You have %d attempts left.\n", MAX_LOGIN_ATTEMPTS - attempts); + collectCustomerDataForLogin(++attempts); + }else{ + printf("Maximum number of attempts reached. Program terminates.\n"); + exit(-1); + //call error() + } + +} + +bool loginCustomer(customer_t *c) +{ + bool foundCustomerEntryInFile = false; + char *searchForThisString = generateCheckString(c->ID,c->password); + char *lineFromCustomerFile = calloc(40,sizeof(char)); + FILE *readCustomerFile = fopen("CustomerData.txt", "r"); + if(readCustomerFile==NULL){ + printf("Could not find file. Aborting.\n"); + exit(-1); + //call error() + } + while((fscanf(readCustomerFile,"%s",lineFromCustomerFile)!=EOF)){ + if(strcmp(searchForThisString,lineFromCustomerFile)==0){ + foundCustomerEntryInFile = true; + break; + } + } + + if(checkLogin(foundCustomerEntryInFile)){ + printf("Login successful.\n"); + return foundCustomerEntryInFile; + }else{ + printf("Login not successful.\n"); + } + fclose(readCustomerFile); + return foundCustomerEntryInFile; +} + +char *generateCheckString(char *ID, char *password){ + int checkStringLength = strlen(ID) + 1 + strlen(password) + 1; + char *checkString = calloc(checkStringLength, sizeof(char)); + checkString = strcat(ID,"="); + checkString = strcat(checkString,password); + *(checkString+checkStringLength) = '\0'; + return checkString; +} diff --git a/src/LoginCustomer.h b/src/LoginCustomer.h index 7f0f8f9..809765b 100644 --- a/src/LoginCustomer.h +++ b/src/LoginCustomer.h @@ -1,3 +1,10 @@ #include +#include #include +#include +#include "CustomerProperties.h" +#define MAX_LOGIN_ATTEMPTS 3 +char *generateCheckString(char *, char*); bool checkLogin(bool); +void collectCustomerDataForLogin(int); +bool loginCustomer(customer_t *);