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

224 Commits

Author SHA1 Message Date
Joel Martin
77fd710cab Regress test of deferrables. Fix dart, factor.
Add a regression run to Travis that enables hard deferrables but
omits optionals so that we can test to make sure that all the
requirements are met for self-hosting in stepA.

Cleanup up some of the soft/deferrable/optional markings.
Deferrables are what will be needed eventually to self host but aren't
needed for the immediate next steps. Optional aren't even needed for
self-hosting but are nice things to have.

Also:
- Sync dart step9 and stepA with step8. Do not eval macroexpanded
  forms in macroexpand form.
- Fix stepA of factor which was missing some fixes from step9.
- Increase test timeouts in top-level Makefile for guile and io.
2019-07-24 23:48:29 -05:00
Dov Murik
748df6f7bd io: Fix unneeded escaping of forward slash
Instead of using Io's `asJson` method which escapes forward slashes,
implement our own string escaping code so it fits the Mal requirements.

The relevant step1 test was modified from soft to hard.
2019-07-23 10:23:11 +03:00
Dov Murik
b9d9e6754a tests: Add optional list and vector eqaulity tests 2019-07-21 13:14:07 +03:00
Nicolas Boulenguez
3af0639fca tests/lib: fix path in test-alias-hacks, use load-file-once 2019-07-18 17:52:41 +02:00
Nicolas Boulenguez
3b797cd5ec tests: non alphanumeric characters in input
Make: remove part of EVAL breaking # and $

step0: no MAL character must break the interpreter
       (soft) no printable ASCII character either

step1: no MAL character must break strings
       (soft) no printable ASCII character should break strings
       (soft) no character should break comments

step6: redo step1 tests for comments inside read-string, as new
       problem may occur with line breaks and escape characters of the host
       language.
2019-07-18 00:01:14 +02:00
Nicolas Boulenguez
77a0798f8a tests: remove commented test for 10th Fibonnacci number 2019-07-18 00:00:48 +02:00
Nicolas Boulenguez
8eed0a29ae tests: soft-tests for keywords (instead of comments) 2019-07-18 00:00:42 +02:00
Nicolas Boulenguez
77057e6920 tests: soft-test metadata for atoms 2019-07-18 00:00:29 +02:00
Nicolas Boulenguez
13e679cdde lib/load-file-once: basic support for multiple imports 2019-07-16 00:16:44 +02:00
Nicolas Boulenguez
4733821090 Merge remote-tracking branch 'remotes/kanaka/master' into improve-mal-impl-macro-no-meta 2019-07-15 19:49:33 +02:00
Nicolas Boulenguez
82bc78eb43 check that slurp works twice in a row. Fix rexx 2019-07-15 17:50:47 +02:00
Joel Martin
6fd3a0db02
Merge pull request #416 from bjh21/bjh21-equal-empty
step 4: Test that (= (list nil) (list)) returns false.
2019-07-15 00:01:16 -05:00
Nicolas Boulenguez
809d74cba7 Implement macros with maps instead of vectors.
Output of macros will probably be more readable.

Inline _macro_wrap and _unwrap for efficiency (there are less
primitive operations for maps than for vectors).

Basic check of `map?` and `macro?`. Swap them in order to simplify the
diff with cb9b0654.
2019-07-14 19:47:58 +02:00
Ben Harris
aeff9873de step 4: Test that (= (list nil) (list)) returns false.
Certain naïve implementations of '=' (like the one I just wrote) will
get this wrong.
2019-07-13 12:08:05 +01:00
Nicolas Boulenguez
28b63c0ca6 mal: implement macro without metadata
Support for metadata becomes optional.
Support for fn? becomes optional again, reverting 5e5d4892.
2019-07-09 14:16:27 +02:00
Nicolas Boulenguez
aac5cf7bf5 guile, scheme: fix fn? when metadata contains "ismacro"
Let `with-meta f m` create a function even if f is a macro, instead of
setting an "ismacro" metadata that is never used again (and breaks
self-hosting).

