zig

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

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