zig/test/gen_h.zig

149 lines
3.2 KiB
Zig
Raw Normal View History

const tests = @import("tests.zig");
pub fn addCases(cases: *tests.GenHContext) void {
cases.add("declare enum",
\\const Foo = extern enum { A, B, C };
\\export fn entry(foo: Foo) void { }
, &[_][]const u8{
\\enum Foo {
\\ A = 0,
\\ B = 1,
\\ C = 2
\\};
2020-10-31 10:21:49 +00:00
,
\\void entry(enum Foo foo);
});
cases.add("declare struct",
\\const Foo = extern struct {
\\ A: i32,
\\ B: f32,
\\ C: bool,
2018-09-06 21:29:35 +01:00
\\ D: u64,
\\ E: u64,
\\ F: u64,
\\};
\\export fn entry(foo: Foo) void { }
, &[_][]const u8{
\\struct Foo {
\\ int32_t A;
\\ float B;
\\ bool C;
2018-09-06 21:29:35 +01:00
\\ uint64_t D;
\\ uint64_t E;
\\ uint64_t F;
\\};
2020-10-31 10:21:49 +00:00
,
\\void entry(struct Foo foo);
\\
});
cases.add("declare union",
\\const Big = extern struct {
2018-09-06 21:29:35 +01:00
\\ A: u64,
\\ B: u64,
\\ C: u64,
\\ D: u64,
\\ E: u64,
\\};
\\const Foo = extern union {
\\ A: i32,
\\ B: f32,
\\ C: bool,
2018-09-06 21:29:35 +01:00
\\ D: Big,
\\};
2018-09-06 21:29:35 +01:00
\\export fn entry(foo: Foo) void {}
, &[_][]const u8{
2018-09-06 21:29:35 +01:00
\\struct Big {
\\ uint64_t A;
\\ uint64_t B;
\\ uint64_t C;
\\ uint64_t D;
\\ uint64_t E;
\\};
\\
\\union Foo {
\\ int32_t A;
\\ float B;
\\ bool C;
2018-09-06 21:29:35 +01:00
\\ struct Big D;
\\};
2020-10-31 10:21:49 +00:00
,
\\void entry(union Foo foo);
\\
});
2018-01-23 10:38:20 +00:00
cases.add("declare opaque type",
\\const Foo = opaque {};
\\
2018-06-01 05:07:40 +01:00
\\export fn entry(foo: ?*Foo) void { }
, &[_][]const u8{
\\struct Foo;
2020-10-31 10:21:49 +00:00
,
\\void entry(struct Foo * foo);
});
2018-01-23 10:38:20 +00:00
cases.add("array field-type",
\\const Foo = extern struct {
2018-01-23 10:38:20 +00:00
\\ A: [2]i32,
2018-06-01 05:07:40 +01:00
\\ B: [4]*u32,
2018-01-23 10:38:20 +00:00
\\};
\\export fn entry(foo: Foo, bar: [3]u8) void { }
, &[_][]const u8{
2018-01-23 10:38:20 +00:00
\\struct Foo {
\\ int32_t A[2];
\\ uint32_t * B[4];
\\};
2020-10-31 10:21:49 +00:00
,
\\void entry(struct Foo foo, uint8_t bar[]);
2018-01-23 10:38:20 +00:00
\\
});
cases.add("ptr to zig struct",
\\const S = struct {
\\ a: u8,
\\};
\\
\\export fn a(s: *S) u8 {
\\ return s.a;
\\}
, &[_][]const u8{
\\struct S;
2020-10-31 10:21:49 +00:00
,
\\uint8_t a(struct S * s);
\\
});
cases.add("ptr to zig union",
\\const U = union(enum) {
\\ A: u8,
\\ B: u16,
\\};
\\
\\export fn a(s: *U) u8 {
\\ return s.A;
\\}
, &[_][]const u8{
\\union U;
2020-10-31 10:21:49 +00:00
,
\\uint8_t a(union U * s);
\\
});
cases.add("ptr to zig enum",
\\const E = enum(u8) {
\\ A,
\\ B,
\\};
\\
\\export fn a(s: *E) u8 {
\\ return @intFromEnum(s.*);
\\}
, &[_][]const u8{
\\enum E;
2020-10-31 10:21:49 +00:00
,
\\uint8_t a(enum E * s);
\\
});
}