added find, more tests

This commit is contained in:
2026-08-18 09:08:01 -05:00
parent 0ee2fe8874
commit a1862f54c1
9 changed files with 69 additions and 19 deletions
+1
View File
@@ -1 +1,2 @@
test_array
test_symbol
-5
View File
@@ -1,5 +0,0 @@
CC = zig cc
CFLAGS = -O2 -std=c23 #-Wall -Wextra -Wno-c2x-extensions
test_array:
$(CC) $(CFLAGS) -o test_array test_array.c libkeke_array.c
./test_array
+10
View File
@@ -0,0 +1,10 @@
test_all: && test_array test_symbol
test_array:
zig cc -o test_array -std=c23 test_array.c libkeke_array.c libkeke_utils.c
./test_array
test_symbol:
zig cc -o test_symbol -std=c23 test_symbol.c libkeke_symbol.c
./test_symbol
+9 -3
View File
@@ -19,11 +19,9 @@ typedef struct {
#define ARRAY_GET(array, i) ((array)->content + (array)->type_size * (i))
KekeArray *keke_array_alloc(size_t initial_len, size_t type_size) {
//if(initial_len == 0) initial_len = 1;
KekeArray *array = malloc(sizeof(*array));
array->len = initial_len;
size_t max_len = 1;
while(initial_len >>= 1) max_len <<= 1;
size_t max_len = next_power_of_two(initial_len);
array->type_size = type_size;
array->max_len = max_len;
@@ -170,6 +168,14 @@ bool keke_array_all(KekeArray *array, Test_func test) {
return ret;
}
void *keke_array_find(KekeArray *array, Test_func test) {
for(size_t i = 0; i < array->len; i++) {
void *current = ARRAY_GET(array, i);
if(test(current, i, array)) return current;
}
return NULL;
}
KekeArray *keke_array_filter(KekeArray *array, Test_func test) {
KekeArray *ret = keke_array_alloc(0, array->type_size);
for(size_t i = 0; i < array->len; i++) {
+1 -1
View File
@@ -40,7 +40,7 @@ void keke_array_reverse(KekeArray *array);
typedef bool (*Test_func)(void *, size_t, KekeArray *);
bool keke_array_some(KekeArray *array, Test_func test);
bool keke_array_all(KekeArray *array, Test_func test);
void *keke_array_find(KekeArray *array, Test_func test);
KekeArray *keke_array_filter(KekeArray *array, Test_func test);
typedef void (*B_func)(void *, void *);
+17
View File
@@ -0,0 +1,17 @@
#include <stddef.h>
void keke_swap(void *a, void *b, size_t size) {
char *aa = a;
char *bb = b;
for(size_t i = 0; i < size; i++) {
aa[i] ^= bb[i];
bb[i] ^= aa[i];
aa[i] ^= bb[i];
}
}
size_t next_power_of_two(size_t s) {
size_t t = 1;
while(t < s) t <<= 1;
return t;
}
+3 -9
View File
@@ -5,14 +5,8 @@
#define BOOL_PRETTY(b) (b ? "True" : "False")
static void keke_swap(void *a, void *b, size_t size) {
char *aa = a;
char *bb = b;
for(size_t i = 0; i < size; i++) {
aa[i] ^= bb[i];
bb[i] ^= aa[i];
aa[i] ^= bb[i];
}
}
void keke_swap(void *, void *, size_t);
size_t next_power_of_two(size_t s);
#endif
+8 -1
View File
@@ -22,6 +22,10 @@ void sub4(void *i, size_t, KekeArray *) {
bool heart(void *i, size_t, KekeArray *) {
return *(int *)i < 3;
}
bool lt2(void *i, size_t, KekeArray *) {
return *(int *)i < 2;
}
void add(void *vx, void *vacc) {
int *x = (int *)vx;
@@ -120,6 +124,10 @@ int main(void) {
keke_array_foreach(array4, output);
puts("\n");
int *l = keke_array_find(array2, lt2);
puts("Expected value:\n1");
printf("%d\n\n", *l);
j = 0;
keke_array_reduce(array4, add, &j);
printf("Expected value:\n7\n%d\n\n", j);
@@ -127,6 +135,5 @@ int main(void) {
keke_array_free(array);
keke_array_free(array2);
keke_array_free(array4);
puts("\n");
return 0;
}
+20
View File
@@ -0,0 +1,20 @@
#include <stdio.h>
#include "libkeke_symbol.h"
int main(void) {
KekeSymbol s = keke_new_symbol();
if(s == KEKE_NULL_SYMBOL) {
puts("s != KEKE_NULL_SYMBOL\nTEST FAILED");
return 1;
} else {
puts("s != KEKE_NULL_SYMBOL\nTEST PASSED\n");
}
KekeSymbol t = keke_new_symbol();
if(s == t) {
puts("s == t\nTEST FAILED");
return 1;
} else {
puts("s != t\nTEST PASSED\n");
}
}