19 fs::path xor_path{m_args.GetDataDirBase() /
"test_xor.bin"};
20 auto raw_file{[&](
const auto& mode) {
return fsbridge::fopen(xor_path, mode); }};
21 const std::vector<uint8_t>
test1{1, 2, 3};
22 const std::vector<uint8_t> test2{4, 5};
23 const std::vector<std::byte> xor_pat{std::byte{0xff}, std::byte{0x00}};
26 AutoFile xor_file{raw_file(
"rb"), xor_pat};
27 BOOST_CHECK_EXCEPTION(xor_file << std::byte{}, std::ios_base::failure,
HasReason{
"AutoFile::write: file handle is nullpt"});
28 BOOST_CHECK_EXCEPTION(xor_file >> std::byte{}, std::ios_base::failure,
HasReason{
"AutoFile::read: file handle is nullpt"});
29 BOOST_CHECK_EXCEPTION(xor_file.ignore(1), std::ios_base::failure,
HasReason{
"AutoFile::ignore: file handle is nullpt"});
34 const char* mode =
"wb";
36 const char* mode =
"wbx";
38 AutoFile xor_file{raw_file(mode), xor_pat};
39 xor_file <<
test1 << test2;
43 AutoFile non_xor_file{raw_file(
"rb")};
44 std::vector<std::byte> raw(7);
45 non_xor_file >>
Span{raw};
48 BOOST_CHECK_EXCEPTION(non_xor_file.ignore(1), std::ios_base::failure,
HasReason{
"AutoFile::ignore: end of file"});
51 AutoFile xor_file{raw_file(
"rb"), xor_pat};
52 std::vector<std::byte> read1, read2;
53 xor_file >> read1 >> read2;
57 BOOST_CHECK_EXCEPTION(xor_file >> std::byte{}, std::ios_base::failure,
HasReason{
"AutoFile::read: end of file"});
60 AutoFile xor_file{raw_file(
"rb"), xor_pat};
61 std::vector<std::byte> read2;
67 BOOST_CHECK_EXCEPTION(xor_file.ignore(1), std::ios_base::failure,
HasReason{
"AutoFile::ignore: end of file"});
68 BOOST_CHECK_EXCEPTION(xor_file >> std::byte{}, std::ios_base::failure,
HasReason{
"AutoFile::read: end of file"});
76 unsigned char bytes[] = { 3, 4, 5, 6 };
77 std::vector<unsigned char> vch;
84 BOOST_CHECK((vch == std::vector<unsigned char>{{1, 2}}));
86 BOOST_CHECK((vch == std::vector<unsigned char>{{1, 2}}));
90 BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2}}));
92 BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2}}));
97 BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2, 0}}));
99 BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 1, 2, 0}}));
104 BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 1, 2}}));
106 BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 1, 2}}));
111 BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 0, 1, 2}}));
113 BOOST_CHECK((vch == std::vector<unsigned char>{{0, 0, 0, 0, 1, 2}}));
117 BOOST_CHECK((vch == std::vector<unsigned char>{{3, 4, 5, 6}}));
119 BOOST_CHECK((vch == std::vector<unsigned char>{{3, 4, 5, 6}}));
124 BOOST_CHECK((vch == std::vector<unsigned char>{{8, 8, 1, 3, 4, 5, 6, 2}}));
126 BOOST_CHECK((vch == std::vector<unsigned char>{{8, 8, 1, 3, 4, 5, 6, 2}}));
191 bit_writer.
Write(0, 1);
192 bit_writer.Write(2, 2);
193 bit_writer.Write(6, 3);
194 bit_writer.Write(11, 4);
195 bit_writer.Write(1, 5);
196 bit_writer.Write(32, 6);
197 bit_writer.Write(7, 7);
198 bit_writer.Write(30497, 16);
202 uint32_t serialized_int1;
203 data >> serialized_int1;
205 uint16_t serialized_int2;
206 data >> serialized_int2;
440 fs::path streams_test_filename = m_args.GetDataDirBase() /
"streams_test_tmp";
441 for (
int rep = 0; rep < 50; ++rep) {
444 for (uint8_t i = 0; i < fileSize; ++i) {
447 file.seek(0, SEEK_SET);
452 size_t currentPos = 0;
454 for (
int step = 0; step < 100; ++step) {
455 if (currentPos >= fileSize)
469 if (currentPos + 1 > fileSize)
471 bf.SetLimit(currentPos + 1);
473 for (uint8_t i = 0; i < 1; ++i) {
481 if (currentPos + 2 > fileSize)
483 bf.SetLimit(currentPos + 2);
485 for (uint8_t i = 0; i < 2; ++i) {
493 if (currentPos + 5 > fileSize)
495 bf.SetLimit(currentPos + 5);
497 for (uint8_t i = 0; i < 5; ++i) {
507 if (currentPos + skip_length > fileSize)
continue;
508 bf.SetLimit(currentPos + skip_length);
509 bf.SkipTo(currentPos + skip_length);
510 currentPos += skip_length;
516 if (find >= fileSize)
518 bf.FindByte(std::byte(find));
523 bf.SetLimit(currentPos + 1);
532 bool okay = bf.SetPos(requestPos);
537 currentPos = bf.GetPos();
540 if (requestPos <= maxPos &&
541 maxPos > rewindSize &&
542 requestPos >= maxPos - rewindSize) {
549 if (maxPos < currentPos)
553 fs::remove(streams_test_filename);