1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  Copyright 2001-2008 Texas Instruments - http://www.ti.com/
4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  Licensed under the Apache License, Version 2.0 (the "License");
6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  you may not use this file except in compliance with the License.
7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  You may obtain a copy of the License at
8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *     http://www.apache.org/licenses/LICENSE-2.0
10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  Unless required by applicable law or agreed to in writing, software
12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  distributed under the License is distributed on an "AS IS" BASIS,
13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  See the License for the specific language governing permissions and
15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * limitations under the License.
16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_UNIT_TEST__
18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include "perf.h"
20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include "perf_config.h"
21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <assert.h>
22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <math.h>
23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* unit test for the TIME macros */
25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid time_unit_test()
26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TIME_STRUCT t1, t2;
28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TIME_SET(t1, 1, 999999);
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TIME_SET(t2, 2, 123456);
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (TIME_MICROSECONDS(t1) == 999999)
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {   /* we carry microseconds */
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_MICROSECONDS(t1) == 999999);   /* MICROSECONDS */
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_SECONDS(t1) == 1);             /* SECONDS */
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_DELTA(t2, t1) == 123457);      /* DELTA */
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        TIME_COPY(t2, t1);                         /* COPY */
40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_MICROSECONDS(t2) == 999999);
41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_SECONDS(t2) == 1);
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        TIME_INCREASE(t1, 4294967295u);             /* INCREASE */
44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_SECONDS(t1) == 4296);
45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_MICROSECONDS(t1) == 967294);
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (TIME_MICROSECONDS(t1) == 0)
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {   /* we only carry seconds */
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_MICROSECONDS(t1) == 0);        /* MICROSECONDS */
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_SECONDS(t1) == 1);             /* SECONDS */
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_DELTA(t2, t1) == 1000000);     /* DELTA */
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        TIME_COPY(t2, t1);                         /* COPY */
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_MICROSECONDS(t2) == 0);
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_SECONDS(t2) == 1);
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        TIME_INCREASE(t1, 4294967295u);            /* INCREASE */
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_SECONDS(t1) == 4295);
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(TIME_MICROSECONDS(t1) == 0);
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        assert(!"unknown TIME structure");
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* calculate how fast TIME_GET is */
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid time_get_test()
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TIME_STRUCT t1, t2, t3;
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unsigned long count = 0, delta;
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    float sum_d = 0, sum_dd = 0;
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* get time */
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TIME_GET(t1);
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* measure how much TIME's resolution is */
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (count = 0; count < 1000; count++)
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {   /* take 1000 measurements */
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        do
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            TIME_GET(t2);
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while (TIME_SECONDS(t1) == TIME_SECONDS(t2) &&
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               TIME_MICROSECONDS(t1) == TIME_MICROSECONDS(t2));
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        delta = TIME_DELTA(t2, t1);
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        sum_d += delta;
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        sum_dd += delta * delta;
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        TIME_COPY(t1, t2);
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    sum_d /= count;
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    sum_dd /= count;
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fprintf(stderr, "GET_TIME resolution: %g +- %g us\n",
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            sum_d, sqrt(sum_dd - sum_d * sum_d));
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* measure how fast TIME_GET is */
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* wait until the next second */
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    do
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        TIME_GET(t2);
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    while (TIME_SECONDS(t1) == TIME_SECONDS(t2));
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* count how many times we can get the time in a second */
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    do
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        TIME_GET(t3);
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        count++;
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    while (TIME_SECONDS(t3) == TIME_SECONDS(t2));
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fprintf(stderr, "We can get the time %lu times a second (get time takes"
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            " %6lg us-s)\n[%lu.%06lu, %lu.%06lu, %lu.%06lu]\n",
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            count,
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            1000000.0/count,
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            TIME_SECONDS(t1), TIME_MICROSECONDS(t1),
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            TIME_SECONDS(t2), TIME_MICROSECONDS(t2),
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            TIME_SECONDS(t3), TIME_MICROSECONDS(t3));
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Internal unit tests
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        TIME arithmetics
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        TIME speed
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid internal_unit_test()
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    time_unit_test();
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* measure TIME_GET 3 times */
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    time_get_test();
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    time_get_test();
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    time_get_test();
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* PERF test run - does not halt if it fails! */
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid perf_test()
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    float audioTime, videoTime;
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* create performance objects */
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_OBJHANDLE perfAVD = PERF_Create(PERF_FOURCC('M','P','l','a'),
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         PERF_ModuleAudioDecode |
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         PERF_ModuleVideoDecode |
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         PERF_ModuleLLMM);
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_OBJHANDLE perfAVE = PERF_Create(PERF_FOURCC('C','A','M',' '),
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         PERF_ModuleAudioEncode |
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         PERF_ModuleVideoEncode |
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         PERF_ModuleHLMM);
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_OBJHANDLE perfI = PERF_Create(PERF_FOURCC('I','M','G',' '),
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       PERF_ModuleImageDecode |
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       PERF_ModuleImageEncode |
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       PERF_ModuleAlgorithm);
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Boundary(perfAVD, PERF_BoundarySetup | PERF_BoundaryStart);
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Boundary(perfAVE, PERF_BoundarySteadyState | PERF_BoundaryComplete);
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Boundary(perfI, PERF_BoundaryCleanup | PERF_BoundaryStart);
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingBuffer(perfAVD, 0x12340001, 0x0FFFFFFF, PERF_ModuleApplication);
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingFrame(perfAVE, 0x56780001, 0x0FFFFFFE, PERF_ModuleHardware);
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingBuffers(perfAVD, 0x12340002, 0x1234fff2, 0x01234567,
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleHLMM);
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingFrames(perfAVE, 0x56780002, 0x5678FFF2, 0x07654321,
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleSocketNode);
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingCommand(perfI, 0xFADEDACE, 0x00112233, PERF_ModuleMax);
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_XferingBuffer(perfAVD, 0x12340001, 0x0FFFFFFF, PERF_ModuleApplication, PERF_ModuleMemory);
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_XferingFrame(perfAVE, 0x56780001, 0x0FFFFFFE, PERF_ModuleHardware, PERF_ModuleCommonLayer);
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_XferingBuffers(perfAVD, 0x12340002, 0x1234fff2, 0x01234567,
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleHLMM, PERF_ModuleAlgorithm);
180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_XferingFrames(perfAVE, 0x56780002, 0x5678FFF2, 0x07654321,
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleSocketNode, PERF_ModuleHardware);
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingCommand(perfI, 0xFADEDACE, 0x00112233, PERF_ModuleMax);
184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedBuffer(perfAVD, 0x56780001, 0x0FFFFFFE, PERF_ModuleLLMM);
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrame(perfAVE, 0x12340001, 0x0FFFFFFF, PERF_ModuleMax);
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedBuffers(perfAVD, 0x56780002, 0x5678FFF2, 0x07654321,
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         PERF_ModuleAlgorithm);
189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrames(perfAVE, 0x12340002, 0x1234FFF2, 0x01234567,
190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleHLMM);
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedCommand(perfI, 0xABADDEED, 0x778899AA, PERF_ModuleHardware);
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    audioTime = 0.01f; videoTime = 0.001f;
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SyncAV(perfAVD, audioTime, videoTime, PERF_SyncOpNone);
196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    audioTime = 1.23f; videoTime = 2.345f;
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SyncAV(perfAVD, audioTime, videoTime, PERF_SyncOpDropVideoFrame);
198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    audioTime = 34.56f; videoTime = 35.678f;
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SyncAV(perfAVE, audioTime, videoTime, PERF_SyncOpMax);
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ThreadCreated(perfI, 919, PERF_FOURCC('O','M','X','B'));
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Log(perfAVD, 0xFEDCBA98, 0x7654321F, 0xDB97531F);
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* delete performance objects */
206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Done(perfAVD);
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Done(perfAVE);
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Done(perfI);
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(perfAVD == NULL);
211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(perfAVE == NULL);
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(perfI == NULL);
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  Features to be tested:
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin4) Log only customizable mode
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        log interface gets created - needs to hand verify
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid create_config_file(char *content)
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    FILE *f = fopen(PERF_CONFIG_FILE, "wt");
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (f)
229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fprintf(f, "%s", content);
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fclose(f);
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else
234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        printf("Could not create config file\n");
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        exit(1);
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid delete_config_file()
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    unlink(PERF_CONFIG_FILE);
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid test_PERF(char *description)
246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fprintf(stderr,"-- START -- %s --\n", description);
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fprintf(stdout,"-- START -- %s --\n", description);
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    perf_test();
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fprintf(stderr,"-- END -- %s --\n", description);
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fprintf(stdout,"-- END -- %s --\n", description);
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _WIN32
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define INVALID_PATH "iNvAlId_dIr\\"
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define INVALID_PATH "iNvAlId_dIr/"
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid test_PERF_creation()
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* No PERF object is created - e.g. if logging, no "X blocks created" message
265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       will be displayed at the end of the unit test */
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* no config file */
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    delete_config_file();
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("no config file");
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* mask is 0 */
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("mask = 1\n\t\tmask= \t0\t\t\n");
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("not enabled");
274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* no trace_file, debug or log_file is specified (e.g. only replay_file) */
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("replay_file = replay this\nlog_file=NULL\nmask = 0xFFFFFFFF\n");
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("not enabled");
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* trace_file cannot be created (e.g. invalid directory), and no other file was specified */
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("trace_file = " INVALID_PATH "trace\nmask = 0xFFFFFFFF\n");
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("invalid trace file");
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* trace_file cannot be created but delayed_open is enabled (object should
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       get created, but no output should be written, and 0 buffers should be
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       generated */
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("trace_file = " INVALID_PATH "trace\ndelayed_open = 1\nmask = 0xFFFFFFFF\n");
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("invalid trace file + delayed open");
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* buffer_size is too large */
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("mask = 0xFFFFFFFF\nbuffer_size = 0x7FFFFFFF\ntrace_file = ut_trace1\n");
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("large trace buffer size");
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid test_PERF_output()
295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* STDOUT csv non-detailed */
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("mask = 0xFFFFFFFF\ndebug = true\ncsv = 1\n");
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("STDOUT non-detailed debug CSV");
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* STDOUT detailed */
301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("mask = 0xFFFFFFFF\nlog_file = STDOUT\ncsv = 0\n");
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("STDOUT detailed debug");
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* log_file cannot be created (e.g. invalid directory), it will be printed to STDOUT */
305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("log_file = " INVALID_PATH "log\nmask = 0xFFFFFFFF\n");
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("STDOUT because invalid log file");
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* STDERR non-csv detailed */
309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("mask = 0xFFFFFFFF\ndetailed_debug = true\ncsv = 0\n");
310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("STDERR detailed debug");
311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* STDERR detailed CSV*/
313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("mask = 0xFFFFFFFF\nlog_file = STDERR\ncsv = enabled\n");
314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("STDERR detailed CSV debug");
315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* FILE output */
317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("mask = 0xFFFFFFFF\nlog_file = ut_log1\n");
318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("FILE");
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* trace output */
321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("mask = 0xFFFFFFFF\ntrace_file = ut_trace2\n");
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("TRACE");
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* trace, FILE and debug output */
325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("mask = 0xFFFFFFFF\nlog_file = ut_log2\ntrace_file = ut_trace3\ndebug = on\ndetailed_debug = off\ndelayed_open = 1\n");
326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF("FILE, TRACE and DEBUG");
327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid test_PERF_config()
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Config config;
332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Config_Init(&config);
334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* test string and numerical values + reassignment */
336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("log_file =   string1\n"
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "log_file =  string1 string2 \n"
338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "trace_file = NULL \t\n"
339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "mask           = 0xFFFFFFFF\n"
340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "detailed_debug = $1234567A\n"
341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "debug          = 4294967295\n"
342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "csv            = on\n"
343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "delayed_open   = true\n"
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "test.csv       = off\n"
345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "buffer_size    = -2\n");
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Config_Read(&config, 0);
348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(config.mask == 0xFFFFFFFF);
349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(config.detailed_debug = 0x1234567A);
350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(config.debug = 0xFFFFFFFF);
351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(config.buffer_size = 0xFFFFFFFE);
352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(config.csv);
353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(config.delayed_open);
354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(!strcmp(config.log_file, "string1 string2"));
355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(!config.trace_file);
356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* test remaining numerical (boolean) values */
358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    config.delayed_open = 0;
359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    create_config_file("delayed_open   = enabled\n"
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "detailed_debug = off\n"
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "debug          = true\n"
362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "test.debug     = false\n"
363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "test2.debug    = true\n"
364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       "csv            = disabled\n");
365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Config_Read(&config, "test");
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(!config.debug);
367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(!config.detailed_debug);
368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(!config.csv);
369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    assert(config.delayed_open);
370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Config_Release(&config);
372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint main (int argc, char **argv)
375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    internal_unit_test();
377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF_config();
379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF_creation();
381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    test_PERF_output();
382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return(0);
384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
388