xref: /aosp_15_r20/external/mesa3d/src/util/tests/u_debug_test.cpp (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2022 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21  * IN THE SOFTWARE.
22  *
23  * \author Illia Abernikhin <[email protected]>
24  *
25  */
26 
27 #include <stdlib.h>
28 
29 #include <gtest/gtest.h>
30 #include "c11/threads.h"
31 #include "util/u_debug.h"
32 
33 #define NUM_DEBUG_TEST_THREAD 8
34 
35 DEBUG_GET_ONCE_BOOL_OPTION(bool_test,"X_TEST_ENV_BOOL", false);
36 
37 static int
test_thread(void * _state)38 test_thread(void *_state)
39 {
40    EXPECT_STREQ(debug_get_option("X_TEST_GALLIUM_DRIVER", ""), "test_driver");
41    EXPECT_EQ(debug_get_option_bool_test(), true);
42    return 0;
43 }
44 
TEST(u_debug,DEBUG_GET_ONCE_BOOL_Multithread)45 TEST(u_debug, DEBUG_GET_ONCE_BOOL_Multithread)
46 {
47    {
48       static char env_str[] = "X_TEST_ENV_BOOL=true";
49       putenv(env_str);
50    }
51 
52    {
53       static char env_str[] = "X_TEST_GALLIUM_DRIVER=test_driver";
54       putenv(env_str);
55    }
56 
57    thrd_t threads[NUM_DEBUG_TEST_THREAD];
58    for (unsigned i = 0; i < NUM_DEBUG_TEST_THREAD; i++) {
59         thrd_create(&threads[i], test_thread, NULL);
60    }
61    for (unsigned i = 0; i < NUM_DEBUG_TEST_THREAD; i++) {
62       int ret;
63       thrd_join(threads[i], &ret);
64    }
65 }
66 
67 /* When testing, the environment variable name should not be the same */
68 
TEST(u_debug,debug_get_bool_option)69 TEST(u_debug, debug_get_bool_option)
70 {
71    {
72       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_0=10";
73       putenv(env_str);
74       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_0", true));
75       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_0", false));
76    }
77 
78    {
79       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_1";
80       putenv(env_str);
81       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_1", true));
82       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_1", false));
83    }
84 
85    {
86       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_2=INVALID";
87       putenv(env_str);
88       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_2", true));
89       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_2", false));
90    }
91 
92    {
93       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_3=0";
94       putenv(env_str);
95       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_3", true));
96       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_3", false));
97    }
98 
99    {
100       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_4=n";
101       putenv(env_str);
102       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_4", true));
103       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_4", false));
104    }
105 
106    {
107       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_5=No";
108       putenv(env_str);
109       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_5", true));
110       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_5", false));
111    }
112 
113    {
114       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_6=F";
115       putenv(env_str);
116       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_6", true));
117       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_6", false));
118    }
119 
120    {
121       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_7=fAlse";
122       putenv(env_str);
123       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_7", true));
124       EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_7", false));
125    }
126 
127    {
128       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_8=1";
129       putenv(env_str);
130       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_8", true));
131       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_8", false));
132    }
133 
134    {
135       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_9=Y";
136       putenv(env_str);
137       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_9", true));
138       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_9", false));
139    }
140 
141    {
142       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_10=Yes";
143       putenv(env_str);
144       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_10", true));
145       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_10", false));
146    }
147 
148    {
149       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_11=t";
150       putenv(env_str);
151       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_11", true));
152       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_11", false));
153    }
154 
155    {
156       static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_12=True";
157       putenv(env_str);
158       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_12", true));
159       EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_12", false));
160    }
161 }
162 
TEST(u_debug,debug_get_num_option)163 TEST(u_debug, debug_get_num_option)
164 {
165    {
166       static char env_str[] = "MESA_UNIT_TEST_NUM_VARIABLE_0=101";
167       putenv(env_str);
168       EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_0", 10), 101);
169       EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_0", 0), 101);
170    }
171 
172    {
173       static char env_str[] = "MESA_UNIT_TEST_NUM_VARIABLE_1";
174       putenv(env_str);
175       EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_1", 10), 10);
176       EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_1", 100), 100);
177    }
178 
179    {
180       static char env_str[] = "MESA_UNIT_TEST_NUM_VARIABLE_2=something";
181       putenv(env_str);
182       EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_2", 10), 10);
183       EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_2", 100), 100);
184    }
185 }
186 
187 DEBUG_GET_ONCE_NUM_OPTION(num_once_test_0, "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_0", -33)
188 
189 DEBUG_GET_ONCE_NUM_OPTION(num_once_test_1, "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_1", 0)
190 
191 DEBUG_GET_ONCE_NUM_OPTION(num_once_test_2, "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_2", 0)
192 
TEST(u_debug,DEBUG_GET_ONCE_NUM_OPTION_Macro)193 TEST(u_debug, DEBUG_GET_ONCE_NUM_OPTION_Macro)
194 {
195    {
196       EXPECT_EQ(debug_get_option_num_once_test_0(), -33);
197    }
198 
199    {
200       static char env_str[] = "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_1=9223372036854775807";
201       putenv(env_str);
202       EXPECT_EQ(debug_get_option_num_once_test_1(), INT64_MAX);
203    }
204 
205    {
206       static char env_str[] = "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_1=9223372036854775806";
207       putenv(env_str);
208       EXPECT_EQ(debug_get_option_num_once_test_1(), INT64_MAX);
209    }
210 
211    {
212       static char env_str[] = "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_2=-9223372036854775808";
213       putenv(env_str);
214       EXPECT_EQ(debug_get_option_num_once_test_2(), INT64_MIN);
215    }
216 }
217