mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
Merge pull request #13879 from ziglang/ci-add-aarch64-windows
CI: add aarch64-windows coverage
This commit is contained in:
commit
9bcfe55b5c
13
.github/workflows/ci.yaml
vendored
13
.github/workflows/ci.yaml
vendored
@ -39,7 +39,7 @@ jobs:
|
||||
run: sh ci/aarch64-linux-release.sh
|
||||
x86_64-macos:
|
||||
runs-on: "macos-11"
|
||||
env:
|
||||
env:
|
||||
ARCH: "x86_64"
|
||||
steps:
|
||||
- name: Checkout
|
||||
@ -48,7 +48,7 @@ jobs:
|
||||
run: ci/x86_64-macos.sh
|
||||
aarch64-macos:
|
||||
runs-on: [self-hosted, macOS, aarch64]
|
||||
env:
|
||||
env:
|
||||
ARCH: "aarch64"
|
||||
steps:
|
||||
- name: Checkout
|
||||
@ -64,3 +64,12 @@ jobs:
|
||||
uses: actions/checkout@v3
|
||||
- name: Build and Test
|
||||
run: ci/x86_64-windows.ps1
|
||||
aarch64-windows:
|
||||
runs-on: [self-hosted, Windows, aarch64]
|
||||
env:
|
||||
ARCH: "aarch64"
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Build and Test
|
||||
run: ci/aarch64-windows.ps1
|
||||
|
||||
@ -120,6 +120,7 @@ string(REGEX REPLACE "\\\\" "\\\\\\\\" ZIG_LIBC_INCLUDE_DIR_ESCAPED "${ZIG_LIBC_
|
||||
set(ZIG_TARGET_TRIPLE "native" CACHE STRING "arch-os-abi to output binaries for")
|
||||
set(ZIG_TARGET_MCPU "native" CACHE STRING "-mcpu parameter to output binaries for")
|
||||
set(ZIG_SINGLE_THREADED off CACHE BOOL "limit the zig compiler to use only 1 thread")
|
||||
set(ZIG_AR_WORKAROUND off CACHE BOOL "append 'ar' subcommand to CMAKE_AR")
|
||||
|
||||
if("${ZIG_TARGET_TRIPLE}" STREQUAL "native")
|
||||
set(ZIG_USE_LLVM_CONFIG ON CACHE BOOL "use llvm-config to find LLVM libraries")
|
||||
@ -127,6 +128,11 @@ else()
|
||||
set(ZIG_USE_LLVM_CONFIG OFF CACHE BOOL "use llvm-config to find LLVM libraries")
|
||||
endif()
|
||||
|
||||
if(ZIG_AR_WORKAROUND)
|
||||
string(REPLACE "<CMAKE_AR>" "<CMAKE_AR> ar" CMAKE_C_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
|
||||
string(REPLACE "<CMAKE_AR>" "<CMAKE_AR> ar" CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_CXX_ARCHIVE_CREATE})
|
||||
endif()
|
||||
|
||||
find_package(llvm 15)
|
||||
find_package(clang 15)
|
||||
find_package(lld 15)
|
||||
@ -702,6 +708,8 @@ if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "AMD64")
|
||||
set(HOST_TARGET_ARCH "x86_64")
|
||||
elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64")
|
||||
set(HOST_TARGET_ARCH "aarch64")
|
||||
elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "ARM64")
|
||||
set(HOST_TARGET_ARCH "aarch64")
|
||||
else()
|
||||
string(TOLOWER "${CMAKE_HOST_SYSTEM_PROCESSOR}" HOST_TARGET_ARCH)
|
||||
endif()
|
||||
|
||||
73
ci/aarch64-windows.ps1
Normal file
73
ci/aarch64-windows.ps1
Normal file
@ -0,0 +1,73 @@
|
||||
$TARGET = "$($Env:ARCH)-windows-gnu"
|
||||
$ZIG_LLVM_CLANG_LLD_NAME = "zig+llvm+lld+clang-$TARGET-0.11.0-dev.670+f7fea080b"
|
||||
$MCPU = "baseline"
|
||||
$ZIG_LLVM_CLANG_LLD_URL = "https://ziglang.org/deps/$ZIG_LLVM_CLANG_LLD_NAME.zip"
|
||||
$PREFIX_PATH = "$(Get-Location)\..\$ZIG_LLVM_CLANG_LLD_NAME"
|
||||
$ZIG = "$PREFIX_PATH\bin\zig.exe"
|
||||
$ZIG_LIB_DIR = "$(Get-Location)\lib"
|
||||
|
||||
if (!(Test-Path "..\$ZIG_LLVM_CLANG_LLD_NAME.zip")) {
|
||||
Write-Output "Downloading $ZIG_LLVM_CLANG_LLD_URL"
|
||||
Invoke-WebRequest -Uri "$ZIG_LLVM_CLANG_LLD_URL" -OutFile "..\$ZIG_LLVM_CLANG_LLD_NAME.zip"
|
||||
|
||||
Write-Output "Extracting..."
|
||||
Add-Type -AssemblyName System.IO.Compression.FileSystem ;
|
||||
[System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD\..\$ZIG_LLVM_CLANG_LLD_NAME.zip", "$PWD\..")
|
||||
}
|
||||
|
||||
function CheckLastExitCode {
|
||||
if (!$?) {
|
||||
exit 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
# Make the `zig version` number consistent.
|
||||
# This will affect the `zig build` command below which uses `git describe`.
|
||||
git config core.abbrev 9
|
||||
git fetch --tags
|
||||
|
||||
if ((git rev-parse --is-shallow-repository) -eq "true") {
|
||||
git fetch --unshallow # `git describe` won't work on a shallow repo
|
||||
}
|
||||
|
||||
Write-Output "Building from source..."
|
||||
Remove-Item -Path 'build-release' -Recurse -Force -ErrorAction Ignore
|
||||
New-Item -Path 'build-release' -ItemType Directory
|
||||
Set-Location -Path 'build-release'
|
||||
|
||||
# CMake gives a syntax error when file paths with backward slashes are used.
|
||||
# Here, we use forward slashes only to work around this.
|
||||
& cmake .. `
|
||||
-GNinja `
|
||||
-DCMAKE_INSTALL_PREFIX="stage3-release" `
|
||||
-DCMAKE_PREFIX_PATH="$($PREFIX_PATH -Replace "\\", "/")" `
|
||||
-DCMAKE_BUILD_TYPE=Release `
|
||||
-DCMAKE_C_COMPILER="$($ZIG -Replace "\\", "/");cc;-target;$TARGET;-mcpu=$MCPU" `
|
||||
-DCMAKE_CXX_COMPILER="$($ZIG -Replace "\\", "/");c++;-target;$TARGET;-mcpu=$MCPU" `
|
||||
-DCMAKE_AR="$ZIG" `
|
||||
-DZIG_AR_WORKAROUND=ON `
|
||||
-DZIG_TARGET_TRIPLE="$TARGET" `
|
||||
-DZIG_TARGET_MCPU="$MCPU" `
|
||||
-DZIG_STATIC=ON
|
||||
CheckLastExitCode
|
||||
|
||||
ninja install
|
||||
CheckLastExitCode
|
||||
|
||||
Write-Output "Main test suite..."
|
||||
& "stage3-release\bin\zig.exe" build test docs `
|
||||
--zig-lib-dir "$ZIG_LIB_DIR" `
|
||||
--search-prefix "$PREFIX_PATH" `
|
||||
-Dstatic-llvm `
|
||||
-Dskip-non-native `
|
||||
-Denable-symlinks-windows
|
||||
CheckLastExitCode
|
||||
|
||||
Write-Output "Testing Autodocs..."
|
||||
& "stage3-release\bin\zig.exe" test "..\lib\std\std.zig" `
|
||||
--zig-lib-dir "$ZIG_LIB_DIR" `
|
||||
-femit-docs `
|
||||
-fno-emit-bin
|
||||
CheckLastExitCode
|
||||
|
||||
BIN
stage1/zig1.wasm
BIN
stage1/zig1.wasm
Binary file not shown.
@ -275,10 +275,20 @@ test "page aligned array on stack" {
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
// https://github.com/ziglang/zig/issues/13679
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and
|
||||
builtin.cpu.arch == .aarch64 and
|
||||
builtin.os.tag == .windows) return error.SkipZigTest;
|
||||
builtin.cpu.arch == .aarch64 and builtin.os.tag == .windows)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13679
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
if (builtin.zig_backend == .stage2_c and
|
||||
builtin.os.tag == .windows and builtin.cpu.arch == .aarch64)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13876
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
// Large alignment value to make it hard to accidentally pass.
|
||||
var array align(0x1000) = [_]u8{ 1, 2, 3, 4, 5, 6, 7, 8 };
|
||||
|
||||
@ -1351,6 +1351,13 @@ test "cast f128 to narrower types" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.os.tag == .windows and builtin.cpu.arch == .aarch64 and
|
||||
builtin.zig_backend == .stage2_c)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13876
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
const S = struct {
|
||||
fn doTheTest() !void {
|
||||
var x: f128 = 1234.0;
|
||||
|
||||
@ -185,6 +185,32 @@ test "more @sqrt f16 tests" {
|
||||
try expect(math.isNan(@sqrt(@as(f16, math.nan(f16)))));
|
||||
}
|
||||
|
||||
test "another, possibly redundant @sqrt test" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testSqrtLegacy(f64, 12.0);
|
||||
comptime try testSqrtLegacy(f64, 12.0);
|
||||
try testSqrtLegacy(f32, 13.0);
|
||||
comptime try testSqrtLegacy(f32, 13.0);
|
||||
try testSqrtLegacy(f16, 13.0);
|
||||
comptime try testSqrtLegacy(f16, 13.0);
|
||||
|
||||
// TODO: make this pass
|
||||
if (false) {
|
||||
const x = 14.0;
|
||||
const y = x * x;
|
||||
const z = @sqrt(y);
|
||||
comptime try expect(z == x);
|
||||
}
|
||||
}
|
||||
|
||||
fn testSqrtLegacy(comptime T: type, x: T) !void {
|
||||
try expect(@sqrt(x * x) == x);
|
||||
}
|
||||
|
||||
test "@sin" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
@ -529,6 +555,85 @@ fn testFabsWithVectors() !void {
|
||||
try expect(math.approxEqAbs(f32, @fabs(@as(f32, -0.4)), result[3], epsilon));
|
||||
}
|
||||
|
||||
test "another, possibly redundant, @fabs test" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.os.tag == .windows and builtin.cpu.arch == .aarch64 and
|
||||
builtin.zig_backend == .stage2_c)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13876
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testFabsLegacy(f128, 12.0);
|
||||
comptime try testFabsLegacy(f128, 12.0);
|
||||
try testFabsLegacy(f64, 12.0);
|
||||
comptime try testFabsLegacy(f64, 12.0);
|
||||
try testFabsLegacy(f32, 12.0);
|
||||
comptime try testFabsLegacy(f32, 12.0);
|
||||
try testFabsLegacy(f16, 12.0);
|
||||
comptime try testFabsLegacy(f16, 12.0);
|
||||
|
||||
const x = 14.0;
|
||||
const y = -x;
|
||||
const z = @fabs(y);
|
||||
comptime try std.testing.expectEqual(x, z);
|
||||
}
|
||||
|
||||
test "@fabs f80" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testFabsLegacy(f80, 12.0);
|
||||
comptime try testFabsLegacy(f80, 12.0);
|
||||
}
|
||||
|
||||
fn testFabsLegacy(comptime T: type, x: T) !void {
|
||||
const y = -x;
|
||||
const z = @fabs(y);
|
||||
try expect(x == z);
|
||||
}
|
||||
|
||||
test "a third @fabs test, surely there should not be three fabs tests" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.os.tag == .windows and builtin.cpu.arch == .aarch64 and
|
||||
builtin.zig_backend == .stage2_c)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13876
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
inline for ([_]type{ f16, f32, f64, f80, f128, c_longdouble }) |T| {
|
||||
// normals
|
||||
try expect(@fabs(@as(T, 1.0)) == 1.0);
|
||||
try expect(@fabs(@as(T, -1.0)) == 1.0);
|
||||
try expect(@fabs(math.floatMin(T)) == math.floatMin(T));
|
||||
try expect(@fabs(-math.floatMin(T)) == math.floatMin(T));
|
||||
try expect(@fabs(math.floatMax(T)) == math.floatMax(T));
|
||||
try expect(@fabs(-math.floatMax(T)) == math.floatMax(T));
|
||||
|
||||
// subnormals
|
||||
try expect(@fabs(@as(T, 0.0)) == 0.0);
|
||||
try expect(@fabs(@as(T, -0.0)) == 0.0);
|
||||
try expect(@fabs(math.floatTrueMin(T)) == math.floatTrueMin(T));
|
||||
try expect(@fabs(-math.floatTrueMin(T)) == math.floatTrueMin(T));
|
||||
|
||||
// non-finite numbers
|
||||
try expect(math.isPositiveInf(@fabs(math.inf(T))));
|
||||
try expect(math.isPositiveInf(@fabs(-math.inf(T))));
|
||||
try expect(math.isNan(@fabs(math.nan(T))));
|
||||
}
|
||||
}
|
||||
|
||||
test "@floor" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
@ -573,6 +678,56 @@ fn testFloorWithVectors() !void {
|
||||
try expect(math.approxEqAbs(f32, @floor(@as(f32, -0.4)), result[3], epsilon));
|
||||
}
|
||||
|
||||
test "another, possibly redundant, @floor test" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testFloorLegacy(f64, 12.0);
|
||||
comptime try testFloorLegacy(f64, 12.0);
|
||||
try testFloorLegacy(f32, 12.0);
|
||||
comptime try testFloorLegacy(f32, 12.0);
|
||||
try testFloorLegacy(f16, 12.0);
|
||||
comptime try testFloorLegacy(f16, 12.0);
|
||||
|
||||
const x = 14.0;
|
||||
const y = x + 0.7;
|
||||
const z = @floor(y);
|
||||
comptime try expect(x == z);
|
||||
}
|
||||
|
||||
test "@floor f80" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag == .windows) {
|
||||
// https://github.com/ziglang/zig/issues/12602
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testFloorLegacy(f80, 12.0);
|
||||
comptime try testFloorLegacy(f80, 12.0);
|
||||
}
|
||||
|
||||
test "@floor f128" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testFloorLegacy(f128, 12.0);
|
||||
comptime try testFloorLegacy(f128, 12.0);
|
||||
}
|
||||
|
||||
fn testFloorLegacy(comptime T: type, x: T) !void {
|
||||
const y = x + 0.6;
|
||||
const z = @floor(y);
|
||||
try expect(x == z);
|
||||
}
|
||||
|
||||
test "@ceil" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
@ -617,6 +772,56 @@ fn testCeilWithVectors() !void {
|
||||
try expect(math.approxEqAbs(f32, @ceil(@as(f32, -0.4)), result[3], epsilon));
|
||||
}
|
||||
|
||||
test "another, possibly redundant, @ceil test" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testCeilLegacy(f64, 12.0);
|
||||
comptime try testCeilLegacy(f64, 12.0);
|
||||
try testCeilLegacy(f32, 12.0);
|
||||
comptime try testCeilLegacy(f32, 12.0);
|
||||
try testCeilLegacy(f16, 12.0);
|
||||
comptime try testCeilLegacy(f16, 12.0);
|
||||
|
||||
const x = 14.0;
|
||||
const y = x - 0.7;
|
||||
const z = @ceil(y);
|
||||
comptime try expect(x == z);
|
||||
}
|
||||
|
||||
test "@ceil f80" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag == .windows) {
|
||||
// https://github.com/ziglang/zig/issues/12602
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testCeilLegacy(f80, 12.0);
|
||||
comptime try testCeilLegacy(f80, 12.0);
|
||||
}
|
||||
|
||||
test "@ceil f128" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testCeilLegacy(f128, 12.0);
|
||||
comptime try testCeilLegacy(f128, 12.0);
|
||||
}
|
||||
|
||||
fn testCeilLegacy(comptime T: type, x: T) !void {
|
||||
const y = x - 0.8;
|
||||
const z = @ceil(y);
|
||||
try expect(x == z);
|
||||
}
|
||||
|
||||
test "@trunc" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
@ -661,6 +866,70 @@ fn testTruncWithVectors() !void {
|
||||
try expect(math.approxEqAbs(f32, @trunc(@as(f32, -0.4)), result[3], epsilon));
|
||||
}
|
||||
|
||||
test "another, possibly redundant, @trunc test" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testTruncLegacy(f64, 12.0);
|
||||
comptime try testTruncLegacy(f64, 12.0);
|
||||
try testTruncLegacy(f32, 12.0);
|
||||
comptime try testTruncLegacy(f32, 12.0);
|
||||
try testTruncLegacy(f16, 12.0);
|
||||
comptime try testTruncLegacy(f16, 12.0);
|
||||
|
||||
const x = 14.0;
|
||||
const y = x + 0.7;
|
||||
const z = @trunc(y);
|
||||
comptime try expect(x == z);
|
||||
}
|
||||
|
||||
test "@trunc f80" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag == .windows) {
|
||||
// https://github.com/ziglang/zig/issues/12602
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testTruncLegacy(f80, 12.0);
|
||||
comptime try testTruncLegacy(f80, 12.0);
|
||||
comptime {
|
||||
const x: f80 = 12.0;
|
||||
const y = x + 0.8;
|
||||
const z = @trunc(y);
|
||||
try expect(x == z);
|
||||
}
|
||||
}
|
||||
|
||||
test "@trunc f128" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testTruncLegacy(f128, 12.0);
|
||||
comptime try testTruncLegacy(f128, 12.0);
|
||||
}
|
||||
|
||||
fn testTruncLegacy(comptime T: type, x: T) !void {
|
||||
{
|
||||
const y = x + 0.8;
|
||||
const z = @trunc(y);
|
||||
try expect(x == z);
|
||||
}
|
||||
|
||||
{
|
||||
const y = -x - 0.8;
|
||||
const z = @trunc(y);
|
||||
try expect(-x == z);
|
||||
}
|
||||
}
|
||||
|
||||
test "negation f16" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
@ -757,6 +1026,13 @@ test "negation f128" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.os.tag == .windows and builtin.cpu.arch == .aarch64 and
|
||||
builtin.zig_backend == .stage2_c)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13876
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
const S = struct {
|
||||
fn doTheTest() !void {
|
||||
var a: f128 = 1;
|
||||
|
||||
@ -578,6 +578,13 @@ test "f128" {
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.os.tag == .windows and builtin.cpu.arch == .aarch64 and
|
||||
builtin.zig_backend == .stage2_c)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13876
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try test_f128();
|
||||
comptime try test_f128();
|
||||
}
|
||||
@ -1150,7 +1157,18 @@ test "remainder division" {
|
||||
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_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag == .windows) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/12602
|
||||
|
||||
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag == .windows) {
|
||||
// https://github.com/ziglang/zig/issues/12602
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
if (builtin.zig_backend == .stage2_c and builtin.os.tag == .windows and
|
||||
builtin.cpu.arch == .aarch64)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13876
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
comptime try remdiv(f16);
|
||||
comptime try remdiv(f32);
|
||||
@ -1262,233 +1280,6 @@ fn fmodOne(comptime T: type, a: T, b: T, c: T, epsilon: T) !void {
|
||||
try expect(@fabs(@mod(@as(T, a), @as(T, b)) - @as(T, c)) < epsilon);
|
||||
}
|
||||
|
||||
test "@sqrt" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testSqrt(f64, 12.0);
|
||||
comptime try testSqrt(f64, 12.0);
|
||||
try testSqrt(f32, 13.0);
|
||||
comptime try testSqrt(f32, 13.0);
|
||||
try testSqrt(f16, 13.0);
|
||||
comptime try testSqrt(f16, 13.0);
|
||||
|
||||
// TODO: make this pass
|
||||
if (false) {
|
||||
const x = 14.0;
|
||||
const y = x * x;
|
||||
const z = @sqrt(y);
|
||||
comptime try expect(z == x);
|
||||
}
|
||||
}
|
||||
|
||||
fn testSqrt(comptime T: type, x: T) !void {
|
||||
try expect(@sqrt(x * x) == x);
|
||||
}
|
||||
|
||||
test "@fabs" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testFabs(f128, 12.0);
|
||||
comptime try testFabs(f128, 12.0);
|
||||
try testFabs(f64, 12.0);
|
||||
comptime try testFabs(f64, 12.0);
|
||||
try testFabs(f32, 12.0);
|
||||
comptime try testFabs(f32, 12.0);
|
||||
try testFabs(f16, 12.0);
|
||||
comptime try testFabs(f16, 12.0);
|
||||
|
||||
const x = 14.0;
|
||||
const y = -x;
|
||||
const z = @fabs(y);
|
||||
comptime try expectEqual(x, z);
|
||||
}
|
||||
|
||||
test "@fabs f80" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testFabs(f80, 12.0);
|
||||
comptime try testFabs(f80, 12.0);
|
||||
}
|
||||
|
||||
fn testFabs(comptime T: type, x: T) !void {
|
||||
const y = -x;
|
||||
const z = @fabs(y);
|
||||
try expect(x == z);
|
||||
}
|
||||
|
||||
test "@floor" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testFloor(f64, 12.0);
|
||||
comptime try testFloor(f64, 12.0);
|
||||
try testFloor(f32, 12.0);
|
||||
comptime try testFloor(f32, 12.0);
|
||||
try testFloor(f16, 12.0);
|
||||
comptime try testFloor(f16, 12.0);
|
||||
|
||||
const x = 14.0;
|
||||
const y = x + 0.7;
|
||||
const z = @floor(y);
|
||||
comptime try expect(x == z);
|
||||
}
|
||||
|
||||
test "@floor f80" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag == .windows) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/12602
|
||||
|
||||
try testFloor(f80, 12.0);
|
||||
comptime try testFloor(f80, 12.0);
|
||||
}
|
||||
|
||||
test "@floor f128" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testFloor(f128, 12.0);
|
||||
comptime try testFloor(f128, 12.0);
|
||||
}
|
||||
|
||||
fn testFloor(comptime T: type, x: T) !void {
|
||||
const y = x + 0.6;
|
||||
const z = @floor(y);
|
||||
try expect(x == z);
|
||||
}
|
||||
|
||||
test "@ceil" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testCeil(f64, 12.0);
|
||||
comptime try testCeil(f64, 12.0);
|
||||
try testCeil(f32, 12.0);
|
||||
comptime try testCeil(f32, 12.0);
|
||||
try testCeil(f16, 12.0);
|
||||
comptime try testCeil(f16, 12.0);
|
||||
|
||||
const x = 14.0;
|
||||
const y = x - 0.7;
|
||||
const z = @ceil(y);
|
||||
comptime try expect(x == z);
|
||||
}
|
||||
|
||||
test "@ceil f80" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag == .windows) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/12602
|
||||
|
||||
try testCeil(f80, 12.0);
|
||||
comptime try testCeil(f80, 12.0);
|
||||
}
|
||||
|
||||
test "@ceil f128" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testCeil(f128, 12.0);
|
||||
comptime try testCeil(f128, 12.0);
|
||||
}
|
||||
|
||||
fn testCeil(comptime T: type, x: T) !void {
|
||||
const y = x - 0.8;
|
||||
const z = @ceil(y);
|
||||
try expect(x == z);
|
||||
}
|
||||
|
||||
test "@trunc" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testTrunc(f64, 12.0);
|
||||
comptime try testTrunc(f64, 12.0);
|
||||
try testTrunc(f32, 12.0);
|
||||
comptime try testTrunc(f32, 12.0);
|
||||
try testTrunc(f16, 12.0);
|
||||
comptime try testTrunc(f16, 12.0);
|
||||
|
||||
const x = 14.0;
|
||||
const y = x + 0.7;
|
||||
const z = @trunc(y);
|
||||
comptime try expect(x == z);
|
||||
}
|
||||
|
||||
test "@trunc f80" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag == .windows) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/12602
|
||||
|
||||
try testTrunc(f80, 12.0);
|
||||
comptime try testTrunc(f80, 12.0);
|
||||
comptime {
|
||||
const x: f80 = 12.0;
|
||||
const y = x + 0.8;
|
||||
const z = @trunc(y);
|
||||
try expect(x == z);
|
||||
}
|
||||
}
|
||||
|
||||
test "@trunc f128" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
try testTrunc(f128, 12.0);
|
||||
comptime try testTrunc(f128, 12.0);
|
||||
}
|
||||
|
||||
fn testTrunc(comptime T: type, x: T) !void {
|
||||
{
|
||||
const y = x + 0.8;
|
||||
const z = @trunc(y);
|
||||
try expect(x == z);
|
||||
}
|
||||
|
||||
{
|
||||
const y = -x - 0.8;
|
||||
const z = @trunc(y);
|
||||
try expect(-x == z);
|
||||
}
|
||||
}
|
||||
|
||||
test "@round" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
@ -1567,6 +1358,13 @@ test "NaN comparison" {
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.zig_backend == .stage2_c and builtin.os.tag == .windows and
|
||||
builtin.cpu.arch == .aarch64)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13876
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
try testNanEqNan(f16);
|
||||
try testNanEqNan(f32);
|
||||
try testNanEqNan(f64);
|
||||
@ -1667,35 +1465,6 @@ test "comptime sin and ln" {
|
||||
try expect(v == @sin(@as(f32, 1)) + @log(@as(f32, 5)));
|
||||
}
|
||||
|
||||
test "fabs" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
inline for ([_]type{ f16, f32, f64, f80, f128, c_longdouble }) |T| {
|
||||
// normals
|
||||
try expect(@fabs(@as(T, 1.0)) == 1.0);
|
||||
try expect(@fabs(@as(T, -1.0)) == 1.0);
|
||||
try expect(@fabs(math.floatMin(T)) == math.floatMin(T));
|
||||
try expect(@fabs(-math.floatMin(T)) == math.floatMin(T));
|
||||
try expect(@fabs(math.floatMax(T)) == math.floatMax(T));
|
||||
try expect(@fabs(-math.floatMax(T)) == math.floatMax(T));
|
||||
|
||||
// subnormals
|
||||
try expect(@fabs(@as(T, 0.0)) == 0.0);
|
||||
try expect(@fabs(@as(T, -0.0)) == 0.0);
|
||||
try expect(@fabs(math.floatTrueMin(T)) == math.floatTrueMin(T));
|
||||
try expect(@fabs(-math.floatTrueMin(T)) == math.floatTrueMin(T));
|
||||
|
||||
// non-finite numbers
|
||||
try expect(math.isPositiveInf(@fabs(math.inf(T))));
|
||||
try expect(math.isPositiveInf(@fabs(-math.inf(T))));
|
||||
try expect(math.isNan(@fabs(math.nan(T))));
|
||||
}
|
||||
}
|
||||
|
||||
test "absFloat" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
|
||||
@ -70,6 +70,13 @@ test "@mulAdd f128" {
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.os.tag == .windows and builtin.cpu.arch == .aarch64 and
|
||||
builtin.zig_backend == .stage2_c)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13876
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
comptime try testMulAdd128();
|
||||
try testMulAdd128();
|
||||
}
|
||||
|
||||
@ -44,6 +44,13 @@ test "float widening" {
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.os.tag == .windows and builtin.cpu.arch == .aarch64 and
|
||||
builtin.zig_backend == .stage2_c)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13876
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
var a: f16 = 12.34;
|
||||
var b: f32 = a;
|
||||
var c: f64 = b;
|
||||
@ -64,6 +71,13 @@ test "float widening f16 to f128" {
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
if (builtin.os.tag == .windows and builtin.cpu.arch == .aarch64 and
|
||||
builtin.zig_backend == .stage2_c)
|
||||
{
|
||||
// https://github.com/ziglang/zig/issues/13876
|
||||
return error.SkipZigTest;
|
||||
}
|
||||
|
||||
var x: f16 = 12.34;
|
||||
var y: f128 = x;
|
||||
try expect(x == y);
|
||||
|
||||
@ -31,7 +31,8 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
|
||||
cases.addBuildFile("test/standalone/shared_library/build.zig", .{});
|
||||
cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{});
|
||||
cases.addBuildFile("test/standalone/mix_c_files/build.zig", .{
|
||||
.build_modes = true,
|
||||
// https://github.com/ziglang/zig/issues/13738
|
||||
.build_modes = !(builtin.os.tag == .windows and builtin.cpu.arch == .aarch64),
|
||||
.cross_targets = true,
|
||||
});
|
||||
cases.addBuildFile("test/standalone/global_linkage/build.zig", .{});
|
||||
@ -64,7 +65,8 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
|
||||
}
|
||||
|
||||
cases.addBuildFile("test/standalone/c_compiler/build.zig", .{
|
||||
.build_modes = true,
|
||||
// https://github.com/ziglang/zig/issues/13738
|
||||
.build_modes = !(builtin.os.tag == .windows and builtin.cpu.arch == .aarch64),
|
||||
.cross_targets = true,
|
||||
});
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user