Skip to content

Commit 24d9438

Browse files
committed
split export behavior test into export_keyword and export_builtin
1 parent 9f0fd72 commit 24d9438

File tree

4 files changed

+128
-96
lines changed

4 files changed

+128
-96
lines changed

test/behavior.zig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ test {
161161
_ = @import("behavior/enum.zig");
162162
_ = @import("behavior/error.zig");
163163
_ = @import("behavior/eval.zig");
164+
_ = @import("behavior/export_builtin.zig");
164165
_ = @import("behavior/export_self_referential_type_info.zig");
165166
_ = @import("behavior/field_parent_ptr.zig");
166167
_ = @import("behavior/floatop.zig");
@@ -254,6 +255,6 @@ test {
254255
builtin.zig_backend != .stage2_c and
255256
builtin.zig_backend != .stage2_spirv64)
256257
{
257-
_ = @import("behavior/export.zig");
258+
_ = @import("behavior/export_keyword.zig");
258259
}
259260
}

test/behavior/export.zig

Lines changed: 0 additions & 95 deletions
This file was deleted.

test/behavior/export_builtin.zig

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
const builtin = @import("builtin");
2+
const std = @import("std");
3+
const expect = std.testing.expect;
4+
5+
test "exporting enum type and value" {
6+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
7+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
8+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
9+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
10+
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
11+
12+
const S = struct {
13+
const E = enum(c_int) { one, two };
14+
const e: E = .two;
15+
comptime {
16+
@export(e, .{ .name = "e" });
17+
}
18+
};
19+
try expect(S.e == .two);
20+
}
21+
22+
test "exporting with internal linkage" {
23+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
24+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
25+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
26+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
27+
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
28+
29+
const S = struct {
30+
fn foo() callconv(.C) void {}
31+
comptime {
32+
@export(foo, .{ .name = "exporting_with_internal_linkage_foo", .linkage = .Internal });
33+
}
34+
};
35+
S.foo();
36+
}
37+
38+
test "exporting using field access" {
39+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
40+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
41+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
42+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
43+
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
44+
45+
const S = struct {
46+
const Inner = struct {
47+
const x: u32 = 5;
48+
};
49+
comptime {
50+
@export(Inner.x, .{ .name = "foo", .linkage = .Internal });
51+
}
52+
};
53+
54+
_ = S.Inner.x;
55+
}
56+
57+
test "exporting comptime-known value" {
58+
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
59+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
60+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
61+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
62+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
63+
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
64+
65+
const x: u32 = 10;
66+
@export(x, .{ .name = "exporting_comptime_known_value_foo" });
67+
const S = struct {
68+
extern const exporting_comptime_known_value_foo: u32;
69+
};
70+
try expect(S.exporting_comptime_known_value_foo == 10);
71+
}
72+
73+
test "exporting comptime var" {
74+
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
75+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
76+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
77+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
78+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
79+
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
80+
81+
comptime var x: u32 = 5;
82+
@export(x, .{ .name = "exporting_comptime_var_foo" });
83+
x = 7; // modifying this now shouldn't change anything
84+
const S = struct {
85+
extern const exporting_comptime_var_foo: u32;
86+
};
87+
try expect(S.exporting_comptime_var_foo == 5);
88+
}

test/behavior/export_keyword.zig

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const std = @import("std");
2+
const expect = std.testing.expect;
3+
const expectEqualSlices = std.testing.expectEqualSlices;
4+
const expectEqualStrings = std.testing.expectEqualStrings;
5+
const mem = std.mem;
6+
const builtin = @import("builtin");
7+
8+
// can't really run this test but we can make sure it has no compile error
9+
// and generates code
10+
const vram = @as([*]volatile u8, @ptrFromInt(0x20000000))[0..0x8000];
11+
export fn writeToVRam() void {
12+
vram[0] = 'X';
13+
}
14+
15+
const PackedStruct = packed struct {
16+
a: u8,
17+
b: u8,
18+
};
19+
const PackedUnion = packed union {
20+
a: u8,
21+
b: u32,
22+
};
23+
24+
test "packed struct, enum, union parameters in extern function" {
25+
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
26+
27+
testPackedStuff(&(PackedStruct{
28+
.a = 1,
29+
.b = 2,
30+
}), &(PackedUnion{ .a = 1 }));
31+
}
32+
33+
export fn testPackedStuff(a: *const PackedStruct, b: *const PackedUnion) void {
34+
if (false) {
35+
a;
36+
b;
37+
}
38+
}

0 commit comments

Comments
 (0)