/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ #include #include #include "strfuncs.h" #include "pio.h" #include "ckd_alloc.h" int main(int argc, char *argv[]) { if (argc < 2) return 1; if (!strcmp(argv[1], "string_join")) { char *foo = string_join("bar", "baz", "quux", NULL); if (strcmp(foo, "barbazquux") != 0) { printf("%s != barbazquux\n", foo); return 1; } foo = string_join("hello", NULL); if (strcmp(foo, "hello") != 0) { printf("%s != hello\n", foo); return 1; } return 0; } else if (!strcmp(argv[1], "fread_line")) { FILE *fp = fopen(TESTDATADIR "/_fread_line.txt", "r"); char *line; size_t len; if (fp == NULL) { perror("Failed to open " TESTDATADIR "/_fread_line.txt"); return 1; } line = fread_line(fp, &len); printf("len = %zd orig = %zd\n", len, strlen("Hello world!\n")); if (strcmp(line, "Hello world!\n") != 0) { printf("'%s' != 'Hello world!\\n'\n", line); return 1; } ckd_free(line); line = fread_line(fp, &len); /* A line of exactly 127 characters. */ printf("len = %zd orig = %zd\n", len, strlen("123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\n")); if (strcmp(line, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\n") != 0) { printf("'%s' != '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\\n'\n", line); return 1; } ckd_free(line); /* A very long line. */ line = fread_line(fp, &len); printf("len = %zd orig = %zd\n", len, strlen("All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. \n")); if (strcmp(line, "All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. \n") != 0) { printf("'%s' != 'All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. All work and no play makes Jack a very dull boy. \\n'\n", line); return 1; } ckd_free(line); line = fread_line(fp, &len); if (line != NULL) { printf("%p != NULL\n", line); return 1; } } else if (!strcmp(argv[1], "string_trim")) { char *foo = ckd_salloc("\t foo bar baz \n"); string_trim(foo, STRING_BOTH); if (strcmp(foo, "foo bar baz") != 0) { printf("'%s' != 'foo bar baz'\n", foo); return 1; } string_trim(foo, STRING_BOTH); if (strcmp(foo, "foo bar baz") != 0) { printf("'%s' != 'foo bar baz'\n", foo); return 1; } strcpy(foo, "foo\nbar\n\n"); string_trim(foo, STRING_END); if (strcmp(foo, "foo\nbar") != 0) { printf("'%s' != 'foo\\nbar'\n", foo); return 1; } strcpy(foo, " \t \t foobar\n"); string_trim(foo, STRING_START); if (strcmp(foo, "foobar\n") != 0) { printf("'%s' != 'foobar\\n'\n", foo); return 1; } } else if (!strcmp(argv[1], "str2words")) { char *line = ckd_salloc(" foo bar baz argh"); char **words; int n; n = str2words(line, NULL, 0); if (n != 4) { printf("%d != 4\n", n); return 1; } words = ckd_calloc(n, sizeof(*words)); n = str2words(line, words, n); if (n != 4) { printf("%d != 4\n", n); return 1; } if (strcmp(words[0], "foo") != 0 || strcmp(words[1], "bar") != 0 || strcmp(words[2], "baz") != 0 || strcmp(words[3], "argh") != 0) { printf("%s, %s, %s, %s != foo, bar, baz, argh\n", words[0], words[1], words[2], words[3]); return 1; } return 0; } else if (!strcmp(argv[1], "nextword")) { char *line = ckd_salloc(" \tfoo bar\nbaz argh"); char *word; const char *delim = " \t\n"; char delimfound; int n; n = nextword(line, delim, &word, &delimfound); if (strcmp(word, "foo") != 0) { printf("%s != foo\n", word); return 1; } if (delimfound != ' ') { printf("didn't find ' '\n"); return 1; } word[n] = delimfound; line = word + n; n = nextword(line, delim, &word, &delimfound); if (strcmp(word, "bar") != 0) { printf("%s != bar\n", word); return 1; } if (delimfound != '\n') { printf("didn't find '\\n'\n"); return 1; } word[n] = delimfound; line = word + n; n = nextword(line, delim, &word, &delimfound); if (strcmp(word, "baz") != 0) { printf("%s != baz\n", word); return 1; } if (delimfound != ' ') { printf("didn't find ' '\n"); return 1; } word[n] = delimfound; line = word + n; n = nextword(line, delim, &word, &delimfound); if (strcmp(word, "argh") != 0) { printf("%s != argh\n", word); return 1; } if (delimfound != '\0') { printf("didn't find NUL\n"); return 1; } word[n] = delimfound; line = word + n; n = nextword(line, delim, &word, &delimfound); if (n != -1) { printf("didn't get -1 at end of string\n"); } line = ckd_salloc("FOO!"); n = nextword(line, delim, &word, &delimfound); if (strcmp(word, "FOO!") != 0) { printf("%s != FOO!\n", word); return 1; } if (delimfound != '\0') { printf("didn't find NUL\n"); return 1; } return 0; } return 0; }