📄 gstvalue.c
字号:
}GST_END_TEST;GST_START_TEST (test_deserialize_string){ struct { gchar *from; gchar *to; } tests[] = { { "", ""}, /* empty strings */ { "\"\"", ""}, /* FAILURES */ { "\"", NULL}, /* missing second quote */ { "\"Hello\\ World", NULL}, /* missing second quote */ { "\"\\", NULL}, /* quote at end, missing second quote */ { "\"\\0", NULL}, /* missing second quote */ { "\"\\0\"", NULL}, /* unfinished escaped character */ { "\" \"", NULL}, /* spaces must be escaped */#if 0 /* FIXME 0.9: this test should fail, but it doesn't */ { "tüüt", NULL} /* string with special chars must be escaped */#endif }; guint i; GValue v = { 0, }; gboolean ret = TRUE; g_value_init (&v, G_TYPE_STRING); for (i = 0; i < G_N_ELEMENTS (tests); i++) { if (gst_value_deserialize (&v, tests[i].from)) { fail_if (tests[i].to == NULL, "I got %s instead of a failure", g_value_get_string (&v)); fail_unless (g_str_equal (g_value_get_string (&v), tests[i].to), "\nwanted: %s\ngot : %s", tests[i].to, g_value_get_string (&v)); } else { fail_if (tests[i].to != NULL, "failed, but wanted: %s", tests[i].to); ret = FALSE; } } g_value_unset (&v);}GST_END_TEST;GST_START_TEST (test_value_compare){ GValue value1 = { 0 }; GValue value2 = { 0 }; GValue tmp = { 0 }; g_value_init (&value1, G_TYPE_INT); g_value_set_int (&value1, 10); g_value_init (&value2, G_TYPE_INT); g_value_set_int (&value2, 20); fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN); fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN); fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL); g_value_unset (&value1); g_value_unset (&value2); g_value_init (&value1, G_TYPE_DOUBLE); g_value_set_double (&value1, 10); g_value_init (&value2, G_TYPE_DOUBLE); g_value_set_double (&value2, 20); fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN); fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN); fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL); g_value_unset (&value1); g_value_unset (&value2); g_value_init (&value1, G_TYPE_STRING); g_value_set_string (&value1, "a"); g_value_init (&value2, G_TYPE_STRING); g_value_set_string (&value2, "b"); fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN); fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN); fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL); g_value_unset (&value1); g_value_unset (&value2); g_value_init (&value1, GST_TYPE_FOURCC); gst_value_set_fourcc (&value1, GST_MAKE_FOURCC ('a', 'b', 'c', 'd')); g_value_init (&value2, GST_TYPE_FOURCC); gst_value_set_fourcc (&value2, GST_MAKE_FOURCC ('1', '2', '3', '4')); fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_UNORDERED); fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL); g_value_unset (&value1); g_value_unset (&value2); /* comparing 2/3 with 3/4 */ g_value_init (&value1, GST_TYPE_FRACTION); gst_value_set_fraction (&value1, 2, 3); g_value_init (&value2, GST_TYPE_FRACTION); gst_value_set_fraction (&value2, 3, 4); fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN); fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN); fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL); g_value_unset (&value1); g_value_unset (&value2); /* comparing -4/5 with 2/-3 */ g_value_init (&value1, GST_TYPE_FRACTION); gst_value_set_fraction (&value1, -4, 5); g_value_init (&value2, GST_TYPE_FRACTION); gst_value_set_fraction (&value2, 2, -3); fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN); fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN); fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL); g_value_unset (&value1); g_value_unset (&value2); /* comparing 10/100 with 200/2000 */ g_value_init (&value1, GST_TYPE_FRACTION); gst_value_set_fraction (&value1, 10, 100); g_value_init (&value2, GST_TYPE_FRACTION); gst_value_set_fraction (&value2, 200, 2000); fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL); g_value_unset (&value1); g_value_unset (&value2); /* comparing -4/5 with 2/-3 */ g_value_init (&value1, GST_TYPE_FRACTION); gst_value_set_fraction (&value1, -4, 5); g_value_init (&value2, GST_TYPE_FRACTION); gst_value_set_fraction (&value2, 2, -3); fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN); fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN); fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL); g_value_unset (&value1); g_value_unset (&value2); /* Check that lists are equal regardless of order */ g_value_init (&value1, GST_TYPE_LIST); g_value_init (&tmp, G_TYPE_INT); g_value_set_int (&tmp, 1); gst_value_list_append_value (&value1, &tmp); g_value_set_int (&tmp, 2); gst_value_list_append_value (&value1, &tmp); g_value_set_int (&tmp, 3); gst_value_list_append_value (&value1, &tmp); g_value_set_int (&tmp, 4); gst_value_list_append_value (&value1, &tmp); g_value_init (&value2, GST_TYPE_LIST); g_value_set_int (&tmp, 4); gst_value_list_append_value (&value2, &tmp); g_value_set_int (&tmp, 3); gst_value_list_append_value (&value2, &tmp); g_value_set_int (&tmp, 2); gst_value_list_append_value (&value2, &tmp); g_value_set_int (&tmp, 1); gst_value_list_append_value (&value2, &tmp); fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL, "value lists with different order were not equal when they should be"); fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL, "value lists with same order were not equal when they should be"); fail_unless (gst_value_compare (&value2, &value2) == GST_VALUE_EQUAL, "value lists with same order were not equal when they should be"); /* Carry over the lists to this next check: */ /* Lists with different sizes are unequal */ g_value_set_int (&tmp, 1); gst_value_list_append_value (&value2, &tmp); fail_if (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL, "Value lists with different size were equal when they shouldn't be"); /* Carry over the lists to this next check: */ /* Lists with same size but list1 contains one more element not in list2 */ g_value_set_int (&tmp, 5); gst_value_list_append_value (&value1, &tmp); fail_if (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL, "Value lists with different elements were equal when they shouldn't be"); fail_if (gst_value_compare (&value2, &value1) == GST_VALUE_EQUAL, "Value lists with different elements were equal when they shouldn't be"); g_value_unset (&value1); g_value_unset (&value2); g_value_unset (&tmp); /* Arrays are only equal when in the same order */ g_value_init (&value1, GST_TYPE_ARRAY); g_value_init (&tmp, G_TYPE_INT); g_value_set_int (&tmp, 1); gst_value_array_append_value (&value1, &tmp); g_value_set_int (&tmp, 2); gst_value_array_append_value (&value1, &tmp); g_value_set_int (&tmp, 3); gst_value_array_append_value (&value1, &tmp); g_value_set_int (&tmp, 4); gst_value_array_append_value (&value1, &tmp); g_value_init (&value2, GST_TYPE_ARRAY); g_value_set_int (&tmp, 4); gst_value_array_append_value (&value2, &tmp); g_value_set_int (&tmp, 3); gst_value_array_append_value (&value2, &tmp); g_value_set_int (&tmp, 2); gst_value_array_append_value (&value2, &tmp); g_value_set_int (&tmp, 1); gst_value_array_append_value (&value2, &tmp); fail_if (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL, "Value arrays with different order were equal when they shouldn't be"); fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL, "Identical value arrays were not equal when they should be"); fail_unless (gst_value_compare (&value2, &value2) == GST_VALUE_EQUAL, "Identical value arrays were not equal when they should be"); /* Carry over the arrays to this next check: */ /* Arrays with different sizes are unequal */ g_value_unset (&value2); g_value_init (&value2, GST_TYPE_ARRAY); g_value_copy (&value1, &value2); g_value_set_int (&tmp, 1); gst_value_array_append_value (&value2, &tmp); fail_if (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL, "Value arrays with different size were equal when they shouldn't be"); /* order should not matter */ fail_if (gst_value_compare (&value2, &value1) == GST_VALUE_EQUAL, "Value arrays with different size were equal when they shouldn't be"); g_value_unset (&value1); g_value_unset (&value2); g_value_unset (&tmp);}GST_END_TEST;GST_START_TEST (test_value_intersect){ GValue dest = { 0 }; GValue src1 = { 0 }; GValue src2 = { 0 }; GValue item = { 0 }; gboolean ret; g_value_init (&src1, G_TYPE_INT); g_value_set_int (&src1, 10); g_value_init (&src2, G_TYPE_INT); g_value_set_int (&src2, 20); ret = gst_value_intersect (&dest, &src1, &src2); fail_unless (ret == FALSE); g_value_unset (&src1); g_value_unset (&src2); g_value_init (&src1, GST_TYPE_FOURCC); gst_value_set_fourcc (&src1, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2')); g_value_init (&src2, GST_TYPE_LIST); g_value_init (&item, GST_TYPE_FOURCC); gst_value_set_fourcc (&item, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2')); gst_value_list_append_value (&src2, &item); gst_value_set_fourcc (&item, GST_MAKE_FOURCC ('I', '4', '2', '0')); gst_value_list_append_value (&src2, &item); gst_value_set_fourcc (&item, GST_MAKE_FOURCC ('A', 'B', 'C', 'D')); gst_value_list_append_value (&src2, &item); fail_unless (gst_value_intersect (&dest, &src1, &src2)); fail_unless (GST_VALUE_HOLDS_FOURCC (&dest)); fail_unless (gst_value_get_fourcc (&dest) == GST_MAKE_FOURCC ('Y', 'U', 'Y', '2')); g_value_unset (&src1); g_value_unset (&src2);}GST_END_TEST;GST_START_TEST (test_value_subtract_int){ GValue dest = { 0 }; GValue src1 = { 0 }; GValue src2 = { 0 }; const GValue *tmp; gboolean ret; /* int <-> int */ g_value_init (&src1, G_TYPE_INT); g_value_set_int (&src1, 10); g_value_init (&src2, G_TYPE_INT); g_value_set_int (&src2, 20); /* subtract as in sets, result is 10 */ ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == TRUE); fail_unless (gst_value_compare (&dest, &src1) == GST_VALUE_EQUAL); g_value_unset (&dest); /* same values, yields empty set */ ret = gst_value_subtract (&dest, &src1, &src1); fail_unless (ret == FALSE); g_value_unset (&src1); g_value_unset (&src2); /* int <-> int_range */ /* would yield an empty set */ g_value_init (&src1, G_TYPE_INT); g_value_set_int (&src1, 10); g_value_init (&src2, GST_TYPE_INT_RANGE); gst_value_set_int_range (&src2, 0, 20); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == FALSE); /* and the other way around, should create a list of two ranges. */ ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_LIST (&dest) == TRUE); tmp = gst_value_list_get_value (&dest, 0); fail_unless (GST_VALUE_HOLDS_INT_RANGE (tmp) == TRUE); fail_unless (gst_value_get_int_range_min (tmp) == 0); fail_unless (gst_value_get_int_range_max (tmp) == 9); tmp = gst_value_list_get_value (&dest, 1); fail_unless (GST_VALUE_HOLDS_INT_RANGE (tmp) == TRUE); fail_unless (gst_value_get_int_range_min (tmp) == 11); fail_unless (gst_value_get_int_range_max (tmp) == 20); g_value_unset (&dest); g_value_unset (&src1); g_value_unset (&src2); /* border case 1, empty set */ g_value_init (&src1, G_TYPE_INT); g_value_set_int (&src1, 10); g_value_init (&src2, GST_TYPE_INT_RANGE); gst_value_set_int_range (&src2, 10, 20); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == FALSE); /* and the other way around, should create a new range. */ ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_INT_RANGE (&dest) == TRUE); fail_unless (gst_value_get_int_range_min (&dest) == 11); fail_unless (gst_value_get_int_range_max (&dest) == 20); g_value_unset (&dest); g_value_unset (&src1); g_value_unset (&src2); /* border case 2, empty set */ g_value_init (&src1, G_TYPE_INT); g_value_set_int (&src1, 20); g_value_init (&src2, GST_TYPE_INT_RANGE); gst_value_set_int_range (&src2, 10, 20); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == FALSE); /* and the other way around, should create a new range. */ ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_INT_RANGE (&dest) == TRUE); fail_unless (gst_value_get_int_range_min (&dest) == 10); fail_unless (gst_value_get_int_range_max (&dest) == 19); g_value_unset (&dest); g_value_unset (&src1); g_value_unset (&src2); /* case 3, valid set */ g_value_init (&src1, G_TYPE_INT); g_value_set_int (&src1, 0); g_value_init (&src2, GST_TYPE_INT_RANGE); gst_value_set_int_range (&src2, 10, 20); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == TRUE); fail_unless (G_VALUE_HOLDS_INT (&dest) == TRUE); fail_unless (gst_value_compare (&dest, &src1) == GST_VALUE_EQUAL); g_value_unset (&dest); /* and the other way around, should keep the range. */ ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == TRUE); fail_unless (GST_VALUE_HOLDS_INT_RANGE (&dest) == TRUE); fail_unless (gst_value_get_int_range_min (&dest) == 10); fail_unless (gst_value_get_int_range_max (&dest) == 20); g_value_unset (&dest); g_value_unset (&src1); g_value_unset (&src2); /* int_range <-> int_range */ /* same range, empty set */ g_value_init (&src1, GST_TYPE_INT_RANGE); gst_value_set_int_range (&src1, 10, 20); g_value_init (&src2, GST_TYPE_INT_RANGE); gst_value_set_int_range (&src2, 10, 20); ret = gst_value_subtract (&dest, &src1, &src2); fail_unless (ret == FALSE); ret = gst_value_subtract (&dest, &src2, &src1); fail_unless (ret == FALSE); g_value_unset (&src1); g_value_unset (&src2); /* non overlapping ranges */ g_value_init (&src1, GST_TYPE_INT_RANGE); gst_value_set_int_range (&src1, 10, 20); g_value_init (&src2, GST_TYPE_INT_RANGE); gst_value_set_int_range (&src2, 30, 40); ret = gst_value_subtract (&dest, &src1, &src2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -