It should pass on existing implementations because it is a
prerequisite for an existing test, but small independent tests are
easyer to debug on new implementations.
In #513, @dubek noted two additional ways to make empty lists in fantom
that compare different from an empty list made by evaluating an empty
list. This adds tests for those, along with another two that might fail
similarly (but don't in fantom).
In APL, empty arrays have type, and the ≡ function pays attention to
that, so if you're not careful empty lists produced by different means
compare different. This test detects that by comparing an empty list
produced by "list" with one produced by evaluating an empty list.
My bug was found by a deferrable step 4 test, but the bug should be
non-deferrable.
Modify Java options to disable jLine handling of expand events (which
start with "!"). This will require re-building of the fantom docker
image.
The test that failed is now moved to the mandatory section of step1
tests.
Heya - I might be wrong, but I think this line needs to be added - it's the expected output from evaluating the line above - `1; &()*+,-./:;<=>?@[]^_{|}~`
- Add a `vec` built-in function in step7 so that `quasiquote` does not
require `apply` from step9.
- Introduce quasiquoteexpand special in order to help debugging step7.
This may also prepare newcomers to understand step8.
- Add soft tests.
- Do not quote numbers, strings and so on.
Should ideally have been in separate commits:
- elisp: simplify and fix (keyword :k)
- factor: fix copy/paste error in let*/step7, simplify eval-ast.
- guile: improve list/vector types
- haskell: revert evaluation during quasiquote
- logo, make: cosmetic issues
An empty vector or hash-map should evaluate to itself, but I reached
the test of (empty? []) in step 4 before I discovered that I'd got []
evaluating to 0. Add tests for both cases to step 2.
When implementing exceptions on top of longjmp() or similar, it's
necessary to make sure that exception handlers get properly restored
after the try* clause, and none of the existing step 9 tests covered
this.
There are two cases covered here: throwing an exception after a
successful try*, and throwing and exception from within a catch*. In
both cases we make sure that an outer catch* does its job.
All of the other read-string tests test forms whose end can be detected
before the end of the input string, either because they're naturally
self-terminating (lists, strings) or because there's white space after
them. All of the uses of the reader from the REPL are similarly likely
to have input with a newline or similar at the end.
My BCPL implementation turned out to read one character past the end of
the input when the input ended inside an atom, and to incorporate that
one byte into the output. The consequences of a buffer over-read are a
little unpredictable, so I've just written a test that was good enough
to catch the bug for me.
- Reorder README to have implementation list after "learning tool"
bullet.
- This also moves tests/ and libs/ into impls. It would be preferrable
to have these directories at the top level. However, this causes
difficulties with the wasm implementations which need pre-open
directories and have trouble with paths starting with "../../". So
in lieu of that, symlink those directories to the top-level.
- Move the run_argv_test.sh script into the tests directory for
general hygiene.