Blame glib/tests/cache.c

Packit ae235b
/* Copyright (C) 2011 Red Hat, Inc.
Packit ae235b
 *
Packit ae235b
 * This library is free software; you can redistribute it and/or
Packit ae235b
 * modify it under the terms of the GNU Lesser General Public
Packit ae235b
 * License as published by the Free Software Foundation; either
Packit ae235b
 * version 2.1 of the License, or (at your option) any later version.
Packit ae235b
 *
Packit ae235b
 * This library is distributed in the hope that it will be useful,
Packit ae235b
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit ae235b
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit ae235b
 * Lesser General Public License for more details.
Packit ae235b
 *
Packit ae235b
 * You should have received a copy of the GNU Lesser General Public
Packit ae235b
 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
Packit ae235b
 */
Packit ae235b
Packit ae235b
/* We are testing some deprecated APIs here */
Packit ae235b
#define GLIB_DISABLE_DEPRECATION_WARNINGS
Packit ae235b
Packit ae235b
#include <glib.h>
Packit ae235b
Packit ae235b
static gint value_create_count = 0;
Packit ae235b
static gint value_destroy_count = 0;
Packit ae235b
Packit ae235b
static gpointer
Packit ae235b
value_create (gpointer key)
Packit ae235b
{
Packit ae235b
  gint *value;
Packit ae235b
Packit ae235b
  value_create_count++;
Packit ae235b
Packit ae235b
  value = g_new (gint, 1);
Packit ae235b
  *value = *(gint*)key * 2;
Packit ae235b
Packit ae235b
  return value;
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
value_destroy (gpointer value)
Packit ae235b
{
Packit ae235b
  value_destroy_count++;
Packit ae235b
  g_free (value);
Packit ae235b
}
Packit ae235b
Packit ae235b
static gpointer
Packit ae235b
key_dup (gpointer key)
Packit ae235b
{
Packit ae235b
  gint *newkey;
Packit ae235b
Packit ae235b
  newkey = g_new (gint, 1);
Packit ae235b
  *newkey = *(gint*)key;
Packit ae235b
Packit ae235b
  return newkey;
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
key_destroy (gpointer key)
Packit ae235b
{
Packit ae235b
  g_free (key);
Packit ae235b
}
Packit ae235b
Packit ae235b
static guint
Packit ae235b
key_hash (gconstpointer key)
Packit ae235b
{
Packit ae235b
  return *(guint*)key;
Packit ae235b
}
Packit ae235b
Packit ae235b
static guint
Packit ae235b
value_hash (gconstpointer value)
Packit ae235b
{
Packit ae235b
  return *(guint*)value;
Packit ae235b
}
Packit ae235b
Packit ae235b
static gboolean
Packit ae235b
key_equal (gconstpointer key1, gconstpointer key2)
Packit ae235b
{
Packit ae235b
  return *(gint*)key1 == *(gint*)key2;
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
key_foreach (gpointer valuep, gpointer keyp, gpointer data)
Packit ae235b
{
Packit ae235b
  gint *count = data;
Packit ae235b
  gint *key = keyp;
Packit ae235b
Packit ae235b
  (*count)++;
Packit ae235b
Packit ae235b
  g_assert_cmpint (*key, ==, 2);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
value_foreach (gpointer keyp, gpointer nodep, gpointer data)
Packit ae235b
{
Packit ae235b
  gint *count = data;
Packit ae235b
  gint *key = keyp;
Packit ae235b
Packit ae235b
  (*count)++;
Packit ae235b
Packit ae235b
  g_assert_cmpint (*key, ==, 2);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_cache_basic (void)
Packit ae235b
{
Packit ae235b
  GCache *c;
Packit ae235b
  gint *key;
Packit ae235b
  gint *value;
Packit ae235b
  gint count;
Packit ae235b
Packit ae235b
  value_create_count = 0;
Packit ae235b
  value_destroy_count = 0;
Packit ae235b
Packit ae235b
  c = g_cache_new (value_create, value_destroy,
Packit ae235b
                   key_dup, key_destroy,
Packit ae235b
                   key_hash, value_hash, key_equal);
Packit ae235b
Packit ae235b
  key = g_new (gint, 1);
Packit ae235b
  *key = 2;
Packit ae235b
Packit ae235b
  value = g_cache_insert (c, key);
Packit ae235b
  g_assert_cmpint (*value, ==, 4);
Packit ae235b
  g_assert_cmpint (value_create_count, ==, 1);
Packit ae235b
  g_assert_cmpint (value_destroy_count, ==, 0);
Packit ae235b
Packit ae235b
  count = 0;
Packit ae235b
  g_cache_key_foreach (c, key_foreach, &count);
Packit ae235b
  g_assert_cmpint (count, ==, 1);
Packit ae235b
Packit ae235b
  count = 0;
Packit ae235b
  g_cache_value_foreach (c, value_foreach, &count);
Packit ae235b
  g_assert_cmpint (count, ==, 1);
Packit ae235b
Packit ae235b
  value = g_cache_insert (c, key);
Packit ae235b
  g_assert_cmpint (*value, ==, 4);
Packit ae235b
  g_assert_cmpint (value_create_count, ==, 1);
Packit ae235b
  g_assert_cmpint (value_destroy_count, ==, 0);
Packit ae235b
Packit ae235b
  g_cache_remove (c, value);
Packit ae235b
  g_assert_cmpint (value_create_count, ==, 1);
Packit ae235b
  g_assert_cmpint (value_destroy_count, ==, 0);
Packit ae235b
Packit ae235b
  g_cache_remove (c, value);
Packit ae235b
  g_assert_cmpint (value_create_count, ==, 1);
Packit ae235b
  g_assert_cmpint (value_destroy_count, ==, 1);
Packit ae235b
Packit ae235b
  value = g_cache_insert (c, key);
Packit ae235b
  g_assert_cmpint (*value, ==, 4);
Packit ae235b
  g_assert_cmpint (value_create_count, ==, 2);
Packit ae235b
  g_assert_cmpint (value_destroy_count, ==, 1);
Packit ae235b
Packit ae235b
  g_cache_remove (c, value);
Packit ae235b
  g_cache_destroy (c);
Packit ae235b
  g_free (key);
Packit ae235b
}
Packit ae235b
Packit ae235b
int
Packit ae235b
main (int argc, char *argv[])
Packit ae235b
{
Packit ae235b
  g_test_init (&argc, &argv, NULL);
Packit ae235b
Packit ae235b
  g_test_add_func ("/cache/basic", test_cache_basic);
Packit ae235b
Packit ae235b
  return g_test_run ();
Packit ae235b
Packit ae235b
}