# -*- tcl -*-
# finite_automaton.test:  tests for the grammar::fa container.
#
# Copyright (c) 2004-2007 by Andreas Kupries <andreas_kupries@users.sourceforge.net>
#
# RCS: @(#) $Id: fa_is_useful.test,v 1.7 2007/04/12 03:43:14 andreas_kupries Exp $

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

if {![::tcltest::testConstraint runtotal]} {
    ::tcltest::cleanupTests
    return
}

# -------------------------------------------------------------------------
unset -nocomplain expected
array set expected {
    04.xy-.(x,y) _
    04.xy-.(x,xy) _
    04.xy-.(xy,y) _
    05.xye.(x,y) _
    05.xye.(x,xy) _
    05.xye.(xy,y) _
    06.xyee.(x,x) _
    06.xyee.(x,y) _
    06.xyee.(x,xy) _
    06.xyee.(y,x) _
    06.xyee.(y,y) _
    06.xyee.(y,xy) _
    06.xyee.(xy,x) _
    06.xyee.(xy,y) _
    07.xye-.(x,x) _
    07.xye-.(x,y) _
    07.xye-.(x,xy) _
    07.xye-.(y,x) _
    07.xye-.(y,y) _
    07.xye-.(y,xy) _
    07.xye-.(xy,x) _
    07.xye-.(xy,y) _
    08.xy--.(x,x) _
    08.xy--.(x,y) _
    08.xy--.(x,xy) _
    08.xy--.(y,x) _
    08.xy--.(y,y) _
    08.xy--.(y,xy) _
    08.xy--.(xy,x) _
    08.xy--.(xy,y) _
    09.xy-=.(x,x) _
    09.xy-=.(x,y) _
    09.xy-=.(x,xy) _
    09.xy-=.(y,x) _
    09.xy-=.(y,y) _
    09.xy-=.(y,xy) _
    09.xy-=.(xy,x) _
    09.xy-=.(xy,y) _
    10.xyz/ee.(x,yz) _
    10.xyz/ee.(x,xyz) _
    10.xyz/ee.(xy,yz) _
    10.xyz/ee.(xy,xyz) _
    10.xyz/ee.(xz,yz) _
    10.xyz/ee.(xz,xyz) _
    10.xyz/ee.(xyz,yz) _
    11.xyz/e-.(x,yz) _
    11.xyz/e-.(x,xyz) _
    11.xyz/e-.(xy,yz) _
    11.xyz/e-.(xy,xyz) _
    11.xyz/e-.(xz,yz) _
    11.xyz/e-.(xz,xyz) _
    11.xyz/e-.(xyz,yz) _
    12.xyz/--.(x,yz) _
    12.xyz/--.(x,xyz) _
    12.xyz/--.(xy,yz) _
    12.xyz/--.(xy,xyz) _
    12.xyz/--.(xz,yz) _
    12.xyz/--.(xz,xyz) _
    12.xyz/--.(xyz,yz) _
    13.xyz/-=.(x,yz) _
    13.xyz/-=.(x,xyz) _
    13.xyz/-=.(xy,yz) _
    13.xyz/-=.(xy,xyz) _
    13.xyz/-=.(xz,yz) _
    13.xyz/-=.(xz,xyz) _
    13.xyz/-=.(xyz,yz) _
    14.xyz|ee.(xy,z) _
    14.xyz|ee.(xy,xz) _
    14.xyz|ee.(xy,yz) _
    14.xyz|ee.(xy,xyz) _
    14.xyz|ee.(xyz,z) _
    14.xyz|ee.(xyz,xz) _
    14.xyz|ee.(xyz,yz) _
    15.xyz|e-.(xy,z) _
    15.xyz|e-.(xy,xz) _
    15.xyz|e-.(xy,yz) _
    15.xyz|e-.(xy,xyz) _
    15.xyz|e-.(xyz,z) _
    15.xyz|e-.(xyz,xz) _
    15.xyz|e-.(xyz,yz) _
    16.xyz|--.(xy,z) _
    16.xyz|--.(xy,xz) _
    16.xyz|--.(xy,yz) _
    16.xyz|--.(xy,xyz) _
    16.xyz|--.(xyz,z) _
    16.xyz|--.(xyz,xz) _
    16.xyz|--.(xyz,yz) _
    17.xyz|-=.(xy,z) _
    17.xyz|-=.(xy,xz) _
    17.xyz|-=.(xy,yz) _
    17.xyz|-=.(xy,xyz) _
    17.xyz|-=.(xyz,z) _
    17.xyz|-=.(xyz,xz) _
    17.xyz|-=.(xyz,yz) _
    18.xyz+eee.(x,x) _
    18.xyz+eee.(x,y) _
    18.xyz+eee.(x,z) _
    18.xyz+eee.(x,xy) _
    18.xyz+eee.(x,xz) _
    18.xyz+eee.(x,yz) _
    18.xyz+eee.(x,xyz) _
    18.xyz+eee.(y,x) _
    18.xyz+eee.(y,y) _
    18.xyz+eee.(y,z) _
    18.xyz+eee.(y,xy) _
    18.xyz+eee.(y,xz) _
    18.xyz+eee.(y,yz) _
    18.xyz+eee.(y,xyz) _
    18.xyz+eee.(z,x) _
    18.xyz+eee.(z,y) _
    18.xyz+eee.(z,z) _
    18.xyz+eee.(z,xy) _
    18.xyz+eee.(z,xz) _
    18.xyz+eee.(z,yz) _
    18.xyz+eee.(z,xyz) _
    18.xyz+eee.(xy,x) _
    18.xyz+eee.(xy,y) _
    18.xyz+eee.(xy,z) _
    18.xyz+eee.(xy,xy) _
    18.xyz+eee.(xy,xz) _
    18.xyz+eee.(xy,yz) _
    18.xyz+eee.(xy,xyz) _
    18.xyz+eee.(xz,x) _
    18.xyz+eee.(xz,y) _
    18.xyz+eee.(xz,z) _
    18.xyz+eee.(xz,xy) _
    18.xyz+eee.(xz,xz) _
    18.xyz+eee.(xz,yz) _
    18.xyz+eee.(xz,xyz) _
    18.xyz+eee.(yz,x) _
    18.xyz+eee.(yz,y) _
    18.xyz+eee.(yz,z) _
    18.xyz+eee.(yz,xy) _
    18.xyz+eee.(yz,xz) _
    18.xyz+eee.(yz,yz) _
    18.xyz+eee.(yz,xyz) _
    18.xyz+eee.(xyz,x) _
    18.xyz+eee.(xyz,y) _
    18.xyz+eee.(xyz,z) _
    18.xyz+eee.(xyz,xy) _
    18.xyz+eee.(xyz,xz) _
    18.xyz+eee.(xyz,yz) _
    19.xyz+ee-.(x,x) _
    19.xyz+ee-.(x,y) _
    19.xyz+ee-.(x,z) _
    19.xyz+ee-.(x,xy) _
    19.xyz+ee-.(x,xz) _
    19.xyz+ee-.(x,yz) _
    19.xyz+ee-.(x,xyz) _
    19.xyz+ee-.(y,x) _
    19.xyz+ee-.(y,y) _
    19.xyz+ee-.(y,z) _
    19.xyz+ee-.(y,xy) _
    19.xyz+ee-.(y,xz) _
    19.xyz+ee-.(y,yz) _
    19.xyz+ee-.(y,xyz) _
    19.xyz+ee-.(z,x) _
    19.xyz+ee-.(z,y) _
    19.xyz+ee-.(z,z) _
    19.xyz+ee-.(z,xy) _
    19.xyz+ee-.(z,xz) _
    19.xyz+ee-.(z,yz) _
    19.xyz+ee-.(z,xyz) _
    19.xyz+ee-.(xy,x) _
    19.xyz+ee-.(xy,y) _
    19.xyz+ee-.(xy,z) _
    19.xyz+ee-.(xy,xy) _
    19.xyz+ee-.(xy,xz) _
    19.xyz+ee-.(xy,yz) _
    19.xyz+ee-.(xy,xyz) _
    19.xyz+ee-.(xz,x) _
    19.xyz+ee-.(xz,y) _
    19.xyz+ee-.(xz,z) _
    19.xyz+ee-.(xz,xy) _
    19.xyz+ee-.(xz,xz) _
    19.xyz+ee-.(xz,yz) _
    19.xyz+ee-.(xz,xyz) _
    19.xyz+ee-.(yz,x) _
    19.xyz+ee-.(yz,y) _
    19.xyz+ee-.(yz,z) _
    19.xyz+ee-.(yz,xy) _
    19.xyz+ee-.(yz,xz) _
    19.xyz+ee-.(yz,yz) _
    19.xyz+ee-.(yz,xyz) _
    19.xyz+ee-.(xyz,x) _
    19.xyz+ee-.(xyz,y) _
    19.xyz+ee-.(xyz,z) _
    19.xyz+ee-.(xyz,xy) _
    19.xyz+ee-.(xyz,xz) _
    19.xyz+ee-.(xyz,yz) _
    20.xyz+e--.(x,x) _
    20.xyz+e--.(x,y) _
    20.xyz+e--.(x,z) _
    20.xyz+e--.(x,xy) _
    20.xyz+e--.(x,xz) _
    20.xyz+e--.(x,yz) _
    20.xyz+e--.(x,xyz) _
    20.xyz+e--.(y,x) _
    20.xyz+e--.(y,y) _
    20.xyz+e--.(y,z) _
    20.xyz+e--.(y,xy) _
    20.xyz+e--.(y,xz) _
    20.xyz+e--.(y,yz) _
    20.xyz+e--.(y,xyz) _
    20.xyz+e--.(z,x) _
    20.xyz+e--.(z,y) _
    20.xyz+e--.(z,z) _
    20.xyz+e--.(z,xy) _
    20.xyz+e--.(z,xz) _
    20.xyz+e--.(z,yz) _
    20.xyz+e--.(z,xyz) _
    20.xyz+e--.(xy,x) _
    20.xyz+e--.(xy,y) _
    20.xyz+e--.(xy,z) _
    20.xyz+e--.(xy,xy) _
    20.xyz+e--.(xy,xz) _
    20.xyz+e--.(xy,yz) _
    20.xyz+e--.(xy,xyz) _
    20.xyz+e--.(xz,x) _
    20.xyz+e--.(xz,y) _
    20.xyz+e--.(xz,z) _
    20.xyz+e--.(xz,xy) _
    20.xyz+e--.(xz,xz) _
    20.xyz+e--.(xz,yz) _
    20.xyz+e--.(xz,xyz) _
    20.xyz+e--.(yz,x) _
    20.xyz+e--.(yz,y) _
    20.xyz+e--.(yz,z) _
    20.xyz+e--.(yz,xy) _
    20.xyz+e--.(yz,xz) _
    20.xyz+e--.(yz,yz) _
    20.xyz+e--.(yz,xyz) _
    20.xyz+e--.(xyz,x) _
    20.xyz+e--.(xyz,y) _
    20.xyz+e--.(xyz,z) _
    20.xyz+e--.(xyz,xy) _
    20.xyz+e--.(xyz,xz) _
    20.xyz+e--.(xyz,yz) _
    21.xyz+e-=.(x,x) _
    21.xyz+e-=.(x,y) _
    21.xyz+e-=.(x,z) _
    21.xyz+e-=.(x,xy) _
    21.xyz+e-=.(x,xz) _
    21.xyz+e-=.(x,yz) _
    21.xyz+e-=.(x,xyz) _
    21.xyz+e-=.(y,x) _
    21.xyz+e-=.(y,y) _
    21.xyz+e-=.(y,z) _
    21.xyz+e-=.(y,xy) _
    21.xyz+e-=.(y,xz) _
    21.xyz+e-=.(y,yz) _
    21.xyz+e-=.(y,xyz) _
    21.xyz+e-=.(z,x) _
    21.xyz+e-=.(z,y) _
    21.xyz+e-=.(z,z) _
    21.xyz+e-=.(z,xy) _
    21.xyz+e-=.(z,xz) _
    21.xyz+e-=.(z,yz) _
    21.xyz+e-=.(z,xyz) _
    21.xyz+e-=.(xy,x) _
    21.xyz+e-=.(xy,y) _
    21.xyz+e-=.(xy,z) _
    21.xyz+e-=.(xy,xy) _
    21.xyz+e-=.(xy,xz) _
    21.xyz+e-=.(xy,yz) _
    21.xyz+e-=.(xy,xyz) _
    21.xyz+e-=.(xz,x) _
    21.xyz+e-=.(xz,y) _
    21.xyz+e-=.(xz,z) _
    21.xyz+e-=.(xz,xy) _
    21.xyz+e-=.(xz,xz) _
    21.xyz+e-=.(xz,yz) _
    21.xyz+e-=.(xz,xyz) _
    21.xyz+e-=.(yz,x) _
    21.xyz+e-=.(yz,y) _
    21.xyz+e-=.(yz,z) _
    21.xyz+e-=.(yz,xy) _
    21.xyz+e-=.(yz,xz) _
    21.xyz+e-=.(yz,yz) _
    21.xyz+e-=.(yz,xyz) _
    21.xyz+e-=.(xyz,x) _
    21.xyz+e-=.(xyz,y) _
    21.xyz+e-=.(xyz,z) _
    21.xyz+e-=.(xyz,xy) _
    21.xyz+e-=.(xyz,xz) _
    21.xyz+e-=.(xyz,yz) _
    22.xyz+---.(x,x) _
    22.xyz+---.(x,y) _
    22.xyz+---.(x,z) _
    22.xyz+---.(x,xy) _
    22.xyz+---.(x,xz) _
    22.xyz+---.(x,yz) _
    22.xyz+---.(x,xyz) _
    22.xyz+---.(y,x) _
    22.xyz+---.(y,y) _
    22.xyz+---.(y,z) _
    22.xyz+---.(y,xy) _
    22.xyz+---.(y,xz) _
    22.xyz+---.(y,yz) _
    22.xyz+---.(y,xyz) _
    22.xyz+---.(z,x) _
    22.xyz+---.(z,y) _
    22.xyz+---.(z,z) _
    22.xyz+---.(z,xy) _
    22.xyz+---.(z,xz) _
    22.xyz+---.(z,yz) _
    22.xyz+---.(z,xyz) _
    22.xyz+---.(xy,x) _
    22.xyz+---.(xy,y) _
    22.xyz+---.(xy,z) _
    22.xyz+---.(xy,xy) _
    22.xyz+---.(xy,xz) _
    22.xyz+---.(xy,yz) _
    22.xyz+---.(xy,xyz) _
    22.xyz+---.(xz,x) _
    22.xyz+---.(xz,y) _
    22.xyz+---.(xz,z) _
    22.xyz+---.(xz,xy) _
    22.xyz+---.(xz,xz) _
    22.xyz+---.(xz,yz) _
    22.xyz+---.(xz,xyz) _
    22.xyz+---.(yz,x) _
    22.xyz+---.(yz,y) _
    22.xyz+---.(yz,z) _
    22.xyz+---.(yz,xy) _
    22.xyz+---.(yz,xz) _
    22.xyz+---.(yz,yz) _
    22.xyz+---.(yz,xyz) _
    22.xyz+---.(xyz,x) _
    22.xyz+---.(xyz,y) _
    22.xyz+---.(xyz,z) _
    22.xyz+---.(xyz,xy) _
    22.xyz+---.(xyz,xz) _
    22.xyz+---.(xyz,yz) _
    23.xyz+--=.(x,x) _
    23.xyz+--=.(x,y) _
    23.xyz+--=.(x,z) _
    23.xyz+--=.(x,xy) _
    23.xyz+--=.(x,xz) _
    23.xyz+--=.(x,yz) _
    23.xyz+--=.(x,xyz) _
    23.xyz+--=.(y,x) _
    23.xyz+--=.(y,y) _
    23.xyz+--=.(y,z) _
    23.xyz+--=.(y,xy) _
    23.xyz+--=.(y,xz) _
    23.xyz+--=.(y,yz) _
    23.xyz+--=.(y,xyz) _
    23.xyz+--=.(z,x) _
    23.xyz+--=.(z,y) _
    23.xyz+--=.(z,z) _
    23.xyz+--=.(z,xy) _
    23.xyz+--=.(z,xz) _
    23.xyz+--=.(z,yz) _
    23.xyz+--=.(z,xyz) _
    23.xyz+--=.(xy,x) _
    23.xyz+--=.(xy,y) _
    23.xyz+--=.(xy,z) _
    23.xyz+--=.(xy,xy) _
    23.xyz+--=.(xy,xz) _
    23.xyz+--=.(xy,yz) _
    23.xyz+--=.(xy,xyz) _
    23.xyz+--=.(xz,x) _
    23.xyz+--=.(xz,y) _
    23.xyz+--=.(xz,z) _
    23.xyz+--=.(xz,xy) _
    23.xyz+--=.(xz,xz) _
    23.xyz+--=.(xz,yz) _
    23.xyz+--=.(xz,xyz) _
    23.xyz+--=.(yz,x) _
    23.xyz+--=.(yz,y) _
    23.xyz+--=.(yz,z) _
    23.xyz+--=.(yz,xy) _
    23.xyz+--=.(yz,xz) _
    23.xyz+--=.(yz,yz) _
    23.xyz+--=.(yz,xyz) _
    23.xyz+--=.(xyz,x) _
    23.xyz+--=.(xyz,y) _
    23.xyz+--=.(xyz,z) _
    23.xyz+--=.(xyz,xy) _
    23.xyz+--=.(xyz,xz) _
    23.xyz+--=.(xyz,yz) _
    24.xyz+-=_.(x,x) _
    24.xyz+-=_.(x,y) _
    24.xyz+-=_.(x,z) _
    24.xyz+-=_.(x,xy) _
    24.xyz+-=_.(x,xz) _
    24.xyz+-=_.(x,yz) _
    24.xyz+-=_.(x,xyz) _
    24.xyz+-=_.(y,x) _
    24.xyz+-=_.(y,y) _
    24.xyz+-=_.(y,z) _
    24.xyz+-=_.(y,xy) _
    24.xyz+-=_.(y,xz) _
    24.xyz+-=_.(y,yz) _
    24.xyz+-=_.(y,xyz) _
    24.xyz+-=_.(z,x) _
    24.xyz+-=_.(z,y) _
    24.xyz+-=_.(z,z) _
    24.xyz+-=_.(z,xy) _
    24.xyz+-=_.(z,xz) _
    24.xyz+-=_.(z,yz) _
    24.xyz+-=_.(z,xyz) _
    24.xyz+-=_.(xy,x) _
    24.xyz+-=_.(xy,y) _
    24.xyz+-=_.(xy,z) _
    24.xyz+-=_.(xy,xy) _
    24.xyz+-=_.(xy,xz) _
    24.xyz+-=_.(xy,yz) _
    24.xyz+-=_.(xy,xyz) _
    24.xyz+-=_.(xz,x) _
    24.xyz+-=_.(xz,y) _
    24.xyz+-=_.(xz,z) _
    24.xyz+-=_.(xz,xy) _
    24.xyz+-=_.(xz,xz) _
    24.xyz+-=_.(xz,yz) _
    24.xyz+-=_.(xz,xyz) _
    24.xyz+-=_.(yz,x) _
    24.xyz+-=_.(yz,y) _
    24.xyz+-=_.(yz,z) _
    24.xyz+-=_.(yz,xy) _
    24.xyz+-=_.(yz,xz) _
    24.xyz+-=_.(yz,yz) _
    24.xyz+-=_.(yz,xyz) _
    24.xyz+-=_.(xyz,x) _
    24.xyz+-=_.(xyz,y) _
    24.xyz+-=_.(xyz,z) _
    24.xyz+-=_.(xyz,xy) _
    24.xyz+-=_.(xyz,xz) _
    24.xyz+-=_.(xyz,yz) _
    25.xyz&eee.(x,z) _
    25.xyz&eee.(x,xz) _
    25.xyz&eee.(x,yz) _
    25.xyz&eee.(x,xyz) _
    25.xyz&eee.(xy,z) _
    25.xyz&eee.(xy,xz) _
    25.xyz&eee.(xy,yz) _
    25.xyz&eee.(xy,xyz) _
    25.xyz&eee.(xz,z) _
    25.xyz&eee.(xz,xz) _
    25.xyz&eee.(xz,yz) _
    25.xyz&eee.(xz,xyz) _
    25.xyz&eee.(xyz,z) _
    25.xyz&eee.(xyz,xz) _
    25.xyz&eee.(xyz,yz) _
    26.xyz&ee-.(x,z) _
    26.xyz&ee-.(x,xz) _
    26.xyz&ee-.(x,yz) _
    26.xyz&ee-.(x,xyz) _
    26.xyz&ee-.(xy,z) _
    26.xyz&ee-.(xy,xz) _
    26.xyz&ee-.(xy,yz) _
    26.xyz&ee-.(xy,xyz) _
    26.xyz&ee-.(xz,z) _
    26.xyz&ee-.(xz,xz) _
    26.xyz&ee-.(xz,yz) _
    26.xyz&ee-.(xz,xyz) _
    26.xyz&ee-.(xyz,z) _
    26.xyz&ee-.(xyz,xz) _
    26.xyz&ee-.(xyz,yz) _
    27.xyz&e--.(x,z) _
    27.xyz&e--.(x,xz) _
    27.xyz&e--.(x,yz) _
    27.xyz&e--.(x,xyz) _
    27.xyz&e--.(xy,z) _
    27.xyz&e--.(xy,xz) _
    27.xyz&e--.(xy,yz) _
    27.xyz&e--.(xy,xyz) _
    27.xyz&e--.(xz,z) _
    27.xyz&e--.(xz,xz) _
    27.xyz&e--.(xz,yz) _
    27.xyz&e--.(xz,xyz) _
    27.xyz&e--.(xyz,z) _
    27.xyz&e--.(xyz,xz) _
    27.xyz&e--.(xyz,yz) _
    28.xyz&e-=.(x,z) _
    28.xyz&e-=.(x,xz) _
    28.xyz&e-=.(x,yz) _
    28.xyz&e-=.(x,xyz) _
    28.xyz&e-=.(xy,z) _
    28.xyz&e-=.(xy,xz) _
    28.xyz&e-=.(xy,yz) _
    28.xyz&e-=.(xy,xyz) _
    28.xyz&e-=.(xz,z) _
    28.xyz&e-=.(xz,xz) _
    28.xyz&e-=.(xz,yz) _
    28.xyz&e-=.(xz,xyz) _
    28.xyz&e-=.(xyz,z) _
    28.xyz&e-=.(xyz,xz) _
    28.xyz&e-=.(xyz,yz) _
    29.xyz&---.(x,z) _
    29.xyz&---.(x,xz) _
    29.xyz&---.(x,yz) _
    29.xyz&---.(x,xyz) _
    29.xyz&---.(xy,z) _
    29.xyz&---.(xy,xz) _
    29.xyz&---.(xy,yz) _
    29.xyz&---.(xy,xyz) _
    29.xyz&---.(xz,z) _
    29.xyz&---.(xz,xz) _
    29.xyz&---.(xz,yz) _
    29.xyz&---.(xz,xyz) _
    29.xyz&---.(xyz,z) _
    29.xyz&---.(xyz,xz) _
    29.xyz&---.(xyz,yz) _
    30.xyz&--=.(x,z) _
    30.xyz&--=.(x,xz) _
    30.xyz&--=.(x,yz) _
    30.xyz&--=.(x,xyz) _
    30.xyz&--=.(xy,z) _
    30.xyz&--=.(xy,xz) _
    30.xyz&--=.(xy,yz) _
    30.xyz&--=.(xy,xyz) _
    30.xyz&--=.(xz,z) _
    30.xyz&--=.(xz,xz) _
    30.xyz&--=.(xz,yz) _
    30.xyz&--=.(xz,xyz) _
    30.xyz&--=.(xyz,z) _
    30.xyz&--=.(xyz,xz) _
    30.xyz&--=.(xyz,yz) _
    31.xyz&-=_.(x,z) _
    31.xyz&-=_.(x,xz) _
    31.xyz&-=_.(x,yz) _
    31.xyz&-=_.(x,xyz) _
    31.xyz&-=_.(xy,z) _
    31.xyz&-=_.(xy,xz) _
    31.xyz&-=_.(xy,yz) _
    31.xyz&-=_.(xy,xyz) _
    31.xyz&-=_.(xz,z) _
    31.xyz&-=_.(xz,xz) _
    31.xyz&-=_.(xz,yz) _
    31.xyz&-=_.(xz,xyz) _
    31.xyz&-=_.(xyz,z) _
    31.xyz&-=_.(xyz,xz) _
    31.xyz&-=_.(xyz,yz) _
    32.xyz!ee.(x,z) _
    32.xyz!ee.(x,xz) _
    32.xyz!ee.(x,yz) _
    32.xyz!ee.(x,xyz) _
    32.xyz!ee.(xy,z) _
    32.xyz!ee.(xy,xz) _
    32.xyz!ee.(xy,yz) _
    32.xyz!ee.(xy,xyz) _
    32.xyz!ee.(xz,z) _
    32.xyz!ee.(xz,xz) _
    32.xyz!ee.(xz,yz) _
    32.xyz!ee.(xz,xyz) _
    32.xyz!ee.(xyz,z) _
    32.xyz!ee.(xyz,xz) _
    32.xyz!ee.(xyz,yz) _
    33.xyz!e-.(x,z) _
    33.xyz!e-.(x,xz) _
    33.xyz!e-.(x,yz) _
    33.xyz!e-.(x,xyz) _
    33.xyz!e-.(xy,z) _
    33.xyz!e-.(xy,xz) _
    33.xyz!e-.(xy,yz) _
    33.xyz!e-.(xy,xyz) _
    33.xyz!e-.(xz,z) _
    33.xyz!e-.(xz,xz) _
    33.xyz!e-.(xz,yz) _
    33.xyz!e-.(xz,xyz) _
    33.xyz!e-.(xyz,z) _
    33.xyz!e-.(xyz,xz) _
    33.xyz!e-.(xyz,yz) _
    34.xyz!--.(x,z) _
    34.xyz!--.(x,xz) _
    34.xyz!--.(x,yz) _
    34.xyz!--.(x,xyz) _
    34.xyz!--.(xy,z) _
    34.xyz!--.(xy,xz) _
    34.xyz!--.(xy,yz) _
    34.xyz!--.(xy,xyz) _
    34.xyz!--.(xz,z) _
    34.xyz!--.(xz,xz) _
    34.xyz!--.(xz,yz) _
    34.xyz!--.(xz,xyz) _
    34.xyz!--.(xyz,z) _
    34.xyz!--.(xyz,xz) _
    34.xyz!--.(xyz,yz) _
    35.xyz!-=.(x,z) _
    35.xyz!-=.(x,xz) _
    35.xyz!-=.(x,yz) _
    35.xyz!-=.(x,xyz) _
    35.xyz!-=.(xy,z) _
    35.xyz!-=.(xy,xz) _
    35.xyz!-=.(xy,yz) _
    35.xyz!-=.(xy,xyz) _
    35.xyz!-=.(xz,z) _
    35.xyz!-=.(xz,xz) _
    35.xyz!-=.(xz,yz) _
    35.xyz!-=.(xz,xyz) _
    35.xyz!-=.(xyz,z) _
    35.xyz!-=.(xyz,xz) _
    35.xyz!-=.(xyz,yz) _
    36.xyz!-e.(x,z) _
    36.xyz!-e.(x,xz) _
    36.xyz!-e.(x,yz) _
    36.xyz!-e.(x,xyz) _
    36.xyz!-e.(xy,z) _
    36.xyz!-e.(xy,xz) _
    36.xyz!-e.(xy,yz) _
    36.xyz!-e.(xy,xyz) _
    36.xyz!-e.(xz,z) _
    36.xyz!-e.(xz,xz) _
    36.xyz!-e.(xz,yz) _
    36.xyz!-e.(xz,xyz) _
    36.xyz!-e.(xyz,z) _
    36.xyz!-e.(xyz,xz) _
    36.xyz!-e.(xyz,yz) _
}

