Massive patch to make 'make check' work properly. Many compilation fixes -- everythi...
[platform/upstream/gstreamer.git] / tests / old / testsuite / refcounting / element_pad.c
1 #include <gst/gst.h>
2
3 #define ITERS 100
4 #include <stdlib.h>
5 #include "mem.h"
6
7 int
8 main (int argc, gchar *argv[])
9 {
10   GstElement *element;
11   GstElement *element2;
12   GstPad *pad;
13   long usage1;
14   gint i, iters;
15
16   gst_init (&argc, &argv);
17
18   if (argc == 2)
19     iters = atoi (argv[1]);
20   else
21     iters = ITERS;
22
23
24   g_print ("starting element with pad test with %d iterations\n", iters);
25   usage1 = vmsize();
26
27   element = gst_element_factory_make ("fakesink", NULL);;
28   pad = gst_element_get_pad (element, "sink");
29   g_assert (GST_OBJECT_FLOATING (element));
30   g_assert (!GST_OBJECT_FLOATING (pad));
31   g_assert (gst_pad_get_parent (pad) == element);
32   gst_object_unref (GST_OBJECT (element));
33   g_print ("create/addpad/unref new element %ld\n", vmsize()-usage1);
34
35   for (i=0; i<iters; i++) {
36     element = gst_element_factory_make
37 ("fakesink", NULL);;
38     gst_object_unref (GST_OBJECT (element));
39   }
40   g_print ("create/addpad/unref %d elements %ld\n", iters, vmsize()-usage1);
41
42   for (i=0; i<iters/2; i++) {
43     element = gst_element_factory_make ("fakesink", NULL);
44     element2 = gst_element_factory_make ("fakesrc", NULL);
45     gst_element_link_pads (element, "sink", element2, "src");
46     g_assert (GST_PAD_IS_LINKED (gst_element_get_pad (element2, "src")));
47     g_assert (GST_PAD_IS_LINKED (gst_element_get_pad (element, "sink")));
48     gst_object_unref (GST_OBJECT (element));
49     g_assert (!GST_PAD_IS_LINKED (gst_element_get_pad (element2, "src")));
50     gst_object_unref (GST_OBJECT (element2));
51   }
52   g_print ("create/link/unref %d elements %ld\n", iters/2, vmsize()-usage1);
53
54   for (i=0; i<iters/2; i++) {
55     element = gst_element_factory_make ("fakesink", NULL);
56     element2 = gst_element_factory_make ("fakesrc", NULL);
57     gst_element_link_pads (element, "sink", element2, "src");
58     g_assert (GST_PAD_IS_LINKED (gst_element_get_pad (element2, "src")));
59     g_assert (GST_PAD_IS_LINKED (gst_element_get_pad (element, "sink")));
60     gst_object_unref (GST_OBJECT (element));
61     g_assert (GST_OBJECT_DESTROYED (element));
62     g_assert (!GST_PAD_IS_LINKED (gst_element_get_pad (element2, "src")));
63     gst_object_unref (GST_OBJECT (element2));
64     gst_object_unref (GST_OBJECT (element));
65   }
66   g_print ("create/link/destroy %d elements %ld\n", iters/2, vmsize()-usage1);
67
68   element = gst_element_factory_make ("fakesink", NULL);;
69   pad = gst_element_get_pad (element, "sink");
70   gst_element_remove_pad (element, pad);
71   g_assert (gst_element_get_pad (element, "sink") == NULL);
72
73   g_print ("pad removal ok %ld\n", vmsize()-usage1);
74   for (i=0; i<iters/2; i++) {
75     element = gst_element_factory_make ("fakesink", NULL);;
76     pad = gst_element_get_pad (element, "sink");
77     gst_element_remove_pad (element, pad);
78     gst_object_unref (GST_OBJECT (element));
79   }
80   g_print ("pad removal loop %d  %ld\n", iters/2, vmsize()-usage1);
81
82   for (i=0; i<iters/2; i++) {
83     element = gst_element_factory_make ("fakesink", NULL);;
84     pad = gst_element_get_pad (element, "sink");
85     gst_object_ref (GST_OBJECT (pad));
86     gst_element_remove_pad (element, pad);
87     g_assert (gst_pad_get_parent (pad) == NULL);
88     gst_object_unref (GST_OBJECT (pad));
89     gst_object_unref (GST_OBJECT (element));
90   }
91   g_print ("pad removal and test loop %d  %ld\n", iters/2, vmsize()-usage1);
92
93   element = gst_element_factory_make ("fakesink", NULL);;
94   pad = gst_element_get_pad (element, "sink");
95   gst_object_unref (GST_OBJECT (element));
96   g_assert (GST_OBJECT_DESTROYED (element));
97   g_assert (gst_element_get_pad (element, "sink") == NULL);
98   gst_object_unref (GST_OBJECT (element));
99
100   g_print ("pad destroy/removal ok %ld\n", vmsize()-usage1);
101
102   for (i=0; i<iters/2; i++) {
103     element = gst_element_factory_make ("fakesink", NULL);;
104     pad = gst_element_get_pad (element, "sink");
105     gst_object_unref (GST_OBJECT (element));
106     gst_object_unref (GST_OBJECT (element));
107   }
108   g_print ("pad destroy/removal loop %d %ld\n", iters/2, vmsize()-usage1);
109
110   for (i=0; i<iters/2; i++) {
111     element = gst_element_factory_make ("fakesink", NULL);;
112     pad = gst_element_get_pad (element, "sink");
113     gst_object_unref (GST_OBJECT (pad));
114     g_assert (gst_element_get_pad (element, "sink") == NULL);
115     gst_object_unref (GST_OBJECT (element));
116   }
117   g_print ("pad destroy loop %d %ld\n", iters/2, vmsize()-usage1);
118
119   g_print ("leaked: %ld\n", vmsize()-usage1);
120
121   return (vmsize()-usage1 ? -1 : 0);
122 }