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 }