diff options
Diffstat (limited to 'gr-trellis/src/lib')
-rw-r--r-- | gr-trellis/src/lib/.gitignore | 193 | ||||
-rw-r--r-- | gr-trellis/src/lib/Makefile.am | 188 | ||||
-rw-r--r-- | gr-trellis/src/lib/Makefile.swig.gen | 145 | ||||
-rw-r--r-- | gr-trellis/src/lib/fsm.cc | 2 | ||||
-rw-r--r-- | gr-trellis/src/lib/run_guile_tests.in | 14 | ||||
-rw-r--r-- | gr-trellis/src/lib/trellis.i | 10 | ||||
-rw-r--r-- | gr-trellis/src/lib/trellis.test | 53 |
7 files changed, 2 insertions, 603 deletions
diff --git a/gr-trellis/src/lib/.gitignore b/gr-trellis/src/lib/.gitignore deleted file mode 100644 index 7a866aead..000000000 --- a/gr-trellis/src/lib/.gitignore +++ /dev/null @@ -1,193 +0,0 @@ -/Makefile -/Makefile.in -/.la -/.lo -/.deps -/.libs -/*.la -/*.lo -/*.pyc -/trellis.cc -/trellis.py -/wip -/trellis_encoder_bs.cc -/trellis_metrics_c.h -/trellis_metrics_c.i -/trellis_metrics_f.cc -/trellis_viterbi_i.h -/trellis_viterbi_combined_i.h -/trellis_viterbi_i.i -/trellis_viterbi_combined_i.i -/trellis_metrics_i.h -/trellis_metrics_i.i -/trellis_encoder_bb.cc -/trellis_encoder_ss.cc -/trellis_viterbi_combined_s.h -/trellis_viterbi_s.h -/trellis_viterbi_combined_s.i -/trellis_viterbi_s.i -/trellis_metrics_s.h -/trellis_metrics_s.i -/trellis_encoder_si.h -/trellis_encoder_si.i -/trellis_metrics_i.cc -/trellis_viterbi_s.cc -/trellis_viterbi_combined_s.cc -/trellis_encoder_ss.h -/trellis_encoder_ss.i -/trellis_encoder_bi.cc -/trellis_encoder_bi.h -/trellis_encoder_bi.i -/trellis_encoder_ii.cc -/trellis_viterbi_combined_b.cc -/trellis_viterbi_b.cc -/trellis_encoder_bs.h -/trellis_encoder_bs.i -/trellis_viterbi_combined_b.h -/trellis_viterbi_b.h -/trellis_viterbi_combined_b.i -/trellis_viterbi_b.i -/trellis_encoder_si.cc -/trellis_metrics_f.h -/trellis_metrics_f.i -/trellis_encoder_ii.h -/trellis_encoder_ii.i -/trellis_metrics_c.cc -/trellis_viterbi_combined_i.cc -/trellis_viterbi_i.cc -/trellis_encoder_bb.h -/trellis_encoder_bb.i -/trellis_sccc_encoder_bb.cc -/trellis_sccc_encoder_bb.h -/trellis_sccc_encoder_bb.i -/trellis_sccc_encoder_bi.cc -/trellis_sccc_encoder_bi.h -/trellis_sccc_encoder_bi.i -/trellis_sccc_encoder_bs.cc -/trellis_sccc_encoder_bs.h -/trellis_sccc_encoder_bs.i -/trellis_sccc_encoder_ii.cc -/trellis_sccc_encoder_ii.h -/trellis_sccc_encoder_ii.i -/trellis_sccc_encoder_si.cc -/trellis_sccc_encoder_si.h -/trellis_sccc_encoder_si.i -/trellis_sccc_encoder_ss.cc -/trellis_sccc_encoder_ss.h -/trellis_sccc_encoder_ss.i -/trellis_metrics_s.cc -/trellis_viterbi_combined_fs.h -/trellis_viterbi_combined_fs.i -/trellis_viterbi_combined_fi.cc -/trellis_viterbi_combined_is.h -/trellis_viterbi_combined_is.i -/trellis_viterbi_combined_ci.h -/trellis_viterbi_combined_ci.i -/trellis_viterbi_combined_cs.cc -/trellis_viterbi_combined_is.cc -/trellis_viterbi_combined_si.h -/trellis_viterbi_combined_si.i -/trellis_viterbi_combined_ss.cc -/trellis_viterbi_combined_fb.cc -/trellis_viterbi_combined_fi.h -/trellis_viterbi_combined_fi.i -/trellis_viterbi_combined_cb.h -/trellis_viterbi_combined_cb.i -/trellis_viterbi_combined_ci.cc -/trellis_viterbi_combined_ii.cc -/trellis_viterbi_combined_ii.h -/trellis_viterbi_combined_ii.i -/trellis_viterbi_combined_sb.h -/trellis_viterbi_combined_sb.i -/trellis_viterbi_combined_si.cc -/trellis_viterbi_combined_fb.h -/trellis_viterbi_combined_fb.i -/trellis_viterbi_combined_ib.h -/trellis_viterbi_combined_ib.i -/trellis_viterbi_combined_cs.h -/trellis_viterbi_combined_cs.i -/trellis_viterbi_combined_fs.cc -/trellis_viterbi_combined_cb.cc -/trellis_viterbi_combined_ss.h -/trellis_viterbi_combined_ss.i -/trellis_viterbi_combined_ib.cc -/trellis_viterbi_combined_sb.cc -/trellis_sccc_decoder_combined_fb.h -/trellis_sccc_decoder_combined_fb.i -/trellis_sccc_decoder_combined_fb.cc -/trellis_sccc_decoder_combined_fs.h -/trellis_sccc_decoder_combined_fs.i -/trellis_sccc_decoder_combined_fs.cc -/trellis_sccc_decoder_combined_fi.h -/trellis_sccc_decoder_combined_fi.i -/trellis_sccc_decoder_combined_fi.cc -/trellis_sccc_decoder_combined_cb.h -/trellis_sccc_decoder_combined_cb.i -/trellis_sccc_decoder_combined_cb.cc -/trellis_sccc_decoder_combined_cs.h -/trellis_sccc_decoder_combined_cs.i -/trellis_sccc_decoder_combined_cs.cc -/trellis_sccc_decoder_combined_ci.h -/trellis_sccc_decoder_combined_ci.i -/trellis_sccc_decoder_combined_ci.cc -/trellis_sccc_decoder_b.h -/trellis_sccc_decoder_b.i -/trellis_sccc_decoder_b.cc -/trellis_sccc_decoder_s.h -/trellis_sccc_decoder_s.i -/trellis_sccc_decoder_s.cc -/trellis_sccc_decoder_i.h -/trellis_sccc_decoder_i.i -/trellis_sccc_decoder_i.cc -/trellis_pccc_decoder_b.h -/trellis_pccc_decoder_b.i -/trellis_pccc_decoder_b.cc -/trellis_pccc_decoder_s.h -/trellis_pccc_decoder_s.i -/trellis_pccc_decoder_s.cc -/trellis_pccc_decoder_i.h -/trellis_pccc_decoder_i.i -/trellis_pccc_decoder_i.cc -/trellis_pccc_encoder_bb.cc -/trellis_pccc_encoder_bb.h -/trellis_pccc_encoder_bb.i -/trellis_pccc_encoder_bi.cc -/trellis_pccc_encoder_bi.h -/trellis_pccc_encoder_bi.i -/trellis_pccc_encoder_bs.cc -/trellis_pccc_encoder_bs.h -/trellis_pccc_encoder_bs.i -/trellis_pccc_encoder_ii.cc -/trellis_pccc_encoder_ii.h -/trellis_pccc_encoder_ii.i -/trellis_pccc_encoder_si.cc -/trellis_pccc_encoder_si.h -/trellis_pccc_encoder_si.i -/trellis_pccc_encoder_ss.cc -/trellis_pccc_encoder_ss.h -/trellis_pccc_encoder_ss.i -/trellis_pccc_decoder_combined_cb.cc -/trellis_pccc_decoder_combined_cb.h -/trellis_pccc_decoder_combined_cb.i -/trellis_pccc_decoder_combined_ci.cc -/trellis_pccc_decoder_combined_ci.h -/trellis_pccc_decoder_combined_ci.i -/trellis_pccc_decoder_combined_cs.cc -/trellis_pccc_decoder_combined_cs.h -/trellis_pccc_decoder_combined_cs.i -/trellis_pccc_decoder_combined_fb.cc -/trellis_pccc_decoder_combined_fb.h -/trellis_pccc_decoder_combined_fb.i -/trellis_pccc_decoder_combined_fi.cc -/trellis_pccc_decoder_combined_fi.h -/trellis_pccc_decoder_combined_fi.i -/trellis_pccc_decoder_combined_fs.cc -/trellis_pccc_decoder_combined_fs.h -/trellis_pccc_decoder_combined_fs.i -/trellis_generated.i -/generate-stamp -/stamp-* -/run_guile_tests -/gnuradio -/guile -/python diff --git a/gr-trellis/src/lib/Makefile.am b/gr-trellis/src/lib/Makefile.am deleted file mode 100644 index ea28ea538..000000000 --- a/gr-trellis/src/lib/Makefile.am +++ /dev/null @@ -1,188 +0,0 @@ -# -# Copyright 2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -include $(top_srcdir)/Makefile.common -include $(top_srcdir)/Makefile.swig - -TESTS = - -EXTRA_DIST += \ - run_guile_tests.in \ - trellis.test - - -AM_CPPFLAGS = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) \ - $(GR_DIGITAL_INCLUDES) \ - $(WITH_INCLUDES) - -# ---------------------------------------------------------------- -# these scripts generate trellis codes from template files - -core_generator = \ - generate_all.py \ - generate_trellis.py \ - trellis_encoder_XX.cc.t \ - trellis_encoder_XX.h.t \ - trellis_encoder_XX.i.t \ - trellis_sccc_encoder_XX.cc.t \ - trellis_sccc_encoder_XX.h.t \ - trellis_sccc_encoder_XX.i.t \ - trellis_pccc_encoder_XX.cc.t \ - trellis_pccc_encoder_XX.h.t \ - trellis_pccc_encoder_XX.i.t \ - trellis_metrics_X.cc.t \ - trellis_metrics_X.h.t \ - trellis_metrics_X.i.t \ - trellis_viterbi_combined_XX.cc.t \ - trellis_viterbi_combined_XX.h.t \ - trellis_viterbi_combined_XX.i.t \ - trellis_sccc_decoder_combined_XX.cc.t \ - trellis_sccc_decoder_combined_XX.h.t \ - trellis_sccc_decoder_combined_XX.i.t \ - trellis_sccc_decoder_X.cc.t \ - trellis_sccc_decoder_X.h.t \ - trellis_sccc_decoder_X.i.t \ - trellis_pccc_decoder_X.cc.t \ - trellis_pccc_decoder_X.h.t \ - trellis_pccc_decoder_X.i.t \ - trellis_pccc_decoder_combined_XX.cc.t \ - trellis_pccc_decoder_combined_XX.h.t \ - trellis_pccc_decoder_combined_XX.i.t \ - trellis_viterbi_X.cc.t \ - trellis_viterbi_X.h.t \ - trellis_viterbi_X.i.t - -# Source built by Python into $(builddir) -python_built_sources = \ - $(GENERATED_H) \ - $(GENERATED_I) \ - $(GENERATED_CC) \ - trellis_generated.i - -EXTRA_DIST += \ - $(core_generator) - -# These headers get installed in ${prefix}/include/gnuradio -grinclude_HEADERS = \ - trellis_api.h \ - fsm.h \ - quicksort_index.h \ - base.h \ - interleaver.h \ - calc_metric.h \ - core_algorithms.h \ - trellis_permutation.h \ - siso_type.h \ - trellis_siso_f.h \ - trellis_siso_combined_f.h \ - trellis_constellation_metrics_cf.h \ - $(GENERATED_H) - -lib_LTLIBRARIES = libgnuradio-trellis.la - -libgnuradio_trellis_la_SOURCES = \ - fsm.cc \ - quicksort_index.cc \ - base.cc \ - interleaver.cc \ - calc_metric.cc \ - core_algorithms.cc \ - trellis_permutation.cc \ - trellis_siso_f.cc \ - trellis_siso_combined_f.cc \ - trellis_constellation_metrics_cf.cc \ - $(GENERATED_CC) - -libgnuradio_trellis_la_LIBADD = \ - $(GNURADIO_CORE_LA) - -libgnuradio_trellis_la_LDFLAGS = $(NO_UNDEFINED) $(LTVERSIONFLAGS) - -trellis.py trellis.scm: trellis_generated.i - -################################# -# SWIG interface and library - -TOP_SWIG_DOC_IFILES = \ - trellis_swig_doc.i - -TOP_SWIG_IFILES = \ - $(TOP_SWIG_DOC_IFILES) \ - trellis.i - -BUILT_SOURCES += \ - $(TOP_SWIG_DOC_IFILES) - -EXTRA_DIST += \ - $(TOP_SWIG_DOC_IFILES) - -$(TOP_SWIG_DOC_IFILES): - `echo "" > $@` - -# Install so that they end up available as: -# import gnuradio.trellis -# This ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio -trellis_pythondir_category = \ - gnuradio - -# additional libraries for linking with the SWIG-generated library -trellis_la_swig_libadd = \ - libgnuradio-trellis.la - -# additional SWIG files to be installed -trellis_swiginclude_headers = \ - $(GENERATED_I) \ - fsm.i \ - interleaver.i \ - trellis_permutation.i \ - trellis_siso_f.i \ - trellis_siso_combined_f.i \ - trellis_constellation_metrics_cf.i \ - trellis_generated.i \ - $(TOP_SWIG_DOC_IFILES) - -# Do creation and inclusion of other Makefiles last - -# include the srcdir's Makefile.gen; doing this creates an implicit -# dependency between $(srcdir)/Makefile.in and $(srcdir)/Makefile.gen. -include $(srcdir)/Makefile.gen - -# common way for generating local Makefile.gen -makefile_gen_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) do_makefile=1 do_sources=0 $(PYTHON) $(srcdir)/generate_all.py -include $(top_srcdir)/Makefile.gen.gen - -# common way for generating sources from templates when using -# BUILT_SOURCES, using parallel build protection. -gen_sources = $(python_built_sources) -gen_sources_deps = $(core_generator) -par_gen_command = PYTHONPATH=$(top_srcdir)/gnuradio-core/src/python srcdir=$(srcdir) $(PYTHON) $(srcdir)/generate_all.py -include $(top_srcdir)/Makefile.par.gen - -BUILT_SOURCES += $(python_built_sources) - -# Location of non-standard SWIG interface files -trellis_swig_args = \ - $(GR_DIGITAL_INCLUDES) - -if GUILE -TESTS += run_guile_tests -endif diff --git a/gr-trellis/src/lib/Makefile.swig.gen b/gr-trellis/src/lib/Makefile.swig.gen deleted file mode 100644 index 2d014b946..000000000 --- a/gr-trellis/src/lib/Makefile.swig.gen +++ /dev/null @@ -1,145 +0,0 @@ -# -*- Makefile -*- -# -# Copyright 2009 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -# Makefile.swig.gen for trellis.i - -## Default install locations for these files: -## -## Default location for the Python directory is: -## ${prefix}/lib/python${python_version}/site-packages/[category]/trellis -## Default location for the Python exec directory is: -## ${exec_prefix}/lib/python${python_version}/site-packages/[category]/trellis -## -## The following can be overloaded to change the install location, but -## this has to be done in the including Makefile.am -before- -## Makefile.swig is included. - -trellis_pythondir_category ?= gnuradio/trellis -trellis_pylibdir_category ?= $(trellis_pythondir_category) -trellis_pythondir = $(pythondir)/$(trellis_pythondir_category) -trellis_pylibdir = $(pyexecdir)/$(trellis_pylibdir_category) - -# The .so libraries for the guile modules get installed whereever guile -# is installed, usually /usr/lib/guile/gnuradio/ -# FIXME: determince whether these should be installed with gnuradio. -trellis_scmlibdir = $(libdir) - -# The scm files for the guile modules get installed where ever guile -# is installed, usually /usr/share/guile/site/trellis -# FIXME: determince whether these should be installed with gnuradio. -trellis_scmdir = $(guiledir) - -## SWIG headers are always installed into the same directory. - -trellis_swigincludedir = $(swigincludedir) - -## This is a template file for a "generated" Makefile addition (in -## this case, "Makefile.swig.gen"). By including the top-level -## Makefile.swig, this file will be used to generate the SWIG -## dependencies. Assign the variable TOP_SWIG_FILES to be the list of -## SWIG .i files to generated wrappings for; there can be more than 1 -## so long as the names are unique (no sorting is done on the -## TOP_SWIG_FILES list). This file explicitly assumes that a SWIG .i -## file will generate .cc, .py, and possibly .h files -- meaning that -## all of these files will have the same base name (that provided for -## the SWIG .i file). -## -## This code is setup to ensure parallel MAKE ("-j" or "-jN") does the -## right thing. For more info, see < -## http://sources.redhat.com/automake/automake.html#Multiple-Outputs > - -## Other cleaned files: dependency files generated by SWIG or this Makefile - -MOSTLYCLEANFILES += $(DEPDIR)/*.S* - -## Various SWIG variables. These can be overloaded in the including -## Makefile.am by setting the variable value there, then including -## Makefile.swig . - -trellis_swiginclude_HEADERS = \ - trellis.i \ - $(trellis_swiginclude_headers) - -if PYTHON -trellis_pylib_LTLIBRARIES = \ - _trellis.la - -_trellis_la_SOURCES = \ - python/trellis.cc \ - $(trellis_la_swig_sources) - -trellis_python_PYTHON = \ - trellis.py \ - $(trellis_python) - -_trellis_la_LIBADD = \ - $(STD_SWIG_LA_LIB_ADD) \ - $(trellis_la_swig_libadd) - -_trellis_la_LDFLAGS = \ - $(STD_SWIG_LA_LD_FLAGS) \ - $(trellis_la_swig_ldflags) - -_trellis_la_CXXFLAGS = \ - $(STD_SWIG_CXX_FLAGS) \ - -I$(top_builddir) \ - $(trellis_la_swig_cxxflags) - -python/trellis.cc: trellis.py -trellis.py: trellis.i - -# Include the python dependencies for this file --include python/trellis.d - -endif # end of if python - -if GUILE - -trellis_scmlib_LTLIBRARIES = \ - libguile-gnuradio-trellis.la -libguile_gnuradio_trellis_la_SOURCES = \ - guile/trellis.cc \ - $(trellis_la_swig_sources) -nobase_trellis_scm_DATA = \ - gnuradio/trellis.scm \ - gnuradio/trellis-primitive.scm -libguile_gnuradio_trellis_la_LIBADD = \ - $(STD_SWIG_LA_LIB_ADD) \ - $(trellis_la_swig_libadd) -libguile_gnuradio_trellis_la_LDFLAGS = \ - $(STD_SWIG_LA_LD_FLAGS) \ - $(trellis_la_swig_ldflags) -libguile_gnuradio_trellis_la_CXXFLAGS = \ - $(STD_SWIG_CXX_FLAGS) \ - -I$(top_builddir) \ - $(trellis_la_swig_cxxflags) - -guile/trellis.cc: gnuradio/trellis.scm -gnuradio/trellis.scm: trellis.i -gnuradio/trellis-primitive.scm: gnuradio/trellis.scm - -# Include the guile dependencies for this file --include guile/trellis.d - -endif # end of GUILE - - diff --git a/gr-trellis/src/lib/fsm.cc b/gr-trellis/src/lib/fsm.cc index 71e54b05a..65c4b4b32 100644 --- a/gr-trellis/src/lib/fsm.cc +++ b/gr-trellis/src/lib/fsm.cc @@ -111,6 +111,8 @@ fsm::fsm(const char *name) } } } + + fclose(fsmfile); generate_PS_PI(); generate_TM(); diff --git a/gr-trellis/src/lib/run_guile_tests.in b/gr-trellis/src/lib/run_guile_tests.in deleted file mode 100644 index 5d08b0dd5..000000000 --- a/gr-trellis/src/lib/run_guile_tests.in +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -. @top_builddir@/setup_guile_test_env - -# 1st argument is absolute path to hand coded guile source directory -# 2nd argument is absolute path to component C++ shared library build directory -# 3nd argument is absolute path to component SWIG build directory - -add_local_paths \ - @srcdir@ \ - @abs_builddir@ \ - @abs_builddir@ - -@GUILE@ -e main -c '(use-modules (gnuradio test-suite guile-test))' -t @srcdir@ diff --git a/gr-trellis/src/lib/trellis.i b/gr-trellis/src/lib/trellis.i index 70775af41..0debf5e5d 100644 --- a/gr-trellis/src/lib/trellis.i +++ b/gr-trellis/src/lib/trellis.i @@ -56,13 +56,3 @@ //%pythoncode %{ // from gnuradio.gr import TRELLIS_EUCLIDEAN, TRELLIS_HARD_SYMBOL, TRELLIS_HARD_BIT // %} - -#if SWIGGUILE -%scheme %{ -(load-extension-global "libguile-gnuradio-trellis" "scm_init_gnuradio_trellis_module") -%} - -%goops %{ -(use-modules (gnuradio gnuradio_core_runtime)) -%} -#endif diff --git a/gr-trellis/src/lib/trellis.test b/gr-trellis/src/lib/trellis.test deleted file mode 100644 index d370ab18c..000000000 --- a/gr-trellis/src/lib/trellis.test +++ /dev/null @@ -1,53 +0,0 @@ -;;; -*- Scheme -*- -;;; -;;; Copyright 2010 Free Software Foundation, Inc. -;;; -;;; This file is part of GNU Radio -;;; -;;; GNU Radio is free software; you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3, or (at your option) -;;; any later version. -;;; -;;; GNU Radio is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see <http://www.gnu.org/licenses/>. -;;; - -;;; If you're using Emacs's Scheme mode: -;;; (put 'with-test-prefix 'scheme-indent-function 1) - -;;; See the comments in gnuradio/test-suite/lib.scm for info on writing tests. -;;; See also the very end of the file, where the test-equal, test-eqv -;;; and test-eq macros are defined. - -(define-module (test-module) - #:use-module (oop goops) - #:use-module (gnuradio core) - #:use-module (gnuradio test-suite lib) - #:duplicates (merge-generics replace check)) - - -;;; See if we can import the module... -(use-modules (gnuradio trellis)) - -;;; Now do some real testing, like that in ../python/qa_trellis.py -;;; FIXME later. Other problems to deal with. Looks like -;;; I don't understand the constructor to <fsm> - -(read-set! keywords 'prefix) - -'(with-test-prefix "test-001-fsm" - (let* ((I 2) - (S 4) - (O 4) - (NS #(0 2 0 2 1 3 1 3)) - (OS #(0 3 3 0 1 2 2 1)) - (f (make <fsm> :I I :S S :O O :NS NS :OS OS))) - (test-equal (list I S O NS OS) - (list (gr:I f) (gr:S f) (gr:O f) (gr:NS f) (gr:OS f))))) - |