Skip to content

Commit a3f692b

Browse files
Merge pull request #250 from marshallpierce/mp/esw-test
Add a test to EncoderStringWriter
2 parents 70d2b53 + a589c62 commit a3f692b

File tree

1 file changed

+37
-8
lines changed

1 file changed

+37
-8
lines changed

src/write/encoder_string_writer.rs

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,6 @@ use std::io;
4444
/// assert_eq!("base64: YXNkZg==", &buf);
4545
/// ```
4646
///
47-
/// # Panics
48-
///
49-
/// Calling `write()` (or related methods) or `finish()` after `finish()` has completed without
50-
/// error is invalid and will panic.
51-
///
5247
/// # Performance
5348
///
5449
/// Because it has to validate that the base64 is UTF-8, it is about 80% as fast as writing plain
@@ -144,6 +139,7 @@ mod tests {
144139
engine::Engine, tests::random_engine, write::encoder_string_writer::EncoderStringWriter,
145140
};
146141
use rand::Rng;
142+
use std::cmp;
147143
use std::io::Write;
148144

149145
#[test]
@@ -158,9 +154,8 @@ mod tests {
158154
orig_data.clear();
159155
normal_encoded.clear();
160156

161-
for _ in 0..size {
162-
orig_data.push(rng.gen());
163-
}
157+
orig_data.resize(size, 0);
158+
rng.fill(&mut orig_data[..]);
164159

165160
let engine = random_engine(&mut rng);
166161
engine.encode_string(&orig_data, &mut normal_encoded);
@@ -172,6 +167,40 @@ mod tests {
172167

173168
let stream_encoded = stream_encoder.into_inner();
174169

170+
assert_eq!(normal_encoded, stream_encoded);
171+
}
172+
}
173+
#[test]
174+
fn incremental_writes() {
175+
let mut rng = rand::thread_rng();
176+
let mut orig_data = Vec::<u8>::new();
177+
let mut normal_encoded = String::new();
178+
179+
let size = 5_000;
180+
181+
for _ in 0..size {
182+
orig_data.clear();
183+
normal_encoded.clear();
184+
185+
orig_data.resize(size, 0);
186+
rng.fill(&mut orig_data[..]);
187+
188+
let engine = random_engine(&mut rng);
189+
engine.encode_string(&orig_data, &mut normal_encoded);
190+
191+
let mut stream_encoder = EncoderStringWriter::new(&engine);
192+
// write small nibbles of data
193+
let mut offset = 0;
194+
while offset < size {
195+
let nibble_size = cmp::min(rng.gen_range(0..=64), size - offset);
196+
let len = stream_encoder
197+
.write(&orig_data[offset..offset + nibble_size])
198+
.unwrap();
199+
offset += len;
200+
}
201+
202+
let stream_encoded = stream_encoder.into_inner();
203+
175204
assert_eq!(normal_encoded, stream_encoded);
176205
}
177206
}

0 commit comments

Comments
 (0)