summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile7
-rwxr-xr-xtests.sh58
2 files changed, 64 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index f7a70f7..4ac5e6e 100644
--- a/Makefile
+++ b/Makefile
@@ -22,18 +22,23 @@ ALL_CPPFLAGS = $(LOCAL_CPPFLAGS) $(CPPFLAGS)
ALL_CFLAGS = $(ALL_CPPFLAGS) $(LOCAL_CFLAGS) $(CFLAGS) $(DEPFLAGS)
ALL_LDFLAGS = $(ALL_CFLAGS) $(LDFLAGS)
+all: bfs
+
bfs: bfs.o bftw.o color.o
$(CC) $(ALL_LDFLAGS) $^ -o $@
%.o: %.c
$(CC) $(ALL_CFLAGS) -c $< -o $@
+check: all
+ ./tests.sh
+
clean:
$(RM) bfs *.o *.d
release: CFLAGS := -O2 -flto -Wall -DNDEBUG
release: bfs
-.PHONY: clean release
+.PHONY: all check clean release
-include $(wildcard *.d)
diff --git a/tests.sh b/tests.sh
new file mode 100755
index 0000000..f7d16fd
--- /dev/null
+++ b/tests.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+# Like a mythical touch -p
+function touchp() {
+ install -Dm644 /dev/null "$1"
+}
+
+# Creates a simple file+directory structure for tests
+function basic_structure() {
+ touchp "$1/a"
+ touchp "$1/b"
+ touchp "$1/c/d"
+ touchp "$1/e/f"
+ mkdir -p "$1/g/h"
+ mkdir -p "$1/i"
+}
+
+# Checks for any (order-independent) differences between bfs and find
+function find_diff() {
+ diff -u <(./bfs "$@" | sort) <(find "$@" | sort)
+}
+
+# Test cases
+
+function test_0001() {
+ basic_structure "$1"
+ find_diff "$1"
+}
+
+function test_0002() {
+ basic_structure "$1"
+ find_diff "$1" -type d
+}
+
+function test_0003() {
+ basic_structure "$1"
+ find_diff "$1" -type f
+}
+
+function test_0004() {
+ basic_structure "$1"
+ find_diff "$1" -mindepth 1
+}
+
+function test_0005() {
+ basic_structure "$1"
+ find_diff "$1" -maxdepth 1
+}
+
+for i in {1..5}; do
+ dir="$(mktemp -d)"
+ test_$(printf '%04d' $i) "$dir"
+ status=$?
+ rm -rf "$dir"
+ if [ $status -ne 0 ]; then
+ exit $status
+ fi
+done