Skip to content

Commit 5257643

Browse files
authored
Merge pull request #17747 from ziglang/organize-behavior-tests
categorize behavior tests
2 parents aecdf6a + 24d9438 commit 5257643

File tree

9 files changed

+185
-131
lines changed

9 files changed

+185
-131
lines changed

test/behavior.zig

Lines changed: 4 additions & 4 deletions
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");
@@ -169,6 +170,7 @@ test {
169170
_ = @import("behavior/fn_in_struct_in_comptime.zig");
170171
_ = @import("behavior/for.zig");
171172
_ = @import("behavior/generics.zig");
173+
_ = @import("behavior/globals.zig");
172174
_ = @import("behavior/hasdecl.zig");
173175
_ = @import("behavior/hasfield.zig");
174176
_ = @import("behavior/if.zig");
@@ -188,6 +190,7 @@ test {
188190
_ = @import("behavior/merge_error_sets.zig");
189191
_ = @import("behavior/muladd.zig");
190192
_ = @import("behavior/namespace_depends_on_compile_var.zig");
193+
_ = @import("behavior/nan.zig");
191194
_ = @import("behavior/null.zig");
192195
_ = @import("behavior/optional.zig");
193196
_ = @import("behavior/packed-struct.zig");
@@ -252,9 +255,6 @@ test {
252255
builtin.zig_backend != .stage2_c and
253256
builtin.zig_backend != .stage2_spirv64)
254257
{
255-
_ = @import("behavior/bugs/13063.zig");
256-
_ = @import("behavior/bugs/11227.zig");
257-
_ = @import("behavior/bugs/14198.zig");
258-
_ = @import("behavior/export.zig");
258+
_ = @import("behavior/export_keyword.zig");
259259
}
260260
}

test/behavior/bugs/11227.zig

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

test/behavior/bugs/13063.zig

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

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+
}

test/behavior/fn.zig

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,3 +574,20 @@ test "pass and return comptime-only types" {
574574
try expectEqual(null, S.returnNull(null));
575575
try expectEqual(@as(u0, 0), S.returnUndefined(undefined));
576576
}
577+
578+
test "pointer to alias behaves same as pointer to function" {
579+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
580+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
581+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
582+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
583+
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
584+
585+
const S = struct {
586+
fn foo() u32 {
587+
return 11227;
588+
}
589+
const bar = foo;
590+
};
591+
var a = &S.bar;
592+
try std.testing.expect(S.foo() == a());
593+
}

test/behavior/globals.zig

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
const std = @import("std");
2+
const builtin = @import("builtin");
3+
const expect = std.testing.expect;
4+
5+
var pos = [2]f32{ 0.0, 0.0 };
6+
test "store to global array" {
7+
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
8+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
9+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
10+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
11+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
12+
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
13+
14+
try expect(pos[1] == 0.0);
15+
pos = [2]f32{ 0.0, 1.0 };
16+
try expect(pos[1] == 1.0);
17+
}
18+
19+
var vpos = @Vector(2, f32){ 0.0, 0.0 };
20+
test "store to global vector" {
21+
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
22+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
23+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
24+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
25+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
26+
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
27+
28+
try expect(vpos[1] == 0.0);
29+
vpos = @Vector(2, f32){ 0.0, 1.0 };
30+
try expect(vpos[1] == 1.0);
31+
}

test/behavior/bugs/14198.zig renamed to test/behavior/nan.zig

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const builtin = @import("builtin");
12
const std = @import("std");
23
const math = std.math;
34
const mem = std.mem;
@@ -21,6 +22,12 @@ const qnan_f128: f128 = math.nan(f128);
2122
const snan_f128: f128 = math.snan(f128);
2223

2324
test "nan memory equality" {
25+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
26+
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
27+
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
28+
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
29+
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
30+
2431
// signaled
2532
try testing.expect(mem.eql(u8, mem.asBytes(&snan_u16), mem.asBytes(&snan_f16)));
2633
try testing.expect(mem.eql(u8, mem.asBytes(&snan_u32), mem.asBytes(&snan_f32)));

0 commit comments

Comments
 (0)