foreach {n code} {
    00 x
    01 x-
    02 xe
    03 xy
    04 xy-
    05 xye
    06 xyee
    07 xye-
    08 xy--
    09 xy-=
    10 xyz/ee
    11 xyz/e-
    12 xyz/--
    13 xyz/-=
    14 xyz|ee
    15 xyz|e-
    16 xyz|--
    17 xyz|-=
    18 xyz+eee
    19 xyz+ee-
    20 xyz+e--
    21 xyz+e-=
    22 xyz+---
    23 xyz+--=
    24 xyz+-=_
    25 xyz&eee
    26 xyz&ee-
    27 xyz&e--
    28 xyz&e-=
    29 xyz&---
    30 xyz&--=
    31 xyz&-=_
    32 xyz!ee
    33 xyz!e-
    34 xyz!--
    35 xyz!-=
    36 xyz!-e
} {
    if {[string match xyz* $code]} {
	set sets {{} x y z {x y} {x z} {y z} {x y z}}
	set max 2
    } elseif {[string match xy* $code]} {
	set sets {{} x y {x y}}
	set max 1
    } elseif {[string match x* $code]} {
	set sets {{} x}
	set max 0
    } else {
	set sets {{}}
	set max 4
    }

    foreach st $sets {
	foreach fin $sets {
	    set key $n.$code.([join $st {}],[join $fin {}])

	    if {
		([join $st {}] eq [join $fin {}]) &&
		([join $st {}] eq [string range $code 0 $max])
	    } {
		# If all states are both start and final the FA cannot
		# be other than useful.
		set expected($key) .
	    }

	    test fa-is-${setimpl}-useful-1.$key {is useful} {
		grammar::fa a
		gen $code
		a start set $st
		a final set $fin
		set res [a is useful]
		a destroy
		set res
	    } [info exists expected($key)] ;# {}
	}
    }
}


#parray expected
unset   expected


# -------------------------------------------------------------------------
::tcltest::cleanupTests