#undef G_DISABLE_ASSERT
#undef G_LOG_DOMAIN

#include <glib.h>

#define RUNS 100

G_LOCK_DEFINE_STATIC (thread_counter);
gulong abs_thread_counter;
gulong running_thread_counter;

void
thread_pool_func (gpointer a, gpointer b)
{
  G_LOCK (thread_counter);
  abs_thread_counter++;
  running_thread_counter++;
  G_UNLOCK (thread_counter);

  g_usleep (g_random_int_range (0, 4000));

  G_LOCK (thread_counter);
  running_thread_counter--;
  G_UNLOCK (thread_counter);
}

int 
main (int   argc,
      char *argv[])
{
  /* Only run the test, if threads are enabled and a default thread
     implementation is available */
#if defined(G_THREADS_ENABLED) && ! defined(G_THREADS_IMPL_NONE)
  GThreadPool *pool1, *pool2, *pool3;
  guint i;
  g_thread_init (NULL);
  
  pool1 = g_thread_pool_new (thread_pool_func, NULL, 3, FALSE, NULL);
  pool2 = g_thread_pool_new (thread_pool_func, NULL, 5, TRUE, NULL);
  pool3 = g_thread_pool_new (thread_pool_func, NULL, 7, TRUE, NULL);

  for (i = 0; i < RUNS; i++)
    {
      g_thread_pool_push (pool1, GUINT_TO_POINTER (1), NULL);
      g_thread_pool_push (pool2, GUINT_TO_POINTER (1), NULL);
      g_thread_pool_push (pool3, GUINT_TO_POINTER (1), NULL);
    } 
  
  g_thread_pool_free (pool1, FALSE, TRUE);
  g_thread_pool_free (pool2, FALSE, TRUE);
  g_thread_pool_free (pool3, FALSE, TRUE);

  g_assert (RUNS * 3 == abs_thread_counter);
  g_assert (running_thread_counter == 0);  
#endif
  return 0;
}
