Blame glib/tests/dataset.c

Packit ae235b
#include <glib.h>
Packit ae235b
#include <stdlib.h>
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_quark_basic (void)
Packit ae235b
{
Packit ae235b
  GQuark quark;
Packit ae235b
  const gchar *orig = "blargh";
Packit ae235b
  gchar *copy;
Packit ae235b
  const gchar *str;
Packit ae235b
Packit ae235b
  quark = g_quark_try_string ("no-such-quark");
Packit ae235b
  g_assert (quark == 0);
Packit ae235b
Packit ae235b
  copy = g_strdup (orig);
Packit ae235b
  quark = g_quark_from_static_string (orig);
Packit ae235b
  g_assert (quark != 0);
Packit ae235b
  g_assert (g_quark_from_string (orig) == quark);
Packit ae235b
  g_assert (g_quark_from_string (copy) == quark);
Packit ae235b
  g_assert (g_quark_try_string (orig) == quark);
Packit ae235b
Packit ae235b
  str = g_quark_to_string (quark);
Packit ae235b
  g_assert_cmpstr (str, ==, orig);
Packit ae235b
Packit ae235b
  g_free (copy);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_quark_string (void)
Packit ae235b
{
Packit ae235b
  const gchar *orig = "string1";
Packit ae235b
  gchar *copy;
Packit ae235b
  const gchar *str1;
Packit ae235b
  const gchar *str2;
Packit ae235b
Packit ae235b
  copy = g_strdup (orig);
Packit ae235b
Packit ae235b
  str1 = g_intern_static_string (orig);
Packit ae235b
  str2 = g_intern_string (copy);
Packit ae235b
  g_assert (str1 == str2);
Packit ae235b
  g_assert (str1 == orig);
Packit ae235b
Packit ae235b
  g_free (copy);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_dataset_basic (void)
Packit ae235b
{
Packit ae235b
  gpointer location = (gpointer)test_dataset_basic;
Packit ae235b
  gpointer other = (gpointer)test_quark_basic;
Packit ae235b
  gpointer data = "test1";
Packit ae235b
  gpointer ret;
Packit ae235b
Packit ae235b
  g_dataset_set_data (location, "test1", data);
Packit ae235b
Packit ae235b
  ret = g_dataset_get_data (location, "test1");
Packit ae235b
  g_assert (ret == data);
Packit ae235b
Packit ae235b
  ret = g_dataset_get_data (location, "test2");
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
Packit ae235b
  ret = g_dataset_get_data (other, "test1");
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
Packit ae235b
  g_dataset_set_data (location, "test1", "new-value");
Packit ae235b
  ret = g_dataset_get_data (location, "test1");
Packit ae235b
  g_assert (ret != data);
Packit ae235b
Packit ae235b
  g_dataset_remove_data (location, "test1");
Packit ae235b
  ret = g_dataset_get_data (location, "test1");
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
Packit ae235b
  ret = g_dataset_get_data (location, NULL);
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
}
Packit ae235b
Packit ae235b
static gint destroy_count;
Packit ae235b
Packit ae235b
static void
Packit ae235b
notify (gpointer data)
Packit ae235b
{
Packit ae235b
  destroy_count++;
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_dataset_full (void)
Packit ae235b
{
Packit ae235b
  gpointer location = (gpointer)test_dataset_full;
Packit ae235b
Packit ae235b
  g_dataset_set_data_full (location, "test1", "test1", notify);
Packit ae235b
Packit ae235b
  destroy_count = 0;
Packit ae235b
  g_dataset_set_data (location, "test1", NULL);
Packit ae235b
  g_assert (destroy_count == 1);
Packit ae235b
Packit ae235b
  g_dataset_set_data_full (location, "test1", "test1", notify);
Packit ae235b
Packit ae235b
  destroy_count = 0;
Packit ae235b
  g_dataset_remove_data (location, "test1");
Packit ae235b
  g_assert (destroy_count == 1);
Packit ae235b
Packit ae235b
  g_dataset_set_data_full (location, "test1", "test1", notify);
Packit ae235b
Packit ae235b
  destroy_count = 0;
Packit ae235b
  g_dataset_remove_no_notify (location, "test1");
Packit ae235b
  g_assert (destroy_count == 0);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
foreach (GQuark   id,
Packit ae235b
         gpointer data,
Packit ae235b
         gpointer user_data)
Packit ae235b
{
Packit ae235b
  gint *counter = user_data;
Packit ae235b
Packit ae235b
  *counter += 1;
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_dataset_foreach (void)
Packit ae235b
{
Packit ae235b
  gpointer location = (gpointer)test_dataset_foreach;
Packit ae235b
  gint my_count;
Packit ae235b
Packit ae235b
  my_count = 0;
Packit ae235b
  g_dataset_set_data_full (location, "test1", "test1", notify);
Packit ae235b
  g_dataset_set_data_full (location, "test2", "test2", notify);
Packit ae235b
  g_dataset_set_data_full (location, "test3", "test3", notify);
Packit ae235b
  g_dataset_foreach (location, foreach, &my_count);
Packit ae235b
  g_assert (my_count == 3);
Packit ae235b
Packit ae235b
  g_dataset_destroy (location);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_dataset_destroy (void)
Packit ae235b
{
Packit ae235b
  gpointer location = (gpointer)test_dataset_destroy;
Packit ae235b
Packit ae235b
  destroy_count = 0;
Packit ae235b
  g_dataset_set_data_full (location, "test1", "test1", notify);
Packit ae235b
  g_dataset_set_data_full (location, "test2", "test2", notify);
Packit ae235b
  g_dataset_set_data_full (location, "test3", "test3", notify);
Packit ae235b
  g_dataset_destroy (location);
Packit ae235b
  g_assert (destroy_count == 3);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_dataset_id (void)
Packit ae235b
{
Packit ae235b
  gpointer location = (gpointer)test_dataset_id;
Packit ae235b
  gpointer other = (gpointer)test_quark_basic;
Packit ae235b
  gpointer data = "test1";
Packit ae235b
  gpointer ret;
Packit ae235b
  GQuark quark;
Packit ae235b
Packit ae235b
  quark = g_quark_from_string ("test1");
Packit ae235b
Packit ae235b
  g_dataset_id_set_data (location, quark, data);
Packit ae235b
Packit ae235b
  ret = g_dataset_id_get_data (location, quark);
Packit ae235b
  g_assert (ret == data);
Packit ae235b
Packit ae235b
  ret = g_dataset_id_get_data (location, g_quark_from_string ("test2"));
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
Packit ae235b
  ret = g_dataset_id_get_data (other, quark);
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
Packit ae235b
  g_dataset_id_set_data (location, quark, "new-value");
Packit ae235b
  ret = g_dataset_id_get_data (location, quark);
Packit ae235b
  g_assert (ret != data);
Packit ae235b
Packit ae235b
  g_dataset_id_remove_data (location, quark);
Packit ae235b
  ret = g_dataset_id_get_data (location, quark);
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
Packit ae235b
  ret = g_dataset_id_get_data (location, 0);
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
}
Packit ae235b
Packit ae235b
static GData *list;
Packit ae235b
Packit ae235b
static void
Packit ae235b
free_one (gpointer data)
Packit ae235b
{
Packit ae235b
  /* recurse */
Packit ae235b
  g_datalist_clear (&list);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_datalist_clear (void)
Packit ae235b
{
Packit ae235b
  /* Need to use a subprocess because it will deadlock if it fails */
Packit ae235b
  if (g_test_subprocess ())
Packit ae235b
    {
Packit ae235b
      g_datalist_init (&list);
Packit ae235b
      g_datalist_set_data_full (&list, "one", GINT_TO_POINTER (1), free_one);
Packit ae235b
      g_datalist_set_data_full (&list, "two", GINT_TO_POINTER (2), NULL);
Packit ae235b
      g_datalist_clear (&list);
Packit ae235b
      g_assert (list == NULL);
Packit ae235b
      return;
Packit ae235b
    }
Packit ae235b
Packit ae235b
  g_test_trap_subprocess (NULL, 500000, 0);
Packit ae235b
  g_test_trap_assert_passed ();
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_datalist_basic (void)
Packit ae235b
{
Packit ae235b
  GData *list = NULL;
Packit ae235b
  gpointer data;
Packit ae235b
  gpointer ret;
Packit ae235b
Packit ae235b
  g_datalist_init (&list);
Packit ae235b
  data = "one";
Packit ae235b
  g_datalist_set_data (&list, "one", data);
Packit ae235b
  ret = g_datalist_get_data (&list, "one");
Packit ae235b
  g_assert (ret == data);
Packit ae235b
Packit ae235b
  ret = g_datalist_get_data (&list, "two");
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
Packit ae235b
  ret = g_datalist_get_data (&list, NULL);
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
Packit ae235b
  g_datalist_clear (&list);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_datalist_id (void)
Packit ae235b
{
Packit ae235b
  GData *list = NULL;
Packit ae235b
  gpointer data;
Packit ae235b
  gpointer ret;
Packit ae235b
Packit ae235b
  g_datalist_init (&list);
Packit ae235b
  data = "one";
Packit ae235b
  g_datalist_id_set_data (&list, g_quark_from_string ("one"), data);
Packit ae235b
  ret = g_datalist_id_get_data (&list, g_quark_from_string ("one"));
Packit ae235b
  g_assert (ret == data);
Packit ae235b
Packit ae235b
  ret = g_datalist_id_get_data (&list, g_quark_from_string ("two"));
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
Packit ae235b
  ret = g_datalist_id_get_data (&list, 0);
Packit ae235b
  g_assert (ret == NULL);
Packit ae235b
Packit ae235b
  g_datalist_clear (&list);
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 ("/quark/basic", test_quark_basic);
Packit ae235b
  g_test_add_func ("/quark/string", test_quark_string);
Packit ae235b
  g_test_add_func ("/dataset/basic", test_dataset_basic);
Packit ae235b
  g_test_add_func ("/dataset/id", test_dataset_id);
Packit ae235b
  g_test_add_func ("/dataset/full", test_dataset_full);
Packit ae235b
  g_test_add_func ("/dataset/foreach", test_dataset_foreach);
Packit ae235b
  g_test_add_func ("/dataset/destroy", test_dataset_destroy);
Packit ae235b
  g_test_add_func ("/datalist/basic", test_datalist_basic);
Packit ae235b
  g_test_add_func ("/datalist/id", test_datalist_id);
Packit ae235b
  g_test_add_func ("/datalist/recursive-clear", test_datalist_clear);
Packit ae235b
Packit ae235b
  return g_test_run ();
Packit ae235b
}