| ... | ... | @@ -1456,3 +1456,69 @@ fn fence() { |
| 1456 | 1456 | @fence(AtomicOrder.SeqCst); |
| 1457 | 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 | } |