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