summaryrefslogtreecommitdiff
path: root/sample/gctest2.rb
diff options
context:
space:
mode:
Diffstat (limited to 'sample/gctest2.rb')
-rw-r--r--sample/gctest2.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/sample/gctest2.rb b/sample/gctest2.rb
new file mode 100644
index 0000000000..851d14f217
--- /dev/null
+++ b/sample/gctest2.rb
@@ -0,0 +1,71 @@
+# GC stress test
+def cons(car, cdr)
+ car::cdr
+end
+
+def car(x)
+ x.car
+end
+
+def cdr(x)
+ x.cdr
+end
+
+def reverse1(x, y)
+ if x == nil then
+ y
+ else
+ reverse1(cdr(x), cons(car(x), y))
+ end
+end
+
+def reverse(x)
+ reverse1(x, nil)
+end
+
+def ints(low, up)
+ if low > up
+ nil
+ else
+ cons(low, ints(low+1, up))
+ end
+end
+
+def print_int_list(x)
+ if x == nil
+ print("NIL\n")
+ else
+ print(car(x))
+ if cdr(x)
+ print(", ")
+ print_int_list(cdr(x))
+ else
+ print("\n")
+ end
+ end
+end
+
+print("start\n")
+
+a = ints(1, 100)
+print_int_list(a)
+b = ints(1, 50)
+print_int_list(b)
+print_int_list(reverse(a))
+print_int_list(reverse(b))
+for i in 1 .. 100
+ b = reverse(reverse(b))
+# print(i, ": ")
+# print_int_list(b)
+end
+print("a: ")
+print_int_list(a)
+print("b: ")
+print_int_list(b)
+print("reverse(a): ")
+print_int_list(reverse(a))
+print("reverse(b): ")
+print_int_list(reverse(b))
+a = b = nil
+print("finish\n")
+GC.start()