5 #include "sw/device/silicon_creator/lib/error.h"
12 #include "gtest/gtest.h"
14 #include "sw/device/silicon_creator/lib/error_unittest_util.h"
16 namespace error_unittest {
19 constexpr
int kMinimumHammingDistance = 6;
21 rom_error_t ReturnIfError(rom_error_t value) {
22 RETURN_IF_ERROR(value);
26 return static_cast<rom_error_t
>(0);
29 int HammingDistance(uint32_t a, uint32_t b) {
35 TEST(ErrorsTest, NoDuplicateValues) {
36 const auto &errors = GetErrorMap();
38 for (
auto a = errors.begin(); a != errors.end(); ++a) {
39 for (
auto b = a; b != errors.end(); ++b) {
43 EXPECT_NE(a->second, b->second)
44 <<
"Error codes '" << a->first <<
"' and '" << b->first
45 <<
"' have the same value.";
51 TEST(ErrorsTest, CheckReturnIfError) {
52 EXPECT_EQ(kErrorUnknown, ReturnIfError(kErrorUnknown));
54 rom_error_t ok = ReturnIfError(kErrorOk);
55 EXPECT_EQ(0,
static_cast<int>(ok));
58 TEST(ErrorsTest, CheckHammingDistanceToOk) {
59 const auto &errors = GetErrorMap();
61 int min_distance = INT_MAX;
64 for (
const auto &a : errors) {
65 if (a.second == kErrorOk) {
66 distance = HammingDistance(a.second, 0);
67 std::cout <<
"Hamming distance between '" << a.first
68 <<
"' and zero: " << distance << std::endl;
70 distance = HammingDistance(a.second, kErrorOk);
71 std::cout <<
"Hamming distance between '" << a.first
72 <<
"' and kErrorOk: " << distance << std::endl;
74 EXPECT_GE(distance, kMinimumHammingDistance);
75 min_distance = std::min(min_distance, distance);
76 max_distance = std::max(max_distance, distance);
78 std::cout <<
"Minimum hamming distance observed: " << min_distance
80 std::cout <<
"Maximum hamming distance observed: " << max_distance