Contents
Unit Tests
To build the unit tests, execute:
cd ../mapcodelib
gcc -DDEBUG -O -c mapcoder.c
cd ../test
gcc -DDEBUG -O -DDEBUG unittest.c -lm -lpthread -o unittest ../mapcodelib/mapcoder.o
To execute the tests, simply execute:
./unittest
Using valgrind
to Detect Memory Leaks
Compile and run as follows to use valgrind
(http://valgrind.org) to detect memory leaks:
cd ../mapcodelib
gcc -g -O0 -c mapcoder.c
cd ../test
gcc -g -O0 unittest.c -lm -lpthread -o unittest ../mapcodelib/mapcoder.o
valgrind --leak-check=yes ./unittest
Using the Address Sanitizer (from CLang) to Detect Memory Errors
Or, add -fsanitize=address
to run the address sanitizer:
cd ../mapcodelib
gcc -O -c mapcoder.c
cd ../test
gcc -O unittest.c -lm -lpthread -fsanitize=address -o unittest ../mapcodelib/mapcoder.o
And add the environment variable ASAN_OPTIONS
to your shell:
ASAN_OPTIONS=debug=true:strict_string_checks=1:detect_stack_use_after_return=true:
detect_invalid_pointer_pairs=99999:detect_container_overflow=true:
detect_odr_violation=2:check_initialization_order=true:strict_init_order=true
Using gprof
to Profile the Library
Compile and run as follows to use gprof
to profile the library:
cd ../mapcodelib
gcc -g -O0 -c mapcoder.c -pg
cd ../test
gcc -g -O0 unittest.c -lm -lpthread -o unittest ../mapcodelib/mapcoder.o -pg
Using gcov
to Show Test Coverage
Compile and run as follows to use gcov
to show test coverage for the libray:
cd ../mapcodelib
gcc -fprofile-arcs -ftest-coverage -O0 -c mapcoder.c
cd ../test
gcc -fprofile-arcs -ftest-coverage -O0 unittest.c -lm -lpthread -o unittest ../mapcodelib/mapcoder.o -pg
./unittest
cd ../mapcodelib
gcov mapcoder.c
cd ../test
gcov unittest.c
The test coverage reports are the *.gcov
text files.
Using Microsoft Visual C++
If you use Microsoft Visual C++, you may need to add the following defines to your preprocessor settings:
NO_POSIX_THREADS
_CRT_SECURE_NO_WARNINGS
_CRT_NONSTDC_NO_DEPRECATE