object-introspection/test/integration/alignment.toml

209 lines
10 KiB
TOML
Raw Permalink Normal View History

2023-05-23 22:35:42 +01:00
# Test cases are repeated with a custom wrapper class as well as with a
# container, as CodeGen is not able to add padding members to container types.
includes = ["optional"]
definitions = '''
// This wrapper will allow us to infer the alignment of the contained type by
// looking at the wrapper's size.
template <typename T>
struct Wrapper {
int8_t c;
T t;
};
struct alignas(16) Align16 {
char c;
};
struct TwoStruct {
Align16 x1;
char c;
Align16 x2;
};
struct MemberAlignment {
char c;
alignas(32) char c32;
};
union UnionMember {
char c1;
alignas(32) char c2;
};
2023-05-23 22:35:42 +01:00
struct MemberAlignmentOverriden {
char c;
alignas(32) Align16 alignmentIncreased;
};
struct alignas(128) AlignedStructMemberAlignLower {
char c;
alignas(32) char c32;
};
'''
[cases]
[cases.wrapper_struct]
param_types = ["const Wrapper<Align16>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 32, "exclusiveSize": 15, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "ns_alignment::Align16", "staticSize": 16, "exclusiveSize": 15, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}
2023-05-23 22:35:42 +01:00
]}]}]'''
2023-08-16 20:40:36 +01:00
expect_json_v2 = '''[
{"staticSize": 32, "exclusiveSize": 15, "members": [
{"typeNames": ["int8_t", "__int8_t", "int8_t"], "staticSize": 1, "exclusiveSize": 1},
{"typeNames": ["ns_alignment::Align16"], "staticSize": 16, "exclusiveSize": 15, "members": [
2023-08-16 20:40:36 +01:00
{"typeNames": ["int8_t"], "staticSize": 1, "exclusiveSize": 1}
]}]}]'''
2023-05-23 22:35:42 +01:00
[cases.container_struct]
skip = "container alignment is broken (#143)"
param_types = ["const std::optional<Align16>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 32, "exclusiveSize": 16, "members": [
{"typeName": "ns_alignment::Align16", "staticSize": 16, "exclusiveSize": 15, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}
2023-05-23 22:35:42 +01:00
]}]}]'''
[cases.wrapper_two_members]
param_types = ["const Wrapper<TwoStruct>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 64, "exclusiveSize": 15, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "ns_alignment::TwoStruct", "staticSize": 48, "exclusiveSize": 15, "members": [
{"typeName": "ns_alignment::Align16", "staticSize": 16, "exclusiveSize": 15, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}]},
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "ns_alignment::Align16", "staticSize": 16, "exclusiveSize": 15, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}]}
2023-05-23 22:35:42 +01:00
]}]}]'''
2023-08-16 20:40:36 +01:00
expect_json_v2 = '''[
{"staticSize": 64, "exclusiveSize": 15, "members": [
{"typeNames": ["int8_t", "__int8_t", "int8_t"], "staticSize": 1, "exclusiveSize": 1},
{"typeNames": ["ns_alignment::TwoStruct"], "staticSize": 48, "exclusiveSize": 15, "members": [
{"typeNames": ["ns_alignment::Align16"], "staticSize": 16, "exclusiveSize": 15, "members": [
2023-08-16 20:40:36 +01:00
{"typeNames": ["int8_t"], "staticSize": 1, "exclusiveSize": 1}]},
{"typeNames": ["int8_t"], "staticSize": 1, "exclusiveSize": 1},
{"typeNames": ["ns_alignment::Align16"], "staticSize": 16, "exclusiveSize": 15, "members": [
2023-08-16 20:40:36 +01:00
{"typeNames": ["int8_t"], "staticSize": 1, "exclusiveSize": 1}]}
]}]}]'''
2023-05-23 22:35:42 +01:00
[cases.container_two_members]
skip = "container alignment is broken (#143)"
param_types = ["const std::optional<TwoStruct>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 64, "exclusiveSize": 16, "members": [
{"typeName": "ns_alignment::TwoStruct", "staticSize": 48, "exclusiveSize": 15, "members": [
{"typeName": "ns_alignment::Align16", "staticSize": 16, "exclusiveSize": 15, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}]},
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "ns_alignment::Align16", "staticSize": 16, "exclusiveSize": 15, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}]}
2023-05-23 22:35:42 +01:00
]}]}]'''
[cases.wrapper_member_alignment]
param_types = ["const Wrapper<MemberAlignment>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 96, "exclusiveSize": 31, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "ns_alignment::MemberAlignment", "staticSize": 64, "exclusiveSize": 62, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}
2023-05-23 22:35:42 +01:00
]}]}]'''
2023-08-16 20:40:36 +01:00
expect_json_v2 = '''[
{"staticSize": 96, "exclusiveSize": 31, "members": [
{"typeNames": ["int8_t", "__int8_t", "int8_t"], "staticSize": 1, "exclusiveSize": 1},
{"typeNames": ["ns_alignment::MemberAlignment"], "staticSize": 64, "exclusiveSize": 62, "members": [
2023-08-16 20:40:36 +01:00
{"typeNames": ["int8_t"], "staticSize": 1, "exclusiveSize": 1},
{"typeNames": ["int8_t"], "staticSize": 1, "exclusiveSize": 1}
]}]}]'''
2023-05-23 22:35:42 +01:00
[cases.container_member_alignment]
skip = "container alignment is broken (#143)"
param_types = ["const std::optional<MemberAlignment>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 96, "exclusiveSize": 32, "members": [
{"typeName": "ns_alignment::MemberAlignment", "staticSize": 64, "exclusiveSize": 62, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}
2023-05-23 22:35:42 +01:00
]}]}]'''
[cases.wrapper_union_member]
param_types = ["const Wrapper<UnionMember>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 64, "exclusiveSize": 31, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "ns_alignment::UnionMember", "staticSize": 32, "exclusiveSize": 32, "NOT":"members"}
]}]'''
2023-08-16 20:40:36 +01:00
expect_json_v2 = '''[
{"staticSize": 64, "exclusiveSize": 31, "members": [
{"typeNames": ["int8_t", "__int8_t", "int8_t"], "staticSize": 1, "exclusiveSize": 1},
{"typeNames": ["ns_alignment::UnionMember"], "staticSize": 32, "exclusiveSize": 32, "members":[]}
2023-08-16 20:40:36 +01:00
]}]'''
[cases.container_union_member]
skip = "container alignment is broken (#143)"
param_types = ["const std::optional<UnionMember>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 64, "exclusiveSize": 32, "members": [
{"typeName": "ns_alignment::UnionMember", "staticSize": 32, "exclusiveSize": 32, "NOT":"members"}
]}]'''
2023-05-23 22:35:42 +01:00
[cases.wrapper_member_override]
param_types = ["const Wrapper<MemberAlignmentOverriden>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 96, "exclusiveSize": 31, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "ns_alignment::MemberAlignmentOverriden", "staticSize": 64, "exclusiveSize": 47, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "ns_alignment::Align16", "staticSize": 16, "exclusiveSize": 15, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}
2023-05-23 22:35:42 +01:00
]}]}]}]'''
2023-08-16 20:40:36 +01:00
expect_json_v2 = '''[
{"staticSize": 96, "exclusiveSize": 31, "members": [
{"typeNames": ["int8_t", "__int8_t", "int8_t"], "staticSize": 1, "exclusiveSize": 1},
{"typeNames": ["ns_alignment::MemberAlignmentOverriden"], "staticSize": 64, "exclusiveSize": 47, "members": [
2023-08-16 20:40:36 +01:00
{"typeNames": ["int8_t"], "staticSize": 1, "exclusiveSize": 1},
{"typeNames": ["ns_alignment::Align16"], "staticSize": 16, "exclusiveSize": 15, "members": [
2023-08-16 20:40:36 +01:00
{"typeNames": ["int8_t"], "staticSize": 1, "exclusiveSize": 1}
]}]}]}]'''
2023-05-23 22:35:42 +01:00
[cases.container_member_override]
skip = "container alignment is broken (#143)"
param_types = ["const std::optional<MemberAlignmentOverriden>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 96, "exclusiveSize": 32, "members": [
{"typeName": "ns_alignment::MemberAlignmentOverriden", "staticSize": 64, "exclusiveSize": 47, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "ns_alignment::Align16", "staticSize": 16, "exclusiveSize": 15, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}
2023-05-23 22:35:42 +01:00
]}]}]}]'''
[cases.wrapper_member_lower]
param_types = ["const Wrapper<AlignedStructMemberAlignLower>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 256, "exclusiveSize": 127, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "ns_alignment::AlignedStructMemberAlignLower", "staticSize": 128, "exclusiveSize": 126, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}
2023-05-23 22:35:42 +01:00
]}]}]'''
2023-08-16 20:40:36 +01:00
expect_json_v2 = '''[
{"staticSize": 256, "exclusiveSize": 127, "members": [
{"typeNames": ["int8_t", "__int8_t", "int8_t"], "staticSize": 1, "exclusiveSize": 1},
{"typeNames": ["ns_alignment::AlignedStructMemberAlignLower"], "staticSize": 128, "exclusiveSize": 126, "members": [
2023-08-16 20:40:36 +01:00
{"typeNames": ["int8_t"], "staticSize": 1, "exclusiveSize": 1},
{"typeNames": ["int8_t"], "staticSize": 1, "exclusiveSize": 1}
]}]}]'''
2023-05-23 22:35:42 +01:00
[cases.container_member_lower]
skip = "container alignment is broken (#143)"
param_types = ["const std::optional<AlignedStructMemberAlignLower>&"]
setup = "return {};"
expect_json = '''[
{"staticSize": 256, "exclusiveSize": 128, "members": [
{"typeName": "ns_alignment::AlignedStructMemberAlignLower", "staticSize": 128, "exclusiveSize": 126, "members": [
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1},
{"typeName": "int8_t", "staticSize": 1, "exclusiveSize": 1}
2023-05-23 22:35:42 +01:00
]}]}]'''