source: src/examples/gc_no_raii/test/badlll.c @ 90cedbdd

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsdeferred_resndemanglerenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumwith_gc
Last change on this file since 90cedbdd was 4c1403c, checked in by Thierry Delisle <tdelisle@…>, 8 years ago

fixed small issues with gcpointers and added method to validate them

  • Property mode set to 100644
File size: 957 bytes
RevLine 
[9421588a]1#include "gc.h"
2
[46f1d20]3#include <stdio.h>
4
[9421588a]5struct List_t
6{
7        gcpointer(List_t) next;
8        int val;
9};
[f1e42c1]10
11typedef gcpointer(List_t) LLL;
12
[76af36f]13#define MAX (1024 * 1)
[f1e42c1]14
[46f1d20]15LLL buildLLL(int sz)
16{
17        int i = 0;
[76af36f]18        LLL ll0;
[46f1d20]19
20        gcmalloc( &ll0 );
21        List_t* ll0_ptr = get( &ll0 );
22        ll0_ptr->val = i;
[76af36f]23        LLL lll = ll0;
[46f1d20]24
25        for (i = 1; i < sz; i++)
26        {
[76af36f]27                LLL llc;
[46f1d20]28                gcmalloc( &llc );
29                List_t* llc_ptr = get( &llc );
30                llc_ptr->val = i;
31                List_t* lll_ptr = get( &lll );
32                lll_ptr->next = llc;
33
34                lll = llc;
35        }
36
[4c1403c]37        check(is_valid( &ll0.internal ));
38
[46f1d20]39        return ll0;
40}
41
42void testLLL(LLL lll)
[f1e42c1]43{
[46f1d20]44        unsigned char *counted;
45
46        counted = (unsigned char *) calloc(MAX, sizeof(unsigned char));
47        while (lll)
48        {
49                List_t* lll_ptr = get( &lll );
50                counted[lll_ptr->val]++;
51                if (counted[lll_ptr->val] > 1)
52                {
53                        fprintf(stderr, "ERROR! Encountered %d twice!\n", lll_ptr->val);
54                        exit(1);
55                }
56                lll = lll_ptr->next;
57        }
58
59        return;
[bf5a70da]60}
61
62int main(void)
63{
64        LLL mylll;
65
[46f1d20]66        mylll = buildLLL(MAX);
67
68        testLLL(mylll);
[bf5a70da]69
70        return 0;
71}
Note: See TracBrowser for help on using the repository browser.