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 }