gstreamer_core/tsrc/check/gst/gstvalue/src/gstvalue.c
changeset 2 5505e8908944
child 8 4a7fac7dd34a
equal deleted inserted replaced
1:4c282e7dd6d3 2:5505e8908944
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
       
     3 *
       
     4 * This library is free software; you can redistribute it and/or
       
     5 * modify it under the terms of the GNU Lesser General Public
       
     6 * License as published by the Free Software Foundation; either
       
     7 * version 2 of the License, or (at your option) any later version.
       
     8 *
       
     9 * This library is distributed in the hope that it will be useful,
       
    10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    12 * Lesser General Public License for more details.
       
    13 *
       
    14 * You should have received a copy of the GNU Lesser General Public
       
    15 * License along with this library; if not, write to the
       
    16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
       
    17 * Boston, MA 02111-1307, USA.
       
    18 *
       
    19 * Description:
       
    20 *
       
    21 */
       
    22 
       
    23 /* GStreamer
       
    24  * Copyright (C) <2004> David Schleef <david at schleef dot org>
       
    25  * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
       
    26  *
       
    27  * gstvalue.c: Unit tests for GstValue
       
    28  *
       
    29  * This library is free software; you can redistribute it and/or
       
    30  * modify it under the terms of the GNU Library General Public
       
    31  * License as published by the Free Software Foundation; either
       
    32  * version 2 of the License, or (at your option) any later version.
       
    33  *
       
    34  * This library is distributed in the hope that it will be useful,
       
    35  * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    36  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    37  * Library General Public License for more details.
       
    38  *
       
    39  * You should have received a copy of the GNU Library General Public
       
    40  * License along with this library; if not, write to the
       
    41  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
       
    42  * Boston, MA 02111-1307, USA.
       
    43  */
       
    44 
       
    45 
       
    46 
       
    47 #include <gst/gst_global.h>
       
    48 #include <gst/check/gstcheck.h>
       
    49 
       
    50 #define LOG_FILE "c:\\logs\\gstvalue_logs.txt" 
       
    51 #include "std_log_result.h" 
       
    52 #define LOG_FILENAME_LINE __FILE__, __LINE__
       
    53 
       
    54 //char* xmlfile = "gstvalue";
       
    55 
       
    56 void create_xml(int result)
       
    57 {
       
    58     if(result)
       
    59         assert_failed = 1;
       
    60     
       
    61     testResultXml(xmlfile);
       
    62     close_log_file();
       
    63 }
       
    64 
       
    65 
       
    66 void test_deserialize_buffer()
       
    67 {
       
    68   GValue value = { 0 };
       
    69   GstBuffer *buf;
       
    70   
       
    71     xmlfile = "test_deserialize_buffer";
       
    72   std_log(LOG_FILENAME_LINE, "Test Started test_deserialize_buffer");
       
    73 
       
    74 
       
    75   g_value_init (&value, GST_TYPE_BUFFER);
       
    76   fail_unless (gst_value_deserialize (&value, "1234567890abcdef"));
       
    77   
       
    78   /* does not increase the refcount */
       
    79   buf = GST_BUFFER (gst_value_get_mini_object (&value));
       
    80   ASSERT_MINI_OBJECT_REFCOUNT (buf, "buffer", 1);
       
    81 
       
    82   /* does not increase the refcount */
       
    83   buf = gst_value_get_buffer (&value);
       
    84   ASSERT_MINI_OBJECT_REFCOUNT (buf, "buffer", 1);
       
    85 
       
    86   /* cleanup */
       
    87   g_value_unset (&value);
       
    88     
       
    89     std_log(LOG_FILENAME_LINE, "Test Successful");
       
    90   create_xml(0);
       
    91 }
       
    92 
       
    93 
       
    94 
       
    95 /* create and serialize a buffer */
       
    96 void test_serialize_buffer()
       
    97 {
       
    98   GValue value = { 0 };
       
    99   GstBuffer *buf;
       
   100   gchar *serialized;
       
   101   static const char *buf_data = "1234567890abcdef";
       
   102   gint len;
       
   103   
       
   104     xmlfile = "test_serialize_buffer";
       
   105   std_log(LOG_FILENAME_LINE, "Test Started test_serialize_buffer");
       
   106 
       
   107 
       
   108   len = strlen (buf_data);
       
   109   buf = gst_buffer_new_and_alloc (len);
       
   110   memcpy (GST_BUFFER_DATA (buf), buf_data, len);
       
   111   ASSERT_MINI_OBJECT_REFCOUNT (buf, "buffer", 1);
       
   112 
       
   113   /* and assign buffer to mini object */
       
   114   g_value_init (&value, GST_TYPE_BUFFER);
       
   115   gst_value_take_buffer (&value, buf);
       
   116   ASSERT_MINI_OBJECT_REFCOUNT (buf, "buffer", 1);
       
   117 
       
   118   /* now serialize it */
       
   119   serialized = gst_value_serialize (&value);
       
   120   GST_DEBUG ("serialized buffer to %s", serialized);
       
   121   fail_unless (serialized != NULL);
       
   122   
       
   123 
       
   124   /* refcount should not change */
       
   125   ASSERT_MINI_OBJECT_REFCOUNT (buf, "buffer", 1);
       
   126 
       
   127   /* cleanup */
       
   128   g_free (serialized);
       
   129   g_value_unset (&value);
       
   130 
       
   131   /* take NULL buffer */
       
   132   g_value_init (&value, GST_TYPE_BUFFER);
       
   133   GST_DEBUG ("setting NULL buffer");
       
   134   gst_value_take_buffer (&value, NULL);
       
   135 
       
   136   /* now serialize it */
       
   137   GST_DEBUG ("serializing NULL buffer");
       
   138   serialized = gst_value_serialize (&value);
       
   139   /* should return NULL */
       
   140   fail_unless (serialized == NULL);
       
   141   
       
   142 
       
   143   g_free (serialized);
       
   144   g_value_unset (&value);
       
   145   
       
   146     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   147   create_xml(0);
       
   148 }
       
   149 
       
   150 
       
   151 
       
   152 void test_deserialize_gint()
       
   153 {
       
   154   GValue value = { 0 };
       
   155   const char *strings[] = {
       
   156     "123456",
       
   157     "-123456",
       
   158     "0xFFFF",
       
   159     "0x0000FFFF",
       
   160     /* a positive long long, serializing to highest possible positive sint */
       
   161     "0x7FFFFFFF",
       
   162     /* a positive long long, serializing to lowest possible negative sint */
       
   163     "0x80000000",
       
   164     /* a negative long long, serializing to lowest possible negative sint */
       
   165     "0xFFFFFFFF80000000",
       
   166     "0xFF000000",
       
   167     /* a positive long long serializing to -1 */
       
   168     "0xFFFFFFFF",
       
   169     "0xFFFFFFFF",
       
   170     /* a negative long long serializing to -1 */
       
   171     "0xFFFFFFFFFFFFFFFF",
       
   172     "0xFFFFFFFFFFFFFFFF",
       
   173     "0xEFFFFFFF",
       
   174   };
       
   175   /* some casts need to be explicit because of unsigned -> signed */
       
   176   gint results[] = {
       
   177     123456,
       
   178     -123456,
       
   179     0xFFFF,
       
   180     0xFFFF,
       
   181     0x7FFFFFFF,
       
   182     (gint) 0x80000000,
       
   183     (gint) 0x80000000,
       
   184     (gint) 0xFF000000,
       
   185     -1,
       
   186     (gint) 0xFFFFFFFF,
       
   187     -1,
       
   188     (gint) 0xFFFFFFFFFFFFFFFFLL,
       
   189     (gint) 0xEFFFFFFF,
       
   190   };
       
   191   int i;
       
   192   
       
   193     xmlfile = "test_deserialize_gint";
       
   194   std_log(LOG_FILENAME_LINE, "Test Started test_deserialize_gint");
       
   195 
       
   196 
       
   197   g_value_init (&value, G_TYPE_INT);
       
   198 
       
   199   for (i = 0; i < G_N_ELEMENTS (strings); ++i) {
       
   200     fail_unless (gst_value_deserialize (&value, strings[i]),
       
   201         "could not deserialize %s (%d)", strings[i], i);
       
   202         
       
   203     fail_unless (g_value_get_int (&value) == results[i],
       
   204         "resulting value is %d, not %d, for string %s (%d)",
       
   205         g_value_get_int (&value), results[i], strings[i], i);
       
   206         
       
   207   }
       
   208   
       
   209     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   210   create_xml(0);
       
   211 }
       
   212 
       
   213 
       
   214 void test_deserialize_gint_failures()
       
   215 {
       
   216   GValue value = { 0 };
       
   217   const char *strings[] = {
       
   218     "-",                        /* not a complete number */
       
   219     "- TEST",                   /* not a complete number */
       
   220     "0x0000000100000000",       /* lowest long long that cannot fit in 32 bits */
       
   221     "0xF000000000000000",
       
   222     "0xFFFFFFF000000000",
       
   223     "0xFFFFFFFF00000000",
       
   224     "0x10000000000000000",      /* first number too long to fit into a long long */
       
   225     /* invent a new processor first before trying to make this one pass */
       
   226     "0x10000000000000000000000000000000000000000000",
       
   227   };
       
   228   int i;
       
   229   
       
   230     xmlfile = "test_deserialize_gint_failures";
       
   231   std_log(LOG_FILENAME_LINE, "Test Started test_deserialize_gint_failures");
       
   232 
       
   233 
       
   234   g_value_init (&value, G_TYPE_INT);
       
   235 
       
   236   for (i = 0; i < G_N_ELEMENTS (strings); ++i) {
       
   237     fail_if (gst_value_deserialize (&value, strings[i]),
       
   238         "deserialized %s (%d), while it should have failed", strings[i], i);
       
   239         
       
   240   }
       
   241   
       
   242     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   243   create_xml(0);
       
   244 }
       
   245 
       
   246 void test_deserialize_guint()
       
   247 {
       
   248   GValue value = { 0 };
       
   249   const char *strings[] = {
       
   250     "123456",
       
   251     "-123456",
       
   252     "0xFFFF",
       
   253     "0x0000FFFF",
       
   254     /* a positive long long, serializing to highest possible positive sint */
       
   255     "0x7FFFFFFF",
       
   256     /* a positive long long, serializing to lowest possible negative sint */
       
   257     "0x80000000",
       
   258     "2147483648",
       
   259     /* a negative long long, serializing to lowest possible negative sint */
       
   260     "0xFFFFFFFF80000000",
       
   261     /* a value typically used for rgb masks */
       
   262     "0xFF000000",
       
   263     /* a positive long long serializing to highest possible positive uint */
       
   264     "0xFFFFFFFF",
       
   265     "0xFFFFFFFF",
       
   266     /* a negative long long serializing to highest possible positive uint */
       
   267     "0xFFFFFFFFFFFFFFFF",
       
   268     "0xEFFFFFFF",
       
   269   };
       
   270   guint results[] = {
       
   271     123456,
       
   272     (guint) - 123456,
       
   273     0xFFFF,
       
   274     0xFFFF,
       
   275     0x7FFFFFFF,
       
   276     0x80000000,
       
   277     (guint) 2147483648LL,
       
   278     0x80000000,
       
   279     0xFF000000,
       
   280     0xFFFFFFFF,
       
   281     G_MAXUINT,
       
   282     (guint) 0xFFFFFFFFFFFFFFFFLL,
       
   283     0xEFFFFFFF,
       
   284   };
       
   285   int i;
       
   286   
       
   287     xmlfile = "test_deserialize_guint";
       
   288   std_log(LOG_FILENAME_LINE, "Test Started test_deserialize_guint");
       
   289 
       
   290 
       
   291   g_value_init (&value, G_TYPE_UINT);
       
   292 
       
   293   for (i = 0; i < G_N_ELEMENTS (strings); ++i) {
       
   294     fail_unless (gst_value_deserialize (&value, strings[i]),
       
   295         "could not deserialize %s (%d)", strings[i], i);
       
   296         
       
   297     fail_unless (g_value_get_uint (&value) == results[i],
       
   298         "resulting value is %d, not %d, for string %s (%d)",
       
   299         g_value_get_uint (&value), results[i], strings[i], i);
       
   300         
       
   301   }
       
   302     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   303   create_xml(0);
       
   304 }
       
   305 
       
   306 void test_deserialize_guint_failures()
       
   307 {
       
   308   GValue value = { 0 };
       
   309   const char *strings[] = {
       
   310     "-",                        /* not a complete number */
       
   311     "- TEST",                   /* not a complete number */
       
   312 #if 0
       
   313 /* FIXME: these values should not be deserializable, since they overflow
       
   314  * the target format */
       
   315     "0x0000000100000000",       /* lowest long long that cannot fit in 32 bits */
       
   316     "0xF000000000000000",
       
   317     "0xFFFFFFF000000000",
       
   318     "0xFFFFFFFF00000000",
       
   319     "0x10000000000000000",      /* first number too long to fit into a long long */
       
   320     /* invent a new processor first before trying to make this one pass */
       
   321     "0x10000000000000000000000000000000000000000000",
       
   322 #endif
       
   323   };
       
   324   int i;
       
   325   
       
   326     xmlfile = "test_deserialize_guint_failures";
       
   327   std_log(LOG_FILENAME_LINE, "Test Started test_deserialize_guint_failures");
       
   328 
       
   329 
       
   330   g_value_init (&value, G_TYPE_UINT);
       
   331 
       
   332   for (i = 0; i < G_N_ELEMENTS (strings); ++i) {
       
   333     fail_if (gst_value_deserialize (&value, strings[i]),
       
   334         "deserialized %s (%d), while it should have failed", strings[i], i);
       
   335         
       
   336   }
       
   337     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   338   create_xml(0);
       
   339 }
       
   340 
       
   341 
       
   342 void test_deserialize_gint64()
       
   343 {
       
   344   GValue value = { 0 };
       
   345   const char *strings[] = {
       
   346     "12345678901",
       
   347     "-12345678901",
       
   348   };
       
   349   gint64 results[] = {
       
   350     12345678901LL,
       
   351     -12345678901LL,
       
   352   };
       
   353   int i;
       
   354   
       
   355     xmlfile = "test_deserialize_gint64";
       
   356   std_log(LOG_FILENAME_LINE, "Test Started test_deserialize_gint64");
       
   357 
       
   358 
       
   359   g_value_init (&value, G_TYPE_INT64);
       
   360 
       
   361   for (i = 0; i < G_N_ELEMENTS (strings); ++i) {
       
   362     fail_unless (gst_value_deserialize (&value, strings[i]),
       
   363         "could not deserialize %s (%d)", strings[i], i);
       
   364         
       
   365     fail_unless (g_value_get_int64 (&value) == results[i],
       
   366         "resulting value is %" G_GINT64_FORMAT ", not %" G_GINT64_FORMAT
       
   367         ", for string %s (%d)", g_value_get_int64 (&value),
       
   368         results[i], strings[i], i);
       
   369         
       
   370   }
       
   371   
       
   372     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   373   create_xml(0);
       
   374 }
       
   375 
       
   376 
       
   377 
       
   378 
       
   379 
       
   380 void test_deserialize_gstfraction()
       
   381 {
       
   382   GValue value = { 0 };
       
   383   const char *strings[] = {
       
   384     "4/5",
       
   385     "-8/9"
       
   386   };
       
   387   gint64 result_numers[] = {
       
   388     4,
       
   389     -8
       
   390   };
       
   391   gint64 result_denoms[] = {
       
   392     5,
       
   393     9
       
   394   };
       
   395 
       
   396   int i;
       
   397   
       
   398     xmlfile = "test_deserialize_gstfraction";
       
   399   std_log(LOG_FILENAME_LINE, "Test Started test_deserialize_gstfraction");
       
   400 
       
   401 
       
   402   g_value_init (&value, GST_TYPE_FRACTION);
       
   403   for (i = 0; i < G_N_ELEMENTS (strings); ++i) {
       
   404     fail_unless (gst_value_deserialize (&value, strings[i]),
       
   405         "could not deserialize %s (%d)", strings[i], i);
       
   406         
       
   407     fail_unless (gst_value_get_fraction_numerator (&value) == result_numers[i],
       
   408         "resulting numerator value is %d, not %d"
       
   409         ", for string %s (%d)", gst_value_get_fraction_numerator (&value),
       
   410         result_numers[i], strings[i], i);
       
   411         
       
   412     fail_unless (gst_value_get_fraction_denominator (&value) ==
       
   413         result_denoms[i], "resulting denominator value is %d, not %d"
       
   414         ", for string %s (%d)", gst_value_get_fraction_denominator (&value),
       
   415         result_denoms[i], strings[i], i);
       
   416         
       
   417   }
       
   418   
       
   419     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   420   create_xml(0);
       
   421 }
       
   422 
       
   423 
       
   424 
       
   425 void test_serialize_flags()
       
   426 {
       
   427   GValue value = { 0 };
       
   428   gchar *string;
       
   429   GstSeekFlags flags[] = {
       
   430     0,
       
   431     GST_SEEK_FLAG_NONE,
       
   432     GST_SEEK_FLAG_FLUSH,
       
   433     GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
       
   434   };
       
   435   const char *results[] = {
       
   436     "GST_SEEK_FLAG_NONE",
       
   437     "GST_SEEK_FLAG_NONE",
       
   438     "GST_SEEK_FLAG_FLUSH",
       
   439     "GST_SEEK_FLAG_FLUSH+GST_SEEK_FLAG_ACCURATE",
       
   440   };
       
   441   int i;
       
   442   
       
   443     xmlfile = "test_serialize_flags";
       
   444   std_log(LOG_FILENAME_LINE, "Test Started test_serialize_flags");
       
   445 
       
   446 
       
   447   g_value_init (&value, GST_TYPE_SEEK_FLAGS);
       
   448 
       
   449   for (i = 0; i < G_N_ELEMENTS (flags); ++i) {
       
   450     g_value_set_flags (&value, flags[i]);
       
   451     string = gst_value_serialize (&value);
       
   452     fail_if (string == NULL, "could not serialize flags %d", i);
       
   453     
       
   454     fail_unless (strcmp (string, results[i]) == 0,
       
   455         "resulting value is %s, not %s, for flags #%d", string, results[i], i);
       
   456         
       
   457     g_free (string);
       
   458   }
       
   459     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   460   create_xml(0);
       
   461 }
       
   462 
       
   463 
       
   464 
       
   465 
       
   466 void test_deserialize_flags()
       
   467 {
       
   468   GValue value = { 0 };
       
   469   const char *strings[] = {
       
   470     "",
       
   471     "0",
       
   472     "GST_SEEK_FLAG_NONE",
       
   473     "GST_SEEK_FLAG_FLUSH",
       
   474     "GST_SEEK_FLAG_FLUSH+GST_SEEK_FLAG_ACCURATE",
       
   475   };
       
   476   GstSeekFlags results[] = {
       
   477     GST_SEEK_FLAG_NONE,
       
   478     GST_SEEK_FLAG_NONE,
       
   479     GST_SEEK_FLAG_NONE,
       
   480     GST_SEEK_FLAG_FLUSH,
       
   481     GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE,
       
   482   };
       
   483   int i;
       
   484   
       
   485     xmlfile = "test_deserialize_flags";
       
   486   std_log(LOG_FILENAME_LINE, "Test Started test_deserialize_flags");
       
   487 
       
   488 
       
   489   g_value_init (&value, GST_TYPE_SEEK_FLAGS);
       
   490 
       
   491   for (i = 0; i < G_N_ELEMENTS (strings); ++i) {
       
   492     fail_unless (gst_value_deserialize (&value, strings[i]),
       
   493         "could not deserialize %s (%d)", strings[i], i);
       
   494         
       
   495     fail_unless (g_value_get_flags (&value) == results[i],
       
   496         "resulting value is %d, not %d, for string %s (%d)",
       
   497         g_value_get_flags (&value), results[i], strings[i], i);
       
   498         
       
   499   }
       
   500     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   501   create_xml(0);
       
   502 }
       
   503 
       
   504 
       
   505 void test_serialize_deserialize_format_enum()
       
   506 {
       
   507   GstStructure *s, *s2;
       
   508   GstFormat foobar_fmt;
       
   509   gchar *str, *str2, *end = NULL;
       
   510   
       
   511     xmlfile = "test_serialize_deserialize_format_enum";
       
   512   std_log(LOG_FILENAME_LINE, "Test Started test_serialize_deserialize_format_enum");
       
   513 
       
   514 
       
   515   /* make sure custom formats are serialised properly as well */
       
   516   foobar_fmt = gst_format_register ("foobar", "GST_FORMAT_FOOBAR");
       
   517   fail_unless (foobar_fmt != GST_FORMAT_UNDEFINED);
       
   518   
       
   519 
       
   520   s = gst_structure_new ("foo/bar", "format1", GST_TYPE_FORMAT,
       
   521       GST_FORMAT_BYTES, "format2", GST_TYPE_FORMAT, GST_FORMAT_TIME,
       
   522       "format3", GST_TYPE_FORMAT, GST_FORMAT_DEFAULT, "format4",
       
   523       GST_TYPE_FORMAT, foobar_fmt, NULL);
       
   524 
       
   525   str = gst_structure_to_string (s);
       
   526   GST_LOG ("Got structure string '%s'", GST_STR_NULL (str));
       
   527   fail_unless (str != NULL);
       
   528   
       
   529   fail_unless (strstr (str, "TIME") != NULL);
       
   530   
       
   531   fail_unless (strstr (str, "BYTE") != NULL);
       
   532   
       
   533   fail_unless (strstr (str, "DEFAULT") != NULL);
       
   534   
       
   535   fail_unless (strstr (str, "FOOBAR") != NULL);
       
   536   
       
   537 
       
   538   s2 = gst_structure_from_string (str, &end);
       
   539   fail_unless (s2 != NULL);
       
   540   
       
   541 
       
   542   str2 = gst_structure_to_string (s2);
       
   543   fail_unless (str2 != NULL);
       
   544   
       
   545 
       
   546   fail_unless (g_str_equal (str, str2));
       
   547   
       
   548 
       
   549   g_free (str);
       
   550   g_free (str2);
       
   551   gst_structure_free (s);
       
   552   gst_structure_free (s2);
       
   553   
       
   554     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   555   create_xml(0);
       
   556 }
       
   557 
       
   558 
       
   559 void test_string()
       
   560 {
       
   561   gchar *try[] = {
       
   562     "Dude",
       
   563     "Hi, I'm a string",
       
   564     "tüüüt!"
       
   565   };
       
   566   gchar *tmp;
       
   567   GValue v = { 0, };
       
   568   guint i;
       
   569   
       
   570     xmlfile = "test_string";
       
   571   std_log(LOG_FILENAME_LINE, "Test Started test_string");
       
   572 
       
   573 
       
   574   g_value_init (&v, G_TYPE_STRING);
       
   575   for (i = 0; i < G_N_ELEMENTS (try); i++) {
       
   576     g_value_set_string (&v, try[i]);
       
   577     tmp = gst_value_serialize (&v);
       
   578     fail_if (tmp == NULL, "couldn't serialize: %s\n", try[i]);
       
   579     
       
   580     fail_unless (gst_value_deserialize (&v, tmp),
       
   581         "couldn't deserialize: %s\n", tmp);
       
   582         
       
   583     g_free (tmp);
       
   584 
       
   585     fail_unless (g_str_equal (g_value_get_string (&v), try[i]),
       
   586         "\nserialized  : %s\ndeserialized: %s", try[i],
       
   587         g_value_get_string (&v));
       
   588         
       
   589   }
       
   590   /* NULL strings should not be serializable */
       
   591   g_value_set_string (&v, NULL);
       
   592   fail_unless (gst_value_serialize (&v) == NULL);
       
   593   
       
   594   g_value_unset (&v);
       
   595   
       
   596     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   597   create_xml(0);
       
   598 }
       
   599 
       
   600 
       
   601 
       
   602 void test_deserialize_string()
       
   603 {
       
   604   struct
       
   605   {
       
   606     gchar *from;
       
   607     gchar *to;
       
   608   } tests[] = {
       
   609     {
       
   610     "", ""},                    /* empty strings */
       
   611     {
       
   612     "\"\"", ""},                /* FAILURES */
       
   613     {
       
   614     "\"", NULL},                /* missing second quote */
       
   615     {
       
   616     "\"Hello\\ World", NULL},   /* missing second quote */
       
   617     {
       
   618     "\"\\", NULL},              /* quote at end, missing second quote */
       
   619     {
       
   620     "\"\\0", NULL},             /* missing second quote */
       
   621     {
       
   622     "\"\\0\"", NULL},           /* unfinished escaped character */
       
   623     {
       
   624     "\" \"", NULL},             /* spaces must be escaped */
       
   625 #if 0
       
   626         /* FIXME 0.9: this test should fail, but it doesn't */
       
   627     {
       
   628     "tüüt", NULL}             /* string with special chars must be escaped */
       
   629 #endif
       
   630   };
       
   631   guint i;
       
   632   GValue v = { 0, };
       
   633   gboolean ret = TRUE;
       
   634   
       
   635     xmlfile = "test_deserialize_string";
       
   636   std_log(LOG_FILENAME_LINE, "Test Started test_deserialize_string");
       
   637 
       
   638 
       
   639   g_value_init (&v, G_TYPE_STRING);
       
   640   for (i = 0; i < G_N_ELEMENTS (tests); i++) {
       
   641     if (gst_value_deserialize (&v, tests[i].from)) {
       
   642       fail_if (tests[i].to == NULL,
       
   643           "I got %s instead of a failure", g_value_get_string (&v));
       
   644           
       
   645       fail_unless (g_str_equal (g_value_get_string (&v), tests[i].to),
       
   646           "\nwanted: %s\ngot    : %s", tests[i].to, g_value_get_string (&v));
       
   647           
       
   648     } else {
       
   649       fail_if (tests[i].to != NULL, "failed, but wanted: %s", tests[i].to);
       
   650       
       
   651       ret = FALSE;
       
   652     }
       
   653   }
       
   654   g_value_unset (&v);
       
   655   
       
   656     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   657   create_xml(0);
       
   658 }
       
   659 
       
   660 
       
   661 void test_value_intersect()
       
   662 {
       
   663   GValue dest = { 0 };
       
   664   GValue src1 = { 0 };
       
   665   GValue src2 = { 0 };
       
   666   GValue item = { 0 };
       
   667   gboolean ret;
       
   668   
       
   669     xmlfile = "test_value_intersect";
       
   670   std_log(LOG_FILENAME_LINE, "Test Started test_value_intersect");
       
   671 
       
   672 
       
   673   g_value_init (&src1, G_TYPE_INT);
       
   674   g_value_set_int (&src1, 10);
       
   675   g_value_init (&src2, G_TYPE_INT);
       
   676   g_value_set_int (&src2, 20);
       
   677   ret = gst_value_intersect (&dest, &src1, &src2);
       
   678   fail_unless (ret == FALSE);
       
   679   
       
   680   g_value_unset (&src1);
       
   681   g_value_unset (&src2);
       
   682 
       
   683   g_value_init (&src1, GST_TYPE_FOURCC);
       
   684   gst_value_set_fourcc (&src1, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'));
       
   685   g_value_init (&src2, GST_TYPE_LIST);
       
   686   g_value_init (&item, GST_TYPE_FOURCC);
       
   687   gst_value_set_fourcc (&item, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'));
       
   688   gst_value_list_append_value (&src2, &item);
       
   689   gst_value_set_fourcc (&item, GST_MAKE_FOURCC ('I', '4', '2', '0'));
       
   690   gst_value_list_append_value (&src2, &item);
       
   691   gst_value_set_fourcc (&item, GST_MAKE_FOURCC ('A', 'B', 'C', 'D'));
       
   692   gst_value_list_append_value (&src2, &item);
       
   693 
       
   694   fail_unless (gst_value_intersect (&dest, &src1, &src2));
       
   695   
       
   696   fail_unless (GST_VALUE_HOLDS_FOURCC (&dest));
       
   697   
       
   698   fail_unless (gst_value_get_fourcc (&dest) ==
       
   699       GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'));
       
   700       
       
   701 
       
   702   g_value_unset (&src1);
       
   703   g_value_unset (&src2);
       
   704   
       
   705     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   706   create_xml(0);
       
   707 }
       
   708 
       
   709 
       
   710 void test_date()
       
   711 {
       
   712   GstStructure *s;
       
   713   GDate *date, *date2;
       
   714   gchar *str;
       
   715   
       
   716     xmlfile = "test_date";
       
   717   std_log(LOG_FILENAME_LINE, "Test Started test_date");
       
   718 
       
   719 
       
   720   date = g_date_new_dmy (22, 9, 2005);
       
   721 
       
   722   s = gst_structure_new ("media/x-type", "SOME_DATE_TAG", GST_TYPE_DATE,
       
   723       date, NULL);
       
   724 
       
   725   fail_unless (gst_structure_has_field_typed (s, "SOME_DATE_TAG",
       
   726           GST_TYPE_DATE));
       
   727           
       
   728   fail_unless (gst_structure_get_date (s, "SOME_DATE_TAG", &date2));
       
   729   
       
   730   fail_unless (date2 != NULL);
       
   731   
       
   732   fail_unless (g_date_valid (date2));
       
   733   
       
   734   fail_unless (g_date_compare (date, date2) == 0);
       
   735   
       
   736 
       
   737   g_date_free (date);
       
   738   g_date_free (date2);
       
   739   date = NULL;
       
   740   date2 = NULL;
       
   741 
       
   742   str = gst_structure_to_string (s);
       
   743   gst_structure_free (s);
       
   744   s = NULL;
       
   745 
       
   746   fail_unless (g_str_equal (str,
       
   747           "media/x-type, SOME_DATE_TAG=(GstDate)2005-09-22;"));
       
   748           
       
   749 
       
   750   s = gst_structure_from_string (str, NULL);
       
   751   g_free (str);
       
   752   str = NULL;
       
   753 
       
   754   fail_unless (s != NULL);
       
   755   
       
   756   fail_unless (gst_structure_has_name (s, "media/x-type"));
       
   757   
       
   758   fail_unless (gst_structure_has_field_typed (s, "SOME_DATE_TAG",
       
   759           GST_TYPE_DATE));
       
   760           
       
   761   fail_unless (gst_structure_get_date (s, "SOME_DATE_TAG", &date));
       
   762   
       
   763   fail_unless (date != NULL);
       
   764   
       
   765   fail_unless (g_date_valid (date));
       
   766   
       
   767   fail_unless (g_date_get_day (date) == 22);
       
   768   
       
   769   fail_unless (g_date_get_month (date) == 9);
       
   770   
       
   771   fail_unless (g_date_get_year (date) == 2005);
       
   772   
       
   773   g_date_free (date);
       
   774   date = NULL;
       
   775 
       
   776   str = gst_structure_to_string (s);
       
   777   gst_structure_free (s);
       
   778   s = NULL;
       
   779 
       
   780   fail_unless (g_str_equal (str,
       
   781           "media/x-type, SOME_DATE_TAG=(GstDate)2005-09-22;"));
       
   782           
       
   783   g_free (str);
       
   784   str = NULL;
       
   785   
       
   786     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   787   create_xml(0);
       
   788 }
       
   789 
       
   790 
       
   791 void test_fraction_range()
       
   792 {
       
   793   GValue range = { 0, };
       
   794   GValue start = { 0, }, end = {
       
   795   0,};
       
   796   GValue src = { 0, }, dest = {
       
   797   0,};
       
   798   GValue range2 = { 0, };
       
   799   
       
   800     xmlfile = "test_fraction_range";
       
   801   std_log(LOG_FILENAME_LINE, "Test Started test_fraction_range");
       
   802 
       
   803 
       
   804   g_value_init (&range, GST_TYPE_FRACTION_RANGE);
       
   805   g_value_init (&range2, GST_TYPE_FRACTION_RANGE);
       
   806   g_value_init (&start, GST_TYPE_FRACTION);
       
   807   g_value_init (&end, GST_TYPE_FRACTION);
       
   808   g_value_init (&src, GST_TYPE_FRACTION);
       
   809 
       
   810   gst_value_set_fraction (&src, 1, 2);
       
   811 
       
   812   /* Check that a intersection of fraction & range = fraction */
       
   813   gst_value_set_fraction (&start, 1, 4);
       
   814   gst_value_set_fraction (&end, 2, 3);
       
   815   gst_value_set_fraction_range (&range, &start, &end);
       
   816 
       
   817   fail_unless (gst_value_intersect (&dest, &src, &range) == TRUE);
       
   818   
       
   819   fail_unless (G_VALUE_TYPE (&dest) == GST_TYPE_FRACTION);
       
   820   
       
   821   fail_unless (gst_value_compare (&dest, &src) == GST_VALUE_EQUAL);
       
   822   
       
   823 
       
   824   /* Check that a intersection selects the overlapping range */
       
   825   gst_value_set_fraction (&start, 1, 3);
       
   826   gst_value_set_fraction (&end, 2, 3);
       
   827   gst_value_set_fraction_range (&range2, &start, &end);
       
   828   g_value_unset (&dest);
       
   829   fail_unless (gst_value_intersect (&dest, &range, &range2) == TRUE);
       
   830   
       
   831   fail_unless (G_VALUE_TYPE (&dest) == GST_TYPE_FRACTION_RANGE);
       
   832   
       
   833 
       
   834   gst_value_set_fraction_range (&range2, &start, &end);
       
   835   fail_unless (gst_value_compare (&dest, &range2) == GST_VALUE_EQUAL);
       
   836   
       
   837 
       
   838   /* Check that non intersection ranges don't intersect */
       
   839   gst_value_set_fraction (&start, 4, 2);
       
   840   gst_value_set_fraction (&end, 5, 2);
       
   841   gst_value_set_fraction_range (&range2, &start, &end);
       
   842   g_value_unset (&dest);
       
   843   fail_unless (gst_value_intersect (&dest, &range, &range2) == FALSE);
       
   844   
       
   845 
       
   846   g_value_unset (&start);
       
   847   g_value_unset (&end);
       
   848   g_value_unset (&range);
       
   849   g_value_unset (&range2);
       
   850   g_value_unset (&src);
       
   851   
       
   852     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   853   create_xml(0);
       
   854 }
       
   855 
       
   856 /* Test arithmetic subtraction of fractions */
       
   857 void test_value_subtract_fraction()
       
   858 {
       
   859   GValue result = { 0 };
       
   860   GValue src1 = { 0 };
       
   861   GValue src2 = { 0 };
       
   862   
       
   863     xmlfile = "test_value_subtract_fraction";
       
   864   std_log(LOG_FILENAME_LINE, "Test Started test_value_subtract_fraction");
       
   865 
       
   866 
       
   867   /* Subtract 1/4 from 1/2 */
       
   868   g_value_init (&src1, GST_TYPE_FRACTION);
       
   869   g_value_init (&src2, GST_TYPE_FRACTION);
       
   870   g_value_init (&result, GST_TYPE_FRACTION);
       
   871   gst_value_set_fraction (&src1, 1, 2);
       
   872   gst_value_set_fraction (&src2, 1, 4);
       
   873   fail_unless (gst_value_fraction_subtract (&result, &src1, &src2) == TRUE);
       
   874   
       
   875   fail_unless (gst_value_get_fraction_numerator (&result) == 1);
       
   876   
       
   877   fail_unless (gst_value_get_fraction_denominator (&result) == 4);
       
   878   
       
   879 
       
   880   g_value_unset (&src1);
       
   881   g_value_unset (&src2);
       
   882   g_value_unset (&result);
       
   883 
       
   884   /* Subtract 1/12 from 7/8 */
       
   885   g_value_init (&src1, GST_TYPE_FRACTION);
       
   886   g_value_init (&src2, GST_TYPE_FRACTION);
       
   887   g_value_init (&result, GST_TYPE_FRACTION);
       
   888   gst_value_set_fraction (&src1, 7, 8);
       
   889   gst_value_set_fraction (&src2, 1, 12);
       
   890   fail_unless (gst_value_fraction_subtract (&result, &src1, &src2) == TRUE);
       
   891   
       
   892   fail_unless (gst_value_get_fraction_numerator (&result) == 19);
       
   893   
       
   894   fail_unless (gst_value_get_fraction_denominator (&result) == 24);
       
   895   
       
   896 
       
   897   g_value_unset (&src1);
       
   898   g_value_unset (&src2);
       
   899   g_value_unset (&result);
       
   900 
       
   901   /* Subtract 12/13 from 4/3 */
       
   902   g_value_init (&src1, GST_TYPE_FRACTION);
       
   903   g_value_init (&src2, GST_TYPE_FRACTION);
       
   904   g_value_init (&result, GST_TYPE_FRACTION);
       
   905   gst_value_set_fraction (&src1, 4, 3);
       
   906   gst_value_set_fraction (&src2, 12, 13);
       
   907   fail_unless (gst_value_fraction_subtract (&result, &src1, &src2) == TRUE);
       
   908   
       
   909   fail_unless (gst_value_get_fraction_numerator (&result) == 16);
       
   910   
       
   911   fail_unless (gst_value_get_fraction_denominator (&result) == 39);
       
   912   
       
   913 
       
   914   g_value_unset (&src1);
       
   915   g_value_unset (&src2);
       
   916   g_value_unset (&result);
       
   917   
       
   918     std_log(LOG_FILENAME_LINE, "Test Successful");
       
   919   create_xml(0);
       
   920 
       
   921   /* Subtract 1/12 from 7/8 */
       
   922 }
       
   923 
       
   924 
       
   925 void test_value_compare()
       
   926 {
       
   927   GValue value1 = { 0 };
       
   928   GValue value2 = { 0 };
       
   929   GValue tmp = { 0 };
       
   930   
       
   931     xmlfile = "test_value_compare";
       
   932   std_log(LOG_FILENAME_LINE, "Test Started test_range");
       
   933 
       
   934 
       
   935   g_value_init (&value1, G_TYPE_INT);
       
   936   g_value_set_int (&value1, 10);
       
   937   g_value_init (&value2, G_TYPE_INT);
       
   938   g_value_set_int (&value2, 20);
       
   939   fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN);
       
   940   fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN);
       
   941   fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL);
       
   942   g_value_unset (&value1);
       
   943   g_value_unset (&value2);
       
   944 
       
   945   g_value_init (&value1, G_TYPE_DOUBLE);
       
   946   g_value_set_double (&value1, 10);
       
   947   g_value_init (&value2, G_TYPE_DOUBLE);
       
   948   g_value_set_double (&value2, 20);
       
   949   fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN);
       
   950   fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN);
       
   951   fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL);
       
   952   g_value_unset (&value1);
       
   953   g_value_unset (&value2);
       
   954 
       
   955   g_value_init (&value1, G_TYPE_STRING);
       
   956   g_value_set_string (&value1, "a");
       
   957   g_value_init (&value2, G_TYPE_STRING);
       
   958   g_value_set_string (&value2, "b");
       
   959   fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN);
       
   960   fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN);
       
   961   fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL);
       
   962   g_value_unset (&value1);
       
   963   g_value_unset (&value2);
       
   964 
       
   965   g_value_init (&value1, GST_TYPE_FOURCC);
       
   966   gst_value_set_fourcc (&value1, GST_MAKE_FOURCC ('a', 'b', 'c', 'd'));
       
   967   g_value_init (&value2, GST_TYPE_FOURCC);
       
   968   gst_value_set_fourcc (&value2, GST_MAKE_FOURCC ('1', '2', '3', '4'));
       
   969   fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_UNORDERED);
       
   970   fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL);
       
   971   g_value_unset (&value1);
       
   972   g_value_unset (&value2);
       
   973 
       
   974   /* comparing 2/3 with 3/4 */
       
   975   g_value_init (&value1, GST_TYPE_FRACTION);
       
   976   gst_value_set_fraction (&value1, 2, 3);
       
   977   g_value_init (&value2, GST_TYPE_FRACTION);
       
   978   gst_value_set_fraction (&value2, 3, 4);
       
   979   fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN);
       
   980   fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN);
       
   981   fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL);
       
   982   g_value_unset (&value1);
       
   983   g_value_unset (&value2);
       
   984 
       
   985   /* comparing -4/5 with 2/-3 */
       
   986   g_value_init (&value1, GST_TYPE_FRACTION);
       
   987   gst_value_set_fraction (&value1, -4, 5);
       
   988   g_value_init (&value2, GST_TYPE_FRACTION);
       
   989   gst_value_set_fraction (&value2, 2, -3);
       
   990   fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN);
       
   991   fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN);
       
   992   fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL);
       
   993   g_value_unset (&value1);
       
   994   g_value_unset (&value2);
       
   995 
       
   996   /* comparing 10/100 with 200/2000 */
       
   997   g_value_init (&value1, GST_TYPE_FRACTION);
       
   998   gst_value_set_fraction (&value1, 10, 100);
       
   999   g_value_init (&value2, GST_TYPE_FRACTION);
       
  1000   gst_value_set_fraction (&value2, 200, 2000);
       
  1001   fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL);
       
  1002   g_value_unset (&value1);
       
  1003   g_value_unset (&value2);
       
  1004 
       
  1005   /* comparing -4/5 with 2/-3 */
       
  1006   g_value_init (&value1, GST_TYPE_FRACTION);
       
  1007   gst_value_set_fraction (&value1, -4, 5);
       
  1008   g_value_init (&value2, GST_TYPE_FRACTION);
       
  1009   gst_value_set_fraction (&value2, 2, -3);
       
  1010   fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_LESS_THAN);
       
  1011   fail_unless (gst_value_compare (&value2, &value1) == GST_VALUE_GREATER_THAN);
       
  1012   fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL);
       
  1013   g_value_unset (&value1);
       
  1014   g_value_unset (&value2);
       
  1015 
       
  1016   /* Check that lists are equal regardless of order */
       
  1017   g_value_init (&value1, GST_TYPE_LIST);
       
  1018   g_value_init (&tmp, G_TYPE_INT);
       
  1019   g_value_set_int (&tmp, 1);
       
  1020   gst_value_list_append_value (&value1, &tmp);
       
  1021   g_value_set_int (&tmp, 2);
       
  1022   gst_value_list_append_value (&value1, &tmp);
       
  1023   g_value_set_int (&tmp, 3);
       
  1024   gst_value_list_append_value (&value1, &tmp);
       
  1025   g_value_set_int (&tmp, 4);
       
  1026   gst_value_list_append_value (&value1, &tmp);
       
  1027 
       
  1028   g_value_init (&value2, GST_TYPE_LIST);
       
  1029   g_value_set_int (&tmp, 4);
       
  1030   gst_value_list_append_value (&value2, &tmp);
       
  1031   g_value_set_int (&tmp, 3);
       
  1032   gst_value_list_append_value (&value2, &tmp);
       
  1033   g_value_set_int (&tmp, 2);
       
  1034   gst_value_list_append_value (&value2, &tmp);
       
  1035   g_value_set_int (&tmp, 1);
       
  1036   gst_value_list_append_value (&value2, &tmp);
       
  1037 
       
  1038   fail_unless (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL,
       
  1039       "value lists with different order were not equal when they should be");
       
  1040   fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL,
       
  1041       "value lists with same order were not equal when they should be");
       
  1042   fail_unless (gst_value_compare (&value2, &value2) == GST_VALUE_EQUAL,
       
  1043       "value lists with same order were not equal when they should be");
       
  1044 
       
  1045   /* Carry over the lists to this next check: */
       
  1046   /* Lists with different sizes are unequal */
       
  1047   g_value_set_int (&tmp, 1);
       
  1048   gst_value_list_append_value (&value2, &tmp);
       
  1049 
       
  1050   fail_if (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL,
       
  1051       "Value lists with different size were equal when they shouldn't be");
       
  1052 
       
  1053   /* Carry over the lists to this next check: */
       
  1054   /* Lists with same size but list1 contains one more element not in list2 */
       
  1055   g_value_set_int (&tmp, 5);
       
  1056   gst_value_list_append_value (&value1, &tmp);
       
  1057 
       
  1058   fail_if (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL,
       
  1059       "Value lists with different elements were equal when they shouldn't be");
       
  1060   fail_if (gst_value_compare (&value2, &value1) == GST_VALUE_EQUAL,
       
  1061       "Value lists with different elements were equal when they shouldn't be");
       
  1062 
       
  1063   g_value_unset (&value1);
       
  1064   g_value_unset (&value2);
       
  1065   g_value_unset (&tmp);
       
  1066 
       
  1067   /* Arrays are only equal when in the same order */
       
  1068   g_value_init (&value1, GST_TYPE_ARRAY);
       
  1069   g_value_init (&tmp, G_TYPE_INT);
       
  1070   g_value_set_int (&tmp, 1);
       
  1071   gst_value_array_append_value (&value1, &tmp);
       
  1072   g_value_set_int (&tmp, 2);
       
  1073   gst_value_array_append_value (&value1, &tmp);
       
  1074   g_value_set_int (&tmp, 3);
       
  1075   gst_value_array_append_value (&value1, &tmp);
       
  1076   g_value_set_int (&tmp, 4);
       
  1077   gst_value_array_append_value (&value1, &tmp);
       
  1078 
       
  1079   g_value_init (&value2, GST_TYPE_ARRAY);
       
  1080   g_value_set_int (&tmp, 4);
       
  1081   gst_value_array_append_value (&value2, &tmp);
       
  1082   g_value_set_int (&tmp, 3);
       
  1083   gst_value_array_append_value (&value2, &tmp);
       
  1084   g_value_set_int (&tmp, 2);
       
  1085   gst_value_array_append_value (&value2, &tmp);
       
  1086   g_value_set_int (&tmp, 1);
       
  1087   gst_value_array_append_value (&value2, &tmp);
       
  1088 
       
  1089   fail_if (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL,
       
  1090       "Value arrays with different order were equal when they shouldn't be");
       
  1091   fail_unless (gst_value_compare (&value1, &value1) == GST_VALUE_EQUAL,
       
  1092       "Identical value arrays were not equal when they should be");
       
  1093   fail_unless (gst_value_compare (&value2, &value2) == GST_VALUE_EQUAL,
       
  1094       "Identical value arrays were not equal when they should be");
       
  1095 
       
  1096   /* Carry over the arrays to this next check: */
       
  1097   /* Arrays with different sizes are unequal */
       
  1098   g_value_unset (&value2);
       
  1099   g_value_init (&value2, GST_TYPE_ARRAY);
       
  1100   g_value_copy (&value1, &value2);
       
  1101 
       
  1102   g_value_set_int (&tmp, 1);
       
  1103   gst_value_array_append_value (&value2, &tmp);
       
  1104 
       
  1105   fail_if (gst_value_compare (&value1, &value2) == GST_VALUE_EQUAL,
       
  1106       "Value arrays with different size were equal when they shouldn't be");
       
  1107   /* order should not matter */
       
  1108   fail_if (gst_value_compare (&value2, &value1) == GST_VALUE_EQUAL,
       
  1109       "Value arrays with different size were equal when they shouldn't be");
       
  1110 
       
  1111   g_value_unset (&value1);
       
  1112   g_value_unset (&value2);
       
  1113   g_value_unset (&tmp);
       
  1114   
       
  1115     std_log(LOG_FILENAME_LINE, "Test Successful");
       
  1116   create_xml(0);
       
  1117 }
       
  1118 
       
  1119 
       
  1120 void test_value_subtract_int()
       
  1121 {
       
  1122   GValue dest = { 0 };
       
  1123   GValue src1 = { 0 };
       
  1124   GValue src2 = { 0 };
       
  1125   const GValue *tmp;
       
  1126   gboolean ret;
       
  1127   
       
  1128     xmlfile = "test_value_subtract_int";
       
  1129   std_log(LOG_FILENAME_LINE, "Test Started test_range");
       
  1130 
       
  1131 
       
  1132   /*  int <-> int
       
  1133    */
       
  1134   g_value_init (&src1, G_TYPE_INT);
       
  1135   g_value_set_int (&src1, 10);
       
  1136   g_value_init (&src2, G_TYPE_INT);
       
  1137   g_value_set_int (&src2, 20);
       
  1138   /* subtract as in sets, result is 10 */
       
  1139   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1140   fail_unless (ret == TRUE);
       
  1141   fail_unless (gst_value_compare (&dest, &src1) == GST_VALUE_EQUAL);
       
  1142   g_value_unset (&dest);
       
  1143 
       
  1144   /* same values, yields empty set */
       
  1145   ret = gst_value_subtract (&dest, &src1, &src1);
       
  1146   fail_unless (ret == FALSE);
       
  1147   g_value_unset (&src1);
       
  1148   g_value_unset (&src2);
       
  1149 
       
  1150   /*  int <-> int_range
       
  1151    */
       
  1152 
       
  1153   /* would yield an empty set */
       
  1154   g_value_init (&src1, G_TYPE_INT);
       
  1155   g_value_set_int (&src1, 10);
       
  1156   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1157   gst_value_set_int_range (&src2, 0, 20);
       
  1158   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1159   fail_unless (ret == FALSE);
       
  1160 
       
  1161   /* and the other way around, should create a list of two ranges. */
       
  1162   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1163   fail_unless (ret == TRUE);
       
  1164   fail_unless (GST_VALUE_HOLDS_LIST (&dest) == TRUE);
       
  1165   tmp = gst_value_list_get_value (&dest, 0);
       
  1166   fail_unless (GST_VALUE_HOLDS_INT_RANGE (tmp) == TRUE);
       
  1167   fail_unless (gst_value_get_int_range_min (tmp) == 0);
       
  1168   fail_unless (gst_value_get_int_range_max (tmp) == 9);
       
  1169   tmp = gst_value_list_get_value (&dest, 1);
       
  1170   fail_unless (GST_VALUE_HOLDS_INT_RANGE (tmp) == TRUE);
       
  1171   fail_unless (gst_value_get_int_range_min (tmp) == 11);
       
  1172   fail_unless (gst_value_get_int_range_max (tmp) == 20);
       
  1173   g_value_unset (&dest);
       
  1174   g_value_unset (&src1);
       
  1175   g_value_unset (&src2);
       
  1176 
       
  1177   /* border case 1, empty set */
       
  1178   g_value_init (&src1, G_TYPE_INT);
       
  1179   g_value_set_int (&src1, 10);
       
  1180   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1181   gst_value_set_int_range (&src2, 10, 20);
       
  1182   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1183   fail_unless (ret == FALSE);
       
  1184 
       
  1185   /* and the other way around, should create a new range. */
       
  1186   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1187   fail_unless (ret == TRUE);
       
  1188   fail_unless (GST_VALUE_HOLDS_INT_RANGE (&dest) == TRUE);
       
  1189   fail_unless (gst_value_get_int_range_min (&dest) == 11);
       
  1190   fail_unless (gst_value_get_int_range_max (&dest) == 20);
       
  1191   g_value_unset (&dest);
       
  1192   g_value_unset (&src1);
       
  1193   g_value_unset (&src2);
       
  1194 
       
  1195   /* border case 2, empty set */
       
  1196   g_value_init (&src1, G_TYPE_INT);
       
  1197   g_value_set_int (&src1, 20);
       
  1198   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1199   gst_value_set_int_range (&src2, 10, 20);
       
  1200   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1201   fail_unless (ret == FALSE);
       
  1202 
       
  1203   /* and the other way around, should create a new range. */
       
  1204   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1205   fail_unless (ret == TRUE);
       
  1206   fail_unless (GST_VALUE_HOLDS_INT_RANGE (&dest) == TRUE);
       
  1207   fail_unless (gst_value_get_int_range_min (&dest) == 10);
       
  1208   fail_unless (gst_value_get_int_range_max (&dest) == 19);
       
  1209   g_value_unset (&dest);
       
  1210   g_value_unset (&src1);
       
  1211   g_value_unset (&src2);
       
  1212 
       
  1213   /* case 3, valid set */
       
  1214   g_value_init (&src1, G_TYPE_INT);
       
  1215   g_value_set_int (&src1, 0);
       
  1216   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1217   gst_value_set_int_range (&src2, 10, 20);
       
  1218   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1219   fail_unless (ret == TRUE);
       
  1220   fail_unless (G_VALUE_HOLDS_INT (&dest) == TRUE);
       
  1221   fail_unless (gst_value_compare (&dest, &src1) == GST_VALUE_EQUAL);
       
  1222   g_value_unset (&dest);
       
  1223 
       
  1224   /* and the other way around, should keep the range. */
       
  1225   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1226   fail_unless (ret == TRUE);
       
  1227   fail_unless (GST_VALUE_HOLDS_INT_RANGE (&dest) == TRUE);
       
  1228   fail_unless (gst_value_get_int_range_min (&dest) == 10);
       
  1229   fail_unless (gst_value_get_int_range_max (&dest) == 20);
       
  1230   g_value_unset (&dest);
       
  1231   g_value_unset (&src1);
       
  1232   g_value_unset (&src2);
       
  1233 
       
  1234   /*  int_range <-> int_range
       
  1235    */
       
  1236 
       
  1237   /* same range, empty set */
       
  1238   g_value_init (&src1, GST_TYPE_INT_RANGE);
       
  1239   gst_value_set_int_range (&src1, 10, 20);
       
  1240   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1241   gst_value_set_int_range (&src2, 10, 20);
       
  1242   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1243   fail_unless (ret == FALSE);
       
  1244   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1245   fail_unless (ret == FALSE);
       
  1246   g_value_unset (&src1);
       
  1247   g_value_unset (&src2);
       
  1248 
       
  1249   /* non overlapping ranges */
       
  1250   g_value_init (&src1, GST_TYPE_INT_RANGE);
       
  1251   gst_value_set_int_range (&src1, 10, 20);
       
  1252   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1253   gst_value_set_int_range (&src2, 30, 40);
       
  1254   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1255   fail_unless (ret == TRUE);
       
  1256   fail_unless (GST_VALUE_HOLDS_INT_RANGE (&dest) == TRUE);
       
  1257   fail_unless (gst_value_get_int_range_min (&dest) == 10);
       
  1258   fail_unless (gst_value_get_int_range_max (&dest) == 20);
       
  1259   g_value_unset (&dest);
       
  1260   /* the other way */
       
  1261   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1262   fail_unless (ret == TRUE);
       
  1263   fail_unless (GST_VALUE_HOLDS_INT_RANGE (&dest) == TRUE);
       
  1264   fail_unless (gst_value_get_int_range_min (&dest) == 30);
       
  1265   fail_unless (gst_value_get_int_range_max (&dest) == 40);
       
  1266   g_value_unset (&dest);
       
  1267   g_value_unset (&src1);
       
  1268   g_value_unset (&src2);
       
  1269 
       
  1270   /* completely overlapping ranges */
       
  1271   g_value_init (&src1, GST_TYPE_INT_RANGE);
       
  1272   gst_value_set_int_range (&src1, 10, 20);
       
  1273   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1274   gst_value_set_int_range (&src2, 10, 30);
       
  1275   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1276   fail_unless (ret == FALSE);
       
  1277   /* the other way */
       
  1278   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1279   fail_unless (ret == TRUE);
       
  1280   fail_unless (GST_VALUE_HOLDS_INT_RANGE (&dest) == TRUE);
       
  1281   fail_unless (gst_value_get_int_range_min (&dest) == 21);
       
  1282   fail_unless (gst_value_get_int_range_max (&dest) == 30);
       
  1283   g_value_unset (&dest);
       
  1284   g_value_unset (&src1);
       
  1285   g_value_unset (&src2);
       
  1286 
       
  1287   /* partially overlapping ranges */
       
  1288   g_value_init (&src1, GST_TYPE_INT_RANGE);
       
  1289   gst_value_set_int_range (&src1, 10, 20);
       
  1290   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1291   gst_value_set_int_range (&src2, 15, 30);
       
  1292   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1293   fail_unless (ret == TRUE);
       
  1294   fail_unless (GST_VALUE_HOLDS_INT_RANGE (&dest) == TRUE);
       
  1295   fail_unless (gst_value_get_int_range_min (&dest) == 10);
       
  1296   fail_unless (gst_value_get_int_range_max (&dest) == 14);
       
  1297   g_value_unset (&dest);
       
  1298   /* the other way */
       
  1299   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1300   fail_unless (ret == TRUE);
       
  1301   fail_unless (GST_VALUE_HOLDS_INT_RANGE (&dest) == TRUE);
       
  1302   fail_unless (gst_value_get_int_range_min (&dest) == 21);
       
  1303   fail_unless (gst_value_get_int_range_max (&dest) == 30);
       
  1304   g_value_unset (&dest);
       
  1305   g_value_unset (&src1);
       
  1306   g_value_unset (&src2);
       
  1307 
       
  1308   /* create a hole { int_range, int_range } */
       
  1309   g_value_init (&src1, GST_TYPE_INT_RANGE);
       
  1310   gst_value_set_int_range (&src1, 10, 30);
       
  1311   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1312   gst_value_set_int_range (&src2, 15, 20);
       
  1313   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1314   fail_unless (ret == TRUE);
       
  1315   fail_unless (GST_VALUE_HOLDS_LIST (&dest) == TRUE);
       
  1316   tmp = gst_value_list_get_value (&dest, 0);
       
  1317   fail_unless (GST_VALUE_HOLDS_INT_RANGE (tmp) == TRUE);
       
  1318   fail_unless (gst_value_get_int_range_min (tmp) == 10);
       
  1319   fail_unless (gst_value_get_int_range_max (tmp) == 14);
       
  1320   tmp = gst_value_list_get_value (&dest, 1);
       
  1321   fail_unless (GST_VALUE_HOLDS_INT_RANGE (tmp) == TRUE);
       
  1322   fail_unless (gst_value_get_int_range_min (tmp) == 21);
       
  1323   fail_unless (gst_value_get_int_range_max (tmp) == 30);
       
  1324   g_value_unset (&dest);
       
  1325   /* the other way */
       
  1326   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1327   fail_unless (ret == FALSE);
       
  1328   g_value_unset (&src1);
       
  1329   g_value_unset (&src2);
       
  1330 
       
  1331   /* create a hole, { int, int } */
       
  1332   g_value_init (&src1, GST_TYPE_INT_RANGE);
       
  1333   gst_value_set_int_range (&src1, 10, 30);
       
  1334   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1335   gst_value_set_int_range (&src2, 11, 29);
       
  1336   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1337   fail_unless (ret == TRUE);
       
  1338   fail_unless (GST_VALUE_HOLDS_LIST (&dest) == TRUE);
       
  1339   tmp = gst_value_list_get_value (&dest, 0);
       
  1340   fail_unless (G_VALUE_HOLDS_INT (tmp) == TRUE);
       
  1341   fail_unless (g_value_get_int (tmp) == 10);
       
  1342   tmp = gst_value_list_get_value (&dest, 1);
       
  1343   fail_unless (G_VALUE_HOLDS_INT (tmp) == TRUE);
       
  1344   fail_unless (g_value_get_int (tmp) == 30);
       
  1345   g_value_unset (&dest);
       
  1346   /* the other way */
       
  1347   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1348   fail_unless (ret == FALSE);
       
  1349   g_value_unset (&src1);
       
  1350   g_value_unset (&src2);
       
  1351 
       
  1352   /* create a hole, { int, int_range } */
       
  1353   g_value_init (&src1, GST_TYPE_INT_RANGE);
       
  1354   gst_value_set_int_range (&src1, 10, 30);
       
  1355   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1356   gst_value_set_int_range (&src2, 11, 28);
       
  1357   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1358   fail_unless (ret == TRUE);
       
  1359   fail_unless (GST_VALUE_HOLDS_LIST (&dest) == TRUE);
       
  1360   tmp = gst_value_list_get_value (&dest, 0);
       
  1361   fail_unless (G_VALUE_HOLDS_INT (tmp) == TRUE);
       
  1362   fail_unless (g_value_get_int (tmp) == 10);
       
  1363   tmp = gst_value_list_get_value (&dest, 1);
       
  1364   fail_unless (GST_VALUE_HOLDS_INT_RANGE (tmp) == TRUE);
       
  1365   fail_unless (gst_value_get_int_range_min (tmp) == 29);
       
  1366   fail_unless (gst_value_get_int_range_max (tmp) == 30);
       
  1367   g_value_unset (&dest);
       
  1368   /* the other way */
       
  1369   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1370   fail_unless (ret == FALSE);
       
  1371   g_value_unset (&src1);
       
  1372   g_value_unset (&src2);
       
  1373 
       
  1374   /* create a hole, { int_range, int } */
       
  1375   g_value_init (&src1, GST_TYPE_INT_RANGE);
       
  1376   gst_value_set_int_range (&src1, 10, 30);
       
  1377   g_value_init (&src2, GST_TYPE_INT_RANGE);
       
  1378   gst_value_set_int_range (&src2, 12, 29);
       
  1379   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1380   fail_unless (ret == TRUE);
       
  1381   fail_unless (GST_VALUE_HOLDS_LIST (&dest) == TRUE);
       
  1382   tmp = gst_value_list_get_value (&dest, 0);
       
  1383   fail_unless (GST_VALUE_HOLDS_INT_RANGE (tmp) == TRUE);
       
  1384   fail_unless (gst_value_get_int_range_min (tmp) == 10);
       
  1385   fail_unless (gst_value_get_int_range_max (tmp) == 11);
       
  1386   tmp = gst_value_list_get_value (&dest, 1);
       
  1387   fail_unless (G_VALUE_HOLDS_INT (tmp) == TRUE);
       
  1388   fail_unless (g_value_get_int (tmp) == 30);
       
  1389   g_value_unset (&dest);
       
  1390   /* the other way */
       
  1391   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1392   fail_unless (ret == FALSE);
       
  1393   g_value_unset (&src1);
       
  1394   g_value_unset (&src2);
       
  1395   
       
  1396     std_log(LOG_FILENAME_LINE, "Test Successful");
       
  1397   create_xml(0);
       
  1398 }
       
  1399 
       
  1400 
       
  1401 
       
  1402 void test_value_subtract_double()
       
  1403 {
       
  1404   GValue dest = { 0 };
       
  1405   GValue src1 = { 0 };
       
  1406   GValue src2 = { 0 };
       
  1407   const GValue *tmp;
       
  1408   gboolean ret;
       
  1409   
       
  1410     xmlfile = "test_value_subtract_double";
       
  1411   std_log(LOG_FILENAME_LINE, "Test Started test_range");
       
  1412 
       
  1413 
       
  1414   /*  double <-> double
       
  1415    */
       
  1416   g_value_init (&src1, G_TYPE_DOUBLE);
       
  1417   g_value_set_double (&src1, 10.0);
       
  1418   g_value_init (&src2, G_TYPE_DOUBLE);
       
  1419   g_value_set_double (&src2, 20.0);
       
  1420   /* subtract as in sets, result is 10 */
       
  1421   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1422   fail_unless (ret == TRUE);
       
  1423   fail_unless (gst_value_compare (&dest, &src1) == GST_VALUE_EQUAL);
       
  1424   g_value_unset (&dest);
       
  1425 
       
  1426   /* same values, yields empty set */
       
  1427   ret = gst_value_subtract (&dest, &src1, &src1);
       
  1428   fail_unless (ret == FALSE);
       
  1429   g_value_unset (&src1);
       
  1430   g_value_unset (&src2);
       
  1431 
       
  1432   /*  double <-> double_range
       
  1433    */
       
  1434 
       
  1435   /* would yield an empty set */
       
  1436   g_value_init (&src1, G_TYPE_DOUBLE);
       
  1437   g_value_set_double (&src1, 10.0);
       
  1438   g_value_init (&src2, GST_TYPE_DOUBLE_RANGE);
       
  1439   gst_value_set_double_range (&src2, 0.0, 20.0);
       
  1440   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1441   fail_unless (ret == FALSE);
       
  1442 
       
  1443   /* and the other way around, we cannot create open ranges
       
  1444    * so the result is the range again */
       
  1445   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1446   fail_unless (ret == TRUE);
       
  1447   fail_unless (GST_VALUE_HOLDS_DOUBLE_RANGE (&dest) == TRUE);
       
  1448   fail_unless (gst_value_get_double_range_min (&dest) == 0.0);
       
  1449   fail_unless (gst_value_get_double_range_max (&dest) == 20.0);
       
  1450   g_value_unset (&dest);
       
  1451   g_value_unset (&src1);
       
  1452   g_value_unset (&src2);
       
  1453 
       
  1454   /* border case 1, empty set */
       
  1455   g_value_init (&src1, G_TYPE_DOUBLE);
       
  1456   g_value_set_double (&src1, 10.0);
       
  1457   g_value_init (&src2, GST_TYPE_DOUBLE_RANGE);
       
  1458   gst_value_set_double_range (&src2, 10.0, 20.0);
       
  1459   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1460   fail_unless (ret == FALSE);
       
  1461 
       
  1462   /* and the other way around, should keep same range as
       
  1463    * we don't have open ranges. */
       
  1464   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1465   fail_unless (ret == TRUE);
       
  1466   fail_unless (GST_VALUE_HOLDS_DOUBLE_RANGE (&dest) == TRUE);
       
  1467   fail_unless (gst_value_get_double_range_min (&dest) == 10.0);
       
  1468   fail_unless (gst_value_get_double_range_max (&dest) == 20.0);
       
  1469   g_value_unset (&dest);
       
  1470   g_value_unset (&src1);
       
  1471   g_value_unset (&src2);
       
  1472 
       
  1473   /* border case 2, empty set */
       
  1474   g_value_init (&src1, G_TYPE_DOUBLE);
       
  1475   g_value_set_double (&src1, 20.0);
       
  1476   g_value_init (&src2, GST_TYPE_DOUBLE_RANGE);
       
  1477   gst_value_set_double_range (&src2, 10.0, 20.0);
       
  1478   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1479   fail_unless (ret == FALSE);
       
  1480 
       
  1481   /* and the other way around, should keep same range as
       
  1482    * we don't have open ranges. */
       
  1483   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1484   fail_unless (ret == TRUE);
       
  1485   fail_unless (GST_VALUE_HOLDS_DOUBLE_RANGE (&dest) == TRUE);
       
  1486   fail_unless (gst_value_get_double_range_min (&dest) == 10.0);
       
  1487   fail_unless (gst_value_get_double_range_max (&dest) == 20.0);
       
  1488   g_value_unset (&dest);
       
  1489   g_value_unset (&src1);
       
  1490   g_value_unset (&src2);
       
  1491 
       
  1492   /* case 3, valid set */
       
  1493   g_value_init (&src1, G_TYPE_DOUBLE);
       
  1494   g_value_set_double (&src1, 0.0);
       
  1495   g_value_init (&src2, GST_TYPE_DOUBLE_RANGE);
       
  1496   gst_value_set_double_range (&src2, 10.0, 20.0);
       
  1497   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1498   fail_unless (ret == TRUE);
       
  1499   fail_unless (G_VALUE_HOLDS_DOUBLE (&dest) == TRUE);
       
  1500   fail_unless (gst_value_compare (&dest, &src1) == GST_VALUE_EQUAL);
       
  1501   g_value_unset (&dest);
       
  1502 
       
  1503   /* and the other way around, should keep the range. */
       
  1504   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1505   fail_unless (ret == TRUE);
       
  1506   fail_unless (GST_VALUE_HOLDS_DOUBLE_RANGE (&dest) == TRUE);
       
  1507   fail_unless (gst_value_get_double_range_min (&dest) == 10.0);
       
  1508   fail_unless (gst_value_get_double_range_max (&dest) == 20.0);
       
  1509   g_value_unset (&dest);
       
  1510   g_value_unset (&src1);
       
  1511   g_value_unset (&src2);
       
  1512 
       
  1513   /*  double_range <-> double_range
       
  1514    */
       
  1515 
       
  1516   /* same range, empty set */
       
  1517   g_value_init (&src1, GST_TYPE_DOUBLE_RANGE);
       
  1518   gst_value_set_double_range (&src1, 10.0, 20.0);
       
  1519   g_value_init (&src2, GST_TYPE_DOUBLE_RANGE);
       
  1520   gst_value_set_double_range (&src2, 10.0, 20.0);
       
  1521   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1522   fail_unless (ret == FALSE);
       
  1523   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1524   fail_unless (ret == FALSE);
       
  1525   g_value_unset (&src1);
       
  1526   g_value_unset (&src2);
       
  1527 
       
  1528   /* non overlapping ranges */
       
  1529   g_value_init (&src1, GST_TYPE_DOUBLE_RANGE);
       
  1530   gst_value_set_double_range (&src1, 10.0, 20.0);
       
  1531   g_value_init (&src2, GST_TYPE_DOUBLE_RANGE);
       
  1532   gst_value_set_double_range (&src2, 30.0, 40.0);
       
  1533   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1534   fail_unless (ret == TRUE);
       
  1535   fail_unless (GST_VALUE_HOLDS_DOUBLE_RANGE (&dest) == TRUE);
       
  1536   fail_unless (gst_value_get_double_range_min (&dest) == 10.0);
       
  1537   fail_unless (gst_value_get_double_range_max (&dest) == 20.0);
       
  1538   g_value_unset (&dest);
       
  1539   /* the other way */
       
  1540   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1541   fail_unless (ret == TRUE);
       
  1542   fail_unless (GST_VALUE_HOLDS_DOUBLE_RANGE (&dest) == TRUE);
       
  1543   fail_unless (gst_value_get_double_range_min (&dest) == 30.0);
       
  1544   fail_unless (gst_value_get_double_range_max (&dest) == 40.0);
       
  1545   g_value_unset (&dest);
       
  1546   g_value_unset (&src1);
       
  1547   g_value_unset (&src2);
       
  1548 
       
  1549   /* completely overlapping ranges */
       
  1550   g_value_init (&src1, GST_TYPE_DOUBLE_RANGE);
       
  1551   gst_value_set_double_range (&src1, 10.0, 20.0);
       
  1552   g_value_init (&src2, GST_TYPE_DOUBLE_RANGE);
       
  1553   gst_value_set_double_range (&src2, 10.0, 30.0);
       
  1554   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1555   fail_unless (ret == FALSE);
       
  1556   /* the other way */
       
  1557   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1558   fail_unless (ret == TRUE);
       
  1559   fail_unless (GST_VALUE_HOLDS_DOUBLE_RANGE (&dest) == TRUE);
       
  1560   fail_unless (gst_value_get_double_range_min (&dest) == 20.0);
       
  1561   fail_unless (gst_value_get_double_range_max (&dest) == 30.0);
       
  1562   g_value_unset (&dest);
       
  1563   g_value_unset (&src1);
       
  1564   g_value_unset (&src2);
       
  1565 
       
  1566   /* partially overlapping ranges */
       
  1567   g_value_init (&src1, GST_TYPE_DOUBLE_RANGE);
       
  1568   gst_value_set_double_range (&src1, 10.0, 20.0);
       
  1569   g_value_init (&src2, GST_TYPE_DOUBLE_RANGE);
       
  1570   gst_value_set_double_range (&src2, 15.0, 30.0);
       
  1571   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1572   fail_unless (ret == TRUE);
       
  1573   fail_unless (GST_VALUE_HOLDS_DOUBLE_RANGE (&dest) == TRUE);
       
  1574   fail_unless (gst_value_get_double_range_min (&dest) == 10.0);
       
  1575   fail_unless (gst_value_get_double_range_max (&dest) == 15.0);
       
  1576   g_value_unset (&dest);
       
  1577   /* the other way */
       
  1578   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1579   fail_unless (ret == TRUE);
       
  1580   fail_unless (GST_VALUE_HOLDS_DOUBLE_RANGE (&dest) == TRUE);
       
  1581   fail_unless (gst_value_get_double_range_min (&dest) == 20.0);
       
  1582   fail_unless (gst_value_get_double_range_max (&dest) == 30.0);
       
  1583   g_value_unset (&dest);
       
  1584   g_value_unset (&src1);
       
  1585   g_value_unset (&src2);
       
  1586 
       
  1587   /* create a hole { double_range, double_range } */
       
  1588   g_value_init (&src1, GST_TYPE_DOUBLE_RANGE);
       
  1589   gst_value_set_double_range (&src1, 10.0, 30.0);
       
  1590   g_value_init (&src2, GST_TYPE_DOUBLE_RANGE);
       
  1591   gst_value_set_double_range (&src2, 15.0, 20.0);
       
  1592   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1593   fail_unless (ret == TRUE);
       
  1594   fail_unless (GST_VALUE_HOLDS_LIST (&dest) == TRUE);
       
  1595   tmp = gst_value_list_get_value (&dest, 0);
       
  1596   fail_unless (GST_VALUE_HOLDS_DOUBLE_RANGE (tmp) == TRUE);
       
  1597   fail_unless (gst_value_get_double_range_min (tmp) == 10.0);
       
  1598   fail_unless (gst_value_get_double_range_max (tmp) == 15.0);
       
  1599   tmp = gst_value_list_get_value (&dest, 1);
       
  1600   fail_unless (GST_VALUE_HOLDS_DOUBLE_RANGE (tmp) == TRUE);
       
  1601   fail_unless (gst_value_get_double_range_min (tmp) == 20.0);
       
  1602   fail_unless (gst_value_get_double_range_max (tmp) == 30.0);
       
  1603   g_value_unset (&dest);
       
  1604   /* the other way */
       
  1605   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1606   fail_unless (ret == FALSE);
       
  1607   g_value_unset (&src1);
       
  1608   g_value_unset (&src2);
       
  1609   
       
  1610     std_log(LOG_FILENAME_LINE, "Test Successful");
       
  1611   create_xml(0);
       
  1612 }
       
  1613 
       
  1614 
       
  1615 /* Test set subtraction operations on fraction ranges */
       
  1616 void test_value_subtract_fraction_range()
       
  1617 {
       
  1618   GValue dest = { 0 };
       
  1619   GValue src1 = { 0 };
       
  1620   GValue src2 = { 0 };
       
  1621   GValue cmp = { 0 };
       
  1622   const GValue *tmp;
       
  1623   gboolean ret;
       
  1624   
       
  1625     xmlfile = "test_value_subtract_fraction_range";
       
  1626   std_log(LOG_FILENAME_LINE, "Test Started test_range");
       
  1627 
       
  1628 
       
  1629   /* Value for tests */
       
  1630   g_value_init (&cmp, GST_TYPE_FRACTION);
       
  1631 
       
  1632   /*  fraction <-> fraction
       
  1633    */
       
  1634   g_value_init (&src1, GST_TYPE_FRACTION);
       
  1635   gst_value_set_fraction (&src1, 10, 1);
       
  1636   g_value_init (&src2, GST_TYPE_FRACTION);
       
  1637   gst_value_set_fraction (&src2, 20, 1);
       
  1638   gst_value_set_fraction (&src1, 10, 1);
       
  1639 
       
  1640   /* subtract as in sets, result is 10 */
       
  1641   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1642   fail_unless (ret == TRUE);
       
  1643   fail_unless (gst_value_compare (&dest, &src1) == GST_VALUE_EQUAL);
       
  1644   g_value_unset (&dest);
       
  1645 
       
  1646   /* same values, yields empty set */
       
  1647   ret = gst_value_subtract (&dest, &src1, &src1);
       
  1648   fail_unless (ret == FALSE);
       
  1649   g_value_unset (&src1);
       
  1650   g_value_unset (&src2);
       
  1651 
       
  1652   /*  fraction <-> fraction_range
       
  1653    */
       
  1654 
       
  1655   /* would yield an empty set */
       
  1656   g_value_init (&src1, GST_TYPE_FRACTION);
       
  1657   gst_value_set_fraction (&src1, 10, 1);
       
  1658   g_value_init (&src2, GST_TYPE_FRACTION_RANGE);
       
  1659   gst_value_set_fraction_range_full (&src2, 0, 1, 20, 1);
       
  1660   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1661   fail_unless (ret == FALSE);
       
  1662 
       
  1663   /* and the other way around, we cannot create open ranges
       
  1664    * so the result is the range again */
       
  1665   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1666   fail_unless (ret == TRUE);
       
  1667   fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE);
       
  1668   gst_value_set_fraction (&cmp, 0, 1);
       
  1669   fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest),
       
  1670           &cmp) == GST_VALUE_EQUAL);
       
  1671   gst_value_set_fraction (&cmp, 20, 1);
       
  1672   fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest),
       
  1673           &cmp) == GST_VALUE_EQUAL);
       
  1674   g_value_unset (&dest);
       
  1675   g_value_unset (&src1);
       
  1676   g_value_unset (&src2);
       
  1677 
       
  1678   /* border case 1, empty set */
       
  1679   g_value_init (&src1, GST_TYPE_FRACTION);
       
  1680   gst_value_set_fraction (&src1, 10, 1);
       
  1681   g_value_init (&src2, GST_TYPE_FRACTION_RANGE);
       
  1682   gst_value_set_fraction_range_full (&src2, 10, 1, 20, 1);
       
  1683   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1684   fail_unless (ret == FALSE);
       
  1685 
       
  1686   /* and the other way around, should keep same range as
       
  1687    * we don't have open ranges. */
       
  1688   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1689   fail_unless (ret == TRUE);
       
  1690   fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE);
       
  1691   gst_value_set_fraction (&cmp, 10, 1);
       
  1692   fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest),
       
  1693           &cmp) == GST_VALUE_EQUAL);
       
  1694   gst_value_set_fraction (&cmp, 20, 1);
       
  1695   fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest),
       
  1696           &cmp) == GST_VALUE_EQUAL);
       
  1697   g_value_unset (&dest);
       
  1698   g_value_unset (&src1);
       
  1699   g_value_unset (&src2);
       
  1700 
       
  1701   /* case 2, valid set */
       
  1702   g_value_init (&src1, GST_TYPE_FRACTION);
       
  1703   gst_value_set_fraction (&src1, 0, 1);
       
  1704   g_value_init (&src2, GST_TYPE_FRACTION_RANGE);
       
  1705   gst_value_set_fraction_range_full (&src2, 10, 1, 20, 1);
       
  1706   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1707   fail_unless (ret == TRUE);
       
  1708   fail_unless (GST_VALUE_HOLDS_FRACTION (&dest) == TRUE);
       
  1709   fail_unless (gst_value_compare (&dest, &src1) == GST_VALUE_EQUAL);
       
  1710   g_value_unset (&dest);
       
  1711 
       
  1712   /* and the other way around, should keep the range. */
       
  1713   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1714   fail_unless (ret == TRUE);
       
  1715   fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE);
       
  1716   fail_unless (gst_value_compare (&dest, &src2) == GST_VALUE_EQUAL);
       
  1717   g_value_unset (&dest);
       
  1718   g_value_unset (&src1);
       
  1719   g_value_unset (&src2);
       
  1720 
       
  1721   /*  fraction_range <-> fraction_range
       
  1722    */
       
  1723 
       
  1724   /* same range, empty set */
       
  1725   g_value_init (&src1, GST_TYPE_FRACTION_RANGE);
       
  1726   gst_value_set_fraction_range_full (&src1, 10, 2, 20, 2);
       
  1727   g_value_init (&src2, GST_TYPE_FRACTION_RANGE);
       
  1728   gst_value_set_fraction_range_full (&src2, 10, 2, 20, 2);
       
  1729   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1730   fail_unless (ret == FALSE);
       
  1731   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1732   fail_unless (ret == FALSE);
       
  1733   g_value_unset (&src1);
       
  1734   g_value_unset (&src2);
       
  1735 
       
  1736   /* non overlapping ranges */
       
  1737   g_value_init (&src1, GST_TYPE_FRACTION_RANGE);
       
  1738   gst_value_set_fraction_range_full (&src1, 10, 2, 10, 1);
       
  1739   g_value_init (&src2, GST_TYPE_FRACTION_RANGE);
       
  1740   gst_value_set_fraction_range_full (&src2, 30, 2, 40, 2);
       
  1741   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1742   fail_unless (ret == TRUE);
       
  1743   fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE);
       
  1744   gst_value_set_fraction (&cmp, 5, 1);
       
  1745   fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest),
       
  1746           &cmp) == GST_VALUE_EQUAL);
       
  1747   gst_value_set_fraction (&cmp, 10, 1);
       
  1748   fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest),
       
  1749           &cmp) == GST_VALUE_EQUAL);
       
  1750 
       
  1751   g_value_unset (&dest);
       
  1752   /* the other way */
       
  1753   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1754   fail_unless (ret == TRUE);
       
  1755   fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE);
       
  1756   gst_value_set_fraction (&cmp, 15, 1);
       
  1757   fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest),
       
  1758           &cmp) == GST_VALUE_EQUAL);
       
  1759   gst_value_set_fraction (&cmp, 20, 1);
       
  1760   fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest),
       
  1761           &cmp) == GST_VALUE_EQUAL);
       
  1762   g_value_unset (&dest);
       
  1763   g_value_unset (&src1);
       
  1764   g_value_unset (&src2);
       
  1765 
       
  1766   /* completely overlapping ranges */
       
  1767   g_value_init (&src1, GST_TYPE_FRACTION_RANGE);
       
  1768   gst_value_set_fraction_range_full (&src1, 10, 1, 20, 1);
       
  1769   g_value_init (&src2, GST_TYPE_FRACTION_RANGE);
       
  1770   gst_value_set_fraction_range_full (&src2, 10, 1, 30, 1);
       
  1771   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1772   fail_unless (ret == FALSE);
       
  1773   /* the other way */
       
  1774   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1775   fail_unless (ret == TRUE);
       
  1776   fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE);
       
  1777   gst_value_set_fraction (&cmp, 20, 1);
       
  1778   fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest),
       
  1779           &cmp) == GST_VALUE_EQUAL);
       
  1780   gst_value_set_fraction (&cmp, 30, 1);
       
  1781   fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest),
       
  1782           &cmp) == GST_VALUE_EQUAL);
       
  1783   g_value_unset (&dest);
       
  1784   g_value_unset (&src1);
       
  1785   g_value_unset (&src2);
       
  1786 
       
  1787   /* partially overlapping ranges */
       
  1788   g_value_init (&src1, GST_TYPE_FRACTION_RANGE);
       
  1789   gst_value_set_fraction_range_full (&src1, 10, 1, 20, 1);
       
  1790   g_value_init (&src2, GST_TYPE_FRACTION_RANGE);
       
  1791   gst_value_set_fraction_range_full (&src2, 15, 1, 30, 1);
       
  1792   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1793   fail_unless (ret == TRUE);
       
  1794   fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE);
       
  1795   gst_value_set_fraction (&cmp, 10, 1);
       
  1796   fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest),
       
  1797           &cmp) == GST_VALUE_EQUAL);
       
  1798   gst_value_set_fraction (&cmp, 15, 1);
       
  1799   fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest),
       
  1800           &cmp) == GST_VALUE_EQUAL);
       
  1801   g_value_unset (&dest);
       
  1802 
       
  1803   /* the other way */
       
  1804   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1805   fail_unless (ret == TRUE);
       
  1806   fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (&dest) == TRUE);
       
  1807   gst_value_set_fraction (&cmp, 20, 1);
       
  1808   fail_unless (gst_value_compare (gst_value_get_fraction_range_min (&dest),
       
  1809           &cmp) == GST_VALUE_EQUAL);
       
  1810   gst_value_set_fraction (&cmp, 30, 1);
       
  1811   fail_unless (gst_value_compare (gst_value_get_fraction_range_max (&dest),
       
  1812           &cmp) == GST_VALUE_EQUAL);
       
  1813   g_value_unset (&dest);
       
  1814   g_value_unset (&src1);
       
  1815   g_value_unset (&src2);
       
  1816 
       
  1817   /* create a hole { double_range, double_range } */
       
  1818   g_value_init (&src1, GST_TYPE_FRACTION_RANGE);
       
  1819   gst_value_set_fraction_range_full (&src1, 10, 1, 30, 1);
       
  1820   g_value_init (&src2, GST_TYPE_FRACTION_RANGE);
       
  1821   gst_value_set_fraction_range_full (&src2, 15, 1, 20, 1);
       
  1822   ret = gst_value_subtract (&dest, &src1, &src2);
       
  1823   fail_unless (ret == TRUE);
       
  1824   fail_unless (GST_VALUE_HOLDS_LIST (&dest) == TRUE);
       
  1825   /* 1st list entry */
       
  1826   tmp = gst_value_list_get_value (&dest, 0);
       
  1827   fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (tmp) == TRUE);
       
  1828   gst_value_set_fraction (&cmp, 10, 1);
       
  1829   fail_unless (gst_value_compare (gst_value_get_fraction_range_min (tmp),
       
  1830           &cmp) == GST_VALUE_EQUAL);
       
  1831   gst_value_set_fraction (&cmp, 15, 1);
       
  1832   fail_unless (gst_value_compare (gst_value_get_fraction_range_max (tmp),
       
  1833           &cmp) == GST_VALUE_EQUAL);
       
  1834   /* 2nd list entry */
       
  1835   tmp = gst_value_list_get_value (&dest, 1);
       
  1836   fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (tmp) == TRUE);
       
  1837   gst_value_set_fraction (&cmp, 20, 1);
       
  1838   fail_unless (gst_value_compare (gst_value_get_fraction_range_min (tmp),
       
  1839           &cmp) == GST_VALUE_EQUAL);
       
  1840   gst_value_set_fraction (&cmp, 30, 1);
       
  1841   fail_unless (gst_value_compare (gst_value_get_fraction_range_max (tmp),
       
  1842           &cmp) == GST_VALUE_EQUAL);
       
  1843   g_value_unset (&dest);
       
  1844   /* the other way */
       
  1845   ret = gst_value_subtract (&dest, &src2, &src1);
       
  1846   fail_unless (ret == FALSE);
       
  1847   g_value_unset (&src1);
       
  1848   g_value_unset (&src2);
       
  1849 
       
  1850   g_value_unset (&cmp);
       
  1851   
       
  1852     std_log(LOG_FILENAME_LINE, "Test Successful");
       
  1853   create_xml(0);
       
  1854 }
       
  1855 
       
  1856 
       
  1857 /*void main(int argc,char** argv)
       
  1858 {
       
  1859 
       
  1860    gst_init(&argc,&argv);
       
  1861    	
       
  1862    test_deserialize_buffer();
       
  1863    test_serialize_buffer();
       
  1864    test_deserialize_gint();
       
  1865    test_deserialize_gint_failures();
       
  1866    test_deserialize_guint();
       
  1867    test_deserialize_guint_failures();
       
  1868    test_deserialize_gint64();
       
  1869    test_deserialize_gstfraction();
       
  1870    test_serialize_flags();
       
  1871    test_deserialize_flags();
       
  1872    test_serialize_deserialize_format_enum();
       
  1873    test_string();
       
  1874    test_deserialize_string();
       
  1875    test_value_intersect();
       
  1876    test_date();
       
  1877    test_fraction_range();
       
  1878    test_value_subtract_fraction();   
       
  1879    test_value_compare();
       
  1880    test_value_subtract_int();
       
  1881    test_value_subtract_double();
       
  1882    test_value_subtract_fraction_range();  
       
  1883    
       
  1884   
       
  1885 }*/
       
  1886 
       
  1887 
       
  1888 void (*fn[21]) (void) = {       
       
  1889         test_deserialize_buffer,
       
  1890    			test_serialize_buffer,
       
  1891    			test_deserialize_gint,
       
  1892    			test_deserialize_gint_failures,
       
  1893    			test_deserialize_guint,
       
  1894    			test_deserialize_guint_failures,
       
  1895    			test_deserialize_gint64,
       
  1896    			test_deserialize_gstfraction,
       
  1897    			test_serialize_flags,
       
  1898    			test_deserialize_flags,
       
  1899    			test_serialize_deserialize_format_enum,
       
  1900    			test_string,
       
  1901    			test_deserialize_string,
       
  1902    			test_value_intersect,
       
  1903    			test_date,
       
  1904    			test_fraction_range,
       
  1905    			test_value_subtract_fraction,  
       
  1906    			test_value_compare,
       
  1907    			test_value_subtract_int,
       
  1908    			test_value_subtract_double,
       
  1909    			test_value_subtract_fraction_range
       
  1910 };
       
  1911 
       
  1912 char *args[] = {
       
  1913         "test_deserialize_buffer",
       
  1914         "test_serialize_buffer",
       
  1915         "test_deserialize_gint",
       
  1916         "test_deserialize_gint_failures",
       
  1917         "test_deserialize_guint",
       
  1918         "test_deserialize_guint_failures",
       
  1919         "test_deserialize_gint64",
       
  1920         "test_deserialize_gstfraction",
       
  1921         "test_serialize_flags",
       
  1922         "test_deserialize_flags",
       
  1923         "test_serialize_deserialize_format_enum",
       
  1924         "test_string",
       
  1925         "test_deserialize_string",
       
  1926         "test_value_intersect",
       
  1927         "test_date",
       
  1928         "test_fraction_range",
       
  1929         "test_value_subtract_fraction",
       
  1930         "test_value_compare",
       
  1931         "test_value_subtract_int",
       
  1932         "test_value_subtract_double",
       
  1933         "test_value_subtract_fraction_range"
       
  1934 };
       
  1935 
       
  1936 
       
  1937 GST_CHECK_MAIN (gst_value);