//===----------------------------------------------------------------------===// // // 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 "OnDiskCommonUtils.h" #include "llvm/Support/Alignment.h" #include "llvm/Support/Process.h" using namespace llvm; // Create a file with small size and and controlling the initial byte so // caller can create different contents. std::unique_ptr unittest::cas::createSmallFile(char initChar) { auto TmpFile = std::make_unique( "smallfile.o", /*Suffix=*/"", /*Contents=*/"", /*Unique=*/true); StringRef Path = TmpFile->path(); std::error_code EC; raw_fd_stream Out(Path, EC); EXPECT_FALSE(EC); SmallString<200> Data; Data += initChar; for (unsigned i = 1; i != 200; ++i) { Data += i; } Out.write(Data.data(), Data.size()); return TmpFile; } std::unique_ptr unittest::cas::createLargeFile(char initChar) { auto TmpFile = std::make_unique( "largefile.o", /*Suffix=*/"", /*Contents=*/"", /*Unique=*/true); StringRef Path = TmpFile->path(); std::error_code EC; raw_fd_stream Out(Path, EC); EXPECT_FALSE(EC); SmallString<200> Data; Data += initChar; for (unsigned i = 1; i != 200; ++i) { Data += i; } for (unsigned i = 0; i != 1000; ++i) { Out.write(Data.data(), Data.size()); } return TmpFile; } std::unique_ptr unittest::cas::createLargePageAlignedFile(char initChar) { auto TmpFile = std::make_unique( "largepagealignedfile.o", /*Suffix=*/"", /*Contents=*/"", /*Unique=*/true); StringRef Path = TmpFile->path(); std::error_code EC; raw_fd_stream Out(Path, EC); EXPECT_FALSE(EC); SmallString<256> Data; Data += initChar; for (unsigned i = 1; i != sys::Process::getPageSizeEstimate(); ++i) { Data += char(i); } for (unsigned i = 0; i != 64; ++i) { Out.write(Data.data(), Data.size()); } Out.close(); uint64_t FileSize; EC = sys::fs::file_size(Path, FileSize); EXPECT_FALSE(EC); assert(isAligned(Align(sys::Process::getPageSizeEstimate()), FileSize)); return TmpFile; }