diff options
| author | 2026-10-12 08:46:23 +0330 | |
|---|---|---|
| committer | 2026-10-12 08:46:23 +0330 | |
| commit | ecc350ca5c2eb50be8309c5f14f8bf0d87db9a02 (patch) | |
| tree | 70e0af76a1b13affff7c6cc8aac7b3e6ef960478 /tests/data/sbv.c | |
a
Diffstat (limited to 'tests/data/sbv.c')
| -rw-r--r-- | tests/data/sbv.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/data/sbv.c b/tests/data/sbv.c new file mode 100644 index 0000000..7e12680 --- /dev/null +++ b/tests/data/sbv.c @@ -0,0 +1,18 @@ +/* the c side of tests/programs/structval.zc: functions that take structs by value. test.sh + builds it to build/sbv.so, and the test loads it with cload. */ +typedef struct { long a, b; } pair; +typedef struct { double x, y; } vec; +typedef struct { long a, b, c; } trio; +long pair_sum(pair p) { return p.a * 10 + p.b; } +long pair_sum2(pair p, pair q) { return p.a * 1000 + p.b * 100 + q.a * 10 + q.b; } +long vec_scaled(vec v, long k) { return (long)(v.x * 2 + v.y * 3) * k; } +long many(long a, long b, long c, long d, long e, long f, pair p) { return a + b + c + d + e + f + p.a * 100 + p.b; } +long trio_sum(long a, long b, long c, long d, long e, long f, trio t) { return a + b + c + d + e + f + t.a * 100 + t.b * 10 + t.c; } +long eight(long a, long b, long c, long d, long e, long f, long g, long h, pair p) { return a + b + c + d + e + f + g + h + p.a * 100 + p.b; } +pair mkpair(long a, long b) { pair r; r.a = a; r.b = b; return r; } +vec mkvec(double x, double y) { vec r; r.x = x + 1; r.y = y + 1; return r; } +trio mktrio(long a, long b, long c) { trio r; r.a = a; r.b = b; r.c = c; return r; } +typedef struct { long a; double x; } mixed; +mixed mkmixed(long a, double x) { mixed r; r.a = a + 1; r.x = x * 2; return r; } +typedef struct { double x, y, z; } v3; +v3 mkv3(double x) { v3 r; r.x = x; r.y = x + 1; r.z = x + 2; return r; } |
