| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- /*
- * Copyright © 2012 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
- #include <stdlib.h>
- #include <assert.h>
- #include <string.h>
- #include "wayland-util.h"
- #include "wayland-private.h"
- #include "test-runner.h"
- TEST(array_init)
- {
- struct wl_array array;
- /* fill with garbage to emulate uninitialized memory */
- memset(&array, 0x57, sizeof array);
- wl_array_init(&array);
- assert(array.size == 0);
- assert(array.alloc == 0);
- assert(array.data == 0);
- }
- TEST(array_release)
- {
- struct wl_array array;
- void *ptr;
- wl_array_init(&array);
- ptr = wl_array_add(&array, 1);
- assert(ptr != NULL);
- assert(array.data != NULL);
- wl_array_release(&array);
- assert(array.data == WL_ARRAY_POISON_PTR);
- }
- TEST(array_add)
- {
- struct mydata {
- unsigned int a;
- unsigned int b;
- double c;
- double d;
- };
- const unsigned int iterations = 1321; /* this is arbitrary */
- const int datasize = sizeof(struct mydata);
- struct wl_array array;
- size_t i;
- wl_array_init(&array);
- /* add some data */
- for (i = 0; i < iterations; i++) {
- struct mydata* ptr = wl_array_add(&array, datasize);
- assert(ptr);
- assert((i + 1) * datasize == array.size);
- ptr->a = i * 3;
- ptr->b = 20000 - i;
- ptr->c = (double)(i);
- ptr->d = (double)(i / 2.);
- }
- /* verify the data */
- for (i = 0; i < iterations; ++i) {
- struct mydata* check = (struct mydata*)array.data + i;
- assert(check->a == i * 3);
- assert(check->b == 20000 - i);
- assert(check->c == (double)(i));
- assert(check->d == (double)(i/2.));
- }
- wl_array_release(&array);
- }
- TEST(array_copy)
- {
- const int iterations = 1529; /* this is arbitrary */
- struct wl_array source;
- struct wl_array copy;
- int i;
- wl_array_init(&source);
- /* add some data */
- for (i = 0; i < iterations; i++) {
- int *p = wl_array_add(&source, sizeof(int));
- assert(p);
- *p = i * 2 + i;
- }
- /* copy the array */
- wl_array_init(©);
- wl_array_copy(©, &source);
- /* check the copy */
- for (i = 0; i < iterations; i++) {
- int *s = (int *)source.data + i;
- int *c = (int *)copy.data + i;
- assert(*s == *c); /* verify the values are the same */
- assert(s != c); /* ensure the addresses aren't the same */
- assert(*s == i * 2 + i); /* sanity check */
- }
- wl_array_release(&source);
- wl_array_release(©);
- }
- TEST(array_for_each)
- {
- static const int elements[] = { 77, 12, 45192, 53280, 334455 };
- struct wl_array array;
- int *p;
- int i;
- wl_array_init(&array);
- for (i = 0; i < 5; i++) {
- p = wl_array_add(&array, sizeof *p);
- assert(p);
- *p = elements[i];
- }
- i = 0;
- wl_array_for_each(p, &array) {
- assert(*p == elements[i]);
- i++;
- }
- assert(i == 5);
- wl_array_release(&array);
- }
|