• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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