aboutsummaryrefslogtreecommitdiff
path: root/tests/programs/ftype.zc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/programs/ftype.zc')
-rw-r--r--tests/programs/ftype.zc47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/programs/ftype.zc b/tests/programs/ftype.zc
new file mode 100644
index 0000000..6db7f5a
--- /dev/null
+++ b/tests/programs/ftype.zc
@@ -0,0 +1,47 @@
+fn put_f(x) { asm { x @ #1220 } return 0; }
+fn sp() { put_c(32); return 0; }
+
+struct cell { int tag; float field; }
+
+float g;
+
+float add(float a, float b) { return a + b; }
+float pick(cell* p) { return p.field; }
+
+fn main() {
+ float x;
+ float y;
+ cell c;
+ cell* q;
+ float buf[1];
+ let w = 0;
+ let z = 0.0 * -1.0;
+ let n = 0;
+ x = 1.5;
+ y = 2;
+ g = 10;
+ put_f(add(x, y)); sp();
+ put_f(add(g, 0.5)); sp();
+ put_f(add(1, 2) + 0.5); sp();
+ c.tag = 4;
+ c.field = 4.25;
+ q = &c;
+ put_f(pick(q)); sp();
+ put_f(q.field + 1); sp();
+ put_f(c.field); sp();
+ buf[0] = 6.5;
+ put_f(buf[0]); sp();
+ put_n(&(1.field)); sp();
+ w = (&c) as word;
+ put_n(w.tag); sp();
+ put_f(w.field); sp();
+ w.field = 8.5;
+ put_f(c.field); sp();
+ put_n(g > 3); sp();
+ if (z) n = 1;
+ do { if (z) n = n + 2; } while (z);
+ if (!z && g) n = n + 4;
+ put_n(n);
+ put_c(10);
+ return 0;
+}