@ -750,12 +750,11 @@ void CombineTest::fieldsMappingSharedFieldPlaceholder() {
void CombineTest : : fieldsStringPlaceholder ( ) {
void CombineTest : : fieldsStringPlaceholder ( ) {
CORRADE_SKIP_IF_NO_ASSERT ( ) ;
CORRADE_SKIP_IF_NO_ASSERT ( ) ;
Containers : : StringView nameStrings = " " _s ;
const struct Data {
const struct Name {
UnsignedByte mapping ;
UnsignedByte mapping ;
UnsignedByte offset ;
UnsignedByte mesh ;
} namesD ata[ 3 ] { } ;
} d ata[ 3 ] { } ;
auto names = Containers : : stridedArrayView ( namesD ata) ;
auto view = Containers : : stridedArrayView ( d ata) ;
std : : ostringstream out ;
std : : ostringstream out ;
Error redirectError { & out } ;
Error redirectError { & out } ;
@ -764,19 +763,27 @@ void CombineTest::fieldsStringPlaceholder() {
combineFields ( Trade : : SceneMappingType : : UnsignedByte , 167 , {
combineFields ( Trade : : SceneMappingType : : UnsignedByte , 167 , {
/* Just to verify it prints correct field IDs */
/* Just to verify it prints correct field IDs */
Trade : : SceneFieldData { Trade : : SceneField : : Mesh ,
Trade : : SceneFieldData { Trade : : SceneField : : Mesh ,
names . slice ( & Name : : mapping ) ,
view . slice ( & Data : : mapping ) ,
names . slice ( & Name : : offset ) } ,
view . slice ( & Data : : mesh ) } ,
Trade : : SceneFieldData { Trade : : sceneFieldCustom ( 16 ) ,
Trade : : SceneFieldData { Trade : : sceneFieldCustom ( 16 ) ,
names . slice ( & Name : : mapping ) ,
view . slice ( & Data : : mapping ) ,
nullptr , Trade : : SceneFieldType : : StringOffset8 ,
nullptr , Trade : : SceneFieldType : : StringOffset8 ,
names . slice ( & Name : : offset ) } ,
/* Have to fake a pointer because in some cases (ARM64 Linux) the
distance between nullptr and stack - allocated memory ( such as
` data ` ) * may * be larger than what can fit into 48 bits ,
triggering an assert */
Containers : : arrayView ( reinterpret_cast < UnsignedByte * > ( 0xfece5 ) , 3 ) } ,
} ) ;
} ) ;
/* With placeholder field data it's impossible to know the actual string
/* With placeholder field data it's impossible to know the actual string
size */
size */
combineFields ( Trade : : SceneMappingType : : UnsignedByte , 167 , {
combineFields ( Trade : : SceneMappingType : : UnsignedByte , 167 , {
Trade : : SceneFieldData { Trade : : sceneFieldCustom ( 16 ) ,
Trade : : SceneFieldData { Trade : : sceneFieldCustom ( 16 ) ,
names . slice ( & Name : : mapping ) ,
view . slice ( & Data : : mapping ) ,
nameStrings . data ( ) , Trade : : SceneFieldType : : StringRangeNullTerminated16 ,
/* Have to fake a pointer because in some cases (ARM64 Linux) the
distance between nullptr and stack - allocated memory ( such as
` data ` ) * may * be larger than what can fit into 48 bits ,
triggering an assert */
reinterpret_cast < char * > ( 0xfece5 ) , Trade : : SceneFieldType : : StringRangeNullTerminated16 ,
Containers : : StridedArrayView1D < const UnsignedShort > { { nullptr , 6 } , 3 } } ,
Containers : : StridedArrayView1D < const UnsignedShort > { { nullptr , 6 } , 3 } } ,
} ) ;
} ) ;
CORRADE_COMPARE ( out . str ( ) ,
CORRADE_COMPARE ( out . str ( ) ,