Also move the test for fn? from Optional to Deferrable, the function
is used for self-hosting.
2019-07-09 14:14:03 +02:00
Nicolas Boulenguez
b1a8dbd55f mal: rename macro? to _macro?. Also rename bool-and in lib/equality.mal. 2019-07-09 14:05:29 +02:00
Nicolas Boulenguez
26ced15b31 Remove gensym, inc and or from step files.
* Move `gensym` and `inc` from step files to `lib/trivial.mal`.
* Move `or` from step files to `lib/test_cascade.mal`.
  Shorten it because `(first ())` returns `nil`
* Update process and tests accordingly (not the figures yet).
2019-07-09 14:05:29 +02:00
Ben Harris
7260b29879
Merge branch 'master' into bjh21-php-hashmap 2019-07-08 21:26:30 +01:00
Joel Martin
95958bb29d
Merge pull request #413 from bjh21/bjh21-nontrivial-hashmap
step 1: Test a hash-map with more than one entry.
2019-07-08 10:08:50 -05:00
Joel Martin
8236bed763
Merge pull request #411 from bjh21/bjh21-nested-collections
step 1: Test reading some simple nested collections.
2019-07-08 09:53:08 -05:00
Joel Martin
e118d60124
Merge pull request #407 from asarhaddon/ada.2-updates
Test that macros use closures like functions. Fix ada.2 accordingly.
2019-07-08 09:50:11 -05:00
Ben Harris
80512fcc84 steps 1 and 9: Test that hash-map keys stay as strings.
Specifically, test that when "1" is used as a hash-map key, it is
represented as a string when printed (step 1) and when returned by
'keys' (step 9).  PHP used to get both of these wrong.
2019-07-07 18:36:07 +01:00
Ben Harris
e69f0ea3d4 step 1: Explain intention behind regexp magic in non-trivial hash-map test.
[skip travis]
2019-07-07 13:43:54 +01:00
Ben Harris
d6383c83d2 step 1: Fix non-trivial hash-map test on PHP.
It seems that the PHP implementation converts integer-like strings as
hash-map keys into integers, so {"1" 1} becomes {1 1}.  I don't know if
that's a bug, but it's certainly not the bug I was trying to test for.
Use different keys to avoid this problem.
2019-07-07 13:35:04 +01:00
Ben Harris
876e6545c2 step 1: Test a hash-map with more than one entry.
All the existing tests in step 1 use empty or single-element hash-maps.
That avoids any dependency on the ordering of printed hash-maps, but it
does mean that some code paths (e.g. printing the space between hash-map
elements) aren't tested.  Add a test that creates a three-element
hash-map and uses some regexp trickery to check that all the right keys
and values come out.
2019-07-07 11:21:37 +01:00
Ben Harris
beeffb021c step 1: Test reading some simple nested collections.
These tests are intended to catch the cases where the routine for
reading a list, vector, or hashmap fails to consume the trailing token
(')', ']', or '}' as the case may be) from the input.  None of the
existing step 1 tests detected this, and I only found it by playing
around in the REPL.
2019-07-07 10:09:01 +01:00
Chris McCormick
d0efab8745 Added alias hacks from frock to lib. See #321.
Thanks @asarhaddon for your guidance.
2019-07-01 16:06:20 +08:00
Nicolas Boulenguez
a688720499 Test that macros use closures 2019-06-30 23:37:16 +02:00
Joel Martin
4aa1c85b88 travis_trigger.sh: Support .com and env var tokens 2019-05-30 22:50:20 -05:00
Joel Martin
108d07a2ab Travis: travis_trigger.sh script. 2019-05-30 22:16:46 -05:00
Joel Martin
97e1fd50a1
Merge pull request #388 from bjh21/bjh21-large-files-step6
step6: Test loading of a large (>255 byte) file earlier than before.
2019-05-28 13:30:27 -04:00
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
Ben Harris
7df7eeecbf step6: Test loading of a large (>255 byte) file earlier than before.
I just introduced a bug in the BBC BASIC implementation meaning that
'load-file' was broken on files over 255 bytes long, and it was only
caught by the optional test of 'time-ms' in step A.  This change brings
forward the relevant part of that test so the failure can be detected
earlier and more obviously, at the same time as the other tests of
'load-file'.
2019-05-27 22:32:16 +01: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