  We present a practical algorithm to test whether a 3-manifold given by a
triangulation or an ideal triangulation contains a closed essential surface.
This property has important theoretical and algorithmic consequences. As a
testament to its practicality, we run the algorithm over a comprehensive body
of closed 3-manifolds and knot exteriors, yielding results that were not
previously known.
  The algorithm derives from the original Jaco-Oertel framework, involves both
enumeration and optimisation procedures, and combines several techniques from
normal surface theory. Our methods are relevant for other difficult
computational problems in 3-manifold theory, such as the recognition problem
for knots, links and 3-manifolds.
