#include <gtest/gtest.h>

#include <cpuinfo.h>


TEST(CURRENT_PROCESSOR, not_null) {
	ASSERT_TRUE(cpuinfo_get_current_processor());
}

TEST(CURRENT_PROCESSOR, within_bounds) {
	const struct cpuinfo_processor* current_processor = cpuinfo_get_current_processor();
	const struct cpuinfo_processor* processors_begin = cpuinfo_get_processors();
	const struct cpuinfo_processor* processors_end = processors_begin + cpuinfo_get_processors_count();
	ASSERT_GE(current_processor, processors_begin);
	ASSERT_LT(current_processor, processors_end);
}

TEST(CURRENT_CORE, not_null) {
	ASSERT_TRUE(cpuinfo_get_current_core());
}

TEST(CURRENT_CORE, within_bounds) {
	const struct cpuinfo_core* current_core = cpuinfo_get_current_core();
	const struct cpuinfo_core* cores_begin = cpuinfo_get_cores();
	const struct cpuinfo_core* cores_end = cores_begin + cpuinfo_get_cores_count();
	ASSERT_GE(current_core, cores_begin);
	ASSERT_LT(current_core, cores_end);
}

int main(int argc, char* argv[]) {
	cpuinfo_initialize();
	::testing::InitGoogleTest(&argc, argv);
	return RUN_ALL_TESTS();
}
