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
);
269 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
270 MODULE_DESCRIPTION("Test IIO formatting functions");
271 MODULE_LICENSE("GPL v2");