glib/tests/array-test1.c
author hgs
Thu, 14 Oct 2010 14:15:50 +0530
changeset 72 403e7f6ed6c5
parent 50 79045913e4e9
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50
hgs
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     2
// All rights reserved.
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     7
//
hgs
parents:
diff changeset
     8
// Initial Contributors:
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    10
//
hgs
parents:
diff changeset
    11
// Contributors:
hgs
parents:
diff changeset
    12
//
hgs
parents:
diff changeset
    13
// Description:
hgs
parents:
diff changeset
    14
//
hgs
parents:
diff changeset
    15
hgs
parents:
diff changeset
    16
hgs
parents:
diff changeset
    17
#undef G_DISABLE_ASSERT
hgs
parents:
diff changeset
    18
#undef G_LOG_DOMAIN
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include <glib.h>
72
hgs
parents: 50
diff changeset
    21
#include <sys/stat.h>
hgs
parents: 50
diff changeset
    22
#include <glib/gprintf.h>
hgs
parents: 50
diff changeset
    23
#ifdef __SYMBIAN32__
hgs
parents: 50
diff changeset
    24
#include "mrt2_glib2_test.h"
hgs
parents: 50
diff changeset
    25
#endif /*__SYMBIAN32__*/
50
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
static gint sort (gconstpointer a, gconstpointer b)
hgs
parents:
diff changeset
    28
{
hgs
parents:
diff changeset
    29
	if(*(guint32*)a == *(guint32*)b)
hgs
parents:
diff changeset
    30
		return 0;
hgs
parents:
diff changeset
    31
	else
hgs
parents:
diff changeset
    32
		return *(guint32*)a < *(guint32*)b ? -1 : 1;
hgs
parents:
diff changeset
    33
}
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
static gint sort_userdata (gconstpointer a, gconstpointer b, gpointer user_data)
hgs
parents:
diff changeset
    37
{
hgs
parents:
diff changeset
    38
	  if(*(guint32*)a == *(guint32*)b)
hgs
parents:
diff changeset
    39
			return 0;
hgs
parents:
diff changeset
    40
	  else
hgs
parents:
diff changeset
    41
			return *(guint32*)a < *(guint32*)b ? -1 : 1;
hgs
parents:
diff changeset
    42
}
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
/*Will return TRUE if input GArray and int[] array 2 are same else FALSE*/
hgs
parents:
diff changeset
    47
