#include "vec.h" #define foreach(name, i, s) \ for (name##_iter i = name##_begin(s); !name##_end(s, i); i = name##_next(i)) typedef summable_vec[summable type]() = vec[type](){ type <>_sum(struct <> *v) { type sum = 0; for (size_t i = 0; i < v->n; ++i) { sum += v->buf[i]; } return sum; } }; typedef ints = summable_vec[int](); int main() { struct ints ints = ints_create(0); for (int i = 0; i < 1000000; ++i) { ints_append(&ints, i); } assert(ints_len(&ints) == 1000000); for (int i = 0; i < 1000000; ++i) { int *v = ints_at(&ints, i); assert(v && *v == i); } int i = 0; foreach(ints, iter, &ints) { assert(iter && *iter == i); i++; } for (int i = 1000000 - 1; i >= 0; --i) { ints_remove(&ints, i); } assert(ints_len(&ints) == 0); ints_destroy(&ints); }