| 1 | const std = @import("std"); |
| 2 | const expect = std.testing.expect; |
| 3 | const mem = std.mem; |
| 4 | const builtin = @import("builtin"); |
| 5 | |
| 6 | test "integer widening" { |
| 7 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 8 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 9 | if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; |
| 10 | |
| 11 | var a: u8 = 250; |
| 12 | var b: u16 = a; |
| 13 | var c: u32 = b; |
| 14 | var d: u64 = c; |
| 15 | var e: u64 = d; |
| 16 | var f: u128 = e; |
| 17 | _ = .{ &a, &b, &c, &d, &e, &f }; |
| 18 | try expect(f == a); |
| 19 | } |
| 20 | |
| 21 | fn zero() u0 { |
| 22 | return 0; |
| 23 | } |
| 24 | test "integer widening u0 to u8" { |
| 25 | const a: u8 = zero(); |
| 26 | try expect(a == 0); |
| 27 | } |
| 28 | |
| 29 | test "implicit unsigned integer to signed integer" { |
| 30 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 31 | if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; |
| 32 | |
| 33 | var a: u8 = 250; |
| 34 | var b: i16 = a; |
| 35 | _ = .{ &a, &b }; |
| 36 | try expect(b == 250); |
| 37 | } |
| 38 | |
| 39 | test "float widening" { |
| 40 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 41 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 42 | if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; |
| 43 | if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; |
| 44 | |
| 45 | var a: f16 = 12.34; |
| 46 | var b: f32 = a; |
| 47 | var c: f64 = b; |
| 48 | var d: f128 = c; |
| 49 | _ = .{ &a, &b, &c, &d }; |
| 50 | try expect(a == b); |
| 51 | try expect(b == c); |
| 52 | try expect(c == d); |
| 53 | var e: f80 = c; |
| 54 | _ = &e; |
| 55 | try expect(c == e); |
| 56 | } |
| 57 | |
| 58 | test "float widening f16 to f128" { |
| 59 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 60 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 61 | if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; |
| 62 | if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; |
| 63 | |
| 64 | var x: f16 = 12.34; |
| 65 | var y: f128 = x; |
| 66 | _ = .{ &x, &y }; |
| 67 | try expect(x == y); |
| 68 | } |
| 69 | |
| 70 | test "cast small unsigned to larger signed" { |
| 71 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 72 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 73 | if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; |
| 74 | |
| 75 | try expect(castSmallUnsignedToLargerSigned1(200) == @as(i16, 200)); |
| 76 | try expect(castSmallUnsignedToLargerSigned2(9999) == @as(i64, 9999)); |
| 77 | } |
| 78 | fn castSmallUnsignedToLargerSigned1(x: u8) i16 { |
| 79 | return x; |
| 80 | } |
| 81 | fn castSmallUnsignedToLargerSigned2(x: u16) i64 { |
| 82 | return x; |
| 83 | } |