10using namespace Microsoft::VisualStudio::CppUnitTestFramework;
20 constexpr uint32_t total = 1000;
24 for (uint32_t i = 0; i < total; ++i) {
25 Assert::IsTrue(writer.ok());
29 Assert::AreEqual<stdex::stream::fpos_t>(0, source.seekbeg(0));
33 for (uint32_t i = 0; i < total; ++i) {
35 Assert::IsTrue(reader.ok());
36 Assert::AreEqual(i, x);
39 Assert::IsFalse(reader.ok());
43 TEST_METHOD(replicator)
45 constexpr uint32_t total = 1000;
49 stdex::sstring filename2, filename3;
50 filename2 = filename3 = temp_path();
51 filename2 += _T(
"stdex-stream-replicator-2.tmp");
54 stdex::stream::mode_for_reading | stdex::stream::mode_for_writing | stdex::stream::mode_create | stdex::stream::mode_binary);
56 filename3 += _T(
"stdex-stream-replicator-3.tmp");
59 stdex::stream::mode_for_reading | stdex::stream::mode_for_writing | stdex::stream::mode_create | stdex::stream::mode_binary,
68 for (uint32_t i = 0; i < total; ++i) {
69 Assert::IsTrue(writer.
ok());
80 for (uint32_t i = 0; i < total; ++i) {
82 Assert::IsTrue(f1.ok());
83 Assert::AreEqual(i, x);
85 Assert::IsTrue(f2_buf.ok());
86 Assert::AreEqual(i, x);
88 Assert::IsTrue(f3.ok());
89 Assert::AreEqual(i, x);
92 Assert::IsFalse(f1.ok());
94 Assert::IsFalse(f2_buf.ok());
96 Assert::IsFalse(f3.ok());
100 std::filesystem::remove(filename2);
102 std::filesystem::remove(filename3);
105 TEST_METHOD(open_close)
108 const stdex::sstring filepath = temp_path();
109 constexpr uint32_t count = 3;
110 stdex::sstring filename[count];
111 stdex::stream::fpos_t start[count];
112 for (uint32_t i = 0; i < count; ++i) {
113 filename[i] = filepath + stdex::sprintf(_T(
"stdex-stream-open_close%u.tmp"), NULL, i);
114 dat.open(filename[i].c_str(), stdex::stream::mode_for_reading | stdex::stream::mode_for_writing | stdex::stream::share_none | stdex::stream::mode_preserve_existing | stdex::stream::mode_binary);
115 Assert::IsTrue(dat.ok());
116 start[i] = dat.tell();
117 Assert::AreNotEqual(stdex::stream::fpos_max, start[i]);
118 for (uint32_t j = 0; j < 31 + 11 * i; ++j) {
119 dat << j * count + i;
120 Assert::IsTrue(dat.ok());
124 for (uint32_t i = 0; i < count; ++i) {
125 dat.open(filename[i].c_str(), stdex::stream::mode_for_reading | stdex::stream::mode_open_existing | stdex::stream::share_none | stdex::stream::mode_binary);
126 Assert::IsTrue(dat.ok());
132 Assert::AreEqual(i, x % count);
136 for (uint32_t i = 0; i < count; ++i)
137 std::filesystem::remove(filename[i]);
140 TEST_METHOD(file_stat)
142 stdex::sstring path(temp_path());
148 static stdex::sstring temp_path()
151 TCHAR temp_path[MAX_PATH];
152 Assert::IsTrue(ExpandEnvironmentStrings(_T(
"%TEMP%\\"), temp_path, _countof(temp_path)) < MAX_PATH);
Provides read-ahead stream capability.
Definition stream.hpp:1246
Provides write-back stream capability.
Definition stream.hpp:1313
bool ok() const
Returns true if the stream state is clean i.e. previous operation was succesful.
Definition stream.hpp:175
Buffered read/write stream.
Definition stream.hpp:1384
Cached file-system file.
Definition stream.hpp:3099
File-system file.
Definition stream.hpp:2691
static bool readonly(const stdex::schar_t *filename)
Checks if file/folder/symlink is read-only.
Definition stream.hpp:3069
static bool exists(const stdex::schar_t *filename)
Checks if file/folder/symlink likely exists.
Definition stream.hpp:3041
In-memory file.
Definition stream.hpp:3183
Replicates writing of the same data to multiple streams.
Definition stream.hpp:1077
void push_back(basic *source)
Adds stream on the list.
Definition stream.hpp:1096