1########################################################################## 2# unit tests 3########################################################################## 4 5# additional flags 6CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wcast-align -Wcast-qual -Wno-ctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-overflow=5 -Wswitch -Wundef -Wno-unused -Wnon-virtual-dtor -Wreorder -Wdeprecated -Wno-float-equal 7CPPFLAGS += -I ../single_include -I . -I thirdparty/doctest -I thirdparty/fifo_map -DDOCTEST_CONFIG_SUPER_FAST_ASSERTS 8 9SOURCES = src/unit.cpp \ 10 src/unit-algorithms.cpp \ 11 src/unit-allocator.cpp \ 12 src/unit-alt-string.cpp \ 13 src/unit-bson.cpp \ 14 src/unit-capacity.cpp \ 15 src/unit-cbor.cpp \ 16 src/unit-class_const_iterator.cpp \ 17 src/unit-class_iterator.cpp \ 18 src/unit-class_lexer.cpp \ 19 src/unit-class_parser.cpp \ 20 src/unit-comparison.cpp \ 21 src/unit-concepts.cpp \ 22 src/unit-constructor1.cpp \ 23 src/unit-constructor2.cpp \ 24 src/unit-convenience.cpp \ 25 src/unit-conversions.cpp \ 26 src/unit-deserialization.cpp \ 27 src/unit-element_access1.cpp \ 28 src/unit-element_access2.cpp \ 29 src/unit-inspection.cpp \ 30 src/unit-items.cpp \ 31 src/unit-iterators1.cpp \ 32 src/unit-iterators2.cpp \ 33 src/unit-merge_patch.cpp \ 34 src/unit-json_patch.cpp \ 35 src/unit-json_pointer.cpp \ 36 src/unit-meta.cpp \ 37 src/unit-modifiers.cpp \ 38 src/unit-msgpack.cpp \ 39 src/unit-pointer_access.cpp \ 40 src/unit-readme.cpp \ 41 src/unit-reference_access.cpp \ 42 src/unit-regression.cpp \ 43 src/unit-serialization.cpp \ 44 src/unit-testsuites.cpp \ 45 src/unit-ubjson.cpp \ 46 src/unit-unicode.cpp \ 47 src/unit-wstring.cpp 48 49OBJECTS = $(SOURCES:.cpp=.o) 50 51TESTCASES = $(patsubst src/unit-%.cpp,test-%,$(wildcard src/unit-*.cpp)) 52 53############################################################################## 54# main rules 55############################################################################## 56 57all: $(TESTCASES) 58 59clean: 60 rm -fr json_unit $(OBJECTS) $(SOURCES:.cpp=.gcno) $(SOURCES:.cpp=.gcda) $(TESTCASES) $(FUZZERS) 61 62############################################################################## 63# single test file 64############################################################################## 65 66json_unit: $(OBJECTS) ../single_include/nlohmann/json.hpp thirdparty/doctest/doctest.h 67 @echo "[CXXLD] $@" 68 @$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJECTS) -o $@ 69 70%.o: %.cpp ../single_include/nlohmann/json.hpp thirdparty/doctest/doctest.h 71 @echo "[CXX] $@" 72 @$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@ 73 74 75############################################################################## 76# individual test cases 77############################################################################## 78 79test-%: src/unit-%.o src/unit.o ../single_include/nlohmann/json.hpp thirdparty/doctest/doctest.h 80 @echo "[CXXLD] $@" 81 @$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $< src/unit.o -o $@ 82 83TEST_PATTERN ?= "*" 84TEST_PREFIX = "" 85check: $(OBJECTS) $(TESTCASES) 86 @cd .. ; for testcase in $(TESTCASES); do echo "Executing $$testcase..."; $(TEST_PREFIX)test/$$testcase $(TEST_PATTERN) || exit 1; done 87 88 89############################################################################## 90# fuzzer 91############################################################################## 92 93FUZZER_ENGINE = src/fuzzer-driver_afl.cpp 94FUZZERS = parse_afl_fuzzer parse_bson_fuzzer parse_cbor_fuzzer parse_msgpack_fuzzer parse_ubjson_fuzzer 95fuzzers: $(FUZZERS) 96 97parse_afl_fuzzer: 98 $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(FUZZER_ENGINE) src/fuzzer-parse_json.cpp -o $@ 99 100parse_bson_fuzzer: 101 $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(FUZZER_ENGINE) src/fuzzer-parse_bson.cpp -o $@ 102 103parse_cbor_fuzzer: 104 $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(FUZZER_ENGINE) src/fuzzer-parse_cbor.cpp -o $@ 105 106parse_msgpack_fuzzer: 107 $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(FUZZER_ENGINE) src/fuzzer-parse_msgpack.cpp -o $@ 108 109parse_ubjson_fuzzer: 110 $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(FUZZER_ENGINE) src/fuzzer-parse_ubjson.cpp -o $@ 111