Renamed hash,str to hashtable,string-util
[mono.git] / eglib / test / string-util.c
1 #include <glib.h>
2 #include <stdio.h>
3 #include "test.h"
4
5 /* This test is just to be used with valgrind */
6 char *
7 test_strfreev ()
8 {
9         gchar **array = g_new (gchar *, 4);
10         array [0] = g_strdup ("one");
11         array [1] = g_strdup ("two");
12         array [2] = g_strdup ("three");
13         array [3] = NULL;
14         
15         g_strfreev (array);
16         g_strfreev (NULL);
17
18         return NULL;
19 }
20
21 char *
22 test_concat ()
23 {
24         gchar *x = g_strconcat ("Hello", ", ", "world", NULL);
25         if (strcmp (x, "Hello, world") != 0)
26                 return g_strdup_printf ("concat failed, got: %s", x);
27         g_free (x);
28         return NULL;
29 }
30
31 #define sfail(k,p) if (s->str [p] != k) { g_string_free (s,TRUE); return g_strdup_printf ("Got %s, Failed at %d, expected '%c'", s, p, k);}
32
33 char *
34 test_gstring ()
35 {
36         GString *s = g_string_new_len ("My stuff", 2);
37         char *ret;
38         int i;
39
40         if (strcmp (s->str, "My") != 0)
41                 return RESULT("Expected only 'My' on the string");
42         g_string_free (s, TRUE);
43
44         s = g_string_new_len ("My\0\0Rest", 6);
45         if (s->str [2] != 0)
46                 return RESULT("Null was not copied");
47         if (strcmp (s->str+4, "Re") != 0){
48                 return RESULT("Did not find the 'Re' part");
49         }
50
51         g_string_append (s, "lalalalalalalalalalalalalalalalalalalalalalal");
52         if (s->str [2] != 0)
53                 return RESULT("Null as not copied");
54         if (strncmp (s->str+4, "Relala", 6) != 0){
55                 return g_strdup_printf("Did not copy correctly, got: %s", s->str+4);
56         }
57
58         g_string_free (s, TRUE);
59         s = g_string_new ("");
60         for (i = 0; i < 1024; i++){
61                 g_string_append (s, "x");
62         }
63         if (strlen (s->str) != 1024){
64                 return g_strdup_printf("Incorrect string size, got: %s %d", s->str, strlen (s->str));
65         }
66         g_string_free (s, TRUE);
67
68         s = g_string_new ("");
69         for (i = 0; i < 1024; i++){
70                 g_string_append_c (s, 'x');
71         }
72         if (strlen (s->str) != 1024){
73                 return g_strdup_printf("Incorrect string size, got: %s %d\n", s->str, strlen (s->str));
74         }
75         g_string_free (s, TRUE);
76
77         s = g_string_new ("hola");
78         g_string_sprintfa (s, "%s%d", ", bola", 5);
79         if (strcmp (s->str, "hola, bola5") != 0){
80                 return g_strdup_printf("Incorrect data, got: %s\n", s->str);
81         }
82         g_string_free (s, TRUE);
83
84         s = g_string_new ("Hola");
85         g_string_printf (s, "Dingus");
86         
87         /* Test that it does not release it */
88         ret = g_string_free (s, FALSE);
89         g_free (ret);
90
91         s = g_string_new_len ("H\000H", 3);
92         g_string_append_len (s, "1\0002", 3);
93         sfail ('H', 0);
94         sfail ( 0, 1);
95         sfail ('H', 2);
96         sfail ('1', 3);
97         sfail ( 0, 4);
98         sfail ('2', 5);
99         g_string_free (s, TRUE);
100         
101         return NULL;
102 }
103
104 char *
105 test_split ()
106 {
107         gchar **v = g_strsplit("Hello world, how are we doing today?", " ", 0);
108         int i = 0;
109         
110         if(v == NULL) {
111                 return RESULT("split failed, got NULL vector");
112         } else {
113                 for(i = 0; v[i] != NULL; i++);
114                 if(i != 7) {
115                         return g_strdup_printf("split failed, expected 7 tokens, got %d\n", i);
116                 }
117         }
118         
119         g_strfreev(v);
120         return NULL;
121 }
122
123 char *
124 test_strreverse ()
125 {
126         gchar *a = g_strdup ("onetwothree");
127         gchar *a_target = "eerhtowteno";
128         gchar *b = g_strdup ("onetwothre");
129         gchar *b_target = "erhtowteno";
130
131         g_strreverse (a);
132         if (strcmp (a, a_target)) {
133                 g_free (b);
134                 g_free (a);
135                 return g_strdup_printf ("strreverse failed. Expecting: '%s' and got '%s'\n", a, a_target);
136         }
137
138         g_strreverse (b);
139         if (strcmp (b, b_target)) {
140                 g_free (b);
141                 g_free (a);
142                 return g_strdup_printf ("strreverse failed. Expecting: '%s' and got '%s'\n", b, b_target);
143         }
144         g_free (b);
145         g_free (a);
146         return NULL;
147 }
148
149 static Test string_tests [] = {
150         {"g_strfreev", test_strfreev},
151         {"g_strconcat", test_concat},
152         {"GString", test_gstring},
153         {"g_strsplit", test_split},
154         {"g_strreverse", test_strreverse},
155         {NULL, NULL}
156 };
157
158 DEFINE_TEST_GROUP_INIT(string_tests_init, string_tests)
159