Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / regression / weak.sml
CommitLineData
7f918cf1
CE
1structure Weak = MLton.Weak
2
3val w = Weak.new 13
4val _ =
5 if isSome (Weak.get w)
6 then raise Fail "bug int"
7 else ()
8
9fun testIntInf (i: IntInf.int) =
10 let
11 val w = Weak.new i
12 val _ =
13 case Weak.get w of
14 NONE => raise Fail "bug IntInf"
15 | SOME i => print (concat [IntInf.toString i, "\n"])
16 in
17 ()
18 end
19val _ = testIntInf 13
20val _ = testIntInf 12345678901234567890
21
22val r = ref 13
23val n = 2
24val rs = Array.tabulate (n, ref)
25val ws = Array.tabulate (n, fn i => Weak.new (Array.sub (rs, i)))
26fun isAlive i = isSome (Weak.get (Array.sub (ws, i)))
27val _ = MLton.GC.collect ()
28val _ =
29 if isAlive 0 andalso isAlive 1
30 then ()
31 else raise Fail "bug1"
32fun clear i = Array.update (rs, i, r)
33fun sub i = ! (Array.sub (rs, i))
34fun pi x = print (concat [Int.toString x, "\n"])
35val _ = pi (sub 0 + sub 1)
36val _ = valOf (Weak.get (Array.sub (ws, 0))) := 12345
37val _ = clear 1
38val _ = MLton.GC.collect ()
39val _ =
40 if isAlive 0 andalso not (isAlive 1)
41 then ()
42 else raise Fail "bug2"
43val _ = pi (sub 0)
44val _ = clear 0
45val _ = MLton.GC.collect ()
46val _ =
47 if not (isAlive 0) andalso not (isAlive 1)
48 then ()
49 else raise Fail "bug2"
50