diff --git a/src/FileSystem/FileSystem.cpp b/src/FileSystem/FileSystem.cpp index b30dcba..78accb6 100644 --- a/src/FileSystem/FileSystem.cpp +++ b/src/FileSystem/FileSystem.cpp @@ -133,9 +133,16 @@ auto FileSystem::import_file(std::istream &in_stream, std::string const &path) - auto file_writer = get_writer(path); file_writer.set_offset(0); - auto buffer = std::vector(settings_.cluster_size); - while (in_stream.read(reinterpret_cast(buffer.data()), // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast) - static_cast(settings_.cluster_size))) { + in_stream.seekg(0); + std::istreambuf_iterator iter(in_stream); + std::istreambuf_iterator end; + + while (iter != end) { + std::vector buffer; + buffer.reserve(settings_.cluster_size); + for (std::size_t i = 0; i < settings_.cluster_size && iter != end; ++iter, ++i) { + buffer.push_back(static_cast(*iter)); + } file_writer.write_next(buffer); } } diff --git a/test/assets/long_sample.txt b/test/assets/long_sample.txt new file mode 100644 index 0000000..dd3b19a --- /dev/null +++ b/test/assets/long_sample.txt @@ -0,0 +1,59 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Adipiscing vitae proin sagittis nisl rhoncus mattis rhoncus urna neque. Eu turpis egestas pretium aenean. Lectus urna duis convallis convallis tellus. Commodo quis imperdiet massa tincidunt nunc pulvinar. Id ornare arcu odio ut sem nulla pharetra diam sit. Neque sodales ut etiam sit amet nisl. Morbi enim nunc faucibus a pellentesque sit amet. Tincidunt vitae semper quis lectus nulla at volutpat diam ut. Sed pulvinar proin gravida hendrerit. Massa ultricies mi quis hendrerit dolor. Dui sapien eget mi proin. In fermentum posuere urna nec tincidunt. + +Aliquet sagittis id consectetur purus ut. Ut venenatis tellus in metus vulputate. Feugiat pretium nibh ipsum consequat nisl vel pretium. Mi in nulla posuere sollicitudin. Nec sagittis aliquam malesuada bibendum arcu vitae elementum curabitur vitae. Molestie nunc non blandit massa enim nec dui. Lobortis mattis aliquam faucibus purus in massa. Egestas erat imperdiet sed euismod nisi. Diam vel quam elementum pulvinar etiam non quam lacus suspendisse. Quis vel eros donec ac odio tempor orci. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus et. Egestas egestas fringilla phasellus faucibus scelerisque eleifend donec pretium. Eget gravida cum sociis natoque penatibus et. Volutpat maecenas volutpat blandit aliquam etiam erat velit scelerisque in. Tellus orci ac auctor augue mauris augue neque. Vivamus arcu felis bibendum ut tristique et egestas quis. Sit amet est placerat in egestas erat imperdiet sed euismod. + +Vitae congue eu consequat ac felis donec et. Nunc non blandit massa enim nec dui. Varius morbi enim nunc faucibus a pellentesque sit. Lobortis feugiat vivamus at augue eget arcu dictum varius. Et ligula ullamcorper malesuada proin libero nunc consequat interdum. Enim nunc faucibus a pellentesque sit amet. Eu non diam phasellus vestibulum lorem sed risus ultricies. Dolor sed viverra ipsum nunc aliquet bibendum enim facilisis gravida. Sociis natoque penatibus et magnis dis. Ornare quam viverra orci sagittis eu volutpat odio facilisis mauris. Aenean et tortor at risus viverra. Morbi non arcu risus quis. Pharetra diam sit amet nisl suscipit adipiscing bibendum est. Quam quisque id diam vel quam elementum pulvinar. Ultrices tincidunt arcu non sodales neque sodales ut etiam. Bibendum arcu vitae elementum curabitur. Aliquam nulla facilisi cras fermentum odio eu feugiat pretium. + +Quis ipsum suspendisse ultrices gravida dictum fusce ut. Dictum varius duis at consectetur lorem donec massa. Et odio pellentesque diam volutpat commodo sed egestas egestas fringilla. Id velit ut tortor pretium. Amet nisl purus in mollis nunc sed id semper. Sed vulputate odio ut enim. Orci nulla pellentesque dignissim enim sit amet venenatis. Purus non enim praesent elementum. Id eu nisl nunc mi. Amet luctus venenatis lectus magna fringilla urna. Cursus risus at ultrices mi tempus imperdiet nulla malesuada. Amet massa vitae tortor condimentum lacinia quis vel eros donec. Morbi tristique senectus et netus. Volutpat maecenas volutpat blandit aliquam etiam erat velit. Commodo elit at imperdiet dui accumsan sit amet nulla facilisi. Ultrices mi tempus imperdiet nulla malesuada pellentesque elit eget gravida. + +Tortor condimentum lacinia quis vel eros donec ac odio. Metus vulputate eu scelerisque felis imperdiet proin fermentum. Viverra aliquet eget sit amet tellus cras adipiscing enim eu. Euismod elementum nisi quis eleifend quam adipiscing vitae. Pulvinar elementum integer enim neque volutpat ac tincidunt. Commodo sed egestas egestas fringilla phasellus faucibus. Nam at lectus urna duis convallis convallis tellus id. Elit pellentesque habitant morbi tristique senectus. Morbi enim nunc faucibus a pellentesque sit amet. Est lorem ipsum dolor sit amet consectetur adipiscing. Facilisi nullam vehicula ipsum a arcu cursus. Vulputate eu scelerisque felis imperdiet. Ac felis donec et odio pellentesque. Lobortis scelerisque fermentum dui faucibus in. Sit amet aliquam id diam maecenas ultricies. Sagittis id consectetur purus ut. Sed ullamcorper morbi tincidunt ornare massa. Facilisis volutpat est velit egestas. + +Gravida in fermentum et sollicitudin ac orci phasellus egestas tellus. Eros in cursus turpis massa tincidunt. Auctor urna nunc id cursus. Et sollicitudin ac orci phasellus egestas tellus rutrum tellus. Mi in nulla posuere sollicitudin aliquam ultrices. Eu augue ut lectus arcu. Lectus quam id leo in vitae turpis massa sed elementum. Erat nam at lectus urna duis convallis. Non arcu risus quis varius quam quisque. Sed euismod nisi porta lorem mollis aliquam ut. Netus et malesuada fames ac turpis egestas integer eget aliquet. Donec massa sapien faucibus et molestie ac feugiat sed lectus. Varius vel pharetra vel turpis. Elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Donec et odio pellentesque diam volutpat commodo sed egestas egestas. Semper quis lectus nulla at volutpat diam ut venenatis. Consectetur lorem donec massa sapien faucibus et molestie. Nullam ac tortor vitae purus. Arcu non odio euismod lacinia at. + +Tellus in metus vulputate eu scelerisque felis imperdiet proin fermentum. Enim nec dui nunc mattis. Euismod quis viverra nibh cras pulvinar mattis nunc. Sit amet luctus venenatis lectus magna fringilla. Cursus euismod quis viverra nibh cras. Tortor id aliquet lectus proin nibh. Sem fringilla ut morbi tincidunt augue interdum velit euismod. At lectus urna duis convallis convallis tellus id interdum. Sagittis orci a scelerisque purus semper eget duis. Pellentesque id nibh tortor id aliquet lectus. Tellus in hac habitasse platea dictumst vestibulum rhoncus. Amet mauris commodo quis imperdiet massa tincidunt nunc. Elit at imperdiet dui accumsan. Ac tortor dignissim convallis aenean et. Vulputate ut pharetra sit amet aliquam id. Sapien faucibus et molestie ac feugiat sed lectus vestibulum. + +Sapien eget mi proin sed libero enim sed. Augue neque gravida in fermentum et sollicitudin ac. Lacinia quis vel eros donec ac odio tempor. Sit amet purus gravida quis blandit turpis cursus in hac. Est ultricies integer quis auctor. Nisi scelerisque eu ultrices vitae auctor eu. Ut sem viverra aliquet eget sit. In nibh mauris cursus mattis. Curabitur gravida arcu ac tortor dignissim convallis aenean. Diam quam nulla porttitor massa id. + +Velit laoreet id donec ultrices. Malesuada bibendum arcu vitae elementum curabitur vitae nunc. Pharetra vel turpis nunc eget. Ultrices dui sapien eget mi proin. Integer feugiat scelerisque varius morbi. Dolor sit amet consectetur adipiscing elit pellentesque habitant morbi tristique. Magna eget est lorem ipsum. A pellentesque sit amet porttitor eget dolor. Est pellentesque elit ullamcorper dignissim cras. Velit egestas dui id ornare arcu odio ut sem nulla. Quisque egestas diam in arcu cursus euismod quis viverra nibh. Gravida quis blandit turpis cursus in hac habitasse platea dictumst. Tincidunt eget nullam non nisi est sit. Eget mauris pharetra et ultrices neque ornare aenean euismod. Felis imperdiet proin fermentum leo vel orci porta non pulvinar. Netus et malesuada fames ac. Arcu risus quis varius quam quisque id diam vel. Nibh sed pulvinar proin gravida hendrerit. Nullam vehicula ipsum a arcu cursus. In nulla posuere sollicitudin aliquam ultrices sagittis orci a. + +Pellentesque habitant morbi tristique senectus et. Enim blandit volutpat maecenas volutpat. Dui faucibus in ornare quam viverra orci sagittis. Sed viverra ipsum nunc aliquet bibendum enim facilisis gravida. Risus viverra adipiscing at in tellus. Pulvinar etiam non quam lacus suspendisse faucibus. Porttitor lacus luctus accumsan tortor posuere ac ut consequat. Risus nec feugiat in fermentum posuere urna. Eget duis at tellus at. Cursus vitae congue mauris rhoncus aenean vel elit. Quis viverra nibh cras pulvinar mattis nunc. Volutpat est velit egestas dui id. Lectus urna duis convallis convallis tellus id interdum velit laoreet. + +Velit aliquet sagittis id consectetur purus ut faucibus pulvinar. Ultricies mi eget mauris pharetra. Proin sed libero enim sed faucibus turpis. Commodo sed egestas egestas fringilla phasellus faucibus scelerisque eleifend donec. Non sodales neque sodales ut etiam sit amet nisl purus. Sed blandit libero volutpat sed cras ornare arcu dui vivamus. Nibh venenatis cras sed felis eget. Tristique et egestas quis ipsum suspendisse ultrices. Nulla aliquet enim tortor at auctor urna nunc id. Laoreet sit amet cursus sit amet dictum. Sed libero enim sed faucibus turpis in eu. Non sodales neque sodales ut etiam sit amet. Elementum sagittis vitae et leo. Eu mi bibendum neque egestas. Lorem donec massa sapien faucibus et molestie ac feugiat sed. Ullamcorper eget nulla facilisi etiam. Sed turpis tincidunt id aliquet risus feugiat in. Rhoncus mattis rhoncus urna neque. Bibendum neque egestas congue quisque egestas diam in arcu cursus. Odio ut sem nulla pharetra diam. + +Massa tempor nec feugiat nisl pretium. Turpis egestas sed tempus urna et. Laoreet suspendisse interdum consectetur libero id. Suscipit adipiscing bibendum est ultricies integer quis. Scelerisque mauris pellentesque pulvinar pellentesque habitant. Eu nisl nunc mi ipsum faucibus vitae aliquet. In hac habitasse platea dictumst quisque sagittis purus sit amet. Tortor id aliquet lectus proin nibh. Arcu non sodales neque sodales ut etiam sit. Vitae nunc sed velit dignissim sodales. Vitae nunc sed velit dignissim sodales ut eu sem. Auctor elit sed vulputate mi sit. Ante in nibh mauris cursus mattis molestie. Commodo sed egestas egestas fringilla phasellus faucibus scelerisque. Sit amet luctus venenatis lectus. Sed elementum tempus egestas sed sed risus pretium quam. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Sed sed risus pretium quam vulputate dignissim suspendisse. Proin libero nunc consequat interdum. + +Volutpat blandit aliquam etiam erat velit scelerisque in dictum non. Quis imperdiet massa tincidunt nunc pulvinar. Nunc congue nisi vitae suscipit tellus mauris a. Sed adipiscing diam donec adipiscing tristique risus nec feugiat in. Non diam phasellus vestibulum lorem sed risus. In iaculis nunc sed augue lacus viverra vitae congue eu. Aliquam malesuada bibendum arcu vitae. Tellus elementum sagittis vitae et leo. Arcu felis bibendum ut tristique et egestas. Maecenas sed enim ut sem viverra. Vitae proin sagittis nisl rhoncus mattis rhoncus urna. Tempus egestas sed sed risus pretium quam vulputate dignissim suspendisse. Lacinia at quis risus sed vulputate. Pretium quam vulputate dignissim suspendisse in est. In nibh mauris cursus mattis molestie a iaculis at erat. + +Eu sem integer vitae justo eget. Sit amet venenatis urna cursus eget nunc scelerisque viverra. Eget nunc lobortis mattis aliquam faucibus purus. Eu feugiat pretium nibh ipsum consequat. Aliquet enim tortor at auctor urna nunc id cursus. Mauris augue neque gravida in fermentum et sollicitudin ac. Facilisis volutpat est velit egestas dui. Facilisis sed odio morbi quis. Urna id volutpat lacus laoreet non curabitur gravida arcu ac. Felis eget velit aliquet sagittis id consectetur purus ut faucibus. + +Nascetur ridiculus mus mauris vitae ultricies leo integer malesuada nunc. Adipiscing commodo elit at imperdiet dui accumsan sit. Arcu vitae elementum curabitur vitae. Fusce id velit ut tortor pretium viverra suspendisse potenti. Neque ornare aenean euismod elementum nisi quis eleifend quam. Non pulvinar neque laoreet suspendisse interdum. Tincidunt augue interdum velit euismod in pellentesque massa. Molestie nunc non blandit massa enim. Aliquam ultrices sagittis orci a scelerisque purus semper eget duis. Semper quis lectus nulla at volutpat diam ut venenatis tellus. Eget velit aliquet sagittis id consectetur purus ut faucibus. Iaculis eu non diam phasellus vestibulum lorem sed risus. Arcu cursus vitae congue mauris rhoncus aenean vel elit scelerisque. + +Placerat duis ultricies lacus sed turpis tincidunt id aliquet. Fermentum leo vel orci porta non pulvinar neque laoreet. Suspendisse ultrices gravida dictum fusce ut placerat orci nulla. Eleifend mi in nulla posuere sollicitudin aliquam ultrices sagittis orci. Vel pharetra vel turpis nunc eget. Faucibus et molestie ac feugiat sed lectus. Ut tortor pretium viverra suspendisse potenti nullam ac tortor. Rutrum quisque non tellus orci. Enim sit amet venenatis urna cursus. Odio facilisis mauris sit amet massa vitae tortor. Tortor consequat id porta nibh. Vulputate ut pharetra sit amet aliquam id diam maecenas ultricies. + +Nunc sed id semper risus in hendrerit. Tellus molestie nunc non blandit massa enim. Cursus in hac habitasse platea dictumst quisque sagittis purus. Ultrices sagittis orci a scelerisque purus. Condimentum lacinia quis vel eros. Ornare aenean euismod elementum nisi quis. Sit amet nulla facilisi morbi tempus. Morbi leo urna molestie at elementum eu. Tempor orci eu lobortis elementum nibh tellus molestie nunc. Vitae sapien pellentesque habitant morbi tristique. Diam vulputate ut pharetra sit amet aliquam id diam maecenas. Donec enim diam vulputate ut pharetra sit amet aliquam. Diam volutpat commodo sed egestas egestas fringilla phasellus faucibus scelerisque. Nibh cras pulvinar mattis nunc. Dignissim sodales ut eu sem integer. Viverra justo nec ultrices dui. At in tellus integer feugiat scelerisque varius morbi. Venenatis lectus magna fringilla urna porttitor rhoncus dolor purus non. Ac feugiat sed lectus vestibulum. + +Sed viverra tellus in hac habitasse platea dictumst vestibulum. Est ultricies integer quis auctor elit sed vulputate mi. Massa id neque aliquam vestibulum morbi. Lorem mollis aliquam ut porttitor leo a diam sollicitudin. In mollis nunc sed id. Convallis aenean et tortor at risus viverra adipiscing at. Risus nec feugiat in fermentum posuere urna. Non enim praesent elementum facilisis leo vel fringilla est. Pharetra convallis posuere morbi leo urna. Faucibus pulvinar elementum integer enim neque volutpat. Neque volutpat ac tincidunt vitae. Feugiat pretium nibh ipsum consequat nisl vel pretium lectus quam. Sed velit dignissim sodales ut. Ac placerat vestibulum lectus mauris ultrices. Natoque penatibus et magnis dis parturient montes nascetur ridiculus. Scelerisque viverra mauris in aliquam sem fringilla ut morbi tincidunt. Quis varius quam quisque id diam vel quam elementum pulvinar. + +Amet justo donec enim diam vulputate ut. Purus semper eget duis at tellus at urna. Pellentesque habitant morbi tristique senectus et netus. Et molestie ac feugiat sed lectus. Rhoncus urna neque viverra justo nec ultrices. Arcu ac tortor dignissim convallis aenean et. Duis at tellus at urna condimentum. Cras ornare arcu dui vivamus arcu felis bibendum. Neque gravida in fermentum et. Aliquam sem fringilla ut morbi. Vestibulum morbi blandit cursus risus at ultrices mi tempus imperdiet. Accumsan in nisl nisi scelerisque eu ultrices vitae auctor eu. Nunc mattis enim ut tellus elementum sagittis vitae et. Interdum velit euismod in pellentesque massa. Pulvinar pellentesque habitant morbi tristique senectus et netus et malesuada. Commodo odio aenean sed adipiscing diam donec adipiscing. Nunc id cursus metus aliquam eleifend. Faucibus nisl tincidunt eget nullam non nisi. Libero volutpat sed cras ornare arcu dui vivamus. Malesuada bibendum arcu vitae elementum. + +Viverra nam libero justo laoreet sit amet cursus sit. Vel eros donec ac odio. Faucibus pulvinar elementum integer enim. Est lorem ipsum dolor sit amet consectetur adipiscing. Amet porttitor eget dolor morbi. Elementum sagittis vitae et leo. Tortor at auctor urna nunc id cursus metus aliquam eleifend. Nibh sit amet commodo nulla facilisi. Molestie a iaculis at erat pellentesque adipiscing. Ultrices dui sapien eget mi proin sed. Facilisis gravida neque convallis a. Feugiat in ante metus dictum at tempor commodo ullamcorper. Congue mauris rhoncus aenean vel elit. Amet venenatis urna cursus eget nunc scelerisque viverra mauris. Eget lorem dolor sed viverra ipsum nunc. Sapien pellentesque habitant morbi tristique senectus et netus et malesuada. Orci porta non pulvinar neque laoreet suspendisse interdum. + +Amet est placerat in egestas erat imperdiet sed euismod nisi. Venenatis cras sed felis eget. Non nisi est sit amet facilisis. Proin sagittis nisl rhoncus mattis rhoncus urna neque. Justo nec ultrices dui sapien eget mi proin sed libero. Sit amet dictum sit amet. Pellentesque diam volutpat commodo sed egestas egestas fringilla phasellus faucibus. Tortor posuere ac ut consequat semper. Vitae et leo duis ut. Varius sit amet mattis vulputate. Suspendisse potenti nullam ac tortor. + +Ultrices vitae auctor eu augue ut. Amet volutpat consequat mauris nunc congue. Feugiat vivamus at augue eget arcu. Lorem donec massa sapien faucibus et molestie ac feugiat sed. Sed ullamcorper morbi tincidunt ornare massa. Mauris nunc congue nisi vitae suscipit tellus mauris a diam. Nisl condimentum id venenatis a condimentum vitae sapien pellentesque. Sed elementum tempus egestas sed sed. Risus feugiat in ante metus dictum at tempor commodo. Fermentum posuere urna nec tincidunt praesent semper feugiat. Aliquet sagittis id consectetur purus ut faucibus pulvinar. Integer eget aliquet nibh praesent tristique magna. Non arcu risus quis varius quam quisque id diam. + +Integer feugiat scelerisque varius morbi enim nunc. Eu lobortis elementum nibh tellus molestie nunc. Ultrices dui sapien eget mi proin sed libero enim sed. Lacinia at quis risus sed vulputate odio ut enim blandit. Est pellentesque elit ullamcorper dignissim cras tincidunt lobortis feugiat. Morbi enim nunc faucibus a pellentesque sit. Ultricies lacus sed turpis tincidunt. Odio aenean sed adipiscing diam donec adipiscing tristique risus. Morbi non arcu risus quis. Et tortor at risus viverra adipiscing at. Odio aenean sed adipiscing diam donec adipiscing tristique risus. Odio tempor orci dapibus ultrices. Pulvinar mattis nunc sed blandit libero volutpat. Neque gravida in fermentum et. Eu non diam phasellus vestibulum lorem sed risus ultricies tristique. Nisi quis eleifend quam adipiscing. Egestas sed tempus urna et pharetra pharetra massa massa ultricies. Risus feugiat in ante metus dictum at tempor. + +Maecenas ultricies mi eget mauris pharetra et ultrices. Viverra adipiscing at in tellus integer feugiat scelerisque varius. Sem fringilla ut morbi tincidunt. Dui vivamus arcu felis bibendum ut tristique et egestas quis. Enim sed faucibus turpis in eu mi. Ullamcorper morbi tincidunt ornare massa eget egestas purus viverra accumsan. Vulputate enim nulla aliquet porttitor lacus. Euismod quis viverra nibh cras pulvinar mattis nunc sed blandit. Eget nunc scelerisque viverra mauris in aliquam sem. Arcu ac tortor dignissim convallis aenean et. Tellus elementum sagittis vitae et leo. Aenean sed adipiscing diam donec adipiscing tristique. Faucibus turpis in eu mi. + +Volutpat odio facilisis mauris sit amet massa vitae. Volutpat ac tincidunt vitae semper quis. Sed id semper risus in hendrerit gravida. Dictumst quisque sagittis purus sit amet volutpat consequat mauris. Condimentum id venenatis a condimentum. Ornare arcu odio ut sem nulla pharetra diam sit amet. Potenti nullam ac tortor vitae purus faucibus. Suspendisse in est ante in nibh mauris. Ut enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Scelerisque fermentum dui faucibus in. Dolor morbi non arcu risus quis varius quam quisque. In metus vulputate eu scelerisque felis imperdiet proin. Viverra suspendisse potenti nullam ac tortor. Enim tortor at auctor urna nunc id cursus metus aliquam. Orci a scelerisque purus semper eget duis at tellus. + +Mus mauris vitae ultricies leo integer malesuada nunc vel. Viverra maecenas accumsan lacus vel facilisis volutpat. Potenti nullam ac tortor vitae purus faucibus ornare. Tellus rutrum tellus pellentesque eu tincidunt tortor aliquam nulla. Sollicitudin aliquam ultrices sagittis orci a scelerisque purus semper. Pretium fusce id velit ut tortor pretium viverra suspendisse potenti. Urna duis convallis convallis tellus id interdum velit laoreet. Mi sit amet mauris commodo quis. Curabitur gravida arcu ac tortor. Quisque egestas diam in arcu cursus euismod quis viverra nibh. Lectus proin nibh nisl condimentum id venenatis a condimentum. Ultricies integer quis auctor elit. Phasellus egestas tellus rutrum tellus pellentesque eu tincidunt tortor. Adipiscing diam donec adipiscing tristique risus nec. Sapien et ligula ullamcorper malesuada. Id diam vel quam elementum pulvinar etiam non quam lacus. Fermentum leo vel orci porta non. + +Donec et odio pellentesque diam volutpat commodo. Elementum pulvinar etiam non quam lacus suspendisse faucibus. Tellus orci ac auctor augue mauris augue neque gravida in. Pellentesque eu tincidunt tortor aliquam nulla facilisi cras. Nulla facilisi nullam vehicula ipsum a. Massa id neque aliquam vestibulum morbi blandit. At lectus urna duis convallis convallis tellus id interdum. Sed id semper risus in hendrerit. Sapien eget mi proin sed. Egestas sed tempus urna et pharetra pharetra massa. Pulvinar neque laoreet suspendisse interdum consectetur libero. Vulputate sapien nec sagittis aliquam malesuada bibendum. Dolor sit amet consectetur adipiscing elit pellentesque habitant. Nec feugiat in fermentum posuere urna nec. Enim eu turpis egestas pretium aenean pharetra magna. Praesent elementum facilisis leo vel fringilla. Nunc sed velit dignissim sodales. + +Sit amet consectetur adipiscing elit. Augue interdum velit euismod in pellentesque massa placerat. Eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada. Penatibus et magnis dis parturient montes nascetur ridiculus. Morbi leo urna molestie at. Mattis aliquam faucibus purus in massa tempor nec feugiat. Ut eu sem integer vitae justo eget magna fermentum. Placerat orci nulla pellentesque dignissim enim sit. Sed adipiscing diam donec adipiscing tristique risus nec feugiat. Risus nullam eget felis eget nunc. Praesent semper feugiat nibh sed pulvinar proin. Egestas quis ipsum suspendisse ultrices gravida dictum fusce ut. Donec et odio pellentesque diam. Lectus arcu bibendum at varius vel pharetra vel. Nibh sit amet commodo nulla facilisi nullam vehicula. Varius vel pharetra vel turpis nunc eget lorem. Quis enim lobortis scelerisque fermentum. Consectetur adipiscing elit pellentesque habitant. + +Morbi tempus iaculis urna id volutpat lacus laoreet. Aliquam eleifend mi in nulla posuere sollicitudin aliquam ultrices. Mauris vitae ultricies leo integer malesuada nunc vel risus. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Et malesuada fames ac turpis egestas maecenas. Condimentum id venenatis a condimentum vitae sapien. Turpis egestas maecenas pharetra convallis posuere morbi leo. Fames ac turpis egestas sed tempus urna. Massa tincidunt dui ut ornare lectus. Nibh praesent tristique magna sit amet purus. Cum sociis natoque penatibus et magnis dis parturient montes. Molestie at elementum eu facilisis sed odio morbi. Consectetur a erat nam at lectus urna duis convallis. Semper eget duis at tellus at urna. A diam sollicitudin tempor id eu nisl nunc mi ipsum. Id diam maecenas ultricies mi eget mauris pharetra et. Consectetur adipiscing elit duis tristique sollicitudin nibh. + +Nulla posuere sollicitudin aliquam ultrices. Velit dignissim sodales ut eu sem integer vitae justo eget. Vulputate eu scelerisque felis imperdiet. Eu turpis egestas pretium aenean pharetra magna ac. Ac ut consequat semper viverra. Ullamcorper velit sed ullamcorper morbi tincidunt ornare massa eget egestas. Egestas fringilla phasellus faucibus scelerisque eleifend donec pretium vulputate. Phasellus vestibulum lorem sed risus ultricies tristique nulla. Pharetra sit amet aliquam id diam. Pharetra pharetra massa massa ultricies. \ No newline at end of file diff --git a/test/assets/short_sample.txt b/test/assets/short_sample.txt new file mode 100644 index 0000000..2f14eb2 --- /dev/null +++ b/test/assets/short_sample.txt @@ -0,0 +1 @@ +Good news! Import works! \ No newline at end of file diff --git a/test/import.cpp b/test/import.cpp new file mode 100644 index 0000000..7f512f8 --- /dev/null +++ b/test/import.cpp @@ -0,0 +1,120 @@ +#include "../src/FileSystem/FileSystem.hpp" +#include +#include + +class ImportTest : public testing::Test { +protected: + // NOLINTBEGIN(cppcoreguidelines-non-private-member-variables-in-classes) + std::string const PATH = "test.fs"; + std::uint64_t const SIZE = 32768; + std::uint64_t const CLUSTER_SIZE = 64; + + FileSystem file_system_; + // NOLINTEND(cppcoreguidelines-non-private-member-variables-in-classes) + + auto SetUp() -> void override { + FileSystem::make(PATH, {SIZE, CLUSTER_SIZE}); + file_system_ = FileSystem(PATH); + } + + auto TearDown() -> void override { std::filesystem::remove(PATH); } +}; + +TEST_F(ImportTest, ImportFile) { + const auto *const file_name = "test.txt"; + const auto *const file_content = + "Hello World! This is some sample text. It is not very long, but it is long enough to test the file system."; + + std::ofstream file(file_name); + file << file_content; + file.close(); + + std::ifstream file_to_import(file_name); + file_system_.import_file(file_to_import, file_name); + file_to_import.close(); + + auto reader = file_system_.get_reader(file_name); + reader.set_offset(0); + reader.set_block_size(CLUSTER_SIZE); + + std::vector data; + std::vector cur_block = reader.read_next(); + while (!cur_block.empty()) { + data.insert(data.end(), cur_block.begin(), cur_block.end()); + cur_block = reader.read_next(); + } + + std::string const read_data = Converter::to_string(data); + EXPECT_EQ(std::string(file_content), read_data); +} + +TEST_F(ImportTest, AlreadyExists) { + file_system_.touch("test.txt"); + + const auto *const file_name = "test.txt"; + const auto *const file_content = + "Hello World! This is some sample text. It is not very long, but it is long enough to test the file system."; + + std::ofstream file(file_name); + file << file_content; + file.close(); + + std::ifstream file_to_import(file_name); + EXPECT_THROW(file_system_.import_file(file_to_import, file_name), std::invalid_argument); + file_to_import.close(); +} + +TEST_F(ImportTest, ImportShortRealFile) { + const auto *const host_fs_file_path = "../test/assets/short_sample.txt"; + + std::ifstream file_to_import(host_fs_file_path); + if (!file_to_import.is_open()) throw std::runtime_error("Cannot open file " + std::string(host_fs_file_path)); + file_system_.import_file(file_to_import, "sample.txt"); + file_to_import.close(); + + auto reader = file_system_.get_reader("sample.txt"); + reader.set_offset(0); + reader.set_block_size(CLUSTER_SIZE); + + std::vector data; + std::vector cur_block = reader.read_next(); + while (!cur_block.empty()) { + data.insert(data.end(), cur_block.begin(), cur_block.end()); + cur_block = reader.read_next(); + } + + std::ifstream host_fs_file(host_fs_file_path); + if (!host_fs_file.is_open()) throw std::runtime_error("Cannot open file " + std::string(host_fs_file_path)); + std::string const host_fs_file_content((std::istreambuf_iterator(host_fs_file)), + std::istreambuf_iterator()); + EXPECT_EQ(host_fs_file_content, Converter::to_string(data)); + EXPECT_EQ(Converter::to_string(data), "Good news! Import works!"); + host_fs_file.close(); +} + +TEST_F(ImportTest, ImportLongRealFile) { + const auto *const host_fs_file_path = "../test/assets/long_sample.txt"; + + std::ifstream file_to_import(host_fs_file_path); + if (!file_to_import.is_open()) throw std::runtime_error("Cannot open file " + std::string(host_fs_file_path)); + file_system_.import_file(file_to_import, "sample.txt"); + file_to_import.close(); + + auto reader = file_system_.get_reader("sample.txt"); + reader.set_offset(0); + reader.set_block_size(CLUSTER_SIZE); + + std::vector data; + std::vector cur_block = reader.read_next(); + while (!cur_block.empty()) { + data.insert(data.end(), cur_block.begin(), cur_block.end()); + cur_block = reader.read_next(); + } + + std::ifstream host_fs_file(host_fs_file_path); + if (!host_fs_file.is_open()) throw std::runtime_error("Cannot open file " + std::string(host_fs_file_path)); + std::string const host_fs_file_content((std::istreambuf_iterator(host_fs_file)), + std::istreambuf_iterator()); + EXPECT_EQ(host_fs_file_content, Converter::to_string(data)); + host_fs_file.close(); +} \ No newline at end of file