From: Peter Hutterer Date: Wed, 26 Jun 2013 06:48:21 +0000 (+1000) Subject: test: add more event queue tests X-Git-Tag: libevdev-0.2~88 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8f83bc6ca25c2fb3b485efaf6ee94371286d3815;p=platform%2Fupstream%2Flibevdev.git test: add more event queue tests Signed-off-by: Peter Hutterer --- diff --git a/test/test-int-queue.c b/test/test-int-queue.c index 6e34bae..6bc0a6b 100644 --- a/test/test-int-queue.c +++ b/test/test-int-queue.c @@ -135,6 +135,200 @@ START_TEST(test_queue_pop) } END_TEST +START_TEST(test_queue_peek) +{ + struct libevdev dev = {0}; + struct input_event ev, *e, tmp; + int rc; + + queue_alloc(&dev, 0); + rc = queue_peek(&dev, 0, &ev); + ck_assert_int_eq(rc, 1); + + queue_alloc(&dev, 2); + e = queue_push(&dev); + memset(e, 0xab, sizeof(*e)); + + rc = queue_peek(&dev, 0, &ev); + ck_assert_int_eq(rc, 0); + memset(&tmp, 0xab, sizeof(tmp)); + rc = memcmp(&tmp, &ev, sizeof(tmp)); + ck_assert_int_eq(rc, 0); + + ck_assert_int_eq(queue_num_elements(&dev), 1); + e = queue_push(&dev); + memset(e, 0xbc, sizeof(*e)); + + rc = queue_peek(&dev, 1, &ev); + ck_assert_int_eq(rc, 0); + memset(&tmp, 0xbc, sizeof(tmp)); + rc = memcmp(&tmp, &ev, sizeof(tmp)); + ck_assert_int_eq(rc, 0); + + rc = queue_peek(&dev, 0, &ev); + ck_assert_int_eq(rc, 0); + memset(&tmp, 0xab, sizeof(tmp)); + rc = memcmp(&tmp, &ev, sizeof(tmp)); + ck_assert_int_eq(rc, 0); + + ck_assert_int_eq(queue_num_elements(&dev), 2); + + queue_free(&dev); +} +END_TEST + +START_TEST(test_queue_shift) +{ + struct libevdev dev = {0}; + struct input_event ev, *first, *second, e1, e2; + int rc; + + ck_assert_int_eq(queue_shift(&dev, &ev), 1); + + queue_alloc(&dev, 10); + ck_assert_int_eq(queue_shift(&dev, &ev), 1); + + first = queue_push(&dev); + ck_assert(first != NULL); + memset(first, 0xab, sizeof(*first)); + + e1 = *first; + + second = queue_push(&dev); + ck_assert(second != NULL); + memset(second, 0x12, sizeof(*second)); + + e2 = *second; + + rc = queue_shift(&dev, &ev); + ck_assert_int_eq(rc, 0); + rc = memcmp(&ev, &e1, sizeof(ev)); + ck_assert_int_eq(rc, 0); + + rc = queue_shift(&dev, &ev); + ck_assert_int_eq(rc, 0); + rc = memcmp(&ev, &e2, sizeof(ev)); + ck_assert_int_eq(rc, 0); + + ck_assert_int_eq(queue_shift(&dev, &ev), 1); +} +END_TEST + +START_TEST(test_queue_shift_multiple) +{ + struct libevdev dev = {0}; + struct input_event ev, *first, *second, e1, e2; + struct input_event events[5]; + int rc; + + ck_assert_int_eq(queue_shift_multiple(&dev, 1, &ev), 0); + ck_assert_int_eq(queue_shift_multiple(&dev, 0, &ev), 0); + + queue_alloc(&dev, 10); + ck_assert_int_eq(queue_shift_multiple(&dev, 1, &ev), 0); + ck_assert_int_eq(queue_shift_multiple(&dev, 0, &ev), 0); + + first = queue_push(&dev); + ck_assert(first != NULL); + memset(first, 0xab, sizeof(*first)); + e1 = *first; + + second = queue_push(&dev); + ck_assert(second != NULL); + memset(second, 0x12, sizeof(*second)); + e2 = *second; + + rc = queue_shift_multiple(&dev, 5, events); + ck_assert_int_eq(rc, 2); + rc = memcmp(&events[0], &e1, sizeof(ev)); + ck_assert_int_eq(rc, 0); + rc = memcmp(&events[1], &e2, sizeof(ev)); + ck_assert_int_eq(rc, 0); + + first = queue_push(&dev); + ck_assert(first != NULL); + memset(first, 0xab, sizeof(*first)); + e1 = *first; + + second = queue_push(&dev); + ck_assert(second != NULL); + memset(second, 0x12, sizeof(*second)); + e2 = *second; + + rc = queue_shift_multiple(&dev, 1, events); + ck_assert_int_eq(rc, 1); + rc = memcmp(&events[0], &e1, sizeof(ev)); + ck_assert_int_eq(rc, 0); + + rc = queue_shift_multiple(&dev, 1, events); + ck_assert_int_eq(rc, 1); + rc = memcmp(&events[0], &e2, sizeof(ev)); + ck_assert_int_eq(rc, 0); + + ck_assert_int_eq(queue_shift_multiple(&dev, 1, events), 0); +} +END_TEST + +START_TEST(test_queue_next_element) +{ + struct libevdev dev = {0}; + struct input_event ev, *first, *second; + int rc; + + queue_alloc(&dev, 0); + first = queue_next_element(&dev); + ck_assert(first == NULL); + + queue_alloc(&dev, 2); + first = queue_next_element(&dev); + ck_assert(first != NULL); + memset(first, 0xab, sizeof(*first)); + + second = queue_next_element(&dev); + ck_assert(second != NULL); + memset(second, 0xbc, sizeof(*second)); + + /* queue_next_element does not advance, so we overwrite */ + memset(&ev, 0xbc, sizeof(ev)); + rc = memcmp(&ev, first, sizeof(ev)); + ck_assert_int_eq(rc, 0); + + ck_assert_int_eq(queue_num_elements(&dev), 0); + + first = queue_next_element(&dev); + ck_assert(first != NULL); + memset(first, 0xab, sizeof(*first)); + + queue_set_num_elements(&dev, 1); + ck_assert_int_eq(queue_num_elements(&dev), 1); + + second = queue_next_element(&dev); + ck_assert(second != NULL); + memset(second, 0xbc, sizeof(*second)); + + memset(&ev, 0xab, sizeof(ev)); + rc = memcmp(&ev, first, sizeof(ev)); + ck_assert_int_eq(rc, 0); + + queue_free(&dev); +} +END_TEST + +START_TEST(test_queue_set_num_elements) +{ + struct libevdev dev = {0}; + + queue_alloc(&dev, 0); + ck_assert_int_eq(queue_set_num_elements(&dev, 1), 1); + + queue_alloc(&dev, 2); + ck_assert_int_eq(queue_set_num_elements(&dev, 3), 1); + ck_assert_int_eq(queue_set_num_elements(&dev, 2), 0); + + queue_free(&dev); +} +END_TEST + Suite * queue_suite(void) { @@ -145,9 +339,20 @@ queue_suite(void) tcase_add_test(tc, test_queue_sizes); suite_add_tcase(s, tc); - tc= tcase_create("Queue push/pop"); + tc = tcase_create("Queue push/pop/peek"); tcase_add_test(tc, test_queue_push); tcase_add_test(tc, test_queue_pop); + tcase_add_test(tc, test_queue_peek); + suite_add_tcase(s, tc); + + tc = tcase_create("Queue shift"); + tcase_add_test(tc, test_queue_shift); + tcase_add_test(tc, test_queue_shift_multiple); + suite_add_tcase(s, tc); + + tc = tcase_create("Queue next elem"); + tcase_add_test(tc, test_queue_next_element); + tcase_add_test(tc, test_queue_set_num_elements); suite_add_tcase(s, tc); return s;