6 // random uint less than n
7 fn under(r : rand::rng, n : uint) -> uint { assert n != 0u; r.next() as uint % n }
9 // random choice from a vec
10 fn choice<T: copy>(r : rand::rng, v : [T]) -> T { assert vec::len(v) != 0u; v[under(r, vec::len(v))] }
12 // 1 in n chance of being true
13 fn unlikely(r : rand::rng, n : uint) -> bool { under(r, n) == 0u }
21 mutable x : maybe_pointy,
22 mutable y : maybe_pointy,
26 fn allunder(n: uint, it: block(uint)) {
28 while i < n { it(i); i += 1u; }
31 fn nopT(_x : @pointy) { }
34 fn test_cycles(r : rand::rng)
36 const max : uint = 10u;
38 let v : [mutable @pointy] = [mutable];
40 v += [mutable @{ mutable x : no_pointy, mutable y : no_pointy, mutable z: bind nop() }];
44 v[i].x = yes_pointy(v[under(r, max)]);
45 v[i].y = yes_pointy(v[under(r, max)]);
46 v[i].z = bind nopT(v[under(r, max)]);
49 // Drop refs one at a time
51 v[i] = @{ mutable x : no_pointy, mutable y : no_pointy, mutable z: bind nop() };
57 let r = rand::mk_rng();