1f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// fst_test.cc
2f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
3f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Licensed under the Apache License, Version 2.0 (the "License");
4f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// you may not use this file except in compliance with the License.
5f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// You may obtain a copy of the License at
6f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
7f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//     http://www.apache.org/licenses/LICENSE-2.0
8f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
9f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Unless required by applicable law or agreed to in writing, software
10f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// distributed under the License is distributed on an "AS IS" BASIS,
11f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// See the License for the specific language governing permissions and
13f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// limitations under the License.
14f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
15f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Copyright 2005-2010 Google, Inc.
16f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Author: riley@google.com (Michael Riley)
17f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson//
18f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// \file
19f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// Regression test for FST classes.
20f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
21f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include "./fst_test.h"
22f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
23f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/compact-fst.h>
24f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/const-fst.h>
25f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/edit-fst.h>
26f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson#include <fst/matcher-fst.h>
27f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
28f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
29f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonnamespace fst {
30f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
31f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// A user-defined arc type.
32f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonstruct CustomArc {
33f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  typedef short Label;
34f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  typedef ProductWeight<TropicalWeight, LogWeight> Weight;
35f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  typedef int64 StateId;
36f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
37f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  CustomArc(Label i, Label o, Weight w, StateId s) :
38f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    ilabel(i), olabel(o), weight(w), nextstate(s) {}
39f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  CustomArc() {}
40f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
41f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  static const string &Type() {  // Arc type name
42f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    static const string type = "my";
43f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    return type;
44f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
45f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
46f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  Label ilabel;       // Transition input label
47f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  Label olabel;       // Transition output label
48f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  Weight weight;      // Transition weight
49f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  StateId nextstate;  // Transition destination state
50f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson};
51f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
52f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
53f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson// A user-defined compactor for test FST.
54f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsontemplate <class A>
55f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonclass CustomCompactor {
56f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson public:
57f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  typedef A Arc;
58f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  typedef typename A::Label Label;
59f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  typedef typename A::StateId StateId;
60f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  typedef typename A::Weight Weight;
61f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  typedef pair<Label, Weight> Element;
62f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
63f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  Element Compact(StateId s, const A &arc) const {
64f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    return make_pair(arc.ilabel, arc.weight);
65f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
66f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
67f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  Arc Expand(StateId s, const Element &p, uint32 f = kArcValueFlags) const {
68f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    return p.first == kNoLabel ?
69f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson        Arc(kNoLabel, kNoLabel, p.second, kNoStateId) :
70f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson        Arc(p.first, 0, p.second, s);
71f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
72f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
73f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  ssize_t Size() const { return -1;}
74f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
75f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  uint64 Properties() const { return 0ULL;}
76f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
77f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  bool Compatible(const Fst<A> &fst) const {
78f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    return true;
79f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
80f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
81f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  static const string &Type() {
82f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    static const string type = "my";
83f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    return type;
84f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
85f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
86f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  bool Write(ostream &strm) const { return true; }
87f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
88f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  static CustomCompactor *Read(istream &strm) {
89f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    return new CustomCompactor;
90f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
91f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson};
92f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
93f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
94f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian HodsonREGISTER_FST(VectorFst, CustomArc);
95f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian HodsonREGISTER_FST(ConstFst, CustomArc);
96f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonstatic fst::FstRegisterer<
97f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  CompactFst<StdArc, CustomCompactor<StdArc> > >
98f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian HodsonCompactFst_StdArc_CustomCompactor_registerer;
99f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonstatic fst::FstRegisterer<
100f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  CompactFst<CustomArc, CustomCompactor<CustomArc> > >
101f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian HodsonCompactFst_CustomArc_CustomCompactor_registerer;
102f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonstatic fst::FstRegisterer<ConstFst<StdArc, uint16> >
103f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian HodsonConstFst_StdArc_uint16_registerer;
104f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonstatic fst::FstRegisterer<
105f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  CompactFst<StdArc, CustomCompactor<StdArc>, uint16> >
106f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian HodsonCompactFst_StdArc_CustomCompactor_uint16_registerer;
107f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
108f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson}  // namespace fst
109f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
110f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
111f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonusing fst::FstTester;
112f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonusing fst::VectorFst;
113f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonusing fst::ConstFst;
114f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonusing fst::MatcherFst;
115f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonusing fst::CompactFst;
116f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonusing fst::Fst;
117f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonusing fst::StdArc;
118f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonusing fst::CustomArc;
119f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonusing fst::CustomCompactor;
120f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonusing fst::StdArcLookAheadFst;
121f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonusing fst::EditFst;
122f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
123f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodsonint main(int argc, char **argv) {
124f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  FLAGS_fst_verify_properties = true;
125f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  std::set_new_handler(FailedNewHandler);
126dfd8b8327b93660601d016cdc6f29f433b45a8d8Alexander Gutkin  SET_FLAGS(argv[0], &argc, &argv, true);
127f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
128f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  // VectorFst<StdArc> tests
129f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  {
130f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    FstTester< VectorFst<StdArc> > std_vector_tester;
131f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestBase();
132f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestExpanded();
133f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestAssign();
134f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestCopy();
135f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestIO();
136f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestMutable();
137f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
138f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
139f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  // ConstFst<StdArc> tests
140f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  {
141f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    FstTester< ConstFst<StdArc> > std_const_tester;
142f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestBase();
143f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestExpanded();
144f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestCopy();
145f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestIO();
146f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
147f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
148f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  // CompactFst<StdArc, CustomCompactor<StdArc> >
149f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  {
150f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    FstTester< CompactFst<StdArc, CustomCompactor<StdArc> > >
151f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson        std_compact_tester;
152f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestBase();
153f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestExpanded();
154f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestCopy();
155f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestIO();
156f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
157f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
158f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  // VectorFst<CustomArc> tests
159f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  {
160f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    FstTester< VectorFst<CustomArc> > std_vector_tester;
161f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestBase();
162f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestExpanded();
163f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestAssign();
164f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestCopy();
165f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestIO();
166f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_vector_tester.TestMutable();
167f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
168f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
169f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  // ConstFst<CustomArc> tests
170f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  {
171f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    FstTester< ConstFst<CustomArc> > std_const_tester;
172f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestBase();
173f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestExpanded();
174f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestCopy();
175f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestIO();
176f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
177f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
178f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  // CompactFst<CustomArc, CustomCompactor<CustomArc> >
179f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  {
180f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    FstTester< CompactFst<CustomArc, CustomCompactor<CustomArc> > >
181f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson        std_compact_tester;
182f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestBase();
183f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestExpanded();
184f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestCopy();
185f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestIO();
186f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
187f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
188f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  // ConstFst<StdArc, uint16> tests
189f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  {
190f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    FstTester< ConstFst<StdArc, uint16> > std_const_tester;
191f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestBase();
192f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestExpanded();
193f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestCopy();
194f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_const_tester.TestIO();
195f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
196f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
197f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  // CompactFst<StdArc, CustomCompactor<StdArc>, uint16>
198f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  {
199f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    FstTester< CompactFst<StdArc, CustomCompactor<StdArc>, uint16> >
200f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson        std_compact_tester;
201f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestBase();
202f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestExpanded();
203f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestCopy();
204f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_compact_tester.TestIO();
205f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
206f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
207f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  // FstTester<StdArcLookAheadFst>
208f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  {
209f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    FstTester<StdArcLookAheadFst> std_matcher_tester;
210f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_matcher_tester.TestBase();
211f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_matcher_tester.TestExpanded();
212f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_matcher_tester.TestCopy();
213f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
214f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
215f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  // EditFst<StdArc> tests
216f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  {
217f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    FstTester< EditFst<StdArc> > std_edit_tester;
218f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_edit_tester.TestBase();
219f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_edit_tester.TestExpanded();
220f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_edit_tester.TestAssign();
221f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_edit_tester.TestCopy();
222f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson    std_edit_tester.TestMutable();
223f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  }
224f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
225f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  cout << "PASS" << endl;
226f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson
227f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson  return 0;
228f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2Ian Hodson}
229