33SCENARIO(
"streamWriter Buffer Sizing",
"[streamWriter]" )
36 #ifdef STREAMWRITER_TEST_DOXYGEN_REF
49 GIVEN(
"A default constructed streamWriter" )
51 WHEN(
"default configurations" )
53 size_t maxCircBuffLength = 1024;
54 double maxCircBuffSize = 2048.0;
55 size_t maxWriteChunkLength = 512;
57 size_t circBuffLength;
59 size_t writeChunkLength;
61 uint32_t width = 1024;
62 uint32_t height = 1024;
75 REQUIRE( circBuffLength == 1024 );
76 REQUIRE( circBuffSize == 2048 );
77 REQUIRE( writeChunkLength == 512 );
80 WHEN(
"larger frame size using all of max size" )
82 size_t maxCircBuffLength = 1024;
83 double maxCircBuffSize = 2048.0;
84 size_t maxWriteChunkLength = 512;
86 size_t circBuffLength;
88 size_t writeChunkLength;
90 uint32_t width = 2048;
91 uint32_t height = 2048;
104 REQUIRE( circBuffLength == 256 );
105 REQUIRE( circBuffSize == 2048 );
106 REQUIRE( writeChunkLength == 128 );
109 WHEN(
"largest frame size possible using all of max size" )
111 size_t maxCircBuffLength = 1024;
112 double maxCircBuffSize = 1024.0;
113 size_t maxWriteChunkLength = 512;
115 size_t circBuffLength;
117 size_t writeChunkLength;
119 uint32_t width = 16384;
120 uint32_t height = 16384;
133 REQUIRE( circBuffLength == 2 );
134 REQUIRE( circBuffSize == 1024 );
135 REQUIRE( writeChunkLength == 1 );
138 WHEN(
"Exceeding largest frame size possible" )
140 size_t maxCircBuffLength = 1024;
141 double maxCircBuffSize = 1024.0;
142 size_t maxWriteChunkLength = 512;
144 size_t circBuffLength;
146 size_t writeChunkLength;
148 uint32_t width = 16385;
149 uint32_t height = 16385;
162 REQUIRE( circBuffLength == 0 );
163 REQUIRE( circBuffSize == 0 );
164 REQUIRE( writeChunkLength == 0 );
167 WHEN(
"Exceeding largest frame size possible by a lot" )
169 size_t maxCircBuffLength = 1024;
170 double maxCircBuffSize = 1024.0;
171 size_t maxWriteChunkLength = 512;
173 size_t circBuffLength;
175 size_t writeChunkLength;
177 uint32_t width = 56385;
178 uint32_t height = 56385;
191 REQUIRE( circBuffLength == 0 );
192 REQUIRE( circBuffSize == 0 );
193 REQUIRE( writeChunkLength == 0 );
196 WHEN(
"LOWFS-like setup, 32x32 frames" )
198 size_t maxCircBuffLength = 524288;
199 double maxCircBuffSize = 1024.0;
200 size_t maxWriteChunkLength = 16384;
202 size_t circBuffLength;
204 size_t writeChunkLength;
207 uint32_t height = 32;
220 REQUIRE( circBuffLength == 524288 );
221 REQUIRE_THAT( circBuffSize, Catch::Matchers::WithinAbs( 1024, 0.00001 ) );
222 REQUIRE( writeChunkLength == 16384 );
223 REQUIRE( ( circBuffLength % writeChunkLength ) == 0 );
226 WHEN(
"LOWFS-like setup, 512x512 frames" )
228 size_t maxCircBuffLength = 524288;
229 double maxCircBuffSize = 1024.0;
230 size_t maxWriteChunkLength = 16384;
232 size_t circBuffLength;
234 size_t writeChunkLength;
236 uint32_t width = 512;
237 uint32_t height = 512;
250 REQUIRE( circBuffLength == 2048 );
251 REQUIRE_THAT( circBuffSize, Catch::Matchers::WithinAbs( 1024, 0.00001 ) );
252 REQUIRE( writeChunkLength == 64 );
253 REQUIRE( ( circBuffLength % writeChunkLength ) == 0 );
256 WHEN(
"LOWFS-like setup, 3200x3200 frames" )
258 size_t maxCircBuffLength = 524288;
259 double maxCircBuffSize = 1024.0;
260 size_t maxWriteChunkLength = 16384;
262 size_t circBuffLength;
264 size_t writeChunkLength;
266 uint32_t width = 3200;
267 uint32_t height = 3200;
280 REQUIRE( circBuffLength == 52 );
281 REQUIRE_THAT( circBuffSize, Catch::Matchers::WithinAbs( 1015.625, 0.00001 ) );
282 REQUIRE( writeChunkLength == 1 );
283 REQUIRE( ( circBuffLength % writeChunkLength ) == 0 );
286 WHEN(
"computed odd circular buffers round down and zero write chunks promote to one" )
288 size_t maxCircBuffLength = 1000;
289 double maxCircBuffSize = 11.0 / 1048576.0;
290 size_t maxWriteChunkLength = 1;
292 size_t circBuffLength;
294 size_t writeChunkLength;
310 REQUIRE( circBuffLength == 10 );
311 REQUIRE_THAT( circBuffSize, Catch::Matchers::WithinAbs( 10.0 / 1048576.0, 1e-12 ) );
312 REQUIRE( writeChunkLength == 1 );
315 WHEN(
"computed write chunks shrink until they evenly divide the circular buffer" )
317 size_t maxCircBuffLength = 10;
318 double maxCircBuffSize = 9.0 / 1048576.0;
319 size_t maxWriteChunkLength = 4;
321 size_t circBuffLength;
323 size_t writeChunkLength;
339 REQUIRE( circBuffLength == 8 );
340 REQUIRE_THAT( circBuffSize, Catch::Matchers::WithinAbs( 8.0 / 1048576.0, 1e-12 ) );
341 REQUIRE( writeChunkLength == 2 );
342 REQUIRE( ( circBuffLength % writeChunkLength ) == 0 );