A templating language that looks like Lisp and compiles to HTML
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

coreTest.js 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. const test = require('tape')
  2. const helpers = require('./helpers')
  3. const AST = require('../src/ast')
  4. const OsloError = require('../src/osloError')
  5. test('list function', t => {
  6. t.plan(1)
  7. const tree = helpers.evaluate('(list 1 2 3)')
  8. t.deepEqual(
  9. tree[0],
  10. new AST.List({
  11. elements: [
  12. new AST.Number({ value: 1, line: 1 }),
  13. new AST.Number({ value: 2, line: 1 }),
  14. new AST.Number({ value: 3, line: 1 }),
  15. ],
  16. }),
  17. )
  18. })
  19. test('length function', t => {
  20. t.plan(1)
  21. const tree = helpers.evaluate('(length (list 1 2 3))')
  22. t.deepEqual(tree[0], new AST.Number({ value: 3 }))
  23. })
  24. test('map', t => {
  25. t.plan(1)
  26. const tree = helpers.evaluate(`
  27. (define my-map
  28. (lambda (f xs)
  29. (if (= (length xs) 0)
  30. (list)
  31. (cons
  32. (f (head xs))
  33. (my-map f (tail xs))))))
  34. (my-map (lambda (x) (+ x 1)) (list 1 2 3))
  35. `)
  36. t.deepEqual(
  37. tree[0],
  38. new AST.List({
  39. elements: [
  40. new AST.Number({ value: 2 }),
  41. new AST.Number({ value: 3 }),
  42. new AST.Number({ value: 4 }),
  43. ],
  44. }),
  45. )
  46. })