#include "sc_array.h"#include <stddef.h>#include <stdio.h>#include <stdlib.h>void example_str(void){const char *it;struct sc_array_str arr;sc_array_init(&arr);sc_array_add(&arr, "item0");sc_array_add(&arr, "item1");sc_array_add(&arr, "item2");printf("\nDelete first element \n\n");sc_array_del(&arr, 0);sc_array_foreach (&arr, it) {printf("Elem = %s \n", it);}sc_array_term(&arr);}void example_int(void){struct sc_array_int arr;sc_array_init(&arr);sc_array_add(&arr, 0);sc_array_add(&arr, 1);sc_array_add(&arr, 2);for (size_t i = 0; i < sc_array_size(&arr); i++) {printf("Elem = %d \n", arr.elems[i]);}sc_array_term(&arr);}static int compare(const void *a, const void *b){const int *x = a;const int *y = b;return *x - *y;}static void test1(void){int total = 0;struct sc_array_int arr;sc_array_init(&arr);sc_array_term(&arr);assert(sc_array_size(&arr) == 0);sc_array_add(&arr, 1);sc_array_add(&arr, 2);sc_array_add(&arr, 3);assert(arr.elems[0] == 1);assert(arr.elems[1] == 2);assert(arr.elems[2] == 3);sc_array_term(&arr);sc_array_init(&arr);sc_array_add(&arr, 3);sc_array_add(&arr, 4);sc_array_add(&arr, 5);assert(sc_array_size(&arr) == 3);sc_array_del(&arr, 0);assert(arr.elems[0] == 4);sc_array_del_last(&arr);assert(arr.elems[0] == 4);sc_array_add(&arr, 1);sc_array_add(&arr, 3);sc_array_add(&arr, 2);sc_array_add(&arr, 0);assert(sc_array_last(&arr) == 0);sc_array_sort(&arr, compare);for (size_t i = 0; i < sc_array_size(&arr); i++) {total += arr.elems[i];}assert(total == 10);for (size_t i = 0; i < sc_array_size(&arr); i++) {assert(arr.elems[i] == (int) i);}sc_array_term(&arr);}void test2(void){int val;struct sc_array_int arr;sc_array_init(&arr);sc_array_foreach (&arr, val) {assert(true);}sc_array_term(&arr);sc_array_init(&arr);sc_array_foreach (&arr, val) {assert(true);}sc_array_term(&arr);sc_array_init(&arr);sc_array_add(&arr, 1);assert(!sc_array_oom(&arr));sc_array_foreach (&arr, val) {assert(val == 1);}sc_array_del_last(&arr);sc_array_foreach (&arr, val) {assert(true);}sc_array_add(&arr, 1);assert(!sc_array_oom(&arr));sc_array_del_unordered(&arr, 0);sc_array_foreach (&arr, val) {assert(true);}sc_array_term(&arr);sc_array_init(&arr);sc_array_add(&arr, 100);sc_array_add(&arr, 200);sc_array_add(&arr, 300);assert(sc_array_at(&arr, 0) == 100);sc_array_del_last(&arr);assert(sc_array_at(&arr, 0) == 100);sc_array_del(&arr, 0);assert(sc_array_at(&arr, 0) == 200);sc_array_term(&arr);}void bounds_test(void){int total = 0;int val;struct sc_array_int arr;sc_array_init(&arr);sc_array_add(&arr, 3);sc_array_add(&arr, 4);sc_array_foreach (&arr, val) {total += val;}assert(total == 7);sc_array_term(&arr);total = 0;sc_array_init(&arr);sc_array_foreach (&arr, val) {total += val;}sc_array_foreach (&arr, val) {total += val;}assert(total == 0);sc_array_term(&arr);sc_array_init(&arr);sc_array_add(&arr, 0);sc_array_add(&arr, 1);sc_array_add(&arr, 2);sc_array_add(&arr, 4);sc_array_add(&arr, 3);sc_array_del(&arr, 3);for (size_t i = 0; i < sc_array_size(&arr); i++) {assert((int) i == arr.elems[i]);}sc_array_add(&arr, 3);sc_array_add(&arr, 4);sc_array_del(&arr, 3);for (size_t i = 0; i < sc_array_size(&arr); i++) {assert((int) i == arr.elems[i]);}sc_array_term(&arr);}#ifdef SC_HAVE_WRAPbool fail_realloc = false;void *__real_realloc(void *p, size_t size);void *__wrap_realloc(void *p, size_t n){if (fail_realloc) {return NULL;}return __real_realloc(p, n);}void fail_test(void){int tmp;int total = 0;struct sc_array_int arr;sc_array_init(&arr);sc_array_add(&arr, 0);assert(!sc_array_oom(&arr));sc_array_term(&arr);sc_array_init(&arr);assert(sc_array_size(&arr) == 0);sc_array_foreach (&arr, tmp) {assert(false);}size_t count = SC_ARRAY_MAX / sizeof(int);for (size_t i = 0; i < count + 5; i++) {sc_array_add(&arr, i);}assert(sc_array_oom(&arr));sc_array_del(&arr, 0);sc_array_add(&arr, 400);assert(sc_array_oom(&arr) == false);sc_array_term(&arr);sc_array_init(&arr);assert(sc_array_size(&arr) == 0);fail_realloc = true;sc_array_add(&arr, 0);assert(sc_array_oom(&arr));fail_realloc = false;sc_array_add(&arr, 222);assert(!sc_array_oom(&arr));sc_array_term(&arr);fail_realloc = true;sc_array_init(&arr);sc_array_add(&arr, 3);assert(sc_array_oom(&arr));fail_realloc = false;sc_array_add(&arr, 3);assert(sc_array_size(&arr) == 1);assert(sc_array_oom(&arr) == false);sc_array_term(&arr);sc_array_init(&arr);fail_realloc = true;sc_array_add(&arr, 222);assert(sc_array_oom(&arr));fail_realloc = false;sc_array_add(&arr, 3);sc_array_add(&arr, 4);sc_array_add(&arr, 5);assert(sc_array_size(&arr) == 3);sc_array_del(&arr, 0);assert(arr.elems[0] == 4);sc_array_del_last(&arr);assert(arr.elems[0] == 4);sc_array_add(&arr, 1);sc_array_add(&arr, 3);sc_array_add(&arr, 2);sc_array_add(&arr, 0);sc_array_sort(&arr, compare);for (size_t i = 0; i < sc_array_size(&arr); i++) {total += arr.elems[i];}assert(total == 10);for (size_t i = 0; i < sc_array_size(&arr); i++) {assert(arr.elems[i] == (int) i);}total = 0;sc_array_foreach (&arr, tmp) {total += tmp;}assert(total == 10);sc_array_sort(&arr, compare);sc_array_del_unordered(&arr, 0);assert(arr.elems[0] == 4);assert(sc_array_size(&arr) == 4);size_t cap = arr.cap;sc_array_clear(&arr);assert(cap == arr.cap);assert(sc_array_size(&arr) == 0);sc_array_add(&arr, 10);assert(sc_array_size(&arr) == 1);assert(arr.elems[0] == 10);sc_array_clear(&arr);assert(arr.size == 0);assert(arr.cap == cap);for (int i = 0; i < 100; i++) {sc_array_add(&arr, i * 514);}for (int i = 0; i < 100; i++) {assert(sc_array_at(&arr, i) == i * 514);}cap = arr.cap;sc_array_clear(&arr);assert(arr.size == 0);assert(arr.cap == cap);sc_array_term(&arr);}#elsevoid fail_test(void){}#endifint main(int argc, char *argv[]){(void) argc;(void) argv;example_str();example_int();test1();test2();fail_test();bounds_test();return 0;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。