blob: b8701da8b320ae865245fe909a26ec25de414909 [file] [log] [blame]
#include <gtest/gtest.h>
#include <cpuinfo.h>
TEST(PROCESSORS_COUNT, non_zero) {
ASSERT_NE(0, cpuinfo_get_processors_count());
}
TEST(PROCESSORS, non_null) {
ASSERT_TRUE(cpuinfo_get_processors());
}
TEST(CORES_COUNT, non_zero) {
ASSERT_NE(0, cpuinfo_get_cores_count());
}
TEST(CORES, non_null) {
ASSERT_TRUE(cpuinfo_get_cores());
}
TEST(CORES, known_vendor) {
for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
ASSERT_NE(cpuinfo_vendor_unknown, cpuinfo_get_core(i)->vendor);
}
}
TEST(CORES, known_uarch) {
for (uint32_t i = 0; i < cpuinfo_get_cores_count(); i++) {
ASSERT_NE(cpuinfo_uarch_unknown, cpuinfo_get_core(i)->uarch);
}
}
TEST(L1I, non_zero_count) {
ASSERT_NE(0, cpuinfo_get_l1i_caches_count());
}
TEST(L1I, valid_count) {
ASSERT_LE(cpuinfo_get_l1i_caches_count(), cpuinfo_get_processors_count());
}
TEST(L1I, non_null) {
ASSERT_TRUE(cpuinfo_get_l1i_caches());
}
TEST(L1I, non_zero_size) {
for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l1i_cache(i)->size);
}
}
TEST(L1I, valid_size) {
for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
ASSERT_EQ(cpuinfo_get_l1i_cache(i)->size,
cpuinfo_get_l1i_cache(i)->associativity * cpuinfo_get_l1i_cache(i)->sets * cpuinfo_get_l1i_cache(i)->partitions * cpuinfo_get_l1i_cache(i)->line_size);
}
}
TEST(L1I, non_zero_associativity) {
for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l1i_cache(i)->associativity);
}
}
TEST(L1I, non_zero_partitions) {
for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l1i_cache(i)->partitions);
}
}
TEST(L1I, non_zero_line_size) {
for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l1i_cache(i)->line_size);
}
}
TEST(L1I, power_of_2_line_size) {
for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
ASSERT_EQ(0, cpuinfo_get_l1i_cache(i)->line_size & (cpuinfo_get_l1i_cache(i)->line_size - 1));
}
}
TEST(L1I, valid_line_size) {
for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
ASSERT_GE(cpuinfo_get_l1i_cache(i)->line_size, 16);
ASSERT_LE(cpuinfo_get_l1i_cache(i)->line_size, 128);
}
}
TEST(L1I, valid_flags) {
const uint32_t valid_flags = CPUINFO_CACHE_UNIFIED | CPUINFO_CACHE_INCLUSIVE | CPUINFO_CACHE_COMPLEX_INDEXING;
for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
ASSERT_EQ(0, cpuinfo_get_l1i_cache(i)->flags & ~valid_flags);
}
}
TEST(L1I, non_inclusive) {
for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
ASSERT_NE(CPUINFO_CACHE_INCLUSIVE, cpuinfo_get_l1i_cache(i)->flags & CPUINFO_CACHE_INCLUSIVE);
}
}
TEST(L1I, non_zero_processors) {
for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l1i_cache(i)->processor_count);
}
}
TEST(L1I, valid_processors) {
for (uint32_t i = 0; i < cpuinfo_get_l1i_caches_count(); i++) {
ASSERT_LT(cpuinfo_get_l1i_cache(i)->processor_start, cpuinfo_get_processors_count());
ASSERT_LE(cpuinfo_get_l1i_cache(i)->processor_start + cpuinfo_get_l1i_cache(i)->processor_count, cpuinfo_get_processors_count());
}
}
TEST(L1D, non_zero_count) {
ASSERT_NE(0, cpuinfo_get_l1d_caches_count());
}
TEST(L1D, valid_count) {
ASSERT_LE(cpuinfo_get_l1d_caches_count(), cpuinfo_get_processors_count());
}
TEST(L1D, non_null) {
ASSERT_TRUE(cpuinfo_get_l1d_caches());
}
TEST(L1D, non_zero_size) {
for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l1d_cache(i)->size);
}
}
TEST(L1D, valid_size) {
for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
ASSERT_EQ(cpuinfo_get_l1d_cache(i)->size,
cpuinfo_get_l1d_cache(i)->associativity * cpuinfo_get_l1d_cache(i)->sets * cpuinfo_get_l1d_cache(i)->partitions * cpuinfo_get_l1d_cache(i)->line_size);
}
}
TEST(L1D, non_zero_associativity) {
for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l1d_cache(i)->associativity);
}
}
TEST(L1D, non_zero_partitions) {
for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l1d_cache(i)->partitions);
}
}
TEST(L1D, non_zero_line_size) {
for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l1d_cache(i)->line_size);
}
}
TEST(L1D, power_of_2_line_size) {
for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
ASSERT_EQ(0, cpuinfo_get_l1d_cache(i)->line_size & (cpuinfo_get_l1d_cache(i)->line_size - 1));
}
}
TEST(L1D, valid_line_size) {
for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
ASSERT_GE(cpuinfo_get_l1d_cache(i)->line_size, 16);
ASSERT_LE(cpuinfo_get_l1d_cache(i)->line_size, 128);
}
}
TEST(L1D, valid_flags) {
const uint32_t valid_flags = CPUINFO_CACHE_UNIFIED | CPUINFO_CACHE_INCLUSIVE | CPUINFO_CACHE_COMPLEX_INDEXING;
for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
ASSERT_EQ(0, cpuinfo_get_l1d_cache(i)->flags & ~valid_flags);
}
}
TEST(L1D, non_inclusive) {
for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
ASSERT_NE(CPUINFO_CACHE_INCLUSIVE, cpuinfo_get_l1d_cache(i)->flags & CPUINFO_CACHE_INCLUSIVE);
}
}
TEST(L1D, non_zero_processors) {
for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l1d_cache(i)->processor_count);
}
}
TEST(L1D, valid_processors) {
for (uint32_t i = 0; i < cpuinfo_get_l1d_caches_count(); i++) {
ASSERT_LT(cpuinfo_get_l1d_cache(i)->processor_start, cpuinfo_get_processors_count());
ASSERT_LE(cpuinfo_get_l1d_cache(i)->processor_start + cpuinfo_get_l1d_cache(i)->processor_count, cpuinfo_get_processors_count());
}
}
TEST(L2, valid_count) {
ASSERT_LE(cpuinfo_get_l2_caches_count(), cpuinfo_get_processors_count());
}
TEST(L2, non_null) {
if (cpuinfo_get_l2_caches_count() != 0) {
ASSERT_TRUE(cpuinfo_get_l2_caches());
}
}
TEST(L2, non_zero_size) {
for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l2_cache(i)->size);
}
}
TEST(L2, valid_size) {
for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
ASSERT_EQ(cpuinfo_get_l2_cache(i)->size,
cpuinfo_get_l2_cache(i)->associativity * cpuinfo_get_l2_cache(i)->sets * cpuinfo_get_l2_cache(i)->partitions * cpuinfo_get_l2_cache(i)->line_size);
}
}
TEST(L2, non_zero_associativity) {
for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l2_cache(i)->associativity);
}
}
TEST(L2, non_zero_partitions) {
for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l2_cache(i)->partitions);
}
}
TEST(L2, non_zero_line_size) {
for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l2_cache(i)->line_size);
}
}
TEST(L2, power_of_2_line_size) {
for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
ASSERT_EQ(0, cpuinfo_get_l2_cache(i)->line_size & (cpuinfo_get_l2_cache(i)->line_size - 1));
}
}
TEST(L2, valid_line_size) {
for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
ASSERT_GE(cpuinfo_get_l2_cache(i)->line_size, 16);
ASSERT_LE(cpuinfo_get_l2_cache(i)->line_size, 128);
}
}
TEST(L2, valid_flags) {
const uint32_t valid_flags = CPUINFO_CACHE_UNIFIED | CPUINFO_CACHE_INCLUSIVE | CPUINFO_CACHE_COMPLEX_INDEXING;
for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
ASSERT_EQ(0, cpuinfo_get_l2_cache(i)->flags & ~valid_flags);
}
}
TEST(L2, non_zero_processors) {
for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
ASSERT_NE(0, cpuinfo_get_l2_cache(i)->processor_count);
}
}
TEST(L2, valid_processors) {
for (uint32_t i = 0; i < cpuinfo_get_l2_caches_count(); i++) {
ASSERT_LT(cpuinfo_get_l2_cache(i)->processor_start, cpuinfo_get_processors_count());
ASSERT_LE(cpuinfo_get_l2_cache(i)->processor_start + cpuinfo_get_l2_cache(i)->processor_count, cpuinfo_get_processors_count());
}
}
TEST(L3, valid_count) {
ASSERT_LE(cpuinfo_get_l3_caches_count(), cpuinfo_get_processors_count());
}
TEST(L3, non_null) {
if (cpuinfo_get_l3_caches_count() != 0) {
ASSERT_TRUE(cpuinfo_get_l3_caches());
}
}
TEST(L3, non_zero_size) {
for (uint32_t k = 0; k < cpuinfo_get_l3_caches_count(); k++) {
ASSERT_NE(0, cpuinfo_get_l3_caches()[k].size);
}
}
TEST(L3, valid_size) {
for (uint32_t k = 0; k < cpuinfo_get_l3_caches_count(); k++) {
ASSERT_EQ(cpuinfo_get_l3_caches()[k].size,
cpuinfo_get_l3_caches()[k].associativity * cpuinfo_get_l3_caches()[k].sets * cpuinfo_get_l3_caches()[k].partitions * cpuinfo_get_l3_caches()[k].line_size);
}
}
TEST(L3, non_zero_associativity) {
for (uint32_t k = 0; k < cpuinfo_get_l3_caches_count(); k++) {
ASSERT_NE(0, cpuinfo_get_l3_caches()[k].associativity);
}
}
TEST(L3, non_zero_partitions) {
for (uint32_t k = 0; k < cpuinfo_get_l3_caches_count(); k++) {
ASSERT_NE(0, cpuinfo_get_l3_caches()[k].partitions);
}
}
TEST(L3, non_zero_line_size) {
for (uint32_t k = 0; k < cpuinfo_get_l3_caches_count(); k++) {
ASSERT_NE(0, cpuinfo_get_l3_caches()[k].line_size);
}
}
TEST(L3, power_of_2_line_size) {
for (uint32_t k = 0; k < cpuinfo_get_l3_caches_count(); k++) {
ASSERT_EQ(0, cpuinfo_get_l3_caches()[k].line_size & (cpuinfo_get_l3_caches()[k].line_size - 1));
}
}
TEST(L3, valid_line_size) {
for (uint32_t k = 0; k < cpuinfo_get_l3_caches_count(); k++) {
ASSERT_GE(cpuinfo_get_l3_caches()[k].line_size, 16);
ASSERT_LE(cpuinfo_get_l3_caches()[k].line_size, 128);
}
}
TEST(L3, valid_flags) {
const uint32_t valid_flags = CPUINFO_CACHE_UNIFIED | CPUINFO_CACHE_INCLUSIVE | CPUINFO_CACHE_COMPLEX_INDEXING;
for (uint32_t k = 0; k < cpuinfo_get_l3_caches_count(); k++) {
ASSERT_EQ(0, cpuinfo_get_l3_caches()[k].flags & ~valid_flags);
}
}
TEST(L3, non_zero_processors) {
for (uint32_t k = 0; k < cpuinfo_get_l3_caches_count(); k++) {
ASSERT_NE(0, cpuinfo_get_l3_caches()[k].processor_count);
}
}
TEST(L3, valid_processors) {
for (uint32_t k = 0; k < cpuinfo_get_l3_caches_count(); k++) {
ASSERT_LT(cpuinfo_get_l3_caches()[k].processor_start, cpuinfo_get_processors_count());
ASSERT_LE(cpuinfo_get_l3_caches()[k].processor_start + cpuinfo_get_l3_caches()[k].processor_count, cpuinfo_get_processors_count());
}
}
TEST(L4, valid_count) {
ASSERT_LE(cpuinfo_get_l4_caches_count(), cpuinfo_get_processors_count());
}
TEST(L4, non_null) {
if (cpuinfo_get_l4_caches_count() != 0) {
ASSERT_TRUE(cpuinfo_get_l4_caches());
}
}
TEST(L4, non_zero_size) {
for (uint32_t k = 0; k < cpuinfo_get_l4_caches_count(); k++) {
ASSERT_NE(0, cpuinfo_get_l4_caches()[k].size);
}
}
TEST(L4, valid_size) {
for (uint32_t k = 0; k < cpuinfo_get_l4_caches_count(); k++) {
ASSERT_EQ(cpuinfo_get_l4_caches()[k].size,
cpuinfo_get_l4_caches()[k].associativity * cpuinfo_get_l4_caches()[k].sets * cpuinfo_get_l4_caches()[k].partitions * cpuinfo_get_l4_caches()[k].line_size);
}
}
TEST(L4, non_zero_associativity) {
for (uint32_t k = 0; k < cpuinfo_get_l4_caches_count(); k++) {
ASSERT_NE(0, cpuinfo_get_l4_caches()[k].associativity);
}
}
TEST(L4, non_zero_partitions) {
for (uint32_t k = 0; k < cpuinfo_get_l4_caches_count(); k++) {
ASSERT_NE(0, cpuinfo_get_l4_caches()[k].partitions);
}
}
TEST(L4, non_zero_line_size) {
for (uint32_t k = 0; k < cpuinfo_get_l4_caches_count(); k++) {
ASSERT_NE(0, cpuinfo_get_l4_caches()[k].line_size);
}
}
TEST(L4, power_of_2_line_size) {
for (uint32_t k = 0; k < cpuinfo_get_l4_caches_count(); k++) {
ASSERT_EQ(0, cpuinfo_get_l4_caches()[k].line_size & (cpuinfo_get_l4_caches()[k].line_size - 1));
}
}
TEST(L4, valid_line_size) {
for (uint32_t k = 0; k < cpuinfo_get_l4_caches_count(); k++) {
ASSERT_GE(cpuinfo_get_l4_caches()[k].line_size, 16);
ASSERT_LE(cpuinfo_get_l4_caches()[k].line_size, 128);
}
}
TEST(L4, valid_flags) {
const uint32_t valid_flags = CPUINFO_CACHE_UNIFIED | CPUINFO_CACHE_INCLUSIVE | CPUINFO_CACHE_COMPLEX_INDEXING;
for (uint32_t k = 0; k < cpuinfo_get_l4_caches_count(); k++) {
ASSERT_EQ(0, cpuinfo_get_l4_caches()[k].flags & ~valid_flags);
}
}
TEST(L4, non_zero_processors) {
for (uint32_t k = 0; k < cpuinfo_get_l4_caches_count(); k++) {
ASSERT_NE(0, cpuinfo_get_l4_caches()[k].processor_count);
}
}
TEST(L4, valid_processors) {
for (uint32_t k = 0; k < cpuinfo_get_l4_caches_count(); k++) {
ASSERT_LT(cpuinfo_get_l4_caches()[k].processor_start, cpuinfo_get_processors_count());
ASSERT_LE(cpuinfo_get_l4_caches()[k].processor_start + cpuinfo_get_l4_caches()[k].processor_count, cpuinfo_get_processors_count());
}
}
int main(int argc, char* argv[]) {
cpuinfo_initialize();
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}