1*2b54f0dbSXin Li #include <gtest/gtest.h>
2*2b54f0dbSXin Li
3*2b54f0dbSXin Li #include <cpuinfo.h>
4*2b54f0dbSXin Li #include <cpuinfo-mock.h>
5*2b54f0dbSXin Li
6*2b54f0dbSXin Li
TEST(PROCESSORS,count)7*2b54f0dbSXin Li TEST(PROCESSORS, count) {
8*2b54f0dbSXin Li ASSERT_EQ(2, cpuinfo_processors_count);
9*2b54f0dbSXin Li }
10*2b54f0dbSXin Li
TEST(PROCESSORS,non_null)11*2b54f0dbSXin Li TEST(PROCESSORS, non_null) {
12*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_get_processors());
13*2b54f0dbSXin Li }
14*2b54f0dbSXin Li
TEST(PROCESSORS,vendor)15*2b54f0dbSXin Li TEST(PROCESSORS, vendor) {
16*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_processors_count; i++) {
17*2b54f0dbSXin Li ASSERT_EQ(cpuinfo_vendor_cavium, cpuinfo_get_processors()[i].vendor);
18*2b54f0dbSXin Li }
19*2b54f0dbSXin Li }
20*2b54f0dbSXin Li
TEST(PROCESSORS,uarch)21*2b54f0dbSXin Li TEST(PROCESSORS, uarch) {
22*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_processors_count; i++) {
23*2b54f0dbSXin Li ASSERT_EQ(cpuinfo_uarch_thunderx, cpuinfo_get_processors()[i].uarch);
24*2b54f0dbSXin Li }
25*2b54f0dbSXin Li }
26*2b54f0dbSXin Li
TEST(ISA,thumb)27*2b54f0dbSXin Li TEST(ISA, thumb) {
28*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.thumb);
29*2b54f0dbSXin Li }
30*2b54f0dbSXin Li
TEST(ISA,thumb2)31*2b54f0dbSXin Li TEST(ISA, thumb2) {
32*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.thumb2);
33*2b54f0dbSXin Li }
34*2b54f0dbSXin Li
TEST(ISA,thumbee)35*2b54f0dbSXin Li TEST(ISA, thumbee) {
36*2b54f0dbSXin Li ASSERT_FALSE(cpuinfo_isa.thumbee);
37*2b54f0dbSXin Li }
38*2b54f0dbSXin Li
TEST(ISA,jazelle)39*2b54f0dbSXin Li TEST(ISA, jazelle) {
40*2b54f0dbSXin Li ASSERT_FALSE(cpuinfo_isa.jazelle);
41*2b54f0dbSXin Li }
42*2b54f0dbSXin Li
TEST(ISA,armv5e)43*2b54f0dbSXin Li TEST(ISA, armv5e) {
44*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.armv5e);
45*2b54f0dbSXin Li }
46*2b54f0dbSXin Li
TEST(ISA,armv6)47*2b54f0dbSXin Li TEST(ISA, armv6) {
48*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.armv6);
49*2b54f0dbSXin Li }
50*2b54f0dbSXin Li
TEST(ISA,armv6k)51*2b54f0dbSXin Li TEST(ISA, armv6k) {
52*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.armv6k);
53*2b54f0dbSXin Li }
54*2b54f0dbSXin Li
TEST(ISA,armv7)55*2b54f0dbSXin Li TEST(ISA, armv7) {
56*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.armv7);
57*2b54f0dbSXin Li }
58*2b54f0dbSXin Li
TEST(ISA,armv7mp)59*2b54f0dbSXin Li TEST(ISA, armv7mp) {
60*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.armv7mp);
61*2b54f0dbSXin Li }
62*2b54f0dbSXin Li
TEST(ISA,idiv)63*2b54f0dbSXin Li TEST(ISA, idiv) {
64*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.idiv);
65*2b54f0dbSXin Li }
66*2b54f0dbSXin Li
TEST(ISA,vfpv2)67*2b54f0dbSXin Li TEST(ISA, vfpv2) {
68*2b54f0dbSXin Li ASSERT_FALSE(cpuinfo_isa.vfpv2);
69*2b54f0dbSXin Li }
70*2b54f0dbSXin Li
TEST(ISA,vfpv3)71*2b54f0dbSXin Li TEST(ISA, vfpv3) {
72*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.vfpv3);
73*2b54f0dbSXin Li }
74*2b54f0dbSXin Li
TEST(ISA,d32)75*2b54f0dbSXin Li TEST(ISA, d32) {
76*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.d32);
77*2b54f0dbSXin Li }
78*2b54f0dbSXin Li
TEST(ISA,fp16)79*2b54f0dbSXin Li TEST(ISA, fp16) {
80*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.fp16);
81*2b54f0dbSXin Li }
82*2b54f0dbSXin Li
TEST(ISA,fma)83*2b54f0dbSXin Li TEST(ISA, fma) {
84*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.fma);
85*2b54f0dbSXin Li }
86*2b54f0dbSXin Li
TEST(ISA,wmmx)87*2b54f0dbSXin Li TEST(ISA, wmmx) {
88*2b54f0dbSXin Li ASSERT_FALSE(cpuinfo_isa.wmmx);
89*2b54f0dbSXin Li }
90*2b54f0dbSXin Li
TEST(ISA,wmmx2)91*2b54f0dbSXin Li TEST(ISA, wmmx2) {
92*2b54f0dbSXin Li ASSERT_FALSE(cpuinfo_isa.wmmx2);
93*2b54f0dbSXin Li }
94*2b54f0dbSXin Li
TEST(ISA,neon)95*2b54f0dbSXin Li TEST(ISA, neon) {
96*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.neon);
97*2b54f0dbSXin Li }
98*2b54f0dbSXin Li
TEST(ISA,aes)99*2b54f0dbSXin Li TEST(ISA, aes) {
100*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.aes);
101*2b54f0dbSXin Li }
102*2b54f0dbSXin Li
TEST(ISA,sha1)103*2b54f0dbSXin Li TEST(ISA, sha1) {
104*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.sha1);
105*2b54f0dbSXin Li }
106*2b54f0dbSXin Li
TEST(ISA,sha2)107*2b54f0dbSXin Li TEST(ISA, sha2) {
108*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.sha2);
109*2b54f0dbSXin Li }
110*2b54f0dbSXin Li
TEST(ISA,pmull)111*2b54f0dbSXin Li TEST(ISA, pmull) {
112*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.pmull);
113*2b54f0dbSXin Li }
114*2b54f0dbSXin Li
TEST(ISA,crc32)115*2b54f0dbSXin Li TEST(ISA, crc32) {
116*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.crc32);
117*2b54f0dbSXin Li }
118*2b54f0dbSXin Li
119*2b54f0dbSXin Li #if CPUINFO_ARCH_ARM64
TEST(ISA,atomics)120*2b54f0dbSXin Li TEST(ISA, atomics) {
121*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_isa.atomics);
122*2b54f0dbSXin Li }
123*2b54f0dbSXin Li
TEST(ISA,rdm)124*2b54f0dbSXin Li TEST(ISA, rdm) {
125*2b54f0dbSXin Li ASSERT_FALSE(cpuinfo_isa.rdm);
126*2b54f0dbSXin Li }
127*2b54f0dbSXin Li
TEST(ISA,fp16arith)128*2b54f0dbSXin Li TEST(ISA, fp16arith) {
129*2b54f0dbSXin Li ASSERT_FALSE(cpuinfo_isa.fp16arith);
130*2b54f0dbSXin Li }
131*2b54f0dbSXin Li
TEST(ISA,jscvt)132*2b54f0dbSXin Li TEST(ISA, jscvt) {
133*2b54f0dbSXin Li ASSERT_FALSE(cpuinfo_isa.jscvt);
134*2b54f0dbSXin Li }
135*2b54f0dbSXin Li
TEST(ISA,fcma)136*2b54f0dbSXin Li TEST(ISA, fcma) {
137*2b54f0dbSXin Li ASSERT_FALSE(cpuinfo_isa.fcma);
138*2b54f0dbSXin Li }
139*2b54f0dbSXin Li #endif /* CPUINFO_ARCH_ARM64 */
140*2b54f0dbSXin Li
TEST(L1I,count)141*2b54f0dbSXin Li TEST(L1I, count) {
142*2b54f0dbSXin Li ASSERT_EQ(2, cpuinfo_get_l1i_caches_count());
143*2b54f0dbSXin Li }
144*2b54f0dbSXin Li
TEST(L1I,non_null)145*2b54f0dbSXin Li TEST(L1I, non_null) {
146*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_get_l1i_caches());
147*2b54f0dbSXin Li }
148*2b54f0dbSXin Li
TEST(L1I,size)149*2b54f0dbSXin Li TEST(L1I, size) {
150*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
151*2b54f0dbSXin Li ASSERT_EQ(78 * 1024, cpuinfo_get_l1i_cache(i)->size);
152*2b54f0dbSXin Li }
153*2b54f0dbSXin Li }
154*2b54f0dbSXin Li
TEST(L1I,associativity)155*2b54f0dbSXin Li TEST(L1I, associativity) {
156*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
157*2b54f0dbSXin Li ASSERT_EQ(4, cpuinfo_get_l1i_cache(i)->associativity);
158*2b54f0dbSXin Li }
159*2b54f0dbSXin Li }
160*2b54f0dbSXin Li
TEST(L1I,sets)161*2b54f0dbSXin Li TEST(L1I, sets) {
162*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
163*2b54f0dbSXin Li ASSERT_EQ(312, cpuinfo_get_l1i_cache(i)->sets);
164*2b54f0dbSXin Li }
165*2b54f0dbSXin Li }
166*2b54f0dbSXin Li
TEST(L1I,partitions)167*2b54f0dbSXin Li TEST(L1I, partitions) {
168*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
169*2b54f0dbSXin Li ASSERT_EQ(1, cpuinfo_get_l1i_cache(i)->partitions);
170*2b54f0dbSXin Li }
171*2b54f0dbSXin Li }
172*2b54f0dbSXin Li
TEST(L1I,line_size)173*2b54f0dbSXin Li TEST(L1I, line_size) {
174*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
175*2b54f0dbSXin Li ASSERT_EQ(64, cpuinfo_get_l1i_cache(i)->line_size);
176*2b54f0dbSXin Li }
177*2b54f0dbSXin Li }
178*2b54f0dbSXin Li
TEST(L1I,flags)179*2b54f0dbSXin Li TEST(L1I, flags) {
180*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
181*2b54f0dbSXin Li ASSERT_EQ(0, cpuinfo_get_l1i_cache(i)->flags);
182*2b54f0dbSXin Li }
183*2b54f0dbSXin Li }
184*2b54f0dbSXin Li
TEST(L1I,processors)185*2b54f0dbSXin Li TEST(L1I, processors) {
186*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
187*2b54f0dbSXin Li ASSERT_EQ(i, cpuinfo_get_l1i_cache(i)->processor_start);
188*2b54f0dbSXin Li ASSERT_EQ(1, cpuinfo_get_l1i_cache(i)->processor_count);
189*2b54f0dbSXin Li }
190*2b54f0dbSXin Li }
191*2b54f0dbSXin Li
TEST(L1D,count)192*2b54f0dbSXin Li TEST(L1D, count) {
193*2b54f0dbSXin Li ASSERT_EQ(2, cpuinfo_get_l1d_caches_count());
194*2b54f0dbSXin Li }
195*2b54f0dbSXin Li
TEST(L1D,non_null)196*2b54f0dbSXin Li TEST(L1D, non_null) {
197*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_get_l1d_caches());
198*2b54f0dbSXin Li }
199*2b54f0dbSXin Li
TEST(L1D,size)200*2b54f0dbSXin Li TEST(L1D, size) {
201*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
202*2b54f0dbSXin Li ASSERT_EQ(32 * 1024, cpuinfo_get_l1d_cache(i)->size);
203*2b54f0dbSXin Li }
204*2b54f0dbSXin Li }
205*2b54f0dbSXin Li
TEST(L1D,associativity)206*2b54f0dbSXin Li TEST(L1D, associativity) {
207*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
208*2b54f0dbSXin Li ASSERT_EQ(4, cpuinfo_get_l1d_cache(i)->associativity);
209*2b54f0dbSXin Li }
210*2b54f0dbSXin Li }
211*2b54f0dbSXin Li
TEST(L1D,sets)212*2b54f0dbSXin Li TEST(L1D, sets) {
213*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
214*2b54f0dbSXin Li ASSERT_EQ(128, cpuinfo_get_l1d_cache(i)->sets);
215*2b54f0dbSXin Li }
216*2b54f0dbSXin Li }
217*2b54f0dbSXin Li
TEST(L1D,partitions)218*2b54f0dbSXin Li TEST(L1D, partitions) {
219*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
220*2b54f0dbSXin Li ASSERT_EQ(1, cpuinfo_get_l1d_cache(i)->partitions);
221*2b54f0dbSXin Li }
222*2b54f0dbSXin Li }
223*2b54f0dbSXin Li
TEST(L1D,line_size)224*2b54f0dbSXin Li TEST(L1D, line_size) {
225*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
226*2b54f0dbSXin Li ASSERT_EQ(64, cpuinfo_get_l1d_cache(i)->line_size);
227*2b54f0dbSXin Li }
228*2b54f0dbSXin Li }
229*2b54f0dbSXin Li
TEST(L1D,flags)230*2b54f0dbSXin Li TEST(L1D, flags) {
231*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
232*2b54f0dbSXin Li ASSERT_EQ(0, cpuinfo_get_l1d_cache(i)->flags);
233*2b54f0dbSXin Li }
234*2b54f0dbSXin Li }
235*2b54f0dbSXin Li
TEST(L1D,processors)236*2b54f0dbSXin Li TEST(L1D, processors) {
237*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
238*2b54f0dbSXin Li ASSERT_EQ(i, cpuinfo_get_l1d_cache(i)->processor_start);
239*2b54f0dbSXin Li ASSERT_EQ(1, cpuinfo_get_l1d_cache(i)->processor_count);
240*2b54f0dbSXin Li }
241*2b54f0dbSXin Li }
242*2b54f0dbSXin Li
TEST(L2,count)243*2b54f0dbSXin Li TEST(L2, count) {
244*2b54f0dbSXin Li ASSERT_EQ(1, cpuinfo_get_l2_caches_count());
245*2b54f0dbSXin Li }
246*2b54f0dbSXin Li
TEST(L2,non_null)247*2b54f0dbSXin Li TEST(L2, non_null) {
248*2b54f0dbSXin Li ASSERT_TRUE(cpuinfo_get_l2_caches());
249*2b54f0dbSXin Li }
250*2b54f0dbSXin Li
TEST(L2,size)251*2b54f0dbSXin Li TEST(L2, size) {
252*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
253*2b54f0dbSXin Li ASSERT_EQ(16 * 1024 * 1024, cpuinfo_get_l2_cache(i)->size);
254*2b54f0dbSXin Li }
255*2b54f0dbSXin Li }
256*2b54f0dbSXin Li
TEST(L2,associativity)257*2b54f0dbSXin Li TEST(L2, associativity) {
258*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
259*2b54f0dbSXin Li ASSERT_EQ(8, cpuinfo_get_l2_cache(i)->associativity);
260*2b54f0dbSXin Li }
261*2b54f0dbSXin Li }
262*2b54f0dbSXin Li
TEST(L2,sets)263*2b54f0dbSXin Li TEST(L2, sets) {
264*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
265*2b54f0dbSXin Li ASSERT_EQ(32768, cpuinfo_get_l2_cache(i)->sets);
266*2b54f0dbSXin Li }
267*2b54f0dbSXin Li }
268*2b54f0dbSXin Li
TEST(L2,partitions)269*2b54f0dbSXin Li TEST(L2, partitions) {
270*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
271*2b54f0dbSXin Li ASSERT_EQ(1, cpuinfo_get_l2_cache(i)->partitions);
272*2b54f0dbSXin Li }
273*2b54f0dbSXin Li }
274*2b54f0dbSXin Li
TEST(L2,line_size)275*2b54f0dbSXin Li TEST(L2, line_size) {
276*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
277*2b54f0dbSXin Li ASSERT_EQ(64, cpuinfo_get_l2_cache(i)->line_size);
278*2b54f0dbSXin Li }
279*2b54f0dbSXin Li }
280*2b54f0dbSXin Li
TEST(L2,flags)281*2b54f0dbSXin Li TEST(L2, flags) {
282*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
283*2b54f0dbSXin Li ASSERT_EQ(0, cpuinfo_get_l2_cache(i)->flags);
284*2b54f0dbSXin Li }
285*2b54f0dbSXin Li }
286*2b54f0dbSXin Li
TEST(L2,processors)287*2b54f0dbSXin Li TEST(L2, processors) {
288*2b54f0dbSXin Li for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
289*2b54f0dbSXin Li ASSERT_EQ(0, cpuinfo_get_l2_cache(i)->processor_start);
290*2b54f0dbSXin Li ASSERT_EQ(2, cpuinfo_get_l2_cache(i)->processor_count);
291*2b54f0dbSXin Li }
292*2b54f0dbSXin Li }
293*2b54f0dbSXin Li
TEST(L3,none)294*2b54f0dbSXin Li TEST(L3, none) {
295*2b54f0dbSXin Li ASSERT_EQ(0, cpuinfo_get_l3_caches_count());
296*2b54f0dbSXin Li ASSERT_FALSE(cpuinfo_get_l3_caches());
297*2b54f0dbSXin Li }
298*2b54f0dbSXin Li
TEST(L4,none)299*2b54f0dbSXin Li TEST(L4, none) {
300*2b54f0dbSXin Li ASSERT_EQ(0, cpuinfo_get_l4_caches_count());
301*2b54f0dbSXin Li ASSERT_FALSE(cpuinfo_get_l4_caches());
302*2b54f0dbSXin Li }
303*2b54f0dbSXin Li
304*2b54f0dbSXin Li #include <scaleway.h>
305*2b54f0dbSXin Li
main(int argc,char * argv[])306*2b54f0dbSXin Li int main(int argc, char* argv[]) {
307*2b54f0dbSXin Li cpuinfo_mock_filesystem(filesystem);
308*2b54f0dbSXin Li cpuinfo_initialize();
309*2b54f0dbSXin Li ::testing::InitGoogleTest(&argc, argv);
310*2b54f0dbSXin Li return RUN_ALL_TESTS();
311*2b54f0dbSXin Li }