object-introspection/test/integration/arrays.toml
Jake Hillion 5071519e45 oil v2
2023-08-23 15:59:53 +01:00

120 lines
4.1 KiB
TOML

definitions = '''
struct Foo10 {
int arr[10];
};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wzero-length-array"
struct Foo0 {
int arr[0];
};
using ZeroLengthIntArray = int[0];
#pragma clang diagnostic pop
struct MultiDim {
int arr[2][3];
};
'''
[cases]
[cases.member_int10]
param_types = ["const Foo10&"]
setup = "return {};"
expect_json = '''[{
"staticSize":40,
"dynamicSize":0,
"members":[{
"staticSize":40,
"dynamicSize":0,
"length":10,
"capacity":10,
"elementStaticSize":4
}]}]'''
expect_json_v2 = '''[{
"staticSize":40,
"exclusiveSize":0,
"members":[{
"staticSize":40,
"exclusiveSize":0,
"length":10,
"capacity":10
}]}]'''
[cases.member_int0]
oil_skip = 'zero length arrays fail codegen v2' # https://github.com/facebookexperimental/object-introspection/issues/295
# WARNING: zero-length arrays are handled differently to non-empty arrays.
# They end up not being treated as containers. This should probably change
# in the future.
param_types = ["const Foo0&"]
setup = "return {};"
expect_json = '''[{
"staticSize":0,
"dynamicSize":0,
"members":[{
"staticSize":0,
"dynamicSize":0
}]}]'''
expect_json_v2 = '''[{
"staticSize":1,
"exclusiveSize":1,
"members":[{
"staticSize":0,
"exclusiveSize":0
}]}]'''
[cases.multidim_legacy] # Test for legacy behaviour. Remove with OICodeGen
oil_disable = 'oil only runs on codegen v2'
cli_options = ["-Ftype-graph", "-Ftyped-data-segment", "-Ftree-builder-type-checking", "-Ftree-builder-v2"]
param_types = ["const MultiDim&"]
setup = "return {};"
expect_json = '''[{
"staticSize":24,
"dynamicSize":0,
"members":[{
"staticSize":24,
"dynamicSize":0,
"length":6,
"capacity":6,
"elementStaticSize":4
}]}]'''
[cases.multidim]
cli_options = ["-ftype-graph"]
param_types = ["const MultiDim&"]
setup = "return {};"
expect_json = '''[
{"staticSize":24, "dynamicSize":0, "exclusiveSize":0, "members":[
{"staticSize":24, "dynamicSize":0, "exclusiveSize":0, "length":2, "capacity":2, "elementStaticSize":12, "members":[
{"staticSize":12, "dynamicSize":0, "exclusiveSize":12, "length":3, "capacity":3, "elementStaticSize":4},
{"staticSize":12, "dynamicSize":0, "exclusiveSize":12, "length":3, "capacity":3, "elementStaticSize":4}]
}]}]'''
expect_json_v2 = '''[
{"staticSize":24, "exclusiveSize":0, "members":[
{"staticSize":24, "exclusiveSize":0, "length":2, "capacity":2, "members":[
{"staticSize":12, "exclusiveSize":0, "length":3, "capacity":3},
{"staticSize":12, "exclusiveSize":0, "length":3, "capacity":3}]
}]}]'''
[cases.direct_int10]
skip = "Direct array arguments don't work"
param_types = ["int[10]"]
setup = "return {};"
expect_json = '[{"staticSize":40, "dynamicSize":0, "length":10, "capacity":10, "elementStaticSize":4}]'
[cases.direct_int0]
skip = "Direct array arguments don't work"
# WARNING: zero-length arrays are handled differently to non-empty arrays.
# They end up not being treated as containers. This should probably change
# in the future.
param_types = ["ZeroLengthIntArray"]
setup = "return {};"
expect_json = '[{"staticSize":0, "dynamicSize":0}]'
[cases.ref_int10]
skip = "CodeGen bug with array reference arguments"
param_types = ["const int(&)[10]"]
setup = "return {};"
expect_json = '[{"staticSize":40, "dynamicSize":0, "length":10, "capacity":10, "elementStaticSize":4}]'
[cases.ref_int0]
skip = "CodeGen bug with array reference arguments"
# WARNING: zero-length arrays are handled differently to non-empty arrays.
# They end up not being treated as containers. This should probably change
# in the future.
param_types = ["const ZeroLengthIntArray&"]
setup = "return {};"
expect_json = '[{"staticSize":0, "dynamicSize":0}]'