//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/CAS/BuiltinObjectHasher.h" #include "llvm/Support/BLAKE3.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Testing/Support/Error.h" #include "gtest/gtest.h" using namespace llvm; using namespace llvm::cas; using HasherT = BLAKE3; using HashType = BuiltinObjectHasher::HashT; TEST(BuiltinObjectHasherTest, Basic) { unittest::TempFile TmpFile("somefile.o", /*Suffix=*/"", /*Contents=*/"", /*Unique=*/true); { std::error_code EC; raw_fd_stream Out(TmpFile.path(), EC); ASSERT_FALSE(EC); SmallVector Data; for (unsigned i = 1; i != 201; ++i) { Data.push_back(i); } for (unsigned i = 0; i != 1000; ++i) { Out.write(Data.data(), Data.size()); } } ErrorOr> MB = MemoryBuffer::getFile(TmpFile.path()); ASSERT_TRUE(!!MB); ASSERT_NE(*MB, nullptr); HashType Hash1 = BuiltinObjectHasher::hashObject({}, (*MB)->getBuffer()); std::optional Hash2; ASSERT_THAT_ERROR( BuiltinObjectHasher::hashFile(TmpFile.path()).moveInto(Hash2), Succeeded()); EXPECT_EQ(Hash1, *Hash2); }