From 764673ec344174e03cd21ab0028ffc0fedf3a75e Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Fri, 17 Jul 2026 14:12:14 +0200 Subject: [PATCH 01/22] add static to DynamicData --- src/rs/DustDDS/src/main.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index 8ae2c0e..3b5a3a1 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -275,8 +275,8 @@ impl DomainParticipantListener for Listener {} fn init_publisher( participant: &DomainParticipant, options: Options, - dynamic_type: DynamicType, -) -> Result, InitializeError> { + dynamic_type: DynamicType<'static>, +) -> Result>, InitializeError> { let topic_name = options.topic_name.clone().unwrap_or("test".to_string()); let type_name = options.type_name.clone().unwrap(); @@ -326,9 +326,9 @@ fn init_publisher( } fn run_publisher( - data_writer: &DataWriter, + data_writer: &DataWriter>, options: Options, - dynamic_type: DynamicType, + dynamic_type: DynamicType<'static>, all_done: Receiver<()>, ) -> Result<(), RunningError> { let mut dd = DynamicDataFactory::create_data(dynamic_type); @@ -356,8 +356,8 @@ fn run_publisher( fn init_subscriber( participant: &DomainParticipant, options: Options, - dynamic_type: DynamicType, -) -> Result, InitializeError> { + dynamic_type: DynamicType<'static>, +) -> Result>, InitializeError> { let topic_name = options.topic_name.clone().unwrap_or("test".to_string()); let type_name = options.type_name.clone().unwrap(); @@ -478,7 +478,7 @@ fn init_subscriber( } fn run_subscriber( - data_reader: &DataReader, + data_reader: &DataReader>, options: Options, dynamic_type: DynamicType, all_done: Receiver<()>, From 356022960ed8d008ee2aa324ce9956f2d02fb679 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Mon, 20 Jul 2026 16:58:56 +0200 Subject: [PATCH 02/22] fix static --- src/rs/DustDDS/src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index 3b5a3a1..8d5d300 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -480,7 +480,7 @@ fn init_subscriber( fn run_subscriber( data_reader: &DataReader>, options: Options, - dynamic_type: DynamicType, + dynamic_type: DynamicType<'static>, all_done: Receiver<()>, ) -> Result<(), RunningError> { let mut expected_data = None; @@ -616,7 +616,7 @@ fn main() -> Result<(), Return> { })?; // Create the type - let mut dt: Option = None; + let mut dt = None; if let (Some(type_folder), Some(type_file), Some(type_name)) = (&options.type_folder, &options.type_file, &options.type_name) { From 8973786f99ccf099e9305ddc6f89fd0e9129ab73 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Mon, 20 Jul 2026 18:05:36 +0200 Subject: [PATCH 03/22] add listeneres --- src/rs/DustDDS/src/main.rs | 221 +++++++++++++++++++++++++++++++++++-- 1 file changed, 213 insertions(+), 8 deletions(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index 8d5d300..3de7650 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -1,6 +1,7 @@ use clap::{Parser, ValueEnum}; use ctrlc; use dust_dds::{ + dds_async::topic_description::TopicDescriptionAsync, domain::{ domain_participant::DomainParticipant, domain_participant_factory::DomainParticipantFactory, @@ -22,10 +23,8 @@ use dust_dds::{ }, publication::data_writer::DataWriter, subscription::data_reader::DataReader, - xtypes::{ - dynamic_type::DynamicData, - dynamic_type::DynamicDataFactory, - dynamic_type::{DynamicType, DynamicTypeBuilderFactory}, + xtypes::dynamic_type::{ + DynamicData, DynamicDataFactory, DynamicType, DynamicTypeBuilderFactory, }, }; use std::{ @@ -270,7 +269,49 @@ impl Options { } struct Listener; -impl DomainParticipantListener for Listener {} +impl DomainParticipantListener for Listener { + fn on_publication_matched( + &mut self, + the_writer: dust_dds::dds_async::data_writer::DataWriterAsync<()>, + status: dust_dds::infrastructure::status::PublicationMatchedStatus, + ) -> impl Future + Send { + let topic_name = the_writer.get_topic().get_name(); + let type_name = the_writer.get_topic().get_type_name(); + println!( + "on_publication_matched() topic: '{}' type: '{}' : matched readers {} (change = {})", + topic_name, type_name, status.current_count, status.current_count_change + ); + core::future::ready(()) + } + + fn on_subscription_matched( + &mut self, + the_reader: dust_dds::dds_async::data_reader::DataReaderAsync<()>, + status: dust_dds::infrastructure::status::SubscriptionMatchedStatus, + ) -> impl Future + Send { + let topic_name = the_reader.get_topicdescription().get_name(); + let type_name = the_reader.get_topicdescription().get_type_name(); + println!( + "on_subscription_matched() topic: '{}' type: '{}' : matched writers {} (change = {})", + topic_name, type_name, status.current_count, status.current_count_change + ); + core::future::ready(()) + } + + fn on_liveliness_changed( + &mut self, + the_reader: dust_dds::dds_async::data_reader::DataReaderAsync<()>, + status: dust_dds::infrastructure::status::LivelinessChangedStatus, + ) -> impl Future + Send { + let topic_name = the_reader.get_topicdescription().get_name(); + let type_name = the_reader.get_topicdescription().get_type_name(); + println!( + "on_liveliness_changed() topic: '{}' type: '{}' : (alive = {}, not_alive = {}", + topic_name, type_name, status.alive_count, status.not_alive_count + ); + core::future::ready(()) + } +} fn init_publisher( participant: &DomainParticipant, @@ -313,7 +354,10 @@ fn init_publisher( data_writer_qos.ownership_strength = options.ownership_strength_qos_policy(); } - println!("Create writer for topic: {} type: {}", topic_name, type_name); + println!( + "Create writer for topic: {} type: {}", + topic_name, type_name + ); let data_writer = publisher.create_datawriter::( &topic, @@ -477,6 +521,169 @@ fn init_subscriber( Ok(data_reader) } + +// static void print_sample1_to (struct type_cache *tc, const unsigned char *sample, const DDS_XTypes_CompleteTypeObject *typeobj, struct context *c, const char *label, bool is_base_type, bool is_opt) +// { +// if (print_sample1_simple (sample, typeobj->_d, c, label, NULL, is_opt)) +// return; +// switch (typeobj->_d) +// { +// case DDS_XTypes_TK_ALIAS: { +// print_sample1_ti (tc, sample, &typeobj->_u.alias_type.body.common.related_type, 0, c, label, false, is_opt); +// break; +// } +// case DDS_XTypes_TK_SEQUENCE: { +// const DDS_XTypes_TypeIdentifier *et = &typeobj->_u.sequence_type.element.common.type; +// const dds_sequence_t *p = align (sample, c, _Alignof (dds_sequence_t), sizeof (dds_sequence_t)); +// struct context c1 = { .key = c->key, .valid_data = c->valid_data, .offset = 0, .maxalign = 1, .needs_comma = false }; +// if (c->needs_comma) fputc (',', stdout); +// if (label) printf ("\"%s\":", label); +// printf ("["); +// for (uint32_t i = 0; i < p->_length; i++) +// { +// print_sample1_ti (tc, (const unsigned char *) p->_buffer, et, 0, &c1, NULL, false, false); +// finish_sequence_element (&c1); +// } +// printf ("]"); +// c->needs_comma = true; +// break; +// } +// case DDS_XTypes_TK_STRUCTURE: { +// struct typeinfo *info = type_cache_lookup_typeobj (tc, typeobj); +// const DDS_XTypes_CompleteStructType *t = &typeobj->_u.struct_type; +// const unsigned char *p = align (sample, c, info->align, info->size); +// if (c->needs_comma) fputc (',', stdout); +// if (label) printf ("\"%s\":", label); +// if (!is_base_type) { printf ("{"); c->needs_comma = false; } +// struct context c1 = { .key = c->key, .valid_data = c->valid_data, .offset = 0, .maxalign = 1, .needs_comma = c->needs_comma }; +// if (t->header.base_type._d != DDS_XTypes_TK_NONE) +// print_sample1_ti (tc, p, &t->header.base_type, 0, &c1, NULL, true, false); +// for (uint32_t i = 0; i < t->member_seq._length; i++) +// { +// const DDS_XTypes_CompleteStructMember *m = &t->member_seq._buffer[i]; +// c1.key = c->key && (m->common.member_flags & DDS_XTypes_IS_KEY); +// if (!is_indirect_member (m->common.member_flags)) { +// print_sample1_ti (tc, p, &m->common.member_type_id, 0, &c1, *m->detail.name ? m->detail.name : NULL, false, false); +// } else { +// void const * const *p1 = (const void *) align (p, &c1, _Alignof (void *), sizeof (void *)); +// if (c1.key || c->valid_data) { +// if (*p1 != NULL) { // missing optional/external values are not visible at all in the output +// struct context c2 = { .key = c1.key && !is_optional_member (m->common.member_flags), .valid_data = c1.valid_data, .offset = 0, .maxalign = 1, .needs_comma = c1.needs_comma }; +// print_sample1_ti (tc, *p1, &m->common.member_type_id, 0, &c2, *m->detail.name ? m->detail.name : NULL, false, true); +// c1.needs_comma = c2.needs_comma; +// } +// } +// } +// } +// if (!is_base_type) { +// printf ("}"); +// c1.needs_comma = true; +// } +// c->needs_comma = c1.needs_comma; +// break; +// } +// case DDS_XTypes_TK_ENUM: { +// struct typeinfo *info = type_cache_lookup_typeobj (tc, typeobj); +// const DDS_XTypes_CompleteEnumeratedType *t = &typeobj->_u.enumerated_type; +// const int *p = align (sample, c, info->align, info->size); +// if (c->key || c->valid_data) +// { +// if (c->needs_comma) fputc (',', stdout); +// if (label) printf ("\"%s\":", label); +// for (uint32_t l = 0; l < t->literal_seq._length; l++) +// { +// if (t->literal_seq._buffer[l].common.value == *p) +// printf ("\"%s\"", t->literal_seq._buffer[l].detail.name); +// } +// c->needs_comma = true; +// } +// break; +// } +// case DDS_XTypes_TK_BITMASK: { +// struct typeinfo *info = type_cache_lookup_typeobj (tc, typeobj); +// const DDS_XTypes_CompleteBitmaskType *t = &typeobj->_u.bitmask_type; +// const void *p = align (sample, c, info->align, info->size); +// if (c->key || c->valid_data) +// { +// if (c->needs_comma) fputc (',', stdout); +// if (label) printf ("\"%s\":", label); +// printf ("%"PRIu64, read_bitmask_value (p, t->header.common.bit_bound)); +// c->needs_comma = true; +// } +// break; +// } +// case DDS_XTypes_TK_UNION: { +// struct typeinfo *info = type_cache_lookup_typeobj (tc, typeobj); +// const DDS_XTypes_CompleteUnionType *t = &typeobj->_u.union_type; +// const unsigned char *p = align (sample, c, info->align, info->size); +// if (c->needs_comma) fputc (',', stdout); +// if (label) printf ("\"%s\":", label); +// printf ("{"); +// int32_t disc_value = 0; +// struct context c1 = { .key = c->key, .valid_data = c->valid_data, .offset = 0, .maxalign = 1, .needs_comma = false }; +// if (t->discriminator.common.type_id._d == DDS_XTypes_EK_COMPLETE) +// { +// struct typeinfo *info_disc = type_cache_lookup_typeid (tc, &t->discriminator.common.type_id); +// if (info_disc->typeobj->_d == DDS_XTypes_TK_ENUM) +// { +// disc_value = * (int32_t *) p; +// } +// else if (info_disc->typeobj->_d == DDS_XTypes_TK_BITMASK) +// { +// if (info_disc->typeobj->_u.bitmask_type.header.common.bit_bound > 32) +// disc_value = (int32_t) (* (int64_t *) p); +// else if (info_disc->typeobj->_u.bitmask_type.header.common.bit_bound > 16) +// disc_value = * (int32_t *) p; +// else if (info_disc->typeobj->_u.bitmask_type.header.common.bit_bound > 8) +// disc_value = * (int16_t *) p; +// else +// disc_value = * (int8_t *) p; +// } +// else +// { +// printf ("unsupported union discriminant value %u\n", info_disc->typeobj->_d); +// abort (); +// } +// print_sample1_to (tc, p, info_disc->typeobj, &c1, "_d", false, false); +// } +// else if (!print_sample1_simple (p, t->discriminator.common.type_id._d, &c1, "_d", &disc_value, false)) +// { +// abort (); +// } +// const DDS_XTypes_CompleteUnionMember *m = find_union_member_for_disc (t, disc_value); +// if (m != NULL) +// { +// const unsigned char *data = p + type_cache_union_data_offset (tc, t); +// struct context c2 = { .key = c1.key, .valid_data = c1.valid_data, .offset = 0, .maxalign = 1, .needs_comma = c1.needs_comma }; +// if (!is_indirect_member (m->common.member_flags)) +// { +// print_sample1_ti (tc, data, &m->common.type_id, 0, &c2, *m->detail.name ? m->detail.name : NULL, false, false); +// } +// else +// { +// void const * const *p1 = (const void *) align (data, &c2, _Alignof (void *), sizeof (void *)); +// if ((c2.key || c2.valid_data) && *p1 != NULL) +// { +// struct context c3 = { .key = c2.key && !is_optional_member (m->common.member_flags), .valid_data = c2.valid_data, .offset = 0, .maxalign = 1, .needs_comma = c2.needs_comma }; +// print_sample1_ti (tc, *p1, &m->common.type_id, 0, &c3, *m->detail.name ? m->detail.name : NULL, false, true); +// c2.needs_comma = c3.needs_comma; +// } +// } +// c1.needs_comma = c2.needs_comma; +// } +// printf ("}"); +// c->needs_comma = true; +// } +// } +// } + +// void dtl_print_sample (struct dyntypelib *dtl, bool valid_data, const void *sample, const DDS_XTypes_CompleteTypeObject *typeobj) +// { +// struct context c1 = { .valid_data = valid_data, .key = true, .offset = 0, .maxalign = 1, .needs_comma = false }; +// print_sample1_to (dtl->typecache, sample, typeobj, &c1, NULL, false, false); +// printf ("\n"); +// } + fn run_subscriber( data_reader: &DataReader>, options: Options, @@ -622,8 +829,6 @@ fn main() -> Result<(), Return> { { let file_path = format!("{}/xml/{}.xml", type_folder, type_file); let type_xml = std::fs::read_to_string(file_path).unwrap(); - // This function is unimplemented in dust_dds currently - println!("type_name {type_name}"); let type_builder = DynamicTypeBuilderFactory::create_type_w_document(&type_xml, type_name, vec![]) .unwrap(); From 2084dba26c31c7625e1b4bf9e251eb2d70c37d8e Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Mon, 20 Jul 2026 20:12:49 +0200 Subject: [PATCH 04/22] remove unsupported --- unsupported_test_manifest/dust_dds-0.16.0.txt | 579 +++++++++--------- 1 file changed, 290 insertions(+), 289 deletions(-) diff --git a/unsupported_test_manifest/dust_dds-0.16.0.txt b/unsupported_test_manifest/dust_dds-0.16.0.txt index bac9989..ea7fba2 100644 --- a/unsupported_test_manifest/dust_dds-0.16.0.txt +++ b/unsupported_test_manifest/dust_dds-0.16.0.txt @@ -1,289 +1,290 @@ -xtypes_v2_array_test_suite_int32[10]_int32[20] -xtypes_v2_array_test_suite_int32[20]_int32[10] -xtypes_v2_array_test_suite_int32[10]_uint32[10] -xtypes_v2_array_test_suite_int32[10][2]_int32[20] -xtypes_v2_array_test_suite_string10[10]_string20[10] -xtypes_v2_array_test_suite_enum1[10]_enum2[10] -xtypes_v2_array_test_suite_appendable_enum -xtypes_v2_array_test_suite_SFinal[10]_S[20]_SFinalAlt[10]_S[20] -xtypes_v2_array_test_suite_SAppendable[10]_S[20]_SAppendableAlt[10]_S[20] -xtypes_v2_array_test_suite_SMutable[10]_S[20]_SMutableAlt[10]_S[20] -xtypes_v2_extensibility_test_suite_ext_final_struct_2 -xtypes_v2_extensibility_test_suite_ext_appendable_struct_2 -xtypes_v2_extensibility_test_suite_ext_appendable_struct_3 -xtypes_v2_extensibility_test_suite_ext_appendable_struct_4 -xtypes_v2_extensibility_test_suite_ext_appendable_struct_5 -xtypes_v2_extensibility_test_suite_ext_mutable_struct_1 -xtypes_v2_extensibility_test_suite_ext_mutable_struct_2 -xtypes_v2_extensibility_test_suite_ext_mutable_struct_3 -xtypes_v2_extensibility_test_suite_ext_mutable_struct_4 -xtypes_v2_extensibility_test_suite_ext_mutable_struct_5 -xtypes_v2_extensibility_test_suite_ext_mutable_struct_6 -xtypes_v2_extensibility_test_suite_ext_autoid_1 -xtypes_v2_primitive_test_suite_struct_uint8_uint16 -xtypes_v2_primitive_test_suite_struct_uint8_uint32 -xtypes_v2_primitive_test_suite_struct_uint8_uint64 -xtypes_v2_primitive_test_suite_struct_uint8_int8 -xtypes_v2_primitive_test_suite_struct_uint8_int16 -xtypes_v2_primitive_test_suite_struct_uint8_int32 -xtypes_v2_primitive_test_suite_struct_uint8_int64 -xtypes_v2_primitive_test_suite_struct_uint8_float32 -xtypes_v2_primitive_test_suite_struct_uint8_float64 -xtypes_v2_primitive_test_suite_struct_uint8_float128 -xtypes_v2_primitive_test_suite_struct_uint8_byte -xtypes_v2_primitive_test_suite_struct_uint8_char8 -xtypes_v2_primitive_test_suite_struct_uint16_uint8 -xtypes_v2_primitive_test_suite_struct_uint16_uint32 -xtypes_v2_primitive_test_suite_struct_uint16_uint64 -xtypes_v2_primitive_test_suite_struct_uint16_int8 -xtypes_v2_primitive_test_suite_struct_uint16_int16 -xtypes_v2_primitive_test_suite_struct_uint16_int32 -xtypes_v2_primitive_test_suite_struct_uint16_int64 -xtypes_v2_primitive_test_suite_struct_uint16_float32 -xtypes_v2_primitive_test_suite_struct_uint16_float64 -xtypes_v2_primitive_test_suite_struct_uint16_float128 -xtypes_v2_primitive_test_suite_struct_uint16_byte -xtypes_v2_primitive_test_suite_struct_uint16_char8 -xtypes_v2_primitive_test_suite_struct_uint32_uint8 -xtypes_v2_primitive_test_suite_struct_uint32_uint16 -xtypes_v2_primitive_test_suite_struct_uint32_uint64 -xtypes_v2_primitive_test_suite_struct_uint32_int8 -xtypes_v2_primitive_test_suite_struct_uint32_int16 -xtypes_v2_primitive_test_suite_struct_uint32_int32 -xtypes_v2_primitive_test_suite_struct_uint32_int64 -xtypes_v2_primitive_test_suite_struct_uint32_float32 -xtypes_v2_primitive_test_suite_struct_uint32_float64 -xtypes_v2_primitive_test_suite_struct_uint32_float128 -xtypes_v2_primitive_test_suite_struct_uint32_byte -xtypes_v2_primitive_test_suite_struct_uint32_char8 -xtypes_v2_primitive_test_suite_struct_uint64_uint8 -xtypes_v2_primitive_test_suite_struct_uint64_uint16 -xtypes_v2_primitive_test_suite_struct_uint64_uint32 -xtypes_v2_primitive_test_suite_struct_uint64_int8 -xtypes_v2_primitive_test_suite_struct_uint64_int16 -xtypes_v2_primitive_test_suite_struct_uint64_uint32 -xtypes_v2_primitive_test_suite_struct_uint64_int8 -xtypes_v2_primitive_test_suite_struct_uint64_int16 -xtypes_v2_primitive_test_suite_struct_uint64_int32 -xtypes_v2_primitive_test_suite_struct_uint64_int64 -xtypes_v2_primitive_test_suite_struct_uint64_float32 -xtypes_v2_primitive_test_suite_struct_uint64_float64 -xtypes_v2_primitive_test_suite_struct_uint64_float128 -xtypes_v2_primitive_test_suite_struct_uint64_byte -xtypes_v2_primitive_test_suite_struct_uint64_char8 -xtypes_v2_primitive_test_suite_struct_int8_uint8 -xtypes_v2_primitive_test_suite_struct_int8_uint16 -xtypes_v2_primitive_test_suite_struct_int8_uint32 -xtypes_v2_primitive_test_suite_struct_int8_uint64 -xtypes_v2_primitive_test_suite_struct_int8_int16 -xtypes_v2_primitive_test_suite_struct_int8_int32 -xtypes_v2_primitive_test_suite_struct_int8_int64 -xtypes_v2_primitive_test_suite_struct_int8_float32 -xtypes_v2_primitive_test_suite_struct_int8_float64 -xtypes_v2_primitive_test_suite_struct_int8_float128 -xtypes_v2_primitive_test_suite_struct_int8_byte -xtypes_v2_primitive_test_suite_struct_int8_char8 -xtypes_v2_primitive_test_suite_struct_int16_uint8 -xtypes_v2_primitive_test_suite_struct_int16_uint16 -xtypes_v2_primitive_test_suite_struct_int16_uint32 -xtypes_v2_primitive_test_suite_struct_int16_uint64 -xtypes_v2_primitive_test_suite_struct_int16_int8 -xtypes_v2_primitive_test_suite_struct_int16_int32 -xtypes_v2_primitive_test_suite_struct_int16_int64 -xtypes_v2_primitive_test_suite_struct_int16_float32 -xtypes_v2_primitive_test_suite_struct_int16_float64 -xtypes_v2_primitive_test_suite_struct_int16_float128 -xtypes_v2_primitive_test_suite_struct_int16_byte -xtypes_v2_primitive_test_suite_struct_int16_char8 -xtypes_v2_primitive_test_suite_struct_int32_uint8 -xtypes_v2_primitive_test_suite_struct_int32_uint16 -xtypes_v2_primitive_test_suite_struct_int32_uint32 -xtypes_v2_primitive_test_suite_struct_int32_uint64 -xtypes_v2_primitive_test_suite_struct_int32_int8 -xtypes_v2_primitive_test_suite_struct_int32_int16 -xtypes_v2_primitive_test_suite_struct_int32_int64 -xtypes_v2_primitive_test_suite_struct_int32_float32 -xtypes_v2_primitive_test_suite_struct_int32_float64 -xtypes_v2_primitive_test_suite_struct_int32_float128 -xtypes_v2_primitive_test_suite_struct_int32_byte -xtypes_v2_primitive_test_suite_struct_int32_char8 -xtypes_v2_primitive_test_suite_struct_int64_uint8 -xtypes_v2_primitive_test_suite_struct_int64_uint16 -xtypes_v2_primitive_test_suite_struct_int64_uint32 -xtypes_v2_primitive_test_suite_struct_int64_uint64 -xtypes_v2_primitive_test_suite_struct_int64_int8 -xtypes_v2_primitive_test_suite_struct_int64_int16 -xtypes_v2_primitive_test_suite_struct_int64_int32 -xtypes_v2_primitive_test_suite_struct_int64_float32 -xtypes_v2_primitive_test_suite_struct_int64_float64 -xtypes_v2_primitive_test_suite_struct_int64_float128 -xtypes_v2_primitive_test_suite_struct_int64_byte -xtypes_v2_primitive_test_suite_struct_int64_char8 -xtypes_v2_primitive_test_suite_struct_float32_uint8 -xtypes_v2_primitive_test_suite_struct_float32_uint16 -xtypes_v2_primitive_test_suite_struct_float32_uint32 -xtypes_v2_primitive_test_suite_struct_float32_uint64 -xtypes_v2_primitive_test_suite_struct_float32_int8 -xtypes_v2_primitive_test_suite_struct_float32_int16 -xtypes_v2_primitive_test_suite_struct_float32_int32 -xtypes_v2_primitive_test_suite_struct_float32_int64 -xtypes_v2_primitive_test_suite_struct_float32_float64 -xtypes_v2_primitive_test_suite_struct_float32_float128 -xtypes_v2_primitive_test_suite_struct_float32_byte -xtypes_v2_primitive_test_suite_struct_float32_char8 -xtypes_v2_primitive_test_suite_struct_float64_uint8 -xtypes_v2_primitive_test_suite_struct_float64_uint16 -xtypes_v2_primitive_test_suite_struct_float64_uint32 -xtypes_v2_primitive_test_suite_struct_float64_uint64 -xtypes_v2_primitive_test_suite_struct_float64_int8 -xtypes_v2_primitive_test_suite_struct_float64_int16 -xtypes_v2_primitive_test_suite_struct_float64_int32 -xtypes_v2_primitive_test_suite_struct_float64_int64 -xtypes_v2_primitive_test_suite_struct_float64_float32 -xtypes_v2_primitive_test_suite_struct_float64_float128 -xtypes_v2_primitive_test_suite_struct_float64_byte -xtypes_v2_primitive_test_suite_struct_float64_char8 -xtypes_v2_primitive_test_suite_struct_float128_uint8 -xtypes_v2_primitive_test_suite_struct_float128_uint16 -xtypes_v2_primitive_test_suite_struct_float128_uint32 -xtypes_v2_primitive_test_suite_struct_float128_uint64 -xtypes_v2_primitive_test_suite_struct_float128_int8 -xtypes_v2_primitive_test_suite_struct_float128_int16 -xtypes_v2_primitive_test_suite_struct_float128_int32 -xtypes_v2_primitive_test_suite_struct_float128_int64 -xtypes_v2_primitive_test_suite_struct_float128_float32 -xtypes_v2_primitive_test_suite_struct_float128_float64 -xtypes_v2_primitive_test_suite_struct_float128_float128 -xtypes_v2_primitive_test_suite_struct_float128_byte -xtypes_v2_primitive_test_suite_struct_float128_char8 -xtypes_v2_primitive_test_suite_struct_byte_uint8 -xtypes_v2_primitive_test_suite_struct_byte_uint16 -xtypes_v2_primitive_test_suite_struct_byte_uint32 -xtypes_v2_primitive_test_suite_struct_byte_uint64 -xtypes_v2_primitive_test_suite_struct_byte_int8 -xtypes_v2_primitive_test_suite_struct_byte_int16 -xtypes_v2_primitive_test_suite_struct_byte_int32 -xtypes_v2_primitive_test_suite_struct_byte_int64 -xtypes_v2_primitive_test_suite_struct_byte_float32 -xtypes_v2_primitive_test_suite_struct_byte_float64 -xtypes_v2_primitive_test_suite_struct_byte_float128 -xtypes_v2_primitive_test_suite_struct_byte_char8 -xtypes_v2_primitive_test_suite_struct_char8_uint8 -xtypes_v2_primitive_test_suite_struct_char8_uint16 -xtypes_v2_primitive_test_suite_struct_char8_uint32 -xtypes_v2_primitive_test_suite_struct_char8_uint64 -xtypes_v2_primitive_test_suite_struct_char8_int8 -xtypes_v2_primitive_test_suite_struct_char8_int16 -xtypes_v2_primitive_test_suite_struct_char8_int32 -xtypes_v2_primitive_test_suite_struct_char8_int64 -xtypes_v2_primitive_test_suite_struct_char8_float32 -xtypes_v2_primitive_test_suite_struct_char8_float64 -xtypes_v2_primitive_test_suite_struct_char8_float128 -xtypes_v2_primitive_test_suite_struct_char8_byte -xtypes_v2_sequence_test_suite_seq(int32)_seq(int32,10) -xtypes_v2_sequence_test_suite_seq(int32)_seq(int32,10)_check_bounds -xtypes_v2_sequence_test_suite_seq(int32,20)_seq(int32,10) -xtypes_v2_sequence_test_suite_seq(int32,20)_seq(int32,10)_check_bounds -xtypes_v2_sequence_test_suite_seq(int32,10)_seq(int32,20) -xtypes_v2_sequence_test_suite_seq(int32,10)_seq(int32,20)_check_bounds -xtypes_v2_sequence_test_suite_seq(str10,10)_seq(str20,10) -xtypes_v2_sequence_test_suite_seq(str20,10)_seq(str10,10) -xtypes_v2_sequence_test_suite_seq(str20,10)_seq(str10,10)_check -xtypes_v2_sequence_test_suite_seq(enum1)_seq(enum2) -xtypes_v2_sequence_test_suite_seq(SFinal,10)_seq(SFinalAlt,10) -xtypes_v2_sequence_test_suite_seq(SAppendable,10)_seq(SAppendableAlt,10) -xtypes_v2_sequence_test_suite_seq(SMutable,10)_seq(SMutableAlt,10) -xtypes_v2_string_test_suite_string_string10 -xtypes_v2_string_test_suite_string_string10_check -xtypes_v2_string_test_suite_string10_string20_check -xtypes_v2_string_test_suite_string20_string10_check -xtypes_v2_string_test_suite_wstring_wstring -xtypes_v2_string_test_suite_wstring_wstring10 -xtypes_v2_string_test_suite_wstring_wstring10_check -xtypes_v2_string_test_suite_wstring10_wstring20_check -xtypes_v2_string_test_suite_wstring20_wstring10_check -xtypes_v2_struct_test_suite_primitives_struct_mutable -xtypes_v2_struct_test_suite_struct_final_appendable -xtypes_v2_struct_test_suite_struct_final_mutable -xtypes_v2_struct_test_suite_struct_appendable_final -xtypes_v2_struct_test_suite_struct_appendable_mutable -xtypes_v2_struct_test_suite_struct_mutable_final -xtypes_v2_struct_test_suite_struct_mutable_appendable -xtypes_v2_struct_test_suite_struct_different_ids_ok -xtypes_v2_struct_test_suite_struct_different_ids -xtypes_v2_struct_test_suite_struct_different_names_ok -xtypes_v2_struct_test_suite_struct_different_names -xtypes_v2_struct_test_suite_struct_no_common_ids -xtypes_v2_struct_test_suite_struct_members_assignable_1 -xtypes_v2_struct_test_suite_struct_mustUnderstand_1 -xtypes_v2_struct_test_suite_struct_mustUnderstand_2 -xtypes_v2_struct_test_suite_struct_key_1 -xtypes_v2_struct_test_suite_struct_key_2 -xtypes_v2_struct_test_suite_struct_key_string_1 -xtypes_v2_struct_test_suite_struct_key_string_3 -xtypes_v2_struct_test_suite_struct_key_enum_1 -xtypes_v2_struct_test_suite_struct_key_enum_2 -xtypes_v2_struct_test_suite_struct_key_seq_1 -xtypes_v2_struct_test_suite_struct_key_seq_2 -xtypes_v2_struct_test_suite_struct_key_struct_1 -xtypes_v2_struct_test_suite_struct_key_struct_2 -xtypes_v2_struct_test_suite_struct_key_union_1 -xtypes_v2_struct_test_suite_struct_key_union_2 -xtypes_v2_type_consistency_test_suite_tc_force_type_validation_1 -xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_1 -xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_2 -xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_3 -xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_1 -xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_2 -xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_3 -xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_4 -xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_5 -xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_6 -xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_7 -xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_1 -xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_2 -xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_3 -xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_4 -xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_5 -xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_6 -xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_7 -xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_1 -xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_2 -xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_3 -xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_4 -xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_5 -xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_6 -xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_7 -xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_8 -xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_9 -xtypes_v2_union_test_suite_union_primitives_final -xtypes_v2_union_test_suite_union_primitives_appendable -xtypes_v2_union_test_suite_union_primitives_mutable -xtypes_v2_union_test_suite_union_final_appendable -xtypes_v2_union_test_suite_union_final_mutable -xtypes_v2_union_test_suite_union_appendable_mutable -xtypes_v2_union_test_suite_union_different_ids_1 -xtypes_v2_union_test_suite_union_different_ids_2 -xtypes_v2_union_test_suite_union_different_names_1 -xtypes_v2_union_test_suite_union_different_names_2 -xtypes_v2_union_test_suite_union_different_order_1 -xtypes_v2_union_test_suite_union_different_order_2 -xtypes_v2_union_test_suite_union_int16_int32 -xtypes_v2_union_test_suite_union_int16_int32_default -xtypes_v2_union_test_suite_union_int32_int32_default -xtypes_v2_union_test_suite_union_int32_default_int16 -xtypes_v2_union_test_suite_union_int32_default_int32 -xtypes_v2_union_test_suite_union_int32_default_int16_default -xtypes_v2_union_test_suite_union_int32_default_int32_default -xtypes_v2_union_test_suite_union_final_5_vs_6 -xtypes_v2_union_test_suite_union_final_6_vs_5 -xtypes_v2_union_test_suite_union_final_one_default_1 -xtypes_v2_union_test_suite_union_final_one_default_2 -xtypes_v2_union_test_suite_union_appendable_one_common_1 -xtypes_v2_union_test_suite_union_appendable_one_common_2 -xtypes_v2_union_test_suite_union_appendable_no_common_1 -xtypes_v2_union_test_suite_union_appendable_no_common_2 -xtypes_v2_union_test_suite_union_appendable_no_common_w_default -xtypes_v2_union_test_suite_union_mutable_one_common -xtypes_v2_union_test_suite_union_mutable_no_common -xtypes_v2_union_test_suite_union_mutable_no_common_w_default +# xtypes_v2_array_test_suite_int32[10]_int32[20] +# xtypes_v2_array_test_suite_int32[20]_int32[10] +# xtypes_v2_array_test_suite_int32[10]_uint32[10] +# xtypes_v2_array_test_suite_int32[10][2]_int32[20] +# xtypes_v2_array_test_suite_string10[10]_string20[10] +# xtypes_v2_array_test_suite_enum1[10]_enum2[10] +# xtypes_v2_array_test_suite_appendable_enum +# xtypes_v2_array_test_suite_SFinal[10]_S[20]_SFinalAlt[10]_S[20] +# xtypes_v2_array_test_suite_SAppendable[10]_S[20]_SAppendableAlt[10]_S[20] +# xtypes_v2_array_test_suite_SMutable[10]_S[20]_SMutableAlt[10]_S[20] +# xtypes_v2_extensibility_test_suite_ext_final_struct_2 +# xtypes_v2_extensibility_test_suite_ext_appendable_struct_2 +# xtypes_v2_extensibility_test_suite_ext_appendable_struct_3 +# xtypes_v2_extensibility_test_suite_ext_appendable_struct_4 +# xtypes_v2_extensibility_test_suite_ext_appendable_struct_5 +# xtypes_v2_extensibility_test_suite_ext_mutable_struct_1 +# xtypes_v2_extensibility_test_suite_ext_mutable_struct_2 +# xtypes_v2_extensibility_test_suite_ext_mutable_struct_3 +# xtypes_v2_extensibility_test_suite_ext_mutable_struct_4 +# xtypes_v2_extensibility_test_suite_ext_mutable_struct_5 +# xtypes_v2_extensibility_test_suite_ext_mutable_struct_6 +# xtypes_v2_extensibility_test_suite_ext_autoid_1 +# xtypes_v2_primitive_test_suite_struct_uint8_uint16 +# xtypes_v2_primitive_test_suite_struct_uint8_uint32 +# xtypes_v2_primitive_test_suite_struct_uint8_uint64 +# xtypes_v2_primitive_test_suite_struct_uint8_int8 +# xtypes_v2_primitive_test_suite_struct_uint8_int16 +# xtypes_v2_primitive_test_suite_struct_uint8_int32 +# xtypes_v2_primitive_test_suite_struct_uint8_int64 +# xtypes_v2_primitive_test_suite_struct_uint8_float32 +# xtypes_v2_primitive_test_suite_struct_uint8_float64 +# xtypes_v2_primitive_test_suite_struct_uint8_float128 +# xtypes_v2_primitive_test_suite_struct_uint8_byte +# xtypes_v2_primitive_test_suite_struct_uint8_char8 +# xtypes_v2_primitive_test_suite_struct_uint16_uint8 +# xtypes_v2_primitive_test_suite_struct_uint16_uint32 +# xtypes_v2_primitive_test_suite_struct_uint16_uint64 +# xtypes_v2_primitive_test_suite_struct_uint16_int8 +# xtypes_v2_primitive_test_suite_struct_uint16_int16 +# xtypes_v2_primitive_test_suite_struct_uint16_int32 +# xtypes_v2_primitive_test_suite_struct_uint16_int64 +# xtypes_v2_primitive_test_suite_struct_uint16_float32 +# xtypes_v2_primitive_test_suite_struct_uint16_float64 +# xtypes_v2_primitive_test_suite_struct_uint16_float128 +# xtypes_v2_primitive_test_suite_struct_uint16_byte +# xtypes_v2_primitive_test_suite_struct_uint16_char8 +# xtypes_v2_primitive_test_suite_struct_uint32_uint8 +# xtypes_v2_primitive_test_suite_struct_uint32_uint16 +# xtypes_v2_primitive_test_suite_struct_uint32_uint64 +# xtypes_v2_primitive_test_suite_struct_uint32_int8 +# xtypes_v2_primitive_test_suite_struct_uint32_int16 +# xtypes_v2_primitive_test_suite_struct_uint32_int32 +# xtypes_v2_primitive_test_suite_struct_uint32_int64 +# xtypes_v2_primitive_test_suite_struct_uint32_float32 +# xtypes_v2_primitive_test_suite_struct_uint32_float64 +# xtypes_v2_primitive_test_suite_struct_uint32_float128 +# xtypes_v2_primitive_test_suite_struct_uint32_byte +# xtypes_v2_primitive_test_suite_struct_uint32_char8 +# xtypes_v2_primitive_test_suite_struct_uint64_uint8 +# xtypes_v2_primitive_test_suite_struct_uint64_uint16 +# xtypes_v2_primitive_test_suite_struct_uint64_uint32 +# xtypes_v2_primitive_test_suite_struct_uint64_int8 +# xtypes_v2_primitive_test_suite_struct_uint64_int16 +# xtypes_v2_primitive_test_suite_struct_uint64_uint32 +# xtypes_v2_primitive_test_suite_struct_uint64_int8 +# xtypes_v2_primitive_test_suite_struct_uint64_int16 +# xtypes_v2_primitive_test_suite_struct_uint64_int32 +# xtypes_v2_primitive_test_suite_struct_uint64_int64 +# xtypes_v2_primitive_test_suite_struct_uint64_float32 +# xtypes_v2_primitive_test_suite_struct_uint64_float64 +# xtypes_v2_primitive_test_suite_struct_uint64_float128 +# xtypes_v2_primitive_test_suite_struct_uint64_byte +# xtypes_v2_primitive_test_suite_struct_uint64_char8 +# xtypes_v2_primitive_test_suite_struct_int8_uint8 +# xtypes_v2_primitive_test_suite_struct_int8_uint16 +# xtypes_v2_primitive_test_suite_struct_int8_uint32 +# xtypes_v2_primitive_test_suite_struct_int8_uint64 +# xtypes_v2_primitive_test_suite_struct_int8_int16 +# xtypes_v2_primitive_test_suite_struct_int8_int32 +# xtypes_v2_primitive_test_suite_struct_int8_int64 +# xtypes_v2_primitive_test_suite_struct_int8_float32 +# xtypes_v2_primitive_test_suite_struct_int8_float64 +# xtypes_v2_primitive_test_suite_struct_int8_float128 +# xtypes_v2_primitive_test_suite_struct_int8_byte +# xtypes_v2_primitive_test_suite_struct_int8_char8 +# xtypes_v2_primitive_test_suite_struct_int16_uint8 +# xtypes_v2_primitive_test_suite_struct_int16_uint16 +# xtypes_v2_primitive_test_suite_struct_int16_uint32 +# xtypes_v2_primitive_test_suite_struct_int16_uint64 +# xtypes_v2_primitive_test_suite_struct_int16_int8 +# xtypes_v2_primitive_test_suite_struct_int16_int32 +# xtypes_v2_primitive_test_suite_struct_int16_int64 +# xtypes_v2_primitive_test_suite_struct_int16_float32 +# xtypes_v2_primitive_test_suite_struct_int16_float64 +# xtypes_v2_primitive_test_suite_struct_int16_float128 +# xtypes_v2_primitive_test_suite_struct_int16_byte +# xtypes_v2_primitive_test_suite_struct_int16_char8 +# xtypes_v2_primitive_test_suite_struct_int32_uint8 +# xtypes_v2_primitive_test_suite_struct_int32_uint16 +# xtypes_v2_primitive_test_suite_struct_int32_uint32 +# xtypes_v2_primitive_test_suite_struct_int32_uint64 +# xtypes_v2_primitive_test_suite_struct_int32_int8 +# xtypes_v2_primitive_test_suite_struct_int32_int16 +# xtypes_v2_primitive_test_suite_struct_int32_int64 +# xtypes_v2_primitive_test_suite_struct_int32_float32 +# xtypes_v2_primitive_test_suite_struct_int32_float64 +# xtypes_v2_primitive_test_suite_struct_int32_float128 +# xtypes_v2_primitive_test_suite_struct_int32_byte +# xtypes_v2_primitive_test_suite_struct_int32_char8 +# xtypes_v2_primitive_test_suite_struct_int64_uint8 +# xtypes_v2_primitive_test_suite_struct_int64_uint16 +# xtypes_v2_primitive_test_suite_struct_int64_uint32 +# xtypes_v2_primitive_test_suite_struct_int64_uint64 +# xtypes_v2_primitive_test_suite_struct_int64_int8 +# xtypes_v2_primitive_test_suite_struct_int64_int16 +# xtypes_v2_primitive_test_suite_struct_int64_int32 +# xtypes_v2_primitive_test_suite_struct_int64_float32 +# xtypes_v2_primitive_test_suite_struct_int64_float64 +# xtypes_v2_primitive_test_suite_struct_int64_float128 +# xtypes_v2_primitive_test_suite_struct_int64_byte +# xtypes_v2_primitive_test_suite_struct_int64_char8 +# xtypes_v2_primitive_test_suite_struct_float32_uint8 +# xtypes_v2_primitive_test_suite_struct_float32_uint16 +# xtypes_v2_primitive_test_suite_struct_float32_uint32 +# xtypes_v2_primitive_test_suite_struct_float32_uint64 +# xtypes_v2_primitive_test_suite_struct_float32_int8 +# xtypes_v2_primitive_test_suite_struct_float32_int16 +# xtypes_v2_primitive_test_suite_struct_float32_int32 +# xtypes_v2_primitive_test_suite_struct_float32_int64 +# xtypes_v2_primitive_test_suite_struct_float32_float64 +# xtypes_v2_primitive_test_suite_struct_float32_float128 +# xtypes_v2_primitive_test_suite_struct_float32_byte +# xtypes_v2_primitive_test_suite_struct_float32_char8 +# xtypes_v2_primitive_test_suite_struct_float64_uint8 +# xtypes_v2_primitive_test_suite_struct_float64_uint16 +# xtypes_v2_primitive_test_suite_struct_float64_uint32 +# xtypes_v2_primitive_test_suite_struct_float64_uint64 +# xtypes_v2_primitive_test_suite_struct_float64_int8 +# xtypes_v2_primitive_test_suite_struct_float64_int16 +# xtypes_v2_primitive_test_suite_struct_float64_int32 +# xtypes_v2_primitive_test_suite_struct_float64_int64 +# xtypes_v2_primitive_test_suite_struct_float64_float32 +# xtypes_v2_primitive_test_suite_struct_float64_float128 +# xtypes_v2_primitive_test_suite_struct_float64_byte +# xtypes_v2_primitive_test_suite_struct_float64_char8 +# xtypes_v2_primitive_test_suite_struct_float128_uint8 +# xtypes_v2_primitive_test_suite_struct_float128_uint16 +# xtypes_v2_primitive_test_suite_struct_float128_uint32 +# xtypes_v2_primitive_test_suite_struct_float128_uint64 +# xtypes_v2_primitive_test_suite_struct_float128_int8 +# xtypes_v2_primitive_test_suite_struct_float128_int16 +# xtypes_v2_primitive_test_suite_struct_float128_int32 +# xtypes_v2_primitive_test_suite_struct_float128_int64 +# xtypes_v2_primitive_test_suite_struct_float128_float32 +# xtypes_v2_primitive_test_suite_struct_float128_float64 +# xtypes_v2_primitive_test_suite_struct_float128_float128 +# xtypes_v2_primitive_test_suite_struct_float128_byte +# xtypes_v2_primitive_test_suite_struct_float128_char8 +# xtypes_v2_primitive_test_suite_struct_byte_uint8 +# xtypes_v2_primitive_test_suite_struct_byte_uint16 +# xtypes_v2_primitive_test_suite_struct_byte_uint32 +# xtypes_v2_primitive_test_suite_struct_byte_uint64 +# xtypes_v2_primitive_test_suite_struct_byte_int8 +# xtypes_v2_primitive_test_suite_struct_byte_int16 +# xtypes_v2_primitive_test_suite_struct_byte_int32 +# xtypes_v2_primitive_test_suite_struct_byte_int64 +# xtypes_v2_primitive_test_suite_struct_byte_float32 +# xtypes_v2_primitive_test_suite_struct_byte_float64 +# xtypes_v2_primitive_test_suite_struct_byte_float128 +# xtypes_v2_primitive_test_suite_struct_byte_char8 +# xtypes_v2_primitive_test_suite_struct_char8_uint8 +# xtypes_v2_primitive_test_suite_struct_char8_uint16 +# xtypes_v2_primitive_test_suite_struct_char8_uint32 +# xtypes_v2_primitive_test_suite_struct_char8_uint64 +# xtypes_v2_primitive_test_suite_struct_char8_int8 +# xtypes_v2_primitive_test_suite_struct_char8_int16 +# xtypes_v2_primitive_test_suite_struct_char8_int32 +# xtypes_v2_primitive_test_suite_struct_char8_int64 +# xtypes_v2_primitive_test_suite_struct_char8_float32 +# xtypes_v2_primitive_test_suite_struct_char8_float64 +# xtypes_v2_primitive_test_suite_struct_char8_float128 +# xtypes_v2_primitive_test_suite_struct_char8_byte +# xtypes_v2_sequence_test_suite_seq(int32)_seq(int32,10) +# xtypes_v2_sequence_test_suite_seq(int32)_seq(int32,10)_check_bounds +# xtypes_v2_sequence_test_suite_seq(int32,20)_seq(int32,10) +# xtypes_v2_sequence_test_suite_seq(int32,20)_seq(int32,10)_check_bounds +# xtypes_v2_sequence_test_suite_seq(int32,10)_seq(int32,20) +# xtypes_v2_sequence_test_suite_seq(int32,10)_seq(int32,20)_check_bounds +# xtypes_v2_sequence_test_suite_seq(str10,10)_seq(str20,10) +# xtypes_v2_sequence_test_suite_seq(str20,10)_seq(str10,10) +# xtypes_v2_sequence_test_suite_seq(str20,10)_seq(str10,10)_check +# xtypes_v2_sequence_test_suite_seq(enum1)_seq(enum2) +# xtypes_v2_sequence_test_suite_seq(SFinal,10)_seq(SFinalAlt,10) +# xtypes_v2_sequence_test_suite_seq(SAppendable,10)_seq(SAppendableAlt,10) +# xtypes_v2_sequence_test_suite_seq(SMutable,10)_seq(SMutableAlt,10) +# xtypes_v2_string_test_suite_string_string10 +# xtypes_v2_string_test_suite_string_string10_check +# xtypes_v2_string_test_suite_string10_string20_check +# xtypes_v2_string_test_suite_string20_string10_check +# xtypes_v2_string_test_suite_wstring_wstring +# xtypes_v2_string_test_suite_wstring_wstring10 +# xtypes_v2_string_test_suite_wstring_wstring10_check +# xtypes_v2_string_test_suite_wstring10_wstring20_check +# xtypes_v2_string_test_suite_wstring20_wstring10_check +# xtypes_v2_struct_test_suite_primitives_struct_mutable +# xtypes_v2_struct_test_suite_struct_final_appendable +# xtypes_v2_struct_test_suite_struct_final_mutable +# xtypes_v2_struct_test_suite_struct_appendable_final +# xtypes_v2_struct_test_suite_struct_appendable_mutable +# xtypes_v2_struct_test_suite_struct_mutable_final +# xtypes_v2_struct_test_suite_struct_mutable_appendable +# xtypes_v2_struct_test_suite_struct_different_ids_ok +# xtypes_v2_struct_test_suite_struct_different_ids +# xtypes_v2_struct_test_suite_struct_different_names_ok +# xtypes_v2_struct_test_suite_struct_different_names +# xtypes_v2_struct_test_suite_struct_no_common_ids +# xtypes_v2_struct_test_suite_struct_members_assignable_1 +# xtypes_v2_struct_test_suite_struct_mustUnderstand_1 +# xtypes_v2_struct_test_suite_struct_mustUnderstand_2 +# xtypes_v2_struct_test_suite_struct_key_1 +# xtypes_v2_struct_test_suite_struct_key_2 +# xtypes_v2_struct_test_suite_struct_key_string_1 +# xtypes_v2_struct_test_suite_struct_key_string_3 +# xtypes_v2_struct_test_suite_struct_key_enum_1 +# xtypes_v2_struct_test_suite_struct_key_enum_2 +# xtypes_v2_struct_test_suite_struct_key_seq_1 +# xtypes_v2_struct_test_suite_struct_key_seq_2 +# xtypes_v2_struct_test_suite_struct_key_struct_1 +# xtypes_v2_struct_test_suite_struct_key_struct_2 +# xtypes_v2_struct_test_suite_struct_key_union_1 +# xtypes_v2_struct_test_suite_struct_key_union_2 +# xtypes_v2_type_consistency_test_suite_tc_force_type_validation_1 +# xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_1 +# xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_2 +# xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_3 +# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_1 +# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_2 +# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_3 +# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_4 +# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_5 +# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_6 +# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_7 +# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_1 +# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_2 +# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_3 +# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_4 +# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_5 +# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_6 +# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_7 +# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_1 +# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_2 +# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_3 +# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_4 +# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_5 +# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_6 +# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_7 +# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_8 +# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_9 +# xtypes_v2_union_test_suite_union_primitives_final +# xtypes_v2_union_test_suite_union_primitives_appendable +# xtypes_v2_union_test_suite_union_primitives_mutable +# xtypes_v2_union_test_suite_union_final_appendable +# xtypes_v2_union_test_suite_union_final_mutable +# xtypes_v2_union_test_suite_union_appendable_mutable +# xtypes_v2_union_test_suite_union_different_ids_1 +# xtypes_v2_union_test_suite_union_different_ids_2 +# xtypes_v2_union_test_suite_union_different_names_1 +# xtypes_v2_union_test_suite_union_different_names_2 +# xtypes_v2_union_test_suite_union_different_order_1 +# xtypes_v2_union_test_suite_union_different_order_2 +# xtypes_v2_union_test_suite_union_int16_int32 +# xtypes_v2_union_test_suite_union_int16_int32_default +# xtypes_v2_union_test_suite_union_int32_int32_default +# xtypes_v2_union_test_suite_union_int32_default_int16 +# xtypes_v2_union_test_suite_union_int32_default_int32 +# xtypes_v2_union_test_suite_union_int32_default_int16_default +# xtypes_v2_union_test_suite_union_int32_default_int32_default +# xtypes_v2_union_test_suite_union_final_5_vs_6 +# xtypes_v2_union_test_suite_union_final_6_vs_5 +# xtypes_v2_union_test_suite_union_final_one_default_1 +# xtypes_v2_union_test_suite_union_final_one_default_2 +# xtypes_v2_union_test_suite_union_appendable_one_common_1 +# xtypes_v2_union_test_suite_union_appendable_one_common_2 +# xtypes_v2_union_test_suite_union_appendable_no_common_1 +# xtypes_v2_union_test_suite_union_appendable_no_common_2 +# xtypes_v2_union_test_suite_union_appendable_no_common_w_default +# xtypes_v2_union_test_suite_union_mutable_one_common +# xtypes_v2_union_test_suite_union_mutable_no_common +# xtypes_v2_union_test_suite_union_mutable_no_common_w_default +# \ No newline at end of file From 0d9d732b91e4c5a9cc458d1c909c983bff3bc16b Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Tue, 21 Jul 2026 15:12:18 +0200 Subject: [PATCH 05/22] add debug --- src/rs/DustDDS/src/main.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index 3de7650..11908d5 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -717,6 +717,8 @@ fn run_subscriber( for sample in samples { if sample.sample_info.valid_data { println!("sample_received()"); + println!("sample.data {:?}", sample.data.as_ref().unwrap()); + println!("expected_data {:?}", expected_data.as_ref().unwrap()); if let Some(expected) = &expected_data { if sample.data.as_ref() == Some(expected) { println!("Received sample is the same as loaded"); From 348f61f7b71e11c7e982e5a7778b7ec0430a723b Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Tue, 21 Jul 2026 16:42:44 +0200 Subject: [PATCH 06/22] change try_construct_kind to UseDefault --- src/rs/DustDDS/Cargo.toml | 4 ++-- src/rs/DustDDS/src/main.rs | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/rs/DustDDS/Cargo.toml b/src/rs/DustDDS/Cargo.toml index 099fba6..bfa5c21 100644 --- a/src/rs/DustDDS/Cargo.toml +++ b/src/rs/DustDDS/Cargo.toml @@ -8,6 +8,6 @@ rust-version = "1.87" [dependencies] clap = { version = "4.5.47", features = ["derive", "string"] } ctrlc = "3.4" -dust_dds = { version = "0.16.0", git = "https://github.com/s2e-systems/dust-dds", branch = "main", features = [ +dust_dds = { version = "0.16.0", features = [ "xtypes-xml", -] } +]} diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index 11908d5..9d702a4 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -24,7 +24,7 @@ use dust_dds::{ publication::data_writer::DataWriter, subscription::data_reader::DataReader, xtypes::dynamic_type::{ - DynamicData, DynamicDataFactory, DynamicType, DynamicTypeBuilderFactory, + DynamicData, DynamicDataFactory, DynamicType, DynamicTypeBuilderFactory, TryConstructKind, }, }; use std::{ @@ -521,7 +521,6 @@ fn init_subscriber( Ok(data_reader) } - // static void print_sample1_to (struct type_cache *tc, const unsigned char *sample, const DDS_XTypes_CompleteTypeObject *typeobj, struct context *c, const char *label, bool is_base_type, bool is_opt) // { // if (print_sample1_simple (sample, typeobj->_d, c, label, NULL, is_opt)) @@ -717,8 +716,6 @@ fn run_subscriber( for sample in samples { if sample.sample_info.valid_data { println!("sample_received()"); - println!("sample.data {:?}", sample.data.as_ref().unwrap()); - println!("expected_data {:?}", expected_data.as_ref().unwrap()); if let Some(expected) = &expected_data { if sample.data.as_ref() == Some(expected) { println!("Received sample is the same as loaded"); @@ -831,9 +828,12 @@ fn main() -> Result<(), Return> { { let file_path = format!("{}/xml/{}.xml", type_folder, type_file); let type_xml = std::fs::read_to_string(file_path).unwrap(); - let type_builder = + let mut type_builder = DynamicTypeBuilderFactory::create_type_w_document(&type_xml, type_name, vec![]) .unwrap(); + for (_id, member) in type_builder.get_all_members().unwrap() { + member.descriptor.try_construct_kind = TryConstructKind::UseDefault; + } dt = Some(type_builder.build()); } From 5924c6fef90a4edd50286ce57d946c638f85fee6 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Wed, 22 Jul 2026 15:39:07 +0200 Subject: [PATCH 07/22] add on_inconsistent_topic --- src/rs/DustDDS/src/main.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index 9d702a4..a104bd4 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -311,6 +311,19 @@ impl DomainParticipantListener for Listener { ); core::future::ready(()) } + + fn on_inconsistent_topic( + &mut self, + the_topic: dust_dds::dds_async::topic::TopicAsync, + _status: dust_dds::infrastructure::status::InconsistentTopicStatus, + ) -> impl Future + Send { + println!( + "on_inconsistent_topic() topic: '{}' type: '{}'", + the_topic.get_name(), + the_topic.get_type_name() + ); + core::future::ready(()) + } } fn init_publisher( From 82dcd5edd9fd3dd526c39cde566f4581256922b1 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Thu, 23 Jul 2026 17:14:15 +0200 Subject: [PATCH 08/22] increase timeout --- interoperability_report.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interoperability_report.py b/interoperability_report.py index 904c483..26065da 100755 --- a/interoperability_report.py +++ b/interoperability_report.py @@ -948,7 +948,7 @@ def main(): # applications. A TestSuite contains a collection of TestCases. suite = junitparser.TestSuite(f"{name_publisher}---{name_subscriber}") - timeout = 10 + timeout = 20 now = datetime.now() _manifest_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'unsupported_test_manifest') From 6f6d8928cb7851e25e50e553be52c2a66a8cbc46 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Fri, 24 Jul 2026 16:37:32 +0200 Subject: [PATCH 09/22] add type_consistency and change sleep --- src/rs/DustDDS/src/main.rs | 299 +++++++++---------------------------- 1 file changed, 69 insertions(+), 230 deletions(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index a104bd4..93864cd 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -15,7 +15,8 @@ use dust_dds::{ self, DataRepresentationQosPolicy, DurabilityQosPolicy, HistoryQosPolicy, HistoryQosPolicyKind, OwnershipQosPolicy, OwnershipQosPolicyKind, OwnershipStrengthQosPolicy, PartitionQosPolicy, ReliabilityQosPolicy, - XCDR_DATA_REPRESENTATION, XCDR2_DATA_REPRESENTATION, + TypeConsistencyEnforcementQosPolicy, TypeConsistencyKind, XCDR_DATA_REPRESENTATION, + XCDR2_DATA_REPRESENTATION, }, sample_info::{ANY_INSTANCE_STATE, ANY_SAMPLE_STATE, ANY_VIEW_STATE}, status::{NO_STATUS, StatusKind}, @@ -455,72 +456,72 @@ fn init_subscriber( ); } - // // Set type consistency enforcement based on arguments - // let mut type_consistency = TypeConsistencyEnforcementQosPolicy::default(); - - // if let Some(allow_type_coercion) = options.allow_type_coercion { - // match allow_type_coercion { - // TypeConsistencyArg::T => type_consistency.kind = TypeConsistencyKind::AllowTypeCoercion, - // TypeConsistencyArg::F => { - // type_consistency.kind = TypeConsistencyKind::DisallowTypeCoercion - // } - // TypeConsistencyArg::D => { - // type_consistency.kind = TypeConsistencyEnforcementQosPolicy::default().kind - // } - // } - // } - // if let Some(force_type_validation) = options.force_type_validation { - // match force_type_validation { - // TypeConsistencyArg::T => type_consistency.force_type_validation = true, - // TypeConsistencyArg::F => type_consistency.force_type_validation = false, - // TypeConsistencyArg::D => { - // type_consistency.force_type_validation = - // TypeConsistencyEnforcementQosPolicy::default().force_type_validation - // } - // } - // } - // if let Some(ignore_member_names) = options.ignore_member_names { - // match ignore_member_names { - // TypeConsistencyArg::T => type_consistency.ignore_member_names = true, - // TypeConsistencyArg::F => type_consistency.ignore_member_names = false, - // TypeConsistencyArg::D => { - // type_consistency.ignore_member_names = - // TypeConsistencyEnforcementQosPolicy::default().ignore_member_names - // } - // } - // } - // if let Some(ignore_seq_bounds) = options.ignore_seq_bounds { - // match ignore_seq_bounds { - // TypeConsistencyArg::T => type_consistency.ignore_sequence_bounds = true, - // TypeConsistencyArg::F => type_consistency.ignore_sequence_bounds = false, - // TypeConsistencyArg::D => { - // type_consistency.ignore_sequence_bounds = - // TypeConsistencyEnforcementQosPolicy::default().ignore_sequence_bounds - // } - // } - // } - // if let Some(ignore_str_bounds) = options.ignore_str_bounds { - // match ignore_str_bounds { - // TypeConsistencyArg::T => type_consistency.ignore_string_bounds = true, - // TypeConsistencyArg::F => type_consistency.ignore_string_bounds = false, - // TypeConsistencyArg::D => { - // type_consistency.ignore_string_bounds = - // TypeConsistencyEnforcementQosPolicy::default().ignore_string_bounds - // } - // } - // } - // if let Some(prevent_type_widening) = options.prevent_type_widening { - // match prevent_type_widening { - // TypeConsistencyArg::T => type_consistency.prevent_type_widening = true, - // TypeConsistencyArg::F => type_consistency.prevent_type_widening = false, - // TypeConsistencyArg::D => { - // type_consistency.prevent_type_widening = - // TypeConsistencyEnforcementQosPolicy::default().prevent_type_widening - // } - // } - // } - - // data_reader_qos.type_consistency = type_consistency; + // Set type consistency enforcement based on arguments + let mut type_consistency = TypeConsistencyEnforcementQosPolicy::default(); + + if let Some(allow_type_coercion) = options.allow_type_coercion { + match allow_type_coercion { + TypeConsistencyArg::T => type_consistency.kind = TypeConsistencyKind::AllowTypeCoercion, + TypeConsistencyArg::F => { + type_consistency.kind = TypeConsistencyKind::DisallowTypeCoercion + } + TypeConsistencyArg::D => { + type_consistency.kind = TypeConsistencyEnforcementQosPolicy::default().kind + } + } + } + if let Some(force_type_validation) = options.force_type_validation { + match force_type_validation { + TypeConsistencyArg::T => type_consistency.force_type_validation = true, + TypeConsistencyArg::F => type_consistency.force_type_validation = false, + TypeConsistencyArg::D => { + type_consistency.force_type_validation = + TypeConsistencyEnforcementQosPolicy::default().force_type_validation + } + } + } + if let Some(ignore_member_names) = options.ignore_member_names { + match ignore_member_names { + TypeConsistencyArg::T => type_consistency.ignore_member_names = true, + TypeConsistencyArg::F => type_consistency.ignore_member_names = false, + TypeConsistencyArg::D => { + type_consistency.ignore_member_names = + TypeConsistencyEnforcementQosPolicy::default().ignore_member_names + } + } + } + if let Some(ignore_seq_bounds) = options.ignore_seq_bounds { + match ignore_seq_bounds { + TypeConsistencyArg::T => type_consistency.ignore_sequence_bounds = true, + TypeConsistencyArg::F => type_consistency.ignore_sequence_bounds = false, + TypeConsistencyArg::D => { + type_consistency.ignore_sequence_bounds = + TypeConsistencyEnforcementQosPolicy::default().ignore_sequence_bounds + } + } + } + if let Some(ignore_str_bounds) = options.ignore_str_bounds { + match ignore_str_bounds { + TypeConsistencyArg::T => type_consistency.ignore_string_bounds = true, + TypeConsistencyArg::F => type_consistency.ignore_string_bounds = false, + TypeConsistencyArg::D => { + type_consistency.ignore_string_bounds = + TypeConsistencyEnforcementQosPolicy::default().ignore_string_bounds + } + } + } + if let Some(prevent_type_widening) = options.prevent_type_widening { + match prevent_type_widening { + TypeConsistencyArg::T => type_consistency.prevent_type_widening = true, + TypeConsistencyArg::F => type_consistency.prevent_type_widening = false, + TypeConsistencyArg::D => { + type_consistency.prevent_type_widening = + TypeConsistencyEnforcementQosPolicy::default().prevent_type_widening + } + } + } + + data_reader_qos.type_consistency = type_consistency; println!("Create reader for topic: {}", topic_name); @@ -534,168 +535,6 @@ fn init_subscriber( Ok(data_reader) } -// static void print_sample1_to (struct type_cache *tc, const unsigned char *sample, const DDS_XTypes_CompleteTypeObject *typeobj, struct context *c, const char *label, bool is_base_type, bool is_opt) -// { -// if (print_sample1_simple (sample, typeobj->_d, c, label, NULL, is_opt)) -// return; -// switch (typeobj->_d) -// { -// case DDS_XTypes_TK_ALIAS: { -// print_sample1_ti (tc, sample, &typeobj->_u.alias_type.body.common.related_type, 0, c, label, false, is_opt); -// break; -// } -// case DDS_XTypes_TK_SEQUENCE: { -// const DDS_XTypes_TypeIdentifier *et = &typeobj->_u.sequence_type.element.common.type; -// const dds_sequence_t *p = align (sample, c, _Alignof (dds_sequence_t), sizeof (dds_sequence_t)); -// struct context c1 = { .key = c->key, .valid_data = c->valid_data, .offset = 0, .maxalign = 1, .needs_comma = false }; -// if (c->needs_comma) fputc (',', stdout); -// if (label) printf ("\"%s\":", label); -// printf ("["); -// for (uint32_t i = 0; i < p->_length; i++) -// { -// print_sample1_ti (tc, (const unsigned char *) p->_buffer, et, 0, &c1, NULL, false, false); -// finish_sequence_element (&c1); -// } -// printf ("]"); -// c->needs_comma = true; -// break; -// } -// case DDS_XTypes_TK_STRUCTURE: { -// struct typeinfo *info = type_cache_lookup_typeobj (tc, typeobj); -// const DDS_XTypes_CompleteStructType *t = &typeobj->_u.struct_type; -// const unsigned char *p = align (sample, c, info->align, info->size); -// if (c->needs_comma) fputc (',', stdout); -// if (label) printf ("\"%s\":", label); -// if (!is_base_type) { printf ("{"); c->needs_comma = false; } -// struct context c1 = { .key = c->key, .valid_data = c->valid_data, .offset = 0, .maxalign = 1, .needs_comma = c->needs_comma }; -// if (t->header.base_type._d != DDS_XTypes_TK_NONE) -// print_sample1_ti (tc, p, &t->header.base_type, 0, &c1, NULL, true, false); -// for (uint32_t i = 0; i < t->member_seq._length; i++) -// { -// const DDS_XTypes_CompleteStructMember *m = &t->member_seq._buffer[i]; -// c1.key = c->key && (m->common.member_flags & DDS_XTypes_IS_KEY); -// if (!is_indirect_member (m->common.member_flags)) { -// print_sample1_ti (tc, p, &m->common.member_type_id, 0, &c1, *m->detail.name ? m->detail.name : NULL, false, false); -// } else { -// void const * const *p1 = (const void *) align (p, &c1, _Alignof (void *), sizeof (void *)); -// if (c1.key || c->valid_data) { -// if (*p1 != NULL) { // missing optional/external values are not visible at all in the output -// struct context c2 = { .key = c1.key && !is_optional_member (m->common.member_flags), .valid_data = c1.valid_data, .offset = 0, .maxalign = 1, .needs_comma = c1.needs_comma }; -// print_sample1_ti (tc, *p1, &m->common.member_type_id, 0, &c2, *m->detail.name ? m->detail.name : NULL, false, true); -// c1.needs_comma = c2.needs_comma; -// } -// } -// } -// } -// if (!is_base_type) { -// printf ("}"); -// c1.needs_comma = true; -// } -// c->needs_comma = c1.needs_comma; -// break; -// } -// case DDS_XTypes_TK_ENUM: { -// struct typeinfo *info = type_cache_lookup_typeobj (tc, typeobj); -// const DDS_XTypes_CompleteEnumeratedType *t = &typeobj->_u.enumerated_type; -// const int *p = align (sample, c, info->align, info->size); -// if (c->key || c->valid_data) -// { -// if (c->needs_comma) fputc (',', stdout); -// if (label) printf ("\"%s\":", label); -// for (uint32_t l = 0; l < t->literal_seq._length; l++) -// { -// if (t->literal_seq._buffer[l].common.value == *p) -// printf ("\"%s\"", t->literal_seq._buffer[l].detail.name); -// } -// c->needs_comma = true; -// } -// break; -// } -// case DDS_XTypes_TK_BITMASK: { -// struct typeinfo *info = type_cache_lookup_typeobj (tc, typeobj); -// const DDS_XTypes_CompleteBitmaskType *t = &typeobj->_u.bitmask_type; -// const void *p = align (sample, c, info->align, info->size); -// if (c->key || c->valid_data) -// { -// if (c->needs_comma) fputc (',', stdout); -// if (label) printf ("\"%s\":", label); -// printf ("%"PRIu64, read_bitmask_value (p, t->header.common.bit_bound)); -// c->needs_comma = true; -// } -// break; -// } -// case DDS_XTypes_TK_UNION: { -// struct typeinfo *info = type_cache_lookup_typeobj (tc, typeobj); -// const DDS_XTypes_CompleteUnionType *t = &typeobj->_u.union_type; -// const unsigned char *p = align (sample, c, info->align, info->size); -// if (c->needs_comma) fputc (',', stdout); -// if (label) printf ("\"%s\":", label); -// printf ("{"); -// int32_t disc_value = 0; -// struct context c1 = { .key = c->key, .valid_data = c->valid_data, .offset = 0, .maxalign = 1, .needs_comma = false }; -// if (t->discriminator.common.type_id._d == DDS_XTypes_EK_COMPLETE) -// { -// struct typeinfo *info_disc = type_cache_lookup_typeid (tc, &t->discriminator.common.type_id); -// if (info_disc->typeobj->_d == DDS_XTypes_TK_ENUM) -// { -// disc_value = * (int32_t *) p; -// } -// else if (info_disc->typeobj->_d == DDS_XTypes_TK_BITMASK) -// { -// if (info_disc->typeobj->_u.bitmask_type.header.common.bit_bound > 32) -// disc_value = (int32_t) (* (int64_t *) p); -// else if (info_disc->typeobj->_u.bitmask_type.header.common.bit_bound > 16) -// disc_value = * (int32_t *) p; -// else if (info_disc->typeobj->_u.bitmask_type.header.common.bit_bound > 8) -// disc_value = * (int16_t *) p; -// else -// disc_value = * (int8_t *) p; -// } -// else -// { -// printf ("unsupported union discriminant value %u\n", info_disc->typeobj->_d); -// abort (); -// } -// print_sample1_to (tc, p, info_disc->typeobj, &c1, "_d", false, false); -// } -// else if (!print_sample1_simple (p, t->discriminator.common.type_id._d, &c1, "_d", &disc_value, false)) -// { -// abort (); -// } -// const DDS_XTypes_CompleteUnionMember *m = find_union_member_for_disc (t, disc_value); -// if (m != NULL) -// { -// const unsigned char *data = p + type_cache_union_data_offset (tc, t); -// struct context c2 = { .key = c1.key, .valid_data = c1.valid_data, .offset = 0, .maxalign = 1, .needs_comma = c1.needs_comma }; -// if (!is_indirect_member (m->common.member_flags)) -// { -// print_sample1_ti (tc, data, &m->common.type_id, 0, &c2, *m->detail.name ? m->detail.name : NULL, false, false); -// } -// else -// { -// void const * const *p1 = (const void *) align (data, &c2, _Alignof (void *), sizeof (void *)); -// if ((c2.key || c2.valid_data) && *p1 != NULL) -// { -// struct context c3 = { .key = c2.key && !is_optional_member (m->common.member_flags), .valid_data = c2.valid_data, .offset = 0, .maxalign = 1, .needs_comma = c2.needs_comma }; -// print_sample1_ti (tc, *p1, &m->common.type_id, 0, &c3, *m->detail.name ? m->detail.name : NULL, false, true); -// c2.needs_comma = c3.needs_comma; -// } -// } -// c1.needs_comma = c2.needs_comma; -// } -// printf ("}"); -// c->needs_comma = true; -// } -// } -// } - -// void dtl_print_sample (struct dyntypelib *dtl, bool valid_data, const void *sample, const DDS_XTypes_CompleteTypeObject *typeobj) -// { -// struct context c1 = { .valid_data = valid_data, .key = true, .offset = 0, .maxalign = 1, .needs_comma = false }; -// print_sample1_to (dtl->typecache, sample, typeobj, &c1, NULL, false, false); -// printf ("\n"); -// } - fn run_subscriber( data_reader: &DataReader>, options: Options, @@ -739,10 +578,10 @@ fn run_subscriber( } previous_handle = Some(sample.sample_info.instance_handle); } - std::thread::sleep(std::time::Duration::from_millis(100)); } Err(_) => break, } + std::thread::sleep(std::time::Duration::from_millis(100)); } } Ok(()) From c936fbe72811731445edeee1933df75528112636 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Fri, 24 Jul 2026 19:42:15 +0200 Subject: [PATCH 10/22] add flushing --- src/rs/DustDDS/src/main.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index 93864cd..9d309f3 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -33,6 +33,7 @@ use std::{ process::{ExitCode, Termination}, sync::mpsc::Receiver, }; +use std::io::{self, Write}; #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] #[clap(rename_all = "kebab_case")] @@ -282,6 +283,7 @@ impl DomainParticipantListener for Listener { "on_publication_matched() topic: '{}' type: '{}' : matched readers {} (change = {})", topic_name, type_name, status.current_count, status.current_count_change ); + io::stdout().flush().unwrap(); core::future::ready(()) } @@ -296,6 +298,7 @@ impl DomainParticipantListener for Listener { "on_subscription_matched() topic: '{}' type: '{}' : matched writers {} (change = {})", topic_name, type_name, status.current_count, status.current_count_change ); + io::stdout().flush().unwrap(); core::future::ready(()) } @@ -310,6 +313,7 @@ impl DomainParticipantListener for Listener { "on_liveliness_changed() topic: '{}' type: '{}' : (alive = {}, not_alive = {}", topic_name, type_name, status.alive_count, status.not_alive_count ); + io::stdout().flush().unwrap(); core::future::ready(()) } @@ -323,6 +327,7 @@ impl DomainParticipantListener for Listener { the_topic.get_name(), the_topic.get_type_name() ); + io::stdout().flush().unwrap(); core::future::ready(()) } } @@ -345,6 +350,7 @@ fn init_publisher( )?; println!("Create topic: {}", topic_name); + io::stdout().flush().unwrap(); let publisher_qos = QosKind::Specific(PublisherQos { partition: options.partition_qos_policy(), @@ -372,6 +378,7 @@ fn init_publisher( "Create writer for topic: {} type: {}", topic_name, type_name ); + io::stdout().flush().unwrap(); let data_writer = publisher.create_datawriter::( &topic, @@ -403,6 +410,7 @@ fn run_publisher( while all_done.try_recv().is_err() { if options.print_writer_samples { println!(" Wrote:"); + io::stdout().flush().unwrap(); } // Write dynamic data data_writer.write(dd.clone(), None).ok(); @@ -430,7 +438,8 @@ fn init_subscriber( ) .unwrap(); - println!("Create topic: {}", topic_name); + println!("Create topic: {}", topic_name, ); + io::stdout().flush().unwrap(); let subscriber_qos = QosKind::Specific(SubscriberQos { partition: options.partition_qos_policy(), @@ -524,6 +533,7 @@ fn init_subscriber( data_reader_qos.type_consistency = type_consistency; println!("Create reader for topic: {}", topic_name); + io::stdout().flush().unwrap(); let data_reader = subscriber.create_datareader::( &topic, @@ -568,11 +578,14 @@ fn run_subscriber( for sample in samples { if sample.sample_info.valid_data { println!("sample_received()"); + io::stdout().flush().unwrap(); if let Some(expected) = &expected_data { if sample.data.as_ref() == Some(expected) { println!("Received sample is the same as loaded"); + io::stdout().flush().unwrap(); } else { println!("Received sample is not the same as loaded"); + io::stdout().flush().unwrap(); } } } @@ -722,6 +735,7 @@ fn main() -> Result<(), Return> { } println!("Done."); + io::stdout().flush().unwrap(); Ok(()) } From 78ce381adcf267945a615a632dbf66770571c4e5 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Fri, 24 Jul 2026 20:07:33 +0200 Subject: [PATCH 11/22] add locks --- src/rs/DustDDS/src/main.rs | 46 +++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index 9d309f3..8b60dc8 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -279,11 +279,12 @@ impl DomainParticipantListener for Listener { ) -> impl Future + Send { let topic_name = the_writer.get_topic().get_name(); let type_name = the_writer.get_topic().get_type_name(); - println!( + let mut stdout = io::stdout().lock(); + writeln!( + stdout, "on_publication_matched() topic: '{}' type: '{}' : matched readers {} (change = {})", topic_name, type_name, status.current_count, status.current_count_change - ); - io::stdout().flush().unwrap(); + ).unwrap(); core::future::ready(()) } @@ -294,11 +295,12 @@ impl DomainParticipantListener for Listener { ) -> impl Future + Send { let topic_name = the_reader.get_topicdescription().get_name(); let type_name = the_reader.get_topicdescription().get_type_name(); - println!( + let mut stdout = io::stdout().lock(); + writeln!( + stdout, "on_subscription_matched() topic: '{}' type: '{}' : matched writers {} (change = {})", topic_name, type_name, status.current_count, status.current_count_change - ); - io::stdout().flush().unwrap(); + ).unwrap(); core::future::ready(()) } @@ -309,11 +311,12 @@ impl DomainParticipantListener for Listener { ) -> impl Future + Send { let topic_name = the_reader.get_topicdescription().get_name(); let type_name = the_reader.get_topicdescription().get_type_name(); - println!( + let mut stdout = io::stdout().lock(); + writeln!( + stdout, "on_liveliness_changed() topic: '{}' type: '{}' : (alive = {}, not_alive = {}", topic_name, type_name, status.alive_count, status.not_alive_count - ); - io::stdout().flush().unwrap(); + ).unwrap(); core::future::ready(()) } @@ -322,12 +325,13 @@ impl DomainParticipantListener for Listener { the_topic: dust_dds::dds_async::topic::TopicAsync, _status: dust_dds::infrastructure::status::InconsistentTopicStatus, ) -> impl Future + Send { - println!( + let mut stdout = io::stdout().lock(); + writeln!( + stdout, "on_inconsistent_topic() topic: '{}' type: '{}'", the_topic.get_name(), the_topic.get_type_name() - ); - io::stdout().flush().unwrap(); + ).unwrap(); core::future::ready(()) } } @@ -350,7 +354,7 @@ fn init_publisher( )?; println!("Create topic: {}", topic_name); - io::stdout().flush().unwrap(); + let _ = io::stdout().lock(); let publisher_qos = QosKind::Specific(PublisherQos { partition: options.partition_qos_policy(), @@ -378,7 +382,7 @@ fn init_publisher( "Create writer for topic: {} type: {}", topic_name, type_name ); - io::stdout().flush().unwrap(); + let _ = io::stdout().lock(); let data_writer = publisher.create_datawriter::( &topic, @@ -410,7 +414,7 @@ fn run_publisher( while all_done.try_recv().is_err() { if options.print_writer_samples { println!(" Wrote:"); - io::stdout().flush().unwrap(); + let _ = io::stdout().lock(); } // Write dynamic data data_writer.write(dd.clone(), None).ok(); @@ -439,7 +443,7 @@ fn init_subscriber( .unwrap(); println!("Create topic: {}", topic_name, ); - io::stdout().flush().unwrap(); + let _ = io::stdout().lock(); let subscriber_qos = QosKind::Specific(SubscriberQos { partition: options.partition_qos_policy(), @@ -533,7 +537,7 @@ fn init_subscriber( data_reader_qos.type_consistency = type_consistency; println!("Create reader for topic: {}", topic_name); - io::stdout().flush().unwrap(); + let _ = io::stdout().lock(); let data_reader = subscriber.create_datareader::( &topic, @@ -578,14 +582,14 @@ fn run_subscriber( for sample in samples { if sample.sample_info.valid_data { println!("sample_received()"); - io::stdout().flush().unwrap(); + let _ = io::stdout().lock(); if let Some(expected) = &expected_data { if sample.data.as_ref() == Some(expected) { println!("Received sample is the same as loaded"); - io::stdout().flush().unwrap(); + let _ = io::stdout().lock(); } else { println!("Received sample is not the same as loaded"); - io::stdout().flush().unwrap(); + let _ = io::stdout().lock(); } } } @@ -735,7 +739,7 @@ fn main() -> Result<(), Return> { } println!("Done."); - io::stdout().flush().unwrap(); + let _ = io::stdout().lock(); Ok(()) } From 45441453900bd23e075728eeb24e027a6027ccf8 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Fri, 24 Jul 2026 20:37:38 +0200 Subject: [PATCH 12/22] move locks --- src/rs/DustDDS/src/main.rs | 50 +++++++++++++++----------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index 8b60dc8..ba4d18a 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -28,12 +28,12 @@ use dust_dds::{ DynamicData, DynamicDataFactory, DynamicType, DynamicTypeBuilderFactory, TryConstructKind, }, }; +use std::io::{self, Write}; use std::{ fmt::Debug, process::{ExitCode, Termination}, sync::mpsc::Receiver, }; -use std::io::{self, Write}; #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] #[clap(rename_all = "kebab_case")] @@ -279,12 +279,10 @@ impl DomainParticipantListener for Listener { ) -> impl Future + Send { let topic_name = the_writer.get_topic().get_name(); let type_name = the_writer.get_topic().get_type_name(); - let mut stdout = io::stdout().lock(); - writeln!( - stdout, + println!( "on_publication_matched() topic: '{}' type: '{}' : matched readers {} (change = {})", topic_name, type_name, status.current_count, status.current_count_change - ).unwrap(); + ); core::future::ready(()) } @@ -295,12 +293,10 @@ impl DomainParticipantListener for Listener { ) -> impl Future + Send { let topic_name = the_reader.get_topicdescription().get_name(); let type_name = the_reader.get_topicdescription().get_type_name(); - let mut stdout = io::stdout().lock(); - writeln!( - stdout, + println!( "on_subscription_matched() topic: '{}' type: '{}' : matched writers {} (change = {})", topic_name, type_name, status.current_count, status.current_count_change - ).unwrap(); + ); core::future::ready(()) } @@ -311,12 +307,10 @@ impl DomainParticipantListener for Listener { ) -> impl Future + Send { let topic_name = the_reader.get_topicdescription().get_name(); let type_name = the_reader.get_topicdescription().get_type_name(); - let mut stdout = io::stdout().lock(); - writeln!( - stdout, + println!( "on_liveliness_changed() topic: '{}' type: '{}' : (alive = {}, not_alive = {}", topic_name, type_name, status.alive_count, status.not_alive_count - ).unwrap(); + ); core::future::ready(()) } @@ -325,13 +319,11 @@ impl DomainParticipantListener for Listener { the_topic: dust_dds::dds_async::topic::TopicAsync, _status: dust_dds::infrastructure::status::InconsistentTopicStatus, ) -> impl Future + Send { - let mut stdout = io::stdout().lock(); - writeln!( - stdout, + println!( "on_inconsistent_topic() topic: '{}' type: '{}'", the_topic.get_name(), the_topic.get_type_name() - ).unwrap(); + ); core::future::ready(()) } } @@ -341,6 +333,8 @@ fn init_publisher( options: Options, dynamic_type: DynamicType<'static>, ) -> Result>, InitializeError> { + let mut stdout_lock = io::stdout().lock(); + let topic_name = options.topic_name.clone().unwrap_or("test".to_string()); let type_name = options.type_name.clone().unwrap(); @@ -353,8 +347,7 @@ fn init_publisher( dynamic_type, )?; - println!("Create topic: {}", topic_name); - let _ = io::stdout().lock(); + writeln!(stdout_lock, "Create topic: {}", topic_name).unwrap(); let publisher_qos = QosKind::Specific(PublisherQos { partition: options.partition_qos_policy(), @@ -378,11 +371,12 @@ fn init_publisher( data_writer_qos.ownership_strength = options.ownership_strength_qos_policy(); } - println!( + writeln!( + stdout_lock, "Create writer for topic: {} type: {}", topic_name, type_name - ); - let _ = io::stdout().lock(); + ) + .unwrap(); let data_writer = publisher.create_datawriter::( &topic, @@ -428,6 +422,8 @@ fn init_subscriber( options: Options, dynamic_type: DynamicType<'static>, ) -> Result>, InitializeError> { + let mut stdout_lock = io::stdout().lock(); + let topic_name = options.topic_name.clone().unwrap_or("test".to_string()); let type_name = options.type_name.clone().unwrap(); @@ -442,8 +438,7 @@ fn init_subscriber( ) .unwrap(); - println!("Create topic: {}", topic_name, ); - let _ = io::stdout().lock(); + writeln!(stdout_lock, "Create topic: {}", topic_name).unwrap(); let subscriber_qos = QosKind::Specific(SubscriberQos { partition: options.partition_qos_policy(), @@ -536,8 +531,7 @@ fn init_subscriber( data_reader_qos.type_consistency = type_consistency; - println!("Create reader for topic: {}", topic_name); - let _ = io::stdout().lock(); + writeln!(stdout_lock, "Create reader for topic: {}", topic_name).unwrap(); let data_reader = subscriber.create_datareader::( &topic, @@ -582,14 +576,11 @@ fn run_subscriber( for sample in samples { if sample.sample_info.valid_data { println!("sample_received()"); - let _ = io::stdout().lock(); if let Some(expected) = &expected_data { if sample.data.as_ref() == Some(expected) { println!("Received sample is the same as loaded"); - let _ = io::stdout().lock(); } else { println!("Received sample is not the same as loaded"); - let _ = io::stdout().lock(); } } } @@ -739,7 +730,6 @@ fn main() -> Result<(), Return> { } println!("Done."); - let _ = io::stdout().lock(); Ok(()) } From cd258f18d64557ca0a852dbe02676db776db83ae Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Fri, 24 Jul 2026 21:02:15 +0200 Subject: [PATCH 13/22] remove locks --- src/rs/DustDDS/src/main.rs | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index ba4d18a..aee1f1d 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -28,7 +28,6 @@ use dust_dds::{ DynamicData, DynamicDataFactory, DynamicType, DynamicTypeBuilderFactory, TryConstructKind, }, }; -use std::io::{self, Write}; use std::{ fmt::Debug, process::{ExitCode, Termination}, @@ -333,11 +332,15 @@ fn init_publisher( options: Options, dynamic_type: DynamicType<'static>, ) -> Result>, InitializeError> { - let mut stdout_lock = io::stdout().lock(); - let topic_name = options.topic_name.clone().unwrap_or("test".to_string()); let type_name = options.type_name.clone().unwrap(); + println!("Create topic: {}", topic_name); + println!( + "Create writer for topic: {} type: {}", + topic_name, type_name + ); + let topic = participant.create_dynamic_topic( &topic_name, &type_name, @@ -347,8 +350,6 @@ fn init_publisher( dynamic_type, )?; - writeln!(stdout_lock, "Create topic: {}", topic_name).unwrap(); - let publisher_qos = QosKind::Specific(PublisherQos { partition: options.partition_qos_policy(), ..Default::default() @@ -371,13 +372,6 @@ fn init_publisher( data_writer_qos.ownership_strength = options.ownership_strength_qos_policy(); } - writeln!( - stdout_lock, - "Create writer for topic: {} type: {}", - topic_name, type_name - ) - .unwrap(); - let data_writer = publisher.create_datawriter::( &topic, QosKind::Specific(data_writer_qos), @@ -408,7 +402,6 @@ fn run_publisher( while all_done.try_recv().is_err() { if options.print_writer_samples { println!(" Wrote:"); - let _ = io::stdout().lock(); } // Write dynamic data data_writer.write(dd.clone(), None).ok(); @@ -422,11 +415,12 @@ fn init_subscriber( options: Options, dynamic_type: DynamicType<'static>, ) -> Result>, InitializeError> { - let mut stdout_lock = io::stdout().lock(); - let topic_name = options.topic_name.clone().unwrap_or("test".to_string()); let type_name = options.type_name.clone().unwrap(); + println!("Create topic: {}", topic_name); + println!("Create reader for topic: {}", topic_name); + let topic = participant .create_dynamic_topic( &topic_name, @@ -438,8 +432,6 @@ fn init_subscriber( ) .unwrap(); - writeln!(stdout_lock, "Create topic: {}", topic_name).unwrap(); - let subscriber_qos = QosKind::Specific(SubscriberQos { partition: options.partition_qos_policy(), ..Default::default() @@ -531,8 +523,6 @@ fn init_subscriber( data_reader_qos.type_consistency = type_consistency; - writeln!(stdout_lock, "Create reader for topic: {}", topic_name).unwrap(); - let data_reader = subscriber.create_datareader::( &topic, QosKind::Specific(data_reader_qos), From 25982621bdc27952f964c7ca37a2c4c7656dd1df Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Sun, 26 Jul 2026 20:51:40 +0200 Subject: [PATCH 14/22] add sample print --- interoperability_report.py | 2 +- src/rs/DustDDS/src/main.rs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/interoperability_report.py b/interoperability_report.py index 26065da..904c483 100755 --- a/interoperability_report.py +++ b/interoperability_report.py @@ -948,7 +948,7 @@ def main(): # applications. A TestSuite contains a collection of TestCases. suite = junitparser.TestSuite(f"{name_publisher}---{name_subscriber}") - timeout = 20 + timeout = 10 now = datetime.now() _manifest_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'unsupported_test_manifest') diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index aee1f1d..8d100ff 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -402,6 +402,7 @@ fn run_publisher( while all_done.try_recv().is_err() { if options.print_writer_samples { println!(" Wrote:"); + println!("{:?}", dd); } // Write dynamic data data_writer.write(dd.clone(), None).ok(); From 4931ee586e3a8690fc9c909227b66a4b0c545fc4 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Tue, 28 Jul 2026 15:49:06 +0200 Subject: [PATCH 15/22] add data.is_some check --- src/rs/DustDDS/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index 8d100ff..f136f82 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -565,7 +565,7 @@ fn run_subscriber( match read_result { Ok(samples) => { for sample in samples { - if sample.sample_info.valid_data { + if sample.sample_info.valid_data && sample.data.is_some() { println!("sample_received()"); if let Some(expected) = &expected_data { if sample.data.as_ref() == Some(expected) { From bb74e4182f2fcb4803f80b5cff94df3d70eceab4 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Wed, 29 Jul 2026 17:41:32 +0200 Subject: [PATCH 16/22] make ignore_member_names default to true --- src/rs/DustDDS/src/main.rs | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index f136f82..7fbf1b8 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -459,6 +459,8 @@ fn init_subscriber( // Set type consistency enforcement based on arguments let mut type_consistency = TypeConsistencyEnforcementQosPolicy::default(); + // Note: The default of the DDS XTypes standard is false + type_consistency.ignore_member_names = true; if let Some(allow_type_coercion) = options.allow_type_coercion { match allow_type_coercion { @@ -466,59 +468,42 @@ fn init_subscriber( TypeConsistencyArg::F => { type_consistency.kind = TypeConsistencyKind::DisallowTypeCoercion } - TypeConsistencyArg::D => { - type_consistency.kind = TypeConsistencyEnforcementQosPolicy::default().kind - } + TypeConsistencyArg::D => (), } } if let Some(force_type_validation) = options.force_type_validation { match force_type_validation { TypeConsistencyArg::T => type_consistency.force_type_validation = true, TypeConsistencyArg::F => type_consistency.force_type_validation = false, - TypeConsistencyArg::D => { - type_consistency.force_type_validation = - TypeConsistencyEnforcementQosPolicy::default().force_type_validation - } + TypeConsistencyArg::D => (), } } if let Some(ignore_member_names) = options.ignore_member_names { match ignore_member_names { TypeConsistencyArg::T => type_consistency.ignore_member_names = true, TypeConsistencyArg::F => type_consistency.ignore_member_names = false, - TypeConsistencyArg::D => { - type_consistency.ignore_member_names = - TypeConsistencyEnforcementQosPolicy::default().ignore_member_names - } + TypeConsistencyArg::D => (), } } if let Some(ignore_seq_bounds) = options.ignore_seq_bounds { match ignore_seq_bounds { TypeConsistencyArg::T => type_consistency.ignore_sequence_bounds = true, TypeConsistencyArg::F => type_consistency.ignore_sequence_bounds = false, - TypeConsistencyArg::D => { - type_consistency.ignore_sequence_bounds = - TypeConsistencyEnforcementQosPolicy::default().ignore_sequence_bounds - } + TypeConsistencyArg::D => (), } } if let Some(ignore_str_bounds) = options.ignore_str_bounds { match ignore_str_bounds { TypeConsistencyArg::T => type_consistency.ignore_string_bounds = true, TypeConsistencyArg::F => type_consistency.ignore_string_bounds = false, - TypeConsistencyArg::D => { - type_consistency.ignore_string_bounds = - TypeConsistencyEnforcementQosPolicy::default().ignore_string_bounds - } + TypeConsistencyArg::D => (), } } if let Some(prevent_type_widening) = options.prevent_type_widening { match prevent_type_widening { TypeConsistencyArg::T => type_consistency.prevent_type_widening = true, TypeConsistencyArg::F => type_consistency.prevent_type_widening = false, - TypeConsistencyArg::D => { - type_consistency.prevent_type_widening = - TypeConsistencyEnforcementQosPolicy::default().prevent_type_widening - } + TypeConsistencyArg::D => (), } } From 99a7c03657791c14aac9d2ccbea54071e2c65367 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Sat, 1 Aug 2026 14:28:10 +0200 Subject: [PATCH 17/22] make UseDefault only when not explicitly mentioned in xml --- src/rs/DustDDS/Cargo.toml | 5 ++--- src/rs/DustDDS/src/main.rs | 46 +++++++++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/rs/DustDDS/Cargo.toml b/src/rs/DustDDS/Cargo.toml index bfa5c21..72aacdd 100644 --- a/src/rs/DustDDS/Cargo.toml +++ b/src/rs/DustDDS/Cargo.toml @@ -8,6 +8,5 @@ rust-version = "1.87" [dependencies] clap = { version = "4.5.47", features = ["derive", "string"] } ctrlc = "3.4" -dust_dds = { version = "0.16.0", features = [ - "xtypes-xml", -]} +dust_dds = { version = "0.16.0", features = ["xtypes-xml"] } +roxmltree = "0.20" diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index 7fbf1b8..bbec4a9 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -636,6 +636,45 @@ impl From for Return { } } +fn get_explicit_try_construct_members( + xml_str: &str, + type_name: &str, +) -> std::collections::HashSet { + let mut explicit_members = std::collections::HashSet::new(); + let Ok(doc) = roxmltree::Document::parse(xml_str) else { + return explicit_members; + }; + + let target_name = type_name.rsplit("::").next().unwrap_or(type_name); + + for node in doc.descendants() { + if node.is_element() + && (node.tag_name().name() == "struct" || node.tag_name().name() == "union") + { + if node.attribute("name") == Some(target_name) { + for child in node.descendants() { + if child.is_element() { + let tag = child.tag_name().name(); + if tag == "member" || tag == "discriminator" { + if child.attribute("tryConstruct").is_some() { + let m_name = if tag == "discriminator" { + Some("discriminator") + } else { + child.attribute("name") + }; + if let Some(name) = m_name { + explicit_members.insert(name.to_string()); + } + } + } + } + } + } + } + } + explicit_members +} + fn main() -> Result<(), Return> { let (tx, rx) = std::sync::mpsc::channel(); ctrlc::set_handler(move || { @@ -667,8 +706,13 @@ fn main() -> Result<(), Return> { let mut type_builder = DynamicTypeBuilderFactory::create_type_w_document(&type_xml, type_name, vec![]) .unwrap(); + // Because Connext is having UseDefault as default forcefully change that here too. The XTypes specification as + // Discard specified as default in 7.2.2.7 Try Construct behavior + let explicit_members = get_explicit_try_construct_members(&type_xml, type_name); for (_id, member) in type_builder.get_all_members().unwrap() { - member.descriptor.try_construct_kind = TryConstructKind::UseDefault; + if !explicit_members.contains(member.descriptor.name) { + member.descriptor.try_construct_kind = TryConstructKind::UseDefault; + } } dt = Some(type_builder.build()); } From 02b1c118e9d6250b17bc74b81a5d4e45448f8438 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Wed, 5 Aug 2026 08:52:11 +0200 Subject: [PATCH 18/22] remove TryConstruct fidling --- src/rs/DustDDS/Cargo.toml | 1 - src/rs/DustDDS/src/main.rs | 49 ++------------------------------------ 2 files changed, 2 insertions(+), 48 deletions(-) diff --git a/src/rs/DustDDS/Cargo.toml b/src/rs/DustDDS/Cargo.toml index 72aacdd..984f6e5 100644 --- a/src/rs/DustDDS/Cargo.toml +++ b/src/rs/DustDDS/Cargo.toml @@ -9,4 +9,3 @@ rust-version = "1.87" clap = { version = "4.5.47", features = ["derive", "string"] } ctrlc = "3.4" dust_dds = { version = "0.16.0", features = ["xtypes-xml"] } -roxmltree = "0.20" diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index bbec4a9..ea6c480 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -25,7 +25,7 @@ use dust_dds::{ publication::data_writer::DataWriter, subscription::data_reader::DataReader, xtypes::dynamic_type::{ - DynamicData, DynamicDataFactory, DynamicType, DynamicTypeBuilderFactory, TryConstructKind, + DynamicData, DynamicDataFactory, DynamicType, DynamicTypeBuilderFactory, }, }; use std::{ @@ -636,44 +636,7 @@ impl From for Return { } } -fn get_explicit_try_construct_members( - xml_str: &str, - type_name: &str, -) -> std::collections::HashSet { - let mut explicit_members = std::collections::HashSet::new(); - let Ok(doc) = roxmltree::Document::parse(xml_str) else { - return explicit_members; - }; - let target_name = type_name.rsplit("::").next().unwrap_or(type_name); - - for node in doc.descendants() { - if node.is_element() - && (node.tag_name().name() == "struct" || node.tag_name().name() == "union") - { - if node.attribute("name") == Some(target_name) { - for child in node.descendants() { - if child.is_element() { - let tag = child.tag_name().name(); - if tag == "member" || tag == "discriminator" { - if child.attribute("tryConstruct").is_some() { - let m_name = if tag == "discriminator" { - Some("discriminator") - } else { - child.attribute("name") - }; - if let Some(name) = m_name { - explicit_members.insert(name.to_string()); - } - } - } - } - } - } - } - } - explicit_members -} fn main() -> Result<(), Return> { let (tx, rx) = std::sync::mpsc::channel(); @@ -703,17 +666,9 @@ fn main() -> Result<(), Return> { { let file_path = format!("{}/xml/{}.xml", type_folder, type_file); let type_xml = std::fs::read_to_string(file_path).unwrap(); - let mut type_builder = + let type_builder = DynamicTypeBuilderFactory::create_type_w_document(&type_xml, type_name, vec![]) .unwrap(); - // Because Connext is having UseDefault as default forcefully change that here too. The XTypes specification as - // Discard specified as default in 7.2.2.7 Try Construct behavior - let explicit_members = get_explicit_try_construct_members(&type_xml, type_name); - for (_id, member) in type_builder.get_all_members().unwrap() { - if !explicit_members.contains(member.descriptor.name) { - member.descriptor.try_construct_kind = TryConstructKind::UseDefault; - } - } dt = Some(type_builder.build()); } From ccc1aa4cbf534cb1442b3eaad4d0223b009f48fd Mon Sep 17 00:00:00 2001 From: Joao Rebelo <2730147+jrebelo@users.noreply.github.com> Date: Fri, 21 Aug 2026 23:59:32 +0200 Subject: [PATCH 19/22] Add disable_type_info option --- src/rs/DustDDS/src/main.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index ea6c480..f1de598 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -1,6 +1,7 @@ use clap::{Parser, ValueEnum}; use ctrlc; use dust_dds::{ + configuration::DustDdsConfigurationBuilder, dds_async::topic_description::TopicDescriptionAsync, domain::{ domain_participant::DomainParticipant, @@ -15,11 +16,11 @@ use dust_dds::{ self, DataRepresentationQosPolicy, DurabilityQosPolicy, HistoryQosPolicy, HistoryQosPolicyKind, OwnershipQosPolicy, OwnershipQosPolicyKind, OwnershipStrengthQosPolicy, PartitionQosPolicy, ReliabilityQosPolicy, - TypeConsistencyEnforcementQosPolicy, TypeConsistencyKind, XCDR_DATA_REPRESENTATION, - XCDR2_DATA_REPRESENTATION, + TypeConsistencyEnforcementQosPolicy, TypeConsistencyKind, XCDR2_DATA_REPRESENTATION, + XCDR_DATA_REPRESENTATION, }, sample_info::{ANY_INSTANCE_STATE, ANY_SAMPLE_STATE, ANY_VIEW_STATE}, - status::{NO_STATUS, StatusKind}, + status::{StatusKind, NO_STATUS}, time::DurationKind, }, publication::data_writer::DataWriter, @@ -574,7 +575,12 @@ fn run_subscriber( fn initialize(options: &Options) -> Result { let participant_factory = DomainParticipantFactory::get_instance(); - // Set domain participant factory QoS if needed + if options.disable_type_info { + let configuration = DustDdsConfigurationBuilder::new() + .enable_type_information(false) + .build()?; + *participant_factory.get_mut_configuration() = configuration; + } let participant = participant_factory.create_participant( options.domain_id, @@ -636,8 +642,6 @@ impl From for Return { } } - - fn main() -> Result<(), Return> { let (tx, rx) = std::sync::mpsc::channel(); ctrlc::set_handler(move || { From 09f9f905c0464905b46047edf67fe18682a57f52 Mon Sep 17 00:00:00 2001 From: Joao Rebelo <2730147+jrebelo@users.noreply.github.com> Date: Sat, 22 Aug 2026 21:06:02 +0200 Subject: [PATCH 20/22] Add ignore_member_names when using default option --- src/rs/DustDDS/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rs/DustDDS/src/main.rs b/src/rs/DustDDS/src/main.rs index f1de598..483084e 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -483,7 +483,7 @@ fn init_subscriber( match ignore_member_names { TypeConsistencyArg::T => type_consistency.ignore_member_names = true, TypeConsistencyArg::F => type_consistency.ignore_member_names = false, - TypeConsistencyArg::D => (), + TypeConsistencyArg::D => type_consistency.ignore_member_names = false, } } if let Some(ignore_seq_bounds) = options.ignore_seq_bounds { From 4fa427d65e65e968d528cf57a2c6b781e50c8fd8 Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Wed, 9 Sep 2026 13:05:09 +0200 Subject: [PATCH 21/22] remove commented -out unsupported tests --- unsupported_test_manifest/dust_dds-0.16.0.txt | 296 +----------------- 1 file changed, 6 insertions(+), 290 deletions(-) diff --git a/unsupported_test_manifest/dust_dds-0.16.0.txt b/unsupported_test_manifest/dust_dds-0.16.0.txt index ea7fba2..2fae547 100644 --- a/unsupported_test_manifest/dust_dds-0.16.0.txt +++ b/unsupported_test_manifest/dust_dds-0.16.0.txt @@ -1,290 +1,6 @@ -# xtypes_v2_array_test_suite_int32[10]_int32[20] -# xtypes_v2_array_test_suite_int32[20]_int32[10] -# xtypes_v2_array_test_suite_int32[10]_uint32[10] -# xtypes_v2_array_test_suite_int32[10][2]_int32[20] -# xtypes_v2_array_test_suite_string10[10]_string20[10] -# xtypes_v2_array_test_suite_enum1[10]_enum2[10] -# xtypes_v2_array_test_suite_appendable_enum -# xtypes_v2_array_test_suite_SFinal[10]_S[20]_SFinalAlt[10]_S[20] -# xtypes_v2_array_test_suite_SAppendable[10]_S[20]_SAppendableAlt[10]_S[20] -# xtypes_v2_array_test_suite_SMutable[10]_S[20]_SMutableAlt[10]_S[20] -# xtypes_v2_extensibility_test_suite_ext_final_struct_2 -# xtypes_v2_extensibility_test_suite_ext_appendable_struct_2 -# xtypes_v2_extensibility_test_suite_ext_appendable_struct_3 -# xtypes_v2_extensibility_test_suite_ext_appendable_struct_4 -# xtypes_v2_extensibility_test_suite_ext_appendable_struct_5 -# xtypes_v2_extensibility_test_suite_ext_mutable_struct_1 -# xtypes_v2_extensibility_test_suite_ext_mutable_struct_2 -# xtypes_v2_extensibility_test_suite_ext_mutable_struct_3 -# xtypes_v2_extensibility_test_suite_ext_mutable_struct_4 -# xtypes_v2_extensibility_test_suite_ext_mutable_struct_5 -# xtypes_v2_extensibility_test_suite_ext_mutable_struct_6 -# xtypes_v2_extensibility_test_suite_ext_autoid_1 -# xtypes_v2_primitive_test_suite_struct_uint8_uint16 -# xtypes_v2_primitive_test_suite_struct_uint8_uint32 -# xtypes_v2_primitive_test_suite_struct_uint8_uint64 -# xtypes_v2_primitive_test_suite_struct_uint8_int8 -# xtypes_v2_primitive_test_suite_struct_uint8_int16 -# xtypes_v2_primitive_test_suite_struct_uint8_int32 -# xtypes_v2_primitive_test_suite_struct_uint8_int64 -# xtypes_v2_primitive_test_suite_struct_uint8_float32 -# xtypes_v2_primitive_test_suite_struct_uint8_float64 -# xtypes_v2_primitive_test_suite_struct_uint8_float128 -# xtypes_v2_primitive_test_suite_struct_uint8_byte -# xtypes_v2_primitive_test_suite_struct_uint8_char8 -# xtypes_v2_primitive_test_suite_struct_uint16_uint8 -# xtypes_v2_primitive_test_suite_struct_uint16_uint32 -# xtypes_v2_primitive_test_suite_struct_uint16_uint64 -# xtypes_v2_primitive_test_suite_struct_uint16_int8 -# xtypes_v2_primitive_test_suite_struct_uint16_int16 -# xtypes_v2_primitive_test_suite_struct_uint16_int32 -# xtypes_v2_primitive_test_suite_struct_uint16_int64 -# xtypes_v2_primitive_test_suite_struct_uint16_float32 -# xtypes_v2_primitive_test_suite_struct_uint16_float64 -# xtypes_v2_primitive_test_suite_struct_uint16_float128 -# xtypes_v2_primitive_test_suite_struct_uint16_byte -# xtypes_v2_primitive_test_suite_struct_uint16_char8 -# xtypes_v2_primitive_test_suite_struct_uint32_uint8 -# xtypes_v2_primitive_test_suite_struct_uint32_uint16 -# xtypes_v2_primitive_test_suite_struct_uint32_uint64 -# xtypes_v2_primitive_test_suite_struct_uint32_int8 -# xtypes_v2_primitive_test_suite_struct_uint32_int16 -# xtypes_v2_primitive_test_suite_struct_uint32_int32 -# xtypes_v2_primitive_test_suite_struct_uint32_int64 -# xtypes_v2_primitive_test_suite_struct_uint32_float32 -# xtypes_v2_primitive_test_suite_struct_uint32_float64 -# xtypes_v2_primitive_test_suite_struct_uint32_float128 -# xtypes_v2_primitive_test_suite_struct_uint32_byte -# xtypes_v2_primitive_test_suite_struct_uint32_char8 -# xtypes_v2_primitive_test_suite_struct_uint64_uint8 -# xtypes_v2_primitive_test_suite_struct_uint64_uint16 -# xtypes_v2_primitive_test_suite_struct_uint64_uint32 -# xtypes_v2_primitive_test_suite_struct_uint64_int8 -# xtypes_v2_primitive_test_suite_struct_uint64_int16 -# xtypes_v2_primitive_test_suite_struct_uint64_uint32 -# xtypes_v2_primitive_test_suite_struct_uint64_int8 -# xtypes_v2_primitive_test_suite_struct_uint64_int16 -# xtypes_v2_primitive_test_suite_struct_uint64_int32 -# xtypes_v2_primitive_test_suite_struct_uint64_int64 -# xtypes_v2_primitive_test_suite_struct_uint64_float32 -# xtypes_v2_primitive_test_suite_struct_uint64_float64 -# xtypes_v2_primitive_test_suite_struct_uint64_float128 -# xtypes_v2_primitive_test_suite_struct_uint64_byte -# xtypes_v2_primitive_test_suite_struct_uint64_char8 -# xtypes_v2_primitive_test_suite_struct_int8_uint8 -# xtypes_v2_primitive_test_suite_struct_int8_uint16 -# xtypes_v2_primitive_test_suite_struct_int8_uint32 -# xtypes_v2_primitive_test_suite_struct_int8_uint64 -# xtypes_v2_primitive_test_suite_struct_int8_int16 -# xtypes_v2_primitive_test_suite_struct_int8_int32 -# xtypes_v2_primitive_test_suite_struct_int8_int64 -# xtypes_v2_primitive_test_suite_struct_int8_float32 -# xtypes_v2_primitive_test_suite_struct_int8_float64 -# xtypes_v2_primitive_test_suite_struct_int8_float128 -# xtypes_v2_primitive_test_suite_struct_int8_byte -# xtypes_v2_primitive_test_suite_struct_int8_char8 -# xtypes_v2_primitive_test_suite_struct_int16_uint8 -# xtypes_v2_primitive_test_suite_struct_int16_uint16 -# xtypes_v2_primitive_test_suite_struct_int16_uint32 -# xtypes_v2_primitive_test_suite_struct_int16_uint64 -# xtypes_v2_primitive_test_suite_struct_int16_int8 -# xtypes_v2_primitive_test_suite_struct_int16_int32 -# xtypes_v2_primitive_test_suite_struct_int16_int64 -# xtypes_v2_primitive_test_suite_struct_int16_float32 -# xtypes_v2_primitive_test_suite_struct_int16_float64 -# xtypes_v2_primitive_test_suite_struct_int16_float128 -# xtypes_v2_primitive_test_suite_struct_int16_byte -# xtypes_v2_primitive_test_suite_struct_int16_char8 -# xtypes_v2_primitive_test_suite_struct_int32_uint8 -# xtypes_v2_primitive_test_suite_struct_int32_uint16 -# xtypes_v2_primitive_test_suite_struct_int32_uint32 -# xtypes_v2_primitive_test_suite_struct_int32_uint64 -# xtypes_v2_primitive_test_suite_struct_int32_int8 -# xtypes_v2_primitive_test_suite_struct_int32_int16 -# xtypes_v2_primitive_test_suite_struct_int32_int64 -# xtypes_v2_primitive_test_suite_struct_int32_float32 -# xtypes_v2_primitive_test_suite_struct_int32_float64 -# xtypes_v2_primitive_test_suite_struct_int32_float128 -# xtypes_v2_primitive_test_suite_struct_int32_byte -# xtypes_v2_primitive_test_suite_struct_int32_char8 -# xtypes_v2_primitive_test_suite_struct_int64_uint8 -# xtypes_v2_primitive_test_suite_struct_int64_uint16 -# xtypes_v2_primitive_test_suite_struct_int64_uint32 -# xtypes_v2_primitive_test_suite_struct_int64_uint64 -# xtypes_v2_primitive_test_suite_struct_int64_int8 -# xtypes_v2_primitive_test_suite_struct_int64_int16 -# xtypes_v2_primitive_test_suite_struct_int64_int32 -# xtypes_v2_primitive_test_suite_struct_int64_float32 -# xtypes_v2_primitive_test_suite_struct_int64_float64 -# xtypes_v2_primitive_test_suite_struct_int64_float128 -# xtypes_v2_primitive_test_suite_struct_int64_byte -# xtypes_v2_primitive_test_suite_struct_int64_char8 -# xtypes_v2_primitive_test_suite_struct_float32_uint8 -# xtypes_v2_primitive_test_suite_struct_float32_uint16 -# xtypes_v2_primitive_test_suite_struct_float32_uint32 -# xtypes_v2_primitive_test_suite_struct_float32_uint64 -# xtypes_v2_primitive_test_suite_struct_float32_int8 -# xtypes_v2_primitive_test_suite_struct_float32_int16 -# xtypes_v2_primitive_test_suite_struct_float32_int32 -# xtypes_v2_primitive_test_suite_struct_float32_int64 -# xtypes_v2_primitive_test_suite_struct_float32_float64 -# xtypes_v2_primitive_test_suite_struct_float32_float128 -# xtypes_v2_primitive_test_suite_struct_float32_byte -# xtypes_v2_primitive_test_suite_struct_float32_char8 -# xtypes_v2_primitive_test_suite_struct_float64_uint8 -# xtypes_v2_primitive_test_suite_struct_float64_uint16 -# xtypes_v2_primitive_test_suite_struct_float64_uint32 -# xtypes_v2_primitive_test_suite_struct_float64_uint64 -# xtypes_v2_primitive_test_suite_struct_float64_int8 -# xtypes_v2_primitive_test_suite_struct_float64_int16 -# xtypes_v2_primitive_test_suite_struct_float64_int32 -# xtypes_v2_primitive_test_suite_struct_float64_int64 -# xtypes_v2_primitive_test_suite_struct_float64_float32 -# xtypes_v2_primitive_test_suite_struct_float64_float128 -# xtypes_v2_primitive_test_suite_struct_float64_byte -# xtypes_v2_primitive_test_suite_struct_float64_char8 -# xtypes_v2_primitive_test_suite_struct_float128_uint8 -# xtypes_v2_primitive_test_suite_struct_float128_uint16 -# xtypes_v2_primitive_test_suite_struct_float128_uint32 -# xtypes_v2_primitive_test_suite_struct_float128_uint64 -# xtypes_v2_primitive_test_suite_struct_float128_int8 -# xtypes_v2_primitive_test_suite_struct_float128_int16 -# xtypes_v2_primitive_test_suite_struct_float128_int32 -# xtypes_v2_primitive_test_suite_struct_float128_int64 -# xtypes_v2_primitive_test_suite_struct_float128_float32 -# xtypes_v2_primitive_test_suite_struct_float128_float64 -# xtypes_v2_primitive_test_suite_struct_float128_float128 -# xtypes_v2_primitive_test_suite_struct_float128_byte -# xtypes_v2_primitive_test_suite_struct_float128_char8 -# xtypes_v2_primitive_test_suite_struct_byte_uint8 -# xtypes_v2_primitive_test_suite_struct_byte_uint16 -# xtypes_v2_primitive_test_suite_struct_byte_uint32 -# xtypes_v2_primitive_test_suite_struct_byte_uint64 -# xtypes_v2_primitive_test_suite_struct_byte_int8 -# xtypes_v2_primitive_test_suite_struct_byte_int16 -# xtypes_v2_primitive_test_suite_struct_byte_int32 -# xtypes_v2_primitive_test_suite_struct_byte_int64 -# xtypes_v2_primitive_test_suite_struct_byte_float32 -# xtypes_v2_primitive_test_suite_struct_byte_float64 -# xtypes_v2_primitive_test_suite_struct_byte_float128 -# xtypes_v2_primitive_test_suite_struct_byte_char8 -# xtypes_v2_primitive_test_suite_struct_char8_uint8 -# xtypes_v2_primitive_test_suite_struct_char8_uint16 -# xtypes_v2_primitive_test_suite_struct_char8_uint32 -# xtypes_v2_primitive_test_suite_struct_char8_uint64 -# xtypes_v2_primitive_test_suite_struct_char8_int8 -# xtypes_v2_primitive_test_suite_struct_char8_int16 -# xtypes_v2_primitive_test_suite_struct_char8_int32 -# xtypes_v2_primitive_test_suite_struct_char8_int64 -# xtypes_v2_primitive_test_suite_struct_char8_float32 -# xtypes_v2_primitive_test_suite_struct_char8_float64 -# xtypes_v2_primitive_test_suite_struct_char8_float128 -# xtypes_v2_primitive_test_suite_struct_char8_byte -# xtypes_v2_sequence_test_suite_seq(int32)_seq(int32,10) -# xtypes_v2_sequence_test_suite_seq(int32)_seq(int32,10)_check_bounds -# xtypes_v2_sequence_test_suite_seq(int32,20)_seq(int32,10) -# xtypes_v2_sequence_test_suite_seq(int32,20)_seq(int32,10)_check_bounds -# xtypes_v2_sequence_test_suite_seq(int32,10)_seq(int32,20) -# xtypes_v2_sequence_test_suite_seq(int32,10)_seq(int32,20)_check_bounds -# xtypes_v2_sequence_test_suite_seq(str10,10)_seq(str20,10) -# xtypes_v2_sequence_test_suite_seq(str20,10)_seq(str10,10) -# xtypes_v2_sequence_test_suite_seq(str20,10)_seq(str10,10)_check -# xtypes_v2_sequence_test_suite_seq(enum1)_seq(enum2) -# xtypes_v2_sequence_test_suite_seq(SFinal,10)_seq(SFinalAlt,10) -# xtypes_v2_sequence_test_suite_seq(SAppendable,10)_seq(SAppendableAlt,10) -# xtypes_v2_sequence_test_suite_seq(SMutable,10)_seq(SMutableAlt,10) -# xtypes_v2_string_test_suite_string_string10 -# xtypes_v2_string_test_suite_string_string10_check -# xtypes_v2_string_test_suite_string10_string20_check -# xtypes_v2_string_test_suite_string20_string10_check -# xtypes_v2_string_test_suite_wstring_wstring -# xtypes_v2_string_test_suite_wstring_wstring10 -# xtypes_v2_string_test_suite_wstring_wstring10_check -# xtypes_v2_string_test_suite_wstring10_wstring20_check -# xtypes_v2_string_test_suite_wstring20_wstring10_check -# xtypes_v2_struct_test_suite_primitives_struct_mutable -# xtypes_v2_struct_test_suite_struct_final_appendable -# xtypes_v2_struct_test_suite_struct_final_mutable -# xtypes_v2_struct_test_suite_struct_appendable_final -# xtypes_v2_struct_test_suite_struct_appendable_mutable -# xtypes_v2_struct_test_suite_struct_mutable_final -# xtypes_v2_struct_test_suite_struct_mutable_appendable -# xtypes_v2_struct_test_suite_struct_different_ids_ok -# xtypes_v2_struct_test_suite_struct_different_ids -# xtypes_v2_struct_test_suite_struct_different_names_ok -# xtypes_v2_struct_test_suite_struct_different_names -# xtypes_v2_struct_test_suite_struct_no_common_ids -# xtypes_v2_struct_test_suite_struct_members_assignable_1 -# xtypes_v2_struct_test_suite_struct_mustUnderstand_1 -# xtypes_v2_struct_test_suite_struct_mustUnderstand_2 -# xtypes_v2_struct_test_suite_struct_key_1 -# xtypes_v2_struct_test_suite_struct_key_2 -# xtypes_v2_struct_test_suite_struct_key_string_1 -# xtypes_v2_struct_test_suite_struct_key_string_3 -# xtypes_v2_struct_test_suite_struct_key_enum_1 -# xtypes_v2_struct_test_suite_struct_key_enum_2 -# xtypes_v2_struct_test_suite_struct_key_seq_1 -# xtypes_v2_struct_test_suite_struct_key_seq_2 -# xtypes_v2_struct_test_suite_struct_key_struct_1 -# xtypes_v2_struct_test_suite_struct_key_struct_2 -# xtypes_v2_struct_test_suite_struct_key_union_1 -# xtypes_v2_struct_test_suite_struct_key_union_2 -# xtypes_v2_type_consistency_test_suite_tc_force_type_validation_1 -# xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_1 -# xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_2 -# xtypes_v2_type_consistency_test_suite_tc_ignore_member_names_3 -# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_1 -# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_2 -# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_3 -# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_4 -# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_5 -# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_6 -# xtypes_v2_type_consistency_test_suite_tc_ignore_seq_bounds_7 -# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_1 -# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_2 -# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_3 -# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_4 -# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_5 -# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_6 -# xtypes_v2_type_consistency_test_suite_tc_ignore_str_bounds_7 -# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_1 -# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_2 -# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_3 -# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_4 -# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_5 -# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_6 -# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_7 -# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_8 -# xtypes_v2_type_consistency_test_suite_tc_prevent_type_widening_9 -# xtypes_v2_union_test_suite_union_primitives_final -# xtypes_v2_union_test_suite_union_primitives_appendable -# xtypes_v2_union_test_suite_union_primitives_mutable -# xtypes_v2_union_test_suite_union_final_appendable -# xtypes_v2_union_test_suite_union_final_mutable -# xtypes_v2_union_test_suite_union_appendable_mutable -# xtypes_v2_union_test_suite_union_different_ids_1 -# xtypes_v2_union_test_suite_union_different_ids_2 -# xtypes_v2_union_test_suite_union_different_names_1 -# xtypes_v2_union_test_suite_union_different_names_2 -# xtypes_v2_union_test_suite_union_different_order_1 -# xtypes_v2_union_test_suite_union_different_order_2 -# xtypes_v2_union_test_suite_union_int16_int32 -# xtypes_v2_union_test_suite_union_int16_int32_default -# xtypes_v2_union_test_suite_union_int32_int32_default -# xtypes_v2_union_test_suite_union_int32_default_int16 -# xtypes_v2_union_test_suite_union_int32_default_int32 -# xtypes_v2_union_test_suite_union_int32_default_int16_default -# xtypes_v2_union_test_suite_union_int32_default_int32_default -# xtypes_v2_union_test_suite_union_final_5_vs_6 -# xtypes_v2_union_test_suite_union_final_6_vs_5 -# xtypes_v2_union_test_suite_union_final_one_default_1 -# xtypes_v2_union_test_suite_union_final_one_default_2 -# xtypes_v2_union_test_suite_union_appendable_one_common_1 -# xtypes_v2_union_test_suite_union_appendable_one_common_2 -# xtypes_v2_union_test_suite_union_appendable_no_common_1 -# xtypes_v2_union_test_suite_union_appendable_no_common_2 -# xtypes_v2_union_test_suite_union_appendable_no_common_w_default -# xtypes_v2_union_test_suite_union_mutable_one_common -# xtypes_v2_union_test_suite_union_mutable_no_common -# xtypes_v2_union_test_suite_union_mutable_no_common_w_default -# \ No newline at end of file +# Unsupported tests for dust_dds-0.16.0 +# +# Format: one full test ID per line. +# Test ID = _ + +# empty From 687b91ae90263259338d925426a461d1eed3c20d Mon Sep 17 00:00:00 2001 From: Stefan Kimmer Date: Wed, 9 Sep 2026 13:21:41 +0200 Subject: [PATCH 22/22] add dust_dds to workflow --- .github/workflows/1_run_interoperability_tests.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/1_run_interoperability_tests.yml b/.github/workflows/1_run_interoperability_tests.yml index e90db2e..d0f3fdd 100644 --- a/.github/workflows/1_run_interoperability_tests.yml +++ b/.github/workflows/1_run_interoperability_tests.yml @@ -6,11 +6,11 @@ on: publishers: description: Publishers to use type: string - default: '["connext_dds","toc_coredx_dds", "eclipse_cyclone", "opendds"]' + default: '["connext_dds","toc_coredx_dds", "eclipse_cyclone", "opendds", "dust_dds"]' subscribers: description: Subscribers to use type: string - default: '["connext_dds","toc_coredx_dds", "eclipse_cyclone", "opendds"]' + default: '["connext_dds","toc_coredx_dds", "eclipse_cyclone", "opendds", "dust_dds"]' jobs: generate_timestamp: runs-on: ubuntu-latest @@ -81,6 +81,9 @@ jobs: if [[ "${publisher_exe,,}" == *opendds* || "${subscriber_exe,,}" == *opendds* ]]; then xcdr1_enabled=false fi + if [[ "${publisher_exe,,}" == *dust_dds* || "${subscriber_exe,,}" == *dust_dds* ]]; then + to1_enabled=false + fi if [[ "$xcdr1_enabled" == true ]]; then if [[ "$to1_enabled" == true ]]; then # Run interoperability tests (xcdr1, type_object_version 1)