summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2009-09-03 00:57:24 +0200
committerLudovic Courtès <ludo@gnu.org>2009-09-03 00:57:24 +0200
commitf538a0709aa89fe8cc3a25996d447f35ef05fab1 (patch)
treee1f9a04094b8f2f38317ca9f44251773ccab5722
parentd7e7a02a6251c8ed4f76933d9d30baeee3f599c0 (diff)
downloadguile-f538a0709aa89fe8cc3a25996d447f35ef05fab1.tar.gz
Add test case for `scm_take_u8vector ()'.
This is a followup to commit d7e7a02a6251c8ed4f76933d9d30baeee3f599c0 ("Fix leaky behavior of `scm_take_TAGvector ()'.") and a reminder that the uniform vector implementation can't do away with the cell->buffer indirection. * test-suite/standalone/Makefile.am (test_scm_take_u8vector_SOURCES, test_scm_take_u8vector_CFLAGS, test_scm_take_u8vector_LDADD): New. (check_PROGRAMS, TESTS): Add `test-scm-take-u8vector'. * test-suite/standalone/test-scm-take-u8vector.c: New file.
-rw-r--r--test-suite/standalone/.gitignore1
-rw-r--r--test-suite/standalone/Makefile.am7
-rw-r--r--test-suite/standalone/test-scm-take-u8vector.c65
3 files changed, 73 insertions, 0 deletions
diff --git a/test-suite/standalone/.gitignore b/test-suite/standalone/.gitignore
index 9dadde6e2..194393699 100644
--- a/test-suite/standalone/.gitignore
+++ b/test-suite/standalone/.gitignore
@@ -10,3 +10,4 @@
/test-scm-c-read
/test-fast-slot-ref
/test-scm-take-locale-symbol
+/test-scm-take-u8vector
diff --git a/test-suite/standalone/Makefile.am b/test-suite/standalone/Makefile.am
index 488eb1453..1b0d9d600 100644
--- a/test-suite/standalone/Makefile.am
+++ b/test-suite/standalone/Makefile.am
@@ -129,6 +129,13 @@ test_scm_take_locale_symbol_LDADD = ${top_builddir}/libguile/libguile.la
check_PROGRAMS += test-scm-take-locale-symbol
TESTS += test-scm-take-locale-symbol
+# test-scm-take-u8vector
+test_scm_take_u8vector_SOURCES = test-scm-take-u8vector.c
+test_scm_take_u8vector_CFLAGS = ${test_cflags}
+test_scm_take_u8vector_LDADD = ${top_builddir}/libguile/libguile.la
+check_PROGRAMS += test-scm-take-u8vector
+TESTS += test-scm-take-u8vector
+
# test-extensions
noinst_LTLIBRARIES += libtest-extensions.la
libtest_extensions_la_SOURCES = test-extensions-lib.c
diff --git a/test-suite/standalone/test-scm-take-u8vector.c b/test-suite/standalone/test-scm-take-u8vector.c
new file mode 100644
index 000000000..fff3af47f
--- /dev/null
+++ b/test-suite/standalone/test-scm-take-u8vector.c
@@ -0,0 +1,65 @@
+/* Copyright (C) 2009 Free Software Foundation, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 3 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+/* Make sure `scm_take_u8vector ()' returns a u8vector that actually uses the
+ provided storage. */
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <libguile.h>
+
+#include <stdlib.h>
+
+
+static void *
+do_test (void *result)
+{
+#define LEN 123
+ SCM u8v;
+ scm_t_uint8 *data;
+ scm_t_array_handle handle;
+
+ data = scm_malloc (LEN);
+ u8v = scm_take_u8vector (data, LEN);
+
+ scm_array_get_handle (u8v, &handle);
+
+ if (scm_array_handle_u8_writable_elements (&handle) == data
+ && scm_array_handle_u8_elements (&handle) == data)
+ * (int *) result = EXIT_SUCCESS;
+ else
+ * (int *) result = EXIT_FAILURE;
+
+ scm_array_handle_release (&handle);
+
+ return NULL;
+#undef LEN
+}
+
+int
+main (int argc, char *argv[])
+{
+ int result;
+
+ scm_with_guile (do_test, &result);
+
+ return result;
+}