]> rtime.felk.cvut.cz Git - frescor/forb.git/blob - src/tests/sequence.c
a89eae8519baade87b3f26871372cc8ec9e0f638
[frescor/forb.git] / src / tests / sequence.c
1 #include <forb.h>
2 #include <wvtest.h>
3 #include "sequence.h"
4
5 int destructor_called;
6 int sum_of_destructed;
7
8 void destructor(int *elem)
9 {
10         destructor_called++;
11         sum_of_destructed += *elem;
12 }
13
14 WVTEST_MAIN("sequence manipulation")
15 {
16         CORBA_sequence_long *s;
17         int i, *e, foreach_retuned_sum = 0;
18         forb_sequence_alloc(s, 10);
19         WVPASS(s);
20         WVPASS(forb_sequence_allocated(s) == 10);
21         WVPASS(forb_sequence_elem(s, 9) == 0);
22         WVPASS(forb_sequence_elem(s, 9) = 1);
23         WVPASS(forb_sequence_ensure_allocated(s, 1000) != NULL);
24         WVPASS(forb_sequence_allocated(s) == 1000);
25         WVPASS(forb_sequence_elem(s, 9) == 1);
26         WVPASS(forb_sequence_elem(s, 999) = 1);
27         CORBA_sequence_set_release(s, 1);
28         WVPASS(forb_sequence_length(s) == 0);
29         forb_sequence_free(s, destructor);
30         WVPASS(destructor_called == 0);
31
32         forb_sequence_alloc(s, 10);
33         WVPASS(s);
34         for (i=0; i<10; i++)
35                 forb_sequence_elem(s, i) = i;
36         forb_sequence_length(s) = 10;
37         WVPASS(forb_sequence_length(s) == 10);
38         forb_sequence_free(s, destructor);
39         WVPASS(destructor_called == 0);
40
41         forb_sequence_alloc(s, 10);
42         WVPASS(s);
43         CORBA_sequence_set_release(s, 1);
44         for (i=0; i<10; i++)
45                 forb_sequence_elem(s, i) = i;
46         forb_sequence_length(s) = 10;
47         WVPASS(forb_sequence_length(s) == 10);
48
49         forb_sequence_foreach(s, e) {
50                 foreach_retuned_sum += *e;
51         }
52         WVPASS(foreach_retuned_sum == 45);
53         
54         forb_sequence_free(s, destructor);
55         WVPASS(destructor_called == 10);
56         WVPASS(sum_of_destructed == 45);
57 }