@@ -1322,42 +1322,84 @@ fn test_range() {
1322
1322
( isize :: MAX as usize + 2 , Some ( isize :: MAX as usize + 2 ) ) ) ;
1323
1323
}
1324
1324
1325
+ #[ test]
1326
+ fn test_range_exhaustion ( ) {
1327
+ let mut r = 10 ..10 ;
1328
+ assert ! ( r. is_empty( ) ) ;
1329
+ assert_eq ! ( r. next( ) , None ) ;
1330
+ assert_eq ! ( r. next_back( ) , None ) ;
1331
+ assert_eq ! ( r, 10 ..10 ) ;
1332
+
1333
+ let mut r = 10 ..12 ;
1334
+ assert_eq ! ( r. next( ) , Some ( 10 ) ) ;
1335
+ assert_eq ! ( r. next( ) , Some ( 11 ) ) ;
1336
+ assert ! ( r. is_empty( ) ) ;
1337
+ assert_eq ! ( r, 12 ..12 ) ;
1338
+ assert_eq ! ( r. next( ) , None ) ;
1339
+
1340
+ let mut r = 10 ..12 ;
1341
+ assert_eq ! ( r. next_back( ) , Some ( 11 ) ) ;
1342
+ assert_eq ! ( r. next_back( ) , Some ( 10 ) ) ;
1343
+ assert ! ( r. is_empty( ) ) ;
1344
+ assert_eq ! ( r, 10 ..10 ) ;
1345
+ assert_eq ! ( r. next_back( ) , None ) ;
1346
+
1347
+ let mut r = 100 ..10 ;
1348
+ assert ! ( r. is_empty( ) ) ;
1349
+ assert_eq ! ( r. next( ) , None ) ;
1350
+ assert_eq ! ( r. next_back( ) , None ) ;
1351
+ assert_eq ! ( r, 100 ..10 ) ;
1352
+ }
1353
+
1325
1354
#[ test]
1326
1355
fn test_range_inclusive_exhaustion ( ) {
1327
1356
let mut r = 10 ..=10 ;
1328
1357
assert_eq ! ( r. next( ) , Some ( 10 ) ) ;
1329
- assert_eq ! ( r, 1 ..=0 ) ;
1358
+ assert ! ( r. is_empty( ) ) ;
1359
+ assert_eq ! ( r. next( ) , None ) ;
1360
+ assert_eq ! ( r. next( ) , None ) ;
1330
1361
1331
1362
let mut r = 10 ..=10 ;
1332
1363
assert_eq ! ( r. next_back( ) , Some ( 10 ) ) ;
1333
- assert_eq ! ( r, 1 ..=0 ) ;
1364
+ assert ! ( r. is_empty( ) ) ;
1365
+ assert_eq ! ( r. next_back( ) , None ) ;
1334
1366
1335
1367
let mut r = 10 ..=12 ;
1336
1368
assert_eq ! ( r. next( ) , Some ( 10 ) ) ;
1337
1369
assert_eq ! ( r. next( ) , Some ( 11 ) ) ;
1338
1370
assert_eq ! ( r. next( ) , Some ( 12 ) ) ;
1339
- assert_eq ! ( r, 1 ..=0 ) ;
1371
+ assert ! ( r. is_empty( ) ) ;
1372
+ assert_eq ! ( r. next( ) , None ) ;
1340
1373
1341
1374
let mut r = 10 ..=12 ;
1342
1375
assert_eq ! ( r. next_back( ) , Some ( 12 ) ) ;
1343
1376
assert_eq ! ( r. next_back( ) , Some ( 11 ) ) ;
1344
1377
assert_eq ! ( r. next_back( ) , Some ( 10 ) ) ;
1345
- assert_eq ! ( r, 1 ..=0 ) ;
1378
+ assert ! ( r. is_empty( ) ) ;
1379
+ assert_eq ! ( r. next_back( ) , None ) ;
1346
1380
1347
1381
let mut r = 10 ..=12 ;
1348
1382
assert_eq ! ( r. nth( 2 ) , Some ( 12 ) ) ;
1349
- assert_eq ! ( r, 1 ..=0 ) ;
1383
+ assert ! ( r. is_empty( ) ) ;
1384
+ assert_eq ! ( r. next( ) , None ) ;
1350
1385
1351
1386
let mut r = 10 ..=12 ;
1352
1387
assert_eq ! ( r. nth( 5 ) , None ) ;
1353
- assert_eq ! ( r, 1 ..=0 ) ;
1388
+ assert ! ( r. is_empty( ) ) ;
1389
+ assert_eq ! ( r. next( ) , None ) ;
1354
1390
1355
1391
let mut r = 100 ..=10 ;
1356
1392
assert_eq ! ( r. next( ) , None ) ;
1393
+ assert ! ( r. is_empty( ) ) ;
1394
+ assert_eq ! ( r. next( ) , None ) ;
1395
+ assert_eq ! ( r. next( ) , None ) ;
1357
1396
assert_eq ! ( r, 100 ..=10 ) ;
1358
1397
1359
1398
let mut r = 100 ..=10 ;
1360
1399
assert_eq ! ( r. next_back( ) , None ) ;
1400
+ assert ! ( r. is_empty( ) ) ;
1401
+ assert_eq ! ( r. next_back( ) , None ) ;
1402
+ assert_eq ! ( r. next_back( ) , None ) ;
1361
1403
assert_eq ! ( r, 100 ..=10 ) ;
1362
1404
}
1363
1405
@@ -1427,10 +1469,11 @@ fn test_range_inclusive_nth() {
1427
1469
assert_eq ! ( r, 13 ..=20 ) ;
1428
1470
assert_eq ! ( r. nth( 2 ) , Some ( 15 ) ) ;
1429
1471
assert_eq ! ( r, 16 ..=20 ) ;
1472
+ assert_eq ! ( r. is_empty( ) , false ) ;
1430
1473
assert_eq ! ( ExactSizeIterator :: is_empty( & r) , false ) ;
1431
1474
assert_eq ! ( r. nth( 10 ) , None ) ;
1475
+ assert_eq ! ( r. is_empty( ) , true ) ;
1432
1476
assert_eq ! ( ExactSizeIterator :: is_empty( & r) , true ) ;
1433
- assert_eq ! ( r, 1 ..=0 ) ; // We may not want to document/promise this detail
1434
1477
}
1435
1478
1436
1479
#[ test]
@@ -1514,11 +1557,11 @@ fn test_range_inclusive_folds() {
1514
1557
1515
1558
let mut it = 10 ..=20 ;
1516
1559
assert_eq ! ( it. try_fold( 0 , |a, b| Some ( a+b) ) , Some ( 165 ) ) ;
1517
- assert_eq ! ( it, 1 ..= 0 ) ;
1560
+ assert ! ( it. is_empty ( ) ) ;
1518
1561
1519
1562
let mut it = 10 ..=20 ;
1520
1563
assert_eq ! ( it. try_rfold( 0 , |a, b| Some ( a+b) ) , Some ( 165 ) ) ;
1521
- assert_eq ! ( it, 1 ..= 0 ) ;
1564
+ assert ! ( it. is_empty ( ) ) ;
1522
1565
}
1523
1566
1524
1567
#[ test]
0 commit comments