Skip to content

Commit b683ce3

Browse files
Merge #2134
2134: Extend libcore coverage for `core::fmt`, Part 1 r=jyn514 a=Urhengulas Cover functions of `library/core` that were added while adding `core::fmt` to the subset. See the commit messages for what tests for what functions have been added. # Test coverage diff Executing `./x test library/core library/alloc --coverage=library --no-doc` on both this branch and `main` (52b3ee8) shows that this PR changes coverage (with "count annotated lines as tested") like following: | | main | this PR | Diff | | ---------------- | -------------------------- | -------------------------- | ----- | | Lines | 97.33% (25761/26469 lines) | 96.02% (25265/26311 lines) | +0.78% | | Fully Tested | 5878 | 5906 | +28 | | Partially tested | 40 | 23 | -17 | | Fully untested | 123 | 112 | -11 | | Fully ignored | 316 | 316 | +0 | | Total | 6357 | 6357 | +0 | Co-authored-by: Urhengulas <[email protected]> Co-authored-by: Johann Hemmann <[email protected]>
2 parents 975aad0 + 7675711 commit b683ce3

16 files changed

Lines changed: 283 additions & 34 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use super::*;
2+
3+
pub fn test_drain_call_once() {
4+
let mut md = ManuallyDrop::new([1, 2, 3, 4, 5]);
5+
let mut f = |c| c + 10;
6+
// SAFETY: is only called once
7+
let mut drain = unsafe { drain::Drain::new(&mut md, &mut f) };
8+
assert_eq!(11, drain.call_once((15,)));
9+
}

