170 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
# 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
 | 
						|
 | 
						|
	file1=$(git rev-parse --short $(git hash-object file1))
 | 
						|
	file2=$(git rev-parse --short $(git hash-object file2))
 | 
						|
	cat >expect <<EOF
 | 
						|
diff --git a/file1 b/file2
 | 
						|
index $file1..$file2 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
 | 
						|
 | 
						|
	uniq1=$(git rev-parse --short $(git hash-object uniq1))
 | 
						|
	uniq2=$(git rev-parse --short $(git hash-object uniq2))
 | 
						|
	cat >expect <<EOF
 | 
						|
diff --git a/uniq1 b/uniq2
 | 
						|
index $uniq1..$uniq2 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
 | 
						|
	'
 | 
						|
}
 | 
						|
 |