diff --git a/README.md b/README.md new file mode 100644 index 0000000..5ce254e --- /dev/null +++ b/README.md @@ -0,0 +1,169 @@ +# y_test_h +It is a copy of a project of test like gtest but write in C only. + + +But here, it suffice to copy one file "y_test_h.h" and include it in the test file, +and add somme macro functions like `IMPLEMENTATION_FTEST()` to generate all ftest functions +and `IMPLEMENTATION_FMOCK()` to generate all fmock functions. + + +# How to create test (ftest) +## Example +Example for this file `test.c`: +``` +#include "y_test_h.h" +IMPLEMENTATION_FTEST() + +TEST(nametest){ + EXPECT_EQ(1,1); +} +/* allow empty nametest, e.g*/ +TEST(){} +/* allow duplicate name test, to have suit test */ +TEST(){ + EXPECT_TRUE(true); +} +``` +### requirement +I write this program to work on linux, I do not test it on windows or mac! +``` +$ ls +$ test.c y_test_h.h +``` + +### compile +`gcc -o exectest test.c` + +Normaly, it works with `gcc` and `clang` ! + +### launch +`./exectest` + +## In function main +### If using options: +``` +int main(int arc, char** argv){ + run_all_tests_args(argc, argv); + return 0; +} +``` +We can add execution option like: + +`./exectest -h` to print help + +`./exectest -p 5` to parallelize tests, using 5 threads. + +`./exectest` launch sequential test (1 thread). + + +### If using only sequential tests +``` +int main(){ + run_all_tests(); + return 0; +} +``` +`./exectest` does not read args! + +### If using only parrallel tests +``` +int main(){ + run_all_tests_parallel(4); /* to use 4 threads */ + return 0; +} +``` +`./exectest` does not read args! + +# FMOCK +We can create and predefined return function regarding the call and condition. + +To simulate response of a function call ! + +## How to create fmock + +``` +#include "y_test_h.h" +IMPLEMENTATION_FMOCK() +``` +outside all functions: +``` +MOCK_FUNC( + returnType, + name_function_mock, + (prototype of the function with paranthesis), + (args when call the funct with parathesis) +) +/* use (returnType) in parathesis if the returType has more than 1 words +for example (long int) or (struct someStruct) */ +``` +For example, to create a function mock as signature: +``` +int f_mock(int a,int b); +``` +we use +``` +MOCK_FUNC(int, f_mock,(int a,int b),(a,b)) +``` +args: +``` +returnType: int, +name_function_mock: f_mock, +args prototype with paranthesis: (int a,int b), +args variable names with parathesis (same variable names as prototype): (a,b) +``` +## print variables +We may define a function to print variables of the mock function, it is usefull in logs, the macro has almost the same args as MOCK_FUNC, without returnType wich is always `char*`. +For example with `f_mock` we define: +``` +STR_PRINT_CUR_VAR(f_mock, (int a,int b),(a,b)){ + char *ret=malloc(150); + sprintf(ret,"(int)a: %d, (int)b: %d",a,b); + return ret; +} +``` +## define expect call +``` +EXPECT_MOCK_CALL(int, f_mock, (int a,int b), (a