See the run logs below. Using 'parallel' reduces the time to run the
full testsuite from 2m30s to 0m57s on my machine.
All tests are run in parallel, including lib-threads.
We ask parallel to preserve output order, so it should be
deterministic. (Individual tests may mangle stdout and stderr in
fragile ways, though.) See the Makefile comment for details.
```
rm -f _log; make clean;
time make all;
cp _log /tmp/trunk_log
> real 2m29.947s
> user 1m35.937s
> sys 0m17.467s
rm -f _log; make clean;
time make parallel;
cp _log /tmp/parallel_log
> real 0m56.611s
> user 2m20.861s
> sys 0m21.511s
diff -u /tmp/{trunk,parallel}_log | wc -l
> 0
rm /tmp/{trunk,parallel}_log
```
Change ``byte_size'' to ``size_in_bytes``, change ``kind_byte_size``
to ``kind_size_in_bytes``.
Add detailed comment indicating size functions do not consider header
of OCaml value.
Some Makefile's displayed "=> skipped" lines; some Makefile's displayed
a summary line including the word skipped; most Makefile's are simply
silent if tests are skipped.
Silent obviously doesn't discern between "skipped" and "broken"!
Patch alters all existing to display an explicit "=> skipped" for any
test which is skipped (including ocamlopt tests if
`BYTECODE_ONLY=true`).
The summary is updated to include:
- The number of skipped tests, and their names (if all tests are
skipped in a directory then just the directory name is displayed)
- The total number of tests considered - which should therefore be the
same on all platforms in all configurations
MAX_TESTSUITE_DIR_RETRIES (which defaults to 1 for the native Windows
ports and 0 for all other platforms) causes the `all` and `list` targets
to re-run any given test directory an additional number of times in
order to eliminate random failures during tests.
The `CANKILL` testsuite variable is eliminated in favour of testing for
`TOOLCHAIN`.
tests/lib-threads/signal.ml can be executed under native Windows by
means of a wrapper program to send CTRL+C.
tests/lib-threads/signal2.ml is not possible under native Windows
because Thread.sigmask is not implemented, so the precheck is updated to
reflect this, rather than the lack of kill -INT.
tests/lib-threads/sockets.ml is re-enabled, since the two MPRs affecting
it have been fixed.
Cygwin doesn't allow the stack limit (uname -s) to be changed, though it
can be queried. Alter the test so that the stack limit is only changed if
it is either unlimited or very large (and skip the tests if ulimit returns
an error)
XML sample document behaves differently when checked out on Windows where
the source line endings in the test document become `\r\n`.
Alternative would have been to specify that t01.ml needs LF endings in
.gitattributes, but explicitly including the \n and \t in the OCaml string
seems less brittle.
And fix a bug in the handling of ephemeron during minor collection
found thanks to this test. Oldifying of ephemerons' data was not iterated
enough because `oldify_todo_list` doesn't become non-null each time
`caml_oldify_one` is run.
A value disappears from a weak array only when it really becomes unreachable.
Previously it was not the case if:
- the value is referenced by two weak arrays and during the incremental cleaning
one weak arrays have been cleaned and the other is accessed,
- the value has a finalizer and the finalizer make it alive again.
This commit adds errors for bad uses of @untagged and
@unboxed attributes in external declarations.
There are three possible new errors:
- One when the external does not contain a native version of
the primitive,
- One when the attribute occurs deeply into the type,
- One when the attribute is applied to the whole function type.
ocamlc and ocamlopt both provide convenient mechanisms to invoke the C
compiler for .c files. Given the filtering out of the .c line for MSVC
now performed by ocamlc and ocamlopt, changing the testsuite to invoke
the C compiler via ocamlc reduces noise from the testsuite _log file.
Extend the previous patch allowing make -f Makefile.nt flexdll
install-flexdll not to require the install-flexdll stage.
OCAML_FLEXLINK is utilised as required to allow compilation of the entire
system using an in-tree compiled flexlink. The build process simply
required the flexdll target to appear before world.
opt.opt compiles a native code version of flexlink.exe as flexlink.opt.
install always installs flexlink.exe if it was compiled along with any
required .manifest files. It also installs the appropriate .o/.obj files
to $(INSTALL_LIBDIR).
At present, the bootstrapping is not extended to the Cygwin ports.