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 +#endif + +#include + +#include + + +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; +}