gboolean compare_array(GArray* array1, gint* array2, gint size)
hgs
parents:
diff changeset
    48
{
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
    int i;
hgs
parents:
diff changeset
    51
	if ( size != array1->len)
hgs
parents:
diff changeset
    52
		return FALSE;
hgs
parents:
diff changeset
    53
	for ( i = 0; i < size ; i++)
hgs
parents:
diff changeset
    54
	{
hgs
parents:
diff changeset
    55
		if ( g_array_index(array1, gint, i) != array2[i])
hgs
parents:
diff changeset
    56
			return FALSE;
hgs
parents:
diff changeset
    57
	}
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
	return TRUE;
hgs
parents:
diff changeset
    60
}
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
void test_remove_array_index()
hgs
parents:
diff changeset
    64
{
hgs
parents:
diff changeset
    65
    GArray *garray;
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
    const gint ARRAY_SIZE = 7;
hgs
parents:
diff changeset
    68
    const gint ARRAY_SIZE_AFTER_REMOVE_INDEX = 6;
hgs
parents:
diff changeset
    69
    const gint ARRAY_SIZE_AFTER_REMOVE_INDEX_FAST = 5;
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
    gint array[ARRAY_SIZE] = {4,5,6,7,8,9,10};
hgs
parents:
diff changeset
    72
    gint array_after_remove_index_1[ARRAY_SIZE_AFTER_REMOVE_INDEX]= {4,6,7,8,9,10};  /*array after removing index 1*/
hgs
parents:
diff changeset
    73
    gint array_after_remove_index_fast_2[ARRAY_SIZE_AFTER_REMOVE_INDEX_FAST] = {4,6,10,8,9}; /* array after removing index 2 fast. Input is array after removing index 1 */
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
    int i;
hgs
parents:
diff changeset
    76
    gboolean ret;
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
    garray = g_array_new (FALSE,FALSE,sizeof(gint));
hgs
parents:
diff changeset
    79
    if(garray == NULL)
hgs
parents:
diff changeset
    80
	{
72
hgs
parents: 50
diff changeset
    81
      g_print( "Array not created");
50
hgs
parents:
diff changeset
    82
      assert_failed = 1;
hgs
parents:
diff changeset
    83
	  return ;
hgs
parents:
diff changeset
    84
	}
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
	/*Insert values into array*/
hgs
parents:
diff changeset
    87
    g_array_insert_vals(garray,0,array,ARRAY_SIZE);
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
    /* test for deleting single element in an array. Removing the element with index 1*/
72
hgs
parents: 50
diff changeset
    90
    g_print( "Delete array element at index 1");
50
hgs
parents:
diff changeset
    91
    garray = g_array_remove_index(garray,1);
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
	if(garray == NULL )
hgs
parents:
diff changeset
    94
	{
72
hgs
parents: 50
diff changeset
    95
		g_print( "NULL return by g_array_remove_index");
50
hgs
parents:
diff changeset
    96
		assert_failed = 1;
hgs
parents:
diff changeset
    97
		return ;
hgs
parents:
diff changeset
    98
	}
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
    /*Print the array elements after remove*/
hgs
parents:
diff changeset
   101
    for(i=0; i<garray->len; i++)
hgs
parents:
diff changeset
   102
    {
72
hgs
parents: 50
diff changeset
   103
          g_print( "Current array element at index %d is %d", i,g_array_index(garray, gint, i));
50
hgs
parents:
diff changeset
   104
	}
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
	/*Check if the array size is now 4 and element at index 1 is not 5 after removal*/
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
	ret = compare_array(garray, array_after_remove_index_1, ARRAY_SIZE_AFTER_REMOVE_INDEX);
hgs
parents:
diff changeset
   109
	if ( !ret)
hgs
parents:
diff changeset
   110
	{
72
hgs
parents: 50
diff changeset
   111
		g_print( "Array Element not properly deleted by g_array_remove_index");
50
hgs
parents:
diff changeset
   112
		assert_failed = 1;
hgs
parents:
diff changeset
   113
		g_array_free(garray,TRUE);
hgs
parents:
diff changeset
   114
		return ;
hgs
parents:
diff changeset
   115
	}
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
	/* Test to remove index element 2 using g_array_remove_index_fast*/
hgs
parents:
diff changeset
   119
72
hgs
parents: 50
diff changeset
   120
    g_print( "Delete array element at index 2");
50
hgs
parents:
diff changeset
   121
    garray =g_array_remove_index_fast(garray,2);
hgs
parents:
diff changeset
   122
    if(garray == NULL)
hgs
parents:
diff changeset
   123
    {
72
hgs
parents: 50
diff changeset
   124
		g_print( "NULL return by g_array_remove_index_fast");
50
hgs
parents:
diff changeset
   125
		assert_failed = 1;
hgs
parents:
diff changeset
   126
		return ;
hgs
parents:
diff changeset
   127
	}
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
    for(i=0; i<garray->len; i++)
hgs
parents:
diff changeset
   130
	{
72
hgs
parents: 50
diff changeset
   131
		g_print( "Current array element at index %d is %d", i,g_array_index(garray, gint, i));
50
hgs
parents:
diff changeset
   132
	}
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
	ret = compare_array(garray, array_after_remove_index_fast_2, ARRAY_SIZE_AFTER_REMOVE_INDEX_FAST);
hgs
parents:
diff changeset
   135
	if ( !ret)
hgs
parents:
diff changeset
   136
	{
72
hgs
parents: 50
diff changeset
   137
		g_print( "Array Element not properly deleted by g_array_remove_index_fast");
50
hgs
parents:
diff changeset
   138
		assert_failed = 1;
hgs
parents:
diff changeset
   139
		g_array_free(garray,TRUE);
hgs
parents:
diff changeset
   140
		return;
hgs
parents:
diff changeset
   141
	}
hgs
parents:
diff changeset
   142
    g_array_free(garray,TRUE);
hgs
parents:
diff changeset
   143
}
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
void test_test_remove_array_index_range()
hgs
parents:
diff changeset
   147
{
hgs
parents:
diff changeset
   148
	const int ARRAY_SIZE = 10;
hgs
parents:
diff changeset
   149
	const int ARRAY_SIZE_AFTER_REMOVE_INDEX_RANGE = 8;
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
	gint array[ARRAY_SIZE]=															{10,5,16,7,11,0,20,1,9,8};
hgs
parents:
diff changeset
   152
	gint array_after_remove_index_range[ARRAY_SIZE_AFTER_REMOVE_INDEX_RANGE] =  	{10,5,16,0,20,1,9,8};  /*after removing 2 elements from index 3*/
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
	gboolean ret;
hgs
parents:
diff changeset
   155
	GArray* garray;
hgs
parents:
diff changeset
   156
	int i;
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
	garray = g_array_new (FALSE,FALSE,sizeof(gint));
hgs
parents:
diff changeset
   159
	if(garray == NULL)
hgs
parents:
diff changeset
   160
	{
72
hgs
parents: 50
diff changeset
   161
		  g_print( "Array not created");
50
hgs
parents:
diff changeset
   162
		  assert_failed = 1;
hgs
parents:
diff changeset
   163
		  return ;
hgs
parents:
diff changeset
   164
	}
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
	g_array_insert_vals(garray,0,array,ARRAY_SIZE);
hgs
parents:
diff changeset
   167
	for(i=0; i<garray->len;i++)
hgs
parents:
diff changeset
   168
	{
72
hgs
parents: 50
diff changeset
   169
		g_print( "Current array elements %d is %d", i,g_array_index(garray, gint, i));
50
hgs
parents:
diff changeset
   170
	}
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
	garray = g_array_remove_range(garray,3,2); /*remove two elements from index 3 */
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
	if(garray == NULL)
hgs
parents:
diff changeset
   175
	{
72
hgs
parents: 50
diff changeset
   176
		g_print("Elements not deleted properly by g_array_remove_range");
50
hgs
parents:
diff changeset
   177
		assert_failed = 1;
hgs
parents:
diff changeset
   178
		return ;
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
	}
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
	/*print the array elements */
hgs
parents:
diff changeset
   183
	for(i=0; i<garray->len;i++)
hgs
parents:
diff changeset
   184
	{
72
hgs
parents: 50
diff changeset
   185
		g_print( "Curent array element(after deletion) %d is %d", i,g_array_index(garray, gint, i));
50
hgs
parents:
diff changeset
   186
	}
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
	ret = compare_array(garray, array_after_remove_index_range, ARRAY_SIZE_AFTER_REMOVE_INDEX_RANGE);
hgs
parents:
diff changeset
   190
	if(!ret)
hgs
parents:
diff changeset
   191
	{
72
hgs
parents: 50
diff changeset
   192
		g_print("Elements not deleted properly");
50
hgs
parents:
diff changeset
   193
		assert_failed = 1;
hgs
parents:
diff changeset
   194
		g_array_free(garray,TRUE);
hgs
parents:
diff changeset
   195
		return ;
hgs
parents:
diff changeset
   196
	}
hgs
parents:
diff changeset
   197
	g_array_free(garray,TRUE);
hgs
parents:
diff changeset
   198
}
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
void test_sort_array()
hgs
parents:
diff changeset
   202
{
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
	GArray *garray;
hgs
parents:
diff changeset
   205
	const int ARRAY_SIZE = 11;
hgs
parents:
diff changeset
   206
    gint array[ARRAY_SIZE] = {10,5,16,7,11,0,20,1,9,8,9};
hgs
parents:
diff changeset
   207
	gint sort_array[ARRAY_SIZE] = {0,1,5,7,8,9,9,10,11,16,20};
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
	gboolean ret;
hgs
parents:
diff changeset
   210
	int i;
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
    /* Test for sorting the array elements */
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
	garray = g_array_new (FALSE,FALSE,sizeof(gint));
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
	if(garray == NULL)
hgs
parents:
diff changeset
   217
	{
72
hgs
parents: 50
diff changeset
   218
		g_print( "Array not created");
50
hgs
parents:
diff changeset
   219
		assert_failed = 1;
hgs
parents:
diff changeset
   220
		return ;
hgs
parents:
diff changeset
   221
	}
hgs
parents:
diff changeset
   222
	g_array_insert_vals(garray,0,array,ARRAY_SIZE);
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
	g_array_sort(garray, sort);
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
	if(garray == NULL)
hgs
parents:
diff changeset
   227
	{
72
hgs
parents: 50
diff changeset
   228
		g_print( "Array not sorted");
50
hgs
parents:
diff changeset
   229
		assert_failed = 1;
hgs
parents:
diff changeset
   230
		return ;
hgs
parents:
diff changeset
   231
	}
hgs
parents:
diff changeset
   232
72
hgs
parents: 50
diff changeset
   233
	g_print("SORTED ARRAY");
50
hgs
parents:
diff changeset
   234
hgs
parents:
diff changeset
   235
	for(i=0;i<garray->len;i++)
hgs
parents:
diff changeset
   236
	{
72
hgs
parents: 50
diff changeset
   237
		g_print( "Element %d is %d", i,g_array_index(garray, gint, i));
50
hgs
parents:
diff changeset
   238
	}
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
	ret = compare_array(garray, sort_array, ARRAY_SIZE);
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
	if(!ret)
hgs
parents:
diff changeset
   243
	{
72
hgs
parents: 50
diff changeset
   244
		g_print( "Array not sorted correctly");
50
hgs
parents:
diff changeset
   245
		assert_failed = 1;
hgs
parents:
diff changeset
   246
		return ;
hgs
parents:
diff changeset
   247
	}
hgs
parents:
diff changeset
   248
hgs
parents:
diff changeset
   249
	g_array_free(garray,TRUE);
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
    garray = g_array_new (FALSE,FALSE,sizeof(gint));
hgs
parents:
diff changeset
   253
	if(garray == NULL)
hgs
parents:
diff changeset
   254
	{
72
hgs
parents: 50
diff changeset
   255
      g_print( "Array not created");
50
hgs
parents:
diff changeset
   256
	  return ;
hgs
parents:
diff changeset
   257
	}
hgs
parents:
diff changeset
   258
	g_array_insert_vals(garray,0,array,ARRAY_SIZE);
hgs
parents:
diff changeset
   259
hgs
parents:
diff changeset
   260
	g_array_sort_with_data (garray, sort_userdata, NULL);
hgs
parents:
diff changeset
   261
hgs
parents:
diff changeset
   262
	if(garray == NULL)
hgs
parents:
diff changeset
   263
	{
72
hgs
parents: 50
diff changeset
   264
		g_print( "Array not sorted with user data");
50
hgs
parents:
diff changeset
   265
		assert_failed = 1;
hgs
parents:
diff changeset
   266
		return ;
hgs
parents:
diff changeset
   267
	}
hgs
parents:
diff changeset
   268
72
hgs
parents: 50
diff changeset
   269
	g_print("SORTED ARRAY WITH USERDATA");
50
hgs
parents:
diff changeset
   270
	for(i=0;i<garray->len;i++)
hgs
parents:
diff changeset
   271
	{
72
hgs
parents: 50
diff changeset
   272
		g_print( "Element %d is %d", i,g_array_index(garray, gint, i));
50
hgs
parents:
diff changeset
   273
	}
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
	ret = compare_array(garray, sort_array, ARRAY_SIZE);
hgs
parents:
diff changeset
   276
	if(!ret)
hgs
parents:
diff changeset
   277
	{
72
hgs
parents: 50
diff changeset
   278
		g_print( "Array not sorted correctly with user data");
50
hgs
parents:
diff changeset
   279
		assert_failed = 1;
hgs
parents:
diff changeset
   280
		return ;
hgs
parents:
diff changeset
   281
	}
hgs
parents:
diff changeset
   282
    g_array_free(garray,TRUE);
hgs
parents:
diff changeset
   283
}
hgs
parents:
diff changeset
   284
