tests: display: cfb: added tests for draw_circle API

Added tests for the newly added cfb_draw_circle API.

Signed-off-by: Yishai Jaffe <yishai1999@gmail.com>
This commit is contained in:
Yishai Jaffe 2025-06-10 12:28:28 +03:00 committed by Daniel DeGrasse
parent 077ba1078b
commit 40123c6775
4 changed files with 220 additions and 0 deletions

View File

@ -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

View File

@ -0,0 +1,155 @@
/*
* Copyright (c) 2024 TOKITA Hiroshi
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/drivers/display.h>
#include <zephyr/ztest.h>
#include <zephyr/device.h>
#include <zephyr/logging/log.h>
#include <zephyr/display/cfb.h>
#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, &center, 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, &center, 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, &center, 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, &center, 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, &center, 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, &center, 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, &center, 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, &center, 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, &center, 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);

View File

@ -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 <stdio.h>
@ -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;
}

View File

@ -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__ */