diff --git a/Makefile b/Makefile index 1fd1cd6..ea50f64 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,12 @@ PREFIX ?= /usr/local INCLUDEDIR = $(PREFIX)/include LIBDIR = $(PREFIX)/lib -all: $(STATIC_LIB) $(SHARED_LIB) +TEST_SRC = test.c +TEST_BIN = test.elf + +all: $(STATIC_LIB) $(SHARED_LIB) $(TEST_BIN) +test: $(TEST_BIN) + ./$< %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ @@ -24,11 +29,15 @@ $(STATIC_LIB): $(OBJS) $(SHARED_LIB): $(OBJS) $(CC) -shared -o $@ $^ +$(TEST_BIN): $(TEST_SRC) $(STATIC_LIB) + $(CC) -Wall -Ihash -o $@ $(TEST_SRC) $(STATIC_LIB) + install: $(STATIC_LIB) $(SHARED_LIB) - mkdir -p $(DESTDIR)$(INCLUDEDIR)/hash - cp -r hash/*.h $(DESTDIR)$(INCLUDEDIR)/hash/ - mkdir -p $(DESTDIR)$(LIBDIR) - cp $(STATIC_LIB) $(SHARED_LIB) $(DESTDIR)$(LIBDIR)/ + install -d $(DESTDIR)$(INCLUDEDIR)/hash + install -m 644 hash/*.h $(DESTDIR)$(INCLUDEDIR)/hash/ + install -d $(DESTDIR)$(LIBDIR) + install -m 644 $(STATIC_LIB) $(DESTDIR)$(LIBDIR)/ + install -m 755 $(SHARED_LIB) $(DESTDIR)$(LIBDIR)/ @echo "Installed libraries to $(DESTDIR)$(LIBDIR) and headers to $(DESTDIR)$(INCLUDEDIR)/hash" uninstall: @@ -37,6 +46,6 @@ uninstall: @echo "Uninstalled libraries from $(DESTDIR)$(LIBDIR) and headers from $(DESTDIR)$(INCLUDEDIR)/hash" clean: - rm -f $(OBJS) $(STATIC_LIB) $(SHARED_LIB) + rm -f $(OBJS) $(STATIC_LIB) $(SHARED_LIB) $(TEST_BIN) -.PHONY: all clean install uninstall +.PHONY: all clean install uninstall test diff --git a/test.c b/test.c new file mode 100644 index 0000000..bf69dbc --- /dev/null +++ b/test.c @@ -0,0 +1,31 @@ +#include "hash/crc32.h" +#include "hash/djb2.h" +#include +#include +#include + +int main(void) { + assert(crc32("123456789", 9) == 0xCBF43926); + assert(crc32("", 0) == 0x00000000); + assert(crc32("a", 1) == 0xE8B7BE43); + assert(crc32("A", 1) == 0xD3D99E8B); + assert(crc32("hello", 5) == 0x3610A686); + assert(crc32("The quick brown fox jumps over the lazy dog", 43) == 0x414FA339); + assert(crc32("The quick brown fox jumps over the lazy dog.", 44) == 0x519025E9); + + /* Keep in mind the update api requires initialization and finalization */ + uint32_t crc = crc32_init(); + crc = crc32_update_raw(crc, "a", 1); + crc = crc32_finalize(crc); + + assert(crc == crc32("a", 1)); + assert(crc == 0xE8B7BE43); + + assert(djb2("Hello") == 0x000000310D4F2079); + assert(djb2("a") == 0x000000000002B606); + assert(djb2("A") == 0x000000000002B5E6); + assert(djb2("123456789") == 0x0377821035CDBB82); + + printf("All good!\n"); + exit(EXIT_SUCCESS); +}