| ... | @@ -1456,3 +1456,69 @@ fn fence() { | ... | @@ -1456,3 +1456,69 @@ fn fence() { |
| 1456 | @fence(AtomicOrder.SeqCst); | 1456 | @fence(AtomicOrder.SeqCst); |
| 1457 | x = 5678; | 1457 | x = 5678; |
| 1458 | } | 1458 | } |
| | 1459 | |
| | 1460 | #attribute("test") |
| | 1461 | fn unsigned_wrapping() { |
| | 1462 | var x_u32: u32w = @max_value(u32); |
| | 1463 | x_u32 += 1; |
| | 1464 | assert(x_u32 == 0); |
| | 1465 | x_u32 -= 1; |
| | 1466 | assert(x_u32 == @max_value(u32)); |
| | 1467 | test_unsigned_wrapping_noeval(@max_value(u32)); |
| | 1468 | } |
| | 1469 | #static_eval_enable(false) |
| | 1470 | fn test_unsigned_wrapping_noeval(x: u32w) { |
| | 1471 | var x_u32 = x; |
| | 1472 | x_u32 += 1; |
| | 1473 | assert(x_u32 == 0); |
| | 1474 | x_u32 -= 1; |
| | 1475 | assert(x_u32 == @max_value(u32)); |
| | 1476 | } |
| | 1477 | |
| | 1478 | #attribute("test") |
| | 1479 | fn signed_wrapping() { |
| | 1480 | var x_i32: i32w = @max_value(i32); |
| | 1481 | x_i32 += 1; |
| | 1482 | assert(x_i32 == @min_value(i32)); |
| | 1483 | x_i32 -= 1; |
| | 1484 | assert(x_i32 == @max_value(i32)); |
| | 1485 | test_signed_wrapping_noeval(@max_value(i32)); |
| | 1486 | } |
| | 1487 | #static_eval_enable(false) |
| | 1488 | fn test_signed_wrapping_noeval(x: i32w) { |
| | 1489 | var x_i32 = x; |
| | 1490 | x_i32 += 1; |
| | 1491 | assert(x_i32 == @min_value(i32)); |
| | 1492 | x_i32 -= 1; |
| | 1493 | assert(x_i32 == @max_value(i32)); |
| | 1494 | } |
| | 1495 | |
| | 1496 | #attribute("test") |
| | 1497 | fn negation_wrapping() { |
| | 1498 | var x_i16 = @min_value(i16w); |
| | 1499 | assert(x_i16 == -32768); |
| | 1500 | x_i16 = -x_i16; |
| | 1501 | assert(x_i16 == -32768); |
| | 1502 | test_negation_wrapping_noeval(@min_value(i16)); |
| | 1503 | } |
| | 1504 | #static_eval_enable(false) |
| | 1505 | fn test_negation_wrapping_noeval(x: i16w) { |
| | 1506 | var x_i16 = x; |
| | 1507 | assert(x_i16 == -32768); |
| | 1508 | x_i16 = -x_i16; |
| | 1509 | assert(x_i16 == -32768); |
| | 1510 | } |
| | 1511 | |
| | 1512 | #attribute("test") |
| | 1513 | fn shl_wrapping() { |
| | 1514 | var x_u16 = @max_value(u16w); |
| | 1515 | x_u16 <<= 1; |
| | 1516 | assert(x_u16 == 65534); |
| | 1517 | test_shl_wrapping_noeval(@max_value(u16)); |
| | 1518 | } |
| | 1519 | #static_eval_enable(false) |
| | 1520 | fn test_shl_wrapping_noeval(x: u16w) { |
| | 1521 | var x_u16 = x; |
| | 1522 | x_u16 <<= 1; |
| | 1523 | assert(x_u16 == 65534); |
| | 1524 | } |