1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-11 13:55:55 +03:00
Commit Graph

191 Commits

Author SHA1 Message Date
Nicolas Boulenguez
8734e2eb01 Test mutual recursion in let* without vectors, which are deferrable.
Thanks to bjh21 for spotting this inconsistency.
2019-05-28 16:36:21 +02:00
Nicolas Boulenguez
8150202bed Test mutual recursion in let* 2019-05-28 15:18:57 +02:00
Nicolas Boulenguez
8c0d5c4d72 test recursive definitions in let*
Detected while attempting to rewrite let* with fn*.
2019-05-25 19:20:06 +02:00
Nicolas Boulenguez
6db6cf38b7 lib/tests: report parsing errors, move threading out of steps
When testing `foo.mal`, it makes sense to report parsing errors in
`foo.mal`.

Move tests of `->` and `->>` from `tests/step8_macros.mal` to
`tests/lib/theading.mal`.

Add `lib/trivial.mal`.
2019-05-19 19:20:20 +02:00
Nicolas Boulenguez
83665b4fda lib/: add tests, fix detected problems, improve implementations
equality.mal:
- fix typos
- let and2 and or2 always return booleans
- when looping in sequences, compare lengths only once
- empty? instead of an equality test
- when looping on a keys, do not check if a contains the current key
- change the `cond` logic: when a is a sequence and b a map, return
  false instead of delegating to scalar-equal?.
- add tests

memoize.mal:
- make explicit that the function name must be kept
- fix typo in tests

protocols.mal:
- document
- add a function mapping an object to its type
- add default types for remaining built-in MAL values
- let defprotocol return the new protocol instead of last method
- set the right profile for abstract methods, improving error messages
- replace incomplete example with lots of tests

pprint:
- escape parenthesis in expected test results

