2023-02-21 20:03:47 +00:00
|
|
|
includes = ["vector"]
|
|
|
|
definitions = '''
|
|
|
|
template <typename T>
|
|
|
|
class TemplatedClass1 {
|
|
|
|
T val;
|
|
|
|
};
|
|
|
|
|
|
|
|
template <typename T, typename S>
|
|
|
|
class TemplatedClass2 {
|
|
|
|
TemplatedClass1<T> tc1;
|
|
|
|
S val2;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Foo {
|
|
|
|
int a;
|
|
|
|
int b;
|
|
|
|
};
|
|
|
|
|
|
|
|
template <int N>
|
|
|
|
struct TemplatedClassVal {
|
|
|
|
int arr[N];
|
|
|
|
};
|
|
|
|
'''
|
|
|
|
|
|
|
|
[cases]
|
|
|
|
[cases.int]
|
2023-08-16 20:40:36 +01:00
|
|
|
oil_skip = "primitives are named differently in treebuilderv2" # https://github.com/facebookexperimental/object-introspection/issues/286
|
2023-02-21 20:03:47 +00:00
|
|
|
param_types = ["const TemplatedClass1<int>&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[{
|
|
|
|
"typeName":"TemplatedClass1<int>",
|
|
|
|
"staticSize":4,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"members":[{
|
|
|
|
"typeName":"int"
|
|
|
|
}]}]'''
|
|
|
|
[cases.vector]
|
|
|
|
param_types = ["const TemplatedClass1<std::vector<int>>&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[{
|
|
|
|
"typeName":"TemplatedClass1<std::vector<int, std::allocator<int> > >",
|
|
|
|
"staticSize":24,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"members":[{
|
|
|
|
"typeName":"vector<int, std::allocator<int> >",
|
|
|
|
"staticSize":24,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"length":0,
|
|
|
|
"capacity":0,
|
|
|
|
"elementStaticSize":4
|
|
|
|
}]}]'''
|
2023-08-16 20:40:36 +01:00
|
|
|
expect_json_v2 = '''[{
|
|
|
|
"typeName":"TemplatedClass1<std::vector<int, std::allocator<int> > >",
|
|
|
|
"staticSize":24,
|
|
|
|
"exclusiveSize":0,
|
|
|
|
"members":[{
|
|
|
|
"typeName":"std::vector<int32_t, std::allocator<int32_t>>",
|
|
|
|
"staticSize":24,
|
|
|
|
"exclusiveSize":24,
|
|
|
|
"length":0,
|
|
|
|
"capacity":0
|
|
|
|
}]}]'''
|
2023-02-21 20:03:47 +00:00
|
|
|
[cases.two]
|
2023-08-16 20:40:36 +01:00
|
|
|
oil_skip = "OIL returns better primitive names"
|
2023-02-21 20:03:47 +00:00
|
|
|
param_types = ["const TemplatedClass2<Foo, int>&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[{
|
|
|
|
"typeName":"TemplatedClass2<ns_templates::Foo, int>",
|
|
|
|
"staticSize":12,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"members":[
|
|
|
|
{"typeName":"TemplatedClass1<ns_templates::Foo>", "staticSize":8, "dynamicSize":0},
|
|
|
|
{"typeName":"int", "staticSize":4, "dynamicSize":0}
|
|
|
|
]}]'''
|
|
|
|
[cases.value]
|
|
|
|
param_types = ["const TemplatedClassVal<3>&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[{
|
|
|
|
"typeName":"TemplatedClassVal<3>",
|
|
|
|
"staticSize":12,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"members":[{
|
|
|
|
"staticSize":12,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"length":3,
|
|
|
|
"capacity":3,
|
|
|
|
"elementStaticSize":4
|
|
|
|
}]}]'''
|
2023-08-16 20:40:36 +01:00
|
|
|
expect_json_v2 = '''[{
|
|
|
|
"typeName":"TemplatedClassVal<3>",
|
|
|
|
"staticSize":12,
|
|
|
|
"exclusiveSize":0,
|
|
|
|
"members":[{
|
|
|
|
"staticSize":12,
|
|
|
|
"exclusiveSize":0,
|
|
|
|
"length":3,
|
|
|
|
"capacity":3
|
|
|
|
}]}]'''
|