0001
0002
0003
0004
0005
0006
0007 #include <kunit/test.h>
0008 #include <linux/iio/iio.h>
0009
0010 #define IIO_TEST_FORMAT_EXPECT_EQ(_test, _buf, _ret, _val) do { \
0011 KUNIT_EXPECT_EQ(_test, strlen(_buf), _ret); \
0012 KUNIT_EXPECT_STREQ(_test, (_buf), (_val)); \
0013 } while (0)
0014
0015 static void iio_test_iio_format_value_integer(struct kunit *test)
0016 {
0017 char *buf;
0018 int val;
0019 int ret;
0020
0021 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
0022 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
0023
0024 val = 42;
0025 ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
0026 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "42\n");
0027
0028 val = -23;
0029 ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
0030 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-23\n");
0031
0032 val = 0;
0033 ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
0034 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0\n");
0035
0036 val = INT_MAX;
0037 ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
0038 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "2147483647\n");
0039
0040 val = INT_MIN;
0041 ret = iio_format_value(buf, IIO_VAL_INT, 1, &val);
0042 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-2147483648\n");
0043 }
0044
0045 static void iio_test_iio_format_value_fixedpoint(struct kunit *test)
0046 {
0047 int values[2];
0048 char *buf;
0049 int ret;
0050
0051 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
0052 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
0053
0054
0055 values[0] = 1;
0056 values[1] = 10;
0057
0058 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO, ARRAY_SIZE(values), values);
0059 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "1.000010\n");
0060
0061 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO_DB, ARRAY_SIZE(values), values);
0062 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "1.000010 dB\n");
0063
0064 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_NANO, ARRAY_SIZE(values), values);
0065 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "1.000000010\n");
0066
0067
0068 values[0] = 0;
0069 values[1] = 12;
0070
0071 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO, ARRAY_SIZE(values), values);
0072 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.000012\n");
0073
0074 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO_DB, ARRAY_SIZE(values), values);
0075 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.000012 dB\n");
0076
0077 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_NANO, ARRAY_SIZE(values), values);
0078 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.000000012\n");
0079
0080
0081 values[0] = -1;
0082 values[1] = 10;
0083
0084 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO, ARRAY_SIZE(values), values);
0085 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-1.000010\n");
0086
0087 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO_DB, ARRAY_SIZE(values), values);
0088 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-1.000010 dB\n");
0089
0090 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_NANO, ARRAY_SIZE(values), values);
0091 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-1.000000010\n");
0092
0093
0094 values[0] = 0;
0095 values[1] = -123;
0096 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO, ARRAY_SIZE(values), values);
0097 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-0.000123\n");
0098
0099 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_MICRO_DB, ARRAY_SIZE(values), values);
0100 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-0.000123 dB\n");
0101
0102 ret = iio_format_value(buf, IIO_VAL_INT_PLUS_NANO, ARRAY_SIZE(values), values);
0103 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-0.000000123\n");
0104 }
0105
0106 static void iio_test_iio_format_value_fractional(struct kunit *test)
0107 {
0108 int values[2];
0109 char *buf;
0110 int ret;
0111
0112 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
0113 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
0114
0115
0116 values[0] = 1;
0117 values[1] = 10;
0118 ret = iio_format_value(buf, IIO_VAL_FRACTIONAL, ARRAY_SIZE(values), values);
0119 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.100000000\n");
0120
0121
0122 values[0] = 100;
0123 values[1] = 3;
0124 ret = iio_format_value(buf, IIO_VAL_FRACTIONAL, ARRAY_SIZE(values), values);
0125 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "33.333333333\n");
0126
0127
0128 values[0] = -1;
0129 values[1] = 1000000000;
0130 ret = iio_format_value(buf, IIO_VAL_FRACTIONAL, ARRAY_SIZE(values), values);
0131 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-0.000000001\n");
0132
0133
0134 values[0] = -200;
0135 values[1] = 3;
0136 ret = iio_format_value(buf, IIO_VAL_FRACTIONAL, ARRAY_SIZE(values), values);
0137 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-66.666666666\n");
0138
0139
0140 values[0] = 0;
0141 values[1] = -10;
0142 ret = iio_format_value(buf, IIO_VAL_FRACTIONAL, ARRAY_SIZE(values), values);
0143 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.000000000\n");
0144 }
0145
0146 static void iio_test_iio_format_value_fractional_log2(struct kunit *test)
0147 {
0148 int values[2];
0149 char *buf;
0150 int ret;
0151
0152 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
0153 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
0154
0155
0156 values[0] = 123;
0157 values[1] = 10;
0158 ret = iio_format_value(buf, IIO_VAL_FRACTIONAL_LOG2, ARRAY_SIZE(values), values);
0159 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.120117187\n");
0160
0161
0162 values[0] = 1234567;
0163 values[1] = 10;
0164 ret = iio_format_value(buf, IIO_VAL_FRACTIONAL_LOG2, ARRAY_SIZE(values), values);
0165 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "1205.631835937\n");
0166
0167
0168 values[0] = -123;
0169 values[1] = 10;
0170 ret = iio_format_value(buf, IIO_VAL_FRACTIONAL_LOG2, ARRAY_SIZE(values), values);
0171 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-0.120117187\n");
0172
0173
0174 values[0] = -1234567;
0175 values[1] = 10;
0176 ret = iio_format_value(buf, IIO_VAL_FRACTIONAL_LOG2, ARRAY_SIZE(values), values);
0177 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-1205.631835937\n");
0178
0179
0180 values[0] = 0;
0181 values[1] = 10;
0182 ret = iio_format_value(buf, IIO_VAL_FRACTIONAL_LOG2, ARRAY_SIZE(values), values);
0183 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0.000000000\n");
0184 }
0185
0186 static void iio_test_iio_format_value_multiple(struct kunit *test)
0187 {
0188 int values[] = {1, -2, 3, -4, 5};
0189 char *buf;
0190 int ret;
0191
0192 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
0193 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
0194
0195 ret = iio_format_value(buf, IIO_VAL_INT_MULTIPLE,
0196 ARRAY_SIZE(values), values);
0197 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "1 -2 3 -4 5 \n");
0198 }
0199
0200 static void iio_test_iio_format_value_integer_64(struct kunit *test)
0201 {
0202 int values[2];
0203 s64 value;
0204 char *buf;
0205 int ret;
0206
0207 buf = kunit_kmalloc(test, PAGE_SIZE, GFP_KERNEL);
0208 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
0209
0210 value = 24;
0211 values[0] = lower_32_bits(value);
0212 values[1] = upper_32_bits(value);
0213 ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
0214 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "24\n");
0215
0216 value = -24;
0217 values[0] = lower_32_bits(value);
0218 values[1] = upper_32_bits(value);
0219 ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
0220 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-24\n");
0221
0222 value = 0;
0223 values[0] = lower_32_bits(value);
0224 values[1] = upper_32_bits(value);
0225 ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
0226 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "0\n");
0227
0228 value = UINT_MAX;
0229 values[0] = lower_32_bits(value);
0230 values[1] = upper_32_bits(value);
0231 ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
0232 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "4294967295\n");
0233
0234 value = -((s64)UINT_MAX);
0235 values[0] = lower_32_bits(value);
0236 values[1] = upper_32_bits(value);
0237 ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
0238 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-4294967295\n");
0239
0240 value = LLONG_MAX;
0241 values[0] = lower_32_bits(value);
0242 values[1] = upper_32_bits(value);
0243 ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
0244 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "9223372036854775807\n");
0245
0246 value = LLONG_MIN;
0247 values[0] = lower_32_bits(value);
0248 values[1] = upper_32_bits(value);
0249 ret = iio_format_value(buf, IIO_VAL_INT_64, ARRAY_SIZE(values), values);
0250 IIO_TEST_FORMAT_EXPECT_EQ(test, buf, ret, "-9223372036854775808\n");
0251 }
0252
0253 static struct kunit_case iio_format_test_cases[] = {
0254 KUNIT_CASE(iio_test_iio_format_value_integer),
0255 KUNIT_CASE(iio_test_iio_format_value_fixedpoint),
0256 KUNIT_CASE(iio_test_iio_format_value_fractional),
0257 KUNIT_CASE(iio_test_iio_format_value_fractional_log2),
0258 KUNIT_CASE(iio_test_iio_format_value_multiple),
0259 KUNIT_CASE(iio_test_iio_format_value_integer_64),
0260 {}
0261 };
0262
0263 static struct kunit_suite iio_format_test_suite = {
0264 .name = "iio-format",
0265 .test_cases = iio_format_test_cases,
0266 };
0267 kunit_test_suite(iio_format_test_suite);
0268
0269 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
0270 MODULE_DESCRIPTION("Test IIO formatting functions");
0271 MODULE_LICENSE("GPL v2");