summaryrefslogtreecommitdiffstats
path: root/tests/main.c
blob: f5ddddf7b9e20d8ac1c744f949abaa984509b54a (plain)
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "Eiotas.h"

#include <eina_log.h>
#include <stdio.h>

#undef PRINTPTR
#ifdef __clang__
# define PRINTPTR(_p) (unsigned int)_p
#else
# define PRINTPTR(_p) (_p)
#endif

typedef struct {
    char txt[32];
    int idx;
} Input;

static Input* input_create(char *txt)
{
    Input *input = (Input*)malloc(sizeof(Input));
    strncpy(input->txt,txt,32);
    input->txt[31] = '\0';
    input->idx = 0;
    return input;
}

static void input_free(Input *input)
{
    EINA_LOG_DOM_DBG(_eiotas_log_dom,"free Input\n");
    free(input);
}

static void input_show(Input *input)
{
    EINA_LOG_DOM_DBG(_eiotas_log_dom,"Input [%d] %s\n",input->idx,input->txt);
}

static void input_receive(const Eiotas_Door *door, Eiotas_Particle *particle, Eiotas_User_Data *data)
{
    EINA_LOG_DOM_DBG(_eiotas_log_dom,"input_receive 0x%X\n",PRINTPTR(data));
}

int main(int argc, char **argv)
{
    int i;
    Eiotas_Particle *p0, *p1, *p2, *p3, *p4, *p5, *p6, *p7, *p8, *p9, *p10;

    if(eiotas_init()>0) {
        return EXIT_FAILURE;
    }
    eina_log_domain_level_set("eiotas",EINA_LOG_LEVEL_DBG);
    EINA_LOG_DOM_DBG(_eiotas_log_dom,"Eiotas version %d.%d.%d",eiotas_version->major,eiotas_version->minor,eiotas_version->micro);

    Eiotas_Spin *dom0 = eiotas_spin_add("dom0",10);
    eiotas_iota_show((Eiotas_Iota*)dom0);

    Eiotas_Room *room = &dom0->room;
    char name[8];
    for(i=0; i<5; i++) {
        sprintf(name,"room%d",i);
        Eiotas_Room *tmp = eiotas_room_add(name,room);
        if(tmp!=NULL) {
            room = tmp;
            eiotas_iota_show((Eiotas_Iota*)room);   // MACROS
        }
    }
    room = eiotas_room_add("room0",&dom0->room);

    Input *input = input_create("hello world");
    input_show(input);

    Eiotas_User_Bits user_bits;

    user_bits.data = input;
    user_bits.free_fct = (Eiotas_User_Data_Free)&input_free;
    user_bits.recv_fct = (Eiotas_Receive_Particle)&input_receive;
    Eiotas_Door *din0 = eiotas_door_add("input0",&dom0->room,&user_bits);
    eiotas_iota_show(&din0->iota); // eiotas_iota_show((Eiotas_Iota*)din0);

    p0 = eiotas_require_particle(din0);
    p1 = eiotas_require_particle(din0);
    p2 = eiotas_require_particle(din0);
    p3 = eiotas_require_particle(din0);
    p4 = eiotas_require_particle(din0);
    p5 = eiotas_require_particle(din0);
    p6 = eiotas_require_particle(din0);
    p7 = eiotas_require_particle(din0);
    p8 = eiotas_require_particle(din0);
    p9 = eiotas_require_particle(din0);

    eiotas_release_particle(din0,p0);
    eiotas_release_particle(din0,p1);
    p10 = eiotas_require_particle(din0);
    if(p10!=p1) {
        fprintf(stderr,"Particle require fail\n");
    }
    eiotas_release_particle(din0,p10);

    eiotas_spin_send_particle((Eiotas_Spin*)din0->iota.spin,p2,EINA_FALSE);
    eiotas_spin_send_particle((Eiotas_Spin*)din0->iota.spin,p3,EINA_TRUE);

    eiotas_particle_merge(p4,p5);
    eiotas_particle_merge(p4,p6);
    eiotas_particle_merge(p5,p7);
    eiotas_particle_merge(p5,p8);
    eiotas_particle_merge(p5,p9);

    eiotas_particle_add_destinations(p4,"dom0/room0/door0?get");
    eiotas_particle_add_destinations(p4," dom0/room0/door0?get ");
    eiotas_particle_add_destinations(p4,"    dom0/room0/door0?get   ");
    eiotas_particle_add_destinations(p4,"dom0/room0/room1/doorx?get,door?get,dom0/room0/door0?get");
    eiotas_particle_add_destinations(p4,"  dom0/room0/room1/doorx?get,door?get  ,  dom0/room0/door0?get ");
    eiotas_particle_add_destinations(p4," , , dom0/room0/room1/doorx?get,door?get  ,,  dom0/room0/door0?get ");

    eiotas_release_particle(din0,p4);

    eiotas_spin_free(dom0);


    return eiotas_shutdown();
}