Skip to content

Commit

Permalink
try adding a test that LowerHex and friends don't panic, but it doesn…
Browse files Browse the repository at this point in the history
…'t work
  • Loading branch information
iximeow committed Mar 23, 2024
1 parent e7fbf72 commit cea973f
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
14 changes: 14 additions & 0 deletions library/core/benches/fmt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,3 +148,17 @@ fn write_u64_min(bh: &mut Bencher) {
test::black_box(format!("{}", 0u64));
});
}

#[bench]
fn write_u8_max(bh: &mut Bencher) {
bh.iter(|| {
test::black_box(format!("{}", u8::MAX));
});
}

#[bench]
fn write_u8_min(bh: &mut Bencher) {
bh.iter(|| {
test::black_box(format!("{}", 0u8));
});
}
24 changes: 24 additions & 0 deletions tests/codegen/fmt_int_no_panic.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Trying to check that formatting u8/u32/u64/etc do not panic.
//
// This test does not correctly do so yet.

//@ compile-flags: -O

#![crate_type = "lib"]

// expected to need to write some kind of `impl core::fmt::Write` on a struct like this to avoid
// unrelated panics if `String::write_str` can't make space..
// struct CanAlwaysBeWrittenTo;

use std::fmt::Write;

// CHECK-LABEL: @format_int_doesnt_panic
#[no_mangle]
pub fn format_int_doesnt_panic(s: &mut String) -> std::fmt::Result {
// CHECK-NOT: panic
// ... but wait! this will definitely panic if `s.vec.reserve_for_push()` cannot alloc! this
// shouldn't pass!
write!(s, "{:x}", 0u8)?;
write!(s, "{:x}", u8::MAX)?;
Ok(())
}

0 comments on commit cea973f

Please sign in to comment.