| /* GStreamer unit tests for the custom printf |
| * Copyright (C) 2015 Tim-Philipp Müller <tim centricular com> |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Library General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Library General Public License for more details. |
| * |
| * You should have received a copy of the GNU Library General Public |
| * License along with this library; if not, write to the |
| * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, |
| * Boston, MA 02110-1301, USA. |
| */ |
| |
| #include <gst/check/gstcheck.h> |
| |
| #include <string.h> |
| |
| #ifdef GST_DISABLE_GST_DEBUG |
| #error "Something wrong with the build system setup" |
| #endif |
| |
| #include "gst/printf/printf.h" |
| /* |
| #include "gst/printf/printf-extension.h" |
| */ |
| |
| static char * |
| test_printf (const char *format, ...) |
| { |
| va_list varargs; |
| char *str = NULL; |
| int len; |
| |
| va_start (varargs, format); |
| len = __gst_vasprintf (&str, format, varargs); |
| va_end (varargs); |
| |
| if (len <= 0) |
| return NULL; |
| |
| GST_INFO ("[%s]", str); |
| return str; |
| } |
| |
| GST_START_TEST (printf_I32_I64) |
| { |
| guint64 v64 = 0xf1e2d3c4b5a6978f; |
| guint32 v32 = 0xf1e2d3cf; |
| guint vu = 0xf1e2d3cf; |
| gchar *str; |
| |
| /* standard int/uint */ |
| str = test_printf ("x = %x", vu); |
| fail_unless_equals_string (str, "x = f1e2d3cf"); |
| g_free (str); |
| str = test_printf ("u = %u", vu); |
| fail_unless_equals_string (str, "u = 4058174415"); |
| g_free (str); |
| str = test_printf ("d = %d", vu); |
| fail_unless_equals_string (str, "d = -236792881"); |
| g_free (str); |
| |
| /* 32 bit GLib */ |
| str = test_printf ("32-bit x value = %" G_GINT32_MODIFIER "x", v32); |
| fail_unless_equals_string (str, "32-bit x value = f1e2d3cf"); |
| g_free (str); |
| str = test_printf ("32-bit u value = %" G_GUINT32_FORMAT, v32); |
| fail_unless_equals_string (str, "32-bit u value = 4058174415"); |
| g_free (str); |
| str = test_printf ("32-bit d value = %" G_GINT32_FORMAT, v32); |
| fail_unless_equals_string (str, "32-bit d value = -236792881"); |
| g_free (str); |
| |
| /* 64 bit Glib */ |
| str = test_printf ("64-bit x value = %" G_GINT64_MODIFIER "x", v64); |
| fail_unless_equals_string (str, "64-bit x value = f1e2d3c4b5a6978f"); |
| g_free (str); |
| str = test_printf ("64-bit u value = %" G_GUINT64_FORMAT, v64); |
| fail_unless_equals_string (str, "64-bit u value = 17429726349691885455"); |
| g_free (str); |
| str = test_printf ("64-bit d value = %" G_GINT64_FORMAT, v64); |
| fail_unless_equals_string (str, "64-bit d value = -1017017724017666161"); |
| g_free (str); |
| |
| /* 32 bit Windows */ |
| str = test_printf ("I32x value = %I32x", v32); |
| fail_unless_equals_string (str, "I32x value = f1e2d3cf"); |
| g_free (str); |
| str = test_printf ("I32u value = %I32u", v32); |
| fail_unless_equals_string (str, "I32u value = 4058174415"); |
| g_free (str); |
| str = test_printf ("I32d value = %I32d", v32); |
| fail_unless_equals_string (str, "I32d value = -236792881"); |
| g_free (str); |
| |
| /* needs testing first */ |
| #if 0 |
| #ifdef G_OS_WIN32 |
| /* 64 bit Windows */ |
| str = test_printf ("I64x value = %I64x", v64); |
| fail_unless_equals_string (str, "I64x value = f1e2d3c4b5a6978f"); |
| g_free (str); |
| str = test_printf ("I64u value = %I64u", v64); |
| fail_unless_equals_string (str, "I64u value = 17429726349691885455"); |
| g_free (str); |
| str = test_printf ("I64d value = %I64d", v64); |
| fail_unless_equals_string (str, "I64d value = -1017017724017666161"); |
| g_free (str); |
| #endif |
| #endif |
| } |
| |
| GST_END_TEST; |
| |
| GST_START_TEST (printf_percent) |
| { |
| gchar *str; |
| |
| /* standard int/uint */ |
| str = test_printf ("%u%%", 99); |
| fail_unless_equals_string (str, "99%"); |
| g_free (str); |
| } |
| |
| GST_END_TEST; |
| |
| static Suite * |
| gst_printf_suite (void) |
| { |
| Suite *s = suite_create ("GstPrintf"); |
| TCase *tc_chain = tcase_create ("gstprintf"); |
| |
| tcase_set_timeout (tc_chain, 30); |
| |
| suite_add_tcase (s, tc_chain); |
| tcase_add_test (tc_chain, printf_I32_I64); |
| tcase_add_test (tc_chain, printf_percent); |
| |
| return s; |
| } |
| |
| GST_CHECK_MAIN (gst_printf); |