Blame tests/diff3

Packit 33f14e
#!/bin/sh
Packit 33f14e
# This would malfunction in diff-3.4
Packit 33f14e
Packit 33f14e
. "${srcdir=.}/init.sh"; path_prepend_ ../src
Packit 33f14e
Packit 33f14e
# Some systems lack seq.
Packit 33f14e
# A limited replacement for seq: handle 1 or 2 args; increment must be 1
Packit 33f14e
seq()
Packit 33f14e
{
Packit 33f14e
  case $# in
Packit 33f14e
    1) start=1  final=$1;;
Packit 33f14e
    2) start=$1 final=$2;;
Packit 33f14e
    *) echo you lose 1>&2; exit 1;;
Packit 33f14e
  esac
Packit 33f14e
  awk 'BEGIN{for(i='$start';i<='$final';i++) print i}' < /dev/null
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
echo a > a || framework_failure_
Packit 33f14e
echo b > b || framework_failure_
Packit 33f14e
echo c > c || framework_failure_
Packit 33f14e
cat <<'EOF' > exp || framework_failure_
Packit 33f14e
====
Packit 33f14e
1:1c
Packit 33f14e
  a
Packit 33f14e
2:1c
Packit 33f14e
  b
Packit 33f14e
3:1c
Packit 33f14e
  c
Packit 33f14e
EOF
Packit 33f14e
Packit 33f14e
fail=0
Packit 33f14e
Packit 33f14e
diff3 a b c > out 2> err || fail=1
Packit 33f14e
compare exp out || fail=1
Packit 33f14e
compare /dev/null err || fail=1
Packit 33f14e
Packit 33f14e
# Repeat, but with all three files the same:
Packit 33f14e
diff3 a a a > out 2> err || fail=1
Packit 33f14e
compare /dev/null out || fail=1
Packit 33f14e
compare /dev/null err || fail=1
Packit 33f14e
Packit 33f14e
# This would have provoked a nontrivial leak prior to diffutils-3.5,
Packit 33f14e
# due to the nontrivial list of diff_block structs.
Packit 33f14e
seq 10 40|sed 's/1$/x/' > d || framework_failure_
Packit 33f14e
seq 10 40|sed 's/5$/y/' > e || framework_failure_
Packit 33f14e
seq 10 40|sed 's/8$/z/' > f || framework_failure_
Packit 33f14e
cat <<'EOF' > exp40 || framework_failure_
Packit 33f14e
====1
Packit 33f14e
1:2c
Packit 33f14e
  1x
Packit 33f14e
2:2c
Packit 33f14e
3:2c
Packit 33f14e
  11
Packit 33f14e
====2
Packit 33f14e
1:6c
Packit 33f14e
3:6c
Packit 33f14e
  15
Packit 33f14e
2:6c
Packit 33f14e
  1y
Packit 33f14e
====3
Packit 33f14e
1:9c
Packit 33f14e
2:9c
Packit 33f14e
  18
Packit 33f14e
3:9c
Packit 33f14e
  1z
Packit 33f14e
====1
Packit 33f14e
1:12c
Packit 33f14e
  2x
Packit 33f14e
2:12c
Packit 33f14e
3:12c
Packit 33f14e
  21
Packit 33f14e
====2
Packit 33f14e
1:16c
Packit 33f14e
3:16c
Packit 33f14e
  25
Packit 33f14e
2:16c
Packit 33f14e
  2y
Packit 33f14e
====3
Packit 33f14e
1:19c
Packit 33f14e
2:19c
Packit 33f14e
  28
Packit 33f14e
3:19c
Packit 33f14e
  2z
Packit 33f14e
====1
Packit 33f14e
1:22c
Packit 33f14e
  3x
Packit 33f14e
2:22c
Packit 33f14e
3:22c
Packit 33f14e
  31
Packit 33f14e
====2
Packit 33f14e
1:26c
Packit 33f14e
3:26c
Packit 33f14e
  35
Packit 33f14e
2:26c
Packit 33f14e
  3y
Packit 33f14e
====3
Packit 33f14e
1:29c
Packit 33f14e
2:29c
Packit 33f14e
  38
Packit 33f14e
3:29c
Packit 33f14e
  3z
Packit 33f14e
EOF
Packit 33f14e
Packit 33f14e
diff3 d e f > out 2> err
Packit 33f14e
compare exp40 out || fail=1
Packit 33f14e
compare /dev/null err || fail=1
Packit 33f14e
Packit 33f14e
Exit $fail