hgs
parents:
diff changeset
   285
hgs
parents:
diff changeset
   286
int main (void)
hgs
parents:
diff changeset
   287
{
72
hgs
parents: 50
diff changeset
   288
    #ifdef __SYMBIAN32__
hgs
parents: 50
diff changeset
   289
    g_log_set_handler (NULL,  G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, &mrtLogHandler, NULL);
hgs
parents: 50
diff changeset
   290
    g_set_print_handler(mrtPrintHandler);
hgs
parents: 50
diff changeset
   291
    #endif /*__SYMBIAN32__*/
hgs
parents: 50
diff changeset
   292
    
hgs
parents: 50
diff changeset
   293
    g_print("Test array1-test Start");
hgs
parents: 50
diff changeset
   294
    test_test_remove_array_index_range();
50
hgs
parents:
diff changeset
   295
	test_sort_array();
hgs
parents:
diff changeset
   296
	test_remove_array_index();
hgs
parents:
diff changeset
   297
hgs
parents:
diff changeset
   298
	if(assert_failed)
72
hgs
parents: 50
diff changeset
   299
		g_print("Test array1-test Failed");
50
hgs
parents:
diff changeset
   300
	else
72
hgs
parents: 50
diff changeset
   301
		g_print("Test array1-test Successful");
50
hgs
parents:
diff changeset
   302
72
hgs
parents: 50
diff changeset
   303
    #if __SYMBIAN32__
hgs
parents: 50
diff changeset
   304
    testResultXml("array1-test");
hgs
parents: 50
diff changeset
   305
    #endif /* EMULATOR */
50
hgs
parents:
diff changeset
   306
    return 0;
hgs
parents:
diff changeset
   307
}
hgs
parents:
diff changeset
   308
hgs
parents:
diff changeset
   309