#!/bin/sh setglobal test_description = ''common tail optimization'' source ./test-lib.sh setglobal z = 'zzzzzzzz' ;# 8 setglobal z = ""$z$z$z$z$z$z$z$z"" ;# 64 setglobal z = ""$z$z$z$z$z$z$z$z"" ;# 512 setglobal z = ""$z$z$z$z"" ;# 2048 setglobal z2047 = $[expr $z : '.\(.*\)] ; #2047 setglobal x = 'zzzzzzzzzz' ;# 10 setglobal y = ""$x$x$x$x$x$x$x$x$x$x"" ;# 100 setglobal z = ""$y$y$y$y$y$y$y$y$y$y"" ;# 1000 setglobal z1000 = $z setglobal z100 = $y setglobal z10 = $x proc zs { setglobal count = $1 while test "$count" -ge 1000 { setglobal count = $shExpr('$count - 1000') printf "%s" $z1000 } while test "$count" -ge 100 { setglobal count = $shExpr('$count - 100') printf "%s" $z100 } while test "$count" -ge 10 { setglobal count = $shExpr('$count - 10') printf "%s" $z10 } while test "$count" -ge 1 { setglobal count = $shExpr('$count - 1') printf "z" } } proc 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" \ ; } proc expect_pattern { setglobal cnt = $1 cat << """ 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 """ } setglobal 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 || return 1 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