From 40123c6775b7d8b653ecd7dffa4f09b9811b8a9c Mon Sep 17 00:00:00 2001 From: Yishai Jaffe Date: Tue, 10 Jun 2025 12:28:28 +0300 Subject: [PATCH] tests: display: cfb: added tests for draw_circle API Added tests for the newly added cfb_draw_circle API. Signed-off-by: Yishai Jaffe --- tests/subsys/display/cfb/basic/CMakeLists.txt | 2 + .../display/cfb/basic/src/draw_circle.c | 155 ++++++++++++++++++ tests/subsys/display/cfb/basic/src/testdata.c | 62 +++++++ tests/subsys/display/cfb/basic/src/testdata.h | 1 + 4 files changed, 220 insertions(+) create mode 100644 tests/subsys/display/cfb/basic/src/draw_circle.c diff --git a/tests/subsys/display/cfb/basic/CMakeLists.txt b/tests/subsys/display/cfb/basic/CMakeLists.txt index 5126b0ec6aa..e269faa35b7 100644 --- a/tests/subsys/display/cfb/basic/CMakeLists.txt +++ b/tests/subsys/display/cfb/basic/CMakeLists.txt @@ -14,6 +14,7 @@ if(CONFIG_TEST_MSB_FIRST_FONT) src/draw_point.c src/draw_line.c src/draw_rect.c + src/draw_circle.c src/draw_text_rectspace1016.c src/invert.c src/invert_area.c @@ -26,6 +27,7 @@ else() src/draw_point.c src/draw_line.c src/draw_rect.c + src/draw_circle.c src/draw_text_rectspace1016.c src/invert.c src/invert_area.c diff --git a/tests/subsys/display/cfb/basic/src/draw_circle.c b/tests/subsys/display/cfb/basic/src/draw_circle.c new file mode 100644 index 00000000000..e42199eb061 --- /dev/null +++ b/tests/subsys/display/cfb/basic/src/draw_circle.c @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2024 TOKITA Hiroshi + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include + +#include "testdata.h" +#include "utils.h" + +LOG_MODULE_REGISTER(draw_circle, CONFIG_DISPLAY_LOG_LEVEL); + +static const struct device *dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_display)); +static const uint32_t display_width = DT_PROP(DT_CHOSEN(zephyr_display), width); +static const uint32_t display_height = DT_PROP(DT_CHOSEN(zephyr_display), height); + +/** + * Fill the buffer with 0 before running tests. + */ +static void cfb_test_before(void *text_fixture) +{ + struct display_buffer_descriptor desc = { + .height = display_height, + .pitch = display_width, + .width = display_width, + .buf_size = display_height * display_width / 8, + }; + + memset(read_buffer, 0, sizeof(read_buffer)); + zassert_ok(display_write(dev, 0, 0, &desc, read_buffer)); + + zassert_ok(display_blanking_off(dev)); + + zassert_ok(cfb_framebuffer_init(dev)); +} + +static void cfb_test_after(void *test_fixture) +{ + cfb_framebuffer_deinit(dev); +} + +/* + * normal rendering + */ +ZTEST(draw_circle, test_draw_circle_10_at_0_0) +{ + struct cfb_position center = {0, 0}; + uint16_t radius = 10; + + zassert_ok(cfb_draw_circle(dev, ¢er, radius), ""); + zassert_ok(cfb_framebuffer_finalize(dev), ""); + + zassert_true(verify_image(0, 0, circle10, 20, 20), ""); +} + +ZTEST(draw_circle, test_draw_circle_10_at_1_1) +{ + struct cfb_position center = {1, 1}; + uint16_t radius = 10; + + zassert_ok(cfb_draw_circle(dev, ¢er, radius), ""); + zassert_ok(cfb_framebuffer_finalize(dev), ""); + + zassert_true(verify_image(1, 1, circle10, 20, 20), ""); +} + +/* tile border case */ +ZTEST(draw_circle, test_draw_circle_10_at_9_15) +{ + struct cfb_position center = {9, 15}; + uint16_t radius = 10; + + zassert_ok(cfb_draw_circle(dev, ¢er, radius), ""); + zassert_ok(cfb_framebuffer_finalize(dev), ""); + + zassert_true(verify_image(9, 15, circle10, 20, 20), ""); +} + +ZTEST(draw_circle, test_draw_circle_10_at_10_16) +{ + struct cfb_position center = {10, 16}; + uint16_t radius = 10; + + zassert_ok(cfb_draw_circle(dev, ¢er, radius), ""); + zassert_ok(cfb_framebuffer_finalize(dev), ""); + + zassert_true(verify_image(10, 16, circle10, 20, 20), ""); +} + +ZTEST(draw_circle, test_draw_circle_10_at_11_17) +{ + struct cfb_position center = {11, 17}; + uint16_t radius = 10; + + zassert_ok(cfb_draw_circle(dev, ¢er, radius), ""); + zassert_ok(cfb_framebuffer_finalize(dev), ""); + + zassert_true(verify_image(11, 17, circle10, 20, 20), ""); +} + +/* + * Case of including coordinates outside the area + */ +ZTEST(draw_circle, test_draw_circle_10_outside_top_left) +{ + struct cfb_position center = {-(20 - 3), -(20 - 4)}; + uint16_t radius = 10; + + zassert_ok(cfb_draw_circle(dev, ¢er, radius), ""); + zassert_ok(cfb_framebuffer_finalize(dev), ""); + + zassert_true(verify_image(0, 0, outside_top_left, 3, 4), ""); +} + +ZTEST(draw_circle, test_draw_circle_10_outside_top_right) +{ + struct cfb_position center = {display_width - 5, -(20 - 8)}; + uint16_t radius = 10; + + zassert_ok(cfb_draw_circle(dev, ¢er, radius), ""); + zassert_ok(cfb_framebuffer_finalize(dev), ""); + + zassert_true(verify_image(display_width - 5, 0, outside_top_right, 5, 8), ""); +} + +ZTEST(draw_circle, test_draw_circle_10_outside_bottom_right) +{ + struct cfb_position center = {display_width - 3, display_height - 5}; + uint16_t radius = 10; + + zassert_ok(cfb_draw_circle(dev, ¢er, radius), ""); + zassert_ok(cfb_framebuffer_finalize(dev), ""); + + zassert_true( + verify_image(display_width - 3, display_height - 5, outside_bottom_right, 3, 5), + ""); +} + +ZTEST(draw_circle, test_draw_circle_10_outside_bottom_left) +{ + struct cfb_position center = {-(20 - 3), display_height - 14}; + uint16_t radius = 10; + + zassert_ok(cfb_draw_circle(dev, ¢er, radius), ""); + zassert_ok(cfb_framebuffer_finalize(dev), ""); + + zassert_true(verify_image(0, display_height - 14, outside_bottom_left, 3, 14), ""); +} + +ZTEST_SUITE(draw_circle, NULL, NULL, cfb_test_before, cfb_test_after, NULL); diff --git a/tests/subsys/display/cfb/basic/src/testdata.c b/tests/subsys/display/cfb/basic/src/testdata.c index b15b6918ae2..94bdcb9435c 100644 --- a/tests/subsys/display/cfb/basic/src/testdata.c +++ b/tests/subsys/display/cfb/basic/src/testdata.c @@ -677,6 +677,67 @@ uint32_t rectspace1123[] = { 0xffffffff, }; +uint32_t circle10[] = { + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xff000000U, 0xff000000U, 0xff000000U, 0xff000000U, 0xff000000U, 0xff000000U, 0xff000000U, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xff000000U, 0xff000000U, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xff000000U, + 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xff000000U, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xff000000U, 0xffffffffU, 0xffffffffU, 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xff000000U, 0xffffffffU, 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xff000000U, + 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xff000000U, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xff000000U, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xff000000U, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xff000000U, 0xffffffffU, + 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xff000000U, 0xffffffffU, 0xffffffffU, + 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xff000000U, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xff000000U, 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, 0xffffffffU, 0xff000000U, 0xff000000U, 0xffffffffU, 0xffffffffU, 0xffffffffU, + 0xffffffffU, +}; + #ifdef MAIN #include @@ -719,6 +780,7 @@ int main(int argc, char *argv[]) to_ppm("outside_top_right.ppm", outside_top_right, 5, 8); to_ppm("rectspace1016.ppm", rectspace1016, 10, 16); to_ppm("rectspace1123.ppm", rectspace1123, 11, 23); + to_ppm("circle10.ppm", circle10, 20, 20); return 0; } diff --git a/tests/subsys/display/cfb/basic/src/testdata.h b/tests/subsys/display/cfb/basic/src/testdata.h index 4a4db8de2fa..eae37b4eed7 100644 --- a/tests/subsys/display/cfb/basic/src/testdata.h +++ b/tests/subsys/display/cfb/basic/src/testdata.h @@ -19,5 +19,6 @@ extern uint32_t outside_top_left[]; extern uint32_t outside_top_right[]; extern uint32_t rectspace1016[]; extern uint32_t rectspace1123[]; +extern uint32_t circle10[]; #endif /* TESTS_SUBSYS_DISPLAY_CFB_DRAW_TEXT_AND_PRINT_SRC_TESTDATA_H__ */