1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Unit tests for IIO formatting functions
4 * Copyright (c) 2020 Lars-Peter Clausen <lars@metafoo.de>
7 #include <kunit/test.h>
8 #include <linux/iio/iio.h>
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)); \
15 static void iio_test_iio_format_value_integer(struct kunit *test)
21 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
22 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
25 ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
26 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "42\n");
29 ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
30 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-23\n");
33 ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
34 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0\n");
37 ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
38 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "2147483647\n");
41 ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
42 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-2147483648\n");
45 static void iio_test_iio_format_value_fixedpoint(struct kunit *test)
51 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
52 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
106 static void iio_test_iio_format_value_fractional(struct kunit *test)
112 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
113 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
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");
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");
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");
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");
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");
146 static void iio_test_iio_format_value_fractional_log2(struct kunit *test)
152 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
153 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
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");
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");
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");
174 values[0] = -1234567;
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");
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");
186 static void iio_test_iio_format_value_multiple(struct kunit *test)
188 int values[] = {1, -2, 3, -4, 5};
192 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
193 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
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");
200 static void iio_test_iio_format_value_integer_64(struct kunit *test)
207 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
208 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
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");
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");
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");
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");
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");
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");
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");
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),
263 static struct kunit_suite iio_format_test_suite = {
264 .name = "iio-format",
265 .test_cases = iio_format_test_cases,
267 kunit_test_suite(iio_format_test_suite);