| 3296 | |
| 3297 | template<typename Traits> |
| 3298 | bool full_api() |
| 3299 | { |
| 3300 | // A simple test that exercises the full public API (just to make sure every function is implemented |
| 3301 | // and works on at least the most basic level) |
| 3302 | |
| 3303 | // enqueue(T const&) |
| 3304 | { |
| 3305 | ConcurrentQueue<Copyable, Traits> q; |
| 3306 | Copyable original(12345); |
| 3307 | ASSERT_OR_FAIL(q.enqueue(original)); |
| 3308 | Copyable item(0); |
| 3309 | ASSERT_OR_FAIL(q.try_dequeue(item)); |
| 3310 | ASSERT_OR_FAIL(item.id == 12345); |
| 3311 | ASSERT_OR_FAIL(item.copied); |
| 3312 | ASSERT_OR_FAIL(!q.try_dequeue(item)); |
| 3313 | } |
| 3314 | |
| 3315 | // enqueue(T&&) |
| 3316 | { |
| 3317 | ConcurrentQueue<Moveable, Traits> q; |
| 3318 | ASSERT_OR_FAIL(q.enqueue(Moveable(12345))); |
| 3319 | Moveable item(0); |
| 3320 | ASSERT_OR_FAIL(q.try_dequeue(item)); |
| 3321 | ASSERT_OR_FAIL(item.id == 12345); |
| 3322 | ASSERT_OR_FAIL(item.moved); |
| 3323 | ASSERT_OR_FAIL(!item.copied); |
| 3324 | ASSERT_OR_FAIL(!q.try_dequeue(item)); |
| 3325 | } |
| 3326 | { |
| 3327 | ConcurrentQueue<Moveable, Traits> q; |
| 3328 | Moveable original(12345); |
| 3329 | ASSERT_OR_FAIL(q.enqueue(std::move(original))); |
| 3330 | Moveable item(0); |
| 3331 | ASSERT_OR_FAIL(q.try_dequeue(item)); |
| 3332 | ASSERT_OR_FAIL(item.id == 12345); |
| 3333 | ASSERT_OR_FAIL(item.moved); |
| 3334 | ASSERT_OR_FAIL(!item.copied); |
| 3335 | ASSERT_OR_FAIL(!q.try_dequeue(item)); |
| 3336 | } |
| 3337 | { |
| 3338 | ConcurrentQueue<Copyable, Traits> q; |
| 3339 | ASSERT_OR_FAIL(q.enqueue(Copyable(12345))); |
| 3340 | Copyable item(0); |
| 3341 | ASSERT_OR_FAIL(q.try_dequeue(item)); |
| 3342 | ASSERT_OR_FAIL(item.id == 12345); |
| 3343 | ASSERT_OR_FAIL(item.copied); |
| 3344 | ASSERT_OR_FAIL(!q.try_dequeue(item)); |
| 3345 | } |
| 3346 | |
| 3347 | // enqueue(Token, T const&) |
| 3348 | { |
| 3349 | ConcurrentQueue<Copyable, Traits> q; |
| 3350 | ProducerToken t(q); |
| 3351 | Copyable original(12345); |
| 3352 | ASSERT_OR_FAIL(q.enqueue(t, original)); |
| 3353 | Copyable item(0); |
| 3354 | ASSERT_OR_FAIL(q.try_dequeue(item)); |
| 3355 | ASSERT_OR_FAIL(item.id == 12345); |
nothing calls this directly
no test coverage detected