#!/bin/sh test_description='common tail optimization' . ./test-lib.sh z=zzzzzzzz ;# 8 z="$z$z$z$z$z$z$z$z" ;# 64 z="$z$z$z$z$z$z$z$z" ;# 512 z="$z$z$z$z" ;# 2048 z2047=$(expr "$z" : '.\(.*\)') ; #2047 x=zzzzzzzzzz ;# 10 y="$x$x$x$x$x$x$x$x$x$x" ;# 100 z="$y$y$y$y$y$y$y$y$y$y" ;# 1000 z1000=$z z100=$y z10=$x zs() { count="$1" while test "$count" -ge 1000 do count=$(($count - 1000)) printf "%s" $z1000 done while test "$count" -ge 100 do count=$(($count - 100)) printf "%s" $z100 done while test "$count" -ge 10 do count=$(($count - 10)) printf "%s" $z10 done while test "$count" -ge 1 do count=$(($count - 1)) printf "z" done } zc () { sed -e "/^index/d" \ -e "s/$z1000/Q/g" \ -e "s/QQQQQQQQQ/Z9000/g" \ -e "s/QQQQQQQQ/Z8000/g" \ -e "s/QQQQQQQ/Z7000/g" \ -e "s/QQQQQQ/Z6000/g" \ -e "s/QQQQQ/Z5000/g" \ -e "s/QQQQ/Z4000/g" \ -e "s/QQQ/Z3000/g" \ -e "s/QQ/Z2000/g" \ -e "s/Q/Z1000/g" \ -e "s/$z100/Q/g" \ -e "s/QQQQQQQQQ/Z900/g" \ -e "s/QQQQQQQQ/Z800/g" \ -e "s/QQQQQQQ/Z700/g" \ -e "s/QQQQQQ/Z600/g" \ -e "s/QQQQQ/Z500/g" \ -e "s/QQQQ/Z400/g" \ -e "s/QQQ/Z300/g" \ -e "s/QQ/Z200/g" \ -e "s/Q/Z100/g" \ -e "s/000Z//g" \ -e "s/$z10/Q/g" \ -e "s/QQQQQQQQQ/Z90/g" \ -e "s/QQQQQQQQ/Z80/g" \ -e "s/QQQQQQQ/Z70/g" \ -e "s/QQQQQQ/Z60/g" \ -e "s/QQQQQ/Z50/g" \ -e "s/QQQQ/Z40/g" \ -e "s/QQQ/Z30/g" \ -e "s/QQ/Z20/g" \ -e "s/Q/Z10/g" \ -e "s/00Z//g" \ -e "s/z/Q/g" \ -e "s/QQQQQQQQQ/Z9/g" \ -e "s/QQQQQQQQ/Z8/g" \ -e "s/QQQQQQQ/Z7/g" \ -e "s/QQQQQQ/Z6/g" \ -e "s/QQQQQ/Z5/g" \ -e "s/QQQQ/Z4/g" \ -e "s/QQQ/Z3/g" \ -e "s/QQ/Z2/g" \ -e "s/Q/Z1/g" \ -e "s/0Z//g" \ ; } expect_pattern () { cnt="$1" cat <<EOF diff --git a/file-a$cnt b/file-a$cnt --- a/file-a$cnt +++ b/file-a$cnt @@ -1 +1 @@ -Z${cnt}a +Z${cnt}A diff --git a/file-b$cnt b/file-b$cnt --- a/file-b$cnt +++ b/file-b$cnt @@ -1 +1 @@ -b +B diff --git a/file-c$cnt b/file-c$cnt --- a/file-c$cnt +++ b/file-c$cnt @@ -1 +1 @@ -cZ$cnt \ No newline at end of file +CZ$cnt \ No newline at end of file diff --git a/file-d$cnt b/file-d$cnt --- a/file-d$cnt +++ b/file-d$cnt @@ -1 +1 @@ -d +D EOF } sample='1023 1024 1025 2047 4095' test_expect_success setup ' for n in $sample do ( zs $n ; echo a ) >file-a$n && ( echo b; zs $n; echo ) >file-b$n && ( printf c; zs $n ) >file-c$n && ( echo d; zs $n ) >file-d$n && git add file-a$n file-b$n file-c$n file-d$n && ( zs $n ; echo A ) >file-a$n && ( echo B; zs $n; echo ) >file-b$n && ( printf C; zs $n ) >file-c$n && ( echo D; zs $n ) >file-d$n && expect_pattern $n || break done >expect ' test_expect_success 'diff -U0' ' for n in $sample do git diff -U0 file-?$n done | zc >actual && test_cmp expect actual ' test_done