| |
|
|
| #include <stdio.h> |
| #include <string.h> |
|
|
| #include "util/strfuncs.h" |
| #include "util/pio.h" |
| #include "util/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(FILEDIR "/_fread_line.txt", "r"); |
| char *line; |
| size_t len; |
|
|
| if (fp == NULL) { |
| perror("Failed to open " FILEDIR "/_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); |
| |
| 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); |
| |
| 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; |
| } |
|
|