test_defining_variadic_function.zig (925B) - Raw
1 const std = @import("std"); 2 const testing = std.testing; 3 const builtin = @import("builtin"); 4 5 fn add(count: c_int, ...) callconv(.c) c_int { 6 var ap = @cVaStart(); 7 defer @cVaEnd(&ap); 8 var i: usize = 0; 9 var sum: c_int = 0; 10 while (i < count) : (i += 1) { 11 sum += @cVaArg(&ap, c_int); 12 } 13 return sum; 14 } 15 16 test "defining a variadic function" { 17 if (builtin.cpu.arch == .aarch64 and builtin.os.tag != .macos) { 18 // https://github.com/ziglang/zig/issues/14096 19 return error.SkipZigTest; 20 } 21 if (builtin.cpu.arch == .x86_64 and builtin.os.tag == .windows) { 22 // https://github.com/ziglang/zig/issues/16961 23 return error.SkipZigTest; 24 } 25 26 try std.testing.expectEqual(@as(c_int, 0), add(0)); 27 try std.testing.expectEqual(@as(c_int, 1), add(1, @as(c_int, 1))); 28 try std.testing.expectEqual(@as(c_int, 3), add(2, @as(c_int, 1), @as(c_int, 2))); 29 } 30 31 // test