// Copyright 2024 Google LLC // // This source code is licensed under the BSD-style license found in the // LICENSE file in the root directory of this source tree. #include #include #include #include #include #include "xnnpack.h" TEST(BuildIdentifierTest, SizeIsCorrect) { // The current implmentation uses a SHA256 sum, so we expect the size of the // identifier to be 32 bytes long. EXPECT_EQ(xnn_experimental_get_build_identifier_size(), 32); } TEST(BuildIdentifierTest, ReadingIdentifierDoesNotTriggerAsan) { size_t value = 0; const void* id = xnn_experimental_get_build_identifier_data(); for(size_t i = 0; i < xnn_experimental_get_build_identifier_size(); ++i) { value += reinterpret_cast(id)[i]; } EXPECT_GT(value, 0); } TEST(BuildIdentifierTest, CheckSucceedsForIdentity) { EXPECT_TRUE(xnn_experimental_check_build_identifier(xnn_experimental_get_build_identifier_data(), xnn_experimental_get_build_identifier_size())); } TEST(BuildIdentifierTest, CheckFailsWithDifferentDataSize) { EXPECT_FALSE(xnn_experimental_check_build_identifier(nullptr, xnn_experimental_get_build_identifier_size() - 1)); EXPECT_FALSE(xnn_experimental_check_build_identifier(nullptr, xnn_experimental_get_build_identifier_size() + 1)); } TEST(BuildIdentifierTest, CheckFailsWithDifferentData) { std::vector wrong_data(xnn_experimental_get_build_identifier_size()); for(size_t i = 0; i < xnn_experimental_get_build_identifier_size(); ++i) { std::copy_n(reinterpret_cast(xnn_experimental_get_build_identifier_data()), xnn_experimental_get_build_identifier_size(), wrong_data.begin()); ++wrong_data[i]; EXPECT_FALSE(xnn_experimental_check_build_identifier(wrong_data.data(), xnn_experimental_get_build_identifier_size())) << "byte " << i; } }