From a8647624aa04dff83f4dbbab72ed02a4346d54bc Mon Sep 17 00:00:00 2001 From: fdai7057 Date: Sun, 22 Jan 2023 10:45:31 +0100 Subject: [PATCH] Implementation of unit test for function error() --- tests/build/test/cache/defines_dependency.yml | 3 + tests/build/test/cache/input.yml | 242 ++++++++++++++++++ tests/build/test/cache/test_Error.c | 113 ++++++++ tests/build/test/dependencies/Error.d | 1 + tests/build/test/dependencies/cmock.d | 6 + tests/build/test/dependencies/test_Error.d | 4 + .../test/dependencies/test_Error_runner.d | 4 + tests/build/test/dependencies/unity.d | 4 + tests/build/test/out/c/Error.o | Bin 0 -> 3044 bytes tests/build/test/out/c/cmock.o | Bin 0 -> 8152 bytes tests/build/test/out/c/test_Error.o | Bin 0 -> 5544 bytes tests/build/test/out/c/test_Error_runner.o | Bin 0 -> 6600 bytes tests/build/test/out/c/unity.o | Bin 0 -> 39856 bytes tests/build/test/out/test_Error.out | Bin 0 -> 56508 bytes .../build/test/preprocess/files/test_Error.c | 113 ++++++++ .../test/preprocess/includes/test_Error.c | 3 + tests/build/test/results/test_Error.pass | 28 ++ tests/build/test/runners/test_Error_runner.c | 81 ++++++ tests/project.yml | 101 ++++++++ tests/test/support/.gitkeep | 0 tests/test/test_Error.c | 40 +++ 21 files changed, 743 insertions(+) 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_Error.c create mode 100644 tests/build/test/dependencies/Error.d create mode 100644 tests/build/test/dependencies/cmock.d create mode 100644 tests/build/test/dependencies/test_Error.d create mode 100644 tests/build/test/dependencies/test_Error_runner.d create mode 100644 tests/build/test/dependencies/unity.d create mode 100644 tests/build/test/out/c/Error.o create mode 100644 tests/build/test/out/c/cmock.o create mode 100644 tests/build/test/out/c/test_Error.o create mode 100644 tests/build/test/out/c/test_Error_runner.o create mode 100644 tests/build/test/out/c/unity.o create mode 100755 tests/build/test/out/test_Error.out create mode 100644 tests/build/test/preprocess/files/test_Error.c create mode 100644 tests/build/test/preprocess/includes/test_Error.c create mode 100644 tests/build/test/results/test_Error.pass create mode 100644 tests/build/test/runners/test_Error_runner.c create mode 100644 tests/project.yml create mode 100644 tests/test/support/.gitkeep create mode 100644 tests/test/test_Error.c diff --git a/tests/build/test/cache/defines_dependency.yml b/tests/build/test/cache/defines_dependency.yml new file mode 100644 index 0000000..c61a71f --- /dev/null +++ b/tests/build/test/cache/defines_dependency.yml @@ -0,0 +1,3 @@ +--- +"../src/Error.c": +- TEST diff --git a/tests/build/test/cache/input.yml b/tests/build/test/cache/input.yml new file mode 100644 index 0000000..4dbee1a --- /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: + - "../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_Error.c b/tests/build/test/cache/test_Error.c new file mode 100644 index 0000000..e9c72bf --- /dev/null +++ b/tests/build/test/cache/test_Error.c @@ -0,0 +1,113 @@ +#include "../src/Error.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + +void setUp(){} + +void tearDown(){} + + + + + +void test_error() + +{ + + + + srand(time(0)); + + int bound = 1000; + + int val1,val2,val3,val4,val5,val6,val7,val8,val9,val10; + + + + + + val1 = rand() % 1000 + 1; + + val2 = rand() % 1000 + 1; + + val3 = rand() % 1000 + 1; + + val4 = rand() % 1000 + 1; + + val5 = rand() % 1000 + 1; + + val6 = rand() % 1000 + 1; + + val7 = rand() % 1000 + 1; + + val8 = rand() % 1000 + 1; + + val9 = rand() % 1000 + 1; + + val10 = rand() % 1000 + 1; + + + + + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val1))), ( + +((void *)0) + +), (UNITY_UINT)(30), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val2))), ( + +((void *)0) + +), (UNITY_UINT)(31), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val3))), ( + +((void *)0) + +), (UNITY_UINT)(32), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val4))), ( + +((void *)0) + +), (UNITY_UINT)(33), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val5))), ( + +((void *)0) + +), (UNITY_UINT)(34), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val6))), ( + +((void *)0) + +), (UNITY_UINT)(35), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val7))), ( + +((void *)0) + +), (UNITY_UINT)(36), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val8))), ( + +((void *)0) + +), (UNITY_UINT)(37), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val9))), ( + +((void *)0) + +), (UNITY_UINT)(38), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val10))), ( + +((void *)0) + +), (UNITY_UINT)(39), UNITY_DISPLAY_STYLE_INT); + +} diff --git a/tests/build/test/dependencies/Error.d b/tests/build/test/dependencies/Error.d new file mode 100644 index 0000000..a184677 --- /dev/null +++ b/tests/build/test/dependencies/Error.d @@ -0,0 +1 @@ +build/test/out/c/Error.o: ../src/Error.c ../src/Error.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_Error.d b/tests/build/test/dependencies/test_Error.d new file mode 100644 index 0000000..2feb4c3 --- /dev/null +++ b/tests/build/test/dependencies/test_Error.d @@ -0,0 +1,4 @@ +build/test/out/c/test_Error.o: test/test_Error.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 \ + ../src/Error.h diff --git a/tests/build/test/dependencies/test_Error_runner.d b/tests/build/test/dependencies/test_Error_runner.d new file mode 100644 index 0000000..07566c2 --- /dev/null +++ b/tests/build/test/dependencies/test_Error_runner.d @@ -0,0 +1,4 @@ +build/test/out/c/test_Error_runner.o: \ + build/test/runners/test_Error_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/Error.o b/tests/build/test/out/c/Error.o new file mode 100644 index 0000000000000000000000000000000000000000..1b78f2bd280e6548ce0cde755ded17d9679f6de4 GIT binary patch literal 3044 zcma)7-ES0C6u&dGv)!^~DQyuD6UGEWjoH~QAq9a#=?8>ZK0*unAX#T;Z+D08%#`_n z)}TH#Bod+#qQnPHc)&z`_Qgb>sv*Ak;$J|5#sm^$!iy28zcYL9cDiWvBzJ!2``ml> z+`I2iP90Sgg-KGF##SZ9rgAOIo&*NjX7*fS?}B{x+Aq^f4+nmGyt1;QQ_$VXN94Bj zc5Wpaz?Us@e4j*P_&$xcKX`5FVbA*?lFONE%SqVM_q_;0{K|uqiE+y_#;0T~C&q)% z7@v@FATjc_#_N-huAhJW<1(~Ue%jy^Ea6%DmvdJKT%JysAh`l+_ zzwDXpdS=J+9Tdu7;j0wTq@EjKcO?qOJ{PEFx}FECD%pDp` z`tw?0TVbQpm+jpQw;e2>KLi!(2^Q0kF_ptxwZi`Vf&44^U0aX$ll$nFTVq=p({&~- z$NN?Mmf1ZW3iblk$C6zkPPT#g8kWX(;;Sfs71raMOeY=5G)rM%vsSB3JDEewot~uI zq-S&ex*F?R?xwyWH==9t&@VzRhZ-61C=R@HRx{=-_Clxb@tQ$~ zQp0z7=|bFe;;=N~+cBmg3QN;bTytW#blk%rxK`xMmCB|u&0QWwJSd$G{Q3zVHA-Wa zH|JWORfolkO4T)DF$tBVKP%k6Kvvl?BrQvyu8;a51G5ovax$;cX_B>9x{q<6nlK6&OIJDHbg718zau} zzG0(SH;S`Xxair9!1w$(EXLkt$Ey`1x*#EIRiqv!M`7&P`1pQfaDrDI%M*o)!!LD~ z#1B7!MWnoShACHa%C??N<~%;ld8T-_(KiasC(V3KXkOtMO4Vc)P>=TT+eu0##I zcBZw!D#xZyjUAb)oH}}RdUB>Rb7X94vcl$LOg42u#kT2W>#*Iuz;3khFfh~4*o=_h z5b{MKFADhsA>R@*bzDKx9zwK_IzqTfARZ#7;8A#y5bYim`jWt5fg=JZ1imWpjKDVq z)&+V3LxJxQqRurTebRyURnzgf48T5^ zY5OicTg=3NCpYm%6vN1}=UOqmQJD=a7ZLTqkLPim|4Vn_n4V(l56uYOd(zXrrL`T4 z?y9_D2f-)z9!Mnb@iy=@Uw%XI zp%|(`bRUamRuY|oXdf2&WrgE;2+~G&S@-o6PkQ>J|AH7n(r*TG`n+G`ytkpF^U}U4 zH(?D+#(-trsNWz)khEQbEO|0rgr7l-AZZIAr|Zs$8K=6qe(k!+eGst(H~yvWRoK$` zYRE_XrhN2P$a8!Qp7ucfCi)ZkF3L?oCYIK1fzs~+5)48oN&0;WMJk-#q(Ui@w(p=L z9_14H2!1qIl4RI7P^8b%O!b9cXY!+SrE@`K_hA@?lHRReEb=3yTyplnvK{z+M~M+6 S_eXan?RN!rf09l>>GwBB@y2xk 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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 literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/test_Error_runner.o b/tests/build/test/out/c/test_Error_runner.o new file mode 100644 index 0000000000000000000000000000000000000000..d722bfc5fbfa8fdd22aa03104130e29ccc362a2f GIT binary patch literal 6600 zcma)Adu$xV8K1qqwa?Exzk>59oWUWEg70h-B_=@Pw{bC!Lu{k~(RJ@`eZJ&wFWuWU zHVOr5wZe5QlD?p-5oy(j1c*MQ{?P(0$cZ9@TByn^rR7m*b zU0hyX)<|*gKD>Bak2`sIVU_jz_~7&hejf4u1s_6jcIgaySbC9OC+I~To}4{=adCCP zrAJ84dqI?1H_CGqW#)yM!ynF^pS_<3H#=HBGwfeMp_$=O0d>^Q4J#7O4A)BbTt|TW zPSg8bM>&zD<$o_PPk&G@ZRR?fhS3l2clu1|bI&>zvjWcc29{rf>Fnr-v!5kjZaezn z%&*q7UV0gUm)^ol`n$888*KDXzxS8rPhUhL4<2wQ$kT+-b9`vSG9J=+q;zh&0(}k7 z3e~$b-ZLR?GH3kb&>e^8^otA3Hu83?*Rpa}B;f*s0GstUF3gtW+0wY6sEqk(;LNWq zBBkYD0o%X@j4jaOqxlYi@m*EX3SPYluTDIEdTC7a7rzN@kzY%jHY>hQ)k?;o2)vD# zT3kmwm(sQaNQc?p7fe?#D>0D+qT{M&+C!Lz`h@$xs7P{;Lw z2weQzL-zn|VZLq}e)Hwe1F183{TdJN14B~+dk{tQ6^{{7igv?R^J(8f04<Bw|iB95gCi&Mk?cnbItstfTdc4a&Pm%|f z&|xl0;9XH!i-2deSCv2onBX7auf48ReG)nrtRi&YMgCwDg?+XexcyQgx*r>3DpLlrYLW_s6Mzz=p7er3Hr$LcP+hoDsMh5dW50f-n z@nxX%T=Ez~)jrFmO~W9*Q>^xG3Lo7=dGVd{*Csd|rV08^1z6oH1Fzoo-KDuy5lH zaHZkGnuoZj+wTnqIoO9Je4-)4iNrNNEkPX{B#y^-pNpYk?=Vl0#Y`a8fH7oW32*Pl(a9+i%yD=_3em zD$t;n22R7*SBiA^XL4~pv)@V@7C$mrw_{m`X^$Z9LweR=(eYf?h#qk=X(u1;$t9dD zwE5^k+exOKY;?dJ%UN07P9Kf7M#2Y;Ec^^BI&9@qw;1+#v`aUSW_43Xa^V+^uY%3_ zDOhLuBIjAGFO$>l*0y$b>C$r(_fT6&HI1=PPiGtpYf4}sW#)*VFs$_06iJZ(2|dG= zed&w=nAP(~V|VHKSYDqnlHTdM-bv=Bq<8X|k+8dS4vx1m8kjWgF>LhNhSkH$nnp65 z7}qTX#*)XKF_(!E*BQ@QcArH_%#VW&7d+_5?7k(JI2yZ+kCctlp5oJS%!HlJnGE|W zX43>lhXzIt#YP8)My_pRnVgwg9cBy;EUTwYH^xf$Fxm2t!H@z9A5uXN@OO=7WYkm^O_eCmS~`kv(@_d|NSmLq^PWvYr9Za7;>! zn}r^PuyRuZ4ImlJjkbS`qUS~a$ZO?$a>J2~FF^m$Xt=v|ceu4B(iUkAx3#pjwzRgk zgqyRrV;VQ63{;SG0#LUS<2R;vweJcyr^3x+dVb1Gj9WP~=j59m^RBd+Y_|1y2HS|| zDw%TtP!}eRG)L)*ZCa8oeQ03yU{bvhwfC=%_eKEgrkdW5E2m7$#X*`6RL1m5!Uk@zvLD<_=hMR(?;oS2eItS^O*h*6w4tP&f z8ULA5kf;oo5KmKC(1R!*T{2gi%5bQAnp&8hD^%GAkCy!9?v#3OHc9WE?9xevq(=an zc@^?U_dwz$9tTfZka!BbY}LLJ_Milyl;dyXk$bcnUf=WRt9@nctOt|*FV^6ff#v=s z|F=B)Y8-%n_h9n>Xbo09Qzm^Ku-wZOZ_^q*{UVT!>|560b*~I=5#(iW)v2($I2KNX zOV1});;p%t9P6>zWc#j23Kx-MiI_d^m`5Y}B#ZSA?(gaxjP391JJ>rC8|myC?2WCe z_m_CZCou=z>dD<@(q(4!*y_{v68prYJel09kBhowrrFEH&%-{p)^eI&gO z>c0ZlF`{9{ra{U70Z`J<6TXtMZwgF%a0fbjM$i`oJum2cf?g0bfIUF=wV?h+jFV`X zv7JKRCFJyLo5qnKy4AfK(>SMrX&fg&OECE_l71Uwrv?5l=#D1Fenj%^_+5g26_f_5 z779uLRRN;>*Apn^OTnkxKopzwYN78D^pK!af__HOF9`aOpx+Yo2ZH`g(BBG5d7ysZ z7xb@!{!>u8DwDogP|6SCu%O!nrMge@c0v0DrF@ax5Hv67{enIy=p%wYF6fU1JtycZ zg1#&01woeutwgSBcXDiV#F#So;A?T+By-!eD zU(%lubV<-H@JH$7wGAbh^$@1b7RgU#adiTz!y)1j<-w6GvSiV>~v-@A#3Fm2-|E4gYUjh9R~`q3r}mXCt;2{-edW zES|M?H$X1!uKX`{JsvxhkwQF_82a=Ix1B-o3nUOtvNQ&&wH-pfgbmaLC5=yxjmCje z#p9{ME{HwjZ8F{t2+3aBg<$8s(NIikEqKUBh9NuZQ#Ki|9RlKugdu&GG6va7yOA|^ z*L;i}t(`Ys%g5NA^uz|scEZm67mUzKzbC+Z^B1bdHwasr3(cFxO8KDkMUE9LyH0b@ z0OF}h-IE@kutK literal 0 HcmV?d00001 diff --git a/tests/build/test/out/c/unity.o b/tests/build/test/out/c/unity.o new file mode 100644 index 0000000000000000000000000000000000000000..ba42096a557fd346fc5e19cc1abf5f04fd708307 GIT binary patch literal 39856 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 O`@an%tdYQJ@BaqdtyJv* literal 0 HcmV?d00001 diff --git a/tests/build/test/preprocess/files/test_Error.c b/tests/build/test/preprocess/files/test_Error.c new file mode 100644 index 0000000..e9c72bf --- /dev/null +++ b/tests/build/test/preprocess/files/test_Error.c @@ -0,0 +1,113 @@ +#include "../src/Error.h" +#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" + + +void setUp(){} + +void tearDown(){} + + + + + +void test_error() + +{ + + + + srand(time(0)); + + int bound = 1000; + + int val1,val2,val3,val4,val5,val6,val7,val8,val9,val10; + + + + + + val1 = rand() % 1000 + 1; + + val2 = rand() % 1000 + 1; + + val3 = rand() % 1000 + 1; + + val4 = rand() % 1000 + 1; + + val5 = rand() % 1000 + 1; + + val6 = rand() % 1000 + 1; + + val7 = rand() % 1000 + 1; + + val8 = rand() % 1000 + 1; + + val9 = rand() % 1000 + 1; + + val10 = rand() % 1000 + 1; + + + + + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val1))), ( + +((void *)0) + +), (UNITY_UINT)(30), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val2))), ( + +((void *)0) + +), (UNITY_UINT)(31), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val3))), ( + +((void *)0) + +), (UNITY_UINT)(32), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val4))), ( + +((void *)0) + +), (UNITY_UINT)(33), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val5))), ( + +((void *)0) + +), (UNITY_UINT)(34), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val6))), ( + +((void *)0) + +), (UNITY_UINT)(35), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val7))), ( + +((void *)0) + +), (UNITY_UINT)(36), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val8))), ( + +((void *)0) + +), (UNITY_UINT)(37), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val9))), ( + +((void *)0) + +), (UNITY_UINT)(38), UNITY_DISPLAY_STYLE_INT); + + UnityAssertEqualNumber((UNITY_INT)((0)), (UNITY_INT)((error(val10))), ( + +((void *)0) + +), (UNITY_UINT)(39), UNITY_DISPLAY_STYLE_INT); + +} diff --git a/tests/build/test/preprocess/includes/test_Error.c b/tests/build/test/preprocess/includes/test_Error.c new file mode 100644 index 0000000..dfd4fe6 --- /dev/null +++ b/tests/build/test/preprocess/includes/test_Error.c @@ -0,0 +1,3 @@ +--- +- "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" +- "../src/Error.h" diff --git a/tests/build/test/results/test_Error.pass b/tests/build/test/results/test_Error.pass new file mode 100644 index 0000000..e1c50bd --- /dev/null +++ b/tests/build/test/results/test_Error.pass @@ -0,0 +1,28 @@ +--- +:source: + :path: test + :file: test_Error.c +:successes: +- :test: test_error + :line: 10 + :message: '' + :unity_test_time: 0 +:failures: [] +:ignores: [] +:counts: + :total: 1 + :passed: 1 + :failed: 0 + :ignored: 0 +:stdout: +- Error code unknown. +- Error code unknown. +- Error code unknown. +- Error code unknown. +- Error code unknown. +- Error code unknown. +- Error code unknown. +- Error code unknown. +- Error code unknown. +- Error code unknown. +:time: 0.0021041729996795766 diff --git a/tests/build/test/runners/test_Error_runner.c b/tests/build/test/runners/test_Error_runner.c new file mode 100644 index 0000000..65ef8d0 --- /dev/null +++ b/tests/build/test/runners/test_Error_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_error(); + + +/*=======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_Error.c"); + run_test(test_error, "test_error", 10); + + return UnityEnd(); +} diff --git a/tests/project.yml b/tests/project.yml new file mode 100644 index 0000000..4d77799 --- /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: + - ../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_Error.c b/tests/test/test_Error.c new file mode 100644 index 0000000..ba28ac2 --- /dev/null +++ b/tests/test/test_Error.c @@ -0,0 +1,40 @@ +#include +#include +#include +#include + +void setUp(){} +void tearDown(){} + + +void test_error() +{ + /*arrange*/ + srand(time(0)); + int bound = 1000; + int val1,val2,val3,val4,val5,val6,val7,val8,val9,val10; + + /*act*/ + val1 = rand() % 1000 + 1; + val2 = rand() % 1000 + 1; + val3 = rand() % 1000 + 1; + val4 = rand() % 1000 + 1; + val5 = rand() % 1000 + 1; + val6 = rand() % 1000 + 1; + val7 = rand() % 1000 + 1; + val8 = rand() % 1000 + 1; + val9 = rand() % 1000 + 1; + val10 = rand() % 1000 + 1; + + /*assertions*/ + TEST_ASSERT_EQUAL_INT(0,error(val1)); + TEST_ASSERT_EQUAL_INT(0,error(val2)); + TEST_ASSERT_EQUAL_INT(0,error(val3)); + TEST_ASSERT_EQUAL_INT(0,error(val4)); + TEST_ASSERT_EQUAL_INT(0,error(val5)); + TEST_ASSERT_EQUAL_INT(0,error(val6)); + TEST_ASSERT_EQUAL_INT(0,error(val7)); + TEST_ASSERT_EQUAL_INT(0,error(val8)); + TEST_ASSERT_EQUAL_INT(0,error(val9)); + TEST_ASSERT_EQUAL_INT(0,error(val10)); +}