maint: post-release administrivia
[diffutils.git] / tests / diff3
blobe4682437cbbf8cccbf6da9be9ab5a9ba2bd5702b
1 #!/bin/sh
2 # This would malfunction in diff-3.4
4 . "${srcdir=.}/init.sh"; path_prepend_ ../src
6 # Some systems lack seq.
7 # A limited replacement for seq: handle 1 or 2 args; increment must be 1
8 seq()
10 case $# in
11 1) start=1 final=$1;;
12 2) start=$1 final=$2;;
13 *) echo you lose 1>&2; exit 1;;
14 esac
15 awk 'BEGIN{for(i='$start';i<='$final';i++) print i}' < /dev/null
18 echo a > a || framework_failure_
19 echo b > b || framework_failure_
20 echo c > c || framework_failure_
21 cat <<'EOF' > exp || framework_failure_
22 ====
23 1:1c
25 2:1c
27 3:1c
29 EOF
31 fail=0
33 # Use --diff-program=diff since --program-transform-name and similar are
34 # applied after 'make install'.
35 diff3 --diff-program=diff a b c > out 2> err || fail=1
36 compare exp out || fail=1
37 compare /dev/null err || fail=1
39 # Repeat, but with all three files the same:
40 diff3 --diff-program=diff a a a > out 2> err || fail=1
41 compare /dev/null out || fail=1
42 compare /dev/null err || fail=1
44 # This would have provoked a nontrivial leak prior to diffutils-3.5,
45 # due to the nontrivial list of diff_block structs.
46 seq 10 40|sed 's/1$/x/' > d || framework_failure_
47 seq 10 40|sed 's/5$/y/' > e || framework_failure_
48 seq 10 40|sed 's/8$/z/' > f || framework_failure_
49 cat <<'EOF' > exp40 || framework_failure_
50 ====1
51 1:2c
53 2:2c
54 3:2c
56 ====2
57 1:6c
58 3:6c
60 2:6c
62 ====3
63 1:9c
64 2:9c
66 3:9c
68 ====1
69 1:12c
71 2:12c
72 3:12c
74 ====2
75 1:16c
76 3:16c
78 2:16c
80 ====3
81 1:19c
82 2:19c
84 3:19c
86 ====1
87 1:22c
89 2:22c
90 3:22c
92 ====2
93 1:26c
94 3:26c
96 2:26c
98 ====3
99 1:29c
100 2:29c
102 3:29c
106 diff3 --diff-program=diff d e f > out 2> err
107 compare exp40 out || fail=1
108 compare /dev/null err || fail=1
110 Exit $fail