// shared cons cells, a shared string, and a cycle. the collector reclaims // them once nothing points at them. free of a shared cell does nothing. fn main() { let base = live_objects(), a, b, c, s, p, q, cyc, n, tri; a = cons(1, 2); b = cons(a, 3); c = cons(a, 4); put_n(car(a)); put_c(32); put_n(cdr(a)); put_c(32); put_n(car(car(b))); put_c(32); put_n(cdr(c)); put_c(32); put_n(car(b) == a); put_c(32); put_n(is_shared(a)); put_c(32); n = live_objects(); free(a); put_n(live_objects() == n); put_c(32); put_n(car(a)); put_c(32); s = n_to_s(42); p = cons(s, 0); q = cons(s, 1); put_n(s_to_n(car(p))); put_c(32); put_n(car(p) == car(q)); put_c(32); cyc = cons(0, 1); cyc[0] = cyc; put_n(cdr(cyc)); put_c(32); put_n(car(cyc) == cyc); put_c(32); tri = triple(5, 6, 7); put_n(tget(tri, 1)); put_c(32); a = 0; b = 0; c = 0; s = 0; p = 0; q = 0; cyc = 0; tri = 0; scrub(); gc(); put_n(live_objects() - base); put_c(10); return 0; }