# Makefile with tests for udiff(1) by Walter Doekes 2011
# http://wjd.nu/notes/2011#diff-memory-exhausted-udiff

.PHONY: all test test.diff test.udiff test-inv.diff test-inv.udiff

all: run_tests
clean:
	rm left.txt right.txt *.diff *.udiff

left.txt:
	@if [ "$(mode)" = 1 ]; then cat /dev/null > left.txt ; \
	elif [ "$(mode)" = 2 ]; then seq 99 | sed -e1d > left.txt ; \
	else bash -c 'for x in `seq 100`; do seq 3 | shuf ; done' > left.txt ; \
	fi
right.txt:
	@if [ "$(mode)" = 1 ]; then seq 20 > right.txt ; \
	elif [ "$(mode)" = 2 ]; then seq 100 | sed -e32d > right.txt ; \
	else bash -c 'for x in `seq 100`; do seq 3 | shuf ; done' > right.txt ; \
	fi
output.diff: left.txt right.txt
	@diff -u left.txt right.txt | sed -e 's/^\(\(---\|+++\)[^\t]*\t[^.]*\.\).*/\1../' > output.diff
output.udiff: left.txt right.txt
	@./udiff left.txt right.txt | sed -e 's/^\(\(---\|+++\)[^\t]*\t[^.]*\.\).*/\1../' > output.udiff
output-inv.diff: left.txt right.txt
	@diff -u right.txt left.txt | sed -e 's/^\(\(---\|+++\)[^\t]*\t[^.]*\.\).*/\1../' > output-inv.diff
output-inv.udiff: left.txt right.txt
	@./udiff right.txt left.txt | sed -e 's/^\(\(---\|+++\)[^\t]*\t[^.]*\.\).*/\1../' > output-inv.udiff
left-to-right.diff: left.txt output.diff
	@cp left.txt left-to-right.diff
	@patch left-to-right.diff output.diff
left-to-right.udiff: left.txt output.udiff
	@cp left.txt left-to-right.udiff
	@patch left-to-right.udiff output.udiff
right-to-left.diff: right.txt output-inv.diff
	@cp right.txt right-to-left.diff
	@patch right-to-left.diff output-inv.diff
right-to-left.udiff: right.txt output-inv.udiff
	@cp right.txt right-to-left.udiff
	@patch right-to-left.udiff output-inv.udiff
test.diff: left-to-right.diff right.txt
	@cmp left-to-right.diff right.txt && echo 'left.txt patched against regular diff: success (obviously)'
test.udiff: left-to-right.udiff right.txt
	@cmp left-to-right.udiff right.txt && echo 'left.txt patched against udiff: success (w00t)'
test-inv.diff: right-to-left.diff left.txt
	@cmp right-to-left.diff left.txt && echo 'right.txt patched against regular diff: success (obviously)'
test-inv.udiff: right-to-left.udiff left.txt
	@cmp right-to-left.udiff left.txt && echo 'right.txt patched against udiff: success (w00t)'
test: test.diff test.udiff test-inv.diff test-inv.udiff

run_tests:
	@echo '==> Testing empty file handling...'
	@rm -f left.txt right.txt
	$(MAKE) mode=1 test
	@echo '==> Testing begin and end of file handling...'
	@rm -f left.txt right.txt
	$(MAKE) mode=2 test
	@echo '==> Testing lots of differences handling...'
	@rm -f left.txt right.txt
	$(MAKE) mode=3 test
