diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2024-02-20 10:15:10 +0100 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2024-02-20 18:44:43 +0100 |
| commit | 2291560424b3cfa614cb0320d73e41aa1f5fa221 (patch) | |
| tree | f3f131f6bb5baf8e7afb44df953c83070877cba7 /test/behavior | |
| parent | 556db2ca36afccd623d80b620139a1428c7b65fa (diff) | |
| download | zig-2291560424b3cfa614cb0320d73e41aa1f5fa221.tar.gz zig-2291560424b3cfa614cb0320d73e41aa1f5fa221.zip | |
c_import: extract behavior tests that use `@cImport`
This introduces the new test step `test-c-import`, and removes the
ability of the behavior tests to `@cImport` paths relative to `test`.
This allows the behavior tests to be run without translate c.
Diffstat (limited to 'test/behavior')
| -rw-r--r-- | test/behavior/c_char_signedness.zig | 13 | ||||
| -rw-r--r-- | test/behavior/translate_c_macros.h | 70 | ||||
| -rw-r--r-- | test/behavior/translate_c_macros.zig | 242 | ||||
| -rw-r--r-- | test/behavior/translate_c_macros_not_utf8.h | 5 |
4 files changed, 0 insertions, 330 deletions
diff --git a/test/behavior/c_char_signedness.zig b/test/behavior/c_char_signedness.zig deleted file mode 100644 index 6b0bfe4049..0000000000 --- a/test/behavior/c_char_signedness.zig +++ /dev/null @@ -1,13 +0,0 @@ -const std = @import("std"); -const builtin = @import("builtin"); -const expectEqual = std.testing.expectEqual; -const c = @cImport({ - @cInclude("limits.h"); -}); - -test "c_char signedness" { - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expectEqual(@as(c_char, c.CHAR_MIN), std.math.minInt(c_char)); - try expectEqual(@as(c_char, c.CHAR_MAX), std.math.maxInt(c_char)); -} diff --git a/test/behavior/translate_c_macros.h b/test/behavior/translate_c_macros.h deleted file mode 100644 index c6e2e381e2..0000000000 --- a/test/behavior/translate_c_macros.h +++ /dev/null @@ -1,70 +0,0 @@ -// initializer list expression -typedef struct Color { - unsigned char r; - unsigned char g; - unsigned char b; - unsigned char a; -} Color; -#define CLITERAL(type) (type) -#define LIGHTGRAY CLITERAL(Color){ 200, 200, 200, 255 } // Light Gray - -#define MY_SIZEOF(x) ((int)sizeof(x)) -#define MY_SIZEOF2(x) ((int)sizeof x) - -struct Foo { - int a; -}; - -union U { - long l; - double d; -}; - -#define SIZE_OF_FOO sizeof(struct Foo) - -#define MAP_FAILED ((void *) -1) - -#define IGNORE_ME_1(x) ((void)(x)) -#define IGNORE_ME_2(x) ((const void)(x)) -#define IGNORE_ME_3(x) ((volatile void)(x)) -#define IGNORE_ME_4(x) ((const volatile void)(x)) -#define IGNORE_ME_5(x) ((volatile const void)(x)) - -#define IGNORE_ME_6(x) (void)(x) -#define IGNORE_ME_7(x) (const void)(x) -#define IGNORE_ME_8(x) (volatile void)(x) -#define IGNORE_ME_9(x) (const volatile void)(x) -#define IGNORE_ME_10(x) (volatile const void)(x) - -#define UNION_CAST(X) (union U)(X) -#define CAST_OR_CALL_WITH_PARENS(type_or_fn, val) ((type_or_fn)(val)) - -#define NESTED_COMMA_OPERATOR (1, (2, 3)) -#define NESTED_COMMA_OPERATOR_LHS (1, 2), 3 - -#include <stdint.h> -#if !defined(__UINTPTR_MAX__) -typedef _Bool uintptr_t; -#endif - -#define CAST_TO_BOOL(X) (_Bool)(X) -#define CAST_TO_UINTPTR(X) (uintptr_t)(X) - -#define LARGE_INT 18446744073709550592 - -#define EMBEDDED_TAB "hello " - -#define DIVIDE_CONSTANT(version) (version / 1000) -#define DIVIDE_ARGS(A, B) (A / B) - -#define REMAINDER_CONSTANT(version) (version % 10000) -#define REMAINDER_ARGS(A, B) (A % B) - -#define LONG(x) x##L -#define X LONG(10) - -#define BLANK_MACRO -#define BLANK_CHILD_MACRO BLANK_MACRO BLANK_MACRO BLANK_MACRO -#define MACRO_VALUE 0 -typedef long def_type; -#define BLANK_MACRO_CAST (BLANK_CHILD_MACRO def_type BLANK_CHILD_MACRO)MACRO_VALUE diff --git a/test/behavior/translate_c_macros.zig b/test/behavior/translate_c_macros.zig deleted file mode 100644 index c8a9e1bad1..0000000000 --- a/test/behavior/translate_c_macros.zig +++ /dev/null @@ -1,242 +0,0 @@ -const builtin = @import("builtin"); -const std = @import("std"); -const expect = std.testing.expect; -const expectEqual = std.testing.expectEqual; -const expectEqualStrings = std.testing.expectEqualStrings; - -const h = @cImport(@cInclude("behavior/translate_c_macros.h")); -const latin1 = @cImport(@cInclude("behavior/translate_c_macros_not_utf8.h")); - -test "casting to void with a macro" { - if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - h.IGNORE_ME_1(42); - h.IGNORE_ME_2(42); - h.IGNORE_ME_3(42); - h.IGNORE_ME_4(42); - h.IGNORE_ME_5(42); - h.IGNORE_ME_6(42); - h.IGNORE_ME_7(42); - h.IGNORE_ME_8(42); - h.IGNORE_ME_9(42); - h.IGNORE_ME_10(42); -} - -test "initializer list expression" { - 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_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expectEqual(h.Color{ - .r = 200, - .g = 200, - .b = 200, - .a = 255, - }, h.LIGHTGRAY); -} - -test "sizeof in macros" { - 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_spirv64) return error.SkipZigTest; - - try expect(@as(c_int, @sizeOf(u32)) == h.MY_SIZEOF(u32)); - try expect(@as(c_int, @sizeOf(u32)) == h.MY_SIZEOF2(u32)); -} - -test "reference to a struct type" { - if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expect(@sizeOf(h.struct_Foo) == h.SIZE_OF_FOO); -} - -test "cast negative integer to pointer" { - 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_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expectEqual(@as(?*anyopaque, @ptrFromInt(@as(usize, @bitCast(@as(isize, -1))))), h.MAP_FAILED); -} - -test "casting to union with a macro" { - 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_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - const l: c_long = 42; - const d: f64 = 2.0; - - var casted = h.UNION_CAST(l); - try expect(l == casted.l); - - casted = h.UNION_CAST(d); - try expect(d == casted.d); -} - -test "casting or calling a value with a paren-surrounded macro" { - 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_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - const l: c_long = 42; - const casted = h.CAST_OR_CALL_WITH_PARENS(c_int, l); - try expect(casted == @as(c_int, @intCast(l))); - - const Helper = struct { - fn foo(n: c_int) !void { - try expect(n == 42); - } - }; - - try h.CAST_OR_CALL_WITH_PARENS(Helper.foo, 42); -} - -test "nested comma operator" { - 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_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expectEqual(@as(c_int, 3), h.NESTED_COMMA_OPERATOR); - try expectEqual(@as(c_int, 3), h.NESTED_COMMA_OPERATOR_LHS); -} - -test "cast functions" { - 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_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - const S = struct { - fn foo() void {} - }; - try expectEqual(true, h.CAST_TO_BOOL(S.foo)); - try expect(h.CAST_TO_UINTPTR(S.foo) != 0); -} - -test "large integer macro" { - 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_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expectEqual(@as(c_ulonglong, 18446744073709550592), h.LARGE_INT); -} - -test "string literal macro with embedded tab character" { - 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_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expectEqualStrings("hello\t", h.EMBEDDED_TAB); -} - -test "string and char literals that are not UTF-8 encoded. Issue #12784" { - 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_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expectEqual(@as(u8, '\xA9'), latin1.UNPRINTABLE_CHAR); - try expectEqualStrings("\xA9\xA9\xA9", latin1.UNPRINTABLE_STRING); -} - -test "Macro that uses division operator. Issue #13162" { - 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_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest; - - try expectEqual(@as(c_int, 42), h.DIVIDE_CONSTANT(@as(c_int, 42_000))); - try expectEqual(@as(c_uint, 42), h.DIVIDE_CONSTANT(@as(c_uint, 42_000))); - - try expectEqual( - @as(f64, 42.0), - h.DIVIDE_ARGS( - @as(f64, 42.0), - true, - ), - ); - try expectEqual( - @as(c_int, 21), - h.DIVIDE_ARGS( - @as(i8, 42), - @as(i8, 2), - ), - ); - - try expectEqual( - @as(c_int, 21), - h.DIVIDE_ARGS( - @as(c_ushort, 42), - @as(c_ushort, 2), - ), - ); -} - -test "Macro that uses remainder operator. Issue #13346" { - 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_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expectEqual(@as(c_int, 2_010), h.REMAINDER_CONSTANT(@as(c_int, 42_010))); - try expectEqual(@as(c_uint, 2_030), h.REMAINDER_CONSTANT(@as(c_uint, 42_030))); - - try expectEqual( - @as(c_int, 7), - h.REMAINDER_ARGS( - @as(i8, 17), - @as(i8, 10), - ), - ); - - try expectEqual( - @as(c_int, 5), - h.REMAINDER_ARGS( - @as(c_ushort, 25), - @as(c_ushort, 20), - ), - ); - - try expectEqual( - @as(c_int, 1), - h.REMAINDER_ARGS( - @as(c_int, 5), - @as(c_int, -2), - ), - ); -} - -test "@typeInfo on @cImport result" { - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expect(@typeInfo(h).Struct.decls.len > 1); -} - -test "Macro that uses Long type concatenation casting" { - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expect((@TypeOf(h.X)) == c_long); - try expectEqual(h.X, @as(c_long, 10)); -} - -test "Blank macros" { - if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; - - try expectEqual(h.BLANK_MACRO, ""); - try expectEqual(h.BLANK_CHILD_MACRO, ""); - try expect(@TypeOf(h.BLANK_MACRO_CAST) == h.def_type); - try expectEqual(h.BLANK_MACRO_CAST, @as(c_long, 0)); -} diff --git a/test/behavior/translate_c_macros_not_utf8.h b/test/behavior/translate_c_macros_not_utf8.h deleted file mode 100644 index 0a7fa4cc6b..0000000000 --- a/test/behavior/translate_c_macros_not_utf8.h +++ /dev/null @@ -1,5 +0,0 @@ -// Note: This file is encoded with ISO/IEC 8859-1 (latin1), not UTF-8. -// Do not change the encoding - -#define UNPRINTABLE_STRING "İİİ" -#define UNPRINTABLE_CHAR 'İ' |
