Adjust tests for isize::MAX allocation always being checked
This commit is contained in:
parent
3cd49a0fa8
commit
7b58193f90
@ -693,12 +693,6 @@ fn test_try_reserve() {
|
||||
const MAX_CAP: usize = isize::MAX as usize;
|
||||
const MAX_USIZE: usize = usize::MAX;
|
||||
|
||||
// On 16/32-bit, we check that allocations don't exceed isize::MAX,
|
||||
// on 64-bit, we assume the OS will give an OOM for such a ridiculous size.
|
||||
// Any platform that succeeds for these requests is technically broken with
|
||||
// ptr::offset because LLVM is the worst.
|
||||
let guards_against_isize = usize::BITS < 64;
|
||||
|
||||
{
|
||||
// Note: basic stuff is checked by test_reserve
|
||||
let mut empty_string: String = String::new();
|
||||
@ -712,35 +706,19 @@ fn test_try_reserve() {
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
|
||||
if guards_against_isize {
|
||||
// Check isize::MAX + 1 does count as overflow
|
||||
assert_matches!(
|
||||
empty_string.try_reserve(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
// Check isize::MAX + 1 does count as overflow
|
||||
assert_matches!(
|
||||
empty_string.try_reserve(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
// Check usize::MAX does count as overflow
|
||||
assert_matches!(
|
||||
empty_string.try_reserve(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
// Check isize::MAX + 1 is an OOM
|
||||
assert_matches!(
|
||||
empty_string.try_reserve(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
|
||||
// Check usize::MAX is an OOM
|
||||
assert_matches!(
|
||||
empty_string.try_reserve(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"usize::MAX should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
// Check usize::MAX does count as overflow
|
||||
assert_matches!(
|
||||
empty_string.try_reserve(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
@ -753,19 +731,13 @@ fn test_try_reserve() {
|
||||
if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 10).map_err(|e| e.kind()) {
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
// Should always overflow in the add-to-len
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_USIZE).map_err(|e| e.kind()),
|
||||
@ -785,8 +757,6 @@ fn test_try_reserve_exact() {
|
||||
const MAX_CAP: usize = isize::MAX as usize;
|
||||
const MAX_USIZE: usize = usize::MAX;
|
||||
|
||||
let guards_against_isize = usize::BITS < 64;
|
||||
|
||||
{
|
||||
let mut empty_string: String = String::new();
|
||||
|
||||
@ -799,31 +769,17 @@ fn test_try_reserve_exact() {
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
empty_string.try_reserve_exact(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
assert_matches!(
|
||||
empty_string.try_reserve_exact(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
empty_string.try_reserve_exact(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
empty_string.try_reserve_exact(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
empty_string.try_reserve_exact(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"usize::MAX should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
assert_matches!(
|
||||
empty_string.try_reserve_exact(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
@ -839,19 +795,13 @@ fn test_try_reserve_exact() {
|
||||
{
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
|
@ -1489,12 +1489,6 @@ fn test_try_reserve() {
|
||||
const MAX_CAP: usize = isize::MAX as usize;
|
||||
const MAX_USIZE: usize = usize::MAX;
|
||||
|
||||
// On 16/32-bit, we check that allocations don't exceed isize::MAX,
|
||||
// on 64-bit, we assume the OS will give an OOM for such a ridiculous size.
|
||||
// Any platform that succeeds for these requests is technically broken with
|
||||
// ptr::offset because LLVM is the worst.
|
||||
let guards_against_isize = usize::BITS < 64;
|
||||
|
||||
{
|
||||
// Note: basic stuff is checked by test_reserve
|
||||
let mut empty_bytes: Vec<u8> = Vec::new();
|
||||
@ -1508,35 +1502,19 @@ fn test_try_reserve() {
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
|
||||
if guards_against_isize {
|
||||
// Check isize::MAX + 1 does count as overflow
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
// Check isize::MAX + 1 does count as overflow
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
// Check usize::MAX does count as overflow
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
// Check isize::MAX + 1 is an OOM
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
|
||||
// Check usize::MAX is an OOM
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"usize::MAX should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
// Check usize::MAX does count as overflow
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
@ -1549,19 +1527,13 @@ fn test_try_reserve() {
|
||||
if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 10).map_err(|e| e.kind()) {
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
// Should always overflow in the add-to-len
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_USIZE).map_err(|e| e.kind()),
|
||||
@ -1582,19 +1554,13 @@ fn test_try_reserve() {
|
||||
{
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
// Should fail in the mul-by-size
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve(MAX_USIZE - 20).map_err(|e| e.kind()),
|
||||
@ -1614,8 +1580,6 @@ fn test_try_reserve_exact() {
|
||||
const MAX_CAP: usize = isize::MAX as usize;
|
||||
const MAX_USIZE: usize = usize::MAX;
|
||||
|
||||
let guards_against_isize = size_of::<usize>() < 8;
|
||||
|
||||
{
|
||||
let mut empty_bytes: Vec<u8> = Vec::new();
|
||||
|
||||
@ -1628,31 +1592,17 @@ fn test_try_reserve_exact() {
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve_exact(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve_exact(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve_exact(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve_exact(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve_exact(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"usize::MAX should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve_exact(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
@ -1668,19 +1618,13 @@ fn test_try_reserve_exact() {
|
||||
{
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
@ -1701,19 +1645,13 @@ fn test_try_reserve_exact() {
|
||||
{
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve_exact(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve_exact(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve_exact(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve_exact(MAX_USIZE - 20).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
|
@ -2,7 +2,6 @@
|
||||
use std::collections::TryReserveErrorKind::*;
|
||||
use std::collections::{vec_deque::Drain, VecDeque};
|
||||
use std::fmt::Debug;
|
||||
use std::mem::size_of;
|
||||
use std::ops::Bound::*;
|
||||
use std::panic::{catch_unwind, AssertUnwindSafe};
|
||||
|
||||
@ -1161,12 +1160,6 @@ fn test_try_reserve() {
|
||||
const MAX_CAP: usize = (isize::MAX as usize + 1) / 2 - 1;
|
||||
const MAX_USIZE: usize = usize::MAX;
|
||||
|
||||
// On 16/32-bit, we check that allocations don't exceed isize::MAX,
|
||||
// on 64-bit, we assume the OS will give an OOM for such a ridiculous size.
|
||||
// Any platform that succeeds for these requests is technically broken with
|
||||
// ptr::offset because LLVM is the worst.
|
||||
let guards_against_isize = size_of::<usize>() < 8;
|
||||
|
||||
{
|
||||
// Note: basic stuff is checked by test_reserve
|
||||
let mut empty_bytes: VecDeque<u8> = VecDeque::new();
|
||||
@ -1180,31 +1173,19 @@ fn test_try_reserve() {
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
|
||||
if guards_against_isize {
|
||||
// Check isize::MAX + 1 does count as overflow
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
// Check isize::MAX + 1 does count as overflow
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
// Check usize::MAX does count as overflow
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
// Check isize::MAX is an OOM
|
||||
// VecDeque starts with capacity 7, always adds 1 to the capacity
|
||||
// and also rounds the number to next power of 2 so this is the
|
||||
// furthest we can go without triggering CapacityOverflow
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve(MAX_CAP).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
// Check usize::MAX does count as overflow
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
@ -1217,19 +1198,13 @@ fn test_try_reserve() {
|
||||
if let Err(CapacityOverflow) = ten_bytes.try_reserve(MAX_CAP - 10).map_err(|e| e.kind()) {
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
// Should always overflow in the add-to-len
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve(MAX_USIZE).map_err(|e| e.kind()),
|
||||
@ -1250,19 +1225,13 @@ fn test_try_reserve() {
|
||||
{
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
// Should fail in the mul-by-size
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve(MAX_USIZE - 20).map_err(|e| e.kind()),
|
||||
@ -1282,8 +1251,6 @@ fn test_try_reserve_exact() {
|
||||
const MAX_CAP: usize = (isize::MAX as usize + 1) / 2 - 1;
|
||||
const MAX_USIZE: usize = usize::MAX;
|
||||
|
||||
let guards_against_isize = size_of::<usize>() < 8;
|
||||
|
||||
{
|
||||
let mut empty_bytes: VecDeque<u8> = VecDeque::new();
|
||||
|
||||
@ -1296,29 +1263,17 @@ fn test_try_reserve_exact() {
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve_exact(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve_exact(MAX_CAP + 1).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve_exact(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
// Check isize::MAX is an OOM
|
||||
// VecDeque starts with capacity 7, always adds 1 to the capacity
|
||||
// and also rounds the number to next power of 2 so this is the
|
||||
// furthest we can go without triggering CapacityOverflow
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve_exact(MAX_CAP).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
assert_matches!(
|
||||
empty_bytes.try_reserve_exact(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"usize::MAX should trigger an overflow!"
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
@ -1334,19 +1289,13 @@ fn test_try_reserve_exact() {
|
||||
{
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_CAP - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
ten_bytes.try_reserve_exact(MAX_USIZE).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
@ -1367,19 +1316,13 @@ fn test_try_reserve_exact() {
|
||||
{
|
||||
panic!("isize::MAX shouldn't trigger an overflow!");
|
||||
}
|
||||
if guards_against_isize {
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve_exact(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
} else {
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve_exact(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(AllocError { .. }),
|
||||
"isize::MAX + 1 should trigger an OOM!"
|
||||
);
|
||||
}
|
||||
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve_exact(MAX_CAP / 4 - 9).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
"isize::MAX + 1 should trigger an overflow!"
|
||||
);
|
||||
|
||||
assert_matches!(
|
||||
ten_u32s.try_reserve_exact(MAX_USIZE - 20).map_err(|e| e.kind()),
|
||||
Err(CapacityOverflow),
|
||||
|
Loading…
Reference in New Issue
Block a user