It covers:
dynamic_buffer_stream_default_cfg()dynamic_buffer_stream_default_env()dynamic_buffer_stream_create_stream()dynamic_buffer_stream_create_desc()stream_write()stream_read()stream_flush()stream_destroy() (via backend close)See dynamic_buffer_stream_default_cfg() specifications
| WHEN | EXPECT |
|---|---|
dynamic_buffer_stream_default_cfg() is called | returns a dynamic_buffer_stream_cfg_t such that ret.default_cap > 0 |
dynamic_buffer_stream adapter.default_cap is not part of the public contract; only its validity (non-zero) is guaranteed.See dynamic_buffer_stream_default_env() specifications
ret.mem == memret.port_env == *port_envosal_mem_ops_t *stream_env_t| WHEN | EXPECT |
|---|---|
dynamic_buffer_stream_default_env(mem, port_env) is called with valid inputs | returns a dynamic_buffer_stream_env_t such that ret.mem == mem and ret.port_env == *port_env |
stream port environment provided by the caller.See dynamic_buffer_stream_create_stream() specifications
fake_memory)| WHEN | EXPECT |
|---|---|
| valid inputs | returns STREAM_STATUS_OK, stores a non-NULL stream in *out |
out == NULL | returns STREAM_STATUS_INVALID |
cfg == NULL | returns STREAM_STATUS_INVALID, *out unchanged |
env == NULL | returns STREAM_STATUS_INVALID, *out unchanged |
| allocation fails | returns STREAM_STATUS_OOM, *out unchanged |
write, flush).See dynamic_buffer_stream_create_desc() specifications
fake_memory)| WHEN | EXPECT |
|---|---|
| valid inputs | returns STREAM_STATUS_OK, produces a valid descriptor |
out == NULL | returns STREAM_STATUS_INVALID |
key == NULL | returns STREAM_STATUS_INVALID, resets descriptor |
key == "" | returns STREAM_STATUS_INVALID, resets descriptor |
cfg == NULL | returns STREAM_STATUS_INVALID, resets descriptor |
env == NULL | returns STREAM_STATUS_INVALID, resets descriptor |
mem == NULL | returns STREAM_STATUS_INVALID, resets descriptor |
| allocation fails | returns STREAM_STATUS_OOM, resets descriptor |
See:
| WHEN | EXPECT |
|---|---|
| valid write without growth | writes n, appends data, read_pos unchanged |
| valid write with growth | writes n, buffer grows |
n == 0 | returns 0, no change |
buf == NULL && n == 0 | returns 0, no change |
buf == NULL && n > 0 | returns 0, STREAM_STATUS_INVALID |
| reserve fails | returns 0, STREAM_STATUS_OOM, no change |
| size overflow | returns 0, STREAM_STATUS_INVALID, no change |
See:
| WHEN | EXPECT |
|---|---|
| read within available data | returns n, advances read_pos |
| read beyond available data | returns remaining bytes |
n == 0 | returns 0, no change |
buf == NULL && n == 0 | returns 0, no change |
buf == NULL && n > 0 | returns 0, STREAM_STATUS_INVALID |
| EOF | returns 0, STREAM_STATUS_EOF, no change |
len or buffer content.read_pos is advanced on success.See dynamic_buffer_stream_flush() specifications
| WHEN | EXPECT |
|---|---|
| flush is called | returns STREAM_STATUS_OK, backend unchanged |
See:
| WHEN | EXPECT |
|---|---|
| destroy is called on a valid stream | releases backend resources, sets *s to NULL |
close callback is exercised indirectly via stream_destroy().fake_memory invariants.