changeset 16050:fc3cb570ac46 classdef

periodic merge of default to classdef.
author Michael Goffioul <michael.goffioul@gmail.com>
date Mon, 11 Feb 2013 15:45:26 -0500
parents ebd2259c5df1 (current diff) a1e67cf915ba (diff)
children 0259254a3ccc
files libgui/languages/generic.qm libgui/languages/generic.ts libinterp/Makefile.am test/Makefile.am test/bc_overloads_expected test/bug-35448/test_bug_35448.m test/bug-36025/test_bug_36025.m test/build_bc_overload_tests.sh test/build_sparse_tests.sh test/class-concat/test_class_concat.m test/classdef/classdef.tst test/classdef/module.mk test/classdef/test_classdef.m test/classes/classes.tst test/classes/module.mk test/classes/test_classes.m test/ctor-vs-method/test_ctor_vs_method.m test/fcn-handle-derived-resolution/test_fcn_handle_derived_resolution.m test/nest/test_nest.m test/test_args.m test/test_bug_31371.m test/test_diag_perm.m test/test_error.m test/test_eval-catch.m test/test_for.m test/test_func.m test/test_global.m test/test_if.m test/test_index.m test/test_io.m test/test_line_continue.m test/test_logical_index.m test/test_null_assign.m test/test_parser.m test/test_prefer.m test/test_range.m test/test_recursion.m test/test_return.m test/test_slice.m test/test_struct.m test/test_switch.m test/test_system.m test/test_transpose.m test/test_try.m test/test_unwind.m test/test_while.m
diffstat 193 files changed, 9873 insertions(+), 8307 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsubstate	Mon Feb 11 15:24:56 2013 -0500
+++ b/.hgsubstate	Mon Feb 11 15:45:26 2013 -0500
@@ -1,1 +1,1 @@
-e2f98cc246bdb12f2d35366042d4aab61c3d54fe gnulib-hg
+0eef0a2a05e22ac8ef2aad06dda200f7def83396 gnulib-hg
--- a/.hgtags	Mon Feb 11 15:24:56 2013 -0500
+++ b/.hgtags	Mon Feb 11 15:45:26 2013 -0500
@@ -71,3 +71,6 @@
 2e8eb9ac43a5f8cfaf0423814a312ed47cb80485 rc-3-6-4-0
 df1aceb8f0bc6b5b5062907931cc663467f57d93 ss-3-7-1
 858cbf6fc2ec1c232f5cf1d75dc344439b39a89c rc-3-6-4-1
+faefa1bea8ddae3cab170afdeab68d3d15c4e623 ss-3-7-2
+0000000000000000000000000000000000000000 ss-3-7-2
+23a7661e529ae9bfc91693618f8c314c31f695ca ss-3-7-2
--- a/Makefile.am	Mon Feb 11 15:24:56 2013 -0500
+++ b/Makefile.am	Mon Feb 11 15:45:26 2013 -0500
@@ -39,6 +39,7 @@
   README \
   bootstrap \
   bootstrap.conf \
+  build-aux/find-files-with-tests.sh \
   build-aux/mk-opts.pl \
   build-aux/mkinstalldirs \
   build-aux/move-if-change \
--- a/bootstrap.conf	Mon Feb 11 15:24:56 2013 -0500
+++ b/bootstrap.conf	Mon Feb 11 15:45:26 2013 -0500
@@ -44,6 +44,7 @@
   gettimeofday
   glob
   isatty
+  largefile
   link
   lstat
   malloc-gnu
--- a/build-aux/common.mk	Mon Feb 11 15:24:56 2013 -0500
+++ b/build-aux/common.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -156,21 +156,14 @@
 
 NO_UNDEFINED_LDFLAG = @NO_UNDEFINED_LDFLAG@
 
+MKOCTFILE_AR = @MKOCTFILE_AR@
 MKOCTFILE_CC = @MKOCTFILE_CC@
 MKOCTFILE_CXX = @MKOCTFILE_CXX@
 MKOCTFILE_DL_LD = @MKOCTFILE_DL_LD@
 MKOCTFILE_DL_LDFLAGS = @MKOCTFILE_DL_LDFLAGS@
 MKOCTFILE_F77 = @MKOCTFILE_F77@
 MKOCTFILE_LD_CXX = @MKOCTFILE_LD_CXX@
-
-# List of libraries and their special compilation flags
-
-MKOCTFILE_CC = @MKOCTFILE_CC@
-MKOCTFILE_CXX = @MKOCTFILE_CXX@
-MKOCTFILE_DL_LD = @MKOCTFILE_DL_LD@
-MKOCTFILE_DL_LDFLAGS = @MKOCTFILE_DL_LDFLAGS@
-MKOCTFILE_F77 = @MKOCTFILE_F77@
-MKOCTFILE_LD_CXX = @MKOCTFILE_LD_CXX@
+MKOCTFILE_RANLIB = @MKOCTFILE_RANLIB@
 
 # List of libraries and their special compilation flags
 
@@ -349,6 +342,9 @@
 # Where to install and expect extra files like NEWS and doc-cache.
 octetcdir = @octetcdir@
 
+# Where to install and expect the language files for the gui.
+octlocaledir = @octlocaledir@
+
 # Where to install and expect libraries like liboctave.a, liboctinterp.a,
 # and other architecture-dependent data.
 octlibdir = @octlibdir@
@@ -367,6 +363,9 @@
 man1dir = @man1dir@
 man1ext = @man1ext@
 
+# Where to install test files.
+octtestsdir = @octtestsdir@
+
 # The full path to the default doc cache file.
 doc_cache_file = @doc_cache_file@
 
@@ -581,12 +580,14 @@
   -e "s|%OCTAVE_CONF_MAGICK_CPPFLAGS%|\"${MAGICK_CPPFLAGS}\"|" \
   -e "s|%OCTAVE_CONF_MAGICK_LDFLAGS%|\"${MAGICK_LDFLAGS}\"|" \
   -e "s|%OCTAVE_CONF_MAGICK_LIBS%|\"${MAGICK_LIBS}\"|" \
+  -e 's|%OCTAVE_CONF_MKOCTFILE_AR%|\"${MKOCTFILE_AR}\"|' \
   -e 's|%OCTAVE_CONF_MKOCTFILE_CC%|\"${MKOCTFILE_CC}\"|' \
   -e 's|%OCTAVE_CONF_MKOCTFILE_CXX%|\"${MKOCTFILE_CXX}\"|' \
   -e 's|%OCTAVE_CONF_MKOCTFILE_DL_LD%|\"${MKOCTFILE_DL_LD}\"|' \
   -e 's|%OCTAVE_CONF_MKOCTFILE_DL_LDFLAGS%|\"${MKOCTFILE_DL_LDFLAGS}\"|' \
   -e 's|%OCTAVE_CONF_MKOCTFILE_F77%|\"${MKOCTFILE_F77}\"|' \
   -e 's|%OCTAVE_CONF_MKOCTFILE_LD_CXX%|\"${MKOCTFILE_LD_CXX}\"|' \
+  -e 's|%OCTAVE_CONF_MKOCTFILE_RANLIB%|\"${MKOCTFILE_RANLIB}\"|' \
   -e "s|%OCTAVE_CONF_OCTAVE_LINK_DEPS%|\"${OCTAVE_LINK_DEPS}\"|" \
   -e "s|%OCTAVE_CONF_OCTAVE_LINK_OPTS%|\"${OCTAVE_LINK_OPTS}\"|" \
   -e "s|%OCTAVE_CONF_OCTINCLUDEDIR%|\"${octincludedir}\"|" \
@@ -678,6 +679,8 @@
   -e "s|%OCTAVE_OCTETCDIR%|\"${octetcdir}\"|" \
   -e "s|%OCTAVE_OCTINCLUDEDIR%|\"${octincludedir}\"|" \
   -e "s|%OCTAVE_OCTLIBDIR%|\"${octlibdir}\"|" \
+  -e "s|%OCTAVE_OCTLOCALEDIR%|\"${octlocaledir}\"|" \
+  -e "s|%OCTAVE_OCTTESTSDIR%|\"${octtestsdir}\"|" \
   -e "s|%OCTAVE_STARTUPFILEDIR%|\"${startupfiledir}\"|" \
   -e "s|%OCTAVE_PREFIX%|\"${prefix}\"|" \
   -e "s|%OCTAVE_API_VERSION%|\"${api_version}\"|" \
@@ -726,3 +729,17 @@
 rm -f $(DESTDIR)$(fcnfiledir)/$(script_sub_dir)/PKG_ADD
 -rmdir $(DESTDIR)$(fcnfiledir)/$(script_sub_dir)
 endef
+
+define test-file-commands
+( echo "## DO NOT EDIT!  Generated automatically from $(<F) by Make."; grep '^%!' $< ) > $@-t
+mv $@-t $@
+endef
+
+%.cc-tst : %.cc
+	$(test-file-commands)
+
+%.yy-tst : %.yy
+	$(test-file-commands)
+
+%.ll-tst : %.ll
+	$(test-file-commands)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build-aux/find-files-with-tests.sh	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,19 @@
+#! /bin/sh
+
+set -e
+SED=${SED:-sed}
+
+srcdir="$1"
+shift
+
+for arg
+do
+  if [ -f "$arg" ]; then
+    file="$arg"
+  else
+    file="$srcdir/$arg"
+  fi
+  if [ "`grep -l '^%!' $file`" ]; then
+    echo "$file" | $SED "s,\\$srcdir/,,";
+  fi
+done
--- a/configure.ac	Mon Feb 11 15:24:56 2013 -0500
+++ b/configure.ac	Mon Feb 11 15:45:26 2013 -0500
@@ -19,14 +19,14 @@
 ### <http://www.gnu.org/licenses/>.
 
 AC_PREREQ([2.62])
-AC_INIT([GNU Octave], [3.7.1+], [http://octave.org/bugs.html], [octave])
+AC_INIT([GNU Octave], [3.7.2+], [http://octave.org/bugs.html], [octave])
 
 dnl PACKAGE_VERSION is set by the AC_INIT VERSION arg
 OCTAVE_VERSION="$PACKAGE_VERSION"
 OCTAVE_API_VERSION_NUMBER="48"
 OCTAVE_API_VERSION="api-v$OCTAVE_API_VERSION_NUMBER+"
-OCTAVE_RELEASE_DATE="2013-01-02"
-OCTAVE_COPYRIGHT="Copyright (C) 2012 John W. Eaton and others."
+OCTAVE_RELEASE_DATE="2013-02-09"
+OCTAVE_COPYRIGHT="Copyright (C) 2013 John W. Eaton and others."
 AC_SUBST(OCTAVE_VERSION)
 AC_SUBST(OCTAVE_API_VERSION_NUMBER)
 AC_SUBST(OCTAVE_API_VERSION)
@@ -80,7 +80,9 @@
   '$(datadir)/octave/site/$(api_version)/m')
 OCTAVE_SET_DEFAULT([localverfcnfiledir], '$(datadir)/octave/$(version)/site/m')
 OCTAVE_SET_DEFAULT([octetcdir], '$(datadir)/octave/$(version)/etc')
+OCTAVE_SET_DEFAULT([octlocaledir], '$(datadir)/octave/$(version)/locale')
 OCTAVE_SET_DEFAULT([doc_cache_file], '$(octetcdir)/doc-cache')
+OCTAVE_SET_DEFAULT([octtestsdir], '$(octetcdir)/tests')
 OCTAVE_SET_DEFAULT([texi_macros_file], '$(octetcdir)/macros.texi')
 OCTAVE_SET_DEFAULT([imagedir], '$(datadir)/octave/$(version)/imagelib')
 OCTAVE_SET_DEFAULT([man1dir], '$(mandir)/man1')
@@ -812,6 +814,22 @@
   [FFTW3F library not found.  The slower FFTPACK library will be used instead.],
   [fftw3.h], [fftwf_plan_dft_1d])
 
+## Check for the multithreaded FFTW library.
+## Fallback to singlethreaded if not found or disabled
+build_fftw_threads=true
+AC_ARG_ENABLE([fftw-threads],
+  [AS_HELP_STRING([--disable-fftw-threads],
+    [disable Multi-threaded FFTW])],
+  [if test "$enableval" = no; then
+     build_fftw_threads=false
+   fi],
+  [])
+
+if test $build_fftw_threads = true; then
+  OCTAVE_CHECK_FFTW_THREADS(fftw3, fftw_plan_with_nthreads)
+  OCTAVE_CHECK_FFTW_THREADS(fftw3f, fftwf_plan_with_nthreads)
+fi
+
 AM_CONDITIONAL([AMCOND_HAVE_FFTW],
   [test -n "$FFTW3_LIBS" && test -n "$FFTW3F_LIBS"])
 
@@ -1277,7 +1295,7 @@
 
 OCTAVE_CHECK_LIB(camd, CAMD,
   [CAMD library not found.  This will result in some lack of functionality for sparse matrices.],
-  [suitesparse/camd.h ufsparse/camd.h amd/camd.h camd.h],
+  [suitesparse/camd.h ufsparse/camd.h camd/camd.h camd.h],
   [camd_postorder],
   [], [don't use CAMD library, disable some sparse matrix functionality])
 
@@ -1285,7 +1303,7 @@
 
 OCTAVE_CHECK_LIB(colamd, COLAMD,
   [COLAMD library not found.  This will result in some lack of functionality for sparse matrices.],
-  [suitesparse/colamd.h ufsparse/colamd.h amd/colamd.h colamd.h],
+  [suitesparse/colamd.h ufsparse/colamd.h colamd/colamd.h colamd.h],
   [colamd],
   [], [don't use COLAMD library, disable some sparse matrix functionality])
 
@@ -1293,7 +1311,7 @@
 
 OCTAVE_CHECK_LIB(ccolamd, CCOLAMD,
   [CCOLAMD library not found.  This will result in some lack of functionality for sparse matrices.],
-  [suitesparse/ccolamd.h ufsparse/ccolamd.h amd/ccolamd.h ccolamd.h],
+  [suitesparse/ccolamd.h ufsparse/ccolamd.h ccolamd/ccolamd.h ccolamd.h],
   [ccolamd],
   [], [don't use CCOLAMD library, disable some sparse matrix functionality])
 
@@ -1314,7 +1332,7 @@
 
 OCTAVE_CHECK_LIB(cxsparse, CXSparse,
   [CXSparse library not found.  This will result in some lack of functionality for sparse matrices.],
-  [suitesparse/cs.h ufsparse/cs.h amd/cs.h cs.h],
+  [suitesparse/cs.h ufsparse/cs.h cxsparse/cs.h cs.h],
   [cs_di_sqr],
   [C++], [don't use CXSparse library, disable some sparse matrix functionality])
 
@@ -1814,33 +1832,38 @@
 
 if test "$cross_compiling" = yes && test -n "$ac_tool_prefix"; then
   CROSS_TOOL_PREFIX="$ac_tool_prefix"
+  MKOCTFILE_AR='$(shell echo $(AR) | sed "s,$(CROSS_TOOL_PREFIX),,")'
   MKOCTFILE_CC='$(shell echo $(CC) | sed "s,$(CROSS_TOOL_PREFIX),,")'
   MKOCTFILE_CXX='$(shell echo $(CXX) | sed "s,$(CROSS_TOOL_PREFIX),,")'
   MKOCTFILE_DL_LD='$(shell echo $(DL_LD) | sed "s,$(CROSS_TOOL_PREFIX),,")'
   MKOCTFILE_F77='$(shell echo $(F77) | sed "s,$(CROSS_TOOL_PREFIX),,")'
   MKOCTFILE_LD_CXX='$(shell echo $(LD_CXX) | sed "s,$(CROSS_TOOL_PREFIX),,")'
+  MKOCTFILE_RANLIB='$(shell echo $(RANLIB) | sed "s,$(CROSS_TOOL_PREFIX),,")'
 else
+  MKOCTFILE_AR="$AR"
   MKOCTFILE_CC="$CC"
   MKOCTFILE_CXX="$CXX"
   MKOCTFILE_DL_LD="$DL_LD"
   MKOCTFILE_F77="$F77"
   MKOCTFILE_LD_CXX="$LD_CXX"
+  MKOCTFILE_RANLIB="$RANLIB"
 fi
 AC_MSG_NOTICE([defining CROSS_TOOL_PREFIX to be $CROSS_TOOL_PREFIX])
+AC_MSG_NOTICE([defining MKOCTFILE_AR to be $MKOCTFILE_AR])
 AC_MSG_NOTICE([defining MKOCTFILE_CC to be $MKOCTFILE_CC])
 AC_MSG_NOTICE([defining MKOCTFILE_CXX to be $MKOCTFILE_CXX])
 AC_MSG_NOTICE([defining MKOCTFILE_DL_LD to be $MKOCTFILE_DL_LD])
 AC_MSG_NOTICE([defining MKOCTFILE_F77 to be $MKOCTFILE_F77])
 AC_MSG_NOTICE([defining MKOCTFILE_LD_CXX to be $MKOCTFILE_LD_CXX])
+AC_MSG_NOTICE([defining MKOCTFILE_RANLIB to be $MKOCTFILE_RANLIB])
 AC_SUBST(CROSS_TOOL_PREFIX)
+AC_SUBST(MKOCTFILE_AR)
 AC_SUBST(MKOCTFILE_CC)
 AC_SUBST(MKOCTFILE_CXX)
 AC_SUBST(MKOCTFILE_DL_LD)
 AC_SUBST(MKOCTFILE_F77)
 AC_SUBST(MKOCTFILE_LD_CXX)
-
-### Check for existence of various libraries
-
+AC_SUBST(MKOCTFILE_RANLIB)
 
 ### Check for existence of various libraries
 
@@ -2163,13 +2186,21 @@
 #endif
 ]])
 
-### Need to disable building documentation if gnuplot was not found,
-### unless it was already disabled previously.
-
-if test -n "$DOCDIR" && test -n "$warn_gnuplot"; then
-  DOCDIR=
-  warn_docs="building documentation disabled because gnuplot was not found; make dist will fail"
-  OCTAVE_CONFIGURE_WARNING([warn_docs])
+### Need to disable building documentation if either gnuplot or
+### makeinfo are missing.  Skip this warning if building docs was
+### disabled with a configure option.
+
+if test -n "$DOCDIR"; then
+  if test -n "$warn_gnuplot"; then
+    DOCDIR=
+    warn_docs_gnuplot="building documentation disabled because gnuplot was not found; make dist will fail"
+    OCTAVE_CONFIGURE_WARNING([warn_docs_gnuplot])
+  fi
+  if test -n "$warn_makeinfo"; then
+    DOCDIR=
+    warn_docs_makeinfo="building documentation disabled because makeinfo was not found; make dist will fail"
+    OCTAVE_CONFIGURE_WARNING([warn_docs_makeinfo])
+  fi
 fi
 AM_CONDITIONAL([AMCOND_BUILD_DOCS], [test -n "$DOCDIR"])
 
--- a/doc/interpreter/contributors.in	Mon Feb 11 15:24:56 2013 -0500
+++ b/doc/interpreter/contributors.in	Mon Feb 11 15:45:26 2013 -0500
@@ -81,6 +81,7 @@
 Steffen Groot
 Etienne Grossmann
 David Grundberg
+Kyle Guinn
 Peter Gustafson
 Kai Habel
 Patrick Häcker
--- a/doc/interpreter/mkoctfile.1	Mon Feb 11 15:24:56 2013 -0500
+++ b/doc/interpreter/mkoctfile.1	Mon Feb 11 15:45:26 2013 -0500
@@ -95,29 +95,29 @@
 Print configuration variable \fIVAR\fP.  Recognized variables are:
 .RS
 .Vb
-    ALL_CFLAGS                FFTW3F_LIBS
-    ALL_CXXFLAGS              FLIBS
-    ALL_FFLAGS                FPICFLAG
-    ALL_LDFLAGS               INCFLAGS
+    ALL_CFLAGS                FFTW3F_LDFLAGS
+    ALL_CXXFLAGS              FFTW3F_LIBS
+    ALL_FFLAGS                FLIBS
+    ALL_LDFLAGS               FPICFLAG
+    AR                        INCFLAGS
     BLAS_LIBS                 LAPACK_LIBS
     CC                        LDFLAGS
     CFLAGS                    LD_CXX
     CPICFLAG                  LD_STATIC_FLAG
     CPPFLAGS                  LFLAGS
     CXX                       LIBOCTAVE
-    CXXFLAGS                  LIBOCTINTERP    
-    CXXPICFLAG                LIBS            
-    DEPEND_EXTRA_SED_PATTERN  OCTAVE_LIBS     
+    CXXFLAGS                  LIBOCTINTERP
+    CXXPICFLAG                LIBS
+    DEPEND_EXTRA_SED_PATTERN  OCTAVE_LIBS
     DEPEND_FLAGS              OCTAVE_LINK_DEPS
-    DL_LD                     OCT_LINK_DEPS   
-    DL_LDFLAGS                RDYNAMIC_FLAG   
-    EXEEXT                    READLINE_LIBS   
-    F77                       SED             
-    F77_INTEGER_8_FLAG        XTRA_CFLAGS     
-    FFLAGS                    XTRA_CXXFLAGS   
-    FFTW3_LDFLAGS                             
-    FFTW3_LIBS                                
-    FFTW3F_LDFLAGS
+    DL_LD                     OCT_LINK_DEPS
+    DL_LDFLAGS                RANLIB
+    EXEEXT                    RDYNAMIC_FLAG
+    F77                       READLINE_LIBS
+    F77_INTEGER_8_FLAG        SED
+    FFLAGS                    XTRA_CFLAGS
+    FFTW3_LDFLAGS             XTRA_CXXFLAGS
+    FFTW3_LIBS
 .Ve
 .RE
 .TP
--- a/doc/interpreter/oop.txi	Mon Feb 11 15:24:56 2013 -0500
+++ b/doc/interpreter/oop.txi	Mon Feb 11 15:45:26 2013 -0500
@@ -656,6 +656,8 @@
 Octave types.  So in fact marking our polynomial class higher than the 
 "double" class is in fact not necessary.
 
+When faced with two objects that have the same precedence, Octave will use the
+method of the object that appears first on the list of arguments.
 
 @node Inheritance and Aggregation
 @section Inheritance and Aggregation
--- a/doc/interpreter/plot.txi	Mon Feb 11 15:24:56 2013 -0500
+++ b/doc/interpreter/plot.txi	Mon Feb 11 15:45:26 2013 -0500
@@ -136,6 +136,10 @@
 
 @DOCSTRING(hist)
 
+@DOCSTRING(stemleaf)
+
+@DOCSTRING(printd)
+
 @DOCSTRING(stairs)
 
 @DOCSTRING(stem)
--- a/etc/HACKING	Mon Feb 11 15:24:56 2013 -0500
+++ b/etc/HACKING	Mon Feb 11 15:45:26 2013 -0500
@@ -228,7 +228,7 @@
       icons          icon files that will be compiled into the
                      executable via a resource file.
 
-    qterminal        subrepository for the qterminal Qt terminal widget.
+    qterminal        Qt terminal widget
 
     languages        translation files and list of translators.
 
--- a/libgui/Makefile.am	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/Makefile.am	Mon Feb 11 15:45:26 2013 -0500
@@ -26,8 +26,16 @@
 
 octlib_LTLIBRARIES = liboctgui.la
 
-EXTRA_DIST = default-qt-settings
+locales = \
+  languages/be_BY.qm \
+  languages/de_DE.qm \
+  languages/en_US.qm \
+  languages/es_ES.qm \
+  languages/pt_BR.qm \
+  languages/ru_RU.qm \
+  languages/uk_UA.qm
 
+EXTRA_DIST = default-qt-settings $(locales)
 CLEANFILES =
 
 BUILT_SOURCES =
@@ -70,6 +78,8 @@
 
 octetc_DATA = default-qt-settings
 
+octlocale_DATA = $(locales)
+
 moc-%.cc: %.h
 	@MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(MOC_CPPFLAGS) $(liboctgui_la_CPPFLAGS) $<
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgui/languages/en_US.qm	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,1 @@
+<¸dÊÍ!¿`¡½Ý
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgui/languages/en_US.ts	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,1066 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+    <name>documentation_dock_widget</name>
+    <message>
+        <location filename="../src/documentation-dockwidget.cc" line="+34"/>
+        <source>Documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>file_editor</name>
+    <message>
+        <location filename="../src/m-editor/file-editor.cc" line="+146"/>
+        <location line="+38"/>
+        <location line="+43"/>
+        <location line="+26"/>
+        <source>Octave Editor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-106"/>
+        <source>File %1 is already open in the editor.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+38"/>
+        <source>Could not open file %1 for read:
+%2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+43"/>
+        <source>File not saved! A file with the selected name
+%1
+is already open in the editor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>The associated file editor tab has disappeared.  It was likely closed by some means.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+141"/>
+        <source>&amp;%1 %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+130"/>
+        <source>&amp;New File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Open File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Save File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Save File &amp;As</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Undo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Redo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Cu&amp;t</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Paste</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Next Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Pre&amp;vious Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Toggle &amp;Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Remove All Bookmarks</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Next breakpoint</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Pre&amp;vious breakpoint</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Toggle &amp;breakpoint</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Remove All breakpoints</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Comment Selected Text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Uncomment Selected Text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&amp;Find and Replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Save File And Run</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+51"/>
+        <source>&amp;File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Open &amp;Recent</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>&amp;Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>&amp;Debug</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
+        <source>&amp;Run</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>file_editor_tab</name>
+    <message>
+        <location filename="../src/m-editor/file-editor-tab.cc" line="+687"/>
+        <location line="+102"/>
+        <location line="+98"/>
+        <location line="+63"/>
+        <location line="+14"/>
+        <source>Octave Editor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-276"/>
+        <source>The file &apos;%1&apos; has been modified. Do you want to save the changes?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+102"/>
+        <source>Could not open file %1 for write:
+%2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+98"/>
+        <source>File not saved!  You&apos;ve selected a file name
+
+     %1
+
+which is the same as the current file name.  Use Save to overwrite.  (Could allow overwriting, with message, if that is what folks want.)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+63"/>
+        <source>It seems that &apos;%1&apos; has been modified by another application. Do you want to reload it?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>It seems that &apos;%1&apos; has been deleted or renamed. Do you want to save it now?</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>files_dock_widget</name>
+    <message>
+        <location filename="../src/files-dockwidget.cc" line="+43"/>
+        <source>Current Directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Move up one directory.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Enter the path or filename.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+26"/>
+        <source>Doubleclick a file to open it.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>find_dialog</name>
+    <message>
+        <location filename="../src/m-editor/find-dialog.cc" line="+58"/>
+        <source>Find &amp;what:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Re&amp;place with:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Match &amp;case</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Search from &amp;start</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>&amp;Wrap while searching</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Find Next</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;Replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Replace &amp;All</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>&amp;More</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>&amp;Whole words</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Regular E&amp;xpressions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Search &amp;backward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Search se&amp;lection</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>history_dock_widget</name>
+    <message>
+        <location filename="../src/history-dockwidget.cc" line="+55"/>
+        <source>Doubleclick a command to transfer it to the terminal.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Enter text to filter the command history.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Command History</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+42"/>
+        <source>Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Evaluate</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>lexer_octave_gui</name>
+    <message>
+        <location filename="../src/m-editor/lexer-octave-gui.cc" line="+145"/>
+        <source>Default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Comment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Command</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Number</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Keyword</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Single-quoted string</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Double-quoted string</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>main_window</name>
+    <message>
+        <location filename="../src/main-window.cc" line="+135"/>
+        <source>Save Workspace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <source>Load Workspace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+155"/>
+        <source>Set working direcotry</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+186"/>
+        <location line="+381"/>
+        <source>About Octave</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-290"/>
+        <source>View the variables in the active workspace.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Browse and search the command history.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Browse your files.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>See the documentation for help.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+39"/>
+        <source>&amp;File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>New</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Script</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Function</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Enumeration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Figure</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Variable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Model</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>GUI</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Open...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Close Command Window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Import Data...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Save Workspace...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Preferences...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Page Setup...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Print</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Print Selection...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Exit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Undo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Redo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Cut</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Paste</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Paste To Workspace...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Select All</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Delete</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Find...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Find Files...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Clear Command Window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>Clear Command History</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Clear Workspace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>De&amp;bug</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Step</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Step in</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Step out</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>Continue</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <source>Exit Debug Mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <source>&amp;Desktop</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Load workspace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Show Command Window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Show Command History</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Show Current Directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <source>Show Workspace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Show Editor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Show Documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Command Window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Command History</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Current Directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Workspace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Editor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Reset Windows</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>&amp;Help</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Report Bug</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Visit Agora</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Visit Octave Forge</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+20"/>
+        <source>Current Directory:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>settings_dialog</name>
+    <message>
+        <location filename="../src/settings-dialog.ui" line="+29"/>
+        <location filename="../src/ui-settings-dialog.h" line="+461"/>
+        <source>Settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <location filename="../src/ui-settings-dialog.h" line="+5"/>
+        <source>General</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+18"/>
+        <location filename="../src/ui-settings-dialog.h" line="-4"/>
+        <source>Icon set for dock widget</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Octave logo only</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+16"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Letter icons</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Graphic  icons</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location filename="../src/ui-settings-dialog.h" line="+11"/>
+        <source>Editor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location line="+147"/>
+        <location filename="../src/ui-settings-dialog.h" line="-9"/>
+        <location line="+10"/>
+        <source>Font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-130"/>
+        <location line="+147"/>
+        <location filename="../src/ui-settings-dialog.h" line="-9"/>
+        <location line="+10"/>
+        <source>Font Size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-109"/>
+        <location filename="../src/ui-settings-dialog.h" line="-9"/>
+        <source>Show line numbers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Highlight current line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Code completion</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Show complete path in window title</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Restore tabs from previous session on startup</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Use custom file editor:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>emacs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location filename="../src/ui-settings-dialog.h" line="+6"/>
+        <source>Terminal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+62"/>
+        <location filename="../src/ui-settings-dialog.h" line="-2"/>
+        <source>Cursor type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+27"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Cursor blinking</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+36"/>
+        <location filename="../src/ui-settings-dialog.h" line="+8"/>
+        <source>File Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location filename="../src/ui-settings-dialog.h" line="-6"/>
+        <source>Show filenames</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Show file size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Show file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Show date of last modification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Show hidden files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Alternating row colors</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+21"/>
+        <location filename="../src/ui-settings-dialog.h" line="+13"/>
+        <source>Network</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+6"/>
+        <location filename="../src/ui-settings-dialog.h" line="-11"/>
+        <source>Use proxy server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Proxy Type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <location filename="../src/ui-settings-dialog.h" line="+3"/>
+        <source>HttpProxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Socks5Proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+11"/>
+        <location filename="../src/ui-settings-dialog.h" line="+2"/>
+        <source>Hostname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Port:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Username:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+17"/>
+        <location filename="../src/ui-settings-dialog.h" line="+1"/>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>terminal_dock_widget</name>
+    <message>
+        <location filename="../src/terminal-dockwidget.cc" line="+34"/>
+        <source>Command Window</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>webinfo</name>
+    <message>
+        <location filename="../src/qtinfo/webinfo.cc" line="+74"/>
+        <source>Type here and press &apos;Return&apos; to search</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Global search</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>welcome_wizard</name>
+    <message>
+        <location filename="../src/welcome-wizard.ui" line="+26"/>
+        <location filename="../src/ui-welcome-wizard.h" line="+286"/>
+        <source>Welcome to GNU Octave</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+13"/>
+        <location filename="../src/ui-welcome-wizard.h" line="+1"/>
+        <source>It appears that you have launched Octave GUI for the first time on this computer, since no configuration file could be found at &apos;~/.octave-gui&apos;. This wizard will guide you through the essential settings you should make before you can start using Octave GUI. If you want to transfer your settings you have previously made just close this dialog and copy over the settings file to your home folder. The presence of that file will automatically be detected and will skip this wizard. IMPORTANT: This wizard is not fully functional yet. Just click your way to the end and it will create a standard settings file.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+41"/>
+        <location line="+50"/>
+        <location line="+52"/>
+        <location line="+52"/>
+        <location filename="../src/ui-welcome-wizard.h" line="+1"/>
+        <location line="+2"/>
+        <location line="+2"/>
+        <location line="+2"/>
+        <source>Next</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-124"/>
+        <location line="+52"/>
+        <location line="+52"/>
+        <location line="+87"/>
+        <location filename="../src/ui-welcome-wizard.h" line="-5"/>
+        <location line="+2"/>
+        <location line="+2"/>
+        <location line="+5"/>
+        <source>Previous</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="-45"/>
+        <location filename="../src/ui-welcome-wizard.h" line="-3"/>
+        <source>Welcome to Octave!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <location filename="../src/ui-welcome-wizard.h" line="+1"/>
+        <source>This is the development version of Octave with the first official GUI.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+10"/>
+        <location filename="../src/ui-welcome-wizard.h" line="+1"/>
+        <source>You seem to run Octave GUI for the first time on this computer. This assistant will help you to configure this software installation. Click &apos;Finish&apos; to write a configuration file and launch Octave GUI.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+48"/>
+        <location filename="../src/ui-welcome-wizard.h" line="+2"/>
+        <source>Finish</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>workspace_model</name>
+    <message>
+        <location filename="../src/workspace-model.cc" line="+42"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Class</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Dimension</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+0"/>
+        <source>Value</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>workspace_view</name>
+    <message>
+        <location filename="../src/workspace-view.cc" line="+39"/>
+        <source>Workspace</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>
--- a/libgui/languages/generic.qm	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-<¸dÊÍ!¿`¡½Ý
\ No newline at end of file
--- a/libgui/languages/generic.ts	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1066 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0">
-<context>
-    <name>documentation_dock_widget</name>
-    <message>
-        <location filename="../src/documentation-dockwidget.cc" line="+34"/>
-        <source>Documentation</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>file_editor</name>
-    <message>
-        <location filename="../src/m-editor/file-editor.cc" line="+146"/>
-        <location line="+38"/>
-        <location line="+43"/>
-        <location line="+26"/>
-        <source>Octave Editor</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-106"/>
-        <source>File %1 is already open in the editor.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+38"/>
-        <source>Could not open file %1 for read:
-%2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+43"/>
-        <source>File not saved! A file with the selected name
-%1
-is already open in the editor</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+26"/>
-        <source>The associated file editor tab has disappeared.  It was likely closed by some means.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+141"/>
-        <source>&amp;%1 %2</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+130"/>
-        <source>&amp;New File</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>&amp;Open File</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>&amp;Save File</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Save File &amp;As</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>&amp;Undo</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>&amp;Redo</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>&amp;Copy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Cu&amp;t</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Paste</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Next Bookmark</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Pre&amp;vious Bookmark</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Toggle &amp;Bookmark</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Remove All Bookmarks</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>&amp;Next breakpoint</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Pre&amp;vious breakpoint</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Toggle &amp;breakpoint</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>&amp;Remove All breakpoints</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>&amp;Comment Selected Text</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Uncomment Selected Text</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>&amp;Find and Replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Save File And Run</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+51"/>
-        <source>&amp;File</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Open &amp;Recent</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>&amp;Edit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+19"/>
-        <source>&amp;Debug</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+9"/>
-        <source>&amp;Run</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>file_editor_tab</name>
-    <message>
-        <location filename="../src/m-editor/file-editor-tab.cc" line="+687"/>
-        <location line="+102"/>
-        <location line="+98"/>
-        <location line="+63"/>
-        <location line="+14"/>
-        <source>Octave Editor</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-276"/>
-        <source>The file &apos;%1&apos; has been modified. Do you want to save the changes?</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+102"/>
-        <source>Could not open file %1 for write:
-%2.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+98"/>
-        <source>File not saved!  You&apos;ve selected a file name
-
-     %1
-
-which is the same as the current file name.  Use Save to overwrite.  (Could allow overwriting, with message, if that is what folks want.)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+63"/>
-        <source>It seems that &apos;%1&apos; has been modified by another application. Do you want to reload it?</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+14"/>
-        <source>It seems that &apos;%1&apos; has been deleted or renamed. Do you want to save it now?</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>files_dock_widget</name>
-    <message>
-        <location filename="../src/files-dockwidget.cc" line="+43"/>
-        <source>Current Directory</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Move up one directory.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Enter the path or filename.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+26"/>
-        <source>Doubleclick a file to open it.</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>find_dialog</name>
-    <message>
-        <location filename="../src/m-editor/find-dialog.cc" line="+58"/>
-        <source>Find &amp;what:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Re&amp;place with:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Match &amp;case</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Search from &amp;start</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>&amp;Wrap while searching</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>&amp;Find Next</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>&amp;Replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Replace &amp;All</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>&amp;More</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>&amp;Whole words</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Regular E&amp;xpressions</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Search &amp;backward</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Search se&amp;lection</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>history_dock_widget</name>
-    <message>
-        <location filename="../src/history-dockwidget.cc" line="+55"/>
-        <source>Doubleclick a command to transfer it to the terminal.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Enter text to filter the command history.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Command History</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+42"/>
-        <source>Copy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Evaluate</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>lexer_octave_gui</name>
-    <message>
-        <location filename="../src/m-editor/lexer-octave-gui.cc" line="+145"/>
-        <source>Default</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Comment</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Command</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Number</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Keyword</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Single-quoted string</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Operator</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Identifier</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Double-quoted string</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>main_window</name>
-    <message>
-        <location filename="../src/main-window.cc" line="+135"/>
-        <source>Save Workspace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Load Workspace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+155"/>
-        <source>Set working direcotry</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+186"/>
-        <location line="+381"/>
-        <source>About Octave</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-290"/>
-        <source>View the variables in the active workspace.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Browse and search the command history.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Browse your files.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>See the documentation for help.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+39"/>
-        <source>&amp;File</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>New</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Script</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Function</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Class</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Enumeration</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Figure</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Variable</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Model</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>GUI</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Open...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Close Command Window</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Import Data...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Save Workspace...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Preferences...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Page Setup...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Print</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Print Selection...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Exit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>&amp;Edit</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Undo</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Redo</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Cut</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Copy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Paste</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Paste To Workspace...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Select All</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Delete</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Find...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Find Files...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Clear Command Window</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+3"/>
-        <source>Clear Command History</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Clear Workspace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>De&amp;bug</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Step</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>Step in</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>Step out</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+8"/>
-        <source>Continue</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <source>Exit Debug Mode</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <source>&amp;Desktop</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>Load workspace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>&amp;Window</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Show Command Window</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Show Command History</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Show Current Directory</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <source>Show Workspace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Show Editor</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Show Documentation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <source>Command Window</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Command History</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Current Directory</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Workspace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Editor</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Documentation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Reset Windows</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>&amp;Help</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Report Bug</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Visit Agora</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+2"/>
-        <source>Visit Octave Forge</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+20"/>
-        <source>Current Directory:</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>settings_dialog</name>
-    <message>
-        <location filename="../src/settings-dialog.ui" line="+29"/>
-        <location filename="../src/ui-settings-dialog.h" line="+461"/>
-        <source>Settings</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <location filename="../src/ui-settings-dialog.h" line="+5"/>
-        <source>General</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+18"/>
-        <location filename="../src/ui-settings-dialog.h" line="-4"/>
-        <source>Icon set for dock widget</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+21"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Octave logo only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+16"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Letter icons</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Graphic  icons</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <location filename="../src/ui-settings-dialog.h" line="+11"/>
-        <source>Editor</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <location line="+147"/>
-        <location filename="../src/ui-settings-dialog.h" line="-9"/>
-        <location line="+10"/>
-        <source>Font</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-130"/>
-        <location line="+147"/>
-        <location filename="../src/ui-settings-dialog.h" line="-9"/>
-        <location line="+10"/>
-        <source>Font Size</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-109"/>
-        <location filename="../src/ui-settings-dialog.h" line="-9"/>
-        <source>Show line numbers</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Highlight current line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Code completion</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Show complete path in window title</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Restore tabs from previous session on startup</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+27"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Use custom file editor:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>emacs</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <location filename="../src/ui-settings-dialog.h" line="+6"/>
-        <source>Terminal</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+62"/>
-        <location filename="../src/ui-settings-dialog.h" line="-2"/>
-        <source>Cursor type:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+27"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Cursor blinking</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+36"/>
-        <location filename="../src/ui-settings-dialog.h" line="+8"/>
-        <source>File Browser</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <location filename="../src/ui-settings-dialog.h" line="-6"/>
-        <source>Show filenames</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Show file size</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Show file type</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Show date of last modification</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Show hidden files</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Alternating row colors</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+21"/>
-        <location filename="../src/ui-settings-dialog.h" line="+13"/>
-        <source>Network</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+6"/>
-        <location filename="../src/ui-settings-dialog.h" line="-11"/>
-        <source>Use proxy server</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+12"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Proxy Type:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <location filename="../src/ui-settings-dialog.h" line="+3"/>
-        <source>HttpProxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Socks5Proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <location filename="../src/ui-settings-dialog.h" line="+2"/>
-        <source>Hostname:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Port:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Username:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+17"/>
-        <location filename="../src/ui-settings-dialog.h" line="+1"/>
-        <source>Password:</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>terminal_dock_widget</name>
-    <message>
-        <location filename="../src/terminal-dockwidget.cc" line="+34"/>
-        <source>Command Window</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>webinfo</name>
-    <message>
-        <location filename="../src/qtinfo/webinfo.cc" line="+74"/>
-        <source>Type here and press &apos;Return&apos; to search</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+4"/>
-        <source>Global search</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>welcome_wizard</name>
-    <message>
-        <location filename="../src/welcome-wizard.ui" line="+26"/>
-        <location filename="../src/ui-welcome-wizard.h" line="+286"/>
-        <source>Welcome to GNU Octave</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+13"/>
-        <location filename="../src/ui-welcome-wizard.h" line="+1"/>
-        <source>It appears that you have launched Octave GUI for the first time on this computer, since no configuration file could be found at &apos;~/.octave-gui&apos;. This wizard will guide you through the essential settings you should make before you can start using Octave GUI. If you want to transfer your settings you have previously made just close this dialog and copy over the settings file to your home folder. The presence of that file will automatically be detected and will skip this wizard. IMPORTANT: This wizard is not fully functional yet. Just click your way to the end and it will create a standard settings file.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+41"/>
-        <location line="+50"/>
-        <location line="+52"/>
-        <location line="+52"/>
-        <location filename="../src/ui-welcome-wizard.h" line="+1"/>
-        <location line="+2"/>
-        <location line="+2"/>
-        <location line="+2"/>
-        <source>Next</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-124"/>
-        <location line="+52"/>
-        <location line="+52"/>
-        <location line="+87"/>
-        <location filename="../src/ui-welcome-wizard.h" line="-5"/>
-        <location line="+2"/>
-        <location line="+2"/>
-        <location line="+5"/>
-        <source>Previous</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="-45"/>
-        <location filename="../src/ui-welcome-wizard.h" line="-3"/>
-        <source>Welcome to Octave!</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+7"/>
-        <location filename="../src/ui-welcome-wizard.h" line="+1"/>
-        <source>This is the development version of Octave with the first official GUI.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+10"/>
-        <location filename="../src/ui-welcome-wizard.h" line="+1"/>
-        <source>You seem to run Octave GUI for the first time on this computer. This assistant will help you to configure this software installation. Click &apos;Finish&apos; to write a configuration file and launch Octave GUI.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+48"/>
-        <location filename="../src/ui-welcome-wizard.h" line="+2"/>
-        <source>Finish</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>workspace_model</name>
-    <message>
-        <location filename="../src/workspace-model.cc" line="+42"/>
-        <source>Name</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Class</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Dimension</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+0"/>
-        <source>Value</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>workspace_view</name>
-    <message>
-        <location filename="../src/workspace-view.cc" line="+39"/>
-        <source>Workspace</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-</TS>
--- a/libgui/languages/translators	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/languages/translators	Mon Feb 11 15:45:26 2013 -0500
@@ -1,5 +1,7 @@
 # Below Octave GUI translators are listed with their e-mails
-# to be able inform them about generic translation file changes
+# to be able to inform them about generic translation file changes.
+# The gerenic file that can be used as a template for new
+# translation files is en_US.ts
 be_BY Mihas Varantsou <meequz@gmail.com>
 de_DE Jacob Dawid <jacob.dawid@googlemail.com>
 en_US Jacob Dawid <jacob.dawid@googlemail.com>
--- a/libgui/src/m-editor/file-editor-interface.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/m-editor/file-editor-interface.h	Mon Feb 11 15:45:26 2013 -0500
@@ -43,11 +43,13 @@
 
   virtual ~file_editor_interface () { }
 
+  virtual QMenu *get_mru_menu ( ) = 0;
   virtual QMenu *debug_menu () = 0;
   virtual QToolBar *toolbar () = 0;
 
   virtual void handle_entered_debug_mode () = 0;
   virtual void handle_quit_debug_mode () = 0;
+  virtual void set_focus () = 0;
 
 public slots:
   virtual void request_new_file () = 0;
--- a/libgui/src/m-editor/file-editor-tab.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/m-editor/file-editor-tab.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -142,8 +142,7 @@
 {
   // ignore close event if file is not saved and user cancels
   // closing this window
-  if (check_file_modified ("Close File",
-                           QMessageBox::Cancel) == QMessageBox::Cancel)
+  if (check_file_modified () == QMessageBox::Cancel)
     {
       e->ignore ();
     }
@@ -259,6 +258,15 @@
   _edit_area->setLexer (lexer);
 }
 
+// slot for fetab_set_focus: sets the focus to the current edit area
+void
+file_editor_tab::set_focus (const QWidget* ID)
+{
+  if (ID != this)
+    return;
+  _edit_area->setFocus ();
+}
+
 void
 file_editor_tab::undo (const QWidget* ID)
 {
@@ -615,6 +623,8 @@
     }
 
   _find_dialog->activateWindow ();
+  _find_dialog->init_search_text ();
+
 }
 
 void
@@ -649,22 +659,27 @@
 file_editor_tab::update_window_title (bool modified)
 {
   QString title ("");
+  QString tooltip ("");
   if (_file_name.isEmpty () || _file_name.at (_file_name.count () - 1) == '/')
-    title = UNNAMED_FILE;
+    title = tr("<unnamed>");
   else
-    title = _file_name;
-  if ( !_long_title )
     {
-      QFileInfo file(_file_name);
-      title = file.fileName();
+      if ( _long_title )
+        title = _file_name;
+      else
+        {
+          QFileInfo file(_file_name);
+          title = file.fileName();
+          tooltip = _file_name;
+        }
     }
 
   if ( modified )
     {
-      emit file_name_changed (title.prepend("* "));
+      emit file_name_changed (title.prepend("* "), tooltip);
     }
   else
-    emit file_name_changed (title);
+    emit file_name_changed (title, tooltip);
 }
 
 void
@@ -675,7 +690,7 @@
 }
 
 int
-file_editor_tab::check_file_modified (const QString&, int)
+file_editor_tab::check_file_modified ()
 {
   int decision = QMessageBox::Yes;
   if (_edit_area->isModified ())
@@ -684,9 +699,14 @@
       // editor tab can't be made parent because it may be deleted depending
       // upon the response.  Instead, change the _edit_area to read only.
       QMessageBox* msgBox = new QMessageBox (
-              QMessageBox::Warning, tr ("Octave Editor"),
-              tr ("The file \'%1\' has been modified. Do you want to save the changes?").
-              arg (_file_name), QMessageBox::Yes | QMessageBox::No, 0);
+          QMessageBox::Warning, tr ("Octave Editor"),
+          tr ("The file\n"
+              "%1\n"
+              "is about to be closed but has been modified.\n"
+              "Do you want to cancel closing, save or discard the changes?").
+          arg (_file_name),
+          QMessageBox::Save | QMessageBox::Cancel | QMessageBox::Discard, 0);
+      msgBox->setDefaultButton (QMessageBox::Save);
       _edit_area->setReadOnly (true);
       connect (msgBox, SIGNAL (finished (int)),
                this, SLOT (handle_file_modified_answer (int)));
@@ -707,12 +727,12 @@
 void
 file_editor_tab::handle_file_modified_answer (int decision)
 {
-  if (decision == QMessageBox::Yes)
+  if (decision == QMessageBox::Save)
     {
       // Save file, then remove from editor.
       save_file (_file_name, true);
     }
-  else if (decision == QMessageBox::No)
+  else if (decision == QMessageBox::Discard)
     {
       // User doesn't want to save, just remove from editor.
       emit tab_remove_request ();
@@ -854,7 +874,7 @@
           fileDialog->setDirectory (_file_name);
         }
     }
-  fileDialog->setNameFilter (SAVE_FILE_FILTER);
+  fileDialog->setNameFilter (tr("Octave Files (*.m);;All Files (*.*)"));
   fileDialog->setDefaultSuffix ("m");
   fileDialog->setAcceptMode (QFileDialog::AcceptSave);
   fileDialog->setViewMode (QFileDialog::Detail);
@@ -885,7 +905,8 @@
   // Create a NonModal message about error.
   QMessageBox* msgBox = new QMessageBox (
           QMessageBox::Critical, tr ("Octave Editor"),
-          tr ("File not saved!  You've selected a file name\n\n     %1\n\nwhich is the same as the current file name.  Use ""Save"" to overwrite.  (Could allow overwriting, with message, if that is what folks want.)").
+          tr ("File not saved! The selected file name\n%1\n"
+              "is the same as the current file name").
           arg (saveFileName),
           QMessageBox::Ok, 0);
   msgBox->setWindowModality (Qt::NonModal);
@@ -958,12 +979,20 @@
     }
   else
     {
-      // Create a WindowModal message that blocks the edit area
-      // by making _edit_area parent.
+      QString modified = "";
+      if (_edit_area->isModified ())
+        modified = tr ("\n\nWarning: The contents in the editor is modified!");
+      // Create a WindowModal message. The file editor tab can't be made
+      // parent because it may be deleted depending upon the response.
+      // Instead, change the _edit_area to read only.
       QMessageBox* msgBox = new QMessageBox (
               QMessageBox::Warning, tr ("Octave Editor"),
-              tr ("It seems that \'%1\' has been deleted or renamed. Do you want to save it now?").
-              arg (_file_name), QMessageBox::Save | QMessageBox::Close, this);
+              tr ("It seems that the file\n"
+                  "%1\n"
+                  "has been deleted or renamed. Do you want to save it now?%2").
+              arg (_file_name).arg (modified),
+              QMessageBox::Save | QMessageBox::Close, 0);
+      _edit_area->setReadOnly (true);
       connect (msgBox, SIGNAL (finished (int)),
                this, SLOT (handle_file_resave_answer (int)));
       msgBox->setWindowModality (Qt::WindowModal);
@@ -1073,21 +1102,21 @@
 void
 file_editor_tab::handle_file_resave_answer (int decision)
 {
+  // check decision of user in dialog
   if (decision == QMessageBox::Save)
     {
-      save_file (_file_name);
+      save_file (_file_name);  // readds file to watcher in set_file_name ()
+      _edit_area->setReadOnly (false);  // delete read only flag
     }
   else
     {
-      if (close ())
-        {
-          emit tab_remove_request ();
-          return;  // Don't touch member variables after removal
-        }
+      // Definitely close the file.
+      // Set modified to false to prevent the dialog box when the close event
+      // is posted. If the user cancels the close in this dialog the tab is
+      // left open with a non-existing file.
+      _edit_area->setModified (false);
+      close ();
     }
-
-  // Start watching file once again.
-  _file_system_watcher.addPath (_file_name);
 }
 
 void
--- a/libgui/src/m-editor/file-editor-tab.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/m-editor/file-editor-tab.h	Mon Feb 11 15:45:26 2013 -0500
@@ -52,6 +52,7 @@
   /** Simply transmit file name. */
   void file_name_query (const QWidget* ID);
 
+  void set_focus (const QWidget* ID);
   void undo (const QWidget* ID);
   void redo (const QWidget* ID);
   void copy (const QWidget* ID);
@@ -85,7 +86,7 @@
   void file_has_changed (const QString& fileName);
 
 signals:
-  void file_name_changed (const QString& fileName);
+  void file_name_changed (const QString& fileName, const QString& toolTip);
   void editor_state_changed (bool copy_available, const QString& fileName);
   void tab_remove_request ();
   void add_filename_to_list (const QString& fileName);
@@ -132,7 +133,7 @@
   void request_add_breakpoint (int line);
   void request_remove_breakpoint (int line);
 
-  int check_file_modified (const QString& msg, int cancelButton);
+  int check_file_modified ();
   void do_comment_selected_text (bool comment);
 
   void run_file_callback (void);
--- a/libgui/src/m-editor/file-editor.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/m-editor/file-editor.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -62,6 +62,23 @@
     }
   settings->setValue ("editor/savedSessionTabs", fetFileNames);
   settings->sync ();
+
+  if (_mru_file_menu)
+    delete _mru_file_menu;
+}
+
+// set focus to editor and its current tab
+void
+file_editor::set_focus ()
+{
+  if (!isVisible ())
+    setVisible (true);
+  setFocus ();
+  activateWindow ();
+  raise ();
+  QWidget *fileEditorTab = _tab_widget->currentWidget ();
+  if (fileEditorTab)
+    emit fetab_set_focus (fileEditorTab);
 }
 
 QMenu *
@@ -98,8 +115,9 @@
   file_editor_tab *fileEditorTab = new file_editor_tab (ced);
   if (fileEditorTab)
     {
-      add_file_editor_tab (fileEditorTab, UNNAMED_FILE);
-      fileEditorTab->new_file ();
+      add_file_editor_tab (fileEditorTab, "");  // new tab with empty title
+      fileEditorTab->new_file ();               // title is updated here
+      set_focus ();                             // focus editor and new tab
     }
 }
 
@@ -112,7 +130,7 @@
 
   // Create a NonModal message.
   QFileDialog* fileDialog = new QFileDialog (this);
-  fileDialog->setNameFilter (SAVE_FILE_FILTER);
+  fileDialog->setNameFilter (tr("Octave Files (*.m);;All Files (*.*)"));
   fileDialog->setAcceptMode (QFileDialog::AcceptOpen);
   fileDialog->setViewMode (QFileDialog::Detail);
   fileDialog->setDirectory (ced);
@@ -190,6 +208,7 @@
               msgBox->show ();
             }
         }
+      set_focus ();  // really show editor and the current editor tab
     }
 }
 
@@ -411,7 +430,7 @@
 }
 
 void
-file_editor::handle_file_name_changed (const QString& fileName)
+file_editor::handle_file_name_changed (const QString& fileName, const QString& toolTip)
 {
   QObject *fileEditorTab = sender();
   if (fileEditorTab)
@@ -421,6 +440,7 @@
           if (_tab_widget->widget (i) == fileEditorTab)
             {
               _tab_widget->setTabText (i, fileName);
+              _tab_widget->setTabToolTip (i, toolTip);
             }
         }
     }
@@ -631,12 +651,12 @@
   fileMenu->addAction (save_action);
   fileMenu->addAction (save_as_action);
   fileMenu->addSeparator ();
-  QMenu *mru_file_menu = new QMenu (tr ("Open &Recent"), fileMenu);
+  _mru_file_menu = new QMenu (tr ("&Recent Editor Files"), fileMenu);
   for (int i = 0; i < MaxMRUFiles; ++i)
     {
-      mru_file_menu->addAction (_mru_file_actions[i]);
+      _mru_file_menu->addAction (_mru_file_actions[i]);
     }
-  fileMenu->addMenu (mru_file_menu);
+  fileMenu->addMenu (_mru_file_menu);
   _menu_bar->addMenu (fileMenu);
 
   QMenu *editMenu = new QMenu (tr ("&Edit"), _menu_bar);
@@ -754,8 +774,8 @@
   _tab_widget->addTab (f, fn);
 
   // Signals from the file editor_tab
-  connect (f, SIGNAL (file_name_changed (const QString&)),
-           this, SLOT (handle_file_name_changed (const QString&)));
+  connect (f, SIGNAL (file_name_changed (const QString&, const QString&)),
+           this, SLOT (handle_file_name_changed (const QString&, const QString&)));
   connect (f, SIGNAL (editor_state_changed (bool, const QString&)),
            this, SLOT (handle_editor_state_changed (bool, const QString&)));
   connect (f, SIGNAL (tab_remove_request ()),
@@ -819,6 +839,8 @@
            f, SLOT (uncomment_selected_text (const QWidget*)));
   connect (this, SIGNAL (fetab_find (const QWidget*)),
            f, SLOT (find (const QWidget*)));
+  connect (this, SIGNAL (fetab_set_focus (const QWidget*)),
+           f, SLOT (set_focus (const QWidget*)));
 
   _tab_widget->setCurrentWidget (f);
 }
--- a/libgui/src/m-editor/file-editor.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/m-editor/file-editor.h	Mon Feb 11 15:45:26 2013 -0500
@@ -33,8 +33,6 @@
 #include "file-editor-interface.h"
 #include "file-editor-tab.h"
 
-const char UNNAMED_FILE[]     = "<unnamed>";
-const char SAVE_FILE_FILTER[] = "Octave Files (*.m);;All Files (*.*)";
 enum editor_markers
   {
     bookmark,
@@ -51,9 +49,11 @@
   ~file_editor ();
   void loadFile (const QString& fileName);
 
+  QMenu *           get_mru_menu ( ) { return _mru_file_menu; }
   QMenu *           debug_menu ();
   QToolBar *        toolbar ();
 
+  void set_focus ();
   void handle_entered_debug_mode ();
   void handle_quit_debug_mode ();
 
@@ -85,6 +85,7 @@
   void fetab_comment_selected_text (const QWidget* ID);
   void fetab_uncomment_selected_text (const QWidget* ID);
   void fetab_find (const QWidget* ID);
+  void fetab_set_focus (const QWidget* ID);
 
 public slots:
   void request_new_file ();
@@ -113,7 +114,7 @@
   void request_uncomment_selected_text ();
   void request_find ();
 
-  void handle_file_name_changed (const QString& fileName);
+  void handle_file_name_changed (const QString& fileName, const QString& toolTip);
   void handle_tab_close_request (int index);
   void handle_tab_remove_request ();
   void handle_add_filename_to_list (const QString& fileName);
@@ -150,6 +151,7 @@
   int               _marker_breakpoint;
 
   enum { MaxMRUFiles = 10 };
+  QMenu *_mru_file_menu;
   QAction *_mru_file_actions[MaxMRUFiles];
   QStringList _mru_files;
 
--- a/libgui/src/m-editor/find-dialog.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/m-editor/find-dialog.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -130,6 +130,21 @@
   _extension->hide ();
 }
 
+
+// initialize search text with selected text if this is in one single line
+void
+find_dialog::init_search_text ()
+{
+  if (_edit_area->hasSelectedText ())
+    {
+      int lbeg, lend, cbeg, cend;
+      _edit_area->getSelection(&lbeg,&cbeg,&lend,&cend);
+      if (lbeg == lend)
+        _search_line_edit->setText (_edit_area->selectedText ());
+    }
+}
+
+
 void
 find_dialog::search_next ()
 {
--- a/libgui/src/m-editor/find-dialog.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/m-editor/find-dialog.h	Mon Feb 11 15:45:26 2013 -0500
@@ -57,6 +57,7 @@
   Q_OBJECT
   public:
   find_dialog (QsciScintilla* edit_area, QWidget *parent = 0);
+  void init_search_text ();
 
 private slots:
   void search_next ();
--- a/libgui/src/main-window.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/main-window.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -100,7 +100,6 @@
 {
 #ifdef HAVE_QSCINTILLA
   _file_editor->request_new_file ();
-  focus_editor ();
 #endif
 }
 
@@ -109,7 +108,6 @@
 {
 #ifdef HAVE_QSCINTILLA
   _file_editor->request_open_file ();
-  focus_editor ();
 #endif
 }
 
@@ -118,7 +116,6 @@
 {
 #ifdef HAVE_QSCINTILLA
   _file_editor->request_open_file (file_name);
-  focus_editor ();
 #endif
 }
 
@@ -166,7 +163,13 @@
 main_window::handle_command_double_clicked (const QString& command)
 {
   _terminal->sendText (command);
-  _terminal->setFocus ();
+  focus_command_window ();
+}
+
+void
+main_window::open_online_documentation_page ()
+{
+  QDesktopServices::openUrl (QUrl ("http://gnu.org/software/octave/doc/interpreter"));
 }
 
 void
@@ -176,18 +179,18 @@
 }
 
 void
+main_window::open_octave_forge_page ()
+{
+  QDesktopServices::openUrl (QUrl ("http://octave.sourceforge.net/"));
+}
+
+void
 main_window::open_agora_page ()
 {
   QDesktopServices::openUrl (QUrl ("http://agora.octave.org/"));
 }
 
 void
-main_window::open_octave_forge_page ()
-{
-  QDesktopServices::openUrl (QUrl ("http://octave.sourceforge.net/"));
-}
-
-void
 main_window::process_settings_dialog_request ()
 {
   settings_dialog *settingsDialog = new settings_dialog (this);
@@ -393,18 +396,13 @@
   _workspace_view->raise ();
 }
 
+
 void
 main_window::focus_editor ()
 {
 #ifdef HAVE_QSCINTILLA
-  if (!_file_editor->isVisible ())
-    {
-      _file_editor->setVisible (true);
-    }
-
-  _file_editor->setFocus ();
-  _file_editor->activateWindow ();
-  _file_editor->raise ();
+  // call own function of editor in order to set focus to the current editor tab
+  _file_editor->set_focus ();
 #endif
 }
 
@@ -422,6 +420,56 @@
 }
 
 void
+main_window::handle_command_window_visible (bool visible)
+{
+  // if widget is changed to visible and is not floating
+  if (visible && !_terminal_dock_widget->isFloating ())
+    focus_command_window ();
+}
+
+void
+main_window::handle_command_history_visible (bool visible)
+{
+  // if changed to visible and widget is not floating
+  if (visible && !_history_dock_widget->isFloating ())
+    focus_command_history ();
+}
+
+void
+main_window::handle_current_directory_visible (bool visible)
+{
+  // if changed to visible and widget is not floating
+  if (visible && !_files_dock_widget->isFloating ())
+    focus_current_directory ();
+}
+
+void
+main_window::handle_workspace_visible (bool visible)
+{
+  // if changed to visible and widget is not floating
+  if (visible && !_workspace_view->isFloating ())
+    focus_workspace ();
+}
+
+void
+main_window::handle_editor_visible (bool visible)
+{
+  // if changed to visible and widget is not floating
+#ifdef HAVE_QSCINTILLA
+  if (visible && !_file_editor->isFloating ())
+    focus_editor ();
+#endif
+}
+
+void
+main_window::handle_documentation_visible (bool visible)
+{
+  // if changed to visible and widget is not floating
+  if (visible && !_documentation_dock_widget->isFloating ())
+    focus_documentation ();
+}
+
+void
 main_window::handle_entered_debug_mode ()
 {
   setWindowTitle ("Octave (Debugging)");
@@ -567,6 +615,30 @@
   settings->sync ();
 }
 
+
+// Connecting the signals emitted when the visibility of a widget changes.
+// This has to be done after the window is shown (see octave-gui.cc)
+void
+main_window::connect_visibility_changed ()
+{
+  connect (_terminal_dock_widget, SIGNAL (visibilityChanged (bool)),
+           this,                  SLOT (handle_command_window_visible (bool)));
+  connect (_workspace_view,       SIGNAL (visibilityChanged (bool)),
+           this,                  SLOT (handle_workspace_visible (bool)));
+  connect (_history_dock_widget,  SIGNAL (visibilityChanged (bool)),
+           this,                  SLOT (handle_command_history_visible (bool)));
+  connect (_files_dock_widget,    SIGNAL (visibilityChanged (bool)),
+           this,                  SLOT (handle_current_directory_visible (bool)));
+#ifdef HAVE_QSCINTILLA
+  connect (_file_editor,          SIGNAL (visibilityChanged (bool)),
+           this,                  SLOT (handle_editor_visible (bool)));
+#endif
+  connect (_documentation_dock_widget,  SIGNAL (visibilityChanged (bool)),
+           this,                  SLOT (handle_documentation_visible (bool)));
+}
+
+
+// Main subroutine of the constructor
 void
 main_window::construct ()
 {
@@ -647,12 +719,15 @@
     = file_menu->addAction (QIcon(":/actions/icons/fileopen.png"), tr ("Open..."));
   open_action->setShortcut (Qt::ControlModifier + Qt::Key_O);
 
+  file_menu->addMenu(_file_editor->get_mru_menu ());
+
   QAction *close_command_window_action
     = file_menu->addAction (tr ("Close Command Window"));
   close_command_window_action->setShortcut (Qt::ControlModifier + Qt::Key_W);
   close_command_window_action->setEnabled (false); // TODO: Make this work.
 
-  file_menu->addSeparator ();
+  file_menu->addSeparator (); /////
+
   QAction *import_data_action
     = file_menu->addAction (tr ("Import Data..."));
   import_data_action->setEnabled (false); // TODO: Make this work.
@@ -660,12 +735,15 @@
   QAction *save_workspace_action
     = file_menu->addAction (tr ("Save Workspace..."));
   save_workspace_action->setShortcut (Qt::ControlModifier + Qt::Key_S);
-  file_menu->addSeparator ();
+
+  file_menu->addSeparator (); /////
 
   QAction *preferences_action
     = file_menu->addAction (QIcon(":/actions/icons/configure.png"),
                             tr ("Preferences..."));
-  file_menu->addSeparator ();
+
+  file_menu->addSeparator (); /////
+
   QAction *page_setup_action
     = file_menu->addAction (tr ("Page Setup..."));
   page_setup_action->setEnabled (false); // TODO: Make this work.
@@ -677,7 +755,8 @@
     = file_menu->addAction (tr ("Print Selection..."));
   print_selection_action->setEnabled (false); // TODO: Make this work.
 
-  file_menu->addSeparator ();
+  file_menu->addSeparator (); /////
+
   QAction *exit_action = file_menu->addAction (tr ("Exit"));
   exit_action->setShortcut (Qt::ControlModifier + Qt::Key_Q);
 
@@ -690,7 +769,8 @@
   QAction *redo_action
     = edit_menu->addAction (QIcon(":/actions/icons/redo.png"), tr ("Redo"));
   redo_action->setShortcut (QKeySequence::Redo);
-  edit_menu->addSeparator ();
+
+  edit_menu->addSeparator (); /////
 
   QAction *cut_action
     = edit_menu->addAction (QIcon(":/actions/icons/editcut.png"), tr ("Cut"));
@@ -707,7 +787,8 @@
   QAction *paste_to_workspace_action
     = edit_menu->addAction (tr ("Paste To Workspace..."));
   paste_to_workspace_action->setEnabled (false); // TODO: Make this work.
-  edit_menu->addSeparator ();
+
+  edit_menu->addSeparator (); /////
 
   QAction *select_all_action
     = edit_menu->addAction (tr ("Select All"));
@@ -716,7 +797,8 @@
     = edit_menu->addAction (tr ("Delete"));
   delete_action->setShortcut (Qt::Key_Delete);
   delete_action->setEnabled (false); // TODO: Make this work.
-  edit_menu->addSeparator ();
+
+  edit_menu->addSeparator (); /////
 
   QAction *find_action
     = edit_menu->addAction (tr ("Find..."));
@@ -726,7 +808,8 @@
   find_files_action->setShortcut (Qt::ControlModifier + Qt::ShiftModifier
                                   + Qt::Key_F);
   find_files_action->setEnabled (false); // TODO: Make this work.
-  edit_menu->addSeparator ();
+
+  edit_menu->addSeparator (); /////
 
   QAction *clear_command_window_action
     = edit_menu->addAction (tr ("Clear Command Window"));
@@ -770,9 +853,9 @@
 #endif
   _debug_continue->setShortcut (Qt::Key_F5);
 
-  _debug_menu->addSeparator ();
+  _debug_menu->addSeparator (); /////
 #ifdef HAVE_QSCINTILLA
-  _file_editor->debug_menu ()->addSeparator ();
+  _file_editor->debug_menu ()->addSeparator (); /////
 #endif
 
   _debug_quit = _debug_menu->addAction (QIcon (":/actions/icons/db_stop.png"), tr ("Exit Debug Mode"));
@@ -823,7 +906,7 @@
   show_documentation_action->setCheckable (true);
   show_documentation_action->setShortcut (Qt::ControlModifier + Qt::ShiftModifier
                                           + Qt::Key_5);
-  window_menu->addSeparator ();
+  window_menu->addSeparator (); /////
 
   QAction * command_window_action
     = window_menu->addAction (tr ("Command Window"));
@@ -849,20 +932,31 @@
     = window_menu->addAction (tr ("Documentation"));
   documentation_action->setShortcut (Qt::ControlModifier + Qt::Key_5);
 
-  window_menu->addSeparator ();
+  window_menu->addSeparator (); /////
+
   QAction * reset_windows_action
     = window_menu->addAction (tr ("Reset Windows"));
   reset_windows_action->setEnabled (false); // TODO: Make this work.
 
   // Help menu
   QMenu *   help_menu = menuBar ()->addMenu (tr ("&Help"));
+  QMenu * documentation_menu
+    = help_menu->addMenu (tr ("Documentation"));
+  QAction * ondisk_documentation_action
+    = documentation_menu->addAction (tr ("On Disk"));
+  QAction * online_documentation_action
+    = documentation_menu->addAction (tr ("Online"));
+
+  help_menu->addSeparator (); /////
+
   QAction * report_bug_action
     = help_menu->addAction (tr ("Report Bug"));
+  QAction * octave_forge_action
+    = help_menu->addAction (tr ("Visit Octave Forge"));
   QAction * agora_action
     = help_menu->addAction (tr ("Visit Agora"));
-  QAction * octave_forge_action
-    = help_menu->addAction (tr ("Visit Octave Forge"));
-  help_menu->addSeparator ();
+
+  help_menu->addSeparator (); /////
 
   QAction * about_octave_action
     = help_menu->addAction (tr ("About Octave"));
@@ -872,13 +966,17 @@
   main_tool_bar->setObjectName ("MainToolBar");
   main_tool_bar->addAction (new_script_action);
   main_tool_bar->addAction (open_action);
-  main_tool_bar->addSeparator ();
+
+  main_tool_bar->addSeparator (); /////
+
   main_tool_bar->addAction (cut_action);
   main_tool_bar->addAction (copy_action);
   main_tool_bar->addAction (paste_action);
   main_tool_bar->addAction (undo_action);
   main_tool_bar->addAction (redo_action);
-  main_tool_bar->addSeparator ();
+
+  main_tool_bar->addSeparator (); /////
+
   // addWidget takes ownership of the objects so there is no
   // need to delete these upon destroying this main_window.
   main_tool_bar->addWidget (new QLabel (tr ("Current Directory:")));
@@ -896,12 +994,14 @@
            this,                        SLOT   (new_file ()));
   connect (open_action,                 SIGNAL (triggered ()),
            this,                        SLOT   (open_file ()));
+  connect (online_documentation_action, SIGNAL (triggered ()),
+           this,                        SLOT   (open_online_documentation_page ()));
   connect (report_bug_action,           SIGNAL (triggered ()),
            this,                        SLOT   (open_bug_tracker_page ()));
+  connect (octave_forge_action,         SIGNAL (triggered ()),
+           this,                        SLOT   (open_octave_forge_page ()));
   connect (agora_action,                SIGNAL (triggered ()),
            this,                        SLOT   (open_agora_page ()));
-  connect (octave_forge_action,         SIGNAL (triggered ()),
-           this,                        SLOT   (open_octave_forge_page ()));
   connect (about_octave_action,         SIGNAL (triggered ()),
            this,                        SLOT   (show_about_octave ()));
   connect (show_command_window_action,  SIGNAL (toggled (bool)),
@@ -943,6 +1043,8 @@
            this,                        SLOT (focus_editor ()));
   connect (documentation_action,        SIGNAL (triggered ()),
            this,                        SLOT (focus_documentation ()));
+  connect (ondisk_documentation_action, SIGNAL (triggered ()),
+           this,                        SLOT (focus_documentation ()));
 
   connect (reset_windows_action,        SIGNAL (triggered ()),
            this,                        SLOT   (reset_windows ()));
--- a/libgui/src/main-window.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/main-window.h	Mon Feb 11 15:45:26 2013 -0500
@@ -86,9 +86,10 @@
   void new_file ();
   void open_file ();
   void open_file (const QString& file_name);
+  void open_online_documentation_page ();
   void open_bug_tracker_page ();
+  void open_octave_forge_page ();
   void open_agora_page ();
-  void open_octave_forge_page ();
   void process_settings_dialog_request ();
   void show_about_octave ();
   void notice_settings ();
@@ -106,6 +107,12 @@
   void focus_workspace ();
   void focus_editor ();
   void focus_documentation ();
+  void handle_command_window_visible (bool);
+  void handle_command_history_visible (bool);
+  void handle_current_directory_visible (bool);
+  void handle_workspace_visible (bool);
+  void handle_editor_visible (bool);
+  void handle_documentation_visible (bool);
 
   void handle_entered_debug_mode ();
   void handle_quit_debug_mode ();
@@ -117,6 +124,7 @@
 
   void read_settings ();
   void write_settings ();
+  void connect_visibility_changed ();
 
 protected:
   void closeEvent (QCloseEvent * closeEvent);
--- a/libgui/src/octave-adapter/octave-main-thread.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/octave-adapter/octave-main-thread.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -24,6 +24,7 @@
 #include <config.h>
 #endif
 
+#include <clocale>
 #include <string>
 
 #include "octave.h"
--- a/libgui/src/octave-gui.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/octave-gui.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -26,7 +26,6 @@
 
 #include <QtGui/QApplication>
 #include <QTranslator>
-#include <QSettings>
 
 #include <iostream>
 
@@ -95,24 +94,23 @@
         }
       else
         {
-          QSettings *settings = resource_manager::get_settings ();
-
-          // FIXME -- what should happen if settings is 0?
-
-          QString language = settings->value ("language").toString ();
+          // install translators for the gui and qt text
+          QTranslator gui_translator, qt_translator;
+          resource_manager::config_translators (&gui_translator,&qt_translator);
+          application.installTranslator (&qt_translator);
+          application.installTranslator (&gui_translator);
 
-          QString translatorFile = resource_manager::find_translator_file (language);
-          QTranslator translator;
-          translator.load (translatorFile);
-          application.installTranslator (&translator);
-
+          // update network-settings
           resource_manager::update_network_settings ();
 
+          // create main window, read settings, and show window
           main_window w;
-          w.read_settings ();  // Get the widget settings after construction and before showing
+          w.read_settings ();  // get widget settings after construction
+                               // but before showing
           w.show ();
           w.focus_command_window ();
-
+          w.connect_visibility_changed (); // connect signals for changes in
+                                           // visibility not before w is shown
           return application.exec ();
         }
     }
--- a/libgui/src/resource-manager.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/resource-manager.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -29,6 +29,7 @@
 #include <QFile>
 #include <QDir>
 #include <QNetworkProxy>
+ #include <QLibraryInfo>
 
 #include "error.h"
 #include "file-ops.h"
@@ -52,11 +53,31 @@
   delete settings;
 }
 
+
 QString
-resource_manager::find_translator_file (const QString& language)
+resource_manager::get_gui_translation_dir (void)
 {
-  // TODO: Quick hack to be able to test language files.
-  return QString ("libgui/languages/%1.qm").arg (language);
+  // get environment variable for the locale dir (e.g. from run-octave)
+  std::string dldir = octave_env::getenv ("OCTAVE_LOCALE_DIR");
+  if (dldir.empty ())
+    dldir = Voct_locale_dir; // env-var empty, load the default location
+  return QString::fromStdString (dldir);
+}
+
+void
+resource_manager::config_translators (QTranslator *qt_tr,QTranslator *gui_tr)
+{
+  QSettings *settings = resource_manager::get_settings ();
+  // FIXME -- what should happen if settings is 0?
+  // get the locale from the settings
+  QString language = settings->value ("language","SYSTEM").toString ();
+  if (language == "SYSTEM")
+      language = QLocale::system().name();    // get system wide locale
+  // load the translator file for qt strings
+  qt_tr->load("qt_" + language,
+              QLibraryInfo::location(QLibraryInfo::TranslationsPath));
+  // load the translator file for gui strings
+  gui_tr->load (language, get_gui_translation_dir ());
 }
 
 bool
--- a/libgui/src/resource-manager.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/resource-manager.h	Mon Feb 11 15:45:26 2013 -0500
@@ -27,7 +27,7 @@
 #include <QIcon>
 #include <QMap>
 #include <QSettings>
-
+#include <QTranslator>
 
 class resource_manager
 {
@@ -61,7 +61,9 @@
       instance->do_set_settings (file);
   }
 
-  static QString find_translator_file (const QString& language);
+  static QString get_gui_translation_dir (void);
+
+  static void config_translators (QTranslator*, QTranslator*);
 
   static void update_network_settings (void)
   {
--- a/libgui/src/settings-dialog.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/settings-dialog.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -28,6 +28,8 @@
 #include "settings-dialog.h"
 #include "ui-settings-dialog.h"
 #include <QSettings>
+#include <QDir>
+#include <QFileInfo>
 
 settings_dialog::settings_dialog (QWidget *p):
   QDialog (p), ui (new Ui::settings_dialog)
@@ -35,9 +37,28 @@
   ui->setupUi (this);
 
   QSettings *settings = resource_manager::get_settings ();
-
   // FIXME -- what should happen if settings is 0?
 
+  // look for available language files and the actual settings
+  QString qm_dir_name = resource_manager::get_gui_translation_dir ();
+  QDir qm_dir (qm_dir_name);
+  QFileInfoList qm_files = qm_dir.entryInfoList (QStringList ("*.qm"),
+                                                 QDir::Files | QDir::Readable,
+                                                 QDir::Name);
+  for (int i = 0; i < qm_files.length (); i++)    // insert available languages
+    ui->comboBox_language->addItem (qm_files.at (i).baseName ());
+  ui->comboBox_language->insertItem (0,tr("System setting")); // System at beginning
+  ui->comboBox_language->insertSeparator (1);         // separator after System
+  QString language = settings->value ("language","SYSTEM").toString ();
+  if (language == "SYSTEM")
+    language = tr("System setting");
+  int selected = ui->comboBox_language->findText (language);
+  if (selected >= 0)
+    ui->comboBox_language->setCurrentIndex (selected);
+  else
+    ui->comboBox_language->setCurrentIndex (0);  // System is default
+
+  // which icon has to be selected
   QString widget_icon_set =
       settings->value ("DockWidgets/widget_icon_set","NONE").toString ();
   ui->general_icon_octave-> setChecked (true);  // the default (if invalid set)
@@ -104,15 +125,23 @@
 settings_dialog::write_changed_settings ()
 {
   QSettings *settings = resource_manager::get_settings ();
-
   // FIXME -- what should happen if settings is 0?
 
+  // the icon set
   QString widget_icon_set = "NONE";
   if (ui->general_icon_letter->isChecked ())
     widget_icon_set = "LETTER";
   else if (ui->general_icon_graphic->isChecked ())
     widget_icon_set = "GRAPHIC";
   settings->setValue ("DockWidgets/widget_icon_set",widget_icon_set);
+
+  // language
+  QString language = ui->comboBox_language->currentText ();
+  if (language == tr("System setting"))
+    language = "SYSTEM";
+  settings->setValue ("language", language);
+
+  // other settings
   settings->setValue ("useCustomFileEditor", ui->useCustomFileEditor->isChecked ());
   settings->setValue ("customFileEditor", ui->customFileEditor->text ());
   settings->setValue ("editor/showLineNumbers", ui->editor_showLineNumbers->isChecked ());
@@ -138,6 +167,7 @@
   settings->setValue ("proxyPassword", ui->proxyPassword->text ());
   settings->setValue ("terminal/cursorBlinking", ui->terminal_cursorBlinking->isChecked ());
 
+  // the cursor
   QString cursorType;
   switch (ui->terminal_cursorType->currentIndex ())
     {
--- a/libgui/src/settings-dialog.ui	Mon Feb 11 15:24:56 2013 -0500
+++ b/libgui/src/settings-dialog.ui	Mon Feb 11 15:45:26 2013 -0500
@@ -41,75 +41,112 @@
       <attribute name="title">
        <string>General</string>
       </attribute>
-      <widget class="QGroupBox" name="groupBox">
+      <widget class="QWidget" name="verticalLayoutWidget">
        <property name="geometry">
         <rect>
-         <x>10</x>
+         <x>9</x>
          <y>10</y>
-         <width>551</width>
-         <height>81</height>
+         <width>561</width>
+         <height>131</height>
         </rect>
        </property>
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="title">
-        <string>Icon set for dock widget</string>
-       </property>
-       <property name="alignment">
-        <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-       </property>
-       <property name="flat">
-        <bool>false</bool>
-       </property>
-       <property name="checkable">
-        <bool>false</bool>
-       </property>
-       <widget class="QRadioButton" name="general_icon_octave">
-        <property name="geometry">
-         <rect>
-          <x>0</x>
-          <y>20</y>
-          <width>151</width>
-          <height>21</height>
-         </rect>
-        </property>
-        <property name="text">
-         <string>Octave logo only</string>
-        </property>
-        <property name="checked">
-         <bool>true</bool>
-        </property>
-       </widget>
-       <widget class="QRadioButton" name="general_icon_letter">
-        <property name="geometry">
-         <rect>
-          <x>0</x>
-          <y>40</y>
-          <width>151</width>
-          <height>21</height>
-         </rect>
-        </property>
-        <property name="text">
-         <string>Letter icons</string>
-        </property>
-       </widget>
-       <widget class="QRadioButton" name="general_icon_graphic">
-        <property name="geometry">
-         <rect>
-          <x>0</x>
-          <y>60</y>
-          <width>151</width>
-          <height>21</height>
-         </rect>
-        </property>
-        <property name="text">
-         <string>Graphic  icons</string>
-        </property>
-       </widget>
+       <layout class="QVBoxLayout" name="verticalLayout_7">
+        <item>
+         <layout class="QHBoxLayout" name="horizontalLayout_6">
+          <item>
+           <widget class="QLabel" name="label_2">
+            <property name="text">
+             <string>Language (requires restart)</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QComboBox" name="comboBox_language">
+            <property name="insertPolicy">
+             <enum>QComboBox::InsertAtBottom</enum>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <spacer name="horizontalSpacer_3">
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>40</width>
+              <height>20</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+         </layout>
+        </item>
+        <item>
+         <widget class="QGroupBox" name="groupBox">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="title">
+           <string>Icon set for dock widgets</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+          </property>
+          <property name="flat">
+           <bool>false</bool>
+          </property>
+          <property name="checkable">
+           <bool>false</bool>
+          </property>
+          <widget class="QRadioButton" name="general_icon_octave">
+           <property name="geometry">
+            <rect>
+             <x>0</x>
+             <y>20</y>
+             <width>151</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>Octave logo only</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+          <widget class="QRadioButton" name="general_icon_letter">
+           <property name="geometry">
+            <rect>
+             <x>0</x>
+             <y>40</y>
+             <width>151</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>Letter icons</string>
+           </property>
+          </widget>
+          <widget class="QRadioButton" name="general_icon_graphic">
+           <property name="geometry">
+            <rect>
+             <x>0</x>
+             <y>60</y>
+             <width>151</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>Graphic  icons</string>
+           </property>
+          </widget>
+         </widget>
+        </item>
+       </layout>
       </widget>
      </widget>
      <widget class="QWidget" name="tab">
--- a/libinterp/Makefile.am	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/Makefile.am	Mon Feb 11 15:45:26 2013 -0500
@@ -230,6 +230,16 @@
 	  -DMAKE_BUILTINS $< | $(srcdir)/mkdefs $(srcdir) $< > $@-t
 	mv $@-t $@
 
+## Rules to build test files
+
+TST_FILES_SRC := $(shell $(top_srcdir)/build-aux/find-files-with-tests.sh "$(srcdir)" $(DIST_SRC) $(DLDFCN_SRC))
+
+TST_FILES := $(addsuffix -tst,$(TST_FILES_SRC))
+
+libinterptestsdir := $(octtestsdir)/libinterp
+
+nobase_libinterptests_DATA = $(TST_FILES)
+
 ## Override Automake's rule that forces a .hh extension on us even
 ## though we don't want it.  It would be super awesome if automake
 ## would allow users to choose the header file extension.
--- a/libinterp/corefcn/cellfun.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/corefcn/cellfun.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -69,7 +69,14 @@
                  octave_value& func,
                  octave_value& error_handler)
 {
-  octave_value_list tmp = func.do_multi_index_op (nargout, inputlist);
+  octave_value_list tmp;
+  try {
+    tmp = func.do_multi_index_op (nargout, inputlist);
+  }
+  catch (octave_execution_exception) {
+    if (error_handler.is_defined ())
+      error_state = 1;
+  }
 
   if (error_state)
     {
@@ -996,6 +1003,7 @@
 %!assert (cellfun (@atan2, {1,1;1,1}, {1,2;1,2}), atan2 ([1,1;1,1],[1,2;1,2]))
 %!error cellfun (@factorial, {-1,3})
 %!assert (cellfun (@factorial,{-1,3},"ErrorHandler",@(x,y) NaN), [NaN,6])
+%!assert (cellfun (@(x) x(2),{[1],[1,2]},"ErrorHandler",@(x,y) NaN), [NaN,2])
 %!test
 %! [a,b,c] = cellfun (@fileparts, {fullfile("a","b","c.d"), fullfile("e","f","g.h")}, "UniformOutput", false);
 %! assert (a, {fullfile("a","b"), fullfile("e","f")});
@@ -1133,7 +1141,8 @@
 
   if (nargin < 2)
     {
-      error ("arrayfun: function requires at least 2 arguments");
+      error_with_id ("Octave:invalid-fun-call", 
+                     "arrayfun: function requires at least 2 arguments");
       print_usage ();
       return retval;
     }
@@ -1164,7 +1173,9 @@
           func = symbol_table::find_function (name);
 
           if (func.is_undefined ())
-            error ("arrayfun: invalid function NAME: %s", name.c_str ());
+            error_with_id ("Octave:invalid-input-arg",
+                           "arrayfun: invalid function NAME: %s",
+                           name.c_str ());
 
           symbol_table_lookup = true;
         }
@@ -1242,7 +1253,8 @@
                 {
                   if (mask[i] && inputs[i].dims () != fdims)
                     {
-                      error ("arrayfun: dimensions mismatch");
+                      error_with_id ("Octave:invalid-input-arg", 
+                                     "arrayfun: dimensions mismatch");
                       return retval;
                     }
                 }
@@ -1289,7 +1301,8 @@
 
               if (nargout > 0 && tmp.length () < nargout)
                 {
-                  error ("arrayfun: function returned fewer than nargout values");
+                  error_with_id ("Octave:invalid-fun-call", 
+                                 "arrayfun: function returned fewer than nargout values");
                   return retval;
                 }
 
@@ -1314,7 +1327,8 @@
                                 retv[j] = val.resize (fdims);
                               else
                                 {
-                                  error ("arrayfun: all values must be scalars when UniformOutput = true");
+                                  error_with_id ("Octave:invalid-fun-call",
+                                                 "arrayfun: all values must be scalars when UniformOutput = true");
                                   break;
                                 }
                             }
@@ -1341,7 +1355,8 @@
                                     }
                                   else
                                     {
-                                      error ("arrayfun: all values must be scalars when UniformOutput = true");
+                                      error_with_id ("Octave:invalid-fun-call",
+                                                     "arrayfun: all values must be scalars when UniformOutput = true");
                                       break;
                                     }
                                 }
@@ -1399,7 +1414,8 @@
 
               if (nargout > 0 && tmp.length () < nargout)
                 {
-                  error ("arrayfun: function returned fewer than nargout values");
+                  error_with_id ("Octave:invalid-fun-call", 
+                                 "arrayfun: function returned fewer than nargout values");
                   return retval;
                 }
 
@@ -1430,7 +1446,8 @@
         }
     }
   else
-    error ("arrayfun: argument NAME must be a string or function handle");
+    error_with_id ("Octave:invalid-fun-call", 
+                   "arrayfun: argument NAME must be a string or function handle");
 
   return retval;
 }
--- a/libinterp/corefcn/kron.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/corefcn/kron.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -177,6 +177,13 @@
   octave_value retval;
   if (a.is_perm_matrix () && b.is_perm_matrix ())
     retval = do_kron<PermMatrix, PermMatrix> (a, b);
+  else if (a.is_sparse_type () || b.is_sparse_type ())
+    {
+      if (a.is_complex_type () || b.is_complex_type ())
+        retval = do_kron<SparseComplexMatrix, SparseComplexMatrix> (a, b);
+      else
+        retval = do_kron<SparseMatrix, SparseMatrix> (a, b);
+    }
   else if (a.is_diag_matrix ())
     {
       if (b.is_diag_matrix () && a.rows () == a.columns ()
@@ -214,13 +221,6 @@
             retval = do_kron<DiagMatrix, Matrix> (a, b);
         }
     }
-  else if (a.is_sparse_type () || b.is_sparse_type ())
-    {
-      if (a.is_complex_type () || b.is_complex_type ())
-        retval = do_kron<SparseComplexMatrix, SparseComplexMatrix> (a, b);
-      else
-        retval = do_kron<SparseMatrix, SparseMatrix> (a, b);
-    }
   else if (a.is_single_type () || b.is_single_type ())
     {
       if (a.is_complex_type ())
--- a/libinterp/corefcn/quadcc.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/corefcn/quadcc.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -33,11 +33,12 @@
 #include "oct-obj.h"
 #include "utils.h"
 
-//#include "oct.h"
-//#include "defun.h"
 
-/* Define the size of the interval heap. */
-#define cquad_heapsize                  200
+/* Extended debugging */
+#define DEBUG_QUADCC 0
+
+/* Define the minimum size of the interval heap. */
+#define min_cquad_heapsize  200 
 
 
 /* Data of a single interval */
@@ -1551,14 +1552,10 @@
   static const double w = M_SQRT2 / 2;
   static const int ndiv_max = 20;
 
-  /* The interval heap. */
-  cquad_ival ivals[cquad_heapsize];
-  int heap[cquad_heapsize];
-
   /* Arguments left and right */
   int nargin = args.length ();
   octave_function *fcn;
-  double a, b, tol, iivals[cquad_heapsize], *sing;
+  double a, b, tol, *sing;
 
   /* Variables needed for transforming the integrand. */
   bool wrap = false;
@@ -1588,7 +1585,7 @@
     fcn = args(0).function_value ();
   else
     {
-       std::string fcn_name = unique_symbol_name ("__quadcc_fcn_");
+       std::string fcn_name = unique_symbol_name ("__quadcc_fcn__");
        std::string fname = "function y = ";
        fname.append (fcn_name);
        fname.append ("(x) y = ");
@@ -1596,7 +1593,7 @@
                                "; endfunction");
     }
 
-  if (!args(1).is_real_scalar ())
+  if (! args(1).is_real_scalar ())
     {
       error ("quadcc: lower limit of integration (A) must be a single real scalar");
       return retval;
@@ -1604,7 +1601,7 @@
   else
     a = args(1).double_value ();
 
-  if (!args(2).is_real_scalar ())
+  if (! args(2).is_real_scalar ())
     {
       error ("quadcc: upper limit of integration (B) must be a single real scalar");
       return retval;
@@ -1614,7 +1611,7 @@
 
   if (nargin < 4 || args(3).is_empty ())
     tol = 1.0e-6;
-  else if (!args(3).is_real_scalar () || args(3).double_value () <= 0)
+  else if (! args(3).is_real_scalar () || args(3).double_value () <= 0)
     {
       error ("quadcc: tolerance (TOL) must be a single real scalar > 0");
       return retval;
@@ -1625,8 +1622,6 @@
   if (nargin < 5)
     {
       nivals = 1;
-      iivals[0] = a;
-      iivals[1] = b;
     }
   else if (!(args(4).is_real_scalar () || args(4).is_real_matrix ()))
     {
@@ -1635,16 +1630,27 @@
     }
   else
     {
-      nivals = 1 + args(4).length ();
-      if (nivals > cquad_heapsize)
-        {
-          error ("quadcc: maximum number of singular points is limited to %i",
-                 cquad_heapsize-1);
-          return retval;
-        }
+      nivals = 1 + args(4).numel ();
+    }
+
+  int cquad_heapsize = (nivals >= min_cquad_heapsize ? nivals + 1 
+                                                     : min_cquad_heapsize);
+  /* The interval heap. */
+  OCTAVE_LOCAL_BUFFER (cquad_ival, ivals, cquad_heapsize);
+  OCTAVE_LOCAL_BUFFER (double, iivals, cquad_heapsize);
+  OCTAVE_LOCAL_BUFFER (int, heap, cquad_heapsize);
+
+  if (nivals == 1)
+    {
+      iivals[0] = a;
+      iivals[1] = b;
+    }
+  else
+    {
+      // Intervals around singularities
       sing = args(4).array_value ().fortran_vec ();
       iivals[0] = a;
-      for (i = 0; i < nivals - 2; i++)
+      for (i = 0; i < nivals - 1; i++)
         iivals[i + 1] = sing[i];
       iivals[nivals] = b;
     }
@@ -1653,7 +1659,7 @@
   if (xisinf (a) || xisinf (b))
     {
       wrap = true;
-      for (i = 0; i <= nivals; i++)
+      for (i = 0; i < nivals + 1; i++)
         if (xisinf (iivals[i]))
           iivals[i] = gnulib::copysign (1.0, iivals[i]);
         else
@@ -1665,7 +1671,6 @@
   for (i = 0; i < cquad_heapsize; i++)
     heap[i] = i;
 
-
   /* Create the first interval(s). */
   igral = 0.0;
   err = 0.0;
@@ -1681,16 +1686,16 @@
       if (wrap)
         {
           for (i = 0; i <= n[3]; i++)
-            ex (i) = tan (M_PI / 2 * (m + xi[i] * h));
+            ex(i) = tan (M_PI / 2 * (m + xi[i] * h));
         }
       else
         {
           for (i = 0; i <= n[3]; i++)
-            ex (i) = m + xi[i] * h;
+            ex(i) = m + xi[i] * h;
         }
       fargs(0) = ex;
       fvals = feval (fcn, fargs, 1);
-      if (fvals.length () != 1 || !fvals(0).is_real_matrix ())
+      if (fvals.length () != 1 || ! fvals(0).is_real_matrix ())
         {
           error ("quadcc: integrand F must return a single, real-valued vector");
           return retval;
@@ -1703,14 +1708,14 @@
         }
       for (i = 0; i <= n[3]; i++)
         {
-          iv->fx[i] = effex (i);
+          iv->fx[i] = effex(i);
           if (wrap)
             {
               xw = ex(i);
               iv->fx[i] *= (1.0 + xw * xw) * M_PI / 2;
             }
           neval++;
-          if (!xfinite (iv->fx[i]))
+          if (! xfinite (iv->fx[i]))
             {
               nans[nnans++] = i;
               iv->fx[i] = 0.0;
@@ -1782,10 +1787,12 @@
       m = (iv->a + iv->b) / 2;
       h = (iv->b - iv->a) / 2;
 
-/*      printf
+#if (DEBUG_QUADCC)
+      printf
         ("quadcc: processing ival %i (of %i) with [%e,%e] int=%e, err=%e, depth=%i\n",
          heap[0], nivals, iv->a, iv->b, iv->igral, iv->err, iv->depth);
-*/
+#endif
+
       /* Should we try to increase the degree? */
       if (iv->depth < 3)
         {
@@ -1799,17 +1806,16 @@
             if (wrap)
               {
                 for (i = 0; i < n[d] / 2; i++)
-                  ex (i) =
-                    tan (M_PI / 2 * (m + xi[(2 * i + 1) * skip[d]] * h));
+                  ex(i) = tan (M_PI / 2 * (m + xi[(2 * i + 1) * skip[d]] * h));
               }
             else
               {
                 for (i = 0; i < n[d] / 2; i++)
-                  ex (i) = m + xi[(2 * i + 1) * skip[d]] * h;
+                  ex(i) = m + xi[(2 * i + 1) * skip[d]] * h;
               }
             fargs(0) = ex;
             fvals = feval (fcn, fargs, 1);
-            if (fvals.length () != 1 || !fvals(0).is_real_matrix ())
+            if (fvals.length () != 1 || ! fvals(0).is_real_matrix ())
               {
                 error ("quadcc: integrand F must return a single, real-valued vector");
                 return retval;
@@ -1824,7 +1830,7 @@
             for (i = 0; i < n[d] / 2; i++)
               {
                 j = (2 * i + 1) * skip[d];
-                iv->fx[j] = effex (i);
+                iv->fx[j] = effex(i);
                 if (wrap)
                   {
                     xw = ex(i);
@@ -1835,7 +1841,7 @@
           nnans = 0;
           for (i = 0; i <= 32; i += skip[d])
             {
-              if (!xfinite (iv->fx[i]))
+              if (! xfinite (iv->fx[i]))
                 {
                   nans[nnans++] = i;
                   iv->fx[i] = 0.0;
@@ -1888,11 +1894,13 @@
           || iv->err < fabs (iv->igral) * std::numeric_limits<double>::epsilon () * 10)
         {
 
-/*          printf
+#if (DEBUG_QUADCC)
+          printf
             ("quadcc: dropping ival %i (of %i) with [%e,%e] int=%e, err=%e, depth=%i\n",
              heap[0], nivals, iv->a, iv->b, iv->igral, iv->err,
              iv->depth);
-*/
+#endif
+
           /* Keep this interval's contribution */
           err_final += iv->err;
           igral_final += iv->igral;
@@ -1905,7 +1913,6 @@
           i = 0;
           while (2 * i + 1 < nivals)
             {
-
               /* Get the kids */
               j = 2 * i + 1;
               /* If the j+1st entry exists and is larger than the jth,
@@ -1948,16 +1955,16 @@
             if (wrap)
               {
                 for (i = 0; i < n[0] - 1; i++)
-                  ex (i) = tan (M_PI / 2 * (ml + xi[(i + 1) * skip[0]] * hl));
+                  ex(i) = tan (M_PI / 2 * (ml + xi[(i + 1) * skip[0]] * hl));
               }
             else
               {
                 for (i = 0; i < n[0] - 1; i++)
-                  ex (i) = ml + xi[(i + 1) * skip[0]] * hl;
+                  ex(i) = ml + xi[(i + 1) * skip[0]] * hl;
               }
             fargs(0) = ex;
             fvals = feval (fcn, fargs, 1);
-            if (fvals.length () != 1 || !fvals(0).is_real_matrix ())
+            if (fvals.length () != 1 || ! fvals(0).is_real_matrix ())
               {
                 error ("quadcc: integrand F must return a single, real-valued vector");
                 return retval;
@@ -1972,7 +1979,7 @@
             for (i = 0; i < n[0] - 1; i++)
               {
                 j = (i + 1) * skip[0];
-                ivl->fx[j] = effex (i);
+                ivl->fx[j] = effex(i);
                 if (wrap)
                   {
                     xw = ex(i);
@@ -1983,7 +1990,7 @@
           nnans = 0;
           for (i = 0; i <= 32; i += skip[0])
             {
-              if (!xfinite (ivl->fx[i]))
+              if (! xfinite (ivl->fx[i]))
                 {
                   nans[nnans++] = i;
                   ivl->fx[i] = 0.0;
@@ -2044,16 +2051,16 @@
             if (wrap)
               {
                 for (i = 0; i < n[0] - 1; i++)
-                  ex (i) = tan (M_PI / 2 * (mr + xi[(i + 1) * skip[0]] * hr));
+                  ex(i) = tan (M_PI / 2 * (mr + xi[(i + 1) * skip[0]] * hr));
               }
             else
               {
                 for (i = 0; i < n[0] - 1; i++)
-                  ex (i) = mr + xi[(i + 1) * skip[0]] * hr;
+                  ex(i) = mr + xi[(i + 1) * skip[0]] * hr;
               }
             fargs(0) = ex;
             fvals = feval (fcn, fargs, 1);
-            if (fvals.length () != 1 || !fvals(0).is_real_matrix ())
+            if (fvals.length () != 1 || ! fvals(0).is_real_matrix ())
               {
                 error ("quadcc: integrand F must return a single, real-valued vector");
                 return retval;
@@ -2068,7 +2075,7 @@
             for (i = 0; i < n[0] - 1; i++)
               {
                 j = (i + 1) * skip[0];
-                ivr->fx[j] = effex (i);
+                ivr->fx[j] = effex(i);
                 if (wrap)
                   {
                     xw = ex(i);
@@ -2079,7 +2086,7 @@
           nnans = 0;
           for (i = 0; i <= 32; i += skip[0])
             {
-              if (!xfinite (ivr->fx[i]))
+              if (! xfinite (ivr->fx[i]))
                 {
                   nans[nnans++] = i;
                   ivr->fx[i] = 0.0;
@@ -2195,16 +2202,16 @@
 
         }
 
-      /* If the heap is about to overflow, remove the last two
-         intervals. */
+      /* If the heap is about to overflow, remove the last two intervals. */
       while (nivals > cquad_heapsize - 2)
         {
           iv = &(ivals[heap[nivals - 1]]);
-/*          printf
+#if (DEBUG_QUADCC)
+          printf
             ("quadcc: dropping ival %i (of %i) with [%e,%e] int=%e, err=%e, depth=%i\n",
              heap[0], nivals, iv->a, iv->b, iv->igral, iv->err,
              iv->depth);
-*/
+#endif
           err_final += iv->err;
           igral_final += iv->igral;
           nivals--;
@@ -2222,7 +2229,8 @@
     }
 
   /* Dump the contents of the heap. */
-/*  for (i = 0; i < nivals; i++)
+#if (DEBUG_QUADCC)
+  for (i = 0; i < nivals; i++)
     {
       iv = &(ivals[heap[i]]);
       printf
@@ -2230,7 +2238,8 @@
          i, heap[i], iv->a, iv->b, iv->igral, iv->err, iv->depth,
          iv->rdepth, iv->ndiv);
     }
-*/
+#endif
+
   /* Clean up and present the results. */
   if (nargout > 2)
     retval(2) = neval;
@@ -2265,7 +2274,7 @@
 
 %!test
 %! [q, err, npoints] = quadcc ("__nansin", -pi, pi); 
-%! assert (q, 0, eps);
+%! assert (q, 0, 1e-6);
 %! assert (err, 0, 15*eps);
 
 %% Test input validation
--- a/libinterp/dldfcn/fftw.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/dldfcn/fftw.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -38,6 +38,8 @@
 @deftypefnx {Loadable Function} {} fftw (\"planner\", @var{method})\n\
 @deftypefnx {Loadable Function} {@var{wisdom} =} fftw (\"dwisdom\")\n\
 @deftypefnx {Loadable Function} {} fftw (\"dwisdom\", @var{wisdom})\n\
+@deftypefnx {Loadable Function} {} fftw (\"threads\", @var{nthreads})\n\
+@deftypefnx {Loadable Function} {@var{nthreads} =} fftw (\"threads\")\n\
 \n\
 Manage @sc{fftw} wisdom data.  Wisdom data can be used to significantly\n\
 accelerate the calculation of the FFTs, but implies an initial cost\n\
@@ -60,7 +62,7 @@
 fftw (\"dwisdom\", @var{wisdom})\n\
 @end example\n\
 \n\
-If @var{wisdom} is an empty matrix, then the wisdom used is cleared.\n\
+If @var{wisdom} is an empty string, then the wisdom used is cleared.\n\
 \n\
 During the calculation of Fourier transforms further wisdom is generated.\n\
 The fashion in which this wisdom is generated is also controlled by\n\
@@ -110,6 +112,17 @@
 the wisdom data can be reloaded if it is saved to a file as described\n\
 above.  Saved wisdom files should not be used on different platforms since\n\
 they will not be efficient and the point of calculating the wisdom is lost.\n\
+\n\
+The number of threads used for computing the plans and executing the\n\
+transforms can be set with\n\
+\n\
+@example\n\
+fftw (\"threads\", @var{NTHREADS})\n\
+@end example\n\
+\n\
+Note that octave must be compiled with multi-threaded FFTW support for this feature.\n\
+The number of processors available to the current process is used per default.\n\
+\n\
 @seealso{fft, ifft, fft2, ifft2, fftn, ifftn}\n\
 @end deftypefn")
 {
@@ -127,106 +140,76 @@
   if (args(0).is_string ())
     {
       std::string arg0 = args(0).string_value ();
-
       if (!error_state)
         {
-          // Use STL function to convert to lower case
-          std::transform (arg0.begin (), arg0.end (), arg0.begin (), tolower);
-
-          if (nargin == 2)
+          if (arg0 == "planner")
             {
-              std::string arg1 = args(1).string_value ();
-              if (!error_state)
+              if (nargin == 2)  //planner setter
                 {
-                  if (arg0 == "planner")
+                  if (args(1).is_string ())
                     {
-                      std::transform (arg1.begin (), arg1.end (),
-                                      arg1.begin (), tolower);
-                      octave_fftw_planner::FftwMethod meth
-                        = octave_fftw_planner::UNKNOWN;
-                      octave_float_fftw_planner::FftwMethod methf
-                        = octave_float_fftw_planner::UNKNOWN;
-
-                      if (arg1 == "estimate")
-                        {
-                          meth = octave_fftw_planner::ESTIMATE;
-                          methf = octave_float_fftw_planner::ESTIMATE;
-                        }
-                      else if (arg1 == "measure")
-                        {
-                          meth = octave_fftw_planner::MEASURE;
-                          methf = octave_float_fftw_planner::MEASURE;
-                        }
-                      else if (arg1 == "patient")
-                        {
-                          meth = octave_fftw_planner::PATIENT;
-                          methf = octave_float_fftw_planner::PATIENT;
-                        }
-                      else if (arg1 == "exhaustive")
-                        {
-                          meth = octave_fftw_planner::EXHAUSTIVE;
-                          methf = octave_float_fftw_planner::EXHAUSTIVE;
-                        }
-                      else if (arg1 == "hybrid")
-                        {
-                          meth = octave_fftw_planner::HYBRID;
-                          methf = octave_float_fftw_planner::HYBRID;
-                        }
-                      else
-                        error ("unrecognized planner METHOD");
-
+                      // Use STL function to convert to lower case
+                      std::transform (arg0.begin (), arg0.end (), arg0.begin (), tolower);
+                      std::string arg1 = args(1).string_value ();
                       if (!error_state)
                         {
-                          meth = octave_fftw_planner::method (meth);
-                          octave_float_fftw_planner::method (methf);
+                          std::transform (arg1.begin (), arg1.end (),
+                                          arg1.begin (), tolower);
+                          octave_fftw_planner::FftwMethod meth
+                            = octave_fftw_planner::UNKNOWN;
+                          octave_float_fftw_planner::FftwMethod methf
+                            = octave_float_fftw_planner::UNKNOWN;
 
-                          if (meth == octave_fftw_planner::MEASURE)
-                            retval = octave_value ("measure");
-                          else if (meth == octave_fftw_planner::PATIENT)
-                            retval = octave_value ("patient");
-                          else if (meth == octave_fftw_planner::EXHAUSTIVE)
-                            retval = octave_value ("exhaustive");
-                          else if (meth == octave_fftw_planner::HYBRID)
-                            retval = octave_value ("hybrid");
+                          if (arg1 == "estimate")
+                            {
+                              meth = octave_fftw_planner::ESTIMATE;
+                              methf = octave_float_fftw_planner::ESTIMATE;
+                            }
+                          else if (arg1 == "measure")
+                            {
+                              meth = octave_fftw_planner::MEASURE;
+                              methf = octave_float_fftw_planner::MEASURE;
+                            }
+                          else if (arg1 == "patient")
+                            {
+                              meth = octave_fftw_planner::PATIENT;
+                              methf = octave_float_fftw_planner::PATIENT;
+                            }
+                          else if (arg1 == "exhaustive")
+                            {
+                              meth = octave_fftw_planner::EXHAUSTIVE;
+                              methf = octave_float_fftw_planner::EXHAUSTIVE;
+                            }
+                          else if (arg1 == "hybrid")
+                            {
+                              meth = octave_fftw_planner::HYBRID;
+                              methf = octave_float_fftw_planner::HYBRID;
+                            }
                           else
-                            retval = octave_value ("estimate");
+                            error ("unrecognized planner METHOD");
+
+                          if (!error_state)
+                            {
+                              meth = octave_fftw_planner::method (meth);
+                              octave_float_fftw_planner::method (methf);
+
+                              if (meth == octave_fftw_planner::MEASURE)
+                                retval = octave_value ("measure");
+                              else if (meth == octave_fftw_planner::PATIENT)
+                                retval = octave_value ("patient");
+                              else if (meth == octave_fftw_planner::EXHAUSTIVE)
+                                retval = octave_value ("exhaustive");
+                              else if (meth == octave_fftw_planner::HYBRID)
+                                retval = octave_value ("hybrid");
+                              else
+                                retval = octave_value ("estimate");
+                            }
                         }
                     }
-                  else if (arg0 == "dwisdom")
-                    {
-                      char *str = fftw_export_wisdom_to_string ();
-
-                      if (arg1.length () < 1)
-                        fftw_forget_wisdom ();
-                      else if (! fftw_import_wisdom_from_string (arg1.c_str ()))
-                        error ("could not import supplied WISDOM");
-
-                      if (!error_state)
-                        retval = octave_value (std::string (str));
-
-                      free (str);
-                    }
-                  else if (arg0 == "swisdom")
-                    {
-                      char *str = fftwf_export_wisdom_to_string ();
-
-                      if (arg1.length () < 1)
-                        fftwf_forget_wisdom ();
-                      else if (! fftwf_import_wisdom_from_string (arg1.c_str ()))
-                        error ("could not import supplied WISDOM");
-
-                      if (!error_state)
-                        retval = octave_value (std::string (str));
-
-                      free (str);
-                    }
                   else
-                    error ("unrecognized argument");
+                    error ("fftw planner expects a string value as METHOD");
                 }
-            }
-          else
-            {
-              if (arg0 == "planner")
+              else //planner getter
                 {
                   octave_fftw_planner::FftwMethod meth =
                     octave_fftw_planner::method ();
@@ -242,23 +225,111 @@
                   else
                     retval = octave_value ("estimate");
                 }
-              else if (arg0 == "dwisdom")
+            }
+          else if (arg0 == "dwisdom")
+            {
+              if (nargin == 2)  //dwisdom setter
+                {
+                  if (args(1).is_string ())
+                    {
+                      // Use STL function to convert to lower case
+                      std::transform (arg0.begin (), arg0.end (), arg0.begin (), tolower);
+                      std::string arg1 = args(1).string_value ();
+                      if (!error_state)
+                        {
+                          char *str = fftw_export_wisdom_to_string ();
+
+                          if (arg1.length () < 1)
+                            fftw_forget_wisdom ();
+                          else if (! fftw_import_wisdom_from_string (arg1.c_str ()))
+                            error ("could not import supplied WISDOM");
+
+                          if (!error_state)
+                            retval = octave_value (std::string (str));
+
+                          free (str);
+                        }
+                    }
+                }
+              else //dwisdom getter
                 {
                   char *str = fftw_export_wisdom_to_string ();
                   retval = octave_value (std::string (str));
                   free (str);
                 }
-              else if (arg0 == "swisdom")
+            }
+          else if (arg0 == "swisdom")
+            {
+              //swisdom uses fftwf_ functions (float), dwisdom fftw_ (real)
+              if (nargin == 2)  //swisdom setter
+                {
+                  if (args(1).is_string ())
+                    {
+                      // Use STL function to convert to lower case
+                      std::transform (arg0.begin (), arg0.end (), arg0.begin (), tolower);
+                      std::string arg1 = args(1).string_value ();
+                      if (!error_state)
+                        {
+                          char *str = fftwf_export_wisdom_to_string ();
+
+                          if (arg1.length () < 1)
+                            fftwf_forget_wisdom ();
+                          else if (! fftwf_import_wisdom_from_string (arg1.c_str ()))
+                            error ("could not import supplied WISDOM");
+
+                          if (!error_state)
+                            retval = octave_value (std::string (str));
+
+                          free (str);
+                        }
+                    }
+                }
+              else //swisdom getter
                 {
                   char *str = fftwf_export_wisdom_to_string ();
                   retval = octave_value (std::string (str));
                   free (str);
                 }
-              else
-                error ("unrecognized argument");
             }
+          else if (arg0 == "threads")
+            {
+              if (nargin == 2)  //threads setter
+                {
+                  if (args(1).is_real_scalar ())
+                    {
+                      int nthreads = args(1).int_value();
+                      if ( nthreads >= 1)
+                        {
+#if defined (HAVE_FFTW3_THREADS)
+                          octave_fftw_planner::threads (nthreads);
+#else
+                          warning ("this copy of Octave was not configured to use the multithreaded fftw libraries.");
+#endif
+#if defined (HAVE_FFTW3F_THREADS)
+                          octave_float_fftw_planner::threads (nthreads);
+#else
+                          warning ("this copy of Octave was not configured to use the multithreaded fftwf libraries.");
+#endif
+                        }
+                      else
+                        error ("number of threads must be >=1");
+                    }
+                  else
+                    error ("setting threads needs one integer argument.");
+                }
+              else //threads getter
+#if defined (HAVE_FFTW3_THREADS)              
+                retval = octave_value (octave_fftw_planner::threads());
+#else
+                retval = 1;
+#endif
+            }
+          else
+            error ("unrecognized argument");
         }
     }
+  else
+    error ("unrecognized argument");
 #else
 
   warning ("fftw: this copy of Octave was not configured to use the FFTW3 planner");
@@ -269,7 +340,6 @@
 }
 
 /*
-
 %!testif HAVE_FFTW
 %! def_method = fftw ("planner");
 %! unwind_protect
@@ -295,4 +365,12 @@
 %!error <Invalid call to fftw> fftw ();
 %!error <Invalid call to fftw> fftw ("planner", "estimate", "measure");
 
+%!testif HAVE_FFTW3_THREADS
+%! n = fftw ("threads");
+%! unwind_protect
+%!   fftw ("threads", 3);
+%!   assert (fftw ("threads"), 3);
+%! unwind_protect_cleanup
+%!   fftw ("threads", n);
+%! end_unwind_protect
  */
--- a/libinterp/interp-core/c-file-ptr-stream.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/c-file-ptr-stream.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -193,15 +193,15 @@
 }
 
 int
-c_file_ptr_buf::seek (long offset, int origin)
+c_file_ptr_buf::seek (off_t offset, int origin)
 {
-  return f ? gnulib::fseek (f, offset, origin) : -1;
+  return f ? gnulib::fseeko (f, offset, origin) : -1;
 }
 
-long
+off_t
 c_file_ptr_buf::tell (void)
 {
-  return f ? gnulib::ftell (f) : -1;
+  return f ? gnulib::ftello (f) : -1;
 }
 
 int
--- a/libinterp/interp-core/c-file-ptr-stream.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/c-file-ptr-stream.h	Mon Feb 11 15:45:26 2013 -0500
@@ -74,9 +74,9 @@
 
   int file_number () const { return f ? fileno (f) : -1; }
 
-  int seek (long offset, int origin);
+  int seek (off_t offset, int origin);
 
-  long tell (void);
+  off_t tell (void);
 
   void clear (void) { if (f) clearerr (f); }
 
@@ -117,10 +117,10 @@
 
   void stream_close (void) { if (buf) buf->buf_close (); }
 
-  int seek (long offset, int origin)
+  int seek (off_t offset, int origin)
     { return buf ? buf->seek (offset, origin) : -1; }
 
-  long tell (void) { return buf ? buf->tell () : -1; }
+  off_t tell (void) { return buf ? buf->tell () : -1; }
 
   void clear (void) { if (buf) buf->clear (); STREAM_T::clear (); }
 
@@ -192,10 +192,10 @@
 
   int file_number () const { return -1; }
 
-  int seek (long offset, int origin)
-    { return f ? gzseek (f, offset, origin) : -1; }
+  int seek (off_t offset, int origin)
+    { return f ? gzseek (f, offset, origin) >= 0 : -1; }
 
-  long tell (void) { return f ? gztell (f) : -1; }
+  off_t tell (void) { return f ? gztell (f) : -1; }
 
   void clear (void) { if (f) gzclearerr (f); }
 
--- a/libinterp/interp-core/oct-fstrm.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/oct-fstrm.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -62,7 +62,7 @@
 // Position a stream at OFFSET relative to ORIGIN.
 
 int
-octave_fstream::seek (long, int)
+octave_fstream::seek (off_t, int)
 {
   error ("fseek: invalid_operation");
   return -1;
@@ -70,7 +70,7 @@
 
 // Return current stream position.
 
-long
+off_t
 octave_fstream::tell (void)
 {
   error ("ftell: invalid_operation");
--- a/libinterp/interp-core/oct-fstrm.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/oct-fstrm.h	Mon Feb 11 15:45:26 2013 -0500
@@ -46,11 +46,11 @@
 
   // Position a stream at OFFSET relative to ORIGIN.
 
-  int seek (long offset, int origin);
+  int seek (off_t offset, int origin);
 
   // Return current stream position.
 
-  long tell (void);
+  off_t tell (void);
 
   // Return non-zero if EOF has been reached on this stream.
 
--- a/libinterp/interp-core/oct-iostrm.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/oct-iostrm.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -30,7 +30,7 @@
 // Position a stream at OFFSET relative to ORIGIN.
 
 int
-octave_base_iostream::seek (long, int)
+octave_base_iostream::seek (off_t, int)
 {
   invalid_operation ();
   return -1;
@@ -38,7 +38,7 @@
 
 // Return current stream position.
 
-long
+off_t
 octave_base_iostream::tell (void)
 {
   invalid_operation ();
--- a/libinterp/interp-core/oct-iostrm.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/oct-iostrm.h	Mon Feb 11 15:45:26 2013 -0500
@@ -40,11 +40,11 @@
 
   // Position a stream at OFFSET relative to ORIGIN.
 
-  int seek (long offset, int origin);
+  int seek (off_t offset, int origin);
 
   // Return current stream position.
 
-  long tell (void);
+  off_t tell (void);
 
   // Return non-zero if EOF has been reached on this stream.
 
--- a/libinterp/interp-core/oct-stdstrm.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/oct-stdstrm.h	Mon Feb 11 15:45:26 2013 -0500
@@ -43,12 +43,12 @@
 
   // Position a stream at OFFSET relative to ORIGIN.
 
-  int seek (long offset, int origin)
+  int seek (off_t offset, int origin)
     { return s ? s->seek (offset, origin) : -1; }
 
   // Return current stream position.
 
-  long tell (void) { return s ? s->tell () : -1; }
+  off_t tell (void) { return s ? s->tell () : -1; }
 
   // Return non-zero if EOF has been reached on this stream.
 
--- a/libinterp/interp-core/oct-stream.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/oct-stream.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -1028,10 +1028,10 @@
   return do_gets (max_len, err, false, who);
 }
 
-long
-octave_base_stream::skipl (long num, bool& err, const std::string& who)
+off_t
+octave_base_stream::skipl (off_t num, bool& err, const std::string& who)
 {
-  long cnt = -1;
+  off_t cnt = -1;
 
   if ((interactive || forced_interactive) && file_number () == 0)
     {
@@ -2816,10 +2816,10 @@
   return retval;
 }
 
-long
-octave_stream::skipl (long count, bool& err, const std::string& who)
+off_t
+octave_stream::skipl (off_t count, bool& err, const std::string& who)
 {
-  long retval = -1;
+  off_t retval = -1;
 
   if (stream_ok ())
     retval = rep->skipl (count, err, who);
@@ -2827,10 +2827,10 @@
   return retval;
 }
 
-long
+off_t
 octave_stream::skipl (const octave_value& tc_count, bool& err, const std::string& who)
 {
-  long retval = -1;
+  off_t retval = -1;
 
   err = false;
 
@@ -2861,7 +2861,7 @@
 }
 
 int
-octave_stream::seek (long offset, int origin)
+octave_stream::seek (off_t offset, int origin)
 {
   int status = -1;
 
@@ -2871,7 +2871,7 @@
 
       // Find current position so we can return to it if needed.
 
-      long orig_pos = rep->tell ();
+      off_t orig_pos = rep->tell ();
 
       // Move to end of file.  If successful, find the offset of the end.
 
@@ -2879,7 +2879,7 @@
 
       if (status == 0)
         {
-          long eof_pos = rep->tell ();
+          off_t eof_pos = rep->tell ();
 
           if (origin == SEEK_CUR)
             {
@@ -2899,7 +2899,7 @@
             {
               // Where are we after moving to desired position?
 
-              long desired_pos = rep->tell ();
+              off_t desired_pos = rep->tell ();
 
               // I don't think save_pos can be less than zero, but we'll
               // check anyway...
@@ -2935,7 +2935,10 @@
 {
   int retval = -1;
 
-  long xoffset = tc_offset.long_value (true);
+  // FIXME -- should we have octave_value methods that handle off_t
+  // explicitly?
+  octave_int64 val = tc_offset.int64_scalar_value ();
+  off_t xoffset = val.value ();
 
   if (! error_state)
     {
@@ -2989,10 +2992,10 @@
   return retval;
 }
 
-long
+off_t
 octave_stream::tell (void)
 {
-  long retval = -1;
+  off_t retval = -1;
 
   if (stream_ok ())
     retval = rep->tell ();
@@ -3561,17 +3564,17 @@
               // Seek to skip when inside bounds of existing file.
               // Otherwise, write NUL to skip.
 
-              long orig_pos = tell ();
+              off_t orig_pos = tell ();
 
               seek (0, SEEK_END);
 
-              long eof_pos = tell ();
+              off_t eof_pos = tell ();
 
               // Is it possible for this to fail to return us to the
               // original position?
               seek (orig_pos, SEEK_SET);
 
-              long remaining = eof_pos - orig_pos;
+              off_t remaining = eof_pos - orig_pos;
 
               if (remaining < skip)
                 {
--- a/libinterp/interp-core/oct-stream.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/oct-stream.h	Mon Feb 11 15:45:26 2013 -0500
@@ -345,11 +345,11 @@
 
   // Position a stream at OFFSET relative to ORIGIN.
 
-  virtual int seek (long offset, int origin) = 0;
+  virtual int seek (off_t offset, int origin) = 0;
 
   // Return current stream position.
 
-  virtual long tell (void) = 0;
+  virtual off_t tell (void) = 0;
 
   // Return TRUE if EOF has been reached on this stream.
 
@@ -460,7 +460,7 @@
 
   std::string getl (octave_idx_type max_len, bool& err, const std::string& who /* = "getl" */);
   std::string gets (octave_idx_type max_len, bool& err, const std::string& who /* = "gets" */);
-  long skipl (long count, bool& err, const std::string& who /* = "skipl" */);
+  off_t skipl (off_t count, bool& err, const std::string& who /* = "skipl" */);
 
   octave_value do_scanf (scanf_format_list& fmt_list, octave_idx_type nr, octave_idx_type nc,
                          bool one_elt_size_spec, octave_idx_type& count,
@@ -524,13 +524,13 @@
   std::string gets (const octave_value& max_len, bool& err,
                     const std::string& who /* = "gets" */);
 
-  long skipl (long count, bool& err, const std::string& who /* = "skipl" */);
-  long skipl (const octave_value& count, bool& err, const std::string& who /* = "skipl" */);
+  off_t skipl (off_t count, bool& err, const std::string& who /* = "skipl" */);
+  off_t skipl (const octave_value& count, bool& err, const std::string& who /* = "skipl" */);
 
-  int seek (long offset, int origin);
+  int seek (off_t offset, int origin);
   int seek (const octave_value& offset, const octave_value& origin);
 
-  long tell (void);
+  off_t tell (void);
 
   int rewind (void);
 
--- a/libinterp/interp-core/oct-strstrm.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/oct-strstrm.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -29,7 +29,7 @@
 // Position a stream at OFFSET relative to ORIGIN.
 
 int
-octave_base_strstream::seek (long, int)
+octave_base_strstream::seek (off_t, int)
 {
   error ("fseek: invalid operation");
   return -1;
@@ -37,7 +37,7 @@
 
 // Return current stream position.
 
-long
+off_t
 octave_base_strstream::tell (void)
 {
   error ("ftell: invalid operation");
--- a/libinterp/interp-core/oct-strstrm.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/oct-strstrm.h	Mon Feb 11 15:45:26 2013 -0500
@@ -40,11 +40,11 @@
 
   // Position a stream at OFFSET relative to ORIGIN.
 
-  int seek (long, int);
+  int seek (off_t, int);
 
   // Return current stream position.
 
-  virtual long tell (void);
+  virtual off_t tell (void);
 
   // The name of the file.
 
@@ -104,7 +104,7 @@
 
   std::ostream *output_stream (void) { return 0; }
 
-  long tell (void) { return is.tellg (); }
+  off_t tell (void) { return is.tellg (); }
 
   std::streambuf *rdbuf (void) { return is ? is.rdbuf () : 0; }
 
--- a/libinterp/interp-core/xgl2ps.c	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interp-core/xgl2ps.c	Mon Feb 11 15:45:26 2013 -0500
@@ -20,8 +20,10 @@
 
 */
 
-// Wrapper for "imported" file gl2ps.c so that config.h will be included
-// before any other system or gnulib headers.
+/*
+ * Wrapper for "imported" file gl2ps.c so that config.h will be included
+ * before any other system or gnulib headers.
+ */
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
--- a/libinterp/interpfcn/defaults.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interpfcn/defaults.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -75,6 +75,7 @@
 std::string Vlocal_fcn_file_dir;
 
 std::string Voct_etc_dir;
+std::string Voct_locale_dir;
 
 std::string Voct_file_dir;
 std::string Vfcn_file_dir;
@@ -224,6 +225,12 @@
 }
 
 static void
+set_default_oct_locale_dir (void)
+{
+  Voct_locale_dir = subst_octave_home (OCTAVE_OCTLOCALEDIR);
+}
+
+static void
 set_default_oct_file_dir (void)
 {
   Voct_file_dir = subst_octave_home (OCTAVE_OCTFILEDIR);
@@ -428,6 +435,7 @@
   set_default_local_fcn_file_dir ();
 
   set_default_oct_etc_dir ();
+  set_default_oct_locale_dir ();
 
   set_default_fcn_file_dir ();
   set_default_oct_file_dir ();
--- a/libinterp/interpfcn/defaults.in.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interpfcn/defaults.in.h	Mon Feb 11 15:45:26 2013 -0500
@@ -156,6 +156,10 @@
 #define OCTAVE_OCTETCDIR %OCTAVE_OCTETCDIR%
 #endif
 
+#ifndef OCTAVE_OCTLOCALEDIR
+#define OCTAVE_OCTLOCALEDIR %OCTAVE_OCTLOCALEDIR%
+#endif
+
 #ifndef OCTAVE_OCTINCLUDEDIR
 #define OCTAVE_OCTINCLUDEDIR %OCTAVE_OCTINCLUDEDIR%
 #endif
@@ -164,6 +168,10 @@
 #define OCTAVE_OCTLIBDIR %OCTAVE_OCTLIBDIR%
 #endif
 
+#ifndef OCTAVE_OCTTESTSDIR
+#define OCTAVE_OCTTESTSDIR %OCTAVE_OCTTESTSDIR%
+#endif
+
 #ifndef OCTAVE_PREFIX
 #define OCTAVE_PREFIX %OCTAVE_PREFIX%
 #endif
@@ -195,6 +203,7 @@
 extern OCTINTERP_API std::string Vlocal_fcn_file_dir;
 
 extern OCTINTERP_API std::string Voct_etc_dir;
+extern OCTINTERP_API std::string Voct_locale_dir;
 
 extern OCTINTERP_API std::string Voct_file_dir;
 extern OCTINTERP_API std::string Vfcn_file_dir;
--- a/libinterp/interpfcn/file-io.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interpfcn/file-io.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -436,7 +436,7 @@
 
           bool err = false;
 
-          long tmp = os.skipl (count_arg, err, who);
+          off_t tmp = os.skipl (count_arg, err, who);
 
           if (! (error_state || err))
             retval = tmp;
--- a/libinterp/interpfcn/oct-hist.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interpfcn/oct-hist.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -91,7 +91,7 @@
 static int
 default_history_size (void)
 {
-  int size = 1024;
+  int size = 1000;
 
   std::string env_size = octave_env::getenv ("OCTAVE_HISTSIZE");
 
@@ -374,23 +374,21 @@
 
   string_vector hlist = command_history::list ();
 
-  int hist_count = hlist.length ();
+  int hist_count = hlist.length () - 1;  // switch to zero-based indexing
 
   // The current command line is already part of the history list by
   // the time we get to this point.  Delete it from the list.
 
-  hist_count -= 2;
-
   if (! insert_curr)
     command_history::remove (hist_count);
 
-  hist_count--;
+  hist_count--;  // skip last entry in history list
 
   // If no numbers have been specified, the default is to edit the
   // last command in the history list.
 
+  int hist_beg = hist_count;
   int hist_end = hist_count;
-  int hist_beg = hist_count;
 
   bool reverse = false;
 
@@ -436,9 +434,7 @@
 
   if (hist_end < hist_beg)
     {
-      int t = hist_end;
-      hist_end = hist_beg;
-      hist_beg = t;
+      std::swap (hist_end, hist_beg);
       reverse = true;
     }
 
@@ -496,10 +492,18 @@
   volatile octave_interrupt_handler old_interrupt_handler
     = octave_ignore_interrupts ();
 
-  system (cmd.c_str ());
+  int status = system (cmd.c_str ());
 
   octave_set_interrupt_handler (old_interrupt_handler);
 
+  // Check if text edition was successfull.  Abort the operation
+  // in case of failure.
+  if (status != EXIT_SUCCESS)
+    {
+      error ("edit_history: text editor command failed");
+      return;
+    }
+
   // Write the commands to the history file since source_file
   // disables command line history while it executes.
 
@@ -524,6 +528,8 @@
         }
       else
         edit_history_add_hist (line);
+
+      delete [] line;
     }
 
   file.close ();
@@ -729,7 +735,7 @@
 @deftypefn  {Built-in Function} {@var{val} =} history_size ()\n\
 @deftypefnx {Built-in Function} {@var{old_val} =} history_size (@var{new_val})\n\
 Query or set the internal variable that specifies how many entries\n\
-to store in the history file.  The default value is @code{1024},\n\
+to store in the history file.  The default value is @code{1000},\n\
 but may be overridden by the environment variable @w{@env{OCTAVE_HISTSIZE}}.\n\
 @seealso{history_file, history_timestamp_format_string, saving_history}\n\
 @end deftypefn")
--- a/libinterp/interpfcn/sysdep.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interpfcn/sysdep.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -653,9 +653,8 @@
       if (c == -1)
         c = 0;
 
-      char *s = new char [2];
-      s[0] = c;
-      s[1] = '\0';
+      char s[2] = {c, '\0'};
+
       retval = s;
     }
 
--- a/libinterp/interpfcn/toplev.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/interpfcn/toplev.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -1414,6 +1414,7 @@
       { true, "octetcdir", OCTAVE_OCTETCDIR },
       { true, "octincludedir", OCTAVE_OCTINCLUDEDIR },
       { true, "octlibdir", OCTAVE_OCTLIBDIR },
+      { true, "octtestsdir", OCTAVE_OCTTESTSDIR },
       { true, "prefix", OCTAVE_PREFIX },
       { true, "startupfiledir", OCTAVE_STARTUPFILEDIR },
       { false, "version", OCTAVE_VERSION },
--- a/libinterp/octave-value/ov-fcn-inline.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/libinterp/octave-value/ov-fcn-inline.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -645,7 +645,8 @@
 be noted that i, and j are ignored as arguments due to the\n\
 ambiguity between their use as a variable or their use as an inbuilt\n\
 constant.  All arguments followed by a parenthesis are considered\n\
-to be functions.\n\
+to be functions. If no arguments are found, a function taking a single\n\
+argument named @code{x} will be created.\n\
 \n\
 If the second and subsequent arguments are character strings,\n\
 they are the names of the arguments of the function.\n\
@@ -752,15 +753,19 @@
 
               // Sort the arguments into ascii order.
               fargs.sort ();
+
+              if (fargs.length () == 0)
+                fargs.append (std::string ("x"));
+
             }
           else if (nargin == 2 && args(1).is_numeric_type ())
             {
-              if (! args(1).is_scalar_type ()) 
+              if (! args(1).is_scalar_type ())
                 {
                   error ("inline: N must be an integer");
                   return retval;
                 }
-              
+
               int n = args(1).int_value ();
 
               if (! error_state)
@@ -825,9 +830,11 @@
 %! fn = inline ("x.^2 + 1");
 %!assert (feval (fn, 6), 37)
 %!assert (fn (6), 37)
-## FIXME: Need tests for other 2 calling forms of inline()
+%!assert (feval (inline ("sum (x(:))"), [1 2; 3 4]), 10)
+%!assert (feval (inline ("sqrt (x^2 + y^2)", "x", "y"), 3, 4), 5)
+%!assert (feval (inline ("exp (P1*x) + P2", 3), 3, 4, 5), exp(3*4) + 5)
 
-## Test input validation 
+## Test input validation
 %!error inline ()
 %!error <STR argument must be a string> inline (1)
 %!error <N must be an integer> inline ("2", ones (2,2))
--- a/liboctave/Makefile.am	Mon Feb 11 15:24:56 2013 -0500
+++ b/liboctave/Makefile.am	Mon Feb 11 15:45:26 2013 -0500
@@ -75,6 +75,8 @@
 ## C++ files with templates that are #included, not compiled
 TEMPLATE_SRC =
 
+## A list of all files that could include tests
+
 include array/module.mk
 include numeric/module.mk
 include operators/module.mk
@@ -117,5 +119,21 @@
   -bindir $(bindir) \
   $(LIBOCTAVE_LINK_OPTS)
 
+## Rules to build test files
+
+LIBOCTAVE_TST_SRC = \
+  $(array_libarray_la_SOURCES) \
+  $(numeric_libnumeric_la_SOURCES) \
+  $(system_libsystem_la_SOURCES) \
+  $(util_libutil_la_SOURCES)
+
+TST_FILES_SRC := $(shell $(top_srcdir)/build-aux/find-files-with-tests.sh "$(srcdir)" $(LIBOCTAVE_TST_SRC))
+
+TST_FILES := $(addsuffix -tst,$(TST_FILES_SRC))
+
+liboctavetestsdir := $(octtestsdir)/liboctave
+
+nobase_liboctavetests_DATA = $(TST_FILES)
+
 DISTCLEANFILES += $(BUILT_INCS)
 
--- a/liboctave/numeric/oct-fftw.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/liboctave/numeric/oct-fftw.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -35,6 +35,10 @@
 #include "oct-locbuf.h"
 #include "singleton-cleanup.h"
 
+#if defined (HAVE_FFTW3_THREADS)
+#include "nproc.h"
+#endif
+
 octave_fftw_planner *octave_fftw_planner::instance = 0;
 
 // Helper class to create and cache FFTW plans for both 1D and
@@ -65,6 +69,16 @@
   inplace[0] = inplace[1] = false;
   n[0] = n[1] = dim_vector ();
 
+#if defined (HAVE_FFTW3_THREADS)
+  int init_ret = fftw_init_threads ();
+  if (!init_ret)
+    (*current_liboctave_error_handler) ("Error initializing FFTW threads");
+  //Use number of processors available to the current process
+  //This can be later changed with fftw ("threads", nthreads)
+  nthreads = num_processors (NPROC_CURRENT);
+  fftw_plan_with_nthreads (nthreads);
+#endif
+
   // If we have a system wide wisdom file, import it.
   fftw_import_system_wisdom ();
 }
@@ -395,6 +409,16 @@
   inplace[0] = inplace[1] = false;
   n[0] = n[1] = dim_vector ();
 
+#if defined (HAVE_FFTW3F_THREADS)
+  int init_ret = fftwf_init_threads ();
+  if (!init_ret)
+    (*current_liboctave_error_handler) ("Error initializing FFTW3F threads");
+  //Use number of processors available to the current process
+  //This can be later changed with fftw ("threads", nthreads)
+  nthreads = num_processors (NPROC_CURRENT);
+  fftwf_plan_with_nthreads (nthreads);
+#endif
+
   // If we have a system wide wisdom file, import it.
   fftwf_import_system_wisdom ();
 }
--- a/liboctave/numeric/oct-fftw.h	Mon Feb 11 15:24:56 2013 -0500
+++ b/liboctave/numeric/oct-fftw.h	Mon Feb 11 15:45:26 2013 -0500
@@ -98,6 +98,24 @@
     return instance_ok () ? instance->do_method (_meth) : dummy;
   }
 
+#if defined (HAVE_FFTW3F_THREADS)
+  static void threads (int _nthreads)
+  {
+    if (instance_ok () && _nthreads != threads ())
+      {
+        instance->nthreads = _nthreads;
+        fftw_plan_with_nthreads (_nthreads);
+        //Clear the current plans
+        instance->rplan = instance->plan[0] = instance->plan[1] = 0;
+      }
+  }
+
+  static int threads ()
+  {
+    return instance_ok () ? instance->nthreads : 0;
+  }
+#endif
+
 private:
 
   // No copying!
@@ -169,6 +187,11 @@
   dim_vector rn;
 
   bool rsimd_align;
+
+#if defined (HAVE_FFTW3_THREADS)
+  //number of threads when compiled with Multi-threading support
+  int nthreads;
+#endif
 };
 
 class
@@ -235,6 +258,24 @@
     return instance_ok () ? instance->do_method (_meth) : dummy;
   }
 
+#if defined (HAVE_FFTW3F_THREADS)
+  static void threads (int _nthreads)
+  {
+    if (instance_ok () && _nthreads != threads ())
+      {
+        instance->nthreads = _nthreads;
+        fftwf_plan_with_nthreads (_nthreads);
+        //Clear the current plans
+        instance->rplan = instance->plan[0] = instance->plan[1] = 0;
+      }
+  }
+
+  static int threads ()
+  {
+    return instance_ok () ? instance->nthreads : 0;
+  }
+#endif
+
 private:
 
   // No copying!
@@ -306,6 +347,11 @@
   dim_vector rn;
 
   bool rsimd_align;
+
+#if defined (HAVE_FFTW3F_THREADS)
+  //number of threads when compiled with Multi-threading support
+  int nthreads;
+#endif
 };
 
 class
--- a/liboctave/numeric/randmtzig.c	Mon Feb 11 15:24:56 2013 -0500
+++ b/liboctave/numeric/randmtzig.c	Mon Feb 11 15:45:26 2013 -0500
@@ -637,7 +637,7 @@
       const int idx = (int)(ri & 0xFF);
       const double x = ri * we[idx];
       if (ri < ke[idx])
-        return x;               // 98.9% of the time we return here 1st try
+        return x;               /* 98.9% of the time we return here 1st try */
       else if (idx == 0)
         {
           /* As stated in Marsaglia and Tsang
@@ -804,7 +804,7 @@
       const int idx = (int)(ri & 0xFF);
       const float x = ri * fwe[idx];
       if (ri < fke[idx])
-        return x;               // 98.9% of the time we return here 1st try
+        return x;               /* 98.9% of the time we return here 1st try */
       else if (idx == 0)
         {
           /* As stated in Marsaglia and Tsang
--- a/liboctave/util/cmd-hist.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/liboctave/util/cmd-hist.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -192,8 +192,14 @@
       if (s.empty ()
           || (s.length () == 1 && (s[0] == '\r' || s[0] == '\n')))
         return;
+     
+      // Strip newline before adding to list
+      std::string stmp = s;
+      int stmp_len = stmp.length ();
+      if (stmp[stmp_len - 1] == '\n')
+        stmp.resize (stmp_len - 1);
 
-      lines_this_session += ::octave_add_history (s.c_str (), history_control);
+      lines_this_session += ::octave_add_history (stmp.c_str (), history_control);
     }
 }
 
--- a/m4/acinclude.m4	Mon Feb 11 15:24:56 2013 -0500
+++ b/m4/acinclude.m4	Mon Feb 11 15:45:26 2013 -0500
@@ -93,6 +93,57 @@
   fi
 ])
 dnl
+dnl Check whether the FFTW library supports multi-threading. This macro
+dnl should be called once per FFTW precision passing in the library
+dnl variant (e.g. "fftw3") and a function in the thread support API
+dnl (e.g. "fftw_plan_with_nthreads"). Depending on how FFTW was built,
+dnl the thread functions could be compiled into the main FFTW library or
+dnl could be a separate add-on library that is passed to the linker
+dnl ahead of the main FFTW library.
+dnl
+AC_DEFUN([OCTAVE_CHECK_FFTW_THREADS], [
+  ac_octave_save_CPPFLAGS="$CPPFLAGS"
+  ac_octave_save_LDFLAGS="$LDFLAGS"
+  ac_octave_save_LIBS="$LIBS"
+  CPPFLAGS="$m4_toupper([$1])_CPPFLAGS $CPPFLAGS"
+  LDFLAGS="$m4_toupper([$1])_LDFLAGS $LDFLAGS"
+  LIBS="$m4_toupper([$1])_LIBS $LIBS"
+  AC_CACHE_CHECK([for $1 multi-threading support],
+    [octave_cv_[$1]_threads_lib],
+    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+      #include <fftw3.h>
+      ]], [[
+      $2 (2);
+      ]])],
+      [octave_cv_[$1]_threads_lib=yes],
+      [LIBS="-l[$1]_threads $LIBS"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+        #include <fftw3.h>
+        ]], [[
+        $2 (2);
+        ]])],
+        [octave_cv_[$1]_threads_lib="-l[$1]_threads"],
+        [octave_cv_[$1]_threads_lib=no])
+    ])
+  ])
+  case $octave_cv_[$1]_threads_lib in
+    -l*)
+      m4_toupper([$1])_LIBS="$octave_cv_[$1]_threads_lib $m4_toupper([$1])_LIBS"
+      ;;
+    no)
+      AC_MSG_WARN([No $1 multi-threading support found.])
+      AC_MSG_WARN([The single-threaded library will be used instead.])
+      ;;
+  esac
+  if test $octave_cv_[$1]_threads_lib != no; then
+    AC_DEFINE([HAVE_]m4_toupper([$1])[_THREADS], 1,
+      [Define to 1 if ]m4_toupper([$1])[ has multi-threading support.])
+  fi
+  CPPFLAGS="$ac_octave_save_CPPFLAGS"
+  LDFLAGS="$ac_octave_save_LDFLAGS"
+  LIBS="$ac_octave_save_LIBS"
+])
+dnl
 dnl Check whether a math mapper function is available in <cmath>.
 dnl Will define HAVE_CMATH_FUNC if there is a double variant and
 dnl HAVE_CMATH_FUNCF if there is a float variant.
@@ -1486,7 +1537,12 @@
   dnl exist which will then fool the 'test -z' line.
   AC_CHECK_PROG(MKINFO, makeinfo, makeinfo, [])
   if test -z "$MKINFO"; then
-    AC_MSG_ERROR([makeinfo program required for reading documentation])
+    warn_makeinfo="
+
+I didn't find makeinfo, which is required for reading documentation.
+You may install a copy later for Octave to use.
+"
+    OCTAVE_CONFIGURE_WARNING([warn_makeinfo])
   fi
 ])
 dnl
--- a/run-octave.in	Mon Feb 11 15:24:56 2013 -0500
+++ b/run-octave.in	Mon Feb 11 15:45:26 2013 -0500
@@ -63,7 +63,7 @@
     shift
   elif [ "x$1" = "x-gud2" ]; then
     ## The latest version of gud needs -i=mi. There isn't a good way to check
-    ## this at configure time, so we just add a gdb2 flag
+    ## this at configure time, so we just add a gud2 flag
     driver="gdb -i=mi --args"
     shift
   elif [ "x$1" = "x-valgrind" ]; then
@@ -80,6 +80,7 @@
 
 OCTAVE_SITE_INITFILE="$top_srcdir/scripts/startup/main-rcfile" \
 OCTAVE_DEFAULT_QT_SETTINGS="$top_srcdir/libgui/default-qt-settings" \
+OCTAVE_LOCALE_DIR="$top_srcdir/libgui/languages" \
 OCTAVE_JAVA_DIR="$builddir/scripts/java" \
   exec $builddir/libtool --mode=execute $driver \
     "$octave_executable" --no-init-path --path="$LOADPATH" \
--- a/scripts/miscellaneous/edit.m	Mon Feb 11 15:24:56 2013 -0500
+++ b/scripts/miscellaneous/edit.m	Mon Feb 11 15:45:26 2013 -0500
@@ -243,10 +243,11 @@
   if (nargin < 1)
     if (exist (FUNCTION.HOME, "dir") == 7 && (isunix () || ! ispc ()))
       system (cstrcat ("cd \"", FUNCTION.HOME, "\" ; ",
-                      sprintf (FUNCTION.EDITOR, "")),
+                      sprintf (undo_string_escapes (FUNCTION.EDITOR), "")),
               [], FUNCTION.MODE);
     else
-      system (sprintf (FUNCTION.EDITOR,""), [], FUNCTION.MODE);
+      system (sprintf (undo_string_escapes (FUNCTION.EDITOR), ""),
+              [], FUNCTION.MODE);
     endif
     return;
   endif
@@ -328,7 +329,8 @@
       ## If the file exists, then edit it.
       if (FUNCTION.EDITINPLACE)
         ## Edit in place even if it is protected.
-        system (sprintf (FUNCTION.EDITOR, cstrcat ("\"", fileandpath, "\"")),
+        system (sprintf (undo_string_escapes (FUNCTION.EDITOR),
+                         cstrcat ("\"", fileandpath, "\"")),
                 [], FUNCTION.MODE);
         return;
       else
@@ -345,7 +347,8 @@
         else
           fclose (fid);
         endif
-        system (sprintf (FUNCTION.EDITOR, cstrcat ("\"", fileandpath, "\"")),
+        system (sprintf (undo_string_escapes (FUNCTION.EDITOR),
+                         cstrcat ("\"", fileandpath, "\"")),
                 [], FUNCTION.MODE);
         return;
       endif
@@ -361,7 +364,8 @@
       case {"cc", "m"}
         0;
       otherwise
-        system (sprintf (FUNCTION.EDITOR, cstrcat ("\"", fileandpath, "\"")),
+        system (sprintf (undo_string_escapes (FUNCTION.EDITOR),
+                         cstrcat ("\"", fileandpath, "\"")),
                 [], FUNCTION.MODE);
         return;
     endswitch
@@ -512,7 +516,8 @@
     fclose (fid);
 
     ## Finally we are ready to edit it!
-    system (sprintf (FUNCTION.EDITOR, cstrcat ("\"", fileandpath, "\"")),
+    system (sprintf (undo_string_escapes (FUNCTION.EDITOR),
+                     cstrcat ("\"", fileandpath, "\"")),
             [], FUNCTION.MODE);
             
   endif
--- a/scripts/optimization/fsolve.m	Mon Feb 11 15:24:56 2013 -0500
+++ b/scripts/optimization/fsolve.m	Mon Feb 11 15:45:26 2013 -0500
@@ -96,7 +96,7 @@
 ## employ OutputFcn: After a vector is evaluated for residuals, if OutputFcn is
 ## called with that vector, then the intermediate results should be saved for
 ## future Jacobian evaluation, and should be kept until a Jacobian evaluation
-## is requested or until outputfcn is called with a different vector, in which
+## is requested or until OutputFcn is called with a different vector, in which
 ## case they should be dropped in favor of this most recent vector.  A short
 ## example how this can be achieved follows:
 ##
--- a/scripts/pkg/private/configure_make.m	Mon Feb 11 15:24:56 2013 -0500
+++ b/scripts/pkg/private/configure_make.m	Mon Feb 11 15:45:26 2013 -0500
@@ -28,11 +28,11 @@
     src = fullfile (packdir, "src");
     octave_bindir = octave_config_info ("bindir");
     ver = version ();
-    mkoctfile = fullfile (octave_bindir, sprintf ("mkoctfile-%s", ver));
-    octave_config = fullfile (octave_bindir, sprintf ("octave-config-%s", ver));
+    mkoctfile_program = fullfile (octave_bindir, sprintf ("mkoctfile-%s", ver));
+    octave_config_program = fullfile (octave_bindir, sprintf ("octave-config-%s", ver));
     octave_binary = fullfile (octave_bindir, sprintf ("octave-%s", ver));
-    cenv = {"MKOCTFILE"; mkoctfile;
-            "OCTAVE_CONFIG"; octave_config;
+    cenv = {"MKOCTFILE"; mkoctfile_program;
+            "OCTAVE_CONFIG"; octave_config_program;
             "OCTAVE"; octave_binary;
             "INSTALLDIR"; desc.dir};
     scenv = sprintf ("%s=\"%s\" ", cenv{:});
@@ -40,16 +40,16 @@
     if (exist (fullfile (src, "configure"), "file"))
       flags = "";
       if (isempty (getenv ("CC")))
-        flags = cstrcat (flags, " CC=\"", octave_config_info ("CC"), "\"");
+        flags = cstrcat (flags, " CC=\"", mkoctfile ("-p", "CC"), "\"");
       endif
       if (isempty (getenv ("CXX")))
-        flags = cstrcat (flags, " CXX=\"", octave_config_info ("CXX"), "\"");
+        flags = cstrcat (flags, " CXX=\"", mkoctfile ("-p", "CXX"), "\"");
       endif
       if (isempty (getenv ("AR")))
-        flags = cstrcat (flags, " AR=\"", octave_config_info ("AR"), "\"");
+        flags = cstrcat (flags, " AR=\"", mkoctfile ("-p", "AR"), "\"");
       endif
       if (isempty (getenv ("RANLIB")))
-        flags = cstrcat (flags, " RANLIB=\"", octave_config_info ("RANLIB"), "\"");
+        flags = cstrcat (flags, " RANLIB=\"", mkoctfile ("-p", "RANLIB"), "\"");
       endif
       [status, output] = shell (cstrcat ("cd '", src, "'; ", scenv,
                                          "./configure --prefix=\"",
--- a/scripts/pkg/private/get_forge_pkg.m	Mon Feb 11 15:24:56 2013 -0500
+++ b/scripts/pkg/private/get_forge_pkg.m	Mon Feb 11 15:45:26 2013 -0500
@@ -39,7 +39,7 @@
   name = tolower (name);
 
   ## Try to download package's index page.
-  [html, succ] = urlread (sprintf ("http://octave.sourceforge.net/%s/index.html", name));
+  [html, succ] = urlread (sprintf ("http://packages.octave.org/%s/index.html", name));
   if (succ)
     ## Remove blanks for simpler matching.
     html(isspace(html)) = [];
@@ -52,17 +52,17 @@
       ver = t{1}{1};
       if (nargout > 1)
         # Build download string.
-        urlbase = "http://downloads.sourceforge.net/octave/%s-%s.tar.gz?download";
-        url = sprintf (urlbase, name, ver);
-        ## Verify that the string exists on the page.
-        if (isempty (strfind (html, url)))
+        pkg_file = sprintf ("%s-%s.tar.gz", name, ver);
+        url = cstrcat ("http://packages.octave.org/download/", pkg_file);
+        ## Verify that the package string exists on the page.
+        if (isempty (strfind (html, pkg_file)))
           warning ("get_forge_pkg: download URL not verified");
         endif
       endif
     endif
   else
     ## Try get the list of all packages.
-    [html, succ] = urlread ("http://octave.sourceforge.net/packages.php");
+    [html, succ] = urlread ("http://packages.octave.org/packages.php");
     if (succ)
       t = regexp (html, "<div class=""package"" id=""(\\w+)"">", "tokens");
       t = horzcat (t{:});
--- a/scripts/pkg/private/list_forge_packages.m	Mon Feb 11 15:24:56 2013 -0500
+++ b/scripts/pkg/private/list_forge_packages.m	Mon Feb 11 15:45:26 2013 -0500
@@ -23,7 +23,7 @@
 ## @end deftypefn
 
 function list = list_forge_packages ()
-  [list, succ] = urlread ("http://octave.sourceforge.net/list_packages.php");
+  [list, succ] = urlread ("http://packages.octave.org/list_packages.php");
   if (succ)
     list = strsplit (list, " \n\t", true);
   else
--- a/scripts/plot/legend.m	Mon Feb 11 15:24:56 2013 -0500
+++ b/scripts/plot/legend.m	Mon Feb 11 15:45:26 2013 -0500
@@ -874,6 +874,7 @@
         if (addprops)
           addlistener (hlegend, "edgecolor", @updatelegendtext);
           addlistener (hlegend, "textcolor", @updatelegendtext);
+          addlistener (hlegend, "fontsize", @updatelegendtext);
           addlistener (hlegend, "interpreter", @updatelegendtext);
           addlistener (hlegend, "location", @updatelegend);
           addlistener (hlegend, "orientation", @updatelegend);
@@ -915,7 +916,10 @@
   text_kids = findobj (kids, "-property", "interpreter", "type", "text");
   interpreter = get (h, "interpreter");
   textcolor = get (h, "textcolor");
-  set (text_kids, "interpreter", interpreter, "color", textcolor);
+  fontsize = get (h, "fontsize");
+  set (text_kids, "interpreter", interpreter,
+                  "fontsize", fontsize,
+                  "color", textcolor);
 endfunction
 
 function hideshowlegend (h, d, ca, pos1, pos2)
--- a/scripts/plot/module.mk	Mon Feb 11 15:24:56 2013 -0500
+++ b/scripts/plot/module.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -150,6 +150,7 @@
   plot/plotyy.m \
   plot/polar.m \
   plot/print.m \
+  plot/printd.m \
   plot/quiver.m \
   plot/quiver3.m \
   plot/rectangle.m \
@@ -174,6 +175,7 @@
   plot/stairs.m \
   plot/stem.m \
   plot/stem3.m \
+  plot/stemleaf.m \
   plot/struct2hdl.m \
   plot/subplot.m \
   plot/surf.m \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/plot/printd.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,101 @@
+## Copyright (C) 2013 Michael D. Godfrey
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at your option) any
+## later version.
+##
+## Octave 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 Octave; see the file COPYING. If not,
+## see <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {} printd (@var{obj}, @var{filename})
+##
+## Convert any object acceptable to @code{disp} into the format
+## selected by the suffix of @var{filename}.
+##
+## This function is intended to facilitate manipulation of the output
+## of functions such as @code{stemleaf}.
+## @seealso{stemleaf}
+## @end deftypefn
+
+## Author: Michael D. Godfrey <michaeldgodfrey@gmail.com>
+## Description: Convert objects into other file formats.
+
+function printd (obj, filename)
+  ## Convert any object acceptable to disp() into various display formats.
+  ## obj is the input object.
+  ## filename is the output file (with required suffix).
+
+  ## Extract .suffix from filename
+  if ((sufix = rindex (filename, ".")) <= 0)
+    error ("The output filename: %s requires a suffix.\nOptions are: pdf ps eps txt jpg jpeg", filename);
+  endif
+  opt = substr (filename, sufix+1);
+  [pf, tempf, mag] = mkstemp ("oct-XXXXXX", 1);  # Safe version of tmpnam()
+  fprintf (pf, "%s", disp (obj));
+  frewind (pf);
+
+  ## It seems best to only use convert for image output.  Its ps and pdf
+  ## are badly rendered.
+  opt = lower (opt);
+  switch opt
+    case {"pdf"}
+      enscr = sprintf (
+                       "enscript --no-header -o %s.ps %s ; ps2pdf %s.ps %s.pdf; mv %s.pdf %s;exit",...
+                       tempf, tempf, tempf, tempf, tempf, filename);
+      system (enscr);
+      delete ([tempf ".ps"]);
+    case {"ps"}
+      enscr = sprintf ("enscript --no-header -o %s %s ; exit", filename, tempf);
+      system (enscr);
+    case {"eps"}
+      enscr = sprintf (
+                       "enscript --no-header -o %s.ps %s ; ps2eps --ignoreBB %s.ps; mv %s.eps %s; exit",...
+                       tempf, tempf, tempf, tempf, filename);
+      system (enscr);
+      delete ([tempf ".ps"]);
+    case {"txt"}
+      enscr = sprintf ("cp %s %s", tempf, filename);
+      system (enscr);
+    case {"jpg" "jpeg"}
+      enscr = sprintf ("convert -trim txt:%s  jpg:%s", tempf, filename);
+      system (enscr);
+    otherwise
+      fclose (pf);
+      delete (tempf);
+      error ("Unknown conversion type: %s.\nOptions are: pdf ps eps txt jpg jpeg", opt);
+
+  endswitch
+  fclose (pf);
+  delete (tempf);
+  printf ("%s file %s written\n", opt, filename);
+endfunction
+
+%!demo
+%!  r2 = ["stem step: 10, data: unsorted.\nHinges:    lo: 12, hi: 42\n";...
+%! "   1 | 22118";"   2 | 28";"   3 | 98";"   4 | 244";"   5 | 2"];
+%! printd (r2, "test_p.txt");
+%! system ("cat test_p.txt");
+%! delete ("test_p.txt");
+
+%!test
+%! r2 = ["stem step: 10, data: unsorted.\nHinges:    lo: 12, hi: 42\n";...
+%! "   1 | 22118";"   2 | 28";"   3 | 98";"   4 | 244";"   5 | 2"];
+%! printd (r2, "test_p.txt");
+%! r4 = fileread ("test_p.txt");
+%! delete ("test_p.txt");
+%! r2 = disp (r2);
+%! assert (r4, r2)
+
+
--- a/scripts/plot/private/__go_draw_axes__.m	Mon Feb 11 15:24:56 2013 -0500
+++ b/scripts/plot/private/__go_draw_axes__.m	Mon Feb 11 15:45:26 2013 -0500
@@ -1591,7 +1591,19 @@
       else
         fontspec = "";
       endif
-      colorspec = get_text_colorspec (hlgnd.textcolor, mono);
+      textcolors = get (findobj (hlgnd.children, "type", "text"), "color");
+      if (iscell (textcolors))
+        textcolors = cell2mat (textcolors);
+        textcolors = unique (textcolors, "rows");
+      endif
+      if (rows (textcolors) > 1)
+        ## Gnuplot is unable to assign arbitrary colors to each text entry
+        ## for the key/legend.  But, the text color can be set to match the
+        ## color of the plot object.
+        colorspec = "textcolor variable";
+      else
+        colorspec = get_text_colorspec (textcolors, mono);
+      endif
       fprintf (plot_stream, "set key %s %s;\nset key %s %s %s %s %s;\n",
                inout, pos, box, reverse, horzvert, fontspec, colorspec);
     else
@@ -2350,7 +2362,7 @@
   persistent sym = __setup_sym_table__ ();
   persistent flds = fieldnames (sym);
 
-  [s, e, m] = regexp (str,'\\\\([a-zA-Z]+|0)','start','end','matches');
+  [s, e, m] = regexp (str, "\\\\([a-zA-Z]+|0)", "start", "end", "matches");
 
   for i = length (s) : -1 : 1
     ## special case for "\0"  and replace with "{/Symbol \306}'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/plot/stemleaf.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,318 @@
+## Copyright (C) 2013 Michael D. Godfrey
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at your option) any
+## later version.
+##
+## Octave 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 Octave; see the file COPYING. If not,
+## see <http://www.gnu.org/licenses/>.
+
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {} stemleaf (@var{x})
+## @deftypefnx {Function File} {@var{plot} =} stemleaf (@var{x}, @var{opt})
+##
+## Compute and display a stem and leaf plot of the vector @var{x}.
+##
+## The @var{x} vector is converted to integer by @var{x} = @code{fix} (@var{x}). 
+## If an output argument is provided, the plot is returned as
+## an array of strings.  The first element is the heading
+## followed by an element for each stem.
+## The default stem step is 10.  
+## The @var{x} vector should be integers.  It will be treated so that
+## the last digit is the leaf value and the other digits are
+## the stems.
+## The leaf digits are not sorted.  If sorted leaf values
+## are wanted, use @code{sort} (@var{x}) before calling @code{stemleaf} (@var{x}).
+## The stem and leaf plot is described in: Ch. 3,
+## Exploratory Data Analysis by J. W. Tukey, Addison-Wesley, 1977.
+## @seealso{hist, printd}
+## @end deftypefn
+
+## Author: Michael D. Godfrey <michaeldgodfrey@gmail.com>
+## Description: Compute stem and leaf plot
+
+function varargout = stemleaf (x, stem_unit)
+  ## Compute and display a stem and leaf plot of the vector x. The x
+  ## vector is converted to integer by x = fix(x). If an output argument
+  ## is provided, the plot is returned as an array of strings.  The
+  ## first element is the heading followed by an element for each stem.
+  ##
+  ## The default stem step is 10.  If stem_unit is provided the stem
+  ## step is set to: 10^(stem_unit+1) The x vector should be integers.
+  ## It will be treated so that the last digit is the leaf value and the
+  ## other digits are the stems.
+  ##
+  ## When we first implemented stem and leaf plots in the early 1960's
+  ## there was some discussion about sorting vs. leaving the leaf
+  ## entries in the original order in the data. We decided in favor or
+  ## sorting the leaves for most purposes. This is the choice
+  ## implemented in the SNAP/IEDA system that was written at that time.
+  ##
+  ## SNAP/IEDA and particularly its stem and leaf plotting were further
+  ## developed by Hale Trotter, David Hoagland (at Princeton and MIT)
+  ## and others.
+  ##
+  ## Tukey, in EDA, generally uses unsorted leaves.  In addition, he
+  ## described a wide range of additional display formats.  This
+  ## implementation does not sort the leaves, but if the x vector is
+  ## sorted then the leaves come out sorted.  A simple display format is
+  ## used.
+  ##
+  ## I doubt if providing other options is worthwhile.  The code can
+  ## quite easily be modified to provide specific display results.  Or,
+  ## the returned output string can be edited. The returned output is an
+  ## array of strings with each row containing a line of the plot
+  ## preceded by the lines of header text as the first row.  This
+  ## facilitates annotation.
+  ##
+  ## Note that the code has some added complexity due to the need to
+  ## distinguish both + and - 0 stems. The +- stem values are essential
+  ## for all plots which span 0. After dealing with +-0 stems, the added
+  ## complexity of putting +- data values in the correct stem is minor,
+  ## but the sign of 0 leaves must be checked.  And, the cases where the
+  ## stems start or end at +- 0 must also be considered.
+  ##
+  ## The fact that IEEE floating point defines +- 0 helps make this
+  ## easier.
+  ##
+  ##
+  ## Michael D. Godfrey   January 2013
+
+  ## More could be implemented for better data scaling. And, of course,
+  ## other options for the kinds of plots described by Tukey could be
+  ## provided. This may best be left to users.
+
+  if (nargin >= 2)
+    stem_step = 10^(stem_unit+1);
+  else
+    stem_step = 10;
+  endif
+  if (any (x == int32 (x)) == 0)
+    printf ('Input vector truncated to integer values.\n')
+    x = fix (x);
+  endif
+
+  ## Avoid use of int32 due to:
+
+  ##  floor (int32 (-44)/10) == -4 and floor (int32 (-46)/10) = -5 !!!
+  ##  x  = sort (fix (x));  % User can decide about sorting x.
+  ##  x  = fix (x);
+  ##  %Adjust scale if too small.
+  ##  while any(abs((fix(x) - x)) >= abs(x/100))
+  ##    x =10*x;
+  ##  endwhile
+
+  ## Note that IEEE 754 states that -+ 0 should compare equal. This has
+  ## led to C sort (and therefore Octave) treating them as equal.  Thus,
+  ## sort([ -1 0 -0 1]) yields: -1 0 -0 1. and, sort([-1 -0 0 1])
+  ## yields: -1 -0 0 1. This means that stem-and-leaf plotting cannot
+  ## rely on sort to order the data as needed for display.
+
+  if (all((sort(x) == x)) == 1)
+    hsort = 'sorted.';
+  else
+    hsort = 'unsorted.';
+  endif
+  nx = max (size (x));
+  ## Determine stem values
+  if (min(x) < 0)
+    if (signbit(max(x)) == 0)     # max is positive
+      stems = [fix(min(x)/stem_step)-1 : -1 -0];
+      stems = [stems 0 : fix(max(x)/stem_step)+1 ];
+    else
+      if (max(x) < 0)
+        stems = [(fix(min(x)/stem_step)-1) : fix(max(x)/stem_step)];
+      else
+        stems = [(fix(min(x)/stem_step)-1) : -1 -0];
+        stems = [stems 0 : fix(max(x)/stem_step)];
+      endif
+    endif
+  else                            # All stems are > 0
+    stems = [fix(min(x)/stem_step) : fix(max(x)/stem_step) + 1];
+  endif
+  ##stems
+  ##x
+  nstems = max(size(stems));
+  ## compute hinges at +- 1.5 * quartiles
+  ## this requires sorted data!
+  xs = sort (x);                   # Note that sort preserves -0
+  threeh = 1.5;
+  two    = 2.0;
+  j  = idivide(nx, 4, "fix") + 1;  # Use F95 truncation.
+  k  = nx - j + 1;
+  hl = xs (j);
+  hu = xs (k);
+  if ( (nx + 1) ==  (4 * j) ) 
+    hl = (xs (j + 1) + hl) / two;
+    hu = (xs (k - 1) + hu) / two;
+  endif
+
+  ##     ::::::::  determine h-spread (dh) and fences  ::::::::
+  dh = hu - hl;
+  fu = hu + threeh * dh;
+  fl = hl - threeh * dh;
+
+  ##     ::::::::  find value adjacent to lower fence  ::::::::
+  for i = 1:j
+    if ( xs (i) >= fl ) 
+      continue; 
+    endif
+  endfor
+  ilow = i;
+  xlo = xs (ilow);
+
+  ##     :::::::: find value adjacent to upper fence  ::::::::
+  for  i = 1:j
+    if ( xs (nx -i + 1) <= fu )
+      continue;
+    endif
+  endfor
+
+  ihi = nx - i + 1;
+  xhi = xs (ihi);
+
+  ## Heading for output:
+  plot_out = "";
+  plot_out = [plot_out sprintf("stem step: %i, data: %s\nHinges:    lo: %g, hi: %g\n",
+                               stem_step, hsort, xlo, xhi)];
+
+  ## This may appear to be a good place to use vectorization using the
+  ## stem and data arrays but the necessary special case treatment of 0
+  ## and -0 seems to result in little reduction of complexity, and since
+  ## this algorithm is for small data vectors only there would be
+  ## practically no performance improvement.
+
+  ## Determine leaves for each stem:
+  for kx = 2:nstems
+    line_out = "";
+    steml    = "";
+    ## Build a string of leaf digits for stem(kx) if stem(kx) <= 0, or
+    ## stem(kx-1) if stem(kx) > 0
+
+    ## stems -+ 0 have to be handled as special cases.
+    for xi = 1:nx
+      if(signbit(stems(kx)) == 1)
+        t1 = ((x(xi) <= stems(kx)*10) && (x(xi) > (stems(kx-1)*10)));
+      else
+        t1 = ((x(xi) < stems(kx)*10) && (x(xi) >= (stems(kx-1)*10)));
+      endif
+      ## Special tests for stem -+ 0
+      if ((stems(kx) == 0) && signbit(stems(kx)) && (x(xi) == 0)) && !signbit(x(xi))
+        t1 = 0;
+      endif
+      if ((stems(kx-1) == 0) && !signbit(stems(kx-1)) && (x(xi) == 0)) && signbit(x(xi))
+        t1 = 0;
+      endif
+      ## Create line as a string
+      if t1
+        if (stems(kx) <= 0)
+          xz =  abs (x(xi) - stems(kx)*10);
+        else
+          xz =  abs (x(xi) - stems(kx-1)*10);
+        endif
+        if ((stems(kx) == 0) && signbit(stems(kx)))
+          steml = [steml sprintf("%d", abs(x(xi) - stems(kx)*10))];
+        else
+          steml = [steml sprintf("%d", xz)];
+        endif
+      endif    %  t1
+    endfor    % xi = 1:nx
+
+    ## Set correct -0
+    if ((stems(kx) == 0) && signbit(stems(kx)))
+      line_out = [line_out sprintf("  -0 | %s",  steml)];  % -0 stem.
+    else
+      if( stems(kx) < 0)
+        line_out = [line_out sprintf("%4d | %s", stems(kx), steml)];
+      else
+        if stems(kx) > 0
+          line_out = [line_out sprintf("%4d | %s", stems(kx-1), steml)];
+        endif
+      endif
+    endif
+    plot_out = [plot_out; line_out];
+  endfor    % kx = 2:nstems
+  if (nargout == 0)
+    rows = size (plot_out)(1);
+    cols = size (plot_out)(2);
+    for k = 1:rows
+      printf("%s\n", plot_out(k,1:cols));
+    endfor
+  else
+    varargout{1} = plot_out;
+  endif
+endfunction
+
+%!demo
+%! ## Unsorted plot:
+%! x = [-22 12 -28 52  39 -2 12 10 11 11 42 38 44 18 44];
+%! stemleaf (x, 0);
+
+%!demo
+%! ## Sorted leaves:
+%! x = [-22 12 -28 52  39 -2 12 10 11 11 42 38 44 18 44];
+%! y = sort(x);
+%! stemleaf (y, 0);
+
+%!demo
+%! ## More data (sorted)
+%! x = [-22 12 -28 52  39 -2 12 10 11 11 42 38 44 18 44 37 113 124 37 48 127 36 29 31 125 139 131 115 105 132 104 123 35 113 122 42 117 119 58 109 23 105 63 27 44 105 99 41 128 121 116 125 32 61 37 127 29 113 121 58 114 126 53 114 96 25 109 7 31 141 46 -13 71 43 117 116 27 7 68 40 31 115 124 42 128 52 71 118 117 38 27 106 33 117 116 111 40 119 47 105 57 122 109 124 115 43 120 43 27 27 18 28 48 125 107 114 34 133 45 120 30 127 31 116 146 21 23 30 10 20 21 30 0 100 110 1 20 0 ];
+%! y = sort(x);
+%! stemleaf (y, 0);
+
+%!test
+%! ## test minus to plus
+%! x = [-22 12 -28 52  39 -2 12 10 11 11 42 38 44 18 44 37 113 124 37 48 127 36 29 31 125 139 131 115 105 132 104 123 35 113 122 42 117 119 58 109 23 105 63 27 44 105 99 41 128 121 116 125 32 61 37 127 29 113 121 58 114 126 53 114 96 25 109 7 31 141 46 -13 71 43 117 116 27 7 68 40 31 115 124 42 128 52 71 118 117 38 27 106 33 117 116 111 40 119 47 105 57 122 109 124 115 43 120 43 27 27 18 28 48 125 107 114 34 133 45 120 30 127 31 116 146 21 23 30 10 20 21 30 0 100 110 1 20 0 ];
+%! x = sort(x);
+%! r2 = ["stem step: 10, data: sorted.\nHinges:    lo: 30, hi: 116\n";...
+%! "  -2 | 82";"  -1 | 3";"  -0 | 2";"   0 | 00177";...
+%! "   1 | 00112288";"   2 | 001133577777899";...
+%! "   3 | 000111123456777889";"   4 | 00122233344456788";...
+%! "   5 | 223788";"   6 | 138";"   7 | 11";"   8 | ";...
+%! "   9 | 69";"  10 | 04555567999";"  11 | 0133344455566667777899";...
+%! "  12 | 0011223444555677788";"  13 | 1239";"  14 | 16"];
+%! rx = stemleaf (x, 0);
+%! assert(r2, rx);
+%!test
+%! ## positive values above 0
+%! x = [22 12 28 52  39 12 11 11 42 38 44 18 44 ];
+%! r2 = ["stem step: 10, data: unsorted.\nHinges:    lo: 12, hi: 42\n";...
+%! "   1 | 22118";"   2 | 28";"   3 | 98";"   4 | 244";"   5 | 2"];
+%! rx = stemleaf (x, 0);
+%! assert(r2, rx);
+%!test
+%! ## negative values below 0
+%! x = [22 12 28 52  39 12 11 11 42 38 44 18 44];
+%! x = -x;
+%! r2 = ["stem step: 10, data: unsorted.\nHinges:    lo: -42, hi: -12\n";...
+%! "  -5 | 2";"  -4 | 244";"  -3 | 98";"  -2 | 28";"  -1 | 22118"];
+%! rx = stemleaf (x, 0);
+%! assert(r2, rx);
+%!test
+%! ## positive values from 0
+%! x = [22 12 28 52  39 2 12 0 11 11 42 38 44 18 44];
+%! r2 = ["stem step: 10, data: unsorted.\nHinges:    lo: 11, hi: 42\n";...
+%! "   0 | 20";"   1 | 22118";"   2 | 28";"   3 | 98";"   4 | 244";"   5 | 2"];
+%! rx = stemleaf (x, 0);
+%! assert(r2, rx);
+%!test
+%! ## negative values from 0
+%! x = [22 12 28 52  39 2 12 0 11 11 42 38 44 18 44];
+%! x = -x;
+%! r2 = ["stem step: 10, data: unsorted.\nHinges:    lo: -42, hi: -11\n";...
+%! "  -5 | 2";"  -4 | 244";"  -3 | 98";"  -2 | 28";"  -1 | 22118";"  -0 | 20"];
+%! rx = stemleaf (x, 0);
+%! assert(r2, rx);
+
--- a/scripts/plot/struct2hdl.m	Mon Feb 11 15:24:56 2013 -0500
+++ b/scripts/plot/struct2hdl.m	Mon Feb 11 15:45:26 2013 -0500
@@ -148,6 +148,8 @@
     h = createsurface (s, par);
   elseif (strcmp (s.type, "hggroup"))
     [h, s, p] = createhg (s, p, par, hilev);
+  else
+    error ("struct2hdl: %s objects are not implemented yet", s.type)
   endif
 
   ## children
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/testfun/__printf_assert__.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,27 @@
+## Copyright (C) 2005-2012 David Bateman
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {} __printf_assert__ (@dots{})
+## Undocumented internal function.
+## @end deftypefn
+
+function __printf_assert__ (varargin)
+  global _assert_printf;
+  _assert_printf = cat (2, _assert_printf, sprintf (varargin{:}));
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/testfun/__prog_output_assert__.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,34 @@
+## Copyright (C) 2005-2012 David Bateman
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {} __prog_output_assert__ (@var{str})
+## Undocumented internal function.
+## @end deftypefn
+
+function ret = __prog_output_assert__ (str)
+  global _assert_printf;
+  if (isempty (_assert_printf))
+    ret = isempty (str);
+  elseif (_assert_printf(end) == "\n")
+    ret = strcmp (_assert_printf(1:(end-1)), str);
+  else
+    ret = strcmp (_assert_printf, str);
+  endif
+  _assert_printf = "";
+endfunction
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/testfun/__run_test_suite__.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,285 @@
+## Copyright (C) 2005-2012 David Bateman
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {} __run_test_suite__ (@var{fcndirs}, @var{fixedtestdirs})
+## Undocumented internal function.
+## @end deftypefn
+
+function __run_test_suite__ (fcndirs, fixedtestdirs)
+  testsdir = octave_config_info ("octtestsdir");
+  libinterptestdir = fullfile (testsdir, "libinterp");
+  liboctavetestdir = fullfile (testsdir, "liboctave");
+  fixedtestdir = fullfile (testsdir, "fixed");
+  fcnfiledir = octave_config_info ("fcnfiledir");
+  if (nargin == 0)
+    fcndirs = { libinterptestdir, liboctavetestdir, fcnfiledir };
+    fixedtestdirs = { fixedtestdir };
+  endif
+  global files_with_no_tests = {};
+  global files_with_tests = {};
+  ## FIXME -- these names don't really make sense if we are running
+  ## tests for an installed copy of Octave.
+  global topsrcdir = fcnfiledir;
+  global topbuilddir = testsdir;
+  pso = page_screen_output ();
+  warn_state = warning ("query", "quiet");
+  warning ("on", "quiet");
+  try
+    page_screen_output (0);
+    warning ("off", "Octave:deprecated-function");
+    fid = fopen ("fntests.log", "wt");
+    if (fid < 0)
+      error ("could not open fntests.log for writing");
+    endif
+    test ("", "explain", fid);
+    dp = dn = dxf = dsk = 0;
+    puts ("\nIntegrated test scripts:\n\n");
+    for i = 1:length (fcndirs)
+      [p, n, xf, sk] = run_test_script (fid, fcndirs{i});
+      dp += p;
+      dn += n;
+      dxf += xf;
+      dsk += sk;
+    endfor
+    puts ("\nFixed test scripts:\n\n");
+    for i = 1:length (fixedtestdirs)
+      [p, n, xf, sk] = run_test_dir (fid, fixedtestdirs{i});
+      dp += p;
+      dn += n;
+      dxf += xf;
+      dsk += sk;
+    endfor
+    puts ("\nSummary:\n\n");
+    nfail = dn - dp;
+    printf ("  PASS    %6d\n", dp);
+    printf ("  FAIL    %6d\n", nfail);
+    if (dxf > 0)
+      printf ("  XFAIL   %6d\n", dxf);
+    endif
+    if (dsk > 0)
+      printf ("  SKIPPED %6d\n", dsk);
+    endif
+    puts ("\n");
+    puts ("See the file test/fntests.log for additional details.\n");
+    if (dxf > 0)
+      puts ("\n");
+      puts ("Expected failures (listed as XFAIL above) are known bugs.\n");
+      puts ("Please help improve Octave by contributing fixes for them.\n");
+    endif
+    if (dsk > 0)
+      puts ("\n");
+      puts ("Tests are most often skipped because the features they require\n");
+      puts ("have been disabled.  Features are most often disabled because\n");
+      puts ("they require dependencies that were not present when Octave\n");
+      puts ("was built.  The configure script should have printed a summary\n");
+      puts ("at the end of its run indicating which dependencies were not found.\n");
+    endif
+
+    ## Weed out deprecated and private functions
+    weed_idx = cellfun (@isempty, regexp (files_with_tests, '\bdeprecated\b|\bprivate\b', 'once'));
+    files_with_tests = files_with_tests(weed_idx);
+    weed_idx = cellfun (@isempty, regexp (files_with_no_tests, '\bdeprecated\b|\bprivate\b', 'once'));
+    files_with_no_tests = files_with_no_tests(weed_idx);
+
+    report_files_with_no_tests (files_with_tests, files_with_no_tests, ".m");
+
+    puts ("\nPlease help improve Octave by contributing tests for\n");
+    puts ("these files (see the list in the file fntests.log).\n\n");
+
+    fprintf (fid, "\nFiles with no tests:\n\n%s",
+            list_in_columns (files_with_no_tests, 80));
+    fclose (fid);
+
+    page_screen_output (pso);
+    warning (warn_state.state, "quiet");
+  catch
+    page_screen_output (pso);
+    warning (warn_state.state, "quiet");
+    disp (lasterr ());
+  end_try_catch
+endfunction
+
+function print_test_file_name (nm)
+  filler = repmat (".", 1, 55-length (nm));
+  printf ("  %s %s", nm, filler);
+endfunction
+
+function print_pass_fail (n, p)
+  if (n > 0)
+    printf (" PASS %4d/%-4d", p, n);
+    nfail = n - p;
+    if (nfail > 0)
+      printf (" FAIL %d", nfail);
+    endif
+  endif
+  puts ("\n");
+endfunction
+
+function retval = has_functions (f)
+  n = length (f);
+  if (n > 3 && strcmp (f((end-2):end), ".cc"))
+    fid = fopen (f);
+    if (fid >= 0)
+      str = fread (fid, "*char")';
+      fclose (fid);
+      retval = ! isempty (regexp (str,'^(DEFUN|DEFUN_DLD)\b', 'lineanchors'));
+    else
+      error ("fopen failed: %s", f);
+    endif
+  elseif (n > 2 && strcmp (f((end-1):end), ".m"))
+    retval = true;
+  else
+    retval = false;
+  endif
+endfunction
+
+function retval = has_tests (f)
+  fid = fopen (f);
+  if (fid >= 0)
+    str = fread (fid, "*char")';
+    fclose (fid);
+    retval = ! isempty (regexp (str, '^%!(assert|error|fail|test|warning)', "lineanchors"));
+  else
+    error ("fopen failed: %s", f);
+  endif
+endfunction
+
+function retval = has_demos (f)
+  fid = fopen (f);
+  if (fid >= 0)
+    str = fread (fid, "*char")';
+    fclose (fid);
+    retval = ! isempty (regexp (str, '^%!demo', "lineanchors"));
+  else
+    error ("fopen failed: %s", f);
+  endif
+endfunction
+
+function [dp, dn, dxf, dsk] = run_test_dir (fid, d);
+  global files_with_tests;
+  global files_with_no_tests;
+  lst = dir (d);
+  dp = dn = dxf = dsk = 0;
+  for i = 1:length (lst)
+    nm = lst(i).name;
+    if (lst(i).isdir
+        && ! strcmp (nm, ".") && ! strcmp (nm, "..")
+        && ! strcmp (nm, "private") && nm(1) != "@"
+        && ! strcmp (nm, "CVS"))
+      [p, n, xf, sk] = run_test_dir (fid, [d, filesep, nm]);
+      dp += p;
+      dn += n;
+      dxf += xf;
+      dsk += sk;
+    endif
+  endfor
+  saved_dir = pwd ();
+  unwind_protect
+    chdir (d);
+    for i = 1:length (lst)
+      nm = lst(i).name;
+      if (length (nm) > 4 && strcmp (nm((end-3):end), ".tst"))
+        p = n = xf = sk = 0;
+        ffnm = fullfile (d, nm);
+        if (has_tests (ffnm))
+          print_test_file_name (nm);
+          [p, n, xf, sk] = test (nm, "quiet", fid);
+          print_pass_fail (n, p);
+          files_with_tests(end+1) = ffnm;
+        ##elseif (has_demos (ffnm))
+        ##  files_with_tests(end+1) = ffnm;
+        else
+          files_with_no_tests(end+1) = ffnm;
+        endif
+        dp += p;
+        dn += n;
+        dxf += xf;
+        dsk += sk;
+      endif
+    endfor
+  unwind_protect_cleanup
+    chdir (saved_dir);
+  end_unwind_protect
+endfunction
+
+function [dp, dn, dxf, dsk] = run_test_script (fid, d);
+  global files_with_tests;
+  global files_with_no_tests;
+  global topsrcdir;
+  global topbuilddir;
+  lst = dir (d);
+  dp = dn = dxf = dsk = 0;
+  for i = 1:length (lst)
+    nm = lst(i).name;
+    if (lst(i).isdir && ! strcmp (nm, ".") && ! strcmp (nm, "..")
+        && ! strcmp (nm, "CVS"))
+      [p, n, xf, sk] = run_test_script (fid, [d, filesep, nm]);
+      dp += p;
+      dn += n;
+      dxf += xf;
+      dsk += sk;
+    endif
+  endfor
+  for i = 1:length (lst)
+    nm = lst(i).name;
+    ## Ignore hidden files
+    if (nm(1) == '.')
+      continue
+    endif
+    f = fullfile (d, nm);
+    if ((length (nm) > 2 && strcmp (nm((end-1):end), ".m"))
+        || (length (nm) > 4
+            && (strcmp (nm((end-3):end), "-tst")
+                || strcmp (nm((end-3):end), ".tst"))))
+      p = n = xf = 0;
+      ## Only run if it contains %!test, %!assert %!error or %!warning
+      if (has_tests (f))
+        tmp = strrep (f, [topsrcdir, filesep], "");
+        tmp = strrep (tmp, [topbuilddir, filesep], "");
+        print_test_file_name (tmp);
+        [p, n, xf, sk] = test (f, "quiet", fid);
+        print_pass_fail (n, p);
+        dp += p;
+        dn += n;
+        dxf += xf;
+        dsk += sk;
+        files_with_tests(end+1) = f;
+      ##elseif (has_demos (f))
+      ##  files_with_tests(end+1) = f;
+      else
+        ## To reduce the list length, only mark .cc files that contain
+        ## DEFUN definitions.
+        files_with_no_tests(end+1) = f;
+      endif
+    endif
+  endfor 
+  ##  printf("%s%s -> passes %d of %d tests\n", ident, d, dp, dn);
+endfunction
+
+function n = num_elts_matching_pattern (lst, pat)
+  n = sum (cellfun (@(x) !isempty (x), regexp (lst, pat, 'once')));
+endfunction
+
+function report_files_with_no_tests (with, without, typ)
+  pat = cstrcat ('\', typ, "$");
+  n_with = num_elts_matching_pattern (with, pat);
+  n_without = num_elts_matching_pattern (without, pat);
+  n_tot = n_with + n_without;
+  printf ("\n%d (of %d) %s files have no tests.\n", n_without, n_tot, typ);
+endfunction
--- a/scripts/testfun/module.mk	Mon Feb 11 15:24:56 2013 -0500
+++ b/scripts/testfun/module.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -1,6 +1,9 @@
 FCN_FILE_DIRS += testfun
 
 testfun_FCN_FILES = \
+  testfun/__printf_assert__.m \
+  testfun/__prog_output_assert__.m \
+  testfun/__run_test_suite__.m \
   testfun/assert.m \
   testfun/demo.m \
   testfun/example.m \
--- a/scripts/testfun/test.m	Mon Feb 11 15:24:56 2013 -0500
+++ b/scripts/testfun/test.m	Mon Feb 11 15:45:26 2013 -0500
@@ -771,7 +771,7 @@
 %!test   a=3;             # assign to a shared variable
 %!test   assert (a,3)     # variable should equal 3
 %!shared b,c              # replace shared variables
-%!test assert (!exist ("a"));  # a no longer exists
+%!test assert (!exist ("a", "var"));  # a no longer exists
 %!test assert (isempty (b));   # variables start off empty
 %!shared a,b,c            # recreate a shared variable
 %!test assert (isempty (a));   # value is empty even if it had a previous value
@@ -780,7 +780,7 @@
 %!test c=6;             # update a value
 %!test assert ([a, b, c],[1, 2, 6]); # show that the update sticks
 %!shared                     # clear all shared variables
-%!test assert (!exist ("a")) # show that they are cleared
+%!test assert (!exist ("a", "var")) # show that they are cleared
 %!shared a,b,c               # support for initializer shorthand
 %! a=1; b=2; c=4;
 
@@ -835,7 +835,7 @@
 % !demo   with syntax error  # syntax errors in demo fail properly
 % !shared a,b,c
 % !demo                      # shared variables not available in demo
-% ! assert(exist("a"))
+% ! assert(exist("a", "var"))
 % !error
 % ! test('/etc/passwd');
 % ! test("nonexistent file");
--- a/src/mkoctfile.in.cc	Mon Feb 11 15:24:56 2013 -0500
+++ b/src/mkoctfile.in.cc	Mon Feb 11 15:45:26 2013 -0500
@@ -214,6 +214,9 @@
   vars["XTRA_CFLAGS"] = get_variable ("XTRA_CFLAGS", %OCTAVE_CONF_XTRA_CFLAGS%);
   vars["XTRA_CXXFLAGS"] = get_variable ("XTRA_CXXFLAGS", %OCTAVE_CONF_XTRA_CXXFLAGS%);
 
+  vars["AR"] = get_variable ("AR", %OCTAVE_CONF_MKOCTFILE_AR%);
+  vars["RANLIB"] = get_variable ("RANLIB", %OCTAVE_CONF_MKOCTFILE_RANLIB%);
+
   vars["DEPEND_FLAGS"] = get_variable ("DEPEND_FLAGS", %OCTAVE_CONF_DEPEND_FLAGS%);
   vars["DEPEND_EXTRA_SED_PATTERN"] = get_variable ("DEPEND_EXTRA_SED_PATTERN", %OCTAVE_CONF_DEPEND_EXTRA_SED_PATTERN%);
 
@@ -299,30 +302,29 @@
 "  -p VAR, --print VAR     Print configuration variable VAR.  Recognized\n"
 "                          variables are:\n"
 "\n"
-"                            ALL_CFLAGS                FLIBS\n"
-"                            ALL_CXXFLAGS              FPICFLAG\n"
-"                            ALL_FFLAGS                INCFLAGS\n"
-"                            ALL_LDFLAGS               LAPACK_LIBS\n"
-"                            BLAS_LIBS                 LDFLAGS\n"
-"                            CC                        LD_CXX\n"
-"                            CFLAGS                    LD_STATIC_FLAG\n"
-"                            CPICFLAG                  LFLAGS\n"
-"                            CPPFLAGS                  LIBOCTAVE\n"       
-"                            CXX                       LIBOCTINTERP\n"    
-"                            CXXFLAGS                  LIBS\n"            
-"                            CXXPICFLAG                OCTAVE_LIBS\n"     
-"                            DEPEND_EXTRA_SED_PATTERN  OCTAVE_LINK_DEPS\n"
-"                            DEPEND_FLAGS              OCTAVE_LINK_OPTS\n"
-"                            DL_LD                     OCT_LINK_DEPS\n"   
-"                            DL_LDFLAGS                OCT_LINK_OPTS\n"   
-"                            EXEEXT                    RDYNAMIC_FLAG\n"   
-"                            F77                       READLINE_LIBS\n"   
-"                            F77_INTEGER_8_FLAG        SED\n"             
-"                            FFLAGS                    XTRA_CFLAGS\n"     
-"                            FFTW3_LDFLAGS             XTRA_CXXFLAGS\n"   
-"                            FFTW3_LIBS\n"      
-"                            FFTW3F_LDFLAGS\n"
-"                            FFTW3F_LIBS\n"
+"                            ALL_CFLAGS                FFTW3F_LDFLAGS\n"
+"                            ALL_CXXFLAGS              FFTW3F_LIBS\n"
+"                            ALL_FFLAGS                FLIBS\n"
+"                            ALL_LDFLAGS               FPICFLAG\n"
+"                            AR                        INCFLAGS\n"
+"                            BLAS_LIBS                 LAPACK_LIBS\n"
+"                            CC                        LDFLAGS\n"
+"                            CFLAGS                    LD_CXX\n"
+"                            CPICFLAG                  LD_STATIC_FLAG\n"
+"                            CPPFLAGS                  LFLAGS\n"
+"                            CXX                       LIBOCTAVE\n"
+"                            CXXFLAGS                  LIBOCTINTERP\n"
+"                            CXXPICFLAG                LIBS\n"
+"                            DEPEND_EXTRA_SED_PATTERN  OCTAVE_LIBS\n"
+"                            DEPEND_FLAGS              OCTAVE_LINK_DEPS\n"
+"                            DL_LD                     OCT_LINK_DEPS\n"
+"                            DL_LDFLAGS                RANLIB\n"
+"                            EXEEXT                    RDYNAMIC_FLAG\n"
+"                            F77                       READLINE_LIBS\n"
+"                            F77_INTEGER_8_FLAG        SED\n"
+"                            FFLAGS                    XTRA_CFLAGS\n"
+"                            FFTW3_LDFLAGS             XTRA_CXXFLAGS\n"
+"                            FFTW3_LIBS\n"
 "\n"
 "  --link-stand-alone      Link a stand-alone executable file.\n"
 "\n"
--- a/src/mkoctfile.in.sh	Mon Feb 11 15:24:56 2013 -0500
+++ b/src/mkoctfile.in.sh	Mon Feb 11 15:45:26 2013 -0500
@@ -79,6 +79,9 @@
 : ${XTRA_CFLAGS=%OCTAVE_CONF_XTRA_CFLAGS%}
 : ${XTRA_CXXFLAGS=%OCTAVE_CONF_XTRA_CXXFLAGS%}
 
+: ${AR=%OCTAVE_CONF_MKOCTFILE_AR%}
+: ${RANLIB=%OCTAVE_CONF_MKOCTFILE_RANLIB%}
+
 : ${DEPEND_FLAGS=%OCTAVE_CONF_DEPEND_FLAGS%}
 : ${DEPEND_EXTRA_SED_PATTERN=%OCTAVE_CONF_DEPEND_EXTRA_SED_PATTERN%}
 
@@ -233,29 +236,30 @@
   -p VAR, --print VAR     Print configuration variable VAR.  Recognized
                           variables are:
 
-                            ALL_CFLAGS                FFTW3F_LIBS
-                            ALL_CXXFLAGS              FLIBS
-                            ALL_FFLAGS                FPICFLAG
-                            ALL_LDFLAGS               INCFLAGS
+                            ALL_CFLAGS                FFTW3F_LDFLAGS
+                            ALL_CXXFLAGS              FFTW3F_LIBS
+                            ALL_FFLAGS                FLIBS
+                            ALL_LDFLAGS               FPICFLAG
+                            AR                        INCFLAGS
                             BLAS_LIBS                 LAPACK_LIBS
                             CC                        LDFLAGS
                             CFLAGS                    LD_CXX
                             CPICFLAG                  LD_STATIC_FLAG
                             CPPFLAGS                  LFLAGS
-                            CXX                       LIBOCTAVE       
-                            CXXFLAGS                  LIBOCTINTERP    
-                            CXXPICFLAG                LIBS            
-                            DEPEND_EXTRA_SED_PATTERN  OCTAVE_LIBS     
+                            CXX                       LIBOCTAVE
+                            CXXFLAGS                  LIBOCTINTERP
+                            CXXPICFLAG                LIBS
+                            DEPEND_EXTRA_SED_PATTERN  OCTAVE_LIBS
                             DEPEND_FLAGS              OCTAVE_LINK_DEPS
-                            DL_LD                     OCT_LINK_DEPS   
-                            DL_LDFLAGS                RDYNAMIC_FLAG   
-                            EXEEXT                    READLINE_LIBS   
-                            F77                       SED             
-                            F77_INTEGER_8_FLAG        XTRA_CFLAGS     
-                            FFLAGS                    XTRA_CXXFLAGS   
-                            FFTW3_LDFLAGS             
+                            DL_LD                     OCT_LINK_DEPS
+                            DL_LDFLAGS                RANLIB
+                            EXEEXT                    RDYNAMIC_FLAG
+                            F77                       READLINE_LIBS
+                            F77_INTEGER_8_FLAG        SED
+                            FFLAGS                    XTRA_CFLAGS
+                            FFTW3_LDFLAGS             XTRA_CXXFLAGS
                             FFTW3_LIBS
-                            FFTW3F_LDFLAGS
+                          
 
   -v, --verbose           Echo commands as they are executed.
 
--- a/test/Makefile.am	Mon Feb 11 15:24:56 2013 -0500
+++ b/test/Makefile.am	Mon Feb 11 15:45:26 2013 -0500
@@ -22,36 +22,37 @@
 
 FCN_FILES = \
   fntests.m \
-  test_args.m \
-  test_bug_31371.m \
-  test_diag_perm.m \
-  test_error.m \
-  test_eval-catch.m \
-  test_for.m \
-  test_func.m \
-  test_global.m \
-  test_if.m \
-  test_index.m \
-  test_io.m \
-  test_line_continue.m \
-  test_logical_index.m \
-  test_null_assign.m \
-  test_parser.m \
-  test_prefer.m \
-  test_range.m \
-  test_recursion.m \
-  test_return.m \
-  test_slice.m \
-  test_struct.m \
-  test_switch.m \
-  test_system.m \
-  test_transpose.m \
-  test_try.m \
-  test_unwind.m \
-  test_while.m
+  args.tst \
+  bug-31371.tst \
+  diag-perm.tst \
+  error.tst \
+  eval-catch.tst \
+  for.tst \
+  func.tst \
+  global.tst \
+  if.tst \
+  index.tst \
+  io.tst \
+  line-continue.tst \
+  logical-index.tst \
+  null-assign.tst \
+  parser.tst \
+  prefer.tst \
+  range.tst \
+  recursion.tst \
+  return.tst \
+  slice.tst \
+  struct.tst \
+  switch.tst \
+  system.tst \
+  transpose.tst \
+  try.tst \
+  unwind.tst \
+  while.tst
 
 include bug-35448/module.mk
 include bug-36025/module.mk
+include bug-38236/module.mk
 include classdef/module.mk
 include classes/module.mk
 include class-concat/module.mk
@@ -59,30 +60,45 @@
 include fcn-handle-derived-resolution/module.mk
 include nest/module.mk
 
-check: test_sparse.m test_bc_overloads.m
+check: sparse.tst bc-overload-tests.stamp
 	$(top_builddir)/run-octave --norc --silent --no-history $(srcdir)/fntests.m $(srcdir)
 
-test_sparse.m: build_sparse_tests.sh
-	$(srcdir)/build_sparse_tests.sh
+sparse.tst: build-sparse-tests.sh
+	$(srcdir)/build-sparse-tests.sh
+
+GENERATED_BC_OVERLOADS_DIRS := \
+  $(shell $(srcdir)/build-bc-overload-tests.sh --list-dirs)
 
-test_bc_overloads.m: build_bc_overload_tests.sh bc_overloads_expected
-	$(srcdir)/build_bc_overload_tests.sh $(srcdir)/bc_overloads_expected
+GENERATED_BC_OVERLOADS_FILES := \
+  $(shell $(srcdir)/build-bc-overload-tests.sh --list-files)
+
+bc-overload-tests.stamp: build-bc-overload-tests.sh bc-overloads-expected
+	$(srcdir)/build-bc-overload-tests.sh $(srcdir)/bc-overloads-expected
+	touch $@
+
+BUILT_SOURCES = bc-overload-tests.stamp
 
 EXTRA_DIST = \
-  build_sparse_tests.sh \
-  build_bc_overload_tests.sh \
-  bc_overloads_expected \
+  build-sparse-tests.sh \
+  build-bc-overload-tests.sh \
+  bc-overloads-expected \
   build_bc_overloads_expected.m \
   $(FCN_FILES)
 
 CLEANFILES = \
-  test_sparse.m \
-  test_bc_overloads.m \
-  tbcover.m
+  sparse.tst \
+  bc-overload-tests.stamp \
+  $(GENERATED_BC_OVERLOADS_FILES)
 
 DISTCLEANFILES = \
   fntests.log
-        
+
+fixedtestsdir := $(octtestsdir)/fixed
+
+nobase_fixedtests_DATA = \
+  sparse.tst \
+  $(GENERATED_BC_OVERLOADS_FILES) \
+  $(filter-out fntests.m, $(FCN_FILES))
+
 clean-local:
-	-rm -rf @double @logical @int8 @uint64 @int64 @cell @single @int32 \
-	@uint8 @uint16 @uint32 @struct @int16 @function_handle @char
+	-rm -rf $(GENERATED_BC_OVERLOADS_DIRS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/args.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,236 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+########################################
+## No inputs or no outputs
+
+## no input or output arguments
+%!function f ()
+%!  assert (nargin, 0);
+%!  assert (nargout, 0);
+%!endfunction
+%!test
+%! f;
+
+## one input with two possible inputs
+%!function f (x, y)
+%!  assert (nargin, 1);
+%!  assert (nargout, 0);
+%!endfunction
+%!test
+%! f (1);
+
+## no inputs, one of multiple outputs
+%!function [x, y] = f ()
+%!  assert (nargin, 0);
+%!  assert (nargout, 1);
+%!  x = 2;
+%!endfunction
+%!test
+%! assert (f (), 2);
+
+## one of multiple inputs, one of multiple outputs
+%!function [x, y] = f (a, b)
+%!  assert (nargin, 1);
+%!  assert (nargout, 1);
+%!  x = a;
+%!endfunction
+%!test
+%! assert (f (1), 1);
+
+########################################
+## Varargin, varargout
+
+## varargin and varargout with no inputs or outputs
+%!function [varargout] = f (varargin)
+%!  assert (nargin, 0);
+%!  assert (nargout, 0);
+%!endfunction
+%!test
+%! f;
+
+## varargin and varargout with one input
+%!function [varargout] = f (x, varargin)
+%!  assert (nargin, 1);
+%!  assert (nargout, 0);
+%!endfunction
+%!test
+%! f (1);
+
+## varargin and varargout with one output
+%!function [x, varargout] = f (varargin)
+%!  assert (nargin, 0);
+%!  assert (nargout, 1);
+%!  x = 2;
+%!endfunction
+%!test
+%! assert (f (), 2);
+
+## varargin and varargout with one input and output
+%!function [varargout] = f (varargin)
+%!  assert (nargin, 1);
+%!  assert (nargout, 1);
+%!  varargout{1} = varargin{1};
+%!endfunction
+%!test
+%! assert (f (1), 1);
+
+## multiple inputs, multiple outputs, but not all of either
+## WARNING: The original test did not assign the outputs, it just
+## requested them, and I think that is supposed to be an error.  It also
+## still has a non-assigned output argument.
+%!function [x, y, z] = f (a, b, c, d, e)
+%!  assert (nargin, 4);
+%!  assert (nargout, 2);
+%!  x = a;
+%!  y = b;
+%!endfunction
+%!test
+%! [s, t] = f (1, 2, 3, 4);
+%! assert ([s t], [1 2]);
+
+## Fully used varargin and varargout
+%!function [varargout] = f (varargin)
+%!  assert (nargin, 3);
+%!  assert (nargout, 4);
+%!  varargout{1} = varargin{1};
+%!  varargout{2} = varargin{2};
+%!  varargout{3} = varargin{3};
+%!  varargout{4} = 4;
+%!endfunction
+%!test
+%! [s, t, u, v] = f (1, 2, 3);
+%! assert ([s t u v], [1 2 3 4]);
+
+## Test default arguments
+## numeric
+%!function f (x = 0)
+%!  assert (x, 0);
+%!endfunction
+%!test
+%!  f()
+
+## numeric vector (spaces)
+%!function f (x = [0 1 2])
+%!  assert (x, [0 1 2]);
+%!endfunction
+%!test
+%!  f()
+
+## numeric vector (range)
+%!function f (x = 1:3)
+%!  assert (x, 1:3);
+%!endfunction
+%!test
+%!  f()
+
+## numeric vector (commas)
+%!function f (x = [0,1,2])
+%!  assert (x, [0 1 2]);
+%!endfunction
+%!test
+%!  f()
+
+## numeric vector (commas and spaces)
+%!function f (x = [0, 1, 2])
+%!  assert (x, [0 1 2]);
+%!endfunction
+%!test
+%!  f()
+
+## numeric matrix
+%!function f (x = [0, 1, 2;3, 4, 5])
+%!  assert (x, [0 1 2;3 4 5]);
+%!endfunction
+%!test
+%!  f()
+
+## empty cell
+%!function f (x = {})
+%!  assert (x, {});
+%!endfunction
+%!test
+%!  f()
+
+## full cell
+%!function f (x = {1})
+%!  assert (x, {1});
+%!endfunction
+%!test
+%!  f()
+
+## many cells
+%!function f (x = {1 'a' "b" 2.0 struct("a", 3)})
+%!  assert (x, {1 'a' "b" 2.0 struct("a", 3)});
+%!endfunction
+%!test
+%!  f()
+
+## struct
+%!function f (x = struct("a", 3))
+%!  assert (x, struct ("a", 3));
+%!endfunction
+%!test
+%!  f()
+
+## char (double quotes)
+%!function f (x = "a")
+%!  assert (x, "a");
+%!endfunction
+%!test
+%!  f()
+
+## char (single quotes)
+%!function f (x = 'a')
+%!  assert (x, "a");
+%!endfunction
+%!test
+%!  f()
+
+## char (string, double quotes)
+%!function f (x = "abc123")
+%!  assert (x, "abc123");
+%!endfunction
+%!test
+%!  f()
+
+## char (string, double quotes, punctuation)
+%!function f (x = "abc123`1234567890-=~!@#$%^&*()_+[]{}|;':\",./<>?\\")
+%!  assert (x, "abc123`1234567890-=~!@#$%^&*()_+[]{}|;':\",./<>?\\");
+%!endfunction
+%!test
+%!  f()
+
+## Function handle (builtin)
+%!function f (x = @sin)
+%!  finfo = functions (x);
+%!  fname = finfo.function;
+%!  assert (isa (x, "function_handle") && strcmp (fname, "sin"));
+%!endfunction
+%!test
+%!  f()
+
+## Function handle (anonymous)
+%!function f (x = @(x) x.^2)
+%!  finfo = functions (x);
+%!  ftype = finfo.type;
+%!  assert (isa (x, "function_handle") && strcmp (ftype, "anonymous"));
+%!endfunction
+%!test
+%!  f()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bc-overloads-expected	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,225 @@
+double double double
+double single single
+double logical double
+double char double
+double int8 int8
+double int16 int16
+double int32 int32
+double int64 int64
+double uint8 uint8
+double uint16 uint16
+double uint32 uint32
+double uint64 uint64
+double cell cell
+double struct struct
+double function_handle function_handle
+single double single
+single single single
+single logical single
+single char single
+single int8 int8
+single int16 int16
+single int32 int32
+single int64 int64
+single uint8 uint8
+single uint16 uint16
+single uint32 uint32
+single uint64 uint64
+single cell cell
+single struct struct
+single function_handle function_handle
+logical double double
+logical single single
+logical logical logical
+logical char char
+logical int8 int8
+logical int16 int16
+logical int32 int32
+logical int64 int64
+logical uint8 uint8
+logical uint16 uint16
+logical uint32 uint32
+logical uint64 uint64
+logical cell cell
+logical struct struct
+logical function_handle function_handle
+char double char
+char single single
+char logical char
+char char char
+char int8 int8
+char int16 int16
+char int32 int32
+char int64 int64
+char uint8 uint8
+char uint16 uint16
+char uint32 uint32
+char uint64 uint64
+char cell cell
+char struct struct
+char function_handle function_handle
+int8 double int8
+int8 single int8
+int8 logical int8
+int8 char int8
+int8 int8 int8
+int8 int16 int8
+int8 int32 int8
+int8 int64 int8
+int8 uint8 int8
+int8 uint16 int8
+int8 uint32 int8
+int8 uint64 int8
+int8 cell cell
+int8 struct struct
+int8 function_handle function_handle
+int16 double int16
+int16 single int16
+int16 logical int16
+int16 char int16
+int16 int8 int16
+int16 int16 int16
+int16 int32 int16
+int16 int64 int16
+int16 uint8 int16
+int16 uint16 int16
+int16 uint32 int16
+int16 uint64 int16
+int16 cell cell
+int16 struct struct
+int16 function_handle function_handle
+int32 double int32
+int32 single int32
+int32 logical int32
+int32 char int32
+int32 int8 int32
+int32 int16 int32
+int32 int32 int32
+int32 int64 int32
+int32 uint8 int32
+int32 uint16 int32
+int32 uint32 int32
+int32 uint64 int32
+int32 cell cell
+int32 struct struct
+int32 function_handle function_handle
+int64 double int64
+int64 single int64
+int64 logical int64
+int64 char int64
+int64 int8 int64
+int64 int16 int64
+int64 int32 int64
+int64 int64 int64
+int64 uint8 int64
+int64 uint16 int64
+int64 uint32 int64
+int64 uint64 int64
+int64 cell cell
+int64 struct struct
+int64 function_handle function_handle
+uint8 double uint8
+uint8 single uint8
+uint8 logical uint8
+uint8 char uint8
+uint8 int8 uint8
+uint8 int16 uint8
+uint8 int32 uint8
+uint8 int64 uint8
+uint8 uint8 uint8
+uint8 uint16 uint8
+uint8 uint32 uint8
+uint8 uint64 uint8
+uint8 cell cell
+uint8 struct struct
+uint8 function_handle function_handle
+uint16 double uint16
+uint16 single uint16
+uint16 logical uint16
+uint16 char uint16
+uint16 int8 uint16
+uint16 int16 uint16
+uint16 int32 uint16
+uint16 int64 uint16
+uint16 uint8 uint16
+uint16 uint16 uint16
+uint16 uint32 uint16
+uint16 uint64 uint16
+uint16 cell cell
+uint16 struct struct
+uint16 function_handle function_handle
+uint32 double uint32
+uint32 single uint32
+uint32 logical uint32
+uint32 char uint32
+uint32 int8 uint32
+uint32 int16 uint32
+uint32 int32 uint32
+uint32 int64 uint32
+uint32 uint8 uint32
+uint32 uint16 uint32
+uint32 uint32 uint32
+uint32 uint64 uint32
+uint32 cell cell
+uint32 struct struct
+uint32 function_handle function_handle
+uint64 double uint64
+uint64 single uint64
+uint64 logical uint64
+uint64 char uint64
+uint64 int8 uint64
+uint64 int16 uint64
+uint64 int32 uint64
+uint64 int64 uint64
+uint64 uint8 uint64
+uint64 uint16 uint64
+uint64 uint32 uint64
+uint64 uint64 uint64
+uint64 cell cell
+uint64 struct struct
+uint64 function_handle function_handle
+cell double cell
+cell single cell
+cell logical cell
+cell char cell
+cell int8 cell
+cell int16 cell
+cell int32 cell
+cell int64 cell
+cell uint8 cell
+cell uint16 cell
+cell uint32 cell
+cell uint64 cell
+cell cell cell
+cell struct cell
+cell function_handle function_handle
+struct double struct
+struct single struct
+struct logical struct
+struct char struct
+struct int8 struct
+struct int16 struct
+struct int32 struct
+struct int64 struct
+struct uint8 struct
+struct uint16 struct
+struct uint32 struct
+struct uint64 struct
+struct cell struct
+struct struct struct
+struct function_handle function_handle
+function_handle double function_handle
+function_handle single function_handle
+function_handle logical function_handle
+function_handle char function_handle
+function_handle int8 function_handle
+function_handle int16 function_handle
+function_handle int32 function_handle
+function_handle int64 function_handle
+function_handle uint8 function_handle
+function_handle uint16 function_handle
+function_handle uint32 function_handle
+function_handle uint64 function_handle
+function_handle cell function_handle
+function_handle struct function_handle
+function_handle function_handle function_handle
--- a/test/bc_overloads_expected	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,225 +0,0 @@
-double double double
-double single single
-double logical double
-double char double
-double int8 int8
-double int16 int16
-double int32 int32
-double int64 int64
-double uint8 uint8
-double uint16 uint16
-double uint32 uint32
-double uint64 uint64
-double cell cell
-double struct struct
-double function_handle function_handle
-single double single
-single single single
-single logical single
-single char single
-single int8 int8
-single int16 int16
-single int32 int32
-single int64 int64
-single uint8 uint8
-single uint16 uint16
-single uint32 uint32
-single uint64 uint64
-single cell cell
-single struct struct
-single function_handle function_handle
-logical double double
-logical single single
-logical logical logical
-logical char char
-logical int8 int8
-logical int16 int16
-logical int32 int32
-logical int64 int64
-logical uint8 uint8
-logical uint16 uint16
-logical uint32 uint32
-logical uint64 uint64
-logical cell cell
-logical struct struct
-logical function_handle function_handle
-char double char
-char single single
-char logical char
-char char char
-char int8 int8
-char int16 int16
-char int32 int32
-char int64 int64
-char uint8 uint8
-char uint16 uint16
-char uint32 uint32
-char uint64 uint64
-char cell cell
-char struct struct
-char function_handle function_handle
-int8 double int8
-int8 single int8
-int8 logical int8
-int8 char int8
-int8 int8 int8
-int8 int16 int8
-int8 int32 int8
-int8 int64 int8
-int8 uint8 int8
-int8 uint16 int8
-int8 uint32 int8
-int8 uint64 int8
-int8 cell cell
-int8 struct struct
-int8 function_handle function_handle
-int16 double int16
-int16 single int16
-int16 logical int16
-int16 char int16
-int16 int8 int16
-int16 int16 int16
-int16 int32 int16
-int16 int64 int16
-int16 uint8 int16
-int16 uint16 int16
-int16 uint32 int16
-int16 uint64 int16
-int16 cell cell
-int16 struct struct
-int16 function_handle function_handle
-int32 double int32
-int32 single int32
-int32 logical int32
-int32 char int32
-int32 int8 int32
-int32 int16 int32
-int32 int32 int32
-int32 int64 int32
-int32 uint8 int32
-int32 uint16 int32
-int32 uint32 int32
-int32 uint64 int32
-int32 cell cell
-int32 struct struct
-int32 function_handle function_handle
-int64 double int64
-int64 single int64
-int64 logical int64
-int64 char int64
-int64 int8 int64
-int64 int16 int64
-int64 int32 int64
-int64 int64 int64
-int64 uint8 int64
-int64 uint16 int64
-int64 uint32 int64
-int64 uint64 int64
-int64 cell cell
-int64 struct struct
-int64 function_handle function_handle
-uint8 double uint8
-uint8 single uint8
-uint8 logical uint8
-uint8 char uint8
-uint8 int8 uint8
-uint8 int16 uint8
-uint8 int32 uint8
-uint8 int64 uint8
-uint8 uint8 uint8
-uint8 uint16 uint8
-uint8 uint32 uint8
-uint8 uint64 uint8
-uint8 cell cell
-uint8 struct struct
-uint8 function_handle function_handle
-uint16 double uint16
-uint16 single uint16
-uint16 logical uint16
-uint16 char uint16
-uint16 int8 uint16
-uint16 int16 uint16
-uint16 int32 uint16
-uint16 int64 uint16
-uint16 uint8 uint16
-uint16 uint16 uint16
-uint16 uint32 uint16
-uint16 uint64 uint16
-uint16 cell cell
-uint16 struct struct
-uint16 function_handle function_handle
-uint32 double uint32
-uint32 single uint32
-uint32 logical uint32
-uint32 char uint32
-uint32 int8 uint32
-uint32 int16 uint32
-uint32 int32 uint32
-uint32 int64 uint32
-uint32 uint8 uint32
-uint32 uint16 uint32
-uint32 uint32 uint32
-uint32 uint64 uint32
-uint32 cell cell
-uint32 struct struct
-uint32 function_handle function_handle
-uint64 double uint64
-uint64 single uint64
-uint64 logical uint64
-uint64 char uint64
-uint64 int8 uint64
-uint64 int16 uint64
-uint64 int32 uint64
-uint64 int64 uint64
-uint64 uint8 uint64
-uint64 uint16 uint64
-uint64 uint32 uint64
-uint64 uint64 uint64
-uint64 cell cell
-uint64 struct struct
-uint64 function_handle function_handle
-cell double cell
-cell single cell
-cell logical cell
-cell char cell
-cell int8 cell
-cell int16 cell
-cell int32 cell
-cell int64 cell
-cell uint8 cell
-cell uint16 cell
-cell uint32 cell
-cell uint64 cell
-cell cell cell
-cell struct cell
-cell function_handle function_handle
-struct double struct
-struct single struct
-struct logical struct
-struct char struct
-struct int8 struct
-struct int16 struct
-struct int32 struct
-struct int64 struct
-struct uint8 struct
-struct uint16 struct
-struct uint32 struct
-struct uint64 struct
-struct cell struct
-struct struct struct
-struct function_handle function_handle
-function_handle double function_handle
-function_handle single function_handle
-function_handle logical function_handle
-function_handle char function_handle
-function_handle int8 function_handle
-function_handle int16 function_handle
-function_handle int32 function_handle
-function_handle int64 function_handle
-function_handle uint8 function_handle
-function_handle uint16 function_handle
-function_handle uint32 function_handle
-function_handle uint64 function_handle
-function_handle cell function_handle
-function_handle struct function_handle
-function_handle function_handle function_handle
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-31371.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,41 @@
+%!test
+%! % Work around MATLAB bug where f(x)(y) is invalid syntax
+%! % (This bug does not apply to Octave)
+%!
+%! C = @(fcn,x) fcn(x);
+%! C2 = @(fcn,x,y) fcn(x,y);
+%! 
+%! % Church Booleans
+%! T = @(t,f) t;
+%! F = @(t,f) f;
+%! 
+%! % Church Numerals
+%! Zero  = @(fcn,x) x;
+%! One   = @(fcn,x) fcn(x);
+%! Two   = @(fcn,x) fcn(fcn(x));
+%! Three = @(fcn,x) fcn(fcn(fcn(x)));
+%! Four  = @(fcn,x) fcn(fcn(fcn(fcn(x))));
+%! 
+%! % Arithmetic Operations
+%! Inc = @(a) @(f,x) f(a(f,x)); % Increment
+%! Add = @(a,b) @(f,x) a(f,b(f,x));
+%! Mult = @(a,b) @(f,x) a(@(x) b(f,x),x);
+%! Dec = @(a) @(f,x) C(a(@(g) @(h) h(g(f)), @(u) x), @(u) u); % Decrement
+%! Sub = @(a,b) b(Dec, a);
+%! 
+%! % Renderer - Convert church numeral to "real" number
+%! Render = @(n) n(@(n) n+1,0);
+%! 
+%! % Predicates
+%! Iszero = @(n) n(@(x) F, T);
+%! 
+%! % Y combinator implements recursion
+%! Ycomb = @(f) C(@(g) f(@(x) C(g(g), x)), ...
+%!                @(g) f(@(x) C(g(g), x)));
+%!
+%! Factorial = Ycomb(@(f) @(n) C(C2(Iszero(n), ...
+%!                   @(d) One, @(d) Mult(n, f(Dec(n)))),0));
+%! 
+%! assert (Render (Factorial (Two)), 2)
+%! assert (Render (Factorial (Three)), 6)
+%! assert (Render (Factorial (Four)), 24)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-35448/bug-35448.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,11 @@
+%!test
+%! global gfun
+%! gfun = @fB;
+%! y = fA (e);
+%! assert (y, e);
+
+%!test
+%! global gfun
+%! gfun = @fC;
+%! y = fA (e);
+%! assert (y, e);
--- a/test/bug-35448/module.mk	Mon Feb 11 15:24:56 2013 -0500
+++ b/test/bug-35448/module.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -2,6 +2,6 @@
   bug-35448/fA.m \
   bug-35448/fB.m \
   bug-35448/fC.m \
-  bug-35448/test_bug_35448.m
+  bug-35448/bug-35448.tst
 
 FCN_FILES += $(bug_35448_FCN_FILES)
--- a/test/bug-35448/test_bug_35448.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-%!test
-%! global gfun
-%! gfun = @fB;
-%! y = fA (e);
-%! assert (y, e);
-
-%!test
-%! global gfun
-%! gfun = @fC;
-%! y = fA (e);
-%! assert (y, e);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-36025/bug-36025.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,9 @@
+%!test
+%! warning off Octave:function-name-clash
+%! f = testclass (1, 2);
+%! assert (one (f), 1);
+%! assert (two (f), 2);
+%! rehash ();
+%! assert (one (f), 1);
+%! assert (two (f), 2);
+%! assert (two (f), 2);
--- a/test/bug-36025/module.mk	Mon Feb 11 15:24:56 2013 -0500
+++ b/test/bug-36025/module.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -2,6 +2,6 @@
   bug-36025/@testclass/one.m \
   bug-36025/@testclass/testclass.m \
   bug-36025/@testclass/two.m \
-  bug-36025/test_bug_36025.m
+  bug-36025/bug-36025.tst
 
 FCN_FILES += $(bug_36025_FCN_FILES)
--- a/test/bug-36025/test_bug_36025.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-%!test
-%! warning off Octave:function-name-clash
-%! f = testclass (1, 2);
-%! assert (one (f), 1);
-%! assert (two (f), 2);
-%! rehash ();
-%! assert (one (f), 1);
-%! assert (two (f), 2);
-%! assert (two (f), 2);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-38236/bug-38236.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,3 @@
+%!test
+%! u_vr
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-38236/df_vr.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,2 @@
+# df_vr.m
+vr = 7;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-38236/module.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,6 @@
+bug_38236_FCN_FILES = \
+  bug-38236/df_vr.m \
+  bug-38236/u_vr.m \
+  bug-38236/bug-38236.tst
+
+FCN_FILES += $(bug_38236_FCN_FILES)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-38236/u_vr.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,17 @@
+# u_vr.m
+
+cmd = "\
+function __demo__ () \
+  df_vr; \
+  v = vr * 2; \
+endfunction \
+";
+
+for ii = 1:2
+  unwind_protect
+    eval (cmd);
+    __demo__;
+  unwind_protect_cleanup
+    clear __demo__
+  end_unwind_protect
+endfor
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/build-bc-overload-tests.sh	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,139 @@
+#! /bin/sh
+
+# Copyright (C) 2010-2012 VZLU Prague
+#
+# This file is part of Octave.
+# 
+# Octave 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 3 of the License, or (at
+# your option) any later version.
+# 
+# Octave 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 Octave; see the file COPYING.  If not, see
+# <http://www.gnu.org/licenses/>.
+
+CLASSES="
+  double
+  single
+  char
+  logical
+  int8
+  int16
+  int32
+  int64
+  uint8
+  uint16
+  uint32
+  uint64
+  struct
+  cell
+  function_handle
+"
+
+if [ $# -eq 1 ]; then
+  case "$1" in
+    --list-files)
+      echo tbcover.m
+      echo bc-overloads.tst
+      for class in $CLASSES; do
+        echo @$class/tbcover.m
+      done
+      exit
+    ;;
+    --list-dirs)
+      for class in $CLASSES; do
+        echo @$class
+      done
+      exit
+    ;;
+    --list-classes)
+      echo $CLASSES
+      exit
+    ;;
+    *)
+      expected_results_file="$1"
+    ;;
+  esac
+else
+  echo "usage: build_bc_overload_tests.sh expected-results-file" 1>&2
+  exit 1
+fi
+
+for class in $CLASSES; do
+  DIR="@$class"
+  test -d $DIR || mkdir $DIR || { echo "error: could not create $DIR"; exit; }
+  cat > $DIR/tbcover.m << EOF
+% !!! DO NOT EDIT !!!
+% generated automatically by build_bc_overload_tests.sh
+function s = tbcover (x, y)
+  s = '$class';
+EOF
+done
+
+cat > tbcover.m << EOF
+% !!! DO NOT EDIT !!!
+% generated automatically by build_bc_overload_tests.sh
+function s = tbcover (x, y)
+  s = 'none';
+EOF
+
+if test "$1" = "overloads_only" ; then
+  exit
+fi
+
+cat > bc-overloads.tst << EOF
+## !!! DO NOT EDIT !!!
+## THIS IS AN AUTOMATICALLY GENERATED FILE
+## modify build_bc_overload_tests.sh to generate the tests you need.
+
+%!shared ex
+%! ex.double = 1;
+%! ex.single = single(1);
+%! ex.logical = true;
+%! ex.char = 'char';
+%! ex.int8  = int8 (1);
+%! ex.int16 = int16 (1);
+%! ex.int32 = int32 (1);
+%! ex.int64 = int64 (1);
+%! ex.uint8  = uint8 (1);
+%! ex.uint16 = uint16 (1);
+%! ex.uint32 = uint32 (1);
+%! ex.uint64 = uint64 (1);
+%! ex.cell = {};
+%! ex.struct = struct ();
+%! ex.function_handle = @numel;
+
+EOF
+
+cat $expected_results_file | \
+while read cl1 cl2 clr ; do
+  cat >> bc-overloads.tst << EOF
+%% Name call
+%!assert (tbcover (ex.$cl1, ex.$cl2), "$clr")
+%% Handle call
+%!assert ((@tbcover) (ex.$cl1, ex.$cl2), "$clr")
+
+EOF
+done
+
+cat >> bc-overloads.tst << EOF
+%%test handles through cellfun
+%!test
+%! f = fieldnames (ex);
+%! n = numel (f);
+%! s = c1 = c2 = cell (n);
+%! for i = 1:n
+%!   for j = 1:n
+%!     c1{i,j} = ex.(f{i});
+%!     c2{i,j} = ex.(f{j});
+%!     s{i,j} = tbcover (ex.(f{i}), ex.(f{j}));
+%!   endfor
+%! endfor
+%! assert (cellfun (@tbcover, c1, c2, "uniformoutput", false), s);
+EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/build-sparse-tests.sh	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,1326 @@
+#!/bin/sh
+
+# Copyright (C) 2006-2012 David Bateman
+#
+# This file is part of Octave.
+# 
+# Octave 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 3 of the License, or (at
+# your option) any later version.
+# 
+# Octave 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 Octave; see the file COPYING.  If not, see
+# <http://www.gnu.org/licenses/>.
+
+# Some tests are commented out because they are known to be broken!
+# Search for "# fails"   
+
+# ./build_sparse_tests.sh preset
+#    creates sparse.tst with preset tests.
+#    Use "test sparse.tst" from octave to run the tests.
+#
+# ./build_sparse_tests.sh random
+#    Creates sprandom.tst with randomly generated matrices.
+#    Use "test sprandom.tst" from octave to run the tests.
+
+# build_sparse_tests.sh generates tests for real and complex sparse matrices.
+# Also, we want to run both fixed tests with known outputs (quick tests)
+# and longer tests with unknown outputs (thorough tests).  This requires
+# two sets of tests -- one which uses preset matrices and another which
+# uses randomly generated matrices.
+#
+# The tests are mostly identical for each case but the code is different,
+# so it is important that the tests be run on all cases.  Because our test 
+# harness doesn't have support for looping or macros (it is only needed
+# for new data types), but sh does, we use sh to generate inline versions of
+# the tests for each case.
+#
+# Our 'macros' use shared variables as parameters.  This allows us to
+# for example define A complex and include all the unary ops tests, 
+# then set A=real(A) and include all the unary ops tests.  Thus the
+# same tests work for real and complex.  For binary tests it is even
+# more complicated because we want full X sparse, sparse X full and
+# sparse X sparse tested.
+#
+# We use the following macros:
+#
+#    gen_section
+#        place a separator in the test file
+#    gen_function
+#        define the function definion
+#    helper gen_specific
+#        specific tests such as error handling and null input
+#    helper gen_eat_zeros
+#        make sure sparse-scalar ops which generate 0 work
+#    gen_specific_tests
+#        specific and eat zeros tests 
+#    helper gen_ordering_tests
+#        ordered comparison operators for real valued tests
+#    helper gen_sparsesparse_ordering_tests
+#        ordered comparison operators for real valued sparse-sparse tests
+#    helper gen_elementop_tests
+#        element-wise matrix binary operators, including scalar-matrix ops.
+#        horizontal/vertical concatenation are here as well.
+#    helper gen_sparsesparse_elementop_tests
+#        element-wise matrix binary operators, for sparse-sparse ops.
+#        horizontal/vertical concatenation are here as well.
+#    helper gen_divop_tests
+#        left and right matrix division operators of rectangular matrices. 
+#        Needs QR solvers
+#    helper gen_square_divop_tests
+#        left and right matrix division operators of square matrices. 
+#    helper gen_matrixop_tests
+#        rectangular matrix binary operators: * 
+#    helper gen_matrixdiag_tests
+#        Tests extract of diag and creation of diagonal matrices using
+#        diag and spdiags functions
+#    helper gen_matrixreshape_tests
+#        Test the reshape function on sparse matrices
+#    helper print_mapper_test
+#        sub-helper function of gen_mapper_tests to print individual tests
+#    helper gen_mapper_tests
+#        Tests all of the one argument mapper functions. There are a few
+#        specific tests that abs, real and imag return real values.
+#    helper gen_unaryop_tests
+#        functions and operators which transform a single matrix
+#    helper gen_save_tests
+#        Tests the load/save functionality for ascii/binary and hdf5 formats
+#    gen_scalar_tests
+#        element ops for real and complex scalar and sparse
+#    gen_rectangular_tests
+#        unary, element, and matrix tests for a and full/sparse b
+#    gen_square_tests
+#        operations which require square matrices: lu, inv, \
+#        A square non-singular matrix is defined from the rectangular
+#        inputs A and B.
+#    gen_assembly_tests
+#        test for sparse constructors with 'sum' vs. 'unique'
+#    gen_select_tests
+#        indexing and assignment tests
+#    gen_solver_tests
+#        Tests the solve function with triangular/banded, etc matrices
+
+case $1 in
+    random) preset=false ;;
+    preset) preset=true ;;
+    '') preset=true ;;
+    *) echo "build_sparse_tests.sh random|preset" && exit 1 ;;
+esac
+
+if $preset; then
+    TESTS=sparse.tst
+else
+    TESTS=sprandom.tst
+fi
+
+# create initial file
+cat >$TESTS <<EOF
+## !!! DO NOT EDIT !!!
+## THIS IS AN AUTOMATICALLY GENERATED FILE
+## modify build_sparse_tests.sh to generate the tests you need.
+EOF
+
+
+# define all functions
+
+
+# =======================================================
+# Section separator
+
+gen_section() {
+cat >>$TESTS <<EOF
+
+# ==============================================================
+
+EOF
+}
+
+
+# =======================================================
+# Specific preset tests
+
+# =======================================================
+# If a sparse operation yields zeros, then those elements 
+# of the returned sparse matrix should be eaten.
+gen_eat_zeros() {
+cat >>$TESTS <<EOF
+%% Make sure newly introduced zeros get eaten
+%!assert (nnz (sparse ([bf,bf,1]).^realmax), 1)
+%!assert (nnz (sparse ([1,bf,bf]).^realmax), 1)
+%!assert (nnz (sparse ([bf,bf,bf]).^realmax), 0)
+
+%!assert (nnz (sparse ([bf;bf;1]).^realmax), 1)
+%!assert (nnz (sparse ([1;bf;bf]).^realmax), 1)
+%!assert (nnz (sparse ([0.5;bf;bf]).^realmax), 0)
+
+%!assert (nnz (sparse ([bf,bf,1])*realmin), 1)
+%!assert (nnz (sparse ([1,bf,bf])*realmin), 1)
+%!assert (nnz (sparse ([bf,bf,bf])*realmin), 0)
+
+%!assert (nnz (sparse ([bf;bf;1])*realmin), 1)
+%!assert (nnz (sparse ([1;bf;bf])*realmin), 1)
+%!assert (nnz (sparse ([bf;bf;bf])*realmin), 0)
+
+EOF
+}
+
+gen_specific() {
+cat >>$TESTS <<EOF
+
+%!test # segfault test from edd@debian.org
+%! n = 510;
+%! sparse (kron ((1:n)', ones(n,1)), kron (ones(n,1), (1:n)'), ones (n)); 
+
+%% segfault tests from Fabian@isas-berlin.de
+%% Note that the last four do not fail, but rather give a warning
+%% of a singular matrix, which is consistent with the full matrix
+%% behaviour.  They are therefore disabled.
+%!testif HAVE_UMFPACK
+%! assert (inv (sparse ([1,1;1,1+i])), sparse([1-1i,1i;1i,-1i]), 10*eps);
+%#!error inv ( sparse ([1,1;1,1]  ) );
+%#!error inv ( sparse ([0,0;0,1]  ) );
+%#!error inv ( sparse ([0,0;0,1+i]) );
+%#!error inv ( sparse ([0,0;0,0]  ) );
+
+%% error handling in constructor
+%!error sparse (1,[2,3],[1,2,3])
+%!error sparse ([1,1],[1,1],[1,2],3,3,"bogus")
+%!error sparse ([1,3],[1,-4],[3,5],2,2)
+%!error sparse ([1,3],[1,-4],[3,5i],2,2)
+%!error sparse (-1,-1,1)
+EOF
+}
+
+
+gen_specific_tests() {
+    gen_section
+    gen_specific
+    gen_section
+    echo '%!shared bf' >> $TESTS
+    echo '%!test bf=realmin;' >> $TESTS
+    gen_eat_zeros
+    echo '%!test bf=realmin+realmin*1i;' >> $TESTS
+    gen_eat_zeros
+    cat >>$TESTS <<EOF
+%!assert (nnz (sparse ([-1,realmin,realmin]).^1.5), 1)
+%!assert (nnz (sparse ([-1,realmin,realmin,1]).^1.5), 2)
+
+## Make sure scalar v==0 doesn't confuse matters
+%!assert (nnz (sparse (1,1,0)), 0)
+%!assert (nnz (sparse (eye (3))*0), 0)
+%!assert (nnz (sparse (eye (3))-sparse (eye (3))), 0)
+
+%!test
+%! wdbz = warning ("query", "Octave:divide-by-zero");
+%! warning ("off", "Octave:divide-by-zero");
+%! assert (full (sparse (eye (3))/0), full (eye (3)/0));
+%! warning (wdbz.state, "Octave:divide-by-zero");
+
+EOF
+}
+
+
+# =======================================================
+# Main function definition
+
+gen_function() {
+    if $preset; then
+	cat >>$TESTS <<EOF
+##
+## test_sparse
+##
+##    run preset sparse tests.  All should pass.
+function [passes, tests] = test_sparse
+  disp ("writing test output to sptest.log");
+  test ("sparse.tst", "normal", "sptest.log");
+endfunction
+
+EOF
+    else
+	cat >>$TESTS <<EOF
+##
+## test_sprandom
+##
+##  total_passes=0; total_tests=0;
+##  for i=1:10
+##     [passes,tests] = sprandomtest;
+##    total_passes += passes;
+##    total_tests += tests;
+##  end
+##  The test log is appended to sprandomtest.log
+function [passes,total] = test_sprandom
+  warning ("untested --- fix the source in build_sparse_tests.sh");
+  disp ("appending test output to sprandomtest.log");
+  fid = fopen ("sprandomtest.log", "at");
+  test ("sprandom.tst", "normal", fid);
+  ##[passes, total] = test("sprandomtest","normal",fid);
+  fclose (fid);
+endfunction
+
+EOF
+    fi
+    
+}
+
+
+# =======================================================
+# matrix ops
+
+# test ordered comparisons: uses as,af,bs,bf
+gen_ordering_tests() {
+    cat >>$TESTS <<EOF
+%% real values can be ordered (uses as,af)
+%!assert (as<=bf, sparse (af<=bf))
+%!assert (bf<=as, sparse (bf<=af))
+
+%!assert (as>=bf, sparse (af>=bf))
+%!assert (bf>=as, sparse (bf>=af))
+
+%!assert (as<bf, sparse (af<bf))
+%!assert (bf<as, sparse (bf<af))
+
+%!assert (as>bf, sparse (af>bf))
+%!assert (bf>as, sparse (bf>af))
+
+EOF
+}
+
+gen_sparsesparse_ordering_tests() {
+    cat >>$TESTS <<EOF
+%!assert (as<=bs, sparse (af<=bf))
+%!assert (as>=bs, sparse (af>=bf))
+%!assert (as<bs, sparse (af<bf))
+%!assert (as>bs, sparse (af>bf))
+EOF
+}
+
+# test element-wise binary operations: uses as,af,bs,bf,scalar
+gen_elementop_tests() {
+    cat >>$TESTS <<EOF
+%% Elementwise binary tests (uses as,af,bs,bf,scalar)
+%!assert (as==bs, sparse (af==bf))
+%!assert (bf==as, sparse (bf==af))
+
+%!assert (as!=bf, sparse (af!=bf))
+%!assert (bf!=as, sparse (bf!=af))
+
+%!assert (as+bf, af+bf)
+%!assert (bf+as, bf+af)
+
+%!assert (as-bf, af-bf)
+%!assert (bf-as, bf-af)
+
+%!assert (as.*bf, sparse (af.*bf))
+%!assert (bf.*as, sparse (bf.*af))
+
+%!assert (as./bf, sparse (af./bf), 100*eps)
+%!assert (bf.\as, sparse (bf.\af), 100*eps)
+
+%!test
+%! sv = as.^bf;
+%! fv = af.^bf;
+%! idx = find (af~=0);
+%! assert (sv(:)(idx), sparse (fv(:)(idx)), 100*eps)
+
+EOF
+}
+
+gen_sparsesparse_elementop_tests() {
+    cat >>$TESTS <<EOF
+%!assert (as==bs, sparse (af==bf))
+%!assert (as!=bs, sparse (af!=bf))
+%!assert (as+bs, sparse (af+bf))
+%!assert (as-bs, sparse (af-bf))
+%!assert (as.*bs, sparse (af.*bf))
+%!xtest assert (as./bs, sparse (af./bf), 100*eps)
+%!test
+%! sv = as.^bs;
+%! fv = af.^bf;
+%! idx = find (af~=0);
+%! assert(sv(:)(idx), sparse (fv(:)(idx)), 100*eps)
+
+EOF
+}
+
+# test matrix-matrix left and right division: uses as,af,bs,bf
+gen_divop_tests() {
+    cat >>$TESTS <<EOF
+%% Matrix-matrix operators (uses af,as,bs,bf)
+%!assert (as/bf, af/bf, 100*eps)
+%!assert (af/bs, af/bf, 100*eps)
+%!assert (as/bs, sparse (af/bf), 100*eps)
+%!assert (bs\af', bf\af', 100*eps)
+%!assert (bf\as', bf\af', 100*eps)
+%!assert (bs\as', sparse (bf\af'), 100*eps)
+
+EOF
+}
+
+# test matrix-matrix left and right division: uses as,af,bs,bf
+gen_square_divop_tests() {
+    cat >>$TESTS <<EOF
+%% Matrix-matrix operators (uses af,as,bs,bf)
+%!assert (as/bf, af/bf, 100*eps)
+%!assert (af/bs, af/bf, 100*eps)
+%!assert (as/bs, sparse (af/bf), 100*eps)
+%!assert (bs\af', bf\af', 100*eps)
+%!assert (bf\as', bf\af', 100*eps)
+%!assert (bs\as', sparse (bf\af'), 100*eps)
+
+EOF
+}
+
+# test matrix-matrix operations: uses as,af,bs,bf
+gen_matrixop_tests() {
+    cat >>$TESTS <<EOF
+%% Matrix-matrix operators (uses af,as,bs,bf)
+%!assert (as*bf', af*bf')
+%!assert (af*bs', af*bf')
+%!assert (as*bs', sparse (af*bf'))
+
+EOF
+}
+
+# test diagonal operations
+gen_matrixdiag_tests() {
+    cat >>$TESTS <<EOF
+%% Matrix diagonal tests (uses af,as,bf,bs)
+%!assert (diag (as), sparse (diag (af)))
+%!assert (diag (bs), sparse (diag (bf)))
+%!assert (diag (as,1), sparse (diag (af,1)))
+%!assert (diag (bs,1), sparse (diag (bf,1)))
+%!assert (diag (as,-1), sparse (diag (af,-1)))
+%!assert (diag (bs,-1), sparse (diag (bf,-1)))
+%!assert (diag (as(:)), sparse (diag (af(:))))
+%!assert (diag (as(:),1), sparse (diag (af(:),1)))
+%!assert (diag (as(:),-1), sparse (diag (af(:),-1)))
+%!assert (diag (as(:)'), sparse (diag (af(:)')))
+%!assert (diag (as(:)',1), sparse (diag (af(:)',1)))
+%!assert (diag (as(:)',-1), sparse (diag (af(:)',-1)))
+%!assert (spdiags (as,[0,1]), [diag(af,0), diag(af,1)])
+%!test
+%! [tb,tc]=spdiags(as); 
+%! assert (spdiags (tb,tc,sparse (zeros (size (as)))), as);
+%! assert (spdiags (tb,tc,size (as,1),size (as,2)), as);
+
+EOF
+}
+
+# test matrix reshape operations
+gen_matrixreshape_tests() {
+    cat >>$TESTS <<EOF
+%% Matrix diagonal tests (uses af,as,bf,bs)
+%!assert(reshape(as,1,prod(size(as))),sparse(reshape(af,1,prod(size(af)))))
+%!assert(reshape(as,prod(size(as)),1),sparse(reshape(af,prod(size(af)),1)))
+%!assert(reshape(as,fliplr(size(as))),sparse(reshape(af,fliplr(size(af)))))
+%!assert(reshape(bs,1,prod(size(as))),sparse(reshape(bf,1,prod(size(af)))))
+%!assert(reshape(bs,prod(size(as)),1),sparse(reshape(bf,prod(size(af)),1)))
+%!assert(reshape(bs,fliplr(size(as))),sparse(reshape(bf,fliplr(size(af)))))
+
+EOF
+}
+
+# test mapper matrix operations: uses as,af
+print_mapper_test() {
+echo "%!assert ($1(as), sparse ($1(af)))" >>$TESTS
+}
+
+print_real_mapper_test() {
+    cat >>$TESTS <<EOF
+%!test
+%! wn2s = warning ("query", "Octave:num-to-str");
+%! warning ("off", "Octave:num-to-str");
+%! if (isreal (af))
+%!   if ($2)
+%!     assert ($1(as), sparse ($1(af)));
+%!   else
+%!     assert ($1(as), $1(af));
+%!   endif
+%! endif
+%! warning (wn2s.state, "Octave:num-to-str");
+
+EOF
+}
+
+gen_mapper_tests() {
+echo "%% Unary matrix tests (uses af,as)">>$TESTS
+print_mapper_test abs
+print_mapper_test acos
+print_mapper_test acosh
+print_mapper_test angle
+print_mapper_test arg
+print_mapper_test asin
+print_mapper_test asinh
+print_mapper_test atan
+print_mapper_test atanh
+print_mapper_test ceil
+print_mapper_test conj
+print_mapper_test cos
+print_mapper_test cosh
+print_mapper_test exp
+print_mapper_test finite
+print_mapper_test fix
+print_mapper_test floor
+print_mapper_test imag
+print_mapper_test isinf
+print_mapper_test isna
+print_mapper_test isnan
+print_mapper_test log
+#print_mapper_test log10   ## fails with different NaN, not a problem
+print_mapper_test real
+print_mapper_test round
+print_mapper_test sign
+print_mapper_test sin
+print_mapper_test sinh
+print_mapper_test sqrt
+print_mapper_test tan
+print_mapper_test tanh
+
+# Specific tests for certain mapper functions
+    cat >>$TESTS <<EOF
+%!assert (issparse (abs (as))  && isreal (abs (as)))
+%!assert (issparse (real (as)) && isreal (real (as)))
+%!assert (issparse (imag (as)) && isreal (imag (as)))
+
+EOF
+}
+
+gen_real_mapper_tests() {
+echo "%% Unary matrix tests (uses af,as)">>$TESTS
+print_real_mapper_test erf 1
+print_real_mapper_test erfc 1
+#print_real_mapper_test gamma 1
+print_real_mapper_test isalnum 0
+print_real_mapper_test isalpha 0
+print_real_mapper_test isascii 0
+print_real_mapper_test iscntrl 0
+print_real_mapper_test isdigit 0
+print_real_mapper_test isgraph 0
+print_real_mapper_test islower 0
+print_real_mapper_test isprint 0
+print_real_mapper_test ispunct 0
+print_real_mapper_test isspace 0
+print_real_mapper_test isupper 0
+print_real_mapper_test isxdigit 0
+#print_real_mapper_test lgamma 1
+
+# Specific tests for certain mapper functions
+    cat >>$TESTS <<EOF
+
+%% These mapper functions always return a full matrix
+%!test
+%! wn2s = warning ("query", "Octave:num-to-str");
+%! warning ("off", "Octave:num-to-str");
+%! if (isreal (af))
+%!   assert (toascii (as), toascii (af));
+%!   assert (tolower (as), tolower (af));
+%!   assert (toupper (as), toupper (af));
+%! endif
+%! warning (wn2s.state, "Octave:num-to-str");
+
+EOF
+}
+
+# test matrix operations: uses as,af
+gen_unaryop_tests() {
+    cat >>$TESTS <<EOF
+%% Unary matrix tests (uses af,as)
+%!assert (issparse (as))
+%!assert (!issparse (af))
+%!assert (! (issparse (af) && iscomplex (af)))
+%!assert (! (issparse (af) && isreal (af)))
+%!assert (sum (as), sparse (sum (af)))
+%!assert (sum (as,1), sparse (sum (af,1)))
+%!assert (sum (as,2), sparse (sum (af,2)))
+%!assert (cumsum (as), sparse (cumsum (af)))
+%!assert (cumsum (as,1), sparse (cumsum (af,1)))
+%!assert (cumsum (as,2), sparse (cumsum (af,2)))
+%!assert (sumsq (as), sparse (sumsq (af)))
+%!assert (sumsq (as,1), sparse (sumsq (af,1)))
+%!assert (sumsq (as,2), sparse (sumsq (af,2)))
+%!assert (prod (as), sparse (prod (af)))
+%!assert (prod (as,1), sparse (prod (af,1)))
+%!assert (prod (as,2), sparse (prod (af,2)))
+%!assert (cumprod (as), sparse (cumprod (af)))
+%!assert (cumprod (as,1), sparse (cumprod (af,1)))
+%!assert (cumprod (as,2), sparse (cumprod (af,2)))
+
+%!assert (min (as), sparse (min (af)))
+%!assert (full (min (as(:))),min (af(:)))
+%!assert (min (as,[],1), sparse (min (af,[],1)))
+%!assert (min (as,[],2), sparse (min (af,[],2)))
+%!assert (min (as,[],1), sparse (min (af,[],1)))
+%!assert (min (as,0), sparse (min (af,0)))
+%!assert (min (as,bs), sparse (min (af,bf)))
+%!assert (max (as), sparse (max (af)))
+%!assert (full (max (as(:))), max (af(:)))
+%!assert (max (as,[],1), sparse (max (af,[],1)))
+%!assert (max (as,[],2), sparse (max (af,[],2)))
+%!assert (max (as,[],1), sparse (max (af,[],1)))
+%!assert (max (as,0), sparse (max (af,0)))
+%!assert (max (as,bs), sparse (max (af,bf)))
+
+%!assert (as==as)
+%!assert (as==af)
+%!assert (af==as)
+%!test
+%! [ii,jj,vv,nr,nc] = find (as);
+%! assert (af, full (sparse (ii,jj,vv,nr,nc)));
+%!assert (nnz (as), sum (af(:)!=0))
+%!assert (nnz (as), nnz (af))
+%!assert (issparse (as.'))
+%!assert (issparse (as'))
+%!assert (issparse (-as))
+%!assert (~as, sparse (~af))
+%!assert (as.', sparse (af.'));
+%!assert (as',  sparse (af'));
+%!assert (-as, sparse (-af));
+%!assert (~as, sparse (~af));
+%!error [i,j]=size (af);as(i-1,j+1);
+%!error [i,j]=size (af);as(i+1,j-1);
+%!test
+%! [Is,Js,Vs] = find (as);
+%! [If,Jf,Vf] = find (af);
+%! assert (Is, If);
+%! assert (Js, Jf);
+%! assert (Vs, Vf);
+%!error as(0,1);
+%!error as(1,0);
+%!assert (find (as), find (af))
+%!test
+%! [i,j,v] = find (as);
+%! [m,n] = size (as);
+%! x = sparse (i,j,v,m,n);
+%! assert (x, as);
+%!test
+%! [i,j,v,m,n] = find (as);
+%! x = sparse (i,j,v,m,n);
+%! assert (x, as);
+%!assert (issparse (horzcat (as,as)));
+%!assert (issparse (vertcat (as,as)));
+%!assert (issparse (cat (1,as,as)));
+%!assert (issparse (cat (2,as,as)));
+%!assert (issparse ([as,as]));
+%!assert (issparse ([as;as]));
+%!assert (horzcat (as,as), sparse ([af,af]));
+%!assert (vertcat (as,as), sparse ([af;af]));
+%!assert (horzcat (as,as,as), sparse ([af,af,af]));
+%!assert (vertcat (as,as,as), sparse ([af;af;af]));
+%!assert ([as,as], sparse ([af,af]));
+%!assert ([as;as], sparse ([af;af]));
+%!assert ([as,as,as], sparse ([af,af,af]));
+%!assert ([as;as;as], sparse ([af;af;af]));
+%!assert (cat (2,as,as), sparse ([af,af]));
+%!assert (cat (1,as,as), sparse ([af;af]));
+%!assert (cat (2,as,as,as), sparse ([af,af,af]));
+%!assert (cat (1,as,as,as), sparse ([af;af;af]));
+%!assert (issparse ([as,af]));
+%!assert (issparse ([af,as]));
+%!assert ([as,af], sparse ([af,af]));
+%!assert ([as;af], sparse ([af;af]));
+
+EOF
+}
+
+# operations which require square matrices.
+gen_square_tests() {
+# The \ and / operator tests on square matrices
+    gen_square_divop_tests
+
+    cat >>$TESTS <<EOF
+%!testif HAVE_UMFPACK
+%! assert(det(bs+speye(size(bs))),det(bf+eye(size(bf))),100*eps*abs(det(bf+eye(size(bf)))))
+
+%!testif HAVE_UMFPACK 
+%! [l,u] = lu (sparse ([1,1;1,1]));
+%! assert (l*u, [1,1;1,1], 10*eps);
+
+%!testif HAVE_UMFPACK
+%! [l,u] = lu (sparse ([1,1;1,1+i]));
+%! assert (l, sparse ([1,2,2],[1,1,2],1), 10*eps);
+%! assert (u, sparse ([1,1,2],[1,2,2],[1,1,1i]), 10*eps);
+
+%!testif HAVE_UMFPACK   # permuted LU
+%! [L,U] = lu (bs);
+%! assert (L*U, bs, 1e-10);
+
+%!testif HAVE_UMFPACK   # simple LU + row permutations
+%! [L,U,P] = lu (bs);
+%! assert (P'*L*U, bs, 1e-10);
+%! # triangularity
+%! [i,j,v] = find (L);
+%! assert (i-j>=0);
+%! [i,j,v] = find (U);
+%! assert (j-i>=0);
+
+%!testif HAVE_UMFPACK   # simple LU + row/col permutations
+%! [L,U,P,Q] = lu (bs);
+%! assert (P'*L*U*Q', bs, 1e-10);
+%! # triangularity
+%! [i,j,v] = find (L);
+%! assert (i-j>=0);
+%! [i,j,v] = find (U);
+%! assert (j-i>=0);
+
+%!testif HAVE_UMFPACK   # LU with vector permutations
+%! [L,U,P,Q] = lu (bs,'vector');
+%! assert (L(P,:)*U(:,Q), bs, 1e-10);
+%! # triangularity
+%! [i,j,v] = find (L);
+%! assert (i-j>=0);
+%! [i,j,v] = find (U);
+%! assert (j-i>=0);
+
+%!testif HAVE_UMFPACK   # LU with scaling
+%! [L,U,P,Q,R] = lu (bs);
+%! assert (R*P'*L*U*Q', bs, 1e-10);
+%! # triangularity
+%! [i,j,v] = find (L);
+%! assert (i-j>=0);
+%! [i,j,v] = find (U);
+%! assert (j-i>=0);
+
+%!testif HAVE_UMFPACK   # inverse
+%! assert (inv (bs)*bs, sparse (eye (rows (bs))), 1e-10);
+
+%!assert (bf\as', bf\af', 100*eps);
+%!assert (bs\af', bf\af', 100*eps);
+%!assert (bs\as', sparse (bf\af'), 100*eps);
+
+EOF
+}
+
+# Cholesky tests
+gen_cholesky_tests() {
+    cat >>$TESTS <<EOF
+%!testif HAVE_CHOLMOD
+%! assert (chol (bs)'*chol (bs), bs, 1e-10);
+%!testif HAVE_CHOLMOD 
+%! assert (chol (bs,'lower')*chol (bs,'lower')', bs, 1e-10);
+%!testif HAVE_CHOLMOD
+%! assert (chol (bs,'lower'), chol (bs)', 1e-10);
+
+%!testif HAVE_CHOLMOD   # Return Partial Cholesky factorization
+%! [RS,PS] = chol (bs);
+%! assert (RS'*RS, bs, 1e-10);
+%! assert (PS, 0);
+%! [LS,PS] = chol (bs,'lower');
+%! assert (LS*LS', bs, 1e-10);
+%! assert (PS, 0);
+
+%!testif HAVE_CHOLMOD   # Permuted Cholesky factorization
+%! [RS,PS,QS] = chol (bs);
+%! assert (RS'*RS, QS*bs*QS', 1e-10);
+%! assert (PS, 0);
+%! [LS,PS,QS] = chol (bs,'lower');
+%! assert (LS*LS', QS*bs*QS', 1e-10);
+%! assert (PS, 0);
+
+EOF
+}
+
+# test scalar operations: uses af and real scalar bf; modifies as,bf,bs
+gen_scalar_tests() {
+    echo '%!test as=sparse(af);' >> $TESTS
+    echo '%!test bs=bf;' >> $TESTS
+    gen_elementop_tests
+    gen_ordering_tests
+    echo '%!test bf=bf+1i;' >>$TESTS
+    echo '%!test bs=bf;' >> $TESTS
+    gen_elementop_tests
+}
+
+# test matrix operations: uses af and bf; modifies as,bs
+gen_rectangular_tests() {
+    echo '%!test as=sparse(af);' >> $TESTS
+    echo '%!test bs=sparse(bf);' >>$TESTS
+    gen_mapper_tests
+    gen_real_mapper_tests
+    gen_unaryop_tests
+    gen_elementop_tests
+    gen_sparsesparse_elementop_tests
+    gen_matrixop_tests
+    # gen_divop_tests # Disable rectangular \ and / for now
+    gen_matrixdiag_tests
+    gen_matrixreshape_tests
+    cat >>$TESTS <<EOF
+%!testif HAVE_UMFPACK   # permuted LU
+%! [L,U] = lu (bs);
+%! assert (L*U, bs, 1e-10);
+
+%!testif HAVE_UMFPACK   # simple LU + row permutations
+%! [L,U,P] = lu (bs);
+%! assert (P'*L*U, bs, 1e-10);
+%! # triangularity
+%! [i,j,v] = find (L);
+%! assert (i-j>=0);
+%! [i,j,v] = find (U);
+%! assert (j-i>=0);
+
+%!testif HAVE_UMFPACK   # simple LU + row/col permutations
+%! [L,U,P,Q] = lu (bs);
+%! assert (P'*L*U*Q', bs, 1e-10);
+%! # triangularity
+%! [i,j,v] = find (L);
+%! assert (i-j>=0);
+%! [i,j,v] = find (U);
+%! assert (j-i>=0);
+
+%!testif HAVE_UMFPACK   # LU with vector permutations
+%! [L,U,P,Q] = lu (bs,'vector');
+%! assert (L (P,:)*U (:,Q), bs, 1e-10);
+%! # triangularity
+%! [i,j,v] = find (L);
+%! assert (i-j>=0);
+%! [i,j,v] = find (U);
+%! assert (j-i>=0);
+
+%!testif HAVE_UMFPACK   # LU with scaling
+%! [L,U,P,Q,R] = lu (bs);
+%! assert (R*P'*L*U*Q', bs, 1e-10);
+%! # triangularity
+%! [i,j,v] = find (L);
+%! assert (i-j>=0);
+%! [i,j,v] = find (U);
+%! assert (j-i>=0);
+
+EOF
+}
+
+
+# =======================================================
+# sparse assembly tests
+
+gen_assembly_tests() {
+cat >>$TESTS <<EOF
+%%Assembly tests
+%!test
+%! m = max ([m;r(:)]);
+%! n = max ([n;c(:)]);
+%! funiq = fsum = zeros (m,n);
+%! funiq(r(:) + m*(c(:)-1) ) = ones (size (r(:)));
+%! funiq = sparse (funiq);
+%! for k=1:length(r)
+%!   fsum(r(k),c(k)) += 1;
+%! endfor
+%! fsum = sparse (fsum);
+%!assert (sparse (r,c,1), sparse (fsum(1:max(r), 1:max(c))))
+%!assert (sparse (r,c,1,"sum"), sparse (fsum(1:max (r),1:max (c))))
+%!assert (sparse (r,c,1,"unique"), sparse (funiq(1:max (r),1:max (c))))
+%!assert (sparse (r,c,1,m,n), sparse (fsum))
+%!assert (sparse (r,c,1,m,n,"sum"), sparse (fsum))
+%!assert (sparse (r,c,1,m,n,"unique"), sparse (funiq))
+
+%!assert (sparse (r,c,1i), sparse (fsum(1:max (r),1:max (c))*1i))
+%!assert (sparse (r,c,1i,"sum"), sparse (fsum(1:max (r),1:max (c))*1i))
+%!assert (sparse (r,c,1i,"unique"), sparse (funiq(1:max (r),1:max (c))*1i))
+%!assert (sparse (r,c,1i,m,n), sparse (fsum*1i))
+%!assert (sparse (r,c,1i,m,n,"sum"), sparse (fsum*1i))
+%!assert (sparse (r,c,1i,m,n,"unique"), sparse (funiq*1i))
+
+%!test
+%! if (issparse (funiq))
+%!   assert (sparse (full (1i*funiq)), sparse (1i*funiq));
+%! endif
+
+%!assert (sparse (full (funiq)), funiq)
+
+
+EOF
+}
+
+# =======================================================
+# sparse selection tests
+
+gen_scalar_select_tests () {
+    cat >>$TESTS <<EOF
+%!assert (sparse (42)([1,1]), sparse ([42,42]))
+%!assert (sparse (42*1i)([1,1]), sparse ([42,42].*1i))
+EOF
+}
+
+gen_select_tests() {
+    cat >>$TESTS <<EOF
+%!test as=sparse(af);
+
+%% Point tests
+%!test idx = ridx(:) + rows (as) * (cidx (:)-1);
+%!assert (sparse (as(idx)), sparse (af(idx)))
+%!assert (as(idx), sparse (af(idx)));
+%!assert (as(idx'), sparse (af(idx')));
+%!assert (as(flipud (idx(:))), sparse (af(flipud (idx(:)))))
+%!assert (as([idx,idx]), sparse (af([idx,idx])))
+%!error (as(reshape ([idx;idx], [1,length(idx),2])))
+
+%% Slice tests
+%!assert (as(ridx,cidx), sparse (af(ridx,cidx)))
+%!assert (as(ridx,:), sparse (af(ridx,:)))
+%!assert (as(:,cidx), sparse (af(:,cidx)))
+%!assert (as(:,:), sparse (af(:,:)))
+%!assert (as((size (as,1):-1:1),:), sparse (af((size (af,1):-1:1),:)))
+%!assert (as(:,(size (as,2):-1:1)), sparse (af(:, (size (af,2):-1:1))))
+
+%% Indexing tests
+%!assert (full (as([1,1],:)), af([1,1],:))
+%!assert (full (as(:,[1,1])), af(:,[1,1]))
+%!test
+%! [i,j,v] = find (as);
+%! assert (as(i(1),j(1))([1,1]), sparse ([v(1), v(1)]))
+
+%% Assignment test
+%!test
+%! ts=as; ts(:,:) = ts(fliplr (1:size (as,1)),:);
+%! tf=af; tf(:,:) = tf(fliplr (1:size (af,1)),:);
+%! assert (ts, sparse (tf));
+%!test
+%! ts=as; ts(fliplr (1:size (as,1)),:) = ts;
+%! tf=af; tf(fliplr (1:size (af,1)),:) = tf;
+%! assert (ts, sparse (tf));
+%!test
+%! ts=as; ts(:,fliplr (1:size (as,2))) = ts;
+%! tf=af; tf(:,fliplr (1:size (af,2))) = tf;
+%! assert (ts, sparse (tf));
+%!test
+%! ts(fliplr (1:size (as,1))) = as(:,1);
+%! tf(fliplr (1:size (af,1))) = af(:,1);
+%! assert (ts, sparse (tf));
+
+%% Deletion tests
+%!test
+%! ts=as; ts(1,:)=[]; tf=af; tf(1,:)=[];
+%! assert (ts, sparse (tf));
+%!test
+%! ts=as; ts(:,1)=[]; tf=af; tf(:,1)=[];
+%! assert (ts, sparse (tf));
+
+%% Test "end" keyword
+%!assert (full (as(end)), af(end))
+%!assert (full (as(1,end)), af(1,end))
+%!assert (full (as(end,1)), af(end,1))
+%!assert (full (as(end,end)), af(end,end))
+%!assert (as(2:end,2:end), sparse (af(2:end,2:end)))
+%!assert (as(1:end-1,1:end-1), sparse (af(1:end-1,1:end-1)))
+EOF
+}
+
+# =======================================================
+# sparse save and load tests
+
+gen_save_tests() {
+    cat >>$TESTS <<EOF
+%!test # save ascii
+%! savefile = tmpnam ();
+%! as_save = as;
+%! save ("-text", savefile, "bf", "as_save", "af");
+%! clear as_save;
+%! load (savefile, "as_save");
+%! unlink (savefile);
+%! assert (as_save, sparse(af));
+%!test # save binary
+%! savefile = tmpnam ();
+%! as_save = as;
+%! save ("-binary", savefile, "bf", "as_save", "af");
+%! clear as_save;
+%! load (savefile, "as_save");
+%! unlink (savefile);
+%! assert (as_save, sparse(af));
+%!testif HAVE_HDF5   # save hdf5
+%! savefile = tmpnam ();
+%! as_save = as;
+%! save ("-hdf5", savefile, "bf", "as_save", "af");
+%! clear as_save;
+%! load (savefile, "as_save");
+%! unlink (savefile);
+%! assert (as_save, sparse(af));
+## FIXME: We should skip (or mark as an expected failure) the test for
+## saving sparse matrices to MAT files when using 64-bit indexing since
+## that is not implemented yet.
+%!test # save matlab
+%! savefile = tmpnam ();
+%! as_save = as;
+%! save ("-mat", savefile, "bf", "as_save", "af");
+%! clear as_save;
+%! load (savefile, "as_save");
+%! unlink (savefile);
+%! assert (as_save, sparse(af));
+EOF
+}
+
+# =============================================================
+# Specific solver tests for matrices that will test all of the solver
+# code. Uses alpha and beta
+gen_solver_tests() {
+
+if $preset; then
+  cat >>$TESTS <<EOF
+%! n=8;
+%! lf=diag (1:n); lf(n-1,1)=0.5*alpha; lf(n,2)=0.25*alpha; ls=sparse (lf);
+%! uf=diag (1:n); uf(1,n-1)=2*alpha; uf(2,n)=alpha; us=sparse (uf);
+%! ts=spdiags (ones (n,3),-1:1,n,n) + diag (1:n); tf = full (ts);
+EOF
+else
+  cat >>$TESTS <<EOF
+%! n = floor (lognrnd (8,2)+1)';
+%! ls = tril (sprandn (8,8,0.2),-1).*alpha + n*speye (8); lf = full (ls);
+%! us = triu (sprandn (8,8,0.2),1).*alpha + n*speye (8); uf = full (us);
+%! ts = spdiags (randn (8,3),-1:1,8,8).*alpha; tf = full (ts);
+EOF
+fi
+
+cat >>$TESTS <<EOF
+%! df = diag (1:n).* alpha; ds = sparse (df);
+%! pdf = df(randperm (n),randperm (n));
+%! pds = sparse (pdf);
+%! plf = lf(randperm (n),randperm (n));
+%! pls = sparse (plf);
+%! puf = uf(randperm (n),randperm (n));
+%! pus = sparse (puf);
+%! bs = spdiags (repmat ([1:n]',1,4),-2:1,n,n).*alpha;
+%! bf = full (bs);
+%! cf = lf + lf'; cs = sparse (cf);
+%! bcf = bf + bf'; bcs = sparse (bcf);
+%! tcf = tf + tf'; tcs = sparse (tcf);
+%! xf = diag (1:n) + fliplr (diag (1:n)).*beta;
+%! xs = sparse (xf);
+%!assert (ds\xf, df\xf, 1e-10);
+%!assert (ds\xs, sparse (df\xf), 1e-10);
+%!assert (pds\xf, pdf\xf, 1e-10);
+%!assert (pds\xs, sparse (pdf\xf), 1e-10);
+%!assert (ls\xf, lf\xf, 1e-10);
+%!assert (sparse (ls\xs), sparse (lf\xf), 1e-10);
+%!testif HAVE_UMFPACK
+%! assert (pls\xf, plf\xf, 1e-10);
+%!testif HAVE_UMFPACK
+%! assert (sparse (pls\xs), sparse (plf\xf), 1e-10);
+%!assert (us\xf, uf\xf, 1e-10);
+%!assert (sparse (us\xs), sparse (uf\xf), 1e-10);
+%!testif HAVE_UMFPACK
+%! assert (pus\xf, puf\xf, 1e-10);
+%!testif HAVE_UMFPACK
+%! assert (sparse (pus\xs), sparse (puf\xf), 1e-10);
+%!assert (bs\xf, bf\xf, 1e-10);
+%!assert (sparse (bs\xs), sparse (bf\xf), 1e-10);
+%!testif HAVE_UMFPACK
+%! assert (cs\xf, cf\xf, 1e-10);
+%!testif HAVE_UMFPACK
+%! assert (sparse (cs\xs), sparse (cf\xf), 1e-10);
+%!testif HAVE_UMFPACK
+%! assert (bcs\xf, bcf\xf, 1e-10);
+%!testif HAVE_UMFPACK
+%! assert (sparse (bcs\xs), sparse (bcf\xf), 1e-10);
+%!assert (ts\xf, tf\xf, 1e-10);
+%!assert (sparse (ts\xs), sparse (tf\xf), 1e-10);
+%!assert (tcs\xf, tcf\xf, 1e-10);
+%!assert (sparse (tcs\xs), sparse (tcf\xf), 1e-10);
+
+EOF
+
+cat >>$TESTS <<EOF
+%% QR solver tests
+
+%!function f(a, sz, feps)
+%! b = randn (sz);
+%! x = a \ b; 
+%! assert (a * x, b, feps);
+%! b = randn (sz) + 1i*randn (sz);
+%! x = a \ b;  
+%! assert (a * x, b, feps);
+%! b = sprandn (sz(1),sz(2),0.2);
+%! x = a \ b;
+%! assert (sparse (a * x), b, feps);
+%! b = sprandn (sz(1),sz(2),0.2) + 1i*sprandn (sz(1),sz(2),0.2);
+%! x = a \ b; 
+%! assert (sparse (a * x), b, feps);
+%!endfunction
+%!testif HAVE_UMFPACK
+%! a = alpha*sprandn (10,11,0.2) + speye (10,11);
+%! f(a,[10,2],1e-10);
+%! ## Test this by forcing matrix_type, as can't get a certain 
+%! ## result for over-determined systems.
+%! a = alpha*sprandn(10,10,0.2) + speye(10,10);
+%! matrix_type (a, "Singular");
+%! f(a,[10,2],1e-10);
+
+%% Rectanguar solver tests that don't use QR
+
+%!test
+%! ds = alpha * spdiags ([1:11]',0,10,11);
+%! df = full (ds);
+%! xf = beta * ones (10,2);
+%! xs = speye (10,10);
+%!assert (ds\xf, df\xf, 100*eps)
+%!assert (ds\xs, sparse (df\xs), 100*eps)
+%!test
+%! pds = ds([2,1,3:10],:);
+%! pdf = full (pds);
+%!assert (pds\xf, pdf\xf, 100*eps)
+%!assert (pds\xs, sparse (pdf\xs), 100*eps)
+%!test
+%! ds = alpha * spdiags ([1:11]',0,11,10);
+%! df = full (ds);
+%! xf = beta * ones (11,2);
+%! xs = speye (11,11);
+%!assert (ds\xf, df\xf, 100*eps)
+%!assert (ds\xs, sparse (df\xs), 100*eps)
+%!test
+%! pds = ds([2,1,3:11],:);
+%! pdf = full (pds);
+%!assert (pds\xf, pdf\xf, 100*eps)
+%!assert (pds\xs, sparse (pdf\xs), 100*eps)
+%!test
+%! us = alpha*[[speye(10,10);sparse(1,10)],[[1,1];sparse(9,2);[1,1]]];
+%!testif HAVE_UMFPACK
+%! assert (us*(us\xf), xf, 100*eps)
+%!testif HAVE_UMFPACK
+%! assert (us*(us\xs), xs, 100*eps)
+%!test
+%! pus = us(:,[2,1,3:12]);
+%!testif HAVE_UMFPACK
+%! assert (pus*(pus\xf), xf, 100*eps)
+%!testif HAVE_UMFPACK
+%! assert (pus*(pus\xs), xs, 100*eps)
+%!test
+%! us = alpha*[speye(11,9),[1;sparse(8,1);1;0]];
+%!testif HAVE_CXSPARSE
+%! [c,r] = qr (us, xf);
+%! assert (us\xf, r\c, 100*eps)
+%!testif HAVE_UMFPACK
+%! [c,r] = qr (us, xs);
+%! r = matrix_type (r, "Singular"); ## Force Matrix Type
+%! assert (us\xs, r\c, 100*eps)
+%!test
+%! pus = us(:,[1:8,10,9]);
+%!testif HAVE_UMFPACK
+%! [c,r] = qr (pus, xf);
+%! r = matrix_type (r, "Singular"); ## Force Matrix Type
+%! assert (pus\xf, r\c, 100*eps)
+%!testif HAVE_UMFPACK
+%! [c,r] = qr (pus, xs);
+%! r = matrix_type (r, "Singular"); ## Force Matrix Type
+%! assert (pus\xs, r\c, 100*eps)
+%!test
+%! ls = alpha*[speye(9,11);[1, sparse(1,8),1,0]];
+%! xf = beta * ones (10,2);
+%! xs = speye (10,10);
+%!assert (ls*(ls\xf), xf, 100*eps)
+%!assert (ls*(ls\xs), xs, 100*eps)
+%!test
+%! pls = ls([1:8,10,9],:);
+%!assert (pls*(pls\xf), xf, 100*eps)
+%!assert (pls*(pls\xs), xs, 100*eps)
+%!test
+%! ls = alpha*[speye(10,10), sparse(10,1);[1;1], sparse(2,9),[1;1]];
+%! xf = beta * ones (12,2);
+%! xs = speye (12,12);
+%!testif HAVE_UMFPACK
+%! [c,r] = qr (ls, xf);
+%! assert (ls\xf, r\c, 100*eps)
+%!testif HAVE_UMFPACK
+%! [c,r] = qr (ls, xs);
+%! r = matrix_type (r, "Singular"); ## Force Matrix Type
+%! assert (ls\xs, r\c, 100*eps)
+%!testif HAVE_CXSPARSE
+%! pls = ls(:,[1:8,10,9]);
+%!testif HAVE_UMFPACK
+%! [c,r] = qr (pls, xf);
+%! r = matrix_type (r, "Singular"); ## Force Matrix Type
+%! assert (pls\xf, r\c, 100*eps)
+%!testif HAVE_UMFPACK
+%! [c,r] = qr (pls, xs);
+%! r = matrix_type (r, "Singular"); ## Force Matrix Type
+%! assert (pls\xs, r\c, 100*eps)
+
+EOF
+}
+
+
+# =============================================================
+# Putting it all together: defining the combined tests
+
+
+# initial function
+gen_function
+gen_section
+
+# specific tests
+if $preset; then 
+    gen_specific_tests
+    gen_section
+fi
+
+# scalar operations
+echo '%!shared as,af,bs,bf' >> $TESTS
+if $preset; then
+    echo '%!test af=[1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4];' >> $TESTS
+    echo '%!test bf=3;' >>$TESTS
+else
+    cat >>$TESTS <<EOF
+%!test
+%! % generate m,n from 1 to <5000
+%! m = floor (lognrnd (8,2)+1);
+%! n = floor (lognrnd (8,2)+1);
+%! as = sprandn (m,n,0.3);
+%! af = full (as + 1i*sprandn (as));
+%! bf = randn;
+EOF
+fi
+
+gen_scalar_tests
+gen_section
+
+# rectangular operations
+if $preset; then
+    echo '%!test af=[1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4];' >> $TESTS
+    echo '%!test bf=[0,1-1i,0,0;2+1i,0,0,0;3-1i,2+3i,0,0];' >> $TESTS
+else
+    cat >>$TESTS <<EOF
+%!test
+%! m = floor (lognrnd (8,2)+1);
+%! n = floor (lognrnd (8,2)+1);
+%! as = sprandn (m,n,0.3);
+%! af = full (as + 1i*sprandn (as));
+%! bs = sprandn (m,n,0.3);
+%! bf = full (bs + 1i*sprandn (bs));
+EOF
+fi
+
+gen_rectangular_tests
+gen_section
+gen_save_tests
+gen_section
+echo '%!test bf=real(bf);' >> $TESTS
+gen_rectangular_tests
+gen_section
+gen_sparsesparse_ordering_tests
+gen_section
+echo '%!test af=real(af);' >> $TESTS
+gen_rectangular_tests
+gen_section
+gen_save_tests
+gen_section
+echo '%!test bf=bf+1i*(bf~=0);' >> $TESTS
+gen_rectangular_tests
+gen_section
+
+# square operations
+if $preset; then
+    echo '%!test af=[1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4];' >> $TESTS
+    echo '%! as=sparse(af);' >> $TESTS
+    echo '%!test bf=[0,1-1i,0,0;2+1i,0,0,0;3-1i,2+3i,0,0];' >> $TESTS
+else
+    cat >>$TESTS <<EOF
+%!test
+%! m = floor (lognrnd (8,2)+1);
+%! n = floor (lognrnd (8,2)+1);
+%! as = sprandn (m,n,0.3);
+%! af = full (as + 1i*sprandn (as));
+%! bs = sprandn (m,n,0.3);
+%! bf = full (bs + 1i*sprandn (bs));
+EOF
+fi
+
+cat >>$TESTS <<EOF
+%!test ;# invertible matrix
+%! bf = af'*bf+max (abs ([af(:);bf(:)]))*sparse (eye (columns (as)));
+%! bs = sparse (bf);
+
+EOF
+
+gen_square_tests
+gen_section
+echo '%!test bf=real(bf);' >> $TESTS
+echo '%! bs=sparse(bf);' >> $TESTS
+gen_square_tests
+gen_section
+echo '%!test af=real(af);' >> $TESTS
+echo '%! as=sparse(af);' >> $TESTS
+gen_square_tests
+gen_section
+echo '%!test bf=bf+1i*(bf~=0);' >> $TESTS
+echo '%! bs=sparse(bf);' >> $TESTS
+gen_square_tests
+gen_section
+
+# cholesky tests
+if $preset; then
+  echo '%!test bf=[5,0,1+1i,0;0,5,0,1-2i;1-1i,0,5,0;0,1+2i,0,5];' >> $TESTS
+  echo '%! bs=sparse(bf);' >> $TESTS
+else
+  echo '# This has a small chance of failing to create a positive definite matrix' >> $TESTS
+  echo '%!test n=floor (lognrnd (8,2)+1)' >> $TESTS
+  echo '%! bs = n*speye (n,n) + sprandn (n,n,0.3);' >> $TESTS
+  echo '%! bf = full (bs);' >> $TESTS
+fi
+
+gen_cholesky_tests
+gen_section
+echo '%!test bf=real(bf);' >> $TESTS
+echo '%! bs=sparse(bf);' >> $TESTS
+gen_cholesky_tests
+gen_section
+
+# assembly tests
+echo '%!shared r,c,m,n,fsum,funiq' >>$TESTS
+if $use_preset; then
+    cat >>$TESTS <<EOF
+%!test
+%! r = [1,1,2,1,2,3];
+%! c = [2,1,1,1,2,1];
+%! m = n = 0;
+EOF
+else
+    cat >>$TESTS <<EOF
+%!test
+%! % generate m,n from 1 to <5000
+%! m = floor (lognrnd (8,2)+1);
+%! n = floor (lognrnd (8,2)+1);
+%! nz = ceil ((m+n)/2);
+%! r = floor (rand (5,nz)*n)+1;
+%! c = floor (rand (5,nn)*m)+1;
+EOF
+fi
+gen_assembly_tests #includes real and complex tests
+gen_section
+
+# slicing tests
+echo '%!shared ridx,cidx,idx,as,af' >>$TESTS
+if $use_preset; then
+    cat >>$TESTS <<EOF
+%!test
+%! af = [1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4];
+%! ridx = [1,3];
+%! cidx = [2,3];
+EOF
+else
+    cat >>$TESTS <<EOF
+%!test
+%! % generate m,n from 1 to <5000
+%! m = floor (lognrnd (8,2)+1);
+%! n = floor (lognrnd (8,2)+1);
+%! as = sprandn (m,n,0.3);
+%! af = full (as + 1i*sprandn (as));
+%! ridx = ceil (m*rand (1,ceil (rand*m));
+%! cidx = ceil (n*rand (1,ceil (rand*n));
+EOF
+fi
+gen_scalar_select_tests
+gen_select_tests
+echo '%!test af=real(af);' >> $TESTS
+gen_select_tests
+gen_section
+echo '%!shared alpha,beta,df,pdf,lf,plf,uf,puf,bf,cf,bcf,tf,tcf,xf,ds,pds,ls,pls,us,pus,bs,cs,bcs,ts,tcs,xs' >>$TESTS
+echo '%!test alpha=1;beta=1;' >> $TESTS
+gen_solver_tests
+echo '%!test alpha=1;beta=1i;' >> $TESTS
+gen_solver_tests
+echo '%!test alpha=1i;beta=1;' >> $TESTS
+gen_solver_tests
+echo '%!test alpha=1i;beta=1i;' >> $TESTS
+gen_solver_tests
+gen_section
--- a/test/build_bc_overload_tests.sh	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +0,0 @@
-#! /bin/sh
-
-# Copyright (C) 2010-2012 VZLU Prague
-#
-# This file is part of Octave.
-# 
-# Octave 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 3 of the License, or (at
-# your option) any later version.
-# 
-# Octave 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 Octave; see the file COPYING.  If not, see
-# <http://www.gnu.org/licenses/>.
-
-CLASSES="
-  double
-  single
-  char
-  logical
-  int8
-  int16
-  int32
-  int64
-  uint8
-  uint16
-  uint32
-  uint64
-  struct
-  cell
-  function_handle
-"
-
-if [ $# -eq 1 ]; then
-  expected_results_file="$1"
-else
-  echo "usage: build_bc_overload_tests.sh expected-results-file" 1>&2
-  exit 1
-fi
-
-for class in $CLASSES; do
-  DIR="@$class"
-  test -d $DIR || mkdir $DIR || { echo "error: could not create $DIR"; exit; }
-  cat > $DIR/tbcover.m << EOF
-% !!! DO NOT EDIT !!!
-% generated automatically by build_bc_overload_tests.sh
-function s = tbcover (x, y)
-  s = '$class';
-EOF
-done
-
-cat > tbcover.m << EOF
-% !!! DO NOT EDIT !!!
-% generated automatically by build_bc_overload_tests.sh
-function s = tbcover (x, y)
-  s = 'none';
-EOF
-
-if test "$1" = "overloads_only" ; then
-  exit
-fi
-
-cat > test_bc_overloads.m << EOF
-## !!! DO NOT EDIT !!!
-## THIS IS AN AUTOMATICALLY GENERATED FILE
-## modify build_bc_overload_tests.sh to generate the tests you need.
-
-%!shared ex
-%! ex.double = 1;
-%! ex.single = single(1);
-%! ex.logical = true;
-%! ex.char = 'char';
-%! ex.int8  = int8 (1);
-%! ex.int16 = int16 (1);
-%! ex.int32 = int32 (1);
-%! ex.int64 = int64 (1);
-%! ex.uint8  = uint8 (1);
-%! ex.uint16 = uint16 (1);
-%! ex.uint32 = uint32 (1);
-%! ex.uint64 = uint64 (1);
-%! ex.cell = {};
-%! ex.struct = struct ();
-%! ex.function_handle = @numel;
-
-EOF
-
-cat $expected_results_file | \
-while read cl1 cl2 clr ; do
-  cat >> test_bc_overloads.m << EOF
-%% Name call
-%!assert (tbcover (ex.$cl1, ex.$cl2), "$clr")
-%% Handle call
-%!assert ((@tbcover) (ex.$cl1, ex.$cl2), "$clr")
-
-EOF
-done
-
-cat >> test_bc_overloads.m << EOF
-%%test handles through cellfun
-%!test
-%! f = fieldnames (ex);
-%! n = numel (f);
-%! s = c1 = c2 = cell (n);
-%! for i = 1:n
-%!   for j = 1:n
-%!     c1{i,j} = ex.(f{i});
-%!     c2{i,j} = ex.(f{j});
-%!     s{i,j} = tbcover (ex.(f{i}), ex.(f{j}));
-%!   endfor
-%! endfor
-%! assert (cellfun (@tbcover, c1, c2, "uniformoutput", false), s);
-EOF
--- a/test/build_sparse_tests.sh	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1326 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2006-2012 David Bateman
-#
-# This file is part of Octave.
-# 
-# Octave 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 3 of the License, or (at
-# your option) any later version.
-# 
-# Octave 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 Octave; see the file COPYING.  If not, see
-# <http://www.gnu.org/licenses/>.
-
-# Some tests are commented out because they are known to be broken!
-# Search for "# fails"   
-
-# ./build_sparse_tests.sh preset
-#    creates test_sparse.m with preset tests.
-#    Use "test test_sparse" from octave to run the tests.
-#
-# ./build_sparse_tests.sh random
-#    Creates test_sprandom.m with randomly generated matrices.
-#    Use "test test_sprandom" from octave to run the tests.
-
-# build_sparse_tests.sh generates tests for real and complex sparse matrices.
-# Also, we want to run both fixed tests with known outputs (quick tests)
-# and longer tests with unknown outputs (thorough tests).  This requires
-# two sets of tests -- one which uses preset matrices and another which
-# uses randomly generated matrices.
-#
-# The tests are mostly identical for each case but the code is different,
-# so it is important that the tests be run on all cases.  Because our test 
-# harness doesn't have support for looping or macros (it is only needed
-# for new data types), but sh does, we use sh to generate inline versions of
-# the tests for each case.
-#
-# Our 'macros' use shared variables as parameters.  This allows us to
-# for example define A complex and include all the unary ops tests, 
-# then set A=real(A) and include all the unary ops tests.  Thus the
-# same tests work for real and complex.  For binary tests it is even
-# more complicated because we want full X sparse, sparse X full and
-# sparse X sparse tested.
-#
-# We use the following macros:
-#
-#    gen_section
-#        place a separator in the test file
-#    gen_function
-#        define the function definion
-#    helper gen_specific
-#        specific tests such as error handling and null input
-#    helper gen_eat_zeros
-#        make sure sparse-scalar ops which generate 0 work
-#    gen_specific_tests
-#        specific and eat zeros tests 
-#    helper gen_ordering_tests
-#        ordered comparison operators for real valued tests
-#    helper gen_sparsesparse_ordering_tests
-#        ordered comparison operators for real valued sparse-sparse tests
-#    helper gen_elementop_tests
-#        element-wise matrix binary operators, including scalar-matrix ops.
-#        horizontal/vertical concatenation are here as well.
-#    helper gen_sparsesparse_elementop_tests
-#        element-wise matrix binary operators, for sparse-sparse ops.
-#        horizontal/vertical concatenation are here as well.
-#    helper gen_divop_tests
-#        left and right matrix division operators of rectangular matrices. 
-#        Needs QR solvers
-#    helper gen_square_divop_tests
-#        left and right matrix division operators of square matrices. 
-#    helper gen_matrixop_tests
-#        rectangular matrix binary operators: * 
-#    helper gen_matrixdiag_tests
-#        Tests extract of diag and creation of diagonal matrices using
-#        diag and spdiags functions
-#    helper gen_matrixreshape_tests
-#        Test the reshape function on sparse matrices
-#    helper print_mapper_test
-#        sub-helper function of gen_mapper_tests to print individual tests
-#    helper gen_mapper_tests
-#        Tests all of the one argument mapper functions. There are a few
-#        specific tests that abs, real and imag return real values.
-#    helper gen_unaryop_tests
-#        functions and operators which transform a single matrix
-#    helper gen_save_tests
-#        Tests the load/save functionality for ascii/binary and hdf5 formats
-#    gen_scalar_tests
-#        element ops for real and complex scalar and sparse
-#    gen_rectangular_tests
-#        unary, element, and matrix tests for a and full/sparse b
-#    gen_square_tests
-#        operations which require square matrices: lu, inv, \
-#        A square non-singular matrix is defined from the rectangular
-#        inputs A and B.
-#    gen_assembly_tests
-#        test for sparse constructors with 'sum' vs. 'unique'
-#    gen_select_tests
-#        indexing and assignment tests
-#    gen_solver_tests
-#        Tests the solve function with triangular/banded, etc matrices
-
-case $1 in
-    random) preset=false ;;
-    preset) preset=true ;;
-    '') preset=true ;;
-    *) echo "build_sparse_tests.sh random|preset" && exit 1 ;;
-esac
-
-if $preset; then
-    TESTS=test_sparse.m
-else
-    TESTS=test_sprandom.m
-fi
-
-# create initial file
-cat >$TESTS <<EOF
-## !!! DO NOT EDIT !!!
-## THIS IS AN AUTOMATICALLY GENERATED FILE
-## modify build_sparse_tests.sh to generate the tests you need.
-EOF
-
-
-# define all functions
-
-
-# =======================================================
-# Section separator
-
-gen_section() {
-cat >>$TESTS <<EOF
-
-# ==============================================================
-
-EOF
-}
-
-
-# =======================================================
-# Specific preset tests
-
-# =======================================================
-# If a sparse operation yields zeros, then those elements 
-# of the returned sparse matrix should be eaten.
-gen_eat_zeros() {
-cat >>$TESTS <<EOF
-%% Make sure newly introduced zeros get eaten
-%!assert (nnz (sparse ([bf,bf,1]).^realmax), 1)
-%!assert (nnz (sparse ([1,bf,bf]).^realmax), 1)
-%!assert (nnz (sparse ([bf,bf,bf]).^realmax), 0)
-
-%!assert (nnz (sparse ([bf;bf;1]).^realmax), 1)
-%!assert (nnz (sparse ([1;bf;bf]).^realmax), 1)
-%!assert (nnz (sparse ([0.5;bf;bf]).^realmax), 0)
-
-%!assert (nnz (sparse ([bf,bf,1])*realmin), 1)
-%!assert (nnz (sparse ([1,bf,bf])*realmin), 1)
-%!assert (nnz (sparse ([bf,bf,bf])*realmin), 0)
-
-%!assert (nnz (sparse ([bf;bf;1])*realmin), 1)
-%!assert (nnz (sparse ([1;bf;bf])*realmin), 1)
-%!assert (nnz (sparse ([bf;bf;bf])*realmin), 0)
-
-EOF
-}
-
-gen_specific() {
-cat >>$TESTS <<EOF
-
-%!test # segfault test from edd@debian.org
-%! n = 510;
-%! sparse (kron ((1:n)', ones(n,1)), kron (ones(n,1), (1:n)'), ones (n)); 
-
-%% segfault tests from Fabian@isas-berlin.de
-%% Note that the last four do not fail, but rather give a warning
-%% of a singular matrix, which is consistent with the full matrix
-%% behaviour.  They are therefore disabled.
-%!testif HAVE_UMFPACK
-%! assert (inv (sparse ([1,1;1,1+i])), sparse([1-1i,1i;1i,-1i]), 10*eps);
-%#!error inv ( sparse ([1,1;1,1]  ) );
-%#!error inv ( sparse ([0,0;0,1]  ) );
-%#!error inv ( sparse ([0,0;0,1+i]) );
-%#!error inv ( sparse ([0,0;0,0]  ) );
-
-%% error handling in constructor
-%!error sparse (1,[2,3],[1,2,3])
-%!error sparse ([1,1],[1,1],[1,2],3,3,"bogus")
-%!error sparse ([1,3],[1,-4],[3,5],2,2)
-%!error sparse ([1,3],[1,-4],[3,5i],2,2)
-%!error sparse (-1,-1,1)
-EOF
-}
-
-
-gen_specific_tests() {
-    gen_section
-    gen_specific
-    gen_section
-    echo '%!shared bf' >> $TESTS
-    echo '%!test bf=realmin;' >> $TESTS
-    gen_eat_zeros
-    echo '%!test bf=realmin+realmin*1i;' >> $TESTS
-    gen_eat_zeros
-    cat >>$TESTS <<EOF
-%!assert (nnz (sparse ([-1,realmin,realmin]).^1.5), 1)
-%!assert (nnz (sparse ([-1,realmin,realmin,1]).^1.5), 2)
-
-## Make sure scalar v==0 doesn't confuse matters
-%!assert (nnz (sparse (1,1,0)), 0)
-%!assert (nnz (sparse (eye (3))*0), 0)
-%!assert (nnz (sparse (eye (3))-sparse (eye (3))), 0)
-
-%!test
-%! wdbz = warning ("query", "Octave:divide-by-zero");
-%! warning ("off", "Octave:divide-by-zero");
-%! assert (full (sparse (eye (3))/0), full (eye (3)/0));
-%! warning (wdbz.state, "Octave:divide-by-zero");
-
-EOF
-}
-
-
-# =======================================================
-# Main function definition
-
-gen_function() {
-    if $preset; then
-	cat >>$TESTS <<EOF
-##
-## test_sparse
-##
-##    run preset sparse tests.  All should pass.
-function [passes, tests] = test_sparse
-  disp ("writing test output to sptest.log");
-  test ("test_sparse", "normal", "sptest.log");
-endfunction
-
-EOF
-    else
-	cat >>$TESTS <<EOF
-##
-## test_sprandom
-##
-##  total_passes=0; total_tests=0;
-##  for i=1:10
-##     [passes,tests] = sprandomtest;
-##    total_passes += passes;
-##    total_tests += tests;
-##  end
-##  The test log is appended to sprandomtest.log
-function [passes,total] = test_sprandom
-  warning ("untested --- fix the source in build_sparse_tests.sh");
-  disp ("appending test output to sprandomtest.log");
-  fid = fopen ("sprandomtest.log", "at");
-  test ("test_sprandom", "normal", fid);
-  ##[passes, total] = test("sprandomtest","normal",fid);
-  fclose (fid);
-endfunction
-
-EOF
-    fi
-    
-}
-
-
-# =======================================================
-# matrix ops
-
-# test ordered comparisons: uses as,af,bs,bf
-gen_ordering_tests() {
-    cat >>$TESTS <<EOF
-%% real values can be ordered (uses as,af)
-%!assert (as<=bf, sparse (af<=bf))
-%!assert (bf<=as, sparse (bf<=af))
-
-%!assert (as>=bf, sparse (af>=bf))
-%!assert (bf>=as, sparse (bf>=af))
-
-%!assert (as<bf, sparse (af<bf))
-%!assert (bf<as, sparse (bf<af))
-
-%!assert (as>bf, sparse (af>bf))
-%!assert (bf>as, sparse (bf>af))
-
-EOF
-}
-
-gen_sparsesparse_ordering_tests() {
-    cat >>$TESTS <<EOF
-%!assert (as<=bs, sparse (af<=bf))
-%!assert (as>=bs, sparse (af>=bf))
-%!assert (as<bs, sparse (af<bf))
-%!assert (as>bs, sparse (af>bf))
-EOF
-}
-
-# test element-wise binary operations: uses as,af,bs,bf,scalar
-gen_elementop_tests() {
-    cat >>$TESTS <<EOF
-%% Elementwise binary tests (uses as,af,bs,bf,scalar)
-%!assert (as==bs, sparse (af==bf))
-%!assert (bf==as, sparse (bf==af))
-
-%!assert (as!=bf, sparse (af!=bf))
-%!assert (bf!=as, sparse (bf!=af))
-
-%!assert (as+bf, af+bf)
-%!assert (bf+as, bf+af)
-
-%!assert (as-bf, af-bf)
-%!assert (bf-as, bf-af)
-
-%!assert (as.*bf, sparse (af.*bf))
-%!assert (bf.*as, sparse (bf.*af))
-
-%!assert (as./bf, sparse (af./bf), 100*eps)
-%!assert (bf.\as, sparse (bf.\af), 100*eps)
-
-%!test
-%! sv = as.^bf;
-%! fv = af.^bf;
-%! idx = find (af~=0);
-%! assert (sv(:)(idx), sparse (fv(:)(idx)), 100*eps)
-
-EOF
-}
-
-gen_sparsesparse_elementop_tests() {
-    cat >>$TESTS <<EOF
-%!assert (as==bs, sparse (af==bf))
-%!assert (as!=bs, sparse (af!=bf))
-%!assert (as+bs, sparse (af+bf))
-%!assert (as-bs, sparse (af-bf))
-%!assert (as.*bs, sparse (af.*bf))
-%!xtest assert (as./bs, sparse (af./bf), 100*eps)
-%!test
-%! sv = as.^bs;
-%! fv = af.^bf;
-%! idx = find (af~=0);
-%! assert(sv(:)(idx), sparse (fv(:)(idx)), 100*eps)
-
-EOF
-}
-
-# test matrix-matrix left and right division: uses as,af,bs,bf
-gen_divop_tests() {
-    cat >>$TESTS <<EOF
-%% Matrix-matrix operators (uses af,as,bs,bf)
-%!assert (as/bf, af/bf, 100*eps)
-%!assert (af/bs, af/bf, 100*eps)
-%!assert (as/bs, sparse (af/bf), 100*eps)
-%!assert (bs\af', bf\af', 100*eps)
-%!assert (bf\as', bf\af', 100*eps)
-%!assert (bs\as', sparse (bf\af'), 100*eps)
-
-EOF
-}
-
-# test matrix-matrix left and right division: uses as,af,bs,bf
-gen_square_divop_tests() {
-    cat >>$TESTS <<EOF
-%% Matrix-matrix operators (uses af,as,bs,bf)
-%!assert (as/bf, af/bf, 100*eps)
-%!assert (af/bs, af/bf, 100*eps)
-%!assert (as/bs, sparse (af/bf), 100*eps)
-%!assert (bs\af', bf\af', 100*eps)
-%!assert (bf\as', bf\af', 100*eps)
-%!assert (bs\as', sparse (bf\af'), 100*eps)
-
-EOF
-}
-
-# test matrix-matrix operations: uses as,af,bs,bf
-gen_matrixop_tests() {
-    cat >>$TESTS <<EOF
-%% Matrix-matrix operators (uses af,as,bs,bf)
-%!assert (as*bf', af*bf')
-%!assert (af*bs', af*bf')
-%!assert (as*bs', sparse (af*bf'))
-
-EOF
-}
-
-# test diagonal operations
-gen_matrixdiag_tests() {
-    cat >>$TESTS <<EOF
-%% Matrix diagonal tests (uses af,as,bf,bs)
-%!assert (diag (as), sparse (diag (af)))
-%!assert (diag (bs), sparse (diag (bf)))
-%!assert (diag (as,1), sparse (diag (af,1)))
-%!assert (diag (bs,1), sparse (diag (bf,1)))
-%!assert (diag (as,-1), sparse (diag (af,-1)))
-%!assert (diag (bs,-1), sparse (diag (bf,-1)))
-%!assert (diag (as(:)), sparse (diag (af(:))))
-%!assert (diag (as(:),1), sparse (diag (af(:),1)))
-%!assert (diag (as(:),-1), sparse (diag (af(:),-1)))
-%!assert (diag (as(:)'), sparse (diag (af(:)')))
-%!assert (diag (as(:)',1), sparse (diag (af(:)',1)))
-%!assert (diag (as(:)',-1), sparse (diag (af(:)',-1)))
-%!assert (spdiags (as,[0,1]), [diag(af,0), diag(af,1)])
-%!test
-%! [tb,tc]=spdiags(as); 
-%! assert (spdiags (tb,tc,sparse (zeros (size (as)))), as);
-%! assert (spdiags (tb,tc,size (as,1),size (as,2)), as);
-
-EOF
-}
-
-# test matrix reshape operations
-gen_matrixreshape_tests() {
-    cat >>$TESTS <<EOF
-%% Matrix diagonal tests (uses af,as,bf,bs)
-%!assert(reshape(as,1,prod(size(as))),sparse(reshape(af,1,prod(size(af)))))
-%!assert(reshape(as,prod(size(as)),1),sparse(reshape(af,prod(size(af)),1)))
-%!assert(reshape(as,fliplr(size(as))),sparse(reshape(af,fliplr(size(af)))))
-%!assert(reshape(bs,1,prod(size(as))),sparse(reshape(bf,1,prod(size(af)))))
-%!assert(reshape(bs,prod(size(as)),1),sparse(reshape(bf,prod(size(af)),1)))
-%!assert(reshape(bs,fliplr(size(as))),sparse(reshape(bf,fliplr(size(af)))))
-
-EOF
-}
-
-# test mapper matrix operations: uses as,af
-print_mapper_test() {
-echo "%!assert ($1(as), sparse ($1(af)))" >>$TESTS
-}
-
-print_real_mapper_test() {
-    cat >>$TESTS <<EOF
-%!test
-%! wn2s = warning ("query", "Octave:num-to-str");
-%! warning ("off", "Octave:num-to-str");
-%! if (isreal (af))
-%!   if ($2)
-%!     assert ($1(as), sparse ($1(af)));
-%!   else
-%!     assert ($1(as), $1(af));
-%!   endif
-%! endif
-%! warning (wn2s.state, "Octave:num-to-str");
-
-EOF
-}
-
-gen_mapper_tests() {
-echo "%% Unary matrix tests (uses af,as)">>$TESTS
-print_mapper_test abs
-print_mapper_test acos
-print_mapper_test acosh
-print_mapper_test angle
-print_mapper_test arg
-print_mapper_test asin
-print_mapper_test asinh
-print_mapper_test atan
-print_mapper_test atanh
-print_mapper_test ceil
-print_mapper_test conj
-print_mapper_test cos
-print_mapper_test cosh
-print_mapper_test exp
-print_mapper_test finite
-print_mapper_test fix
-print_mapper_test floor
-print_mapper_test imag
-print_mapper_test isinf
-print_mapper_test isna
-print_mapper_test isnan
-print_mapper_test log
-#print_mapper_test log10   ## fails with different NaN, not a problem
-print_mapper_test real
-print_mapper_test round
-print_mapper_test sign
-print_mapper_test sin
-print_mapper_test sinh
-print_mapper_test sqrt
-print_mapper_test tan
-print_mapper_test tanh
-
-# Specific tests for certain mapper functions
-    cat >>$TESTS <<EOF
-%!assert (issparse (abs (as))  && isreal (abs (as)))
-%!assert (issparse (real (as)) && isreal (real (as)))
-%!assert (issparse (imag (as)) && isreal (imag (as)))
-
-EOF
-}
-
-gen_real_mapper_tests() {
-echo "%% Unary matrix tests (uses af,as)">>$TESTS
-print_real_mapper_test erf 1
-print_real_mapper_test erfc 1
-#print_real_mapper_test gamma 1
-print_real_mapper_test isalnum 0
-print_real_mapper_test isalpha 0
-print_real_mapper_test isascii 0
-print_real_mapper_test iscntrl 0
-print_real_mapper_test isdigit 0
-print_real_mapper_test isgraph 0
-print_real_mapper_test islower 0
-print_real_mapper_test isprint 0
-print_real_mapper_test ispunct 0
-print_real_mapper_test isspace 0
-print_real_mapper_test isupper 0
-print_real_mapper_test isxdigit 0
-#print_real_mapper_test lgamma 1
-
-# Specific tests for certain mapper functions
-    cat >>$TESTS <<EOF
-
-%% These mapper functions always return a full matrix
-%!test
-%! wn2s = warning ("query", "Octave:num-to-str");
-%! warning ("off", "Octave:num-to-str");
-%! if (isreal (af))
-%!   assert (toascii (as), toascii (af));
-%!   assert (tolower (as), tolower (af));
-%!   assert (toupper (as), toupper (af));
-%! endif
-%! warning (wn2s.state, "Octave:num-to-str");
-
-EOF
-}
-
-# test matrix operations: uses as,af
-gen_unaryop_tests() {
-    cat >>$TESTS <<EOF
-%% Unary matrix tests (uses af,as)
-%!assert (issparse (as))
-%!assert (!issparse (af))
-%!assert (! (issparse (af) && iscomplex (af)))
-%!assert (! (issparse (af) && isreal (af)))
-%!assert (sum (as), sparse (sum (af)))
-%!assert (sum (as,1), sparse (sum (af,1)))
-%!assert (sum (as,2), sparse (sum (af,2)))
-%!assert (cumsum (as), sparse (cumsum (af)))
-%!assert (cumsum (as,1), sparse (cumsum (af,1)))
-%!assert (cumsum (as,2), sparse (cumsum (af,2)))
-%!assert (sumsq (as), sparse (sumsq (af)))
-%!assert (sumsq (as,1), sparse (sumsq (af,1)))
-%!assert (sumsq (as,2), sparse (sumsq (af,2)))
-%!assert (prod (as), sparse (prod (af)))
-%!assert (prod (as,1), sparse (prod (af,1)))
-%!assert (prod (as,2), sparse (prod (af,2)))
-%!assert (cumprod (as), sparse (cumprod (af)))
-%!assert (cumprod (as,1), sparse (cumprod (af,1)))
-%!assert (cumprod (as,2), sparse (cumprod (af,2)))
-
-%!assert (min (as), sparse (min (af)))
-%!assert (full (min (as(:))),min (af(:)))
-%!assert (min (as,[],1), sparse (min (af,[],1)))
-%!assert (min (as,[],2), sparse (min (af,[],2)))
-%!assert (min (as,[],1), sparse (min (af,[],1)))
-%!assert (min (as,0), sparse (min (af,0)))
-%!assert (min (as,bs), sparse (min (af,bf)))
-%!assert (max (as), sparse (max (af)))
-%!assert (full (max (as(:))), max (af(:)))
-%!assert (max (as,[],1), sparse (max (af,[],1)))
-%!assert (max (as,[],2), sparse (max (af,[],2)))
-%!assert (max (as,[],1), sparse (max (af,[],1)))
-%!assert (max (as,0), sparse (max (af,0)))
-%!assert (max (as,bs), sparse (max (af,bf)))
-
-%!assert (as==as)
-%!assert (as==af)
-%!assert (af==as)
-%!test
-%! [ii,jj,vv,nr,nc] = find (as);
-%! assert (af, full (sparse (ii,jj,vv,nr,nc)));
-%!assert (nnz (as), sum (af(:)!=0))
-%!assert (nnz (as), nnz (af))
-%!assert (issparse (as.'))
-%!assert (issparse (as'))
-%!assert (issparse (-as))
-%!assert (~as, sparse (~af))
-%!assert (as.', sparse (af.'));
-%!assert (as',  sparse (af'));
-%!assert (-as, sparse (-af));
-%!assert (~as, sparse (~af));
-%!error [i,j]=size (af);as(i-1,j+1);
-%!error [i,j]=size (af);as(i+1,j-1);
-%!test
-%! [Is,Js,Vs] = find (as);
-%! [If,Jf,Vf] = find (af);
-%! assert (Is, If);
-%! assert (Js, Jf);
-%! assert (Vs, Vf);
-%!error as(0,1);
-%!error as(1,0);
-%!assert (find (as), find (af))
-%!test
-%! [i,j,v] = find (as);
-%! [m,n] = size (as);
-%! x = sparse (i,j,v,m,n);
-%! assert (x, as);
-%!test
-%! [i,j,v,m,n] = find (as);
-%! x = sparse (i,j,v,m,n);
-%! assert (x, as);
-%!assert (issparse (horzcat (as,as)));
-%!assert (issparse (vertcat (as,as)));
-%!assert (issparse (cat (1,as,as)));
-%!assert (issparse (cat (2,as,as)));
-%!assert (issparse ([as,as]));
-%!assert (issparse ([as;as]));
-%!assert (horzcat (as,as), sparse ([af,af]));
-%!assert (vertcat (as,as), sparse ([af;af]));
-%!assert (horzcat (as,as,as), sparse ([af,af,af]));
-%!assert (vertcat (as,as,as), sparse ([af;af;af]));
-%!assert ([as,as], sparse ([af,af]));
-%!assert ([as;as], sparse ([af;af]));
-%!assert ([as,as,as], sparse ([af,af,af]));
-%!assert ([as;as;as], sparse ([af;af;af]));
-%!assert (cat (2,as,as), sparse ([af,af]));
-%!assert (cat (1,as,as), sparse ([af;af]));
-%!assert (cat (2,as,as,as), sparse ([af,af,af]));
-%!assert (cat (1,as,as,as), sparse ([af;af;af]));
-%!assert (issparse ([as,af]));
-%!assert (issparse ([af,as]));
-%!assert ([as,af], sparse ([af,af]));
-%!assert ([as;af], sparse ([af;af]));
-
-EOF
-}
-
-# operations which require square matrices.
-gen_square_tests() {
-# The \ and / operator tests on square matrices
-    gen_square_divop_tests
-
-    cat >>$TESTS <<EOF
-%!testif HAVE_UMFPACK
-%! assert(det(bs+speye(size(bs))),det(bf+eye(size(bf))),100*eps*abs(det(bf+eye(size(bf)))))
-
-%!testif HAVE_UMFPACK 
-%! [l,u] = lu (sparse ([1,1;1,1]));
-%! assert (l*u, [1,1;1,1], 10*eps);
-
-%!testif HAVE_UMFPACK
-%! [l,u] = lu (sparse ([1,1;1,1+i]));
-%! assert (l, sparse ([1,2,2],[1,1,2],1), 10*eps);
-%! assert (u, sparse ([1,1,2],[1,2,2],[1,1,1i]), 10*eps);
-
-%!testif HAVE_UMFPACK   # permuted LU
-%! [L,U] = lu (bs);
-%! assert (L*U, bs, 1e-10);
-
-%!testif HAVE_UMFPACK   # simple LU + row permutations
-%! [L,U,P] = lu (bs);
-%! assert (P'*L*U, bs, 1e-10);
-%! # triangularity
-%! [i,j,v] = find (L);
-%! assert (i-j>=0);
-%! [i,j,v] = find (U);
-%! assert (j-i>=0);
-
-%!testif HAVE_UMFPACK   # simple LU + row/col permutations
-%! [L,U,P,Q] = lu (bs);
-%! assert (P'*L*U*Q', bs, 1e-10);
-%! # triangularity
-%! [i,j,v] = find (L);
-%! assert (i-j>=0);
-%! [i,j,v] = find (U);
-%! assert (j-i>=0);
-
-%!testif HAVE_UMFPACK   # LU with vector permutations
-%! [L,U,P,Q] = lu (bs,'vector');
-%! assert (L(P,:)*U(:,Q), bs, 1e-10);
-%! # triangularity
-%! [i,j,v] = find (L);
-%! assert (i-j>=0);
-%! [i,j,v] = find (U);
-%! assert (j-i>=0);
-
-%!testif HAVE_UMFPACK   # LU with scaling
-%! [L,U,P,Q,R] = lu (bs);
-%! assert (R*P'*L*U*Q', bs, 1e-10);
-%! # triangularity
-%! [i,j,v] = find (L);
-%! assert (i-j>=0);
-%! [i,j,v] = find (U);
-%! assert (j-i>=0);
-
-%!testif HAVE_UMFPACK   # inverse
-%! assert (inv (bs)*bs, sparse (eye (rows (bs))), 1e-10);
-
-%!assert (bf\as', bf\af', 100*eps);
-%!assert (bs\af', bf\af', 100*eps);
-%!assert (bs\as', sparse (bf\af'), 100*eps);
-
-EOF
-}
-
-# Cholesky tests
-gen_cholesky_tests() {
-    cat >>$TESTS <<EOF
-%!testif HAVE_CHOLMOD
-%! assert (chol (bs)'*chol (bs), bs, 1e-10);
-%!testif HAVE_CHOLMOD 
-%! assert (chol (bs,'lower')*chol (bs,'lower')', bs, 1e-10);
-%!testif HAVE_CHOLMOD
-%! assert (chol (bs,'lower'), chol (bs)', 1e-10);
-
-%!testif HAVE_CHOLMOD   # Return Partial Cholesky factorization
-%! [RS,PS] = chol (bs);
-%! assert (RS'*RS, bs, 1e-10);
-%! assert (PS, 0);
-%! [LS,PS] = chol (bs,'lower');
-%! assert (LS*LS', bs, 1e-10);
-%! assert (PS, 0);
-
-%!testif HAVE_CHOLMOD   # Permuted Cholesky factorization
-%! [RS,PS,QS] = chol (bs);
-%! assert (RS'*RS, QS*bs*QS', 1e-10);
-%! assert (PS, 0);
-%! [LS,PS,QS] = chol (bs,'lower');
-%! assert (LS*LS', QS*bs*QS', 1e-10);
-%! assert (PS, 0);
-
-EOF
-}
-
-# test scalar operations: uses af and real scalar bf; modifies as,bf,bs
-gen_scalar_tests() {
-    echo '%!test as=sparse(af);' >> $TESTS
-    echo '%!test bs=bf;' >> $TESTS
-    gen_elementop_tests
-    gen_ordering_tests
-    echo '%!test bf=bf+1i;' >>$TESTS
-    echo '%!test bs=bf;' >> $TESTS
-    gen_elementop_tests
-}
-
-# test matrix operations: uses af and bf; modifies as,bs
-gen_rectangular_tests() {
-    echo '%!test as=sparse(af);' >> $TESTS
-    echo '%!test bs=sparse(bf);' >>$TESTS
-    gen_mapper_tests
-    gen_real_mapper_tests
-    gen_unaryop_tests
-    gen_elementop_tests
-    gen_sparsesparse_elementop_tests
-    gen_matrixop_tests
-    # gen_divop_tests # Disable rectangular \ and / for now
-    gen_matrixdiag_tests
-    gen_matrixreshape_tests
-    cat >>$TESTS <<EOF
-%!testif HAVE_UMFPACK   # permuted LU
-%! [L,U] = lu (bs);
-%! assert (L*U, bs, 1e-10);
-
-%!testif HAVE_UMFPACK   # simple LU + row permutations
-%! [L,U,P] = lu (bs);
-%! assert (P'*L*U, bs, 1e-10);
-%! # triangularity
-%! [i,j,v] = find (L);
-%! assert (i-j>=0);
-%! [i,j,v] = find (U);
-%! assert (j-i>=0);
-
-%!testif HAVE_UMFPACK   # simple LU + row/col permutations
-%! [L,U,P,Q] = lu (bs);
-%! assert (P'*L*U*Q', bs, 1e-10);
-%! # triangularity
-%! [i,j,v] = find (L);
-%! assert (i-j>=0);
-%! [i,j,v] = find (U);
-%! assert (j-i>=0);
-
-%!testif HAVE_UMFPACK   # LU with vector permutations
-%! [L,U,P,Q] = lu (bs,'vector');
-%! assert (L (P,:)*U (:,Q), bs, 1e-10);
-%! # triangularity
-%! [i,j,v] = find (L);
-%! assert (i-j>=0);
-%! [i,j,v] = find (U);
-%! assert (j-i>=0);
-
-%!testif HAVE_UMFPACK   # LU with scaling
-%! [L,U,P,Q,R] = lu (bs);
-%! assert (R*P'*L*U*Q', bs, 1e-10);
-%! # triangularity
-%! [i,j,v] = find (L);
-%! assert (i-j>=0);
-%! [i,j,v] = find (U);
-%! assert (j-i>=0);
-
-EOF
-}
-
-
-# =======================================================
-# sparse assembly tests
-
-gen_assembly_tests() {
-cat >>$TESTS <<EOF
-%%Assembly tests
-%!test
-%! m = max ([m;r(:)]);
-%! n = max ([n;c(:)]);
-%! funiq = fsum = zeros (m,n);
-%! funiq(r(:) + m*(c(:)-1) ) = ones (size (r(:)));
-%! funiq = sparse (funiq);
-%! for k=1:length(r)
-%!   fsum(r(k),c(k)) += 1;
-%! endfor
-%! fsum = sparse (fsum);
-%!assert (sparse (r,c,1), sparse (fsum(1:max(r), 1:max(c))))
-%!assert (sparse (r,c,1,"sum"), sparse (fsum(1:max (r),1:max (c))))
-%!assert (sparse (r,c,1,"unique"), sparse (funiq(1:max (r),1:max (c))))
-%!assert (sparse (r,c,1,m,n), sparse (fsum))
-%!assert (sparse (r,c,1,m,n,"sum"), sparse (fsum))
-%!assert (sparse (r,c,1,m,n,"unique"), sparse (funiq))
-
-%!assert (sparse (r,c,1i), sparse (fsum(1:max (r),1:max (c))*1i))
-%!assert (sparse (r,c,1i,"sum"), sparse (fsum(1:max (r),1:max (c))*1i))
-%!assert (sparse (r,c,1i,"unique"), sparse (funiq(1:max (r),1:max (c))*1i))
-%!assert (sparse (r,c,1i,m,n), sparse (fsum*1i))
-%!assert (sparse (r,c,1i,m,n,"sum"), sparse (fsum*1i))
-%!assert (sparse (r,c,1i,m,n,"unique"), sparse (funiq*1i))
-
-%!test
-%! if (issparse (funiq))
-%!   assert (sparse (full (1i*funiq)), sparse (1i*funiq));
-%! endif
-
-%!assert (sparse (full (funiq)), funiq)
-
-
-EOF
-}
-
-# =======================================================
-# sparse selection tests
-
-gen_scalar_select_tests () {
-    cat >>$TESTS <<EOF
-%!assert (sparse (42)([1,1]), sparse ([42,42]))
-%!assert (sparse (42*1i)([1,1]), sparse ([42,42].*1i))
-EOF
-}
-
-gen_select_tests() {
-    cat >>$TESTS <<EOF
-%!test as=sparse(af);
-
-%% Point tests
-%!test idx = ridx(:) + rows (as) * (cidx (:)-1);
-%!assert (sparse (as(idx)), sparse (af(idx)))
-%!assert (as(idx), sparse (af(idx)));
-%!assert (as(idx'), sparse (af(idx')));
-%!assert (as(flipud (idx(:))), sparse (af(flipud (idx(:)))))
-%!assert (as([idx,idx]), sparse (af([idx,idx])))
-%!error (as(reshape ([idx;idx], [1,length(idx),2])))
-
-%% Slice tests
-%!assert (as(ridx,cidx), sparse (af(ridx,cidx)))
-%!assert (as(ridx,:), sparse (af(ridx,:)))
-%!assert (as(:,cidx), sparse (af(:,cidx)))
-%!assert (as(:,:), sparse (af(:,:)))
-%!assert (as((size (as,1):-1:1),:), sparse (af((size (af,1):-1:1),:)))
-%!assert (as(:,(size (as,2):-1:1)), sparse (af(:, (size (af,2):-1:1))))
-
-%% Indexing tests
-%!assert (full (as([1,1],:)), af([1,1],:))
-%!assert (full (as(:,[1,1])), af(:,[1,1]))
-%!test
-%! [i,j,v] = find (as);
-%! assert (as(i(1),j(1))([1,1]), sparse ([v(1), v(1)]))
-
-%% Assignment test
-%!test
-%! ts=as; ts(:,:) = ts(fliplr (1:size (as,1)),:);
-%! tf=af; tf(:,:) = tf(fliplr (1:size (af,1)),:);
-%! assert (ts, sparse (tf));
-%!test
-%! ts=as; ts(fliplr (1:size (as,1)),:) = ts;
-%! tf=af; tf(fliplr (1:size (af,1)),:) = tf;
-%! assert (ts, sparse (tf));
-%!test
-%! ts=as; ts(:,fliplr (1:size (as,2))) = ts;
-%! tf=af; tf(:,fliplr (1:size (af,2))) = tf;
-%! assert (ts, sparse (tf));
-%!test
-%! ts(fliplr (1:size (as,1))) = as(:,1);
-%! tf(fliplr (1:size (af,1))) = af(:,1);
-%! assert (ts, sparse (tf));
-
-%% Deletion tests
-%!test
-%! ts=as; ts(1,:)=[]; tf=af; tf(1,:)=[];
-%! assert (ts, sparse (tf));
-%!test
-%! ts=as; ts(:,1)=[]; tf=af; tf(:,1)=[];
-%! assert (ts, sparse (tf));
-
-%% Test "end" keyword
-%!assert (full (as(end)), af(end))
-%!assert (full (as(1,end)), af(1,end))
-%!assert (full (as(end,1)), af(end,1))
-%!assert (full (as(end,end)), af(end,end))
-%!assert (as(2:end,2:end), sparse (af(2:end,2:end)))
-%!assert (as(1:end-1,1:end-1), sparse (af(1:end-1,1:end-1)))
-EOF
-}
-
-# =======================================================
-# sparse save and load tests
-
-gen_save_tests() {
-    cat >>$TESTS <<EOF
-%!test # save ascii
-%! savefile = tmpnam ();
-%! as_save = as;
-%! save ("-text", savefile, "bf", "as_save", "af");
-%! clear as_save;
-%! load (savefile, "as_save");
-%! unlink (savefile);
-%! assert (as_save, sparse(af));
-%!test # save binary
-%! savefile = tmpnam ();
-%! as_save = as;
-%! save ("-binary", savefile, "bf", "as_save", "af");
-%! clear as_save;
-%! load (savefile, "as_save");
-%! unlink (savefile);
-%! assert (as_save, sparse(af));
-%!testif HAVE_HDF5   # save hdf5
-%! savefile = tmpnam ();
-%! as_save = as;
-%! save ("-hdf5", savefile, "bf", "as_save", "af");
-%! clear as_save;
-%! load (savefile, "as_save");
-%! unlink (savefile);
-%! assert (as_save, sparse(af));
-## FIXME: We should skip (or mark as an expected failure) the test for
-## saving sparse matrices to MAT files when using 64-bit indexing since
-## that is not implemented yet.
-%!test # save matlab
-%! savefile = tmpnam ();
-%! as_save = as;
-%! save ("-mat", savefile, "bf", "as_save", "af");
-%! clear as_save;
-%! load (savefile, "as_save");
-%! unlink (savefile);
-%! assert (as_save, sparse(af));
-EOF
-}
-
-# =============================================================
-# Specific solver tests for matrices that will test all of the solver
-# code. Uses alpha and beta
-gen_solver_tests() {
-
-if $preset; then
-  cat >>$TESTS <<EOF
-%! n=8;
-%! lf=diag (1:n); lf(n-1,1)=0.5*alpha; lf(n,2)=0.25*alpha; ls=sparse (lf);
-%! uf=diag (1:n); uf(1,n-1)=2*alpha; uf(2,n)=alpha; us=sparse (uf);
-%! ts=spdiags (ones (n,3),-1:1,n,n) + diag (1:n); tf = full (ts);
-EOF
-else
-  cat >>$TESTS <<EOF
-%! n = floor (lognrnd (8,2)+1)';
-%! ls = tril (sprandn (8,8,0.2),-1).*alpha + n*speye (8); lf = full (ls);
-%! us = triu (sprandn (8,8,0.2),1).*alpha + n*speye (8); uf = full (us);
-%! ts = spdiags (randn (8,3),-1:1,8,8).*alpha; tf = full (ts);
-EOF
-fi
-
-cat >>$TESTS <<EOF
-%! df = diag (1:n).* alpha; ds = sparse (df);
-%! pdf = df(randperm (n),randperm (n));
-%! pds = sparse (pdf);
-%! plf = lf(randperm (n),randperm (n));
-%! pls = sparse (plf);
-%! puf = uf(randperm (n),randperm (n));
-%! pus = sparse (puf);
-%! bs = spdiags (repmat ([1:n]',1,4),-2:1,n,n).*alpha;
-%! bf = full (bs);
-%! cf = lf + lf'; cs = sparse (cf);
-%! bcf = bf + bf'; bcs = sparse (bcf);
-%! tcf = tf + tf'; tcs = sparse (tcf);
-%! xf = diag (1:n) + fliplr (diag (1:n)).*beta;
-%! xs = sparse (xf);
-%!assert (ds\xf, df\xf, 1e-10);
-%!assert (ds\xs, sparse (df\xf), 1e-10);
-%!assert (pds\xf, pdf\xf, 1e-10);
-%!assert (pds\xs, sparse (pdf\xf), 1e-10);
-%!assert (ls\xf, lf\xf, 1e-10);
-%!assert (sparse (ls\xs), sparse (lf\xf), 1e-10);
-%!testif HAVE_UMFPACK
-%! assert (pls\xf, plf\xf, 1e-10);
-%!testif HAVE_UMFPACK
-%! assert (sparse (pls\xs), sparse (plf\xf), 1e-10);
-%!assert (us\xf, uf\xf, 1e-10);
-%!assert (sparse (us\xs), sparse (uf\xf), 1e-10);
-%!testif HAVE_UMFPACK
-%! assert (pus\xf, puf\xf, 1e-10);
-%!testif HAVE_UMFPACK
-%! assert (sparse (pus\xs), sparse (puf\xf), 1e-10);
-%!assert (bs\xf, bf\xf, 1e-10);
-%!assert (sparse (bs\xs), sparse (bf\xf), 1e-10);
-%!testif HAVE_UMFPACK
-%! assert (cs\xf, cf\xf, 1e-10);
-%!testif HAVE_UMFPACK
-%! assert (sparse (cs\xs), sparse (cf\xf), 1e-10);
-%!testif HAVE_UMFPACK
-%! assert (bcs\xf, bcf\xf, 1e-10);
-%!testif HAVE_UMFPACK
-%! assert (sparse (bcs\xs), sparse (bcf\xf), 1e-10);
-%!assert (ts\xf, tf\xf, 1e-10);
-%!assert (sparse (ts\xs), sparse (tf\xf), 1e-10);
-%!assert (tcs\xf, tcf\xf, 1e-10);
-%!assert (sparse (tcs\xs), sparse (tcf\xf), 1e-10);
-
-EOF
-
-cat >>$TESTS <<EOF
-%% QR solver tests
-
-%!function f(a, sz, feps)
-%! b = randn (sz);
-%! x = a \ b; 
-%! assert (a * x, b, feps);
-%! b = randn (sz) + 1i*randn (sz);
-%! x = a \ b;  
-%! assert (a * x, b, feps);
-%! b = sprandn (sz(1),sz(2),0.2);
-%! x = a \ b;
-%! assert (sparse (a * x), b, feps);
-%! b = sprandn (sz(1),sz(2),0.2) + 1i*sprandn (sz(1),sz(2),0.2);
-%! x = a \ b; 
-%! assert (sparse (a * x), b, feps);
-%!endfunction
-%!testif HAVE_UMFPACK
-%! a = alpha*sprandn (10,11,0.2) + speye (10,11);
-%! f(a,[10,2],1e-10);
-%! ## Test this by forcing matrix_type, as can't get a certain 
-%! ## result for over-determined systems.
-%! a = alpha*sprandn(10,10,0.2) + speye(10,10);
-%! matrix_type (a, "Singular");
-%! f(a,[10,2],1e-10);
-
-%% Rectanguar solver tests that don't use QR
-
-%!test
-%! ds = alpha * spdiags ([1:11]',0,10,11);
-%! df = full (ds);
-%! xf = beta * ones (10,2);
-%! xs = speye (10,10);
-%!assert (ds\xf, df\xf, 100*eps)
-%!assert (ds\xs, sparse (df\xs), 100*eps)
-%!test
-%! pds = ds([2,1,3:10],:);
-%! pdf = full (pds);
-%!assert (pds\xf, pdf\xf, 100*eps)
-%!assert (pds\xs, sparse (pdf\xs), 100*eps)
-%!test
-%! ds = alpha * spdiags ([1:11]',0,11,10);
-%! df = full (ds);
-%! xf = beta * ones (11,2);
-%! xs = speye (11,11);
-%!assert (ds\xf, df\xf, 100*eps)
-%!assert (ds\xs, sparse (df\xs), 100*eps)
-%!test
-%! pds = ds([2,1,3:11],:);
-%! pdf = full (pds);
-%!assert (pds\xf, pdf\xf, 100*eps)
-%!assert (pds\xs, sparse (pdf\xs), 100*eps)
-%!test
-%! us = alpha*[[speye(10,10);sparse(1,10)],[[1,1];sparse(9,2);[1,1]]];
-%!testif HAVE_UMFPACK
-%! assert (us*(us\xf), xf, 100*eps)
-%!testif HAVE_UMFPACK
-%! assert (us*(us\xs), xs, 100*eps)
-%!test
-%! pus = us(:,[2,1,3:12]);
-%!testif HAVE_UMFPACK
-%! assert (pus*(pus\xf), xf, 100*eps)
-%!testif HAVE_UMFPACK
-%! assert (pus*(pus\xs), xs, 100*eps)
-%!test
-%! us = alpha*[speye(11,9),[1;sparse(8,1);1;0]];
-%!testif HAVE_CXSPARSE
-%! [c,r] = qr (us, xf);
-%! assert (us\xf, r\c, 100*eps)
-%!testif HAVE_UMFPACK
-%! [c,r] = qr (us, xs);
-%! r = matrix_type (r, "Singular"); ## Force Matrix Type
-%! assert (us\xs, r\c, 100*eps)
-%!test
-%! pus = us(:,[1:8,10,9]);
-%!testif HAVE_UMFPACK
-%! [c,r] = qr (pus, xf);
-%! r = matrix_type (r, "Singular"); ## Force Matrix Type
-%! assert (pus\xf, r\c, 100*eps)
-%!testif HAVE_UMFPACK
-%! [c,r] = qr (pus, xs);
-%! r = matrix_type (r, "Singular"); ## Force Matrix Type
-%! assert (pus\xs, r\c, 100*eps)
-%!test
-%! ls = alpha*[speye(9,11);[1, sparse(1,8),1,0]];
-%! xf = beta * ones (10,2);
-%! xs = speye (10,10);
-%!assert (ls*(ls\xf), xf, 100*eps)
-%!assert (ls*(ls\xs), xs, 100*eps)
-%!test
-%! pls = ls([1:8,10,9],:);
-%!assert (pls*(pls\xf), xf, 100*eps)
-%!assert (pls*(pls\xs), xs, 100*eps)
-%!test
-%! ls = alpha*[speye(10,10), sparse(10,1);[1;1], sparse(2,9),[1;1]];
-%! xf = beta * ones (12,2);
-%! xs = speye (12,12);
-%!testif HAVE_UMFPACK
-%! [c,r] = qr (ls, xf);
-%! assert (ls\xf, r\c, 100*eps)
-%!testif HAVE_UMFPACK
-%! [c,r] = qr (ls, xs);
-%! r = matrix_type (r, "Singular"); ## Force Matrix Type
-%! assert (ls\xs, r\c, 100*eps)
-%!testif HAVE_CXSPARSE
-%! pls = ls(:,[1:8,10,9]);
-%!testif HAVE_UMFPACK
-%! [c,r] = qr (pls, xf);
-%! r = matrix_type (r, "Singular"); ## Force Matrix Type
-%! assert (pls\xf, r\c, 100*eps)
-%!testif HAVE_UMFPACK
-%! [c,r] = qr (pls, xs);
-%! r = matrix_type (r, "Singular"); ## Force Matrix Type
-%! assert (pls\xs, r\c, 100*eps)
-
-EOF
-}
-
-
-# =============================================================
-# Putting it all together: defining the combined tests
-
-
-# initial function
-gen_function
-gen_section
-
-# specific tests
-if $preset; then 
-    gen_specific_tests
-    gen_section
-fi
-
-# scalar operations
-echo '%!shared as,af,bs,bf' >> $TESTS
-if $preset; then
-    echo '%!test af=[1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4];' >> $TESTS
-    echo '%!test bf=3;' >>$TESTS
-else
-    cat >>$TESTS <<EOF
-%!test
-%! % generate m,n from 1 to <5000
-%! m = floor (lognrnd (8,2)+1);
-%! n = floor (lognrnd (8,2)+1);
-%! as = sprandn (m,n,0.3);
-%! af = full (as + 1i*sprandn (as));
-%! bf = randn;
-EOF
-fi
-
-gen_scalar_tests
-gen_section
-
-# rectangular operations
-if $preset; then
-    echo '%!test af=[1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4];' >> $TESTS
-    echo '%!test bf=[0,1-1i,0,0;2+1i,0,0,0;3-1i,2+3i,0,0];' >> $TESTS
-else
-    cat >>$TESTS <<EOF
-%!test
-%! m = floor (lognrnd (8,2)+1);
-%! n = floor (lognrnd (8,2)+1);
-%! as = sprandn (m,n,0.3);
-%! af = full (as + 1i*sprandn (as));
-%! bs = sprandn (m,n,0.3);
-%! bf = full (bs + 1i*sprandn (bs));
-EOF
-fi
-
-gen_rectangular_tests
-gen_section
-gen_save_tests
-gen_section
-echo '%!test bf=real(bf);' >> $TESTS
-gen_rectangular_tests
-gen_section
-gen_sparsesparse_ordering_tests
-gen_section
-echo '%!test af=real(af);' >> $TESTS
-gen_rectangular_tests
-gen_section
-gen_save_tests
-gen_section
-echo '%!test bf=bf+1i*(bf~=0);' >> $TESTS
-gen_rectangular_tests
-gen_section
-
-# square operations
-if $preset; then
-    echo '%!test af=[1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4];' >> $TESTS
-    echo '%! as=sparse(af);' >> $TESTS
-    echo '%!test bf=[0,1-1i,0,0;2+1i,0,0,0;3-1i,2+3i,0,0];' >> $TESTS
-else
-    cat >>$TESTS <<EOF
-%!test
-%! m = floor (lognrnd (8,2)+1);
-%! n = floor (lognrnd (8,2)+1);
-%! as = sprandn (m,n,0.3);
-%! af = full (as + 1i*sprandn (as));
-%! bs = sprandn (m,n,0.3);
-%! bf = full (bs + 1i*sprandn (bs));
-EOF
-fi
-
-cat >>$TESTS <<EOF
-%!test ;# invertible matrix
-%! bf = af'*bf+max (abs ([af(:);bf(:)]))*sparse (eye (columns (as)));
-%! bs = sparse (bf);
-
-EOF
-
-gen_square_tests
-gen_section
-echo '%!test bf=real(bf);' >> $TESTS
-echo '%! bs=sparse(bf);' >> $TESTS
-gen_square_tests
-gen_section
-echo '%!test af=real(af);' >> $TESTS
-echo '%! as=sparse(af);' >> $TESTS
-gen_square_tests
-gen_section
-echo '%!test bf=bf+1i*(bf~=0);' >> $TESTS
-echo '%! bs=sparse(bf);' >> $TESTS
-gen_square_tests
-gen_section
-
-# cholesky tests
-if $preset; then
-  echo '%!test bf=[5,0,1+1i,0;0,5,0,1-2i;1-1i,0,5,0;0,1+2i,0,5];' >> $TESTS
-  echo '%! bs=sparse(bf);' >> $TESTS
-else
-  echo '# This has a small chance of failing to create a positive definite matrix' >> $TESTS
-  echo '%!test n=floor (lognrnd (8,2)+1)' >> $TESTS
-  echo '%! bs = n*speye (n,n) + sprandn (n,n,0.3);' >> $TESTS
-  echo '%! bf = full (bs);' >> $TESTS
-fi
-
-gen_cholesky_tests
-gen_section
-echo '%!test bf=real(bf);' >> $TESTS
-echo '%! bs=sparse(bf);' >> $TESTS
-gen_cholesky_tests
-gen_section
-
-# assembly tests
-echo '%!shared r,c,m,n,fsum,funiq' >>$TESTS
-if $use_preset; then
-    cat >>$TESTS <<EOF
-%!test
-%! r = [1,1,2,1,2,3];
-%! c = [2,1,1,1,2,1];
-%! m = n = 0;
-EOF
-else
-    cat >>$TESTS <<EOF
-%!test
-%! % generate m,n from 1 to <5000
-%! m = floor (lognrnd (8,2)+1);
-%! n = floor (lognrnd (8,2)+1);
-%! nz = ceil ((m+n)/2);
-%! r = floor (rand (5,nz)*n)+1;
-%! c = floor (rand (5,nn)*m)+1;
-EOF
-fi
-gen_assembly_tests #includes real and complex tests
-gen_section
-
-# slicing tests
-echo '%!shared ridx,cidx,idx,as,af' >>$TESTS
-if $use_preset; then
-    cat >>$TESTS <<EOF
-%!test
-%! af = [1+1i,2-1i,0,0;0,0,0,3+2i;0,0,0,4];
-%! ridx = [1,3];
-%! cidx = [2,3];
-EOF
-else
-    cat >>$TESTS <<EOF
-%!test
-%! % generate m,n from 1 to <5000
-%! m = floor (lognrnd (8,2)+1);
-%! n = floor (lognrnd (8,2)+1);
-%! as = sprandn (m,n,0.3);
-%! af = full (as + 1i*sprandn (as));
-%! ridx = ceil (m*rand (1,ceil (rand*m));
-%! cidx = ceil (n*rand (1,ceil (rand*n));
-EOF
-fi
-gen_scalar_select_tests
-gen_select_tests
-echo '%!test af=real(af);' >> $TESTS
-gen_select_tests
-gen_section
-echo '%!shared alpha,beta,df,pdf,lf,plf,uf,puf,bf,cf,bcf,tf,tcf,xf,ds,pds,ls,pls,us,pus,bs,cs,bcs,ts,tcs,xs' >>$TESTS
-echo '%!test alpha=1;beta=1;' >> $TESTS
-gen_solver_tests
-echo '%!test alpha=1;beta=1i;' >> $TESTS
-gen_solver_tests
-echo '%!test alpha=1i;beta=1;' >> $TESTS
-gen_solver_tests
-echo '%!test alpha=1i;beta=1i;' >> $TESTS
-gen_solver_tests
-gen_section
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/class-concat/class-concat.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,14 @@
+%!test
+%! f = foo ();
+%! x = [f,f];
+%! assert (size (x), [1, 2])
+%! assert (class (x), "foo")
+
+%!test
+%! f = foo ();
+%! x = [f,f];
+%! tmp = num2cell (x);
+%! assert (iscell (tmp))
+%! assert (size (tmp), [1, 2])
+%! assert (class (tmp{1}), "foo")
+%! assert (class (tmp{2}), "foo")
--- a/test/class-concat/module.mk	Mon Feb 11 15:24:56 2013 -0500
+++ b/test/class-concat/module.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -1,5 +1,5 @@
 class_concat_FCN_FILES = \
   class-concat/@foo/foo.m \
-  class-concat/test_class_concat.m
+  class-concat/class-concat.tst
 
 FCN_FILES += $(class_concat_FCN_FILES)
--- a/test/class-concat/test_class_concat.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-%!test
-%! f = foo ();
-%! x = [f,f];
-%! assert (size (x), [1, 2])
-%! assert (class (x), "foo")
-
-%!test
-%! f = foo ();
-%! x = [f,f];
-%! tmp = num2cell (x);
-%! assert (iscell (tmp))
-%! assert (size (tmp), [1, 2])
-%! assert (class (tmp{1}), "foo")
-%! assert (class (tmp{2}), "foo")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classdef/classdef.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,73 @@
+## Copyright (C) 2013 Ben Abbott
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%%  Test script for classdef OOP.
+%%  Requires the path to contain the test classes.
+%%
+%%  Note: This script and all classes are also intended to run
+%%        in MATLAB to test compatibility.  Don't break that!
+%%
+%%  To Do:  This script tests to ensure that things done correctly work
+%%          corrrectly.  It should also check that things done incorrectly
+%%          error properly.
+%%
+%%  The classes used for the tests reside in the test/classdef with others
+%%  in the test directory.
+%%
+%%  The classes provide the ability to test most of the major features
+%%  of the classdef OOP facilities.  There are a number of classes, mostly
+%%  kind of the same, that create a hierarchy.
+
+%%  Basic classdef tests for value class
+%!shared p, q, i, amt
+%! q = foo_value_class ();
+%! p = foo_value_class (4, 4*12, 50e3);
+%! i = p.rate / (12 * 100);
+%! amt = (p.principle * i) / (1 - (1 + i)^(-p.term));
+%!assert (isempty (q.rate));
+%!assert (isempty (q.principle));
+%!assert (isempty (q.term));
+%!assert (class (p), "foo_value_class");
+%!assert (p.term, 48);
+%!assert (p.rate, 4.0);
+%!assert (p.principle, 50e3);
+%!assert (p.amount, amt, eps ())
+%!assert (amount (p), amt, eps ())
+%!xtest
+%! assert (properties (p), {'rate'; 'term'; 'principle'})
+%!xtest
+%! assert (methods (p), {'amount'; 'foo_value_class'})
+%!assert (isempty (foo_value_class().rate))
+%!error <property `rate' is not constant> foo_value_class.rate
+
+%%  Static method and Constant Property
+%!assert (foo_static_method_constant_property.radians_per_cycle, 2*pi);
+%!assert (foo_static_method_constant_property().radians_per_cycle, 2*pi);
+%!assert (foo_static_method_constant_property().pie, pi);
+%!error <property `frequency' is not constant> foo_static_method_constant_property.frequency
+%!error <method `cosine' is not static> foo_static_method_constant_property.cosine
+%!test
+%! obj = foo_static_method_constant_property;
+%! obj.frequency = 10;
+%! assert (obj.cosine (0.1), cos (2 * pi * 10 * 0.1), eps ())
+%! assert (obj.sine (0.1), sin (2 * pi * 10 * 0.1), eps ())
+
+%!xtest
+%! obj = foo_method_changes_property_size (3);
+%! obj = obj.move_element_to_end (2);
+%! assert (obj.element, [1 3 2])
--- a/test/classdef/module.mk	Mon Feb 11 15:24:56 2013 -0500
+++ b/test/classdef/module.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -2,6 +2,6 @@
   classdef/foo_method_changes_property_size.m \
   classdef/foo_static_method_constant_property.m \
   classdef/foo_value_class.m \
-  classdef/test_classdef.m
+  classdef/classdef.tst
 
 FCN_FILES += $(classdef_FCN_FILES)
--- a/test/classdef/test_classdef.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-## Copyright (C) 2013 Ben Abbott
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%%  Test script for classdef OOP.
-%%  Requires the path to contain the test classes.
-%%
-%%  Note: This script and all classes are also intended to run
-%%        in MATLAB to test compatibility.  Don't break that!
-%%
-%%  To Do:  This script tests to ensure that things done correctly work
-%%          corrrectly.  It should also check that things done incorrectly
-%%          error properly.
-%%
-%%  The classes used for the tests reside in the test/classdef with others
-%%  in the test directory.
-%%
-%%  The classes provide the ability to test most of the major features
-%%  of the classdef OOP facilities.  There are a number of classes, mostly
-%%  kind of the same, that create a hierarchy.
-
-%%  Basic classdef tests for value class
-%!shared p, q, i, amt
-%! q = foo_value_class ();
-%! p = foo_value_class (4, 4*12, 50e3);
-%! i = p.rate / (12 * 100);
-%! amt = (p.principle * i) / (1 - (1 + i)^(-p.term));
-%!assert (isempty (q.rate));
-%!assert (isempty (q.principle));
-%!assert (isempty (q.term));
-%!assert (class (p), "foo_value_class");
-%!assert (p.term, 48);
-%!assert (p.rate, 4.0);
-%!assert (p.principle, 50e3);
-%!assert (p.amount, amt, eps ())
-%!assert (amount (p), amt, eps ())
-%!xtest
-%! assert (properties (p), {'rate'; 'term'; 'principle'})
-%!xtest
-%! assert (methods (p), {'amount'; 'foo_value_class'})
-%!assert (isempty (foo_value_class().rate))
-%!error <property `rate' is not constant> foo_value_class.rate
-
-%%  Static method and Constant Property
-%!assert (foo_static_method_constant_property.radians_per_cycle, 2*pi);
-%!assert (foo_static_method_constant_property().radians_per_cycle, 2*pi);
-%!assert (foo_static_method_constant_property().pie, pi);
-%!error <property `frequency' is not constant> foo_static_method_constant_property.frequency
-%!error <method `cosine' is not static> foo_static_method_constant_property.cosine
-%!test
-%! obj = foo_static_method_constant_property;
-%! obj.frequency = 10;
-%! assert (obj.cosine (0.1), cos (2 * pi * 10 * 0.1), eps ())
-%! assert (obj.sine (0.1), sin (2 * pi * 10 * 0.1), eps ())
-
-%!xtest
-%! obj = foo_method_changes_property_size (3);
-%! obj = obj.move_element_to_end (2);
-%! assert (obj.element, [1 3 2])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/double.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,6 @@
+function x = double(snk)
+
+  x = snk.gick;
+
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/eq.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function b = eq(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  b = isequal(x1, x2);
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/ge.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function b = ge(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  b = (x1(1) >= x2(1));
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/gt.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function b = gt(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  b = (x1(1) > x2(1));
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/horzcat.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function s = horzcat(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  s = Snork([x1 x2]);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/ldivide.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function s = ldivide(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  s = Snork(x1 .\ x2);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/le.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function b = le(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  b = (x1(1) <= x2(1));
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/lt.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function b = lt(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  b = (x1(1) < x2(1));
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/minus.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function s = minus(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  s = Snork(x1 - x2);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/mldivide.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function s = mldivide(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  s = Snork(x1 \ x2);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/mpower.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,10 @@
+function s = mpower(s1, x)
+
+  if ~isa(s1, 'Snork') || isa(x, 'Snork')
+    error('mpower Snork!!!');
+  end
+
+  s = s1;
+  s.gick = s.gick ^ x;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/mrdivide.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function s = mrdivide(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  s = Snork(x1 / x2);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/mtimes.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function s = mtimes(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  s = Snork(x1 * x2);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/ne.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,5 @@
+function b = ne(s1, s2)
+
+  b = ~(s1 == s2);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/plus.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function s = plus(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  s = Snork(x1 + x2);
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/power.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,10 @@
+function s = power(s1, x)
+
+  if ~isa(s1, 'Snork') || isa(x, 'Snork')
+    error('power Snork!!!');
+  end
+
+  s = s1;
+  s.gick = s.gick .^ x;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/rdivide.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function s = rdivide(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  s = Snork(x1 ./ x2);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/times.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function s = times(s1, s2, s3)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  s = Snork(x1 .* x2);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/uminus.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,6 @@
+function s = uminus(s1)
+
+  s = s1;
+  s.gick = - s.gick;
+
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/uplus.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,5 @@
+function s = uplus(s1)
+
+  s = s1;
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/@Snork/vertcat.m	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,8 @@
+function s = vertcat(s1, s2)
+
+  x1 = double(s1);
+  x2 = double(s2);
+
+  s = Snork([x1; x2]);
+
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/classes/classes.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,318 @@
+## Copyright (C) 2013 Julien Bect
+## Copyright (C) 2009-2012 Robert T. Short
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% Test script for legacy OOP.
+%% Requires the path to contain the test classes.
+%%
+%% Note: This script and all classes are also intended to run
+%%       in MATLAB to test compatibility.  Don't break that!
+%%
+%%       Note(JBect, 2013/01/27) : in order to ease to process of testing
+%%       Matlab compatibility, the syntax assert(observed, expected) should
+%%       be avoided. I use assert(isequal(observed, expected) instead.
+%%
+%% To Do:  This script tests to ensure that things done correctly work
+%%         corrrectly.  It should also check that things done incorrectly
+%%         error properly.
+%%
+%% The classes used for the tests reside in the test directory.
+%%
+%% The classes provide the ability to test most of the major features
+%% of the legacy OOP facilities.  There are a number of classes, mostly
+%% kind of the same, that create a hierarchy.
+
+%% Test the Snork class.  The Snork class has a number of the standard
+%% methods that the others don't so we can test indexing and other
+%% features.
+%!shared snk, snk1, snk2
+%!test snk = Snork();
+%! assert (isequal (gick (snk), 1));
+%! assert (isequal (snk.gick, 1));
+%! assert (isequal (snk(2), 1));
+%! assert (isequal (snk{end}, 3));
+%!test snk = gick (snk, 2);
+%! assert (isequal (gick (snk), 2));
+%!test snk = set (snk, 'gick', 7);
+%! assert (isequal (get (snk, 'gick'), 7));
+%!test snk.gick = 4;
+%! assert (isequal (gick (snk),4));
+%!  snk(1) = 3;
+%!test snk{end} = 9;
+%! assert (isequal (cack (snk), [3 1 2 9]));
+%! assert (isequal (getStash (snk), 1));             % Check private functions.
+%! assert (isobject (snk));
+%! assert (isequal (class (snk), 'Snork'));
+%! assert (isa (snk, 'Snork'));
+%! assert (~isa (snk, 'Sneetch'));
+%! assert (ismethod (snk, 'gick'));
+%! assert (~ismethod (snk, 'bletch'));
+%! assert (exist ('snk') == 1);
+%! assert (exist ('blink') == 0);
+%!test snk1 = Snork(snk);
+%! assert (isequal (class (snk1), 'Snork'));
+%! assert (isequal (gick (snk1), 4));
+%!test snk2 = Snork(-3);
+%! assert (isequal (class (snk2), 'Snork'));
+%! assert (isequal (gick (snk2), -3));
+%!test x = [1 2 3 4];
+%! assert (isequal (x(snk), 1));
+
+%% x = methods ('Snork');                % Need to test the methods function.
+%% save temp snk;
+%% load temp                             % This load causes a segfault.
+%% assert (isequal (cack(snk), [-1 -2 -3 -4]));      % This is a major bug!
+
+%% The Spork class is a near clone of Snork but without as many standard
+%% methods.  We are testing no new octave features, but this is makes
+%% sure that we haven't bollixed up the Spork class if we should make
+%% changes.  We use Spork in the class hierarchy.
+%!shared sprk
+%!test sprk = Spork();
+%! assert (isequal (geek (sprk), 1));
+%!test sprk = geek (sprk, 3);
+%! assert (isequal (geek (sprk), 3));
+%!test sprk = set (sprk,'geek',7);
+%! assert (isequal (get (sprk, 'geek'), 7));
+%! assert (isequal (class (sprk), 'Spork'));
+%! assert (isa (sprk, 'Spork'));
+
+%%  The Blork class is a near clone of Snork but without as many standard
+%%  methods.  We are testing no new octave features, but this is makes
+%%  sure that we haven't bollixed up the Blork class if we should make
+%%  changes.  We use Blork in the class hierarchy.
+%!shared blrk
+%!test blrk = Blork();
+%! assert (isequal (bleek(blrk), 1));
+%!test blrk = bleek (blrk, 3);
+%! assert (isequal (bleek (blrk), 3));
+%!test blrk = set (blrk, 'bleek', 13);
+%! assert (isequal (get (blrk, 'bleek'), 13));
+%! assert (isequal (class (blrk), 'Blork'));
+%! assert (isa (blrk, 'Blork'));
+
+%%  The Cork class is a near clone of Snork but without as many standard
+%%  methods.  We are testing no new octave features, but this is makes
+%%  sure that we haven't bollixed up the Cork class if we should make
+%%  changes.  We use Cork in the class hierarchy.
+%!shared crk
+%!test crk = Cork(23);
+%! assert (isequal (click(crk), 23));
+%!test crk = click(crk,3);
+%! assert (isequal (click(crk), 3));
+%!test crk = set (crk, 'click', 13);
+%! assert (isequal (get (crk, 'click'), 13));
+%! assert (isequal (class (crk), 'Cork'));
+%! assert (isa (crk, 'Cork'));
+
+%%  The Dork class tests single inheritance.
+%!shared drk
+%!test drk = Dork();
+%! assert (isequal (gack (drk),0));
+%!test drk = gack (drk,-2);
+%! assert (isequal (gack (drk),-2));
+%!test drk = gick (drk,2);
+%! assert (isequal (gick (drk),2));
+%!test drk = set (drk, 'gick',3, 'gack',-3);
+%! assert (isequal (get (drk, 'gick'), 3));
+%! assert (isequal (get (drk, 'gack'), -3));
+%! assert (isequal (class (drk), 'Dork'));
+%! assert (isa (drk, 'Dork'));
+%! assert (isa (drk, 'Snork'));
+%! assert (isequal (getStash (drk), 2));
+%!test drk1 = Dork(drk);
+%! assert (isequal (class (drk1), 'Dork'));
+%! assert (isa (drk1, 'Snork'));
+%! assert (isequal (gick (drk1), 3));
+%! assert (isequal (gack (drk1), -3));
+%!test drk2 = Dork(-4, 4);
+%! assert (isequal (class (drk2), 'Dork'));
+%! assert (isa (drk2, 'Snork'));
+%! assert (isequal (gick (drk2), -4));
+%! assert (isequal (gack (drk2), 4));
+
+%%  The Pork class is essentially a clone of Dork.  It is used as part
+%%  of the multiple inheritance test.
+%!shared prk, drk
+%!test prk = Pork();
+%! assert (isequal (geek (prk), 1));
+%! assert (isequal (gurk (prk), 0));
+%!test prk = gurk (prk,-3);
+%! assert (isequal (gurk (prk), -3));
+%!test prk = geek (prk,9);
+%! assert (isequal (geek (prk), 9));
+%! assert (isequal (class (prk), 'Pork'));
+%! assert (isa (prk, 'Pork'));
+%! assert (isa (prk, 'Spork'));
+%!test drk = Dork();                   % Precedence.
+%! assert (isequal (bling (drk, prk), 2));
+%! assert (isequal (bling (prk, drk), 2));
+
+%%  The Gork class tests aggregation and multiple inheritance.
+%!shared grk
+%!test grk = Gork();
+%! assert (isequal (gick (grk), 1));
+%! assert (isequal (geek (grk), 1));
+%! assert (isequal (gack (grk), 0));
+%! assert (isequal (gurk (grk), 0));
+%! assert (isequal (bleek (grk), 1));
+%! assert (isequal (gark(grk), -2));
+%! assert (isequal (click (cork (grk)), 17));
+%! assert (isequal (class (cork (grk)), 'Cork'));
+%!test grk = gick (grk, 3);
+%!test grk = geek (grk, 4);
+%!test grk = gack (grk, -9);
+%!test grk = gurk (grk, -8);
+%!test grk = bleek (grk, -7);
+%!test grk = gark (grk, -6);
+%!test grk = cork (grk, click (cork (grk), 23));
+%! assert (isequal (gick (grk), 3));
+%! assert (isequal (geek (grk), 4));
+%! assert (isequal (gack (grk), -9));
+%! assert (isequal (gurk (grk), -8));
+%! assert (isequal (bleek (grk), -7));
+%! assert (isequal (gark (grk), -6));
+%! assert (isequal (click (cork (grk)), 23));
+%!test
+%! cork1 = Cork(13);
+%! grk = set (grk, 'gick', -5, 'gack', -6, 'gark', -7, 'cork', cork1);
+%! assert (isequal (get (grk, 'gick'), -5));
+%! assert (isequal (get (grk, 'gack'), -6));
+%! assert (isequal (get (grk, 'gark'), -7));
+%! assert (isequal (click(get (grk, 'cork')), 13));
+%!test grk = set (grk, 'cork', 12);
+%! assert (isequal (click(get (grk, 'cork')),12));
+%! assert (isequal (class (cork(grk)), 'Cork'));
+%! assert (isequal (class (grk), 'Gork'));
+%! assert (isa (grk, 'Gork'));
+%! assert (isa (grk, 'Dork'));
+%! assert (isa (grk, 'Pork'));
+%! assert (isa (grk, 'Blork'));
+%! assert (isa (grk, 'Snork'));
+%! assert (isa (grk, 'Spork'));
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Testing (some) overloaded operators %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Common variables for testing overloaded operators
+%!shared x1, x2, x3, s1, s2, s3
+%!  x1 = 1 + rand(3);    s1 = Snork(x1);
+%!  x2 = 1 + rand(3);    s2 = Snork(x2);
+%!  x3 = diag([1 2 3]);  s3 = Snork(x3);
+
+%% Test overloaded plus (+) and uplus (unitary +) for the Snork class
+%!test  s = s1 + s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 + x2));
+%!test  s = s1 + x2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 + x2));
+%!test  s = x1 + s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 + x2));
+%!test  s = +s1;      assert (isequal (s, s1));
+
+%% Test overloaded minus (-) for the Snork class
+%!test  s = s1 - s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 - x2));
+%!test  s = s1 - x2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 - x2));
+%!test  s = x1 - s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 - x2));
+%!test  s = -s1;      assert (isequal (s, Snork(-x1)));
+
+%% Test overloaded mtimes (*) for the Snork class
+%!test  s = s1 * s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 * x2));
+%!test  s = s1 * x2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 * x2));
+%!test  s = x1 * s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 * x2));
+
+%% Test overloaded times (.*) for the Snork class
+%!test  s = s1 .* s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 .* x2));
+%!test  s = s1 .* x2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 .* x2));
+%!test  s = x1 .* s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 .* x2));
+
+%% Test overloaded mpower (^) for the Snork class
+%!test  s = s1 ^ 3;   assert (isa (s, 'Snork') && isequal (s.gick, x1 ^ 3));
+%!error <mpower Snork!!!>  s = s1 ^ s1;
+%!error <mpower Snork!!!>  s = 20 ^ s1;
+
+%% Test overloaded power (.^) for the Snork class
+%!test  s = s1 .^ 2;   assert (isa (s, 'Snork') && isequal (s.gick, x1 .^ 2));
+%!error <power Snork!!!>  s = s1 .^ s1;
+%!error <power Snork!!!>  s = 20 .^ s1;
+
+%% Test overloaded rdivide (./) for the Snork class
+%!test  s = s1 ./ s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 ./ x2));
+%!test  s = s1 ./ x2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 ./ x2));
+%!test  s = x1 ./ s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 ./ x2));
+
+%% Test overloaded ldivide (.\) for the Snork class
+%!test  s = s1 .\ s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 .\ x2));
+%!test  s = s1 .\ x2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 .\ x2));
+%!test  s = x1 .\ s2;  assert (isa (s, 'Snork') && isequal (s.gick, x1 .\ x2));
+
+%% Test overloaded mrdivide (/) for the Snork class
+%!test  s = s1 / s3;  assert (isa (s, 'Snork') && isequal (s.gick, x1 / x3));
+%!test  s = s1 / x3;  assert (isa (s, 'Snork') && isequal (s.gick, x1 / x3));
+%!test  s = x1 / s3;  assert (isa (s, 'Snork') && isequal (s.gick, x1 / x3));
+
+%% Test overloaded mldivide (\) for the Snork class
+%!test  s = s3 \ s2;  assert (isa (s, 'Snork') && isequal (s.gick, x3 \ x2));
+%!test  s = s3 \ x2;  assert (isa (s, 'Snork') && isequal (s.gick, x3 \ x2));
+%!test  s = x3 \ s2;  assert (isa (s, 'Snork') && isequal (s.gick, x3 \ x2));
+
+%% Test overloaded eq (==) for the Snork class
+%!assert (s1 == s1)
+%!assert (s1 == x1)
+%!assert (x1 == s1)
+%!assert (~(s1 == (s1 + 1)))
+%!assert (~(s1 == (x1 + 1)))
+%!assert (~(x1 == (s1 + 1)))
+
+%% Test overloaded ne (~=) for the Snork class
+%!assert (~(s1 ~= s1))
+%!assert (~(s1 ~= x1))
+%!assert (~(x1 ~= s1))
+%!assert (s1 ~= (s1 + 1))
+%!assert (x1 ~= (s1 + 1))
+%!assert (s1 ~= (x1 + 1))
+
+%% Test overloaded lt (<) for the Snork class
+%!assert (s1 < (s1 + 1))
+%!assert (s1 < (x1 + 1))
+%!assert (x1 < (s1 + 1))
+
+%% Test overloaded gt (>) for the Snork class
+%!assert (s1 > (s1 - 1))
+%!assert (s1 > (x1 - 1))
+%!assert (x1 > (s1 - 1))
+
+%% Test overloaded lt (<=) for the Snork class
+%!assert (s1 <= (s1 + 1))
+%!assert (s1 <= (x1 + 1))
+%!assert (x1 <= (s1 + 1))
+
+%% Test overloaded gt (>=) for the Snork class
+%!assert (s1 >= (s1 - 1))
+%!assert (s1 >= (x1 - 1))
+%!assert (x1 >= (s1 - 1))
+
+%% Test overloaded vertcat() for the Snork class
+%% See bug #38170 (http://savannah.gnu.org/bugs/?38170)
+%!test   s = [s1; s2];  assert (isa (s, 'Snork') && isequal (s.gick, [x1; x2]));
+%!xtest  s = [s1; x2];  assert (isa (s, 'Snork') && isequal (s.gick, [x1; x2]));
+%!xtest  s = [x1; s2];  assert (isa (s, 'Snork') && isequal (s.gick, [x1; x2]));
+
+%% Test overloaded horzcat() for the Snork class
+%% See bug #38170 (http://savannah.gnu.org/bugs/?38170)
+%!test   s = [s1 s2];  assert (isa (s, 'Snork') && isequal (s.gick, [x1 x2]));
+%!xtest  s = [s1 x2];  assert (isa (s, 'Snork') && isequal (s.gick, [x1 x2]));
+%!xtest  s = [x1 s2];  assert (isa (s, 'Snork') && isequal (s.gick, [x1 x2]));
+
--- a/test/classes/module.mk	Mon Feb 11 15:24:56 2013 -0500
+++ b/test/classes/module.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -37,17 +37,38 @@
   classes/@Snork/Snork.m \
   classes/@Snork/cack.m \
   classes/@Snork/display.m \
+  classes/@Snork/double.m \
   classes/@Snork/end.m \
+  classes/@Snork/eq.m \
+  classes/@Snork/ge.m \
   classes/@Snork/get.m \
   classes/@Snork/getStash.m \
   classes/@Snork/gick.m \
+  classes/@Snork/gt.m \
+  classes/@Snork/horzcat.m \
+  classes/@Snork/ldivide.m \
+  classes/@Snork/le.m \
   classes/@Snork/loadobj.m \
+  classes/@Snork/lt.m \
+  classes/@Snork/minus.m \
+  classes/@Snork/mldivide.m \
+  classes/@Snork/mpower.m \
+  classes/@Snork/mrdivide.m \
+  classes/@Snork/mtimes.m \
+  classes/@Snork/ne.m \
+  classes/@Snork/plus.m \
+  classes/@Snork/power.m \
   classes/@Snork/private/myStash.m \
+  classes/@Snork/rdivide.m \
   classes/@Snork/saveobj.m \
   classes/@Snork/set.m \
   classes/@Snork/subsasgn.m \
   classes/@Snork/subsindex.m \
   classes/@Snork/subsref.m \
+  classes/@Snork/times.m \
+  classes/@Snork/uminus.m \
+  classes/@Snork/uplus.m \
+  classes/@Snork/vertcat.m \
   classes/@Spork/Spork.m \
   classes/@Spork/cack.m \
   classes/@Spork/display.m \
@@ -58,6 +79,6 @@
   classes/@Spork/private/myStash.m \
   classes/@Spork/saveobj.m \
   classes/@Spork/set.m \
-  classes/test_classes.m
+  classes/classes.tst
 
 FCN_FILES += $(classes_FCN_FILES)
--- a/test/classes/test_classes.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,201 +0,0 @@
-## Copyright (C) 2009-2012 Robert T. Short
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%%  Test script for legacy OOP.
-%%  Requires the path to contain the test classes.
-%%
-%%  Note: This script and all classes are also intended to run
-%%        in MATLAB to test compatibility.  Don't break that!
-%%
-%%  To Do:  This script tests to ensure that things done correctly work
-%%          corrrectly.  It should also check that things done incorrectly
-%%          error properly.
-%%
-%%  The classes used for the tests reside in the test directory.
-%%
-%%  The classes provide the ability to test most of the major features
-%%  of the legacy OOP facilities.  There are a number of classes, mostly
-%%  kind of the same, that create a hierarchy.
-
-%%  Test the Snork class.  The Snork class has a number of the standard
-%%  methods that the others don't so we can test indexing and other
-%%  features.
-%!shared snk, snk1, snk2
-%!test snk = Snork();
-%!  assert(gick(snk),1)
-%!  assert(snk.gick,1)
-%!  assert(snk(2),1);
-%!  assert(snk{end},3);
-%!test snk = gick(snk,2);
-%!  assert(gick(snk),2)
-%!test snk = set(snk,'gick',7);
-%!  assert(get(snk, 'gick'), 7)
-%!test snk.gick = 4;
-%! assert(gick(snk),4)
-%!   snk(1) = 3;
-%!test snk{end} = 9;
-%!  assert(cack(snk),[3 1 2 9])
-%!  assert(getStash(snk),1)             % Check private functions.
-%!  assert(isobject(snk))
-%!  assert(class(snk),'Snork')
-%!  assert(isa(snk,'Snork'))
-%!  assert(~isa(snk,'Sneetch'))
-%!  assert(ismethod(snk,'gick'))
-%!  assert(~ismethod(snk,'bletch'))
-%!  assert(exist('snk'))
-%!  assert(~exist('blink'))
-%!test snk1 = Snork(snk);
-%!  assert(class(snk1),'Snork')
-%!  assert(gick(snk1),4)
-%!test snk2 = Snork(-3);
-%!  assert(class(snk2),'Snork')
-%!  assert(gick(snk2),-3)
-%!test x=[1 2 3 4];
-%!  assert(x(snk),1);
-%% x=methods('Snork');                   % Need to test the methods function.
-%% save temp snk;
-%% load temp                             % This load causes a segment fault.
-%% assert(cack(snk),[-1 -2 -3 -4]);      % This is a major bug!
-
-%% The Spork class is a near clone of Snork but without as many standard
-%% methods.  We are testing no new octave features, but this is makes
-%% sure that we haven't bollixed up the Spork class if we should make
-%% changes.  We use Spork in the class hierarchy.
-%!shared sprk
-%!test sprk = Spork();
-%!  assert(geek(sprk),1)
-%!test sprk = geek(sprk,3);
-%!  assert(geek(sprk),3)
-%!test sprk = set(sprk,'geek',7);
-%!  assert(get(sprk, 'geek'), 7)
-%!  assert(class(sprk),'Spork');
-%!  assert(isa(sprk,'Spork'))
-
-%%  The Blork class is a near clone of Snork but without as many standard
-%%  methods.  We are testing no new octave features, but this is makes
-%%  sure that we haven't bollixed up the Blork class if we should make
-%%  changes.  We use Blork in the class hierarchy.
-%!shared blrk
-%!test blrk = Blork();
-%!  assert(bleek(blrk),1)
-%!test blrk = bleek(blrk,3);
-%!  assert(bleek(blrk),3)
-%!test blrk = set(blrk,'bleek',13);
-%!  assert(get(blrk, 'bleek'), 13)
-%!  assert(class(blrk),'Blork');
-%!  assert(isa(blrk,'Blork'))
-
-%%  The Cork class is a near clone of Snork but without as many standard
-%%  methods.  We are testing no new octave features, but this is makes
-%%  sure that we haven't bollixed up the Cork class if we should make
-%%  changes.  We use Cork in the class hierarchy.
-%!shared crk
-%!test crk = Cork(23);
-%!  assert(click(crk),23)
-%!test crk = click(crk,3);
-%!  assert(click(crk),3)
-%!test crk = set(crk,'click',13);
-%!  assert(get(crk, 'click'), 13)
-%!  assert(class(crk),'Cork');
-%!  assert(isa(crk,'Cork'))
-
-%%  The Dork class tests single inheritance.
-%!shared drk
-%!test drk = Dork();
-%!  assert(gack(drk),0)
-%!test drk = gack(drk,-2);
-%!  assert(gack(drk),-2)
-%!test drk = gick(drk,2);
-%!  assert(gick(drk),2);
-%!test drk = set(drk, 'gick',3, 'gack',-3);
-%!  assert(get(drk, 'gick'), 3)
-%!  assert(get(drk, 'gack'), -3)
-%!  assert(class(drk),'Dork')
-%!  assert(isa(drk,'Dork'))
-%!  assert(isa(drk,'Snork'))
-%!  assert(getStash(drk),2)
-%!test drk1 = Dork(drk);
-%!  assert(class(drk1),'Dork')
-%!  assert(isa(drk1,'Snork'))
-%!  assert(gick(drk1),3)
-%!  assert(gack(drk1),-3)
-%!test drk2 = Dork(-4,4);
-%!  assert(class(drk2),'Dork')
-%!  assert(isa(drk2,'Snork'))
-%!  assert(gick(drk2),-4)
-%!  assert(gack(drk2),4)
-
-%%  The Pork class is essentially a clone of Dork.  It is used as part
-%%  of the multiple inheritance test.
-%!shared prk, drk
-%!test prk = Pork();
-%!  assert(geek(prk),1)
-%!  assert(gurk(prk),0)
-%!test prk = gurk(prk,-3);
-%!  assert(gurk(prk),-3)
-%!test prk = geek(prk,9);
-%!  assert(geek(prk),9)
-%!  assert(class(prk),'Pork')
-%!  assert(isa(prk,'Pork'))
-%!  assert(isa(prk,'Spork'))
-%!test drk = Dork();                   % Precedence.
-%!  assert(bling(drk,prk),2)
-%!  assert(bling(prk,drk),2)
-  
-%%  The Gork class tests aggregation and multiple inheritance.
-%!shared grk
-%!test grk = Gork();
-%!  assert(gick(grk),1)
-%!  assert(geek(grk),1)
-%!  assert(gack(grk),0)
-%!  assert(gurk(grk),0)
-%!  assert(bleek(grk),1)
-%!  assert(gark(grk),-2)
-%!  assert(click(cork(grk)),17)
-%!  assert(class(cork(grk)),'Cork')
-%!test grk = gick(grk,3);
-%!test grk = geek(grk,4);
-%!test grk = gack(grk,-9);
-%!test grk = gurk(grk,-8);
-%!test grk = bleek(grk,-7);
-%!test grk = gark(grk,-6);
-%!test grk = cork(grk,click(cork(grk),23));
-%!  assert(gick(grk),3)
-%!  assert(geek(grk),4)
-%!  assert(gack(grk),-9)
-%!  assert(gurk(grk),-8)
-%!  assert(bleek(grk),-7)
-%!  assert(gark(grk),-6)
-%!  assert(click(cork(grk)),23)
-%!test
-%!    cork1 = Cork(13);
-%!    grk = set(grk, 'gick',-5, 'gack',-6, 'gark',-7, 'cork',cork1);
-%!  assert(get(grk,'gick'),-5)
-%!  assert(get(grk,'gack'),-6)
-%!  assert(get(grk,'gark'),-7)
-%!  assert(click(get(grk, 'cork')),13);
-%!test grk = set(grk, 'cork',12);
-%!  assert(click(get(grk, 'cork')),12);
-%!  assert(class(cork(grk)),'Cork')
-%!  assert(class(grk),'Gork')
-%!  assert(isa(grk,'Gork'))
-%!  assert(isa(grk,'Dork'))
-%!  assert(isa(grk,'Pork'))
-%!  assert(isa(grk,'Blork'))
-%!  assert(isa(grk,'Snork'))
-%!  assert(isa(grk,'Spork'))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ctor-vs-method/ctor-vs-method.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,56 @@
+## Copyright (C) 2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%%  Test script for legacy OOP.
+%%  Requires the path to contain the directory ctor-vs-method.
+%%
+%%  Note: This script and all classes are also intended to run
+%%        in Matlab to test compatibility.  Don't break that!
+
+%!shared d, o
+%! d = derived ();
+%! o = other ();
+%!
+%!error method (o);
+
+%!test
+%! ctrace = {'begin parent/method';
+%!           'begin derived/parent';
+%!           'begin parent/parent';
+%!           'end parent/parent';
+%!           'end derived/parent';
+%!           'end parent/method'};
+%! __trace__ (); %% clear call trace info
+%! method (d);
+%! assert (__trace__ (), ctrace);
+
+%!test
+%! ctrace = {'begin other/parent';
+%!           'end other/parent'};
+%! __trace__ (); %% clear call trace info
+%! parent (o);
+%! assert (__trace__ (), ctrace);
+
+%!test
+%! ctrace = {'begin derived/parent';
+%!           'begin parent/parent';
+%!           'end parent/parent';
+%!           'end derived/parent'};
+%! __trace__ (); %% clear call trace info
+%! parent (d);
+%! assert (__trace__ (), ctrace);
--- a/test/ctor-vs-method/module.mk	Mon Feb 11 15:24:56 2013 -0500
+++ b/test/ctor-vs-method/module.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -6,6 +6,6 @@
   ctor-vs-method/@parent/method.m \
   ctor-vs-method/@parent/parent.m \
   ctor-vs-method/__trace__.m \
-  ctor-vs-method/test_ctor_vs_method.m
+  ctor-vs-method/ctor-vs-method.tst
 
 FCN_FILES += $(ctor_vs_method_FCN_FILES)
--- a/test/ctor-vs-method/test_ctor_vs_method.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-## Copyright (C) 2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%%  Test script for legacy OOP.
-%%  Requires the path to contain the directory ctor-vs-method.
-%%
-%%  Note: This script and all classes are also intended to run
-%%        in Matlab to test compatibility.  Don't break that!
-
-%!shared d, o
-%! d = derived ();
-%! o = other ();
-%!
-%!error method (o);
-
-%!test
-%! ctrace = {'begin parent/method';
-%!           'begin derived/parent';
-%!           'begin parent/parent';
-%!           'end parent/parent';
-%!           'end derived/parent';
-%!           'end parent/method'};
-%! __trace__ (); %% clear call trace info
-%! method (d);
-%! assert (__trace__ (), ctrace);
-
-%!test
-%! ctrace = {'begin other/parent';
-%!           'end other/parent'};
-%! __trace__ (); %% clear call trace info
-%! parent (o);
-%! assert (__trace__ (), ctrace);
-
-%!test
-%! ctrace = {'begin derived/parent';
-%!           'begin parent/parent';
-%!           'end parent/parent';
-%!           'end derived/parent'};
-%! __trace__ (); %% clear call trace info
-%! parent (d);
-%! assert (__trace__ (), ctrace);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/diag-perm.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,265 @@
+## Copyright (C) 2009-2012 E. Jason Riedy
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+########################################
+## Permutation matrices
+
+## row permutation
+%!test
+%! n = 5;
+%! A = rand (n);
+%! perm = randperm (n);
+%! Prow = eye (n) (perm, :);
+%! assert (A(perm, :), Prow * A);
+%! invperm(perm) = 1:n;
+%! assert (Prow \ A, A(invperm, :));
+%! assert (Prow' * A, A(invperm, :));
+
+## column permutation
+%!test
+%! n = 7;
+%! A = rand (n);
+%! perm = randperm (n);
+%! Pcol = eye (n) (:, perm);
+%! assert (A(:, perm), A * Pcol);
+%! invperm(perm) = 1:n;
+%! assert (A / Pcol, A(:, invperm));
+%! assert (A * Pcol.', A(:, invperm));
+
+## fall back to a matrix in addition
+%!test
+%! n = 4;
+%! P1 = eye (n) (:, randperm (n));
+%! A = zeros (n) + P1;
+%! assert (sum (A), full (ones (1, n)));
+%! assert (sum (A, 2), full (ones (n, 1)));
+
+## preserve dense matrix structure
+%!test
+%! n = 7;
+%! Pc = eye (n) (:, randperm (n));
+%! Pr = eye (n) (randperm (n), :);
+%! assert (typeinfo (rand (n) * Pc), "matrix");
+%! assert (typeinfo (Pr * rand (n)), "matrix");
+
+## preserve sparse matrix structure
+%!test
+%! n = 7;
+%! Pc = eye (n) (:, randperm (n));
+%! Ac = sprand (n-3, n, .5) + I () * sprand (n-3, n, .5);
+%! Pr = eye (n) (randperm (n), :);
+%! Ar = sprand (n, n+2, .5);
+%! assert (typeinfo (Ac * Pc), "sparse complex matrix");
+%! assert (full (Ac * Pc), full (Ac) * Pc);
+%! assert (full (Ac / Pc), full (Ac) / Pc);
+%! assert (typeinfo (Pr * Ar), "sparse matrix");
+%! assert (full (Pr * Ar), Pr * full (Ar));
+%! assert (full (Pr \ Ar), Pr \ full (Ar));
+
+## structure rules for 1x1 dense / scalar and 1x1 perm
+%!test
+%! n = 7;
+%! P1 = eye (1) (:, [1]);
+%! A1 = 1;
+%! P = eye (n) (:, randperm (n));
+%! A = rand (n-3, n, .5);
+%! assert (typeinfo (A * P1), "matrix");
+%! assert (full (A * P1), full (A) * P1);
+%! assert (typeinfo (P1 * A), "matrix");
+%! assert (full (P1 * A), P1 * full (A));
+%! assert (typeinfo (A1 * P), "matrix");
+%! assert (full (A1 * P), full (A1) * P);
+%! assert (typeinfo (P * A1), "matrix");
+%! assert (full (P * A1), P * full (A1));
+
+## structure rules for 1x1 sparse and 1x1 perm
+%!test
+%! n = 7;
+%! P1 = eye (1) (:, [1]);
+%! A1 = sparse (1, 1, 2);
+%! P = eye (n) (:, randperm (n));
+%! A = sprand (n-3, n, .5);
+%! assert (typeinfo (A * P1), "sparse matrix");
+%! assert (full (A * P1), full (A) * P1);
+%! assert (typeinfo (P1 * A), "sparse matrix");
+%! assert (full (P1 * A), P1 * full (A));
+%! assert (typeinfo (A1 * P), "sparse matrix");
+%! assert (full (A1 * P), full (A1) * P);
+%! assert (typeinfo (P * A1), "sparse matrix");
+%! assert (full (P * A1), P * full (A1));
+
+## permuting a matrix with exceptional values does not introduce new ones.
+%!test
+%! n = 5;
+%! pc = randperm (n);
+%! Pc = eye (n) (:, pc);
+%! pr = randperm (n);
+%! Pr = eye (n) (pr, :);
+%! A = rand (n);
+%! A(n, n-2) = NaN;
+%! A(3, 1) = Inf;
+%! assert (Pr * A * Pc, A(pr, pc));
+
+## conversion to sparse form
+%!test
+%! n = 7;
+%! P = eye (n) (:, randperm (n));
+%! sP = sparse (P);
+%! assert (full (sP), full (P));
+%! assert (size (find (sP), 1), n);
+%! [I, J, V] = find (sP);
+%! assert (all (V == 1));
+
+########################################
+## Diagonal matrices
+
+## square row scaling
+%!test
+%! m = 7;
+%! n = 11;
+%! A = rand (m, n);
+%! scalefact = rand (m, 1);
+%! Dr = diag (scalefact);
+%! assert (Dr * A, repmat (scalefact, 1, n) .* A);
+%! assert (Dr \ A, A ./ repmat (scalefact, 1, n));
+%! scalefact(m-1) = Inf;
+%! Dr(m-1, m-1) = 0;
+%! assert (Dr \ A, A ./ repmat (scalefact, 1, n));
+
+## square column scaling
+%!test
+%! m = 13;
+%! n = 11;
+%! A = rand (m, n);
+%! scalefact = rand (1, n);
+%! Dc = diag (scalefact);
+%! assert (A * Dc, repmat (scalefact, m, 1) .* A);
+%! assert (A / Dc, A ./ repmat (scalefact, m, 1));
+%! scalefact(n-1) = Inf;
+%! Dc(n-1, n-1) = 0;
+%! assert (A / Dc, A ./ repmat (scalefact, m, 1));
+
+## arithmetic
+%!test
+%! m = 9;
+%! n = 7;
+%! mn = min (m, n);
+%! d1 = rand (mn, 1) + I () * rand (mn, 1);
+%! D1 = diag (d1, m, n);
+%! d2 = rand (mn, 1);
+%! D2 = diag (d2, m, n);
+%! D1D2 = D1 + D2;
+%! assert (typeinfo (D1D2), "complex diagonal matrix");
+%! assert (diag (D1D2), d1 + d2);
+%! D1D2 = D2.' * D1;
+%! assert (typeinfo (D1D2), "complex diagonal matrix");
+%! assert (diag (D1D2), d1 .* d2);
+
+## slicing
+%!test
+%! m = 13;
+%! n = 6;
+%! mn = min (m, n);
+%! d = rand (mn, 1);
+%! D = diag (d, m, n);
+%! Dslice = D (1:(m-3), 1:(n-2));
+%! assert (typeinfo (Dslice), "diagonal matrix");
+
+## preserve dense matrix structure when scaling
+%!assert (typeinfo (rand (8) * (3 * eye (8))), "matrix");
+%!assert (typeinfo ((3 * eye (8)) * rand (8)), "matrix");
+
+## preserve sparse matrix structure when scaling
+%!assert (typeinfo (sprand (8, 8, .5) * (3 * eye (8))), "sparse matrix");
+%!assert (typeinfo (sprand (8, 8, .5) * (3 * eye (8))'), "sparse matrix");
+%!assert (typeinfo (((3 + 2 * I ()) * eye (8)) * sprand (8, 8, .5)), "sparse complex matrix");
+%!assert (typeinfo (((3 + 2 * I ()) * eye (8))' * sprand (8, 8, .5)), "sparse complex matrix");
+%!assert (typeinfo (sprand (8, 8, .5) * ((3 + 2 * I ()) * eye (8)).'), "sparse complex matrix");
+
+## scaling a matrix with exceptional values does not introduce new ones.
+%!test
+%! n = 6;
+%! dr = rand (n, 1);
+%! Dr = diag (dr);
+%! dc = rand (1, n);
+%! Dc = diag (dc);
+%! A = rand (n);
+%! A(n, n-2) = NaN;
+%! A(4, 1) = Inf;
+%! assert (Dr * A * Dc, A .* kron (dr, dc), eps);
+
+## sparse inverse row scaling with a zero factor
+%!test
+%! n = 8;
+%! A = sprand (n, n, .5);
+%! scalefact = rand (n, 1);
+%! Dr = diag (scalefact);
+%! scalefact(n-1) = Inf;
+%! Dr(n-1, n-1) = 0;
+%! assert (full (Dr \ A), full (A) ./ repmat (scalefact, 1, n));
+
+## narrow sparse inverse row scaling
+%!test
+%! n = 8;
+%! A = sprand (n, n, .5);
+%! scalefact = rand (n-2, 1);
+%! Dr = diag (scalefact, n, n-2);
+%! assert (full (Dr \ A), Dr \ full(A));
+
+## sparse inverse column scaling with a zero factor
+%!test
+%! n = 11;
+%! A = sprand (n, n, .5);
+%! scalefact = rand (1, n);
+%! Dc = diag (scalefact);
+%! scalefact(n-1) = Inf;
+%! Dc(n-1, n-1) = 0;
+%! assert (full (A / Dc), full(A) / Dc);
+
+## short sparse inverse column scaling
+%!test
+%! n = 7;
+%! A = sprand (n, n, .5);
+%! scalefact = rand (1, n-2) + I () * rand(1, n-2);
+%! Dc = diag (scalefact, n-2, n);
+%! assert (full (A / Dc), full(A) / Dc);
+
+## adding sparse and diagonal stays sparse
+%!test
+%! n = 9;
+%! A = sprand (n, n, .5);
+%! D = 2 * eye (n);
+%! assert (typeinfo (A + D), "sparse matrix");
+%! assert (typeinfo (A - D), "sparse matrix");
+%! D = D * I () + D;
+%! assert (typeinfo (A - D), "sparse complex matrix");
+%! A = A * I () + A;
+%! assert (typeinfo (D - A), "sparse complex matrix");
+
+## adding sparse and diagonal stays sparse
+%!test
+%! n = 9;
+%! A = sprand (n, n, .5);
+%! D = 2 * eye (n);
+%! assert (full (A + D), full (A) + D);
+%! assert (full (A - D), full (A) - D);
+%! D = D * I () + D;
+%! assert (full (D + A), D + full (A));
+%! A = A * I () + A;
+%! A(6, 4) = nan ();
+%! assert (full (D - A), D - full (A));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/error.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,93 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## Test %!error usage
+
+%% test/octave.test/error/error-1.m
+%!function g () 
+%!  error ("foo");
+%!endfunction
+%!function f () 
+%!  g (); 
+%!endfunction
+%!error <foo> f ()
+
+%% test/octave.test/error/error-2.m
+%!function g () 
+%!  error ("foo\n");
+%!endfunction
+%!function f () 
+%!  g 
+%!endfunction
+%!error <foo> f ()
+
+%% test/octave.test/error/error-3.m
+%!error error ()
+
+%% test/octave.test/error/error-4.m
+%!error <foo> error ("foo\n")
+
+## Test %!warning usage
+
+%% test/octave.test/error/warning-1.m
+%!function g ()
+%!  warning ("foo");
+%!endfunction
+%!function f ()
+%!  g;
+%!endfunction
+%!warning <foo> f ()
+
+%% test/octave.test/error/warning-2.m
+%!test
+%! st.identifier = "backtrace";
+%! ws = warning ("query", "backtrace");
+%! warning ("on", "backtrace");
+%! st.state = "on";
+%! assert(warning ("query", "backtrace"), st);
+%! warning ("off", "backtrace");
+%! st.state = "off";
+%! assert(warning ("query", "backtrace"), st);
+%! warning (ws.state, "backtrace");
+
+## Test usage() function
+
+%% test/octave.test/error/usage-1.m
+%!function g () 
+%!  usage ("foo");
+%!endfunction
+%!function f () 
+%!  g (); 
+%!endfunction
+%!error <foo> f ()
+
+%% test/octave.test/error/usage-2.m
+%!function g () 
+%!  usage ("foo");
+%!endfunction
+%!function f () 
+%!  g 
+%!endfunction
+%!error <foo> f ()
+
+%% test/octave.test/error/usage-3.m
+%!error usage ()
+
+%% test/octave.test/error/usage-4.m
+%!error <foo> usage ("foo\n")
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/eval-catch.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,73 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/eval-catch/eval-catch-1.m
+%!test
+%! eval ("clear a; a;", "");
+
+%% test/octave.test/eval-catch/eval-catch-2.m
+%!test
+%! eval ("", "error ('Should not get here');");
+
+%% test/octave.test/eval-catch/eval-catch-3.m
+%!test
+%! eval ("clear a; a; x = 0;", "x = 1;");
+%! assert (x, 1);
+
+%% test/octave.test/eval-catch/eval-catch-5.m
+%!test
+%! eval ("clear a; a; str = '';", "str=lasterr;");
+%! assert (lasterr()(1:13), "'a' undefined");
+%! assert (str(1:13), "'a' undefined");
+
+%% test/octave.test/eval-catch/eval-catch-6.m
+%!test
+%! eval ("error ('user-defined error'); str = '';", "str = lasterr;");
+%! assert (lasterr()(1:18), "user-defined error");
+%! assert (str(1:18), "user-defined error");
+
+%% test/octave.test/eval-catch/eval-catch-7.m
+%!function ms = mangle (s)
+%!  ## Wrap angle brackets around S.
+%!  ms = cstrcat ("<", s, ">");
+%!endfunction
+%!test
+%! eval ("clear a; a; str='';", "str = mangle (lasterr);");
+%! assert (mangle(lasterr)(1:14), "<'a' undefined");
+%! assert (str(1:14), "<'a' undefined");
+
+%% test/octave.test/eval-catch/eval-catch-8.m
+%!test
+%! eval ("eval (\"clear a; a;str1='';\", \"str1=lasterr;\"); clear b; b; str2='';",
+%! "str2 = lasterr;");
+%! assert (str1(1:13), "'a' undefined");
+%! assert (str2(1:13), "'b' undefined");
+
+%% test/octave.test/eval-catch/eval-catch-9.m
+%!test
+%! eval ("clear a; a; str1='';",
+%! "eval (\"clear b; b; str2='';\", \"str2=lasterr;\"); str1=lasterr;");
+%! assert (str1(1:13), "'b' undefined");
+%! assert (str2(1:13), "'b' undefined");
+
+%% test/octave.test/eval-catch/eval-catch-10.m
+%!test
+%! eval ("eval (\"clear a; a; str='';\",\"error (cstrcat (\\\"rethrow: \\\", lasterr));str='';\");",
+%! "str=lasterr;");
+%! assert (str(1:22), "rethrow: 'a' undefined");
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/fcn-handle-derived-resolution/fcn-handle-derived-resolution.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,59 @@
+## Copyright (C) 2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%%  Test script for legacy OOP.
+%%  Requires the path to contain the directory ctor-vs-method.
+%%
+%%  Note: This script and all classes are also intended to run
+%%        in Matlab to test compatibility.  Don't break that!
+
+%!shared
+%! clear -classes
+
+%!test
+%! p = parent (7);
+%! assert (numel (p), 7)
+
+%!test
+%! d = derived (13);
+%! assert (numel (d), 13)
+
+%!test
+%! p = parent (11);
+%! f = @numel;
+%! assert (f (p), 11)
+
+%!test
+%! d = parent (21);
+%! f = @numel;
+%! assert (f (d), 21)
+
+%!test
+%! o(1) = other (13);
+%! o(2) = other (42);
+%! assert (getsize_loop (o), [13, 42])
+
+%!test
+%! o(1) = other (13);
+%! o(2) = other (42);
+%! assert (getsize_cellfun (o), [13, 42])
+
+%!test
+%! o(1) = other (13);
+%! o(2) = other (42);
+%! assert (getsize_arrayfun (o), [13, 42])
--- a/test/fcn-handle-derived-resolution/module.mk	Mon Feb 11 15:24:56 2013 -0500
+++ b/test/fcn-handle-derived-resolution/module.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -6,6 +6,6 @@
   fcn-handle-derived-resolution/@other/other.m \
   fcn-handle-derived-resolution/@parent/numel.m \
   fcn-handle-derived-resolution/@parent/parent.m \
-  fcn-handle-derived-resolution/test_fcn_handle_derived_resolution.m
+  fcn-handle-derived-resolution/fcn-handle-derived-resolution.tst
 
 FCN_FILES += $(fcn_handle_derived_resolution_FCN_FILES)
--- a/test/fcn-handle-derived-resolution/test_fcn_handle_derived_resolution.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-## Copyright (C) 2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%%  Test script for legacy OOP.
-%%  Requires the path to contain the directory ctor-vs-method.
-%%
-%%  Note: This script and all classes are also intended to run
-%%        in Matlab to test compatibility.  Don't break that!
-
-%!shared
-%! clear -classes
-
-%!test
-%! p = parent (7);
-%! assert (numel (p), 7)
-
-%!test
-%! d = derived (13);
-%! assert (numel (d), 13)
-
-%!test
-%! p = parent (11);
-%! f = @numel;
-%! assert (f (p), 11)
-
-%!test
-%! d = parent (21);
-%! f = @numel;
-%! assert (f (d), 21)
-
-%!test
-%! o(1) = other (13);
-%! o(2) = other (42);
-%! assert (getsize_loop (o), [13, 42])
-
-%!test
-%! o(1) = other (13);
-%! o(2) = other (42);
-%! assert (getsize_cellfun (o), [13, 42])
-
-%!test
-%! o(1) = other (13);
-%! o(2) = other (42);
-%! assert (getsize_arrayfun (o), [13, 42])
--- a/test/fntests.m	Mon Feb 11 15:24:56 2013 -0500
+++ b/test/fntests.m	Mon Feb 11 15:45:26 2013 -0500
@@ -41,8 +41,8 @@
   testdirs = {currdir, srcdir};
 endif
 
-src_tree = canonicalize_file_name (fullfile (topsrcdir, "libinterp"));
-liboctave_tree = canonicalize_file_name (fullfile (topsrcdir, "liboctave"));
+src_tree = canonicalize_file_name (fullfile (topbuilddir, "libinterp"));
+liboctave_tree = canonicalize_file_name (fullfile (topbuilddir, "liboctave"));
 script_tree = canonicalize_file_name (fullfile (topsrcdir, "scripts"));
 local_script_tree = canonicalize_file_name (fullfile (currdir, "../scripts"));
 
@@ -52,265 +52,4 @@
   fundirs{end+1} = local_script_tree;
 endif
 
-function print_test_file_name (nm)
-  filler = repmat (".", 1, 55-length (nm));
-  printf ("  %s %s", nm, filler);
-endfunction
-
-function print_pass_fail (n, p)
-  if (n > 0)
-    printf (" PASS %4d/%-4d", p, n);
-    nfail = n - p;
-    if (nfail > 0)
-      printf (" FAIL %d", nfail);
-    endif
-  endif
-  puts ("\n");
-endfunction
-
-function retval = has_functions (f)
-  n = length (f);
-  if (n > 3 && strcmp (f((end-2):end), ".cc"))
-    fid = fopen (f);
-    if (fid >= 0)
-      str = fread (fid, "*char")';
-      fclose (fid);
-      retval = ! isempty (regexp (str,'^(DEFUN|DEFUN_DLD)\b', 'lineanchors'));
-    else
-      error ("fopen failed: %s", f);
-    endif
-  elseif (n > 2 && strcmp (f((end-1):end), ".m"))
-    retval = true;
-  else
-    retval = false;
-  endif
-endfunction
-
-function retval = has_tests (f)
-  fid = fopen (f);
-  if (fid >= 0)
-    str = fread (fid, "*char")';
-    fclose (fid);
-    retval = ! isempty (regexp (str, '^%!(assert|error|fail|test|warning)', "lineanchors"));
-  else
-    error ("fopen failed: %s", f);
-  endif
-endfunction
-
-function retval = has_demos (f)
-  fid = fopen (f);
-  if (fid >= 0)
-    str = fread (fid, "*char")';
-    fclose (fid);
-    retval = ! isempty (regexp (str, '^%!demo', "lineanchors"));
-  else
-    error ("fopen failed: %s", f);
-  endif
-endfunction
-
-function [dp, dn, dxf, dsk] = run_test_dir (fid, d);
-  global files_with_tests;
-  global files_with_no_tests;
-  lst = dir (d);
-  dp = dn = dxf = dsk = 0;
-  for i = 1:length (lst)
-    nm = lst(i).name;
-    if (lst(i).isdir
-        && ! strcmp (nm, ".") && ! strcmp (nm, "..")
-        && ! strcmp (nm, "private") && nm(1) != "@"
-        && ! strcmp (nm, "CVS"))
-      [p, n, xf, sk] = run_test_dir (fid, [d, filesep, nm]);
-      dp += p;
-      dn += n;
-      dxf += xf;
-      dsk += sk;
-    endif
-  endfor
-  saved_dir = pwd ();
-  unwind_protect
-    chdir (d);
-    for i = 1:length (lst)
-      nm = lst(i).name;
-      if (length (nm) > 5 && strcmp (nm(1:5), "test_")
-          && strcmp (nm((end-1):end), ".m"))
-        p = n = xf = sk = 0;
-        ffnm = fullfile (d, nm);
-        if (has_tests (ffnm))
-          print_test_file_name (nm);
-          [p, n, xf, sk] = test (nm(1:(end-2)), "quiet", fid);
-          print_pass_fail (n, p);
-          files_with_tests(end+1) = ffnm;
-        ##elseif (has_demos (ffnm))
-        ##  files_with_tests(end+1) = ffnm;
-        else
-          files_with_no_tests(end+1) = ffnm;
-        endif
-        dp += p;
-        dn += n;
-        dxf += xf;
-        dsk += sk;
-      endif
-    endfor
-  unwind_protect_cleanup
-    chdir (saved_dir);
-  end_unwind_protect
-endfunction
-
-function [dp, dn, dxf, dsk] = run_test_script (fid, d);
-  global files_with_tests;
-  global files_with_no_tests;
-  global topsrcdir;
-  global topbuilddir;
-  lst = dir (d);
-  dp = dn = dxf = dsk = 0;
-  for i = 1:length (lst)
-    nm = lst(i).name;
-    if (lst(i).isdir && ! strcmp (nm, ".") && ! strcmp (nm, "..")
-        && ! strcmp (nm, "CVS"))
-      [p, n, xf, sk] = run_test_script (fid, [d, filesep, nm]);
-      dp += p;
-      dn += n;
-      dxf += xf;
-      dsk += sk;
-    endif
-  endfor
-  for i = 1:length (lst)
-    nm = lst(i).name;
-    ## Ignore hidden files
-    if (nm(1) == '.')
-      continue
-    endif
-    f = fullfile (d, nm);
-    if ((length (nm) > 2 && strcmp (nm((end-1):end), ".m")) || 
-        (length (nm) > 3 && strcmp (nm((end-2):end), ".cc")))
-      p = n = xf = 0;
-      ## Only run if it contains %!test, %!assert %!error or %!warning
-      if (has_tests (f))
-        tmp = strrep (f, [topsrcdir, filesep], "");
-        tmp = strrep (tmp, [topbuilddir, filesep], ["..", filesep]);
-        print_test_file_name (tmp);
-        [p, n, xf, sk] = test (f, "quiet", fid);
-        print_pass_fail (n, p);
-        dp += p;
-        dn += n;
-        dxf += xf;
-        dsk += sk;
-        files_with_tests(end+1) = f;
-      ##elseif (has_demos (f))
-      ##  files_with_tests(end+1) = f;
-      elseif (has_functions (f))
-        ## To reduce the list length, only mark .cc files that contain
-        ## DEFUN definitions.
-        files_with_no_tests(end+1) = f;
-      endif
-    endif
-  endfor 
-  ##  printf("%s%s -> passes %d of %d tests\n", ident, d, dp, dn);
-endfunction
-
-function printf_assert (varargin)
-  global _assert_printf;
-  _assert_printf = cat (2, _assert_printf, sprintf (varargin{:}));
-endfunction
-
-function ret = prog_output_assert (str)
-  global _assert_printf;
-  if (isempty (_assert_printf))
-    ret = isempty (str);
-  elseif (_assert_printf(end) == "\n")
-    ret = strcmp (_assert_printf(1:(end-1)), str);
-  else
-    ret = strcmp (_assert_printf, str);
-  endif
-  _assert_printf = "";
-endfunction
-
-function n = num_elts_matching_pattern (lst, pat)
-  n = sum (cellfun (@(x) !isempty (x), regexp (lst, pat, 'once')));
-endfunction
-
-function report_files_with_no_tests (with, without, typ)
-  pat = cstrcat ('\', typ, "$");
-  n_with = num_elts_matching_pattern (with, pat);
-  n_without = num_elts_matching_pattern (without, pat);
-  n_tot = n_with + n_without;
-  printf ("\n%d (of %d) %s files have no tests.\n", n_without, n_tot, typ);
-endfunction
-
-pso = page_screen_output ();
-warn_state = warning ("query", "quiet");
-warning ("on", "quiet");
-try
-  page_screen_output (0);
-  warning ("off", "Octave:deprecated-function");
-  fid = fopen ("fntests.log", "wt");
-  if (fid < 0)
-    error ("could not open fntests.log for writing");
-  endif
-  test ("", "explain", fid);
-  dp = dn = dxf = dsk = 0;
-  puts ("\nIntegrated test scripts:\n\n");
-  for i = 1:length (fundirs)
-    [p, n, xf, sk] = run_test_script (fid, fundirs{i});
-    dp += p;
-    dn += n;
-    dxf += xf;
-    dsk += sk;
-  endfor
-  puts ("\nFixed test scripts:\n\n");
-  for i = 1:length (testdirs)
-    [p, n, xf, sk] = run_test_dir (fid, testdirs{i});
-    dp += p;
-    dn += n;
-    dxf += xf;
-    dsk += sk;
-  endfor
-  puts ("\nSummary:\n\n");
-  nfail = dn - dp;
-  printf ("  PASS    %6d\n", dp);
-  printf ("  FAIL    %6d\n", nfail);
-  if (dxf > 0)
-    printf ("  XFAIL   %6d\n", dxf);
-  endif
-  if (dsk > 0)
-    printf ("  SKIPPED %6d\n", dsk);
-  endif
-  puts ("\n");
-  puts ("See the file test/fntests.log for additional details.\n");
-  if (dxf > 0)
-    puts ("\n");
-    puts ("Expected failures (listed as XFAIL above) are known bugs.\n");
-    puts ("Please help improve Octave by contributing fixes for them.\n");
-  endif
-  if (dsk > 0)
-    puts ("\n");
-    puts ("Tests are most often skipped because the features they require\n");
-    puts ("have been disabled.  Features are most often disabled because\n");
-    puts ("they require dependencies that were not present when Octave\n");
-    puts ("was built.  The configure script should have printed a summary\n");
-    puts ("at the end of its run indicating which dependencies were not found.\n");
-  endif
-
-  ## Weed out deprecated and private functions
-  weed_idx = cellfun (@isempty, regexp (files_with_tests, '\bdeprecated\b|\bprivate\b', 'once'));
-  files_with_tests = files_with_tests(weed_idx);
-  weed_idx = cellfun (@isempty, regexp (files_with_no_tests, '\bdeprecated\b|\bprivate\b', 'once'));
-  files_with_no_tests = files_with_no_tests(weed_idx);
-
-  report_files_with_no_tests (files_with_tests, files_with_no_tests, ".m");
-  report_files_with_no_tests (files_with_tests, files_with_no_tests, ".cc");
-
-  puts ("\nPlease help improve Octave by contributing tests for\n");
-  puts ("these files (see the list in the file fntests.log).\n\n");
-
-  fprintf (fid, "\nFiles with no tests:\n\n%s",
-          list_in_columns (files_with_no_tests, 80));
-  fclose (fid);
-
-  page_screen_output (pso);
-  warning (warn_state.state, "quiet");
-catch
-  page_screen_output (pso);
-  warning (warn_state.state, "quiet");
-  disp (lasterr ());
-end_try_catch
+__run_test_suite__ (fundirs, testdirs);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/for.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,111 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/for/for-1.m
+%!test
+%! for i = 1
+%!   __printf_assert__ ("%d", i);
+%! end
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("1"));
+
+%% test/octave.test/for/for-2.m
+%!test
+%! for i = 1:4
+%!   __printf_assert__ ("%d", i);
+%! endfor
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("1234"));
+
+%% test/octave.test/for/for-3.m
+%!test
+%! for i = [1,2,3,4]
+%!   __printf_assert__ ("%d", i);
+%! endfor
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("1234"));
+
+%% test/octave.test/for/for-4.m
+%!test
+%! for i = [1,2;3,4]
+%!   __printf_assert__ ("%d", i(1,1));
+%!   __printf_assert__ ("%d", i(2,1));
+%! endfor
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("1324"));
+
+%% test/octave.test/for/for-5.m
+%!test
+%! for i = I
+%!   __printf_assert__ ("%d", imag (i));
+%! endfor
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("1"));
+
+%% test/octave.test/for/for-6.m
+%!test
+%! for i = [1,2,3,4]*I
+%!   __printf_assert__ ("%d", imag (i));
+%! endfor
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("1234"));
+
+%% test/octave.test/for/for-7.m
+%!test
+%! for i = [1,2;3,4]*I
+%!   __printf_assert__ ("%d", imag (i(1,1)));
+%!   __printf_assert__ ("%d", imag (i(2,1)));
+%! endfor
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("1324"));
+
+%% test/octave.test/for/for-8.m
+%!test
+%! for i = [1,2,3,4]
+%!   if (i > 2)
+%!     break;
+%!   endif
+%!   __printf_assert__ ("%d", i);
+%! endfor
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("12"));
+
+%% test/octave.test/for/for-9.m
+%!test
+%! for i = [1,2,3,4]
+%!   if (i < 3)
+%!     continue;
+%!   endif
+%!   __printf_assert__ ("%d", i);
+%! endfor
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("34"));
+
+%!test
+%! a = [1,3;2,4];
+%! j = 0;
+%! for i = cat (3, a, 4 + a)
+%!   assert (i, [1;2] + 2*j++)
+%! endfor
+
+%!test
+%! a = {1,3;2,4};
+%! j = 0;
+%! for i = cat (3, a, cellfun(@(x) 4 + x, a, "UniformOutput", 0))
+%!   assert (i, {1 + 2*j; 2 + 2*j++})
+%! endfor
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/func.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,192 @@
+## Copyright (C) 2008-2012 David Bateman
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## This piece of test code ensures that all operations which work on 
+## dimensions alone (squeeze, triu, etc.) work for all objects and 
+## preserve type. Even if the object is an empty matrix. This code is
+## not to check that the function itself returns teh correct result,
+## just that the results are consistent for all types.
+
+%!function __fntestfunc__ (fn, mn, varargin)
+%!  typ = {"double", "complex", "logical", "sparse", "complex sparse", ...
+%!         "logical sparse", "int8", "int16", "int32", "int64", "uint8", ...
+%!         "uint16", "uint32", "uint64", "char", "cell", "struct", ...
+%!         "single", "single complex"};
+%!
+%!  cmplx = [2, 5, 18];
+%!  nlogical = [3, 6];
+%!  ninteger = [7, 8, 9, 10, 11, 12, 13, 14];
+%!  nsparse = [4, 5, 6];
+%!  skip = {};
+%!
+%!  if (length (varargin) > 0 && iscell (varargin{1}))
+%!    skip = varargin{1};
+%!    varargin(1) = [];
+%!  endif
+%!
+%!  for i = 1 : length (typ)
+%!    if (any (strcmp (skip, typ {i})))
+%!      continue;
+%!    endif
+%!    m = mn;
+%!
+%!    if (any (nsparse == i))
+%!      if (ndims (m) > 2)
+%!        sz = size (m);
+%!        m = reshape (m, [sz(1), prod(sz(2:end))]);
+%!      endif
+%!      if (any (cmplx == i))
+%!        m = sparse ((1 + 1i) * m);
+%!      else
+%!        m = sparse (m);
+%!      endif
+%!    else
+%!      if (any (cmplx == i))
+%!        m = (1 + 1i) * m;
+%!      endif
+%!    endif
+%!    if (any (nlogical == i))
+%!      m = cast (m, "logical");
+%!    endif
+%!    if (any (ninteger == i))
+%!      m = cast (m, typ{i});
+%!    endif
+%!    if (strcmp (typ{i}, "cell"))
+%!      m = num2cell (m);
+%!    elseif (strcmp (typ{i}, "struct"))
+%!      m = struct ("fld", num2cell (m));
+%!    endif
+%!
+%!    y = feval (fn, m, varargin{:});
+%!    y2 = feval (fn, reshape (mn, size (m)), varargin{:});
+%!    if (!strcmp (class (y), class (m)) ||
+%!         issparse (y) != issparse (m) || !size_equal (y, y2))
+%!      error ("failed for type %s\n", typ{i});
+%!    endif
+%!    if (!(strcmp (typ{i}, "cell") || strcmp (typ{i}, "struct")) &&
+%!        any (vec (cast (real (y), "double")) !=
+%!             vec (feval (fn , cast (real (m), "double"), varargin{:}))))
+%!      error ("failed for type %s\n", typ{i});
+%!    endif
+%!  endfor
+%!endfunction
+
+%!shared m0, m1, m2, m3
+%! m0 = [1:5];
+%! m1 = reshape ([1 : 30], [5, 6]);
+%! m2 = reshape ([1 : 30], [5, 1, 6]);
+%! m3 = [];
+
+%!test
+%! __fntestfunc__("triu", m1, {"struct"});
+%!test
+%! __fntestfunc__ ("triu", m1, {"struct"}, -1);
+%!test
+%! __fntestfunc__ ("triu", m1, {"struct"}, 1);
+%!test
+%! __fntestfunc__("triu", m3, {"struct"});
+%!test
+%! __fntestfunc__ ("tril", m1, {"struct"});
+%!test
+%! __fntestfunc__ ("tril", m1, {"struct"}, -1);
+%!test
+%! __fntestfunc__ ("tril", m1, {"struct"}, 1);
+%!test
+%! __fntestfunc__("tril", m3, {"struct"});
+%!test
+%! __fntestfunc__ ("squeeze", m2);
+%!test
+%! __fntestfunc__ ("squeeze", m3);
+%!test
+%! __fntestfunc__ ("permute", m1, [2, 1]);
+%!test
+%! __fntestfunc__ ("permute", m2, {"sparse", "logical sparse", "complex sparse"}, [3, 1, 2]);
+%!test
+%! __fntestfunc__ ("permute", m3, [2, 1]);
+%!test
+%! __fntestfunc__ ("ipermute", m1, [2, 1]);
+%!test
+%! __fntestfunc__ ("ipermute", m2, {"sparse", "logical sparse", "complex sparse"}, [3, 1, 2]);
+%!test
+%! __fntestfunc__ ("ipermute", m3, [2, 1]);
+%!test
+%! __fntestfunc__ ("shiftdim", m2, 1);
+%!test
+%! __fntestfunc__ ("shiftdim", m2, {"sparse", "logical sparse", "complex sparse"}, -1);
+%!test
+%! __fntestfunc__ ("shiftdim", m3, 1);
+%!test
+%! __fntestfunc__ ("circshift", m2, 1);
+%!test
+%! __fntestfunc__ ("circshift", m2, [1, -1]);
+%!test
+%! __fntestfunc__ ("circshift", m3, 1);
+%!test
+%! __fntestfunc__ ("reshape", m2, [6, 5]);
+%!test
+%! __fntestfunc__ ("reshape", m3, [1, 0]);
+%!test
+%! __fntestfunc__ ("diag", m0, {"struct"});
+%!test
+%! __fntestfunc__ ("diag", m0, {"struct"}, 1);
+%!test
+%! __fntestfunc__ ("diag", m0, {"struct"}, -1);
+%!test
+%! __fntestfunc__ ("diag", m1, {"struct"});
+%!test
+%! __fntestfunc__ ("diag", m1, {"struct"}, 1);
+%!test
+%! __fntestfunc__ ("diag", m1, {"struct"}, -1);
+%!test
+%! __fntestfunc__ ("diag", m3, {"struct"});
+%!test
+%! __fntestfunc__ ("fliplr", m1);
+%!test
+%! __fntestfunc__ ("fliplr", m3);
+%!test
+%! __fntestfunc__ ("flipud", m1);
+%!test
+%! __fntestfunc__ ("flipud", m3);
+%!test
+%! __fntestfunc__ ("flipdim", m1, 2);
+%!test
+%! __fntestfunc__ ("flipdim", m3, 2);
+%!test
+%! __fntestfunc__ ("transpose", m1);
+%!test
+%! __fntestfunc__ ("transpose", m3);
+%!test
+%! __fntestfunc__ ("ctranspose", m1);
+%!test
+%! __fntestfunc__ ("ctranspose", m3);
+%!test
+%! __fntestfunc__ ("rot90", m1);
+%!test
+%! __fntestfunc__ ("rot90", m1, 2);
+%!test
+%! __fntestfunc__ ("rot90", m1, -1);
+%!test
+%! __fntestfunc__ ("rot90", m3);
+%!test
+%! __fntestfunc__ ("rotdim", m2, 1, [1, 2]);
+%!test
+%! __fntestfunc__ ("rotdim", m2, 2, [1, 2]);
+%!test
+%! __fntestfunc__ ("rotdim", m2, -1, [1, 2]);
+%!test
+%! __fntestfunc__ ("rotdim", m3, 1, [1, 2]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/global.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,91 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/global/global-1.m
+%!test
+%! global G = 1;
+%! assert (G,1);
+
+%% test/octave.test/global/global-2.m
+%!function f ()
+%!  global G;
+%!  assert (G,1);
+%!endfunction
+%!test
+%! global G = 1;
+%! f;
+
+%% test/octave.test/global/global-3.m
+%!function f ()
+%!  fail ("G");
+%!endfunction
+%!test
+%! global G = 1;
+%! f();
+
+%% test/octave.test/global/global-4.m
+%!function f ()
+%!  global H = 1;
+%!endfunction
+%!test
+%!  f;
+%!  fail ("H");
+
+%% test/octave.test/global/global-5.m
+%!function f ()
+%!  global H = 1;
+%!endfunction
+%!test
+%!function g ()
+%!  fail ("H");
+%!test
+%! g();
+
+%% test/octave.test/global/global-6.m
+%!function f ()
+%!  global H = 1;
+%!endfunction
+%!function g ()
+%!  global H;
+%!  assert (H,1);
+%!endfunction
+%!test
+%! f();
+%! g();
+
+%% test/octave.test/global/global-7.m
+%!test
+%!function f ()
+%!  global H = 1;
+%!endfunction
+%!test
+%! fail ("H");
+
+%% test/octave.test/global/global-8.m
+%!function f ()
+%!  global H = 1;
+%!endfunction
+%!function g ()
+%!  global H;
+%!  assert (H,1);
+%!endfunction
+%!test
+%! f;
+%! clear H;
+%! g;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/if.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,87 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/if/if-1.m
+%!test
+%! i = 0;
+%! if (i == 0)
+%!   i++;
+%!   __printf_assert__ ("%d\n", i);
+%! endif
+%! assert (__prog_output_assert__ ("1"));
+
+%% test/octave.test/if/if-2.m
+%!test
+%! if (eye (2))
+%!   __printf_assert__ ("fail\n");
+%! else
+%!   __printf_assert__ ("pass\n");
+%! end
+%! assert (__prog_output_assert__ ("pass"));
+
+%% test/octave.test/if/if-3.m
+%!test
+%! x = 2;
+%! if (eye (2))
+%!   __printf_assert__ ("fail\n");
+%! elseif (x)
+%!   __printf_assert__ ("pass\n");
+%! endif
+%! assert (__prog_output_assert__ ("pass"));
+
+%% test/octave.test/if/if-4.m
+%!test
+%! x = 0;
+%! y = -2;
+%! if (eye (2))
+%!   __printf_assert__ ("fail\n");
+%! elseif (x)
+%!   __printf_assert__ ("fail\n");
+%! elseif (y)
+%!   __printf_assert__ ("pass\n");
+%! end
+%! assert (__prog_output_assert__ ("pass"));
+
+%% test/octave.test/if/if-5.m
+%!test
+%! x = 0;
+%! y = -2;
+%! if (eye (2))
+%!   __printf_assert__ ("fail\n");
+%! elseif (x)
+%!   __printf_assert__ ("fail\n");
+%! elseif (x)
+%!   __printf_assert__ ("fail\n");
+%! else
+%!   __printf_assert__ ("pass\n");
+%! endif
+%! assert (__prog_output_assert__ ("pass"));
+
+%% test/octave.test/if/if-6.m
+%!test
+%! x = 0;
+%! y = -2;
+%! if (y)
+%!   __printf_assert__ ("pass\n");
+%! elseif (x)
+%!   __printf_assert__ ("fail\n");
+%! elseif (x)
+%!   __printf_assert__ ("fail\n");
+%! end
+%! assert (__prog_output_assert__ ("pass"));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/index.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,212 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%!test
+%! a = [];
+%! assert (isempty (a));
+
+%!shared a
+%! a = 1;
+%!assert (a(1), 1)
+%!assert (a(:), 1)
+%!assert (a(:,:), 1)
+%!assert (a(1,:), 1)
+%!assert (a(:,1),1)
+%!assert (isempty (a(logical (0))))
+%!error a(-1)
+%!error a(2)
+%!error a(2,:)
+%!error a(:,2)
+%!error a(-1,:)
+%!error a(:,-1)
+%!error a([1,2,3])
+%!error a([1;2;3])
+%!error a([1,2;3,4])
+%!error a([0,1])
+%!error a([0;1])
+%!error a([-1,0])
+%!error a([-1;0])
+
+%!shared a, a_prime, mid_a
+%! a = [4,3,2,1];
+%! a_prime = [4;3;2;1];
+%! mid_a = [3,2];
+
+%!assert (a(1),4)
+%!assert (a(2),3)
+%!assert (all (a(:) == a_prime))
+%!assert (all (a(1,:) == a))
+%!assert (a(:,3),2)
+%!assert (all (a(:,:) == a))
+%!assert (all (a(logical ([0,1,1,0])) == mid_a))
+%!error a(0)
+%!error a(5)
+%!error a(0,1)
+%!assert (isempty (a(logical (0),:)))
+%!error a(:,0)
+%!assert (isempty (a([])))
+%!assert (isempty (a([],:)))
+%!assert (isempty (a(:,[])))
+
+%!shared a, a_fvec, a_col_1, a_col_2, a_row_1, a_row_2
+%! a = [1,2;3,4];
+%! a_fvec = [1;3;2;4];
+%! a_col_1 = [1;3];
+%! a_col_2 = [2;4];
+%! a_row_1 = [1,2];
+%! a_row_2 = [3,4];
+
+%!assert (all (all (a(:,:) == a)))
+%!assert (all (a(:) == a_fvec))
+%!error a(0)
+%!assert (a(2), 3)
+
+%% Additional tests
+
+%!shared a, b
+%! a = [1,2;3,4];
+%! b = a;
+%! b(:,:,2) = [5,6;7,8];
+
+%!assert (a(:), [1;3;2;4])
+%!assert (a(1:2), [1,3])
+%!assert (a(:,:), [1,2;3,4])
+%!assert (a(:,1), [1;3])
+%!assert (a(1,1), 1)
+%!assert (a(1:2,1), [1;3])
+%!assert (a(:,:,1), [1,2;3,4])
+
+%!test
+%! c(:,:,1) = [1,2;3,4];
+%! c(:,:,2) = [1,2;3,4];
+%! assert (a(:,:,[1,1]), c)
+
+%!test
+%! c(:,:,1,1) = [1,2;3,4];
+%! c(:,:,1,2) = [1,2;3,4];
+%! assert (a(:,:,1,[1,1]), c)
+
+%!test
+%! c(:,:,1,1) = [1,2;3,4];
+%! c(:,:,2,1) = [1,2;3,4];
+%! c(:,:,1,2) = [1,2;3,4];
+%! c(:,:,2,2) = [1,2;3,4];
+%! assert (a(:,:,[1,1],[1,1]), c)
+
+%!assert (a(1,[]), zeros (1,0))
+%!assert (a(1,[],[1,1]), zeros (1,0,2))
+%!assert (a(1,1,[]), zeros (1,1,0))
+
+%!test
+%! c (1:10,1) = 1:10;
+%! assert (c, [1:10]');
+
+%!assert (b(:), [1; 3; 2; 4; 5; 7; 6; 8])
+%!assert (b(:,:), [1, 2, 5, 6; 3, 4, 7, 8])
+%!assert (b(:,1), [1;3])
+%!assert (b(:,:,:), reshape ([1,3,2,4,5,7,6,8],[2,2,2]))
+%!assert (b(:,1,1), [1;3])
+%!assert (b(:,1,1,[1,1]),reshape ([1,3,1,3],[2,1,1,2]))
+%!assert (b(1,3), 5)
+%!assert (b(1,[3,4]), [5,6])
+%!assert (b(1,1:4), [1,2,5,6])
+%!assert (b(1,[],:), zeros (1,0,2))
+%!assert (b(1,[]), zeros(1,0))
+%!assert (b(:,3), [5;7])
+%!assert (b([1,2],3), [5;7])
+%!assert (b(true(2,1),3), [5;7])
+%!assert (b(false(2,1),3), zeros(0,1))
+%!assert (b([],3), zeros(0,1))
+
+%!shared x
+%! # Dummy shared block to clear any previous definitions
+%! x = 1;
+
+%!test
+%! a(1,:) = [1,3];
+%! assert (a, [1,3]);
+
+%!test
+%! a(1,:) = [1;3];
+%! assert (a, [1,3]);
+
+%!test
+%! a(:,1) = [1;3];
+%! assert (a, [1;3]);
+
+%!test
+%! a = [1,2;3,4];
+%! b (1,:,:) = a;
+%! assert (b, reshape (a, [1,2,2]));
+
+%!test
+%! a(1,1:4,2) = reshape (1:4, [1,1,4]);
+%! b(:,:,2) = 1:4;
+%! assert (a, b);
+
+%!test
+%! a(:,:,:) = 1:4; 
+%! assert (a, [1:4]);
+
+%!test
+%! a(:,:,1) = 1:4;;
+%! assert (a, [1:4]);
+
+%!test
+%! a(:,:,1) = [1:4]';
+%! assert (a, [1:4]');
+
+%!test
+%! a(:,:,1) = reshape (1:4,[1,1,4]);
+%! assert (a, [1:4]');
+
+%!test
+%! a(:,1,:) = 1:4;
+%! assert (a, reshape (1:4,[1,1,4]));
+
+%!test
+%! a(:,1,:) = [1:4]';
+%! assert (a, [1:4]');
+
+%!test
+%! a(:,1,:) = reshape (1:4,[1,1,4]);;
+%! assert (a, [1:4]');
+
+%!test
+%! a(1,:,:) = 1:4;
+%! assert (a, reshape (1:4,[1,1,4]));
+
+%!test
+%! a(1,:,:) = [1:4]';
+%! assert (a, [1:4]);
+
+%!test
+%! a(1,:,:) = reshape (1:4,[1,1,4]);
+%! assert (a, [1:4]);
+
+%!test
+%! a(1,:,:,:) = reshape (1:4,[1,1,4]);
+%! assert (a, reshape (1:4,[1,1,1,4]));
+
+%!error (a(1:2,1:2) = 1:4)
+
+%!shared x
+%! x = 1:5;
+%!error <attempted to use a complex scalar as an index> x(i)
+%!error <attempted to use a complex scalar as an index> x(j)
+%!error <attempted to use a complex scalar as an index> x(1+i)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/io.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,616 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## FIXME -- we should skip (or mark as an expected failure) the test for
+## saving sparse matrices to MAT files when using 64-bit indexing since
+## that is not implemented yet.
+
+%% test/octave.test/io/load-save.m
+%!function [ret, files] = testls (input)
+%!  ## flag a1 global so as to test the storage of global flags
+%!  global a1;
+%!
+%!  ## Input or output, so as to be able to exchange between versions
+%!  if (nargin < 1)
+%!    input = 0;
+%!  endif
+%!
+%!  ## Setup some variable to be saved or compared to loaded variables
+%!
+%!  ## scalar
+%!  a1 = 1;
+%!  ## matrix
+%!  persistent a2 = hilb(3);
+%!  ## complex scalar
+%!  persistent a3 = 1 + 1i;
+%!  ## complex matrix
+%!  persistent a4 = hilb(3) + 1i*hilb(3);
+%!  ## bool
+%!  persistent a5 = (1 == 1);
+%!  ## bool matrix
+%!  persistent a6 = ([ones(1,5), zeros(1,5)] == ones (1,10));
+%!  ## range
+%!  persistent a7 = 1:10;
+%!  ## structure
+%!  persistent a8 = struct ("a", a1, "b", a3);
+%!  ## cell array
+%!  persistent a9 = {a1, a3};
+%!  ## string
+%!  persistent a10 = ["test"; "strings"];
+%!  ## int8 array
+%!  persistent a11 = int8 (floor (256*rand (2,2)));
+%!  ## int16 array
+%!  persistent a12 = int16 (floor (65536*rand (2,2)));
+%!  ## int32 array
+%!  persistent a13 = int32 (floor (1e6*rand (2,2)));
+%!  ## int64 array
+%!  persistent a14 = int64 (floor (10*rand (2,2)));
+%!  ## uint8 array
+%!  persistent a15 = uint8 (floor (256*rand (2,2)));
+%!  ## uint16 array
+%!  persistent a16 = uint16 (floor (65536*rand (2,2)));
+%!  ## int32 array
+%!  persistent a17 = uint32 (floor (1e6*rand (2,2)));
+%!  ## uint64 array
+%!  persistent a18 = uint64 (floor (10*rand (2,2)));
+%!  ## sparse
+%!  persistent a19 = sprandn (100,100,0.01);
+%!  ## complex sparse
+%!  persistent a20 = sprandn (100,100,0.01) + 1i * sprandn (100,100,0.01);
+%!
+%!  ret = 0;
+%!
+%!  files = {"text.mat", "binary.mat", "mat5.mat", "mat7.mat"};
+%!  opts = {"-z -text", "-z -binary", "-z -mat", "-v7"};
+%!  tols = {2*eps, 0, 0, 0};
+%!
+%!  vars = "a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20";
+%!  if (! input)
+%!    for i = 1:length (files)
+%!      eval (sprintf ("save %s %s %s", opts{i}, files{i}, vars));
+%!    endfor
+%!  else
+%!    b1 = a1; b2 = a2; b3 = a3; b4 = a4; b5 = a5;
+%!    b6 = a6; b7 = a7; b8 = a8; b9 = a9;
+%!    b10 = a10; b11 = a11; b12 = a12; b13 = a13; b14 = a14; b15 = a15;
+%!    b16 = a16; b17 = a17; b18 = a18; b19 = a19; b20 = a20;
+%!
+%!    for i = length (files)
+%!
+%!      clear a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a19 a20;
+%!
+%!      file = files{i};
+%!      tol = tols{i};
+%!
+%!      load (file);
+%!
+%!      assert (a1, b1, tol);
+%!      assert (a2, b2, tol);
+%!      assert (a3, b3, tol);
+%!      assert (a4, b4, tol);
+%!
+%!      if (! isequal (a5, b5))
+%!        error ("failed: %s boolean", file);
+%!      endif
+%!
+%!      if (! strcmp (file, "mat5") && ! strcmp (file, "mat7"))
+%!        if (! isequal (a6, b6))
+%!          error ("failed: %s boolean matrix", file);
+%!        endif
+%!      endif
+%!
+%!      assert ([a7], [b7], tol);
+%!
+%!      if (! isequal (a8, b8))
+%!        error ("failed: %s struct", file);
+%!      endif
+%!      
+%!      if (! isequal (a9, b9))
+%!        error ("failed: %s cell", file);
+%!      endif
+%!      
+%!      if (! isequal (a10, b10))
+%!        error ("failed: %s string", file);
+%!      endif
+%!
+%!      if (! isequal (a11, b11))
+%!        error ("failed: %s int8", file);
+%!      endif
+%!
+%!      if (! isequal (a12, b12))
+%!        error ("failed: %s int16", file);
+%!      endif
+%!
+%!      if (! isequal (a13, b13))
+%!        error ("failed: %s int32", file);
+%!      endif
+%!
+%!      if (! isequal (a14, b14))
+%!        error ("failed: %s int64", file);
+%!      endif
+%!
+%!      if (! isequal (a15, b15))
+%!        error ("failed: %s uint8", file);
+%!      endif
+%!
+%!      if (! isequal (a16, b16))
+%!        error ("failed: %s uint16", file);
+%!      endif
+%!
+%!      if (! isequal (a17, b17))
+%!        error ("failed: %s uint32", file);
+%!      endif
+%!
+%!      if (! isequal (a18, b18))
+%!        error ("failed: %s uint64", file);
+%!      endif
+%!
+%!      assert (a19, b19, tol);
+%!      assert (a20, b20, tol);
+%!
+%!      ## Test for global flags
+%!      if (! isglobal ("a1") || isglobal ("a2") || isglobal ("a3")
+%!          || isglobal ("a4") || isglobal ("a5") || isglobal ("a6")
+%!          || isglobal ("a7") || isglobal ("a8") || isglobal ("a9")
+%!          || isglobal ("a10") || isglobal ("a11") || isglobal ("a12")
+%!          || isglobal ("a13") || isglobal ("a14") || isglobal ("a15")
+%!          || isglobal ("a16") || isglobal ("a17") || isglobal ("a18")
+%!          || isglobal ("a19") || isglobal ("a20"))
+%!        error ("failed: %s global test", file); 
+%!      endif
+%!    endfor
+%!  endif
+%!
+%!  ret = 1;
+%!endfunction
+
+%!test
+%! 
+%! [save_status, save_files] = testls (0);
+%! [load_status, load_files] = testls (1);
+%! 
+%! for f = [save_files, load_files]
+%!   unlink (f{1});
+%! endfor
+%! 
+%! assert (save_status && load_status);
+
+%!test
+%! 
+%! STR.scalar_fld = 1;
+%! STR.matrix_fld = [1.1,2;3,4];
+%! STR.string_fld = "Octave";
+%! STR.struct_fld.x = 0;
+%! STR.struct_fld.y = 1;
+%! 
+%! save struct.dat -struct STR;
+%! STR = load ("struct.dat");
+%!
+%! assert (STR.scalar_fld == 1 && ...
+%!         STR.matrix_fld == [1.1,2;3,4] && ...
+%!         STR.string_fld == "Octave" && ...
+%!         STR.struct_fld.x == 0 && ...
+%!         STR.struct_fld.y == 1 );
+%!
+%!
+%! save -binary struct.dat -struct STR matrix_fld str*_fld;
+%! STR = load ("struct.dat");
+%!
+%! assert (!isfield(STR,"scalar_fld") && ...
+%!         STR.matrix_fld == [1.1,2;3,4] && ...
+%!         STR.string_fld == "Octave" && ...
+%!         STR.struct_fld.x == 0 && ...
+%!         STR.struct_fld.y == 1);
+%!
+%! delete struct.dat;
+
+%!test
+%! matrix1 = rand (100, 2);
+%! save -ascii matrix.ascii matrix1
+%! matrix2 = load ("matrix.ascii");
+%! assert (matrix1, matrix2, 1e-9)
+%!
+%! delete matrix.ascii;
+
+%!error <unable to find file> load ("")
+
+%% FIXME: This test is disabled as it writes to stdout and there is no easy
+%% way to recover output.  Need to spawn new octave process and pipe stdout
+%% somewhere to treat this case.
+%% test/octave.test/io/puts-1.m
+%!#test
+%! puts ("foo\n");
+
+%% test/octave.test/io/puts-2.m
+%!assert (puts (1),-1)
+
+%% test/octave.test/io/puts-3.m
+%!error <Invalid call to puts> puts ()
+
+%% test/octave.test/io/puts-4.m
+%!error <Invalid call to puts> puts (1, 2)
+
+%!assert (sscanf ('123456', '%10c'), '123456')
+%!assert (sscanf ('123456', '%10s'), '123456')
+
+%!assert (sscanf (['ab'; 'cd'], '%s'), 'acbd')
+
+%!assert (sscanf ('02:08:30', '%i:%i:%i'), [2; 0]);
+%!assert (sscanf ('02:08:30', '%d:%d:%d'), [2; 8; 30]);
+
+%!assert (sscanf ('0177 08', '%i'), [127; 0; 8]);
+%!assert (sscanf ('0177 08', '%d'), [177; 8]);
+
+%!test
+%! [val, count, msg, pos] = sscanf ("3I2", "%f");
+%! assert (val, 3);
+%! assert (count, 1);
+%! assert (msg, "");
+%! assert (pos, 2);
+
+%!test
+%! [val, count, msg, pos] = sscanf ("3In2", "%f");
+%! assert (val, 3);
+%! assert (count, 1);
+%! assert (msg, "");
+%! assert (pos, 2);
+
+%!test
+%! [val, count, msg, pos] = sscanf ("3Inf2", "%f");
+%! assert (val, [3; Inf; 2]);
+%! assert (count, 3);
+%! assert (msg, "");
+%! assert (pos, 6);
+
+%% test/octave.test/io/sscanf-1.m
+%!test
+%! [a, b, c] = sscanf ("1.2 3 foo", "%f%d%s", "C");
+%! [v1, c1, m1] = sscanf ("1 2 3 4 5 6", "%d");
+%! [v2, c2, m2] = sscanf ("1 2 bar 3 4 5 6", "%d");
+%! 
+%! assert ((a == 1.2 && b == 3 && c == "foo"
+%! && v1 == [1; 2; 3; 4; 5; 6] && c1 == 6 && ischar (m1)
+%! && v2 == [1; 2] && c2 == 2 && ischar (m2)));
+
+%% test/octave.test/io/sscanf-2.m
+%!error <Invalid call to sscanf> sscanf ()
+
+%% test/octave.test/io/sscanf-3.m
+%!error sscanf (1, 2)
+
+%% test/octave.test/io/sscanf-4.m
+%!error <Invalid call to sscanf> sscanf ("foo", "bar", "C", 1)
+
+%% test/octave.test/io/sscanf-5.m
+%!test
+%! [x, n] = sscanf ("   0.024000 0.200 0.200 2.000         1987           5           0  0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 2 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 4 5 1 2    2 5 5 8 2 8 12 6 15 18 28 26 47 88 118 162 192 130 88 56 27 23 14 9 6 3 4 1 0    2 3 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0   0.026000 0.250 0.250 2.100         3115           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0    0 0 0 0 1 0 1 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 1 0 1    1 1 0 1 0 1 3 2 0 5 15 25 44 66 145 179 193 172 104 57 17 11 12 2 1 0 1 1 0 1    0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.028000 0.300 0.300 2.200         4929           3           0  1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0    1 0 1 0 1 2 2 3 2 3 14 21 49 80 148 184 218 159 124 63 37 13 12 3 1 1 0 0 0 0    0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0    0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.030000 0.350 0.350 2.300         7051           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0    0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1    0 0 1 0 0 0 2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1    0 0 0 2 0 0 0 1 5 6 14 28 51 88 154 177 208 169 124 65 39 15 5 3 3 2 1 0 1 0 1   0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0    0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.032000 0.400 0.400 2.400         9113           4           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0    1 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 2 0    1 0 0 1 1 0 2 3 5 3 17 30 60 117 156 189 209 129 102 64 56 16 11 4 2 2 0 0 0 0   1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0   0.034000 0.450 0.450 2.500        11811           6           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0    0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0    0 0 2 1 0 0 1 0 5 5 15 21 57 99 149 190 195 159 130 69 41 16 10 2 5 3 0 1 0 0    0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.036000 0.500 0.500 2.600        14985           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 0 0 0 0    0 0 0 0 1 0 0 2 2 6 10 34 60 95 126 177 194 155 99 71 44 17 6 7 2 0 0 0 3 0 0    1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.038000 0.550 0.550 2.700        18391           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0    0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 2 0 0 1 1 0 1    2 1 0 0 0 1 0 1 3 6 19 27 52 95 161 154 169 134 94 64 37 19 9 6 0 2 1 0 0 0 0    1 2 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 2 2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0    0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.040000 0.600 0.600 2.800        22933           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1    0 0 0 0 0 2 0 3 4 7 18 27 47 82 134 163 133 138 101 58 34 26 10 5 2 1 2 1 1 0    2 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0   0.042000 0.650 0.650 2.900        27719           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 1 0 0 0 1 1 2 8 16 37 51 87 128 153 146 123 105 62 35 24 8 3 5 0 1 2 1 0 0   0 1 1 1 0 0 0 1 0 1 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0    0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.044000 0.700 0.700 3.000        32922           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 2 0    0 0 0 0 0 0 0 2 1 0 0 0 0 1 1 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 0 1 1    1 1 0 0 0 1 4 3 5 5 15 35 54 88 132 168 149 105 92 62 30 16 17 4 5 1 0 0 1 0 1   1 0 1 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.046000 0.750 0.750 3.100        38973           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0    0 0 0 1 0 0 0 4 3 5 20 37 56 94 110 135 149 124 84 58 36 17 14 7 1 0 2 0 1 0 0   1 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 0 1    1 0 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0    1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.048000 0.800 0.800 3.200        45376           5           0  1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0    0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 0 0 2 1 1 2 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0    0 0 0 1 0 0 0 0 1 3 18 34 55 82 104 135 116 99 79 60 51 29 10 4 3 1 1 1 0 0 1    0 0 0 1 0 0 3 1 2 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1    0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.050000 0.850 0.850 3.300        52060           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1    0 0 0 0 0 2 2 1 3 12 24 40 39 107 121 127 138 100 86 68 44 23 15 7 3 1 1 0 1 1   0 0 2 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 2 0 0 0 1 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.052000 0.900 0.900 3.400        59454           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 1    0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0    0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 2 0 2 1 0 0 0 1 0    0 1 0 0 0 0 0 3 3 6 21 32 68 90 132 111 122 107 73 57 47 24 11 7 4 2 2 1 0 0 0   0 0 0 0 0 1 0 0 1 0 0 2 0 1 1 0 0 1 0 0 0 0 0 3 0 1 0 0 0 0 1 1 0 0 0 1 0 0 0    0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0   0.054000 0.950 0.950 3.500        67013           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 1 0 0 1 1 0 0 0    1 0 1 0 1 2 4 3 7 9 28 31 71 94 115 96 108 78 82 60 38 17 12 11 4 3 1 1 0 2 1    0 0 0 2 1 3 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 2 0 0 0 1 0 2 0 1 0 2 0 1 0 0 1 0 0    0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0   0.056000 1.000 1.000 3.600        75475           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 2 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 3 0 0 1    1 2 0 1 4 0 1 8 6 7 17 41 56 71 109 113 84 103 72 54 35 22 6 9 1 7 5 4 0 0 1 0   0 0 0 0 0 1 0 0 2 1 0 0 0 0 2 0 0 1 0 0 1 0 0 0 0 0 0 1 0 2 0 1 0 0 0 0 1 0 1    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 3 0 0 0 1 0 0 0 0 0 0 1 1 0 0 2 0 0 0 0    0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0   0.058000 1.050 1.050 3.700        83558           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0    0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 2 0 0    2 0 0 1 0 3 2 3 6 15 27 41 77 73 94 94 92 76 61 56 42 23 13 11 6 2 1 2 0 1 2 0   0 1 0 1 0 0 1 0 0 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 2 0 0 0 0 0 1 2 0    0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0   0.060000 1.100 1.100 3.800        93087           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1    0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 2 2 0 0 0 1 0 1 1 0 0 0 1 1 0 4    0 0 1 2 0 3 1 3 5 13 33 31 65 75 77 96 97 80 59 45 36 32 18 2 5 0 1 0 0 1 0 0    3 0 0 0 0 1 0 0 0 0 0 1 0 0 1 2 0 0 0 0 1 0 0 0 0 1 0 1 1 1 0 0 2 0 0 2 0 1 0    0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0    0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.062000 1.150 1.150 3.900       102829           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0    0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 1 0 1 0 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 2 0 2    1 2 0 0 2 4 3 5 11 9 23 43 53 68 65 87 83 77 59 49 34 18 15 9 4 2 3 2 0 0 0 4    0 1 1 0 0 2 0 0 1 0 0 0 0 1 1 1 0 1 0 0 0 0 2 0 0 0 0 1 0 0 1 1 1 1 0 0 0 1 0    0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0   0.064000 1.200 1.200 4.000       113442           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0    0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 1 1 0 1 1 1 1 1 0 0 0 1    2 0 0 0 2 0 4 5 11 13 29 39 61 68 61 75 76 74 73 44 37 29 19 6 3 3 2 0 1 2 1 0   0 0 0 1 1 1 0 1 1 0 0 0 1 0 1 1 0 1 2 0 2 1 1 1 0 0 0 0 1 0 0 1 1 1 1 1 0 0 0    0 0 0 0 1 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0    0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0   0.066000 1.250 1.250 4.100       126668           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1    0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 0 0 0 1 1 2 3 0 2 1 2 0 1 0 3 0 0 0 1 0 1 1 3    0 0 1 3 0 2 4 3 12 12 30 48 56 66 77 78 71 82 52 31 32 19 20 16 8 2 1 3 0 0 2    1 0 1 0 1 0 0 0 1 3 1 0 1 0 1 1 1 0 0 0 0 0 2 0 2 0 0 0 0 0 1 0 0 0 0 1 1 0 0    0 0 0 1 0 0 0 0 0 2 0 3 1 0 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0    0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.068000 1.300 1.300 4.200       138042           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 2 0 0 1 0 1 0 0 0 0 0    0 0 0 1 0 0 2 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0    0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 3 0 0 1 0 0 1 2 0 0 0 3 0 1 0 0 3 0    1 0 1 1 3 1 4 7 11 14 27 36 44 68 72 70 71 45 44 46 29 13 16 11 5 2 0 3 0 0 0    0 1 1 2 0 0 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 2 0 0 1 1 0 1 1 1 0    0 1 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0    0 0 0 1 0 0 1 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.070000 1.350 1.350 4.300       152335           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0    0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0    1 0 0 0 2 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 2 0 0 0 0 1 1 1 0 1 1 0 1 1 1 1 0 2 0    0 0 0 0 2 0 1 7 14 19 34 35 54 72 68 72 68 58 48 36 37 27 25 17 1 4 1 0 0 0 1    2 2 0 0 1 1 1 2 1 0 3 1 0 1 0 2 1 0 0 0 1 1 1 2 0 0 0 0 1 1 0 1 1 0 2 1 1 1 1    0 0 0 1 1 0 0 2 0 0 1 0 0 0 1 1 0 2 1 1 0 0 0 0 2 0 0 0 0 0 0 0 1 1 0 0 0 0 1    0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0   0.072000 1.400 1.400 4.400       166280           4           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0    0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0    2 0 0 0 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 0 0 3 4 2 2 0 0 0 0 0 1 1 3 1 0 3 2 2    1 2 2 0 2 2 1 8 14 26 24 29 47 47 68 65 63 55 42 41 26 29 17 8 4 4 1 0 1 2 0 0   0 1 1 2 0 1 2 1 0 0 1 1 1 0 0 1 0 0 0 1 0 0 1 2 1 2 1 0 0 0 0 0 1 1 2 0 2 2 0    0 0 0 1 1 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0    0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0   0.074000 1.450 1.450 4.500       179484           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0    1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 1 0 1 0 0 1 0 1 2 0 0 0 0 0 0 0 0 0 1 0    0 0 1 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0 1 1 1 2 0 0 1 1 2 1 0    1 1 2 2 0 1 5 6 10 20 43 50 57 62 53 62 66 45 42 33 27 26 23 14 3 0 2 0 1 0 0    1 1 0 0 2 1 1 0 0 3 0 1 1 1 0 1 1 0 1 0 1 2 1 0 0 1 2 0 2 0 0 0 0 1 1 3 1 0 0    2 1 1 1 0 0 0 0 0 0 1 2 0 1 0 0 0 0 0 1 1 0 2 0 0 0 0 0 1 0 2 1 0 0 0 0 0 0 1    0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0   0.076000 1.500 1.500 4.600       197657           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0    0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 2 0 0 0 1 0 0 0 0    0 0 1 0 1 0 0 0 0 0 0 0 0 1 2 0 0 0 2 1 1 0 1 1 0 1 1 3 2 1 1 2 1 0 1 0 0 0 0    0 1 1 1 0 5 3 7 12 24 38 32 41 48 54 66 71 49 46 31 38 25 15 8 6 6 5 0 1 3 0 1   1 1 1 1 0 1 2 0 1 0 0 0 1 0 2 1 2 0 0 0 0 1 3 1 0 0 0 0 1 1 0 1 0 1 1 1 1 1 0    4 1 1 1 0 3 0 0 0 2 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0   0.078000 1.550 1.550 4.700       212054           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0    0 1 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1    0 0 2 0 0 0 1 0 0 1 0 1 1 0 1 3 1 0 0 1 2 0 0 0 1 0 0 0 0 0 2 1 2 1 1 1 0 0 1    5 1 1 2 3 5 7 9 11 22 31 37 48 50 52 54 57 37 38 38 33 24 11 19 11 3 1 2 0 3 3   2 1 0 1 3 0 1 1 1 1 1 2 0 0 0 1 1 2 0 1 1 3 0 1 1 0 0 1 0 2 0 1 0 0 1 3 0 2 0    1 0 1 2 0 1 1 1 1 1 0 3 0 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0    0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0   0.080000 1.600 1.600 4.800       231971           3           0  0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 1 1 0 1 0 0 0 0 1 0 1 1    0 0 0 0 2 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 2 1 0 1 1 1 0 1 0 0 1 0 1 3 0 0 0 1 0    0 0 1 1 1 0 0 4 1 1 0 2 0 1 1 1 2 0 0 0 1 0 1 2 1 2 3 2 0 1 0 4 3 1 1 1 1 3 1    0 0 0 2 1 0 2 7 17 13 29 47 58 59 52 38 51 51 38 34 35 21 14 13 4 1 0 1 1 1 0    2 2 4 1 0 1 1 4 0 0 0 2 0 2 2 2 0 0 1 3 2 1 1 2 2 2 2 1 0 3 0 2 1 2 1 2 2 0 0    1 1 0 2 0 2 2 0 1 0 2 2 3 1 2 3 1 1 0 1 0 2 0 1 2 1 2 0 2 1 0 0 3 0 0 1 1 1 1    0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0   0.082000 1.650 1.650 4.900       252503           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 2 0 0    0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0    0 0 0 0 2 0 0 1 0 1 2 2 2 1 0 2 0 1 0 1 1 2 2 0 3 0 0 4 1 0 0 3 0 0 1 2 0 1 1    1 3 0 1 0 2 9 11 25 27 34 53 41 49 43 47 36 31 38 22 30 22 18 9 5 9 2 2 1 2 2    3 1 4 1 1 0 0 1 2 0 2 1 0 0 1 3 2 2 1 0 0 0 1 2 1 0 0 0 2 1 1 0 2 0 0 1 0 0 2    1 3 1 1 1 0 2 1 1 0 2 1 0 1 3 0 0 0 0 2 0 0 1 0 0 0 0 0 1 2 1 1 1 0 2 1 0 0 0    2 0 1 0 0 0 0 1 0 0 0 0 1 0 0 2 0 1 0 1 0 0 0 0 0 0 0 0 0 0   0.084000 1.700 1.700 5.000       267889           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 1    0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0    0 1 0 1 1 0 3 0 1 1 1 0 1 2 1 0 2 0 2 4 0 1 0 0 0 1 1 0 1 3 2 0 2 0 4 0 0 2 0    1 4 2 4 3 3 6 10 14 28 37 54 36 40 52 40 50 46 40 32 26 29 12 18 5 2 0 2 4 1 2   1 0 2 1 2 2 1 0 1 0 2 1 2 4 1 1 5 1 0 2 0 1 2 3 2 2 1 2 1 0 2 1 2 1 1 4 1 2 1    4 0 2 2 0 0 3 1 0 2 0 0 1 1 1 0 0 2 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0   0.086000 1.750 1.750 5.100       290294           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0    0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 3 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 2    1 0 1 0 1 0 0 2 2 0 1 2 2 0 2 0 2 0 1 0 0 1 1 1 3 1 1 1 1 3 4 1 1 2 2 2 1 0 3    0 0 0 2 4 5 6 16 18 20 31 40 54 55 46 41 52 35 27 21 28 27 20 15 8 6 7 1 0 0 3   0 0 2 2 0 3 1 3 1 1 2 0 0 1 2 1 3 2 0 1 2 1 3 1 1 1 1 1 2 0 2 1 0 1 1 1 3 1 1    2 0 1 0 1 0 2 1 1 0 0 1 2 0 3 1 1 0 0 0 1 3 1 1 1 0 0 1 2 1 0 0 1 1 1 0 0 1 0    0 0 0 0 0 2 0 1 0 0 0 2 1 0 2 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0   0.088000 1.800 1.800 5.200       312476           6           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0    0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 2 0 0 0 1 0 1 0 0 0 0 0 0 2    1 0 0 1 0 0 1 1 1 1 4 2 0 1 0 0 3 0 0 0 0 0 1 1 4 0 0 0 0 1 1 2 1 0 3 0 0 2 2    4 0 3 1 6 9 10 13 21 24 32 43 33 41 43 49 50 32 26 31 27 12 16 17 3 3 3 5 0 3    0 2 1 3 3 2 1 2 3 1 2 1 1 1 2 0 1 1 0 2 0 3 0 0 2 0 0 0 0 1 0 1 1 3 3 0 1 1 1    1 1 1 2 2 2 0 3 1 0 2 2 2 0 0 0 0 3 1 2 5 1 1 2 0 0 3 3 0 2 2 0 0 0 0 1 2 0 0    1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0   0.090000 1.850 1.850 5.300       337348           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 2 0 1 0 1 0 0 0 1 0 0 0    0 0 0 1 0 0 0 0 2 0 1 1 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0    2 0 0 0 1 3 2 0 0 2 2 3 3 2 2 2 0 0 1 1 3 1 3 0 0 0 0 0 0 1 2 1 2 1 2 2 2 0 1    1 0 4 2 2 7 6 15 22 21 39 37 50 31 51 30 33 34 34 26 21 14 13 10 9 4 3 3 4 2 2   0 1 2 3 3 0 1 3 2 5 3 2 2 4 0 2 3 0 4 2 1 2 2 2 4 2 1 3 1 3 2 1 3 1 2 4 1 1 1    1 2 4 1 3 3 3 1 0 4 1 0 1 1 1 1 2 3 0 3 0 0 4 1 1 1 0 2 2 2 1 2 2 0 1 1 0 0 0    2 0 1 0 1 0 0 1 0 0 0 1 3 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 0   0.092000 1.900 1.900 5.400       357303           3           0  0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 1 0 1 0 0 1 0    0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 1 3 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 2 2 0 0 2    2 1 1 1 1 1 1 0 1 0 0 1 1 1 3 1 1 1 1 1 0 1 4 0 1 1 1 3 0 1 1 2 2 2 0 2 3 2 2    2 2 1 2 1 3 8 22 14 32 36 46 39 42 39 29 36 38 26 24 26 18 16 19 10 9 3 6 5 0    3 2 1 1 1 2 0 2 1 1 0 1 1 3 1 0 2 4 2 2 1 4 1 2 2 1 1 0 1 2 0 2 2 2 4 2 1 1 0    2 1 3 1 2 3 4 2 3 2 3 0 1 2 1 0 0 0 4 1 1 1 2 1 3 1 0 5 1 0 0 0 0 0 0 1 0 2 0    1 2 1 0 1 0 0 0 0 0 1 1 0 1 0 1 4 0 0 0 1 0 1 0 0 0 0 0 0 0 0   0.094000 1.950 1.950 5.500       383138           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 0 1 0 0 0 1 0 0 0 0 0 1 0    0 0 1 0 0 2 1 0 1 1 1 0 0 0 0 0 0 1 1 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 2 1 1 1 1    2 1 0 2 0 1 0 3 2 1 3 0 1 3 1 1 0 5 0 1 0 1 2 0 0 1 1 2 0 0 6 1 0 3 2 2 3 4 5    0 4 2 1 5 4 11 15 22 27 28 57 38 38 40 38 39 38 27 26 30 18 14 10 10 4 4 4 3 3   2 2 2 2 1 1 1 1 2 2 3 4 1 2 3 1 2 1 2 2 2 1 3 2 1 5 0 1 1 1 3 2 2 2 1 3 1 1 0    3 2 2 0 0 2 2 2 0 0 0 2 0 1 3 1 2 3 2 1 1 0 1 1 1 0 3 2 2 1 0 0 1 3 1 1 0 1 0    0 0 0 0 1 0 0 0 0 1 0 0 3 1 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0   0.096000 2.000 2.000 5.600       409868           3           0  0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 1 0 1 0 2 0 0    1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 2 0 1 0 0 2 0 2 0 0 0 0 1 0 0 2 1    2 2 2 1 2 1 1 1 1 1 2 0 0 1 1 0 1 0 2 1 2 0 2 0 3 1 2 1 3 1 5 0 2 2 1 2 4 1 2    0 3 1 4 7 5 9 13 22 19 31 27 28 41 34 39 37 22 23 21 22 17 23 15 8 9 3 8 0 3 1   2 2 2 3 1 0 4 2 4 2 2 2 2 4 2 1 1 0 2 0 3 0 3 2 2 1 2 2 1 4 1 2 2 1 1 5 2 1 2    1 2 2 1 0 2 4 3 2 1 2 2 3 2 3 1 2 1 1 1 1 2 1 1 2 2 1 2 3 2 1 1 0 2 2 4 0 1 1    1 1 1 0 0 1 1 3 0 0 0 0 0 1 0 0 2 0 1 2 0 1 1 1 0 1 0 1 0 0   0.098000 2.050 2.050 5.700       439102           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 1 0 0 1 0 1 0 1 0 0 0 0 1 1 0 1 0 0 1 1 0    0 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1 2 0 0 1 1 1 1 2 0 1 1 0 0 0 0 1 1 1 0 4 0 0    0 2 1 1 0 3 4 0 1 2 2 1 0 3 0 3 2 0 0 2 0 1 0 0 1 0 1 3 1 3 5 0 2 2 3 5 2 2 2    0 3 2 3 6 5 16 21 19 23 28 29 35 42 42 44 39 33 23 30 18 25 24 15 13 5 4 2 2 0   3 3 0 0 1 3 0 1 1 3 2 4 3 4 2 1 1 1 3 1 0 0 2 2 4 2 2 1 4 2 4 2 2 2 1 2 2 1 2    0 4 2 2 3 1 2 1 1 2 2 1 2 4 2 1 4 1 2 2 2 2 0 2 0 3 0 1 0 2 1 0 4 2 1 3 2 1 0    2 1 1 1 1 0 1 1 2 1 1 1 2 0 1 0 2 1 1 0 0 1 0 0 1 0 0 0 0 0 0   0.100000 2.100 2.100 5.800       467340           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 1 0 0 1 2 0 0 0 0 0 1 0 2 0 0 2 0 0 1 1 0 0    0 1 0 0 1 1 0 0 0 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 1 2 0 2    2 4 1 0 1 1 2 3 4 1 4 1 5 1 2 1 0 2 2 2 1 5 4 1 5 4 0 1 2 4 2 2 0 2 1 2 5 4 1    1 1 2 5 7 9 16 23 31 15 22 36 36 44 42 29 31 28 28 18 35 12 10 13 8 4 3 2 2 5    1 2 3 3 1 3 3 5 2 0 3 4 1 2 2 3 0 0 5 2 3 6 2 1 2 5 3 4 3 1 1 1 1 2 2 4 0 2 3    1 2 1 2 4 5 4 3 5 2 1 2 0 5 0 2 2 4 1 0 4 1 0 2 1 2 0 0 1 3 2 4 3 0 2 3 3 3 4    2 2 0 0 0 0 1 1 0 3 2 0 1 2 0 4 2 1 1 1 2 0 0 0 0 0 0 0 0 0 0   0.102000 2.150 2.150 5.900       497495           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 2 1 0 0 0 0 1 0 1 0 0 0 0 1 2    0 0 0 0 0 2 0 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1 1 1 2 0 0 1 0 0 0 1 0 2 2 1 0 0 0    2 0 2 1 1 1 6 3 2 0 3 2 2 2 1 1 3 4 1 0 1 2 4 2 3 3 1 1 1 1 3 3 1 4 1 3 4 3 2    3 1 2 2 5 11 11 14 26 27 28 28 28 36 39 42 29 33 24 20 29 18 13 17 13 6 10 4 3   3 6 1 0 1 0 2 1 3 2 3 1 2 3 1 2 1 2 0 2 2 3 1 3 1 1 2 4 4 1 4 3 2 2 3 5 5 3 0    2 5 3 5 1 4 1 1 3 4 2 2 2 2 1 3 0 1 1 2 2 4 2 1 3 2 0 1 2 1 0 2 3 1 2 0 0 0 2    0 0 1 3 0 0 1 2 0 3 1 0 3 1 2 2 1 1 2 0 0 0 0 2 0 0 1 0 0 0 0 0   0.104000 2.200 2.200 6.000       529288           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 2 0 0    0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 1 3 0 2 0 2 0 0    3 2 2 0 4 0 3 2 2 1 3 1 7 3 1 1 0 4 3 2 1 0 0 3 2 3 5 2 1 4 1 5 1 0 3 2 3 0 1    2 4 7 3 7 8 12 15 20 24 34 39 34 35 27 36 34 23 22 26 15 24 12 12 14 5 3 0 7 1   1 3 5 1 2 2 2 4 3 1 2 5 2 2 3 1 1 4 2 1 3 0 4 5 4 6 4 5 3 3 3 3 1 1 5 0 6 1 2    4 2 3 2 1 3 2 0 0 0 1 3 3 0 1 4 0 3 2 3 0 3 3 0 2 3 4 3 1 1 1 2 5 3 1 2 1 1 2    4 1 0 2 4 1 3 0 0 3 0 1 3 0 1 0 0 1 1 1 0 1 1 1 0 0 0 0 0 0 0   0.106000 2.250 2.250 6.100       560628           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 0 1 1 0 1    1 0 0 1 1 1 0 1 1 0 0 0 1 1 1 1 0 0 1 1 2 0 0 0 0 2 0 3 1 1 0 0 2 2 2 0 5 2 1    1 1 1 3 1 2 3 0 1 0 0 0 0 1 0 2 2 1 2 1 0 4 3 2 1 2 1 0 4 2 2 0 2 1 1 2 3 1 2    1 2 4 4 11 12 17 19 19 29 30 24 30 35 51 32 36 34 31 19 22 17 11 19 11 7 6 6 3   4 0 3 3 2 0 2 2 2 3 1 5 3 2 3 5 1 0 2 2 5 4 2 3 2 0 1 6 1 2 2 2 2 1 1 2 2 1 4    3 2 2 1 2 5 2 0 2 0 2 5 4 5 2 1 3 6 1 3 4 4 0 0 6 0 2 6 1 2 2 2 0 1 3 1 3 4 2    1 4 2 1 2 3 3 0 3 1 0 2 0 2 1 0 2 1 2 0 0 1 1 0 2 0 0 0 0 0 0 0   0.108000 2.300 2.300 6.200       593293           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 2 0 2 2 1 0 0 2 0 1 0 1 0 0 1 2 2 1 0    0 1 0 2 0 0 0 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 2 2 1 0 1 1 0 1 5 0 2 4 1 0 1 4    2 1 3 2 2 3 2 3 2 0 0 3 4 3 1 3 2 2 0 3 0 2 4 0 3 2 5 1 2 1 4 6 1 2 4 0 3 6 1    7 6 4 5 4 10 16 24 22 20 40 37 44 34 29 21 28 36 36 27 23 24 14 10 4 5 2 5 3 6   2 3 3 1 4 2 1 5 1 3 5 3 2 1 2 2 6 2 3 1 1 0 5 3 3 3 4 5 2 2 3 3 5 5 1 6 2 3 2    6 0 5 2 4 3 5 1 2 2 5 1 2 3 1 2 2 2 4 2 5 5 2 2 2 5 0 1 2 5 2 3 2 3 1 1 2 4 0    2 1 4 2 1 1 1 0 1 2 0 0 1 3 1 0 2 1 1 3 3 2 0 0 0 1 2 0 0 0 0   0.110000 2.350 2.350 6.300       636559           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 1 0 0 0 1 1 2 0 0 1 0 0 0 0 0 0 0    1 2 0 0 1 1 1 0 0 0 0 1 0 1 1 0 0 1 0 0 2 0 1 0 1 0 1 0 0 1 1 3 0 1 2 2 0 2 1    1 1 1 0 1 0 1 3 0 3 2 3 4 3 3 4 3 3 2 6 3 1 1 1 2 4 2 3 1 5 1 3 1 4 5 3 3 2 1    3 7 4 3 10 19 17 19 23 27 28 33 39 36 23 23 32 32 16 19 35 23 12 11 12 8 4 5 7   1 2 2 1 2 3 5 4 2 3 2 6 4 4 2 4 1 2 2 1 2 3 0 4 2 1 2 6 2 2 1 3 3 1 6 4 8 5 2    3 5 2 3 0 3 2 3 1 2 2 3 4 3 8 6 2 1 4 6 3 1 2 0 2 0 2 5 0 3 3 3 3 1 3 3 2 5 4    2 1 4 2 2 4 4 1 3 2 5 2 3 1 2 0 4 0 1 0 6 3 1 2 0 2 0 1 0 0 0 0   0.112000 2.400 2.400 6.400       670484           3           0  0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 2    0 1 1 1 3 0 0 0 2 1 3 0 1 1 1 0 1 1 1 0 0 1 2 0 1 3 1 5 2 3 0 4 0 2 0 0 1 2 1    0 1 0 0 1 0 2 2 3 2 3 2 2 2 3 4 4 2 3 5 3 3 2 3 3 4 2 4 0 3 2 4 4 1 3 1 3 4 2    2 5 2 8 6 12 17 14 22 27 26 29 39 30 24 36 22 22 20 9 19 15 5 12 16 4 7 5 7 5    5 1 4 5 5 4 4 1 4 4 3 3 3 4 2 2 4 2 4 4 4 4 0 2 3 2 1 4 3 6 1 3 3 3 4 5 4 2 2    2 5 3 0 2 5 4 2 5 3 5 1 1 3 1 1 3 6 6 2 3 2 0 3 2 4 3 4 1 2 2 6 2 0 3 2 2 5 3    3 5 2 1 0 3 1 1 2 2 0 1 1 3 2 3 2 1 1 1 1 3 2 1 0 0 0 0 0 0 0   0.114000 2.450 2.450 6.500       711783           4           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 0 0 1 0 2 1 2 0 1 0 0 1 0 0 1 1 1 1 0 0 0 1    1 2 0 1 1 0 0 0 2 1 1 1 1 1 2 1 2 3 3 1 1 1 2 3 1 3 2 2 1 0 1 1 4 4 4 1 0 4 0    0 1 1 2 1 3 2 0 3 4 1 1 1 1 3 2 0 1 3 2 1 2 1 0 3 3 2 5 4 2 5 3 4 2 2 5 3 3 3    3 5 5 8 7 14 12 28 22 24 23 36 33 26 32 27 26 18 30 24 15 13 19 15 17 6 5 7 5    4 3 5 3 1 4 4 9 5 3 1 4 0 0 6 2 5 3 3 3 1 2 3 2 4 1 5 5 3 8 2 1 1 4 1 7 5 6 6    4 4 3 2 6 3 3 3 3 1 3 4 5 4 3 4 3 1 2 3 1 2 1 2 2 6 5 2 2 2 4 2 2 0 2 3 3 2 7    4 4 1 4 2 0 3 1 1 2 1 2 3 1 3 2 2 4 3 1 4 0 0 4 2 2 2 1 0 0 0 0   0.116000 2.500 2.500 6.600       745364           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 1 2 1 1 2 1 1 1 0 1 0 2 0 1 1    0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 2 3 0 1 4 4 0 4 0 1 0 1 3 3 0 2 1 2 3    2 1 1 1 2 0 4 0 0 4 5 2 5 4 1 3 5 5 4 0 4 4 2 3 2 3 5 2 2 4 2 3 4 2 3 3 3 3 3    2 4 12 10 13 14 19 22 23 24 36 19 32 25 25 36 24 18 20 21 14 18 13 8 6 9 2 9 5   2 5 3 4 4 3 3 0 4 3 2 5 3 4 2 2 6 3 4 0 2 4 1 3 4 7 4 5 3 2 4 5 5 3 4 4 4 2 3    2 4 4 2 1 5 7 1 5 2 4 1 5 5 3 4 4 3 2 4 2 4 0 6 2 3 4 1 2 2 2 4 1 4 2 2 2 5 6    5 1 4 4 2 3 3 3 1 4 3 4 2 6 2 5 3 2 2 1 3 2 2 5 1 1 0 0 1 0 0 0   0.118000 2.550 2.550 6.700       791846           4           0  0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 2 1 1 0 0 0 0 0 1 0 0 0 1 1 0 1 0 1 0 1 1 0 1 0    1 4 1 2 3 0 3 1 0 1 1 1 0 3 1 2 1 1 1 0 0 1 1 1 3 1 3 2 3 1 2 2 1 3 2 4 1 4 0    2 4 1 4 3 2 1 1 2 1 3 2 3 3 2 1 1 5 3 3 3 3 2 3 4 3 5 3 1 1 2 2 3 5 1 2 1 1 4    4 6 9 6 6 13 17 21 20 24 22 25 20 29 23 28 30 26 27 18 20 17 16 17 12 10 8 5 6   6 6 4 3 1 2 4 6 9 2 2 3 5 7 6 2 3 8 5 4 5 6 4 6 5 3 5 3 2 5 3 2 8 3 5 4 5 3 5    4 3 4 8 4 3 8 3 3 3 1 1 2 2 5 4 7 3 2 3 3 2 2 3 6 3 2 2 1 1 5 2 5 6 3 5 3 4 1    3 1 2 1 0 4 1 4 2 2 2 3 1 1 1 1 3 2 0 1 6 1 1 0 2 1 0 1 0 0 0 0   0.120000 2.600 2.600 6.800       833394           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 2 1 1 1 2 1 0 0 0 1 0 1 0 0 0 1 0 0 1 1 2 1 0 0    0 0 0 2 2 0 3 1 0 0 2 1 1 1 1 0 1 2 1 5 0 1 0 2 2 1 2 0 4 2 1 4 3 4 2 2 1 2 1    5 2 3 1 3 0 2 2 2 2 3 4 0 4 2 3 3 4 5 2 2 6 3 4 5 5 5 3 4 6 5 1 3 0 5 4 5 1 3    2 2 6 18 13 17 27 27 21 28 28 24 26 27 29 23 21 16 17 19 22 14 11 9 5 14 7 7 6   4 4 12 3 6 4 5 4 6 4 2 0 1 8 1 6 8 5 2 3 4 5 6 4 2 5 8 3 1 1 6 3 7 8 4 1 6 5 2   8 11 5 6 5 6 2 4 5 1 2 7 2 2 5 5 6 3 3 2 3 8 5 1 9 3 3 2 3 6 3 5 3 2 4 6 3 1 3   5 4 4 4 6 3 3 5 0 2 2 5 1 3 2 2 1 4 2 0 2 2 2 2 4 1 2 1 2 1 1 0   0.122000 2.650 2.650 6.900       876007           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 2 1 1 1 1 2 2 1 0 0 1 0 0 0 1 1 0 0 0 2 0 0    4 1 0 2 1 2 0 1 2 0 1 3 2 1 0 1 1 0 1 2 1 0 2 3 3 5 3 3 3 0 1 4 0 1 5 3 4 3 1    2 2 2 4 1 3 3 3 2 3 2 3 2 1 4 4 2 2 5 5 3 4 1 2 1 2 4 2 4 7 2 4 4 2 7 3 5 7 5    3 6 8 10 10 18 21 22 24 14 25 27 29 31 22 25 24 21 27 20 19 22 19 14 13 14 10    5 7 3 4 5 5 3 1 4 3 8 4 5 4 0 3 4 3 4 1 7 6 1 1 3 4 4 3 4 3 6 4 3 4 2 4 4 3 5    6 5 1 1 6 2 6 6 3 5 5 3 2 6 5 4 3 4 6 4 3 5 5 6 5 6 2 4 2 1 2 2 4 2 7 6 2 1 3    1 5 2 1 2 4 3 3 3 2 5 2 4 1 4 3 2 2 5 5 1 1 3 3 2 2 2 2 1 0 0 0 0 0   0.124000 2.700 2.700 7.000       925764           3           0  0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 2 1 3 0 1 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0    1 2 0 0 3 2 0 1 2 1 1 2 0 2 1 2 2 0 0 2 3 2 3 2 2 3 2 2 4 0 2 0 5 1 3 2 3 1 2    3 2 0 6 4 3 6 2 5 0 5 2 1 4 4 5 7 4 2 3 5 2 0 2 5 2 4 7 4 4 4 8 5 3 1 7 2 2 1    5 5 5 14 19 16 22 18 30 29 25 36 23 23 22 25 25 27 26 23 14 20 16 16 10 6 6 6    4 2 6 6 6 6 6 4 6 1 0 3 4 4 5 2 4 3 2 4 4 5 5 5 6 10 6 3 6 8 5 5 8 7 4 6 4 3 4   8 5 5 7 4 6 3 5 8 4 3 4 4 3 4 3 1 3 3 7 2 4 8 3 6 4 3 3 2 5 4 4 3 7 4 5 4 4 3    4 7 2 3 3 4 3 0 2 2 4 3 4 2 4 2 2 6 4 4 6 6 1 5 1 1 2 1 0 0 0 0 0   0.126000 2.750 2.750 7.100       969560           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 1 0 1 2 0 2 0 2 2 0 1 1 1 0 0 1 0 1 1 1 1 2 0    1 2 2 1 2 0 0 1 0 1 0 2 1 0 1 0 1 1 2 0 3 0 3 4 3 1 3 2 0 4 0 1 2 0 3 1 1 2 3    2 2 2 5 1 7 1 5 1 5 4 2 0 0 1 2 1 3 2 3 3 5 4 10 10 2 5 11 4 1 2 1 7 3 5 4 4 1   5 10 8 7 9 9 20 20 21 33 21 28 20 27 32 21 29 22 20 24 15 13 27 14 13 15 10 9    3 11 6 7 5 3 6 8 5 4 4 1 3 3 5 2 7 3 6 6 1 6 4 6 5 3 4 2 4 3 3 9 4 5 4 4 5 2 3   10 4 3 2 6 10 6 3 6 5 5 5 4 8 8 5 4 3 6 4 4 2 4 4 4 5 7 4 4 4 4 5 2 2 3 4 5 2    1 3 2 6 2 7 7 1 6 4 4 6 5 5 4 0 2 2 3 2 7 5 0 4 1 1 4 6 1 0 3 2 0 0 1   0.128000 2.800 2.800 7.200      1022713           5           0  0 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 2 1 0 0 4 0 0 1 2 3    1 1 0 1 0 1 0 3 1 1 1 2 2 1 1 1 3 1 0 2 4 2 1 2 1 2 0 3 1 3 2 1 5 2 1 3 1 2 1    5 3 2 1 2 5 3 8 2 3 2 5 5 4 3 6 4 4 4 3 2 3 8 4 3 4 5 4 5 4 7 6 5 3 3 3 5 2 9    10 7 9 12 11 13 17 15 22 19 33 24 28 30 26 21 24 22 27 20 26 16 10 10 9 20 10    7 4 5 7 7 2 7 5 3 5 1 6 1 5 7 5 6 3 1 5 1 1 3 4 8 6 3 9 5 5 3 6 7 4 6 7 6 4 2    4 6 2 3 6 5 6 7 6 4 4 9 6 8 6 9 7 1 2 6 2 7 5 4 4 4 4 5 5 4 4 3 6 3 5 3 6 4 3    6 6 2 5 2 8 4 5 3 6 5 4 5 8 4 3 5 6 5 5 2 8 1 2 2 5 4 1 3 0 0 0 0 0   0.130000 2.850 2.850 7.300      1081669           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 5 0 0 2 2 0 0 1 0 0 0 1 1 0 2 0 2 2 2 1 0    1 0 2 2 3 1 1 0 2 0 1 0 2 1 1 2 2 0 1 4 3 0 2 1 1 0 2 5 2 1 0 1 3 2 5 2 1 2 5    2 3 4 3 6 6 6 4 6 6 3 1 3 2 3 4 7 5 2 9 7 4 1 4 4 3 2 2 2 7 4 8 4 7 4 6 8 5 1    8 6 10 18 21 18 15 21 24 21 26 22 30 28 27 23 22 21 17 25 20 17 13 17 9 12 7 8   5 4 4 5 5 2 4 1 1 2 5 7 6 4 9 7 7 5 5 5 5 5 2 4 5 3 6 8 2 4 9 4 10 5 1 4 5 5 5   10 3 2 8 6 5 7 3 13 3 3 6 5 1 4 5 9 5 2 7 4 5 6 3 5 6 5 4 5 9 6 4 3 4 4 4 5 8    5 5 0 3 6 3 4 3 7 5 6 4 3 3 6 8 4 1 3 1 2 7 3 4 6 6 1 3 4 1 0 1 0 0   0.132000 2.900 2.900 7.400      1131887           3           0  0 0 0 0 0 0 0 0 1 0 0 1 2 1 1 0 0 0 1 2 2 1 1 0 2 1 1 0 1 1 1 0 2 2 3 1 0 1 0    1 0 2 0 2 0 1 4 0 1 2 2 0 0 0 2 3 0 1 2 3 0 1 2 3 5 6 2 2 3 1 4 4 8 4 3 3 3 7    2 2 5 7 4 1 2 4 8 1 5 2 7 3 4 2 9 6 5 5 6 2 2 3 6 2 5 6 7 7 2 8 3 3 3 3 6 6 5    3 10 15 15 17 19 13 29 20 23 22 34 28 28 33 20 20 22 17 22 18 15 19 14 11 9 13   6 6 13 4 2 9 8 8 7 6 5 6 4 4 9 6 2 8 9 7 2 6 3 7 3 6 3 7 4 4 5 4 5 6 4 7 5 4     10 2 6 6 8 3 6 6 9 5 8 8 7 6 4 8 5 7 5 5 7 3 5 5 5 10 7 3 8 7 5 7 2 4 4 6 4 10   7 6 4 4 4 4 3 2 4 2 6 5 9 7 3 2 6 2 5 1 5 6 2 2 1 9 2 5 2 5 1 0 0 0 1 1   0.134000 2.950 2.950 7.500      1185706           3           0  0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 3 2 1 0 1 1 0 0 0 0 0 1 0 1 1 2 0 1 0 1 2 0 0 0    1 1 0 1 1 1 0 2 2 0 1 3 3 2 3 0 0 2 2 3 2 1 1 3 0 0 1 1 3 4 3 1 1 9 1 4 0 1 3    4 1 3 2 6 4 7 7 3 2 8 5 2 5 2 4 6 7 3 7 7 8 4 7 2 4 7 7 9 9 2 5 5 8 3 5 7 3 6    10 6 10 15 10 13 14 29 21 23 37 26 20 28 20 16 24 25 16 19 21 20 20 17 11 10     12 8 7 7 5 5 5 4 5 6 7 3 6 5 7 5 11 9 6 8 11 6 4 6 8 8 7 7 7 4 5 4 8 5 4 3 4 8   10 7 9 4 7 6 8 9 7 3 5 7 7 6 2 6 4 7 3 9 8 12 7 6 6 6 4 5 7 2 4 7 3 2 4 4 7 1    4 5 0 4 6 3 10 8 5 4 3 4 5 7 5 7 5 7 3 5 2 5 6 4 5 2 4 1 6 6 2 4 2 0 0 1 0   0.136000 3.000 3.000 7.600      1238426           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 2 4 0 2 0 2 2 0 1 1 1 0 2 1 1 2 1 0 1 1 0 3 1 0    0 1 0 1 0 0 2 1 1 0 4 0 2 6 3 3 4 0 3 1 2 4 0 4 4 0 1 5 2 2 5 1 3 4 3 3 5 2 4    4 6 2 5 3 4 5 4 5 6 7 5 6 2 8 3 4 7 2 4 4 3 7 6 5 1 4 8 3 7 10 3 3 6 1 5 3 8     11 5 7 15 11 15 17 21 23 21 24 28 16 21 29 15 22 27 28 20 13 19 13 7 15 10 11    9 6 8 8 4 7 5 4 6 5 10 6 7 8 9 3 5 5 9 5 9 4 4 4 3 5 7 4 10 6 8 4 9 8 4 6 7 9    11 6 8 3 5 8 12 3 6 9 7 11 9 6 7 4 7 7 7 2 5 4 5 0 2 9 5 5 5 10 7 5 6 3 9 4 4    13 2 7 5 7 4 7 2 0 4 5 4 4 6 8 1 2 5 6 4 7 3 11 4 3 3 5 5 4 4 3 1 4 2 2 1 1 0   0.138000 3.050 3.050 7.700      1299809           6           0  0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 2 1 1 0 0 1 0 0 2 0 1 2 0 0 3 0 0 1 3 1    2 0 2 0 1 1 2 1 2 3 2 1 2 5 2 2 2 4 3 2 5 3 0 3 2 4 5 4 3 0 5 4 1 4 3 8 6 4 4    7 4 5 4 3 6 5 6 10 3 6 6 2 6 3 4 4 3 6 7 6 8 3 4 7 5 4 9 2 4 8 5 9 8 3 7 5 7 7   13 7 11 15 17 16 18 18 18 20 17 26 25 19 20 26 31 22 18 20 18 14 11 16 4 7 11    10 8 9 9 6 3 8 8 7 5 6 10 3 5 6 6 3 12 7 8 8 2 10 4 13 9 9 12 4 5 9 7 9 5 7 4    8 9 6 7 8 10 8 7 5 7 11 6 4 4 4 6 4 9 4 5 9 10 7 4 12 7 4 9 5 10 10 6 8 4 7 2    4 7 2 6 8 4 11 3 3 9 7 6 7 3 8 7 4 8 5 3 7 4 5 5 7 4 6 7 5 5 3 5 2 5 4 1 2 0 0   1   0.140000 3.100 3.100 7.800      1361810           3           0  0 0 0 0 0 0 0 0 0 1 0 0 0 0 3 2 1 0 0 0 1 1 1 2 0 0 0 0 1 0 2 2 2 1 0 0 3 3 0    2 0 6 2 3 1 0 3 3 1 2 2 5 3 5 3 3 2 2 7 3 2 2 3 4 2 3 4 4 1 3 7 4 5 4 2 3 5 4    2 1 3 6 3 4 3 8 7 6 5 3 5 11 5 5 3 3 7 3 6 4 4 2 4 4 4 1 5 5 9 6 6 9 3 10 8 6    8 3 10 8 16 16 13 18 23 29 25 19 19 20 27 19 22 27 24 21 15 18 11 20 21 17 12    5 18 6 12 7 9 11 7 12 11 4 8 8 4 8 7 7 2 6 4 4 9 6 9 3 4 7 7 7 4 10 4 11 5 8 8   8 5 4 4 8 6 4 9 8 12 12 8 5 8 3 10 8 7 5 3 5 6 8 5 6 10 7 2 11 2 5 5 6 8 10 2    7 5 5 14 2 7 3 9 3 5 2 8 2 3 4 4 7 9 5 4 7 6 7 5 6 3 5 4 7 6 7 7 9 3 0 2 1 1 1   0 0   0.142000 3.150 3.150 7.900      1429499           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 1 2 1 1 0 0 0 3 0 2 2 1 0 3 0 2 1 3 0 0 1    1 3 1 2 4 1 5 3 5 1 0 7 1 3 2 3 2 2 2 3 0 0 1 3 6 3 2 2 4 4 4 6 4 3 6 4 10 3 7   2 5 4 7 4 5 8 4 7 4 1 7 11 5 2 10 2 11 3 7 8 10 9 6 3 5 3 6 3 10 11 5 5 9 7 10   8 9 5 15 11 9 18 18 15 24 17 23 17 19 25 17 24 18 37 16 17 21 17 14 20 17 15     15 9 4 11 7 3 8 10 8 8 6 8 3 4 5 8 4 6 3 9 9 6 2 10 4 4 3 8 4 9 1 7 5 9 7 10 9   10 4 6 5 8 6 6 10 10 6 5 7 6 6 10 5 7 8 8 8 7 7 11 12 8 3 10 6 9 13 11 4 6 7 6   3 10 5 8 4 7 7 7 5 8 4 9 5 5 7 6 6 7 11 11 7 8 5 3 5 7 7 10 3 3 6 5 7 9 2 3 7    1 0 0 0 0 1   0.144000 3.200 3.200 8.000      1493946           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 2 3 0 0 1 2 1 1 1 4 1 0 1 0 1 2 1 3 1 1 1 1 2    1 1 3 2 6 0 4 0 1 4 2 4 5 2 1 3 0 2 2 4 2 3 2 4 3 5 4 4 4 1 5 1 3 4 5 6 4 7 2    8 8 8 5 3 6 0 7 3 2 2 5 7 5 7 5 8 9 6 4 3 6 8 6 10 2 5 6 3 3 6 6 6 6 17 5 10 6   6 11 11 13 12 21 26 18 24 21 24 23 30 18 22 20 24 19 13 17 25 22 17 15 8 13 7    10 8 9 6 7 9 8 7 8 9 7 7 6 12 5 9 9 12 9 12 6 9 7 10 7 7 4 9 7 4 2 7 4 5 8 8 9   7 6 7 5 9 4 8 13 6 5 4 7 9 6 7 7 9 4 4 5 8 10 9 10 6 6 7 9 12 11 8 8 9 11 5 8    7 5 5 8 5 9 10 5 5 11 11 6 8 8 4 8 5 5 5 4 7 4 5 6 5 6 6 7 7 4 2 6 3 2 1 0 0 0   0 0   0.146000 3.250 3.250 8.100      1562352           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 2 0 1 2 1 1 0 0 1 0 1 2 0 0 0 3 1 2 0 4 4 2 0    0 2 3 2 0 1 3 3 4 0 1 4 3 3 4 5 5 4 2 1 4 2 5 3 2 7 6 3 5 6 5 5 5 1 5 2 7 4 8    7 4 6 5 7 5 3 5 8 1 6 4 6 8 7 6 7 6 3 4 6 3 5 8 4 10 3 3 11 6 5 3 9 6 4 3 17 9   11 11 24 13 15 14 25 26 26 21 17 32 32 22 18 25 29 29 27 24 21 12 23 14 12 11    9 17 7 9 11 3 7 6 5 5 12 3 6 8 7 4 7 11 10 8 9 5 8 2 10 9 8 10 10 7 7 4 7 5 7    7 9 10 8 7 7 16 6 8 10 5 6 6 12 12 7 11 11 8 9 7 8 12 10 7 8 7 11 8 9 7 7 4 9    4 7 14 9 8 8 13 9 8 7 13 5 9 5 7 4 9 5 7 8 7 8 7 3 10 9 3 4 4 4 5 2 6 6 3 5 10   4 4 2 3 0 1 0 0   0.148000 3.300 3.300 8.200      1630559           3           0  0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 4 2 1 1 1 2 1 2 0 2 1 5 0 1 1 4 0 2 1 4 5 3 0    1 1 1 2 1 3 3 3 1 1 1 1 1 3 4 6 6 8 8 4 3 2 7 2 2 1 7 4 4 5 1 10 6 4 4 4 3 3 3   6 11 6 4 5 4 8 5 5 9 4 5 5 7 6 4 13 12 3 6 7 5 2 7 9 7 8 8 4 7 6 4 10 6 8 9 9    9 13 15 17 23 25 13 16 24 22 26 21 27 24 24 21 21 21 15 17 22 25 21 22 17 14     11 8 12 5 9 7 8 5 11 10 6 6 5 9 13 10 9 8 8 8 6 4 9 10 9 9 7 8 7 5 7 8 14 13 5   14 5 12 11 8 9 6 5 4 9 13 7 10 13 11 11 8 5 9 10 8 7 6 7 13 3 13 8 7 13 17 5 8   5 10 7 12 7 6 6 9 7 8 8 11 8 11 9 11 11 8 5 6 10 4 9 3 10 8 7 10 8 7 8 10 10 7   4 11 5 7 8 2 4 3 0 0 1 0 1   0.150000 3.350 3.350 8.300      1707576           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 1 2 1 0 2 0 2 3 1 3 2 2 2 2 0 2 1 4 3 2 2 3    1 2 1 0 2 2 4 2 5 3 3 5 2 8 4 5 4 2 3 6 7 6 1 0 7 4 7 7 6 5 4 3 4 6 6 7 6 2 7    4 4 2 5 5 6 9 3 3 3 6 6 5 3 5 7 8 8 6 8 8 6 8 3 9 6 6 8 8 6 4 8 6 6 10 4 11 6    11 15 23 16 8 17 20 21 19 24 15 14 19 21 30 25 21 15 19 16 18 21 21 15 14 12     16 8 10 12 7 10 9 8 10 10 7 9 8 10 12 6 6 9 11 6 5 9 12 6 7 12 7 5 6 8 5 9 4     11 9 8 8 10 7 6 10 7 11 13 7 4 13 11 8 11 9 16 6 12 11 10 10 19 2 9 11 8 7 8 8   6 13 6 10 12 12 9 12 9 9 8 7 7 9 6 12 8 4 9 9 8 5 7 8 9 5 12 5 7 5 9 10 9 10 3   6 6 8 7 11 3 5 5 4 2 0 0 0 0   0.152000 3.400 3.400 8.400      1777231           3           0  0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 1 3 1 0 3 4 2 3 3 3 3 3 2 1 1 1 1 3 3 0    1 8 0 0 5 3 7 4 4 4 4 4 3 5 2 2 5 3 6 1 7 6 1 2 2 5 2 1 6 6 8 7 7 5 10 4 1 6 9   3 4 5 3 5 8 4 9 8 11 8 3 2 7 7 9 10 9 10 8 6 8 6 8 7 10 8 7 3 8 4 10 7 6 8 9 6   5 16 9 19 24 23 17 23 24 22 30 21 15 23 27 20 20 20 18 20 23 18 17 15 19 17 18   13 9 4 4 7 12 7 10 4 8 6 10 5 6 13 2 3 8 7 8 7 3 11 8 7 9 7 19 7 8 9 6 14 8 8    11 10 11 13 14 10 16 8 9 13 8 9 9 12 7 12 11 6 9 15 5 9 9 9 11 11 13 6 10 6 4    12 9 9 12 11 8 6 9 16 10 10 10 8 10 10 6 7 4 1 15 6 8 4 9 13 11 8 10 11 9 8 3    3 6 6 7 9 4 6 8 7 4 2 1 2 2 1 0   0.154000 3.450 3.450 8.500      1849489           6           0  0 0 0 0 0 0 0 0 0 0 1 1 3 0 1 2 2 0 1 4 1 1 0 1 0 2 1 0 0 1 1 1 1 6 3 6 1 3 1    3 3 0 6 0 4 2 7 4 6 4 4 3 7 4 5 7 5 5 2 3 9 9 2 5 5 3 9 4 2 7 6 2 8 2 5 7 12 6   5 4 5 10 4 12 10 6 4 14 7 9 10 11 7 7 7 7 3 9 7 4 3 8 7 5 7 9 6 8 9 6 8 8 12 6   5 11 12 13 11 13 21 26 19 23 25 18 23 22 23 23 18 27 20 15 20 25 24 19 18 12     14 13 15 8 15 10 11 7 9 13 11 12 13 11 11 7 11 13 6 5 10 6 6 10 8 14 5 14 11 8   5 9 7 10 10 8 7 15 13 3 13 12 18 15 7 10 9 10 8 15 9 6 8 9 10 10 9 5 7 7 5 10    11 13 12 12 12 10 6 17 10 11 9 4 8 7 6 6 9 12 8 16 18 7 5 10 8 12 10 15 6 13     11 6 10 16 10 11 16 8 9 5 11 10 14 11 5 2 5 7 3 1 1 0 1 0   0.156000 3.500 3.500 8.600      1920727           4           0  0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 2 1 2 0 3 0 1 1 0 1 0 3 0 4 4 1 3 1 2 3 3 4 3    1 2 3 9 5 2 3 7 3 3 6 5 2 6 1 4 3 2 3 6 5 1 8 3 8 5 3 7 6 13 11 9 5 8 7 7 5 8    7 4 8 6 4 10 4 6 5 6 9 9 12 6 7 10 9 9 8 8 3 8 9 8 8 2 12 11 13 8 13 7 8 6 6 9   6 8 16 13 14 16 16 22 20 21 21 17 20 18 19 22 20 11 20 22 21 14 19 15 23 17 15   12 14 19 16 10 11 14 11 9 11 9 12 8 16 14 9 6 18 10 11 7 10 11 17 10 13 8 10     12 9 12 7 7 10 10 11 11 9 8 8 14 10 10 9 14 9 14 13 9 19 16 17 4 11 8 12 11 10   21 6 10 8 9 12 9 7 7 12 7 16 14 10 13 6 13 8 9 10 6 10 8 7 10 4 6 11 19 12 6 7   5 8 11 10 12 13 9 6 10 5 11 11 4 14 10 7 2 6 5 1 2 5 1 1 0 0   0.158000 3.550 3.550 8.700      1999833           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 2 2 3 2 2 2 1 2 3 0 1 0 1 3 2 0 0 3 2 3 2 5 7 0    3 4 1 10 7 7 4 5 2 3 4 3 8 3 6 4 4 4 8 2 3 4 5 5 7 1 6 7 8 1 6 8 1 4 4 11 9 4    7 11 9 10 5 6 8 4 3 9 7 9 11 5 5 8 8 4 8 7 8 11 9 12 6 4 13 4 12 10 6 9 11 10    11 10 11 11 11 14 15 14 23 18 17 29 16 26 23 15 19 14 18 19 22 31 13 21 20 12    16 15 14 18 17 15 8 12 14 13 10 10 10 10 10 13 11 6 8 11 8 14 8 10 11 11 8 10    13 5 14 7 12 9 10 10 12 15 18 8 6 9 9 12 8 9 20 14 16 10 11 14 5 5 13 6 11 9     11 15 6 9 13 11 7 8 7 10 8 16 12 11 8 10 14 11 17 11 8 16 13 9 10 5 10 17 13     14 16 8 10 9 11 5 10 9 10 12 8 11 12 11 8 6 7 12 15 13 12 7 13 5 0 3 2 0 0 0 0   0.160000 3.600 3.600 8.800      2073149           3           0  0 0 0 0 0 0 0 0 0 1 0 0 0 0 2 1 2 1 2 2 1 0 2 2 1 0 3 6 4 5 5 2 2 2 5 5 3 6 4    6 4 5 2 4 4 3 2 4 6 3 3 6 5 7 4 5 7 5 3 5 6 13 5 3 10 5 9 7 4 5 6 5 10 6 5 5 6   6 4 14 7 6 11 6 9 10 9 8 5 3 8 10 10 6 6 8 9 5 6 14 7 11 10 9 9 11 13 8 4 5 10   12 6 16 8 8 7 19 20 23 10 16 27 25 23 19 26 21 16 20 21 24 18 25 8 11 13 16 18   13 22 18 9 16 4 16 10 12 13 9 7 9 8 17 11 10 13 10 14 4 9 12 16 8 9 16 17 13     11 14 8 8 13 9 11 15 10 11 14 8 6 4 9 11 18 9 9 8 9 15 11 11 11 9 6 13 13 10 7   8 10 15 14 9 7 4 10 12 17 10 14 13 10 10 12 20 9 7 6 11 15 11 10 8 9 6 10 13     17 6 8 9 6 13 13 16 10 15 5 11 14 11 12 6 5 12 9 4 9 2 4 1 1 0 0 0   0.162000 3.650 3.650 8.900      2156456           5           0  0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 2 0 1 1 3 2 3 4 3 3 2 1 3 6 5 2 3 4 4 3 6 2 3    4 4 5 5 3 4 1 4 5 9 3 3 4 3 3 8 5 6 12 2 10 3 4 6 8 9 8 8 2 2 7 5 8 2 8 9 7 2    6 8 6 5 8 2 7 5 6 13 5 6 8 11 6 10 5 6 3 8 10 11 10 10 14 10 11 8 11 8 12 6 12   5 15 12 13 10 13 13 18 23 12 21 18 21 23 20 30 20 23 26 24 24 21 21 29 19 21     16 23 20 13 19 13 16 11 15 13 13 11 8 11 14 14 13 4 16 15 18 13 9 19 8 11 6 9    14 8 13 12 13 10 13 10 14 11 13 11 8 10 13 11 11 14 11 8 14 11 10 9 14 12 14     18 8 12 7 13 12 10 14 14 8 12 17 11 13 9 12 12 15 7 9 13 17 11 11 11 12 17 12    11 16 15 8 9 12 7 13 15 11 16 7 10 7 14 5 18 10 10 8 8 6 6 13 14 6 9 11 9 9 3    5 1 1 3 0 0   0.164000 3.700 3.700 9.000      2234753           3           0  0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 4 1 4 2 1 3 1 1 3 2 3 3 1 3 6 2 4 4 3 3 3 6 5 2    6 4 1 3 3 7 1 4 4 6 12 4 5 2 6 4 9 3 1 8 11 5 2 7 6 3 8 4 7 3 8 3 9 6 7 8 9 2    7 6 9 6 15 6 9 5 9 4 9 17 15 10 2 10 6 8 12 12 11 12 10 9 7 11 8 7 5 11 10 14    16 7 7 7 13 15 10 16 17 21 19 14 18 24 19 27 27 24 20 22 24 21 20 14 24 17 17    18 32 15 12 13 15 12 8 14 11 11 19 11 14 15 18 10 5 12 11 11 9 15 9 7 9 16 12    9 12 10 15 9 18 7 11 12 14 7 20 8 10 13 14 11 6 6 9 11 8 10 16 8 17 13 17 9 16   11 10 9 13 20 17 14 12 10 13 11 9 9 17 20 10 16 8 14 13 14 18 15 15 8 10 12 11   22 12 13 9 12 9 11 14 19 12 12 8 8 12 11 19 11 11 12 15 11 15 13 9 9 10 9 4 9    4 2 1 0 0   0.166000 3.750 3.750 9.100      2327990           3           0  0 0 0 0 0 0 0 0 0 0 0 0 3 2 2 0 1 2 2 1 1 0 0 3 1 4 2 6 4 2 4 3 2 5 5 2 3 1 3    1 2 10 2 7 4 3 4 3 3 4 3 10 6 9 6 3 8 5 5 3 4 4 6 8 4 4 7 5 5 11 14 5 3 6 8 8    7 10 11 7 17 7 11 10 8 7 8 12 13 11 12 6 13 9 7 7 6 5 8 13 10 10 14 11 11 8 12   15 14 9 13 10 9 18 13 18 12 23 14 17 24 15 23 25 31 19 17 29 19 19 19 26 25 19   17 22 19 19 19 11 11 12 22 21 8 10 18 10 14 19 17 13 14 10 6 9 10 15 11 5 13     13 11 11 17 16 9 7 14 7 19 6 10 13 7 12 18 14 7 12 15 13 13 9 13 13 13 12 12     14 12 19 10 16 18 18 12 8 10 10 9 7 14 9 11 13 12 8 15 12 11 10 12 11 17 15 19   14 14 12 7 7 12 11 15 16 12 11 12 10 19 19 12 14 12 15 11 20 13 7 18 9 15 19     16 11 5 9 8 6 2 4 0 2 0 1   0.168000 3.800 3.800 9.200      2406866           3           0  0 0 0 0 0 0 0 0 0 1 0 2 0 1 0 2 3 2 3 1 2 1 2 2 5 2 1 2 3 2 2 2 5 3 5 3 3 1 3    6 8 6 1 3 9 6 3 6 10 5 5 7 4 5 7 12 9 5 7 5 6 6 8 3 5 4 7 8 5 6 5 8 13 4 10 2    10 9 7 7 16 9 10 9 13 8 12 9 13 15 9 15 9 10 11 6 6 6 7 7 6 8 15 9 8 9 6 12 12   11 14 12 11 13 8 17 18 18 11 14 19 14 25 21 15 10 15 19 27 23 22 24 17 19 18     12 16 22 21 25 9 25 15 19 15 21 15 8 11 13 12 10 12 7 13 11 17 11 13 10 16 19    14 23 11 8 12 13 10 9 17 4 14 10 7 10 17 14 11 11 20 18 13 8 12 6 8 13 12 23     15 14 15 16 9 14 9 13 14 17 11 17 11 10 15 17 11 6 12 12 14 15 17 12 16 16 8     17 15 15 10 15 11 10 15 12 13 9 12 9 12 15 12 6 18 7 15 14 12 21 18 11 10 18     11 19 11 7 11 3 2 5 4 0 1 1   0.170000 3.850 3.850 9.300      2508471           7           0  0 0 0 0 0 0 0 0 0 0 0 0 1 3 1 2 1 4 3 3 1 2 7 0 3 2 2 2 2 5 2 3 2 3 3 4 3 7 3    5 3 4 4 6 2 3 10 4 11 3 13 7 7 5 6 3 8 10 6 6 4 10 11 4 12 7 8 9 7 7 8 4 6 7 9   9 5 9 11 5 14 9 10 7 9 8 8 5 6 11 13 14 10 10 10 10 8 9 9 9 9 14 14 13 11 8 18   9 10 9 16 12 13 15 13 10 17 16 20 14 22 20 26 29 29 27 24 20 37 21 24 13 18 13   28 24 22 25 21 13 14 15 9 11 18 8 16 17 16 13 12 16 11 11 17 15 11 15 10 11 12   13 12 12 20 15 14 15 16 12 17 15 15 12 10 14 14 17 15 19 15 13 13 11 12 16 14    17 16 8 16 12 8 14 13 13 10 10 9 12 11 19 20 13 11 4 15 11 14 11 20 18 18 13     20 12 20 21 15 15 12 13 18 18 11 16 9 14 9 18 11 10 11 20 11 13 17 13 13 12 14   16 10 12 12 23 12 11 12 8 8 1 0 1 2 0   0.172000 3.900 3.900 9.400      2591210           3           0  0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 4 4 3 2 1 3 3 2 3 0 3 6 1 3 1 5 5 4 3 9 9 0 4 7    5 3 5 5 8 7 3 3 5 5 8 5 11 10 8 10 3 6 6 6 7 7 8 8 12 9 6 10 8 7 10 8 8 10 4 6   12 20 4 6 11 7 9 10 7 5 10 6 12 11 7 13 13 16 12 6 8 14 13 9 7 5 14 17 17 10     12 11 6 13 11 17 3 23 13 21 12 21 28 11 23 30 28 23 24 26 26 17 21 15 27 23 33   16 22 25 11 20 22 23 21 20 7 21 13 16 12 16 16 13 18 18 9 13 16 15 9 20 13 19    15 8 9 11 14 13 10 9 10 16 15 14 17 15 19 16 12 14 12 14 14 16 19 19 4 24 8 12   15 16 11 15 14 20 14 13 13 14 16 19 14 13 19 14 18 23 15 15 4 14 17 14 8 10 15   20 11 15 19 12 9 13 12 11 16 12 16 13 14 16 13 16 16 19 19 12 11 10 19 15 15     14 12 5 11 18 17 10 13 12 9 6 2 0 0 1 0   0.174000 3.950 3.950 9.500      2675515           3           0  0 0 0 0 0 0 0 0 0 0 2 0 1 1 0 2 1 2 3 3 1 3 1 3 7 5 3 6 4 3 9 4 5 2 5 3 3 3 6    9 5 5 2 6 8 5 8 4 8 5 6 5 6 4 6 3 7 11 6 9 9 3 6 6 7 6 8 7 9 12 18 6 9 8 11 11   8 14 15 15 11 15 13 9 19 10 15 14 9 4 18 5 8 10 8 10 13 9 12 11 8 8 12 6 15 8    9 9 18 7 17 21 9 13 18 14 21 24 18 22 17 26 15 21 23 25 19 26 23 20 27 17 27     20 26 15 22 15 19 15 16 24 12 15 24 13 13 17 11 7 10 21 15 15 16 13 20 22 12     16 12 16 15 14 18 11 12 14 14 24 10 13 16 19 8 11 18 19 15 15 23 16 16 11 12     18 11 13 14 16 10 14 13 18 12 15 15 14 8 11 17 12 22 13 12 14 15 10 11 15 19     15 12 17 8 21 23 13 19 11 8 12 15 11 14 15 19 15 10 17 9 16 14 18 14 16 14 14    23 14 14 13 16 12 14 15 14 9 14 7 5 2 3 1 1 1   0.176000 4.000 4.000 9.600      2779386           5           0  0 0 0 0 0 0 0 0 0 0 0 2 2 3 0 1 3 0 6 2 6 3 1 5 0 4 1 6 5 1 6 3 6 5 6 2 5 4 5    3 9 8 5 7 5 8 4 12 8 12 6 8 5 7 5 7 10 5 5 6 7 9 7 10 7 10 10 8 12 10 6 13 10    11 12 11 10 10 16 9 6 12 9 11 17 10 11 10 14 11 16 7 11 13 12 10 17 14 11 13     12 10 13 16 16 17 17 15 14 11 8 15 13 27 22 14 19 17 22 22 27 18 28 19 27 32     24 33 21 17 23 12 27 25 20 20 17 22 14 15 22 21 14 9 16 12 19 16 17 16 16 20     14 18 15 14 18 10 12 9 16 12 12 10 13 19 12 12 15 14 15 22 12 11 15 18 19 18     10 6 11 14 10 23 17 14 16 19 10 10 16 19 17 23 16 18 19 18 16 12 14 14 14 13     11 10 24 21 22 26 18 18 18 14 17 5 13 17 11 13 16 14 18 16 9 15 15 18 16 14 21   13 22 17 9 8 16 17 16 16 19 7 20 19 18 16 10 6 10 6 3 5 1 0 0 2   0.178000 4.050 4.050 9.700      2869617           3           0  0 0 0 0 0 0 0 0 0 0 2 2 2 0 1 4 1 3 2 2 1 2 3 2 2 4 4 7 5 6 5 3 6 6 5 7 8 1 5    2 3 5 5 8 10 7 6 10 9 6 8 9 7 8 10 15 4 10 5 8 8 6 11 8 8 11 7 5 8 14 5 11 7     13 10 9 7 8 9 14 12 10 9 11 6 14 15 14 13 11 9 18 18 10 14 14 10 12 16 12 9 8    14 15 6 11 11 12 10 14 12 11 18 13 13 27 16 23 23 20 21 32 20 18 25 22 24 32     25 34 19 23 21 25 22 25 19 23 19 21 16 19 16 18 9 18 6 13 12 13 18 12 8 19 14    14 11 16 13 15 14 21 11 14 14 13 11 20 14 14 26 10 22 16 18 15 20 24 18 19 19    16 14 14 14 21 13 19 18 20 13 17 11 17 14 22 17 15 15 20 8 21 15 16 16 23 17     13 19 21 20 12 15 18 15 19 15 18 17 20 15 13 14 24 18 15 15 14 18 20 19 17 19    20 21 21 15 19 19 17 11 16 16 11 23 10 20 13 10 5 10 2 3 1 1 0   0.180000 4.100 4.100 9.800      2975040           3           0  0 0 0 0 0 0 0 0 1 0 0 1 2 2 4 4 2 4 4 1 2 5 0 3 3 5 2 5 5 4 9 2 7 8 4 8 3 11 6   10 4 7 8 6 6 5 8 8 7 11 4 4 11 12 7 11 7 10 11 7 11 11 10 9 7 13 12 18 8 14 12   14 12 8 8 16 10 10 14 16 10 6 8 15 15 15 22 13 19 18 12 6 11 10 7 12 12 24 15    17 9 17 21 10 17 18 14 14 14 9 22 11 23 17 15 23 32 20 11 12 20 15 23 30 20 25   19 26 29 19 27 23 15 19 11 30 16 21 24 18 18 14 8 6 25 13 21 13 13 19 13 21 25   23 18 14 14 13 20 12 14 8 10 25 14 15 20 15 10 15 16 21 8 15 20 21 20 13 16 15   20 11 18 17 17 9 12 24 19 13 18 17 20 14 15 20 10 23 19 25 8 7 13 14 11 15 18    13 10 12 10 17 11 24 16 17 11 12 13 16 20 14 26 12 17 13 14 16 16 6 20 16 23     22 11 17 16 14 25 19 17 21 22 19 13 19 16 18 10 11 7 4 6 0 0 2   0.182000 4.150 4.150 9.900      3083416           6           0  0 0 0 0 0 0 0 0 0 0 2 1 1 4 1 3 4 3 5 6 2 1 4 2 3 5 6 6 7 2 4 1 11 7 5 2 6 6 8   9 8 12 7 11 9 6 12 7 8 9 6 6 8 11 6 6 8 11 8 11 12 11 13 9 10 7 9 6 11 9 13 12   12 8 14 15 8 9 8 8 11 22 16 6 11 16 15 9 13 12 12 13 11 15 9 9 16 14 14 12 21    12 12 12 16 19 10 15 18 8 16 14 16 16 21 30 22 9 25 19 19 26 23 33 25 22 21 19   21 20 20 21 20 26 20 29 27 25 25 21 20 25 21 21 18 14 19 15 6 20 18 16 20 16     13 13 15 15 15 15 22 16 15 15 11 21 19 11 19 13 14 15 17 21 12 18 12 22 18 21    18 13 23 15 18 9 21 11 14 23 18 21 25 18 22 15 21 23 15 15 16 19 21 18 19 21     17 13 24 23 22 19 14 20 22 15 14 14 20 20 23 13 18 15 18 20 20 24 9 12 17 21     21 12 16 17 16 16 21 26 19 15 21 22 24 15 11 13 13 6 8 1 4 0 1 0   0.184000 4.200 4.200 10.00      3174897           3           0  0 0 0 0 0 0 0 0 0 0 1 1 2 3 0 5 4 3 3 0 7 3 2 4 2 8 6 4 5 9 3 8 6 4 2 7 6 8 7    9 3 5 8 5 9 7 7 6 11 14 7 12 9 9 5 15 12 14 15 12 9 11 5 8 13 11 12 10 9 17 12   11 8 17 11 19 11 15 9 11 7 15 14 16 16 16 7 12 10 14 13 13 16 16 11 15 13 14     12 16 11 12 13 17 10 13 19 11 17 11 13 14 13 10 19 19 23 24 22 24 24 31 19 23    22 28 21 25 29 17 23 17 21 30 22 19 25 27 27 22 23 23 17 25 17 20 17 12 23 21    9 17 20 16 19 16 17 20 9 16 11 22 16 15 12 15 17 23 24 16 16 18 26 11 16 20 18   10 14 17 26 19 17 15 17 19 12 21 20 24 17 27 13 16 18 19 23 14 19 14 10 11 18    19 6 15 21 23 25 17 17 18 21 27 20 17 18 20 25 22 20 18 22 18 17 15 24 16 15     22 18 22 14 20 20 22 18 22 25 19 26 12 19 19 13 12 16 19 14 9 7 5 4 2 0 2   0.186000 4.250 4.250 10.10      3283256           3           0  0 0 0 0 0 0 0 1 0 0 1 1 4 1 5 2 5 5 3 4 6 3 2 4 7 8 2 6 6 4 10 7 8 7 5 4 4 9 8   18 10 7 6 6 13 12 10 13 10 7 15 4 7 10 13 12 8 8 13 5 14 6 9 14 9 10 16 12 13    11 8 12 11 10 13 9 11 15 17 23 18 13 10 12 11 12 14 14 14 10 12 12 16 13 15 13   13 14 18 10 13 17 14 14 14 12 12 8 18 14 23 20 16 19 16 16 16 27 18 21 19 20     19 37 22 21 22 28 24 26 18 21 28 21 22 21 21 22 16 15 13 22 22 27 22 11 13 20    10 17 16 19 20 30 18 25 8 7 22 18 17 14 23 16 17 11 16 24 19 18 22 15 15 23 16   13 15 22 14 8 12 18 13 15 22 17 15 15 17 27 21 19 21 24 17 10 12 14 19 17 22     18 19 17 28 19 15 14 16 28 17 20 15 11 22 18 19 16 21 17 24 19 22 22 20 10 20    18 18 18 21 18 23 18 32 26 21 21 22 20 22 16 17 20 22 21 17 13 13 11 9 5 0 1 1   1   0.188000 4.300 4.300 10.20      3396610           5           0  0 0 0 0 0 0 0 0 0 0 1 2 3 0 2 5 5 4 3 3 5 1 2 3 6 9 3 3 3 8 7 2 9 5 7 5 11 8 9   7 6 9 6 4 5 8 6 10 9 14 10 15 6 7 13 15 10 13 7 15 10 10 11 14 14 6 7 17 13 19   3 13 9 6 13 13 14 10 11 12 16 17 13 10 15 15 19 19 11 11 15 11 13 9 13 20 8 18   14 18 23 23 23 15 19 20 14 11 7 18 16 15 22 28 20 24 22 25 17 20 39 24 26 25     25 33 25 25 25 33 15 29 18 29 18 12 18 23 17 24 28 22 16 20 33 23 18 23 26 23    15 24 16 16 16 16 17 15 15 16 14 11 9 23 17 13 13 18 12 19 20 30 20 20 15 21     19 16 18 20 23 19 15 10 11 15 19 13 22 22 18 19 16 19 23 16 10 25 23 20 21 20    31 19 19 18 15 22 18 14 13 21 18 19 22 19 16 17 21 14 20 26 18 26 22 19 26 19    20 22 15 13 24 23 15 21 21 21 27 18 22 19 24 17 22 16 18 23 10 12 3 5 3 3 0 0   0.190000 4.350 4.350 10.30      3502025           3           0  0 0 0 0 0 0 0 0 0 0 0 3 0 3 2 3 4 4 3 4 5 10 7 6 6 4 5 12 10 6 6 13 10 6 7 14    9 6 13 10 12 16 3 9 9 7 5 6 13 11 10 8 11 19 12 14 13 16 13 14 9 12 14 13 14     16 10 14 7 16 18 16 9 15 11 20 15 10 14 14 11 14 17 10 6 16 10 15 12 17 17 20    15 7 12 23 15 8 13 12 8 16 15 20 16 16 20 14 11 20 24 23 20 16 18 27 25 31 27    27 25 21 31 27 20 23 24 32 17 21 34 27 17 19 19 25 30 27 21 24 28 30 19 26 21    14 16 21 23 27 8 17 21 17 11 23 15 22 15 18 10 17 20 23 18 18 17 19 22 15 22     21 19 23 18 18 26 17 18 26 18 24 15 22 23 23 19 23 25 23 24 26 10 21 16 32 23    18 19 24 21 28 26 22 19 19 14 30 21 24 23 22 21 13 27 20 27 24 15 20 22 22 13    25 14 19 32 21 18 18 23 22 22 14 18 20 24 14 19 20 18 17 24 29 27 20 12 18 17    11 9 2 3 2 1 0   0.192000 4.400 4.400 10.40      3593938           3           0  0 0 0 0 0 0 0 0 0 0 1 0 1 1 2 3 4 7 8 1 5 6 8 3 7 5 4 9 8 8 7 7 9 7 9 9 15 5 7   8 15 14 9 9 13 8 8 15 10 7 10 9 10 14 7 8 18 16 17 11 14 15 13 8 15 8 15 18 16   16 22 12 8 16 13 10 13 13 10 21 11 10 16 16 13 13 17 16 20 23 13 22 16 14 15     22 19 22 15 22 24 16 16 16 19 12 15 16 17 20 18 19 26 17 23 18 32 20 28 36 22    25 30 29 31 36 24 24 21 29 24 32 29 30 23 34 19 33 34 25 20 31 27 24 16 14 21    20 13 24 17 28 13 24 16 26 15 26 21 11 15 20 13 20 18 25 23 18 24 26 22 16 22    14 13 16 20 24 25 19 29 20 15 20 16 25 26 21 22 17 24 22 21 17 23 23 15 19 30    23 17 21 19 18 21 26 14 29 24 20 33 19 15 20 23 28 19 23 25 15 19 17 31 23 18    29 26 25 14 24 25 18 19 19 24 35 31 23 23 14 15 19 11 20 19 24 17 16 9 10 12 3   2 2 0 1   0.194000 4.450 4.450 10.50      3712573           7           0  0 0 0 0 0 0 0 0 0 0 0 1 1 1 5 3 5 4 3 11 3 10 4 6 7 8 5 5 5 8 9 12 7 7 11 8 6    7 9 10 13 10 6 13 9 9 9 11 14 14 12 13 10 6 13 13 15 12 13 19 8 14 13 16 11 13   14 15 9 15 16 13 16 17 17 17 23 18 16 19 10 13 18 16 10 9 21 11 22 14 20 14 18   13 15 12 13 14 16 14 15 20 29 17 14 18 8 15 21 15 19 15 22 20 17 15 23 26 16     26 24 23 23 23 23 30 24 29 28 26 35 33 31 22 23 22 20 37 22 27 33 26 27 26 17    16 18 27 22 21 24 18 18 18 17 15 18 14 19 24 22 15 20 21 15 19 25 15 16 26 19    22 29 20 16 13 15 16 32 24 23 13 33 17 22 18 18 23 24 22 21 20 26 21 16 22 18    18 16 15 26 26 17 22 21 13 25 24 13 23 18 18 25 32 20 24 21 17 19 24 24 23 33    19 19 21 32 18 22 23 19 23 32 18 31 22 25 23 23 31 29 21 16 20 20 15 22 14 12    5 10 9 2 1 0 1   0.196000 4.500 4.500 10.60      3829518           3           0  0 0 0 0 0 0 0 0 0 1 2 2 1 6 2 6 5 9 3 5 6 8 6 3 8 10 7 11 9 4 8 9 5 11 10 13 9   16 13 10 9 5 12 9 15 10 13 9 12 18 14 19 9 13 14 12 13 21 17 17 18 16 13 12 16   14 18 10 15 15 16 11 15 22 17 19 17 11 12 26 12 17 19 18 21 20 27 17 18 19 21    14 19 16 12 16 21 20 18 8 17 17 13 13 18 15 19 15 19 20 28 21 29 27 27 34 24     26 31 25 24 16 17 23 23 30 28 18 28 32 28 37 18 26 18 16 33 21 31 21 20 22 19    20 25 18 18 20 11 17 20 22 23 14 14 17 18 20 25 20 19 20 22 19 16 33 25 21 21    24 18 16 22 29 22 16 27 26 28 21 20 22 17 25 23 20 23 18 16 19 26 22 21 22 23    15 20 19 17 23 19 20 15 22 18 22 26 23 23 31 17 29 18 13 15 19 18 24 22 28 22    17 23 24 26 21 23 25 24 29 26 18 41 24 29 22 27 23 28 16 30 24 18 23 19 17 18    21 17 14 8 2 5 2 0 0   0.198000 4.550 4.550 10.70      3950740           3           0  0 0 0 0 0 0 0 0 1 1 1 2 1 3 7 5 6 7 7 7 4 5 6 4 1 8 9 10 9 8 10 8 12 6 10 8 10   8 11 9 10 15 7 11 8 13 11 13 15 15 17 12 10 8 17 12 9 14 12 14 11 14 21 14 15    20 18 16 8 15 22 24 14 10 18 14 15 16 12 10 16 21 16 25 17 20 17 17 20 15 24     15 17 22 25 17 13 22 18 20 19 11 21 22 21 16 21 24 16 22 17 21 17 24 22 24 35    27 24 28 24 32 37 34 25 24 29 37 37 25 28 21 23 24 22 21 20 25 22 32 19 21 22    24 20 21 20 22 18 27 17 14 20 22 22 22 14 19 20 20 21 23 22 14 20 21 23 20 18    23 20 25 31 24 18 22 14 23 22 21 23 27 27 20 21 18 22 23 24 23 21 18 22 17 22    21 35 15 24 24 12 27 30 27 28 22 31 24 24 19 27 24 28 23 25 26 35 27 22 29 21    24 18 19 26 33 29 31 23 25 19 24 26 21 10 23 24 26 28 20 27 26 17 29 22 18 14    22 8 10 11 4 4 1 2 0   0.200000 4.600 4.600 10.80      4068161           5           0  0 0 0 0 0 0 0 0 0 1 1 0 1 5 5 2 9 3 11 6 9 8 7 7 8 3 3 13 10 8 7 5 8 13 8 7 14   12 10 7 15 13 13 11 12 12 14 12 13 12 10 15 11 14 7 16 15 8 15 13 15 13 18 13    17 21 15 12 13 13 17 18 18 18 16 19 20 17 14 17 24 13 12 18 19 19 13 21 18 26    21 23 16 14 18 19 13 33 13 19 20 14 20 23 14 26 19 22 21 21 16 27 30 25 28 22    32 21 30 27 31 21 30 22 27 27 31 27 21 17 38 41 17 21 20 19 30 24 27 20 20 21    30 20 19 19 31 25 24 13 21 23 19 24 33 24 17 20 17 12 25 23 18 24 11 24 25 22    33 20 11 22 31 21 20 26 27 21 26 24 14 23 23 20 20 26 28 10 20 27 24 22 17 27    28 20 23 23 33 20 24 26 32 33 29 21 25 24 17 18 19 27 26 20 24 26 24 24 26 21    19 24 21 36 32 18 33 33 20 23 25 33 19 27 25 27 24 27 21 21 23 28 18 27 25 19    24 15 17 12 15 7 2 1 0 0 ", "%f ", Inf);
+%! assert (rows (x) == n);
+
+%% Note use fprintf so output not sent to stdout
+%% test/octave.test/io/printf-1.m
+%!test
+%! nm = tmpnam ();
+%! fid1 = fopen(nm,"w");
+%! x = fprintf (fid1, "%s: %d\n", "test", 1);
+%! fclose(fid1);
+%! fid2 = fopen(nm,"r");
+%! str = fscanf(fid2,"%s");
+%! fclose(fid2);
+%! unlink(nm);
+%! assert (x, 8);
+%! assert (str, "test:1");
+
+%% test/octave.test/io/printf-2.m
+%!error printf (1)
+
+%% test/octave.test/io/printf-3.m
+%!error <Invalid call to printf> printf ()
+
+%% test/octave.test/io/sprintf-1.m
+%!test
+%! [s, msg, status] = sprintf ("%s: %d\n", "test", 1);
+%! 
+%! assert (s == "test: 1\n" && ischar (msg) && status == 8);
+
+%% test/octave.test/io/sprintf-2.m
+%!error sprintf (1)
+
+%% test/octave.test/io/sprintf-3.m
+%!error <Invalid call to sprintf> sprintf ()
+
+%% test/octave.test/io/fopen-1.m
+%!test
+%! arch_list = ["native"; "ieee-le"; "ieee-be"; "vaxd"; "vaxg"; "cray"];
+%! 
+%! status = 1;
+%! 
+%! for i = 1:6
+%!   arch = deblank (arch_list (i,:));
+%!   for j = 1:6
+%!     if (j == 1)
+%!       mode_list = ["w"; "r"; "a"];
+%!     elseif (j == 2)
+%!       mode_list = ["w+"; "r+"; "a+"];
+%!     endif
+%!     nm = tmpnam ();
+%!     for k = 1:3
+%!       mode = deblank (mode_list (k,:));
+%!       [id, err] = fopen (nm, mode, arch);
+%!       if (id < 0)
+%!         __printf_assert__ ("open failed: %s (%s, %s): %s\n", nm, mode, arch, err);
+%!         status = 0;
+%!         break;
+%!       else
+%!         fclose (id);
+%!       endif
+%!       tmp_mode = cstrcat (mode, "b");
+%!       [id, err] = fopen (nm, tmp_mode, arch);
+%!       if (id < 0)
+%!         __printf_assert__ ("open failed: %s (%s, %s): %s\n", nm, tmp_mode, arch, err);
+%!         status = 0;
+%!         break;
+%!       else
+%!         fclose (id);
+%!       endif
+%!       tmp_mode = cstrcat (mode, "t");
+%!       [id, err] = fopen (nm, tmp_mode, arch);
+%!       if (id < 0)
+%!         __printf_assert__ ("open failed: %s (%s, %s): %s\n", nm, tmp_mode, arch, err);
+%!         status = 0;
+%!         break;
+%!       else
+%!         fclose (id);
+%!       endif
+%!     endfor
+%!     unlink (nm);
+%!     if (status == 0)
+%!       break;
+%!     endif
+%!   endfor
+%!   if (status == 0)
+%!     break;
+%!   endif
+%! endfor
+%! 
+%! assert (status == 1);
+
+%% test/octave.test/io/fopen-2.m
+%!test
+%! s.a = 1;
+%! fail ("fopen (s)");
+
+%% test/octave.test/io/fopen-3.m
+%!error fopen ("foo", "x")
+
+%% test/octave.test/io/fopen-4.m
+%! fopen ("foo", "wb", "noodle");
+%! assert (__prog_output_assert__ ("error:"));
+
+%% test/octave.test/io/fopen-5.m
+%!error <Invalid call to fopen> fopen ()
+
+%% test/octave.test/io/fopen-6.m
+%!error <Invalid call to fopen> fopen ("foo", "wb", "native", 1)
+
+%% test/octave.test/io/fclose-1.m
+%!error fclose (0)
+
+%% test/octave.test/io/fclose-2.m
+%!error <Invalid call to fclose> fclose (1, 2)
+
+%% test/octave.test/io/tmpnam-1.m
+%!assert (ischar (tmpnam ()))
+
+%% test/octave.test/io/tmpnam-2.m
+%!warning tmpnam (1);
+
+%% test/octave.test/io/tmpnam-3.m
+%!warning tmpnam ("foo", 1);
+
+%% test/octave.test/io/tmpnam-4.m
+%!error <Invalid call to tmpnam> tmpnam (1, 2, 3)
+
+%% test/octave.test/io/binary-io-1.m
+%!test
+%! type_list = ["char"; "char*1"; "integer*1"; "int8";
+%! "schar"; "signed char"; "uchar"; "unsigned char";
+%! "short"; "ushort"; "unsigned short"; "int";
+%! "uint"; "unsigned int"; "long"; "ulong"; "unsigned long";
+%! "float"; "float32"; "real*4"; "double"; "float64";
+%! "real*8"; "int16"; "integer*2"; "int32"; "integer*4"];
+%! 
+%! n = rows (type_list);
+%! nm = tmpnam ();
+%! id = fopen (nm, "wb");
+%! if (id > 0)
+%!   for i = 1:n
+%!     fwrite (id, i, deblank (type_list(i,:)));
+%!   endfor
+%!
+%!   fclose (id);
+%!   
+%!   id = fopen (nm, "rb");
+%!   if (id > 0)
+%!     x = zeros (1, n);
+%!     for i = 1:n
+%!       x(i) = fread (id, [1, 1], deblank (type_list(i,:)));
+%!     endfor
+%!     
+%!     if (x == 1:n)
+%!       __printf_assert__ ("ok\n");
+%!     endif
+%!   endif
+%! endif
+%! 
+%! unlink (nm);
+%! assert (__prog_output_assert__ ("ok"));
+
+%% test/octave.test/io/file-pos-1.m
+%!test
+%! nm = tmpnam ();
+%! id = fopen (nm, "wb");
+%! if (id > 0)
+%!   fprintf (id, "%d\n", 1:100);
+%!   fclose (id);
+%!   id = fopen (nm, "rb");
+%!   if (id > 0)
+%!     for i = 1:101
+%!       fgets (id);
+%!     endfor
+%!     if (feof (id))
+%!       fclose (id);
+%!       id = fopen (nm, "rb");
+%!       pos_one = ftell (id);
+%!       s_one = fgets (id);
+%!       for i = 1:48
+%!         s = fgets (id);
+%!       endfor
+%!       pos_fifty = ftell (id);
+%!       s_fifty = fgets (id);
+%!       fseek (id, pos_one, SEEK_SET);
+%!       s_one_x = fgets (id);
+%!       fseek (id, pos_fifty, SEEK_SET);
+%!       s_fifty_x = fgets (id);
+%!       if (s_one == s_one_x && s_fifty == s_fifty_x)
+%!         frewind (id);
+%!         s_one_x = fgets (id);
+%!         if (s_one != s_one_x)
+%!           error ("bombed!!");
+%!         endif
+%!       endif
+%!     endif
+%!   endif
+%! endif
+%! unlink (nm);
+
+%% test/octave.test/io/fputs-1.m
+%!error <Invalid call to fputs> fputs ()
+
+%% test/octave.test/io/fputs-2.m
+%!error <Invalid call to fputs> fputs (1, "foo", 1)
+
+%% test/octave.test/io/fputs-3.m
+%!assert (fputs (1, 1),-1)
+
+%% test/octave.test/io/fgetl-1.m
+%!error <Invalid call to fgetl> fgetl ()
+
+%% test/octave.test/io/fgetl-2.m
+%!error <Invalid call to fgetl> fgetl (1, 2, 3)
+
+%% test/octave.test/io/fgetl-3.m
+%!error fgetl ("foo", 1)
+
+%% test/octave.test/io/fgets-1.m
+%!error <Invalid call to fgets> fgets ()
+
+%% test/octave.test/io/fgets-2.m
+%!error <Invalid call to fgets> fgets (1, 2, 3)
+
+%% test/octave.test/io/fgets-3.m
+%!error fgets ("foo", 1)
+
+%% test/octave.test/io/fprintf-1.m
+%!error <Invalid call to fprintf> fprintf ()
+
+%% test/octave.test/io/fprintf-2.m
+%!error <Invalid call to fprintf> fprintf (1)
+
+%% test/octave.test/io/fprintf-3.m
+%!test
+%! s.a = 1;
+%! fail ("fprintf (s)", "Invalid call to fprintf");
+
+%% test/octave.test/io/fprintf-4.m
+%!error fprintf (1, 1)
+
+%% test/octave.test/io/fprintf-5.m
+%!error fprintf (-1, "foo")
+
+%% test/octave.test/io/fscanf-1.m
+%!error <Invalid call to fscanf> fscanf ()
+
+%% test/octave.test/io/fscanf-2.m
+%!error <Invalid call to fscanf> fscanf (1)
+
+%% test/octave.test/io/fscanf-3.m
+%!error fscanf ("foo", "bar")
+
+%% test/octave.test/io/fread-1.m
+%!error <Invalid call to fread> fread ()
+
+%% test/octave.test/io/fread-2.m
+%!error <Invalid call to fread> fread (1, 2, "char", 1, "native", 2)
+
+%% test/octave.test/io/fread-3.m
+%!error fread ("foo")
+
+%% test/octave.test/io/fwrite-1.m
+%!error <Invalid call to fwrite> fwrite ()
+
+%% test/octave.test/io/fwrite-2.m
+%!error <Invalid call to fwrite> fwrite (1, rand (10), "char", 1, "native", 2)
+
+%% test/octave.test/io/fwrite-3.m
+%!error fwrite ("foo", 1)
+
+%% test/octave.test/io/feof-1.m
+%!error <Invalid call to feof> feof ()
+
+%% test/octave.test/io/feof-2.m
+%!error <Invalid call to feof> feof (1, 2)
+
+%% test/octave.test/io/feof-3.m
+%!error feof ("foo")
+
+%% test/octave.test/io/ferror-1.m
+%!error <Invalid call to ferror> ferror ()
+
+%% test/octave.test/io/ferror-2.m
+%!error <Invalid call to ferror> ferror (1, 'clear', 2)
+
+%% test/octave.test/io/ferror-3.m
+%!error ferror ("foo")
+
+%% test/octave.test/io/ftell-1.m
+%!error <Invalid call to ftell> ftell ()
+
+%% test/octave.test/io/ftell-2.m
+%!error <Invalid call to ftell> ftell (1, 2)
+
+%% test/octave.test/io/ftell-3.m
+%!error ftell ("foo")
+
+%% test/octave.test/io/fseek-1.m
+%!error <Invalid call to fseek> fseek ()
+
+%% test/octave.test/io/fseek-2.m
+%!error <Invalid call to fseek> fseek (1, 0, SEEK_SET, 1)
+
+%% test/octave.test/io/fseek-3.m
+%!error fseek ("foo", 0, SEEK_SET)
+
+%% test/octave.test/io/frewind-1.m
+%!error <Invalid call to frewind> frewind ()
+
+%% test/octave.test/io/frewind-2.m
+%!error <Invalid call to frewind> frewind (1, 2)
+
+%% test/octave.test/io/frewind-3.m
+%!error frewind ("foo")
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/line-continue.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,80 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%!shared x, a, b
+%! x = [1,2];
+%! a = 1;
+%! b = 2;
+
+%!test
+%! y = [a... # comments here ok
+%! b];
+%! assert (y, x);
+
+%!test
+%! x = [1;2];
+%! y = [a... # comments here ok
+%! ;\
+%! 
+%! b];
+%! assert (y, x);
+
+%!assert (1 + ...
+%! 2 - \# comments here ok
+%! 3 / ... # comments here ok
+%! -1,6);
+
+%!function y = f (a,...
+%!                b,  ...
+%!                c,  ...   % comments ok
+%!                x,  # continuation characters not required in parens
+%!                y,  \# but they should work too.
+%!                z)
+%!
+%!  y = 1;
+%!endfunction
+%!
+%!assert (f (), 1)
+
+%!test
+%!assert (1 == 1
+%! && 2 == 2
+%! || 3 == 5);
+
+%!test
+%! x = [1, ...
+%! 
+%! ...
+%! 
+%! 2];
+%! y = [1;2];
+%! assert (y, x);
+
+%!test
+%! x = [1 ,...
+%! 2];
+%! y = [1,2];
+%! assert (y, x);
+
+%% test/oc tave.test/contin/contin-16.m
+%!test
+%! x = [ 1 , ...
+%! 2];
+%! y = [1,2];
+%! assert  (y, x);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/logical-index.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,73 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%!test
+%! a = [];
+%! fail ("a(0);");
+
+%!shared a
+%! a = 2;
+%!assert (a(1), 2);
+%!error id=Octave:index-out-of-bounds a(logical ([1,1]))
+
+%!shared a
+%! a = [9,8,7,6];
+%!assert (isempty (a(logical ([0,0,0,0]))))
+%!assert (a(logical ([1,1,1,1])), [9,8,7,6])
+%!assert (a(logical ([0,1,1,0])), [8,7])
+%!assert (a(logical ([1,1])), [9,8])
+
+%!shared a
+%! a = [9,8;7,6];
+%!assert (isempty (a(logical ([0,0,0,0]))))
+%!assert (a(logical ([1,1,1,1])), [9,7,8,6])
+%!assert (a(logical ([0,1,1,0])), [7,8])
+%!assert (a(logical (0:1),logical (0:1)), 6)
+%!assert (a(logical (0:1),2:-1:1), [6,7])
+%!assert (a(logical (0:1),logical ([0,1])), 6)
+%!assert (a(logical (0:1),[2,1]), [6,7])
+%!assert (a(logical (0:1),:), [7,6])
+%!assert (a(logical (0:1),1), 7)
+%!assert (a(logical (0:1),logical ([1,1])), [7,6])
+%!assert (a(2:-1:1,logical (0:1)), [6;8])
+%!assert (a(2:-1:1,logical ([0,1])), [6;8])
+%!assert (a(2:-1:1,logical ([1,1])), [7,6;9,8])
+%!assert (a(logical ([0,1]),logical (0:1)), 6)
+%!assert (a(logical ([0,1]),2:-1:1), [6,7])
+%!assert (a(logical ([0,1]),logical ([0,1])), 6)
+%!assert (a(logical ([0,1]),[2,1]), [6,7])
+%!assert (a(logical ([0,1]),:), [7,6])
+%!assert (a(logical ([0,1]),1), 7)
+%!assert (a(logical ([0,1]),logical ([1,1])), [7,6])
+%!assert (a([2,1],logical (0:1)), [6;8])
+%!assert (a([2,1],logical ([0,1])), [6;8])
+%!assert (a([2,1],logical ([1,1])), [7,6;9,8])
+%!assert (a(:,logical (0:1)), [8;6])
+%!assert (a(:,logical ([0,1])), [8;6])
+%!assert (a(:,logical ([1,1])), [9,8;7,6])
+%!assert (a(1,logical (0:1)), 8)
+%!assert (a(1,logical ([0,1])), 8)
+%!assert (a(1,logical ([1,1])), [9,8])
+%!assert (a(logical ([1,1]),logical (0:1)), [8;6])
+%!assert (a(logical ([1,1]),2:-1:1), [8,9;6,7])
+%!assert (a(logical ([1,1]),logical ([0,1])), [8;6])
+%!assert (a(logical ([1,1]),[2,1]), [8,9;6,7])
+%!assert (a(logical ([1,1]),:), [9,8;7,6])
+%!assert (a(logical ([1,1]),1), [9;7])
+%!assert (a(logical ([1,1]),logical ([1,1])), [9,8;7,6])
+
--- a/test/nest/module.mk	Mon Feb 11 15:24:56 2013 -0500
+++ b/test/nest/module.mk	Mon Feb 11 15:45:26 2013 -0500
@@ -1,4 +1,4 @@
-nest_FCN_FILES = \
+nest_fcn_files = \
   nest/arg_nest.m \
   nest/arg_ret.m \
   nest/nest_eval.m \
@@ -13,7 +13,7 @@
   nest/scope3.m \
   nest/script_nest.m \
   nest/script_nest_script.m \
-  nest/test_nest.m \
+  nest/nest.tst \
   nest/varg_nest.m \
   nest/varg_nest2.m
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nest/nest.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,58 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+################################################################################
+## This file actually executes the tests on nested functions.
+##
+## It relies on the function files defined in the nest/ directory.
+################################################################################
+
+%!assert (recursive_nest (), 25)
+
+%!assert (recursive_nest2 (), 20)
+
+%!assert (recursive_nest3 (), 5)
+
+%!assert (script_nest (), 5)
+
+%!assert (arg_ret (), 10)
+
+%!assert (arg_nest, 1)
+
+%!assert (varg_nest (-1), 6)
+
+%!assert (varg_nest2, 5)
+
+%!test
+%! scope0;
+
+%!test
+%! scope1 (1);
+
+%!test
+%! scope3;
+
+%!assert (nest_eval ("x = 5;", "x = 6;"), 6);
+%!assert (nest_eval ("x = 5;", "y = 6;"), 5);
+%!assert (nest_eval ("x = -5; x = abs (x);", "y = 6;"), 5);
+
+%!error <D' undefined near line 7> scope2
+%!error <handles to nested functions are not yet supported> no_closure (0)
+%!error <handles to nested functions are not yet supported> no_closure (1)
+%!error <can not add variable "y" to a static workspace> nest_eval ("y = 5;", "")
+%!error <can not add variable "y" to a static workspace> nest_eval ("y;", "")
--- a/test/nest/test_nest.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-################################################################################
-## This file actually executes the tests on nested functions.
-##
-## It relies on the function files defined in the nest/ directory.
-################################################################################
-
-%!assert (recursive_nest (), 25)
-
-%!assert (recursive_nest2 (), 20)
-
-%!assert (recursive_nest3 (), 5)
-
-%!assert (script_nest (), 5)
-
-%!assert (arg_ret (), 10)
-
-%!assert (arg_nest, 1)
-
-%!assert (varg_nest (-1), 6)
-
-%!assert (varg_nest2, 5)
-
-%!test
-%! scope0;
-
-%!test
-%! scope1 (1);
-
-%!test
-%! scope3;
-
-%!assert (nest_eval ("x = 5;", "x = 6;"), 6);
-%!assert (nest_eval ("x = 5;", "y = 6;"), 5);
-%!assert (nest_eval ("x = -5; x = abs (x);", "y = 6;"), 5);
-
-%!error <D' undefined near line 7> scope2
-%!error <handles to nested functions are not yet supported> no_closure (0)
-%!error <handles to nested functions are not yet supported> no_closure (1)
-%!error <can not add variable "y" to a static workspace> nest_eval ("y = 5;", "")
-%!error <can not add variable "y" to a static workspace> nest_eval ("y;", "")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/null-assign.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,63 @@
+## Copyright (C) 2008-2012 Jaroslav Hajek
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%!test
+%! a = 1:3; a(:) = []; assert (size (a), [0, 0])
+%!test
+%! a = 1:3; a(1:3) = []; assert (size (a), [1, 0])
+%!test
+%! a = (1:3).'; a(1:3) = []; assert (size (a), [0, 1])
+%!test
+%! a = ones (3); a(:,:) = []; assert (size (a), [0, 3])
+%!test
+%! a = ones (3); a(1:3,:) = []; assert (size (a), [0, 3])
+%!test
+%! a = ones (3); a(:,1:3) = []; assert (size (a), [3, 0])
+%!test
+%! a = ones (3); fail ("a(1:2,1:2) = []", ".*");
+%!test
+%! a = ones (3); fail ("a(1:3,1:3) = []", ".*");
+
+## null strings should delete. [,] and [;] should delete.
+%!test
+%! a = ones (3); a(1:2,:) = [,]; assert (size (a), [1,3])
+%!test
+%! a = ones (3); a(1:2,:) = [;]; assert (size (a), [1,3])
+%!test
+%! a = ones (3); a(1:2,:) = ''; assert (size (a), [1,3])
+%!test
+%! a = ones (3); a(1:2,:) = ""; assert (size (a), [1,3])
+
+## null matrix stored anywhere should lose its special status
+%!test
+%! a = ones (3); b = []; fail ("a(:,1:3) = b", ".")
+%!test
+%! a = ones (3); b{1} = []; fail ("a(:,1:3) = b{1}", ".")
+%!test
+%! a = ones (3); b.x = []; fail ("a(:,1:3) = b.x", ".")
+
+## filtering a null matrix through a function should not delete
+%!test
+%! a = ones (3); fail ("a(:,1:3) = double ([])")
+
+## subsasgn should work the same way
+%!test
+%! a = ones (3); a = subsasgn (a, substruct ('()', {':',1:2}), []); assert (size (a), [3,1])
+%!test
+%! a = ones (3); b = []; fail ("subsasgn (a, substruct ('()', {':',1:2}), b)", ".")
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/parser.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,259 @@
+## Copyright (C) 2010-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## Tests for parser problems belong in this file.
+## We need many more tests here!
+
+%!assert ({1 2 {3 4}}, {1,2,{3,4}})
+%!assert ({1, 2 {3 4}}, {1,2,{3,4}})
+%!assert ({1 2, {3 4}}, {1,2,{3,4}})
+%!assert ({1 2 {3, 4}}, {1,2,{3,4}})
+%!assert ({1, 2, {3 4}}, {1,2,{3,4}})
+%!assert ({1 2,{3 4}}, {1,2,{3,4}})
+%!assert ({1 2,{3,4}}, {1,2,{3,4}})
+%!assert ({1,2,{3 4}}, {1,2,{3,4}})
+
+## Tests for operator precedence as documented in section 8.8 of manual
+## There are 13 levels of precedence from "parentheses and indexing" (highest)
+## down to "statement operators" (lowest).
+##
+## Level 13 (parentheses and indexing)
+## Overrides all other levels
+%!test
+%!  a.b = 1;
+%!  assert (a. b++, 1)
+%!  assert (a.b, 2)
+%!  clear a;
+%!  a.b = [0 1];
+%!  b = 2;
+%!  assert (a.b', [0;1])
+%!  assert (!a .b, logical ([1 0]))
+%!  assert (3*a .b, [0 3])
+%!  assert (a. b-1, [-1 0])
+%!  assert (a. b:3, 0:3)
+%!  assert (a. b>0.5, logical ([0 1]))
+%!  assert (a. b&0, logical ([0 0]))
+%!  assert (a. b|0, logical ([0 1]))
+%!  a.b = [1 2];
+%!  assert (a. b&&0, false)
+%!  assert (a. b||0, true)
+%!  a.b += a. b*2;
+%!  assert (a.b, [3 6])
+## Level 12 (postfix increment and decrement)
+%!test
+%!  a = [3 5];
+%!  assert (2.^a ++, [8 32])
+%!  assert (a, [4 6])
+%!  assert (a--', [4; 6])
+%!  assert (a, [3 5])
+%!  a = 0;
+%!  assert (!a --, true)
+%!  assert (-a ++, 1)
+%!  assert (3*a ++, 0)
+%!  assert (a++-2, -1)
+%!  assert (1:a ++, 1:2)
+%!  assert (4>a++, true)
+%!  a = [0 -1];
+%!  assert ([1 1] & a++, logical ([0 1]))
+%!  assert ([0 0] | a++, logical ([1 0]))
+%!  a = 0;
+%!  assert (1 && a ++, false)
+%!  assert (0 || a --, true)
+%!  a = 5; b = 2;
+%!  b +=a ++;
+%!  assert (b, 7)
+
+## Level 11 (transpose and exponentiation)
+%!test
+%!  assert (-2 ^2, -4)
+%!  assert (!0 ^0, false)
+%!  assert (2*3 ^2, 18)
+%!  assert (2+3 ^2, 11)
+%!  assert ([1:10](1:2 ^2), [1 2 3 4])
+%!  assert (3>2 ^2, false)
+%!  assert (1&0 ^0, true)
+%!  assert (0|0 ^0, true)
+%!  assert (1&&0 ^0, true)
+%!  assert (0||0 ^0, true)
+%!  a = 3;
+%!  a *= 0 ^0;
+%!  assert (a, 3)
+## Level 10 (unary plus/minus, prefix increment/decrement, not)
+%!test
+%!  a = 2;
+%!  assert (++ a*3, 9)
+%!  assert (-- a-2, 0)
+%!  assert (a, 2)
+%!  assert (! a-2, -2)
+%!  assert ([1:10](++ a:5), 3:5)
+%!  a = [1 0];
+%!  assert (! a>=[1 0], [false true])
+%!  a = 0;
+%!  assert (++ a&1, true)
+%!  assert (-- a|0, false)
+%!  assert (-- a&&1, true)
+%!  assert (++ a||0, false)
+%!  a = 3;
+%!  a *= ++a;
+%!  assert (a, 16)
+## Level 9 (multiply, divide)
+%!test
+%!  assert (3+4 * 5, 23)
+%!  assert (5 * 1:6, [5 6])
+%!  assert (3>1 * 5, false)
+%!  assert (1&1 * 0, false)
+%!  assert (1|1 * 0, true)
+%!  assert (1&&1 * 0, false)
+%!  assert (1||1 * 0, true)
+%!  a = 3;
+%!  a /= a * 2;
+%!  assert (a, 0.5)
+## Level 8 (add, subtract)
+%!test
+%!  assert ([2 + 1:6], 3:6)
+%!  assert (3>1 + 5, false)
+%!  assert (1&1 - 1, false)
+%!  assert (0|1 - 2, true)
+%!  assert (1&&1 - 1, false)
+%!  assert (0||1 - 2, true)
+%!  a = 3;
+%!  a *= 1 + 1;
+%!  assert (a, 6)
+## Level 7 (colon)
+%!test
+%!  assert (5:-1: 3>4, [true false false])
+%!  assert (1: 3&1, [true true true])
+%!  assert (1: 3|0, [true true true])
+%!  assert (-1: 3&&1, false)
+%!  assert (-1: 3||0, false)
+%!  a = [1:3];
+%!  a += 3 : 5;
+%!  assert (a, [4 6 8])
+## Level 6 (relational)
+%!test
+%!  assert (0 == -1&0, false)
+%!  assert (1 == -1|0, false)
+%!  assert (0 == -1&&0, false)
+%!  assert (1 == -1||0, false)
+%!  a = 2;
+%!  a *= 3 > 1;
+%!  assert (a, 2)
+## Level 5 (element-wise and)
+%!test
+%!  assert (0 & 1|1, true)
+%!  assert ([0 1] & 1&&1, false)
+%!  assert (0 & 1||1, true)
+%!  a = 2;
+%!  a *= 3 & 1;
+%!  assert (a, 2)
+## Level 4 (element-wise or)
+%!test
+%!  assert ([0 1] | 1&&0, false)
+%!  assert ([0 1] | 1||0, true)
+%!  a = 2;
+%!  a *= 0 | 1;
+%!  assert (a, 2)
+## Level 3 (logical and)
+%!test
+%!  assert (0 && 1||1, true)
+%!  a = 2;
+%!  a *= 3 && 1;
+%!  assert (a, 2)
+## Level 2 (logical or)
+%!test
+%!  a = 2;
+%!  a *= 0 || 1;
+%!  assert (a, 2)
+
+## Tests for operator precedence within each level where ordering should
+## be left to right except for postfix and assignment operators.
+
+## Level 13 (parentheses and indexing)
+%!test
+%!  a.b1 = 2;
+%!  assert (a.(strcat('b','1'))++, 2)
+%!  assert (a.b1, 3)
+%!  b = {1 2 3 4 5};
+%!  assert (b{(a. b1 + 1)}, 4)
+%!  b = 1:5;
+%!  assert (b(a. b1 + 1), 4)
+%!  assert ([2 3].^2', [4; 9])
+## Level 12 (postfix increment and decrement)
+## No tests possible since a++-- is not valid
+## Level 11 (transpose and exponentiation)
+## Note: Exponentiation works left to right for compatibility with Matlab.
+%!  assert (2^3**2, 64)
+%!  assert ([2 3].^2.', [4;9])
+%!  assert ([2 3].'.^2, [4;9])
+%!  assert (3*4i'.', 0 - 12i)
+%!  assert (3*4i.'.', 0 + 12i)
+## Level 10 (unary plus/minus, prefix increment/decrement, not)
+%!test
+%!  assert (+-+1, -1)
+%!  a = -1;
+%!  assert (!++a, true)
+%!  assert (a, 0)
+%!  assert (-~a, -1)
+%!  assert (!~--a, true)
+%!  assert (a, -1)
+## Level 9 (multiply, divide)
+%!test
+%!  assert (3 * 4 / 5, 2.4)
+%!  assert (3 ./ 4 .* 5, 3.75)
+%!  assert (2 * 4 \ 6, 0.75)
+%!  assert (2 .\ 4 .* 6, 12)
+## Level 8 (add, subtract)
+%!test
+%!  assert (-3 - 4 + 1 + 3 * 2, 0)
+## Level 7 (colon)
+## No tests possible because colon operator can't be combined with second colon operator
+## Level 6 (relational)
+%!test
+%!  assert (0 < 1 <= 0.5 == 0 >= 0.5 > 0, true)
+%!  assert (1 < 1 == 0 != 0, true)
+%!  assert (1 < 1 == 0 ~= 0, true)
+## Level 5 (element-wise and)
+## No tests possible.  Only one operator (&) at this precedence level and operation is associative.
+## Level 4 (element-wise or)
+## No tests possible.  Only one operator (|) at this precedence level and operation is associative.
+## Level 3 (logical and)
+%!test
+%!  a = 1;
+%!  assert (1 && 0 && ++a, false)
+%!  assert (a, 1)
+## Level 2 (logical or)
+%!test
+%!  a = 1;
+%!  assert (0 || 1 || ++a, true)
+%!  assert (a, 1)
+## Level 1 (assignment)
+%!test
+%! a = 2; b = 5; c = 7;
+%! assert (a += b *= c += 1, 42)
+%! assert (b == 40 && c == 8)
+
+## Test creation of anonymous functions
+
+%!test
+%! af_in_cell = {@(x) [1 2]};
+%! assert (af_in_cell{1}(), [1, 2]);
+
+%!test
+%! R = @(rot) [cos(rot) -sin(rot); sin(rot) cos(rot)];
+%! assert (R(pi/2), [cos(pi/2), -sin(pi/2); sin(pi/2),cos(pi/2)]);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/prefer.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,227 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/prefer/prefer-1.m
+%!test
+%! m = [3 2];
+%! assert (all (m == (3:-1:2)));
+
+%% test/octave.test/prefer/prefer-2.m
+%!test
+%! m = [3,
+%! 2];
+%! assert (all (m == (3:-1:2)'));
+
+%% test/octave.test/prefer/prefer-3.m
+%!test
+%! a = 2;
+%! assert ([a - 1], 1);
+
+%% test/octave.test/prefer/prefer-4.m
+%!test
+%! m = [3,2];
+%! fail ("[m ']");
+
+%% test/octave.test/prefer/prefer-5.m
+%!assert (all ([3 2] == (3:-1:2)));
+
+%% test/octave.test/prefer/prefer-6.m
+%!assert (all ([3, 2] == (3:-1:2)));
+
+%% test/octave.test/prefer/prefer-7.m
+%!test
+%! m = [3,2];
+%! assert (all ([m (1)] == (3:-1:1)));
+
+%% test/octave.test/prefer/prefer-8.m
+%!test
+%! m = [3,2];
+%! assert ([m(1)],3);
+
+%% test/octave.test/prefer/prefer-10.m
+%!test
+%! a = 2;
+%! assert ([a- 1], 1);
+
+%% test/octave.test/prefer/prefer-11.m
+%!test
+%! a = 1;
+%! assert (all ([a -1] == (1:-2:-1)));
+
+%% test/octave.test/prefer/prefer-12.m
+%!test
+%! wsn = warning ("query", "Octave:str-to-num");
+%! warning ("off", "Octave:str-to-num");
+%! assert ("d" + 0, 100);
+%! warning (wsn.state, "Octave:str-to-num");
+
+%% test/octave.test/prefer/prefer-13.m
+%!test
+%! wsn = warning ("query", "Octave:str-to-num");
+%! warning ("on", "Octave:str-to-num");
+%! fail ("'d' + 0", "warning");
+%! warning (wsn.state, "Octave:str-to-num");
+
+%% test/octave.test/prefer/prefer-14.m
+%!test
+%! wir = warning ("query", "Ocave:imag-to-real");
+%! warning ("off", "Ocave:imag-to-real");
+%! assert (eye (1+i), 1);
+%! warning (wir.state, "Ocave:imag-to-real");
+
+%% test/octave.test/prefer/prefer-15.m
+%!test
+%! wir = warning ("query", "Ocave:imag-to-real");
+%! warning ("on", "Ocave:imag-to-real");
+%! fail ("eye (1+i)", "warning");
+%! warning (wir.state, "Ocave:imag-to-real");
+
+%% test/octave.test/prefer/prefer-17.m
+%!test
+%! wrre = warning ("query", "Octave:resize-on-range-error");
+%! warning ("off", "Octave:resize-on-range-error");
+%! clear a; 
+%! a(2) = 1; a(3) = 2; 
+%! assert (all (a == [0,1,2]));
+%! warning (wrre.state, "Octave:resize-on-range-error");
+
+%% test/octave.test/prefer/prefer-18.m
+%!test
+%! clear a; 
+%! a(1) = 1; a(2) = 2;
+%! assert (all (a == [1,2]));
+
+%% test/octave.test/prefer/prefer-21.m
+%!test
+%! ped = print_empty_dimensions ();
+%! print_empty_dimensions (0);
+%! a = cell (1, 1);
+%! b = type ("-q", "a");
+%! assert (!isempty (findstr (b{1}, "[]")));
+%! assert (isempty (findstr (b{1} ,"[](0x0)")));
+%! print_empty_dimensions (ped);
+
+%% test/octave.test/prefer/prefer-22.m
+%!test
+%! ped = print_empty_dimensions ();
+%! print_empty_dimensions (1);
+%! a = cell (1, 1);
+%! b = type ("-q", "a");
+%! assert (!isempty (findstr (b{1}, "[](0x0)")));
+%! print_empty_dimensions (ped);
+
+%% test/octave.test/prefer/prefer-23.m
+%!assert (all (size (inv ([])) == [0, 0]));
+
+%% test/octave.test/prefer/prefer-24.m
+%!assert (all (svd ([]) == zeros (0, 1)));
+
+%% test/octave.test/prefer/prefer-27.m
+%!test
+%! sp = save_precision ();
+%! save_precision (1);
+%! x = pi;
+%! nm = tmpnam ();
+%! save("-text", nm, "x");
+%! clear x;
+%! load (nm);
+%! unlink (nm);
+%! assert (x,3);
+%! save_precision (sp);
+
+%% test/octave.test/prefer/prefer-28.m
+%!test
+%! sp = save_precision ();
+%! save_precision (5);
+%! x = pi;
+%! nm = tmpnam ();
+%! save("-text", nm, "x");
+%! clear x;
+%! load (nm);
+%! unlink (nm);
+%! assert (x, 3.1416);
+%! save_precision (sp);
+
+%% FIXME: How to capture standard output for comparison? 
+%% test/octave.test/prefer/prefer-29.m
+%!function f ()
+%! 1
+%!endfunction
+%!#test
+%! sf = silent_functions ();
+%! silent_functions (0);
+%! f
+%! assert (??);
+%! silent_functions (sf);
+
+%% FIXME Same problem as above!!!
+%% test/octave.test/prefer/prefer-30.m
+%!function f ()
+%! 1
+%!endfunction
+%!#test
+%! sf = silent_functions ();
+%! silent_functions (1);
+%! f
+%! assert (??);
+%! silent_functions (sf);
+
+%% test/octave.test/prefer/prefer-32.m
+%!test
+%! wndz = warning ("query", "Octave:neg-dim-as-zero");
+%! warning ("on", "Octave:neg-dim-as-zero");
+%! fail ("eye (-1) == []", "warning");
+%! warning (wndz.state, "Octave:neg-dim-as-zero");
+
+%% test/octave.test/prefer/prefer-33.m
+%!test
+%! wndz = warning ("query", "Octave:neg-dim-as-zero");
+%! warning ("off", "Octave:neg-dim-as-zero");
+%! assert (all (size (eye (-1)) == [0, 0]));
+%! warning (wndz.state, "Octave:neg-dim-as-zero");
+
+%% test/octave.test/prefer/prefer-34.m
+%!test
+%! watv = warning ("query", "Octave:assign-as-truth-value");
+%! warning ("off", "Octave:assign-as-truth-value");
+%! if (x = 1) 1; endif
+%! warning (watv.state, "Octave:assign-as-truth-value");
+
+%% test/octave.test/prefer/prefer-35.m
+%!test
+%! watv = warning ("query", "Octave:assign-as-truth-value");
+%! warning ("on", "Octave:assign-as-truth-value");
+%! fail ("if (x = 1) 1; endif", "warning");
+%! warning (watv.state, "Octave:assign-as-truth-value");
+
+%% test/octave.test/prefer/prefer-38.m
+%!test
+%! wdbz = warning ("query", "Octave:divide-by-zero");
+%! warning ("off", "Octave:divide-by-zero");
+%! assert (isinf (1/0));
+%! warning (wdbz.state, "Octave:divide-by-zero");
+
+%% test/octave.test/prefer/prefer-39.m
+%!test
+%! wdbz = warning ("query", "Octave:divide-by-zero");
+%! warning ("on", "Octave:divide-by-zero");
+%! a = 1;
+%! b = 0;
+%! fail ("isinf (a/b);", "warning")
+%! warning (wdbz.state, "Octave:divide-by-zero");
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/range.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,74 @@
+## Copyright (C) 2007-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## Test values of range
+
+%!assert (full (1:9), [ 1 2 3 4 5 6 7 8 9 ])
+%!assert (full (1:0.4:3), [ 1.0 1.4 1.8 2.2 2.6 3.0 ])
+%!assert (full (9:1), zeros (1,0))
+%!assert (full (9:-1:1), [ 9 8 7 6 5 4 3 2 1 ])
+%!assert (full (1:-1:9), zeros (1,0))
+%!assert (full (1:1:1), 1)
+%!assert (full (i:2i:10i), zeros (1,0))
+
+## Test mixing integer range with other types
+
+%!shared expect, r, z
+%! expect = [ 1 2 3 4 5 6 7 8 9
+%!            0 0 0 0 0 0 0 0 0 ];
+%! z = zeros (1,9);
+%! r = 1:9;
+
+%!assert ([ r ; z                  ], expect)
+%!assert ([ r ; single(z)          ], single (expect))
+%!assert ([ r ; logical(z)         ], expect)
+%!assert ([ r ; sparse(z)          ], sparse (expect))
+%!assert ([ r ; sparse(logical(z)) ], sparse (expect))
+
+%!assert ([ r ; int8(z)            ], int8(expect))
+%!assert ([ r ; int16(z)           ], int16(expect))
+%!assert ([ r ; int32(z)           ], int32(expect))
+%!assert ([ r ; int64(z)           ], int64(expect))
+%!assert ([ r ; uint8(z)           ], uint8(expect))
+%!assert ([ r ; uint16(z)          ], uint16(expect))
+%!assert ([ r ; uint32(z)          ], uint32(expect))
+%!assert ([ r ; uint64(z)          ], uint64(expect))
+
+## Test mixing non-integer range with other types
+
+%!shared expect, r, z
+%! expect = [ 1.0 1.4 1.8 2.2 2.6 3.0
+%!            0   0   0   0   0   0   ];
+%! z = zeros (1,6);
+%! r = 1:0.4:3;
+
+%!assert ([ r ; z                  ], expect)
+%!assert ([ r ; single(z)          ], single (expect))
+%!assert ([ r ; logical(z)         ], expect)
+%!assert ([ r ; sparse(z)          ], sparse (expect))
+%!assert ([ r ; sparse(logical(z)) ], sparse (expect))
+
+%!assert ([ r ; int8(z)            ], int8(expect))
+%!assert ([ r ; int16(z)           ], int16(expect))
+%!assert ([ r ; int32(z)           ], int32(expect))
+%!assert ([ r ; int64(z)           ], int64(expect))
+%!assert ([ r ; uint8(z)           ], uint8(expect))
+%!assert ([ r ; uint16(z)          ], uint16(expect))
+%!assert ([ r ; uint32(z)          ], uint32(expect))
+%!assert ([ r ; uint64(z)          ], uint64(expect))
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/recursion.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,43 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/recursion/recursion-1.m
+%!function y = f (x)
+%!  if (x == 1)
+%!    y = x;
+%!    return;
+%!  else
+%!    y = x * f (x-1);
+%!  endif
+%!endfunction
+%!
+%!assert(f (5), 120);
+
+%% test/octave.test/recursion/recursion-2.m
+%!function y = f (x)
+%!  if (x == 1)
+%!    y = x;
+%!    return;
+%!  else
+%!    y = f (x-1) * x;
+%!  endif
+%!endfunction
+%!
+%!assert(f (5), 120);
+
+%%FIXME: Need test for maximum recursion depth
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/return.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,31 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/return/return-1.m
+%!function y = f ()
+%!  y = 1;
+%!  return;
+%!  y = 2;
+%!endfunction
+%!
+%!assert(f(), 1)
+
+%% test/octave.test/return/return-2.m
+%!test
+%! return;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/slice.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,180 @@
+## Copyright (C) 2007-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%!function x = set_slice (size, dim, slice)
+%!  x = ones (size);
+%!  switch dim
+%!    case 11
+%!      x(slice) = 2;
+%!    case 21
+%!      x(slice, :) = 2;
+%!    case 22
+%!      x(:, slice) = 2;
+%!    case 31
+%!      x(slice, :, :) = 2;
+%!    case 32
+%!      x(:, slice, :) = 2;
+%!    case 33
+%!      x(:, :, slice) = 2;
+%!    otherwise
+%!      error("invalid dim, '%d'", dim);
+%!  endswitch
+%!endfunction
+
+## size = [2 0]
+%!assert (set_slice ([2 0], 11, []), zeros ([2 0]))
+%!error id=Octave:invalid-resize set_slice ([2 0], 11, 1)
+%!error id=Octave:invalid-resize set_slice ([2 0], 11, 2)
+%!error id=Octave:invalid-resize set_slice ([2 0], 11, 3)
+%!assert (set_slice ([2 0], 21, []), zeros ([2 0]))
+%!assert (set_slice ([2 0], 21, 1), zeros ([2 0]))
+%!assert (set_slice ([2 0], 21, 2), zeros ([2 0]))
+%!assert (set_slice ([2 0], 21, 3), zeros ([3 0]))
+%!assert (set_slice ([2 0], 22, []), zeros ([2 0]))
+%!assert (set_slice ([2 0], 22, 1), [2 2]')
+%!assert (set_slice ([2 0], 22, 2), [0 0;2 2]')
+%!assert (set_slice ([2 0], 22, 3), [0 0;0 0;2 2]')
+%!assert (set_slice ([2 0], 31, []), zeros ([2 0]))
+%!assert (set_slice ([2 0], 31, 1), zeros ([2 0]))
+%!assert (set_slice ([2 0], 31, 2), zeros ([2 0]))
+%!assert (set_slice ([2 0], 31, 3), zeros ([3 0]))
+%!assert (set_slice ([2 0], 32, []), zeros ([2 0]))
+%!assert (set_slice ([2 0], 32, 1), [2 2]')
+%!assert (set_slice ([2 0], 32, 2), [0 0;2 2]')
+%!assert (set_slice ([2 0], 32, 3), [0 0;0 0;2 2]')
+%!assert (set_slice ([2 0], 33, []), zeros ([2 0]))
+%!assert (set_slice ([2 0], 33, 1), zeros ([2 0]))
+%!assert (set_slice ([2 0], 33, 2), zeros ([2 0 2]))
+%!assert (set_slice ([2 0], 33, 3), zeros ([2 0 3]))
+
+## size = [0 2]
+%!assert (set_slice ([0 2], 11, []), zeros ([0 2]))
+%!assert (set_slice ([0 2], 11, 1), 2)
+%!assert (set_slice ([0 2], 11, 2), [0, 2])
+%!assert (set_slice ([0 2], 11, 3), [0, 0, 2])
+%!assert (set_slice ([0 2], 21, []), zeros ([0 2]))
+%!assert (set_slice ([0 2], 21, 1), [2 2])
+%!assert (set_slice ([0 2], 21, 2), [0 0;2 2])
+%!assert (set_slice ([0 2], 21, 3), [0 0;0 0;2 2])
+%!assert (set_slice ([0 2], 22, []), zeros ([0 2]))
+%!assert (set_slice ([0 2], 22, 1), zeros ([0 2]))
+%!assert (set_slice ([0 2], 22, 2), zeros ([0 2]))
+%!assert (set_slice ([0 2], 22, 3), zeros ([0 3]))
+%!assert (set_slice ([0 2], 31, []), zeros ([0 2]))
+%!assert (set_slice ([0 2], 31, 1), [2 2])
+%!assert (set_slice ([0 2], 31, 2), [0 0;2 2])
+%!assert (set_slice ([0 2], 31, 3), [0 0;0 0;2 2])
+%!assert (set_slice ([0 2], 32, []), zeros ([0 2]))
+%!assert (set_slice ([0 2], 32, 1), zeros ([0 2]))
+%!assert (set_slice ([0 2], 32, 2), zeros ([0 2]))
+%!assert (set_slice ([0 2], 32, 3), zeros ([0 3]))
+%!assert (set_slice ([0 2], 33, []), zeros ([0 2]))
+%!assert (set_slice ([0 2], 33, 1), zeros ([0 2]))
+%!assert (set_slice ([0 2], 33, 2), zeros ([0 2 2]))
+%!assert (set_slice ([0 2], 33, 3), zeros ([0 2 3]))
+
+## size = [2 1]
+%!assert (set_slice ([2 1], 11, []), ones ([2 1]))
+%!assert (set_slice ([2 1], 11, 1), [2 1]')
+%!assert (set_slice ([2 1], 11, 2), [1 2]')
+%!assert (set_slice ([2 1], 11, 3), [1 1 2]')
+%!assert (set_slice ([2 1], 11, 4), [1 1 0 2]')
+%!assert (set_slice ([2 1], 21, []), ones ([2 1]))
+%!assert (set_slice ([2 1], 21, 1), [2 1]')
+%!assert (set_slice ([2 1], 21, 2), [1 2]')
+%!assert (set_slice ([2 1], 21, 3), [1 1 2]')
+%!assert (set_slice ([2 1], 21, 4), [1 1 0 2]')
+%!assert (set_slice ([2 1], 22, []), ones ([2 1]))
+%!assert (set_slice ([2 1], 22, 1), [2 2]')
+%!assert (set_slice ([2 1], 22, 2), [1 1;2 2]')
+%!assert (set_slice ([2 1], 22, 3), [1 1;0 0;2 2]')
+%!assert (set_slice ([2 1], 31, []), ones ([2 1]))
+%!assert (set_slice ([2 1], 31, 1), [2 1]')
+%!assert (set_slice ([2 1], 31, 2), [1 2]')
+%!assert (set_slice ([2 1], 31, 3), [1 1 2]')
+%!assert (set_slice ([2 1], 31, 4), [1 1 0 2]')
+%!assert (set_slice ([2 1], 32, []), ones ([2 1]))
+%!assert (set_slice ([2 1], 32, 1), [2 2]')
+%!assert (set_slice ([2 1], 32, 2), [1 1;2 2]')
+%!assert (set_slice ([2 1], 32, 3), [1 1;0 0;2 2]')
+%!assert (set_slice ([2 1], 33, []), ones ([2 1]))
+%!assert (set_slice ([2 1], 33, 1), [2 2]')
+%!assert (set_slice ([2 1], 33, 2), reshape ([1 1 2 2],[2 1 2]))
+%!assert (set_slice ([2 1], 33, 3), reshape ([1 1 0 0 2 2],[2 1 3]))
+
+## size = [1 2]
+%!assert (set_slice ([1 2], 11, []), full (ones ([1 2])))
+%!assert (set_slice ([1 2], 11, 1), [2 1])
+%!assert (set_slice ([1 2], 11, 2), [1 2])
+%!assert (set_slice ([1 2], 11, 3), [1 1 2])
+%!assert (set_slice ([1 2], 11, 4), [1 1 0 2])
+%!assert (set_slice ([1 2], 21, []), full (ones ([1 2])))
+%!assert (set_slice ([1 2], 21, 1), [2 2])
+%!assert (set_slice ([1 2], 21, 2), [1 1;2 2])
+%!assert (set_slice ([1 2], 21, 3), [1 1;0 0;2 2])
+%!assert (set_slice ([1 2], 22, []), full (ones ([1 2])))
+%!assert (set_slice ([1 2], 22, 1), [2 1])
+%!assert (set_slice ([1 2], 22, 2), [1 2])
+%!assert (set_slice ([1 2], 22, 3), [1 1 2])
+%!assert (set_slice ([1 2], 22, 4), [1 1 0 2])
+%!assert (set_slice ([1 2], 31, []), full (ones ([1 2])))
+%!assert (set_slice ([1 2], 31, 1), [2 2])
+%!assert (set_slice ([1 2], 31, 2), [1 1;2 2])
+%!assert (set_slice ([1 2], 31, 3), [1 1;0 0;2 2])
+%!assert (set_slice ([1 2], 32, []), full (ones ([1 2])))
+%!assert (set_slice ([1 2], 32, 1), [2 1])
+%!assert (set_slice ([1 2], 32, 2), [1 2])
+%!assert (set_slice ([1 2], 32, 3), [1 1 2])
+%!assert (set_slice ([1 2], 32, 4), [1 1 0 2])
+%!assert (set_slice ([1 2], 33, []), full (ones ([1 2])))
+%!assert (set_slice ([1 2], 33, 1), [2 2])
+%!assert (set_slice ([1 2], 33, 2), reshape ([1 1 2 2],[1 2 2]))
+%!assert (set_slice ([1 2], 33, 3), reshape ([1 1 0 0 2 2],[1 2 3]))
+
+## size = [2 2]
+%!assert (set_slice ([2 2], 11, []), ones ([2 2]))
+%!assert (set_slice ([2 2], 11, 1), [2 1;1 1])
+%!assert (set_slice ([2 2], 11, 2), [1 1;2 1])
+%!assert (set_slice ([2 2], 11, 3), [1 2;1 1])
+%!assert (set_slice ([2 2], 11, 4), [1 1;1 2])
+%!error id=Octave:invalid-resize set_slice ([2 2], 11, 5)
+%!error id=Octave:invalid-resize set_slice ([2 2], 11, 6)
+%!assert (set_slice ([2 2], 21, []), ones ([2 2]))
+%!assert (set_slice ([2 2], 21, 1), [2 2;1 1])
+%!assert (set_slice ([2 2], 21, 2), [1 1;2 2])
+%!assert (set_slice ([2 2], 21, 3), [1 1;1 1;2 2])
+%!assert (set_slice ([2 2], 21, 4), [1 1;1 1;0 0;2 2])
+%!assert (set_slice ([2 2], 22, []), ones ([2 2]))
+%!assert (set_slice ([2 2], 22, 1), [2 2;1 1]')
+%!assert (set_slice ([2 2], 22, 2), [1 1;2 2]')
+%!assert (set_slice ([ 2 2], 22, 3), [1 1;1 1;2 2]')
+%!assert (set_slice ([2 2], 22, 4), [1 1;1 1;0 0;2 2]')
+%!assert (set_slice ([2 2], 31, []), ones ([2 2]))
+%!assert (set_slice ([2 2], 31, 1), [2 2;1 1])
+%!assert (set_slice ([2 2], 31, 2), [1 1;2 2])
+%!assert (set_slice ( [2 2], 31, 3), [1 1;1 1;2 2])
+%!assert (set_slice ([2 2], 31, 4), [1 1;1 1;0 0;2 2])
+%!assert (set_slice ([2 2], 32, []), ones ([2 2]))
+%!assert (set_slice ([2 2], 32, 1), [2 2;1 1]')
+%!assert (set_slice ([2 2], 32, 2), [1 1;2 2]')
+%!assert (set_slice ([ 2 2], 32, 3), [1 1;1 1;2 2]')
+%!assert (set_slice ([2 2], 32, 4), [1 1;1 1;0 0;2 2]')
+%!assert (set_slice ([2 2], 33, []), ones ([2 2]))
+%!assert (set_slice ([2 2], 33, 1), [2 2;2 2])
+%!assert (set_slice ([2 2], 33, 2), reshape ([1 1 1 1 2 2 2 2],[2 2 2]))
+%!assert (set_slice ([ 2 2], 33, 3), reshape ([1 1 1 1 0 0 0 0 2 2 2 2],[2 2 3]))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/struct.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,266 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/struct/fieldnames-1.m
+%!test
+%! s.a = 1;
+%! c = fieldnames (s);
+%! assert (iscell (c) && strcmp (c{1}, "a"));
+
+%% test/octave.test/struct/fieldnames-2.m
+%!test
+%! s.a.b = 1;
+%! c = fieldnames (s.a);
+%! assert (iscell (c) && strcmp (c{1}, "b"));
+
+%% test/octave.test/struct/fieldnames-3.m
+%!error <Invalid call to fieldnames> fieldnames ();
+
+%% test/octave.test/struct/fieldnames-4.m
+%!test
+%! s.a = 1;
+%! fail ("fieldnames (s, 1)", "Invalid call to fieldnames");
+
+%% test/octave.test/struct/fieldnames-5.m
+%!error fieldnames (1);
+
+%% test/octave.test/struct/isfield-1.m
+%!test
+%! s.aaa = 1;
+%! s.a = 2;
+%! assert (isfield (s, "a"));
+
+%% test/octave.test/struct/isfield-2.m
+%!test
+%! s.aaa = 1;
+%! s.a = 2;
+%! assert (!(isfield (s, "b")));
+
+%% test/octave.test/struct/isfield-3.m
+%!error <Invalid call to isfield> isfield ();
+
+%% test/octave.test/struct/isfield-4.m
+%!test
+%! s.aaa = 1;
+%! s.a = 2;
+%! fail ("isfield (s, 'a', 3);", "Invalid call to isfield");
+
+%% test/octave.test/struct/isfield-5.m
+%!assert (isfield (1, "m") == 0);
+
+%% test/octave.test/struct/isfield-6.m
+%!test
+%! s.a = 2;
+%! assert (isfield (s, 2) == 0);
+
+%% test/octave.test/struct/isstruct-1.m
+%!assert (!(isstruct (1)))
+
+%% test/octave.test/struct/isstruct-2.m
+%!assert (!(isstruct ([1, 2])))
+
+%% test/octave.test/struct/isstruct-3.m
+%!assert (!(isstruct ([])))
+
+%% test/octave.test/struct/isstruct-4.m
+%!assert (!(isstruct ([1, 2; 3, 4])))
+
+%% test/octave.test/struct/isstruct-5.m
+%!assert (!(isstruct ("t")))
+
+%% test/octave.test/struct/isstruct-6.m
+%!assert (!(isstruct ("test")))
+
+%% test/octave.test/struct/isstruct-7.m
+%!assert (!(isstruct (["test"; "ing"])))
+
+%!assert (!(isstruct ({1})))
+
+%% test/octave.test/struct/isstruct-8.m
+%!test
+%! s.a = 1;
+%! assert (isstruct (s));
+
+%% test/octave.test/struct/isstruct-9.m
+%!test
+%! s.a.b = 1;
+%! assert (isstruct (s.a));
+
+%% test/octave.test/struct/isstruct-10.m
+%!error <Invalid call to isstruct> isstruct ();
+
+%% test/octave.test/struct/isstruct-11.m
+%!test
+%! s.a = 1;
+%! fail ("isstruct (s, 1)", "Invalid call to isstruct");
+
+## increment element of matrix stored in struct array field
+%!test
+%! a = struct ("c", {[1, 2, 3], [4, 5, 6], [7, 8, 9]});
+%! a(2).c(3)++;
+%! assert (a(2).c, [4, 5, 7]);
+
+## create struct array by assignment to cs-list
+%!test
+%! [a(1:2).x] = deal (1, 3);
+%! assert (a, struct ("x", {1, 3}));
+%! assert ({a(1:2).x}, {1, 3});
+
+## assign to subrange of struct array field
+%!test
+%! b = struct ("name", {"a", "b", "c"; "d", "e", "f"}, "value", 100);
+%! [b(1:2, [1,3]).name] = deal ("aaa", "ddd", "ccc", "fff");
+%! assert ({b.name}, {"aaa", "ddd", "b", "e", "ccc", "fff"});
+
+## index into nested struct arrays
+%!test
+%! a = struct ("name", {"a", "b", "c"; "d", "e", "f"}, "value", 0);
+%! a(2).value = a;
+%! assert (a(2).value(2,3).name, "f");
+
+## assign to subrange of field in nested struct array
+%!test
+%! b = struct ("name", {"a", "b", "c"; "d", "e", "f"}, "value", 0);
+%! b(3, 1).value = b;
+%! [b(3, 1).value(1, [1, 3]).name] = deal ("aaa", "ccc");
+%! assert (size (b), [3, 3]);
+%! assert (b(3,1).value(1, 3).name, "ccc");
+
+## test 4-dimensional struct array
+%!test
+%! c(4, 4, 4, 4).name  = "a";
+%! c(3, 3, 3, 3).value = 1;
+%! assert (c(2,2,2,2), struct ("name", [], "value", []));
+
+## assign to subrange of field in 4D struct array
+%!test
+%! c(4, 4, 4, 4).name  = "a";
+%! c(3, 3, 3, 3).value = 1;
+%! [c([1, 3], 2, :, [3, 4]).value] = deal (1);
+%! assert (length(find([c.value] == 1)), 17);
+%! assert (length(find([c.value])), 17);
+
+## swap elements of struct array
+%!test
+%! b = struct ("name", {"a", "b", "c"; "d", "e", "f"}, "value", 0);
+%! [b([2, 1], [3, 1]).name] = deal (b([1, 2], [1, 2]).name);
+%! assert ({b.name}, {"e", "b", "b", "e", "d", "a"});
+
+## test internal ordering of struct array fields
+%!test
+%! c(4, 4, 4, 4).value = 3;
+%! c(1, 2, 3, 4).value = 2;
+%! c(3, 3, 3, 3).value = 1;
+%! d = reshape ({c.value}, size(c));
+%! assert ([d{4, 4, 4, 4}, d{1, 2, 3, 4}, d{3, 3, 3, 3}],
+%!         [3, 2, 1]);
+
+## test assignment to mixed cs-list of field element subranges
+%!test
+%! b = struct ("name", {"a", "b", "c"; "d", "e", "f"}, "value", 100);
+%! [b(1:2, [1, 3]).name, b(2, 1:3).value] = ...
+%!   deal (1, 2, 3, 4, "5", "6", "7");
+%! assert ({b.name}, {1, 2, "b", "e", 3, 4});
+%! assert ({b.value}, {100, "5", 100, "6", 100, "7"});
+
+%!error <a cs-list cannot be further indexed>
+%! [a(1:3).x] = deal ([1, 5], [3, 7], [8, 9]);
+%! [a(2:3).x(2)] = deal (10, 11);
+
+%!error <a cs-list cannot be further indexed>
+%! [a(1:3).x] = deal ([1, 5], [3, 7], [8, 9]);
+%! a(2:3).x(2);
+
+%!error id=Octave:index-out-of-bounds
+%! a(1).x.x = 1;
+%! a(2).x;
+
+%!error <invalid number of output arguments for constant expression>
+%! a = struct ("value", {1, 2, 3, 4, 5});
+%! [a(2:4).value] = 1;
+
+%!error <invalid assignment to cs-list outside multiple assignment>
+%! c(4, 4, 4, 4).name  = "a";
+%! c(3, 3, 3, 3).value = 1;
+%! c([1, 3], 2, :, [3, 4]).value = 1;
+
+## test lazy copying in structs: nested assignment to self
+%!test
+%! a.a = 1;
+%! a.b = a;
+%! a.b.c = a;
+%! assert (a.b.c.b, struct ("a", 1));
+
+## test lazy copying in structs: indirect nested assignment to self
+%!test
+%! a.a = 1;
+%! a.b = 2;
+%! b.c = a;
+%! b.d = 3;
+%! c.d = b;
+%! c.e = 4;
+%! a.b = c;
+%! a.b.e = a;
+%! assert (a.b.e.b.d.c, struct ("a", 1, "b", 2));
+
+## test lazy copying in structs: nested assignment via function
+%!function aa = do_nest (a);
+%!  aa   = a;
+%!  aa.b = a;
+%!endfunction
+%!test
+%! a.c = 1;
+%! a = do_nest (a);
+%! a = do_nest (a);
+%! a = do_nest (a);
+%! assert (a.b.b.b, struct ("c", 1));
+
+## test lazy copying in structs: nested assignment via function
+%!function aa = do_nest (a);
+%!  aa   = a;
+%!  aa.b = a;
+%!  aa.b.c = aa;
+%!endfunction
+%!test
+%! a.c = 1;
+%! a = do_nest (a);
+%! a = do_nest (a);
+%! a = do_nest (a);
+%! assert (a.b.c.b.b.c.b.b.c.b, struct ("c", 1));
+
+## test lazy copying in structs: nested assignment on different levels.
+%!test
+%! a.b = 1;
+%! b.c = a;
+%! b.d.e = a;
+%! b.f.g.h = a;
+%! b.i.j.k.l = a;
+%! a.m = b;
+%! a.m.c.b = a;
+%! assert (a.m.c.b.m.i.j.k.l, struct ("b", 1));
+
+## test indexed assignment into empty struct array
+%!test
+%! s = resize (struct (), 3,2);
+%! s(3).foo = 42;
+%! assert (s(3), struct ("foo", 42));
+
+%!error id=Octave:index-out-of-bounds
+%! s = resize (struct (),3,2);
+%! s(3).foo = 42;
+%! s(7);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/switch.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,95 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/switch/switch-1.m
+%!test
+%! a = 1;
+%! b = 2;
+%! c = 3;
+%! 
+%! switch 0 case 1 x = a; case 2 x = b; otherwise x = c; endswitch
+%! switch 1 case 1 y = a; case 2 y = b; otherwise y = c; endswitch
+%! switch 2 case 1 z = a; case 2 z = b; otherwise z = c; endswitch
+%! switch 3 case 1 p = a; case 2 p = b; otherwise p = c; endswitch
+%! 
+%! assert (x == c && y == a && z == b && p == c);
+
+%% test/octave.test/switch/switch-2.m
+%!test
+%! a = 1;
+%! b = 2;
+%! c = 3;
+%! 
+%! x = zeros (1, 4);
+%! 
+%! k = 1;
+%! 
+%! for i = 0:3
+%! switch (i)
+%!   case a
+%!    x(k) = a;
+%!   case b
+%!    x(k) = b;
+%!   otherwise
+%!    x(k) = c;
+%!   endswitch
+%!   k++;
+%! endfor
+%! 
+%! assert (all (x == [3, 1, 2, 3]));
+
+%% test/octave.test/switch/switch-3.m
+%!test
+%! a = 1;
+%! b = 2;
+%! c = 3;
+%! 
+%! x = zeros (1, 4);
+%! 
+%! k = 1;
+%! 
+%! for i = 0:3
+%!   switch (i)
+%!   case a
+%!    x(k) = a;
+%!   endswitch
+%!   k++;
+%! endfor
+%! 
+%! assert (all (x == [0, 1, 0, 0]));
+
+%!test
+%! a = 1;
+%!
+%! switch 1
+%! otherwise
+%!   a = 2;
+%! endswitch
+%! 
+%! assert (a == 2);
+
+
+%% test/octave.test/switch/switch-4.m
+%!error <syntax error> eval ("switch endswitch")
+
+%% test/octave.test/switch/switch-5.m
+%!error <syntax error> eval ("switch case endswitch")
+
+%% test/octave.test/switch/switch-6.m
+%!error <syntax error> eval ("switch 1 default 1; endswitch")
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/system.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,489 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/system/cputime-1.m
+%!test
+%! [t1, u1, s1] = cputime ();
+%! for i = 1:200
+%!   sin (i);
+%! endfor
+%! [t2, u2, s2] = cputime ();
+%! assert (t1, u1 + s1);
+%! assert (t2 == u2 + s2);
+%! assert (t2 >= t1);
+%! assert (u2 >= u2);
+%! assert (s2 >= s2);
+%!#assert (t1 == u1 + s1 && t2 == u2 + s2 && t2 >= t1 && u2 >= u2 && s2 >= s2);
+
+%% test/octave.test/system/tic-toc-1.m
+%!test
+%! tic ();
+%! sleep (2);
+%! assert (toc () > 0);
+
+%% test/octave.test/system/pause-1.m
+%!test
+%! pause (0);
+%! __printf_assert__ ("ok\n");
+%! assert (__prog_output_assert__ ("ok"));
+
+%% test/octave.test/system/pause-2.m
+%!error <Invalid call to pause> pause (1, 2)
+
+%% test/octave.test/system/sleep-1.m
+%!test
+%! sleep (0);
+%! __printf_assert__ ("ok\n");
+%! assert (__prog_output_assert__ ("ok"));
+
+%% test/octave.test/system/sleep-2.m
+%!error <Invalid call to sleep> sleep ()
+
+%% test/octave.test/system/sleep-3.m
+%!error <Invalid call to sleep> sleep (1, 2)
+
+%% test/octave.test/system/usleep-1.m
+%!test
+%! usleep (0);
+%! __printf_assert__ ("ok\n");
+%! assert (__prog_output_assert__ ("ok"));
+
+%% test/octave.test/system/usleep-2.m
+%!error <Invalid call to usleep> usleep ()
+
+%% test/octave.test/system/usleep-3.m
+%!error <Invalid call to usleep> usleep (1, 2)
+
+%% test/octave.test/system/rename-1.m
+%!test
+%! from = tmpnam ();
+%! to = tmpnam ();
+%! id = fopen (from, "wb");
+%! if (id > 0 && fclose (id) == 0)
+%!   [s, e] = stat (from);
+%!   if (! e)
+%!     if (rename (from, to) == 0)
+%!       [s, e] = stat (from);
+%!       if (e < 0)
+%!         [s, e] = stat (to);
+%!         assert (e == 0);
+%!         unlink (to);
+%!       endif
+%!     endif
+%!   endif
+%! endif
+
+%% test/octave.test/system/rename-2.m
+%!error <Invalid call to rename> rename ()
+
+%% test/octave.test/system/rename-3.m
+%!error <Invalid call to rename> rename ("foo", "bar", 1)
+
+%% test/octave.test/system/unlink-1.m
+%!test
+%! nm = tmpnam ();
+%! if ((id = fopen (nm, "wb")) > 0)
+%!   [s, err] = stat (nm);
+%!   if (! err && fclose (id) == 0 && unlink (nm) == 0)
+%!     [s, err] = stat (nm);
+%!     assert (err < 0);
+%!   endif
+%! endif
+
+%% test/octave.test/system/unlink-2.m
+%!error <Invalid call to unlink> unlink ()
+
+%% test/octave.test/system/unlink-3.m
+%!error <Invalid call to unlink> unlink ("foo", 1)
+
+%% test/octave.test/system/readdir-1.m
+%!test
+%! [files, status, msg] = readdir (filesep);
+%! assert (iscell (files) && status == 0 && strcmp (msg, ""));
+
+%% test/octave.test/system/readdir-2.m
+%!error <Invalid call to readdir> readdir ()
+
+%% test/octave.test/system/readdir-3.m
+%!error <Invalid call to readdir> readdir ("foo", 1)
+
+%% test/octave.test/system/mk-rm-dir-1.m
+%!test
+%! nm = tmpnam ();
+%! e1 = mkdir (nm);
+%! [s2, e2] = stat (nm);
+%! e3 = rmdir (nm);
+%! [s4, e4] = stat (nm);
+%! assert ((e1 && strcmp (s2.modestr(1), "d") && e3 && e4 < 0));
+
+%% test/octave.test/system/mkdir-1.m
+%!error <Invalid call to mkdir> mkdir ()
+
+%% test/octave.test/system/mkdir-2.m
+%!error <Invalid call to mkdir> mkdir ("foo", 1, 2)
+
+%% test/octave.test/system/rmdir-1.m
+%!error <Invalid call to rmdir> rmdir ()
+
+%% test/octave.test/system/rmdir-2.m
+%!test
+%! crr = confirm_recursive_rmdir ();
+%! confirm_recursive_rmdir (0);
+%! assert (!rmdir ("foo", "s"));
+%! confirm_recursive_rmdir (crr);
+
+%% test/octave.test/system/umask-1.m
+%!test
+%! orig_umask = umask (0);
+%! nm = tmpnam ();
+%! id = fopen (nm, "wb");
+%! s1 = stat (nm);
+%! fclose (id);
+%! unlink (nm);
+%! 
+%! umask (777);
+%! nm = tmpnam ();
+%! id = fopen (nm, "wb");
+%! s2 = stat (nm);
+%! fclose (id);
+%! unlink (nm);
+%! 
+%! assert (deblank (s1.modestr), "-rw-rw-rw-");
+%! assert (deblank (s2.modestr), "----------");
+%! # Restore original umask value
+%! umask (orig_umask);
+
+%% test/octave.test/system/umask-2.m
+%!error <Invalid call to umask> umask ()
+
+%% test/octave.test/system/umask-3.m
+%!error <Invalid call to umask> umask (1, 2)
+
+%% test/octave.test/system/stat-1.m
+%!test
+%! [s, err, msg] = stat (filesep);
+%! assert ((err == 0
+%! && isstruct (s)
+%! && isfield (s, "dev")
+%! && isfield (s, "ino")
+%! && isfield (s, "modestr")
+%! && isfield (s, "nlink")
+%! && isfield (s, "uid")
+%! && isfield (s, "gid")
+%! && isfield (s, "size")
+%! && isfield (s, "atime")
+%! && isfield (s, "mtime")
+%! && isfield (s, "ctime")
+%! && ischar (msg)));
+
+%% test/octave.test/system/stat-2.m
+%!error <Invalid call to stat> stat ()
+
+%% test/octave.test/system/stat-3.m
+%!error <Invalid call to stat> stat ("foo", 1)
+
+%% test/octave.test/system/lstat-1.m
+%!test
+%! [s, err, msg] = lstat (filesep);
+%! assert ((err == 0
+%! && isstruct (s)
+%! && isfield (s, "dev")
+%! && isfield (s, "ino")
+%! && isfield (s, "modestr")
+%! && isfield (s, "nlink")
+%! && isfield (s, "uid")
+%! && isfield (s, "gid")
+%! && isfield (s, "size")
+%! && isfield (s, "atime")
+%! && isfield (s, "mtime")
+%! && isfield (s, "ctime")
+%! && ischar (msg)));
+
+%% test/octave.test/system/lstat-2.m
+%!error <Invalid call to lstat> lstat ()
+
+%% test/octave.test/system/lstat-3.m
+%!error <Invalid call to lstat> lstat ("foo", 1)
+
+%% test/octave.test/system/glob-1.m
+%!assert (iscell (glob ([filesep "*"])))
+
+%% test/octave.test/system/glob-2.m
+%!error <Invalid call to glob> glob ()
+
+%% test/octave.test/system/glob-3.m
+%!error <Invalid call to glob> glob ("foo", 1)
+
+%% test/octave.test/system/fnmatch-1.m
+%!test
+%! string_fill_char = setstr (0);
+%! assert ((fnmatch ("a*a", {"aba"; "xxxba"; "aa"}) == [1; 0; 1]
+%! && fnmatch ({"a*a"; "b*b"}, "bob")
+%! && fnmatch ("x[0-5]*", {"x1"; "x6"}) == [1; 0]
+%! && fnmatch ("x[0-5]*", {"x1"; "x6"; "x001"}) == [1; 0; 1]
+%! && fnmatch ("x???y", {"xabcy"; "xy"}) == [1; 0]));
+
+%% test/octave.test/system/fnmatch-2.m
+%!error <Invalid call to fnmatch> fnmatch ()
+
+%% test/octave.test/system/fnmatch-3.m
+%!error <Invalid call to fnmatch> fnmatch ("foo", "bar", 3)
+
+%% test/octave.test/system/file_in_path-1.m
+%!assert (ischar (file_in_path (path (), "date.m")))
+
+%% test/octave.test/system/file_in_path-2.m
+%!error <invalid option> file_in_path ("foo", "bar", 1)
+
+%% test/octave.test/system/file_in_path-3.m
+%!error <Invalid call to file_in_path> file_in_path ()
+
+%% test/octave.test/system/file_in_path-4.m
+%!error <Invalid call to file_in_path> file_in_path ("foo", "bar", "baz", "ooka")
+
+%% test/octave.test/system/tilde_expand-1.m
+%!testif HAVE_GETPWUID
+%! x = getpwuid (getuid ());
+%! assert ((strcmp (x.dir, tilde_expand ("~"))
+%! && strcmp (x.dir, tilde_expand (sprintf ("~%s", x.name)))
+%! && strcmp ("foobar", tilde_expand ("foobar"))));
+
+%% test/octave.test/system/tilde_expand-2.m
+%!error <Invalid call to tilde_expand> tilde_expand ()
+
+%% test/octave.test/system/tilde_expand-3.m
+%!error <Invalid call to tilde_expand> tilde_expand ("str", 2)
+
+%% test/octave.test/system/getpgrp-1.m
+%!testif HAVE_GETPGRP
+%! assert (getpgrp () > 0);
+
+%% test/octave.test/system/getpgrp-2.m
+%!error <... getpgrp> getpgrp (1)
+
+%% test/octave.test/system/getpid-1.m
+%!assert (getpid () > 0)
+
+%% test/octave.test/system/getpid-2.m
+%!error <... getpid> getpid (1)
+
+%% test/octave.test/system/getppid-1.m
+%!testif HAVE_GETPPID
+%! assert (getppid () > 0);
+
+%% test/octave.test/system/getppid-2.m
+%!error <... getppid> getppid (1)
+
+%% test/octave.test/system/geteuid-1.m
+%!assert (geteuid () >= 0)
+
+%% test/octave.test/system/geteuid-2.m
+%!error <... geteuid> geteuid (1)
+
+%% test/octave.test/system/getuid-1.m
+%!assert (getuid () >= 0)
+
+%% test/octave.test/system/getuid-2.m
+%!error <... getuid> getuid (1)
+
+%% test/octave.test/system/getegid-1.m
+%!assert (getegid () >= 0)
+
+%% test/octave.test/system/getegid-2.m
+%!error <... getegid> getegid (1)
+
+%% test/octave.test/system/getgid-1.m
+%!assert (getgid () >= 0)
+
+%% test/octave.test/system/getgid-2.m
+%!error <... getgid> getgid (1)
+
+%% test/octave.test/system/getenv-1.m
+%!assert (getenv ("HOME"), tilde_expand ("~"))
+
+%% test/octave.test/system/getenv-2.m
+%!error <Invalid call to getenv> getenv ()
+
+%% test/octave.test/system/getenv-3.m
+%!error <Invalid call to getenv> getenv ("foo", 1)
+
+%% test/octave.test/system/getenv-4.m
+%!test
+%! wns = warning ("query", "Octave:num-to-str");
+%! warning ("on", "Octave:num-to-str");
+%! fail ("getenv (1)", "warning");
+%! warning (wns.state, "Octave:num-to-str");
+
+%% test/octave.test/system/putenv-1.m
+%!test
+%! putenv ("foobar", "baz");
+%! assert (getenv ("foobar"), "baz");
+
+%% test/octave.test/system/putenv-2.m
+%!error <Invalid call to putenv> putenv ()
+
+%% test/octave.test/system/putenv-3.m
+%!error <Invalid call to putenv> putenv ("foo", "bar", 1)
+
+%% test/octave.test/system/putenv-4.m
+%!test
+%! wns = warning ("query", "Octave:num-to-str");
+%! warning ("on", "Octave:num-to-str");
+%! fail ("putenv (1, 2)","warning");
+%! warning (wns.state, "Octave:num-to-str");
+
+%% test/octave.test/system/cd-1.m
+%!test
+%! xdir = pwd ();
+%! cd /
+%! d1 = pwd ();
+%! cd (xdir);
+%! if (ispc () && ! isunix ())
+%!   # should be a drive letter
+%!   assert (length (d1), 3);
+%!   assert (d1(2), ":");
+%!   assert (d1(3), "\\");
+%! else
+%!   assert ("/", d1);
+%! endif
+%! assert (pwd(), xdir);
+
+%% test/octave.test/system/cd-2.m
+%!error cd (1)
+
+%% test/octave.test/system/pwd-1.m
+%!assert (ischar (pwd ()))
+
+%% test/octave.test/system/getpwent-1.m
+%!testif HAVE_GETPWENT
+%! s = getpwent ();
+%! endpwent (); 
+%! assert ((isstruct (s)
+%! && isfield (s, "name")
+%! && isfield (s, "passwd")
+%! && isfield (s, "uid")
+%! && isfield (s, "gid")
+%! && isfield (s, "gecos")
+%! && isfield (s, "dir")
+%! && isfield (s, "shell")));
+
+%% test/octave.test/system/getpwent-2.m
+%!error <Invalid call to getpwent> getpwent (1)
+
+%% test/octave.test/system/getpwuid-1.m
+%!testif HAVE_GETPWUID
+%! x = getpwent ();
+%! y = getpwuid (x.uid);
+%! endpwent (); 
+%! assert (strcmp (x.name, y.name) && x.uid == y.uid && x.gid == y.gid);
+
+%% test/octave.test/system/getpwuid-2.m
+%!error <Invalid call to getpwuid> getpwuid ()
+
+%% test/octave.test/system/getpwuid-3.m
+%!error <Invalid call to getpwuid> getpwuid (1, 2)
+
+%% test/octave.test/system/getpwnam-1.m
+%!testif HAVE_GETPWNAM
+%! x = getpwent ();
+%! y = getpwnam (x.name);
+%! endpwent (); 
+%! assert (strcmp (x.name, y.name) && x.uid == y.uid && x.gid == y.gid);
+
+%% test/octave.test/system/getpwnam-2.m
+%!error <Invalid call to getpwnam> getpwnam ()
+
+%% test/octave.test/system/getpwnam-3.m
+%!error <Invalid call to getpwnam> getpwnam ("foo", 1)
+
+%% test/octave.test/system/setpwent-1.m
+%!testif HAVE_SETPWENT
+%! x = getpwent ();
+%! setpwent ();
+%! y = getpwent ();
+%! endpwent (); 
+%! assert (strcmp (x.name, y.name) && x.uid == y.uid && x.gid == y.gid);
+
+%% test/octave.test/system/setpwent-2.m
+%!error <Invalid call to setpwent> setpwent (1)
+
+%% test/octave.test/system/endpwent-1.m
+%!error <Invalid call to endpwent> endpwent (1)
+
+%% test/octave.test/system/getgrent-1.m
+%!testif HAVE_GETGRENT
+%! x = getgrent ();
+%! endgrent ();
+%! assert ((isstruct (x)
+%! && isfield (x, "name")
+%! && isfield (x, "passwd")
+%! && isfield (x, "gid")
+%! && isfield (x, "mem")));
+
+%% test/octave.test/system/getgrent-2.m
+%!error <Invalid call to getgrent> getgrent (1)
+
+%% test/octave.test/system/getgrgid-1.m
+%!testif HAVE_GETGRGID
+%! x = getgrent ();
+%! y = getgrgid (x.gid);
+%! endgrent ();
+%! assert (strcmp (x.name, y.name) && x.gid == y.gid);
+
+%% test/octave.test/system/getgrgid-2.m
+%!error <Invalid call to getgrgid> getgrgid ()
+
+%% test/octave.test/system/getgrgid-3.m
+%!error <Invalid call to getgrgid> getgrgid (1, 2)
+
+%% test/octave.test/system/getgrnam-1.m
+%!testif HAVE_GETGRNAM
+%! x = getgrent ();
+%! y = getgrnam (x.name);
+%! endgrent ();
+%! assert (strcmp (x.name, y.name) && x.gid == y.gid);
+
+%% test/octave.test/system/getgrnam-2.m
+%!error <Invalid call to getgrnam> getgrnam ()
+
+%% test/octave.test/system/getgrnam-3.m
+%!error <Invalid call to getgrnam> getgrnam ("foo", 1)
+
+%% test/octave.test/system/setgrent-1.m
+%!testif HAVE_SETGRENT
+%! x = getgrent ();
+%! setgrent ();
+%! y = getgrent ();
+%! endgrent ();
+%! assert (strcmp (x.name, y.name) && x.gid == y.gid);
+
+%% test/octave.test/system/setgrent-2.m
+%!error <Invalid call to setgrent> setgrent (1)
+
+%% test/octave.test/system/endgrent-1.m
+%!error <Invalid call to endgrent> endgrent (1)
+
+%% test/octave.test/system/isieee-1.m
+%!assert (isieee () == 1 || isieee () == 0)
+
+%% test/octave.test/system/octave_config_info-1.m
+%!assert (isstruct (octave_config_info ()))
+
+%% test/octave.test/system/getrusage-1.m
+%!assert (isstruct (getrusage ()))
+
--- a/test/test_args.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,236 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-########################################
-## No inputs or no outputs
-
-## no input or output arguments
-%!function f ()
-%!  assert (nargin, 0);
-%!  assert (nargout, 0);
-%!endfunction
-%!test
-%! f;
-
-## one input with two possible inputs
-%!function f (x, y)
-%!  assert (nargin, 1);
-%!  assert (nargout, 0);
-%!endfunction
-%!test
-%! f (1);
-
-## no inputs, one of multiple outputs
-%!function [x, y] = f ()
-%!  assert (nargin, 0);
-%!  assert (nargout, 1);
-%!  x = 2;
-%!endfunction
-%!test
-%! assert (f (), 2);
-
-## one of multiple inputs, one of multiple outputs
-%!function [x, y] = f (a, b)
-%!  assert (nargin, 1);
-%!  assert (nargout, 1);
-%!  x = a;
-%!endfunction
-%!test
-%! assert (f (1), 1);
-
-########################################
-## Varargin, varargout
-
-## varargin and varargout with no inputs or outputs
-%!function [varargout] = f (varargin)
-%!  assert (nargin, 0);
-%!  assert (nargout, 0);
-%!endfunction
-%!test
-%! f;
-
-## varargin and varargout with one input
-%!function [varargout] = f (x, varargin)
-%!  assert (nargin, 1);
-%!  assert (nargout, 0);
-%!endfunction
-%!test
-%! f (1);
-
-## varargin and varargout with one output
-%!function [x, varargout] = f (varargin)
-%!  assert (nargin, 0);
-%!  assert (nargout, 1);
-%!  x = 2;
-%!endfunction
-%!test
-%! assert (f (), 2);
-
-## varargin and varargout with one input and output
-%!function [varargout] = f (varargin)
-%!  assert (nargin, 1);
-%!  assert (nargout, 1);
-%!  varargout{1} = varargin{1};
-%!endfunction
-%!test
-%! assert (f (1), 1);
-
-## multiple inputs, multiple outputs, but not all of either
-## WARNING: The original test did not assign the outputs, it just
-## requested them, and I think that is supposed to be an error.  It also
-## still has a non-assigned output argument.
-%!function [x, y, z] = f (a, b, c, d, e)
-%!  assert (nargin, 4);
-%!  assert (nargout, 2);
-%!  x = a;
-%!  y = b;
-%!endfunction
-%!test
-%! [s, t] = f (1, 2, 3, 4);
-%! assert ([s t], [1 2]);
-
-## Fully used varargin and varargout
-%!function [varargout] = f (varargin)
-%!  assert (nargin, 3);
-%!  assert (nargout, 4);
-%!  varargout{1} = varargin{1};
-%!  varargout{2} = varargin{2};
-%!  varargout{3} = varargin{3};
-%!  varargout{4} = 4;
-%!endfunction
-%!test
-%! [s, t, u, v] = f (1, 2, 3);
-%! assert ([s t u v], [1 2 3 4]);
-
-## Test default arguments
-## numeric
-%!function f (x = 0)
-%!  assert (x, 0);
-%!endfunction
-%!test
-%!  f()
-
-## numeric vector (spaces)
-%!function f (x = [0 1 2])
-%!  assert (x, [0 1 2]);
-%!endfunction
-%!test
-%!  f()
-
-## numeric vector (range)
-%!function f (x = 1:3)
-%!  assert (x, 1:3);
-%!endfunction
-%!test
-%!  f()
-
-## numeric vector (commas)
-%!function f (x = [0,1,2])
-%!  assert (x, [0 1 2]);
-%!endfunction
-%!test
-%!  f()
-
-## numeric vector (commas and spaces)
-%!function f (x = [0, 1, 2])
-%!  assert (x, [0 1 2]);
-%!endfunction
-%!test
-%!  f()
-
-## numeric matrix
-%!function f (x = [0, 1, 2;3, 4, 5])
-%!  assert (x, [0 1 2;3 4 5]);
-%!endfunction
-%!test
-%!  f()
-
-## empty cell
-%!function f (x = {})
-%!  assert (x, {});
-%!endfunction
-%!test
-%!  f()
-
-## full cell
-%!function f (x = {1})
-%!  assert (x, {1});
-%!endfunction
-%!test
-%!  f()
-
-## many cells
-%!function f (x = {1 'a' "b" 2.0 struct("a", 3)})
-%!  assert (x, {1 'a' "b" 2.0 struct("a", 3)});
-%!endfunction
-%!test
-%!  f()
-
-## struct
-%!function f (x = struct("a", 3))
-%!  assert (x, struct ("a", 3));
-%!endfunction
-%!test
-%!  f()
-
-## char (double quotes)
-%!function f (x = "a")
-%!  assert (x, "a");
-%!endfunction
-%!test
-%!  f()
-
-## char (single quotes)
-%!function f (x = 'a')
-%!  assert (x, "a");
-%!endfunction
-%!test
-%!  f()
-
-## char (string, double quotes)
-%!function f (x = "abc123")
-%!  assert (x, "abc123");
-%!endfunction
-%!test
-%!  f()
-
-## char (string, double quotes, punctuation)
-%!function f (x = "abc123`1234567890-=~!@#$%^&*()_+[]{}|;':\",./<>?\\")
-%!  assert (x, "abc123`1234567890-=~!@#$%^&*()_+[]{}|;':\",./<>?\\");
-%!endfunction
-%!test
-%!  f()
-
-## Function handle (builtin)
-%!function f (x = @sin)
-%!  finfo = functions (x);
-%!  fname = finfo.function;
-%!  assert (isa (x, "function_handle") && strcmp (fname, "sin"));
-%!endfunction
-%!test
-%!  f()
-
-## Function handle (anonymous)
-%!function f (x = @(x) x.^2)
-%!  finfo = functions (x);
-%!  ftype = finfo.type;
-%!  assert (isa (x, "function_handle") && strcmp (ftype, "anonymous"));
-%!endfunction
-%!test
-%!  f()
-
--- a/test/test_bug_31371.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-%!test
-%! % Work around MATLAB bug where f(x)(y) is invalid syntax
-%! % (This bug does not apply to Octave)
-%!
-%! C = @(fcn,x) fcn(x);
-%! C2 = @(fcn,x,y) fcn(x,y);
-%! 
-%! % Church Booleans
-%! T = @(t,f) t;
-%! F = @(t,f) f;
-%! 
-%! % Church Numerals
-%! Zero  = @(fcn,x) x;
-%! One   = @(fcn,x) fcn(x);
-%! Two   = @(fcn,x) fcn(fcn(x));
-%! Three = @(fcn,x) fcn(fcn(fcn(x)));
-%! Four  = @(fcn,x) fcn(fcn(fcn(fcn(x))));
-%! 
-%! % Arithmetic Operations
-%! Inc = @(a) @(f,x) f(a(f,x)); % Increment
-%! Add = @(a,b) @(f,x) a(f,b(f,x));
-%! Mult = @(a,b) @(f,x) a(@(x) b(f,x),x);
-%! Dec = @(a) @(f,x) C(a(@(g) @(h) h(g(f)), @(u) x), @(u) u); % Decrement
-%! Sub = @(a,b) b(Dec, a);
-%! 
-%! % Renderer - Convert church numeral to "real" number
-%! Render = @(n) n(@(n) n+1,0);
-%! 
-%! % Predicates
-%! Iszero = @(n) n(@(x) F, T);
-%! 
-%! % Y combinator implements recursion
-%! Ycomb = @(f) C(@(g) f(@(x) C(g(g), x)), ...
-%!                @(g) f(@(x) C(g(g), x)));
-%!
-%! Factorial = Ycomb(@(f) @(n) C(C2(Iszero(n), ...
-%!                   @(d) One, @(d) Mult(n, f(Dec(n)))),0));
-%! 
-%! assert (Render (Factorial (Two)), 2)
-%! assert (Render (Factorial (Three)), 6)
-%! assert (Render (Factorial (Four)), 24)
--- a/test/test_diag_perm.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,265 +0,0 @@
-## Copyright (C) 2009-2012 E. Jason Riedy
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-########################################
-## Permutation matrices
-
-## row permutation
-%!test
-%! n = 5;
-%! A = rand (n);
-%! perm = randperm (n);
-%! Prow = eye (n) (perm, :);
-%! assert (A(perm, :), Prow * A);
-%! invperm(perm) = 1:n;
-%! assert (Prow \ A, A(invperm, :));
-%! assert (Prow' * A, A(invperm, :));
-
-## column permutation
-%!test
-%! n = 7;
-%! A = rand (n);
-%! perm = randperm (n);
-%! Pcol = eye (n) (:, perm);
-%! assert (A(:, perm), A * Pcol);
-%! invperm(perm) = 1:n;
-%! assert (A / Pcol, A(:, invperm));
-%! assert (A * Pcol.', A(:, invperm));
-
-## fall back to a matrix in addition
-%!test
-%! n = 4;
-%! P1 = eye (n) (:, randperm (n));
-%! A = zeros (n) + P1;
-%! assert (sum (A), full (ones (1, n)));
-%! assert (sum (A, 2), full (ones (n, 1)));
-
-## preserve dense matrix structure
-%!test
-%! n = 7;
-%! Pc = eye (n) (:, randperm (n));
-%! Pr = eye (n) (randperm (n), :);
-%! assert (typeinfo (rand (n) * Pc), "matrix");
-%! assert (typeinfo (Pr * rand (n)), "matrix");
-
-## preserve sparse matrix structure
-%!test
-%! n = 7;
-%! Pc = eye (n) (:, randperm (n));
-%! Ac = sprand (n-3, n, .5) + I () * sprand (n-3, n, .5);
-%! Pr = eye (n) (randperm (n), :);
-%! Ar = sprand (n, n+2, .5);
-%! assert (typeinfo (Ac * Pc), "sparse complex matrix");
-%! assert (full (Ac * Pc), full (Ac) * Pc);
-%! assert (full (Ac / Pc), full (Ac) / Pc);
-%! assert (typeinfo (Pr * Ar), "sparse matrix");
-%! assert (full (Pr * Ar), Pr * full (Ar));
-%! assert (full (Pr \ Ar), Pr \ full (Ar));
-
-## structure rules for 1x1 dense / scalar and 1x1 perm
-%!test
-%! n = 7;
-%! P1 = eye (1) (:, [1]);
-%! A1 = 1;
-%! P = eye (n) (:, randperm (n));
-%! A = rand (n-3, n, .5);
-%! assert (typeinfo (A * P1), "matrix");
-%! assert (full (A * P1), full (A) * P1);
-%! assert (typeinfo (P1 * A), "matrix");
-%! assert (full (P1 * A), P1 * full (A));
-%! assert (typeinfo (A1 * P), "matrix");
-%! assert (full (A1 * P), full (A1) * P);
-%! assert (typeinfo (P * A1), "matrix");
-%! assert (full (P * A1), P * full (A1));
-
-## structure rules for 1x1 sparse and 1x1 perm
-%!test
-%! n = 7;
-%! P1 = eye (1) (:, [1]);
-%! A1 = sparse (1, 1, 2);
-%! P = eye (n) (:, randperm (n));
-%! A = sprand (n-3, n, .5);
-%! assert (typeinfo (A * P1), "sparse matrix");
-%! assert (full (A * P1), full (A) * P1);
-%! assert (typeinfo (P1 * A), "sparse matrix");
-%! assert (full (P1 * A), P1 * full (A));
-%! assert (typeinfo (A1 * P), "sparse matrix");
-%! assert (full (A1 * P), full (A1) * P);
-%! assert (typeinfo (P * A1), "sparse matrix");
-%! assert (full (P * A1), P * full (A1));
-
-## permuting a matrix with exceptional values does not introduce new ones.
-%!test
-%! n = 5;
-%! pc = randperm (n);
-%! Pc = eye (n) (:, pc);
-%! pr = randperm (n);
-%! Pr = eye (n) (pr, :);
-%! A = rand (n);
-%! A(n, n-2) = NaN;
-%! A(3, 1) = Inf;
-%! assert (Pr * A * Pc, A(pr, pc));
-
-## conversion to sparse form
-%!test
-%! n = 7;
-%! P = eye (n) (:, randperm (n));
-%! sP = sparse (P);
-%! assert (full (sP), full (P));
-%! assert (size (find (sP), 1), n);
-%! [I, J, V] = find (sP);
-%! assert (all (V == 1));
-
-########################################
-## Diagonal matrices
-
-## square row scaling
-%!test
-%! m = 7;
-%! n = 11;
-%! A = rand (m, n);
-%! scalefact = rand (m, 1);
-%! Dr = diag (scalefact);
-%! assert (Dr * A, repmat (scalefact, 1, n) .* A);
-%! assert (Dr \ A, A ./ repmat (scalefact, 1, n));
-%! scalefact(m-1) = Inf;
-%! Dr(m-1, m-1) = 0;
-%! assert (Dr \ A, A ./ repmat (scalefact, 1, n));
-
-## square column scaling
-%!test
-%! m = 13;
-%! n = 11;
-%! A = rand (m, n);
-%! scalefact = rand (1, n);
-%! Dc = diag (scalefact);
-%! assert (A * Dc, repmat (scalefact, m, 1) .* A);
-%! assert (A / Dc, A ./ repmat (scalefact, m, 1));
-%! scalefact(n-1) = Inf;
-%! Dc(n-1, n-1) = 0;
-%! assert (A / Dc, A ./ repmat (scalefact, m, 1));
-
-## arithmetic
-%!test
-%! m = 9;
-%! n = 7;
-%! mn = min (m, n);
-%! d1 = rand (mn, 1) + I () * rand (mn, 1);
-%! D1 = diag (d1, m, n);
-%! d2 = rand (mn, 1);
-%! D2 = diag (d2, m, n);
-%! D1D2 = D1 + D2;
-%! assert (typeinfo (D1D2), "complex diagonal matrix");
-%! assert (diag (D1D2), d1 + d2);
-%! D1D2 = D2.' * D1;
-%! assert (typeinfo (D1D2), "complex diagonal matrix");
-%! assert (diag (D1D2), d1 .* d2);
-
-## slicing
-%!test
-%! m = 13;
-%! n = 6;
-%! mn = min (m, n);
-%! d = rand (mn, 1);
-%! D = diag (d, m, n);
-%! Dslice = D (1:(m-3), 1:(n-2));
-%! assert (typeinfo (Dslice), "diagonal matrix");
-
-## preserve dense matrix structure when scaling
-%!assert (typeinfo (rand (8) * (3 * eye (8))), "matrix");
-%!assert (typeinfo ((3 * eye (8)) * rand (8)), "matrix");
-
-## preserve sparse matrix structure when scaling
-%!assert (typeinfo (sprand (8, 8, .5) * (3 * eye (8))), "sparse matrix");
-%!assert (typeinfo (sprand (8, 8, .5) * (3 * eye (8))'), "sparse matrix");
-%!assert (typeinfo (((3 + 2 * I ()) * eye (8)) * sprand (8, 8, .5)), "sparse complex matrix");
-%!assert (typeinfo (((3 + 2 * I ()) * eye (8))' * sprand (8, 8, .5)), "sparse complex matrix");
-%!assert (typeinfo (sprand (8, 8, .5) * ((3 + 2 * I ()) * eye (8)).'), "sparse complex matrix");
-
-## scaling a matrix with exceptional values does not introduce new ones.
-%!test
-%! n = 6;
-%! dr = rand (n, 1);
-%! Dr = diag (dr);
-%! dc = rand (1, n);
-%! Dc = diag (dc);
-%! A = rand (n);
-%! A(n, n-2) = NaN;
-%! A(4, 1) = Inf;
-%! assert (Dr * A * Dc, A .* kron (dr, dc), eps);
-
-## sparse inverse row scaling with a zero factor
-%!test
-%! n = 8;
-%! A = sprand (n, n, .5);
-%! scalefact = rand (n, 1);
-%! Dr = diag (scalefact);
-%! scalefact(n-1) = Inf;
-%! Dr(n-1, n-1) = 0;
-%! assert (full (Dr \ A), full (A) ./ repmat (scalefact, 1, n));
-
-## narrow sparse inverse row scaling
-%!test
-%! n = 8;
-%! A = sprand (n, n, .5);
-%! scalefact = rand (n-2, 1);
-%! Dr = diag (scalefact, n, n-2);
-%! assert (full (Dr \ A), Dr \ full(A));
-
-## sparse inverse column scaling with a zero factor
-%!test
-%! n = 11;
-%! A = sprand (n, n, .5);
-%! scalefact = rand (1, n);
-%! Dc = diag (scalefact);
-%! scalefact(n-1) = Inf;
-%! Dc(n-1, n-1) = 0;
-%! assert (full (A / Dc), full(A) / Dc);
-
-## short sparse inverse column scaling
-%!test
-%! n = 7;
-%! A = sprand (n, n, .5);
-%! scalefact = rand (1, n-2) + I () * rand(1, n-2);
-%! Dc = diag (scalefact, n-2, n);
-%! assert (full (A / Dc), full(A) / Dc);
-
-## adding sparse and diagonal stays sparse
-%!test
-%! n = 9;
-%! A = sprand (n, n, .5);
-%! D = 2 * eye (n);
-%! assert (typeinfo (A + D), "sparse matrix");
-%! assert (typeinfo (A - D), "sparse matrix");
-%! D = D * I () + D;
-%! assert (typeinfo (A - D), "sparse complex matrix");
-%! A = A * I () + A;
-%! assert (typeinfo (D - A), "sparse complex matrix");
-
-## adding sparse and diagonal stays sparse
-%!test
-%! n = 9;
-%! A = sprand (n, n, .5);
-%! D = 2 * eye (n);
-%! assert (full (A + D), full (A) + D);
-%! assert (full (A - D), full (A) - D);
-%! D = D * I () + D;
-%! assert (full (D + A), D + full (A));
-%! A = A * I () + A;
-%! A(6, 4) = nan ();
-%! assert (full (D - A), D - full (A));
--- a/test/test_error.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## Test %!error usage
-
-%% test/octave.test/error/error-1.m
-%!function g () 
-%!  error ("foo");
-%!endfunction
-%!function f () 
-%!  g (); 
-%!endfunction
-%!error <foo> f ()
-
-%% test/octave.test/error/error-2.m
-%!function g () 
-%!  error ("foo\n");
-%!endfunction
-%!function f () 
-%!  g 
-%!endfunction
-%!error <foo> f ()
-
-%% test/octave.test/error/error-3.m
-%!error error ()
-
-%% test/octave.test/error/error-4.m
-%!error <foo> error ("foo\n")
-
-## Test %!warning usage
-
-%% test/octave.test/error/warning-1.m
-%!function g ()
-%!  warning ("foo");
-%!endfunction
-%!function f ()
-%!  g;
-%!endfunction
-%!warning <foo> f ()
-
-%% test/octave.test/error/warning-2.m
-%!test
-%! st.identifier = "backtrace";
-%! ws = warning ("query", "backtrace");
-%! warning ("on", "backtrace");
-%! st.state = "on";
-%! assert(warning ("query", "backtrace"), st);
-%! warning ("off", "backtrace");
-%! st.state = "off";
-%! assert(warning ("query", "backtrace"), st);
-%! warning (ws.state, "backtrace");
-
-## Test usage() function
-
-%% test/octave.test/error/usage-1.m
-%!function g () 
-%!  usage ("foo");
-%!endfunction
-%!function f () 
-%!  g (); 
-%!endfunction
-%!error <foo> f ()
-
-%% test/octave.test/error/usage-2.m
-%!function g () 
-%!  usage ("foo");
-%!endfunction
-%!function f () 
-%!  g 
-%!endfunction
-%!error <foo> f ()
-
-%% test/octave.test/error/usage-3.m
-%!error usage ()
-
-%% test/octave.test/error/usage-4.m
-%!error <foo> usage ("foo\n")
-
--- a/test/test_eval-catch.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/eval-catch/eval-catch-1.m
-%!test
-%! eval ("clear a; a;", "");
-
-%% test/octave.test/eval-catch/eval-catch-2.m
-%!test
-%! eval ("", "error ('Should not get here');");
-
-%% test/octave.test/eval-catch/eval-catch-3.m
-%!test
-%! eval ("clear a; a; x = 0;", "x = 1;");
-%! assert (x, 1);
-
-%% test/octave.test/eval-catch/eval-catch-5.m
-%!test
-%! eval ("clear a; a; str = '';", "str=lasterr;");
-%! assert (lasterr()(1:13), "'a' undefined");
-%! assert (str(1:13), "'a' undefined");
-
-%% test/octave.test/eval-catch/eval-catch-6.m
-%!test
-%! eval ("error ('user-defined error'); str = '';", "str = lasterr;");
-%! assert (lasterr()(1:18), "user-defined error");
-%! assert (str(1:18), "user-defined error");
-
-%% test/octave.test/eval-catch/eval-catch-7.m
-%!function ms = mangle (s)
-%!  ## Wrap angle brackets around S.
-%!  ms = cstrcat ("<", s, ">");
-%!endfunction
-%!test
-%! eval ("clear a; a; str='';", "str = mangle (lasterr);");
-%! assert (mangle(lasterr)(1:14), "<'a' undefined");
-%! assert (str(1:14), "<'a' undefined");
-
-%% test/octave.test/eval-catch/eval-catch-8.m
-%!test
-%! eval ("eval (\"clear a; a;str1='';\", \"str1=lasterr;\"); clear b; b; str2='';",
-%! "str2 = lasterr;");
-%! assert (str1(1:13), "'a' undefined");
-%! assert (str2(1:13), "'b' undefined");
-
-%% test/octave.test/eval-catch/eval-catch-9.m
-%!test
-%! eval ("clear a; a; str1='';",
-%! "eval (\"clear b; b; str2='';\", \"str2=lasterr;\"); str1=lasterr;");
-%! assert (str1(1:13), "'b' undefined");
-%! assert (str2(1:13), "'b' undefined");
-
-%% test/octave.test/eval-catch/eval-catch-10.m
-%!test
-%! eval ("eval (\"clear a; a; str='';\",\"error (cstrcat (\\\"rethrow: \\\", lasterr));str='';\");",
-%! "str=lasterr;");
-%! assert (str(1:22), "rethrow: 'a' undefined");
-
--- a/test/test_for.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/for/for-1.m
-%!test
-%! for i = 1
-%!   printf_assert ("%d", i);
-%! end
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("1"));
-
-%% test/octave.test/for/for-2.m
-%!test
-%! for i = 1:4
-%!   printf_assert ("%d", i);
-%! endfor
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("1234"));
-
-%% test/octave.test/for/for-3.m
-%!test
-%! for i = [1,2,3,4]
-%!   printf_assert ("%d", i);
-%! endfor
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("1234"));
-
-%% test/octave.test/for/for-4.m
-%!test
-%! for i = [1,2;3,4]
-%!   printf_assert ("%d", i(1,1));
-%!   printf_assert ("%d", i(2,1));
-%! endfor
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("1324"));
-
-%% test/octave.test/for/for-5.m
-%!test
-%! for i = I
-%!   printf_assert ("%d", imag (i));
-%! endfor
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("1"));
-
-%% test/octave.test/for/for-6.m
-%!test
-%! for i = [1,2,3,4]*I
-%!   printf_assert ("%d", imag (i));
-%! endfor
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("1234"));
-
-%% test/octave.test/for/for-7.m
-%!test
-%! for i = [1,2;3,4]*I
-%!   printf_assert ("%d", imag (i(1,1)));
-%!   printf_assert ("%d", imag (i(2,1)));
-%! endfor
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("1324"));
-
-%% test/octave.test/for/for-8.m
-%!test
-%! for i = [1,2,3,4]
-%!   if (i > 2)
-%!     break;
-%!   endif
-%!   printf_assert ("%d", i);
-%! endfor
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("12"));
-
-%% test/octave.test/for/for-9.m
-%!test
-%! for i = [1,2,3,4]
-%!   if (i < 3)
-%!     continue;
-%!   endif
-%!   printf_assert ("%d", i);
-%! endfor
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("34"));
-
-%!test
-%! a = [1,3;2,4];
-%! j = 0;
-%! for i = cat (3, a, 4 + a)
-%!   assert (i, [1;2] + 2*j++)
-%! endfor
-
-%!test
-%! a = {1,3;2,4};
-%! j = 0;
-%! for i = cat (3, a, cellfun(@(x) 4 + x, a, "UniformOutput", 0))
-%!   assert (i, {1 + 2*j; 2 + 2*j++})
-%! endfor
--- a/test/test_func.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,192 +0,0 @@
-## Copyright (C) 2008-2012 David Bateman
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## This piece of test code ensures that all operations which work on 
-## dimensions alone (squeeze, triu, etc.) work for all objects and 
-## preserve type. Even if the object is an empty matrix. This code is
-## not to check that the function itself returns teh correct result,
-## just that the results are consistent for all types.
-
-%!function __fntestfunc__ (fn, mn, varargin)
-%!  typ = {"double", "complex", "logical", "sparse", "complex sparse", ...
-%!         "logical sparse", "int8", "int16", "int32", "int64", "uint8", ...
-%!         "uint16", "uint32", "uint64", "char", "cell", "struct", ...
-%!         "single", "single complex"};
-%!
-%!  cmplx = [2, 5, 18];
-%!  nlogical = [3, 6];
-%!  ninteger = [7, 8, 9, 10, 11, 12, 13, 14];
-%!  nsparse = [4, 5, 6];
-%!  skip = {};
-%!
-%!  if (length (varargin) > 0 && iscell (varargin{1}))
-%!    skip = varargin{1};
-%!    varargin(1) = [];
-%!  endif
-%!
-%!  for i = 1 : length (typ)
-%!    if (any (strcmp (skip, typ {i})))
-%!      continue;
-%!    endif
-%!    m = mn;
-%!
-%!    if (any (nsparse == i))
-%!      if (ndims (m) > 2)
-%!        sz = size (m);
-%!        m = reshape (m, [sz(1), prod(sz(2:end))]);
-%!      endif
-%!      if (any (cmplx == i))
-%!        m = sparse ((1 + 1i) * m);
-%!      else
-%!        m = sparse (m);
-%!      endif
-%!    else
-%!      if (any (cmplx == i))
-%!        m = (1 + 1i) * m;
-%!      endif
-%!    endif
-%!    if (any (nlogical == i))
-%!      m = cast (m, "logical");
-%!    endif
-%!    if (any (ninteger == i))
-%!      m = cast (m, typ{i});
-%!    endif
-%!    if (strcmp (typ{i}, "cell"))
-%!      m = num2cell (m);
-%!    elseif (strcmp (typ{i}, "struct"))
-%!      m = struct ("fld", num2cell (m));
-%!    endif
-%!
-%!    y = feval (fn, m, varargin{:});
-%!    y2 = feval (fn, reshape (mn, size (m)), varargin{:});
-%!    if (!strcmp (class (y), class (m)) ||
-%!         issparse (y) != issparse (m) || !size_equal (y, y2))
-%!      error ("failed for type %s\n", typ{i});
-%!    endif
-%!    if (!(strcmp (typ{i}, "cell") || strcmp (typ{i}, "struct")) &&
-%!        any (vec (cast (real (y), "double")) !=
-%!             vec (feval (fn , cast (real (m), "double"), varargin{:}))))
-%!      error ("failed for type %s\n", typ{i});
-%!    endif
-%!  endfor
-%!endfunction
-
-%!shared m0, m1, m2, m3
-%! m0 = [1:5];
-%! m1 = reshape ([1 : 30], [5, 6]);
-%! m2 = reshape ([1 : 30], [5, 1, 6]);
-%! m3 = [];
-
-%!test
-%! __fntestfunc__("triu", m1, {"struct"});
-%!test
-%! __fntestfunc__ ("triu", m1, {"struct"}, -1);
-%!test
-%! __fntestfunc__ ("triu", m1, {"struct"}, 1);
-%!test
-%! __fntestfunc__("triu", m3, {"struct"});
-%!test
-%! __fntestfunc__ ("tril", m1, {"struct"});
-%!test
-%! __fntestfunc__ ("tril", m1, {"struct"}, -1);
-%!test
-%! __fntestfunc__ ("tril", m1, {"struct"}, 1);
-%!test
-%! __fntestfunc__("tril", m3, {"struct"});
-%!test
-%! __fntestfunc__ ("squeeze", m2);
-%!test
-%! __fntestfunc__ ("squeeze", m3);
-%!test
-%! __fntestfunc__ ("permute", m1, [2, 1]);
-%!test
-%! __fntestfunc__ ("permute", m2, {"sparse", "logical sparse", "complex sparse"}, [3, 1, 2]);
-%!test
-%! __fntestfunc__ ("permute", m3, [2, 1]);
-%!test
-%! __fntestfunc__ ("ipermute", m1, [2, 1]);
-%!test
-%! __fntestfunc__ ("ipermute", m2, {"sparse", "logical sparse", "complex sparse"}, [3, 1, 2]);
-%!test
-%! __fntestfunc__ ("ipermute", m3, [2, 1]);
-%!test
-%! __fntestfunc__ ("shiftdim", m2, 1);
-%!test
-%! __fntestfunc__ ("shiftdim", m2, {"sparse", "logical sparse", "complex sparse"}, -1);
-%!test
-%! __fntestfunc__ ("shiftdim", m3, 1);
-%!test
-%! __fntestfunc__ ("circshift", m2, 1);
-%!test
-%! __fntestfunc__ ("circshift", m2, [1, -1]);
-%!test
-%! __fntestfunc__ ("circshift", m3, 1);
-%!test
-%! __fntestfunc__ ("reshape", m2, [6, 5]);
-%!test
-%! __fntestfunc__ ("reshape", m3, [1, 0]);
-%!test
-%! __fntestfunc__ ("diag", m0, {"struct"});
-%!test
-%! __fntestfunc__ ("diag", m0, {"struct"}, 1);
-%!test
-%! __fntestfunc__ ("diag", m0, {"struct"}, -1);
-%!test
-%! __fntestfunc__ ("diag", m1, {"struct"});
-%!test
-%! __fntestfunc__ ("diag", m1, {"struct"}, 1);
-%!test
-%! __fntestfunc__ ("diag", m1, {"struct"}, -1);
-%!test
-%! __fntestfunc__ ("diag", m3, {"struct"});
-%!test
-%! __fntestfunc__ ("fliplr", m1);
-%!test
-%! __fntestfunc__ ("fliplr", m3);
-%!test
-%! __fntestfunc__ ("flipud", m1);
-%!test
-%! __fntestfunc__ ("flipud", m3);
-%!test
-%! __fntestfunc__ ("flipdim", m1, 2);
-%!test
-%! __fntestfunc__ ("flipdim", m3, 2);
-%!test
-%! __fntestfunc__ ("transpose", m1);
-%!test
-%! __fntestfunc__ ("transpose", m3);
-%!test
-%! __fntestfunc__ ("ctranspose", m1);
-%!test
-%! __fntestfunc__ ("ctranspose", m3);
-%!test
-%! __fntestfunc__ ("rot90", m1);
-%!test
-%! __fntestfunc__ ("rot90", m1, 2);
-%!test
-%! __fntestfunc__ ("rot90", m1, -1);
-%!test
-%! __fntestfunc__ ("rot90", m3);
-%!test
-%! __fntestfunc__ ("rotdim", m2, 1, [1, 2]);
-%!test
-%! __fntestfunc__ ("rotdim", m2, 2, [1, 2]);
-%!test
-%! __fntestfunc__ ("rotdim", m2, -1, [1, 2]);
-%!test
-%! __fntestfunc__ ("rotdim", m3, 1, [1, 2]);
--- a/test/test_global.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/global/global-1.m
-%!test
-%! global G = 1;
-%! assert (G,1);
-
-%% test/octave.test/global/global-2.m
-%!function f ()
-%!  global G;
-%!  assert (G,1);
-%!endfunction
-%!test
-%! global G = 1;
-%! f;
-
-%% test/octave.test/global/global-3.m
-%!function f ()
-%!  fail ("G");
-%!endfunction
-%!test
-%! global G = 1;
-%! f();
-
-%% test/octave.test/global/global-4.m
-%!function f ()
-%!  global H = 1;
-%!endfunction
-%!test
-%!  f;
-%!  fail ("H");
-
-%% test/octave.test/global/global-5.m
-%!function f ()
-%!  global H = 1;
-%!endfunction
-%!test
-%!function g ()
-%!  fail ("H");
-%!test
-%! g();
-
-%% test/octave.test/global/global-6.m
-%!function f ()
-%!  global H = 1;
-%!endfunction
-%!function g ()
-%!  global H;
-%!  assert (H,1);
-%!endfunction
-%!test
-%! f();
-%! g();
-
-%% test/octave.test/global/global-7.m
-%!test
-%!function f ()
-%!  global H = 1;
-%!endfunction
-%!test
-%! fail ("H");
-
-%% test/octave.test/global/global-8.m
-%!function f ()
-%!  global H = 1;
-%!endfunction
-%!function g ()
-%!  global H;
-%!  assert (H,1);
-%!endfunction
-%!test
-%! f;
-%! clear H;
-%! g;
-
--- a/test/test_if.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/if/if-1.m
-%!test
-%! i = 0;
-%! if (i == 0)
-%!   i++;
-%!   printf_assert ("%d\n", i);
-%! endif
-%! assert (prog_output_assert ("1"));
-
-%% test/octave.test/if/if-2.m
-%!test
-%! if (eye (2))
-%!   printf_assert ("fail\n");
-%! else
-%!   printf_assert ("pass\n");
-%! end
-%! assert (prog_output_assert ("pass"));
-
-%% test/octave.test/if/if-3.m
-%!test
-%! x = 2;
-%! if (eye (2))
-%!   printf_assert ("fail\n");
-%! elseif (x)
-%!   printf_assert ("pass\n");
-%! endif
-%! assert (prog_output_assert ("pass"));
-
-%% test/octave.test/if/if-4.m
-%!test
-%! x = 0;
-%! y = -2;
-%! if (eye (2))
-%!   printf_assert ("fail\n");
-%! elseif (x)
-%!   printf_assert ("fail\n");
-%! elseif (y)
-%!   printf_assert ("pass\n");
-%! end
-%! assert (prog_output_assert ("pass"));
-
-%% test/octave.test/if/if-5.m
-%!test
-%! x = 0;
-%! y = -2;
-%! if (eye (2))
-%!   printf_assert ("fail\n");
-%! elseif (x)
-%!   printf_assert ("fail\n");
-%! elseif (x)
-%!   printf_assert ("fail\n");
-%! else
-%!   printf_assert ("pass\n");
-%! endif
-%! assert (prog_output_assert ("pass"));
-
-%% test/octave.test/if/if-6.m
-%!test
-%! x = 0;
-%! y = -2;
-%! if (y)
-%!   printf_assert ("pass\n");
-%! elseif (x)
-%!   printf_assert ("fail\n");
-%! elseif (x)
-%!   printf_assert ("fail\n");
-%! end
-%! assert (prog_output_assert ("pass"));
-
--- a/test/test_index.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,212 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%!test
-%! a = [];
-%! assert (isempty (a));
-
-%!shared a
-%! a = 1;
-%!assert (a(1), 1)
-%!assert (a(:), 1)
-%!assert (a(:,:), 1)
-%!assert (a(1,:), 1)
-%!assert (a(:,1),1)
-%!assert (isempty (a(logical (0))))
-%!error a(-1)
-%!error a(2)
-%!error a(2,:)
-%!error a(:,2)
-%!error a(-1,:)
-%!error a(:,-1)
-%!error a([1,2,3])
-%!error a([1;2;3])
-%!error a([1,2;3,4])
-%!error a([0,1])
-%!error a([0;1])
-%!error a([-1,0])
-%!error a([-1;0])
-
-%!shared a, a_prime, mid_a
-%! a = [4,3,2,1];
-%! a_prime = [4;3;2;1];
-%! mid_a = [3,2];
-
-%!assert (a(1),4)
-%!assert (a(2),3)
-%!assert (all (a(:) == a_prime))
-%!assert (all (a(1,:) == a))
-%!assert (a(:,3),2)
-%!assert (all (a(:,:) == a))
-%!assert (all (a(logical ([0,1,1,0])) == mid_a))
-%!error a(0)
-%!error a(5)
-%!error a(0,1)
-%!assert (isempty (a(logical (0),:)))
-%!error a(:,0)
-%!assert (isempty (a([])))
-%!assert (isempty (a([],:)))
-%!assert (isempty (a(:,[])))
-
-%!shared a, a_fvec, a_col_1, a_col_2, a_row_1, a_row_2
-%! a = [1,2;3,4];
-%! a_fvec = [1;3;2;4];
-%! a_col_1 = [1;3];
-%! a_col_2 = [2;4];
-%! a_row_1 = [1,2];
-%! a_row_2 = [3,4];
-
-%!assert (all (all (a(:,:) == a)))
-%!assert (all (a(:) == a_fvec))
-%!error a(0)
-%!assert (a(2), 3)
-
-%% Additional tests
-
-%!shared a, b
-%! a = [1,2;3,4];
-%! b = a;
-%! b(:,:,2) = [5,6;7,8];
-
-%!assert (a(:), [1;3;2;4])
-%!assert (a(1:2), [1,3])
-%!assert (a(:,:), [1,2;3,4])
-%!assert (a(:,1), [1;3])
-%!assert (a(1,1), 1)
-%!assert (a(1:2,1), [1;3])
-%!assert (a(:,:,1), [1,2;3,4])
-
-%!test
-%! c(:,:,1) = [1,2;3,4];
-%! c(:,:,2) = [1,2;3,4];
-%! assert (a(:,:,[1,1]), c)
-
-%!test
-%! c(:,:,1,1) = [1,2;3,4];
-%! c(:,:,1,2) = [1,2;3,4];
-%! assert (a(:,:,1,[1,1]), c)
-
-%!test
-%! c(:,:,1,1) = [1,2;3,4];
-%! c(:,:,2,1) = [1,2;3,4];
-%! c(:,:,1,2) = [1,2;3,4];
-%! c(:,:,2,2) = [1,2;3,4];
-%! assert (a(:,:,[1,1],[1,1]), c)
-
-%!assert (a(1,[]), zeros (1,0))
-%!assert (a(1,[],[1,1]), zeros (1,0,2))
-%!assert (a(1,1,[]), zeros (1,1,0))
-
-%!test
-%! c (1:10,1) = 1:10;
-%! assert (c, [1:10]');
-
-%!assert (b(:), [1; 3; 2; 4; 5; 7; 6; 8])
-%!assert (b(:,:), [1, 2, 5, 6; 3, 4, 7, 8])
-%!assert (b(:,1), [1;3])
-%!assert (b(:,:,:), reshape ([1,3,2,4,5,7,6,8],[2,2,2]))
-%!assert (b(:,1,1), [1;3])
-%!assert (b(:,1,1,[1,1]),reshape ([1,3,1,3],[2,1,1,2]))
-%!assert (b(1,3), 5)
-%!assert (b(1,[3,4]), [5,6])
-%!assert (b(1,1:4), [1,2,5,6])
-%!assert (b(1,[],:), zeros (1,0,2))
-%!assert (b(1,[]), zeros(1,0))
-%!assert (b(:,3), [5;7])
-%!assert (b([1,2],3), [5;7])
-%!assert (b(true(2,1),3), [5;7])
-%!assert (b(false(2,1),3), zeros(0,1))
-%!assert (b([],3), zeros(0,1))
-
-%!shared x
-%! # Dummy shared block to clear any previous definitions
-%! x = 1;
-
-%!test
-%! a(1,:) = [1,3];
-%! assert (a, [1,3]);
-
-%!test
-%! a(1,:) = [1;3];
-%! assert (a, [1,3]);
-
-%!test
-%! a(:,1) = [1;3];
-%! assert (a, [1;3]);
-
-%!test
-%! a = [1,2;3,4];
-%! b (1,:,:) = a;
-%! assert (b, reshape (a, [1,2,2]));
-
-%!test
-%! a(1,1:4,2) = reshape (1:4, [1,1,4]);
-%! b(:,:,2) = 1:4;
-%! assert (a, b);
-
-%!test
-%! a(:,:,:) = 1:4; 
-%! assert (a, [1:4]);
-
-%!test
-%! a(:,:,1) = 1:4;;
-%! assert (a, [1:4]);
-
-%!test
-%! a(:,:,1) = [1:4]';
-%! assert (a, [1:4]');
-
-%!test
-%! a(:,:,1) = reshape (1:4,[1,1,4]);
-%! assert (a, [1:4]');
-
-%!test
-%! a(:,1,:) = 1:4;
-%! assert (a, reshape (1:4,[1,1,4]));
-
-%!test
-%! a(:,1,:) = [1:4]';
-%! assert (a, [1:4]');
-
-%!test
-%! a(:,1,:) = reshape (1:4,[1,1,4]);;
-%! assert (a, [1:4]');
-
-%!test
-%! a(1,:,:) = 1:4;
-%! assert (a, reshape (1:4,[1,1,4]));
-
-%!test
-%! a(1,:,:) = [1:4]';
-%! assert (a, [1:4]);
-
-%!test
-%! a(1,:,:) = reshape (1:4,[1,1,4]);
-%! assert (a, [1:4]);
-
-%!test
-%! a(1,:,:,:) = reshape (1:4,[1,1,4]);
-%! assert (a, reshape (1:4,[1,1,1,4]));
-
-%!error (a(1:2,1:2) = 1:4)
-
-%!shared x
-%! x = 1:5;
-%!error <attempted to use a complex scalar as an index> x(i)
-%!error <attempted to use a complex scalar as an index> x(j)
-%!error <attempted to use a complex scalar as an index> x(1+i)
--- a/test/test_io.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,616 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## FIXME -- we should skip (or mark as an expected failure) the test for
-## saving sparse matrices to MAT files when using 64-bit indexing since
-## that is not implemented yet.
-
-%% test/octave.test/io/load-save.m
-%!function [ret, files] = testls (input)
-%!  ## flag a1 global so as to test the storage of global flags
-%!  global a1;
-%!
-%!  ## Input or output, so as to be able to exchange between versions
-%!  if (nargin < 1)
-%!    input = 0;
-%!  endif
-%!
-%!  ## Setup some variable to be saved or compared to loaded variables
-%!
-%!  ## scalar
-%!  a1 = 1;
-%!  ## matrix
-%!  persistent a2 = hilb(3);
-%!  ## complex scalar
-%!  persistent a3 = 1 + 1i;
-%!  ## complex matrix
-%!  persistent a4 = hilb(3) + 1i*hilb(3);
-%!  ## bool
-%!  persistent a5 = (1 == 1);
-%!  ## bool matrix
-%!  persistent a6 = ([ones(1,5), zeros(1,5)] == ones (1,10));
-%!  ## range
-%!  persistent a7 = 1:10;
-%!  ## structure
-%!  persistent a8 = struct ("a", a1, "b", a3);
-%!  ## cell array
-%!  persistent a9 = {a1, a3};
-%!  ## string
-%!  persistent a10 = ["test"; "strings"];
-%!  ## int8 array
-%!  persistent a11 = int8 (floor (256*rand (2,2)));
-%!  ## int16 array
-%!  persistent a12 = int16 (floor (65536*rand (2,2)));
-%!  ## int32 array
-%!  persistent a13 = int32 (floor (1e6*rand (2,2)));
-%!  ## int64 array
-%!  persistent a14 = int64 (floor (10*rand (2,2)));
-%!  ## uint8 array
-%!  persistent a15 = uint8 (floor (256*rand (2,2)));
-%!  ## uint16 array
-%!  persistent a16 = uint16 (floor (65536*rand (2,2)));
-%!  ## int32 array
-%!  persistent a17 = uint32 (floor (1e6*rand (2,2)));
-%!  ## uint64 array
-%!  persistent a18 = uint64 (floor (10*rand (2,2)));
-%!  ## sparse
-%!  persistent a19 = sprandn (100,100,0.01);
-%!  ## complex sparse
-%!  persistent a20 = sprandn (100,100,0.01) + 1i * sprandn (100,100,0.01);
-%!
-%!  ret = 0;
-%!
-%!  files = {"text.mat", "binary.mat", "mat5.mat", "mat7.mat"};
-%!  opts = {"-z -text", "-z -binary", "-z -mat", "-v7"};
-%!  tols = {2*eps, 0, 0, 0};
-%!
-%!  vars = "a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20";
-%!  if (! input)
-%!    for i = 1:length (files)
-%!      eval (sprintf ("save %s %s %s", opts{i}, files{i}, vars));
-%!    endfor
-%!  else
-%!    b1 = a1; b2 = a2; b3 = a3; b4 = a4; b5 = a5;
-%!    b6 = a6; b7 = a7; b8 = a8; b9 = a9;
-%!    b10 = a10; b11 = a11; b12 = a12; b13 = a13; b14 = a14; b15 = a15;
-%!    b16 = a16; b17 = a17; b18 = a18; b19 = a19; b20 = a20;
-%!
-%!    for i = length (files)
-%!
-%!      clear a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a19 a20;
-%!
-%!      file = files{i};
-%!      tol = tols{i};
-%!
-%!      load (file);
-%!
-%!      assert (a1, b1, tol);
-%!      assert (a2, b2, tol);
-%!      assert (a3, b3, tol);
-%!      assert (a4, b4, tol);
-%!
-%!      if (! isequal (a5, b5))
-%!        error ("failed: %s boolean", file);
-%!      endif
-%!
-%!      if (! strcmp (file, "mat5") && ! strcmp (file, "mat7"))
-%!        if (! isequal (a6, b6))
-%!          error ("failed: %s boolean matrix", file);
-%!        endif
-%!      endif
-%!
-%!      assert ([a7], [b7], tol);
-%!
-%!      if (! isequal (a8, b8))
-%!        error ("failed: %s struct", file);
-%!      endif
-%!      
-%!      if (! isequal (a9, b9))
-%!        error ("failed: %s cell", file);
-%!      endif
-%!      
-%!      if (! isequal (a10, b10))
-%!        error ("failed: %s string", file);
-%!      endif
-%!
-%!      if (! isequal (a11, b11))
-%!        error ("failed: %s int8", file);
-%!      endif
-%!
-%!      if (! isequal (a12, b12))
-%!        error ("failed: %s int16", file);
-%!      endif
-%!
-%!      if (! isequal (a13, b13))
-%!        error ("failed: %s int32", file);
-%!      endif
-%!
-%!      if (! isequal (a14, b14))
-%!        error ("failed: %s int64", file);
-%!      endif
-%!
-%!      if (! isequal (a15, b15))
-%!        error ("failed: %s uint8", file);
-%!      endif
-%!
-%!      if (! isequal (a16, b16))
-%!        error ("failed: %s uint16", file);
-%!      endif
-%!
-%!      if (! isequal (a17, b17))
-%!        error ("failed: %s uint32", file);
-%!      endif
-%!
-%!      if (! isequal (a18, b18))
-%!        error ("failed: %s uint64", file);
-%!      endif
-%!
-%!      assert (a19, b19, tol);
-%!      assert (a20, b20, tol);
-%!
-%!      ## Test for global flags
-%!      if (! isglobal ("a1") || isglobal ("a2") || isglobal ("a3")
-%!          || isglobal ("a4") || isglobal ("a5") || isglobal ("a6")
-%!          || isglobal ("a7") || isglobal ("a8") || isglobal ("a9")
-%!          || isglobal ("a10") || isglobal ("a11") || isglobal ("a12")
-%!          || isglobal ("a13") || isglobal ("a14") || isglobal ("a15")
-%!          || isglobal ("a16") || isglobal ("a17") || isglobal ("a18")
-%!          || isglobal ("a19") || isglobal ("a20"))
-%!        error ("failed: %s global test", file); 
-%!      endif
-%!    endfor
-%!  endif
-%!
-%!  ret = 1;
-%!endfunction
-
-%!test
-%! 
-%! [save_status, save_files] = testls (0);
-%! [load_status, load_files] = testls (1);
-%! 
-%! for f = [save_files, load_files]
-%!   unlink (f{1});
-%! endfor
-%! 
-%! assert (save_status && load_status);
-
-%!test
-%! 
-%! STR.scalar_fld = 1;
-%! STR.matrix_fld = [1.1,2;3,4];
-%! STR.string_fld = "Octave";
-%! STR.struct_fld.x = 0;
-%! STR.struct_fld.y = 1;
-%! 
-%! save struct.dat -struct STR;
-%! STR = load ("struct.dat");
-%!
-%! assert (STR.scalar_fld == 1 && ...
-%!         STR.matrix_fld == [1.1,2;3,4] && ...
-%!         STR.string_fld == "Octave" && ...
-%!         STR.struct_fld.x == 0 && ...
-%!         STR.struct_fld.y == 1 );
-%!
-%!
-%! save -binary struct.dat -struct STR matrix_fld str*_fld;
-%! STR = load ("struct.dat");
-%!
-%! assert (!isfield(STR,"scalar_fld") && ...
-%!         STR.matrix_fld == [1.1,2;3,4] && ...
-%!         STR.string_fld == "Octave" && ...
-%!         STR.struct_fld.x == 0 && ...
-%!         STR.struct_fld.y == 1);
-%!
-%! delete struct.dat;
-
-%!test
-%! matrix1 = rand (100, 2);
-%! save -ascii matrix.ascii matrix1
-%! matrix2 = load ("matrix.ascii");
-%! assert (matrix1, matrix2, 1e-9)
-%!
-%! delete matrix.ascii;
-
-%!error <unable to find file> load ("")
-
-%% FIXME: This test is disabled as it writes to stdout and there is no easy
-%% way to recover output.  Need to spawn new octave process and pipe stdout
-%% somewhere to treat this case.
-%% test/octave.test/io/puts-1.m
-%!#test
-%! puts ("foo\n");
-
-%% test/octave.test/io/puts-2.m
-%!assert (puts (1),-1)
-
-%% test/octave.test/io/puts-3.m
-%!error <Invalid call to puts> puts ()
-
-%% test/octave.test/io/puts-4.m
-%!error <Invalid call to puts> puts (1, 2)
-
-%!assert (sscanf ('123456', '%10c'), '123456')
-%!assert (sscanf ('123456', '%10s'), '123456')
-
-%!assert (sscanf (['ab'; 'cd'], '%s'), 'acbd')
-
-%!assert (sscanf ('02:08:30', '%i:%i:%i'), [2; 0]);
-%!assert (sscanf ('02:08:30', '%d:%d:%d'), [2; 8; 30]);
-
-%!assert (sscanf ('0177 08', '%i'), [127; 0; 8]);
-%!assert (sscanf ('0177 08', '%d'), [177; 8]);
-
-%!test
-%! [val, count, msg, pos] = sscanf ("3I2", "%f");
-%! assert (val, 3);
-%! assert (count, 1);
-%! assert (msg, "");
-%! assert (pos, 2);
-
-%!test
-%! [val, count, msg, pos] = sscanf ("3In2", "%f");
-%! assert (val, 3);
-%! assert (count, 1);
-%! assert (msg, "");
-%! assert (pos, 2);
-
-%!test
-%! [val, count, msg, pos] = sscanf ("3Inf2", "%f");
-%! assert (val, [3; Inf; 2]);
-%! assert (count, 3);
-%! assert (msg, "");
-%! assert (pos, 6);
-
-%% test/octave.test/io/sscanf-1.m
-%!test
-%! [a, b, c] = sscanf ("1.2 3 foo", "%f%d%s", "C");
-%! [v1, c1, m1] = sscanf ("1 2 3 4 5 6", "%d");
-%! [v2, c2, m2] = sscanf ("1 2 bar 3 4 5 6", "%d");
-%! 
-%! assert ((a == 1.2 && b == 3 && c == "foo"
-%! && v1 == [1; 2; 3; 4; 5; 6] && c1 == 6 && ischar (m1)
-%! && v2 == [1; 2] && c2 == 2 && ischar (m2)));
-
-%% test/octave.test/io/sscanf-2.m
-%!error <Invalid call to sscanf> sscanf ()
-
-%% test/octave.test/io/sscanf-3.m
-%!error sscanf (1, 2)
-
-%% test/octave.test/io/sscanf-4.m
-%!error <Invalid call to sscanf> sscanf ("foo", "bar", "C", 1)
-
-%% test/octave.test/io/sscanf-5.m
-%!test
-%! [x, n] = sscanf ("   0.024000 0.200 0.200 2.000         1987           5           0  0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 2 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 4 5 1 2    2 5 5 8 2 8 12 6 15 18 28 26 47 88 118 162 192 130 88 56 27 23 14 9 6 3 4 1 0    2 3 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0   0.026000 0.250 0.250 2.100         3115           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0    0 0 0 0 1 0 1 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 1 0 1    1 1 0 1 0 1 3 2 0 5 15 25 44 66 145 179 193 172 104 57 17 11 12 2 1 0 1 1 0 1    0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.028000 0.300 0.300 2.200         4929           3           0  1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0    1 0 1 0 1 2 2 3 2 3 14 21 49 80 148 184 218 159 124 63 37 13 12 3 1 1 0 0 0 0    0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0    0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.030000 0.350 0.350 2.300         7051           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0    0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1    0 0 1 0 0 0 2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1    0 0 0 2 0 0 0 1 5 6 14 28 51 88 154 177 208 169 124 65 39 15 5 3 3 2 1 0 1 0 1   0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0    0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.032000 0.400 0.400 2.400         9113           4           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0    1 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 2 0    1 0 0 1 1 0 2 3 5 3 17 30 60 117 156 189 209 129 102 64 56 16 11 4 2 2 0 0 0 0   1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0   0.034000 0.450 0.450 2.500        11811           6           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0    0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0    0 0 2 1 0 0 1 0 5 5 15 21 57 99 149 190 195 159 130 69 41 16 10 2 5 3 0 1 0 0    0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.036000 0.500 0.500 2.600        14985           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 0 0 0 0    0 0 0 0 1 0 0 2 2 6 10 34 60 95 126 177 194 155 99 71 44 17 6 7 2 0 0 0 3 0 0    1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.038000 0.550 0.550 2.700        18391           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0    0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 2 0 0 1 1 0 1    2 1 0 0 0 1 0 1 3 6 19 27 52 95 161 154 169 134 94 64 37 19 9 6 0 2 1 0 0 0 0    1 2 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 2 2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0    0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.040000 0.600 0.600 2.800        22933           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1    0 0 0 0 0 2 0 3 4 7 18 27 47 82 134 163 133 138 101 58 34 26 10 5 2 1 2 1 1 0    2 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0   0.042000 0.650 0.650 2.900        27719           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 1 0 0 0 1 1 2 8 16 37 51 87 128 153 146 123 105 62 35 24 8 3 5 0 1 2 1 0 0   0 1 1 1 0 0 0 1 0 1 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0    0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.044000 0.700 0.700 3.000        32922           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 2 0    0 0 0 0 0 0 0 2 1 0 0 0 0 1 1 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 0 1 1    1 1 0 0 0 1 4 3 5 5 15 35 54 88 132 168 149 105 92 62 30 16 17 4 5 1 0 0 1 0 1   1 0 1 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.046000 0.750 0.750 3.100        38973           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0    0 0 0 1 0 0 0 4 3 5 20 37 56 94 110 135 149 124 84 58 36 17 14 7 1 0 2 0 1 0 0   1 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 0 1    1 0 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0    1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.048000 0.800 0.800 3.200        45376           5           0  1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0    0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 0 0 2 1 1 2 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0    0 0 0 1 0 0 0 0 1 3 18 34 55 82 104 135 116 99 79 60 51 29 10 4 3 1 1 1 0 0 1    0 0 0 1 0 0 3 1 2 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1    0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0    1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.050000 0.850 0.850 3.300        52060           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1    0 0 0 0 0 2 2 1 3 12 24 40 39 107 121 127 138 100 86 68 44 23 15 7 3 1 1 0 1 1   0 0 2 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 2 0 0 0 1 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.052000 0.900 0.900 3.400        59454           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 1    0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0    0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 2 0 2 1 0 0 0 1 0    0 1 0 0 0 0 0 3 3 6 21 32 68 90 132 111 122 107 73 57 47 24 11 7 4 2 2 1 0 0 0   0 0 0 0 0 1 0 0 1 0 0 2 0 1 1 0 0 1 0 0 0 0 0 3 0 1 0 0 0 0 1 1 0 0 0 1 0 0 0    0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0   0.054000 0.950 0.950 3.500        67013           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 1 0 0 1 1 0 0 0    1 0 1 0 1 2 4 3 7 9 28 31 71 94 115 96 108 78 82 60 38 17 12 11 4 3 1 1 0 2 1    0 0 0 2 1 3 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 2 0 0 0 1 0 2 0 1 0 2 0 1 0 0 1 0 0    0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0   0.056000 1.000 1.000 3.600        75475           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 2 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 3 0 0 1    1 2 0 1 4 0 1 8 6 7 17 41 56 71 109 113 84 103 72 54 35 22 6 9 1 7 5 4 0 0 1 0   0 0 0 0 0 1 0 0 2 1 0 0 0 0 2 0 0 1 0 0 1 0 0 0 0 0 0 1 0 2 0 1 0 0 0 0 1 0 1    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 3 0 0 0 1 0 0 0 0 0 0 1 1 0 0 2 0 0 0 0    0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0   0.058000 1.050 1.050 3.700        83558           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0    0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 2 0 0    2 0 0 1 0 3 2 3 6 15 27 41 77 73 94 94 92 76 61 56 42 23 13 11 6 2 1 2 0 1 2 0   0 1 0 1 0 0 1 0 0 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 2 0 0 0 0 0 1 2 0    0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0   0.060000 1.100 1.100 3.800        93087           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1    0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 2 2 0 0 0 1 0 1 1 0 0 0 1 1 0 4    0 0 1 2 0 3 1 3 5 13 33 31 65 75 77 96 97 80 59 45 36 32 18 2 5 0 1 0 0 1 0 0    3 0 0 0 0 1 0 0 0 0 0 1 0 0 1 2 0 0 0 0 1 0 0 0 0 1 0 1 1 1 0 0 2 0 0 2 0 1 0    0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0    0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.062000 1.150 1.150 3.900       102829           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0    0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 1 0 1 0 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 2 0 2    1 2 0 0 2 4 3 5 11 9 23 43 53 68 65 87 83 77 59 49 34 18 15 9 4 2 3 2 0 0 0 4    0 1 1 0 0 2 0 0 1 0 0 0 0 1 1 1 0 1 0 0 0 0 2 0 0 0 0 1 0 0 1 1 1 1 0 0 0 1 0    0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0   0.064000 1.200 1.200 4.000       113442           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0    0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 1 1 0 1 1 1 1 1 0 0 0 1    2 0 0 0 2 0 4 5 11 13 29 39 61 68 61 75 76 74 73 44 37 29 19 6 3 3 2 0 1 2 1 0   0 0 0 1 1 1 0 1 1 0 0 0 1 0 1 1 0 1 2 0 2 1 1 1 0 0 0 0 1 0 0 1 1 1 1 1 0 0 0    0 0 0 0 1 0 0 0 0 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0    0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0   0.066000 1.250 1.250 4.100       126668           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1    0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 0 0 0 1 1 2 3 0 2 1 2 0 1 0 3 0 0 0 1 0 1 1 3    0 0 1 3 0 2 4 3 12 12 30 48 56 66 77 78 71 82 52 31 32 19 20 16 8 2 1 3 0 0 2    1 0 1 0 1 0 0 0 1 3 1 0 1 0 1 1 1 0 0 0 0 0 2 0 2 0 0 0 0 0 1 0 0 0 0 1 1 0 0    0 0 0 1 0 0 0 0 0 2 0 3 1 0 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0    0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.068000 1.300 1.300 4.200       138042           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 2 0 0 1 0 1 0 0 0 0 0    0 0 0 1 0 0 2 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0    0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 3 0 0 1 0 0 1 2 0 0 0 3 0 1 0 0 3 0    1 0 1 1 3 1 4 7 11 14 27 36 44 68 72 70 71 45 44 46 29 13 16 11 5 2 0 3 0 0 0    0 1 1 2 0 0 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 2 0 0 1 1 0 1 1 1 0    0 1 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0    0 0 0 1 0 0 1 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0.070000 1.350 1.350 4.300       152335           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0    0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0    1 0 0 0 2 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 2 0 0 0 0 1 1 1 0 1 1 0 1 1 1 1 0 2 0    0 0 0 0 2 0 1 7 14 19 34 35 54 72 68 72 68 58 48 36 37 27 25 17 1 4 1 0 0 0 1    2 2 0 0 1 1 1 2 1 0 3 1 0 1 0 2 1 0 0 0 1 1 1 2 0 0 0 0 1 1 0 1 1 0 2 1 1 1 1    0 0 0 1 1 0 0 2 0 0 1 0 0 0 1 1 0 2 1 1 0 0 0 0 2 0 0 0 0 0 0 0 1 1 0 0 0 0 1    0 0 1 0 0 0 0 0 0 0 0 2 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0   0.072000 1.400 1.400 4.400       166280           4           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0    0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0    2 0 0 0 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 0 0 3 4 2 2 0 0 0 0 0 1 1 3 1 0 3 2 2    1 2 2 0 2 2 1 8 14 26 24 29 47 47 68 65 63 55 42 41 26 29 17 8 4 4 1 0 1 2 0 0   0 1 1 2 0 1 2 1 0 0 1 1 1 0 0 1 0 0 0 1 0 0 1 2 1 2 1 0 0 0 0 0 1 1 2 0 2 2 0    0 0 0 1 1 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0    0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0   0.074000 1.450 1.450 4.500       179484           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0    1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 1 0 1 0 0 1 0 1 2 0 0 0 0 0 0 0 0 0 1 0    0 0 1 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0 1 1 1 2 0 0 1 1 2 1 0    1 1 2 2 0 1 5 6 10 20 43 50 57 62 53 62 66 45 42 33 27 26 23 14 3 0 2 0 1 0 0    1 1 0 0 2 1 1 0 0 3 0 1 1 1 0 1 1 0 1 0 1 2 1 0 0 1 2 0 2 0 0 0 0 1 1 3 1 0 0    2 1 1 1 0 0 0 0 0 0 1 2 0 1 0 0 0 0 0 1 1 0 2 0 0 0 0 0 1 0 2 1 0 0 0 0 0 0 1    0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0   0.076000 1.500 1.500 4.600       197657           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0    0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 2 0 0 0 1 0 0 0 0    0 0 1 0 1 0 0 0 0 0 0 0 0 1 2 0 0 0 2 1 1 0 1 1 0 1 1 3 2 1 1 2 1 0 1 0 0 0 0    0 1 1 1 0 5 3 7 12 24 38 32 41 48 54 66 71 49 46 31 38 25 15 8 6 6 5 0 1 3 0 1   1 1 1 1 0 1 2 0 1 0 0 0 1 0 2 1 2 0 0 0 0 1 3 1 0 0 0 0 1 1 0 1 0 1 1 1 1 1 0    4 1 1 1 0 3 0 0 0 2 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0   0.078000 1.550 1.550 4.700       212054           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0    0 1 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1    0 0 2 0 0 0 1 0 0 1 0 1 1 0 1 3 1 0 0 1 2 0 0 0 1 0 0 0 0 0 2 1 2 1 1 1 0 0 1    5 1 1 2 3 5 7 9 11 22 31 37 48 50 52 54 57 37 38 38 33 24 11 19 11 3 1 2 0 3 3   2 1 0 1 3 0 1 1 1 1 1 2 0 0 0 1 1 2 0 1 1 3 0 1 1 0 0 1 0 2 0 1 0 0 1 3 0 2 0    1 0 1 2 0 1 1 1 1 1 0 3 0 1 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0    0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0   0.080000 1.600 1.600 4.800       231971           3           0  0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 1 1 1 0 1 0 0 0 0 1 0 1 1    0 0 0 0 2 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 2 1 0 1 1 1 0 1 0 0 1 0 1 3 0 0 0 1 0    0 0 1 1 1 0 0 4 1 1 0 2 0 1 1 1 2 0 0 0 1 0 1 2 1 2 3 2 0 1 0 4 3 1 1 1 1 3 1    0 0 0 2 1 0 2 7 17 13 29 47 58 59 52 38 51 51 38 34 35 21 14 13 4 1 0 1 1 1 0    2 2 4 1 0 1 1 4 0 0 0 2 0 2 2 2 0 0 1 3 2 1 1 2 2 2 2 1 0 3 0 2 1 2 1 2 2 0 0    1 1 0 2 0 2 2 0 1 0 2 2 3 1 2 3 1 1 0 1 0 2 0 1 2 1 2 0 2 1 0 0 3 0 0 1 1 1 1    0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0   0.082000 1.650 1.650 4.900       252503           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 2 0 0    0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0    0 0 0 0 2 0 0 1 0 1 2 2 2 1 0 2 0 1 0 1 1 2 2 0 3 0 0 4 1 0 0 3 0 0 1 2 0 1 1    1 3 0 1 0 2 9 11 25 27 34 53 41 49 43 47 36 31 38 22 30 22 18 9 5 9 2 2 1 2 2    3 1 4 1 1 0 0 1 2 0 2 1 0 0 1 3 2 2 1 0 0 0 1 2 1 0 0 0 2 1 1 0 2 0 0 1 0 0 2    1 3 1 1 1 0 2 1 1 0 2 1 0 1 3 0 0 0 0 2 0 0 1 0 0 0 0 0 1 2 1 1 1 0 2 1 0 0 0    2 0 1 0 0 0 0 1 0 0 0 0 1 0 0 2 0 1 0 1 0 0 0 0 0 0 0 0 0 0   0.084000 1.700 1.700 5.000       267889           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 1    0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0    0 1 0 1 1 0 3 0 1 1 1 0 1 2 1 0 2 0 2 4 0 1 0 0 0 1 1 0 1 3 2 0 2 0 4 0 0 2 0    1 4 2 4 3 3 6 10 14 28 37 54 36 40 52 40 50 46 40 32 26 29 12 18 5 2 0 2 4 1 2   1 0 2 1 2 2 1 0 1 0 2 1 2 4 1 1 5 1 0 2 0 1 2 3 2 2 1 2 1 0 2 1 2 1 1 4 1 2 1    4 0 2 2 0 0 3 1 0 2 0 0 1 1 1 0 0 2 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 0 0 0 1 0    0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0   0.086000 1.750 1.750 5.100       290294           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0    0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 3 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 2    1 0 1 0 1 0 0 2 2 0 1 2 2 0 2 0 2 0 1 0 0 1 1 1 3 1 1 1 1 3 4 1 1 2 2 2 1 0 3    0 0 0 2 4 5 6 16 18 20 31 40 54 55 46 41 52 35 27 21 28 27 20 15 8 6 7 1 0 0 3   0 0 2 2 0 3 1 3 1 1 2 0 0 1 2 1 3 2 0 1 2 1 3 1 1 1 1 1 2 0 2 1 0 1 1 1 3 1 1    2 0 1 0 1 0 2 1 1 0 0 1 2 0 3 1 1 0 0 0 1 3 1 1 1 0 0 1 2 1 0 0 1 1 1 0 0 1 0    0 0 0 0 0 2 0 1 0 0 0 2 1 0 2 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0   0.088000 1.800 1.800 5.200       312476           6           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0    0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 2 0 0 0 1 0 1 0 0 0 0 0 0 2    1 0 0 1 0 0 1 1 1 1 4 2 0 1 0 0 3 0 0 0 0 0 1 1 4 0 0 0 0 1 1 2 1 0 3 0 0 2 2    4 0 3 1 6 9 10 13 21 24 32 43 33 41 43 49 50 32 26 31 27 12 16 17 3 3 3 5 0 3    0 2 1 3 3 2 1 2 3 1 2 1 1 1 2 0 1 1 0 2 0 3 0 0 2 0 0 0 0 1 0 1 1 3 3 0 1 1 1    1 1 1 2 2 2 0 3 1 0 2 2 2 0 0 0 0 3 1 2 5 1 1 2 0 0 3 3 0 2 2 0 0 0 0 1 2 0 0    1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0   0.090000 1.850 1.850 5.300       337348           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 2 0 1 0 1 0 0 0 1 0 0 0    0 0 0 1 0 0 0 0 2 0 1 1 0 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0    2 0 0 0 1 3 2 0 0 2 2 3 3 2 2 2 0 0 1 1 3 1 3 0 0 0 0 0 0 1 2 1 2 1 2 2 2 0 1    1 0 4 2 2 7 6 15 22 21 39 37 50 31 51 30 33 34 34 26 21 14 13 10 9 4 3 3 4 2 2   0 1 2 3 3 0 1 3 2 5 3 2 2 4 0 2 3 0 4 2 1 2 2 2 4 2 1 3 1 3 2 1 3 1 2 4 1 1 1    1 2 4 1 3 3 3 1 0 4 1 0 1 1 1 1 2 3 0 3 0 0 4 1 1 1 0 2 2 2 1 2 2 0 1 1 0 0 0    2 0 1 0 1 0 0 1 0 0 0 1 3 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 0   0.092000 1.900 1.900 5.400       357303           3           0  0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 1 1 0 1 0 0 1 0    0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 1 3 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 2 2 0 0 2    2 1 1 1 1 1 1 0 1 0 0 1 1 1 3 1 1 1 1 1 0 1 4 0 1 1 1 3 0 1 1 2 2 2 0 2 3 2 2    2 2 1 2 1 3 8 22 14 32 36 46 39 42 39 29 36 38 26 24 26 18 16 19 10 9 3 6 5 0    3 2 1 1 1 2 0 2 1 1 0 1 1 3 1 0 2 4 2 2 1 4 1 2 2 1 1 0 1 2 0 2 2 2 4 2 1 1 0    2 1 3 1 2 3 4 2 3 2 3 0 1 2 1 0 0 0 4 1 1 1 2 1 3 1 0 5 1 0 0 0 0 0 0 1 0 2 0    1 2 1 0 1 0 0 0 0 0 1 1 0 1 0 1 4 0 0 0 1 0 1 0 0 0 0 0 0 0 0   0.094000 1.950 1.950 5.500       383138           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 0 1 0 0 0 1 0 0 0 0 0 1 0    0 0 1 0 0 2 1 0 1 1 1 0 0 0 0 0 0 1 1 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 2 1 1 1 1    2 1 0 2 0 1 0 3 2 1 3 0 1 3 1 1 0 5 0 1 0 1 2 0 0 1 1 2 0 0 6 1 0 3 2 2 3 4 5    0 4 2 1 5 4 11 15 22 27 28 57 38 38 40 38 39 38 27 26 30 18 14 10 10 4 4 4 3 3   2 2 2 2 1 1 1 1 2 2 3 4 1 2 3 1 2 1 2 2 2 1 3 2 1 5 0 1 1 1 3 2 2 2 1 3 1 1 0    3 2 2 0 0 2 2 2 0 0 0 2 0 1 3 1 2 3 2 1 1 0 1 1 1 0 3 2 2 1 0 0 1 3 1 1 0 1 0    0 0 0 0 1 0 0 0 0 1 0 0 3 1 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0   0.096000 2.000 2.000 5.600       409868           3           0  0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 1 0 1 0 2 0 0    1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 2 0 1 0 0 2 0 2 0 0 0 0 1 0 0 2 1    2 2 2 1 2 1 1 1 1 1 2 0 0 1 1 0 1 0 2 1 2 0 2 0 3 1 2 1 3 1 5 0 2 2 1 2 4 1 2    0 3 1 4 7 5 9 13 22 19 31 27 28 41 34 39 37 22 23 21 22 17 23 15 8 9 3 8 0 3 1   2 2 2 3 1 0 4 2 4 2 2 2 2 4 2 1 1 0 2 0 3 0 3 2 2 1 2 2 1 4 1 2 2 1 1 5 2 1 2    1 2 2 1 0 2 4 3 2 1 2 2 3 2 3 1 2 1 1 1 1 2 1 1 2 2 1 2 3 2 1 1 0 2 2 4 0 1 1    1 1 1 0 0 1 1 3 0 0 0 0 0 1 0 0 2 0 1 2 0 1 1 1 0 1 0 1 0 0   0.098000 2.050 2.050 5.700       439102           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 1 0 0 1 0 1 0 1 0 0 0 0 1 1 0 1 0 0 1 1 0    0 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1 2 0 0 1 1 1 1 2 0 1 1 0 0 0 0 1 1 1 0 4 0 0    0 2 1 1 0 3 4 0 1 2 2 1 0 3 0 3 2 0 0 2 0 1 0 0 1 0 1 3 1 3 5 0 2 2 3 5 2 2 2    0 3 2 3 6 5 16 21 19 23 28 29 35 42 42 44 39 33 23 30 18 25 24 15 13 5 4 2 2 0   3 3 0 0 1 3 0 1 1 3 2 4 3 4 2 1 1 1 3 1 0 0 2 2 4 2 2 1 4 2 4 2 2 2 1 2 2 1 2    0 4 2 2 3 1 2 1 1 2 2 1 2 4 2 1 4 1 2 2 2 2 0 2 0 3 0 1 0 2 1 0 4 2 1 3 2 1 0    2 1 1 1 1 0 1 1 2 1 1 1 2 0 1 0 2 1 1 0 0 1 0 0 1 0 0 0 0 0 0   0.100000 2.100 2.100 5.800       467340           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 1 0 0 1 2 0 0 0 0 0 1 0 2 0 0 2 0 0 1 1 0 0    0 1 0 0 1 1 0 0 0 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 1 2 0 2    2 4 1 0 1 1 2 3 4 1 4 1 5 1 2 1 0 2 2 2 1 5 4 1 5 4 0 1 2 4 2 2 0 2 1 2 5 4 1    1 1 2 5 7 9 16 23 31 15 22 36 36 44 42 29 31 28 28 18 35 12 10 13 8 4 3 2 2 5    1 2 3 3 1 3 3 5 2 0 3 4 1 2 2 3 0 0 5 2 3 6 2 1 2 5 3 4 3 1 1 1 1 2 2 4 0 2 3    1 2 1 2 4 5 4 3 5 2 1 2 0 5 0 2 2 4 1 0 4 1 0 2 1 2 0 0 1 3 2 4 3 0 2 3 3 3 4    2 2 0 0 0 0 1 1 0 3 2 0 1 2 0 4 2 1 1 1 2 0 0 0 0 0 0 0 0 0 0   0.102000 2.150 2.150 5.900       497495           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 2 1 0 0 0 0 1 0 1 0 0 0 0 1 2    0 0 0 0 0 2 0 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1 1 1 2 0 0 1 0 0 0 1 0 2 2 1 0 0 0    2 0 2 1 1 1 6 3 2 0 3 2 2 2 1 1 3 4 1 0 1 2 4 2 3 3 1 1 1 1 3 3 1 4 1 3 4 3 2    3 1 2 2 5 11 11 14 26 27 28 28 28 36 39 42 29 33 24 20 29 18 13 17 13 6 10 4 3   3 6 1 0 1 0 2 1 3 2 3 1 2 3 1 2 1 2 0 2 2 3 1 3 1 1 2 4 4 1 4 3 2 2 3 5 5 3 0    2 5 3 5 1 4 1 1 3 4 2 2 2 2 1 3 0 1 1 2 2 4 2 1 3 2 0 1 2 1 0 2 3 1 2 0 0 0 2    0 0 1 3 0 0 1 2 0 3 1 0 3 1 2 2 1 1 2 0 0 0 0 2 0 0 1 0 0 0 0 0   0.104000 2.200 2.200 6.000       529288           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 2 0 0    0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 1 3 0 2 0 2 0 0    3 2 2 0 4 0 3 2 2 1 3 1 7 3 1 1 0 4 3 2 1 0 0 3 2 3 5 2 1 4 1 5 1 0 3 2 3 0 1    2 4 7 3 7 8 12 15 20 24 34 39 34 35 27 36 34 23 22 26 15 24 12 12 14 5 3 0 7 1   1 3 5 1 2 2 2 4 3 1 2 5 2 2 3 1 1 4 2 1 3 0 4 5 4 6 4 5 3 3 3 3 1 1 5 0 6 1 2    4 2 3 2 1 3 2 0 0 0 1 3 3 0 1 4 0 3 2 3 0 3 3 0 2 3 4 3 1 1 1 2 5 3 1 2 1 1 2    4 1 0 2 4 1 3 0 0 3 0 1 3 0 1 0 0 1 1 1 0 1 1 1 0 0 0 0 0 0 0   0.106000 2.250 2.250 6.100       560628           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 0 1 1 0 1    1 0 0 1 1 1 0 1 1 0 0 0 1 1 1 1 0 0 1 1 2 0 0 0 0 2 0 3 1 1 0 0 2 2 2 0 5 2 1    1 1 1 3 1 2 3 0 1 0 0 0 0 1 0 2 2 1 2 1 0 4 3 2 1 2 1 0 4 2 2 0 2 1 1 2 3 1 2    1 2 4 4 11 12 17 19 19 29 30 24 30 35 51 32 36 34 31 19 22 17 11 19 11 7 6 6 3   4 0 3 3 2 0 2 2 2 3 1 5 3 2 3 5 1 0 2 2 5 4 2 3 2 0 1 6 1 2 2 2 2 1 1 2 2 1 4    3 2 2 1 2 5 2 0 2 0 2 5 4 5 2 1 3 6 1 3 4 4 0 0 6 0 2 6 1 2 2 2 0 1 3 1 3 4 2    1 4 2 1 2 3 3 0 3 1 0 2 0 2 1 0 2 1 2 0 0 1 1 0 2 0 0 0 0 0 0 0   0.108000 2.300 2.300 6.200       593293           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 2 0 2 2 1 0 0 2 0 1 0 1 0 0 1 2 2 1 0    0 1 0 2 0 0 0 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 2 2 1 0 1 1 0 1 5 0 2 4 1 0 1 4    2 1 3 2 2 3 2 3 2 0 0 3 4 3 1 3 2 2 0 3 0 2 4 0 3 2 5 1 2 1 4 6 1 2 4 0 3 6 1    7 6 4 5 4 10 16 24 22 20 40 37 44 34 29 21 28 36 36 27 23 24 14 10 4 5 2 5 3 6   2 3 3 1 4 2 1 5 1 3 5 3 2 1 2 2 6 2 3 1 1 0 5 3 3 3 4 5 2 2 3 3 5 5 1 6 2 3 2    6 0 5 2 4 3 5 1 2 2 5 1 2 3 1 2 2 2 4 2 5 5 2 2 2 5 0 1 2 5 2 3 2 3 1 1 2 4 0    2 1 4 2 1 1 1 0 1 2 0 0 1 3 1 0 2 1 1 3 3 2 0 0 0 1 2 0 0 0 0   0.110000 2.350 2.350 6.300       636559           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 1 0 0 0 1 1 2 0 0 1 0 0 0 0 0 0 0    1 2 0 0 1 1 1 0 0 0 0 1 0 1 1 0 0 1 0 0 2 0 1 0 1 0 1 0 0 1 1 3 0 1 2 2 0 2 1    1 1 1 0 1 0 1 3 0 3 2 3 4 3 3 4 3 3 2 6 3 1 1 1 2 4 2 3 1 5 1 3 1 4 5 3 3 2 1    3 7 4 3 10 19 17 19 23 27 28 33 39 36 23 23 32 32 16 19 35 23 12 11 12 8 4 5 7   1 2 2 1 2 3 5 4 2 3 2 6 4 4 2 4 1 2 2 1 2 3 0 4 2 1 2 6 2 2 1 3 3 1 6 4 8 5 2    3 5 2 3 0 3 2 3 1 2 2 3 4 3 8 6 2 1 4 6 3 1 2 0 2 0 2 5 0 3 3 3 3 1 3 3 2 5 4    2 1 4 2 2 4 4 1 3 2 5 2 3 1 2 0 4 0 1 0 6 3 1 2 0 2 0 1 0 0 0 0   0.112000 2.400 2.400 6.400       670484           3           0  0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 2    0 1 1 1 3 0 0 0 2 1 3 0 1 1 1 0 1 1 1 0 0 1 2 0 1 3 1 5 2 3 0 4 0 2 0 0 1 2 1    0 1 0 0 1 0 2 2 3 2 3 2 2 2 3 4 4 2 3 5 3 3 2 3 3 4 2 4 0 3 2 4 4 1 3 1 3 4 2    2 5 2 8 6 12 17 14 22 27 26 29 39 30 24 36 22 22 20 9 19 15 5 12 16 4 7 5 7 5    5 1 4 5 5 4 4 1 4 4 3 3 3 4 2 2 4 2 4 4 4 4 0 2 3 2 1 4 3 6 1 3 3 3 4 5 4 2 2    2 5 3 0 2 5 4 2 5 3 5 1 1 3 1 1 3 6 6 2 3 2 0 3 2 4 3 4 1 2 2 6 2 0 3 2 2 5 3    3 5 2 1 0 3 1 1 2 2 0 1 1 3 2 3 2 1 1 1 1 3 2 1 0 0 0 0 0 0 0   0.114000 2.450 2.450 6.500       711783           4           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 0 0 1 0 2 1 2 0 1 0 0 1 0 0 1 1 1 1 0 0 0 1    1 2 0 1 1 0 0 0 2 1 1 1 1 1 2 1 2 3 3 1 1 1 2 3 1 3 2 2 1 0 1 1 4 4 4 1 0 4 0    0 1 1 2 1 3 2 0 3 4 1 1 1 1 3 2 0 1 3 2 1 2 1 0 3 3 2 5 4 2 5 3 4 2 2 5 3 3 3    3 5 5 8 7 14 12 28 22 24 23 36 33 26 32 27 26 18 30 24 15 13 19 15 17 6 5 7 5    4 3 5 3 1 4 4 9 5 3 1 4 0 0 6 2 5 3 3 3 1 2 3 2 4 1 5 5 3 8 2 1 1 4 1 7 5 6 6    4 4 3 2 6 3 3 3 3 1 3 4 5 4 3 4 3 1 2 3 1 2 1 2 2 6 5 2 2 2 4 2 2 0 2 3 3 2 7    4 4 1 4 2 0 3 1 1 2 1 2 3 1 3 2 2 4 3 1 4 0 0 4 2 2 2 1 0 0 0 0   0.116000 2.500 2.500 6.600       745364           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 1 2 1 1 2 1 1 1 0 1 0 2 0 1 1    0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 2 3 0 1 4 4 0 4 0 1 0 1 3 3 0 2 1 2 3    2 1 1 1 2 0 4 0 0 4 5 2 5 4 1 3 5 5 4 0 4 4 2 3 2 3 5 2 2 4 2 3 4 2 3 3 3 3 3    2 4 12 10 13 14 19 22 23 24 36 19 32 25 25 36 24 18 20 21 14 18 13 8 6 9 2 9 5   2 5 3 4 4 3 3 0 4 3 2 5 3 4 2 2 6 3 4 0 2 4 1 3 4 7 4 5 3 2 4 5 5 3 4 4 4 2 3    2 4 4 2 1 5 7 1 5 2 4 1 5 5 3 4 4 3 2 4 2 4 0 6 2 3 4 1 2 2 2 4 1 4 2 2 2 5 6    5 1 4 4 2 3 3 3 1 4 3 4 2 6 2 5 3 2 2 1 3 2 2 5 1 1 0 0 1 0 0 0   0.118000 2.550 2.550 6.700       791846           4           0  0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 2 1 1 0 0 0 0 0 1 0 0 0 1 1 0 1 0 1 0 1 1 0 1 0    1 4 1 2 3 0 3 1 0 1 1 1 0 3 1 2 1 1 1 0 0 1 1 1 3 1 3 2 3 1 2 2 1 3 2 4 1 4 0    2 4 1 4 3 2 1 1 2 1 3 2 3 3 2 1 1 5 3 3 3 3 2 3 4 3 5 3 1 1 2 2 3 5 1 2 1 1 4    4 6 9 6 6 13 17 21 20 24 22 25 20 29 23 28 30 26 27 18 20 17 16 17 12 10 8 5 6   6 6 4 3 1 2 4 6 9 2 2 3 5 7 6 2 3 8 5 4 5 6 4 6 5 3 5 3 2 5 3 2 8 3 5 4 5 3 5    4 3 4 8 4 3 8 3 3 3 1 1 2 2 5 4 7 3 2 3 3 2 2 3 6 3 2 2 1 1 5 2 5 6 3 5 3 4 1    3 1 2 1 0 4 1 4 2 2 2 3 1 1 1 1 3 2 0 1 6 1 1 0 2 1 0 1 0 0 0 0   0.120000 2.600 2.600 6.800       833394           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 2 1 1 1 2 1 0 0 0 1 0 1 0 0 0 1 0 0 1 1 2 1 0 0    0 0 0 2 2 0 3 1 0 0 2 1 1 1 1 0 1 2 1 5 0 1 0 2 2 1 2 0 4 2 1 4 3 4 2 2 1 2 1    5 2 3 1 3 0 2 2 2 2 3 4 0 4 2 3 3 4 5 2 2 6 3 4 5 5 5 3 4 6 5 1 3 0 5 4 5 1 3    2 2 6 18 13 17 27 27 21 28 28 24 26 27 29 23 21 16 17 19 22 14 11 9 5 14 7 7 6   4 4 12 3 6 4 5 4 6 4 2 0 1 8 1 6 8 5 2 3 4 5 6 4 2 5 8 3 1 1 6 3 7 8 4 1 6 5 2   8 11 5 6 5 6 2 4 5 1 2 7 2 2 5 5 6 3 3 2 3 8 5 1 9 3 3 2 3 6 3 5 3 2 4 6 3 1 3   5 4 4 4 6 3 3 5 0 2 2 5 1 3 2 2 1 4 2 0 2 2 2 2 4 1 2 1 2 1 1 0   0.122000 2.650 2.650 6.900       876007           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 2 1 1 1 1 2 2 1 0 0 1 0 0 0 1 1 0 0 0 2 0 0    4 1 0 2 1 2 0 1 2 0 1 3 2 1 0 1 1 0 1 2 1 0 2 3 3 5 3 3 3 0 1 4 0 1 5 3 4 3 1    2 2 2 4 1 3 3 3 2 3 2 3 2 1 4 4 2 2 5 5 3 4 1 2 1 2 4 2 4 7 2 4 4 2 7 3 5 7 5    3 6 8 10 10 18 21 22 24 14 25 27 29 31 22 25 24 21 27 20 19 22 19 14 13 14 10    5 7 3 4 5 5 3 1 4 3 8 4 5 4 0 3 4 3 4 1 7 6 1 1 3 4 4 3 4 3 6 4 3 4 2 4 4 3 5    6 5 1 1 6 2 6 6 3 5 5 3 2 6 5 4 3 4 6 4 3 5 5 6 5 6 2 4 2 1 2 2 4 2 7 6 2 1 3    1 5 2 1 2 4 3 3 3 2 5 2 4 1 4 3 2 2 5 5 1 1 3 3 2 2 2 2 1 0 0 0 0 0   0.124000 2.700 2.700 7.000       925764           3           0  0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 2 1 3 0 1 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0    1 2 0 0 3 2 0 1 2 1 1 2 0 2 1 2 2 0 0 2 3 2 3 2 2 3 2 2 4 0 2 0 5 1 3 2 3 1 2    3 2 0 6 4 3 6 2 5 0 5 2 1 4 4 5 7 4 2 3 5 2 0 2 5 2 4 7 4 4 4 8 5 3 1 7 2 2 1    5 5 5 14 19 16 22 18 30 29 25 36 23 23 22 25 25 27 26 23 14 20 16 16 10 6 6 6    4 2 6 6 6 6 6 4 6 1 0 3 4 4 5 2 4 3 2 4 4 5 5 5 6 10 6 3 6 8 5 5 8 7 4 6 4 3 4   8 5 5 7 4 6 3 5 8 4 3 4 4 3 4 3 1 3 3 7 2 4 8 3 6 4 3 3 2 5 4 4 3 7 4 5 4 4 3    4 7 2 3 3 4 3 0 2 2 4 3 4 2 4 2 2 6 4 4 6 6 1 5 1 1 2 1 0 0 0 0 0   0.126000 2.750 2.750 7.100       969560           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 1 1 0 1 2 0 2 0 2 2 0 1 1 1 0 0 1 0 1 1 1 1 2 0    1 2 2 1 2 0 0 1 0 1 0 2 1 0 1 0 1 1 2 0 3 0 3 4 3 1 3 2 0 4 0 1 2 0 3 1 1 2 3    2 2 2 5 1 7 1 5 1 5 4 2 0 0 1 2 1 3 2 3 3 5 4 10 10 2 5 11 4 1 2 1 7 3 5 4 4 1   5 10 8 7 9 9 20 20 21 33 21 28 20 27 32 21 29 22 20 24 15 13 27 14 13 15 10 9    3 11 6 7 5 3 6 8 5 4 4 1 3 3 5 2 7 3 6 6 1 6 4 6 5 3 4 2 4 3 3 9 4 5 4 4 5 2 3   10 4 3 2 6 10 6 3 6 5 5 5 4 8 8 5 4 3 6 4 4 2 4 4 4 5 7 4 4 4 4 5 2 2 3 4 5 2    1 3 2 6 2 7 7 1 6 4 4 6 5 5 4 0 2 2 3 2 7 5 0 4 1 1 4 6 1 0 3 2 0 0 1   0.128000 2.800 2.800 7.200      1022713           5           0  0 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 0 1 0 1 1 0 0 1 1 1 0 0 0 2 1 0 0 4 0 0 1 2 3    1 1 0 1 0 1 0 3 1 1 1 2 2 1 1 1 3 1 0 2 4 2 1 2 1 2 0 3 1 3 2 1 5 2 1 3 1 2 1    5 3 2 1 2 5 3 8 2 3 2 5 5 4 3 6 4 4 4 3 2 3 8 4 3 4 5 4 5 4 7 6 5 3 3 3 5 2 9    10 7 9 12 11 13 17 15 22 19 33 24 28 30 26 21 24 22 27 20 26 16 10 10 9 20 10    7 4 5 7 7 2 7 5 3 5 1 6 1 5 7 5 6 3 1 5 1 1 3 4 8 6 3 9 5 5 3 6 7 4 6 7 6 4 2    4 6 2 3 6 5 6 7 6 4 4 9 6 8 6 9 7 1 2 6 2 7 5 4 4 4 4 5 5 4 4 3 6 3 5 3 6 4 3    6 6 2 5 2 8 4 5 3 6 5 4 5 8 4 3 5 6 5 5 2 8 1 2 2 5 4 1 3 0 0 0 0 0   0.130000 2.850 2.850 7.300      1081669           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 5 0 0 2 2 0 0 1 0 0 0 1 1 0 2 0 2 2 2 1 0    1 0 2 2 3 1 1 0 2 0 1 0 2 1 1 2 2 0 1 4 3 0 2 1 1 0 2 5 2 1 0 1 3 2 5 2 1 2 5    2 3 4 3 6 6 6 4 6 6 3 1 3 2 3 4 7 5 2 9 7 4 1 4 4 3 2 2 2 7 4 8 4 7 4 6 8 5 1    8 6 10 18 21 18 15 21 24 21 26 22 30 28 27 23 22 21 17 25 20 17 13 17 9 12 7 8   5 4 4 5 5 2 4 1 1 2 5 7 6 4 9 7 7 5 5 5 5 5 2 4 5 3 6 8 2 4 9 4 10 5 1 4 5 5 5   10 3 2 8 6 5 7 3 13 3 3 6 5 1 4 5 9 5 2 7 4 5 6 3 5 6 5 4 5 9 6 4 3 4 4 4 5 8    5 5 0 3 6 3 4 3 7 5 6 4 3 3 6 8 4 1 3 1 2 7 3 4 6 6 1 3 4 1 0 1 0 0   0.132000 2.900 2.900 7.400      1131887           3           0  0 0 0 0 0 0 0 0 1 0 0 1 2 1 1 0 0 0 1 2 2 1 1 0 2 1 1 0 1 1 1 0 2 2 3 1 0 1 0    1 0 2 0 2 0 1 4 0 1 2 2 0 0 0 2 3 0 1 2 3 0 1 2 3 5 6 2 2 3 1 4 4 8 4 3 3 3 7    2 2 5 7 4 1 2 4 8 1 5 2 7 3 4 2 9 6 5 5 6 2 2 3 6 2 5 6 7 7 2 8 3 3 3 3 6 6 5    3 10 15 15 17 19 13 29 20 23 22 34 28 28 33 20 20 22 17 22 18 15 19 14 11 9 13   6 6 13 4 2 9 8 8 7 6 5 6 4 4 9 6 2 8 9 7 2 6 3 7 3 6 3 7 4 4 5 4 5 6 4 7 5 4     10 2 6 6 8 3 6 6 9 5 8 8 7 6 4 8 5 7 5 5 7 3 5 5 5 10 7 3 8 7 5 7 2 4 4 6 4 10   7 6 4 4 4 4 3 2 4 2 6 5 9 7 3 2 6 2 5 1 5 6 2 2 1 9 2 5 2 5 1 0 0 0 1 1   0.134000 2.950 2.950 7.500      1185706           3           0  0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 3 2 1 0 1 1 0 0 0 0 0 1 0 1 1 2 0 1 0 1 2 0 0 0    1 1 0 1 1 1 0 2 2 0 1 3 3 2 3 0 0 2 2 3 2 1 1 3 0 0 1 1 3 4 3 1 1 9 1 4 0 1 3    4 1 3 2 6 4 7 7 3 2 8 5 2 5 2 4 6 7 3 7 7 8 4 7 2 4 7 7 9 9 2 5 5 8 3 5 7 3 6    10 6 10 15 10 13 14 29 21 23 37 26 20 28 20 16 24 25 16 19 21 20 20 17 11 10     12 8 7 7 5 5 5 4 5 6 7 3 6 5 7 5 11 9 6 8 11 6 4 6 8 8 7 7 7 4 5 4 8 5 4 3 4 8   10 7 9 4 7 6 8 9 7 3 5 7 7 6 2 6 4 7 3 9 8 12 7 6 6 6 4 5 7 2 4 7 3 2 4 4 7 1    4 5 0 4 6 3 10 8 5 4 3 4 5 7 5 7 5 7 3 5 2 5 6 4 5 2 4 1 6 6 2 4 2 0 0 1 0   0.136000 3.000 3.000 7.600      1238426           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 2 4 0 2 0 2 2 0 1 1 1 0 2 1 1 2 1 0 1 1 0 3 1 0    0 1 0 1 0 0 2 1 1 0 4 0 2 6 3 3 4 0 3 1 2 4 0 4 4 0 1 5 2 2 5 1 3 4 3 3 5 2 4    4 6 2 5 3 4 5 4 5 6 7 5 6 2 8 3 4 7 2 4 4 3 7 6 5 1 4 8 3 7 10 3 3 6 1 5 3 8     11 5 7 15 11 15 17 21 23 21 24 28 16 21 29 15 22 27 28 20 13 19 13 7 15 10 11    9 6 8 8 4 7 5 4 6 5 10 6 7 8 9 3 5 5 9 5 9 4 4 4 3 5 7 4 10 6 8 4 9 8 4 6 7 9    11 6 8 3 5 8 12 3 6 9 7 11 9 6 7 4 7 7 7 2 5 4 5 0 2 9 5 5 5 10 7 5 6 3 9 4 4    13 2 7 5 7 4 7 2 0 4 5 4 4 6 8 1 2 5 6 4 7 3 11 4 3 3 5 5 4 4 3 1 4 2 2 1 1 0   0.138000 3.050 3.050 7.700      1299809           6           0  0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 2 1 1 0 0 1 0 0 2 0 1 2 0 0 3 0 0 1 3 1    2 0 2 0 1 1 2 1 2 3 2 1 2 5 2 2 2 4 3 2 5 3 0 3 2 4 5 4 3 0 5 4 1 4 3 8 6 4 4    7 4 5 4 3 6 5 6 10 3 6 6 2 6 3 4 4 3 6 7 6 8 3 4 7 5 4 9 2 4 8 5 9 8 3 7 5 7 7   13 7 11 15 17 16 18 18 18 20 17 26 25 19 20 26 31 22 18 20 18 14 11 16 4 7 11    10 8 9 9 6 3 8 8 7 5 6 10 3 5 6 6 3 12 7 8 8 2 10 4 13 9 9 12 4 5 9 7 9 5 7 4    8 9 6 7 8 10 8 7 5 7 11 6 4 4 4 6 4 9 4 5 9 10 7 4 12 7 4 9 5 10 10 6 8 4 7 2    4 7 2 6 8 4 11 3 3 9 7 6 7 3 8 7 4 8 5 3 7 4 5 5 7 4 6 7 5 5 3 5 2 5 4 1 2 0 0   1   0.140000 3.100 3.100 7.800      1361810           3           0  0 0 0 0 0 0 0 0 0 1 0 0 0 0 3 2 1 0 0 0 1 1 1 2 0 0 0 0 1 0 2 2 2 1 0 0 3 3 0    2 0 6 2 3 1 0 3 3 1 2 2 5 3 5 3 3 2 2 7 3 2 2 3 4 2 3 4 4 1 3 7 4 5 4 2 3 5 4    2 1 3 6 3 4 3 8 7 6 5 3 5 11 5 5 3 3 7 3 6 4 4 2 4 4 4 1 5 5 9 6 6 9 3 10 8 6    8 3 10 8 16 16 13 18 23 29 25 19 19 20 27 19 22 27 24 21 15 18 11 20 21 17 12    5 18 6 12 7 9 11 7 12 11 4 8 8 4 8 7 7 2 6 4 4 9 6 9 3 4 7 7 7 4 10 4 11 5 8 8   8 5 4 4 8 6 4 9 8 12 12 8 5 8 3 10 8 7 5 3 5 6 8 5 6 10 7 2 11 2 5 5 6 8 10 2    7 5 5 14 2 7 3 9 3 5 2 8 2 3 4 4 7 9 5 4 7 6 7 5 6 3 5 4 7 6 7 7 9 3 0 2 1 1 1   0 0   0.142000 3.150 3.150 7.900      1429499           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 1 2 1 1 0 0 0 3 0 2 2 1 0 3 0 2 1 3 0 0 1    1 3 1 2 4 1 5 3 5 1 0 7 1 3 2 3 2 2 2 3 0 0 1 3 6 3 2 2 4 4 4 6 4 3 6 4 10 3 7   2 5 4 7 4 5 8 4 7 4 1 7 11 5 2 10 2 11 3 7 8 10 9 6 3 5 3 6 3 10 11 5 5 9 7 10   8 9 5 15 11 9 18 18 15 24 17 23 17 19 25 17 24 18 37 16 17 21 17 14 20 17 15     15 9 4 11 7 3 8 10 8 8 6 8 3 4 5 8 4 6 3 9 9 6 2 10 4 4 3 8 4 9 1 7 5 9 7 10 9   10 4 6 5 8 6 6 10 10 6 5 7 6 6 10 5 7 8 8 8 7 7 11 12 8 3 10 6 9 13 11 4 6 7 6   3 10 5 8 4 7 7 7 5 8 4 9 5 5 7 6 6 7 11 11 7 8 5 3 5 7 7 10 3 3 6 5 7 9 2 3 7    1 0 0 0 0 1   0.144000 3.200 3.200 8.000      1493946           3           0  0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 2 3 0 0 1 2 1 1 1 4 1 0 1 0 1 2 1 3 1 1 1 1 2    1 1 3 2 6 0 4 0 1 4 2 4 5 2 1 3 0 2 2 4 2 3 2 4 3 5 4 4 4 1 5 1 3 4 5 6 4 7 2    8 8 8 5 3 6 0 7 3 2 2 5 7 5 7 5 8 9 6 4 3 6 8 6 10 2 5 6 3 3 6 6 6 6 17 5 10 6   6 11 11 13 12 21 26 18 24 21 24 23 30 18 22 20 24 19 13 17 25 22 17 15 8 13 7    10 8 9 6 7 9 8 7 8 9 7 7 6 12 5 9 9 12 9 12 6 9 7 10 7 7 4 9 7 4 2 7 4 5 8 8 9   7 6 7 5 9 4 8 13 6 5 4 7 9 6 7 7 9 4 4 5 8 10 9 10 6 6 7 9 12 11 8 8 9 11 5 8    7 5 5 8 5 9 10 5 5 11 11 6 8 8 4 8 5 5 5 4 7 4 5 6 5 6 6 7 7 4 2 6 3 2 1 0 0 0   0 0   0.146000 3.250 3.250 8.100      1562352           5           0  0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 2 0 1 2 1 1 0 0 1 0 1 2 0 0 0 3 1 2 0 4 4 2 0    0 2 3 2 0 1 3 3 4 0 1 4 3 3 4 5 5 4 2 1 4 2 5 3 2 7 6 3 5 6 5 5 5 1 5 2 7 4 8    7 4 6 5 7 5 3 5 8 1 6 4 6 8 7 6 7 6 3 4 6 3 5 8 4 10 3 3 11 6 5 3 9 6 4 3 17 9   11 11 24 13 15 14 25 26 26 21 17 32 32 22 18 25 29 29 27 24 21 12 23 14 12 11    9 17 7 9 11 3 7 6 5 5 12 3 6 8 7 4 7 11 10 8 9 5 8 2 10 9 8 10 10 7 7 4 7 5 7    7 9 10 8 7 7 16 6 8 10 5 6 6 12 12 7 11 11 8 9 7 8 12 10 7 8 7 11 8 9 7 7 4 9    4 7 14 9 8 8 13 9 8 7 13 5 9 5 7 4 9 5 7 8 7 8 7 3 10 9 3 4 4 4 5 2 6 6 3 5 10   4 4 2 3 0 1 0 0   0.148000 3.300 3.300 8.200      1630559           3           0  0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 4 2 1 1 1 2 1 2 0 2 1 5 0 1 1 4 0 2 1 4 5 3 0    1 1 1 2 1 3 3 3 1 1 1 1 1 3 4 6 6 8 8 4 3 2 7 2 2 1 7 4 4 5 1 10 6 4 4 4 3 3 3   6 11 6 4 5 4 8 5 5 9 4 5 5 7 6 4 13 12 3 6 7 5 2 7 9 7 8 8 4 7 6 4 10 6 8 9 9    9 13 15 17 23 25 13 16 24 22 26 21 27 24 24 21 21 21 15 17 22 25 21 22 17 14     11 8 12 5 9 7 8 5 11 10 6 6 5 9 13 10 9 8 8 8 6 4 9 10 9 9 7 8 7 5 7 8 14 13 5   14 5 12 11 8 9 6 5 4 9 13 7 10 13 11 11 8 5 9 10 8 7 6 7 13 3 13 8 7 13 17 5 8   5 10 7 12 7 6 6 9 7 8 8 11 8 11 9 11 11 8 5 6 10 4 9 3 10 8 7 10 8 7 8 10 10 7   4 11 5 7 8 2 4 3 0 0 1 0 1   0.150000 3.350 3.350 8.300      1707576           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 1 2 1 0 2 0 2 3 1 3 2 2 2 2 0 2 1 4 3 2 2 3    1 2 1 0 2 2 4 2 5 3 3 5 2 8 4 5 4 2 3 6 7 6 1 0 7 4 7 7 6 5 4 3 4 6 6 7 6 2 7    4 4 2 5 5 6 9 3 3 3 6 6 5 3 5 7 8 8 6 8 8 6 8 3 9 6 6 8 8 6 4 8 6 6 10 4 11 6    11 15 23 16 8 17 20 21 19 24 15 14 19 21 30 25 21 15 19 16 18 21 21 15 14 12     16 8 10 12 7 10 9 8 10 10 7 9 8 10 12 6 6 9 11 6 5 9 12 6 7 12 7 5 6 8 5 9 4     11 9 8 8 10 7 6 10 7 11 13 7 4 13 11 8 11 9 16 6 12 11 10 10 19 2 9 11 8 7 8 8   6 13 6 10 12 12 9 12 9 9 8 7 7 9 6 12 8 4 9 9 8 5 7 8 9 5 12 5 7 5 9 10 9 10 3   6 6 8 7 11 3 5 5 4 2 0 0 0 0   0.152000 3.400 3.400 8.400      1777231           3           0  0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 1 3 1 0 3 4 2 3 3 3 3 3 2 1 1 1 1 3 3 0    1 8 0 0 5 3 7 4 4 4 4 4 3 5 2 2 5 3 6 1 7 6 1 2 2 5 2 1 6 6 8 7 7 5 10 4 1 6 9   3 4 5 3 5 8 4 9 8 11 8 3 2 7 7 9 10 9 10 8 6 8 6 8 7 10 8 7 3 8 4 10 7 6 8 9 6   5 16 9 19 24 23 17 23 24 22 30 21 15 23 27 20 20 20 18 20 23 18 17 15 19 17 18   13 9 4 4 7 12 7 10 4 8 6 10 5 6 13 2 3 8 7 8 7 3 11 8 7 9 7 19 7 8 9 6 14 8 8    11 10 11 13 14 10 16 8 9 13 8 9 9 12 7 12 11 6 9 15 5 9 9 9 11 11 13 6 10 6 4    12 9 9 12 11 8 6 9 16 10 10 10 8 10 10 6 7 4 1 15 6 8 4 9 13 11 8 10 11 9 8 3    3 6 6 7 9 4 6 8 7 4 2 1 2 2 1 0   0.154000 3.450 3.450 8.500      1849489           6           0  0 0 0 0 0 0 0 0 0 0 1 1 3 0 1 2 2 0 1 4 1 1 0 1 0 2 1 0 0 1 1 1 1 6 3 6 1 3 1    3 3 0 6 0 4 2 7 4 6 4 4 3 7 4 5 7 5 5 2 3 9 9 2 5 5 3 9 4 2 7 6 2 8 2 5 7 12 6   5 4 5 10 4 12 10 6 4 14 7 9 10 11 7 7 7 7 3 9 7 4 3 8 7 5 7 9 6 8 9 6 8 8 12 6   5 11 12 13 11 13 21 26 19 23 25 18 23 22 23 23 18 27 20 15 20 25 24 19 18 12     14 13 15 8 15 10 11 7 9 13 11 12 13 11 11 7 11 13 6 5 10 6 6 10 8 14 5 14 11 8   5 9 7 10 10 8 7 15 13 3 13 12 18 15 7 10 9 10 8 15 9 6 8 9 10 10 9 5 7 7 5 10    11 13 12 12 12 10 6 17 10 11 9 4 8 7 6 6 9 12 8 16 18 7 5 10 8 12 10 15 6 13     11 6 10 16 10 11 16 8 9 5 11 10 14 11 5 2 5 7 3 1 1 0 1 0   0.156000 3.500 3.500 8.600      1920727           4           0  0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 2 1 2 0 3 0 1 1 0 1 0 3 0 4 4 1 3 1 2 3 3 4 3    1 2 3 9 5 2 3 7 3 3 6 5 2 6 1 4 3 2 3 6 5 1 8 3 8 5 3 7 6 13 11 9 5 8 7 7 5 8    7 4 8 6 4 10 4 6 5 6 9 9 12 6 7 10 9 9 8 8 3 8 9 8 8 2 12 11 13 8 13 7 8 6 6 9   6 8 16 13 14 16 16 22 20 21 21 17 20 18 19 22 20 11 20 22 21 14 19 15 23 17 15   12 14 19 16 10 11 14 11 9 11 9 12 8 16 14 9 6 18 10 11 7 10 11 17 10 13 8 10     12 9 12 7 7 10 10 11 11 9 8 8 14 10 10 9 14 9 14 13 9 19 16 17 4 11 8 12 11 10   21 6 10 8 9 12 9 7 7 12 7 16 14 10 13 6 13 8 9 10 6 10 8 7 10 4 6 11 19 12 6 7   5 8 11 10 12 13 9 6 10 5 11 11 4 14 10 7 2 6 5 1 2 5 1 1 0 0   0.158000 3.550 3.550 8.700      1999833           3           0  0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 2 2 3 2 2 2 1 2 3 0 1 0 1 3 2 0 0 3 2 3 2 5 7 0    3 4 1 10 7 7 4 5 2 3 4 3 8 3 6 4 4 4 8 2 3 4 5 5 7 1 6 7 8 1 6 8 1 4 4 11 9 4    7 11 9 10 5 6 8 4 3 9 7 9 11 5 5 8 8 4 8 7 8 11 9 12 6 4 13 4 12 10 6 9 11 10    11 10 11 11 11 14 15 14 23 18 17 29 16 26 23 15 19 14 18 19 22 31 13 21 20 12    16 15 14 18 17 15 8 12 14 13 10 10 10 10 10 13 11 6 8 11 8 14 8 10 11 11 8 10    13 5 14 7 12 9 10 10 12 15 18 8 6 9 9 12 8 9 20 14 16 10 11 14 5 5 13 6 11 9     11 15 6 9 13 11 7 8 7 10 8 16 12 11 8 10 14 11 17 11 8 16 13 9 10 5 10 17 13     14 16 8 10 9 11 5 10 9 10 12 8 11 12 11 8 6 7 12 15 13 12 7 13 5 0 3 2 0 0 0 0   0.160000 3.600 3.600 8.800      2073149           3           0  0 0 0 0 0 0 0 0 0 1 0 0 0 0 2 1 2 1 2 2 1 0 2 2 1 0 3 6 4 5 5 2 2 2 5 5 3 6 4    6 4 5 2 4 4 3 2 4 6 3 3 6 5 7 4 5 7 5 3 5 6 13 5 3 10 5 9 7 4 5 6 5 10 6 5 5 6   6 4 14 7 6 11 6 9 10 9 8 5 3 8 10 10 6 6 8 9 5 6 14 7 11 10 9 9 11 13 8 4 5 10   12 6 16 8 8 7 19 20 23 10 16 27 25 23 19 26 21 16 20 21 24 18 25 8 11 13 16 18   13 22 18 9 16 4 16 10 12 13 9 7 9 8 17 11 10 13 10 14 4 9 12 16 8 9 16 17 13     11 14 8 8 13 9 11 15 10 11 14 8 6 4 9 11 18 9 9 8 9 15 11 11 11 9 6 13 13 10 7   8 10 15 14 9 7 4 10 12 17 10 14 13 10 10 12 20 9 7 6 11 15 11 10 8 9 6 10 13     17 6 8 9 6 13 13 16 10 15 5 11 14 11 12 6 5 12 9 4 9 2 4 1 1 0 0 0   0.162000 3.650 3.650 8.900      2156456           5           0  0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 2 0 1 1 3 2 3 4 3 3 2 1 3 6 5 2 3 4 4 3 6 2 3    4 4 5 5 3 4 1 4 5 9 3 3 4 3 3 8 5 6 12 2 10 3 4 6 8 9 8 8 2 2 7 5 8 2 8 9 7 2    6 8 6 5 8 2 7 5 6 13 5 6 8 11 6 10 5 6 3 8 10 11 10 10 14 10 11 8 11 8 12 6 12   5 15 12 13 10 13 13 18 23 12 21 18 21 23 20 30 20 23 26 24 24 21 21 29 19 21     16 23 20 13 19 13 16 11 15 13 13 11 8 11 14 14 13 4 16 15 18 13 9 19 8 11 6 9    14 8 13 12 13 10 13 10 14 11 13 11 8 10 13 11 11 14 11 8 14 11 10 9 14 12 14     18 8 12 7 13 12 10 14 14 8 12 17 11 13 9 12 12 15 7 9 13 17 11 11 11 12 17 12    11 16 15 8 9 12 7 13 15 11 16 7 10 7 14 5 18 10 10 8 8 6 6 13 14 6 9 11 9 9 3    5 1 1 3 0 0   0.164000 3.700 3.700 9.000      2234753           3           0  0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 4 1 4 2 1 3 1 1 3 2 3 3 1 3 6 2 4 4 3 3 3 6 5 2    6 4 1 3 3 7 1 4 4 6 12 4 5 2 6 4 9 3 1 8 11 5 2 7 6 3 8 4 7 3 8 3 9 6 7 8 9 2    7 6 9 6 15 6 9 5 9 4 9 17 15 10 2 10 6 8 12 12 11 12 10 9 7 11 8 7 5 11 10 14    16 7 7 7 13 15 10 16 17 21 19 14 18 24 19 27 27 24 20 22 24 21 20 14 24 17 17    18 32 15 12 13 15 12 8 14 11 11 19 11 14 15 18 10 5 12 11 11 9 15 9 7 9 16 12    9 12 10 15 9 18 7 11 12 14 7 20 8 10 13 14 11 6 6 9 11 8 10 16 8 17 13 17 9 16   11 10 9 13 20 17 14 12 10 13 11 9 9 17 20 10 16 8 14 13 14 18 15 15 8 10 12 11   22 12 13 9 12 9 11 14 19 12 12 8 8 12 11 19 11 11 12 15 11 15 13 9 9 10 9 4 9    4 2 1 0 0   0.166000 3.750 3.750 9.100      2327990           3           0  0 0 0 0 0 0 0 0 0 0 0 0 3 2 2 0 1 2 2 1 1 0 0 3 1 4 2 6 4 2 4 3 2 5 5 2 3 1 3    1 2 10 2 7 4 3 4 3 3 4 3 10 6 9 6 3 8 5 5 3 4 4 6 8 4 4 7 5 5 11 14 5 3 6 8 8    7 10 11 7 17 7 11 10 8 7 8 12 13 11 12 6 13 9 7 7 6 5 8 13 10 10 14 11 11 8 12   15 14 9 13 10 9 18 13 18 12 23 14 17 24 15 23 25 31 19 17 29 19 19 19 26 25 19   17 22 19 19 19 11 11 12 22 21 8 10 18 10 14 19 17 13 14 10 6 9 10 15 11 5 13     13 11 11 17 16 9 7 14 7 19 6 10 13 7 12 18 14 7 12 15 13 13 9 13 13 13 12 12     14 12 19 10 16 18 18 12 8 10 10 9 7 14 9 11 13 12 8 15 12 11 10 12 11 17 15 19   14 14 12 7 7 12 11 15 16 12 11 12 10 19 19 12 14 12 15 11 20 13 7 18 9 15 19     16 11 5 9 8 6 2 4 0 2 0 1   0.168000 3.800 3.800 9.200      2406866           3           0  0 0 0 0 0 0 0 0 0 1 0 2 0 1 0 2 3 2 3 1 2 1 2 2 5 2 1 2 3 2 2 2 5 3 5 3 3 1 3    6 8 6 1 3 9 6 3 6 10 5 5 7 4 5 7 12 9 5 7 5 6 6 8 3 5 4 7 8 5 6 5 8 13 4 10 2    10 9 7 7 16 9 10 9 13 8 12 9 13 15 9 15 9 10 11 6 6 6 7 7 6 8 15 9 8 9 6 12 12   11 14 12 11 13 8 17 18 18 11 14 19 14 25 21 15 10 15 19 27 23 22 24 17 19 18     12 16 22 21 25 9 25 15 19 15 21 15 8 11 13 12 10 12 7 13 11 17 11 13 10 16 19    14 23 11 8 12 13 10 9 17 4 14 10 7 10 17 14 11 11 20 18 13 8 12 6 8 13 12 23     15 14 15 16 9 14 9 13 14 17 11 17 11 10 15 17 11 6 12 12 14 15 17 12 16 16 8     17 15 15 10 15 11 10 15 12 13 9 12 9 12 15 12 6 18 7 15 14 12 21 18 11 10 18     11 19 11 7 11 3 2 5 4 0 1 1   0.170000 3.850 3.850 9.300      2508471           7           0  0 0 0 0 0 0 0 0 0 0 0 0 1 3 1 2 1 4 3 3 1 2 7 0 3 2 2 2 2 5 2 3 2 3 3 4 3 7 3    5 3 4 4 6 2 3 10 4 11 3 13 7 7 5 6 3 8 10 6 6 4 10 11 4 12 7 8 9 7 7 8 4 6 7 9   9 5 9 11 5 14 9 10 7 9 8 8 5 6 11 13 14 10 10 10 10 8 9 9 9 9 14 14 13 11 8 18   9 10 9 16 12 13 15 13 10 17 16 20 14 22 20 26 29 29 27 24 20 37 21 24 13 18 13   28 24 22 25 21 13 14 15 9 11 18 8 16 17 16 13 12 16 11 11 17 15 11 15 10 11 12   13 12 12 20 15 14 15 16 12 17 15 15 12 10 14 14 17 15 19 15 13 13 11 12 16 14    17 16 8 16 12 8 14 13 13 10 10 9 12 11 19 20 13 11 4 15 11 14 11 20 18 18 13     20 12 20 21 15 15 12 13 18 18 11 16 9 14 9 18 11 10 11 20 11 13 17 13 13 12 14   16 10 12 12 23 12 11 12 8 8 1 0 1 2 0   0.172000 3.900 3.900 9.400      2591210           3           0  0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 4 4 3 2 1 3 3 2 3 0 3 6 1 3 1 5 5 4 3 9 9 0 4 7    5 3 5 5 8 7 3 3 5 5 8 5 11 10 8 10 3 6 6 6 7 7 8 8 12 9 6 10 8 7 10 8 8 10 4 6   12 20 4 6 11 7 9 10 7 5 10 6 12 11 7 13 13 16 12 6 8 14 13 9 7 5 14 17 17 10     12 11 6 13 11 17 3 23 13 21 12 21 28 11 23 30 28 23 24 26 26 17 21 15 27 23 33   16 22 25 11 20 22 23 21 20 7 21 13 16 12 16 16 13 18 18 9 13 16 15 9 20 13 19    15 8 9 11 14 13 10 9 10 16 15 14 17 15 19 16 12 14 12 14 14 16 19 19 4 24 8 12   15 16 11 15 14 20 14 13 13 14 16 19 14 13 19 14 18 23 15 15 4 14 17 14 8 10 15   20 11 15 19 12 9 13 12 11 16 12 16 13 14 16 13 16 16 19 19 12 11 10 19 15 15     14 12 5 11 18 17 10 13 12 9 6 2 0 0 1 0   0.174000 3.950 3.950 9.500      2675515           3           0  0 0 0 0 0 0 0 0 0 0 2 0 1 1 0 2 1 2 3 3 1 3 1 3 7 5 3 6 4 3 9 4 5 2 5 3 3 3 6    9 5 5 2 6 8 5 8 4 8 5 6 5 6 4 6 3 7 11 6 9 9 3 6 6 7 6 8 7 9 12 18 6 9 8 11 11   8 14 15 15 11 15 13 9 19 10 15 14 9 4 18 5 8 10 8 10 13 9 12 11 8 8 12 6 15 8    9 9 18 7 17 21 9 13 18 14 21 24 18 22 17 26 15 21 23 25 19 26 23 20 27 17 27     20 26 15 22 15 19 15 16 24 12 15 24 13 13 17 11 7 10 21 15 15 16 13 20 22 12     16 12 16 15 14 18 11 12 14 14 24 10 13 16 19 8 11 18 19 15 15 23 16 16 11 12     18 11 13 14 16 10 14 13 18 12 15 15 14 8 11 17 12 22 13 12 14 15 10 11 15 19     15 12 17 8 21 23 13 19 11 8 12 15 11 14 15 19 15 10 17 9 16 14 18 14 16 14 14    23 14 14 13 16 12 14 15 14 9 14 7 5 2 3 1 1 1   0.176000 4.000 4.000 9.600      2779386           5           0  0 0 0 0 0 0 0 0 0 0 0 2 2 3 0 1 3 0 6 2 6 3 1 5 0 4 1 6 5 1 6 3 6 5 6 2 5 4 5    3 9 8 5 7 5 8 4 12 8 12 6 8 5 7 5 7 10 5 5 6 7 9 7 10 7 10 10 8 12 10 6 13 10    11 12 11 10 10 16 9 6 12 9 11 17 10 11 10 14 11 16 7 11 13 12 10 17 14 11 13     12 10 13 16 16 17 17 15 14 11 8 15 13 27 22 14 19 17 22 22 27 18 28 19 27 32     24 33 21 17 23 12 27 25 20 20 17 22 14 15 22 21 14 9 16 12 19 16 17 16 16 20     14 18 15 14 18 10 12 9 16 12 12 10 13 19 12 12 15 14 15 22 12 11 15 18 19 18     10 6 11 14 10 23 17 14 16 19 10 10 16 19 17 23 16 18 19 18 16 12 14 14 14 13     11 10 24 21 22 26 18 18 18 14 17 5 13 17 11 13 16 14 18 16 9 15 15 18 16 14 21   13 22 17 9 8 16 17 16 16 19 7 20 19 18 16 10 6 10 6 3 5 1 0 0 2   0.178000 4.050 4.050 9.700      2869617           3           0  0 0 0 0 0 0 0 0 0 0 2 2 2 0 1 4 1 3 2 2 1 2 3 2 2 4 4 7 5 6 5 3 6 6 5 7 8 1 5    2 3 5 5 8 10 7 6 10 9 6 8 9 7 8 10 15 4 10 5 8 8 6 11 8 8 11 7 5 8 14 5 11 7     13 10 9 7 8 9 14 12 10 9 11 6 14 15 14 13 11 9 18 18 10 14 14 10 12 16 12 9 8    14 15 6 11 11 12 10 14 12 11 18 13 13 27 16 23 23 20 21 32 20 18 25 22 24 32     25 34 19 23 21 25 22 25 19 23 19 21 16 19 16 18 9 18 6 13 12 13 18 12 8 19 14    14 11 16 13 15 14 21 11 14 14 13 11 20 14 14 26 10 22 16 18 15 20 24 18 19 19    16 14 14 14 21 13 19 18 20 13 17 11 17 14 22 17 15 15 20 8 21 15 16 16 23 17     13 19 21 20 12 15 18 15 19 15 18 17 20 15 13 14 24 18 15 15 14 18 20 19 17 19    20 21 21 15 19 19 17 11 16 16 11 23 10 20 13 10 5 10 2 3 1 1 0   0.180000 4.100 4.100 9.800      2975040           3           0  0 0 0 0 0 0 0 0 1 0 0 1 2 2 4 4 2 4 4 1 2 5 0 3 3 5 2 5 5 4 9 2 7 8 4 8 3 11 6   10 4 7 8 6 6 5 8 8 7 11 4 4 11 12 7 11 7 10 11 7 11 11 10 9 7 13 12 18 8 14 12   14 12 8 8 16 10 10 14 16 10 6 8 15 15 15 22 13 19 18 12 6 11 10 7 12 12 24 15    17 9 17 21 10 17 18 14 14 14 9 22 11 23 17 15 23 32 20 11 12 20 15 23 30 20 25   19 26 29 19 27 23 15 19 11 30 16 21 24 18 18 14 8 6 25 13 21 13 13 19 13 21 25   23 18 14 14 13 20 12 14 8 10 25 14 15 20 15 10 15 16 21 8 15 20 21 20 13 16 15   20 11 18 17 17 9 12 24 19 13 18 17 20 14 15 20 10 23 19 25 8 7 13 14 11 15 18    13 10 12 10 17 11 24 16 17 11 12 13 16 20 14 26 12 17 13 14 16 16 6 20 16 23     22 11 17 16 14 25 19 17 21 22 19 13 19 16 18 10 11 7 4 6 0 0 2   0.182000 4.150 4.150 9.900      3083416           6           0  0 0 0 0 0 0 0 0 0 0 2 1 1 4 1 3 4 3 5 6 2 1 4 2 3 5 6 6 7 2 4 1 11 7 5 2 6 6 8   9 8 12 7 11 9 6 12 7 8 9 6 6 8 11 6 6 8 11 8 11 12 11 13 9 10 7 9 6 11 9 13 12   12 8 14 15 8 9 8 8 11 22 16 6 11 16 15 9 13 12 12 13 11 15 9 9 16 14 14 12 21    12 12 12 16 19 10 15 18 8 16 14 16 16 21 30 22 9 25 19 19 26 23 33 25 22 21 19   21 20 20 21 20 26 20 29 27 25 25 21 20 25 21 21 18 14 19 15 6 20 18 16 20 16     13 13 15 15 15 15 22 16 15 15 11 21 19 11 19 13 14 15 17 21 12 18 12 22 18 21    18 13 23 15 18 9 21 11 14 23 18 21 25 18 22 15 21 23 15 15 16 19 21 18 19 21     17 13 24 23 22 19 14 20 22 15 14 14 20 20 23 13 18 15 18 20 20 24 9 12 17 21     21 12 16 17 16 16 21 26 19 15 21 22 24 15 11 13 13 6 8 1 4 0 1 0   0.184000 4.200 4.200 10.00      3174897           3           0  0 0 0 0 0 0 0 0 0 0 1 1 2 3 0 5 4 3 3 0 7 3 2 4 2 8 6 4 5 9 3 8 6 4 2 7 6 8 7    9 3 5 8 5 9 7 7 6 11 14 7 12 9 9 5 15 12 14 15 12 9 11 5 8 13 11 12 10 9 17 12   11 8 17 11 19 11 15 9 11 7 15 14 16 16 16 7 12 10 14 13 13 16 16 11 15 13 14     12 16 11 12 13 17 10 13 19 11 17 11 13 14 13 10 19 19 23 24 22 24 24 31 19 23    22 28 21 25 29 17 23 17 21 30 22 19 25 27 27 22 23 23 17 25 17 20 17 12 23 21    9 17 20 16 19 16 17 20 9 16 11 22 16 15 12 15 17 23 24 16 16 18 26 11 16 20 18   10 14 17 26 19 17 15 17 19 12 21 20 24 17 27 13 16 18 19 23 14 19 14 10 11 18    19 6 15 21 23 25 17 17 18 21 27 20 17 18 20 25 22 20 18 22 18 17 15 24 16 15     22 18 22 14 20 20 22 18 22 25 19 26 12 19 19 13 12 16 19 14 9 7 5 4 2 0 2   0.186000 4.250 4.250 10.10      3283256           3           0  0 0 0 0 0 0 0 1 0 0 1 1 4 1 5 2 5 5 3 4 6 3 2 4 7 8 2 6 6 4 10 7 8 7 5 4 4 9 8   18 10 7 6 6 13 12 10 13 10 7 15 4 7 10 13 12 8 8 13 5 14 6 9 14 9 10 16 12 13    11 8 12 11 10 13 9 11 15 17 23 18 13 10 12 11 12 14 14 14 10 12 12 16 13 15 13   13 14 18 10 13 17 14 14 14 12 12 8 18 14 23 20 16 19 16 16 16 27 18 21 19 20     19 37 22 21 22 28 24 26 18 21 28 21 22 21 21 22 16 15 13 22 22 27 22 11 13 20    10 17 16 19 20 30 18 25 8 7 22 18 17 14 23 16 17 11 16 24 19 18 22 15 15 23 16   13 15 22 14 8 12 18 13 15 22 17 15 15 17 27 21 19 21 24 17 10 12 14 19 17 22     18 19 17 28 19 15 14 16 28 17 20 15 11 22 18 19 16 21 17 24 19 22 22 20 10 20    18 18 18 21 18 23 18 32 26 21 21 22 20 22 16 17 20 22 21 17 13 13 11 9 5 0 1 1   1   0.188000 4.300 4.300 10.20      3396610           5           0  0 0 0 0 0 0 0 0 0 0 1 2 3 0 2 5 5 4 3 3 5 1 2 3 6 9 3 3 3 8 7 2 9 5 7 5 11 8 9   7 6 9 6 4 5 8 6 10 9 14 10 15 6 7 13 15 10 13 7 15 10 10 11 14 14 6 7 17 13 19   3 13 9 6 13 13 14 10 11 12 16 17 13 10 15 15 19 19 11 11 15 11 13 9 13 20 8 18   14 18 23 23 23 15 19 20 14 11 7 18 16 15 22 28 20 24 22 25 17 20 39 24 26 25     25 33 25 25 25 33 15 29 18 29 18 12 18 23 17 24 28 22 16 20 33 23 18 23 26 23    15 24 16 16 16 16 17 15 15 16 14 11 9 23 17 13 13 18 12 19 20 30 20 20 15 21     19 16 18 20 23 19 15 10 11 15 19 13 22 22 18 19 16 19 23 16 10 25 23 20 21 20    31 19 19 18 15 22 18 14 13 21 18 19 22 19 16 17 21 14 20 26 18 26 22 19 26 19    20 22 15 13 24 23 15 21 21 21 27 18 22 19 24 17 22 16 18 23 10 12 3 5 3 3 0 0   0.190000 4.350 4.350 10.30      3502025           3           0  0 0 0 0 0 0 0 0 0 0 0 3 0 3 2 3 4 4 3 4 5 10 7 6 6 4 5 12 10 6 6 13 10 6 7 14    9 6 13 10 12 16 3 9 9 7 5 6 13 11 10 8 11 19 12 14 13 16 13 14 9 12 14 13 14     16 10 14 7 16 18 16 9 15 11 20 15 10 14 14 11 14 17 10 6 16 10 15 12 17 17 20    15 7 12 23 15 8 13 12 8 16 15 20 16 16 20 14 11 20 24 23 20 16 18 27 25 31 27    27 25 21 31 27 20 23 24 32 17 21 34 27 17 19 19 25 30 27 21 24 28 30 19 26 21    14 16 21 23 27 8 17 21 17 11 23 15 22 15 18 10 17 20 23 18 18 17 19 22 15 22     21 19 23 18 18 26 17 18 26 18 24 15 22 23 23 19 23 25 23 24 26 10 21 16 32 23    18 19 24 21 28 26 22 19 19 14 30 21 24 23 22 21 13 27 20 27 24 15 20 22 22 13    25 14 19 32 21 18 18 23 22 22 14 18 20 24 14 19 20 18 17 24 29 27 20 12 18 17    11 9 2 3 2 1 0   0.192000 4.400 4.400 10.40      3593938           3           0  0 0 0 0 0 0 0 0 0 0 1 0 1 1 2 3 4 7 8 1 5 6 8 3 7 5 4 9 8 8 7 7 9 7 9 9 15 5 7   8 15 14 9 9 13 8 8 15 10 7 10 9 10 14 7 8 18 16 17 11 14 15 13 8 15 8 15 18 16   16 22 12 8 16 13 10 13 13 10 21 11 10 16 16 13 13 17 16 20 23 13 22 16 14 15     22 19 22 15 22 24 16 16 16 19 12 15 16 17 20 18 19 26 17 23 18 32 20 28 36 22    25 30 29 31 36 24 24 21 29 24 32 29 30 23 34 19 33 34 25 20 31 27 24 16 14 21    20 13 24 17 28 13 24 16 26 15 26 21 11 15 20 13 20 18 25 23 18 24 26 22 16 22    14 13 16 20 24 25 19 29 20 15 20 16 25 26 21 22 17 24 22 21 17 23 23 15 19 30    23 17 21 19 18 21 26 14 29 24 20 33 19 15 20 23 28 19 23 25 15 19 17 31 23 18    29 26 25 14 24 25 18 19 19 24 35 31 23 23 14 15 19 11 20 19 24 17 16 9 10 12 3   2 2 0 1   0.194000 4.450 4.450 10.50      3712573           7           0  0 0 0 0 0 0 0 0 0 0 0 1 1 1 5 3 5 4 3 11 3 10 4 6 7 8 5 5 5 8 9 12 7 7 11 8 6    7 9 10 13 10 6 13 9 9 9 11 14 14 12 13 10 6 13 13 15 12 13 19 8 14 13 16 11 13   14 15 9 15 16 13 16 17 17 17 23 18 16 19 10 13 18 16 10 9 21 11 22 14 20 14 18   13 15 12 13 14 16 14 15 20 29 17 14 18 8 15 21 15 19 15 22 20 17 15 23 26 16     26 24 23 23 23 23 30 24 29 28 26 35 33 31 22 23 22 20 37 22 27 33 26 27 26 17    16 18 27 22 21 24 18 18 18 17 15 18 14 19 24 22 15 20 21 15 19 25 15 16 26 19    22 29 20 16 13 15 16 32 24 23 13 33 17 22 18 18 23 24 22 21 20 26 21 16 22 18    18 16 15 26 26 17 22 21 13 25 24 13 23 18 18 25 32 20 24 21 17 19 24 24 23 33    19 19 21 32 18 22 23 19 23 32 18 31 22 25 23 23 31 29 21 16 20 20 15 22 14 12    5 10 9 2 1 0 1   0.196000 4.500 4.500 10.60      3829518           3           0  0 0 0 0 0 0 0 0 0 1 2 2 1 6 2 6 5 9 3 5 6 8 6 3 8 10 7 11 9 4 8 9 5 11 10 13 9   16 13 10 9 5 12 9 15 10 13 9 12 18 14 19 9 13 14 12 13 21 17 17 18 16 13 12 16   14 18 10 15 15 16 11 15 22 17 19 17 11 12 26 12 17 19 18 21 20 27 17 18 19 21    14 19 16 12 16 21 20 18 8 17 17 13 13 18 15 19 15 19 20 28 21 29 27 27 34 24     26 31 25 24 16 17 23 23 30 28 18 28 32 28 37 18 26 18 16 33 21 31 21 20 22 19    20 25 18 18 20 11 17 20 22 23 14 14 17 18 20 25 20 19 20 22 19 16 33 25 21 21    24 18 16 22 29 22 16 27 26 28 21 20 22 17 25 23 20 23 18 16 19 26 22 21 22 23    15 20 19 17 23 19 20 15 22 18 22 26 23 23 31 17 29 18 13 15 19 18 24 22 28 22    17 23 24 26 21 23 25 24 29 26 18 41 24 29 22 27 23 28 16 30 24 18 23 19 17 18    21 17 14 8 2 5 2 0 0   0.198000 4.550 4.550 10.70      3950740           3           0  0 0 0 0 0 0 0 0 1 1 1 2 1 3 7 5 6 7 7 7 4 5 6 4 1 8 9 10 9 8 10 8 12 6 10 8 10   8 11 9 10 15 7 11 8 13 11 13 15 15 17 12 10 8 17 12 9 14 12 14 11 14 21 14 15    20 18 16 8 15 22 24 14 10 18 14 15 16 12 10 16 21 16 25 17 20 17 17 20 15 24     15 17 22 25 17 13 22 18 20 19 11 21 22 21 16 21 24 16 22 17 21 17 24 22 24 35    27 24 28 24 32 37 34 25 24 29 37 37 25 28 21 23 24 22 21 20 25 22 32 19 21 22    24 20 21 20 22 18 27 17 14 20 22 22 22 14 19 20 20 21 23 22 14 20 21 23 20 18    23 20 25 31 24 18 22 14 23 22 21 23 27 27 20 21 18 22 23 24 23 21 18 22 17 22    21 35 15 24 24 12 27 30 27 28 22 31 24 24 19 27 24 28 23 25 26 35 27 22 29 21    24 18 19 26 33 29 31 23 25 19 24 26 21 10 23 24 26 28 20 27 26 17 29 22 18 14    22 8 10 11 4 4 1 2 0   0.200000 4.600 4.600 10.80      4068161           5           0  0 0 0 0 0 0 0 0 0 1 1 0 1 5 5 2 9 3 11 6 9 8 7 7 8 3 3 13 10 8 7 5 8 13 8 7 14   12 10 7 15 13 13 11 12 12 14 12 13 12 10 15 11 14 7 16 15 8 15 13 15 13 18 13    17 21 15 12 13 13 17 18 18 18 16 19 20 17 14 17 24 13 12 18 19 19 13 21 18 26    21 23 16 14 18 19 13 33 13 19 20 14 20 23 14 26 19 22 21 21 16 27 30 25 28 22    32 21 30 27 31 21 30 22 27 27 31 27 21 17 38 41 17 21 20 19 30 24 27 20 20 21    30 20 19 19 31 25 24 13 21 23 19 24 33 24 17 20 17 12 25 23 18 24 11 24 25 22    33 20 11 22 31 21 20 26 27 21 26 24 14 23 23 20 20 26 28 10 20 27 24 22 17 27    28 20 23 23 33 20 24 26 32 33 29 21 25 24 17 18 19 27 26 20 24 26 24 24 26 21    19 24 21 36 32 18 33 33 20 23 25 33 19 27 25 27 24 27 21 21 23 28 18 27 25 19    24 15 17 12 15 7 2 1 0 0 ", "%f ", Inf);
-%! assert (rows (x) == n);
-
-%% Note use fprintf so output not sent to stdout
-%% test/octave.test/io/printf-1.m
-%!test
-%! nm = tmpnam ();
-%! fid1 = fopen(nm,"w");
-%! x = fprintf (fid1, "%s: %d\n", "test", 1);
-%! fclose(fid1);
-%! fid2 = fopen(nm,"r");
-%! str = fscanf(fid2,"%s");
-%! fclose(fid2);
-%! unlink(nm);
-%! assert (x, 8);
-%! assert (str, "test:1");
-
-%% test/octave.test/io/printf-2.m
-%!error printf (1)
-
-%% test/octave.test/io/printf-3.m
-%!error <Invalid call to printf> printf ()
-
-%% test/octave.test/io/sprintf-1.m
-%!test
-%! [s, msg, status] = sprintf ("%s: %d\n", "test", 1);
-%! 
-%! assert (s == "test: 1\n" && ischar (msg) && status == 8);
-
-%% test/octave.test/io/sprintf-2.m
-%!error sprintf (1)
-
-%% test/octave.test/io/sprintf-3.m
-%!error <Invalid call to sprintf> sprintf ()
-
-%% test/octave.test/io/fopen-1.m
-%!test
-%! arch_list = ["native"; "ieee-le"; "ieee-be"; "vaxd"; "vaxg"; "cray"];
-%! 
-%! status = 1;
-%! 
-%! for i = 1:6
-%!   arch = deblank (arch_list (i,:));
-%!   for j = 1:6
-%!     if (j == 1)
-%!       mode_list = ["w"; "r"; "a"];
-%!     elseif (j == 2)
-%!       mode_list = ["w+"; "r+"; "a+"];
-%!     endif
-%!     nm = tmpnam ();
-%!     for k = 1:3
-%!       mode = deblank (mode_list (k,:));
-%!       [id, err] = fopen (nm, mode, arch);
-%!       if (id < 0)
-%!         printf_assert ("open failed: %s (%s, %s): %s\n", nm, mode, arch, err);
-%!         status = 0;
-%!         break;
-%!       else
-%!         fclose (id);
-%!       endif
-%!       tmp_mode = cstrcat (mode, "b");
-%!       [id, err] = fopen (nm, tmp_mode, arch);
-%!       if (id < 0)
-%!         printf_assert ("open failed: %s (%s, %s): %s\n", nm, tmp_mode, arch, err);
-%!         status = 0;
-%!         break;
-%!       else
-%!         fclose (id);
-%!       endif
-%!       tmp_mode = cstrcat (mode, "t");
-%!       [id, err] = fopen (nm, tmp_mode, arch);
-%!       if (id < 0)
-%!         printf_assert ("open failed: %s (%s, %s): %s\n", nm, tmp_mode, arch, err);
-%!         status = 0;
-%!         break;
-%!       else
-%!         fclose (id);
-%!       endif
-%!     endfor
-%!     unlink (nm);
-%!     if (status == 0)
-%!       break;
-%!     endif
-%!   endfor
-%!   if (status == 0)
-%!     break;
-%!   endif
-%! endfor
-%! 
-%! assert (status == 1);
-
-%% test/octave.test/io/fopen-2.m
-%!test
-%! s.a = 1;
-%! fail ("fopen (s)");
-
-%% test/octave.test/io/fopen-3.m
-%!error fopen ("foo", "x")
-
-%% test/octave.test/io/fopen-4.m
-%! fopen ("foo", "wb", "noodle");
-%! assert (prog_output_assert ("error:"));
-
-%% test/octave.test/io/fopen-5.m
-%!error <Invalid call to fopen> fopen ()
-
-%% test/octave.test/io/fopen-6.m
-%!error <Invalid call to fopen> fopen ("foo", "wb", "native", 1)
-
-%% test/octave.test/io/fclose-1.m
-%!error fclose (0)
-
-%% test/octave.test/io/fclose-2.m
-%!error <Invalid call to fclose> fclose (1, 2)
-
-%% test/octave.test/io/tmpnam-1.m
-%!assert (ischar (tmpnam ()))
-
-%% test/octave.test/io/tmpnam-2.m
-%!warning tmpnam (1);
-
-%% test/octave.test/io/tmpnam-3.m
-%!warning tmpnam ("foo", 1);
-
-%% test/octave.test/io/tmpnam-4.m
-%!error <Invalid call to tmpnam> tmpnam (1, 2, 3)
-
-%% test/octave.test/io/binary-io-1.m
-%!test
-%! type_list = ["char"; "char*1"; "integer*1"; "int8";
-%! "schar"; "signed char"; "uchar"; "unsigned char";
-%! "short"; "ushort"; "unsigned short"; "int";
-%! "uint"; "unsigned int"; "long"; "ulong"; "unsigned long";
-%! "float"; "float32"; "real*4"; "double"; "float64";
-%! "real*8"; "int16"; "integer*2"; "int32"; "integer*4"];
-%! 
-%! n = rows (type_list);
-%! nm = tmpnam ();
-%! id = fopen (nm, "wb");
-%! if (id > 0)
-%!   for i = 1:n
-%!     fwrite (id, i, deblank (type_list(i,:)));
-%!   endfor
-%!
-%!   fclose (id);
-%!   
-%!   id = fopen (nm, "rb");
-%!   if (id > 0)
-%!     x = zeros (1, n);
-%!     for i = 1:n
-%!       x(i) = fread (id, [1, 1], deblank (type_list(i,:)));
-%!     endfor
-%!     
-%!     if (x == 1:n)
-%!       printf_assert ("ok\n");
-%!     endif
-%!   endif
-%! endif
-%! 
-%! unlink (nm);
-%! assert (prog_output_assert ("ok"));
-
-%% test/octave.test/io/file-pos-1.m
-%!test
-%! nm = tmpnam ();
-%! id = fopen (nm, "wb");
-%! if (id > 0)
-%!   fprintf (id, "%d\n", 1:100);
-%!   fclose (id);
-%!   id = fopen (nm, "rb");
-%!   if (id > 0)
-%!     for i = 1:101
-%!       fgets (id);
-%!     endfor
-%!     if (feof (id))
-%!       fclose (id);
-%!       id = fopen (nm, "rb");
-%!       pos_one = ftell (id);
-%!       s_one = fgets (id);
-%!       for i = 1:48
-%!         s = fgets (id);
-%!       endfor
-%!       pos_fifty = ftell (id);
-%!       s_fifty = fgets (id);
-%!       fseek (id, pos_one, SEEK_SET);
-%!       s_one_x = fgets (id);
-%!       fseek (id, pos_fifty, SEEK_SET);
-%!       s_fifty_x = fgets (id);
-%!       if (s_one == s_one_x && s_fifty == s_fifty_x)
-%!         frewind (id);
-%!         s_one_x = fgets (id);
-%!         if (s_one != s_one_x)
-%!           error ("bombed!!");
-%!         endif
-%!       endif
-%!     endif
-%!   endif
-%! endif
-%! unlink (nm);
-
-%% test/octave.test/io/fputs-1.m
-%!error <Invalid call to fputs> fputs ()
-
-%% test/octave.test/io/fputs-2.m
-%!error <Invalid call to fputs> fputs (1, "foo", 1)
-
-%% test/octave.test/io/fputs-3.m
-%!assert (fputs (1, 1),-1)
-
-%% test/octave.test/io/fgetl-1.m
-%!error <Invalid call to fgetl> fgetl ()
-
-%% test/octave.test/io/fgetl-2.m
-%!error <Invalid call to fgetl> fgetl (1, 2, 3)
-
-%% test/octave.test/io/fgetl-3.m
-%!error fgetl ("foo", 1)
-
-%% test/octave.test/io/fgets-1.m
-%!error <Invalid call to fgets> fgets ()
-
-%% test/octave.test/io/fgets-2.m
-%!error <Invalid call to fgets> fgets (1, 2, 3)
-
-%% test/octave.test/io/fgets-3.m
-%!error fgets ("foo", 1)
-
-%% test/octave.test/io/fprintf-1.m
-%!error <Invalid call to fprintf> fprintf ()
-
-%% test/octave.test/io/fprintf-2.m
-%!error <Invalid call to fprintf> fprintf (1)
-
-%% test/octave.test/io/fprintf-3.m
-%!test
-%! s.a = 1;
-%! fail ("fprintf (s)", "Invalid call to fprintf");
-
-%% test/octave.test/io/fprintf-4.m
-%!error fprintf (1, 1)
-
-%% test/octave.test/io/fprintf-5.m
-%!error fprintf (-1, "foo")
-
-%% test/octave.test/io/fscanf-1.m
-%!error <Invalid call to fscanf> fscanf ()
-
-%% test/octave.test/io/fscanf-2.m
-%!error <Invalid call to fscanf> fscanf (1)
-
-%% test/octave.test/io/fscanf-3.m
-%!error fscanf ("foo", "bar")
-
-%% test/octave.test/io/fread-1.m
-%!error <Invalid call to fread> fread ()
-
-%% test/octave.test/io/fread-2.m
-%!error <Invalid call to fread> fread (1, 2, "char", 1, "native", 2)
-
-%% test/octave.test/io/fread-3.m
-%!error fread ("foo")
-
-%% test/octave.test/io/fwrite-1.m
-%!error <Invalid call to fwrite> fwrite ()
-
-%% test/octave.test/io/fwrite-2.m
-%!error <Invalid call to fwrite> fwrite (1, rand (10), "char", 1, "native", 2)
-
-%% test/octave.test/io/fwrite-3.m
-%!error fwrite ("foo", 1)
-
-%% test/octave.test/io/feof-1.m
-%!error <Invalid call to feof> feof ()
-
-%% test/octave.test/io/feof-2.m
-%!error <Invalid call to feof> feof (1, 2)
-
-%% test/octave.test/io/feof-3.m
-%!error feof ("foo")
-
-%% test/octave.test/io/ferror-1.m
-%!error <Invalid call to ferror> ferror ()
-
-%% test/octave.test/io/ferror-2.m
-%!error <Invalid call to ferror> ferror (1, 'clear', 2)
-
-%% test/octave.test/io/ferror-3.m
-%!error ferror ("foo")
-
-%% test/octave.test/io/ftell-1.m
-%!error <Invalid call to ftell> ftell ()
-
-%% test/octave.test/io/ftell-2.m
-%!error <Invalid call to ftell> ftell (1, 2)
-
-%% test/octave.test/io/ftell-3.m
-%!error ftell ("foo")
-
-%% test/octave.test/io/fseek-1.m
-%!error <Invalid call to fseek> fseek ()
-
-%% test/octave.test/io/fseek-2.m
-%!error <Invalid call to fseek> fseek (1, 0, SEEK_SET, 1)
-
-%% test/octave.test/io/fseek-3.m
-%!error fseek ("foo", 0, SEEK_SET)
-
-%% test/octave.test/io/frewind-1.m
-%!error <Invalid call to frewind> frewind ()
-
-%% test/octave.test/io/frewind-2.m
-%!error <Invalid call to frewind> frewind (1, 2)
-
-%% test/octave.test/io/frewind-3.m
-%!error frewind ("foo")
-
--- a/test/test_line_continue.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%!shared x, a, b
-%! x = [1,2];
-%! a = 1;
-%! b = 2;
-
-%!test
-%! y = [a... # comments here ok
-%! b];
-%! assert (y, x);
-
-%!test
-%! x = [1;2];
-%! y = [a... # comments here ok
-%! ;\
-%! 
-%! b];
-%! assert (y, x);
-
-%!assert (1 + ...
-%! 2 - \# comments here ok
-%! 3 / ... # comments here ok
-%! -1,6);
-
-%!function y = f (a,...
-%!                b,  ...
-%!                c,  ...   % comments ok
-%!                x,  # continuation characters not required in parens
-%!                y,  \# but they should work too.
-%!                z)
-%!
-%!  y = 1;
-%!endfunction
-%!
-%!assert (f (), 1)
-
-%!test
-%!assert (1 == 1
-%! && 2 == 2
-%! || 3 == 5);
-
-%!test
-%! x = [1, ...
-%! 
-%! ...
-%! 
-%! 2];
-%! y = [1;2];
-%! assert (y, x);
-
-%!test
-%! x = [1 ,...
-%! 2];
-%! y = [1,2];
-%! assert (y, x);
-
-%% test/oc tave.test/contin/contin-16.m
-%!test
-%! x = [ 1 , ...
-%! 2];
-%! y = [1,2];
-%! assert  (y, x);
-
--- a/test/test_logical_index.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%!test
-%! a = [];
-%! fail ("a(0);");
-
-%!shared a
-%! a = 2;
-%!assert (a(1), 2);
-%!error id=Octave:index-out-of-bounds a(logical ([1,1]))
-
-%!shared a
-%! a = [9,8,7,6];
-%!assert (isempty (a(logical ([0,0,0,0]))))
-%!assert (a(logical ([1,1,1,1])), [9,8,7,6])
-%!assert (a(logical ([0,1,1,0])), [8,7])
-%!assert (a(logical ([1,1])), [9,8])
-
-%!shared a
-%! a = [9,8;7,6];
-%!assert (isempty (a(logical ([0,0,0,0]))))
-%!assert (a(logical ([1,1,1,1])), [9,7,8,6])
-%!assert (a(logical ([0,1,1,0])), [7,8])
-%!assert (a(logical (0:1),logical (0:1)), 6)
-%!assert (a(logical (0:1),2:-1:1), [6,7])
-%!assert (a(logical (0:1),logical ([0,1])), 6)
-%!assert (a(logical (0:1),[2,1]), [6,7])
-%!assert (a(logical (0:1),:), [7,6])
-%!assert (a(logical (0:1),1), 7)
-%!assert (a(logical (0:1),logical ([1,1])), [7,6])
-%!assert (a(2:-1:1,logical (0:1)), [6;8])
-%!assert (a(2:-1:1,logical ([0,1])), [6;8])
-%!assert (a(2:-1:1,logical ([1,1])), [7,6;9,8])
-%!assert (a(logical ([0,1]),logical (0:1)), 6)
-%!assert (a(logical ([0,1]),2:-1:1), [6,7])
-%!assert (a(logical ([0,1]),logical ([0,1])), 6)
-%!assert (a(logical ([0,1]),[2,1]), [6,7])
-%!assert (a(logical ([0,1]),:), [7,6])
-%!assert (a(logical ([0,1]),1), 7)
-%!assert (a(logical ([0,1]),logical ([1,1])), [7,6])
-%!assert (a([2,1],logical (0:1)), [6;8])
-%!assert (a([2,1],logical ([0,1])), [6;8])
-%!assert (a([2,1],logical ([1,1])), [7,6;9,8])
-%!assert (a(:,logical (0:1)), [8;6])
-%!assert (a(:,logical ([0,1])), [8;6])
-%!assert (a(:,logical ([1,1])), [9,8;7,6])
-%!assert (a(1,logical (0:1)), 8)
-%!assert (a(1,logical ([0,1])), 8)
-%!assert (a(1,logical ([1,1])), [9,8])
-%!assert (a(logical ([1,1]),logical (0:1)), [8;6])
-%!assert (a(logical ([1,1]),2:-1:1), [8,9;6,7])
-%!assert (a(logical ([1,1]),logical ([0,1])), [8;6])
-%!assert (a(logical ([1,1]),[2,1]), [8,9;6,7])
-%!assert (a(logical ([1,1]),:), [9,8;7,6])
-%!assert (a(logical ([1,1]),1), [9;7])
-%!assert (a(logical ([1,1]),logical ([1,1])), [9,8;7,6])
-
--- a/test/test_null_assign.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-## Copyright (C) 2008-2012 Jaroslav Hajek
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%!test
-%! a = 1:3; a(:) = []; assert (size (a), [0, 0])
-%!test
-%! a = 1:3; a(1:3) = []; assert (size (a), [1, 0])
-%!test
-%! a = (1:3).'; a(1:3) = []; assert (size (a), [0, 1])
-%!test
-%! a = ones (3); a(:,:) = []; assert (size (a), [0, 3])
-%!test
-%! a = ones (3); a(1:3,:) = []; assert (size (a), [0, 3])
-%!test
-%! a = ones (3); a(:,1:3) = []; assert (size (a), [3, 0])
-%!test
-%! a = ones (3); fail ("a(1:2,1:2) = []", ".*");
-%!test
-%! a = ones (3); fail ("a(1:3,1:3) = []", ".*");
-
-## null strings should delete. [,] and [;] should delete.
-%!test
-%! a = ones (3); a(1:2,:) = [,]; assert (size (a), [1,3])
-%!test
-%! a = ones (3); a(1:2,:) = [;]; assert (size (a), [1,3])
-%!test
-%! a = ones (3); a(1:2,:) = ''; assert (size (a), [1,3])
-%!test
-%! a = ones (3); a(1:2,:) = ""; assert (size (a), [1,3])
-
-## null matrix stored anywhere should lose its special status
-%!test
-%! a = ones (3); b = []; fail ("a(:,1:3) = b", ".")
-%!test
-%! a = ones (3); b{1} = []; fail ("a(:,1:3) = b{1}", ".")
-%!test
-%! a = ones (3); b.x = []; fail ("a(:,1:3) = b.x", ".")
-
-## filtering a null matrix through a function should not delete
-%!test
-%! a = ones (3); fail ("a(:,1:3) = double ([])")
-
-## subsasgn should work the same way
-%!test
-%! a = ones (3); a = subsasgn (a, substruct ('()', {':',1:2}), []); assert (size (a), [3,1])
-%!test
-%! a = ones (3); b = []; fail ("subsasgn (a, substruct ('()', {':',1:2}), b)", ".")
-
--- a/test/test_parser.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,259 +0,0 @@
-## Copyright (C) 2010-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## Tests for parser problems belong in this file.
-## We need many more tests here!
-
-%!assert ({1 2 {3 4}}, {1,2,{3,4}})
-%!assert ({1, 2 {3 4}}, {1,2,{3,4}})
-%!assert ({1 2, {3 4}}, {1,2,{3,4}})
-%!assert ({1 2 {3, 4}}, {1,2,{3,4}})
-%!assert ({1, 2, {3 4}}, {1,2,{3,4}})
-%!assert ({1 2,{3 4}}, {1,2,{3,4}})
-%!assert ({1 2,{3,4}}, {1,2,{3,4}})
-%!assert ({1,2,{3 4}}, {1,2,{3,4}})
-
-## Tests for operator precedence as documented in section 8.8 of manual
-## There are 13 levels of precedence from "parentheses and indexing" (highest)
-## down to "statement operators" (lowest).
-##
-## Level 13 (parentheses and indexing)
-## Overrides all other levels
-%!test
-%!  a.b = 1;
-%!  assert (a. b++, 1)
-%!  assert (a.b, 2)
-%!  clear a;
-%!  a.b = [0 1];
-%!  b = 2;
-%!  assert (a.b', [0;1])
-%!  assert (!a .b, logical ([1 0]))
-%!  assert (3*a .b, [0 3])
-%!  assert (a. b-1, [-1 0])
-%!  assert (a. b:3, 0:3)
-%!  assert (a. b>0.5, logical ([0 1]))
-%!  assert (a. b&0, logical ([0 0]))
-%!  assert (a. b|0, logical ([0 1]))
-%!  a.b = [1 2];
-%!  assert (a. b&&0, false)
-%!  assert (a. b||0, true)
-%!  a.b += a. b*2;
-%!  assert (a.b, [3 6])
-## Level 12 (postfix increment and decrement)
-%!test
-%!  a = [3 5];
-%!  assert (2.^a ++, [8 32])
-%!  assert (a, [4 6])
-%!  assert (a--', [4; 6])
-%!  assert (a, [3 5])
-%!  a = 0;
-%!  assert (!a --, true)
-%!  assert (-a ++, 1)
-%!  assert (3*a ++, 0)
-%!  assert (a++-2, -1)
-%!  assert (1:a ++, 1:2)
-%!  assert (4>a++, true)
-%!  a = [0 -1];
-%!  assert ([1 1] & a++, logical ([0 1]))
-%!  assert ([0 0] | a++, logical ([1 0]))
-%!  a = 0;
-%!  assert (1 && a ++, false)
-%!  assert (0 || a --, true)
-%!  a = 5; b = 2;
-%!  b +=a ++;
-%!  assert (b, 7)
-
-## Level 11 (transpose and exponentiation)
-%!test
-%!  assert (-2 ^2, -4)
-%!  assert (!0 ^0, false)
-%!  assert (2*3 ^2, 18)
-%!  assert (2+3 ^2, 11)
-%!  assert ([1:10](1:2 ^2), [1 2 3 4])
-%!  assert (3>2 ^2, false)
-%!  assert (1&0 ^0, true)
-%!  assert (0|0 ^0, true)
-%!  assert (1&&0 ^0, true)
-%!  assert (0||0 ^0, true)
-%!  a = 3;
-%!  a *= 0 ^0;
-%!  assert (a, 3)
-## Level 10 (unary plus/minus, prefix increment/decrement, not)
-%!test
-%!  a = 2;
-%!  assert (++ a*3, 9)
-%!  assert (-- a-2, 0)
-%!  assert (a, 2)
-%!  assert (! a-2, -2)
-%!  assert ([1:10](++ a:5), 3:5)
-%!  a = [1 0];
-%!  assert (! a>=[1 0], [false true])
-%!  a = 0;
-%!  assert (++ a&1, true)
-%!  assert (-- a|0, false)
-%!  assert (-- a&&1, true)
-%!  assert (++ a||0, false)
-%!  a = 3;
-%!  a *= ++a;
-%!  assert (a, 16)
-## Level 9 (multiply, divide)
-%!test
-%!  assert (3+4 * 5, 23)
-%!  assert (5 * 1:6, [5 6])
-%!  assert (3>1 * 5, false)
-%!  assert (1&1 * 0, false)
-%!  assert (1|1 * 0, true)
-%!  assert (1&&1 * 0, false)
-%!  assert (1||1 * 0, true)
-%!  a = 3;
-%!  a /= a * 2;
-%!  assert (a, 0.5)
-## Level 8 (add, subtract)
-%!test
-%!  assert ([2 + 1:6], 3:6)
-%!  assert (3>1 + 5, false)
-%!  assert (1&1 - 1, false)
-%!  assert (0|1 - 2, true)
-%!  assert (1&&1 - 1, false)
-%!  assert (0||1 - 2, true)
-%!  a = 3;
-%!  a *= 1 + 1;
-%!  assert (a, 6)
-## Level 7 (colon)
-%!test
-%!  assert (5:-1: 3>4, [true false false])
-%!  assert (1: 3&1, [true true true])
-%!  assert (1: 3|0, [true true true])
-%!  assert (-1: 3&&1, false)
-%!  assert (-1: 3||0, false)
-%!  a = [1:3];
-%!  a += 3 : 5;
-%!  assert (a, [4 6 8])
-## Level 6 (relational)
-%!test
-%!  assert (0 == -1&0, false)
-%!  assert (1 == -1|0, false)
-%!  assert (0 == -1&&0, false)
-%!  assert (1 == -1||0, false)
-%!  a = 2;
-%!  a *= 3 > 1;
-%!  assert (a, 2)
-## Level 5 (element-wise and)
-%!test
-%!  assert (0 & 1|1, true)
-%!  assert ([0 1] & 1&&1, false)
-%!  assert (0 & 1||1, true)
-%!  a = 2;
-%!  a *= 3 & 1;
-%!  assert (a, 2)
-## Level 4 (element-wise or)
-%!test
-%!  assert ([0 1] | 1&&0, false)
-%!  assert ([0 1] | 1||0, true)
-%!  a = 2;
-%!  a *= 0 | 1;
-%!  assert (a, 2)
-## Level 3 (logical and)
-%!test
-%!  assert (0 && 1||1, true)
-%!  a = 2;
-%!  a *= 3 && 1;
-%!  assert (a, 2)
-## Level 2 (logical or)
-%!test
-%!  a = 2;
-%!  a *= 0 || 1;
-%!  assert (a, 2)
-
-## Tests for operator precedence within each level where ordering should
-## be left to right except for postfix and assignment operators.
-
-## Level 13 (parentheses and indexing)
-%!test
-%!  a.b1 = 2;
-%!  assert (a.(strcat('b','1'))++, 2)
-%!  assert (a.b1, 3)
-%!  b = {1 2 3 4 5};
-%!  assert (b{(a. b1 + 1)}, 4)
-%!  b = 1:5;
-%!  assert (b(a. b1 + 1), 4)
-%!  assert ([2 3].^2', [4; 9])
-## Level 12 (postfix increment and decrement)
-## No tests possible since a++-- is not valid
-## Level 11 (transpose and exponentiation)
-## Note: Exponentiation works left to right for compatibility with Matlab.
-%!  assert (2^3**2, 64)
-%!  assert ([2 3].^2.', [4;9])
-%!  assert ([2 3].'.^2, [4;9])
-%!  assert (3*4i'.', 0 - 12i)
-%!  assert (3*4i.'.', 0 + 12i)
-## Level 10 (unary plus/minus, prefix increment/decrement, not)
-%!test
-%!  assert (+-+1, -1)
-%!  a = -1;
-%!  assert (!++a, true)
-%!  assert (a, 0)
-%!  assert (-~a, -1)
-%!  assert (!~--a, true)
-%!  assert (a, -1)
-## Level 9 (multiply, divide)
-%!test
-%!  assert (3 * 4 / 5, 2.4)
-%!  assert (3 ./ 4 .* 5, 3.75)
-%!  assert (2 * 4 \ 6, 0.75)
-%!  assert (2 .\ 4 .* 6, 12)
-## Level 8 (add, subtract)
-%!test
-%!  assert (-3 - 4 + 1 + 3 * 2, 0)
-## Level 7 (colon)
-## No tests possible because colon operator can't be combined with second colon operator
-## Level 6 (relational)
-%!test
-%!  assert (0 < 1 <= 0.5 == 0 >= 0.5 > 0, true)
-%!  assert (1 < 1 == 0 != 0, true)
-%!  assert (1 < 1 == 0 ~= 0, true)
-## Level 5 (element-wise and)
-## No tests possible.  Only one operator (&) at this precedence level and operation is associative.
-## Level 4 (element-wise or)
-## No tests possible.  Only one operator (|) at this precedence level and operation is associative.
-## Level 3 (logical and)
-%!test
-%!  a = 1;
-%!  assert (1 && 0 && ++a, false)
-%!  assert (a, 1)
-## Level 2 (logical or)
-%!test
-%!  a = 1;
-%!  assert (0 || 1 || ++a, true)
-%!  assert (a, 1)
-## Level 1 (assignment)
-%!test
-%! a = 2; b = 5; c = 7;
-%! assert (a += b *= c += 1, 42)
-%! assert (b == 40 && c == 8)
-
-## Test creation of anonymous functions
-
-%!test
-%! af_in_cell = {@(x) [1 2]};
-%! assert (af_in_cell{1}(), [1, 2]);
-
-%!test
-%! R = @(rot) [cos(rot) -sin(rot); sin(rot) cos(rot)];
-%! assert (R(pi/2), [cos(pi/2), -sin(pi/2); sin(pi/2),cos(pi/2)]);
-
--- a/test/test_prefer.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,227 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/prefer/prefer-1.m
-%!test
-%! m = [3 2];
-%! assert (all (m == (3:-1:2)));
-
-%% test/octave.test/prefer/prefer-2.m
-%!test
-%! m = [3,
-%! 2];
-%! assert (all (m == (3:-1:2)'));
-
-%% test/octave.test/prefer/prefer-3.m
-%!test
-%! a = 2;
-%! assert ([a - 1], 1);
-
-%% test/octave.test/prefer/prefer-4.m
-%!test
-%! m = [3,2];
-%! fail ("[m ']");
-
-%% test/octave.test/prefer/prefer-5.m
-%!assert (all ([3 2] == (3:-1:2)));
-
-%% test/octave.test/prefer/prefer-6.m
-%!assert (all ([3, 2] == (3:-1:2)));
-
-%% test/octave.test/prefer/prefer-7.m
-%!test
-%! m = [3,2];
-%! assert (all ([m (1)] == (3:-1:1)));
-
-%% test/octave.test/prefer/prefer-8.m
-%!test
-%! m = [3,2];
-%! assert ([m(1)],3);
-
-%% test/octave.test/prefer/prefer-10.m
-%!test
-%! a = 2;
-%! assert ([a- 1], 1);
-
-%% test/octave.test/prefer/prefer-11.m
-%!test
-%! a = 1;
-%! assert (all ([a -1] == (1:-2:-1)));
-
-%% test/octave.test/prefer/prefer-12.m
-%!test
-%! wsn = warning ("query", "Octave:str-to-num");
-%! warning ("off", "Octave:str-to-num");
-%! assert ("d" + 0, 100);
-%! warning (wsn.state, "Octave:str-to-num");
-
-%% test/octave.test/prefer/prefer-13.m
-%!test
-%! wsn = warning ("query", "Octave:str-to-num");
-%! warning ("on", "Octave:str-to-num");
-%! fail ("'d' + 0", "warning");
-%! warning (wsn.state, "Octave:str-to-num");
-
-%% test/octave.test/prefer/prefer-14.m
-%!test
-%! wir = warning ("query", "Ocave:imag-to-real");
-%! warning ("off", "Ocave:imag-to-real");
-%! assert (eye (1+i), 1);
-%! warning (wir.state, "Ocave:imag-to-real");
-
-%% test/octave.test/prefer/prefer-15.m
-%!test
-%! wir = warning ("query", "Ocave:imag-to-real");
-%! warning ("on", "Ocave:imag-to-real");
-%! fail ("eye (1+i)", "warning");
-%! warning (wir.state, "Ocave:imag-to-real");
-
-%% test/octave.test/prefer/prefer-17.m
-%!test
-%! wrre = warning ("query", "Octave:resize-on-range-error");
-%! warning ("off", "Octave:resize-on-range-error");
-%! clear a; 
-%! a(2) = 1; a(3) = 2; 
-%! assert (all (a == [0,1,2]));
-%! warning (wrre.state, "Octave:resize-on-range-error");
-
-%% test/octave.test/prefer/prefer-18.m
-%!test
-%! clear a; 
-%! a(1) = 1; a(2) = 2;
-%! assert (all (a == [1,2]));
-
-%% test/octave.test/prefer/prefer-21.m
-%!test
-%! ped = print_empty_dimensions ();
-%! print_empty_dimensions (0);
-%! a = cell (1, 1);
-%! b = type ("-q", "a");
-%! assert (!isempty (findstr (b{1}, "[]")));
-%! assert (isempty (findstr (b{1} ,"[](0x0)")));
-%! print_empty_dimensions (ped);
-
-%% test/octave.test/prefer/prefer-22.m
-%!test
-%! ped = print_empty_dimensions ();
-%! print_empty_dimensions (1);
-%! a = cell (1, 1);
-%! b = type ("-q", "a");
-%! assert (!isempty (findstr (b{1}, "[](0x0)")));
-%! print_empty_dimensions (ped);
-
-%% test/octave.test/prefer/prefer-23.m
-%!assert (all (size (inv ([])) == [0, 0]));
-
-%% test/octave.test/prefer/prefer-24.m
-%!assert (all (svd ([]) == zeros (0, 1)));
-
-%% test/octave.test/prefer/prefer-27.m
-%!test
-%! sp = save_precision ();
-%! save_precision (1);
-%! x = pi;
-%! nm = tmpnam ();
-%! save("-text", nm, "x");
-%! clear x;
-%! load (nm);
-%! unlink (nm);
-%! assert (x,3);
-%! save_precision (sp);
-
-%% test/octave.test/prefer/prefer-28.m
-%!test
-%! sp = save_precision ();
-%! save_precision (5);
-%! x = pi;
-%! nm = tmpnam ();
-%! save("-text", nm, "x");
-%! clear x;
-%! load (nm);
-%! unlink (nm);
-%! assert (x, 3.1416);
-%! save_precision (sp);
-
-%% FIXME: How to capture standard output for comparison? 
-%% test/octave.test/prefer/prefer-29.m
-%!function f ()
-%! 1
-%!endfunction
-%!#test
-%! sf = silent_functions ();
-%! silent_functions (0);
-%! f
-%! assert (??);
-%! silent_functions (sf);
-
-%% FIXME Same problem as above!!!
-%% test/octave.test/prefer/prefer-30.m
-%!function f ()
-%! 1
-%!endfunction
-%!#test
-%! sf = silent_functions ();
-%! silent_functions (1);
-%! f
-%! assert (??);
-%! silent_functions (sf);
-
-%% test/octave.test/prefer/prefer-32.m
-%!test
-%! wndz = warning ("query", "Octave:neg-dim-as-zero");
-%! warning ("on", "Octave:neg-dim-as-zero");
-%! fail ("eye (-1) == []", "warning");
-%! warning (wndz.state, "Octave:neg-dim-as-zero");
-
-%% test/octave.test/prefer/prefer-33.m
-%!test
-%! wndz = warning ("query", "Octave:neg-dim-as-zero");
-%! warning ("off", "Octave:neg-dim-as-zero");
-%! assert (all (size (eye (-1)) == [0, 0]));
-%! warning (wndz.state, "Octave:neg-dim-as-zero");
-
-%% test/octave.test/prefer/prefer-34.m
-%!test
-%! watv = warning ("query", "Octave:assign-as-truth-value");
-%! warning ("off", "Octave:assign-as-truth-value");
-%! if (x = 1) 1; endif
-%! warning (watv.state, "Octave:assign-as-truth-value");
-
-%% test/octave.test/prefer/prefer-35.m
-%!test
-%! watv = warning ("query", "Octave:assign-as-truth-value");
-%! warning ("on", "Octave:assign-as-truth-value");
-%! fail ("if (x = 1) 1; endif", "warning");
-%! warning (watv.state, "Octave:assign-as-truth-value");
-
-%% test/octave.test/prefer/prefer-38.m
-%!test
-%! wdbz = warning ("query", "Octave:divide-by-zero");
-%! warning ("off", "Octave:divide-by-zero");
-%! assert (isinf (1/0));
-%! warning (wdbz.state, "Octave:divide-by-zero");
-
-%% test/octave.test/prefer/prefer-39.m
-%!test
-%! wdbz = warning ("query", "Octave:divide-by-zero");
-%! warning ("on", "Octave:divide-by-zero");
-%! a = 1;
-%! b = 0;
-%! fail ("isinf (a/b);", "warning")
-%! warning (wdbz.state, "Octave:divide-by-zero");
-
--- a/test/test_range.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-## Copyright (C) 2007-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## Test values of range
-
-%!assert (full (1:9), [ 1 2 3 4 5 6 7 8 9 ])
-%!assert (full (1:0.4:3), [ 1.0 1.4 1.8 2.2 2.6 3.0 ])
-%!assert (full (9:1), zeros (1,0))
-%!assert (full (9:-1:1), [ 9 8 7 6 5 4 3 2 1 ])
-%!assert (full (1:-1:9), zeros (1,0))
-%!assert (full (1:1:1), 1)
-%!assert (full (i:2i:10i), zeros (1,0))
-
-## Test mixing integer range with other types
-
-%!shared expect, r, z
-%! expect = [ 1 2 3 4 5 6 7 8 9
-%!            0 0 0 0 0 0 0 0 0 ];
-%! z = zeros (1,9);
-%! r = 1:9;
-
-%!assert ([ r ; z                  ], expect)
-%!assert ([ r ; single(z)          ], single (expect))
-%!assert ([ r ; logical(z)         ], expect)
-%!assert ([ r ; sparse(z)          ], sparse (expect))
-%!assert ([ r ; sparse(logical(z)) ], sparse (expect))
-
-%!assert ([ r ; int8(z)            ], int8(expect))
-%!assert ([ r ; int16(z)           ], int16(expect))
-%!assert ([ r ; int32(z)           ], int32(expect))
-%!assert ([ r ; int64(z)           ], int64(expect))
-%!assert ([ r ; uint8(z)           ], uint8(expect))
-%!assert ([ r ; uint16(z)          ], uint16(expect))
-%!assert ([ r ; uint32(z)          ], uint32(expect))
-%!assert ([ r ; uint64(z)          ], uint64(expect))
-
-## Test mixing non-integer range with other types
-
-%!shared expect, r, z
-%! expect = [ 1.0 1.4 1.8 2.2 2.6 3.0
-%!            0   0   0   0   0   0   ];
-%! z = zeros (1,6);
-%! r = 1:0.4:3;
-
-%!assert ([ r ; z                  ], expect)
-%!assert ([ r ; single(z)          ], single (expect))
-%!assert ([ r ; logical(z)         ], expect)
-%!assert ([ r ; sparse(z)          ], sparse (expect))
-%!assert ([ r ; sparse(logical(z)) ], sparse (expect))
-
-%!assert ([ r ; int8(z)            ], int8(expect))
-%!assert ([ r ; int16(z)           ], int16(expect))
-%!assert ([ r ; int32(z)           ], int32(expect))
-%!assert ([ r ; int64(z)           ], int64(expect))
-%!assert ([ r ; uint8(z)           ], uint8(expect))
-%!assert ([ r ; uint16(z)          ], uint16(expect))
-%!assert ([ r ; uint32(z)          ], uint32(expect))
-%!assert ([ r ; uint64(z)          ], uint64(expect))
-
--- a/test/test_recursion.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/recursion/recursion-1.m
-%!function y = f (x)
-%!  if (x == 1)
-%!    y = x;
-%!    return;
-%!  else
-%!    y = x * f (x-1);
-%!  endif
-%!endfunction
-%!
-%!assert(f (5), 120);
-
-%% test/octave.test/recursion/recursion-2.m
-%!function y = f (x)
-%!  if (x == 1)
-%!    y = x;
-%!    return;
-%!  else
-%!    y = f (x-1) * x;
-%!  endif
-%!endfunction
-%!
-%!assert(f (5), 120);
-
-%%FIXME: Need test for maximum recursion depth
--- a/test/test_return.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/return/return-1.m
-%!function y = f ()
-%!  y = 1;
-%!  return;
-%!  y = 2;
-%!endfunction
-%!
-%!assert(f(), 1)
-
-%% test/octave.test/return/return-2.m
-%!test
-%! return;
-
--- a/test/test_slice.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-## Copyright (C) 2007-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%!function x = set_slice (size, dim, slice)
-%!  x = ones (size);
-%!  switch dim
-%!    case 11
-%!      x(slice) = 2;
-%!    case 21
-%!      x(slice, :) = 2;
-%!    case 22
-%!      x(:, slice) = 2;
-%!    case 31
-%!      x(slice, :, :) = 2;
-%!    case 32
-%!      x(:, slice, :) = 2;
-%!    case 33
-%!      x(:, :, slice) = 2;
-%!    otherwise
-%!      error("invalid dim, '%d'", dim);
-%!  endswitch
-%!endfunction
-
-## size = [2 0]
-%!assert (set_slice ([2 0], 11, []), zeros ([2 0]))
-%!error id=Octave:invalid-resize set_slice ([2 0], 11, 1)
-%!error id=Octave:invalid-resize set_slice ([2 0], 11, 2)
-%!error id=Octave:invalid-resize set_slice ([2 0], 11, 3)
-%!assert (set_slice ([2 0], 21, []), zeros ([2 0]))
-%!assert (set_slice ([2 0], 21, 1), zeros ([2 0]))
-%!assert (set_slice ([2 0], 21, 2), zeros ([2 0]))
-%!assert (set_slice ([2 0], 21, 3), zeros ([3 0]))
-%!assert (set_slice ([2 0], 22, []), zeros ([2 0]))
-%!assert (set_slice ([2 0], 22, 1), [2 2]')
-%!assert (set_slice ([2 0], 22, 2), [0 0;2 2]')
-%!assert (set_slice ([2 0], 22, 3), [0 0;0 0;2 2]')
-%!assert (set_slice ([2 0], 31, []), zeros ([2 0]))
-%!assert (set_slice ([2 0], 31, 1), zeros ([2 0]))
-%!assert (set_slice ([2 0], 31, 2), zeros ([2 0]))
-%!assert (set_slice ([2 0], 31, 3), zeros ([3 0]))
-%!assert (set_slice ([2 0], 32, []), zeros ([2 0]))
-%!assert (set_slice ([2 0], 32, 1), [2 2]')
-%!assert (set_slice ([2 0], 32, 2), [0 0;2 2]')
-%!assert (set_slice ([2 0], 32, 3), [0 0;0 0;2 2]')
-%!assert (set_slice ([2 0], 33, []), zeros ([2 0]))
-%!assert (set_slice ([2 0], 33, 1), zeros ([2 0]))
-%!assert (set_slice ([2 0], 33, 2), zeros ([2 0 2]))
-%!assert (set_slice ([2 0], 33, 3), zeros ([2 0 3]))
-
-## size = [0 2]
-%!assert (set_slice ([0 2], 11, []), zeros ([0 2]))
-%!assert (set_slice ([0 2], 11, 1), 2)
-%!assert (set_slice ([0 2], 11, 2), [0, 2])
-%!assert (set_slice ([0 2], 11, 3), [0, 0, 2])
-%!assert (set_slice ([0 2], 21, []), zeros ([0 2]))
-%!assert (set_slice ([0 2], 21, 1), [2 2])
-%!assert (set_slice ([0 2], 21, 2), [0 0;2 2])
-%!assert (set_slice ([0 2], 21, 3), [0 0;0 0;2 2])
-%!assert (set_slice ([0 2], 22, []), zeros ([0 2]))
-%!assert (set_slice ([0 2], 22, 1), zeros ([0 2]))
-%!assert (set_slice ([0 2], 22, 2), zeros ([0 2]))
-%!assert (set_slice ([0 2], 22, 3), zeros ([0 3]))
-%!assert (set_slice ([0 2], 31, []), zeros ([0 2]))
-%!assert (set_slice ([0 2], 31, 1), [2 2])
-%!assert (set_slice ([0 2], 31, 2), [0 0;2 2])
-%!assert (set_slice ([0 2], 31, 3), [0 0;0 0;2 2])
-%!assert (set_slice ([0 2], 32, []), zeros ([0 2]))
-%!assert (set_slice ([0 2], 32, 1), zeros ([0 2]))
-%!assert (set_slice ([0 2], 32, 2), zeros ([0 2]))
-%!assert (set_slice ([0 2], 32, 3), zeros ([0 3]))
-%!assert (set_slice ([0 2], 33, []), zeros ([0 2]))
-%!assert (set_slice ([0 2], 33, 1), zeros ([0 2]))
-%!assert (set_slice ([0 2], 33, 2), zeros ([0 2 2]))
-%!assert (set_slice ([0 2], 33, 3), zeros ([0 2 3]))
-
-## size = [2 1]
-%!assert (set_slice ([2 1], 11, []), ones ([2 1]))
-%!assert (set_slice ([2 1], 11, 1), [2 1]')
-%!assert (set_slice ([2 1], 11, 2), [1 2]')
-%!assert (set_slice ([2 1], 11, 3), [1 1 2]')
-%!assert (set_slice ([2 1], 11, 4), [1 1 0 2]')
-%!assert (set_slice ([2 1], 21, []), ones ([2 1]))
-%!assert (set_slice ([2 1], 21, 1), [2 1]')
-%!assert (set_slice ([2 1], 21, 2), [1 2]')
-%!assert (set_slice ([2 1], 21, 3), [1 1 2]')
-%!assert (set_slice ([2 1], 21, 4), [1 1 0 2]')
-%!assert (set_slice ([2 1], 22, []), ones ([2 1]))
-%!assert (set_slice ([2 1], 22, 1), [2 2]')
-%!assert (set_slice ([2 1], 22, 2), [1 1;2 2]')
-%!assert (set_slice ([2 1], 22, 3), [1 1;0 0;2 2]')
-%!assert (set_slice ([2 1], 31, []), ones ([2 1]))
-%!assert (set_slice ([2 1], 31, 1), [2 1]')
-%!assert (set_slice ([2 1], 31, 2), [1 2]')
-%!assert (set_slice ([2 1], 31, 3), [1 1 2]')
-%!assert (set_slice ([2 1], 31, 4), [1 1 0 2]')
-%!assert (set_slice ([2 1], 32, []), ones ([2 1]))
-%!assert (set_slice ([2 1], 32, 1), [2 2]')
-%!assert (set_slice ([2 1], 32, 2), [1 1;2 2]')
-%!assert (set_slice ([2 1], 32, 3), [1 1;0 0;2 2]')
-%!assert (set_slice ([2 1], 33, []), ones ([2 1]))
-%!assert (set_slice ([2 1], 33, 1), [2 2]')
-%!assert (set_slice ([2 1], 33, 2), reshape ([1 1 2 2],[2 1 2]))
-%!assert (set_slice ([2 1], 33, 3), reshape ([1 1 0 0 2 2],[2 1 3]))
-
-## size = [1 2]
-%!assert (set_slice ([1 2], 11, []), full (ones ([1 2])))
-%!assert (set_slice ([1 2], 11, 1), [2 1])
-%!assert (set_slice ([1 2], 11, 2), [1 2])
-%!assert (set_slice ([1 2], 11, 3), [1 1 2])
-%!assert (set_slice ([1 2], 11, 4), [1 1 0 2])
-%!assert (set_slice ([1 2], 21, []), full (ones ([1 2])))
-%!assert (set_slice ([1 2], 21, 1), [2 2])
-%!assert (set_slice ([1 2], 21, 2), [1 1;2 2])
-%!assert (set_slice ([1 2], 21, 3), [1 1;0 0;2 2])
-%!assert (set_slice ([1 2], 22, []), full (ones ([1 2])))
-%!assert (set_slice ([1 2], 22, 1), [2 1])
-%!assert (set_slice ([1 2], 22, 2), [1 2])
-%!assert (set_slice ([1 2], 22, 3), [1 1 2])
-%!assert (set_slice ([1 2], 22, 4), [1 1 0 2])
-%!assert (set_slice ([1 2], 31, []), full (ones ([1 2])))
-%!assert (set_slice ([1 2], 31, 1), [2 2])
-%!assert (set_slice ([1 2], 31, 2), [1 1;2 2])
-%!assert (set_slice ([1 2], 31, 3), [1 1;0 0;2 2])
-%!assert (set_slice ([1 2], 32, []), full (ones ([1 2])))
-%!assert (set_slice ([1 2], 32, 1), [2 1])
-%!assert (set_slice ([1 2], 32, 2), [1 2])
-%!assert (set_slice ([1 2], 32, 3), [1 1 2])
-%!assert (set_slice ([1 2], 32, 4), [1 1 0 2])
-%!assert (set_slice ([1 2], 33, []), full (ones ([1 2])))
-%!assert (set_slice ([1 2], 33, 1), [2 2])
-%!assert (set_slice ([1 2], 33, 2), reshape ([1 1 2 2],[1 2 2]))
-%!assert (set_slice ([1 2], 33, 3), reshape ([1 1 0 0 2 2],[1 2 3]))
-
-## size = [2 2]
-%!assert (set_slice ([2 2], 11, []), ones ([2 2]))
-%!assert (set_slice ([2 2], 11, 1), [2 1;1 1])
-%!assert (set_slice ([2 2], 11, 2), [1 1;2 1])
-%!assert (set_slice ([2 2], 11, 3), [1 2;1 1])
-%!assert (set_slice ([2 2], 11, 4), [1 1;1 2])
-%!error id=Octave:invalid-resize set_slice ([2 2], 11, 5)
-%!error id=Octave:invalid-resize set_slice ([2 2], 11, 6)
-%!assert (set_slice ([2 2], 21, []), ones ([2 2]))
-%!assert (set_slice ([2 2], 21, 1), [2 2;1 1])
-%!assert (set_slice ([2 2], 21, 2), [1 1;2 2])
-%!assert (set_slice ([2 2], 21, 3), [1 1;1 1;2 2])
-%!assert (set_slice ([2 2], 21, 4), [1 1;1 1;0 0;2 2])
-%!assert (set_slice ([2 2], 22, []), ones ([2 2]))
-%!assert (set_slice ([2 2], 22, 1), [2 2;1 1]')
-%!assert (set_slice ([2 2], 22, 2), [1 1;2 2]')
-%!assert (set_slice ([ 2 2], 22, 3), [1 1;1 1;2 2]')
-%!assert (set_slice ([2 2], 22, 4), [1 1;1 1;0 0;2 2]')
-%!assert (set_slice ([2 2], 31, []), ones ([2 2]))
-%!assert (set_slice ([2 2], 31, 1), [2 2;1 1])
-%!assert (set_slice ([2 2], 31, 2), [1 1;2 2])
-%!assert (set_slice ( [2 2], 31, 3), [1 1;1 1;2 2])
-%!assert (set_slice ([2 2], 31, 4), [1 1;1 1;0 0;2 2])
-%!assert (set_slice ([2 2], 32, []), ones ([2 2]))
-%!assert (set_slice ([2 2], 32, 1), [2 2;1 1]')
-%!assert (set_slice ([2 2], 32, 2), [1 1;2 2]')
-%!assert (set_slice ([ 2 2], 32, 3), [1 1;1 1;2 2]')
-%!assert (set_slice ([2 2], 32, 4), [1 1;1 1;0 0;2 2]')
-%!assert (set_slice ([2 2], 33, []), ones ([2 2]))
-%!assert (set_slice ([2 2], 33, 1), [2 2;2 2])
-%!assert (set_slice ([2 2], 33, 2), reshape ([1 1 1 1 2 2 2 2],[2 2 2]))
-%!assert (set_slice ([ 2 2], 33, 3), reshape ([1 1 1 1 0 0 0 0 2 2 2 2],[2 2 3]))
--- a/test/test_struct.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,266 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/struct/fieldnames-1.m
-%!test
-%! s.a = 1;
-%! c = fieldnames (s);
-%! assert (iscell (c) && strcmp (c{1}, "a"));
-
-%% test/octave.test/struct/fieldnames-2.m
-%!test
-%! s.a.b = 1;
-%! c = fieldnames (s.a);
-%! assert (iscell (c) && strcmp (c{1}, "b"));
-
-%% test/octave.test/struct/fieldnames-3.m
-%!error <Invalid call to fieldnames> fieldnames ();
-
-%% test/octave.test/struct/fieldnames-4.m
-%!test
-%! s.a = 1;
-%! fail ("fieldnames (s, 1)", "Invalid call to fieldnames");
-
-%% test/octave.test/struct/fieldnames-5.m
-%!error fieldnames (1);
-
-%% test/octave.test/struct/isfield-1.m
-%!test
-%! s.aaa = 1;
-%! s.a = 2;
-%! assert (isfield (s, "a"));
-
-%% test/octave.test/struct/isfield-2.m
-%!test
-%! s.aaa = 1;
-%! s.a = 2;
-%! assert (!(isfield (s, "b")));
-
-%% test/octave.test/struct/isfield-3.m
-%!error <Invalid call to isfield> isfield ();
-
-%% test/octave.test/struct/isfield-4.m
-%!test
-%! s.aaa = 1;
-%! s.a = 2;
-%! fail ("isfield (s, 'a', 3);", "Invalid call to isfield");
-
-%% test/octave.test/struct/isfield-5.m
-%!assert (isfield (1, "m") == 0);
-
-%% test/octave.test/struct/isfield-6.m
-%!test
-%! s.a = 2;
-%! assert (isfield (s, 2) == 0);
-
-%% test/octave.test/struct/isstruct-1.m
-%!assert (!(isstruct (1)))
-
-%% test/octave.test/struct/isstruct-2.m
-%!assert (!(isstruct ([1, 2])))
-
-%% test/octave.test/struct/isstruct-3.m
-%!assert (!(isstruct ([])))
-
-%% test/octave.test/struct/isstruct-4.m
-%!assert (!(isstruct ([1, 2; 3, 4])))
-
-%% test/octave.test/struct/isstruct-5.m
-%!assert (!(isstruct ("t")))
-
-%% test/octave.test/struct/isstruct-6.m
-%!assert (!(isstruct ("test")))
-
-%% test/octave.test/struct/isstruct-7.m
-%!assert (!(isstruct (["test"; "ing"])))
-
-%!assert (!(isstruct ({1})))
-
-%% test/octave.test/struct/isstruct-8.m
-%!test
-%! s.a = 1;
-%! assert (isstruct (s));
-
-%% test/octave.test/struct/isstruct-9.m
-%!test
-%! s.a.b = 1;
-%! assert (isstruct (s.a));
-
-%% test/octave.test/struct/isstruct-10.m
-%!error <Invalid call to isstruct> isstruct ();
-
-%% test/octave.test/struct/isstruct-11.m
-%!test
-%! s.a = 1;
-%! fail ("isstruct (s, 1)", "Invalid call to isstruct");
-
-## increment element of matrix stored in struct array field
-%!test
-%! a = struct ("c", {[1, 2, 3], [4, 5, 6], [7, 8, 9]});
-%! a(2).c(3)++;
-%! assert (a(2).c, [4, 5, 7]);
-
-## create struct array by assignment to cs-list
-%!test
-%! [a(1:2).x] = deal (1, 3);
-%! assert (a, struct ("x", {1, 3}));
-%! assert ({a(1:2).x}, {1, 3});
-
-## assign to subrange of struct array field
-%!test
-%! b = struct ("name", {"a", "b", "c"; "d", "e", "f"}, "value", 100);
-%! [b(1:2, [1,3]).name] = deal ("aaa", "ddd", "ccc", "fff");
-%! assert ({b.name}, {"aaa", "ddd", "b", "e", "ccc", "fff"});
-
-## index into nested struct arrays
-%!test
-%! a = struct ("name", {"a", "b", "c"; "d", "e", "f"}, "value", 0);
-%! a(2).value = a;
-%! assert (a(2).value(2,3).name, "f");
-
-## assign to subrange of field in nested struct array
-%!test
-%! b = struct ("name", {"a", "b", "c"; "d", "e", "f"}, "value", 0);
-%! b(3, 1).value = b;
-%! [b(3, 1).value(1, [1, 3]).name] = deal ("aaa", "ccc");
-%! assert (size (b), [3, 3]);
-%! assert (b(3,1).value(1, 3).name, "ccc");
-
-## test 4-dimensional struct array
-%!test
-%! c(4, 4, 4, 4).name  = "a";
-%! c(3, 3, 3, 3).value = 1;
-%! assert (c(2,2,2,2), struct ("name", [], "value", []));
-
-## assign to subrange of field in 4D struct array
-%!test
-%! c(4, 4, 4, 4).name  = "a";
-%! c(3, 3, 3, 3).value = 1;
-%! [c([1, 3], 2, :, [3, 4]).value] = deal (1);
-%! assert (length(find([c.value] == 1)), 17);
-%! assert (length(find([c.value])), 17);
-
-## swap elements of struct array
-%!test
-%! b = struct ("name", {"a", "b", "c"; "d", "e", "f"}, "value", 0);
-%! [b([2, 1], [3, 1]).name] = deal (b([1, 2], [1, 2]).name);
-%! assert ({b.name}, {"e", "b", "b", "e", "d", "a"});
-
-## test internal ordering of struct array fields
-%!test
-%! c(4, 4, 4, 4).value = 3;
-%! c(1, 2, 3, 4).value = 2;
-%! c(3, 3, 3, 3).value = 1;
-%! d = reshape ({c.value}, size(c));
-%! assert ([d{4, 4, 4, 4}, d{1, 2, 3, 4}, d{3, 3, 3, 3}],
-%!         [3, 2, 1]);
-
-## test assignment to mixed cs-list of field element subranges
-%!test
-%! b = struct ("name", {"a", "b", "c"; "d", "e", "f"}, "value", 100);
-%! [b(1:2, [1, 3]).name, b(2, 1:3).value] = ...
-%!   deal (1, 2, 3, 4, "5", "6", "7");
-%! assert ({b.name}, {1, 2, "b", "e", 3, 4});
-%! assert ({b.value}, {100, "5", 100, "6", 100, "7"});
-
-%!error <a cs-list cannot be further indexed>
-%! [a(1:3).x] = deal ([1, 5], [3, 7], [8, 9]);
-%! [a(2:3).x(2)] = deal (10, 11);
-
-%!error <a cs-list cannot be further indexed>
-%! [a(1:3).x] = deal ([1, 5], [3, 7], [8, 9]);
-%! a(2:3).x(2);
-
-%!error id=Octave:index-out-of-bounds
-%! a(1).x.x = 1;
-%! a(2).x;
-
-%!error <invalid number of output arguments for constant expression>
-%! a = struct ("value", {1, 2, 3, 4, 5});
-%! [a(2:4).value] = 1;
-
-%!error <invalid assignment to cs-list outside multiple assignment>
-%! c(4, 4, 4, 4).name  = "a";
-%! c(3, 3, 3, 3).value = 1;
-%! c([1, 3], 2, :, [3, 4]).value = 1;
-
-## test lazy copying in structs: nested assignment to self
-%!test
-%! a.a = 1;
-%! a.b = a;
-%! a.b.c = a;
-%! assert (a.b.c.b, struct ("a", 1));
-
-## test lazy copying in structs: indirect nested assignment to self
-%!test
-%! a.a = 1;
-%! a.b = 2;
-%! b.c = a;
-%! b.d = 3;
-%! c.d = b;
-%! c.e = 4;
-%! a.b = c;
-%! a.b.e = a;
-%! assert (a.b.e.b.d.c, struct ("a", 1, "b", 2));
-
-## test lazy copying in structs: nested assignment via function
-%!function aa = do_nest (a);
-%!  aa   = a;
-%!  aa.b = a;
-%!endfunction
-%!test
-%! a.c = 1;
-%! a = do_nest (a);
-%! a = do_nest (a);
-%! a = do_nest (a);
-%! assert (a.b.b.b, struct ("c", 1));
-
-## test lazy copying in structs: nested assignment via function
-%!function aa = do_nest (a);
-%!  aa   = a;
-%!  aa.b = a;
-%!  aa.b.c = aa;
-%!endfunction
-%!test
-%! a.c = 1;
-%! a = do_nest (a);
-%! a = do_nest (a);
-%! a = do_nest (a);
-%! assert (a.b.c.b.b.c.b.b.c.b, struct ("c", 1));
-
-## test lazy copying in structs: nested assignment on different levels.
-%!test
-%! a.b = 1;
-%! b.c = a;
-%! b.d.e = a;
-%! b.f.g.h = a;
-%! b.i.j.k.l = a;
-%! a.m = b;
-%! a.m.c.b = a;
-%! assert (a.m.c.b.m.i.j.k.l, struct ("b", 1));
-
-## test indexed assignment into empty struct array
-%!test
-%! s = resize (struct (), 3,2);
-%! s(3).foo = 42;
-%! assert (s(3), struct ("foo", 42));
-
-%!error id=Octave:index-out-of-bounds
-%! s = resize (struct (),3,2);
-%! s(3).foo = 42;
-%! s(7);
--- a/test/test_switch.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/switch/switch-1.m
-%!test
-%! a = 1;
-%! b = 2;
-%! c = 3;
-%! 
-%! switch 0 case 1 x = a; case 2 x = b; otherwise x = c; endswitch
-%! switch 1 case 1 y = a; case 2 y = b; otherwise y = c; endswitch
-%! switch 2 case 1 z = a; case 2 z = b; otherwise z = c; endswitch
-%! switch 3 case 1 p = a; case 2 p = b; otherwise p = c; endswitch
-%! 
-%! assert (x == c && y == a && z == b && p == c);
-
-%% test/octave.test/switch/switch-2.m
-%!test
-%! a = 1;
-%! b = 2;
-%! c = 3;
-%! 
-%! x = zeros (1, 4);
-%! 
-%! k = 1;
-%! 
-%! for i = 0:3
-%! switch (i)
-%!   case a
-%!    x(k) = a;
-%!   case b
-%!    x(k) = b;
-%!   otherwise
-%!    x(k) = c;
-%!   endswitch
-%!   k++;
-%! endfor
-%! 
-%! assert (all (x == [3, 1, 2, 3]));
-
-%% test/octave.test/switch/switch-3.m
-%!test
-%! a = 1;
-%! b = 2;
-%! c = 3;
-%! 
-%! x = zeros (1, 4);
-%! 
-%! k = 1;
-%! 
-%! for i = 0:3
-%!   switch (i)
-%!   case a
-%!    x(k) = a;
-%!   endswitch
-%!   k++;
-%! endfor
-%! 
-%! assert (all (x == [0, 1, 0, 0]));
-
-%!test
-%! a = 1;
-%!
-%! switch 1
-%! otherwise
-%!   a = 2;
-%! endswitch
-%! 
-%! assert (a == 2);
-
-
-%% test/octave.test/switch/switch-4.m
-%!error <syntax error> eval ("switch endswitch")
-
-%% test/octave.test/switch/switch-5.m
-%!error <syntax error> eval ("switch case endswitch")
-
-%% test/octave.test/switch/switch-6.m
-%!error <syntax error> eval ("switch 1 default 1; endswitch")
-
--- a/test/test_system.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,489 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/system/cputime-1.m
-%!test
-%! [t1, u1, s1] = cputime ();
-%! for i = 1:200
-%!   sin (i);
-%! endfor
-%! [t2, u2, s2] = cputime ();
-%! assert (t1, u1 + s1);
-%! assert (t2 == u2 + s2);
-%! assert (t2 >= t1);
-%! assert (u2 >= u2);
-%! assert (s2 >= s2);
-%!#assert (t1 == u1 + s1 && t2 == u2 + s2 && t2 >= t1 && u2 >= u2 && s2 >= s2);
-
-%% test/octave.test/system/tic-toc-1.m
-%!test
-%! tic ();
-%! sleep (2);
-%! assert (toc () > 0);
-
-%% test/octave.test/system/pause-1.m
-%!test
-%! pause (0);
-%! printf_assert ("ok\n");
-%! assert (prog_output_assert ("ok"));
-
-%% test/octave.test/system/pause-2.m
-%!error <Invalid call to pause> pause (1, 2)
-
-%% test/octave.test/system/sleep-1.m
-%!test
-%! sleep (0);
-%! printf_assert ("ok\n");
-%! assert (prog_output_assert ("ok"));
-
-%% test/octave.test/system/sleep-2.m
-%!error <Invalid call to sleep> sleep ()
-
-%% test/octave.test/system/sleep-3.m
-%!error <Invalid call to sleep> sleep (1, 2)
-
-%% test/octave.test/system/usleep-1.m
-%!test
-%! usleep (0);
-%! printf_assert ("ok\n");
-%! assert (prog_output_assert ("ok"));
-
-%% test/octave.test/system/usleep-2.m
-%!error <Invalid call to usleep> usleep ()
-
-%% test/octave.test/system/usleep-3.m
-%!error <Invalid call to usleep> usleep (1, 2)
-
-%% test/octave.test/system/rename-1.m
-%!test
-%! from = tmpnam ();
-%! to = tmpnam ();
-%! id = fopen (from, "wb");
-%! if (id > 0 && fclose (id) == 0)
-%!   [s, e] = stat (from);
-%!   if (! e)
-%!     if (rename (from, to) == 0)
-%!       [s, e] = stat (from);
-%!       if (e < 0)
-%!         [s, e] = stat (to);
-%!         assert (e == 0);
-%!         unlink (to);
-%!       endif
-%!     endif
-%!   endif
-%! endif
-
-%% test/octave.test/system/rename-2.m
-%!error <Invalid call to rename> rename ()
-
-%% test/octave.test/system/rename-3.m
-%!error <Invalid call to rename> rename ("foo", "bar", 1)
-
-%% test/octave.test/system/unlink-1.m
-%!test
-%! nm = tmpnam ();
-%! if ((id = fopen (nm, "wb")) > 0)
-%!   [s, err] = stat (nm);
-%!   if (! err && fclose (id) == 0 && unlink (nm) == 0)
-%!     [s, err] = stat (nm);
-%!     assert (err < 0);
-%!   endif
-%! endif
-
-%% test/octave.test/system/unlink-2.m
-%!error <Invalid call to unlink> unlink ()
-
-%% test/octave.test/system/unlink-3.m
-%!error <Invalid call to unlink> unlink ("foo", 1)
-
-%% test/octave.test/system/readdir-1.m
-%!test
-%! [files, status, msg] = readdir (filesep);
-%! assert (iscell (files) && status == 0 && strcmp (msg, ""));
-
-%% test/octave.test/system/readdir-2.m
-%!error <Invalid call to readdir> readdir ()
-
-%% test/octave.test/system/readdir-3.m
-%!error <Invalid call to readdir> readdir ("foo", 1)
-
-%% test/octave.test/system/mk-rm-dir-1.m
-%!test
-%! nm = tmpnam ();
-%! e1 = mkdir (nm);
-%! [s2, e2] = stat (nm);
-%! e3 = rmdir (nm);
-%! [s4, e4] = stat (nm);
-%! assert ((e1 && strcmp (s2.modestr(1), "d") && e3 && e4 < 0));
-
-%% test/octave.test/system/mkdir-1.m
-%!error <Invalid call to mkdir> mkdir ()
-
-%% test/octave.test/system/mkdir-2.m
-%!error <Invalid call to mkdir> mkdir ("foo", 1, 2)
-
-%% test/octave.test/system/rmdir-1.m
-%!error <Invalid call to rmdir> rmdir ()
-
-%% test/octave.test/system/rmdir-2.m
-%!test
-%! crr = confirm_recursive_rmdir ();
-%! confirm_recursive_rmdir (0);
-%! assert (!rmdir ("foo", "s"));
-%! confirm_recursive_rmdir (crr);
-
-%% test/octave.test/system/umask-1.m
-%!test
-%! orig_umask = umask (0);
-%! nm = tmpnam ();
-%! id = fopen (nm, "wb");
-%! s1 = stat (nm);
-%! fclose (id);
-%! unlink (nm);
-%! 
-%! umask (777);
-%! nm = tmpnam ();
-%! id = fopen (nm, "wb");
-%! s2 = stat (nm);
-%! fclose (id);
-%! unlink (nm);
-%! 
-%! assert (deblank (s1.modestr), "-rw-rw-rw-");
-%! assert (deblank (s2.modestr), "----------");
-%! # Restore original umask value
-%! umask (orig_umask);
-
-%% test/octave.test/system/umask-2.m
-%!error <Invalid call to umask> umask ()
-
-%% test/octave.test/system/umask-3.m
-%!error <Invalid call to umask> umask (1, 2)
-
-%% test/octave.test/system/stat-1.m
-%!test
-%! [s, err, msg] = stat (filesep);
-%! assert ((err == 0
-%! && isstruct (s)
-%! && isfield (s, "dev")
-%! && isfield (s, "ino")
-%! && isfield (s, "modestr")
-%! && isfield (s, "nlink")
-%! && isfield (s, "uid")
-%! && isfield (s, "gid")
-%! && isfield (s, "size")
-%! && isfield (s, "atime")
-%! && isfield (s, "mtime")
-%! && isfield (s, "ctime")
-%! && ischar (msg)));
-
-%% test/octave.test/system/stat-2.m
-%!error <Invalid call to stat> stat ()
-
-%% test/octave.test/system/stat-3.m
-%!error <Invalid call to stat> stat ("foo", 1)
-
-%% test/octave.test/system/lstat-1.m
-%!test
-%! [s, err, msg] = lstat (filesep);
-%! assert ((err == 0
-%! && isstruct (s)
-%! && isfield (s, "dev")
-%! && isfield (s, "ino")
-%! && isfield (s, "modestr")
-%! && isfield (s, "nlink")
-%! && isfield (s, "uid")
-%! && isfield (s, "gid")
-%! && isfield (s, "size")
-%! && isfield (s, "atime")
-%! && isfield (s, "mtime")
-%! && isfield (s, "ctime")
-%! && ischar (msg)));
-
-%% test/octave.test/system/lstat-2.m
-%!error <Invalid call to lstat> lstat ()
-
-%% test/octave.test/system/lstat-3.m
-%!error <Invalid call to lstat> lstat ("foo", 1)
-
-%% test/octave.test/system/glob-1.m
-%!assert (iscell (glob ([filesep "*"])))
-
-%% test/octave.test/system/glob-2.m
-%!error <Invalid call to glob> glob ()
-
-%% test/octave.test/system/glob-3.m
-%!error <Invalid call to glob> glob ("foo", 1)
-
-%% test/octave.test/system/fnmatch-1.m
-%!test
-%! string_fill_char = setstr (0);
-%! assert ((fnmatch ("a*a", {"aba"; "xxxba"; "aa"}) == [1; 0; 1]
-%! && fnmatch ({"a*a"; "b*b"}, "bob")
-%! && fnmatch ("x[0-5]*", {"x1"; "x6"}) == [1; 0]
-%! && fnmatch ("x[0-5]*", {"x1"; "x6"; "x001"}) == [1; 0; 1]
-%! && fnmatch ("x???y", {"xabcy"; "xy"}) == [1; 0]));
-
-%% test/octave.test/system/fnmatch-2.m
-%!error <Invalid call to fnmatch> fnmatch ()
-
-%% test/octave.test/system/fnmatch-3.m
-%!error <Invalid call to fnmatch> fnmatch ("foo", "bar", 3)
-
-%% test/octave.test/system/file_in_path-1.m
-%!assert (ischar (file_in_path (path (), "date.m")))
-
-%% test/octave.test/system/file_in_path-2.m
-%!error <invalid option> file_in_path ("foo", "bar", 1)
-
-%% test/octave.test/system/file_in_path-3.m
-%!error <Invalid call to file_in_path> file_in_path ()
-
-%% test/octave.test/system/file_in_path-4.m
-%!error <Invalid call to file_in_path> file_in_path ("foo", "bar", "baz", "ooka")
-
-%% test/octave.test/system/tilde_expand-1.m
-%!testif HAVE_GETPWUID
-%! x = getpwuid (getuid ());
-%! assert ((strcmp (x.dir, tilde_expand ("~"))
-%! && strcmp (x.dir, tilde_expand (sprintf ("~%s", x.name)))
-%! && strcmp ("foobar", tilde_expand ("foobar"))));
-
-%% test/octave.test/system/tilde_expand-2.m
-%!error <Invalid call to tilde_expand> tilde_expand ()
-
-%% test/octave.test/system/tilde_expand-3.m
-%!error <Invalid call to tilde_expand> tilde_expand ("str", 2)
-
-%% test/octave.test/system/getpgrp-1.m
-%!testif HAVE_GETPGRP
-%! assert (getpgrp () > 0);
-
-%% test/octave.test/system/getpgrp-2.m
-%!error <... getpgrp> getpgrp (1)
-
-%% test/octave.test/system/getpid-1.m
-%!assert (getpid () > 0)
-
-%% test/octave.test/system/getpid-2.m
-%!error <... getpid> getpid (1)
-
-%% test/octave.test/system/getppid-1.m
-%!testif HAVE_GETPPID
-%! assert (getppid () > 0);
-
-%% test/octave.test/system/getppid-2.m
-%!error <... getppid> getppid (1)
-
-%% test/octave.test/system/geteuid-1.m
-%!assert (geteuid () >= 0)
-
-%% test/octave.test/system/geteuid-2.m
-%!error <... geteuid> geteuid (1)
-
-%% test/octave.test/system/getuid-1.m
-%!assert (getuid () >= 0)
-
-%% test/octave.test/system/getuid-2.m
-%!error <... getuid> getuid (1)
-
-%% test/octave.test/system/getegid-1.m
-%!assert (getegid () >= 0)
-
-%% test/octave.test/system/getegid-2.m
-%!error <... getegid> getegid (1)
-
-%% test/octave.test/system/getgid-1.m
-%!assert (getgid () >= 0)
-
-%% test/octave.test/system/getgid-2.m
-%!error <... getgid> getgid (1)
-
-%% test/octave.test/system/getenv-1.m
-%!assert (getenv ("HOME"), tilde_expand ("~"))
-
-%% test/octave.test/system/getenv-2.m
-%!error <Invalid call to getenv> getenv ()
-
-%% test/octave.test/system/getenv-3.m
-%!error <Invalid call to getenv> getenv ("foo", 1)
-
-%% test/octave.test/system/getenv-4.m
-%!test
-%! wns = warning ("query", "Octave:num-to-str");
-%! warning ("on", "Octave:num-to-str");
-%! fail ("getenv (1)", "warning");
-%! warning (wns.state, "Octave:num-to-str");
-
-%% test/octave.test/system/putenv-1.m
-%!test
-%! putenv ("foobar", "baz");
-%! assert (getenv ("foobar"), "baz");
-
-%% test/octave.test/system/putenv-2.m
-%!error <Invalid call to putenv> putenv ()
-
-%% test/octave.test/system/putenv-3.m
-%!error <Invalid call to putenv> putenv ("foo", "bar", 1)
-
-%% test/octave.test/system/putenv-4.m
-%!test
-%! wns = warning ("query", "Octave:num-to-str");
-%! warning ("on", "Octave:num-to-str");
-%! fail ("putenv (1, 2)","warning");
-%! warning (wns.state, "Octave:num-to-str");
-
-%% test/octave.test/system/cd-1.m
-%!test
-%! xdir = pwd ();
-%! cd /
-%! d1 = pwd ();
-%! cd (xdir);
-%! if (ispc () && ! isunix ())
-%!   # should be a drive letter
-%!   assert (length (d1), 3);
-%!   assert (d1(2), ":");
-%!   assert (d1(3), "\\");
-%! else
-%!   assert ("/", d1);
-%! endif
-%! assert (pwd(), xdir);
-
-%% test/octave.test/system/cd-2.m
-%!error cd (1)
-
-%% test/octave.test/system/pwd-1.m
-%!assert (ischar (pwd ()))
-
-%% test/octave.test/system/getpwent-1.m
-%!testif HAVE_GETPWENT
-%! s = getpwent ();
-%! endpwent (); 
-%! assert ((isstruct (s)
-%! && isfield (s, "name")
-%! && isfield (s, "passwd")
-%! && isfield (s, "uid")
-%! && isfield (s, "gid")
-%! && isfield (s, "gecos")
-%! && isfield (s, "dir")
-%! && isfield (s, "shell")));
-
-%% test/octave.test/system/getpwent-2.m
-%!error <Invalid call to getpwent> getpwent (1)
-
-%% test/octave.test/system/getpwuid-1.m
-%!testif HAVE_GETPWUID
-%! x = getpwent ();
-%! y = getpwuid (x.uid);
-%! endpwent (); 
-%! assert (strcmp (x.name, y.name) && x.uid == y.uid && x.gid == y.gid);
-
-%% test/octave.test/system/getpwuid-2.m
-%!error <Invalid call to getpwuid> getpwuid ()
-
-%% test/octave.test/system/getpwuid-3.m
-%!error <Invalid call to getpwuid> getpwuid (1, 2)
-
-%% test/octave.test/system/getpwnam-1.m
-%!testif HAVE_GETPWNAM
-%! x = getpwent ();
-%! y = getpwnam (x.name);
-%! endpwent (); 
-%! assert (strcmp (x.name, y.name) && x.uid == y.uid && x.gid == y.gid);
-
-%% test/octave.test/system/getpwnam-2.m
-%!error <Invalid call to getpwnam> getpwnam ()
-
-%% test/octave.test/system/getpwnam-3.m
-%!error <Invalid call to getpwnam> getpwnam ("foo", 1)
-
-%% test/octave.test/system/setpwent-1.m
-%!testif HAVE_SETPWENT
-%! x = getpwent ();
-%! setpwent ();
-%! y = getpwent ();
-%! endpwent (); 
-%! assert (strcmp (x.name, y.name) && x.uid == y.uid && x.gid == y.gid);
-
-%% test/octave.test/system/setpwent-2.m
-%!error <Invalid call to setpwent> setpwent (1)
-
-%% test/octave.test/system/endpwent-1.m
-%!error <Invalid call to endpwent> endpwent (1)
-
-%% test/octave.test/system/getgrent-1.m
-%!testif HAVE_GETGRENT
-%! x = getgrent ();
-%! endgrent ();
-%! assert ((isstruct (x)
-%! && isfield (x, "name")
-%! && isfield (x, "passwd")
-%! && isfield (x, "gid")
-%! && isfield (x, "mem")));
-
-%% test/octave.test/system/getgrent-2.m
-%!error <Invalid call to getgrent> getgrent (1)
-
-%% test/octave.test/system/getgrgid-1.m
-%!testif HAVE_GETGRGID
-%! x = getgrent ();
-%! y = getgrgid (x.gid);
-%! endgrent ();
-%! assert (strcmp (x.name, y.name) && x.gid == y.gid);
-
-%% test/octave.test/system/getgrgid-2.m
-%!error <Invalid call to getgrgid> getgrgid ()
-
-%% test/octave.test/system/getgrgid-3.m
-%!error <Invalid call to getgrgid> getgrgid (1, 2)
-
-%% test/octave.test/system/getgrnam-1.m
-%!testif HAVE_GETGRNAM
-%! x = getgrent ();
-%! y = getgrnam (x.name);
-%! endgrent ();
-%! assert (strcmp (x.name, y.name) && x.gid == y.gid);
-
-%% test/octave.test/system/getgrnam-2.m
-%!error <Invalid call to getgrnam> getgrnam ()
-
-%% test/octave.test/system/getgrnam-3.m
-%!error <Invalid call to getgrnam> getgrnam ("foo", 1)
-
-%% test/octave.test/system/setgrent-1.m
-%!testif HAVE_SETGRENT
-%! x = getgrent ();
-%! setgrent ();
-%! y = getgrent ();
-%! endgrent ();
-%! assert (strcmp (x.name, y.name) && x.gid == y.gid);
-
-%% test/octave.test/system/setgrent-2.m
-%!error <Invalid call to setgrent> setgrent (1)
-
-%% test/octave.test/system/endgrent-1.m
-%!error <Invalid call to endgrent> endgrent (1)
-
-%% test/octave.test/system/isieee-1.m
-%!assert (isieee () == 1 || isieee () == 0)
-
-%% test/octave.test/system/octave_config_info-1.m
-%!assert (isstruct (octave_config_info ()))
-
-%% test/octave.test/system/getrusage-1.m
-%!assert (isstruct (getrusage ()))
-
--- a/test/test_transpose.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% Basic tests
-%!test
-%! scalar = 2;
-%! assert (scalar', 2);
-
-%!test
-%! range = 1:4;
-%! assert (range', [1;2;3;4]);
-
-%!test
-%! vector = [1;2;3;4];
-%! assert (vector', [1,2,3,4]);
-
-%!test
-%! matrix = [1,2;3,4];
-%! assert (matrix', [1,3;2,4]);
-
-%% Basic tests on complex numbers
-%!test
-%! scalar = 2i;
-%! assert (scalar', -2i);
-
-%!test
-%! range = (1:4)*i;
-%! assert (range', [-1i;-2i;-3i;-4i]);
-
-%!test
-%! vector = [1;2;3;4]*i;
-%! assert (vector', [-1i,-2i,-3i,-4i]);
-
-%!test
-%! matrix = [1,2;3,4]*i;
-%! assert (matrix', [-1i,-3i;-2i,-4i]);
-
-%% Test non-Hermitian transpose
-%!test
-%! scalar = 2i;
-%! assert (scalar.', 2i);
-
-%!test
-%! range = (1:4)*i;
-%! assert (range.', [1i;2i;3i;4i]);
-
-%!test
-%! vector = [1;2;3;4]*i;
-%! assert (vector.', [1i,2i,3i,4i]);
-
-%!test
-%! matrix = [1,2;3,4]*i;
-%! assert (matrix.', [1i,3i;2i,4i]);
-
-%% Basic tests on float complex numbers
-%!test
-%! scalar = single (2i);
-%! assert (scalar', single (-2i));
-
-%!test
-%! range = single ((1:4)*i);
-%! assert (range', single ([-1i;-2i;-3i;-4i]));
-
-%!test
-%! vector = single ([1;2;3;4]*i);
-%! assert (vector', single ([-1i,-2i,-3i,-4i]));
-
-%!test
-%! matrix = single ([1,2;3,4]*i);
-%! assert (matrix', single ([-1i,-3i;-2i,-4i]));
-
--- a/test/test_try.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/try/try-1.m
-%!test
-%! try
-%! catch
-%!   error ("Shoudn't get here");
-%! end_try_catch
-
-%% test/octave.test/try/try-2.m
-%!test
-%! try
-%!   clear a;
-%!   a;
-%! catch
-%! end_try_catch
-%! a = 1;
-%! assert (a,1);
-
-%% test/octave.test/try/try-3.m
-%!test
-%! clear x;
-%! try
-%!   clear a;
-%!   a;
-%!   x = 1;
-%! catch
-%! end_try_catch
-%! a = 2;
-%! assert (!exist ('x'));
-%! assert (a,2);
-
-%% test/octave.test/try/try-4.m
-%!test
-%! try
-%!   clear a;
-%!   a;
-%! catch
-%!   x = 1;
-%! end_try_catch
-%! assert (exist ('x'));
-
-%% test/octave.test/try/try-5.m
-%!test
-%! try
-%!   clear a;
-%!   a;
-%!   error ("Shoudn't get here");
-%! catch
-%!   assert (lasterr()(1:13), "'a' undefined");
-%! end_try_catch
-%! assert (lasterr()(1:13), "'a' undefined");
-
-%% test/octave.test/try/try-6.m
-%!test 
-%! try
-%!   error ("user-defined error");
-%! catch
-%!   assert (lasterr, "user-defined error");
-%! end_try_catch
-
-%% test/octave.test/try/try-7.m
-%!function ms = mangle (s)
-%!  ## Wrap angle brackets around S.
-%!  ms = cstrcat ("<", s, ">");
-%!endfunction
-%!test
-%! try
-%!   clear a;
-%!   a;
-%!   error ("Shoudn't get here");
-%! catch
-%!   assert (mangle (lasterr)(1:14), "<'a' undefined");
-%! end_try_catch
-
-%% test/octave.test/try/try-8.m
-%!test
-%! try
-%!   try
-%!     clear a;
-%!     a;
-%!     error ("Shoudn't get here");
-%!   catch
-%!     assert (lasterr()(1:13), "'a' undefined");
-%!   end_try_catch
-%!   clear b;
-%!   b;
-%!   error ("Shoudn't get here");
-%! catch
-%!   assert (lasterr()(1:13), "'b' undefined");
-%! end_try_catch
-
-%% test/octave.test/try/try-9.m
-%!test
-%! try
-%!   clear a;
-%!   a;
-%!   error ("Shoudn't get here");
-%! catch
-%!   try
-%!     assert (lasterr()(1:13), "'a' undefined");
-%!     clear b;
-%!     b;
-%!     error ("Shoudn't get here");
-%!   catch
-%!     assert (lasterr()(1:13), "'b' undefined");
-%!   end_try_catch
-%! end_try_catch
-
-%% test/octave.test/try/try-10.m
-%!test
-%! try
-%!   try
-%!     clear a;
-%!     a;
-%!     error ("Shoudn't get here");
-%!   catch
-%!     error (cstrcat ("rethrow: ", lasterr));
-%!   end_try_catch
-%! catch
-%!   assert (lasterr()(1:22), "rethrow: 'a' undefined");
-%! end_try_catch
-
--- a/test/test_unwind.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/unwind/unwind-1.m
-%!function y = f (x)
-%!  global g;
-%!  save_g = g;
-%!  unwind_protect
-%!    g = 0;
-%!    y = g;
-%!    [1,2;x];
-%!    g = 1;
-%!    y = [y, g];
-%!  unwind_protect_cleanup
-%!    g = save_g;
-%!    y = [y, g];
-%!  end_unwind_protect
-%!endfunction
-%!
-%!test
-%! global g = -1;
-%! y = f ([3,4]);
-%! assert (y, [0,1,-1]);
-
-%% test/octave.test/unwind/unwind-2.m
-%!function y = f (x)
-%!  global g;
-%!  save_g = g;
-%!  unwind_protect
-%!    g = 0;
-%!    y = g;
-%!    [1,2;x];
-%!    g = 1;
-%!    y = [y, g];
-%!  unwind_protect_cleanup
-%!    g = save_g;
-%!    y = [y, g];
-%!    assert (y, [0,-1]);
-%!  end_unwind_protect
-%!endfunction
-%!
-%!test
-%! global g = -1;
-%! fail ("y = f (3);", "mismatch");
-
--- a/test/test_while.m	Mon Feb 11 15:24:56 2013 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-## Copyright (C) 2006-2012 John W. Eaton
-##
-## This file is part of Octave.
-##
-## Octave 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 3 of the License, or (at
-## your option) any later version.
-##
-## Octave 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 Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-%% test/octave.test/while/while-1.m
-%!test
-%! i = 0;
-%! while (eye (2))
-%!   i++;
-%!   printf_assert ("%d\n", i);
-%! endwhile
-%! assert (prog_output_assert (""));
-
-%% test/octave.test/while/while-2.m
-%!test
-%! i = 5;
-%! while (--i)
-%!   printf_assert ("%d", i);
-%! endwhile
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("4321"));
-
-%% test/octave.test/while/while-3.m
-%!test
-%! i = 5;
-%! while (i)
-%!   i--;
-%!   printf_assert ("%d", i);
-%! endwhile
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("43210"));
-
-%% test/octave.test/while/while-4.m
-%!test
-%! i = 0;
-%! while (i++ < 20)
-%!   if (i > 2)
-%!     break;
-%!   endif
-%!   printf_assert ("%d", i);
-%! endwhile
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("12"));
-
-%% test/octave.test/while/while-5.m
-%!test
-%! i = 0;
-%! while (++i < 5)
-%!   if (i < 3)
-%!     continue;
-%!   endif
-%!   printf_assert ("%d", i);
-%! endwhile
-%! printf_assert ("\n");
-%! assert (prog_output_assert ("34"));
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/transpose.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,86 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% Basic tests
+%!test
+%! scalar = 2;
+%! assert (scalar', 2);
+
+%!test
+%! range = 1:4;
+%! assert (range', [1;2;3;4]);
+
+%!test
+%! vector = [1;2;3;4];
+%! assert (vector', [1,2,3,4]);
+
+%!test
+%! matrix = [1,2;3,4];
+%! assert (matrix', [1,3;2,4]);
+
+%% Basic tests on complex numbers
+%!test
+%! scalar = 2i;
+%! assert (scalar', -2i);
+
+%!test
+%! range = (1:4)*i;
+%! assert (range', [-1i;-2i;-3i;-4i]);
+
+%!test
+%! vector = [1;2;3;4]*i;
+%! assert (vector', [-1i,-2i,-3i,-4i]);
+
+%!test
+%! matrix = [1,2;3,4]*i;
+%! assert (matrix', [-1i,-3i;-2i,-4i]);
+
+%% Test non-Hermitian transpose
+%!test
+%! scalar = 2i;
+%! assert (scalar.', 2i);
+
+%!test
+%! range = (1:4)*i;
+%! assert (range.', [1i;2i;3i;4i]);
+
+%!test
+%! vector = [1;2;3;4]*i;
+%! assert (vector.', [1i,2i,3i,4i]);
+
+%!test
+%! matrix = [1,2;3,4]*i;
+%! assert (matrix.', [1i,3i;2i,4i]);
+
+%% Basic tests on float complex numbers
+%!test
+%! scalar = single (2i);
+%! assert (scalar', single (-2i));
+
+%!test
+%! range = single ((1:4)*i);
+%! assert (range', single ([-1i;-2i;-3i;-4i]));
+
+%!test
+%! vector = single ([1;2;3;4]*i);
+%! assert (vector', single ([-1i,-2i,-3i,-4i]));
+
+%!test
+%! matrix = single ([1,2;3,4]*i);
+%! assert (matrix', single ([-1i,-3i;-2i,-4i]));
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/try.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,139 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/try/try-1.m
+%!test
+%! try
+%! catch
+%!   error ("Shoudn't get here");
+%! end_try_catch
+
+%% test/octave.test/try/try-2.m
+%!test
+%! try
+%!   clear a;
+%!   a;
+%! catch
+%! end_try_catch
+%! a = 1;
+%! assert (a,1);
+
+%% test/octave.test/try/try-3.m
+%!test
+%! clear x;
+%! try
+%!   clear a;
+%!   a;
+%!   x = 1;
+%! catch
+%! end_try_catch
+%! a = 2;
+%! assert (!exist ('x'));
+%! assert (a,2);
+
+%% test/octave.test/try/try-4.m
+%!test
+%! try
+%!   clear a;
+%!   a;
+%! catch
+%!   x = 1;
+%! end_try_catch
+%! assert (exist ('x'));
+
+%% test/octave.test/try/try-5.m
+%!test
+%! try
+%!   clear a;
+%!   a;
+%!   error ("Shoudn't get here");
+%! catch
+%!   assert (lasterr()(1:13), "'a' undefined");
+%! end_try_catch
+%! assert (lasterr()(1:13), "'a' undefined");
+
+%% test/octave.test/try/try-6.m
+%!test 
+%! try
+%!   error ("user-defined error");
+%! catch
+%!   assert (lasterr, "user-defined error");
+%! end_try_catch
+
+%% test/octave.test/try/try-7.m
+%!function ms = mangle (s)
+%!  ## Wrap angle brackets around S.
+%!  ms = cstrcat ("<", s, ">");
+%!endfunction
+%!test
+%! try
+%!   clear a;
+%!   a;
+%!   error ("Shoudn't get here");
+%! catch
+%!   assert (mangle (lasterr)(1:14), "<'a' undefined");
+%! end_try_catch
+
+%% test/octave.test/try/try-8.m
+%!test
+%! try
+%!   try
+%!     clear a;
+%!     a;
+%!     error ("Shoudn't get here");
+%!   catch
+%!     assert (lasterr()(1:13), "'a' undefined");
+%!   end_try_catch
+%!   clear b;
+%!   b;
+%!   error ("Shoudn't get here");
+%! catch
+%!   assert (lasterr()(1:13), "'b' undefined");
+%! end_try_catch
+
+%% test/octave.test/try/try-9.m
+%!test
+%! try
+%!   clear a;
+%!   a;
+%!   error ("Shoudn't get here");
+%! catch
+%!   try
+%!     assert (lasterr()(1:13), "'a' undefined");
+%!     clear b;
+%!     b;
+%!     error ("Shoudn't get here");
+%!   catch
+%!     assert (lasterr()(1:13), "'b' undefined");
+%!   end_try_catch
+%! end_try_catch
+
+%% test/octave.test/try/try-10.m
+%!test
+%! try
+%!   try
+%!     clear a;
+%!     a;
+%!     error ("Shoudn't get here");
+%!   catch
+%!     error (cstrcat ("rethrow: ", lasterr));
+%!   end_try_catch
+%! catch
+%!   assert (lasterr()(1:22), "rethrow: 'a' undefined");
+%! end_try_catch
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unwind.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,60 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/unwind/unwind-1.m
+%!function y = f (x)
+%!  global g;
+%!  save_g = g;
+%!  unwind_protect
+%!    g = 0;
+%!    y = g;
+%!    [1,2;x];
+%!    g = 1;
+%!    y = [y, g];
+%!  unwind_protect_cleanup
+%!    g = save_g;
+%!    y = [y, g];
+%!  end_unwind_protect
+%!endfunction
+%!
+%!test
+%! global g = -1;
+%! y = f ([3,4]);
+%! assert (y, [0,1,-1]);
+
+%% test/octave.test/unwind/unwind-2.m
+%!function y = f (x)
+%!  global g;
+%!  save_g = g;
+%!  unwind_protect
+%!    g = 0;
+%!    y = g;
+%!    [1,2;x];
+%!    g = 1;
+%!    y = [y, g];
+%!  unwind_protect_cleanup
+%!    g = save_g;
+%!    y = [y, g];
+%!    assert (y, [0,-1]);
+%!  end_unwind_protect
+%!endfunction
+%!
+%!test
+%! global g = -1;
+%! fail ("y = f (3);", "mismatch");
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/while.tst	Mon Feb 11 15:45:26 2013 -0500
@@ -0,0 +1,70 @@
+## Copyright (C) 2006-2012 John W. Eaton
+##
+## This file is part of Octave.
+##
+## Octave 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 3 of the License, or (at
+## your option) any later version.
+##
+## Octave 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 Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+%% test/octave.test/while/while-1.m
+%!test
+%! i = 0;
+%! while (eye (2))
+%!   i++;
+%!   __printf_assert__ ("%d\n", i);
+%! endwhile
+%! assert (__prog_output_assert__ (""));
+
+%% test/octave.test/while/while-2.m
+%!test
+%! i = 5;
+%! while (--i)
+%!   __printf_assert__ ("%d", i);
+%! endwhile
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("4321"));
+
+%% test/octave.test/while/while-3.m
+%!test
+%! i = 5;
+%! while (i)
+%!   i--;
+%!   __printf_assert__ ("%d", i);
+%! endwhile
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("43210"));
+
+%% test/octave.test/while/while-4.m
+%!test
+%! i = 0;
+%! while (i++ < 20)
+%!   if (i > 2)
+%!     break;
+%!   endif
+%!   __printf_assert__ ("%d", i);
+%! endwhile
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("12"));
+
+%% test/octave.test/while/while-5.m
+%!test
+%! i = 0;
+%! while (++i < 5)
+%!   if (i < 3)
+%!     continue;
+%!   endif
+%!   __printf_assert__ ("%d", i);
+%! endwhile
+%! __printf_assert__ ("\n");
+%! assert (__prog_output_assert__ ("34"));
+