zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 0c96920172dee530f445e4ef304954d0fe233bfa (tree)
parent b8d17b11a7eba696200ab9b5819121f48ad123d1
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Fri,  6 May 2016 15:02:02 -0700

add tests for integer wrapping

See #46

Diffstat:
Mtest/self_hosted.zig | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+), 0 deletions(-)

diff --git a/test/self_hosted.zig b/test/self_hosted.zig @@ -1456,3 +1456,69 @@ fn fence() { @fence(AtomicOrder.SeqCst); x = 5678; } + +#attribute("test") +fn unsigned_wrapping() { + var x_u32: u32w = @max_value(u32); + x_u32 += 1; + assert(x_u32 == 0); + x_u32 -= 1; + assert(x_u32 == @max_value(u32)); + test_unsigned_wrapping_noeval(@max_value(u32)); +} +#static_eval_enable(false) +fn test_unsigned_wrapping_noeval(x: u32w) { + var x_u32 = x; + x_u32 += 1; + assert(x_u32 == 0); + x_u32 -= 1; + assert(x_u32 == @max_value(u32)); +} + +#attribute("test") +fn signed_wrapping() { + var x_i32: i32w = @max_value(i32); + x_i32 += 1; + assert(x_i32 == @min_value(i32)); + x_i32 -= 1; + assert(x_i32 == @max_value(i32)); + test_signed_wrapping_noeval(@max_value(i32)); +} +#static_eval_enable(false) +fn test_signed_wrapping_noeval(x: i32w) { + var x_i32 = x; + x_i32 += 1; + assert(x_i32 == @min_value(i32)); + x_i32 -= 1; + assert(x_i32 == @max_value(i32)); +} + +#attribute("test") +fn negation_wrapping() { + var x_i16 = @min_value(i16w); + assert(x_i16 == -32768); + x_i16 = -x_i16; + assert(x_i16 == -32768); + test_negation_wrapping_noeval(@min_value(i16)); +} +#static_eval_enable(false) +fn test_negation_wrapping_noeval(x: i16w) { + var x_i16 = x; + assert(x_i16 == -32768); + x_i16 = -x_i16; + assert(x_i16 == -32768); +} + +#attribute("test") +fn shl_wrapping() { + var x_u16 = @max_value(u16w); + x_u16 <<= 1; + assert(x_u16 == 65534); + test_shl_wrapping_noeval(@max_value(u16)); +} +#static_eval_enable(false) +fn test_shl_wrapping_noeval(x: u16w) { + var x_u16 = x; + x_u16 <<= 1; + assert(x_u16 == 65534); +}