1# Helpers shared by the test scripts for diff algorithms (patience,
2# histogram, etc).
3
4test_diff_frobnitz() {
5	cat >file1 <<\EOF
6#include <stdio.h>
7
8// Frobs foo heartily
9int frobnitz(int foo)
10{
11    int i;
12    for(i = 0; i < 10; i++)
13    {
14        printf("Your answer is: ");
15        printf("%d\n", foo);
16    }
17}
18
19int fact(int n)
20{
21    if(n > 1)
22    {
23        return fact(n-1) * n;
24    }
25    return 1;
26}
27
28int main(int argc, char **argv)
29{
30    frobnitz(fact(10));
31}
32EOF
33
34	cat >file2 <<\EOF
35#include <stdio.h>
36
37int fib(int n)
38{
39    if(n > 2)
40    {
41        return fib(n-1) + fib(n-2);
42    }
43    return 1;
44}
45
46// Frobs foo heartily
47int frobnitz(int foo)
48{
49    int i;
50    for(i = 0; i < 10; i++)
51    {
52        printf("%d\n", foo);
53    }
54}
55
56int main(int argc, char **argv)
57{
58    frobnitz(fib(10));
59}
60EOF
61
62	file1=$(git rev-parse --short $(git hash-object file1))
63	file2=$(git rev-parse --short $(git hash-object file2))
64	cat >expect <<EOF
65diff --git a/file1 b/file2
66index $file1..$file2 100644
67--- a/file1
68+++ b/file2
69@@ -1,26 +1,25 @@
70 #include <stdio.h>
71 
72+int fib(int n)
73+{
74+    if(n > 2)
75+    {
76+        return fib(n-1) + fib(n-2);
77+    }
78+    return 1;
79+}
80+
81 // Frobs foo heartily
82 int frobnitz(int foo)
83 {
84     int i;
85     for(i = 0; i < 10; i++)
86     {
87-        printf("Your answer is: ");
88         printf("%d\n", foo);
89     }
90 }
91 
92-int fact(int n)
93-{
94-    if(n > 1)
95-    {
96-        return fact(n-1) * n;
97-    }
98-    return 1;
99-}
100-
101 int main(int argc, char **argv)
102 {
103-    frobnitz(fact(10));
104+    frobnitz(fib(10));
105 }
106EOF
107
108	STRATEGY=$1
109
110	test_expect_success "$STRATEGY diff" '
111		test_must_fail git diff --no-index "--$STRATEGY" file1 file2 > output &&
112		test_cmp expect output
113	'
114
115	test_expect_success "$STRATEGY diff output is valid" '
116		mv file2 expect &&
117		git apply < output &&
118		test_cmp expect file2
119	'
120}
121
122test_diff_unique() {
123	cat >uniq1 <<\EOF
1241
1252
1263
1274
1285
1296
130EOF
131
132	cat >uniq2 <<\EOF
133a
134b
135c
136d
137e
138f
139EOF
140
141	uniq1=$(git rev-parse --short $(git hash-object uniq1))
142	uniq2=$(git rev-parse --short $(git hash-object uniq2))
143	cat >expect <<EOF
144diff --git a/uniq1 b/uniq2
145index $uniq1..$uniq2 100644
146--- a/uniq1
147+++ b/uniq2
148@@ -1,6 +1,6 @@
149-1
150-2
151-3
152-4
153-5
154-6
155+a
156+b
157+c
158+d
159+e
160+f
161EOF
162
163	STRATEGY=$1
164
165	test_expect_success 'completely different files' '
166		test_must_fail git diff --no-index "--$STRATEGY" uniq1 uniq2 > output &&
167		test_cmp expect output
168	'
169}
170
171