arm64: dts: qcom: sm8550: add TRNG node
[linux-modified.git] / drivers / iio / test / iio-test-format.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Unit tests for IIO formatting functions
3  *
4  * Copyright (c) 2020 Lars-Peter Clausen <lars@metafoo.de>
5  */
6
7 #include <kunit/test.h>
8 #include <linux/iio/iio.h>
9
10 #define IIO_TEST_FORMAT_EXPECT_EQ(_test, _buf, _ret, _val) do { \
11                 KUNIT_EXPECT_EQ(_test, strlen(_buf), _ret); \
12                 KUNIT_EXPECT_STREQ(_test, (_buf), (_val)); \
13         } while (0)
14
15 static void iio_test_iio_format_value_integer(struct kunit *test)
16 {
17         char *buf;
18         int val;
19         int ret;
20
21         buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
22         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
23
24         val = 42;
25         ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
26         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "42\n");
27
28         val = -23;
29         ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
30         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-23\n");
31
32         val = 0;
33         ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
34         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0\n");
35
36         val = INT_MAX;
37         ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
38         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "2147483647\n");
39
40         val = INT_MIN;
41         ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
42         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-2147483648\n");
43 }
44
45 static void iio_test_iio_format_value_fixedpoint(struct kunit *test)
46 {
47         int values[2];
48         char *buf;
49         int ret;
50
51         buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
52         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
53
54         /* positive >= 1 */
55         values[0] = 1;
56         values[1] = 10;
57
58         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO, ARRAY_SIZE(values), values);
59         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "1.000010\n");
60
61         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO_DB, ARRAY_SIZE(values), values);
62         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "1.000010 dB\n");
63
64         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_NANO, ARRAY_SIZE(values), values);
65         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "1.000000010\n");
66
67         /* positive < 1 */
68         values[0] = 0;
69         values[1] = 12;
70
71         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO, ARRAY_SIZE(values), values);
72         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.000012\n");
73
74         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO_DB, ARRAY_SIZE(values), values);
75         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.000012 dB\n");
76
77         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_NANO, ARRAY_SIZE(values), values);
78         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.000000012\n");
79
80         /* negative <= -1 */
81         values[0] = -1;
82         values[1] = 10;
83
84         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO, ARRAY_SIZE(values), values);
85         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-1.000010\n");
86
87         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO_DB, ARRAY_SIZE(values), values);
88         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-1.000010 dB\n");
89
90         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_NANO, ARRAY_SIZE(values), values);
91         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-1.000000010\n");
92
93         /* negative > -1 */
94         values[0] = 0;
95         values[1] = -123;
96         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO, ARRAY_SIZE(values), values);
97         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-0.000123\n");
98
99         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO_DB, ARRAY_SIZE(values), values);
100         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-0.000123 dB\n");
101
102         ret = iio_format_value(buf, IIO_VAL_INT_PLUS_NANO, ARRAY_SIZE(values), values);
103         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-0.000000123\n");
104 }
105
106 static void iio_test_iio_format_value_fractional(struct kunit *test)
107 {
108         int values[2];
109         char *buf;
110         int ret;
111
112         buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
113         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
114
115         /* positive < 1 */
116         values[0] = 1;
117         values[1] = 10;
118         ret = iio_format_value(buf, IIO_VAL_FRACTIONAL, ARRAY_SIZE(values), values);
119         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.100000000\n");
120
121         /* positive >= 1 */
122         values[0] = 100;
123         values[1] = 3;
124         ret = iio_format_value(buf, IIO_VAL_FRACTIONAL, ARRAY_SIZE(values), values);
125         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "33.333333333\n");
126
127         /* negative > -1 */
128         values[0] = -1;
129         values[1] = 1000000000;
130         ret = iio_format_value(buf, IIO_VAL_FRACTIONAL, ARRAY_SIZE(values), values);
131         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-0.000000001\n");
132
133         /* negative <= -1 */
134         values[0] = -200;
135         values[1] = 3;
136         ret = iio_format_value(buf, IIO_VAL_FRACTIONAL, ARRAY_SIZE(values), values);
137         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-66.666666666\n");
138
139         /* Zero */
140         values[0] = 0;
141         values[1] = -10;
142         ret = iio_format_value(buf, IIO_VAL_FRACTIONAL, ARRAY_SIZE(values), values);
143         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.000000000\n");
144 }
145
146 static void iio_test_iio_format_value_fractional_log2(struct kunit *test)
147 {
148         int values[2];
149         char *buf;
150         int ret;
151
152         buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
153         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
154
155         /* positive < 1 */
156         values[0] = 123;
157         values[1] = 10;
158         ret = iio_format_value(buf, IIO_VAL_FRACTIONAL_LOG2, ARRAY_SIZE(values), values);
159         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.120117187\n");
160
161         /* positive >= 1 */
162         values[0] = 1234567;
163         values[1] = 10;
164         ret = iio_format_value(buf, IIO_VAL_FRACTIONAL_LOG2, ARRAY_SIZE(values), values);
165         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "1205.631835937\n");
166
167         /* negative > -1 */
168         values[0] = -123;
169         values[1] = 10;
170         ret = iio_format_value(buf, IIO_VAL_FRACTIONAL_LOG2, ARRAY_SIZE(values), values);
171         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-0.120117187\n");
172
173         /* negative <= -1 */
174         values[0] = -1234567;
175         values[1] = 10;
176         ret = iio_format_value(buf, IIO_VAL_FRACTIONAL_LOG2, ARRAY_SIZE(values), values);
177         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-1205.631835937\n");
178
179         /* Zero */
180         values[0] = 0;
181         values[1] = 10;
182         ret = iio_format_value(buf, IIO_VAL_FRACTIONAL_LOG2, ARRAY_SIZE(values), values);
183         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.000000000\n");
184 }
185
186 static void iio_test_iio_format_value_multiple(struct kunit *test)
187 {
188         int values[] = {1, -2, 3, -4, 5};
189         char *buf;
190         int ret;
191
192         buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
193         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
194
195         ret = iio_format_value(buf, IIO_VAL_INT_MULTIPLE,
196                                ARRAY_SIZE(values), values);
197         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "1 -2 3 -4 5 \n");
198 }
199
200 static void iio_test_iio_format_value_integer_64(struct kunit *test)
201 {
202         int values[2];
203         s64 value;
204         char *buf;
205         int ret;
206
207         buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
208         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
209
210         value = 24;
211         values[0] = lower_32_bits(value);
212         values[1] = upper_32_bits(value);
213         ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
214         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "24\n");
215
216         value = -24;
217         values[0] = lower_32_bits(value);
218         values[1] = upper_32_bits(value);
219         ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
220         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-24\n");
221
222         value = 0;
223         values[0] = lower_32_bits(value);
224         values[1] = upper_32_bits(value);
225         ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
226         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0\n");
227
228         value = UINT_MAX;
229         values[0] = lower_32_bits(value);
230         values[1] = upper_32_bits(value);
231         ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
232         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "4294967295\n");
233
234         value = -((s64)UINT_MAX);
235         values[0] = lower_32_bits(value);
236         values[1] = upper_32_bits(value);
237         ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
238         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-4294967295\n");
239
240         value = LLONG_MAX;
241         values[0] = lower_32_bits(value);
242         values[1] = upper_32_bits(value);
243         ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
244         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "9223372036854775807\n");
245
246         value = LLONG_MIN;
247         values[0] = lower_32_bits(value);
248         values[1] = upper_32_bits(value);
249         ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
250         IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-9223372036854775808\n");
251 }
252
253 static struct kunit_case iio_format_test_cases[] = {
254                 KUNIT_CASE(iio_test_iio_format_value_integer),
255                 KUNIT_CASE(iio_test_iio_format_value_fixedpoint),
256                 KUNIT_CASE(iio_test_iio_format_value_fractional),
257                 KUNIT_CASE(iio_test_iio_format_value_fractional_log2),
258                 KUNIT_CASE(iio_test_iio_format_value_multiple),
259                 KUNIT_CASE(iio_test_iio_format_value_integer_64),
260                 {}
261 };
262
263 static struct kunit_suite iio_format_test_suite = {
264         .name = "iio-format",
265         .test_cases = iio_format_test_cases,
266 };
267 kunit_test_suite(iio_format_test_suite);
268
269 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
270 MODULE_DESCRIPTION("Test IIO formatting functions");
271 MODULE_LICENSE("GPL v2");