# SPDX-License-Identifier: GPL-2.0-only
#
# Industrial I/O subsystem unit tests configuration
#

# Keep in alphabetical order
config IIO_GTS_KUNIT_TEST
	tristate "Test IIO gain-time-scale helpers" if !KUNIT_ALL_TESTS
	depends on KUNIT
	select IIO_GTS_HELPER
	default KUNIT_ALL_TESTS
	help
	  build unit tests for the IIO light sensor gain-time-scale helpers.

	  For more information on KUnit and unit tests in general, please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N. Keep in alphabetical order

config IIO_RESCALE_KUNIT_TEST
	tristate "Test IIO rescale conversion functions" if !KUNIT_ALL_TESTS
	depends on KUNIT && IIO_RESCALE
	default KUNIT_ALL_TESTS
	help
	  Build unit tests for the iio-rescale code.

	  For more information on KUnit and unit tests in general, please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config IIO_FORMAT_KUNIT_TEST
	tristate "Test IIO formatting functions" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  build unit tests for the IIO formatting functions.

	  For more information on KUnit and unit tests in general, please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config IIO_MULTIPLY_KUNIT_TEST
	tristate "Test IIO multiply functions" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  build unit tests for the IIO multiply functions.

	  For more information on KUnit and unit tests in general, please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.
