| 15 | static const char* FileName_("./mappped_file"); |
| 16 | |
| 17 | void BasicTest(TMemoryMapCommon::EOpenMode mode) { |
| 18 | char data[] = "abcdefgh"; |
| 19 | |
| 20 | TFile file(FileName_, CreateAlways | WrOnly); |
| 21 | file.Write(static_cast<void*>(data), sizeof(data)); |
| 22 | file.Close(); |
| 23 | |
| 24 | { |
| 25 | TFileMap mappedFile(FileName_, mode); |
| 26 | mappedFile.Map(0, mappedFile.Length()); |
| 27 | UNIT_ASSERT(mappedFile.MappedSize() == sizeof(data) && mappedFile.Length() == sizeof(data)); |
| 28 | UNIT_ASSERT(mappedFile.IsOpen()); |
| 29 | for (size_t i = 0; i < sizeof(data); ++i) { |
| 30 | UNIT_ASSERT(static_cast<char*>(mappedFile.Ptr())[i] == data[i]); |
| 31 | static_cast<char*>(mappedFile.Ptr())[i] = data[i] + 1; |
| 32 | } |
| 33 | mappedFile.Flush(); |
| 34 | |
| 35 | TFileMap::TMapResult mapResult = mappedFile.Map(2, 2); |
| 36 | UNIT_ASSERT(mapResult.MappedSize() == 2); |
| 37 | UNIT_ASSERT(mapResult.MappedData() == mappedFile.Ptr()); |
| 38 | UNIT_ASSERT(mappedFile.MappedSize() == 2); |
| 39 | UNIT_ASSERT(static_cast<char*>(mappedFile.Ptr())[0] == 'd' && static_cast<char*>(mappedFile.Ptr())[1] == 'e'); |
| 40 | |
| 41 | mappedFile.Unmap(); |
| 42 | UNIT_ASSERT(mappedFile.MappedSize() == 0); |
| 43 | |
| 44 | FILE* f = fopen(FileName_, "rb"); |
| 45 | TFileMap mappedFile2(f); |
| 46 | mappedFile2.Map(0, mappedFile2.Length()); |
| 47 | UNIT_ASSERT(mappedFile2.MappedSize() == sizeof(data)); |
| 48 | UNIT_ASSERT(static_cast<char*>(mappedFile2.Ptr())[0] == data[0] + 1); |
| 49 | fclose(f); |
| 50 | } |
| 51 | NFs::Remove(FileName_); |
| 52 | } |
| 53 | |
| 54 | Y_UNIT_TEST(TestFileMap) { |
| 55 | BasicTest(TMemoryMapCommon::oRdWr); |
no test coverage detected