82ab7f4a6668c2bc0da4aeeb68a7cc7a1aca60a9
[platform/upstream/gstreamer.git] / testsuite / refcounting / object.c
1 #include <gst/gst.h>
2
3 #define ITERS 100000
4 #include <stdlib.h>
5 #include "mem.h"
6
7 int
8 main (int argc, gchar *argv[])
9 {
10   GstObject *object, *object2;
11   long usage1;
12   gint i, iters;
13
14   gst_init (&argc, &argv);
15
16   if (argc == 2)
17     iters = atoi (argv[1]);
18   else
19     iters = ITERS;
20
21   g_print ("starting test with %d iterations\n", iters);
22   usage1 = vmsize();
23   object = gst_object_new ();
24   gst_object_unref (object);
25   g_print ("create/unref new object %ld\n", vmsize()-usage1);
26
27   for (i=0; i<iters;i++) {
28     object = gst_object_new ();
29     gst_object_unref (object);
30
31   }
32   g_print ("create/unref %d object %ld\n", iters, vmsize()-usage1);
33
34   object = gst_object_new ();
35   g_assert (GST_OBJECT_FLOATING (object));
36   gst_object_ref (object);
37   gst_object_sink (object);
38   g_assert (!GST_OBJECT_FLOATING (object));
39   gst_object_unref (object);
40   g_print ("create/ref/sink/unref new object %ld\n", vmsize()-usage1);
41
42   for (i=0; i<iters;i++) {
43     object = gst_object_new ();
44     gst_object_ref (object);
45     gst_object_sink (object);
46     gst_object_unref (object);
47   }
48   g_print ("create/ref/sink/unref %d object %ld\n", iters, vmsize()-usage1);
49
50   object = gst_object_new ();
51   g_assert (!GST_OBJECT_DESTROYED (object));
52   gst_object_unref (object);
53   g_assert (GST_OBJECT_DESTROYED (object));
54   gst_object_unref (object);
55   g_print ("create/destroy/unref new object %ld\n", vmsize()-usage1);
56   
57   for (i=0; i<iters;i++) {
58     object = gst_object_new ();
59     gst_object_unref (object);
60     gst_object_unref (object);
61   }
62   g_print ("destroy/unref %d object %ld\n", iters, vmsize()-usage1);
63
64   object = gst_object_new ();
65   gst_object_ref (object);
66   gst_object_unref (object);
67   gst_object_unref (object);
68   g_print ("create/ref/unref/unref new object %ld\n", vmsize()-usage1);
69   
70   for (i=0; i<iters;i++) {
71     object = gst_object_new ();
72     gst_object_ref (object);
73     gst_object_unref (object);
74     gst_object_unref (object);
75   }
76   g_print ("create/ref/unref/unref %d object %ld\n", iters, vmsize()-usage1);
77
78   object = gst_object_new ();
79   gst_object_ref (object);
80   gst_object_unref (object);
81   gst_object_unref (object);
82   gst_object_unref (object);
83   g_print ("create/ref/destroy/unref/unref new object %ld\n", vmsize()-usage1);
84   
85   for (i=0; i<iters;i++) {
86     object = gst_object_new ();
87     gst_object_ref (object);
88     gst_object_unref (object);
89     gst_object_unref (object);
90     gst_object_unref (object);
91   }
92   g_print ("create/ref/destroy/unref/unref %d object %ld\n", iters, vmsize()-usage1);
93
94   for (i=0; i<iters;i++) {
95     object = gst_object_new ();
96     gst_object_ref (object);
97     gst_object_set_name (object, "testing123");
98     gst_object_unref (object);
99     gst_object_set_name (object, "testing123");
100     gst_object_unref (object);
101     gst_object_unref (object);
102   }
103   g_print ("create/ref/destroy/unref/unref %d object  with name %ld\n", iters, vmsize()-usage1);
104
105   object = gst_object_new ();
106   for (i=0; i<iters;i++) {
107     gst_object_set_name (object, "testing");
108   }
109   gst_object_unref (object);
110   g_print ("create/set name/unref %d object %ld\n", iters, vmsize()-usage1);
111
112   object = gst_object_new ();
113   object2 = gst_object_new ();
114   g_assert (GST_OBJECT_FLOATING (object));
115   g_assert (GST_OBJECT_FLOATING (object2));
116
117   gst_object_set_parent (object, object2);
118   g_assert (GST_OBJECT_FLOATING (object2));
119   g_assert (!GST_OBJECT_FLOATING (object));
120
121   g_print ("parentage flags set_parent ok %ld\n", vmsize()-usage1);
122
123   gst_object_ref (object);
124   gst_object_unparent (object);
125   g_assert (GST_OBJECT_FLOATING (object2));
126   g_assert (!GST_OBJECT_FLOATING (object));
127   g_assert (gst_object_get_parent (object) == NULL);
128
129   g_print ("parentage flags unparent ok %ld\n", vmsize()-usage1);
130
131   gst_object_set_parent (object, object2);
132   g_assert (GST_OBJECT_FLOATING (object2));
133   g_assert (!GST_OBJECT_FLOATING (object));
134   g_assert (gst_object_get_parent (object) == object2);
135
136   gst_object_unref (object);
137   g_assert (GST_OBJECT_DESTROYED (object));
138   g_assert (!GST_OBJECT_FLOATING (object));
139   g_assert (gst_object_get_parent (object) == NULL);
140   gst_object_unref (object);
141
142   g_print ("parentage flags destroy ok %ld\n", vmsize()-usage1);
143
144   for (i=0; i<iters;i++) {
145     object = gst_object_new ();
146     object2 = gst_object_new ();
147     gst_object_set_parent (object2, object);
148     gst_object_unref (object);
149     gst_object_unref (object2);
150   }
151   g_print ("create/unref %d 2 parented objects %ld\n", iters, vmsize()-usage1);
152
153   g_print ("leaked: %ld\n", vmsize()-usage1);
154
155   return (vmsize()-usage1 ? -1 : 0);
156 }