From bd348a50e65b9ef26b81998bf248480edaa7a4f2 Mon Sep 17 00:00:00 2001 From: Johannes Löthberg Date: Mon, 19 Jan 2015 21:47:52 +0100 Subject: Move tests to test/ --- Makefile | 8 +-- src/test.c | 223 ---------------------------------------------------------- src/twbctf.c | 50 ------------- src/twbctf.h | 14 ---- test/test.c | 223 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ test/twbctf.c | 50 +++++++++++++ test/twbctf.h | 14 ++++ 7 files changed, 291 insertions(+), 291 deletions(-) delete mode 100644 src/test.c delete mode 100644 src/twbctf.c delete mode 100644 src/twbctf.h create mode 100644 test/test.c create mode 100644 test/twbctf.c create mode 100644 test/twbctf.h diff --git a/Makefile b/Makefile index b1ff027..ee5600e 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,16 @@ CFLAGS += -Weverything -O2 -std=c99 -ggdb CC = clang -SOURCES = src/twbctf.c src/sds.c -HEADERS = src/twbctf.h src/sds.h +SOURCES = test/twbctf.c src/sds.c +HEADERS = test/twbctf.h src/sds.h MANPAGES = docs/sds.3 docs/sdsnew.3 docs/sdsfree.3 all: sds-test $(MANPAGES) -sds-test: $(SOURCES) $(HEADERS) src/test.c +sds-test: $(SOURCES) $(HEADERS) test/test.c @echo "==> Building sds-test" - $(CC) $(CFLAGS) -o $@ $(SOURCES) + $(CC) $(CFLAGS) -Isrc -o $@ $(SOURCES) docs/%.3: docs/%.rst @echo "==> Building manpages" diff --git a/src/test.c b/src/test.c deleted file mode 100644 index 68839ad..0000000 --- a/src/test.c +++ /dev/null @@ -1,223 +0,0 @@ -#include -#include - -#include "sds.h" -#include "twbctf.h" - -bool check_string_length (void); -bool create_with_length (void); -bool string_concat (void); -bool sdscpy_against_longer_str (void); -bool sdscpy_against_shorter_str (void); -bool sdscatprintf_base_case (void); -bool sdstrim_trims_correctly (void); -bool sdsrange_one_one (void); -bool sdsrange_one_none (void); -bool sdsrange_ntwo_none (void); -bool sdsrange_two_one (void); -bool sdsrange_one_hund (void); -bool sdsrange_hund_hund (void); -bool sdscmp_foo_foa (void); -bool sdscmp_aar_bar (void); -bool sdscmp_bar_bar (void); -bool sdscatrepr_test (void); -bool sdsnew_check_free_len (void); -bool sdsMakeRoomFor_test (void); -bool sdsIncrLen_content (void); -bool sdsIncrLen_len (void); -bool sdsIncrLen_free (void); - -static const struct test test_list [] = { - { "create a string and obtain the length", check_string_length }, - { "create a string with specified length", create_with_length }, - { "string concatenation", string_concat }, - { "sdscpy() against a longer string", sdscpy_against_longer_str }, - { "sdscpy() against a shorter string", sdscpy_against_shorter_str }, - { "basic sdscatprintf() usecase", sdscatprintf_base_case }, - { "sdstrim() trims correctly", sdstrim_trims_correctly }, - { "sdsrange(..., 1, 1)", sdsrange_one_one }, - { "sdsrange(..., 1, -1)", sdsrange_one_none }, - { "sdsrange(..., -2, -1)", sdsrange_ntwo_none }, - { "sdsrange(..., 2, 1)", sdsrange_two_one }, - { "sdsrange(..., 1, 100)", sdsrange_one_hund }, - { "sdsrange(..., 100, 100)", sdsrange_hund_hund }, - { "sdscmp(foo, foa)", sdscmp_foo_foa }, - { "sdscmp(aar, bar)", sdscmp_aar_bar }, - { "sdscmp(bar, bar)", sdscmp_bar_bar }, - { "sdscatrepr(...data...)", sdscatrepr_test }, - { "sdsnew() free/len buffers", sdsnew_check_free_len }, - { "sdsMakeRoomFor()", sdsMakeRoomFor_test }, - { "content after sdsIncrLen()", sdsIncrLen_content }, - { "len after sdsIncrLen()", sdsIncrLen_len }, - { "free after sdsIncrLen()", sdsIncrLen_free }, -}; - -static inline void sdsfrees(sds *string) { if (*string) sdsfree(*string); } -#define _sds_cleanup_ __attribute__((cleanup(sdsfrees))) - -bool -check_string_length(void) { - _sds_cleanup_ sds x = sdsauto("foo"); - return (sdslen(x) == 3 && memcmp(x, "foo\0", 4) == 0); -} - -bool -create_with_length(void) { - _sds_cleanup_ sds x = sdsnew("foo", 2); - return (sdslen(x) == 2 && memcmp(x, "fo\0", 3) == 0); -} - -bool -string_concat(void) { - _sds_cleanup_ sds x = sdsnew("foo", 2); - x = sdscat(x, "bar"); - return (sdslen(x) == 5 && memcmp(x, "fobar\0", 6) == 0); -} - -bool -sdscpy_against_longer_str(void) { - _sds_cleanup_ sds x = sdsauto("foo"); - x = sdscpy(x, "a"); - return (sdslen(x) == 1 && memcmp(x, "a\0", 2) == 0); -} - -bool -sdscpy_against_shorter_str(void) { - _sds_cleanup_ sds x = sdsnew("foo",2); - x = sdscpy(x, "xxxxyyyyzzzz"); - return (sdslen(x) == 12 && memcmp(x, "xxxxyyyyzzzz\0", 12) == 0); -} - -bool -sdscatprintf_base_case(void) { - _sds_cleanup_ sds x = sdscatprintf(sdsempty(), "%d", 123); - return (sdslen(x) == 3 && memcmp(x, "123\0", 4) == 0); -} - -bool -sdstrim_trims_correctly(void) { - _sds_cleanup_ sds x = sdsauto("xxciaoyy"); - sdstrim(x, "xy"); - return (sdslen(x) == 4 && memcmp(x, "ciao\0", 5) == 0); -} - -bool -sdsrange_one_one (void) { - _sds_cleanup_ sds x = sdsauto("ciao"); - _sds_cleanup_ sds y = sdsdup(x); - sdsrange(y, 1, 1); - return (sdslen(y) == 1 && memcmp(y, "i\0", 2) == 0); -} - -bool -sdsrange_one_none (void) { - _sds_cleanup_ sds x = sdsauto("ciao"); - _sds_cleanup_ sds y = sdsdup(x); - sdsrange(y, 1, -1); - return (sdslen(y) == 3 && memcmp(y, "iao\0", 4) == 0); -} - -bool -sdsrange_ntwo_none (void) { - _sds_cleanup_ sds x = sdsauto("ciao"); - _sds_cleanup_ sds y = sdsdup(x); - sdsrange(y, -2, -1); - return (sdslen(y) == 2 && memcmp(y, "ao\0", 3) == 0); -} - -bool -sdsrange_two_one (void) { - _sds_cleanup_ sds x = sdsauto("ciao"); - _sds_cleanup_ sds y = sdsdup(x); - sdsrange(y, 2, 1); - return (sdslen(y) == 0 && memcmp(y, "\0", 1) == 0); -} - -bool -sdsrange_one_hund (void) { - _sds_cleanup_ sds x = sdsauto("ciao"); - _sds_cleanup_ sds y = sdsdup(x); - sdsrange(y, 1, 100); - return (sdslen(y) == 3 && memcmp(y, "iao\0", 4) == 0); -} - -bool -sdsrange_hund_hund (void) { - _sds_cleanup_ sds x = sdsauto("ciao"); - _sds_cleanup_ sds y = sdsdup(x); - sdsrange(y, 100, 100); - return (sdslen(y) == 0 && memcmp(y, "\0", 1) == 0); -} - -bool -sdscmp_foo_foa (void) { - _sds_cleanup_ sds x = sdsauto("foo"); - _sds_cleanup_ sds y = sdsauto("foa"); - return (sdscmp(x, y) > 0); -} - -bool -sdscmp_aar_bar (void) { - _sds_cleanup_ sds x = sdsauto("aar"); - _sds_cleanup_ sds y = sdsauto("bar"); - return (sdscmp(x, y) < 0); -} - -bool -sdscmp_bar_bar (void) { - _sds_cleanup_ sds x = sdsauto("bar"); - _sds_cleanup_ sds y = sdsauto("bar"); - return (sdscmp(x, y) == 0); -} - -bool -sdscatrepr_test (void) { - _sds_cleanup_ sds x = sdsnew("\a\n\0foo\r", 7); - _sds_cleanup_ sds y = sdscatrepr(sdsempty(), x, sdslen(x)); - return (memcmp(y, "\"\\a\\n\\x00foo\\r\"", 15) == 0); -} - -bool -sdsnew_check_free_len (void) { - _sds_cleanup_ sds x = sdsauto("0"); - struct sdshdr *sh = (void*) (x-(sizeof(struct sdshdr))); - return (sh->len == 1 && sh->free == 0); -} - -bool -sdsMakeRoomFor_test (void) { - _sds_cleanup_ sds x = sdsauto("0"); - x = sdsMakeRoomFor(x, 1); - struct sdshdr *sh = (void*) (x-(sizeof(struct sdshdr))); - return (sh->len == 1 && sh->free > 0); -} - -bool -sdsIncrLen_content (void) { - _sds_cleanup_ sds x = sdsauto("0"); - x = sdsMakeRoomFor(x, 1); - x[1] = '1'; - sdsIncrLen(x, 1); - return (x[0] == '0' && x[1] == '1'); -} - -bool -sdsIncrLen_len (void) { - _sds_cleanup_ sds x = sdsauto("0"); - x = sdsMakeRoomFor(x, 1); - struct sdshdr *sh = (void*) (x-(sizeof(struct sdshdr))); - x[1] = '1'; - sdsIncrLen(x, 1); - return (sh->len == 2); -} - -bool -sdsIncrLen_free (void) { - _sds_cleanup_ sds x = sdsauto("0"); - x = sdsMakeRoomFor(x, 1); - struct sdshdr *sh = (void*) (x-(sizeof(struct sdshdr))); - size_t oldfree = sh->free; - x[1] = '1'; - sdsIncrLen(x, 1); - return (sh->free == oldfree-1); -} diff --git a/src/twbctf.c b/src/twbctf.c deleted file mode 100644 index af95c10..0000000 --- a/src/twbctf.c +++ /dev/null @@ -1,50 +0,0 @@ -/*******************************************************************\ - * A small, C test framework * - * Copyright (C) 2013-2014, Sam Stuewe * - * * - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License * - * as published by the Free Software Foundation; either version 2 * - * of the License, or (at your option) any later version. * - * * - * This program 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 General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, * - * Boston, MA 02110-1301, USA. * -\*********************************************************************/ - -// Libraries // -#include -#include -#include - -#include "twbctf.h" -#include "test.c" - -// Forward Declarations // -#define TEST_COUNT ((sizeof test_list)/(sizeof (struct test))) - -// Run Suite // -signed -main (void) { - int print_width = 0; - for (size_t i = 0; i < TEST_COUNT; i++) { - int length = (int)strlen(test_list[i].desc); - if (length > print_width) { - print_width = length; - } - } - - for (size_t i = 0; i < TEST_COUNT; i++) { - printf("Testing %-*s\t\t[ PEND ]\r", print_width, test_list[i].desc); - char * result = (test_list[i].func() ? "\x1b[32mPASS" : "\x1b[31mFAIL"); - printf("Testing %-*s\t\t[ %s \x1b[0m]\n", print_width, test_list[i].desc, result); - } - - return 0; -} diff --git a/src/twbctf.h b/src/twbctf.h deleted file mode 100644 index c0789cc..0000000 --- a/src/twbctf.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef TWBCTF_H -#define TWBCTF_H - -// Libraries // -#include - -typedef bool (* test_p) (void); - -struct test { - char * desc; - test_p func; -}; - -#endif diff --git a/test/test.c b/test/test.c new file mode 100644 index 0000000..bb3f64f --- /dev/null +++ b/test/test.c @@ -0,0 +1,223 @@ +#include +#include +#include + +#include "twbctf.h" + +bool check_string_length (void); +bool create_with_length (void); +bool string_concat (void); +bool sdscpy_against_longer_str (void); +bool sdscpy_against_shorter_str (void); +bool sdscatprintf_base_case (void); +bool sdstrim_trims_correctly (void); +bool sdsrange_one_one (void); +bool sdsrange_one_none (void); +bool sdsrange_ntwo_none (void); +bool sdsrange_two_one (void); +bool sdsrange_one_hund (void); +bool sdsrange_hund_hund (void); +bool sdscmp_foo_foa (void); +bool sdscmp_aar_bar (void); +bool sdscmp_bar_bar (void); +bool sdscatrepr_test (void); +bool sdsnew_check_free_len (void); +bool sdsMakeRoomFor_test (void); +bool sdsIncrLen_content (void); +bool sdsIncrLen_len (void); +bool sdsIncrLen_free (void); + +static const struct test test_list [] = { + { "create a string and obtain the length", check_string_length }, + { "create a string with specified length", create_with_length }, + { "string concatenation", string_concat }, + { "sdscpy() against a longer string", sdscpy_against_longer_str }, + { "sdscpy() against a shorter string", sdscpy_against_shorter_str }, + { "basic sdscatprintf() usecase", sdscatprintf_base_case }, + { "sdstrim() trims correctly", sdstrim_trims_correctly }, + { "sdsrange(..., 1, 1)", sdsrange_one_one }, + { "sdsrange(..., 1, -1)", sdsrange_one_none }, + { "sdsrange(..., -2, -1)", sdsrange_ntwo_none }, + { "sdsrange(..., 2, 1)", sdsrange_two_one }, + { "sdsrange(..., 1, 100)", sdsrange_one_hund }, + { "sdsrange(..., 100, 100)", sdsrange_hund_hund }, + { "sdscmp(foo, foa)", sdscmp_foo_foa }, + { "sdscmp(aar, bar)", sdscmp_aar_bar }, + { "sdscmp(bar, bar)", sdscmp_bar_bar }, + { "sdscatrepr(...data...)", sdscatrepr_test }, + { "sdsnew() free/len buffers", sdsnew_check_free_len }, + { "sdsMakeRoomFor()", sdsMakeRoomFor_test }, + { "content after sdsIncrLen()", sdsIncrLen_content }, + { "len after sdsIncrLen()", sdsIncrLen_len }, + { "free after sdsIncrLen()", sdsIncrLen_free }, +}; + +static inline void sdsfrees(sds *string) { if (*string) sdsfree(*string); } +#define _sds_cleanup_ __attribute__((cleanup(sdsfrees))) + +bool +check_string_length(void) { + _sds_cleanup_ sds x = sdsauto("foo"); + return (sdslen(x) == 3 && memcmp(x, "foo\0", 4) == 0); +} + +bool +create_with_length(void) { + _sds_cleanup_ sds x = sdsnew("foo", 2); + return (sdslen(x) == 2 && memcmp(x, "fo\0", 3) == 0); +} + +bool +string_concat(void) { + _sds_cleanup_ sds x = sdsnew("foo", 2); + x = sdscat(x, "bar"); + return (sdslen(x) == 5 && memcmp(x, "fobar\0", 6) == 0); +} + +bool +sdscpy_against_longer_str(void) { + _sds_cleanup_ sds x = sdsauto("foo"); + x = sdscpy(x, "a"); + return (sdslen(x) == 1 && memcmp(x, "a\0", 2) == 0); +} + +bool +sdscpy_against_shorter_str(void) { + _sds_cleanup_ sds x = sdsnew("foo",2); + x = sdscpy(x, "xxxxyyyyzzzz"); + return (sdslen(x) == 12 && memcmp(x, "xxxxyyyyzzzz\0", 12) == 0); +} + +bool +sdscatprintf_base_case(void) { + _sds_cleanup_ sds x = sdscatprintf(sdsempty(), "%d", 123); + return (sdslen(x) == 3 && memcmp(x, "123\0", 4) == 0); +} + +bool +sdstrim_trims_correctly(void) { + _sds_cleanup_ sds x = sdsauto("xxciaoyy"); + sdstrim(x, "xy"); + return (sdslen(x) == 4 && memcmp(x, "ciao\0", 5) == 0); +} + +bool +sdsrange_one_one (void) { + _sds_cleanup_ sds x = sdsauto("ciao"); + _sds_cleanup_ sds y = sdsdup(x); + sdsrange(y, 1, 1); + return (sdslen(y) == 1 && memcmp(y, "i\0", 2) == 0); +} + +bool +sdsrange_one_none (void) { + _sds_cleanup_ sds x = sdsauto("ciao"); + _sds_cleanup_ sds y = sdsdup(x); + sdsrange(y, 1, -1); + return (sdslen(y) == 3 && memcmp(y, "iao\0", 4) == 0); +} + +bool +sdsrange_ntwo_none (void) { + _sds_cleanup_ sds x = sdsauto("ciao"); + _sds_cleanup_ sds y = sdsdup(x); + sdsrange(y, -2, -1); + return (sdslen(y) == 2 && memcmp(y, "ao\0", 3) == 0); +} + +bool +sdsrange_two_one (void) { + _sds_cleanup_ sds x = sdsauto("ciao"); + _sds_cleanup_ sds y = sdsdup(x); + sdsrange(y, 2, 1); + return (sdslen(y) == 0 && memcmp(y, "\0", 1) == 0); +} + +bool +sdsrange_one_hund (void) { + _sds_cleanup_ sds x = sdsauto("ciao"); + _sds_cleanup_ sds y = sdsdup(x); + sdsrange(y, 1, 100); + return (sdslen(y) == 3 && memcmp(y, "iao\0", 4) == 0); +} + +bool +sdsrange_hund_hund (void) { + _sds_cleanup_ sds x = sdsauto("ciao"); + _sds_cleanup_ sds y = sdsdup(x); + sdsrange(y, 100, 100); + return (sdslen(y) == 0 && memcmp(y, "\0", 1) == 0); +} + +bool +sdscmp_foo_foa (void) { + _sds_cleanup_ sds x = sdsauto("foo"); + _sds_cleanup_ sds y = sdsauto("foa"); + return (sdscmp(x, y) > 0); +} + +bool +sdscmp_aar_bar (void) { + _sds_cleanup_ sds x = sdsauto("aar"); + _sds_cleanup_ sds y = sdsauto("bar"); + return (sdscmp(x, y) < 0); +} + +bool +sdscmp_bar_bar (void) { + _sds_cleanup_ sds x = sdsauto("bar"); + _sds_cleanup_ sds y = sdsauto("bar"); + return (sdscmp(x, y) == 0); +} + +bool +sdscatrepr_test (void) { + _sds_cleanup_ sds x = sdsnew("\a\n\0foo\r", 7); + _sds_cleanup_ sds y = sdscatrepr(sdsempty(), x, sdslen(x)); + return (memcmp(y, "\"\\a\\n\\x00foo\\r\"", 15) == 0); +} + +bool +sdsnew_check_free_len (void) { + _sds_cleanup_ sds x = sdsauto("0"); + struct sdshdr *sh = (void*) (x-(sizeof(struct sdshdr))); + return (sh->len == 1 && sh->free == 0); +} + +bool +sdsMakeRoomFor_test (void) { + _sds_cleanup_ sds x = sdsauto("0"); + x = sdsMakeRoomFor(x, 1); + struct sdshdr *sh = (void*) (x-(sizeof(struct sdshdr))); + return (sh->len == 1 && sh->free > 0); +} + +bool +sdsIncrLen_content (void) { + _sds_cleanup_ sds x = sdsauto("0"); + x = sdsMakeRoomFor(x, 1); + x[1] = '1'; + sdsIncrLen(x, 1); + return (x[0] == '0' && x[1] == '1'); +} + +bool +sdsIncrLen_len (void) { + _sds_cleanup_ sds x = sdsauto("0"); + x = sdsMakeRoomFor(x, 1); + struct sdshdr *sh = (void*) (x-(sizeof(struct sdshdr))); + x[1] = '1'; + sdsIncrLen(x, 1); + return (sh->len == 2); +} + +bool +sdsIncrLen_free (void) { + _sds_cleanup_ sds x = sdsauto("0"); + x = sdsMakeRoomFor(x, 1); + struct sdshdr *sh = (void*) (x-(sizeof(struct sdshdr))); + size_t oldfree = sh->free; + x[1] = '1'; + sdsIncrLen(x, 1); + return (sh->free == oldfree-1); +} diff --git a/test/twbctf.c b/test/twbctf.c new file mode 100644 index 0000000..af95c10 --- /dev/null +++ b/test/twbctf.c @@ -0,0 +1,50 @@ +/*******************************************************************\ + * A small, C test framework * + * Copyright (C) 2013-2014, Sam Stuewe * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, * + * Boston, MA 02110-1301, USA. * +\*********************************************************************/ + +// Libraries // +#include +#include +#include + +#include "twbctf.h" +#include "test.c" + +// Forward Declarations // +#define TEST_COUNT ((sizeof test_list)/(sizeof (struct test))) + +// Run Suite // +signed +main (void) { + int print_width = 0; + for (size_t i = 0; i < TEST_COUNT; i++) { + int length = (int)strlen(test_list[i].desc); + if (length > print_width) { + print_width = length; + } + } + + for (size_t i = 0; i < TEST_COUNT; i++) { + printf("Testing %-*s\t\t[ PEND ]\r", print_width, test_list[i].desc); + char * result = (test_list[i].func() ? "\x1b[32mPASS" : "\x1b[31mFAIL"); + printf("Testing %-*s\t\t[ %s \x1b[0m]\n", print_width, test_list[i].desc, result); + } + + return 0; +} diff --git a/test/twbctf.h b/test/twbctf.h new file mode 100644 index 0000000..c0789cc --- /dev/null +++ b/test/twbctf.h @@ -0,0 +1,14 @@ +#ifndef TWBCTF_H +#define TWBCTF_H + +// Libraries // +#include + +typedef bool (* test_p) (void); + +struct test { + char * desc; + test_p func; +}; + +#endif -- cgit v1.2.3-70-g09d2