@@ -68,6 +68,13 @@ BOOST_AUTO_TEST_CASE(count_ctor)
68
68
size_sum += distributed_vector.part_size (i);
69
69
}
70
70
BOOST_CHECK_EQUAL (distributed_vector.size (), size_sum);
71
+
72
+ std::vector<bc::buffer> buffers = distributed_vector.get_buffers ();
73
+ for (size_t i = 0 ; i < distributed_vector.parts (); i++)
74
+ {
75
+ BOOST_CHECK (buffers[i].get () != 0 );
76
+ BOOST_CHECK (buffers[i] == distributed_vector.get_buffer (i));
77
+ }
71
78
}
72
79
73
80
BOOST_AUTO_TEST_CASE (command_queue_ctor)
@@ -101,6 +108,32 @@ BOOST_AUTO_TEST_CASE(command_queue_ctor)
101
108
BOOST_CHECK (distributed_equal (distributed_vector, value, distributed_queue));
102
109
}
103
110
111
+ BOOST_AUTO_TEST_CASE (command_queue_ctor_one_queue)
112
+ {
113
+ // construct distributed::command_queue
114
+ // with only 1 device command queue
115
+ bc::distributed::command_queue distributed_queue =
116
+ get_distributed_queue (queue, 0 );
117
+
118
+ bc::uint_ value = 1 ;
119
+ bc::distributed::vector<bc::uint_> distributed_vector (
120
+ size_t (5 ), value, distributed_queue
121
+ );
122
+
123
+ BOOST_CHECK (!distributed_vector.empty ());
124
+ BOOST_CHECK (distributed_vector.size () == 5 );
125
+ BOOST_CHECK (distributed_vector.parts () == 1 );
126
+ BOOST_CHECK_EQUAL (distributed_vector.size (), distributed_vector.part_size (0 ));
127
+
128
+ // need to finish since back() and front()
129
+ // use different (self-made) queues
130
+ distributed_queue.finish ();
131
+ BOOST_CHECK_EQUAL (distributed_vector.back (), value);
132
+ BOOST_CHECK_EQUAL (distributed_vector.front (), value);
133
+
134
+ BOOST_CHECK (distributed_equal (distributed_vector, value, distributed_queue));
135
+ }
136
+
104
137
BOOST_AUTO_TEST_CASE (host_iterator_ctor)
105
138
{
106
139
// construct distributed::command_queue
@@ -164,6 +197,15 @@ BOOST_AUTO_TEST_CASE(copy_ctor)
164
197
> distributed_vector_copy3 (
165
198
distributed_vector, distributed_queue2
166
199
);
200
+ bc::distributed::vector<bc::int_> distributed_vector_copy4 (
201
+ distributed_vector, distributed_queue1
202
+ );
203
+ bc::distributed::vector<
204
+ bc::int_,
205
+ bc::distributed::default_weight_func, bc::pinned_allocator<bc::int_>
206
+ > distributed_vector_copy5 (
207
+ distributed_vector, distributed_queue1
208
+ );
167
209
168
210
BOOST_CHECK (
169
211
distributed_equal (distributed_vector, value, distributed_queue1)
@@ -177,6 +219,12 @@ BOOST_AUTO_TEST_CASE(copy_ctor)
177
219
BOOST_CHECK (
178
220
distributed_equal (distributed_vector_copy3, value, distributed_queue2)
179
221
);
222
+ BOOST_CHECK (
223
+ distributed_equal (distributed_vector_copy4, value, distributed_queue1)
224
+ );
225
+ BOOST_CHECK (
226
+ distributed_equal (distributed_vector_copy5, value, distributed_queue1)
227
+ );
180
228
}
181
229
182
230
BOOST_AUTO_TEST_CASE (at)
@@ -247,4 +295,48 @@ BOOST_AUTO_TEST_CASE(subscript_operator)
247
295
);
248
296
}
249
297
298
+ BOOST_AUTO_TEST_CASE (swap)
299
+ {
300
+ // construct distributed::command_queue
301
+ bc::distributed::command_queue distributed_queue1 =
302
+ get_distributed_queue (queue);
303
+ // construct 2nd distributed::command_queue
304
+ bc::distributed::command_queue distributed_queue2 =
305
+ get_distributed_queue (queue, 2 );
306
+
307
+ bc::int_ value1 = -88 ;
308
+ bc::int_ value2 = 99 ;
309
+ size_t size1 = 64 ;
310
+ size_t size2 = 48 ;
311
+
312
+ bc::distributed::vector<bc::int_> distributed_vector1 (
313
+ size1, value1, distributed_queue1
314
+ );
315
+ bc::distributed::vector<bc::int_> distributed_vector2 (
316
+ size2, value2, distributed_queue2
317
+ );
318
+
319
+ BOOST_CHECK_EQUAL (distributed_vector1.size (), size1);
320
+ BOOST_CHECK (
321
+ distributed_equal (distributed_vector1, value1, distributed_queue1)
322
+ );
323
+ BOOST_CHECK_EQUAL (distributed_vector2.size (), size2);
324
+ BOOST_CHECK (
325
+ distributed_equal (distributed_vector2, value2, distributed_queue2)
326
+ );
327
+ distributed_queue1.finish ();
328
+ distributed_queue2.finish ();
329
+
330
+ distributed_vector1.swap (distributed_vector2);
331
+
332
+ BOOST_CHECK_EQUAL (distributed_vector1.size (), size2);
333
+ BOOST_CHECK (
334
+ distributed_equal (distributed_vector1, value2, distributed_queue2)
335
+ );
336
+ BOOST_CHECK_EQUAL (distributed_vector2.size (), size1);
337
+ BOOST_CHECK (
338
+ distributed_equal (distributed_vector2, value1, distributed_queue1)
339
+ );
340
+ }
341
+
250
342
BOOST_AUTO_TEST_SUITE_END ()
0 commit comments