Initial import to Tizen
[profile/ivi/sphinxbase.git] / test / unit / test_thread / test_tls_log.c
1 #include <string.h>
2 #include <stdio.h>
3 #include <sbthread.h>
4 #include <strfuncs.h>
5 #include <fe.h>
6 #include <ckd_alloc.h>
7 #include <err.h>
8
9 #include "test_macros.h"
10
11 static const arg_t fe_args[] = {
12         waveform_to_cepstral_command_line_macro(),
13         { NULL, 0, NULL, NULL }
14 };
15
16 static int
17 process(sbthread_t *th)
18 {
19         FILE *raw, *logfh;
20         int16 *buf;
21         mfcc_t **cepbuf;
22         size_t nsamps;
23         fe_t *fe;
24         long fsize;
25         int32 nfr;
26         char outfile[16];
27
28         sprintf(outfile, "%03ld.log", (long)sbthread_arg(th));
29         if ((logfh = fopen(outfile, "w")) == NULL)
30                 return -1;
31         err_set_logfp(logfh);
32         if ((fe = fe_init_auto_r(sbthread_config(th))) == NULL)
33                 return -1;
34         if ((raw = fopen(TESTDATADIR "/chan3.raw", "rb")) == NULL)
35                 return -1;
36         fseek(raw, 0, SEEK_END);
37         fsize = ftell(raw);
38         fseek(raw, 0, SEEK_SET);
39         buf = ckd_malloc(fsize);
40         fread(buf, 1, fsize, raw);
41         nsamps = fsize / 2;
42
43         fe_process_utt(fe, buf, nsamps, &cepbuf, &nfr);
44         E_INFO("nfr = %d\n", nfr);
45         fe_free_2d(cepbuf);
46         ckd_free(buf);
47         fclose(raw);
48         fe_free(fe);
49         fclose(logfh);
50
51         return 0;
52 }
53
54 int
55 main(int argc, char *argv[])
56 {
57         sbthread_t *threads[10];
58         cmd_ln_t *config;
59         int i;
60
61         E_INFO("Processing chan3.raw in 10 threads\n");
62         if ((config = cmd_ln_parse_r(NULL, fe_args, 0, NULL, FALSE)) == NULL)
63                 return -1;
64         for (i = 0; i < 10; ++i) {
65                 config = cmd_ln_retain(config);
66                 threads[i] = sbthread_start(config, process, (void *)(long)i);
67         }
68         for (i = 0; i < 10; ++i) {
69                 int rv;
70                 rv = sbthread_wait(threads[i]);
71                 E_INFO("Thread %d exited with status %d\n", i, rv);
72                 sbthread_free(threads[i]);
73         }
74         /* Now check to make sure they all created logfiles with the
75          * correct contents. */
76         for (i = 0; i < 10; ++i) {
77                 char logfile[16], line[256];
78                 FILE *logfh;
79
80                 sprintf(logfile, "%03d.log", i);
81                 TEST_ASSERT(logfh = fopen(logfile, "r"));
82                 while (fgets(line, sizeof(line), logfh)) {
83                         string_trim(line, STRING_BOTH);
84                         printf("%s: |%s|\n", logfile, line);
85                         TEST_EQUAL(0, strcmp(line, "INFO: test_tls_log.c(44): nfr = 1436"));
86                 }
87                 fclose(logfh);
88         }
89         cmd_ln_free_r(config);
90         return 0;
91 }