static void a_filter_test(void) { printsln((String)__func__); Array ac, ac2, ex; IntPair ip; ac = a_create(3, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(ac, 0, &ip); ip = make_int_pair(2, 20); a_set(ac, 1, &ip); ip = make_int_pair(3, 30); a_set(ac, 2, &ip); ac2 = a_filter(ac, a_eq2, NULL); ex = a_create(1, sizeof(IntPair)); ip = make_int_pair(2, 20); a_set(ex, 0, &ip); a_check_expect(ac2, ex); a_free(ac); a_free(ac2); a_free(ex); }
static void a_reverse_test(void) { printsln((String)__func__); Array ac, ex; ac = ia_of_string("1, 2, 3"); ex = ia_of_string("3, 2, 1"); a_reverse(ac); a_check_expect(ac, ex); a_free(ac); a_free(ex); ac = ia_of_string("1, 2, 3, 4"); ex = ia_of_string("4, 3, 2, 1"); a_reverse(ac); a_check_expect(ac, ex); a_free(ac); a_free(ex); ac = ia_of_string("1"); ex = ia_of_string("1"); a_reverse(ac); a_check_expect(ac, ex); a_free(ac); a_free(ex); ac = a_create(0, 1); ex = a_create(0, 1); a_reverse(ac); a_check_expect(ac, ex); a_free(ac); a_free(ex); }
static void a_each_test(void) { printsln((String)__func__); Array ac, ex; IntPair ip; ac = a_create(3, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(ac, 0, &ip); ip = make_int_pair(2, 20); a_set(ac, 1, &ip); ip = make_int_pair(3, 30); a_set(ac, 2, &ip); // a_println(ac, print_int_pair); a_each(ac, a_inc_in_place, NULL); // a_println(acm, print_int_pair); ex = a_create(3, sizeof(IntPair)); ip = make_int_pair(2, 11); a_set(ex, 0, &ip); ip = make_int_pair(3, 21); a_set(ex, 1, &ip); ip = make_int_pair(4, 31); a_set(ex, 2, &ip); a_check_expect(ac, ex); a_free(ac); a_free(ex); }
static void a_map3_test(void) { printsln((String)__func__); Array a1, a2, a3, ac, ex; IntTriple it; a1 = ia_of_string("1, 2, 3"); a2 = ia_of_string("10, 20, 30"); a3 = ia_of_string("100, 200, 300"); ac = a_map3(a1, a2, a3, triple_i_j_k, sizeof(IntTriple), NULL); a_free(a1); a_free(a2); a_free(a3); ex = a_create(3, sizeof(IntTriple)); it = make_int_triple(1, 10, 100); a_set(ex, 0, &it); it = make_int_triple(2, 20, 200); a_set(ex, 1, &it); it = make_int_triple(3, 30, 300); a_set(ex, 2, &it); a_check_expect(ac, ex); // map triple to third element Array ak = a_map(ac, triple_k, sizeof(int), NULL); ia_println(ak); a_free(ak); a_free(ac); a_free(ex); }
static void a_map2_test(void) { printsln((String)__func__); Array a1, a2, ac, ex; IntPair ip; a1 = ia_of_string("1, 2, 3"); a2 = ia_of_string("10, 20, 30"); ac = a_map2(a1, a2, pair_i_j, sizeof(IntPair), NULL); a_free(a1); a_free(a2); ex = a_create(3, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(ex, 0, &ip); ip = make_int_pair(2, 20); a_set(ex, 1, &ip); ip = make_int_pair(3, 30); a_set(ex, 2, &ip); a_check_expect(ac, ex); a_free(ac); a_free(ex); }
static void a_map_test(void) { printsln((String)__func__); Array ac, acm, ex; IntPair ip; ac = a_create(3, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(ac, 0, &ip); ip = make_int_pair(2, 20); a_set(ac, 1, &ip); ip = make_int_pair(3, 30); a_set(ac, 2, &ip); // a_println(ac, print_int_pair); acm = a_map(ac, a_inc, sizeof(IntPair), NULL); // a_println(acm, print_int_pair); ex = a_create(3, sizeof(IntPair)); ip = make_int_pair(2, 11); a_set(ex, 0, &ip); ip = make_int_pair(3, 21); a_set(ex, 1, &ip); ip = make_int_pair(4, 31); a_set(ex, 2, &ip); a_check_expect(acm, ex); a_free(acm); a_free(ex); ex = a_create(3, sizeof(int)); int i = 1; a_set(ex, 0, &i); i = 2; a_set(ex, 1, &i); i = 3; a_set(ex, 2, &i); acm = a_map(ac, a_int_pair_i, sizeof(int), NULL); a_check_expect(acm, ex); ia_println(acm); a_free(ex); a_free(acm); a_free(ac); }
Array a_of_l(List list) { assert_argument_not_null(list); int n = l_length(list); int i = 0; Array result = a_create(n, list->s); for (ListNode *node = list->first; node != NULL; node = node->next, i++) { Any element = node + 1; a_set(result, i, element); } return result; }
static void a_create_test(void) { printsln((String)__func__); Array a; Address addr; a = a_create(3, sizeof(Address)); addr = make_address("Fred", "Oyster", "Hannover"); a_set(a, 0, &addr); addr = make_address("Frida", "Qwirin", "Hannover"); a_set(a, 1, &addr); addr = make_address("James", "Bond", "London"); a_set(a, 2, &addr); Address *pa = a_get(a, 0); // printsln(pa->firstname); check_expect_s(pa->firstname, "Fred"); pa = a_get(a, 1); // printsln(pa->firstname); check_expect_s(pa->city, "Hannover"); pa = a_get(a, 2); // printsln(pa->firstname); check_expect_s(pa->lastname, "Bond"); a_free(a); #if 0 Array ap = a_create(2, sizeof(Address*)); pa = &a; a_set(ap, 0, &pa); pa = &b; a_set(ap, 1, &pa); Address **ppa = a_get(ap, 0); printsln((*ppa)->firstname); ppa = a_get(ap, 1); printsln((*ppa)->firstname); #endif }
static void a_last_index_fn_test(void) { printsln((String)__func__); Array ac; IntPair ip; ac = a_create(3, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(ac, 0, &ip); ip = make_int_pair(2, 20); a_set(ac, 1, &ip); ip = make_int_pair(3, 30); a_set(ac, 2, &ip); // a_println(ac, print_int_pair); int state = 15; check_expect_i(a_last_index_fn(ac, j_is_gt, &state), 2); a_free(ac); }
static void a_fn_test(void) { printsln((String)__func__); Array ac, ex; IntPair ip; ac = a_fn(3, sizeof(IntPair), x_and_xsquare, NULL); ex = a_create(3, sizeof(IntPair)); ip = make_int_pair(0, 0); a_set(ex, 0, &ip); ip = make_int_pair(1, 1); a_set(ex, 1, &ip); ip = make_int_pair(2, 4); a_set(ex, 2, &ip); a_check_expect(ac, ex); a_free(ac); a_free(ex); }
static void a_foldr_test(void) { printsln((String)__func__); Array ac; IntPair ip; ac = a_create(3, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(ac, 0, &ip); ip = make_int_pair(2, 20); a_set(ac, 1, &ip); ip = make_int_pair(3, 30); a_set(ac, 2, &ip); int n = 0; a_foldr(ac, a_minus_j, &n); check_expect_i(n, 10 - (20 - (30 - 0))); a_free(ac); }
static void a_forall_test(void) { printsln((String)__func__); Array ac; IntPair ip; ac = a_create(3, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(ac, 0, &ip); ip = make_int_pair(2, 20); a_set(ac, 1, &ip); ip = make_int_pair(3, 30); a_set(ac, 2, &ip); // a_println(ac, print_int_pair); int state = 9; check_expect_b(a_forall(ac, j_is_gt, &state), true); state = 10; check_expect_b(a_forall(ac, j_is_gt, &state), false); a_free(ac); }
int cmain(void) { /* test the a_create() and a_close() functions */ int fd, i, j; char buffer[TESTDATA_SIZE]; fd = a_create ("to-curie-test-data", 0660); if (fd < 0) return 1; i = a_close(fd); if (i < 0) return 2; /* test the a_write() and a_open_write() functions */ fd = a_open_write ("to-curie-test-data"); if (fd < 0) return 3; i = a_write(fd, TESTDATA, (unsigned int)TESTDATA_SIZE); if (i < 0) return 4; if (i != TESTDATA_SIZE) return 5; /* close file descriptor */ i = a_close(fd); if (i < 0) return 6; /* test the a_read() and a_open_read() functions */ fd = a_open_read ("to-curie-test-data"); if (fd < 0) return 7; i = a_read (fd, buffer, (unsigned int)TESTDATA_SIZE); if (i < 0) return 8; if (i != TESTDATA_SIZE) return 9; for (j = 0; j < i; j++) { if (buffer[j] != TESTDATA[j]) return 10; } return 0; }
static void a_concat_test(void) { printsln((String)__func__); Array a1, a2, ac, ex; IntPair ip; a1 = a_create(3, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(a1, 0, &ip); ip = make_int_pair(2, 20); a_set(a1, 1, &ip); ip = make_int_pair(3, 30); a_set(a1, 2, &ip); a2 = a_create(2, sizeof(IntPair)); ip = make_int_pair(4, 40); a_set(a2, 0, &ip); ip = make_int_pair(5, 50); a_set(a2, 1, &ip); ac = a_concat(a1, a2); ex = a_create(5, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(ex, 0, &ip); ip = make_int_pair(2, 20); a_set(ex, 1, &ip); ip = make_int_pair(3, 30); a_set(ex, 2, &ip); ip = make_int_pair(4, 40); a_set(ex, 3, &ip); ip = make_int_pair(5, 50); a_set(ex, 4, &ip); a_check_expect(ac, ex); a_free(a1); a_free(a2); a_free(ac); a_free(ex); a1 = ia_of_string("10, 20, 30"); a2 = ia_of_string("1, 2, 3"); ac = a_concat(a1, a2); ex = ia_of_string("10, 20, 30, 1, 2, 3"); ia_check_expect(ac, ex); a_free(a1); a_free(a2); a_free(ac); a_free(ex); a1 = ia_range(-9, 0); a2 = ia_range(0, 10); ac = a_concat(a1, a2); ex = ia_range(-9, 10); ia_check_expect(ac, ex); a_free(a1); a_free(a2); a_free(ac); a_free(ex); a1 = ia_range(-9, 0); a2 = ia_range(0, 0); ac = a_concat(a1, a2); ex = ia_range(-9, 0); ia_check_expect(ac, ex); a_free(a1); a_free(a2); a_free(ac); a_free(ex); a1 = ia_range(0, 0); a2 = ia_range(0, 10); ac = a_concat(a1, a2); ex = ia_range(0, 10); ia_check_expect(ac, ex); a_free(a1); a_free(a2); a_free(ac); a_free(ex); a1 = ia_range(0, 0); a2 = ia_range(0, 0); ac = a_concat(a1, a2); ex = ia_range(0, 0); ia_check_expect(ac, ex); a_free(a1); a_free(a2); a_free(ac); a_free(ex); a1 = da_of_string("10, 20, 30"); a2 = da_of_string("1, 2, 3"); ac = a_concat(a1, a2); ex = da_of_string("10, 20, 30, 1, 2, 3"); da_check_within(ac, ex); a_free(a1); a_free(a2); a_free(ac); a_free(ex); a1 = da_range(-9, 0, 1); a2 = da_range(0, 10, 1); ac = a_concat(a1, a2); ex = da_range(-9, 10, 1); da_check_within(ac, ex); a_free(a1); a_free(a2); a_free(ac); a_free(ex); a1 = da_range(-9, 0, 1); a2 = da_range(0, 0, 1); ac = a_concat(a1, a2); ex = da_range(-9, 0, 1); da_check_within(ac, ex); a_free(a1); a_free(a2); a_free(ac); a_free(ex); a1 = da_range(0, 0, 1); a2 = da_range(0, 10, 1); ac = a_concat(a1, a2); ex = da_range(0, 10, 1); da_check_within(ac, ex); a_free(a1); a_free(a2); a_free(ac); a_free(ex); a1 = da_range(0, 0, 1); a2 = da_range(0, 0, 1); ac = a_concat(a1, a2); ex = da_range(0, 0, 1); da_check_within(ac, ex); a_free(a1); a_free(a2); a_free(ac); a_free(ex); }
static void a_sub_test(void) { printsln((String)__func__); Array a, ac, ex; IntPair ip; a = a_create(3, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(a, 0, &ip); ip = make_int_pair(2, 20); a_set(a, 1, &ip); ip = make_int_pair(3, 30); a_set(a, 2, &ip); a_println(a, print_int_pair); ex = a_create(2, sizeof(IntPair)); ip = make_int_pair(1, 10); a_set(ex, 0, &ip); ip = make_int_pair(2, 20); a_set(ex, 1, &ip); ac = a_sub(a, 0, 2); a_check_expect(ac, ex); ip = make_int_pair(2, 20); a_set(ex, 0, &ip); ip = make_int_pair(3, 30); a_set(ex, 1, &ip); a_free(ac); ac = a_sub(a, 1, 3); a_check_expect(ac, ex); a_free(a); a_free(ac); a_free(ex); Array array, array2, sub; array = ia_of_string("1 2 3 4"); sub = a_sub(array, 0, a_length(array)); ia_check_expect(array, sub); a_free(sub); sub = a_sub(array, -1, a_length(array) + 1); ia_check_expect(array, sub); a_free(sub); array2 = ia_of_string("2 3 4"); sub = a_sub(array, 1, a_length(array)); ia_check_expect(sub, array2); a_free(array2); a_free(sub); array2 = ia_of_string("2 3"); sub = a_sub(array, 1, a_length(array) - 1); ia_check_expect(sub, array2); a_free(array2); a_free(sub); array2 = ia_of_string(""); sub = a_sub(array, 1, 1); ia_check_expect(sub, array2); a_free(sub); sub = a_sub(array, 2, 1); ia_check_expect(sub, array2); a_free(array2); a_free(sub); a_free(array); array = da_range(1, 10, 1); sub = a_sub(array, 0, array->n); da_check_within(sub, array); a_free(sub); sub = a_sub(array, -10, array->n + 10); da_check_within(sub, array); a_free(sub); array2 = da_range(2, 10, 1); sub = a_sub(array, 1, array->n); da_check_within(sub, array2); a_free(array2); a_free(sub); array2 = da_range(2, 9, 1); sub = a_sub(array, 1, array->n - 1); da_check_within(sub, array2); a_free(array2); a_free(sub); array2 = da_range(0, 0, 1); sub = a_sub(array, 1, 1); da_check_within(sub, array2); a_free(sub); sub = a_sub(array, 2, 1); da_check_within(sub, array2); a_free(array2); a_free(sub); array2 = da_range(3, 6, 1); sub = a_sub(array, 2, 5); da_check_within(sub, array2); a_free(array2); a_free(sub); a_free(array); }
static void a_copy_test(void) { printsln((String)__func__); Array array, copy; Address a; array = a_create(3, sizeof(Address)); a = make_address("Fred", "Oyster", "Hannover"); a_set(array, 0, &a); a = make_address("Frida", "Qwirin", "Hannover"); a_set(array, 1, &a); a = make_address("James", "Bond", "London"); a_set(array, 2, &a); copy = a_copy(array); a_check_expect(copy, array); a_free(array); a_free(copy); array = ia_of_string("-1, -2, -3"); copy = a_copy(array); ia_check_expect(copy, array); a_free(array); a_free(copy); array = ia_of_string("10"); copy = a_copy(array); ia_check_expect(copy, array); a_free(array); a_free(copy); array = ia_of_string("100, -200"); copy = a_copy(array); ia_check_expect(copy, array); a_free(array); a_free(copy); array = ia_of_string(""); copy = a_copy(array); ia_check_expect(copy, array); a_free(array); a_free(copy); array = da_of_string("-1, -2, -3"); copy = a_copy(array); da_check_within(array, copy); a_free(array); a_free(copy); array = da_of_string("10"); copy = a_copy(array); da_check_within(array, copy); a_free(array); a_free(copy); array = da_of_string(" 100, -200 "); copy = a_copy(array); da_check_within(array, copy); a_free(array); a_free(copy); array = da_of_string(""); copy = a_copy(array); da_check_within(array, copy); a_free(array); a_free(copy); }