pocketsphinx / test /unit /test_jsgf.c
camenduru's picture
pocketsphinx
5610573
#include <pocketsphinx.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "lm/jsgf.h"
#include "lm/fsg_model.h"
#include "pocketsphinx_internal.h"
#include "fsg_search_internal.h"
#include "test_macros.h"
int
main(int argc, char *argv[])
{
ps_decoder_t *ps;
cmd_ln_t *config;
jsgf_t *jsgf;
jsgf_rule_t *rule;
fsg_model_t *fsg;
FILE *rawfh;
char const *hyp;
int32 score, prob;
(void)argc;
(void)argv;
TEST_ASSERT(config =
ps_config_parse_json(
NULL,
"hmm: \"" MODELDIR "/en-us/en-us\","
"dict: \"" DATADIR "/turtle.dic\","
"samprate: 16000"));
TEST_ASSERT(ps = ps_init(config));
jsgf = jsgf_parse_file(DATADIR "/goforward.gram", NULL);
TEST_ASSERT(jsgf);
rule = jsgf_get_rule(jsgf, "goforward.move2");
TEST_ASSERT(rule);
fsg = jsgf_build_fsg(jsgf, rule, ps->lmath, 7.5);
TEST_ASSERT(fsg);
fsg_model_write(fsg, stdout);
ps_add_fsg(ps, "goforward.move2", fsg);
ps_activate_search(ps, "goforward.move2");
TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb"));
ps_decode_raw(ps, rawfh, -1);
hyp = ps_get_hyp(ps, &score);
prob = ps_get_prob(ps);
printf("%s (%d, %d)\n", hyp, score, prob);
TEST_EQUAL(0, strcmp("go forward ten meters", hyp));
ps_free(ps);
fclose(rawfh);
ps_config_free(config);
TEST_ASSERT(config =
ps_config_parse_json(
NULL,
"hmm: \"" MODELDIR "/en-us/en-us\","
"dict: \"" DATADIR "/turtle.dic\","
"jsgf: \"" DATADIR "/goforward.gram\","
"samprate: 16000"));
TEST_ASSERT(ps = ps_init(config));
TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb"));
ps_decode_raw(ps, rawfh, -1);
hyp = ps_get_hyp(ps, &score);
prob = ps_get_prob(ps);
printf("%s (%d, %d)\n", hyp, score, prob);
TEST_EQUAL(0, strcmp("go forward ten meters", hyp));
ps_free(ps);
fclose(rawfh);
ps_config_free(config);
TEST_ASSERT(config =
ps_config_parse_json(
NULL,
"hmm: \"" MODELDIR "/en-us/en-us\","
"dict: \"" DATADIR "/turtle.dic\","
"jsgf: \"" DATADIR "/goforward.gram\","
"toprule: goforward.move2, samprate: 16000"));
TEST_ASSERT(ps = ps_init(config));
TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb"));
ps_decode_raw(ps, rawfh, -1);
hyp = ps_get_hyp(ps, &score);
prob = ps_get_prob(ps);
printf("%s (%d, %d)\n", hyp, score, prob);
TEST_EQUAL(0, strcmp("go forward ten meters", hyp));
ps_free(ps);
ps_config_free(config);
fclose(rawfh);
TEST_ASSERT(config =
ps_config_parse_json(
NULL,
"hmm: \"" MODELDIR "/en-us/en-us\","
"dict: \"" DATADIR "/turtle.dic\","
"jsgf: \"" DATADIR "/defective.gram\","));
TEST_ASSERT(NULL == ps_init(config));
ps_config_free(config);
return 0;
}