Skip to content

Commit c2e4e98

Browse files
committed
Add more comprehensive tests for is_sorted and friends
See #53485 and #55045.
1 parent c84d5e7 commit c2e4e98

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

library/core/tests/iter/traits/iterator.rs

+30-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use core::cmp::Ordering;
12
use core::num::NonZeroUsize;
23

34
/// A wrapper struct that implements `Eq` and `Ord` based on the wrapped
@@ -371,11 +372,39 @@ fn test_by_ref() {
371372

372373
#[test]
373374
fn test_is_sorted() {
375+
// Tests on integers
374376
assert!([1, 2, 2, 9].iter().is_sorted());
375377
assert!(![1, 3, 2].iter().is_sorted());
376378
assert!([0].iter().is_sorted());
377-
assert!(std::iter::empty::<i32>().is_sorted());
379+
assert!([0, 0].iter().is_sorted());
380+
assert!(core::iter::empty::<i32>().is_sorted());
381+
382+
// Tests on floats
383+
assert!([1.0f32, 2.0, 2.0, 9.0].iter().is_sorted());
384+
assert!(![1.0f32, 3.0f32, 2.0f32].iter().is_sorted());
385+
assert!([0.0f32].iter().is_sorted());
386+
assert!([0.0f32, 0.0f32].iter().is_sorted());
387+
// Test cases with NaNs
388+
assert!([f32::NAN].iter().is_sorted());
389+
assert!(![f32::NAN, f32::NAN].iter().is_sorted());
378390
assert!(![0.0, 1.0, f32::NAN].iter().is_sorted());
391+
// Tests from <https://github.com/rust-lang/rust/pull/55045#discussion_r229689884>
392+
assert!(![f32::NAN, f32::NAN, f32::NAN].iter().is_sorted());
393+
assert!(![1.0, f32::NAN, 2.0].iter().is_sorted());
394+
assert!(![2.0, f32::NAN, 1.0].iter().is_sorted());
395+
assert!(![2.0, f32::NAN, 1.0, 7.0].iter().is_sorted());
396+
assert!(![2.0, f32::NAN, 1.0, 0.0].iter().is_sorted());
397+
assert!(![-f32::NAN, -1.0, 0.0, 1.0, f32::NAN].iter().is_sorted());
398+
assert!(![f32::NAN, -f32::NAN, -1.0, 0.0, 1.0].iter().is_sorted());
399+
assert!(![1.0, f32::NAN, -f32::NAN, -1.0, 0.0].iter().is_sorted());
400+
assert!(![0.0, 1.0, f32::NAN, -f32::NAN, -1.0].iter().is_sorted());
401+
assert!(![-1.0, 0.0, 1.0, f32::NAN, -f32::NAN].iter().is_sorted());
402+
403+
// Tests for is_sorted_by
404+
assert!(![6, 2, 8, 5, 1, -60, 1337].iter().is_sorted());
405+
assert!([6, 2, 8, 5, 1, -60, 1337].iter().is_sorted_by(|_, _| Some(Ordering::Less)));
406+
407+
// Tests for is_sorted_by_key
379408
assert!([-2, -1, 0, 3].iter().is_sorted());
380409
assert!(![-2i32, -1, 0, 3].iter().is_sorted_by_key(|n| n.abs()));
381410
assert!(!["c", "bb", "aaa"].iter().is_sorted());

library/core/tests/slice.rs

+28
Original file line numberDiff line numberDiff line change
@@ -2278,11 +2278,39 @@ fn test_copy_within_panics_src_out_of_bounds() {
22782278
fn test_is_sorted() {
22792279
let empty: [i32; 0] = [];
22802280

2281+
// Tests on integers
22812282
assert!([1, 2, 2, 9].is_sorted());
22822283
assert!(![1, 3, 2].is_sorted());
22832284
assert!([0].is_sorted());
2285+
assert!([0, 0].is_sorted());
22842286
assert!(empty.is_sorted());
2287+
2288+
// Tests on floats
2289+
assert!([1.0f32, 2.0, 2.0, 9.0].is_sorted());
2290+
assert!(![1.0f32, 3.0f32, 2.0f32].is_sorted());
2291+
assert!([0.0f32].is_sorted());
2292+
assert!([0.0f32, 0.0f32].is_sorted());
2293+
// Test cases with NaNs
2294+
assert!([f32::NAN].is_sorted());
2295+
assert!(![f32::NAN, f32::NAN].is_sorted());
22852296
assert!(![0.0, 1.0, f32::NAN].is_sorted());
2297+
// Tests from <https://github.com/rust-lang/rust/pull/55045#discussion_r229689884>
2298+
assert!(![f32::NAN, f32::NAN, f32::NAN].is_sorted());
2299+
assert!(![1.0, f32::NAN, 2.0].is_sorted());
2300+
assert!(![2.0, f32::NAN, 1.0].is_sorted());
2301+
assert!(![2.0, f32::NAN, 1.0, 7.0].is_sorted());
2302+
assert!(![2.0, f32::NAN, 1.0, 0.0].is_sorted());
2303+
assert!(![-f32::NAN, -1.0, 0.0, 1.0, f32::NAN].is_sorted());
2304+
assert!(![f32::NAN, -f32::NAN, -1.0, 0.0, 1.0].is_sorted());
2305+
assert!(![1.0, f32::NAN, -f32::NAN, -1.0, 0.0].is_sorted());
2306+
assert!(![0.0, 1.0, f32::NAN, -f32::NAN, -1.0].is_sorted());
2307+
assert!(![-1.0, 0.0, 1.0, f32::NAN, -f32::NAN].is_sorted());
2308+
2309+
// Tests for is_sorted_by
2310+
assert!(![6, 2, 8, 5, 1, -60, 1337].is_sorted());
2311+
assert!([6, 2, 8, 5, 1, -60, 1337].is_sorted_by(|_, _| Some(Ordering::Less)));
2312+
2313+
// Tests for is_sorted_by_key
22862314
assert!([-2, -1, 0, 3].is_sorted());
22872315
assert!(![-2i32, -1, 0, 3].is_sorted_by_key(|n| n.abs()));
22882316
assert!(!["c", "bb", "aaa"].is_sorted());

0 commit comments

Comments
 (0)