Initial import to Tizen
[profile/ivi/sphinxbase.git] / test / unit / test_fsg / test_fsg_read.c
1 #include <fsg_model.h>
2
3 #include "test_macros.h"
4
5 int
6 main(int argc, char *argv[])
7 {
8         logmath_t *lmath;
9         fsg_model_t *fsg;
10         fsg_arciter_t *itor;
11
12         /* Initialize a logmath object to pass to fsg_model_read */
13         lmath = logmath_init(1.0001, 0, 0);
14         /* Read a FSG. */
15         fsg = fsg_model_readfile(LMDIR "/goforward.fsg", lmath, 7.5);
16         TEST_ASSERT(fsg);
17
18         TEST_ASSERT(fsg_model_add_silence(fsg, "<sil>", -1, 0.3));
19         TEST_ASSERT(fsg_model_add_silence(fsg, "++NOISE++", -1, 0.3));
20         TEST_ASSERT(fsg_model_add_alt(fsg, "FORWARD", "FORWARD(2)"));
21
22         fsg_model_write(fsg, stdout);
23
24         /* Test reference counting. */
25         TEST_ASSERT(fsg = fsg_model_retain(fsg));
26         TEST_EQUAL(1, fsg_model_free(fsg));
27         fsg_model_write(fsg, stdout);
28
29         /* Test iteration. */
30         for (itor = fsg_model_arcs(fsg, 3);
31              itor; itor = fsg_arciter_next(itor)) {
32                 fsg_link_t *link = fsg_arciter_get(itor);
33
34                 TEST_EQUAL(fsg_link_from_state(link), 3);
35                 if (fsg_link_wid(link) == -1) {
36                         TEST_EQUAL(fsg_link_to_state(link), 4);
37                         TEST_EQUAL(fsg_link_logs2prob(link), 0);
38                 }
39                 else if (fsg_link_wid(link) == fsg_model_word_id(fsg, "++NOISE++")
40                          || fsg_link_wid(link) == fsg_model_word_id(fsg, "<sil>")) {
41                         TEST_EQUAL(fsg_link_to_state(link), 3);
42                         TEST_EQUAL_LOG(fsg_link_logs2prob(link), -90300);
43                 }
44                 printf("%d => %d %s %d\n",
45                        fsg_link_from_state(link),
46                        fsg_link_to_state(link),
47                        fsg_link_wid(link) == -1
48                        ? "&epsilon;" : fsg_model_word_str(fsg, fsg_link_wid(link)),
49                        fsg_link_logs2prob(link));
50         }
51
52         TEST_EQUAL(0, fsg_model_free(fsg));
53         logmath_free(lmath);
54
55         return 0;
56 }