library/core/src/array/mod.rs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,14 +1061,4 @@ fn iter_next_chunk_erased<T>(
10611061
#[doc(hidden)]
10621062
#[unstable(feature = "ferrocene_test", issue = "none")]
10631063
#[cfg(not(feature = "ferrocene_subset"))]
1064-
pub mod ferrocene_test {
1065-
use super::*;
1066-
1067-
pub fn test_drain_call_once() {
1068-
let mut md = ManuallyDrop::new([1, 2, 3, 4, 5]);
1069-
let mut f = |c| c + 10;
1070-
// SAFETY: is only called once
1071-
let mut drain = unsafe { drain::Drain::new(&mut md, &mut f) };
1072-
assert_eq!(11, drain.call_once((15,)));
1073-
}
1074-
}
1064+
pub mod ferrocene_test;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
pub fn test_rt_argument_as_u16_none() {
2+
assert_eq!(super::rt::Argument::new_debug(&10).as_u16(), None);
3+
}

library/core/src/fmt/mod.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3181,3 +3181,9 @@ impl<T: ?Sized> Debug for SyncUnsafeCell<T> {
31813181
// If you expected tests to be here, look instead at coretests/tests/fmt/;
31823182
// it's a lot easier than creating all of the rt::Piece structures here.
31833183
// There are also tests in alloctests/tests/fmt.rs, for those that need allocations.
3184+
3185+
/// Ferrocene addition: Hidden module to test crate-internal functionality
3186+
#[doc(hidden)]
3187+
#[unstable(feature = "ferrocene_test", issue = "none")]
3188+
#[cfg(not(feature = "ferrocene_subset"))]
3189+
pub mod ferrocene_test;

library/core/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,6 @@ mod macros;
242242
#[cfg(not(feature = "ferrocene_subset"))]
243243
pub mod ferrocene_test;
244244

245-
#[cfg(not(feature = "ferrocene_subset"))]
246245
#[unstable(feature = "assert_matches", issue = "82775")]
247246
pub use crate::macros::{assert_matches, debug_assert_matches};
248247

library/core/src/macros/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,6 @@ macro_rules! debug_assert_ne {
400400
#[unstable(feature = "assert_matches", issue = "82775")]
401401
#[allow_internal_unstable(assert_matches)]
402402
#[rustc_macro_transparency = "semiopaque"]
403-
#[cfg(not(feature = "ferrocene_subset"))]
404403
pub macro debug_assert_matches($($arg:tt)*) {
405404
if $crate::cfg!(debug_assertions) {
406405
$crate::assert_matches!($($arg)*);

library/coretests/tests/lib.rs

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,10 @@
88
#![feature(ascii_char_variants)]
99
#![feature(async_iter_from_iter)]
1010
#![feature(async_iterator)]
11-
#![feature(atomic_from_mut)]
12-
#![feature(atomic_try_update)]
1311
#![feature(bigint_helper_methods)]
1412
#![feature(bool_to_result)]
15-
#![feature(bound_as_ref)]
16-
#![feature(bound_copied)]
1713
#![feature(bstr)]
1814
#![feature(cfg_target_has_reliable_f16_f128)]
19-
#![feature(char_internals)]
2015
#![feature(char_max_len)]
2116
#![feature(clamp_magnitude)]
2217
#![feature(clone_to_uninit)]
@@ -33,12 +28,10 @@
3328
#![feature(const_index)]
3429
#![feature(const_ops)]
3530
#![feature(const_option_ops)]
36-
#![feature(const_raw_ptr_comparison)]
3731
#![feature(const_ref_cell)]
3832
#![feature(const_result_trait_fn)]
3933
#![feature(const_select_unpredictable)]
4034
#![feature(const_trait_impl)]
41-
#![feature(control_flow_into_value)]
4235
#![feature(control_flow_ok)]
4336
#![feature(core_float_math)]
4437
#![feature(core_intrinsics)]
@@ -47,20 +40,17 @@
4740
#![feature(core_private_bignum)]
4841
#![feature(core_private_diy_float)]
4942
#![feature(cstr_display)]
50-
#![feature(debug_closure_helpers)]
5143
#![feature(dec2flt)]
5244
#![feature(drop_guard)]
5345
#![feature(duration_constants)]
5446
#![feature(duration_constructors)]
55-
#![feature(duration_millis_float)]
5647
#![feature(error_generic_member_access)]
5748
#![feature(exact_div)]
5849
#![feature(exact_size_is_empty)]
5950
#![feature(extend_one)]
6051
#![feature(extern_types)]
6152
#![feature(f16)]
6253
#![feature(f128)]
63-
#![feature(ferrocene_test)]
6454
#![feature(float_algebraic)]
6555
#![feature(float_gamma)]
6656
#![feature(float_minimum_maximum)]
@@ -90,7 +80,6 @@
9080
#![feature(iterator_try_collect)]
9181
#![feature(iterator_try_reduce)]
9282
#![feature(layout_for_ptr)]
93-
#![feature(maybe_uninit_as_bytes)]
9483
#![feature(maybe_uninit_fill)]
9584
#![feature(maybe_uninit_uninit_array_transpose)]
9685
#![feature(min_specialization)]
@@ -99,34 +88,27 @@
9988
#![feature(next_index)]
10089
#![feature(non_exhaustive_omitted_patterns_lint)]
10190
#![feature(numfmt)]
102-
#![feature(one_sided_range)]
10391
#![feature(option_reduce)]
10492
#![feature(pattern)]
10593
#![feature(pointer_is_aligned_to)]
106-
#![feature(pointer_try_cast_aligned)]
10794
#![feature(portable_simd)]
10895
#![feature(ptr_metadata)]
109-
#![feature(range_into_bounds)]
11096
#![feature(result_option_map_or_default)]
11197
#![feature(slice_from_ptr_range)]
11298
#![feature(slice_index_methods)]
11399
#![feature(slice_internals)]
114-
#![feature(slice_iter_mut_as_mut_slice)]
115100
#![feature(slice_partition_dedup)]
116101
#![feature(slice_split_once)]
117102
#![feature(sliceindex_wrappers)]
118103
#![feature(split_array)]
119104
#![feature(split_as_slice)]
120105
#![feature(std_internals)]
121106
#![feature(step_trait)]
122-
#![feature(str_as_str)]
123107
#![feature(str_internals)]
124108
#![feature(strict_provenance_lints)]
125-
#![feature(temporary_niche_types)]
126109
#![feature(test)]
127110
#![feature(trusted_len)]
128111
#![feature(trusted_random_access)]
129-
#![feature(trusted_step)]
130112
#![feature(try_blocks)]
131113
#![feature(try_find)]
132114
#![feature(try_trait_v2)]
@@ -141,6 +123,30 @@
141123
#![deny(unsafe_op_in_unsafe_fn)]
142124
// Ferrocene addition: To disable AtomicI64 tests on Thumbv7em
143125
#![feature(cfg_target_has_atomic)]
126+
// Ferrocene addition: Enable test-only functions in libcore
127+
#![feature(ferrocene_test)]
128+
// Ferrocene addition: Features required for tests
129+
// tidy-alphabetical-start
130+
#![feature(assert_matches)]
131+
#![feature(atomic_from_mut)]
132+
#![feature(atomic_try_update)]
133+
#![feature(bound_as_ref)]
134+
#![feature(bound_copied)]
135+
#![feature(char_internals)]
136+
#![feature(const_raw_ptr_comparison)]
137+
#![feature(control_flow_into_value)]
138+
#![feature(debug_closure_helpers)]
139+
#![feature(duration_millis_float)]
140+
#![feature(maybe_uninit_as_bytes)]
141+
#![feature(one_sided_range)]
142+
#![feature(pointer_try_cast_aligned)]
143+
#![feature(range_into_bounds)]
144+
#![feature(slice_iter_mut_as_mut_slice)]
145+
#![feature(str_as_str)]
146+
#![feature(str_from_raw_parts)]
147+
#![feature(temporary_niche_types)]
148+
#![feature(trusted_step)]
149+
// tidy-alphabetical-end
144150

145151
// Ferrocene addition: coverage tests require panic=abort, we don't certify panic=unwind.
146152
#[cfg(all(ferrocene_coverage, not(panic = "abort")))]

library/coretests/tests/not_doctests.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
mod array;
2+
mod ascii;
23
mod atomic;
34
mod borrow;
45
mod cell;
56
mod cmp;
67
mod floats;
8+
mod fmt;
79
mod hash;
810
mod intrinsics;
911
mod iter;
12+
mod macros;
1013
mod num;
1114
mod ops;
1215
mod slice;
1316
mod str;
1417
mod time;
18+
mod unicode;
1519

1620
use core::cmp::Ordering;
1721
use core::ops::{Bound, ControlFlow};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Covers: <[core::ascii::ascii_char::AsciiChar]>::as_bytes
2+
#[test]
3+
fn ascii_char_slice_as_bytes() {
4+
let a = [core::ascii::Char::Null; 5];
5+
assert_eq!(a.as_bytes(), [0; 5]);
6+
}
7+
8+
// Covers:
9+
// - <core::ascii::EscapeDefault as core::iter::traits::iterator::Iterator>::advance_by
10+
// - <core::ascii::EscapeDefault as core::iter::traits::iterator::Iterator>::count
11+
// - <core::ascii::EscapeDefault as core::iter::traits::iterator::Iterator>::last
12+
// - <core::ascii::EscapeDefault as core::iter::traits::iterator::Iterator>::size_hint
13+
#[test]
14+
fn escape_default_iter() {
15+
let a = core::ascii::escape_default(0);
16+
17+
assert_eq!(a.clone().advance_by(5), Err(core::num::NonZero::new(1).unwrap()));
18+
assert_eq!(a.clone().count(), 4);
19+
assert_eq!(a.clone().last(), Some(48));
20+
assert_eq!(a.clone().size_hint(), (4, Some(4)));
21+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
use core::fmt;
2+
3+
// Covers `core::fmt::rt::Argument::<'_>::as_u16`
4+
#[test]
5+
fn test_rt_argument_as_u16_none() {
6+
fmt::ferrocene_test::test_rt_argument_as_u16_none();
7+
}
8+
9+
// Covers `core::fmt::FormattingOptions::width`
10+
#[test]
11+
fn test_formatting_options_width() {
12+
let mut a = fmt::FormattingOptions::new();
13+
assert_eq!(a.width(None).get_width(), None);
14+
}
15+
16+
// Covers `core::fmt::FormattingOptions::align`
17+
#[test]
18+
fn test_formatting_options_align_left() {
19+
let mut fo = fmt::FormattingOptions::new();
20+
let alignment = Some(fmt::Alignment::Left);
21+
assert_eq!(fo.align(alignment).get_align(), alignment);
22+
}
23+
24+
// Covers `core::fmt::FormattingOptions::align`
25+
#[test]
26+
fn test_formatting_options_align_right() {
27+
let mut fo = fmt::FormattingOptions::new();
28+
let alignment = Some(fmt::Alignment::Right);
29+
assert_eq!(fo.align(alignment).get_align(), alignment);
30+
}
31+
32+
// Covers `core::fmt::FormattingOptions::align`
33+
#[test]
34+
fn test_formatting_options_align_center() {
35+
let mut fo = fmt::FormattingOptions::new();
36+
let alignment = Some(fmt::Alignment::Center);
37+
assert_eq!(fo.align(alignment).get_align(), alignment);
38+
}
39+
40+
// Covers `core::fmt::FormattingOptions::align`
41+
#[test]
42+
fn test_formatting_options_align_none() {
43+
let mut fo = fmt::FormattingOptions::new();
44+
let alignment = None;
45+
assert_eq!(fo.align(alignment).get_align(), alignment);
46+
}

0 commit comments

Comments
 (0)