source: trunk/third/glib2/tests/string-test.c @ 18159

Revision 18159, 7.7 KB checked in by ghudson, 22 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18158, which included commits to RCS files with non-trunk default branches.
Line 
1/* GLIB - Library of useful routines for C programming
2 * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 */
19
20/*
21 * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
22 * file for a list of people on the GLib Team.  See the ChangeLog
23 * files for a list of changes.  These files are distributed with
24 * GLib at ftp://ftp.gtk.org/pub/gtk/.
25 */
26
27#undef G_DISABLE_ASSERT
28#undef G_LOG_DOMAIN
29
30#include <stdio.h>
31#include <string.h>
32#include "glib.h"
33#include "glib/gprintf.h"
34
35int array[10000];
36gboolean failed = FALSE;
37
38#define TEST(m,cond)    G_STMT_START { failed = !(cond); \
39if (failed) \
40  { if (!m) \
41      g_print ("\n(%s:%d) failed for: %s\n", __FILE__, __LINE__, ( # cond )); \
42    else \
43      g_print ("\n(%s:%d) failed for: %s: (%s)\n", __FILE__, __LINE__, ( # cond ), (gchar*)m); \
44  } \
45else \
46  g_print ("."); fflush (stdout); \
47} G_STMT_END
48
49#define C2P(c)          ((gpointer) ((long) (c)))
50#define P2C(p)          ((gchar) ((long) (p)))
51
52#define GLIB_TEST_STRING "el dorado "
53#define GLIB_TEST_STRING_5 "el do"
54
55typedef struct {
56        guint age;
57        gchar name[40];
58} GlibTestInfo;
59
60int
61main (int   argc,
62      char *argv[])
63{
64  GStringChunk *string_chunk;
65
66  gchar *tmp_string = NULL, *tmp_string_2;
67  gint i;
68  GString *string1, *string2;
69
70  string_chunk = g_string_chunk_new (1024);
71
72  for (i = 0; i < 100000; i ++)
73    {
74      tmp_string = g_string_chunk_insert (string_chunk, "hi pete");
75
76      if (strcmp ("hi pete", tmp_string) != 0)
77        g_error ("string chunks are broken.\n");
78    }
79
80  tmp_string_2 = g_string_chunk_insert_const (string_chunk, tmp_string);
81
82  g_assert (tmp_string_2 != tmp_string &&
83            strcmp(tmp_string_2, tmp_string) == 0);
84
85  tmp_string = g_string_chunk_insert_const (string_chunk, tmp_string);
86
87  g_assert (tmp_string_2 == tmp_string);
88
89  g_string_chunk_free (string_chunk);
90
91  string1 = g_string_new ("hi pete!");
92  string2 = g_string_new ("");
93
94  g_assert (string1 != NULL);
95  g_assert (string2 != NULL);
96  g_assert (strlen (string1->str) == string1->len);
97  g_assert (strlen (string2->str) == string2->len);
98  g_assert (string2->len == 0);
99  g_assert (strcmp ("hi pete!", string1->str) == 0);
100  g_assert (strcmp ("", string2->str) == 0);
101
102  for (i = 0; i < 10000; i++)
103    g_string_append_c (string1, 'a'+(i%26));
104
105  g_assert((strlen("hi pete!") + 10000) == string1->len);
106  g_assert((strlen("hi pete!") + 10000) == strlen(string1->str));
107
108#ifndef G_OS_WIN32
109  /* MSVC and mingw32 use the same run-time C library, which doesn't like
110     the %10000.10000f format... */
111  g_string_printf (string2, "%s|%0100d|%s|%s|%0*d|%*.*f|%10000.10000f",
112                   "this pete guy sure is a wuss, like he's the number ",
113                   1,
114                   " wuss.  everyone agrees.\n",
115                   string1->str,
116                   10, 666, 15, 15, 666.666666666, 666.666666666);
117#else
118  g_string_printf (string2, "%s|%0100d|%s|%s|%0*d|%*.*f|%100.100f",
119                   "this pete guy sure is a wuss, like he's the number ",
120                   1,
121                   " wuss.  everyone agrees.\n",
122                   string1->str,
123                   10, 666, 15, 15, 666.666666666, 666.666666666);
124#endif
125 
126  g_string_free (string1, TRUE);
127  g_string_free (string2, TRUE);
128
129  /* append */
130  string1 = g_string_new ("firsthalf");
131  g_string_append (string1, "lasthalf");
132  g_assert (strcmp (string1->str, "firsthalflasthalf") == 0);
133  g_string_free (string1, TRUE);
134
135  /* append_len */
136
137  string1 = g_string_new ("firsthalf");
138  g_string_append_len (string1, "lasthalfjunkjunk", strlen ("lasthalf"));
139  g_assert (strcmp (string1->str, "firsthalflasthalf") == 0);
140  g_string_free (string1, TRUE); 
141 
142  /* prepend */
143  string1 = g_string_new ("lasthalf");
144  g_string_prepend (string1, "firsthalf");
145  g_assert (strcmp (string1->str, "firsthalflasthalf") == 0);
146  g_string_free (string1, TRUE);
147
148  /* prepend_len */
149  string1 = g_string_new ("lasthalf");
150  g_string_prepend_len (string1, "firsthalfjunkjunk", strlen ("firsthalf"));
151  g_assert (strcmp (string1->str, "firsthalflasthalf") == 0);
152  g_string_free (string1, TRUE);
153 
154  /* insert */
155  string1 = g_string_new ("firstlast");
156  g_string_insert (string1, 5, "middle");
157  g_assert (strcmp (string1->str, "firstmiddlelast") == 0);
158  g_string_free (string1, TRUE);
159
160  /* insert with pos == end of the string */
161  string1 = g_string_new ("firstmiddle");
162  g_string_insert (string1, strlen ("firstmiddle"), "last");
163  g_assert (strcmp (string1->str, "firstmiddlelast") == 0);
164  g_string_free (string1, TRUE);
165 
166  /* insert_len */
167
168  string1 = g_string_new ("firstlast");
169  g_string_insert_len (string1, 5, "middlejunkjunk", strlen ("middle"));
170  g_assert (strcmp (string1->str, "firstmiddlelast") == 0);
171  g_string_free (string1, TRUE);
172
173  /* insert_len with magic -1 pos for append */
174  string1 = g_string_new ("first");
175  g_string_insert_len (string1, -1, "lastjunkjunk", strlen ("last"));
176  g_assert (strcmp (string1->str, "firstlast") == 0);
177  g_string_free (string1, TRUE);
178 
179  /* insert_len with magic -1 len for strlen-the-string */
180  string1 = g_string_new ("first");
181  g_string_insert_len (string1, 5, "last", -1);
182  g_assert (strcmp (string1->str, "firstlast") == 0);
183  g_string_free (string1, TRUE);
184
185  /* g_string_equal */
186  string1 = g_string_new ("test");
187  string2 = g_string_new ("te");
188  g_assert (! g_string_equal(string1, string2));
189  g_string_append (string2, "st");
190  g_assert (g_string_equal(string1, string2));
191  g_string_free (string1, TRUE);
192  g_string_free (string2, TRUE);
193 
194  /* Check handling of embedded ASCII 0 (NUL) characters in GString. */
195  string1 = g_string_new ("fiddle");
196  string2 = g_string_new ("fiddle");
197  g_assert (g_string_equal(string1, string2));
198  g_string_append_c(string1, '\0');
199  g_assert (! g_string_equal(string1, string2));
200  g_string_append_c(string2, '\0');
201  g_assert (g_string_equal(string1, string2));
202  g_string_append_c(string1, 'x');
203  g_string_append_c(string2, 'y');
204  g_assert (! g_string_equal(string1, string2));
205  g_assert (string1->len == 8);
206  g_string_append(string1, "yzzy");
207  g_assert (string1->len == 12);
208  g_assert ( memcmp(string1->str, "fiddle\0xyzzy", 13) == 0);
209  g_string_insert(string1, 1, "QED");
210  g_assert ( memcmp(string1->str, "fQEDiddle\0xyzzy", 16) == 0);
211  g_string_free (string1, TRUE);
212  g_string_free (string2, TRUE);
213 
214  g_assert (g_str_has_prefix("foobar", "gazonk") == FALSE);
215  g_assert (g_str_has_prefix("xyzzy", "xyzzy") == TRUE);
216  g_assert (g_str_has_prefix("xyzzy", "xy") == TRUE);
217  g_assert (g_str_has_prefix("xyzzy", "") == TRUE);
218  g_assert (g_str_has_prefix("xyz", "xyzzy") == FALSE);
219  g_assert (g_str_has_prefix("", "xyzzy") == FALSE);
220  g_assert (g_str_has_prefix("", "") == TRUE);
221
222  g_assert (g_str_has_suffix("foobar", "gazonk") == FALSE);
223  g_assert (g_str_has_suffix("xyzzy", "xyzzy") == TRUE);
224  g_assert (g_str_has_suffix("xyzzy", "zy") == TRUE);
225  g_assert (g_str_has_suffix("xyzzy", "") == TRUE);
226  g_assert (g_str_has_suffix("zzy", "xyzzy") == FALSE);
227  g_assert (g_str_has_suffix("", "xyzzy") == FALSE);
228  g_assert (g_str_has_suffix("", "") == TRUE);
229
230  tmp_string = (gchar *) g_malloc (10);
231  g_snprintf (tmp_string, 10, "%2$s %1$s", "a", "b");
232  g_assert (strcmp (tmp_string, "b a") == 0);
233  return 0;
234}
235
236
Note: See TracBrowser for help on using the repository browser.