]> git.lizzy.rs Git - linenoise.git/blob - teststringbuf.c
Use CMake
[linenoise.git] / teststringbuf.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <stdarg.h>
5
6 #include <assert.h>
7 #include <stringbuf.h>
8
9 static void show_buf(stringbuf *sb)
10 {
11         printf("[%d] = %s\n", sb_len(sb), sb_str(sb));
12 }
13
14 #define validate_buf(SB, EXP) validate_buf_(__FILE__, __LINE__, SB, EXP)
15
16 static void validate_buf_(const char *file, int line, stringbuf *sb, const char *expected)
17 {
18         const char *pt = sb_str(sb);
19         if (pt == NULL) {
20                 if (expected != NULL) {
21                         fprintf(stderr, "%s:%d: Error: Expected NULL, got '%s'\n", file, line, pt);
22                         abort();
23                 }
24         }
25         else if (strcmp(pt, expected) != 0) {
26                 show_buf(sb);
27                 fprintf(stderr, "%s:%d: Error: Expected '%s', got '%s'\n", file, line, expected, pt);
28                 abort();
29         }
30         sb_free(sb);
31 }
32
33 int main(void)
34 {
35         stringbuf *sb;
36         char *pt;
37
38         sb = sb_alloc();
39         validate_buf(sb, NULL);
40
41         sb = sb_alloc();
42         sb_append(sb, "hello");
43         sb_append(sb, "world");
44         validate_buf(sb, "helloworld");
45
46         sb = sb_alloc();
47         sb_append(sb, "hello");
48         sb_append(sb, "world");
49         sb_append(sb, "");
50         sb_append(sb, "xxx");
51         assert(sb_len(sb) == 13);
52         validate_buf(sb, "helloworldxxx");
53
54         sb = sb_alloc();
55         sb_append(sb, "first");
56         sb_append(sb, "string");
57         validate_buf(sb, "firststring");
58
59         sb = sb_alloc();
60         sb_append(sb, "");
61         validate_buf(sb, "");
62
63         sb = sb_alloc();
64         sb_append_len(sb, "one string here", 3);
65         sb_append_len(sb, "second string here", 6);
66         validate_buf(sb, "onesecond");
67
68         sb = sb_alloc();
69         sb_append_len(sb, "one string here", 3);
70         sb_append_len(sb, "second string here", 6);
71         pt = sb_to_string(sb);
72         assert(strcmp(pt, "onesecond") == 0);
73         free(pt);
74
75         sb = sb_alloc();
76         pt = sb_to_string(sb);
77         assert(strcmp(pt, "") == 0);
78         free(pt);
79
80         sb = sb_alloc();
81         sb_append(sb, "one");
82         sb_append(sb, "three");
83         sb_insert(sb, 3, "two");
84         validate_buf(sb, "onetwothree");
85
86         sb = sb_alloc();
87         sb_insert(sb, 0, "two");
88         sb_insert(sb, 0, "one");
89         sb_insert(sb, 20, "three");
90         validate_buf(sb, "onetwothree");
91
92         sb = sb_alloc();
93         sb_append(sb, "one");
94         sb_append(sb, "extra");
95         sb_append(sb, "two");
96         sb_append(sb, "three");
97         sb_delete(sb, 3, 5);
98         validate_buf(sb, "onetwothree");
99
100         sb = sb_alloc();
101         sb_append(sb, "one");
102         sb_append(sb, "two");
103         sb_append(sb, "three");
104         validate_buf(sb, "onetwothree");
105         /*sb_delete(sb, 6, -1);*/
106         /*validate_buf(sb, "onetwo");*/
107
108         sb = sb_alloc();
109         sb_append(sb, "one");
110         sb_append(sb, "two");
111         sb_append(sb, "three");
112         sb_delete(sb, 0, -1);
113         validate_buf(sb, "");
114
115         sb = sb_alloc();
116         sb_append(sb, "one");
117         sb_append(sb, "two");
118         sb_append(sb, "three");
119         sb_delete(sb, 50, 20);
120         validate_buf(sb, "onetwothree");
121
122         /* OK to sb_free() a NULL pointer */
123         sb_free(NULL);
124
125 #ifdef USE_UTF8
126         sb = sb_alloc();
127         sb_append(sb, "oneµtwo");
128         assert(sb_len(sb) == 8);
129         assert(sb_chars(sb) == 7);
130         sb_delete(sb, 3, 2);
131         assert(sb_len(sb) == 6);
132         assert(sb_chars(sb) == 6);
133         validate_buf(sb, "onetwo");
134 #endif
135
136         return(0);
137 }