Devicetree: Devicetree Bindings: Add tests for new DT_ENUM_ macros

Test the new c-macros for dt enums. The new macros are already used in
the existing macros. As an example, DT_ENUM_IDX(node_id, prop) uses
DT_ENUM_IDX_BY_IDX(node_id, prop, 0) to get its result. However, this is
insufficient for testing the complete functionality of these macros.
Therefore, additional tests are added to make sure they work
appropriately for other indices besides 0.

Signed-off-by: Joel Hirsbrunner <jhirsbrunner@baumer.com>
This commit is contained in:
Joel Hirsbrunner 2024-10-04 21:43:28 +02:00 committed by Anas Nashif
commit 405c6718ed
4 changed files with 118 additions and 0 deletions

View file

@ -0,0 +1,21 @@
# Copyright (c) 2020 Linaro Limited
# SPDX-License-Identifier: Apache-2.0
description: Test enum property container
compatible: "vnd,enum-int-array-holder"
include: [base.yaml]
properties:
val:
type: array
enum:
- 7
- 6
- 5
- 4
- 3
- 2
- 1
- 0

View file

@ -0,0 +1,17 @@
# Copyright (c) 2020 Linaro Limited
# SPDX-License-Identifier: Apache-2.0
description: Test enum property container
compatible: "vnd,enum-string-array-holder"
include: [base.yaml]
properties:
val:
type: string-array
enum:
- foo
- bar
- baz
- zoo

View file

