brintos

brintos / linux-shallow public Read only

0
0
Text · 8.4 KiB · fc67e6b Raw
272 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/* Unit tests for IIO formatting functions3 *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 15static 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 45static 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 106static 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 146static 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 186static 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 200static 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 253static 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 263static struct kunit_suite iio_format_test_suite = {264	.name = "iio-format",265	.test_cases = iio_format_test_cases,266};267kunit_test_suite(iio_format_test_suite);268 269MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");270MODULE_DESCRIPTION("Test IIO formatting functions");271MODULE_LICENSE("GPL v2");272