1 #if LV_BUILD_TEST
2 #include "../lvgl.h"
3 #include "../../lvgl_private.h"
4 
5 #include "unity/unity.h"
6 
7 #define PCT_MAX_VALUE 268435455
8 
setUp(void)9 void setUp(void)
10 {
11     /* Function run before every test */
12 }
13 
tearDown(void)14 void tearDown(void)
15 {
16     /* Function run after every test */
17     lv_obj_clean(lv_screen_active());
18 }
19 
test_pct(void)20 void test_pct(void)
21 {
22     int32_t pct_val;
23     int32_t pct_coord;
24 
25     pct_val = 0;
26     pct_coord = lv_pct(pct_val);
27     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
28     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
29     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
30     TEST_ASSERT_EQUAL_INT32(pct_val, LV_COORD_GET_PCT(pct_coord));
31 
32     pct_val = 1;
33     pct_coord = lv_pct(pct_val);
34     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
35     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
36     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
37     TEST_ASSERT_EQUAL_INT32(pct_val, LV_COORD_GET_PCT(pct_coord));
38 
39     pct_val = 100;
40     pct_coord = lv_pct(pct_val);
41     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
42     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
43     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
44     TEST_ASSERT_EQUAL_INT32(pct_val, LV_COORD_GET_PCT(pct_coord));
45 
46     pct_val = 111111111;
47     pct_coord = lv_pct(pct_val);
48     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
49     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
50     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
51     TEST_ASSERT_EQUAL_INT32(pct_val, LV_COORD_GET_PCT(pct_coord));
52 
53     pct_val = PCT_MAX_VALUE;
54     pct_coord = lv_pct(pct_val);
55     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
56     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
57     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
58     TEST_ASSERT_EQUAL_INT32(pct_val, LV_COORD_GET_PCT(pct_coord));
59 
60     pct_val = -1;
61     pct_coord = lv_pct(pct_val);
62     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
63     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
64     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
65     TEST_ASSERT_EQUAL_INT32(pct_val, LV_COORD_GET_PCT(pct_coord));
66 
67     pct_val = -100;
68     pct_coord = lv_pct(pct_val);
69     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
70     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
71     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
72     TEST_ASSERT_EQUAL_INT32(pct_val, LV_COORD_GET_PCT(pct_coord));
73 
74     pct_val = -111111111;
75     pct_coord = lv_pct(pct_val);
76     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
77     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
78     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
79     TEST_ASSERT_EQUAL_INT32(pct_val, LV_COORD_GET_PCT(pct_coord));
80 
81     pct_val = -PCT_MAX_VALUE;
82     pct_coord = lv_pct(pct_val);
83     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
84     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
85     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
86     TEST_ASSERT_EQUAL_INT32(pct_val, LV_COORD_GET_PCT(pct_coord));
87 
88     /**
89      * Out of bounds behavior.
90      * The pct value will be clamped to the max/min value if it's out of bounds.
91     */
92 
93     pct_val = PCT_MAX_VALUE + 1;
94     pct_coord = lv_pct(pct_val);
95     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
96     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
97     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
98     TEST_ASSERT_EQUAL_INT32(PCT_MAX_VALUE, LV_COORD_GET_PCT(pct_coord));
99 
100     pct_val = PCT_MAX_VALUE + 100;
101     pct_coord = lv_pct(pct_val);
102     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
103     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
104     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
105     TEST_ASSERT_EQUAL_INT32(PCT_MAX_VALUE, LV_COORD_GET_PCT(pct_coord));
106 
107     pct_val = -PCT_MAX_VALUE - 1;
108     pct_coord = lv_pct(pct_val);
109     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
110     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
111     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
112     TEST_ASSERT_EQUAL_INT32(-PCT_MAX_VALUE, LV_COORD_GET_PCT(pct_coord));
113 
114     pct_val = -PCT_MAX_VALUE - 100;
115     pct_coord = lv_pct(pct_val);
116     TEST_ASSERT_TRUE(LV_COORD_IS_PCT(pct_coord));
117     TEST_ASSERT_FALSE(LV_COORD_IS_PX(pct_coord));
118     TEST_ASSERT_TRUE(LV_COORD_IS_SPEC(pct_coord));
119     TEST_ASSERT_EQUAL_INT32(-PCT_MAX_VALUE, LV_COORD_GET_PCT(pct_coord));
120 }
121 
122 #endif
123