-
Notifications
You must be signed in to change notification settings - Fork 138
/
gc-leaky-box.t
93 lines (66 loc) · 1.86 KB
/
gc-leaky-box.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!./parrot --gc-min-threshold=100
# Copyright (C) 2010, Parrot Foundation.
=head1 NAME
t/op/gc-leaky-box.t - test for memory leaks in the Garbage Collector
=head1 SYNOPSIS
% prove t/op/gc-leaky-box.t
=head1 DESCRIPTION
Tests that we actually do a GC mark and sweep after a large number of PMC's have
been created. Test suggested by chromatic++ . Also includes tests for
TT1465 - http://trac.parrot.org/parrot/ticket/1465 .
=cut
# 20:57 <chromatic> For every million PMCs allocated, see that the GC has performed a mark/sweep.
.include 'interpinfo.pasm'
.sub _main :main
.include 'test_more.pir'
$S0 = interpinfo .INTERPINFO_GC_SYS_NAME
if $S0 == "inf" goto dont_run_hanging_tests
plan(3)
test_gc_mark_sweep()
goto test_end
dont_run_hanging_tests:
skip_all("Not relevant for this GC")
test_end:
.end
.sub test_gc_mark_sweep
.local int counter
.local int cycles
cycles = 10
cycle:
counter = 0
loop:
$P0 = box 0
inc counter
if counter < 1e7 goto loop
$I1 = interpinfo.INTERPINFO_GC_COLLECT_RUNS
if $I1 goto done
dec cycles
if cycles > 0 goto cycle
done:
$I2 = interpinfo.INTERPINFO_GC_MARK_RUNS
$S0 = interpinfo .INTERPINFO_GC_SYS_NAME
if $S0 == "gms" goto last_alloc
$I3 = interpinfo.INTERPINFO_TOTAL_MEM_ALLOC
goto test
last_alloc:
$I3 = interpinfo.INTERPINFO_MEM_ALLOCS_SINCE_COLLECT
test:
$S1 = $I1
$S0 = "performed " . $S1
$S0 .= " (which should be >=1) GC collect runs"
ok($I1,$S0)
$S1 = $I2
$S0 = "performed " . $S1
$S0 .= " (which should be >=1) GC mark runs"
ok($I2,$S0)
$S1 = $I3
$S0 = "allocated " . $S1
$S0 .= " (which should be <= 3_000_000) bytes of memory"
$I4 = isle $I3, 3000000
ok($I4,$S0)
.end
# Local Variables:
# mode: pir
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4 ft=pir: