Skip to content

Commit 831dea1

Browse files
author
Michael Ward
committed
[Rust] added test for issue aeron-io#895
1 parent 6915668 commit 831dea1

File tree

8 files changed

+109
-11
lines changed

8 files changed

+109
-11
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,7 @@ task generateRustTestCodecs(type: JavaExec) {
566566
'sbe.target.language': 'Rust',
567567
'sbe.validation.xsd': validationXsdPath)
568568
args = ['sbe-tool/src/test/resources/issue435.xml',
569+
'sbe-tool/src/test/resources/issue895.xml',
569570
'sbe-tool/src/test/resources/example-bigendian-test-schema.xml',
570571
]
571572
}

rust/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ examples_uk_co_real_logic_sbe_benchmarks = { path = "../generated/rust/uk_co_rea
1212
examples_uk_co_real_logic_sbe_benchmarks_fix = { path = "../generated/rust/uk_co_real_logic_sbe_benchmarks_fix" }
1313

1414
issue_435 = { path = "../generated/rust/issue435" }
15+
issue_895 = { path = "../generated/rust/issue895" }
1516
baseline_bigendian = { path = "../generated/rust/baseline-bigendian" }
1617

1718
[dev-dependencies]

rust/tests/baseline_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::io::prelude::*;
33

44
use examples_baseline::*;
55

6-
fn read_sbe_file_generated_from_java_example() -> ::std::io::Result<Vec<u8>> {
6+
fn read_sbe_file_generated_from_java_example() -> std::io::Result<Vec<u8>> {
77
// Generated by the generateCarExampleDataFile gradle task.
88
let mut f = File::open("car_example_baseline_data.sbe")?;
99
let mut buffer = Vec::new();
@@ -33,7 +33,7 @@ fn decode_car_and_assert_expected_content(buffer: &[u8]) -> SbeResult<()> {
3333

3434
let buf = ReadBuf::new(buffer);
3535
let header = MessageHeaderDecoder::default().wrap(buf, 0);
36-
assert_eq!(car_codec::SBE_TEMPLATE_ID, header.template_id());
36+
assert_eq!(SBE_TEMPLATE_ID, header.template_id());
3737
car = car.header(header);
3838

3939
// Car...

rust/tests/big_endian_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ fn decode_car_and_assert_expected_content(buffer: &[u8]) -> SbeResult<()> {
3030

3131
let buf = ReadBuf::new(buffer);
3232
let header = MessageHeaderDecoder::default().wrap(buf, 0);
33-
assert_eq!(car_codec::SBE_TEMPLATE_ID, header.template_id());
33+
assert_eq!(SBE_TEMPLATE_ID, header.template_id());
3434
car = car.header(header);
3535

3636
// Car...

rust/tests/extension_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::io::prelude::*;
33

44
use examples_extension::*;
55

6-
fn read_sbe_file_generated_from_java_example() -> ::std::io::Result<Vec<u8>> {
6+
fn read_sbe_file_generated_from_java_example() -> std::io::Result<Vec<u8>> {
77
// Generated by the generateCarExampleDataFile gradle task.
88
let mut f = File::open("car_example_extension_data.sbe")?;
99
let mut buffer = Vec::new();
@@ -32,7 +32,7 @@ fn decode_car_and_assert_expected_content(buffer: &[u8]) -> SbeResult<()> {
3232

3333
let buf = ReadBuf::new(buffer);
3434
let header = MessageHeaderDecoder::default().wrap(buf, 0);
35-
assert_eq!(car_codec::SBE_TEMPLATE_ID, header.template_id());
35+
assert_eq!(SBE_TEMPLATE_ID, header.template_id());
3636
car = car.header(header);
3737

3838
// Car...

rust/tests/issue_435_test.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ fn create_encoder(buffer: &mut Vec<u8>) -> Issue435Encoder {
1313
#[test]
1414
fn issue_435_ref_test() -> SbeResult<()> {
1515
assert_eq!(9, message_header_codec::ENCODED_LENGTH);
16-
assert_eq!(1, issue_435_codec::SBE_BLOCK_LENGTH);
17-
assert_eq!(0, issue_435_codec::SBE_SCHEMA_VERSION);
16+
assert_eq!(1, SBE_BLOCK_LENGTH);
17+
assert_eq!(0, SBE_SCHEMA_VERSION);
1818

1919
// encode...
2020
let mut buffer = vec![0u8; 256];
@@ -24,10 +24,10 @@ fn issue_435_ref_test() -> SbeResult<()> {
2424
// decode...
2525
let buf = ReadBuf::new(buffer.as_slice());
2626
let header = MessageHeaderDecoder::default().wrap(buf, 0);
27-
assert_eq!(issue_435_codec::SBE_BLOCK_LENGTH, header.block_length());
28-
assert_eq!(issue_435_codec::SBE_SCHEMA_VERSION, header.version());
29-
assert_eq!(issue_435_codec::SBE_TEMPLATE_ID, header.template_id());
30-
assert_eq!(issue_435_codec::SBE_SCHEMA_ID, header.schema_id());
27+
assert_eq!(SBE_BLOCK_LENGTH, header.block_length());
28+
assert_eq!(SBE_SCHEMA_VERSION, header.version());
29+
assert_eq!(SBE_TEMPLATE_ID, header.template_id());
30+
assert_eq!(SBE_SCHEMA_ID, header.schema_id());
3131
assert_eq!(*SetRef::default().set_one(true), header.s());
3232

3333
let decoder = Issue435Decoder::default().header(header);

rust/tests/issue_895_test.rs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
use ::issue_895::*;
2+
3+
fn create_encoder(buffer: &mut Vec<u8>) -> Issue895Encoder {
4+
let issue_895 = Issue895Encoder::default().wrap(
5+
WriteBuf::new(buffer.as_mut_slice()),
6+
ENCODED_LENGTH,
7+
);
8+
let mut header = issue_895.header(0);
9+
header.parent().unwrap()
10+
}
11+
12+
#[test]
13+
fn issue_895_both_some() -> SbeResult<()> {
14+
assert_eq!(8, ENCODED_LENGTH);
15+
assert_eq!(12, SBE_BLOCK_LENGTH);
16+
assert_eq!(0, SBE_SCHEMA_VERSION);
17+
18+
// encode...
19+
let mut buf = vec![0u8; 256];
20+
let mut encoder = create_encoder(&mut buf);
21+
encoder.optional_float(2.07);
22+
encoder.optional_double(4.12);
23+
24+
// decode...
25+
let buf = ReadBuf::new(buf.as_slice());
26+
let header = MessageHeaderDecoder::default().wrap(buf, 0);
27+
assert_eq!(SBE_BLOCK_LENGTH, header.block_length());
28+
assert_eq!(SBE_SCHEMA_VERSION, header.version());
29+
assert_eq!(SBE_TEMPLATE_ID, header.template_id());
30+
assert_eq!(SBE_SCHEMA_ID, header.schema_id());
31+
32+
let decoder = Issue895Decoder::default().header(header);
33+
assert_eq!(Some(2.07), decoder.optional_float());
34+
assert_eq!(Some(4.12), decoder.optional_double());
35+
36+
Ok(())
37+
}
38+
39+
#[test]
40+
fn issue_895_float_none() -> SbeResult<()> {
41+
// encode...
42+
let mut buf = vec![0u8; 256];
43+
let mut encoder = create_encoder(&mut buf);
44+
encoder.optional_float(f32::NAN);
45+
encoder.optional_double(4.12);
46+
47+
// decode...
48+
let buf = ReadBuf::new(buf.as_slice());
49+
let header = MessageHeaderDecoder::default().wrap(buf, 0);
50+
51+
let decoder = Issue895Decoder::default().header(header);
52+
assert_eq!(None, decoder.optional_float());
53+
assert_eq!(Some(4.12), decoder.optional_double());
54+
55+
Ok(())
56+
}
57+
58+
#[test]
59+
fn issue_895_double_none() -> SbeResult<()> {
60+
// encode...
61+
let mut buffer = vec![0u8; 256];
62+
let mut encoder = create_encoder(&mut buffer);
63+
encoder.optional_float(2.07);
64+
encoder.optional_double(f64::NAN);
65+
66+
// decode...
67+
let buf = ReadBuf::new(buffer.as_slice());
68+
let header = MessageHeaderDecoder::default().wrap(buf, 0);
69+
70+
let decoder = Issue895Decoder::default().header(header);
71+
assert_eq!(Some(2.07), decoder.optional_float());
72+
assert_eq!(None, decoder.optional_double());
73+
74+
Ok(())
75+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<sbe:messageSchema xmlns:sbe="http://fixprotocol.io/2016/sbe"
3+
package="issue895"
4+
id="895"
5+
version="0"
6+
semanticVersion="1.0"
7+
description="issue 895 test case"
8+
byteOrder="bigEndian">
9+
<types>
10+
<composite name="messageHeader" description="Message identifiers and length of message root">
11+
<type name="blockLength" primitiveType="uint16"/>
12+
<type name="templateId" primitiveType="uint16"/>
13+
<type name="schemaId" primitiveType="uint16"/>
14+
<type name="version" primitiveType="uint16"/>
15+
</composite>
16+
</types>
17+
<sbe:message name="issue895" id="1" description="issue 895 test">
18+
<field name="optional_float" type="float" id="1" presence="optional"/>
19+
<field name="optional_double" type="double" id="2" presence="optional"/>
20+
</sbe:message>
21+
</sbe:messageSchema>

0 commit comments

Comments
 (0)