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.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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(tree[0], new AST.List({
  9. elements: [
  10. new AST.Number({ value: 1, line: 1 }),
  11. new AST.Number({ value: 2, line: 1 }),
  12. new AST.Number({ value: 3, line: 1 }),
  13. ]
  14. }))
  15. })
  16. test('length function', t => {
  17. t.plan(1)
  18. const tree = helpers.evaluate('(length (list 1 2 3))')
  19. t.deepEqual(tree[0], new AST.Number({ value: 3 }))
  20. })
  21. test('map', t => {
  22. t.plan(1)
  23. const tree = helpers.evaluate(`
  24. (define my-map
  25. (lambda (f xs)
  26. (if (= (length xs) 0)
  27. (list)
  28. (cons
  29. (f (head xs))
  30. (my-map f (tail xs))))))
  31. (my-map (lambda (x) (+ x 1)) (list 1 2 3))
  32. `)
  33. t.deepEqual(tree[0], new AST.List({ elements: [
  34. new AST.Number({ value: 2 }),
  35. new AST.Number({ value: 3 }),
  36. new AST.Number({ value: 4 }),
  37. ]}))
  38. })