mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
Some tests are now failing due to debug info changes, some tests now pass due to improved compiler functionality.
84 lines
2.8 KiB
Zig
84 lines
2.8 KiB
Zig
const std = @import("std");
|
|
const expect = std.testing.expect;
|
|
const mem = std.mem;
|
|
const builtin = @import("builtin");
|
|
|
|
test "integer widening" {
|
|
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
|
|
|
var a: u8 = 250;
|
|
var b: u16 = a;
|
|
var c: u32 = b;
|
|
var d: u64 = c;
|
|
var e: u64 = d;
|
|
var f: u128 = e;
|
|
try expect(f == a);
|
|
}
|
|
|
|
fn zero() u0 {
|
|
return 0;
|
|
}
|
|
test "integer widening u0 to u8" {
|
|
const a: u8 = zero();
|
|
try expect(a == 0);
|
|
}
|
|
|
|
test "implicit unsigned integer to signed integer" {
|
|
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
|
|
|
var a: u8 = 250;
|
|
var b: i16 = a;
|
|
try expect(b == 250);
|
|
}
|
|
|
|
test "float widening" {
|
|
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
|
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
|
|
|
|
var a: f16 = 12.34;
|
|
var b: f32 = a;
|
|
var c: f64 = b;
|
|
var d: f128 = c;
|
|
try expect(a == b);
|
|
try expect(b == c);
|
|
try expect(c == d);
|
|
var e: f80 = c;
|
|
try expect(c == e);
|
|
}
|
|
|
|
test "float widening f16 to f128" {
|
|
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
|
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
|
|
|
|
var x: f16 = 12.34;
|
|
var y: f128 = x;
|
|
try expect(x == y);
|
|
}
|
|
|
|
test "cast small unsigned to larger signed" {
|
|
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
|
|
|
try expect(castSmallUnsignedToLargerSigned1(200) == @as(i16, 200));
|
|
try expect(castSmallUnsignedToLargerSigned2(9999) == @as(i64, 9999));
|
|
}
|
|
fn castSmallUnsignedToLargerSigned1(x: u8) i16 {
|
|
return x;
|
|
}
|
|
fn castSmallUnsignedToLargerSigned2(x: u16) i64 {
|
|
return x;
|
|
}
|