authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-05-06 15:02:02-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-05-06 15:02:02-07:00
log0c96920172dee530f445e4ef304954d0fe233bfa
treeb781ecb743002eae997c00faca03f69a02b90195
parentb8d17b11a7eba696200ab9b5819121f48ad123d1

add tests for integer wrapping

See #46

1 files changed, 66 insertions(+), 0 deletions(-)

test/self_hosted.zig+66
...@@ -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")
1461fn 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)
1470fn 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")
1479fn 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)
1488fn 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")
1497fn 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)
1505fn 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")
1513fn 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)
1520fn test_shl_wrapping_noeval(x: u16w) {
1521 var x_u16 = x;
1522 x_u16 <<= 1;
1523 assert(x_u16 == 65534);
1524}