aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-02-18 08:57:06 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-16 14:28:13 +0100
commit6f1a4514da5041ee57437e651e357bc3a3b86418 (patch)
treee214960a657ee96e921a79e304a396d5c9d68d7c
parent91416a3e3dc1f880a958726e4a8db737bf960a1e (diff)
libmm-common: new bands array comparator
-rw-r--r--libmm-common/mm-common-helpers.c38
-rw-r--r--libmm-common/mm-common-helpers.h2
-rw-r--r--libmm-common/tests/test-common-helpers.c106
3 files changed, 146 insertions, 0 deletions
diff --git a/libmm-common/mm-common-helpers.c b/libmm-common/mm-common-helpers.c
index d0dd83c5..d7209cb2 100644
--- a/libmm-common/mm-common-helpers.c
+++ b/libmm-common/mm-common-helpers.c
@@ -255,6 +255,44 @@ mm_common_bands_garray_to_variant (GArray *array)
return mm_common_bands_array_to_variant (NULL, 0);
}
+static guint
+cmp_band (MMModemBand *a, MMModemBand *b)
+{
+ return (*a - *b);
+}
+
+gboolean
+mm_common_bands_garray_cmp (GArray *a, GArray *b)
+{
+ GArray *dup_a;
+ GArray *dup_b;
+ guint i;
+ gboolean different;
+
+ if (a->len != b->len)
+ return FALSE;
+
+ dup_a = g_array_sized_new (FALSE, FALSE, sizeof (MMModemBand), a->len);
+ g_array_append_vals (dup_a, a->data, a->len);
+
+ dup_b = g_array_sized_new (FALSE, FALSE, sizeof (MMModemBand), b->len);
+ g_array_append_vals (dup_b, b->data, b->len);
+
+ g_array_sort (dup_a, (GCompareFunc)cmp_band);
+ g_array_sort (dup_b, (GCompareFunc)cmp_band);
+
+ different = FALSE;
+ for (i = 0; !different && i < a->len; i++) {
+ if (g_array_index (dup_a, MMModemBand, i) != g_array_index (dup_b, MMModemBand, i))
+ different = TRUE;
+ }
+
+ g_array_unref (dup_a);
+ g_array_unref (dup_b);
+
+ return !different;
+}
+
gboolean
mm_common_get_boolean_from_string (const gchar *value,
GError **error)
diff --git a/libmm-common/mm-common-helpers.h b/libmm-common/mm-common-helpers.h
index 44625386..30c82ffd 100644
--- a/libmm-common/mm-common-helpers.h
+++ b/libmm-common/mm-common-helpers.h
@@ -46,6 +46,8 @@ GVariant *mm_common_bands_garray_to_variant (GArray *array);
GVariant *mm_common_build_bands_any (void);
GVariant *mm_common_build_bands_unknown (void);
+gboolean mm_common_bands_garray_cmp (GArray *a, GArray *b);
+
typedef gboolean (*MMParseKeyValueForeachFn) (const gchar *key,
const gchar *value,
gpointer user_data);
diff --git a/libmm-common/tests/test-common-helpers.c b/libmm-common/tests/test-common-helpers.c
index 8d158ca8..40768206 100644
--- a/libmm-common/tests/test-common-helpers.c
+++ b/libmm-common/tests/test-common-helpers.c
@@ -249,6 +249,103 @@ key_value_error_test_missing_comma_2 (void)
"key2='value2'");
}
+/********************* BAND ARRAY TESTS *********************/
+
+static void
+common_band_array_cmp_test (gboolean equal,
+ const MMModemBand *bands_a,
+ guint n_bands_a,
+ const MMModemBand *bands_b,
+ guint n_bands_b)
+{
+ GArray *a;
+ GArray *b;
+
+ a = g_array_sized_new (FALSE, FALSE, sizeof (MMModemBand), n_bands_a);
+ g_array_append_vals (a, bands_a, n_bands_a);
+
+ b = g_array_sized_new (FALSE, FALSE, sizeof (MMModemBand), n_bands_b);
+ g_array_append_vals (b, bands_b, n_bands_b);
+
+ g_assert_cmpuint (equal, ==, mm_common_bands_garray_cmp (a, b));
+ g_assert_cmpuint (equal, ==, mm_common_bands_garray_cmp (b, a));
+
+ g_array_unref (a);
+ g_array_unref (b);
+}
+
+static void
+band_array_cmp_test_equal_empty (void)
+{
+ const MMModemBand a[] = { };
+ const MMModemBand b[] = { };
+
+ common_band_array_cmp_test (TRUE, a, G_N_ELEMENTS (a), b, G_N_ELEMENTS (b));
+}
+
+static void
+band_array_cmp_test_equal_one (void)
+{
+ const MMModemBand a[] = { MM_MODEM_BAND_EGSM };
+ const MMModemBand b[] = { MM_MODEM_BAND_EGSM };
+
+ common_band_array_cmp_test (TRUE, a, G_N_ELEMENTS (a), b, G_N_ELEMENTS (b));
+}
+
+static void
+band_array_cmp_test_equal_multiple_same_order (void)
+{
+ const MMModemBand a[] = { MM_MODEM_BAND_EGSM, MM_MODEM_BAND_DCS, MM_MODEM_BAND_PCS };
+ const MMModemBand b[] = { MM_MODEM_BAND_EGSM, MM_MODEM_BAND_DCS, MM_MODEM_BAND_PCS };
+
+ common_band_array_cmp_test (TRUE, a, G_N_ELEMENTS (a), b, G_N_ELEMENTS (b));
+}
+
+static void
+band_array_cmp_test_equal_multiple_different_order (void)
+{
+ const MMModemBand a[] = { MM_MODEM_BAND_EGSM, MM_MODEM_BAND_DCS, MM_MODEM_BAND_PCS };
+ const MMModemBand b[] = { MM_MODEM_BAND_DCS, MM_MODEM_BAND_PCS, MM_MODEM_BAND_EGSM };
+
+ common_band_array_cmp_test (TRUE, a, G_N_ELEMENTS (a), b, G_N_ELEMENTS (b));
+}
+
+static void
+band_array_cmp_test_different_one (void)
+{
+ const MMModemBand a[] = { MM_MODEM_BAND_EGSM };
+ const MMModemBand b[] = { MM_MODEM_BAND_DCS };
+
+ common_band_array_cmp_test (FALSE, a, G_N_ELEMENTS (a), b, G_N_ELEMENTS (b));
+}
+
+static void
+band_array_cmp_test_different_none (void)
+{
+ const MMModemBand a[] = { };
+ const MMModemBand b[] = { MM_MODEM_BAND_EGSM };
+
+ common_band_array_cmp_test (FALSE, a, G_N_ELEMENTS (a), b, G_N_ELEMENTS (b));
+}
+
+static void
+band_array_cmp_test_different_multiple_1 (void)
+{
+ const MMModemBand a[] = { MM_MODEM_BAND_EGSM };
+ const MMModemBand b[] = { MM_MODEM_BAND_EGSM, MM_MODEM_BAND_DCS };
+
+ common_band_array_cmp_test (FALSE, a, G_N_ELEMENTS (a), b, G_N_ELEMENTS (b));
+}
+
+static void
+band_array_cmp_test_different_multiple_2 (void)
+{
+ const MMModemBand a[] = { MM_MODEM_BAND_EGSM };
+ const MMModemBand b[] = { MM_MODEM_BAND_DCS, MM_MODEM_BAND_EGSM };
+
+ common_band_array_cmp_test (FALSE, a, G_N_ELEMENTS (a), b, G_N_ELEMENTS (b));
+}
+
int main (int argc, char **argv)
{
g_type_init ();
@@ -273,5 +370,14 @@ int main (int argc, char **argv)
g_test_add_func ("/MM/Common/KeyValue/Error/missing-comma-1", key_value_error_test_missing_comma_1);
g_test_add_func ("/MM/Common/KeyValue/Error/missing-comma-2", key_value_error_test_missing_comma_2);
+ g_test_add_func ("/MM/Common/BandArray/Cmp/equal-empty", band_array_cmp_test_equal_empty);
+ g_test_add_func ("/MM/Common/BandArray/Cmp/equal-one", band_array_cmp_test_equal_one);
+ g_test_add_func ("/MM/Common/BandArray/Cmp/equal-multiple-same-order", band_array_cmp_test_equal_multiple_same_order);
+ g_test_add_func ("/MM/Common/BandArray/Cmp/equal-multiple-different-order", band_array_cmp_test_equal_multiple_different_order);
+ g_test_add_func ("/MM/Common/BandArray/Cmp/different-one", band_array_cmp_test_different_one);
+ g_test_add_func ("/MM/Common/BandArray/Cmp/different-none", band_array_cmp_test_different_none);
+ g_test_add_func ("/MM/Common/BandArray/Cmp/different-multiple-1", band_array_cmp_test_different_multiple_1);
+ g_test_add_func ("/MM/Common/BandArray/Cmp/different-multiple-2", band_array_cmp_test_different_multiple_2);
+
return g_test_run ();
}