mirror of
https://github.com/JakeHillion/object-introspection.git
synced 2024-11-09 21:24:14 +00:00
Integration tests: Add tests for alignment of unions
This commit is contained in:
parent
1334e08d05
commit
fd54d0ea83
@ -25,6 +25,11 @@ definitions = '''
|
|||||||
alignas(32) char c32;
|
alignas(32) char c32;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
union UnionMember {
|
||||||
|
char c1;
|
||||||
|
alignas(32) char c2;
|
||||||
|
};
|
||||||
|
|
||||||
struct MemberAlignmentOverriden {
|
struct MemberAlignmentOverriden {
|
||||||
char c;
|
char c;
|
||||||
alignas(32) Align16 alignmentIncreased;
|
alignas(32) Align16 alignmentIncreased;
|
||||||
@ -106,6 +111,22 @@ definitions = '''
|
|||||||
{"typeName": "char", "staticSize": 1, "exclusiveSize": 1},
|
{"typeName": "char", "staticSize": 1, "exclusiveSize": 1},
|
||||||
{"typeName": "char", "staticSize": 1, "exclusiveSize": 1}
|
{"typeName": "char", "staticSize": 1, "exclusiveSize": 1}
|
||||||
]}]}]'''
|
]}]}]'''
|
||||||
|
[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": "UnionMember", "staticSize": 32, "exclusiveSize": 32, "NOT":"members"}
|
||||||
|
]}]'''
|
||||||
|
[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": "UnionMember", "staticSize": 32, "exclusiveSize": 32, "NOT":"members"}
|
||||||
|
]}]'''
|
||||||
[cases.wrapper_member_override]
|
[cases.wrapper_member_override]
|
||||||
param_types = ["const Wrapper<MemberAlignmentOverriden>&"]
|
param_types = ["const Wrapper<MemberAlignmentOverriden>&"]
|
||||||
setup = "return {};"
|
setup = "return {};"
|
||||||
|
@ -10,6 +10,7 @@ definitions = '''
|
|||||||
MyUnion(int n_) : n(n_) {}
|
MyUnion(int n_) : n(n_) {}
|
||||||
MyUnion(const std::vector<int>& vec_) : vec(vec_) {}
|
MyUnion(const std::vector<int>& vec_) : vec(vec_) {}
|
||||||
MyUnion(const std::unordered_map<std::string, std::string>& map_) : map(map_) {}
|
MyUnion(const std::unordered_map<std::string, std::string>& map_) : map(map_) {}
|
||||||
|
MyUnion(const MyUnion& /*other*/) { /* we don't know which field to copy */ }
|
||||||
~MyUnion() {}
|
~MyUnion() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -52,6 +53,17 @@ definitions = '''
|
|||||||
param_types = ["const MyUnion&"]
|
param_types = ["const MyUnion&"]
|
||||||
setup = 'return std::unordered_map<std::string, std::string>{{"a", "b"}, {"c","d"}};'
|
setup = 'return std::unordered_map<std::string, std::string>{{"a", "b"}, {"c","d"}};'
|
||||||
expect_json = '[{"staticSize":56, "dynamicSize":0, "exclusiveSize":56, "NOT":"members"}]'
|
expect_json = '[{"staticSize":56, "dynamicSize":0, "exclusiveSize":56, "NOT":"members"}]'
|
||||||
|
|
||||||
|
[cases.alignment]
|
||||||
|
# Wrap the union in a pair as a way of inferring its alignment
|
||||||
|
param_types = ["const std::pair<char, MyUnion>&"]
|
||||||
|
setup = 'return {{0, MyUnion{123}}};'
|
||||||
|
expect_json = '''[
|
||||||
|
{"staticSize":64, "dynamicSize":0, "exclusiveSize":7, "members":[
|
||||||
|
{"staticSize":1, "dynamicSize":0, "exclusiveSize":1},
|
||||||
|
{"staticSize":56, "dynamicSize":0, "exclusiveSize":56, "NOT":"members"}
|
||||||
|
]}]'''
|
||||||
|
|
||||||
[cases.tagged_int]
|
[cases.tagged_int]
|
||||||
param_types = ["const TaggedUnion&"]
|
param_types = ["const TaggedUnion&"]
|
||||||
setup = "return TaggedUnion{MyUnion{123}, 0};"
|
setup = "return TaggedUnion{MyUnion{123}, 0};"
|
||||||
|
Loading…
Reference in New Issue
Block a user