+++ /dev/null
-static int testarray_from_lit(void);
-static int testarray_append_lit(void);
-static int testarray_prepend_lit(void);
-
-static void testLits(void) {
- testing(array_from_lit);
- ok1(testarray_from_lit());
-
- testing(testarray_append_lit);
- ok1(testarray_append_lit());
-
- testing(testarray_prepend_lit);
- ok1(testarray_prepend_lit());
-}
-
-static int testarray_from_lit(void) {
- #ifndef ARRAY_USE_TALLOC
- array_char a = array_new();
- #else
- array_char a = array_new(NULL);
- #endif
- size_t testsPassed = 0;
- size_t len = 0;
-
- @forEachRandomString
- /* Test @i */
- array_from_lit(a, @str);
- len = strlen(@str);
- if (len != sizeof(@str)-1)
- goto end;
- if (a.size != len)
- goto end;
- if (a.size > a.alloc)
- goto end;
- if (strcmp(a.item, @str))
- goto end;
- array_free(a);
- #ifndef ARRAY_USE_TALLOC
- array_init(a);
- #else
- array_init(a, NULL);
- #endif
- testsPassed++;
- @end
-
-end:
- array_free(a);
- return testsPassed == @amount;
-}
-
-typedef struct {
- char *item;
- size_t size;
-} testLits_string;
-
-static int testarray_append_lit(void) {
- #ifndef ARRAY_USE_TALLOC
- array_char a = array_new();
- array(testLits_string) strings = array_new();
- #else
- array_char a = array_new(NULL);
- array(testLits_string) strings = array_new(NULL);
- #endif
- size_t testsPassed = 0;
- size_t oldSize;
- testLits_string append;
- size_t offs = 0;
-
- @forEachRandomString
- /* Test @i */
- append.size = sizeof(@str)-1;
- oldSize = a.size;
- array_append_lit(a, @str);
- if (a.size != oldSize+append.size)
- goto end;
- if (a.size > a.alloc)
- goto end;
- if (a.item[a.size])
- goto end;
- if (memcmp(a.item+oldSize, @str, a.size-oldSize))
- goto end;
- append.item = strdup(@str);
- array_append(strings, append);
- testsPassed++;
- @end
-
- if (strings.size != @amount)
- goto end;
- array_for(i, strings,
- if (a.size-offs < i->size)
- goto end;
- if (memcmp(a.item+offs, i->item, i->size))
- goto end;
- offs += i->size;
- );
- if (offs != a.size)
- goto end;
- if (a.item[offs])
- goto end;
- testsPassed++;
-
-end:
- array_free(a);
- array_for(i, strings, free(i->item));
- array_free(strings);
- return testsPassed == @amount+1;
-}
-
-static int testarray_prepend_lit(void) {
- #ifndef ARRAY_USE_TALLOC
- array_char a = array_new();
- array(testLits_string) strings = array_new();
- #else
- array_char a = array_new(NULL);
- array(testLits_string) strings = array_new(NULL);
- #endif
- size_t testsPassed = 0;
- size_t oldSize;
- testLits_string append;
- size_t offs;
-
- @forEachRandomString
- /* Test @i */
- append.size = sizeof(@str)-1;
- oldSize = a.size;
- array_prepend_lit(a, @str);
- if (a.size != oldSize+append.size)
- goto end;
- if (a.size > a.alloc)
- goto end;
- if (a.item[a.size])
- goto end;
- if (memcmp(a.item, @str, a.size-oldSize))
- goto end;
- append.item = strdup(@str);
- array_append(strings, append);
- testsPassed++;
- @end
-
- offs = a.size;
- if (a.item[offs])
- goto end;
- if (strings.size != @amount)
- goto end;
- array_for(i, strings,
- if (offs < i->size)
- goto end;
- offs -= i->size;
- if (memcmp(a.item+offs, i->item, i->size))
- goto end;
- );
- if (offs)
- goto end;
- testsPassed++;
-
-end:
- array_free(a);
- array_for(i, strings, free(i->item));
- array_free(strings);
- return testsPassed == @amount+1;
-}