added macros to run function at the start and end of each test
- SETUP = runs once at the start
- TEARDOWN = runs once at the end
- BEFORE = runs before each test
- AFTER = runs after each test
having them as blocks causes issues when a struct with values is initialized
inside the block, because the compiler treats the comma in the struct
defenition as seperate arguments.