From 8e022f70175836330567898257d131394f9d4f7f Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Thu, 25 Jun 2020 12:56:27 +0200 Subject: Aktiviere continuous Testing --- csv-test.c | 414 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ makefile | 3 +- 2 files changed, 416 insertions(+), 1 deletion(-) diff --git a/csv-test.c b/csv-test.c index 9491153..5fd0e15 100644 --- a/csv-test.c +++ b/csv-test.c @@ -1,11 +1,425 @@ #include #include +#include #include #include "csv.h" +#undef NDEBUG + +#define FMEMOPEN(f, data) \ + f = fmemopen(data, sizeof(data)-1, "r"); \ + assert(f != NULL) + +#define FMEMCLOSE(f) \ + fclose(f); \ + f = NULL + +void +test1(void) +{ + FILE *f; + csv_t csv = { 0 }; + + char data[] = "A,B,C\r\n" + "D,E,F\n"; + + FMEMOPEN(f, data); + + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ), + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + assert( strcmp(csv_field(&csv, 2), "C") == 0 ); + + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ), + assert( strcmp(csv_field(&csv, 0), "D") == 0 ); + assert( strcmp(csv_field(&csv, 1), "E") == 0 ); + assert( strcmp(csv_field(&csv, 2), "F") == 0 ); + + assert( csv_read(&csv, f) == -1 ); + + FMEMCLOSE(f); +} + +void +test2(void) +{ + FILE *f; + csv_t csv = { 0 }; + + char data[] = "A,B,C\r\n" + "D,E,F"; + + FMEMOPEN(f, data); + + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ), + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + assert( strcmp(csv_field(&csv, 2), "C") == 0 ); + + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ), + assert( strcmp(csv_field(&csv, 0), "D") == 0 ); + assert( strcmp(csv_field(&csv, 1), "E") == 0 ); + assert( strcmp(csv_field(&csv, 2), "F") == 0 ); + + assert( csv_read(&csv, f) == -1 ); + + FMEMCLOSE(f); +} + +void +test3(void) +{ + FILE *f; + csv_t csv = { 0 }; + + char data[] = "\n" + "\r" + "\r\n" + "\"\"\n" + "\"\"\r" + "\"\"\r\n" + ",\n" + ",\r" + ",\r\n" + "\"\",\"\"\n" + "\"\",\"\"\r" + "\"\",\"\"\r\n" + ",,\n" + ",,\r" + ",,\r\n" + "\"\",\"\",\n" + "\"\",\"\",\r" + "\"\",\"\",\r\n" + ",,"; + + FMEMOPEN(f, data); + + // Line 1 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + + // Line 2 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + + // Line 3 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + + // Line 4 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + + // Line 5 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + + // Line 6 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + + // Line 7 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + + // Line 8 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + + // Line 9 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + + // Line 10 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + + // Line 11 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + + // Line 12 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + + // Line 13 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + assert( strcmp(csv_field(&csv, 2), "") == 0 ); + + // Line 14 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + assert( strcmp(csv_field(&csv, 2), "") == 0 ); + + // Line 15 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + assert( strcmp(csv_field(&csv, 2), "") == 0 ); + + // Line 16 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + assert( strcmp(csv_field(&csv, 2), "") == 0 ); + + // Line 17 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + assert( strcmp(csv_field(&csv, 2), "") == 0 ); + + // Line 18 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + assert( strcmp(csv_field(&csv, 2), "") == 0 ); + + // Line 19 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "") == 0 ); + assert( strcmp(csv_field(&csv, 1), "") == 0 ); + assert( strcmp(csv_field(&csv, 2), "") == 0 ); + + // EOF + assert( csv_read(&csv, f) == -1 ); + + FMEMCLOSE(f); +} + +void +test4(void) +{ + FILE *f; + csv_t csv = { 0 }; + + char data[] = "A\n" + "A\r" + "A\r\n" + "\"A\"\n" + "\"A\"\r" + "\"A\"\r\n" + "A,B\n" + "A,B\r" + "A,B\r\n" + "\"A\",\"B\"\n" + "\"A\",\"B\"\r" + "\"A\",\"B\"\r\n" + "A,B,C\n" + "A,B,C\r" + "A,B,C\r\n" + "\"A\",\"B\",C\n" + "\"A\",\"B\",C\r" + "\"A\",\"B\",C\r\n" + "A,B,C"; + + FMEMOPEN(f, data); + + // Line 1 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + + // Line 2 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + + // Line 3 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + + // Line 4 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + + // Line 5 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + + // Line 6 + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + + // Line 7 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + + // Line 8 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + + // Line 9 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + + // Line 10 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + + // Line 11 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + + // Line 12 + assert( csv_read(&csv, f) == 2 ); + assert( csv_nfields(&csv) == 2 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + + // Line 13 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + assert( strcmp(csv_field(&csv, 2), "C") == 0 ); + + // Line 14 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + assert( strcmp(csv_field(&csv, 2), "C") == 0 ); + + // Line 15 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + assert( strcmp(csv_field(&csv, 2), "C") == 0 ); + + // Line 16 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + assert( strcmp(csv_field(&csv, 2), "C") == 0 ); + + // Line 17 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + assert( strcmp(csv_field(&csv, 2), "C") == 0 ); + + // Line 18 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + assert( strcmp(csv_field(&csv, 2), "C") == 0 ); + + // Line 19 + assert( csv_read(&csv, f) == 3 ); + assert( csv_nfields(&csv) == 3 ); + assert( strcmp(csv_field(&csv, 0), "A") == 0 ); + assert( strcmp(csv_field(&csv, 1), "B") == 0 ); + assert( strcmp(csv_field(&csv, 2), "C") == 0 ); + + // EOF + assert( csv_read(&csv, f) == -1 ); + + FMEMCLOSE(f); +} + +void +test5(void) +{ + FILE *f; + csv_t csv = { 0 }; + + char data[] = "foo \"baz\" bar,foo \"\"baz\"\" bar,\"foo \"\"baz\"\" bar\",\"foo \"baz\" bar\",\"foo \"\"baz\"\", bar\""; + + FMEMOPEN(f, data); + + assert( csv_read(&csv, f) == 5 ); + assert( csv_nfields(&csv) == 5 ), + assert( strcmp(csv_field(&csv, 0), "foo \"baz\" bar") == 0 ); + assert( strcmp(csv_field(&csv, 1), "foo \"\"baz\"\" bar") == 0 ); + assert( strcmp(csv_field(&csv, 2), "foo \"baz\" bar") == 0 ); + assert( strcmp(csv_field(&csv, 3), "foo \"baz\" bar") == 0 ); + assert( strcmp(csv_field(&csv, 4), "foo \"baz\", bar") == 0 ); + + assert( csv_read(&csv, f) == -1 ); + + FMEMCLOSE(f); +} + +void +test6(void) +{ + FILE *f; + csv_t csv = { 0 }; + + char data[] = "\"foo"; + + FMEMOPEN(f, data); + + assert( csv_read(&csv, f) == 1 ); + assert( csv_nfields(&csv) == 1 ), + assert( strcmp(csv_field(&csv, 0), "foo") == 0 ); + + assert( csv_read(&csv, f) == -1 ); + + FMEMCLOSE(f); +} + int main(void) { + test1(); + test2(); + test3(); + test4(); + test5(); + test6(); + return EXIT_SUCCESS; } diff --git a/makefile b/makefile index e15c040..38134b1 100644 --- a/makefile +++ b/makefile @@ -4,6 +4,7 @@ all: csv-test csv-perf seq-read csv-test: csv-test.c csv.o csv.h $(CC) $(CFLAGS) -o $@ csv-test.c csv.o + ./csv-test csv-perf: csv-perf.c csv.o csv.h $(CC) $(CFLAGS) -o $@ csv-perf.c csv.o @@ -15,6 +16,6 @@ csv.o: csv.c csv.h $(CC) $(CFLAGS) -DNDEBUG -o $@ -c $< clean: - rm csv-perf seq-read csv.o + rm csv-test csv-perf seq-read csv.o .PHONY: all clean -- cgit v1.3