/* * Copyright © 2020 Benjamin Otte * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . * * Authors: Benjamin Otte */ #include #define GDK_ARRAY_NO_UNDEF #include "../../gdk/gdkarrayimpl.c" static void gdk_array(test_simple) (void) { GdkArray v; gsize i; gdk_array(init) (&v); for (i = 0; i < 1000; i++) { g_assert_cmpint (gdk_array(get_size) (&v), ==, i); g_assert_cmpint (gdk_array(get_size) (&v), <=, gdk_array(get_capacity) (&v)); gdk_array(append) (&v, i); #ifdef GDK_ARRAY_NULL_TERMINATED g_assert_cmpint (*gdk_array(index) (&v, gdk_array(get_size) (&v)), ==, 0); #endif } g_assert_cmpint (gdk_array(get_size) (&v), ==, i); g_assert_cmpint (gdk_array(get_size) (&v), <=, gdk_array(get_capacity) (&v)); for (i = 0; i < 1000; i++) { g_assert_cmpint (gdk_array(get) (&v, i), ==, i); } gdk_array(clear) (&v); } static void gdk_array(test_splice) (void) { GdkArray v; gsize i, j, sum; gsize pos, add, remove; int additions[4] = { 0, 1, 2, 3 }; gdk_array(init) (&v); sum = 0; for (i = 0; i < 1000; i++) { gsize old_size = gdk_array(get_size) (&v); pos = g_test_rand_int_range (0, old_size + 1); g_assert_true (pos <= old_size); remove = g_test_rand_int_range (0, 4); remove = MIN (remove, old_size - pos); add = g_test_rand_int_range (0, 4); for (j = 0; j < remove; j++) sum -= gdk_array(get) (&v, pos + j); for (j = 0; j < add; j++) sum += ++additions[j]; gdk_array(splice) (&v, pos, remove, FALSE, additions, add); { gsize total = 0; for (j = 0; j < gdk_array(get_size) (&v); j++) total += gdk_array(get) (&v, j); g_assert_cmpint (total, ==, sum); } g_assert_cmpint (gdk_array(get_size) (&v), ==, old_size + add - remove); g_assert_cmpint (gdk_array(get_size) (&v), <=, gdk_array(get_capacity) (&v)); #ifdef GDK_ARRAY_NULL_TERMINATED if (gdk_array(get_size) (&v)) g_assert_cmpint (*gdk_array(index) (&v, gdk_array(get_size) (&v)), ==, 0); #endif for (j = 0; j < add; j++) g_assert_cmpint (gdk_array(get) (&v, pos + j), ==, additions[j]); } for (i = 0; i < gdk_array(get_size) (&v); i++) { sum -= gdk_array(get) (&v, i); } g_assert_cmpint (sum, ==, 0); gdk_array(clear) (&v); } #undef _T_ #undef GdkArray #undef gdk_array_paste_more #undef gdk_array_paste #undef gdk_array #undef GDK_ARRAY_REAL_SIZE #undef GDK_ARRAY_ELEMENT_TYPE #undef GDK_ARRAY_NAME #undef GDK_ARRAY_TYPE_NAME #undef GDK_ARRAY_PREALLOC #undef GDK_ARRAY_NULL_TERMINATED