summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Kost <ensonic@users.sf.net>2010-07-05 14:02:44 +0300
committerStefan Kost <ensonic@users.sf.net>2010-09-14 10:43:40 +0300
commit6fdb1eaf1daccfcfb221f8a90ae2f2725ffe8963 (patch)
tree6ce634c063c20f29df1d94ab83e2f738e7eb3861
parentf8f12fdcd3ea8764d3b74c19a6ffb7623559692d (diff)
tests: add new test for intersection of lazy caps
This does intersections of intersections to test lazycaps.
-rw-r--r--tests/check/gst/gstcaps.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/tests/check/gst/gstcaps.c b/tests/check/gst/gstcaps.c
index 6fb35e1ea..6dccf1c57 100644
--- a/tests/check/gst/gstcaps.c
+++ b/tests/check/gst/gstcaps.c
@@ -728,6 +728,134 @@ GST_START_TEST (test_intersect2)
GST_END_TEST;
+
+GST_START_TEST (test_intersect3)
+{
+ GstStructure *s;
+ GstCaps *c1, *c2, *c3, *c4, *ci1, *ci2, *ci3;
+
+ c1 = gst_caps_from_string ("a;b;c;d");
+ c2 = gst_caps_from_string ("b;d");
+ c3 = gst_caps_from_string ("b;e");
+ c4 = gst_caps_from_string ("b");
+
+
+ /* intersect normal caps and check that we get lazy caps */
+ ci1 = gst_caps_intersect (c1, c2);
+ fail_unless (ci1->structs->len == 0, NULL);
+ GST_DEBUG ("intersected: %" GST_PTR_FORMAT, ci1);
+ fail_unless (gst_caps_get_size (ci1) == 2, NULL);
+ s = gst_caps_get_structure (ci1, 0);
+ fail_unless (gst_structure_has_name (s, "b"));
+ s = gst_caps_get_structure (ci1, 1);
+ fail_unless (gst_structure_has_name (s, "d"));
+ gst_caps_unref (ci1);
+
+ fail_unless (gst_caps_can_intersect (c1, c2), NULL);
+
+
+ /* intersect normal caps and check that we get lazy caps */
+ ci1 = gst_caps_intersect (c2, c1);
+ fail_unless (ci1->structs->len == 0, NULL);
+ GST_DEBUG ("intersected: %" GST_PTR_FORMAT, ci1);
+ fail_unless (gst_caps_get_size (ci1) == 2, NULL);
+ s = gst_caps_get_structure (ci1, 0);
+ fail_unless (gst_structure_has_name (s, "b"));
+ s = gst_caps_get_structure (ci1, 1);
+ fail_unless (gst_structure_has_name (s, "d"));
+ gst_caps_unref (ci1);
+
+ fail_unless (gst_caps_can_intersect (c2, c1), NULL);
+
+
+ /* intersect normal caps and check that we get lazy caps */
+ ci1 = gst_caps_intersect (c1, c3);
+ fail_unless (ci1->structs->len == 0, NULL);
+ GST_DEBUG ("intersected: %" GST_PTR_FORMAT, ci1);
+ fail_unless (gst_caps_get_size (ci1) == 1, NULL);
+ s = gst_caps_get_structure (ci1, 0);
+ fail_unless (gst_structure_has_name (s, "b"));
+ gst_caps_unref (ci1);
+
+ fail_unless (gst_caps_can_intersect (c1, c3), NULL);
+
+
+ /* intersect lazy and normal caps */
+ ci1 = gst_caps_intersect (c1, c2);
+ ci2 = gst_caps_intersect (ci1, c4);
+ fail_unless (ci2->structs->len == 0, NULL);
+ GST_DEBUG ("intersected: %" GST_PTR_FORMAT, ci2);
+ fail_unless (gst_caps_get_size (ci2) == 1, NULL);
+ s = gst_caps_get_structure (ci2, 0);
+ fail_unless (gst_structure_has_name (s, "b"));
+ gst_caps_unref (ci2);
+ gst_caps_unref (ci1);
+
+ ci1 = gst_caps_intersect (c1, c2);
+ fail_unless (gst_caps_can_intersect (ci1, c4), NULL);
+ gst_caps_unref (ci1);
+
+ ci1 = gst_caps_intersect (c1, c2);
+ ci2 = gst_caps_intersect (c4, ci1);
+ fail_unless (ci2->structs->len == 0, NULL);
+ GST_DEBUG ("intersected: %" GST_PTR_FORMAT, ci2);
+ fail_unless (gst_caps_get_size (ci2) == 1, NULL);
+ s = gst_caps_get_structure (ci2, 0);
+ fail_unless (gst_structure_has_name (s, "b"));
+ gst_caps_unref (ci2);
+ gst_caps_unref (ci1);
+
+ ci1 = gst_caps_intersect (c1, c2);
+ fail_unless (gst_caps_can_intersect (c4, ci1), NULL);
+ gst_caps_unref (ci1);
+
+
+ /* intersect lazy caps */
+ ci1 = gst_caps_intersect (c1, c2);
+ ci2 = gst_caps_intersect (c1, c3);
+ //GST_DEBUG ("intersecting: %" GST_PTR_FORMAT " and %" GST_PTR_FORMAT, ci1, ci2);
+ ci3 = gst_caps_intersect (ci1, ci2);
+ fail_unless (ci3->structs->len == 0, NULL);
+ GST_DEBUG ("intersected: %" GST_PTR_FORMAT, ci3);
+ fail_unless (gst_caps_get_size (ci3) == 1, NULL);
+ s = gst_caps_get_structure (ci3, 0);
+ fail_unless (gst_structure_has_name (s, "b"));
+ gst_caps_unref (ci3);
+ gst_caps_unref (ci2);
+ gst_caps_unref (ci1);
+
+ ci1 = gst_caps_intersect (c1, c2);
+ ci2 = gst_caps_intersect (c1, c3);
+ fail_unless (gst_caps_can_intersect (ci1, ci2), NULL);
+ gst_caps_unref (ci2);
+ gst_caps_unref (ci1);
+
+ ci1 = gst_caps_intersect (c1, c2);
+ ci2 = gst_caps_intersect (c1, c3);
+ ci3 = gst_caps_intersect (ci2, ci1);
+ fail_unless (ci3->structs->len == 0, NULL);
+ GST_DEBUG ("intersected: %" GST_PTR_FORMAT, ci3);
+ fail_unless (gst_caps_get_size (ci3) == 1, NULL);
+ s = gst_caps_get_structure (ci3, 0);
+ fail_unless (gst_structure_has_name (s, "b"));
+ gst_caps_unref (ci3);
+
+ ci1 = gst_caps_intersect (c1, c2);
+ ci2 = gst_caps_intersect (c1, c3);
+ fail_unless (gst_caps_can_intersect (ci2, ci1), NULL);
+ gst_caps_unref (ci2);
+ gst_caps_unref (ci1);
+
+
+ gst_caps_unref (c1);
+ gst_caps_unref (c2);
+ gst_caps_unref (c3);
+ gst_caps_unref (c4);
+}
+
+GST_END_TEST;
+
+
static gboolean
_caps_is_fixed_foreach (GQuark field_id, const GValue * value, gpointer unused)
{
@@ -795,6 +923,7 @@ GST_START_TEST (test_normalize)
GST_END_TEST;
+
static Suite *
gst_caps_suite (void)
{
@@ -814,6 +943,7 @@ gst_caps_suite (void)
tcase_add_test (tc_chain, test_merge_subset);
tcase_add_test (tc_chain, test_intersect);
tcase_add_test (tc_chain, test_intersect2);
+ tcase_add_test (tc_chain, test_intersect3);
tcase_add_test (tc_chain, test_normalize);
return s;