@ -114,6 +114,16 @@
compatible = "vnd,enum-required-false-holder-inst"; compatible = "vnd,enum-required-false-holder-inst";
}; };
test_enum_string_array: enum-8 {
compatible = "vnd,enum-string-array-holder";
val = "foo", "zoo", "foo";
};
test_enum_int_array: enum-9 {
compatible = "vnd,enum-int-array-holder";
val = <4 3 4 0>;
};
/* /*
* disabled/reserved should be the only nodes with their * disabled/reserved should be the only nodes with their
* compatible in the tree. * compatible in the tree.

View file

@ -2010,6 +2010,41 @@ ZTEST(devicetree_api, test_enums)
zassert_true(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_default_0), val, 5), ""); zassert_true(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_default_0), val, 5), "");
zassert_false(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_default_0), val, 6), ""); zassert_false(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_default_0), val, 6), "");
zassert_false(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_default_0), val, 7), ""); zassert_false(DT_ENUM_HAS_VALUE(DT_NODELABEL(test_enum_int_default_0), val, 7), "");
/* DT_ENUM_IDX_BY_IDX and DT_ENUM_HAS_VALUE_BY_IDX on string-array enum */
zassert_equal(DT_ENUM_IDX_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 0), 0);
zassert_equal(DT_ENUM_IDX_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 1), 3);
zassert_equal(DT_ENUM_IDX_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 2), 0);
zassert_true(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 0, foo));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 0, bar));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 0, baz));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 0, zoo));
zassert_true(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 1, zoo));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 1, foo));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 1, bar));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 1, baz));
zassert_true(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 2, foo));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 2, baz));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 2, bar));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_string_array), val, 2, zoo));
/* DT_ENUM_IDX_BY_IDX and DT_ENUM_HAS_VALUE_BY_IDX on int-array enum */
zassert_equal(DT_ENUM_IDX_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 0), 3);
zassert_equal(DT_ENUM_IDX_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 1), 4);
zassert_equal(DT_ENUM_IDX_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 2), 3);
zassert_equal(DT_ENUM_IDX_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 3), 7);
zassert_true(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 0, 4));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 0, 5));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 0, 6));
zassert_true(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 1, 3));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 1, 0));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 1, 1));
zassert_true(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 2, 4));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 2, 3));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 2, 7));
zassert_true(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 3, 0));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 3, 2));
zassert_false(DT_ENUM_HAS_VALUE_BY_IDX(DT_NODELABEL(test_enum_int_array), val, 3, 1));
} }
#undef TO_MY_ENUM #undef TO_MY_ENUM
#undef TO_MY_ENUM_2 #undef TO_MY_ENUM_2
@ -2028,6 +2063,18 @@ ZTEST(devicetree_api, test_enums_required_false)
zassert_equal(DT_ENUM_IDX_OR(DT_NODELABEL(test_enum_int_default_1), zassert_equal(DT_ENUM_IDX_OR(DT_NODELABEL(test_enum_int_default_1),
val, 4), val, 4),
4, ""); 4, "");
/* DT_ENUM_IDX_OR on string-array value */
zassert_equal(DT_ENUM_IDX_BY_IDX_OR(DT_NODELABEL(test_enum_string_array), val, 0, 2),
0, "");
zassert_equal(DT_ENUM_IDX_BY_IDX_OR(DT_NODELABEL(test_enum_string_array), val, 5, 2),
2, "");
/* DT_ENUM_IDX_OR on int-array value */
zassert_equal(DT_ENUM_IDX_BY_IDX_OR(DT_NODELABEL(test_enum_int_array),
val, 0, 7),
3, "");
zassert_equal(DT_ENUM_IDX_BY_IDX_OR(DT_NODELABEL(test_enum_int_array),
val, 4, 7),
7, "");
} }
ZTEST(devicetree_api, test_inst_enums) ZTEST(devicetree_api, test_inst_enums)
@ -2046,6 +2093,29 @@ ZTEST(devicetree_api, test_inst_enums)
zassert_false(DT_INST_ENUM_HAS_VALUE(0, val, zero), ""); zassert_false(DT_INST_ENUM_HAS_VALUE(0, val, zero), "");
zassert_false(DT_INST_ENUM_HAS_VALUE(0, val, one), ""); zassert_false(DT_INST_ENUM_HAS_VALUE(0, val, one), "");
zassert_false(DT_INST_ENUM_HAS_VALUE(0, val, two), ""); zassert_false(DT_INST_ENUM_HAS_VALUE(0, val, two), "");
/* Also add tests for these:
* DT_INST_ENUM_IDX_BY_IDX
* DT_INST_ENUM_IDX_BY_IDX_OR
* DT_INST_ENUM_HAS_VALUE_BY_IDX
*/
#undef DT_DRV_COMPAT
#define DT_DRV_COMPAT vnd_enum_string_array_holder
zassert_equal(DT_INST_ENUM_IDX_BY_IDX(0, val, 0), 0, "");
zassert_equal(DT_INST_ENUM_IDX_BY_IDX(0, val, 1), 3, "");
zassert_true(DT_INST_ENUM_HAS_VALUE_BY_IDX(0, val, 0, foo), "");
zassert_false(DT_INST_ENUM_HAS_VALUE_BY_IDX(0, val, 0, zoo), "");
zassert_true(DT_INST_ENUM_HAS_VALUE_BY_IDX(0, val, 1, zoo), "");
zassert_false(DT_INST_ENUM_HAS_VALUE_BY_IDX(0, val, 2, baz), "");
zassert_equal(DT_INST_ENUM_IDX_BY_IDX_OR(0, val, 0, 10), 0, "");
zassert_equal(DT_INST_ENUM_IDX_BY_IDX_OR(0, val, 4, 10), 10, "");
#undef DT_DRV_COMPAT
#define DT_DRV_COMPAT vnd_enum_int_array_holder
zassert_equal(DT_INST_ENUM_IDX_BY_IDX(0, val, 0), 3, "");
zassert_equal(DT_INST_ENUM_IDX_BY_IDX(0, val, 3), 7, "");
zassert_equal(DT_INST_ENUM_IDX_BY_IDX_OR(0, val, 1, 10), 4, "");
zassert_equal(DT_INST_ENUM_IDX_BY_IDX_OR(0, val, 123654, 10), 10, "");
} }
#undef DT_DRV_COMPAT #undef DT_DRV_COMPAT