aboutsummaryrefslogtreecommitdiff
path: root/tests/programs/gc.zc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/programs/gc.zc')
-rw-r--r--tests/programs/gc.zc18
1 files changed, 18 insertions, 0 deletions
diff --git a/tests/programs/gc.zc b/tests/programs/gc.zc
new file mode 100644
index 0000000..81412a3
--- /dev/null
+++ b/tests/programs/gc.zc
@@ -0,0 +1,18 @@
+let keep;
+unchecked fn churn(n) {
+ let i = 0, p;
+ while (i < n) { p = new(10); p[0] = i; if (i % 100 == 0) keep = p; i++; }
+ return 0;
+}
+fn main() {
+ let base = live_objects(), f;
+ churn(1000);
+ put_n(live_objects() - base); put_c(' ');
+ f = gc();
+ put_n(f >= 990); put_c(' '); // conservative: a stale word or two may keep one alive
+ put_n(keep[0]); put_c(' '); // the one a global still points at survives
+ churn(200000); // 3.2m words through a 393k word heap: needs the automatic collector
+ put_n(gc_runs > 1); put_c(' ');
+ put_n(keep[0]); put_c(10);
+ return 0;
+}