[kanaka]
- explain in lib/README.md how to run tests/lib/*.
- rename folds to reducers and composition to threading
- move fib and sumdown from lib/ to tests/
2019-05-18 01:52:13 +02:00
Nicolas Boulenguez
4924fac100 lib/ split: fix forgotten paths in test/perf*.mal. 2019-05-18 01:52:13 +02:00
Nicolas Boulenguez
a1805b96af Move tests of lib/ and new tests of core.mal to tests/lib/.
Partial translation of examples from lib/ to new tests.

Correct test of memoize.

`reduce`, `foldr`, `every?`, `some` and `and` were previously not
tested in tests/step*.mal. Tests them in `tests/lib/` instead.
2019-05-18 01:52:13 +02:00
Nicolas Boulenguez
bf6647fbb3 Fix style issues in lib/.
This diff is best viewed without space differences.
2019-05-18 01:52:13 +02:00
Nicolas Boulenguez
3e9b89d4b5 Prepare move of reusable code to lib/.
Changes creating huge diffs, like file splits, have been delayed for
readability .
Also fix description of `and`.
2019-05-18 01:52:13 +02:00
Nicolas Boulenguez
e1d579a969 tests: wait gensym in stepA to test and macro 2019-05-18 01:52:12 +02:00
Nicolas Boulenguez
840faeb26d core.mal: add and test right fold 2019-05-18 01:52:12 +02:00
Nicolas Boulenguez
e044a11ab1 core.mal: test each non trivial recursion 2019-05-18 01:52:12 +02:00
Joel Martin
976e03b912
Merge pull request #378 from asarhaddon/test-macro-not-changing-function
Test that defining a macro does not mutate an existing function.
2019-05-15 08:17:59 -07:00
Nicolas Boulenguez
c714889a98 Move test that macro do not mutate functions as optional in stepA 2019-05-15 06:19:02 +02:00
Nicolas Boulenguez
d1a5100ea9 test macro/functions: ignore results of preliminary definitions 2019-05-15 05:10:11 +02:00
Joel Martin
bf5cba817e
Merge pull request #376 from bjh21/bjh21-withmeta-empty
step A: Test that metadata doesn't break empty collections.
2019-05-14 17:25:35 -07:00
Ben Harris
bfb315c852 step A: Test that metadata doesn't break empty collections.
In the BBC BASIC implementation, the empty list, vector, and hash-mapp
are distinguished values and detected by their address.  Adding metadata
to them makes a copy, and then they don't work properly any more.
2019-05-14 23:28:13 +01:00
Ben Harris
3b1a665234 step A: Add a mandatory test that 'string?' etc are defined.
Self-hosting currently requires that these functions be defined so
that the mal implementation can pass them through.  This test
minimally ensures that.
2019-05-14 22:22:39 +01:00
Nicolas Boulenguez
5f905bacfd Test that defining a macro does not mutate an existing function. 2019-05-14 19:03:14 +02:00
Joel Martin
edc9b5dedd
Merge pull request #372 from bjh21/bjh21-empty-hashmap
step1: Test that an empty hashmap can pass through read and print.
2019-05-13 15:31:45 -07:00
Ben Harris
f7983f7235 step1: More systematic testing of empty collections.
Now we test empty lists, vectors, and hash-maps, all with and without a
space between the opening and closing bracket.
2019-05-13 21:53:43 +01:00
Ben Harris
f0338adf8f step1: Test that an empty hashmap can pass through read and print.
My BBC BASIC implementation currently fails this.
2019-05-12 13:58:53 +01:00
Nicolas Boulenguez
14ab099cea gensym: hide the counter in an environment, define inc in stepA.
tests: check that `inc` is present in stepA.
nasm: split lines in mal_startup_string for readability.
objpascal: remove obsolete .orig file
swift: remove an unneeded line in template
swift4: remove duplicate definition of `or` macro
2019-05-11 16:37:26 +02:00
Ben Harris
5d75930ae8 step 7 test: Add test of 'concat' on a single vector.
I thought I'd accidentally made it just return that vector, but it
turned out I hadn't.  Still, it seems like a plausible mistake to
make.
2019-05-07 23:48:06 +01:00
Ben Harris
ae0427fbbc step 8 test: Check a corner case of cons/rest on vectors that I got wrong.
In the BBC BASIC implementation, lists and vectors are essentially the
same, and are only distinguished by a flag on the head node.  This makes
it cheap to convert between lists and vectors, but it does require a
little care to ensure that a vector doesn't escape where it shouldn't.
The new test checks for a case where I'd got this wrong:

(rest (cons 10 [11 12]))

Here the 'cons' returns a list, but the tail of the list is just the
original vector (complete with vector flag), so a naïve implementation
of 'rest' can end up returning that vector instead of an equivalent
list.  The test proves that it doesn't.
2019-05-07 23:48:06 +01:00
Joel Martin
90ca848565 rpython,rust,swift4,ts: fix empty list handling.
In these implementations there is no empty list check before
macroexpansion and so empty lists from step8 onwards produce a crash
or other misbehavior.

Also, add a test to step8 to test empty list again (first time it's
tested is in step2).
2019-05-07 16:43:12 -05:00
Ben Harris
20b2a2442b step 7 test: Correct a heading to match contents.
'first' and 'rest' applied to vectors are now tested in step 8, not step 7.
2019-05-06 12:45:54 +01:00
Ben Harris
64c11d81a0 step9: Don't use vectors in a non-deferrable test.
According to the guide, vectors are deferrable until step A, so use
(nth () 1) in place of (nth [] 1) as a form that will generate an error.
2019-05-06 12:45:53 +01:00
Ben Harris
1fcac410b3 step9: Make test of throwing a hash-map deferrable.
According to the guide, hash-maps are deferrable until step A.
2019-05-06 12:45:53 +01:00
Ben Harris
e7f9404b40 Step 6: Make tests of '*ARGV*' deferrable.
The Guide says that '*ARGV*' is deferrable at step 6.
2019-04-20 18:49:29 +01:00
Ben Harris
0c04a99f91 Mark step 4 tests that use strings as deferrable.
Strings are deferrable until step 6, so tests of string functionality at
step 4 should be marked as deferrable.  A couple of tests just use
strings as convenient constants to return or print.  In those cases,
replace the strings with integers rather than deferring the whole test.
2019-04-09 21:46:31 +01:00
Nicolas Boulenguez
fc7f8a4b00 Move test of eval builtin to step6. Fix nim implementation.
The test makes more sense in step6.
Thanks to kanaka for the read-string suggestion.

Introduction of tail call optimization in step5 was making let* affect
the parent environment. This was partially fixed in later steps.

Introduction of macros in step8 was breaking the evaluation of an
empty list. This was fixed by step 9 but never backported.
2019-02-03 15:31:00 +01:00
Nicolas Boulenguez
d12bf4787c In step6, test that eval uses Repl not Env. I have not managed to test this before step7 quotes. 2019-02-02 20:32:15 +01:00
Nicolas Boulenguez
78c71a51ad In step1, test non-numbers starting with a dash. 2019-01-29 14:24:13 +01:00
Joel Martin
a68c26aff8 lua: update to version 5.2
- Update to support the new behavior of varargs and table.pack/unpack
  in lua 5.2
- Bump up the stack overflow test since lua 5.2 seems to support much
  larger stacks before overflow.
- Fix a latent issue in if forms where false in the 4th position would
  result in nil returned. Add a new test to catch this in the future.
2019-01-28 13:31:28 -06:00
Joel Martin
4aa0ebdf47 Error on unterminated strings.
Add a step1 test to make sure that implementations are properly
throwing an error on unclosed strings.

Fix 47 implementations and update the guide to note the correct
behavior.
2019-01-25 16:16:06 -06:00
Joel Martin
7aaf054b0a tests/step3_env: don't assume def! is lexical. 2019-01-04 17:05:49 -06:00
Joel Martin
dd7a4f55f3 Test uncaught throw, catchless try* . Fix 46 impls.
Fixes made to: ada, c, chuck, clojure, coffee, common-lisp, cpp,
crystal, d, dart, elm, erlang, es6, factor, fsharp, gnu-smalltalk,
groovy, guile, haxe, hy, js, livescript, matlab, miniMAL, nasm, nim,
objc, objpascal, ocaml, perl, perl6, php, plsql, ps, python, r,
rpython, ruby, scheme, swift3, tcl, ts, vb, vimscript, wasm, yorick.

Catchless try* test is an optional test. Not all implementations
support catchless try* but a number were fixed so they at least don't
crash on catchless try*.
2018-12-12 14:18:26 -06:00
Joel Martin
f6f5d4f2a3 runtest.py: process output/errors as regex match.
Update output test data to be regex compatible.
2018-11-30 14:57:45 -06:00
Joel Martin
6da59ec2f4 perf: fix perf3 to show total iters instead of / 3
The run-fn-for function was originally name run-fn and was hard-coded
to run for 3 seconds. I forgot to replace the 3 with the max-secs
variable. However, given that some implementations have less than
1 iteration per second, I'm just going to drop that division and
report the iterations per max-seconds so that for the slowest
implementations we have some relative comparison instead of all of
them just reporting 0.

Thanks to Tim Morgan for discovering this bug:
699f0ad23a
2018-07-16 09:34:37 -05:00
Joel Martin
b26c8329c8
Merge pull request #324 from seven1m/add-not-test-for-nil
Test that (not nil) returns true
2018-07-12 15:44:10 -07:00
Joel Martin
bbd62dc97c tests/stepA: allow time-ms result to be signed.
In Java the time-ms value was negative. This actually still works fine
because arithmetic comparison is still correct. So allow signed
time-ms results.
2018-07-12 14:24:14 -05:00
Tim Morgan
e2352e739b Test that (not nil) returns true 2018-07-08 22:21:01 -05:00
Ben Dudson
f86d275f08 Fix bug in map: should pass args as list
This appeared only for variadic function which is used in EVAL.

Added a test to step 9 to catch this earlier.
2017-12-29 22:47:16 +00:00
Ben Dudson
40eb57d65c Fix bug in concat, add test to step 7
Concatenating multiple empty lists resulted in a return
which should be empty but was not checked.

(concat (list) (list))
-> ()

Test added to step 7 to catch, since this appeared in
self-hosting step 8 in the -> macro expansion.
2017-12-29 22:47:10 +00:00
Ben Dudson
89f7cef6dc Adding test to step7 for quasiquote
Handling of the last element of the AST
is tested by having an unquote as the last element.
2017-12-29 22:46:52 +00:00
Joel Martin
393d1140a3 tests: move number?, fn? and macro? to optional 2017-11-01 21:56:29 -05:00
Vasilij Schneidermann
2ff47a342f Fix typo 2017-10-23 17:15:42 +02:00
Dov Murik
69edbad782 tests: Use a real user-defined function when testing fn? and macro? 2017-10-14 12:20:53 +00:00
Dov Murik
59436f1a12 Add number?, fn?, macro? in stepA - tests and process guide
Ref #298
2017-10-09 20:23:39 +00:00