xref: /aosp_15_r20/external/cpuinfo/test/init.cc (revision 2b54f0db79fd8303838913b20ff3780cddaa909f)
1*2b54f0dbSXin Li #include <gtest/gtest.h>
2*2b54f0dbSXin Li 
3*2b54f0dbSXin Li #include <cpuinfo.h>
4*2b54f0dbSXin Li 
5*2b54f0dbSXin Li 
TEST(PROCESSORS_COUNT,non_zero)6*2b54f0dbSXin Li TEST(PROCESSORS_COUNT, non_zero) {
7*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
8*2b54f0dbSXin Li 	EXPECT_NE(0, cpuinfo_get_processors_count());
9*2b54f0dbSXin Li 	cpuinfo_deinitialize();
10*2b54f0dbSXin Li }
11*2b54f0dbSXin Li 
TEST(PROCESSORS,non_null)12*2b54f0dbSXin Li TEST(PROCESSORS, non_null) {
13*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
14*2b54f0dbSXin Li 	EXPECT_TRUE(cpuinfo_get_processors());
15*2b54f0dbSXin Li 	cpuinfo_deinitialize();
16*2b54f0dbSXin Li }
17*2b54f0dbSXin Li 
TEST(PROCESSOR,non_null)18*2b54f0dbSXin Li TEST(PROCESSOR, non_null) {
19*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
20*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
21*2b54f0dbSXin Li 		EXPECT_TRUE(cpuinfo_get_processor(i));
22*2b54f0dbSXin Li 	}
23*2b54f0dbSXin Li 	cpuinfo_deinitialize();
24*2b54f0dbSXin Li }
25*2b54f0dbSXin Li 
TEST(PROCESSOR,valid_smt_id)26*2b54f0dbSXin Li TEST(PROCESSOR, valid_smt_id) {
27*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
28*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
29*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
30*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
31*2b54f0dbSXin Li 		const cpuinfo_core* core = processor->core;
32*2b54f0dbSXin Li 		ASSERT_TRUE(core);
33*2b54f0dbSXin Li 
34*2b54f0dbSXin Li 		EXPECT_LT(processor->smt_id, core->processor_count);
35*2b54f0dbSXin Li 	}
36*2b54f0dbSXin Li 	cpuinfo_deinitialize();
37*2b54f0dbSXin Li }
38*2b54f0dbSXin Li 
TEST(PROCESSOR,valid_core)39*2b54f0dbSXin Li TEST(PROCESSOR, valid_core) {
40*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
41*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
42*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
43*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
44*2b54f0dbSXin Li 
45*2b54f0dbSXin Li 		EXPECT_TRUE(processor->core);
46*2b54f0dbSXin Li 	}
47*2b54f0dbSXin Li 	cpuinfo_deinitialize();
48*2b54f0dbSXin Li }
49*2b54f0dbSXin Li 
TEST(PROCESSOR,consistent_core)50*2b54f0dbSXin Li TEST(PROCESSOR, consistent_core) {
51*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
52*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
53*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
54*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
55*2b54f0dbSXin Li 		const cpuinfo_core* core = processor->core;
56*2b54f0dbSXin Li 		ASSERT_TRUE(core);
57*2b54f0dbSXin Li 
58*2b54f0dbSXin Li 		EXPECT_GE(i, core->processor_start);
59*2b54f0dbSXin Li 		EXPECT_LT(i, core->processor_start + core->processor_count);
60*2b54f0dbSXin Li 	}
61*2b54f0dbSXin Li 	cpuinfo_deinitialize();
62*2b54f0dbSXin Li }
63*2b54f0dbSXin Li 
TEST(PROCESSOR,valid_cluster)64*2b54f0dbSXin Li TEST(PROCESSOR, valid_cluster) {
65*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
66*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
67*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
68*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
69*2b54f0dbSXin Li 
70*2b54f0dbSXin Li 		EXPECT_TRUE(processor->cluster);
71*2b54f0dbSXin Li 	}
72*2b54f0dbSXin Li 	cpuinfo_deinitialize();
73*2b54f0dbSXin Li }
74*2b54f0dbSXin Li 
TEST(PROCESSOR,consistent_cluster)75*2b54f0dbSXin Li TEST(PROCESSOR, consistent_cluster) {
76*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
77*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
78*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
79*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
80*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = processor->cluster;
81*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
82*2b54f0dbSXin Li 
83*2b54f0dbSXin Li 		EXPECT_GE(i, cluster->processor_start);
84*2b54f0dbSXin Li 		EXPECT_LT(i, cluster->processor_start + cluster->processor_count);
85*2b54f0dbSXin Li 	}
86*2b54f0dbSXin Li 	cpuinfo_deinitialize();
87*2b54f0dbSXin Li }
88*2b54f0dbSXin Li 
TEST(PROCESSOR,valid_package)89*2b54f0dbSXin Li TEST(PROCESSOR, valid_package) {
90*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
91*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
92*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
93*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
94*2b54f0dbSXin Li 
95*2b54f0dbSXin Li 		EXPECT_TRUE(processor->package);
96*2b54f0dbSXin Li 	}
97*2b54f0dbSXin Li 	cpuinfo_deinitialize();
98*2b54f0dbSXin Li }
99*2b54f0dbSXin Li 
TEST(PROCESSOR,consistent_package)100*2b54f0dbSXin Li TEST(PROCESSOR, consistent_package) {
101*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
102*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
103*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
104*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
105*2b54f0dbSXin Li 		const cpuinfo_package* package = processor->package;
106*2b54f0dbSXin Li 		ASSERT_TRUE(package);
107*2b54f0dbSXin Li 
108*2b54f0dbSXin Li 		EXPECT_GE(i, package->processor_start);
109*2b54f0dbSXin Li 		EXPECT_LT(i, package->processor_start + package->processor_count);
110*2b54f0dbSXin Li 	}
111*2b54f0dbSXin Li 	cpuinfo_deinitialize();
112*2b54f0dbSXin Li }
113*2b54f0dbSXin Li 
TEST(PROCESSOR,consistent_l1i)114*2b54f0dbSXin Li TEST(PROCESSOR, consistent_l1i) {
115*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
116*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
117*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
118*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
119*2b54f0dbSXin Li 		const cpuinfo_cache* l1i = processor->cache.l1i;
120*2b54f0dbSXin Li 		if (l1i != nullptr) {
121*2b54f0dbSXin Li 			EXPECT_GE(i, l1i->processor_start);
122*2b54f0dbSXin Li 			EXPECT_LT(i, l1i->processor_start + l1i->processor_count);
123*2b54f0dbSXin Li 		}
124*2b54f0dbSXin Li 	}
125*2b54f0dbSXin Li 	cpuinfo_deinitialize();
126*2b54f0dbSXin Li }
127*2b54f0dbSXin Li 
TEST(PROCESSOR,consistent_l1d)128*2b54f0dbSXin Li TEST(PROCESSOR, consistent_l1d) {
129*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
130*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
131*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
132*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
133*2b54f0dbSXin Li 		const cpuinfo_cache* l1d = processor->cache.l1d;
134*2b54f0dbSXin Li 		if (l1d != nullptr) {
135*2b54f0dbSXin Li 			EXPECT_GE(i, l1d->processor_start);
136*2b54f0dbSXin Li 			EXPECT_LT(i, l1d->processor_start + l1d->processor_count);
137*2b54f0dbSXin Li 		}
138*2b54f0dbSXin Li 	}
139*2b54f0dbSXin Li 	cpuinfo_deinitialize();
140*2b54f0dbSXin Li }
141*2b54f0dbSXin Li 
TEST(PROCESSOR,consistent_l2)142*2b54f0dbSXin Li TEST(PROCESSOR, consistent_l2) {
143*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
144*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
145*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
146*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
147*2b54f0dbSXin Li 		const cpuinfo_cache* l2 = processor->cache.l2;
148*2b54f0dbSXin Li 		if (l2 != nullptr) {
149*2b54f0dbSXin Li 			EXPECT_GE(i, l2->processor_start);
150*2b54f0dbSXin Li 			EXPECT_LT(i, l2->processor_start + l2->processor_count);
151*2b54f0dbSXin Li 		}
152*2b54f0dbSXin Li 	}
153*2b54f0dbSXin Li 	cpuinfo_deinitialize();
154*2b54f0dbSXin Li }
155*2b54f0dbSXin Li 
TEST(PROCESSOR,consistent_l3)156*2b54f0dbSXin Li TEST(PROCESSOR, consistent_l3) {
157*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
158*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
159*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
160*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
161*2b54f0dbSXin Li 		const cpuinfo_cache* l3 = processor->cache.l3;
162*2b54f0dbSXin Li 		if (l3 != nullptr) {
163*2b54f0dbSXin Li 			EXPECT_GE(i, l3->processor_start);
164*2b54f0dbSXin Li 			EXPECT_LT(i, l3->processor_start + l3->processor_count);
165*2b54f0dbSXin Li 		}
166*2b54f0dbSXin Li 	}
167*2b54f0dbSXin Li 	cpuinfo_deinitialize();
168*2b54f0dbSXin Li }
169*2b54f0dbSXin Li 
TEST(PROCESSOR,consistent_l4)170*2b54f0dbSXin Li TEST(PROCESSOR, consistent_l4) {
171*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
172*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
173*2b54f0dbSXin Li 		const cpuinfo_processor* processor = cpuinfo_get_processor(i);
174*2b54f0dbSXin Li 		ASSERT_TRUE(processor);
175*2b54f0dbSXin Li 		const cpuinfo_cache* l4 = processor->cache.l4;
176*2b54f0dbSXin Li 		if (l4 != nullptr) {
177*2b54f0dbSXin Li 			EXPECT_GE(i, l4->processor_start);
178*2b54f0dbSXin Li 			EXPECT_LT(i, l4->processor_start + l4->processor_count);
179*2b54f0dbSXin Li 		}
180*2b54f0dbSXin Li 	}
181*2b54f0dbSXin Li 	cpuinfo_deinitialize();
182*2b54f0dbSXin Li }
183*2b54f0dbSXin Li 
TEST(CORES_COUNT,within_bounds)184*2b54f0dbSXin Li TEST(CORES_COUNT, within_bounds) {
185*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
186*2b54f0dbSXin Li 	EXPECT_NE(0, cpuinfo_get_cores_count());
187*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_cores_count(), cpuinfo_get_processors_count());
188*2b54f0dbSXin Li 	EXPECT_GE(cpuinfo_get_cores_count(), cpuinfo_get_packages_count());
189*2b54f0dbSXin Li 	cpuinfo_deinitialize();
190*2b54f0dbSXin Li }
191*2b54f0dbSXin Li 
TEST(CORES,non_null)192*2b54f0dbSXin Li TEST(CORES, non_null) {
193*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
194*2b54f0dbSXin Li 	EXPECT_TRUE(cpuinfo_get_cores());
195*2b54f0dbSXin Li 	cpuinfo_deinitialize();
196*2b54f0dbSXin Li }
197*2b54f0dbSXin Li 
TEST(CORE,non_null)198*2b54f0dbSXin Li TEST(CORE, non_null) {
199*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
200*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
201*2b54f0dbSXin Li 		EXPECT_TRUE(cpuinfo_get_core(i));
202*2b54f0dbSXin Li 	}
203*2b54f0dbSXin Li 	cpuinfo_deinitialize();
204*2b54f0dbSXin Li }
205*2b54f0dbSXin Li 
TEST(CORE,non_zero_processors)206*2b54f0dbSXin Li TEST(CORE, non_zero_processors) {
207*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
208*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
209*2b54f0dbSXin Li 		const cpuinfo_core* core = cpuinfo_get_core(i);
210*2b54f0dbSXin Li 		ASSERT_TRUE(core);
211*2b54f0dbSXin Li 
212*2b54f0dbSXin Li 		EXPECT_NE(0, core->processor_count);
213*2b54f0dbSXin Li 	}
214*2b54f0dbSXin Li 	cpuinfo_deinitialize();
215*2b54f0dbSXin Li }
216*2b54f0dbSXin Li 
TEST(CORE,consistent_processors)217*2b54f0dbSXin Li TEST(CORE, consistent_processors) {
218*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
219*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
220*2b54f0dbSXin Li 		const cpuinfo_core* core = cpuinfo_get_core(i);
221*2b54f0dbSXin Li 		ASSERT_TRUE(core);
222*2b54f0dbSXin Li 
223*2b54f0dbSXin Li 		for (uint32_t i = 0; i < core->processor_count; i++) {
224*2b54f0dbSXin Li 			const cpuinfo_processor* processor = cpuinfo_get_processor(core->processor_start + i);
225*2b54f0dbSXin Li 			ASSERT_TRUE(processor);
226*2b54f0dbSXin Li 
227*2b54f0dbSXin Li 			EXPECT_EQ(core, processor->core);
228*2b54f0dbSXin Li 		}
229*2b54f0dbSXin Li 	}
230*2b54f0dbSXin Li 	cpuinfo_deinitialize();
231*2b54f0dbSXin Li }
232*2b54f0dbSXin Li 
TEST(CORE,valid_core_id)233*2b54f0dbSXin Li TEST(CORE, valid_core_id) {
234*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
235*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
236*2b54f0dbSXin Li 		const cpuinfo_core* core = cpuinfo_get_core(i);
237*2b54f0dbSXin Li 		ASSERT_TRUE(core);
238*2b54f0dbSXin Li 		const cpuinfo_package* package = core->package;
239*2b54f0dbSXin Li 		ASSERT_TRUE(package);
240*2b54f0dbSXin Li 
241*2b54f0dbSXin Li 		EXPECT_LT(core->core_id, package->core_count);
242*2b54f0dbSXin Li 	}
243*2b54f0dbSXin Li 	cpuinfo_deinitialize();
244*2b54f0dbSXin Li }
245*2b54f0dbSXin Li 
TEST(CORE,valid_cluster)246*2b54f0dbSXin Li TEST(CORE, valid_cluster) {
247*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
248*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
249*2b54f0dbSXin Li 		const cpuinfo_core* core = cpuinfo_get_core(i);
250*2b54f0dbSXin Li 		ASSERT_TRUE(core);
251*2b54f0dbSXin Li 
252*2b54f0dbSXin Li 		EXPECT_TRUE(core->cluster);
253*2b54f0dbSXin Li 	}
254*2b54f0dbSXin Li 	cpuinfo_deinitialize();
255*2b54f0dbSXin Li }
256*2b54f0dbSXin Li 
TEST(CORE,consistent_cluster)257*2b54f0dbSXin Li TEST(CORE, consistent_cluster) {
258*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
259*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
260*2b54f0dbSXin Li 		const cpuinfo_core* core = cpuinfo_get_core(i);
261*2b54f0dbSXin Li 		ASSERT_TRUE(core);
262*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = core->cluster;
263*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
264*2b54f0dbSXin Li 
265*2b54f0dbSXin Li 		EXPECT_GE(i, cluster->core_start);
266*2b54f0dbSXin Li 		EXPECT_LT(i, cluster->core_start + cluster->core_count);
267*2b54f0dbSXin Li 	}
268*2b54f0dbSXin Li 	cpuinfo_deinitialize();
269*2b54f0dbSXin Li }
270*2b54f0dbSXin Li 
TEST(CORE,valid_package)271*2b54f0dbSXin Li TEST(CORE, valid_package) {
272*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
273*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
274*2b54f0dbSXin Li 		const cpuinfo_core* core = cpuinfo_get_core(i);
275*2b54f0dbSXin Li 		ASSERT_TRUE(core);
276*2b54f0dbSXin Li 
277*2b54f0dbSXin Li 		EXPECT_TRUE(core->package);
278*2b54f0dbSXin Li 	}
279*2b54f0dbSXin Li 	cpuinfo_deinitialize();
280*2b54f0dbSXin Li }
281*2b54f0dbSXin Li 
TEST(CORE,consistent_package)282*2b54f0dbSXin Li TEST(CORE, consistent_package) {
283*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
284*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
285*2b54f0dbSXin Li 		const cpuinfo_core* core = cpuinfo_get_core(i);
286*2b54f0dbSXin Li 		ASSERT_TRUE(core);
287*2b54f0dbSXin Li 		const cpuinfo_package* package = core->package;
288*2b54f0dbSXin Li 		ASSERT_TRUE(package);
289*2b54f0dbSXin Li 
290*2b54f0dbSXin Li 		EXPECT_GE(i, package->core_start);
291*2b54f0dbSXin Li 		EXPECT_LT(i, package->core_start + package->core_count);
292*2b54f0dbSXin Li 	}
293*2b54f0dbSXin Li 	cpuinfo_deinitialize();
294*2b54f0dbSXin Li }
295*2b54f0dbSXin Li 
TEST(CORE,known_vendor)296*2b54f0dbSXin Li TEST(CORE, known_vendor) {
297*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
298*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
299*2b54f0dbSXin Li 		const cpuinfo_core* core = cpuinfo_get_core(i);
300*2b54f0dbSXin Li 		ASSERT_TRUE(core);
301*2b54f0dbSXin Li 
302*2b54f0dbSXin Li 		EXPECT_NE(cpuinfo_vendor_unknown, core->vendor);
303*2b54f0dbSXin Li 	}
304*2b54f0dbSXin Li 	cpuinfo_deinitialize();
305*2b54f0dbSXin Li }
306*2b54f0dbSXin Li 
TEST(CORE,known_uarch)307*2b54f0dbSXin Li TEST(CORE, known_uarch) {
308*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
309*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
310*2b54f0dbSXin Li 		const cpuinfo_core* core = cpuinfo_get_core(i);
311*2b54f0dbSXin Li 		ASSERT_TRUE(core);
312*2b54f0dbSXin Li 
313*2b54f0dbSXin Li 		EXPECT_NE(cpuinfo_uarch_unknown, core->uarch);
314*2b54f0dbSXin Li 	}
315*2b54f0dbSXin Li 	cpuinfo_deinitialize();
316*2b54f0dbSXin Li }
317*2b54f0dbSXin Li 
TEST(CLUSTERS_COUNT,within_bounds)318*2b54f0dbSXin Li TEST(CLUSTERS_COUNT, within_bounds) {
319*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
320*2b54f0dbSXin Li 	EXPECT_NE(0, cpuinfo_get_clusters_count());
321*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_clusters_count(), cpuinfo_get_cores_count());
322*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_clusters_count(), cpuinfo_get_processors_count());
323*2b54f0dbSXin Li 	EXPECT_GE(cpuinfo_get_clusters_count(), cpuinfo_get_packages_count());
324*2b54f0dbSXin Li 	cpuinfo_deinitialize();
325*2b54f0dbSXin Li }
326*2b54f0dbSXin Li 
TEST(CLUSTERS,non_null)327*2b54f0dbSXin Li TEST(CLUSTERS, non_null) {
328*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
329*2b54f0dbSXin Li 	EXPECT_TRUE(cpuinfo_get_clusters());
330*2b54f0dbSXin Li 	cpuinfo_deinitialize();
331*2b54f0dbSXin Li }
332*2b54f0dbSXin Li 
TEST(CLUSTER,non_null)333*2b54f0dbSXin Li TEST(CLUSTER, non_null) {
334*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
335*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
336*2b54f0dbSXin Li 		EXPECT_TRUE(cpuinfo_get_cluster(i));
337*2b54f0dbSXin Li 	}
338*2b54f0dbSXin Li 	cpuinfo_deinitialize();
339*2b54f0dbSXin Li }
340*2b54f0dbSXin Li 
TEST(CLUSTER,non_zero_processors)341*2b54f0dbSXin Li TEST(CLUSTER, non_zero_processors) {
342*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
343*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
344*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
345*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
346*2b54f0dbSXin Li 
347*2b54f0dbSXin Li 		EXPECT_NE(0, cluster->processor_count);
348*2b54f0dbSXin Li 	}
349*2b54f0dbSXin Li 	cpuinfo_deinitialize();
350*2b54f0dbSXin Li }
351*2b54f0dbSXin Li 
TEST(CLUSTER,valid_processors)352*2b54f0dbSXin Li TEST(CLUSTER, valid_processors) {
353*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
354*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
355*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
356*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
357*2b54f0dbSXin Li 
358*2b54f0dbSXin Li 		EXPECT_LT(cluster->processor_start, cpuinfo_get_processors_count());
359*2b54f0dbSXin Li 		EXPECT_LE(cluster->processor_start + cluster->processor_count, cpuinfo_get_processors_count());
360*2b54f0dbSXin Li 	}
361*2b54f0dbSXin Li 	cpuinfo_deinitialize();
362*2b54f0dbSXin Li }
363*2b54f0dbSXin Li 
TEST(CLUSTER,consistent_processors)364*2b54f0dbSXin Li TEST(CLUSTER, consistent_processors) {
365*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
366*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
367*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
368*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
369*2b54f0dbSXin Li 
370*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cluster->processor_count; j++) {
371*2b54f0dbSXin Li 			const cpuinfo_processor* processor = cpuinfo_get_processor(cluster->processor_start + j);
372*2b54f0dbSXin Li 			EXPECT_EQ(cluster, processor->cluster);
373*2b54f0dbSXin Li 		}
374*2b54f0dbSXin Li 	}
375*2b54f0dbSXin Li 	cpuinfo_deinitialize();
376*2b54f0dbSXin Li }
377*2b54f0dbSXin Li 
TEST(CLUSTER,non_zero_cores)378*2b54f0dbSXin Li TEST(CLUSTER, non_zero_cores) {
379*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
380*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
381*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
382*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
383*2b54f0dbSXin Li 
384*2b54f0dbSXin Li 		EXPECT_NE(0, cluster->core_count);
385*2b54f0dbSXin Li 	}
386*2b54f0dbSXin Li 	cpuinfo_deinitialize();
387*2b54f0dbSXin Li }
388*2b54f0dbSXin Li 
TEST(CLUSTER,valid_cores)389*2b54f0dbSXin Li TEST(CLUSTER, valid_cores) {
390*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
391*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
392*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
393*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
394*2b54f0dbSXin Li 
395*2b54f0dbSXin Li 		EXPECT_LT(cluster->core_start, cpuinfo_get_cores_count());
396*2b54f0dbSXin Li 		EXPECT_LE(cluster->core_start + cluster->core_count, cpuinfo_get_cores_count());
397*2b54f0dbSXin Li 	}
398*2b54f0dbSXin Li 	cpuinfo_deinitialize();
399*2b54f0dbSXin Li }
400*2b54f0dbSXin Li 
TEST(CLUSTER,consistent_cores)401*2b54f0dbSXin Li TEST(CLUSTER, consistent_cores) {
402*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
403*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
404*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
405*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
406*2b54f0dbSXin Li 
407*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cluster->core_count; j++) {
408*2b54f0dbSXin Li 			const cpuinfo_core* core = cpuinfo_get_core(cluster->core_start + j);
409*2b54f0dbSXin Li 			ASSERT_TRUE(core);
410*2b54f0dbSXin Li 
411*2b54f0dbSXin Li 			EXPECT_EQ(cluster, core->cluster);
412*2b54f0dbSXin Li 		}
413*2b54f0dbSXin Li 	}
414*2b54f0dbSXin Li 	cpuinfo_deinitialize();
415*2b54f0dbSXin Li }
416*2b54f0dbSXin Li 
TEST(CLUSTER,valid_cluster_id)417*2b54f0dbSXin Li TEST(CLUSTER, valid_cluster_id) {
418*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
419*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
420*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
421*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
422*2b54f0dbSXin Li 
423*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cluster->core_count; j++) {
424*2b54f0dbSXin Li 			const cpuinfo_package* package = cluster->package;
425*2b54f0dbSXin Li 			ASSERT_TRUE(package);
426*2b54f0dbSXin Li 
427*2b54f0dbSXin Li 			EXPECT_LT(cluster->cluster_id, package->cluster_count);
428*2b54f0dbSXin Li 		}
429*2b54f0dbSXin Li 	}
430*2b54f0dbSXin Li 	cpuinfo_deinitialize();
431*2b54f0dbSXin Li }
432*2b54f0dbSXin Li 
TEST(CLUSTER,valid_package)433*2b54f0dbSXin Li TEST(CLUSTER, valid_package) {
434*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
435*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
436*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
437*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
438*2b54f0dbSXin Li 
439*2b54f0dbSXin Li 		EXPECT_TRUE(cluster->package);
440*2b54f0dbSXin Li 	}
441*2b54f0dbSXin Li 	cpuinfo_deinitialize();
442*2b54f0dbSXin Li }
443*2b54f0dbSXin Li 
TEST(CLUSTER,consistent_package)444*2b54f0dbSXin Li TEST(CLUSTER, consistent_package) {
445*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
446*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
447*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
448*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
449*2b54f0dbSXin Li 		const cpuinfo_package* package = cluster->package;
450*2b54f0dbSXin Li 		ASSERT_TRUE(package);
451*2b54f0dbSXin Li 
452*2b54f0dbSXin Li 		EXPECT_GE(i, package->cluster_start);
453*2b54f0dbSXin Li 		EXPECT_LT(i, package->cluster_start + package->cluster_count);
454*2b54f0dbSXin Li 	}
455*2b54f0dbSXin Li 	cpuinfo_deinitialize();
456*2b54f0dbSXin Li }
457*2b54f0dbSXin Li 
TEST(CLUSTER,consistent_vendor)458*2b54f0dbSXin Li TEST(CLUSTER, consistent_vendor) {
459*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
460*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
461*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
462*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
463*2b54f0dbSXin Li 
464*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cluster->core_count; j++) {
465*2b54f0dbSXin Li 			const cpuinfo_core* core = cpuinfo_get_core(cluster->core_start + j);
466*2b54f0dbSXin Li 			ASSERT_TRUE(core);
467*2b54f0dbSXin Li 
468*2b54f0dbSXin Li 			EXPECT_EQ(cluster->vendor, core->vendor);
469*2b54f0dbSXin Li 		}
470*2b54f0dbSXin Li 	}
471*2b54f0dbSXin Li 	cpuinfo_deinitialize();
472*2b54f0dbSXin Li }
473*2b54f0dbSXin Li 
TEST(CLUSTER,consistent_uarch)474*2b54f0dbSXin Li TEST(CLUSTER, consistent_uarch) {
475*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
476*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
477*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
478*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
479*2b54f0dbSXin Li 
480*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cluster->core_count; j++) {
481*2b54f0dbSXin Li 			const cpuinfo_core* core = cpuinfo_get_core(cluster->core_start + j);
482*2b54f0dbSXin Li 			ASSERT_TRUE(core);
483*2b54f0dbSXin Li 
484*2b54f0dbSXin Li 			EXPECT_EQ(cluster->uarch, core->uarch);
485*2b54f0dbSXin Li 		}
486*2b54f0dbSXin Li 	}
487*2b54f0dbSXin Li 	cpuinfo_deinitialize();
488*2b54f0dbSXin Li }
489*2b54f0dbSXin Li 
490*2b54f0dbSXin Li #if CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64
TEST(CLUSTER,consistent_cpuid)491*2b54f0dbSXin Li TEST(CLUSTER, consistent_cpuid) {
492*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
493*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
494*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
495*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
496*2b54f0dbSXin Li 
497*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cluster->core_count; j++) {
498*2b54f0dbSXin Li 			const cpuinfo_core* core = cpuinfo_get_core(cluster->core_start + j);
499*2b54f0dbSXin Li 			ASSERT_TRUE(core);
500*2b54f0dbSXin Li 
501*2b54f0dbSXin Li 			EXPECT_EQ(cluster->cpuid, core->cpuid);
502*2b54f0dbSXin Li 		}
503*2b54f0dbSXin Li 	}
504*2b54f0dbSXin Li 	cpuinfo_deinitialize();
505*2b54f0dbSXin Li }
506*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_X86 || CPUINFO_ARCH_X86_64 */
507*2b54f0dbSXin Li 
508*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64
TEST(CLUSTER,consistent_midr)509*2b54f0dbSXin Li TEST(CLUSTER, consistent_midr) {
510*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
511*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
512*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
513*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
514*2b54f0dbSXin Li 
515*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cluster->core_count; j++) {
516*2b54f0dbSXin Li 			const cpuinfo_core* core = cpuinfo_get_core(cluster->core_start + j);
517*2b54f0dbSXin Li 			ASSERT_TRUE(core);
518*2b54f0dbSXin Li 
519*2b54f0dbSXin Li 			EXPECT_EQ(cluster->midr, core->midr);
520*2b54f0dbSXin Li 		}
521*2b54f0dbSXin Li 	}
522*2b54f0dbSXin Li 	cpuinfo_deinitialize();
523*2b54f0dbSXin Li }
524*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_ARM || CPUINFO_ARCH_ARM64 */
525*2b54f0dbSXin Li 
TEST(CLUSTER,consistent_frequency)526*2b54f0dbSXin Li TEST(CLUSTER, consistent_frequency) {
527*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
528*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
529*2b54f0dbSXin Li 		const cpuinfo_cluster* cluster = cpuinfo_get_cluster(i);
530*2b54f0dbSXin Li 		ASSERT_TRUE(cluster);
531*2b54f0dbSXin Li 
532*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cluster->core_count; j++) {
533*2b54f0dbSXin Li 			const cpuinfo_core* core = cpuinfo_get_core(cluster->core_start + j);
534*2b54f0dbSXin Li 			ASSERT_TRUE(core);
535*2b54f0dbSXin Li 
536*2b54f0dbSXin Li 			EXPECT_EQ(cluster->frequency, core->frequency);
537*2b54f0dbSXin Li 		}
538*2b54f0dbSXin Li 	}
539*2b54f0dbSXin Li 	cpuinfo_deinitialize();
540*2b54f0dbSXin Li }
541*2b54f0dbSXin Li 
TEST(PACKAGES_COUNT,within_bounds)542*2b54f0dbSXin Li TEST(PACKAGES_COUNT, within_bounds) {
543*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
544*2b54f0dbSXin Li 	EXPECT_NE(0, cpuinfo_get_packages_count());
545*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_packages_count(), cpuinfo_get_cores_count());
546*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_packages_count(), cpuinfo_get_processors_count());
547*2b54f0dbSXin Li 	cpuinfo_deinitialize();
548*2b54f0dbSXin Li }
549*2b54f0dbSXin Li 
TEST(PACKAGES,non_null)550*2b54f0dbSXin Li TEST(PACKAGES, non_null) {
551*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
552*2b54f0dbSXin Li 	EXPECT_TRUE(cpuinfo_get_packages());
553*2b54f0dbSXin Li 	cpuinfo_deinitialize();
554*2b54f0dbSXin Li }
555*2b54f0dbSXin Li 
TEST(PACKAGE,non_null)556*2b54f0dbSXin Li TEST(PACKAGE, non_null) {
557*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
558*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
559*2b54f0dbSXin Li 		EXPECT_TRUE(cpuinfo_get_package(i));
560*2b54f0dbSXin Li 	}
561*2b54f0dbSXin Li 	cpuinfo_deinitialize();
562*2b54f0dbSXin Li }
563*2b54f0dbSXin Li 
TEST(PACKAGE,non_zero_processors)564*2b54f0dbSXin Li TEST(PACKAGE, non_zero_processors) {
565*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
566*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
567*2b54f0dbSXin Li 		const cpuinfo_package* package = cpuinfo_get_package(i);
568*2b54f0dbSXin Li 		ASSERT_TRUE(package);
569*2b54f0dbSXin Li 
570*2b54f0dbSXin Li 		EXPECT_NE(0, package->processor_count);
571*2b54f0dbSXin Li 	}
572*2b54f0dbSXin Li 	cpuinfo_deinitialize();
573*2b54f0dbSXin Li }
574*2b54f0dbSXin Li 
TEST(PACKAGE,valid_processors)575*2b54f0dbSXin Li TEST(PACKAGE, valid_processors) {
576*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
577*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
578*2b54f0dbSXin Li 		const cpuinfo_package* package = cpuinfo_get_package(i);
579*2b54f0dbSXin Li 		ASSERT_TRUE(package);
580*2b54f0dbSXin Li 
581*2b54f0dbSXin Li 		EXPECT_LT(package->processor_start, cpuinfo_get_processors_count());
582*2b54f0dbSXin Li 		EXPECT_LE(package->processor_start + package->processor_count, cpuinfo_get_processors_count());
583*2b54f0dbSXin Li 	}
584*2b54f0dbSXin Li 	cpuinfo_deinitialize();
585*2b54f0dbSXin Li }
586*2b54f0dbSXin Li 
TEST(PACKAGE,consistent_processors)587*2b54f0dbSXin Li TEST(PACKAGE, consistent_processors) {
588*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
589*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
590*2b54f0dbSXin Li 		const cpuinfo_package* package = cpuinfo_get_package(i);
591*2b54f0dbSXin Li 		ASSERT_TRUE(package);
592*2b54f0dbSXin Li 
593*2b54f0dbSXin Li 		for (uint32_t j = 0; j < package->processor_count; j++) {
594*2b54f0dbSXin Li 			const cpuinfo_processor* processor = cpuinfo_get_processor(package->processor_start + j);
595*2b54f0dbSXin Li 			ASSERT_TRUE(processor);
596*2b54f0dbSXin Li 
597*2b54f0dbSXin Li 			EXPECT_EQ(package, processor->package);
598*2b54f0dbSXin Li 		}
599*2b54f0dbSXin Li 	}
600*2b54f0dbSXin Li 	cpuinfo_deinitialize();
601*2b54f0dbSXin Li }
602*2b54f0dbSXin Li 
TEST(PACKAGE,non_zero_cores)603*2b54f0dbSXin Li TEST(PACKAGE, non_zero_cores) {
604*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
605*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
606*2b54f0dbSXin Li 		const cpuinfo_package* package = cpuinfo_get_package(i);
607*2b54f0dbSXin Li 		ASSERT_TRUE(package);
608*2b54f0dbSXin Li 
609*2b54f0dbSXin Li 		EXPECT_NE(0, package->core_count);
610*2b54f0dbSXin Li 	}
611*2b54f0dbSXin Li 	cpuinfo_deinitialize();
612*2b54f0dbSXin Li }
613*2b54f0dbSXin Li 
TEST(PACKAGE,valid_cores)614*2b54f0dbSXin Li TEST(PACKAGE, valid_cores) {
615*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
616*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
617*2b54f0dbSXin Li 		const cpuinfo_package* package = cpuinfo_get_package(i);
618*2b54f0dbSXin Li 		ASSERT_TRUE(package);
619*2b54f0dbSXin Li 
620*2b54f0dbSXin Li 		EXPECT_LT(package->core_start, cpuinfo_get_cores_count());
621*2b54f0dbSXin Li 		EXPECT_LE(package->core_start + package->core_count, cpuinfo_get_cores_count());
622*2b54f0dbSXin Li 	}
623*2b54f0dbSXin Li 	cpuinfo_deinitialize();
624*2b54f0dbSXin Li }
625*2b54f0dbSXin Li 
TEST(PACKAGE,consistent_cores)626*2b54f0dbSXin Li TEST(PACKAGE, consistent_cores) {
627*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
628*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
629*2b54f0dbSXin Li 		const cpuinfo_package* package = cpuinfo_get_package(i);
630*2b54f0dbSXin Li 		ASSERT_TRUE(package);
631*2b54f0dbSXin Li 
632*2b54f0dbSXin Li 		for (uint32_t j = 0; j < package->core_count; j++) {
633*2b54f0dbSXin Li 			const cpuinfo_core* core = cpuinfo_get_core(package->core_start + j);
634*2b54f0dbSXin Li 			ASSERT_TRUE(core);
635*2b54f0dbSXin Li 
636*2b54f0dbSXin Li 			EXPECT_EQ(package, core->package);
637*2b54f0dbSXin Li 		}
638*2b54f0dbSXin Li 	}
639*2b54f0dbSXin Li 	cpuinfo_deinitialize();
640*2b54f0dbSXin Li }
641*2b54f0dbSXin Li 
TEST(PACKAGE,non_zero_clusters)642*2b54f0dbSXin Li TEST(PACKAGE, non_zero_clusters) {
643*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
644*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
645*2b54f0dbSXin Li 		const cpuinfo_package* package = cpuinfo_get_package(i);
646*2b54f0dbSXin Li 		ASSERT_TRUE(package);
647*2b54f0dbSXin Li 
648*2b54f0dbSXin Li 		EXPECT_NE(0, package->cluster_count);
649*2b54f0dbSXin Li 	}
650*2b54f0dbSXin Li 	cpuinfo_deinitialize();
651*2b54f0dbSXin Li }
652*2b54f0dbSXin Li 
TEST(PACKAGE,valid_clusters)653*2b54f0dbSXin Li TEST(PACKAGE, valid_clusters) {
654*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
655*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
656*2b54f0dbSXin Li 		const cpuinfo_package* package = cpuinfo_get_package(i);
657*2b54f0dbSXin Li 		ASSERT_TRUE(package);
658*2b54f0dbSXin Li 
659*2b54f0dbSXin Li 		EXPECT_LT(package->cluster_start, cpuinfo_get_clusters_count());
660*2b54f0dbSXin Li 		EXPECT_LE(package->cluster_start + package->cluster_count, cpuinfo_get_clusters_count());
661*2b54f0dbSXin Li 	}
662*2b54f0dbSXin Li 	cpuinfo_deinitialize();
663*2b54f0dbSXin Li }
664*2b54f0dbSXin Li 
TEST(PACKAGE,consistent_cluster)665*2b54f0dbSXin Li TEST(PACKAGE, consistent_cluster) {
666*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
667*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
668*2b54f0dbSXin Li 		const cpuinfo_package* package = cpuinfo_get_package(i);
669*2b54f0dbSXin Li 		ASSERT_TRUE(package);
670*2b54f0dbSXin Li 
671*2b54f0dbSXin Li 		for (uint32_t j = 0; j < package->cluster_count; j++) {
672*2b54f0dbSXin Li 			const cpuinfo_cluster* cluster = cpuinfo_get_cluster(package->cluster_start + j);
673*2b54f0dbSXin Li 			ASSERT_TRUE(cluster);
674*2b54f0dbSXin Li 
675*2b54f0dbSXin Li 			EXPECT_EQ(package, cluster->package);
676*2b54f0dbSXin Li 		}
677*2b54f0dbSXin Li 	}
678*2b54f0dbSXin Li 	cpuinfo_deinitialize();
679*2b54f0dbSXin Li }
680*2b54f0dbSXin Li 
TEST(UARCHS_COUNT,within_bounds)681*2b54f0dbSXin Li TEST(UARCHS_COUNT, within_bounds) {
682*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
683*2b54f0dbSXin Li 	EXPECT_NE(0, cpuinfo_get_uarchs_count());
684*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_packages_count(), cpuinfo_get_cores_count());
685*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_packages_count(), cpuinfo_get_processors_count());
686*2b54f0dbSXin Li 	cpuinfo_deinitialize();
687*2b54f0dbSXin Li }
688*2b54f0dbSXin Li 
TEST(UARCHS,non_null)689*2b54f0dbSXin Li TEST(UARCHS, non_null) {
690*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
691*2b54f0dbSXin Li 	EXPECT_TRUE(cpuinfo_get_uarchs());
692*2b54f0dbSXin Li 	cpuinfo_deinitialize();
693*2b54f0dbSXin Li }
694*2b54f0dbSXin Li 
TEST(UARCH,non_null)695*2b54f0dbSXin Li TEST(UARCH, non_null) {
696*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
697*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_uarchs_count(); i++) {
698*2b54f0dbSXin Li 		EXPECT_TRUE(cpuinfo_get_uarch(i));
699*2b54f0dbSXin Li 	}
700*2b54f0dbSXin Li 	cpuinfo_deinitialize();
701*2b54f0dbSXin Li }
702*2b54f0dbSXin Li 
TEST(UARCH,non_zero_processors)703*2b54f0dbSXin Li TEST(UARCH, non_zero_processors) {
704*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
705*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_uarchs_count(); i++) {
706*2b54f0dbSXin Li 		const cpuinfo_uarch_info* uarch = cpuinfo_get_uarch(i);
707*2b54f0dbSXin Li 		ASSERT_TRUE(uarch);
708*2b54f0dbSXin Li 
709*2b54f0dbSXin Li 		EXPECT_NE(0, uarch->processor_count);
710*2b54f0dbSXin Li 	}
711*2b54f0dbSXin Li 	cpuinfo_deinitialize();
712*2b54f0dbSXin Li }
713*2b54f0dbSXin Li 
TEST(UARCH,valid_processors)714*2b54f0dbSXin Li TEST(UARCH, valid_processors) {
715*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
716*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_uarchs_count(); i++) {
717*2b54f0dbSXin Li 		const cpuinfo_uarch_info* uarch = cpuinfo_get_uarch(i);
718*2b54f0dbSXin Li 		ASSERT_TRUE(uarch);
719*2b54f0dbSXin Li 
720*2b54f0dbSXin Li 		EXPECT_LE(uarch->processor_count, cpuinfo_get_processors_count());
721*2b54f0dbSXin Li 	}
722*2b54f0dbSXin Li 	cpuinfo_deinitialize();
723*2b54f0dbSXin Li }
724*2b54f0dbSXin Li 
TEST(UARCH,non_zero_cores)725*2b54f0dbSXin Li TEST(UARCH, non_zero_cores) {
726*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
727*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_uarchs_count(); i++) {
728*2b54f0dbSXin Li 		const cpuinfo_uarch_info* uarch = cpuinfo_get_uarch(i);
729*2b54f0dbSXin Li 		ASSERT_TRUE(uarch);
730*2b54f0dbSXin Li 
731*2b54f0dbSXin Li 		EXPECT_NE(0, uarch->core_count);
732*2b54f0dbSXin Li 	}
733*2b54f0dbSXin Li 	cpuinfo_deinitialize();
734*2b54f0dbSXin Li }
735*2b54f0dbSXin Li 
TEST(UARCH,valid_cores)736*2b54f0dbSXin Li TEST(UARCH, valid_cores) {
737*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
738*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_uarchs_count(); i++) {
739*2b54f0dbSXin Li 		const cpuinfo_uarch_info* uarch = cpuinfo_get_uarch(i);
740*2b54f0dbSXin Li 		ASSERT_TRUE(uarch);
741*2b54f0dbSXin Li 
742*2b54f0dbSXin Li 		EXPECT_LE(uarch->core_count, cpuinfo_get_cores_count());
743*2b54f0dbSXin Li 	}
744*2b54f0dbSXin Li 	cpuinfo_deinitialize();
745*2b54f0dbSXin Li }
746*2b54f0dbSXin Li 
TEST(L1I_CACHES_COUNT,within_bounds)747*2b54f0dbSXin Li TEST(L1I_CACHES_COUNT, within_bounds) {
748*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
749*2b54f0dbSXin Li 	EXPECT_NE(0, cpuinfo_get_l1i_caches_count());
750*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_l1i_caches_count(), cpuinfo_get_processors_count());
751*2b54f0dbSXin Li 	cpuinfo_deinitialize();
752*2b54f0dbSXin Li }
753*2b54f0dbSXin Li 
TEST(L1I_CACHES,non_null)754*2b54f0dbSXin Li TEST(L1I_CACHES, non_null) {
755*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
756*2b54f0dbSXin Li 	EXPECT_TRUE(cpuinfo_get_l1i_caches());
757*2b54f0dbSXin Li 	cpuinfo_deinitialize();
758*2b54f0dbSXin Li }
759*2b54f0dbSXin Li 
TEST(L1I_CACHE,non_null)760*2b54f0dbSXin Li TEST(L1I_CACHE, non_null) {
761*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
762*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
763*2b54f0dbSXin Li 		EXPECT_TRUE(cpuinfo_get_l1i_cache(i));
764*2b54f0dbSXin Li 	}
765*2b54f0dbSXin Li 	cpuinfo_deinitialize();
766*2b54f0dbSXin Li }
767*2b54f0dbSXin Li 
TEST(L1I_CACHE,non_zero_size)768*2b54f0dbSXin Li TEST(L1I_CACHE, non_zero_size) {
769*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
770*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
771*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
772*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
773*2b54f0dbSXin Li 
774*2b54f0dbSXin Li 		EXPECT_NE(0, cache->size);
775*2b54f0dbSXin Li 	}
776*2b54f0dbSXin Li 	cpuinfo_deinitialize();
777*2b54f0dbSXin Li }
778*2b54f0dbSXin Li 
TEST(L1I_CACHE,valid_size)779*2b54f0dbSXin Li TEST(L1I_CACHE, valid_size) {
780*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
781*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
782*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
783*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
784*2b54f0dbSXin Li 
785*2b54f0dbSXin Li 		EXPECT_EQ(cache->size,
786*2b54f0dbSXin Li 			cache->associativity * cache->sets * cache->partitions * cache->line_size);
787*2b54f0dbSXin Li 	}
788*2b54f0dbSXin Li 	cpuinfo_deinitialize();
789*2b54f0dbSXin Li }
790*2b54f0dbSXin Li 
TEST(L1I_CACHE,non_zero_associativity)791*2b54f0dbSXin Li TEST(L1I_CACHE, non_zero_associativity) {
792*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
793*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
794*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
795*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
796*2b54f0dbSXin Li 
797*2b54f0dbSXin Li 		EXPECT_NE(0, cache->associativity);
798*2b54f0dbSXin Li 	}
799*2b54f0dbSXin Li 	cpuinfo_deinitialize();
800*2b54f0dbSXin Li }
801*2b54f0dbSXin Li 
TEST(L1I_CACHE,non_zero_partitions)802*2b54f0dbSXin Li TEST(L1I_CACHE, non_zero_partitions) {
803*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
804*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
805*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
806*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
807*2b54f0dbSXin Li 
808*2b54f0dbSXin Li 		EXPECT_NE(0, cache->partitions);
809*2b54f0dbSXin Li 	}
810*2b54f0dbSXin Li 	cpuinfo_deinitialize();
811*2b54f0dbSXin Li }
812*2b54f0dbSXin Li 
TEST(L1I_CACHE,non_zero_line_size)813*2b54f0dbSXin Li TEST(L1I_CACHE, non_zero_line_size) {
814*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
815*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
816*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
817*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
818*2b54f0dbSXin Li 
819*2b54f0dbSXin Li 		EXPECT_NE(0, cache->line_size);
820*2b54f0dbSXin Li 	}
821*2b54f0dbSXin Li 	cpuinfo_deinitialize();
822*2b54f0dbSXin Li }
823*2b54f0dbSXin Li 
TEST(L1I_CACHE,power_of_2_line_size)824*2b54f0dbSXin Li TEST(L1I_CACHE, power_of_2_line_size) {
825*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
826*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
827*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
828*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
829*2b54f0dbSXin Li 
830*2b54f0dbSXin Li 		const uint32_t line_size = cache->line_size;
831*2b54f0dbSXin Li 		EXPECT_NE(0, line_size);
832*2b54f0dbSXin Li 		EXPECT_EQ(0, line_size & (line_size - 1));
833*2b54f0dbSXin Li 	}
834*2b54f0dbSXin Li 	cpuinfo_deinitialize();
835*2b54f0dbSXin Li }
836*2b54f0dbSXin Li 
TEST(L1I_CACHE,reasonable_line_size)837*2b54f0dbSXin Li TEST(L1I_CACHE, reasonable_line_size) {
838*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
839*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
840*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
841*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
842*2b54f0dbSXin Li 
843*2b54f0dbSXin Li 		EXPECT_GE(cache->line_size, 16);
844*2b54f0dbSXin Li 		EXPECT_LE(cache->line_size, 128);
845*2b54f0dbSXin Li 	}
846*2b54f0dbSXin Li 	cpuinfo_deinitialize();
847*2b54f0dbSXin Li }
848*2b54f0dbSXin Li 
TEST(L1I_CACHE,valid_flags)849*2b54f0dbSXin Li TEST(L1I_CACHE, valid_flags) {
850*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
851*2b54f0dbSXin Li 
852*2b54f0dbSXin Li 	const uint32_t valid_flags = CPUINFO_CACHE_UNIFIED | CPUINFO_CACHE_INCLUSIVE | CPUINFO_CACHE_COMPLEX_INDEXING;
853*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
854*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
855*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
856*2b54f0dbSXin Li 
857*2b54f0dbSXin Li 		EXPECT_EQ(0, cache->flags & ~valid_flags);
858*2b54f0dbSXin Li 	}
859*2b54f0dbSXin Li 	cpuinfo_deinitialize();
860*2b54f0dbSXin Li }
861*2b54f0dbSXin Li 
TEST(L1I_CACHE,non_inclusive)862*2b54f0dbSXin Li TEST(L1I_CACHE, non_inclusive) {
863*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
864*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
865*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
866*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
867*2b54f0dbSXin Li 
868*2b54f0dbSXin Li 		EXPECT_NE(CPUINFO_CACHE_INCLUSIVE, cache->flags & CPUINFO_CACHE_INCLUSIVE);
869*2b54f0dbSXin Li 	}
870*2b54f0dbSXin Li 	cpuinfo_deinitialize();
871*2b54f0dbSXin Li }
872*2b54f0dbSXin Li 
TEST(L1I_CACHE,non_zero_processors)873*2b54f0dbSXin Li TEST(L1I_CACHE, non_zero_processors) {
874*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
875*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
876*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
877*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
878*2b54f0dbSXin Li 
879*2b54f0dbSXin Li 		EXPECT_NE(0, cache->processor_count);
880*2b54f0dbSXin Li 	}
881*2b54f0dbSXin Li 	cpuinfo_deinitialize();
882*2b54f0dbSXin Li }
883*2b54f0dbSXin Li 
TEST(L1I_CACHE,valid_processors)884*2b54f0dbSXin Li TEST(L1I_CACHE, valid_processors) {
885*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
886*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
887*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
888*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
889*2b54f0dbSXin Li 
890*2b54f0dbSXin Li 		EXPECT_LT(cache->processor_start, cpuinfo_get_processors_count());
891*2b54f0dbSXin Li 		EXPECT_LE(cache->processor_start + cache->processor_count, cpuinfo_get_processors_count());
892*2b54f0dbSXin Li 	}
893*2b54f0dbSXin Li 	cpuinfo_deinitialize();
894*2b54f0dbSXin Li }
895*2b54f0dbSXin Li 
TEST(L1I_CACHE,consistent_processors)896*2b54f0dbSXin Li TEST(L1I_CACHE, consistent_processors) {
897*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
898*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
899*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1i_cache(i);
900*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
901*2b54f0dbSXin Li 
902*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cache->processor_count; j++) {
903*2b54f0dbSXin Li 			const cpuinfo_processor* processor = cpuinfo_get_processor(cache->processor_start + j);
904*2b54f0dbSXin Li 			ASSERT_TRUE(processor);
905*2b54f0dbSXin Li 
906*2b54f0dbSXin Li 			EXPECT_EQ(cache, processor->cache.l1i);
907*2b54f0dbSXin Li 		}
908*2b54f0dbSXin Li 	}
909*2b54f0dbSXin Li 	cpuinfo_deinitialize();
910*2b54f0dbSXin Li }
911*2b54f0dbSXin Li 
TEST(L1D_CACHES_COUNT,within_bounds)912*2b54f0dbSXin Li TEST(L1D_CACHES_COUNT, within_bounds) {
913*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
914*2b54f0dbSXin Li 	EXPECT_NE(0, cpuinfo_get_l1d_caches_count());
915*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_l1d_caches_count(), cpuinfo_get_processors_count());
916*2b54f0dbSXin Li 	cpuinfo_deinitialize();
917*2b54f0dbSXin Li }
918*2b54f0dbSXin Li 
TEST(L1D_CACHES,non_null)919*2b54f0dbSXin Li TEST(L1D_CACHES, non_null) {
920*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
921*2b54f0dbSXin Li 	EXPECT_TRUE(cpuinfo_get_l1d_caches());
922*2b54f0dbSXin Li 	cpuinfo_deinitialize();
923*2b54f0dbSXin Li }
924*2b54f0dbSXin Li 
TEST(L1D_CACHE,non_null)925*2b54f0dbSXin Li TEST(L1D_CACHE, non_null) {
926*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
927*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
928*2b54f0dbSXin Li 		EXPECT_TRUE(cpuinfo_get_l1d_cache(i));
929*2b54f0dbSXin Li 	}
930*2b54f0dbSXin Li 	cpuinfo_deinitialize();
931*2b54f0dbSXin Li }
932*2b54f0dbSXin Li 
TEST(L1D_CACHE,non_zero_size)933*2b54f0dbSXin Li TEST(L1D_CACHE, non_zero_size) {
934*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
935*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
936*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
937*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
938*2b54f0dbSXin Li 
939*2b54f0dbSXin Li 		EXPECT_NE(0, cache->size);
940*2b54f0dbSXin Li 	}
941*2b54f0dbSXin Li 	cpuinfo_deinitialize();
942*2b54f0dbSXin Li }
943*2b54f0dbSXin Li 
TEST(L1D_CACHE,valid_size)944*2b54f0dbSXin Li TEST(L1D_CACHE, valid_size) {
945*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
946*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
947*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
948*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
949*2b54f0dbSXin Li 
950*2b54f0dbSXin Li 		EXPECT_EQ(cache->size,
951*2b54f0dbSXin Li 			cache->associativity * cache->sets * cache->partitions * cache->line_size);
952*2b54f0dbSXin Li 	}
953*2b54f0dbSXin Li 	cpuinfo_deinitialize();
954*2b54f0dbSXin Li }
955*2b54f0dbSXin Li 
TEST(L1D_CACHE,non_zero_associativity)956*2b54f0dbSXin Li TEST(L1D_CACHE, non_zero_associativity) {
957*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
958*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
959*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
960*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
961*2b54f0dbSXin Li 
962*2b54f0dbSXin Li 		EXPECT_NE(0, cache->associativity);
963*2b54f0dbSXin Li 	}
964*2b54f0dbSXin Li 	cpuinfo_deinitialize();
965*2b54f0dbSXin Li }
966*2b54f0dbSXin Li 
TEST(L1D_CACHE,non_zero_partitions)967*2b54f0dbSXin Li TEST(L1D_CACHE, non_zero_partitions) {
968*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
969*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
970*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
971*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
972*2b54f0dbSXin Li 
973*2b54f0dbSXin Li 		EXPECT_NE(0, cache->partitions);
974*2b54f0dbSXin Li 	}
975*2b54f0dbSXin Li 	cpuinfo_deinitialize();
976*2b54f0dbSXin Li }
977*2b54f0dbSXin Li 
TEST(L1D_CACHE,non_zero_line_size)978*2b54f0dbSXin Li TEST(L1D_CACHE, non_zero_line_size) {
979*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
980*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
981*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
982*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
983*2b54f0dbSXin Li 
984*2b54f0dbSXin Li 		EXPECT_NE(0, cache->line_size);
985*2b54f0dbSXin Li 	}
986*2b54f0dbSXin Li 	cpuinfo_deinitialize();
987*2b54f0dbSXin Li }
988*2b54f0dbSXin Li 
TEST(L1D_CACHE,power_of_2_line_size)989*2b54f0dbSXin Li TEST(L1D_CACHE, power_of_2_line_size) {
990*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
991*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
992*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
993*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
994*2b54f0dbSXin Li 
995*2b54f0dbSXin Li 		const uint32_t line_size = cache->line_size;
996*2b54f0dbSXin Li 		EXPECT_NE(0, line_size);
997*2b54f0dbSXin Li 		EXPECT_EQ(0, line_size & (line_size - 1));
998*2b54f0dbSXin Li 	}
999*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1000*2b54f0dbSXin Li }
1001*2b54f0dbSXin Li 
TEST(L1D_CACHE,reasonable_line_size)1002*2b54f0dbSXin Li TEST(L1D_CACHE, reasonable_line_size) {
1003*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1004*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
1005*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
1006*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1007*2b54f0dbSXin Li 
1008*2b54f0dbSXin Li 		EXPECT_GE(cache->line_size, 16);
1009*2b54f0dbSXin Li 		EXPECT_LE(cache->line_size, 128);
1010*2b54f0dbSXin Li 	}
1011*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1012*2b54f0dbSXin Li }
1013*2b54f0dbSXin Li 
TEST(L1D_CACHE,valid_flags)1014*2b54f0dbSXin Li TEST(L1D_CACHE, valid_flags) {
1015*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1016*2b54f0dbSXin Li 
1017*2b54f0dbSXin Li 	const uint32_t valid_flags = CPUINFO_CACHE_UNIFIED | CPUINFO_CACHE_INCLUSIVE | CPUINFO_CACHE_COMPLEX_INDEXING;
1018*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
1019*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
1020*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1021*2b54f0dbSXin Li 
1022*2b54f0dbSXin Li 		EXPECT_EQ(0, cache->flags & ~valid_flags);
1023*2b54f0dbSXin Li 	}
1024*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1025*2b54f0dbSXin Li }
1026*2b54f0dbSXin Li 
TEST(L1D_CACHE,non_inclusive)1027*2b54f0dbSXin Li TEST(L1D_CACHE, non_inclusive) {
1028*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1029*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
1030*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
1031*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1032*2b54f0dbSXin Li 
1033*2b54f0dbSXin Li 		EXPECT_NE(CPUINFO_CACHE_INCLUSIVE, cache->flags & CPUINFO_CACHE_INCLUSIVE);
1034*2b54f0dbSXin Li 	}
1035*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1036*2b54f0dbSXin Li }
1037*2b54f0dbSXin Li 
TEST(L1D_CACHE,non_zero_processors)1038*2b54f0dbSXin Li TEST(L1D_CACHE, non_zero_processors) {
1039*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1040*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
1041*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
1042*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1043*2b54f0dbSXin Li 
1044*2b54f0dbSXin Li 		EXPECT_NE(0, cache->processor_count);
1045*2b54f0dbSXin Li 	}
1046*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1047*2b54f0dbSXin Li }
1048*2b54f0dbSXin Li 
TEST(L1D_CACHE,valid_processors)1049*2b54f0dbSXin Li TEST(L1D_CACHE, valid_processors) {
1050*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1051*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
1052*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
1053*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1054*2b54f0dbSXin Li 
1055*2b54f0dbSXin Li 		EXPECT_LT(cache->processor_start, cpuinfo_get_processors_count());
1056*2b54f0dbSXin Li 		EXPECT_LE(cache->processor_start + cache->processor_count, cpuinfo_get_processors_count());
1057*2b54f0dbSXin Li 	}
1058*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1059*2b54f0dbSXin Li }
1060*2b54f0dbSXin Li 
TEST(L1D_CACHE,consistent_processors)1061*2b54f0dbSXin Li TEST(L1D_CACHE, consistent_processors) {
1062*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1063*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
1064*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l1d_cache(i);
1065*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1066*2b54f0dbSXin Li 
1067*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cache->processor_count; j++) {
1068*2b54f0dbSXin Li 			const cpuinfo_processor* processor = cpuinfo_get_processor(cache->processor_start + j);
1069*2b54f0dbSXin Li 			ASSERT_TRUE(processor);
1070*2b54f0dbSXin Li 
1071*2b54f0dbSXin Li 			EXPECT_EQ(cache, processor->cache.l1d);
1072*2b54f0dbSXin Li 		}
1073*2b54f0dbSXin Li 	}
1074*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1075*2b54f0dbSXin Li }
1076*2b54f0dbSXin Li 
TEST(L2_CACHES_COUNT,within_bounds)1077*2b54f0dbSXin Li TEST(L2_CACHES_COUNT, within_bounds) {
1078*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1079*2b54f0dbSXin Li 	EXPECT_NE(0, cpuinfo_get_l2_caches_count());
1080*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_l2_caches_count(), cpuinfo_get_processors_count());
1081*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_l2_caches_count(), cpuinfo_get_l1d_caches_count());
1082*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_l2_caches_count(), cpuinfo_get_l1i_caches_count());
1083*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1084*2b54f0dbSXin Li }
1085*2b54f0dbSXin Li 
TEST(L2_CACHES,non_null)1086*2b54f0dbSXin Li TEST(L2_CACHES, non_null) {
1087*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1088*2b54f0dbSXin Li 	EXPECT_TRUE(cpuinfo_get_l2_caches());
1089*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1090*2b54f0dbSXin Li }
1091*2b54f0dbSXin Li 
TEST(L2_CACHE,non_null)1092*2b54f0dbSXin Li TEST(L2_CACHE, non_null) {
1093*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1094*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1095*2b54f0dbSXin Li 		EXPECT_TRUE(cpuinfo_get_l2_cache(i));
1096*2b54f0dbSXin Li 	}
1097*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1098*2b54f0dbSXin Li }
1099*2b54f0dbSXin Li 
TEST(L2_CACHE,non_zero_size)1100*2b54f0dbSXin Li TEST(L2_CACHE, non_zero_size) {
1101*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1102*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1103*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l2_cache(i);
1104*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1105*2b54f0dbSXin Li 
1106*2b54f0dbSXin Li 		EXPECT_NE(0, cache->size);
1107*2b54f0dbSXin Li 	}
1108*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1109*2b54f0dbSXin Li }
1110*2b54f0dbSXin Li 
TEST(L2_CACHE,valid_size)1111*2b54f0dbSXin Li TEST(L2_CACHE, valid_size) {
1112*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1113*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1114*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l2_cache(i);
1115*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1116*2b54f0dbSXin Li 
1117*2b54f0dbSXin Li 		EXPECT_EQ(cache->size,
1118*2b54f0dbSXin Li 			cache->associativity * cache->sets * cache->partitions * cache->line_size);
1119*2b54f0dbSXin Li 	}
1120*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1121*2b54f0dbSXin Li }
1122*2b54f0dbSXin Li 
TEST(L2_CACHE,non_zero_associativity)1123*2b54f0dbSXin Li TEST(L2_CACHE, non_zero_associativity) {
1124*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1125*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1126*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l2_cache(i);
1127*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1128*2b54f0dbSXin Li 
1129*2b54f0dbSXin Li 		EXPECT_NE(0, cache->associativity);
1130*2b54f0dbSXin Li 	}
1131*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1132*2b54f0dbSXin Li }
1133*2b54f0dbSXin Li 
TEST(L2_CACHE,non_zero_partitions)1134*2b54f0dbSXin Li TEST(L2_CACHE, non_zero_partitions) {
1135*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1136*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1137*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l2_cache(i);
1138*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1139*2b54f0dbSXin Li 
1140*2b54f0dbSXin Li 		EXPECT_NE(0, cache->partitions);
1141*2b54f0dbSXin Li 	}
1142*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1143*2b54f0dbSXin Li }
1144*2b54f0dbSXin Li 
TEST(L2_CACHE,non_zero_line_size)1145*2b54f0dbSXin Li TEST(L2_CACHE, non_zero_line_size) {
1146*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1147*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1148*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l2_cache(i);
1149*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1150*2b54f0dbSXin Li 
1151*2b54f0dbSXin Li 		EXPECT_NE(0, cache->line_size);
1152*2b54f0dbSXin Li 	}
1153*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1154*2b54f0dbSXin Li }
1155*2b54f0dbSXin Li 
TEST(L2_CACHE,power_of_2_line_size)1156*2b54f0dbSXin Li TEST(L2_CACHE, power_of_2_line_size) {
1157*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1158*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1159*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l2_cache(i);
1160*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1161*2b54f0dbSXin Li 
1162*2b54f0dbSXin Li 		const uint32_t line_size = cache->line_size;
1163*2b54f0dbSXin Li 		EXPECT_NE(0, line_size);
1164*2b54f0dbSXin Li 		EXPECT_EQ(0, line_size & (line_size - 1));
1165*2b54f0dbSXin Li 	}
1166*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1167*2b54f0dbSXin Li }
1168*2b54f0dbSXin Li 
TEST(L2_CACHE,reasonable_line_size)1169*2b54f0dbSXin Li TEST(L2_CACHE, reasonable_line_size) {
1170*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1171*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1172*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l2_cache(i);
1173*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1174*2b54f0dbSXin Li 
1175*2b54f0dbSXin Li 		EXPECT_GE(cache->line_size, 16);
1176*2b54f0dbSXin Li 		EXPECT_LE(cache->line_size, 128);
1177*2b54f0dbSXin Li 	}
1178*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1179*2b54f0dbSXin Li }
1180*2b54f0dbSXin Li 
TEST(L2_CACHE,valid_flags)1181*2b54f0dbSXin Li TEST(L2_CACHE, valid_flags) {
1182*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1183*2b54f0dbSXin Li 
1184*2b54f0dbSXin Li 	const uint32_t valid_flags = CPUINFO_CACHE_UNIFIED | CPUINFO_CACHE_INCLUSIVE | CPUINFO_CACHE_COMPLEX_INDEXING;
1185*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1186*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l2_cache(i);
1187*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1188*2b54f0dbSXin Li 
1189*2b54f0dbSXin Li 		EXPECT_EQ(0, cache->flags & ~valid_flags);
1190*2b54f0dbSXin Li 	}
1191*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1192*2b54f0dbSXin Li }
1193*2b54f0dbSXin Li 
TEST(L2_CACHE,non_zero_processors)1194*2b54f0dbSXin Li TEST(L2_CACHE, non_zero_processors) {
1195*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1196*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1197*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l2_cache(i);
1198*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1199*2b54f0dbSXin Li 
1200*2b54f0dbSXin Li 		EXPECT_NE(0, cache->processor_count);
1201*2b54f0dbSXin Li 	}
1202*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1203*2b54f0dbSXin Li }
1204*2b54f0dbSXin Li 
TEST(L2_CACHE,valid_processors)1205*2b54f0dbSXin Li TEST(L2_CACHE, valid_processors) {
1206*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1207*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1208*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l2_cache(i);
1209*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1210*2b54f0dbSXin Li 
1211*2b54f0dbSXin Li 		EXPECT_LT(cache->processor_start, cpuinfo_get_processors_count());
1212*2b54f0dbSXin Li 		EXPECT_LE(cache->processor_start + cache->processor_count, cpuinfo_get_processors_count());
1213*2b54f0dbSXin Li 	}
1214*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1215*2b54f0dbSXin Li }
1216*2b54f0dbSXin Li 
TEST(L2_CACHE,consistent_processors)1217*2b54f0dbSXin Li TEST(L2_CACHE, consistent_processors) {
1218*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1219*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
1220*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l2_cache(i);
1221*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1222*2b54f0dbSXin Li 
1223*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cache->processor_count; j++) {
1224*2b54f0dbSXin Li 			const cpuinfo_processor* processor = cpuinfo_get_processor(cache->processor_start + j);
1225*2b54f0dbSXin Li 			ASSERT_TRUE(processor);
1226*2b54f0dbSXin Li 
1227*2b54f0dbSXin Li 			EXPECT_EQ(cache, processor->cache.l2);
1228*2b54f0dbSXin Li 		}
1229*2b54f0dbSXin Li 	}
1230*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1231*2b54f0dbSXin Li }
1232*2b54f0dbSXin Li 
TEST(L3_CACHES_COUNT,within_bounds)1233*2b54f0dbSXin Li TEST(L3_CACHES_COUNT, within_bounds) {
1234*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1235*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_l3_caches_count(), cpuinfo_get_processors_count());
1236*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_l3_caches_count(), cpuinfo_get_l2_caches_count());
1237*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1238*2b54f0dbSXin Li }
1239*2b54f0dbSXin Li 
TEST(L3_CACHE,non_null)1240*2b54f0dbSXin Li TEST(L3_CACHE, non_null) {
1241*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1242*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1243*2b54f0dbSXin Li 		EXPECT_TRUE(cpuinfo_get_l3_cache(i));
1244*2b54f0dbSXin Li 	}
1245*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1246*2b54f0dbSXin Li }
1247*2b54f0dbSXin Li 
TEST(L3_CACHE,non_zero_size)1248*2b54f0dbSXin Li TEST(L3_CACHE, non_zero_size) {
1249*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1250*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1251*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l3_cache(i);
1252*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1253*2b54f0dbSXin Li 
1254*2b54f0dbSXin Li 		EXPECT_NE(0, cache->size);
1255*2b54f0dbSXin Li 	}
1256*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1257*2b54f0dbSXin Li }
1258*2b54f0dbSXin Li 
TEST(L3_CACHE,valid_size)1259*2b54f0dbSXin Li TEST(L3_CACHE, valid_size) {
1260*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1261*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1262*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l3_cache(i);
1263*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1264*2b54f0dbSXin Li 
1265*2b54f0dbSXin Li 		EXPECT_EQ(cache->size,
1266*2b54f0dbSXin Li 			cache->associativity * cache->sets * cache->partitions * cache->line_size);
1267*2b54f0dbSXin Li 	}
1268*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1269*2b54f0dbSXin Li }
1270*2b54f0dbSXin Li 
TEST(L3_CACHE,non_zero_associativity)1271*2b54f0dbSXin Li TEST(L3_CACHE, non_zero_associativity) {
1272*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1273*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1274*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l3_cache(i);
1275*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1276*2b54f0dbSXin Li 
1277*2b54f0dbSXin Li 		EXPECT_NE(0, cache->associativity);
1278*2b54f0dbSXin Li 	}
1279*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1280*2b54f0dbSXin Li }
1281*2b54f0dbSXin Li 
TEST(L3_CACHE,non_zero_partitions)1282*2b54f0dbSXin Li TEST(L3_CACHE, non_zero_partitions) {
1283*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1284*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1285*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l3_cache(i);
1286*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1287*2b54f0dbSXin Li 
1288*2b54f0dbSXin Li 		EXPECT_NE(0, cache->partitions);
1289*2b54f0dbSXin Li 	}
1290*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1291*2b54f0dbSXin Li }
1292*2b54f0dbSXin Li 
TEST(L3_CACHE,non_zero_line_size)1293*2b54f0dbSXin Li TEST(L3_CACHE, non_zero_line_size) {
1294*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1295*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1296*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l3_cache(i);
1297*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1298*2b54f0dbSXin Li 
1299*2b54f0dbSXin Li 		EXPECT_NE(0, cache->line_size);
1300*2b54f0dbSXin Li 	}
1301*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1302*2b54f0dbSXin Li }
1303*2b54f0dbSXin Li 
TEST(L3_CACHE,power_of_2_line_size)1304*2b54f0dbSXin Li TEST(L3_CACHE, power_of_2_line_size) {
1305*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1306*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1307*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l3_cache(i);
1308*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1309*2b54f0dbSXin Li 
1310*2b54f0dbSXin Li 		const uint32_t line_size = cache->line_size;
1311*2b54f0dbSXin Li 		EXPECT_NE(0, line_size);
1312*2b54f0dbSXin Li 		EXPECT_EQ(0, line_size & (line_size - 1));
1313*2b54f0dbSXin Li 	}
1314*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1315*2b54f0dbSXin Li }
1316*2b54f0dbSXin Li 
TEST(L3_CACHE,reasonable_line_size)1317*2b54f0dbSXin Li TEST(L3_CACHE, reasonable_line_size) {
1318*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1319*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1320*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l3_cache(i);
1321*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1322*2b54f0dbSXin Li 
1323*2b54f0dbSXin Li 		EXPECT_GE(cache->line_size, 16);
1324*2b54f0dbSXin Li 		EXPECT_LE(cache->line_size, 128);
1325*2b54f0dbSXin Li 	}
1326*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1327*2b54f0dbSXin Li }
1328*2b54f0dbSXin Li 
TEST(L3_CACHE,valid_flags)1329*2b54f0dbSXin Li TEST(L3_CACHE, valid_flags) {
1330*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1331*2b54f0dbSXin Li 
1332*2b54f0dbSXin Li 	const uint32_t valid_flags = CPUINFO_CACHE_UNIFIED | CPUINFO_CACHE_INCLUSIVE | CPUINFO_CACHE_COMPLEX_INDEXING;
1333*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1334*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l3_cache(i);
1335*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1336*2b54f0dbSXin Li 
1337*2b54f0dbSXin Li 		EXPECT_EQ(0, cache->flags & ~valid_flags);
1338*2b54f0dbSXin Li 	}
1339*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1340*2b54f0dbSXin Li }
1341*2b54f0dbSXin Li 
TEST(L3_CACHE,non_zero_processors)1342*2b54f0dbSXin Li TEST(L3_CACHE, non_zero_processors) {
1343*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1344*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1345*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l3_cache(i);
1346*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1347*2b54f0dbSXin Li 
1348*2b54f0dbSXin Li 		EXPECT_NE(0, cache->processor_count);
1349*2b54f0dbSXin Li 	}
1350*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1351*2b54f0dbSXin Li }
1352*2b54f0dbSXin Li 
TEST(L3_CACHE,valid_processors)1353*2b54f0dbSXin Li TEST(L3_CACHE, valid_processors) {
1354*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1355*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1356*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l3_cache(i);
1357*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1358*2b54f0dbSXin Li 
1359*2b54f0dbSXin Li 		EXPECT_LT(cache->processor_start, cpuinfo_get_processors_count());
1360*2b54f0dbSXin Li 		EXPECT_LE(cache->processor_start + cache->processor_count, cpuinfo_get_processors_count());
1361*2b54f0dbSXin Li 	}
1362*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1363*2b54f0dbSXin Li }
1364*2b54f0dbSXin Li 
TEST(L3_CACHE,consistent_processors)1365*2b54f0dbSXin Li TEST(L3_CACHE, consistent_processors) {
1366*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1367*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l3_caches_count(); i++) {
1368*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l3_cache(i);
1369*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1370*2b54f0dbSXin Li 
1371*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cache->processor_count; j++) {
1372*2b54f0dbSXin Li 			const cpuinfo_processor* processor = cpuinfo_get_processor(cache->processor_start + j);
1373*2b54f0dbSXin Li 			ASSERT_TRUE(processor);
1374*2b54f0dbSXin Li 
1375*2b54f0dbSXin Li 			EXPECT_EQ(cache, processor->cache.l3);
1376*2b54f0dbSXin Li 		}
1377*2b54f0dbSXin Li 	}
1378*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1379*2b54f0dbSXin Li }
1380*2b54f0dbSXin Li 
TEST(L4_CACHES_COUNT,within_bounds)1381*2b54f0dbSXin Li TEST(L4_CACHES_COUNT, within_bounds) {
1382*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1383*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_l4_caches_count(), cpuinfo_get_processors_count());
1384*2b54f0dbSXin Li 	EXPECT_LE(cpuinfo_get_l4_caches_count(), cpuinfo_get_l3_caches_count());
1385*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1386*2b54f0dbSXin Li }
1387*2b54f0dbSXin Li 
TEST(L4_CACHE,non_null)1388*2b54f0dbSXin Li TEST(L4_CACHE, non_null) {
1389*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1390*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1391*2b54f0dbSXin Li 		EXPECT_TRUE(cpuinfo_get_l4_cache(i));
1392*2b54f0dbSXin Li 	}
1393*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1394*2b54f0dbSXin Li }
1395*2b54f0dbSXin Li 
TEST(L4_CACHE,non_zero_size)1396*2b54f0dbSXin Li TEST(L4_CACHE, non_zero_size) {
1397*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1398*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1399*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l4_cache(i);
1400*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1401*2b54f0dbSXin Li 
1402*2b54f0dbSXin Li 		EXPECT_NE(0, cache->size);
1403*2b54f0dbSXin Li 	}
1404*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1405*2b54f0dbSXin Li }
1406*2b54f0dbSXin Li 
TEST(L4_CACHE,valid_size)1407*2b54f0dbSXin Li TEST(L4_CACHE, valid_size) {
1408*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1409*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1410*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l4_cache(i);
1411*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1412*2b54f0dbSXin Li 
1413*2b54f0dbSXin Li 		EXPECT_EQ(cache->size,
1414*2b54f0dbSXin Li 			cache->associativity * cache->sets * cache->partitions * cache->line_size);
1415*2b54f0dbSXin Li 	}
1416*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1417*2b54f0dbSXin Li }
1418*2b54f0dbSXin Li 
TEST(L4_CACHE,non_zero_associativity)1419*2b54f0dbSXin Li TEST(L4_CACHE, non_zero_associativity) {
1420*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1421*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1422*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l4_cache(i);
1423*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1424*2b54f0dbSXin Li 
1425*2b54f0dbSXin Li 		EXPECT_NE(0, cache->associativity);
1426*2b54f0dbSXin Li 	}
1427*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1428*2b54f0dbSXin Li }
1429*2b54f0dbSXin Li 
TEST(L4_CACHE,non_zero_partitions)1430*2b54f0dbSXin Li TEST(L4_CACHE, non_zero_partitions) {
1431*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1432*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1433*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l4_cache(i);
1434*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1435*2b54f0dbSXin Li 
1436*2b54f0dbSXin Li 		EXPECT_NE(0, cache->partitions);
1437*2b54f0dbSXin Li 	}
1438*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1439*2b54f0dbSXin Li }
1440*2b54f0dbSXin Li 
TEST(L4_CACHE,non_zero_line_size)1441*2b54f0dbSXin Li TEST(L4_CACHE, non_zero_line_size) {
1442*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1443*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1444*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l4_cache(i);
1445*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1446*2b54f0dbSXin Li 
1447*2b54f0dbSXin Li 		EXPECT_NE(0, cache->line_size);
1448*2b54f0dbSXin Li 	}
1449*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1450*2b54f0dbSXin Li }
1451*2b54f0dbSXin Li 
TEST(L4_CACHE,power_of_2_line_size)1452*2b54f0dbSXin Li TEST(L4_CACHE, power_of_2_line_size) {
1453*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1454*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1455*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l4_cache(i);
1456*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1457*2b54f0dbSXin Li 
1458*2b54f0dbSXin Li 		const uint32_t line_size = cache->line_size;
1459*2b54f0dbSXin Li 		EXPECT_NE(0, line_size);
1460*2b54f0dbSXin Li 		EXPECT_EQ(0, line_size & (line_size - 1));
1461*2b54f0dbSXin Li 	}
1462*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1463*2b54f0dbSXin Li }
1464*2b54f0dbSXin Li 
TEST(L4_CACHE,reasonable_line_size)1465*2b54f0dbSXin Li TEST(L4_CACHE, reasonable_line_size) {
1466*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1467*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1468*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l4_cache(i);
1469*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1470*2b54f0dbSXin Li 
1471*2b54f0dbSXin Li 		EXPECT_GE(cache->line_size, 16);
1472*2b54f0dbSXin Li 		EXPECT_LE(cache->line_size, 128);
1473*2b54f0dbSXin Li 	}
1474*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1475*2b54f0dbSXin Li }
1476*2b54f0dbSXin Li 
TEST(L4_CACHE,valid_flags)1477*2b54f0dbSXin Li TEST(L4_CACHE, valid_flags) {
1478*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1479*2b54f0dbSXin Li 
1480*2b54f0dbSXin Li 	const uint32_t valid_flags = CPUINFO_CACHE_UNIFIED | CPUINFO_CACHE_INCLUSIVE | CPUINFO_CACHE_COMPLEX_INDEXING;
1481*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1482*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l4_cache(i);
1483*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1484*2b54f0dbSXin Li 
1485*2b54f0dbSXin Li 		EXPECT_EQ(0, cache->flags & ~valid_flags);
1486*2b54f0dbSXin Li 	}
1487*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1488*2b54f0dbSXin Li }
1489*2b54f0dbSXin Li 
TEST(L4_CACHE,non_zero_processors)1490*2b54f0dbSXin Li TEST(L4_CACHE, non_zero_processors) {
1491*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1492*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1493*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l4_cache(i);
1494*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1495*2b54f0dbSXin Li 
1496*2b54f0dbSXin Li 		EXPECT_NE(0, cache->processor_count);
1497*2b54f0dbSXin Li 	}
1498*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1499*2b54f0dbSXin Li }
1500*2b54f0dbSXin Li 
TEST(L4_CACHE,valid_processors)1501*2b54f0dbSXin Li TEST(L4_CACHE, valid_processors) {
1502*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1503*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1504*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l4_cache(i);
1505*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1506*2b54f0dbSXin Li 
1507*2b54f0dbSXin Li 		EXPECT_LT(cache->processor_start, cpuinfo_get_processors_count());
1508*2b54f0dbSXin Li 		EXPECT_LE(cache->processor_start + cache->processor_count, cpuinfo_get_processors_count());
1509*2b54f0dbSXin Li 	}
1510*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1511*2b54f0dbSXin Li }
1512*2b54f0dbSXin Li 
TEST(L4_CACHE,consistent_processors)1513*2b54f0dbSXin Li TEST(L4_CACHE, consistent_processors) {
1514*2b54f0dbSXin Li 	ASSERT_TRUE(cpuinfo_initialize());
1515*2b54f0dbSXin Li 	for (uint32_t i = 0; i < cpuinfo_get_l4_caches_count(); i++) {
1516*2b54f0dbSXin Li 		const cpuinfo_cache* cache = cpuinfo_get_l4_cache(i);
1517*2b54f0dbSXin Li 		ASSERT_TRUE(cache);
1518*2b54f0dbSXin Li 
1519*2b54f0dbSXin Li 		for (uint32_t j = 0; j < cache->processor_count; j++) {
1520*2b54f0dbSXin Li 			const cpuinfo_processor* processor = cpuinfo_get_processor(cache->processor_start + j);
1521*2b54f0dbSXin Li 			ASSERT_TRUE(processor);
1522*2b54f0dbSXin Li 
1523*2b54f0dbSXin Li 			EXPECT_EQ(cache, processor->cache.l4);
1524*2b54f0dbSXin Li 		}
1525*2b54f0dbSXin Li 	}
1526*2b54f0dbSXin Li 	cpuinfo_deinitialize();
1527*2b54f0dbSXin Li }
1528