object-introspection/test/integration/cycles.toml

309 lines
9.4 KiB
TOML
Raw Normal View History

includes = ["functional", "memory"]
2022-12-19 14:37:51 +00:00
definitions = '''
struct RawNode {
int value;
2022-12-19 14:37:51 +00:00
struct RawNode* next;
};
struct UniqueNode {
int value;
2022-12-19 14:37:51 +00:00
std::unique_ptr<struct UniqueNode> next;
};
struct SharedNode {
int value;
2022-12-19 14:37:51 +00:00
std::shared_ptr<struct SharedNode> next;
};
template <typename T>
struct Wrapper {
Wrapper(T t_) : t(t_) {};
T t;
};
2022-12-19 14:37:51 +00:00
'''
[cases]
[cases.raw_ptr]
oil_disable = "oil can't chase pointers safely"
2022-12-19 14:37:51 +00:00
param_types = ["RawNode*"]
setup = '''
RawNode *first = new RawNode{1, nullptr};
RawNode *second = new RawNode{2, nullptr};
RawNode *third = new RawNode{3, nullptr};
first->next = second;
second->next = third;
third->next = first;
return first;
'''
2023-06-22 13:24:39 +01:00
cli_options = ["-fchase-raw-pointers"]
2022-12-19 14:37:51 +00:00
expect_json = '''
[
{
"typeName": "RawNode",
"staticSize": 16,
"dynamicSize": 32,
"members": [
{
"typeName": "int",
"staticSize": 4,
"dynamicSize": 0
},
{
"typeName": "struct RawNode *",
"staticSize": 8,
"dynamicSize": 32,
"members": [
{
"typeName": "RawNode",
"staticSize": 16,
"dynamicSize": 16,
"members": [
{
"typeName": "int",
"staticSize": 4,
"dynamicSize": 0
},
{
"typeName": "struct RawNode *",
"staticSize": 8,
"dynamicSize": 16,
"members": [
{
"typeName": "RawNode",
"staticSize": 16,
"dynamicSize": 0,
"members": [
{
"typeName": "int",
"staticSize": 4,
"dynamicSize": 0
},
{
"typeName": "struct RawNode *",
"staticSize": 8,
"dynamicSize": 0
}
]
}
]
}
]
}
]
}
]
}
]
2022-12-19 14:37:51 +00:00
'''
[cases.raw_ptr_wrapped]
oil_disable = "oil can't chase pointers safely"
param_types = ["Wrapper<RawNode*>&"]
setup = '''
RawNode *first = new RawNode{1, nullptr};
RawNode *second = new RawNode{2, nullptr};
RawNode *third = new RawNode{3, nullptr};
first->next = second;
second->next = third;
third->next = first;
return Wrapper<RawNode*>(first);
'''
cli_options = ["-fchase-raw-pointers"]
expect_json = '''[{
"staticSize": 8,
"dynamicSize": 48,
"members": [{
"name": "t",
"typeName": "struct RawNode *",
"staticSize": 8,
"dynamicSize": 48,
"members": [{
"typeName": "RawNode",
"staticSize": 16,
"dynamicSize": 32,
"members": [
{ "name": "value", "typeName": "int", "staticSize": 4, "dynamicSize": 0 },
{
"name": "next",
"typeName": "struct RawNode *",
"staticSize": 8,
"dynamicSize": 32,
"members": [{
"typeName": "RawNode",
"staticSize": 16,
"dynamicSize": 16,
"members": [
{ "name": "value", "typeName": "int", "staticSize": 4, "dynamicSize": 0 },
{
"name": "next",
"typeName": "struct RawNode *",
"staticSize": 8,
"dynamicSize": 16,
"members": [{
"typeName": "RawNode",
"staticSize": 16,
"dynamicSize": 0,
"members": [
{ "name": "value", "typeName": "int", "staticSize": 4, "dynamicSize": 0 },
{
"name": "next",
"typeName": "struct RawNode *",
"staticSize": 8,
"dynamicSize": 0
}
]}]}]}]}]}]}]}]
'''
2022-12-19 14:37:51 +00:00
[cases.unique_ptr]
param_types = ["std::reference_wrapper<UniqueNode>&"]
2022-12-19 14:37:51 +00:00
setup = '''
auto first = std::make_unique<UniqueNode>();
auto firstPtr = first.get();
first->next = std::make_unique<UniqueNode>();
first->next->next = std::make_unique<UniqueNode>();
first->next->next->next = std::move(first);
return *firstPtr;
'''
expect_json = '''
[
{
"typeName": "reference_wrapper<ns_cycles::UniqueNode>",
"staticSize": 8,
"dynamicSize": 48,
"members": [
{
"typeName": "UniqueNode",
"staticSize": 16,
"dynamicSize": 32,
"members": [
{
"typeName": "int",
"staticSize": 4,
"dynamicSize": 0
},
{
"typeName": "unique_ptr<ns_cycles::UniqueNode, std::default_delete<ns_cycles::UniqueNode> >",
"staticSize": 8,
"dynamicSize": 32,
"members": [
{
"typeName": "UniqueNode",
"staticSize": 16,
"dynamicSize": 16,
"members": [
{
"typeName": "int",
"staticSize": 4,
"dynamicSize": 0
},
{
"typeName": "unique_ptr<ns_cycles::UniqueNode, std::default_delete<ns_cycles::UniqueNode> >",
"staticSize": 8,
"dynamicSize": 16,
"members": [
{
"typeName": "UniqueNode",
"staticSize": 16,
"dynamicSize": 0,
"members": [
{
"typeName": "int",
"staticSize": 4,
"dynamicSize": 0
},
{
"typeName": "unique_ptr<ns_cycles::UniqueNode, std::default_delete<ns_cycles::UniqueNode> >",
"staticSize": 8,
"dynamicSize": 0
}
]
}
]
}
]
}
]
}
]
}
]
}
]
2022-12-19 14:37:51 +00:00
'''
[cases.shared_ptr]
param_types = ["std::reference_wrapper<SharedNode>&"]
2022-12-19 14:37:51 +00:00
setup = '''
auto first = std::make_shared<SharedNode>();
auto firstPtr = first.get();
first->next = std::make_shared<SharedNode>();
first->next->next = std::make_shared<SharedNode>();
first->next->next->next = first;
return *firstPtr;
'''
expect_json = '''
[
{
"typeName": "reference_wrapper<ns_cycles::SharedNode>",
"staticSize": 8,
"dynamicSize": 72,
"members": [
{
"typeName": "SharedNode",
"staticSize": 24,
"dynamicSize": 48,
"members": [
{
"typeName": "int",
"staticSize": 4,
"dynamicSize": 0
},
{
"typeName": "shared_ptr<ns_cycles::SharedNode>",
"staticSize": 16,
"dynamicSize": 48,
"members": [
{
"typeName": "SharedNode",
"staticSize": 24,
"dynamicSize": 24,
"members": [
{
"typeName": "int",
"staticSize": 4,
"dynamicSize": 0
},
{
"typeName": "shared_ptr<ns_cycles::SharedNode>",
"staticSize": 16,
"dynamicSize": 24,
"members": [
{
"typeName": "SharedNode",
"staticSize": 24,
"dynamicSize": 0,
"members": [
{
"typeName": "int",
"staticSize": 4,
"dynamicSize": 0
},
{
"typeName": "shared_ptr<ns_cycles::SharedNode>",
"staticSize": 16,
"dynamicSize": 0
}
]
}
]
}
]
}
]
}
]
}
]
}
]
2022-12-19 14:37:51 +00:00
'''