This source file includes following definitions.
- test
- main
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 #include "opal_config.h"
27 #include <stdlib.h>
28 #include <stdio.h>
29 #include <assert.h>
30 #include <string.h>
31
32 #include "support.h"
33 #include "opal/class/opal_pointer_array.h"
34
35 typedef union {
36 int ivalue;
37 char *cvalue;
38 } value_t;
39
40 static void test(bool thread_usage){
41
42
43 opal_pointer_array_t *array;
44 value_t *test_data;
45 int len_test_data,i,test_len_in_array,error_cnt;
46 int ele_index;
47 int error_code;
48 value_t value;
49
50
51 opal_set_using_threads(thread_usage);
52
53 array=OBJ_NEW(opal_pointer_array_t);
54 assert(array);
55
56 len_test_data=5;
57 test_data=malloc(sizeof(value_t)*len_test_data);
58 assert(test_data);
59
60 for(i=0 ; i < len_test_data ; i++ ) {
61 test_data[i].ivalue = (i+1);
62 }
63
64
65 test_len_in_array=3;
66 assert(len_test_data>=test_len_in_array);
67 for(i=0 ; i < test_len_in_array ; i++ ) {
68 opal_pointer_array_add(array,test_data[i].cvalue);
69 }
70
71 if( (array->size - array->number_free) == test_len_in_array) {
72 test_success();
73 } else {
74 test_failure("check on number of elements in array");
75 }
76
77
78 error_cnt=0;
79 for(i=0 ; i < test_len_in_array ; i++ ) {
80 value.cvalue = array->addr[i];
81 if( (i+1) != value.ivalue ) {
82 error_cnt++;
83 }
84 }
85 if( 0 == error_cnt ) {
86 test_success();
87 } else {
88 test_failure(" data check ");
89 }
90
91
92
93 ele_index=1;
94 error_code=opal_pointer_array_set_item(array,ele_index,NULL);
95 if( 0 == error_code ) {
96 test_success();
97 } else {
98 test_failure(" opal_pointer_array_set_item ");
99 }
100 if( NULL == array->addr[ele_index]){
101 test_success();
102 } else {
103 test_failure(" set pointer value");
104 }
105 if( ele_index == array->lowest_free ) {
106 test_success();
107 } else {
108 test_failure(" lowest free ");
109 }
110
111
112 opal_pointer_array_remove_all(array);
113 error_cnt=0;
114 for(i=0 ; i < array->size ; i++ ) {
115 value.ivalue = i + 2;
116 ele_index=opal_pointer_array_add(array, value.cvalue);
117 if( i != ele_index ) {
118 error_cnt++;
119 }
120 }
121 if( 0 == error_cnt ) {
122 test_success();
123 } else {
124 test_failure(" opal_pointer_array_add 2nd ");
125 }
126
127 error_cnt=0;
128 for(i=0 ; i < array->size ; i++ ) {
129 value.cvalue = opal_pointer_array_get_item(array,i);
130 if( (i+2) != value.ivalue ) {
131 error_cnt++;
132 }
133 }
134 if( 0 == error_cnt ) {
135 test_success();
136 } else {
137 test_failure(" data check - 2nd ");
138 }
139
140 OBJ_RELEASE(array);
141 assert(NULL == array);
142
143 array=OBJ_NEW(opal_pointer_array_t);
144 assert(array);
145 opal_pointer_array_init(array, 0, 4, 2);
146 for( i = 0; i < 4; i++ ) {
147 value.ivalue = i + 1;
148 if( 0 > opal_pointer_array_add( array, value.cvalue ) ) {
149 test_failure("Add/Remove: failure during initial data_add ");
150 }
151 }
152 for( i = i-1; i >= 0; i-- ) {
153 if( i % 2 )
154 if( 0 != opal_pointer_array_set_item(array, i, NULL) )
155 test_failure("Add/Remove: failure during item removal ");
156 }
157 for( i = 0; i < 4; i++ ) {
158 if( !opal_pointer_array_add( array, (void*)(uintptr_t)(i+1) ) ) {
159 if( i != 2 ) {
160 test_failure("Add/Remove: failure during the readd ");
161 break;
162 }
163 }
164 }
165 opal_pointer_array_remove_all(array);
166 OBJ_RELEASE(array);
167 assert(NULL == array);
168
169 free(test_data);
170 }
171
172
173 int main(int argc, char **argv)
174 {
175 test_init("opal_pointer_array");
176
177
178 test(false);
179
180
181 test(true);
182
183 return test_finalize();
184 }