@@ -103,6 +103,10 @@ TEST_CASE("GC unused stack pointer") {
103
103
REQUIRE (alloced[0 ].size == (size_t ) 1 );
104
104
REQUIRE (freed[0 ].size == (size_t ) 7999 );
105
105
106
+ pog_gc_collect ();
107
+ REQUIRE (alloced[0 ].size == (size_t ) 1 );
108
+ REQUIRE (freed[0 ].size == (size_t ) 7999 );
109
+
106
110
a = nullptr ;
107
111
REQUIRE (alloced[0 ].size == (size_t ) 1 );
108
112
REQUIRE (freed[0 ].size == (size_t ) 7999 );
@@ -127,6 +131,12 @@ TEST_CASE("GC multiple unused stack pointers") {
127
131
REQUIRE (alloced[2 ].size == (size_t ) 1 );
128
132
REQUIRE (freed[0 ].size == (size_t ) 7997 );
129
133
134
+ pog_gc_collect ();
135
+ REQUIRE (alloced[0 ].size == (size_t ) 1 );
136
+ REQUIRE (alloced[1 ].size == (size_t ) 1 );
137
+ REQUIRE (alloced[2 ].size == (size_t ) 1 );
138
+ REQUIRE (freed[0 ].size == (size_t ) 7997 );
139
+
130
140
a = nullptr ;
131
141
REQUIRE (alloced[0 ].size == (size_t ) 1 );
132
142
REQUIRE (freed[0 ].size == (size_t ) 7997 );
@@ -182,6 +192,13 @@ TEST_CASE("GC pointers in heap without GC root") {
182
192
REQUIRE (alloced[3 ].size == (size_t ) 2 );
183
193
REQUIRE (freed[0 ].size == (size_t ) 7992 );
184
194
195
+ pog_gc_collect ();
196
+ REQUIRE (alloced[0 ].size == (size_t ) 2 );
197
+ REQUIRE (alloced[1 ].size == (size_t ) 2 );
198
+ REQUIRE (alloced[2 ].size == (size_t ) 2 );
199
+ REQUIRE (alloced[3 ].size == (size_t ) 2 );
200
+ REQUIRE (freed[0 ].size == (size_t ) 7992 );
201
+
185
202
b->next = nullptr ;
186
203
c = nullptr ;
187
204
d = nullptr ;
@@ -209,6 +226,51 @@ TEST_CASE("GC pointers in heap without GC root") {
209
226
REQUIRE (freed[0 ].size == (size_t ) 8000 );
210
227
}
211
228
229
+ static char * x;
230
+ static char * y;
231
+ static char * z;
232
+
233
+ #define STATIC_MEM_CAP 2048
234
+ uintptr_t test_static_mem[STATIC_MEM_CAP];
235
+
212
236
TEST_CASE (" GC static pointers that have been set to null" ) {
213
- // TODO
214
- }
237
+ pog_gc_init (&test_static_mem, STATIC_MEM_CAP);
238
+ pog_gc_mark_static (&x);
239
+ pog_gc_mark_static (&y);
240
+ pog_gc_mark_static (&z);
241
+
242
+ pog_static_heap_init ();
243
+
244
+ x = (char *) pog_malloc (1 );
245
+ y = (char *) pog_malloc (1 );
246
+ z = (char *) pog_malloc (1 );
247
+
248
+ REQUIRE (alloced[0 ].size == (size_t ) 1 );
249
+ REQUIRE (alloced[1 ].size == (size_t ) 1 );
250
+ REQUIRE (alloced[2 ].size == (size_t ) 1 );
251
+ REQUIRE (freed[0 ].size == (size_t ) 7997 );
252
+
253
+ pog_gc_collect ();
254
+ REQUIRE (alloced[0 ].size == (size_t ) 1 );
255
+ REQUIRE (alloced[1 ].size == (size_t ) 1 );
256
+ REQUIRE (alloced[2 ].size == (size_t ) 1 );
257
+ REQUIRE (freed[0 ].size == (size_t ) 7997 );
258
+
259
+ x = nullptr ;
260
+ pog_gc_collect ();
261
+ REQUIRE (alloced[0 ].size == (size_t ) 1 );
262
+ REQUIRE (alloced[1 ].size == (size_t ) 1 );
263
+ REQUIRE (freed[0 ].size == (size_t ) 1 );
264
+ REQUIRE (freed[1 ].size == (size_t ) 7997 );
265
+
266
+ y = nullptr ;
267
+ z = nullptr ;
268
+ pog_gc_collect ();
269
+ REQUIRE (freed[0 ].size == (size_t ) 1 );
270
+ REQUIRE (freed[1 ].size == (size_t ) 1 );
271
+ REQUIRE (freed[2 ].size == (size_t ) 1 );
272
+ REQUIRE (freed[3 ].size == (size_t ) 7997 );
273
+
274
+ pog_squash ();
275
+ REQUIRE (freed[0 ].size == (size_t ) 8000 );
276
+ }
0 commit comments