Skip to content

Commit

Permalink
[Rust] added test for issue 984
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Ward committed Apr 5, 2024
1 parent ebec8ab commit a088c5f
Show file tree
Hide file tree
Showing 6 changed files with 82 additions and 3 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -588,6 +588,7 @@ tasks.register('generateRustTestCodecs', JavaExec) {
args = ['sbe-tool/src/test/resources/issue435.xml',
'sbe-tool/src/test/resources/issue895.xml',
'sbe-tool/src/test/resources/issue972.xml',
'sbe-tool/src/test/resources/issue984.xml',
'sbe-tool/src/test/resources/example-bigendian-test-schema.xml',
'sbe-tool/src/test/resources/nested-composite-name.xml',
]
Expand Down
1 change: 1 addition & 0 deletions rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ examples_uk_co_real_logic_sbe_benchmarks_fix = { path = "../generated/rust/uk_co
issue_435 = { path = "../generated/rust/issue435" }
issue_895 = { path = "../generated/rust/issue895" }
issue_972 = { path = "../generated/rust/issue972" }
issue_984 = { path = "../generated/rust/issue984" }
baseline_bigendian = { path = "../generated/rust/baseline-bigendian" }
nested_composite_name = { path = "../generated/rust/nested-composite-name" }

Expand Down
2 changes: 1 addition & 1 deletion rust/benches/md_benchmark.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use examples_uk_co_real_logic_sbe_benchmarks_fix::{
market_data_incremental_refresh_trades_codec::{*, encoder::*},
market_data_incremental_refresh_trades_codec::{encoder::*, *},
match_event_indicator::*,
md_update_action::*,
message_header_codec::*,
Expand Down
3 changes: 1 addition & 2 deletions rust/tests/issue_435_test.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use ::issue_435::*;
use issue_435::{
enum_ref::EnumRef, issue_435_codec::*, message_header_codec::MessageHeaderDecoder,
set_ref::SetRef,
set_ref::SetRef, *,
};

fn create_encoder(buffer: &mut Vec<u8>) -> Issue435Encoder {
Expand Down
47 changes: 47 additions & 0 deletions rust/tests/issue_984_test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
use issue_984::{
message_header_codec::MessageHeaderDecoder,
simple_message_codec::{encoder::MyGroupEncoder, *},
*,
};

fn create_encoder(buffer: &mut Vec<u8>) -> SimpleMessageEncoder {
let simple_msg = SimpleMessageEncoder::default().wrap(
WriteBuf::new(buffer.as_mut_slice()),
message_header_codec::ENCODED_LENGTH,
);
let mut header = simple_msg.header(0);
header.parent().unwrap()
}

#[test]
fn round_trip() -> SbeResult<()> {
// encode...
let mut buffer = vec![0u8; 256];
let mut simple_msg_encoder = create_encoder(&mut buffer);
simple_msg_encoder.id(1985);

let mut my_grp_encoder = simple_msg_encoder.my_group_encoder(1, MyGroupEncoder::default());
my_grp_encoder.advance()?;
my_grp_encoder.f1(&[1, 2, 3, 4]);
my_grp_encoder.f2(&[1, 2, 3, 4, 5]);
my_grp_encoder.f3(&[1, 2, 3, 4, 5, 6]);

// decode...
let buf = ReadBuf::new(buffer.as_slice());
let header = MessageHeaderDecoder::default().wrap(buf, 0);
assert_eq!(SBE_BLOCK_LENGTH, header.block_length());
assert_eq!(SBE_SCHEMA_VERSION, header.version());
assert_eq!(SBE_TEMPLATE_ID, header.template_id());
assert_eq!(SBE_SCHEMA_ID, header.schema_id());

let simple_msg_decoder = SimpleMessageDecoder::default().header(header);
assert_eq!(1985, simple_msg_decoder.id());
let mut grp_decoder = simple_msg_decoder.my_group_decoder();
assert_eq!(1, grp_decoder.count());
grp_decoder.advance()?;

assert_eq!([1, 2, 3, 4], grp_decoder.f1());
assert_eq!([1, 2, 3, 4, 5], grp_decoder.f2());
assert_eq!([1, 2, 3, 4, 5, 6], grp_decoder.f3());
Ok(())
}
31 changes: 31 additions & 0 deletions sbe-tool/src/test/resources/issue984.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<sbe:messageSchema
xmlns:sbe="http://fixprotocol.io/2016/sbe"
package="issue984"
id="984"
version="3"
semanticVersion="5.0.0"
byteOrder="littleEndian">
<types>
<type name="String4" length="4" primitiveType="char" semanticType="String"/>
<type name="String5" length="5" primitiveType="char" sinceVersion="2" semanticType="String"/>
<type name="String6" length="6" primitiveType="char" sinceVersion="3" semanticType="String"/>
<composite name="groupSize" description="Repeating group dimensions" semanticType="NumInGroup">
<type name="blockLength" primitiveType="uint16"/>
<type name="numInGroup" primitiveType="uint8"/>
</composite>
<composite name="messageHeader">
<type name="blockLength" primitiveType="uint16"/>
<type name="templateId" primitiveType="uint16" description="Template ID used to encode the message."/>
<type name="schemaId" primitiveType="uint16" description="ID of the system publishing the message."/>
<type name="version" primitiveType="uint16" description="Schema version."/>
</composite>
</types>
<sbe:message name="SimpleMessage" id="1">
<field name="id" id="2" type="uint16" semanticType="Int"/>
<group name="MyGroup" id="3" blockLength="15" dimensionType="groupSize">
<field name="f1" id="4" type="String4" offset="0" semanticType="String"/>
<field name="f2" id="5" type="String5" offset="4" semanticType="String"/>
<field name="f3" id="6" type="String6" offset="9" semanticType="String"/>
</group>
</sbe:message>
</sbe:messageSchema>

0 comments on commit a088c5f

Please sign in to comment.