mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-10-29 05:40:16 -04:00
tests: add enum bitfield test
Signed-off-by: Simon Ser <contact@emersion.fr>
(cherry picked from commit fa1811ce3e)
This commit is contained in:
parent
f72f2aec55
commit
619d99cbba
6 changed files with 150 additions and 0 deletions
|
|
@ -106,6 +106,29 @@ enum intf_A_foo {
|
|||
#define INTF_A_FOO_DEPRECATED_SINCE_VERSION 2
|
||||
#endif /* INTF_A_FOO_ENUM */
|
||||
|
||||
#ifndef INTF_A_BAR_ENUM
|
||||
#define INTF_A_BAR_ENUM
|
||||
enum intf_A_bar {
|
||||
/**
|
||||
* this is the first
|
||||
*/
|
||||
INTF_A_BAR_FIRST = 0x01,
|
||||
/**
|
||||
* this is the second
|
||||
*/
|
||||
INTF_A_BAR_SECOND = 0x02,
|
||||
/**
|
||||
* this is the third
|
||||
* @since 2
|
||||
*/
|
||||
INTF_A_BAR_THIRD = 0x04,
|
||||
};
|
||||
/**
|
||||
* @ingroup iface_intf_A
|
||||
*/
|
||||
#define INTF_A_BAR_THIRD_SINCE_VERSION 2
|
||||
#endif /* INTF_A_BAR_ENUM */
|
||||
|
||||
/**
|
||||
* @ingroup iface_intf_A
|
||||
* @struct intf_A_listener
|
||||
|
|
|
|||
|
|
@ -106,6 +106,29 @@ enum intf_A_foo {
|
|||
#define INTF_A_FOO_DEPRECATED_SINCE_VERSION 2
|
||||
#endif /* INTF_A_FOO_ENUM */
|
||||
|
||||
#ifndef INTF_A_BAR_ENUM
|
||||
#define INTF_A_BAR_ENUM
|
||||
enum intf_A_bar {
|
||||
/**
|
||||
* this is the first
|
||||
*/
|
||||
INTF_A_BAR_FIRST = 0x01,
|
||||
/**
|
||||
* this is the second
|
||||
*/
|
||||
INTF_A_BAR_SECOND = 0x02,
|
||||
/**
|
||||
* this is the third
|
||||
* @since 2
|
||||
*/
|
||||
INTF_A_BAR_THIRD = 0x04,
|
||||
};
|
||||
/**
|
||||
* @ingroup iface_intf_A
|
||||
*/
|
||||
#define INTF_A_BAR_THIRD_SINCE_VERSION 2
|
||||
#endif /* INTF_A_BAR_ENUM */
|
||||
|
||||
/**
|
||||
* @ingroup iface_intf_A
|
||||
* @struct intf_A_listener
|
||||
|
|
|
|||
|
|
@ -133,6 +133,47 @@ intf_A_foo_is_valid(uint32_t value, uint32_t version) {
|
|||
}
|
||||
#endif /* INTF_A_FOO_ENUM */
|
||||
|
||||
#ifndef INTF_A_BAR_ENUM
|
||||
#define INTF_A_BAR_ENUM
|
||||
enum intf_A_bar {
|
||||
/**
|
||||
* this is the first
|
||||
*/
|
||||
INTF_A_BAR_FIRST = 0x01,
|
||||
/**
|
||||
* this is the second
|
||||
*/
|
||||
INTF_A_BAR_SECOND = 0x02,
|
||||
/**
|
||||
* this is the third
|
||||
* @since 2
|
||||
*/
|
||||
INTF_A_BAR_THIRD = 0x04,
|
||||
};
|
||||
/**
|
||||
* @ingroup iface_intf_A
|
||||
*/
|
||||
#define INTF_A_BAR_THIRD_SINCE_VERSION 2
|
||||
/**
|
||||
* @ingroup iface_intf_A
|
||||
* Validate a intf_A bar value.
|
||||
*
|
||||
* @return true on success, false on error.
|
||||
* @ref intf_A_bar
|
||||
*/
|
||||
static inline bool
|
||||
intf_A_bar_is_valid(uint32_t value, uint32_t version) {
|
||||
uint32_t valid = 0;
|
||||
if (version >= 1)
|
||||
valid |= INTF_A_BAR_FIRST;
|
||||
if (version >= 1)
|
||||
valid |= INTF_A_BAR_SECOND;
|
||||
if (version >= 2)
|
||||
valid |= INTF_A_BAR_THIRD;
|
||||
return (value & ~valid) == 0;
|
||||
}
|
||||
#endif /* INTF_A_BAR_ENUM */
|
||||
|
||||
/**
|
||||
* @ingroup iface_intf_A
|
||||
* @struct intf_A_interface
|
||||
|
|
|
|||
|
|
@ -133,6 +133,47 @@ intf_A_foo_is_valid(uint32_t value, uint32_t version) {
|
|||
}
|
||||
#endif /* INTF_A_FOO_ENUM */
|
||||
|
||||
#ifndef INTF_A_BAR_ENUM
|
||||
#define INTF_A_BAR_ENUM
|
||||
enum intf_A_bar {
|
||||
/**
|
||||
* this is the first
|
||||
*/
|
||||
INTF_A_BAR_FIRST = 0x01,
|
||||
/**
|
||||
* this is the second
|
||||
*/
|
||||
INTF_A_BAR_SECOND = 0x02,
|
||||
/**
|
||||
* this is the third
|
||||
* @since 2
|
||||
*/
|
||||
INTF_A_BAR_THIRD = 0x04,
|
||||
};
|
||||
/**
|
||||
* @ingroup iface_intf_A
|
||||
*/
|
||||
#define INTF_A_BAR_THIRD_SINCE_VERSION 2
|
||||
/**
|
||||
* @ingroup iface_intf_A
|
||||
* Validate a intf_A bar value.
|
||||
*
|
||||
* @return true on success, false on error.
|
||||
* @ref intf_A_bar
|
||||
*/
|
||||
static inline bool
|
||||
intf_A_bar_is_valid(uint32_t value, uint32_t version) {
|
||||
uint32_t valid = 0;
|
||||
if (version >= 1)
|
||||
valid |= INTF_A_BAR_FIRST;
|
||||
if (version >= 1)
|
||||
valid |= INTF_A_BAR_SECOND;
|
||||
if (version >= 2)
|
||||
valid |= INTF_A_BAR_THIRD;
|
||||
return (value & ~valid) == 0;
|
||||
}
|
||||
#endif /* INTF_A_BAR_ENUM */
|
||||
|
||||
/**
|
||||
* @ingroup iface_intf_A
|
||||
* @struct intf_A_interface
|
||||
|
|
|
|||
|
|
@ -58,5 +58,12 @@
|
|||
<entry name="negative" value="-1" since="2" summary="this is a negative value"/>
|
||||
<entry name="deprecated" value="3" since="2" deprecated-since="3" summary="this is a deprecated value"/>
|
||||
</enum>
|
||||
|
||||
<enum name="bar" bitfield="true">
|
||||
<entry name="first" value="0x01" summary="this is the first"/>
|
||||
<entry name="second" value="0x02" summary="this is the second"/>
|
||||
<entry name="third" value="0x04" since="2" summary="this is the third"/>
|
||||
</enum>
|
||||
|
||||
</interface>
|
||||
</protocol>
|
||||
|
|
|
|||
|
|
@ -10,4 +10,19 @@ main(int argc, char *argv[]) {
|
|||
assert(intf_A_foo_is_valid(INTF_A_FOO_THIRD, 2));
|
||||
|
||||
assert(intf_A_foo_is_valid(INTF_A_FOO_NEGATIVE, 2));
|
||||
|
||||
assert(intf_A_bar_is_valid(INTF_A_BAR_FIRST, 1));
|
||||
assert(intf_A_bar_is_valid(INTF_A_BAR_FIRST, 2));
|
||||
assert(intf_A_bar_is_valid(INTF_A_BAR_SECOND, 1));
|
||||
assert(intf_A_bar_is_valid(INTF_A_BAR_SECOND, 2));
|
||||
assert(intf_A_bar_is_valid(INTF_A_BAR_FIRST | INTF_A_BAR_SECOND, 1));
|
||||
assert(intf_A_bar_is_valid(INTF_A_BAR_FIRST | INTF_A_BAR_SECOND, 2));
|
||||
|
||||
assert(!intf_A_bar_is_valid(INTF_A_BAR_THIRD, 1));
|
||||
assert(!intf_A_bar_is_valid(INTF_A_BAR_FIRST | INTF_A_BAR_THIRD, 1));
|
||||
assert(intf_A_bar_is_valid(INTF_A_BAR_THIRD, 2));
|
||||
assert(intf_A_bar_is_valid(INTF_A_BAR_FIRST | INTF_A_BAR_THIRD, 2));
|
||||
|
||||
assert(!intf_A_bar_is_valid(0xFF, 1));
|
||||
assert(!intf_A_bar_is_valid(0xFF, 2));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue