[vlc-devel] commit: Test cases for timers ( Rémi Denis-Courmont )

git version control git at videolan.org
Sat Aug 1 18:55:48 CEST 2009


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Aug  1 19:55:40 2009 +0300| [8422667fd3e5e6d2746b2cb4d34717f4a04197f2] | committer: Rémi Denis-Courmont 

Test cases for timers

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8422667fd3e5e6d2746b2cb4d34717f4a04197f2
---

 src/test/Makefile.am |    2 +
 src/test/timer.c     |   84 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 86 insertions(+), 0 deletions(-)

diff --git a/src/test/Makefile.am b/src/test/Makefile.am
index 679b212..57caeae 100644
--- a/src/test/Makefile.am
+++ b/src/test/Makefile.am
@@ -5,6 +5,7 @@ check_PROGRAMS = \
 	test_dictionary \
 	test_i18n_atof \
 	test_keys \
+	test_timer \
 	test_url \
 	test_utf8 \
 	test_xmlent \
@@ -20,6 +21,7 @@ test_block_SOURCES = test_block.c ../misc/block.c
 test_dictionary_SOURCES = dictionary.c
 test_i18n_atof_SOURCES = i18n_atof.c
 test_keys_SOURCES = keys.c
+test_timer_SOURCES = timer.c
 test_url_SOURCES = url.c
 test_utf8_SOURCES = utf8.c
 test_xmlent_SOURCES = xmlent.c
diff --git a/src/test/timer.c b/src/test/timer.c
new file mode 100644
index 0000000..189fada
--- /dev/null
+++ b/src/test/timer.c
@@ -0,0 +1,84 @@
+/*****************************************************************************
+ * timer.c: Test for timer API
+ *****************************************************************************
+ * Copyright (C) 2009 Rémi Denis-Courmont
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#undef NDEBUG
+#include <assert.h>
+
+struct timer_data
+{
+    vlc_timer_t timer;
+    vlc_mutex_t lock;
+    unsigned count;
+};
+
+static void callback (void *ptr)
+{
+    struct timer_data *data = ptr;
+
+    vlc_mutex_lock (&data->lock);
+    data->count += 1 + vlc_timer_getoverrun (&data->timer);
+    vlc_mutex_unlock (&data->lock);
+}
+
+
+int main (void)
+{
+    struct timer_data data;
+    int val;
+
+    vlc_mutex_init (&data.lock);
+    data.count = 0;
+
+    val = vlc_timer_create (&data.timer, callback, &data);
+    assert (val == 0);
+
+    /* Relative timer */
+    vlc_timer_schedule (&data.timer, false, 1, CLOCK_FREQ / 10);
+    msleep (CLOCK_FREQ);
+    vlc_mutex_lock (&data.lock);
+    printf ("Count = %u\n", data.count);
+    assert (data.count >= 10);
+    data.count = 0;
+    vlc_mutex_unlock (&data.lock);
+    vlc_timer_schedule (&data.timer, false, 0, 0);
+
+    /* Absolute timer */
+    mtime_t now = mdate ();
+
+    vlc_timer_schedule (&data.timer, true, now, CLOCK_FREQ / 10);
+    msleep (CLOCK_FREQ);
+    vlc_mutex_lock (&data.lock);
+    printf ("Count = %u\n", data.count);
+    assert (data.count >= 10);
+    vlc_mutex_unlock (&data.lock);
+
+    vlc_timer_destroy (&data.timer);
+    vlc_mutex_destroy (&data.lock);
+
+    return 0;
+}




More information about the vlc-devel mailing list