#!/bin/sh
. ./Common

###############################################################################

fped "tsort: total order" <<EOF
%tsort {
	a b
	a c
	a d
	b c
	b d
	c d
}
EOF
expect <<EOF
a
b
c
d
EOF

#------------------------------------------------------------------------------

fped "tsort: partial order change (1)" <<EOF
%tsort {
	a b
	a c
	a d
	d b
}
EOF
expect <<EOF
a
c
d
b
EOF

#------------------------------------------------------------------------------

fped "tsort: partial order change (2)" <<EOF
%tsort {
	b c
	c d
	a b
}
EOF
expect <<EOF
a
b
c
d
EOF

#------------------------------------------------------------------------------

fped "tsort: old order differs from resolution order" <<EOF
%tsort {
	+a +b +c +d
	a c
	a b
	a d
}
EOF
expect <<EOF
a
b
c
d
EOF

#------------------------------------------------------------------------------

fped "tsort: order change due to priority" <<EOF
%tsort {
	a b
	a c 1
	a d
}
EOF
expect <<EOF
a
c
b
d
EOF

#------------------------------------------------------------------------------

fped "tsort: priority accumulation without decay" <<EOF
%tsort {
	+a +b +c +d
	a b 1
	a d 1
}
EOF
expect <<EOF
a
b
d
c
EOF

#------------------------------------------------------------------------------

fped "tsort: priority accumulation with decay" <<EOF
%tsort {
	+a -b +c +d
	a b 1
	a d 1
}
EOF
expect <<EOF
a
b
c
d
EOF

#------------------------------------------------------------------------------

fped_fail "tsort: cycle" <<EOF
%tsort {
	a b
	b a
}
EOF
expect_sed '/Aborted/d' <<EOF
cycle detected in partial order
EOF

# The "Aborted" can be reported with or without "(core dumped)", and sometimes
# not at all. So we just remove it. We already know that tsort has detected
# the problem.

###############################################################################
