• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <gtest/gtest.h>
2 
3 #include <cpuinfo-mock.h>
4 #include <cpuinfo.h>
5 
TEST(PROCESSORS,count)6 TEST(PROCESSORS, count) {
7 	ASSERT_EQ(4, cpuinfo_get_processors_count());
8 }
9 
TEST(PROCESSORS,non_null)10 TEST(PROCESSORS, non_null) {
11 	ASSERT_TRUE(cpuinfo_get_processors());
12 }
13 
TEST(PROCESSORS,smt_id)14 TEST(PROCESSORS, smt_id) {
15 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
16 		ASSERT_EQ(0, cpuinfo_get_processor(i)->smt_id);
17 	}
18 }
19 
TEST(PROCESSORS,core)20 TEST(PROCESSORS, core) {
21 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
22 		ASSERT_EQ(cpuinfo_get_core(i), cpuinfo_get_processor(i)->core);
23 	}
24 }
25 
TEST(PROCESSORS,cluster)26 TEST(PROCESSORS, cluster) {
27 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
28 		switch (i) {
29 			case 0:
30 			case 1:
31 				ASSERT_EQ(cpuinfo_get_cluster(0), cpuinfo_get_processor(i)->cluster);
32 				break;
33 			case 2:
34 			case 3:
35 				ASSERT_EQ(cpuinfo_get_cluster(1), cpuinfo_get_processor(i)->cluster);
36 				break;
37 		}
38 	}
39 }
40 
TEST(PROCESSORS,package)41 TEST(PROCESSORS, package) {
42 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
43 		ASSERT_EQ(cpuinfo_get_package(0), cpuinfo_get_processor(i)->package);
44 	}
45 }
46 
TEST(PROCESSORS,linux_id)47 TEST(PROCESSORS, linux_id) {
48 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
49 		switch (i) {
50 			case 0:
51 			case 1:
52 				ASSERT_EQ(i + 2, cpuinfo_get_processor(i)->linux_id);
53 				break;
54 			case 2:
55 			case 3:
56 				ASSERT_EQ(i - 2, cpuinfo_get_processor(i)->linux_id);
57 				break;
58 		}
59 	}
60 }
61 
TEST(PROCESSORS,l1i)62 TEST(PROCESSORS, l1i) {
63 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
64 		ASSERT_EQ(cpuinfo_get_l1i_cache(i), cpuinfo_get_processor(i)->cache.l1i);
65 	}
66 }
67 
TEST(PROCESSORS,l1d)68 TEST(PROCESSORS, l1d) {
69 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
70 		ASSERT_EQ(cpuinfo_get_l1d_cache(i), cpuinfo_get_processor(i)->cache.l1d);
71 	}
72 }
73 
TEST(PROCESSORS,l2)74 TEST(PROCESSORS, l2) {
75 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
76 		switch (i) {
77 			case 0:
78 			case 1:
79 				ASSERT_EQ(cpuinfo_get_l2_cache(0), cpuinfo_get_processor(i)->cache.l2);
80 				break;
81 			case 2:
82 			case 3:
83 				ASSERT_EQ(cpuinfo_get_l2_cache(1), cpuinfo_get_processor(i)->cache.l2);
84 				break;
85 		}
86 	}
87 }
88 
TEST(PROCESSORS,l3)89 TEST(PROCESSORS, l3) {
90 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
91 		ASSERT_FALSE(cpuinfo_get_processor(i)->cache.l3);
92 	}
93 }
94 
TEST(PROCESSORS,l4)95 TEST(PROCESSORS, l4) {
96 	for (uint32_t i = 0; i < cpuinfo_get_processors_count(); i++) {
97 		ASSERT_FALSE(cpuinfo_get_processor(i)->cache.l4);
98 	}
99 }
100 
TEST(CORES,count)101 TEST(CORES, count) {
102 	ASSERT_EQ(4, cpuinfo_get_cores_count());
103 }
104 
TEST(CORES,non_null)105 TEST(CORES, non_null) {
106 	ASSERT_TRUE(cpuinfo_get_cores());
107 }
108 
TEST(CORES,processor_start)109 TEST(CORES, processor_start) {
110 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
111 		ASSERT_EQ(i, cpuinfo_get_core(i)->processor_start);
112 	}
113 }
114 
TEST(CORES,processor_count)115 TEST(CORES, processor_count) {
116 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
117 		ASSERT_EQ(1, cpuinfo_get_core(i)->processor_count);
118 	}
119 }
120 
TEST(CORES,core_id)121 TEST(CORES, core_id) {
122 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
123 		ASSERT_EQ(i, cpuinfo_get_core(i)->core_id);
124 	}
125 }
126 
TEST(CORES,cluster)127 TEST(CORES, cluster) {
128 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
129 		switch (i) {
130 			case 0:
131 			case 1:
132 				ASSERT_EQ(cpuinfo_get_cluster(0), cpuinfo_get_core(i)->cluster);
133 				break;
134 			case 2:
135 			case 3:
136 				ASSERT_EQ(cpuinfo_get_cluster(1), cpuinfo_get_core(i)->cluster);
137 				break;
138 		}
139 	}
140 }
141 
TEST(CORES,package)142 TEST(CORES, package) {
143 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
144 		ASSERT_EQ(cpuinfo_get_package(0), cpuinfo_get_core(i)->package);
145 	}
146 }
147 
TEST(CORES,vendor)148 TEST(CORES, vendor) {
149 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
150 		ASSERT_EQ(cpuinfo_vendor_qualcomm, cpuinfo_get_core(i)->vendor);
151 	}
152 }
153 
TEST(CORES,uarch)154 TEST(CORES, uarch) {
155 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
156 		ASSERT_EQ(cpuinfo_uarch_kryo, cpuinfo_get_core(i)->uarch);
157 	}
158 }
159 
TEST(CORES,midr)160 TEST(CORES, midr) {
161 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
162 		switch (i) {
163 			case 0:
164 			case 1:
165 				ASSERT_EQ(UINT32_C(0x512F2051), cpuinfo_get_core(i)->midr);
166 				break;
167 			case 2:
168 			case 3:
169 				ASSERT_EQ(UINT32_C(0x512F2011), cpuinfo_get_core(i)->midr);
170 				break;
171 		}
172 	}
173 }
174 
TEST(CORES,DISABLED_frequency)175 TEST(CORES, DISABLED_frequency) {
176 	for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
177 		switch (i) {
178 			case 0:
179 			case 1:
180 				ASSERT_EQ(UINT64_C(2150400000), cpuinfo_get_core(i)->frequency);
181 				break;
182 			case 2:
183 			case 3:
184 				ASSERT_EQ(UINT64_C(1593600000), cpuinfo_get_core(i)->frequency);
185 				break;
186 		}
187 	}
188 }
189 
TEST(CLUSTERS,count)190 TEST(CLUSTERS, count) {
191 	ASSERT_EQ(2, cpuinfo_get_clusters_count());
192 }
193 
TEST(CLUSTERS,non_null)194 TEST(CLUSTERS, non_null) {
195 	ASSERT_TRUE(cpuinfo_get_clusters());
196 }
197 
TEST(CLUSTERS,processor_start)198 TEST(CLUSTERS, processor_start) {
199 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
200 		switch (i) {
201 			case 0:
202 				ASSERT_EQ(0, cpuinfo_get_cluster(i)->processor_start);
203 				break;
204 			case 1:
205 				ASSERT_EQ(2, cpuinfo_get_cluster(i)->processor_start);
206 				break;
207 		}
208 	}
209 }
210 
TEST(CLUSTERS,processor_count)211 TEST(CLUSTERS, processor_count) {
212 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
213 		ASSERT_EQ(2, cpuinfo_get_cluster(i)->processor_count);
214 	}
215 }
216 
TEST(CLUSTERS,core_start)217 TEST(CLUSTERS, core_start) {
218 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
219 		switch (i) {
220 			case 0:
221 				ASSERT_EQ(0, cpuinfo_get_cluster(i)->core_start);
222 				break;
223 			case 1:
224 				ASSERT_EQ(2, cpuinfo_get_cluster(i)->core_start);
225 				break;
226 		}
227 	}
228 }
229 
TEST(CLUSTERS,core_count)230 TEST(CLUSTERS, core_count) {
231 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
232 		ASSERT_EQ(2, cpuinfo_get_cluster(i)->core_count);
233 	}
234 }
235 
TEST(CLUSTERS,cluster_id)236 TEST(CLUSTERS, cluster_id) {
237 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
238 		ASSERT_EQ(i, cpuinfo_get_cluster(i)->cluster_id);
239 	}
240 }
241 
TEST(CLUSTERS,package)242 TEST(CLUSTERS, package) {
243 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
244 		ASSERT_EQ(cpuinfo_get_package(0), cpuinfo_get_cluster(i)->package);
245 	}
246 }
247 
TEST(CLUSTERS,vendor)248 TEST(CLUSTERS, vendor) {
249 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
250 		ASSERT_EQ(cpuinfo_vendor_qualcomm, cpuinfo_get_cluster(i)->vendor);
251 	}
252 }
253 
TEST(CLUSTERS,uarch)254 TEST(CLUSTERS, uarch) {
255 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
256 		ASSERT_EQ(cpuinfo_uarch_kryo, cpuinfo_get_cluster(i)->uarch);
257 	}
258 }
259 
TEST(CLUSTERS,midr)260 TEST(CLUSTERS, midr) {
261 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
262 		switch (i) {
263 			case 0:
264 				ASSERT_EQ(UINT32_C(0x512F2051), cpuinfo_get_cluster(i)->midr);
265 				break;
266 			case 1:
267 				ASSERT_EQ(UINT32_C(0x512F2011), cpuinfo_get_cluster(i)->midr);
268 				break;
269 		}
270 	}
271 }
272 
TEST(CLUSTERS,DISABLED_frequency)273 TEST(CLUSTERS, DISABLED_frequency) {
274 	for (uint32_t i = 0; i < cpuinfo_get_clusters_count(); i++) {
275 		switch (i) {
276 			case 0:
277 				ASSERT_EQ(UINT64_C(2150400000), cpuinfo_get_cluster(i)->frequency);
278 				break;
279 			case 1:
280 				ASSERT_EQ(UINT64_C(1593600000), cpuinfo_get_cluster(i)->frequency);
281 				break;
282 		}
283 	}
284 }
285 
TEST(PACKAGES,count)286 TEST(PACKAGES, count) {
287 	ASSERT_EQ(1, cpuinfo_get_packages_count());
288 }
289 
TEST(PACKAGES,name)290 TEST(PACKAGES, name) {
291 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
292 		ASSERT_EQ(
293 			"Qualcomm MSM8996PRO-AB",
294 			std::string(
295 				cpuinfo_get_package(i)->name,
296 				strnlen(cpuinfo_get_package(i)->name, CPUINFO_PACKAGE_NAME_MAX)));
297 	}
298 }
299 
TEST(PACKAGES,processor_start)300 TEST(PACKAGES, processor_start) {
301 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
302 		ASSERT_EQ(0, cpuinfo_get_package(i)->processor_start);
303 	}
304 }
305 
TEST(PACKAGES,processor_count)306 TEST(PACKAGES, processor_count) {
307 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
308 		ASSERT_EQ(4, cpuinfo_get_package(i)->processor_count);
309 	}
310 }
311 
TEST(PACKAGES,core_start)312 TEST(PACKAGES, core_start) {
313 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
314 		ASSERT_EQ(0, cpuinfo_get_package(i)->core_start);
315 	}
316 }
317 
TEST(PACKAGES,core_count)318 TEST(PACKAGES, core_count) {
319 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
320 		ASSERT_EQ(4, cpuinfo_get_package(i)->core_count);
321 	}
322 }
323 
TEST(PACKAGES,cluster_start)324 TEST(PACKAGES, cluster_start) {
325 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
326 		ASSERT_EQ(0, cpuinfo_get_package(i)->cluster_start);
327 	}
328 }
329 
TEST(PACKAGES,cluster_count)330 TEST(PACKAGES, cluster_count) {
331 	for (uint32_t i = 0; i < cpuinfo_get_packages_count(); i++) {
332 		ASSERT_EQ(2, cpuinfo_get_package(i)->cluster_count);
333 	}
334 }
335 
TEST(ISA,thumb)336 TEST(ISA, thumb) {
337 #if CPUINFO_ARCH_ARM
338 	ASSERT_TRUE(cpuinfo_has_arm_thumb());
339 #elif CPUINFO_ARCH_ARM64
340 	ASSERT_FALSE(cpuinfo_has_arm_thumb());
341 #endif
342 }
343 
TEST(ISA,thumb2)344 TEST(ISA, thumb2) {
345 #if CPUINFO_ARCH_ARM
346 	ASSERT_TRUE(cpuinfo_has_arm_thumb2());
347 #elif CPUINFO_ARCH_ARM64
348 	ASSERT_FALSE(cpuinfo_has_arm_thumb2());
349 #endif
350 }
351 
TEST(ISA,armv5e)352 TEST(ISA, armv5e) {
353 #if CPUINFO_ARCH_ARM
354 	ASSERT_TRUE(cpuinfo_has_arm_v5e());
355 #elif CPUINFO_ARCH_ARM64
356 	ASSERT_FALSE(cpuinfo_has_arm_v5e());
357 #endif
358 }
359 
TEST(ISA,armv6)360 TEST(ISA, armv6) {
361 #if CPUINFO_ARCH_ARM
362 	ASSERT_TRUE(cpuinfo_has_arm_v6());
363 #elif CPUINFO_ARCH_ARM64
364 	ASSERT_FALSE(cpuinfo_has_arm_v6());
365 #endif
366 }
367 
TEST(ISA,armv6k)368 TEST(ISA, armv6k) {
369 #if CPUINFO_ARCH_ARM
370 	ASSERT_TRUE(cpuinfo_has_arm_v6k());
371 #elif CPUINFO_ARCH_ARM64
372 	ASSERT_FALSE(cpuinfo_has_arm_v6k());
373 #endif
374 }
375 
TEST(ISA,armv7)376 TEST(ISA, armv7) {
377 #if CPUINFO_ARCH_ARM
378 	ASSERT_TRUE(cpuinfo_has_arm_v7());
379 #elif CPUINFO_ARCH_ARM64
380 	ASSERT_FALSE(cpuinfo_has_arm_v7());
381 #endif
382 }
383 
TEST(ISA,armv7mp)384 TEST(ISA, armv7mp) {
385 #if CPUINFO_ARCH_ARM
386 	ASSERT_TRUE(cpuinfo_has_arm_v7mp());
387 #elif CPUINFO_ARCH_ARM64
388 	ASSERT_FALSE(cpuinfo_has_arm_v7mp());
389 #endif
390 }
391 
TEST(ISA,idiv)392 TEST(ISA, idiv) {
393 	ASSERT_TRUE(cpuinfo_has_arm_idiv());
394 }
395 
TEST(ISA,vfpv2)396 TEST(ISA, vfpv2) {
397 	ASSERT_FALSE(cpuinfo_has_arm_vfpv2());
398 }
399 
TEST(ISA,vfpv3)400 TEST(ISA, vfpv3) {
401 	ASSERT_TRUE(cpuinfo_has_arm_vfpv3());
402 }
403 
TEST(ISA,vfpv3_d32)404 TEST(ISA, vfpv3_d32) {
405 	ASSERT_TRUE(cpuinfo_has_arm_vfpv3_d32());
406 }
407 
TEST(ISA,vfpv3_fp16)408 TEST(ISA, vfpv3_fp16) {
409 	ASSERT_TRUE(cpuinfo_has_arm_vfpv3_fp16());
410 }
411 
TEST(ISA,vfpv3_fp16_d32)412 TEST(ISA, vfpv3_fp16_d32) {
413 	ASSERT_TRUE(cpuinfo_has_arm_vfpv3_fp16_d32());
414 }
415 
TEST(ISA,vfpv4)416 TEST(ISA, vfpv4) {
417 	ASSERT_TRUE(cpuinfo_has_arm_vfpv4());
418 }
419 
TEST(ISA,vfpv4_d32)420 TEST(ISA, vfpv4_d32) {
421 	ASSERT_TRUE(cpuinfo_has_arm_vfpv4_d32());
422 }
423 
TEST(ISA,wmmx)424 TEST(ISA, wmmx) {
425 	ASSERT_FALSE(cpuinfo_has_arm_wmmx());
426 }
427 
TEST(ISA,wmmx2)428 TEST(ISA, wmmx2) {
429 	ASSERT_FALSE(cpuinfo_has_arm_wmmx2());
430 }
431 
TEST(ISA,neon)432 TEST(ISA, neon) {
433 	ASSERT_TRUE(cpuinfo_has_arm_neon());
434 }
435 
TEST(ISA,neon_fp16)436 TEST(ISA, neon_fp16) {
437 	ASSERT_TRUE(cpuinfo_has_arm_neon_fp16());
438 }
439 
TEST(ISA,neon_fma)440 TEST(ISA, neon_fma) {
441 	ASSERT_TRUE(cpuinfo_has_arm_neon_fma());
442 }
443 
TEST(ISA,atomics)444 TEST(ISA, atomics) {
445 	ASSERT_FALSE(cpuinfo_has_arm_atomics());
446 }
447 
TEST(ISA,neon_rdm)448 TEST(ISA, neon_rdm) {
449 	ASSERT_FALSE(cpuinfo_has_arm_neon_rdm());
450 }
451 
TEST(ISA,fp16_arith)452 TEST(ISA, fp16_arith) {
453 	ASSERT_FALSE(cpuinfo_has_arm_fp16_arith());
454 }
455 
TEST(ISA,neon_fp16_arith)456 TEST(ISA, neon_fp16_arith) {
457 	ASSERT_FALSE(cpuinfo_has_arm_neon_fp16_arith());
458 }
459 
TEST(ISA,neon_dot)460 TEST(ISA, neon_dot) {
461 	ASSERT_FALSE(cpuinfo_has_arm_neon_dot());
462 }
463 
TEST(ISA,jscvt)464 TEST(ISA, jscvt) {
465 	ASSERT_FALSE(cpuinfo_has_arm_jscvt());
466 }
467 
TEST(ISA,fcma)468 TEST(ISA, fcma) {
469 	ASSERT_FALSE(cpuinfo_has_arm_fcma());
470 }
471 
TEST(ISA,aes)472 TEST(ISA, aes) {
473 	ASSERT_TRUE(cpuinfo_has_arm_aes());
474 }
475 
TEST(ISA,sha1)476 TEST(ISA, sha1) {
477 	ASSERT_TRUE(cpuinfo_has_arm_sha1());
478 }
479 
TEST(ISA,sha2)480 TEST(ISA, sha2) {
481 	ASSERT_TRUE(cpuinfo_has_arm_sha2());
482 }
483 
TEST(ISA,pmull)484 TEST(ISA, pmull) {
485 	ASSERT_TRUE(cpuinfo_has_arm_pmull());
486 }
487 
TEST(ISA,crc32)488 TEST(ISA, crc32) {
489 	ASSERT_TRUE(cpuinfo_has_arm_crc32());
490 }
491 
TEST(L1I,count)492 TEST(L1I, count) {
493 	ASSERT_EQ(4, cpuinfo_get_l1i_caches_count());
494 }
495 
TEST(L1I,non_null)496 TEST(L1I, non_null) {
497 	ASSERT_TRUE(cpuinfo_get_l1i_caches());
498 }
499 
TEST(L1I,size)500 TEST(L1I, size) {
501 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
502 		ASSERT_EQ(32 * 1024, cpuinfo_get_l1i_cache(i)->size);
503 	}
504 }
505 
TEST(L1I,associativity)506 TEST(L1I, associativity) {
507 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
508 		ASSERT_EQ(4, cpuinfo_get_l1i_cache(i)->associativity);
509 	}
510 }
511 
TEST(L1I,sets)512 TEST(L1I, sets) {
513 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
514 		ASSERT_EQ(
515 			cpuinfo_get_l1i_cache(i)->size,
516 			cpuinfo_get_l1i_cache(i)->sets * cpuinfo_get_l1i_cache(i)->line_size *
517 				cpuinfo_get_l1i_cache(i)->partitions * cpuinfo_get_l1i_cache(i)->associativity);
518 	}
519 }
520 
TEST(L1I,partitions)521 TEST(L1I, partitions) {
522 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
523 		ASSERT_EQ(1, cpuinfo_get_l1i_cache(i)->partitions);
524 	}
525 }
526 
TEST(L1I,line_size)527 TEST(L1I, line_size) {
528 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
529 		ASSERT_EQ(64, cpuinfo_get_l1i_cache(i)->line_size);
530 	}
531 }
532 
TEST(L1I,flags)533 TEST(L1I, flags) {
534 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
535 		ASSERT_EQ(0, cpuinfo_get_l1i_cache(i)->flags);
536 	}
537 }
538 
TEST(L1I,processors)539 TEST(L1I, processors) {
540 	for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
541 		ASSERT_EQ(i, cpuinfo_get_l1i_cache(i)->processor_start);
542 		ASSERT_EQ(1, cpuinfo_get_l1i_cache(i)->processor_count);
543 	}
544 }
545 
TEST(L1D,count)546 TEST(L1D, count) {
547 	ASSERT_EQ(4, cpuinfo_get_l1d_caches_count());
548 }
549 
TEST(L1D,non_null)550 TEST(L1D, non_null) {
551 	ASSERT_TRUE(cpuinfo_get_l1d_caches());
552 }
553 
TEST(L1D,size)554 TEST(L1D, size) {
555 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
556 		ASSERT_EQ(24 * 1024, cpuinfo_get_l1d_cache(i)->size);
557 	}
558 }
559 
TEST(L1D,associativity)560 TEST(L1D, associativity) {
561 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
562 		ASSERT_EQ(3, cpuinfo_get_l1d_cache(i)->associativity);
563 	}
564 }
565 
TEST(L1D,sets)566 TEST(L1D, sets) {
567 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
568 		ASSERT_EQ(
569 			cpuinfo_get_l1d_cache(i)->size,
570 			cpuinfo_get_l1d_cache(i)->sets * cpuinfo_get_l1d_cache(i)->line_size *
571 				cpuinfo_get_l1d_cache(i)->partitions * cpuinfo_get_l1d_cache(i)->associativity);
572 	}
573 }
574 
TEST(L1D,partitions)575 TEST(L1D, partitions) {
576 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
577 		ASSERT_EQ(1, cpuinfo_get_l1d_cache(i)->partitions);
578 	}
579 }
580 
TEST(L1D,line_size)581 TEST(L1D, line_size) {
582 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
583 		ASSERT_EQ(64, cpuinfo_get_l1d_cache(i)->line_size);
584 	}
585 }
586 
TEST(L1D,flags)587 TEST(L1D, flags) {
588 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
589 		ASSERT_EQ(0, cpuinfo_get_l1d_cache(i)->flags);
590 	}
591 }
592 
TEST(L1D,processors)593 TEST(L1D, processors) {
594 	for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
595 		ASSERT_EQ(i, cpuinfo_get_l1d_cache(i)->processor_start);
596 		ASSERT_EQ(1, cpuinfo_get_l1d_cache(i)->processor_count);
597 	}
598 }
599 
TEST(L2,count)600 TEST(L2, count) {
601 	ASSERT_EQ(2, cpuinfo_get_l2_caches_count());
602 }
603 
TEST(L2,non_null)604 TEST(L2, non_null) {
605 	ASSERT_TRUE(cpuinfo_get_l2_caches());
606 }
607 
TEST(L2,size)608 TEST(L2, size) {
609 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
610 		switch (i) {
611 			case 0:
612 				ASSERT_EQ(1 * 1024 * 1024, cpuinfo_get_l2_cache(i)->size);
613 				break;
614 			case 1:
615 				ASSERT_EQ(512 * 1024, cpuinfo_get_l2_cache(i)->size);
616 				break;
617 		}
618 	}
619 }
620 
TEST(L2,associativity)621 TEST(L2, associativity) {
622 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
623 		ASSERT_EQ(8, cpuinfo_get_l2_cache(i)->associativity);
624 	}
625 }
626 
TEST(L2,sets)627 TEST(L2, sets) {
628 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
629 		ASSERT_EQ(
630 			cpuinfo_get_l2_cache(i)->size,
631 			cpuinfo_get_l2_cache(i)->sets * cpuinfo_get_l2_cache(i)->line_size *
632 				cpuinfo_get_l2_cache(i)->partitions * cpuinfo_get_l2_cache(i)->associativity);
633 	}
634 }
635 
TEST(L2,partitions)636 TEST(L2, partitions) {
637 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
638 		ASSERT_EQ(1, cpuinfo_get_l2_cache(i)->partitions);
639 	}
640 }
641 
TEST(L2,line_size)642 TEST(L2, line_size) {
643 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
644 		ASSERT_EQ(128, cpuinfo_get_l2_cache(i)->line_size);
645 	}
646 }
647 
TEST(L2,flags)648 TEST(L2, flags) {
649 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
650 		ASSERT_EQ(0, cpuinfo_get_l2_cache(i)->flags);
651 	}
652 }
653 
TEST(L2,processors)654 TEST(L2, processors) {
655 	for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
656 		switch (i) {
657 			case 0:
658 				ASSERT_EQ(0, cpuinfo_get_l2_cache(i)->processor_start);
659 				ASSERT_EQ(2, cpuinfo_get_l2_cache(i)->processor_count);
660 				break;
661 			case 1:
662 				ASSERT_EQ(2, cpuinfo_get_l2_cache(i)->processor_start);
663 				ASSERT_EQ(2, cpuinfo_get_l2_cache(i)->processor_count);
664 				break;
665 		}
666 	}
667 }
668 
TEST(L3,none)669 TEST(L3, none) {
670 	ASSERT_EQ(0, cpuinfo_get_l3_caches_count());
671 	ASSERT_FALSE(cpuinfo_get_l3_caches());
672 }
673 
TEST(L4,none)674 TEST(L4, none) {
675 	ASSERT_EQ(0, cpuinfo_get_l4_caches_count());
676 	ASSERT_FALSE(cpuinfo_get_l4_caches());
677 }
678 
679 #include <pixel-xl.h>
680 
main(int argc,char * argv[])681 int main(int argc, char* argv[]) {
682 #if CPUINFO_ARCH_ARM
683 	cpuinfo_set_hwcap(UINT32_C(0x0037B0D6));
684 	cpuinfo_set_hwcap2(UINT32_C(0x0000001F));
685 #elif CPUINFO_ARCH_ARM64
686 	cpuinfo_set_hwcap(UINT32_C(0x000000FF));
687 #endif
688 	cpuinfo_mock_filesystem(filesystem);
689 #ifdef __ANDROID__
690 	cpuinfo_mock_android_properties(properties);
691 #endif
692 	cpuinfo_initialize();
693 	::testing::InitGoogleTest(&argc, argv);
694 	return RUN_ALL_TESTS();
695 }