summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/array.c2
-rw-r--r--tests/array.c10
2 files changed, 10 insertions, 2 deletions
diff --git a/src/array.c b/src/array.c
index bde54a8..d810836 100644
--- a/src/array.c
+++ b/src/array.c
@@ -42,7 +42,7 @@
#define al_array_insert(array, i, item) \
do { \
al_array_reserve(array, (array).count + 1); \
- if (i != (array).count - 1) { \
+ if (i != (array).count) { \
al_memmove(al_array_offset(array, i + 1), al_array_offset(array, i), \
al_array_item_size(array) * ((array).count - i)); \
} \
diff --git a/tests/array.c b/tests/array.c
index 2c7746f..ddcc0d8 100644
--- a/tests/array.c
+++ b/tests/array.c
@@ -272,7 +272,7 @@ static bool array_test_insert(void)
struct test_t x = { .d = 5 };
struct test_t y = { .d = 2 };
- struct test_t z = { .d = 6 };
+ struct test_t z = { .d = 5464123 };
al_array_push(objects, (struct test_t){ .d = 7 });
al_array_push(objects, (struct test_t){ .d = 9 });
@@ -298,6 +298,14 @@ static bool array_test_insert(void)
al_array_free(objects);
+ al_array_init(objects);
+ al_array_push(objects, z);
+ al_array_insert(objects, 0, x);
+ AL_TEST_EQ(al_array_at(objects, 0).d, x.d, u32);
+ AL_TEST_EQ(al_array_at(objects, 1).d, z.d, u32);
+
+ al_array_free(objects);
+
AL_TEST_END();
}