#include #include #include #include #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; }