summaryrefslogtreecommitdiffstats
path: root/tests/particle.c
blob: 402e0c5a0a4f96c8697c6c9b65e62e656309b695 (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

#include "helper.h"

void test_particle()
{
    void *p;
    Eina_Accessor       *acc;
    Eiotas_Particle     *p0, *p1, *p2, *p3, *p4;

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

    p0 = eiotas_require_particle(dom0);

    check_cond(!eiotas_particle_has_dst(p0),"should be no destination");

    eiotas_particle_destinations_add(p0,"dom0/room0/door0?get");
    check_cond(eiotas_particle_has_dst(p0),"should be a destination");
    eiotas_particle_destinations_add(p0," dom0/room0/door0?get ");
    eiotas_particle_destinations_add(p0,"    dom0/room0/door0?get   ");
    eiotas_particle_destinations_add(p0,"dom0/room0/room1/doorx?get,door?get,dom0/room0/door0?get");
    eiotas_particle_destinations_add(p0,"  dom0/room0/room1/doorx?get,door?get  ,  dom0/room0/door0?get ");
    eiotas_particle_destinations_add(p0," dom0/room0/room1/doorx?get,door?get, dom0/room0/door0?get ");
    eiotas_particle_destinations_add(p0," /suffix, ?suffix, prefix/ , prefix? , ,,  very/?wrong , very?wrong?too");

    acc = eina_array_accessor_new(p0->dsts);
    eina_accessor_data_get(acc,0,&p);
    check_str("dom0/room0/door0?get",(char*)p,"eiotas_particle_destinations_add");
    eina_accessor_data_get(acc,1,&p);
    check_str("dom0/room0/door0?get",(char*)p,"eiotas_particle_destinations_add");
    eina_accessor_data_get(acc,2,&p);
    check_str("dom0/room0/door0?get",(char*)p,"eiotas_particle_destinations_add");
    eina_accessor_data_get(acc,3,&p);
    check_str("dom0/room0/room1/doorx?get",(char*)p,"eiotas_particle_destinations_add");
    eina_accessor_data_get(acc,4,&p);
    check_str("door?get",(char*)p,"eiotas_particle_destinations_add");
    eina_accessor_data_get(acc,5,&p);
    check_str("dom0/room0/door0?get",(char*)p,"eiotas_particle_destinations_add");
    eina_accessor_data_get(acc,6,&p);
    check_str("dom0/room0/room1/doorx?get",(char*)p,"eiotas_particle_destinations_add");
    eina_accessor_data_get(acc,7,&p);
    check_str("door?get",(char*)p,"eiotas_particle_destinations_add");
    eina_accessor_data_get(acc,8,&p);
    check_str("dom0/room0/door0?get",(char*)p,"eiotas_particle_destinations_add");
    eina_accessor_data_get(acc,9,&p);
    check_str("dom0/room0/room1/doorx?get",(char*)p,"eiotas_particle_destinations_add");
    eina_accessor_data_get(acc,10,&p);
    check_str("door?get",(char*)p,"eiotas_particle_destinations_add");
    eina_accessor_data_get(acc,11,&p);
    check_str("dom0/room0/door0?get",(char*)p,"eiotas_particle_destinations_add");
    check_cond((eina_accessor_data_get(acc,12,&p)==EINA_FALSE),"eina_accessor_data_get should fail");;

    eiotas_particle_link_fields_set(p0," key2,key9  ,  key1,key10  ");
    acc = eina_array_accessor_new(p0->link_fields);
    eina_accessor_data_get(acc,0,&p);
    check_str("key2",(char*)p,"eiotas_particle_link_fields_set");
    eina_accessor_data_get(acc,1,&p);
    check_str("key9",(char*)p,"eiotas_particle_link_fields_set");
    eina_accessor_data_get(acc,2,&p);
    check_str("key1",(char*)p,"eiotas_particle_link_fields_set");
    eina_accessor_data_get(acc,3,&p);
    check_str("key10",(char*)p,"eiotas_particle_link_fields_set");
    check_cond((eina_accessor_data_get(acc,4,&p)==EINA_FALSE),"eina_accessor_data_get should fail");;


    check_cond((p0->link_value==NULL),"link_value should be NULL");

    eiotas_particle_data_set(p0,"key0","val0");
    check_cond((p0->link_value==NULL),"link_value should be NULL");
    eiotas_particle_data_set(p0,"key1","val1");
    check_str((char*)p0->link_value,"val1","link_value is wrong");
    eiotas_particle_data_set(p0,"key2","val2");
    check_str((char*)p0->link_value,"val2val1","link_value is wrong");
    eiotas_particle_data_set(p0,"key3","val3");
    check_str((char*)p0->link_value,"val2val1","link_value is wrong");

    if(strcmp(eiotas_particle_data_get(p0,"key0"),"val0")!=0) fprintf(stderr,"ERROR\n");
    if(strcmp(eiotas_particle_data_get(p0,"key1"),"val1")!=0) fprintf(stderr,"ERROR\n");
    if(strcmp(eiotas_particle_data_get(p0,"key2"),"val2")!=0) fprintf(stderr,"ERROR\n");
    if(strcmp(eiotas_particle_data_get(p0,"key3"),"val3")!=0) fprintf(stderr,"ERROR\n");

    eiotas_particle_data_del(p0,"key0");
    if(eiotas_particle_data_get(p0,"key0")!=NULL) fprintf(stderr,"ERROR\n");
    check_str((char*)p0->link_value,"val2val1","link_value is wrong");

    p1 = eiotas_require_particle(dom0);
    check_cond(!eiotas_particle_match(p0,p1),"link_value is not the same");
    eiotas_particle_link_fields_set(p1," k0,k1");
    eiotas_particle_data_set(p1,"k0","val2");
    eiotas_particle_data_set(p1,"k1","val1");
    check_str((char*)p1->link_value,"val2val1","link_value is wrong");
    check_cond(eiotas_particle_match(p0,p1),"link_value is the same");

    eiotas_particle_data_del(p0,"key2");
    if(eiotas_particle_data_get(p0,"key2")!=NULL) fprintf(stderr,"ERROR\n");
    check_str((char*)p0->link_value,"val1","link_value is wrong");
    eiotas_particle_data_del(p0,"key1");
    if(eiotas_particle_data_get(p0,"key1")!=NULL) fprintf(stderr,"ERROR\n");
    check_cond((p0->link_value==NULL),"link_value should be NULL");


    p2 = eiotas_require_particle(dom0);
    p3 = eiotas_require_particle(dom0);
    p4 = eiotas_require_particle(dom0);
    eiotas_particle_merge(p0,p1);
    eiotas_particle_merge(p0,p2);
    eiotas_particle_merge(p2,p3);
    eiotas_particle_merge(p2,p4);

    eiotas_particle_free(p0);

    eiotas_spin_free(dom0);
}