glib/tests/array-test1.c
changeset 50 79045913e4e9
child 72 403e7f6ed6c5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/glib/tests/array-test1.c	Thu Aug 05 23:23:13 2010 +0530
@@ -0,0 +1,309 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+#undef G_DISABLE_ASSERT
+#undef G_LOG_DOMAIN
+
+#include <glib.h>
+#define LOG_FILE "c:\\logs\\array1_test_log.txt"
+#include "std_log_result.h"
+#define LOG_FILENAME_LINE __FILE__, __LINE__
+
+
+void create_xml(int result)
+{
+    if(result)
+        assert_failed = 1;
+
+    testResultXml("array-test");
+    close_log_file();
+}
+
+static gint sort (gconstpointer a, gconstpointer b)
+{
+	if(*(guint32*)a == *(guint32*)b)
+		return 0;
+	else
+		return *(guint32*)a < *(guint32*)b ? -1 : 1;
+}
+
+
+static gint sort_userdata (gconstpointer a, gconstpointer b, gpointer user_data)
+{
+	  if(*(guint32*)a == *(guint32*)b)
+			return 0;
+	  else
+			return *(guint32*)a < *(guint32*)b ? -1 : 1;
+}
+
+
+
+/*Will return TRUE if input GArray and int[] array 2 are same else FALSE*/
+gboolean compare_array(GArray* array1, gint* array2, gint size)
+{
+
+    int i;
+	if ( size != array1->len)
+		return FALSE;
+	for ( i = 0; i < size ; i++)
+	{
+		if ( g_array_index(array1, gint, i) != array2[i])
+			return FALSE;
+	}
+
+	return TRUE;
+}
+
+
+void test_remove_array_index()
+{
+    GArray *garray;
+
+    const gint ARRAY_SIZE = 7;
+    const gint ARRAY_SIZE_AFTER_REMOVE_INDEX = 6;
+    const gint ARRAY_SIZE_AFTER_REMOVE_INDEX_FAST = 5;
+
+    gint array[ARRAY_SIZE] = {4,5,6,7,8,9,10};
+    gint array_after_remove_index_1[ARRAY_SIZE_AFTER_REMOVE_INDEX]= {4,6,7,8,9,10};  /*array after removing index 1*/
+    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 */
+
+    int i;
+    gboolean ret;
+
+    garray = g_array_new (FALSE,FALSE,sizeof(gint));
+    if(garray == NULL)
+	{
+      std_log(LOG_FILENAME_LINE, "Array not created");
+      assert_failed = 1;
+	  return ;
+	}
+
+	/*Insert values into array*/
+    g_array_insert_vals(garray,0,array,ARRAY_SIZE);
+
+    /* test for deleting single element in an array. Removing the element with index 1*/
+    std_log(LOG_FILENAME_LINE, "Delete array element at index 1");
+    garray = g_array_remove_index(garray,1);
+
+	if(garray == NULL )
+	{
+		std_log(LOG_FILENAME_LINE, "NULL return by g_array_remove_index");
+		assert_failed = 1;
+		return ;
+	}
+
+    /*Print the array elements after remove*/
+    for(i=0; i<garray->len; i++)
+    {
+          std_log(LOG_FILENAME_LINE, "Current array element at index %d is %d", i,g_array_index(garray, gint, i));
+	}
+
+	/*Check if the array size is now 4 and element at index 1 is not 5 after removal*/
+
+	ret = compare_array(garray, array_after_remove_index_1, ARRAY_SIZE_AFTER_REMOVE_INDEX);
+	if ( !ret)
+	{
+		std_log(LOG_FILENAME_LINE, "Array Element not properly deleted by g_array_remove_index");
+		assert_failed = 1;
+		g_array_free(garray,TRUE);
+		return ;
+	}
+
+
+	/* Test to remove index element 2 using g_array_remove_index_fast*/
+
+    std_log(LOG_FILENAME_LINE, "Delete array element at index 2");
+    garray =g_array_remove_index_fast(garray,2);
+    if(garray == NULL)
+    {
+		std_log(LOG_FILENAME_LINE, "NULL return by g_array_remove_index_fast");
+		assert_failed = 1;
+		return ;
+	}
+
+    for(i=0; i<garray->len; i++)
+	{
+		std_log(LOG_FILENAME_LINE, "Current array element at index %d is %d", i,g_array_index(garray, gint, i));
+	}
+
+	ret = compare_array(garray, array_after_remove_index_fast_2, ARRAY_SIZE_AFTER_REMOVE_INDEX_FAST);
+	if ( !ret)
+	{
+		std_log(LOG_FILENAME_LINE, "Array Element not properly deleted by g_array_remove_index_fast");
+		assert_failed = 1;
+		g_array_free(garray,TRUE);
+		return;
+	}
+    g_array_free(garray,TRUE);
+}
+
+
+void test_test_remove_array_index_range()
+{
+	const int ARRAY_SIZE = 10;
+	const int ARRAY_SIZE_AFTER_REMOVE_INDEX_RANGE = 8;
+
+	gint array[ARRAY_SIZE]=															{10,5,16,7,11,0,20,1,9,8};
+	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*/
+
+	gboolean ret;
+	GArray* garray;
+	int i;
+
+	garray = g_array_new (FALSE,FALSE,sizeof(gint));
+	if(garray == NULL)
+	{
+		  std_log(LOG_FILENAME_LINE, "Array not created");
+		  assert_failed = 1;
+		  return ;
+	}
+
+	g_array_insert_vals(garray,0,array,ARRAY_SIZE);
+	for(i=0; i<garray->len;i++)
+	{
+		std_log(LOG_FILENAME_LINE, "Current array elements %d is %d", i,g_array_index(garray, gint, i));
+	}
+
+	garray = g_array_remove_range(garray,3,2); /*remove two elements from index 3 */
+
+	if(garray == NULL)
+	{
+		std_log(LOG_FILENAME_LINE,"Elements not deleted properly by g_array_remove_range");
+		assert_failed = 1;
+		return ;
+
+	}
+
+	/*print the array elements */
+	for(i=0; i<garray->len;i++)
+	{
+		std_log(LOG_FILENAME_LINE, "Curent array element(after deletion) %d is %d", i,g_array_index(garray, gint, i));
+	}
+
+
+	ret = compare_array(garray, array_after_remove_index_range, ARRAY_SIZE_AFTER_REMOVE_INDEX_RANGE);
+	if(!ret)
+	{
+		std_log(LOG_FILENAME_LINE,"Elements not deleted properly");
+		assert_failed = 1;
+		g_array_free(garray,TRUE);
+		return ;
+	}
+	g_array_free(garray,TRUE);
+}
+
+
+void test_sort_array()
+{
+
+	GArray *garray;
+	const int ARRAY_SIZE = 11;
+    gint array[ARRAY_SIZE] = {10,5,16,7,11,0,20,1,9,8,9};
+	gint sort_array[ARRAY_SIZE] = {0,1,5,7,8,9,9,10,11,16,20};
+
+	gboolean ret;
+	int i;
+
+    /* Test for sorting the array elements */
+
+	garray = g_array_new (FALSE,FALSE,sizeof(gint));
+
+	if(garray == NULL)
+	{
+		std_log(LOG_FILENAME_LINE, "Array not created");
+		assert_failed = 1;
+		return ;
+	}
+	g_array_insert_vals(garray,0,array,ARRAY_SIZE);
+
+	g_array_sort(garray, sort);
+
+	if(garray == NULL)
+	{
+		std_log(LOG_FILENAME_LINE, "Array not sorted");
+		assert_failed = 1;
+		return ;
+	}
+
+	std_log(LOG_FILENAME_LINE,"SORTED ARRAY");
+
+	for(i=0;i<garray->len;i++)
+	{
+		std_log(LOG_FILENAME_LINE, "Element %d is %d", i,g_array_index(garray, gint, i));
+	}
+
+	ret = compare_array(garray, sort_array, ARRAY_SIZE);
+
+	if(!ret)
+	{
+		std_log(LOG_FILENAME_LINE, "Array not sorted correctly");
+		assert_failed = 1;
+		return ;
+	}
+
+	g_array_free(garray,TRUE);
+
+
+    garray = g_array_new (FALSE,FALSE,sizeof(gint));
+	if(garray == NULL)
+	{
+      std_log(LOG_FILENAME_LINE, "Array not created");
+	  return ;
+	}
+	g_array_insert_vals(garray,0,array,ARRAY_SIZE);
+
+	g_array_sort_with_data (garray, sort_userdata, NULL);
+
+	if(garray == NULL)
+	{
+		std_log(LOG_FILENAME_LINE, "Array not sorted with user data");
+		assert_failed = 1;
+		return ;
+	}
+
+	std_log(LOG_FILENAME_LINE,"SORTED ARRAY WITH USERDATA");
+	for(i=0;i<garray->len;i++)
+	{
+		std_log(LOG_FILENAME_LINE, "Element %d is %d", i,g_array_index(garray, gint, i));
+	}
+
+	ret = compare_array(garray, sort_array, ARRAY_SIZE);
+	if(!ret)
+	{
+		std_log(LOG_FILENAME_LINE, "Array not sorted correctly with user data");
+		assert_failed = 1;
+		return ;
+	}
+    g_array_free(garray,TRUE);
+}
+
+
+int main (void)
+{
+	test_test_remove_array_index_range();
+	test_sort_array();
+	test_remove_array_index();
+
+	if(assert_failed)
+		std_log(LOG_FILENAME_LINE,"Test Failed");
+	else
+		std_log(LOG_FILENAME_LINE,"Test Successful");
+
+    create_xml(0);
+    return 0;
+}
+
+