1 #!/bin/sh
3 test_description='patience diff algorithm'
5 . ./test-lib.sh
7 cat >file1 <<\EOF
8 #include <stdio.h>
10 // Frobs foo heartily
11 int frobnitz(int foo)
12 {
13 int i;
14 for(i = 0; i < 10; i++)
15 {
16 printf("Your answer is: ");
17 printf("%d\n", foo);
18 }
19 }
21 int fact(int n)
22 {
23 if(n > 1)
24 {
25 return fact(n-1) * n;
26 }
27 return 1;
28 }
30 int main(int argc, char **argv)
31 {
32 frobnitz(fact(10));
33 }
34 EOF
36 cat >file2 <<\EOF
37 #include <stdio.h>
39 int fib(int n)
40 {
41 if(n > 2)
42 {
43 return fib(n-1) + fib(n-2);
44 }
45 return 1;
46 }
48 // Frobs foo heartily
49 int frobnitz(int foo)
50 {
51 int i;
52 for(i = 0; i < 10; i++)
53 {
54 printf("%d\n", foo);
55 }
56 }
58 int main(int argc, char **argv)
59 {
60 frobnitz(fib(10));
61 }
62 EOF
64 cat >expect <<\EOF
65 diff --git a/file1 b/file2
66 index 6faa5a3..e3af329 100644
67 --- a/file1
68 +++ b/file2
69 @@ -1,26 +1,25 @@
70 #include <stdio.h>
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 }
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 }
106 EOF
108 test_expect_success 'patience diff' '
110 test_must_fail git diff --no-index --patience file1 file2 > output &&
111 test_cmp expect output
113 '
115 test_expect_success 'patience diff output is valid' '
117 mv file2 expect &&
118 git apply < output &&
119 test_cmp expect file2
121 '
123 cat >uniq1 <<\EOF
124 1
125 2
126 3
127 4
128 5
129 6
130 EOF
132 cat >uniq2 <<\EOF
133 a
134 b
135 c
136 d
137 e
138 f
139 EOF
141 cat >expect <<\EOF
142 diff --git a/uniq1 b/uniq2
143 index b414108..0fdf397 100644
144 --- a/uniq1
145 +++ b/uniq2
146 @@ -1,6 +1,6 @@
147 -1
148 -2
149 -3
150 -4
151 -5
152 -6
153 +a
154 +b
155 +c
156 +d
157 +e
158 +f
159 EOF
161 test_expect_success 'completely different files' '
163 test_must_fail git diff --no-index --patience uniq1 uniq2 > output &&
164 test_cmp expect output
166 '
168 test_done