Replace sort implementations · model-checking/verify-rust-std@36af639 (original) (raw)
`@@ -34,7 +34,7 @@ macro_rules! do_test {
`
34
34
`}
`
35
35
``
36
36
`let v = $input.to_owned();
`
37
``
`-
let _ = std::panic::catch_unwind(move || {
`
``
37
`+
let _ = panic::catch_unwind(move || {
`
38
38
`let mut v = v;
`
39
39
`let mut panic_countdown = panic_countdown;
`
40
40
` v.$func(|a, b| {
`
`@@ -197,8 +197,7 @@ fn panic_safe() {
`
197
197
``
198
198
`let mut rng = test_rng();
`
199
199
``
200
``
`` -
// Miri is too slow (but still need to chain
to make the types match)
``
201
``
`-
let lens = if cfg!(miri) { (1..10).chain(0..0) } else { (1..20).chain(70..MAX_LEN) };
`
``
200
`+
let lens = if cfg!(miri) { (1..10).chain(30..36) } else { (1..20).chain(70..MAX_LEN) };
`
202
201
`let moduli: &[u32] = if cfg!(miri) { &[5] } else { &[5, 20, 50] };
`
203
202
``
204
203
`for len in lens {
`
`@@ -294,15 +293,20 @@ fn test_sort() {
`
294
293
`}
`
295
294
`}
`
296
295
``
297
``
`-
// Sort using a completely random comparison function.
`
298
``
`-
// This will reorder the elements somehow, but won't panic.
`
299
``
`-
let mut v = [0; 500];
`
300
``
`-
for i in 0..v.len() {
`
``
296
`+
const ORD_VIOLATION_MAX_LEN: usize = 500;
`
``
297
`+
let mut v = [0; ORD_VIOLATION_MAX_LEN];
`
``
298
`+
for i in 0..ORD_VIOLATION_MAX_LEN {
`
301
299
` v[i] = i as i32;
`
302
300
`}
`
303
``
`-
v.sort_by(|_, _| *[Less, Equal, Greater].choose(&mut rng).unwrap());
`
``
301
+
``
302
`+
// Sort using a completely random comparison function. This will reorder the elements somehow,
`
``
303
`+
// it may panic but the original elements must still be present.
`
``
304
`+
let _ = panic::catch_unwind(move || {
`
``
305
`+
v.sort_by(|_, _| *[Less, Equal, Greater].choose(&mut rng).unwrap());
`
``
306
`+
});
`
``
307
+
304
308
` v.sort();
`
305
``
`-
for i in 0..v.len() {
`
``
309
`+
for i in 0..ORD_VIOLATION_MAX_LEN {
`
306
310
`assert_eq!(v[i], i as i32);
`
307
311
`}
`
308
312
``