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 34 int array[10000]; 35 gboolean failed = FALSE; 36 37 #define TEST(m,cond) G_STMT_START { failed = !(cond); \ 38 if (failed) \ 39 { if (!m) \ 40 g_print ("\n(%s:%d) failed for: %s\n", __FILE__, __LINE__, ( # cond )); \ 41 else \ 42 g_print ("\n(%s:%d) failed for: %s: (%s)\n", __FILE__, __LINE__, ( # cond ), (gchar*)m); \ 43 } \ 44 else \ 45 g_print ("."); fflush (stdout); \ 46 } G_STMT_END 47 48 #define C2P(c) ((gpointer) ((long) (c))) 49 #define P2C(p) ((gchar) ((long) (p))) 50 51 #define GLIB_TEST_STRING "el dorado " 52 #define GLIB_TEST_STRING_5 "el do" 53 54 typedef struct { 55 guint age; 56 gchar name[40]; 57 } GlibTestInfo; 58 59 60 61 int 62 main (int argc, 63 char *argv[]) 64 { 65 gint i; 66 GRelation *relation; 67 GTuples *tuples; 68 gint data [1024]; 69 70 71 relation = g_relation_new (2); 72 73 g_relation_index (relation, 0, g_int_hash, g_int_equal); 74 g_relation_index (relation, 1, g_int_hash, g_int_equal); 75 76 for (i = 0; i < 1024; i += 1) 77 data[i] = i; 78 79 for (i = 1; i < 1023; i += 1) 80 { 81 g_relation_insert (relation, data + i, data + i + 1); 82 g_relation_insert (relation, data + i, data + i - 1); 83 } 84 85 for (i = 2; i < 1022; i += 1) 86 { 87 g_assert (! g_relation_exists (relation, data + i, data + i)); 88 g_assert (! g_relation_exists (relation, data + i, data + i + 2)); 89 g_assert (! g_relation_exists (relation, data + i, data + i - 2)); 90 } 91 92 for (i = 1; i < 1023; i += 1) 93 { 94 g_assert (g_relation_exists (relation, data + i, data + i + 1)); 95 g_assert (g_relation_exists (relation, data + i, data + i - 1)); 96 } 97 98 for (i = 2; i < 1022; i += 1) 99 { 100 g_assert (g_relation_count (relation, data + i, 0) == 2); 101 g_assert (g_relation_count (relation, data + i, 1) == 2); 102 } 103 104 g_assert (g_relation_count (relation, data, 0) == 0); 105 106 g_assert (g_relation_count (relation, data + 42, 0) == 2); 107 g_assert (g_relation_count (relation, data + 43, 1) == 2); 108 g_assert (g_relation_count (relation, data + 41, 1) == 2); 109 g_relation_delete (relation, data + 42, 0); 110 g_assert (g_relation_count (relation, data + 42, 0) == 0); 111 g_assert (g_relation_count (relation, data + 43, 1) == 1); 112 g_assert (g_relation_count (relation, data + 41, 1) == 1); 113 114 tuples = g_relation_select (relation, data + 200, 0); 115 116 g_assert (tuples->len == 2); 117 118 #if 0 119 for (i = 0; i < tuples->len; i += 1) 120 { 121 printf ("%d %d\n", 122 *(gint*) g_tuples_index (tuples, i, 0), 123 *(gint*) g_tuples_index (tuples, i, 1)); 124 } 125 #endif 126 127 g_assert (g_relation_exists (relation, data + 300, data + 301)); 128 g_relation_delete (relation, data + 300, 0); 129 g_assert (!g_relation_exists (relation, data + 300, data + 301)); 130 131 g_tuples_destroy (tuples); 132 133 g_relation_destroy (relation); 134 135 relation = NULL; 136 137 return 0; 138 } 139 140