Add a bunch of missing "zephyr/" prefixes to #include statements in various test and test framework files. Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com>
227 lines
5.6 KiB
C
227 lines
5.6 KiB
C
/*
|
|
* Copyright (c) 2020 Friedt Professional Engineering Services, Inc
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* @brief Tests for the Pipe read / write availability
|
|
* @ingroup kernel_pipe_tests
|
|
* @{
|
|
*/
|
|
|
|
#include <zephyr/ztest.h>
|
|
|
|
static ZTEST_DMEM unsigned char __aligned(4) data[] = "abcdefgh";
|
|
static struct k_pipe pipe = {
|
|
.buffer = data,
|
|
.size = sizeof(data) - 1 /* '\0' */,
|
|
};
|
|
|
|
static struct k_pipe bufferless;
|
|
|
|
static struct k_pipe bufferless1 = {
|
|
.buffer = data,
|
|
.size = 0,
|
|
};
|
|
|
|
/**
|
|
* @brief Pipes with no buffer or size 0 should return 0 bytes available
|
|
*
|
|
* Pipes can be created to be bufferless (i.e. @ref k_pipe.buffer is `NULL`
|
|
* or @ref k_pipe.size is 0).
|
|
*
|
|
* If either of those conditions is true, then @ref k_pipe_read_avail and
|
|
* @ref k_pipe_write_avail should return 0.
|
|
*
|
|
* @note
|
|
* A distinction can be made between buffered and bufferless pipes in that
|
|
* @ref k_pipe_read_avail and @ref k_pipe_write_avail will never
|
|
* simultaneously return 0 for a buffered pipe, but they will both return 0
|
|
* for an unbuffered pipe.
|
|
*/
|
|
ZTEST(pipe_api, test_pipe_avail_no_buffer)
|
|
{
|
|
size_t r_avail;
|
|
size_t w_avail;
|
|
|
|
r_avail = k_pipe_read_avail(&bufferless);
|
|
zassert_equal(r_avail, 0, "read: expected: 0 actual: %u", r_avail);
|
|
|
|
w_avail = k_pipe_write_avail(&bufferless);
|
|
zassert_equal(w_avail, 0, "write: expected: 0 actual: %u", w_avail);
|
|
|
|
r_avail = k_pipe_read_avail(&bufferless1);
|
|
zassert_equal(r_avail, 0, "read: expected: 0 actual: %u", r_avail);
|
|
|
|
w_avail = k_pipe_write_avail(&bufferless1);
|
|
zassert_equal(w_avail, 0, "write: expected: 0 actual: %u", w_avail);
|
|
}
|
|
|
|
/**
|
|
* @brief Test available read / write space for r < w
|
|
*
|
|
* This test case is for buffered @ref k_pipe objects and covers the case
|
|
* where @ref k_pipe.read_index is less than @ref k_pipe.write_index.
|
|
*
|
|
* In this case, @ref k_pipe.bytes_used is not relevant.
|
|
*
|
|
* r w
|
|
* |a|b|c|d|e|f|g|h|
|
|
* |0|1|2|3|4|5|6|7|
|
|
*
|
|
* As shown above, the pipe will be able to read 3 bytes without blocking
|
|
* and write 5 bytes without blocking.
|
|
*
|
|
* Thus
|
|
* r_avail = w - r = 3
|
|
* would read: a b c d
|
|
*
|
|
* w_avail = N - (w - r) = 5
|
|
* would overwrite: e f g h
|
|
*/
|
|
ZTEST(pipe_api, test_pipe_avail_r_lt_w)
|
|
{
|
|
size_t r_avail;
|
|
size_t w_avail;
|
|
|
|
pipe.read_index = 0;
|
|
pipe.write_index = 3;
|
|
/* pipe.bytes_used is irrelevant */
|
|
|
|
r_avail = k_pipe_read_avail(&pipe);
|
|
zassert_equal(r_avail, 3, "read: expected: 3 actual: %u", r_avail);
|
|
|
|
w_avail = k_pipe_write_avail(&pipe);
|
|
zassert_equal(w_avail, 5, "write: expected: 5 actual: %u", w_avail);
|
|
}
|
|
|
|
/**
|
|
* @brief Test available read / write space for w < r
|
|
*
|
|
* This test case is for buffered @ref k_pipe objects and covers the case
|
|
* where @ref k_pipe.write_index is less than @ref k_pipe.read_index.
|
|
*
|
|
* In this case, @ref k_pipe.bytes_used is not relevant.
|
|
*
|
|
* w r
|
|
* |a|b|c|d|e|f|g|h|
|
|
* |0|1|2|3|4|5|6|7|
|
|
*
|
|
*
|
|
* As shown above, the pipe will fbe able to read 5 bytes without blocking
|
|
* and write 3 bytes without blocking.
|
|
*
|
|
* Thus
|
|
* r_avail = N - (r - w) = 5
|
|
* would read: e f g h
|
|
*
|
|
* w_avail = r - w = 3
|
|
* would overwrite: a b c d
|
|
*/
|
|
ZTEST(pipe_api, test_pipe_avail_w_lt_r)
|
|
{
|
|
size_t r_avail;
|
|
size_t w_avail;
|
|
|
|
pipe.read_index = 3;
|
|
pipe.write_index = 0;
|
|
/* pipe.bytes_used is irrelevant */
|
|
|
|
r_avail = k_pipe_read_avail(&pipe);
|
|
zassert_equal(r_avail, 5, "read: expected: 4 actual: %u", r_avail);
|
|
|
|
w_avail = k_pipe_write_avail(&pipe);
|
|
zassert_equal(w_avail, 3, "write: expected: 4 actual: %u", w_avail);
|
|
}
|
|
|
|
/**
|
|
* @brief Test available read / write space for `r == w` and an empty buffer
|
|
*
|
|
* This test case is for buffered @ref k_pipe objects and covers the case
|
|
* where @ref k_pipe.read_index is equal to @ref k_pipe.write_index and
|
|
* @ref k_pipe.bytes_used is zero.
|
|
*
|
|
* In this case, @ref k_pipe.bytes_used is relevant because the read and
|
|
* write indices are equal.
|
|
*
|
|
* r
|
|
* w
|
|
* |a|b|c|d|e|f|g|h|
|
|
* |0|1|2|3|4|5|6|7|
|
|
*
|
|
* Regardless of whether the buffer is full or empty, the following holds:
|
|
*
|
|
* r_avail = bytes_used
|
|
* w_avail = N - bytes_used
|
|
*
|
|
* Thus:
|
|
* r_avail = 0
|
|
* would read:
|
|
*
|
|
* w_avail = N - 0 = 8
|
|
* would overwrite: e f g h a b c d
|
|
*/
|
|
ZTEST(pipe_api, test_pipe_avail_r_eq_w_empty)
|
|
{
|
|
size_t r_avail;
|
|
size_t w_avail;
|
|
|
|
pipe.read_index = 4;
|
|
pipe.write_index = 4;
|
|
pipe.bytes_used = 0;
|
|
|
|
r_avail = k_pipe_read_avail(&pipe);
|
|
zassert_equal(r_avail, 0, "read: expected: 0 actual: %u", r_avail);
|
|
|
|
w_avail = k_pipe_write_avail(&pipe);
|
|
zassert_equal(w_avail, 8, "write: expected: 8 actual: %u", w_avail);
|
|
}
|
|
|
|
/**
|
|
* @brief Test available read / write space for `r == w` and a full buffer
|
|
*
|
|
* This test case is for buffered @ref k_pipe objects and covers the case
|
|
* where @ref k_pipe.read_index is equal to @ref k_pipe.write_index and
|
|
* @ref k_pipe.bytes_used is equal to @ref k_pipe.size.
|
|
*
|
|
* In this case, @ref k_pipe.bytes_used is relevant because the read and
|
|
* write indices are equal.
|
|
*
|
|
* r
|
|
* w
|
|
* |a|b|c|d|e|f|g|h|
|
|
* |0|1|2|3|4|5|6|7|
|
|
*
|
|
* Regardless of whether the buffer is full or empty, the following holds:
|
|
*
|
|
* r_avail = bytes_used
|
|
* w_avail = N - bytes_used
|
|
*
|
|
* Thus
|
|
* r_avail = N = 8
|
|
* would read: e f g h a b c d
|
|
*
|
|
* w_avail = N - 8 = 0
|
|
* would overwrite:
|
|
*/
|
|
ZTEST(pipe_api, test_pipe_avail_r_eq_w_full)
|
|
{
|
|
size_t r_avail;
|
|
size_t w_avail;
|
|
|
|
pipe.read_index = 4;
|
|
pipe.write_index = 4;
|
|
pipe.bytes_used = pipe.size;
|
|
|
|
r_avail = k_pipe_read_avail(&pipe);
|
|
zassert_equal(r_avail, 8, "read: expected: 8 actual: %u", r_avail);
|
|
|
|
w_avail = k_pipe_write_avail(&pipe);
|
|
zassert_equal(w_avail, 0, "write: expected: 0 actual: %u", w_avail);
|
|
}
|
|
|
|
/**
|
|
* @}
|
|
*/
|