예제 #1
0
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);
}
예제 #2
0
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);
}
예제 #3
0
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);
}
예제 #4
0
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);
}
예제 #5
0
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);
}
예제 #6
0
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);
}
예제 #7
0
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;
}
예제 #8
0
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
}
예제 #9
0
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);
}
예제 #10
0
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);
}
예제 #11
0
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);
}
예제 #12
0
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);
}
예제 #13
0
파일: read-write.c 프로젝트: fywtat/curie
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;
}
예제 #14
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);
}
예제 #15
0
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);
}
예제 #16
0
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);
}