| # Helpers shared by the test scripts for diff algorithms (patience, | 
 | # histogram, etc). | 
 |  | 
 | test_diff_frobnitz() { | 
 | 	cat >file1 <<\EOF | 
 | #include <stdio.h> | 
 |  | 
 | // Frobs foo heartily | 
 | int frobnitz(int foo) | 
 | { | 
 |     int i; | 
 |     for(i = 0; i < 10; i++) | 
 |     { | 
 |         printf("Your answer is: "); | 
 |         printf("%d\n", foo); | 
 |     } | 
 | } | 
 |  | 
 | int fact(int n) | 
 | { | 
 |     if(n > 1) | 
 |     { | 
 |         return fact(n-1) * n; | 
 |     } | 
 |     return 1; | 
 | } | 
 |  | 
 | int main(int argc, char **argv) | 
 | { | 
 |     frobnitz(fact(10)); | 
 | } | 
 | EOF | 
 |  | 
 | 	cat >file2 <<\EOF | 
 | #include <stdio.h> | 
 |  | 
 | int fib(int n) | 
 | { | 
 |     if(n > 2) | 
 |     { | 
 |         return fib(n-1) + fib(n-2); | 
 |     } | 
 |     return 1; | 
 | } | 
 |  | 
 | // Frobs foo heartily | 
 | int frobnitz(int foo) | 
 | { | 
 |     int i; | 
 |     for(i = 0; i < 10; i++) | 
 |     { | 
 |         printf("%d\n", foo); | 
 |     } | 
 | } | 
 |  | 
 | int main(int argc, char **argv) | 
 | { | 
 |     frobnitz(fib(10)); | 
 | } | 
 | EOF | 
 |  | 
 | 	cat >expect <<\EOF | 
 | diff --git a/file1 b/file2 | 
 | index 6faa5a3..e3af329 100644 | 
 | --- a/file1 | 
 | +++ b/file2 | 
 | @@ -1,26 +1,25 @@ | 
 |  #include <stdio.h> | 
 |   | 
 | +int fib(int n) | 
 | +{ | 
 | +    if(n > 2) | 
 | +    { | 
 | +        return fib(n-1) + fib(n-2); | 
 | +    } | 
 | +    return 1; | 
 | +} | 
 | + | 
 |  // Frobs foo heartily | 
 |  int frobnitz(int foo) | 
 |  { | 
 |      int i; | 
 |      for(i = 0; i < 10; i++) | 
 |      { | 
 | -        printf("Your answer is: "); | 
 |          printf("%d\n", foo); | 
 |      } | 
 |  } | 
 |   | 
 | -int fact(int n) | 
 | -{ | 
 | -    if(n > 1) | 
 | -    { | 
 | -        return fact(n-1) * n; | 
 | -    } | 
 | -    return 1; | 
 | -} | 
 | - | 
 |  int main(int argc, char **argv) | 
 |  { | 
 | -    frobnitz(fact(10)); | 
 | +    frobnitz(fib(10)); | 
 |  } | 
 | EOF | 
 |  | 
 | 	STRATEGY=$1 | 
 |  | 
 | 	test_expect_success "$STRATEGY diff" ' | 
 | 		test_must_fail git diff --no-index "--$STRATEGY" file1 file2 > output && | 
 | 		test_cmp expect output | 
 | 	' | 
 |  | 
 | 	test_expect_success "$STRATEGY diff output is valid" ' | 
 | 		mv file2 expect && | 
 | 		git apply < output && | 
 | 		test_cmp expect file2 | 
 | 	' | 
 | } | 
 |  | 
 | test_diff_unique() { | 
 | 	cat >uniq1 <<\EOF | 
 | 1 | 
 | 2 | 
 | 3 | 
 | 4 | 
 | 5 | 
 | 6 | 
 | EOF | 
 |  | 
 | 	cat >uniq2 <<\EOF | 
 | a | 
 | b | 
 | c | 
 | d | 
 | e | 
 | f | 
 | EOF | 
 |  | 
 | 	cat >expect <<\EOF | 
 | diff --git a/uniq1 b/uniq2 | 
 | index b414108..0fdf397 100644 | 
 | --- a/uniq1 | 
 | +++ b/uniq2 | 
 | @@ -1,6 +1,6 @@ | 
 | -1 | 
 | -2 | 
 | -3 | 
 | -4 | 
 | -5 | 
 | -6 | 
 | +a | 
 | +b | 
 | +c | 
 | +d | 
 | +e | 
 | +f | 
 | EOF | 
 |  | 
 | 	STRATEGY=$1 | 
 |  | 
 | 	test_expect_success 'completely different files' ' | 
 | 		test_must_fail git diff --no-index "--$STRATEGY" uniq1 uniq2 > output && | 
 | 		test_cmp expect output | 
 | 	' | 
 | } | 
 |  |