]> gitweb.factorcode.org Git - factor.git/blob - basis/compiler/cfg/write-barrier/write-barrier-tests.factor
factor: rename [ ] [ ] unit-test -> { } [ ] unit-test using a refactoring tool!
[factor.git] / basis / compiler / cfg / write-barrier / write-barrier-tests.factor
1 USING: compiler.cfg.instructions compiler.cfg.write-barrier
2 tools.test ;
3 IN: compiler.cfg.write-barrier.tests
4
5 ! Do need a write barrier on a random store.
6 {
7     V{
8         T{ ##peek f 1 }
9         T{ ##set-slot f 2 1 3 }
10         T{ ##write-barrier f 1 3 }
11     }
12 } [
13     V{
14         T{ ##peek f 1 }
15         T{ ##set-slot f 2 1 3 }
16         T{ ##write-barrier f 1 3 }
17     } write-barriers-step
18 ] unit-test
19
20 {
21     V{
22         T{ ##peek f 1 }
23         T{ ##set-slot-imm f 2 1 }
24         T{ ##write-barrier-imm f 1 }
25     }
26 } [
27     V{
28         T{ ##peek f 1 }
29         T{ ##set-slot-imm f 2 1 }
30         T{ ##write-barrier-imm f 1 }
31     } write-barriers-step
32 ] unit-test
33
34 ! Don't need a write barrier on freshly allocated objects.
35 {
36     V{
37         T{ ##allot f 1 }
38         T{ ##set-slot f 2 1 3 }
39     }
40 } [
41     V{
42         T{ ##allot f 1 }
43         T{ ##set-slot f 2 1 3 }
44         T{ ##write-barrier f 1 3 }
45     } write-barriers-step
46 ] unit-test
47
48 {
49     V{
50         T{ ##allot f 1 }
51         T{ ##set-slot-imm f 2 1 }
52     }
53 } [
54     V{
55         T{ ##allot f 1 }
56         T{ ##set-slot-imm f 2 1 }
57         T{ ##write-barrier-imm f 1 }
58     } write-barriers-step
59 ] unit-test
60
61 ! Do need a write barrier if there's a subroutine call between
62 ! the allocation and the store.
63 {
64     V{
65         T{ ##allot f 1 }
66         T{ ##box }
67         T{ ##set-slot f 2 1 3 }
68         T{ ##write-barrier f 1 3 }
69     }
70 } [
71     V{
72         T{ ##allot f 1 }
73         T{ ##box }
74         T{ ##set-slot f 2 1 3 }
75         T{ ##write-barrier f 1 3 }
76     } write-barriers-step
77 ] unit-test
78
79 {
80     V{
81         T{ ##allot f 1 }
82         T{ ##box }
83         T{ ##set-slot-imm f 2 1 }
84         T{ ##write-barrier-imm f 1 }
85     }
86 } [
87     V{
88         T{ ##allot f 1 }
89         T{ ##box }
90         T{ ##set-slot-imm f 2 1 }
91         T{ ##write-barrier-imm f 1 }
92     } write-barriers-step
93 ] unit-test
94
95 ! ##copy instructions
96 {
97     V{
98         T{ ##copy f 2 1 }
99         T{ ##set-slot-imm f 3 1 }
100         T{ ##write-barrier-imm f 2 }
101     }
102 } [
103     V{
104         T{ ##copy f 2 1 }
105         T{ ##set-slot-imm f 3 1 }
106         T{ ##write-barrier-imm f 2 }
107     } write-barriers-step
108 ] unit-test
109
110 {
111     V{
112         T{ ##copy f 2 1 }
113         T{ ##set-slot-imm f 3 2 }
114         T{ ##write-barrier-imm f 1 }
115     }
116 } [
117     V{
118         T{ ##copy f 2 1 }
119         T{ ##set-slot-imm f 3 2 }
120         T{ ##write-barrier-imm f 1 }
121     } write-barriers-step
122 ] unit-test
123
124 {
125     V{
126         T{ ##copy f 2 1 }
127         T{ ##copy f 3 2 }
128         T{ ##set-slot-imm f 3 1 }
129         T{ ##write-barrier-imm f 2 }
130     }
131 } [
132     V{
133         T{ ##copy f 2 1 }
134         T{ ##copy f 3 2 }
135         T{ ##set-slot-imm f 3 1 }
136         T{ ##write-barrier-imm f 2 }
137     } write-barriers-step
138 ] unit-test
139
140 {
141     V{
142         T{ ##copy f 2 1 }
143         T{ ##copy f 3 2 }
144         T{ ##set-slot-imm f 4 1 }
145         T{ ##write-barrier-imm f 3 }
146     }
147 } [
148     V{
149         T{ ##copy f 2 1 }
150         T{ ##copy f 3 2 }
151         T{ ##set-slot-imm f 4 1 }
152         T{ ##write-barrier-imm f 3 }
153     } write-barriers-step
154 ] unit-test