From f255bb945d85e00305ddf445e206066d1d9cb79a Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Tue, 26 Feb 2019 23:03:09 -0500 Subject: [PATCH] checked in beginnings of property based testing framework --- Makefile | 9 +++-- src/tide.c | 12 +++---- tests/test_tide | Bin 0 -> 68976 bytes tests/test_tide.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 9 deletions(-) create mode 100755 tests/test_tide create mode 100644 tests/test_tide.c diff --git a/Makefile b/Makefile index 0c7384f..d753321 100644 --- a/Makefile +++ b/Makefile @@ -13,8 +13,7 @@ LIBEDIT_OBJS = \ src/lib/x11_gc.o \ src/lib/x11_sel.o -TEST_BINS = \ - tests/libedit +TEST_BINS = tests/libedit tests/test_tide include config.mk @@ -53,9 +52,13 @@ libedit.a: $(LIBEDIT_OBJS) tests/libedit: tests/libedit.o tests/lib/buf.o tests/lib/utf8.o libedit.a -# define implicit rule for building binaries +# define implicit rule for building normal binaries bin/%: src/%.o libedit.a $(LD) -o $@ $^ $(LDFLAGS) +# define implicit rule for building tests binaries +tests/%: tests/%.o libedit.a + $(LD) -o $@ $^ $(LDFLAGS) + # load generate dependencies -include src/*.d src/lib/*.d tests/*.d tests/lib/*.d diff --git a/src/tide.c b/src/tide.c index 8e07013..46c7249 100644 --- a/src/tide.c +++ b/src/tide.c @@ -13,13 +13,13 @@ /* stub some functions for test so we don't interact with the outside world too much */ #ifdef TEST #define job_start(cmd, data, ndata, dest) \ - ((void)cmd, (void)data, (void)ndata, (void)dest) -#define job_run(char** cmd) - ((void)cmd, 0) -#define x11_sel_get(x, selid, str) \ - ((void)x, (void)selid, (void)str) + ((void)(cmd), (void)(data), (void)(ndata), (void)(dest)) +#define job_run(cmd) \ + ((void)(cmd), 0) +#define x11_sel_set(x, selid, str) \ + ((void)(x), (void)(selid), (void)(str)) #define x11_sel_get(x, selid, cbfn) \ - ((void)x, (void)selid, (void)cbfn, (void)1) + ((void)(x), (void)(selid), (void)(cbfn), 1) #endif /* predeclare some things */ diff --git a/tests/test_tide b/tests/test_tide new file mode 100755 index 0000000000000000000000000000000000000000..8098b76aedb6b9eba9f686cb867c61c0b5665c55 GIT binary patch literal 68976 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 JaxG-U699`HGHw6> literal 0 HcmV?d00001 diff --git a/tests/test_tide.c b/tests/test_tide.c new file mode 100644 index 0000000..fd04b69 --- /dev/null +++ b/tests/test_tide.c @@ -0,0 +1,87 @@ +#include + +#define TEST +#include "src/tide.c" + +typedef struct { + void *value; + int nelem; +// QCC_showValue show; +// QCC_freeValue free; +} QCValue; + +typedef struct { + int status, nvals; + QCValue** vals; +} QCResult; + +typedef int (*QCProp)(QCValue** vals, int nvals); + +typedef QCValue* (*QCGenFn)(void); + + + + +void qc_init(int seed) { + srand(seed ? seed : time(NULL)); +} + +QCResult vforAll(QCProp prop, int nvals, va_list vals) { + /* generate the input values */ + QCValue** values = NULL; + if (nvals) { + values = malloc(sizeof(QCValue*) * nvals); + for (int i = 0; i < nvals; i++) + values[i] = (va_arg(vals, QCGenFn))(); + } + /* run the test and get the result */ + QCResult result = { .status = 0 }; + result.status = prop(values, nvals); + result.nvals = nvals; + result.vals = values; + return result; +} + +int forAll(int num, QCProp prop, int nvals, ...) { + (void)num, (void)prop, (void)nvals; + int passed = 0; + QCResult result; + va_list vals; + for (int i = 0; i < num; i++) { + va_start(vals, nvals); + result = vforAll(prop, nvals, vals); + va_end(vals); + if (!result.status) break; + passed++; + } + /* show 'em the results */ + if (passed == num) { + printf("%d tests passed\n", passed); + } else if (result.status == 0) { + printf("Falsifiable after %d tests\n", passed+1); + return 0; + } + return 1; +} + +/************************************************/ + +void tide_init(void) { + if (!ShellCmd[0]) ShellCmd[0] = getenv("SHELL"); + if (!ShellCmd[0]) ShellCmd[0] = "/bin/sh"; + win_init(Bindings); + view_init(&Regions[TAGS], NULL); + view_init(&Regions[EDIT], NULL); + view_putstr(win_view(TAGS), TagString); + view_resize(win_view(TAGS), 640, 1); + buf_logclear(win_buf(TAGS)); + win_prop_set("TIDE", "", "tide"); + xupdate(NULL); +} + + +int main(int argc, char** argv) { + (void)argc, (void)argv, (void)usage; + puts("running prop tests"); + return 0; +} -- 2.52.0