1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-11 14:21:10 +02:00
guile/test-suite/standalone
Andy Wingo 8399e7af51 Generic port facility provides buffering uniformly
* libguile/ports.h (struct scm_t_port_buffer): New data type.
  (struct scm_t_port): Refactor to use port buffers instead of
  implementation-managed read and write pointers.  Add "read_buffering"
  member.
  (SCM_INITIAL_PUTBACK_BUF_SIZE, SCM_READ_BUFFER_EMPTY_P): Remove.
  (scm_t_ptob_descriptor): Rename "fill_input" function to "read", and
  take a port buffer, returning void.  Likewise "write" takes a port
  buffer and returns void.  Remove "end_input"; instead if there is
  buffered input and rw_random is true, then there must be a seek
  function, so just seek back if needed.  Remove "flush"; instead all
  calls to the "write" function implicitly include a "flush", since the
  buffering happens in the generic port code now.  Remove "setvbuf", but
  add "get_natural_buffer_sizes"; instead the generic port code can
  buffer any port.
  (scm_make_port_type): Adapt to read and write prototype changes.
  (scm_set_port_flush, scm_set_port_end_input, scm_set_port_setvbuf):
  Remove.
  (scm_slow_get_byte_or_eof_unlocked)
  (scm_slow_get_peek_or_eof_unlocked): Remove; the slow path is to call
  scm_fill_input.
  (scm_set_port_get_natural_buffer_sizes): New function.
  (scm_c_make_port_buffer): New internal function.
  (scm_port_non_buffer): Remove.  This was a function for
  implementations that is no longer needed.  Instead open with BUF0 or
  use (setvbuf port 'none).
  (scm_fill_input, scm_fill_input_unlocked): Return the filled port
  buffer.
  (scm_get_byte_or_eof_unlocked, scm_peek_byte_or_eof_unlocked): Adapt
  to changes in buffering and EOF management.
* libguile/ports.c: Adapt to port interface changes.
  (initialize_port_buffers): New function, using the port mode flags to
  set up appropriate initial buffering for all ports.
  (scm_c_make_port_with_encoding): Create port buffers here instead of
  delegating to implementations.
  (scm_close_port): Flush the port if needed instead of delegating to
  the implementation.
* libguile/filesys.c (set_element): Adapt to buffering changes.
* libguile/fports.c (fport_get_natural_buffer_sizes): New function,
  replacing scm_fport_buffer_add.
  (fport_write, fport_read): Update to let the generic ports code do the
  buffering.
  (fport_flush, fport_end_input): Remove.
  (fport_close): Don't flush in a dynwind; that's the core ports' job.
  (scm_make_fptob): Adapt.
* libguile/ioext.c (scm_redirect_port): Adapt to buffering changes.
* libguile/poll.c (scm_primitive_poll): Adapt to buffering changes.
* libguile/ports-internal.h (struct scm_port_internal): Remove
  pending_eof flag; this is now set on the read buffer.
* libguile/r6rs-ports.c (struct bytevector_input_port): New type.  The
  new buffering arrangement means that there's now an intermediate
  buffer between the bytevector and the user of the port; this could
  lead to a perf degradation, but on the other hand there are some other
  speedups enabled by the buffering refactor, so probably the memcpy
  cost is dwarfed by the cost of the other parts of the ports
  machinery.
  (make_bytevector_input_port, bytevector_input_port_read):
  (bytevector_input_port_seek, initialize_bytevector_input_ports): Adapt
  to new buffering arrangement.
  (struct custom_binary_port): Remove read buffer, as Guile handles that
  now.
  (custom_binary_input_port_setvbuf): Remove; now handled by Guile.
  (make_custom_binary_input_port, custom_binary_input_port_read)
  (initialize_custom_binary_input_ports): Adapt.
  (scm_get_bytevector_some): Adapt to new EOF management.
  (scm_t_bytevector_output_port_buffer): Hold on to the underlying port,
  so we can flush it if it's open.
  (make_bytevector_output_port, bytevector_output_port_write):
  (bytevector_output_port_seek): Adapt.
  (bytevector_output_port_procedure): Flush the port as appropriate, so
  that we get all the bytes.
  (make_custom_binary_output_port, custom_binary_output_port_write):
  Adapt.
  (make_transcoded_port): Don't muck with buffering.
  (transcoded_port_write): Simply forward the write to the underlying
  port.
  (transcoded_port_read): Likewise.
  (transcoded_port_close): No need to flush.
  (initialize_transcoded_ports): Adapt.
* libguile/read.c (scm_i_scan_for_encoding): Adapt to buffering
  changes.
* libguile/rw.c (scm_write_string_partial): Adapt to buffering changes.
* libguile/strports.c: Adapt to the fact that we don't manage the
  buffer.  Probably room for speed improvements here...
* libguile/vports.c (soft_port_get_natural_buffer_sizes): New function.
  Adapt the rest of the file for the new buffering regime.
* test-suite/tests/r6rs-ports.test ("8.2.10 Output ports"): Custom
  binary output ports need to be flushed before you can rely on the
  write! procedure having been called.  Add necessary flush-port
  invocations.
  ("8.2.6  Input and output ports"): Transcoded ports now have an
  internal buffer by default.  This test checks that the characters are
  transcoded one at a time, so to do that, call setvbuf on the
  transcoded port to remove the buffer.
* test-suite/tests/web-client.test (run-with-http-transcript): Fix for
  different flushing regime on soft ports.  (The vestigial flush
  procedure is now called after each write, which is not what the test
  was expecting.)
* test-suite/standalone/test-scm-c-read.c: Update for changes to the C
  interface for defining port types.
* doc/ref/api-io.texi (Ports): Update to discuss buffering in a generic
  way, and to remove a hand-wavey paragraph describing string ports as
  "interesting and powerful".
  (Reading, Writing): Remove placeholder comments.  Document
  `scm_lfwrite'.
  (Buffering): New section.
  (File Ports): Link to buffering.
  (I/O Extensions): Join subnodes into parent and describe new API,
  including buffering API.
* doc/ref/posix.texi (Ports and File Descriptors): Link to buffering.
  Remove unread-char etc, as they are documented elsewhere.
  (Pipes, Network Sockets and Communication): Link to buffering.
2016-04-06 19:21:44 +02:00
..
.gitignore Start rewriting SRFI-1 in Scheme. 2010-07-21 01:07:56 +02:00
Makefile.am Merge branch 'stable-2.0' 2014-09-30 03:50:47 -04:00
README allow building against uninstalled guile; move some things to meta/ 2009-03-27 14:03:03 -07:00
test-asmobs Fix test environment issue with ltdl from Libtool 2.2.6b. 2009-12-14 10:59:25 +01:00
test-asmobs-lib.c Fix `#ifdef HAVE_CONFIG_H' stanza in some stand-alone tests. 2011-04-25 23:59:35 +02:00
test-bad-identifiers Use `-q' when running standalone tests. 2008-07-06 23:58:38 +02:00
test-command-line-encoding Arrange to convert command-line arguments from the right encoding. 2011-12-15 01:31:23 +01:00
test-command-line-encoding2 Don't fail when locale env. vars specify a dot-less locale name. 2012-02-18 00:04:17 +01:00
test-conversion.c Fix scm_to_utf8_stringn once and for all; optimize; add tests 2012-04-04 18:58:44 -04:00
test-extensions Fix test environment issue with ltdl from Libtool 2.2.6b. 2009-12-14 10:59:25 +01:00
test-extensions-lib.c Fix `#ifdef HAVE_CONFIG_H' stanza in some stand-alone tests. 2011-04-25 23:59:35 +02:00
test-fast-slot-ref.in Change Guile license to LGPLv3+ 2009-06-17 00:22:09 +01:00
test-ffi Support calling foreign functions of 10 arguments or more. 2013-02-28 04:11:35 -05:00
test-ffi-lib.c Support calling foreign functions of 10 arguments or more. 2013-02-28 04:11:35 -05:00
test-foreign-object-c.c Add more foreign object interfaces 2014-04-28 13:03:58 +02:00
test-foreign-object-scm New foreign object facility, to replace SMOBs 2014-04-28 10:59:11 +02:00
test-guild-compile test-guild-compile: Increase sleep time before sending SIGINT. 2014-06-04 20:40:23 -04:00
test-guile-snarf Avoid non-portable tail' argument in test-guile-snarf'. 2012-01-14 22:25:59 +01:00
test-import-order out-of-tree build fix 2011-05-25 10:27:46 +02:00
test-import-order-a.scm fix define-module ordering 2011-05-21 18:29:03 +02:00
test-import-order-b.scm fix define-module ordering 2011-05-21 18:29:03 +02:00
test-import-order-c.scm fix define-module ordering 2011-05-21 18:29:03 +02:00
test-import-order-d.scm fix define-module ordering 2011-05-21 18:29:03 +02:00
test-language tests: Use shell constructs that /bin/sh on Solaris 10 can understand. 2013-04-14 15:46:56 +02:00
test-language.el Add tests for `--language'. 2013-01-26 21:49:17 +01:00
test-language.js Add tests for `--language'. 2013-01-26 21:49:17 +01:00
test-list.c Fix `#ifdef HAVE_CONFIG_H' stanza in some stand-alone tests. 2011-04-25 23:59:35 +02:00
test-loose-ends.c tests: Add #undef NDEBUG when using <assert.h>. 2014-03-20 09:43:01 +01:00
test-mb-regexp add multibyte regexp test 2011-03-17 18:53:11 +01:00
test-num2integral.c Merge branch 'stable-2.0' 2014-04-25 02:06:01 -04:00
test-out-of-memory Compile some standalone tests to bytecode 2014-04-08 10:06:40 +02:00
test-pthread-create-secondary.c tests: Skip `test-pthread-create-secondary' except on Linux-based systems. 2013-03-28 23:33:44 +01:00
test-pthread-create.c Use scm_with_guile' in test-pthread-create'. 2011-04-25 23:59:42 +02:00
test-require-extension Use `-q' when running standalone tests. 2008-07-06 23:58:38 +02:00
test-round.c tests: Add #undef NDEBUG when using <assert.h>. 2014-03-20 09:43:01 +01:00
test-scm-c-bind-keyword-arguments.c tests: Add #undef NDEBUG when using <assert.h>. 2014-03-20 09:43:01 +01:00
test-scm-c-read.c Generic port facility provides buffering uniformly 2016-04-06 19:21:44 +02:00
test-scm-spawn-thread.c Fix loose typing in `test-scm-spawn-thread.c'. 2012-01-09 21:23:46 +01:00
test-scm-take-locale-symbol.c Change Guile license to LGPLv3+ 2009-06-17 00:22:09 +01:00
test-scm-take-u8vector.c Add test case for `scm_take_u8vector ()'. 2009-09-03 00:57:24 +02:00
test-scm-to-latin1-string.c fix scm_to_latin1_stringn for substrings 2011-09-10 11:38:25 -07:00
test-scm-values.c tests: Add #undef NDEBUG when using <assert.h>. 2014-03-20 09:43:01 +01:00
test-scm-with-guile.c Change Guile license to LGPLv3+ 2009-06-17 00:22:09 +01:00
test-smob-mark.c tests: Add #undef NDEBUG when using <assert.h>. 2014-03-20 09:43:01 +01:00
test-srfi-4.c tests: Add #undef NDEBUG when using <assert.h>. 2014-03-20 09:43:01 +01:00
test-stack-overflow Compile some standalone tests to bytecode 2014-04-08 10:06:40 +02:00
test-system-cmds tests: Use double quotes around shell arguments, for Windows. 2013-06-16 16:39:14 +02:00
test-unwind.c tests: Don't rely on $TMPDIR and /tmp on Windows. 2013-06-16 16:42:01 +02:00
test-use-srfi.in Change Guile license to LGPLv3+ 2009-06-17 00:22:09 +01:00
test-with-guile-module.c Fix `#ifdef HAVE_CONFIG_H' stanza in some stand-alone tests. 2011-04-25 23:59:35 +02:00

-*-text-*-

These tests use the standard automake TESTS mechanism.  Tests should
be listed in TESTS in Makefile.am, and should exit with 0 on success,
non-zero on failure, and 77 if the result should be ignored.  See the
automake info pages for more information.

If you want to use a scheme script, prefix it as follows:

  #!/bin/sh
  exec guile -s "$0" "$@"
  !#

Makefile.am will arrange for all tests (scripts or executables) to be
run under uninstalled-env so that the PATH, LD_LIBRARY_PATH, and
GUILE_LOAD_PATH will be augmented appropriately.

The Makefile.am has an example of creating a shared library to be used
from a test scheme script as well.

You can also create standalone executables that include your own code,
are linked against libguile, and that run a given test script (or
scripts).  One way to do this is to create the binary, make sure it
calls scm_shell (argc, argv) as its final action, and put this bit at
the top of your test script:

  #!./my-test-binary -s
  !#