#include #include #include #include forward_cqueue(cqueue_pnt, struct Point); struct Point { int x, y; } typedef Point; int point_cmp(const Point* a, const Point* b) { int c = c_default_cmp(&a->x, &b->x); return c ? c : c_default_cmp(&a->y, &b->y); } #define i_val Point #define i_cmp point_cmp #define i_opt c_is_forward #define i_tag pnt #include #define i_type IQ #define i_val int #include int main() { int n = 50000000; stc64_t rng = stc64_new((uint64_t)time(NULL)); stc64_uniform_t dist = stc64_uniform_new(0, n); c_auto (IQ, Q) { // Push 50'000'000 random numbers onto the queue. c_forrange (n) IQ_push(&Q, (int)stc64_uniform(&rng, &dist)); // Push or pop on the queue 50 million times printf("befor: size %" c_ZI ", capacity %" c_ZI "\n", IQ_size(&Q), IQ_capacity(&Q)); c_forrange (n) { int r = (int)stc64_uniform(&rng, &dist); if (r & 3) IQ_push(&Q, r); else IQ_pop(&Q); } printf("after: size %" c_ZI ", capacity %" c_ZI "\n", IQ_size(&Q), IQ_capacity(&Q)); } }