zig

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

blob 3328b657 (6518B) - Raw


      1 const builtin = @import("builtin");
      2 const std = @import("std");
      3 const expect = std.testing.expect;
      4 const expectEqual = std.testing.expectEqual;
      5 const expectEqualStrings = std.testing.expectEqualStrings;
      6 
      7 const h = @cImport(@cInclude("behavior/translate_c_macros.h"));
      8 const latin1 = @cImport(@cInclude("behavior/translate_c_macros_not_utf8.h"));
      9 
     10 test "casting to void with a macro" {
     11     h.IGNORE_ME_1(42);
     12     h.IGNORE_ME_2(42);
     13     h.IGNORE_ME_3(42);
     14     h.IGNORE_ME_4(42);
     15     h.IGNORE_ME_5(42);
     16     h.IGNORE_ME_6(42);
     17     h.IGNORE_ME_7(42);
     18     h.IGNORE_ME_8(42);
     19     h.IGNORE_ME_9(42);
     20     h.IGNORE_ME_10(42);
     21 }
     22 
     23 test "initializer list expression" {
     24     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
     25     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
     26     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
     27 
     28     try expectEqual(h.Color{
     29         .r = 200,
     30         .g = 200,
     31         .b = 200,
     32         .a = 255,
     33     }, h.LIGHTGRAY);
     34 }
     35 
     36 test "sizeof in macros" {
     37     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
     38 
     39     try expect(@as(c_int, @sizeOf(u32)) == h.MY_SIZEOF(u32));
     40     try expect(@as(c_int, @sizeOf(u32)) == h.MY_SIZEOF2(u32));
     41 }
     42 
     43 test "reference to a struct type" {
     44     try expect(@sizeOf(h.struct_Foo) == h.SIZE_OF_FOO);
     45 }
     46 
     47 test "cast negative integer to pointer" {
     48     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
     49     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
     50     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
     51     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
     52 
     53     try expectEqual(@intToPtr(?*anyopaque, @bitCast(usize, @as(isize, -1))), h.MAP_FAILED);
     54 }
     55 
     56 test "casting to union with a macro" {
     57     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
     58     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
     59     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
     60     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
     61 
     62     const l: c_long = 42;
     63     const d: f64 = 2.0;
     64 
     65     var casted = h.UNION_CAST(l);
     66     try expect(l == casted.l);
     67 
     68     casted = h.UNION_CAST(d);
     69     try expect(d == casted.d);
     70 }
     71 
     72 test "casting or calling a value with a paren-surrounded macro" {
     73     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
     74     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
     75     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
     76     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
     77 
     78     const l: c_long = 42;
     79     const casted = h.CAST_OR_CALL_WITH_PARENS(c_int, l);
     80     try expect(casted == @intCast(c_int, l));
     81 
     82     const Helper = struct {
     83         fn foo(n: c_int) !void {
     84             try expect(n == 42);
     85         }
     86     };
     87 
     88     try h.CAST_OR_CALL_WITH_PARENS(Helper.foo, 42);
     89 }
     90 
     91 test "nested comma operator" {
     92     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
     93     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
     94     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
     95     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
     96 
     97     try expectEqual(@as(c_int, 3), h.NESTED_COMMA_OPERATOR);
     98     try expectEqual(@as(c_int, 3), h.NESTED_COMMA_OPERATOR_LHS);
     99 }
    100 
    101 test "cast functions" {
    102     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
    103     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
    104     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
    105     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
    106 
    107     const S = struct {
    108         fn foo() void {}
    109     };
    110     try expectEqual(true, h.CAST_TO_BOOL(S.foo));
    111     try expect(h.CAST_TO_UINTPTR(S.foo) != 0);
    112 }
    113 
    114 test "large integer macro" {
    115     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
    116     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
    117     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
    118     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
    119 
    120     try expectEqual(@as(c_ulonglong, 18446744073709550592), h.LARGE_INT);
    121 }
    122 
    123 test "string literal macro with embedded tab character" {
    124     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
    125     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
    126     if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
    127     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
    128     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
    129 
    130     try expectEqualStrings("hello\t", h.EMBEDDED_TAB);
    131 }
    132 
    133 test "string and char literals that are not UTF-8 encoded. Issue #12784" {
    134     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
    135     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
    136     if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
    137     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
    138     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
    139 
    140     try expectEqual(@as(u8, '\xA9'), latin1.UNPRINTABLE_CHAR);
    141     try expectEqualStrings("\xA9\xA9\xA9", latin1.UNPRINTABLE_STRING);
    142 }
    143 
    144 test "Macro that uses division operator. Issue #13162" {
    145     if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
    146     if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
    147     if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
    148     if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
    149 
    150     try expectEqual(@as(c_int, 42), h.DIVIDE_CONSTANT(@as(c_int, 42_000)));
    151     try expectEqual(@as(c_uint, 42), h.DIVIDE_CONSTANT(@as(c_uint, 42_000)));
    152 
    153     try expectEqual(
    154         @as(f64, 42.0),
    155         h.DIVIDE_ARGS(
    156             @as(f64, 42.0),
    157             true,
    158         ),
    159     );
    160     try expectEqual(
    161         @as(c_int, 21),
    162         h.DIVIDE_ARGS(
    163             @as(i8, 42),
    164             @as(i8, 2),
    165         ),
    166     );
    167 
    168     try expectEqual(
    169         @as(c_int, 21),
    170         h.DIVIDE_ARGS(
    171             @as(c_ushort, 42),
    172             @as(c_ushort, 2),
    173         ),
    174     );
    175 }