aboutsummaryrefslogtreecommitdiff
path: root/tests/data/sbv.c
diff options
context:
space:
mode:
authorGravatar Moon Flower <moonflower@elhenney.local> 2026-10-12 08:46:23 +0330
committerGravatar Moon Flower <moonflower@elhenney.local> 2026-10-12 08:46:23 +0330
commitecc350ca5c2eb50be8309c5f14f8bf0d87db9a02 (patch)
tree70e0af76a1b13affff7c6cc8aac7b3e6ef960478 /tests/data/sbv.c
a
Diffstat (limited to 'tests/data/sbv.c')
-rw-r--r--tests/data/sbv.c18
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; }