Skip to content

Commit a271912

Browse files
authored
log: Update precision logic (#252)
* Add precision cap * Add tests * Refactor precision logic * Fix miri warning * Avoid duplication * Add missing syscall * More tests * Fix truncate logic * Fix review comments
1 parent 19b2435 commit a271912

File tree

2 files changed

+285
-86
lines changed

2 files changed

+285
-86
lines changed

sdk/log/crate/src/lib.rs

Lines changed: 139 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,107 @@ mod tests {
199199

200200
logger.clear();
201201

202-
// This should have no effect.
202+
// This should have no effect since it is a string.
203203
logger.append_with_args("0123456789", &[Argument::Precision(2)]);
204204
assert!(&*logger == "0123456789".as_bytes());
205+
206+
logger.clear();
207+
208+
logger.append_with_args(2u8, &[Argument::Precision(8)]);
209+
assert!(&*logger == "0.00000002".as_bytes());
210+
211+
logger.clear();
212+
213+
logger.append_with_args(2u8, &[Argument::Precision(u8::MAX)]);
214+
assert!(&*logger == "0.0000000@".as_bytes());
215+
216+
let mut logger = Logger::<20>::default();
217+
218+
logger.append_with_args(2u8, &[Argument::Precision(u8::MAX)]);
219+
assert!(&*logger == "0.00000000000000000@".as_bytes());
220+
221+
logger.clear();
222+
223+
logger.append_with_args(20_000u16, &[Argument::Precision(10)]);
224+
assert!(&*logger == "0.0000020000".as_bytes());
225+
226+
let mut logger = Logger::<3>::default();
227+
228+
logger.append_with_args(2u64, &[Argument::Precision(u8::MAX)]);
229+
assert!(&*logger == "0.@".as_bytes());
230+
231+
logger.clear();
232+
233+
logger.append_with_args(2u64, &[Argument::Precision(1)]);
234+
assert!(&*logger == "0.2".as_bytes());
235+
236+
logger.clear();
237+
238+
logger.append_with_args(-2i64, &[Argument::Precision(1)]);
239+
assert!(&*logger == "-0@".as_bytes());
240+
241+
let mut logger = Logger::<1>::default();
242+
243+
logger.append_with_args(-2i64, &[Argument::Precision(1)]);
244+
assert!(&*logger == "@".as_bytes());
245+
246+
let mut logger = Logger::<2>::default();
247+
248+
logger.append_with_args(-2i64, &[Argument::Precision(1)]);
249+
assert!(&*logger == "-@".as_bytes());
250+
251+
let mut logger = Logger::<20>::default();
252+
253+
logger.append_with_args(u64::MAX, &[Argument::Precision(u8::MAX)]);
254+
assert!(&*logger == "0.00000000000000000@".as_bytes());
255+
256+
// 255 precision + leading 0 + decimal point
257+
let mut logger = Logger::<257>::default();
258+
logger.append_with_args(u64::MAX, &[Argument::Precision(u8::MAX)]);
259+
assert!(logger.starts_with("0.00000000000000".as_bytes()));
260+
assert!(logger.ends_with("18446744073709551615".as_bytes()));
261+
262+
logger.clear();
263+
264+
logger.append_with_args(u32::MAX, &[Argument::Precision(u8::MAX)]);
265+
assert!(logger.starts_with("0.00000000000000".as_bytes()));
266+
assert!(logger.ends_with("4294967295".as_bytes()));
267+
268+
logger.clear();
269+
270+
logger.append_with_args(u16::MAX, &[Argument::Precision(u8::MAX)]);
271+
assert!(logger.starts_with("0.00000000000000".as_bytes()));
272+
assert!(logger.ends_with("65535".as_bytes()));
273+
274+
logger.clear();
275+
276+
logger.append_with_args(u8::MAX, &[Argument::Precision(u8::MAX)]);
277+
assert!(logger.starts_with("0.00000000000000".as_bytes()));
278+
assert!(logger.ends_with("255".as_bytes()));
279+
280+
// 255 precision + sign + leading 0 + decimal point
281+
let mut logger = Logger::<258>::default();
282+
logger.append_with_args(i64::MIN, &[Argument::Precision(u8::MAX)]);
283+
assert!(logger.starts_with("-0.00000000000000".as_bytes()));
284+
assert!(logger.ends_with("9223372036854775808".as_bytes()));
285+
286+
logger.clear();
287+
288+
logger.append_with_args(i32::MIN, &[Argument::Precision(u8::MAX)]);
289+
assert!(logger.starts_with("-0.00000000000000".as_bytes()));
290+
assert!(logger.ends_with("2147483648".as_bytes()));
291+
292+
logger.clear();
293+
294+
logger.append_with_args(i16::MIN, &[Argument::Precision(u8::MAX)]);
295+
assert!(logger.starts_with("-0.00000000000000".as_bytes()));
296+
assert!(logger.ends_with("32768".as_bytes()));
297+
298+
logger.clear();
299+
300+
logger.append_with_args(i8::MIN, &[Argument::Precision(u8::MAX)]);
301+
assert!(logger.starts_with("-0.00000000000000".as_bytes()));
302+
assert!(logger.ends_with("128".as_bytes()));
205303
}
206304

207305
#[test]
@@ -235,6 +333,46 @@ mod tests {
235333

236334
logger.append_with_args("0123456789", &[Argument::TruncateStart(9)]);
237335
assert!(&*logger == "..@".as_bytes());
336+
337+
let mut logger = Logger::<1>::default();
338+
339+
logger.append_with_args("test", &[Argument::TruncateStart(0)]);
340+
assert!(&*logger == "".as_bytes());
341+
342+
logger.clear();
343+
344+
logger.append_with_args("test", &[Argument::TruncateStart(1)]);
345+
assert!(&*logger == "@".as_bytes());
346+
347+
let mut logger = Logger::<2>::default();
348+
349+
logger.append_with_args("test", &[Argument::TruncateStart(2)]);
350+
assert!(&*logger == ".@".as_bytes());
351+
352+
let mut logger = Logger::<3>::default();
353+
354+
logger.append_with_args("test", &[Argument::TruncateStart(3)]);
355+
assert!(&*logger == "..@".as_bytes());
356+
357+
let mut logger = Logger::<1>::default();
358+
359+
logger.append_with_args("test", &[Argument::TruncateEnd(0)]);
360+
assert!(&*logger == "".as_bytes());
361+
362+
logger.clear();
363+
364+
logger.append_with_args("test", &[Argument::TruncateEnd(1)]);
365+
assert!(&*logger == "@".as_bytes());
366+
367+
let mut logger = Logger::<2>::default();
368+
369+
logger.append_with_args("test", &[Argument::TruncateEnd(2)]);
370+
assert!(&*logger == ".@".as_bytes());
371+
372+
let mut logger = Logger::<3>::default();
373+
374+
logger.append_with_args("test", &[Argument::TruncateEnd(3)]);
375+
assert!(&*logger == "..@".as_bytes());
238376
}
239377

240378
#[test]

0 commit comments

Comments
 (0)