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) diff --git a/src/rs/DustDDS/Cargo.toml b/src/rs/DustDDS/Cargo.toml index 099fba6..984f6e5 100644 --- a/src/rs/DustDDS/Cargo.toml +++ b/src/rs/DustDDS/Cargo.toml @@ -8,6 +8,4 @@ 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 = [ - "xtypes-xml", -] } +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 8ae2c0e..483084e 100644 --- a/src/rs/DustDDS/src/main.rs +++ b/src/rs/DustDDS/src/main.rs @@ -1,6 +1,8 @@ use clap::{Parser, ValueEnum}; use ctrlc; use dust_dds::{ + configuration::DustDdsConfigurationBuilder, + dds_async::topic_description::TopicDescriptionAsync, domain::{ domain_participant::DomainParticipant, domain_participant_factory::DomainParticipantFactory, @@ -14,18 +16,17 @@ use dust_dds::{ self, DataRepresentationQosPolicy, DurabilityQosPolicy, HistoryQosPolicy, HistoryQosPolicyKind, OwnershipQosPolicy, OwnershipQosPolicyKind, OwnershipStrengthQosPolicy, PartitionQosPolicy, ReliabilityQosPolicy, - 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, 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,16 +271,77 @@ 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 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( 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(); + 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, @@ -289,8 +351,6 @@ fn init_publisher( dynamic_type, )?; - println!("Create topic: {}", topic_name); - let publisher_qos = QosKind::Specific(PublisherQos { partition: options.partition_qos_policy(), ..Default::default() @@ -313,8 +373,6 @@ fn init_publisher( data_writer_qos.ownership_strength = options.ownership_strength_qos_policy(); } - println!("Create writer for topic: {} type: {}", topic_name, type_name); - let data_writer = publisher.create_datawriter::( &topic, QosKind::Specific(data_writer_qos), @@ -326,9 +384,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); @@ -345,6 +403,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(); @@ -356,11 +415,14 @@ 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(); + println!("Create topic: {}", topic_name); + println!("Create reader for topic: {}", topic_name); + let topic = participant .create_dynamic_topic( &topic_name, @@ -372,8 +434,6 @@ fn init_subscriber( ) .unwrap(); - println!("Create topic: {}", topic_name); - let subscriber_qos = QosKind::Specific(SubscriberQos { partition: options.partition_qos_policy(), ..Default::default() @@ -398,74 +458,57 @@ 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(); + // Note: The default of the DDS XTypes standard is false + type_consistency.ignore_member_names = true; - println!("Create reader for topic: {}", topic_name); + 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 => (), + } + } + 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 => (), + } + } + 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 = false, + } + } + 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 => (), + } + } + 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 => (), + } + } + 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 => (), + } + } + + data_reader_qos.type_consistency = type_consistency; let data_reader = subscriber.create_datareader::( &topic, @@ -478,9 +521,9 @@ fn init_subscriber( } fn run_subscriber( - data_reader: &DataReader, + data_reader: &DataReader>, options: Options, - dynamic_type: DynamicType, + dynamic_type: DynamicType<'static>, all_done: Receiver<()>, ) -> Result<(), RunningError> { let mut expected_data = None; @@ -508,7 +551,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) { @@ -520,10 +563,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(()) @@ -532,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, @@ -616,14 +664,12 @@ 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) { 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(); diff --git a/unsupported_test_manifest/dust_dds-0.16.0.txt b/unsupported_test_manifest/dust_dds-0.16.0.txt index bac9989..2fae547 100644 --- a/unsupported_test_manifest/dust_dds-0.16.0.txt +++ b/unsupported_test_manifest/dust_dds-0.16.0.txt @@ -1,289 +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 +# Unsupported tests for dust_dds-0.16.0 +# +# Format: one full test ID per line. +# Test ID = _ + +# empty