Merge branch 'jc/rename-degrade-cc-to-c' into maint
[git] / t / t4033-diff-patience.sh
1 #!/bin/sh
2
3 test_description='patience diff algorithm'
4
5 . ./test-lib.sh
6
7 cat >file1 <<\EOF
8 #include <stdio.h>
9
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 }
20
21 int fact(int n)
22 {
23     if(n > 1)
24     {
25         return fact(n-1) * n;
26     }
27     return 1;
28 }
29
30 int main(int argc, char **argv)
31 {
32     frobnitz(fact(10));
33 }
34 EOF
35
36 cat >file2 <<\EOF
37 #include <stdio.h>
38
39 int fib(int n)
40 {
41     if(n > 2)
42     {
43         return fib(n-1) + fib(n-2);
44     }
45     return 1;
46 }
47
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 }
57
58 int main(int argc, char **argv)
59 {
60     frobnitz(fib(10));
61 }
62 EOF
63
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>
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  }
106 EOF
107
108 test_expect_success 'patience diff' '
109
110         test_must_fail git diff --no-index --patience file1 file2 > output &&
111         test_cmp expect output
112
113 '
114
115 test_expect_success 'patience diff output is valid' '
116
117         mv file2 expect &&
118         git apply < output &&
119         test_cmp expect file2
120
121 '
122
123 cat >uniq1 <<\EOF
124 1
125 2
126 3
127 4
128 5
129 6
130 EOF
131
132 cat >uniq2 <<\EOF
133 a
134 b
135 c
136 d
137 e
138 f
139 EOF
140
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
160
161 test_expect_success 'completely different files' '
162
163         test_must_fail git diff --no-index --patience uniq1 uniq2 > output &&
164         test_cmp expect output
165
166 '
167
168 test_done