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.

evaluatorTest.js 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const test = require('tape')
  2. const helpers = require('./helpers')
  3. const AST = require('../src/ast')
  4. const Evaluator = require('../src/evaluator')
  5. test('applies functions from core library', t => {
  6. t.plan(1)
  7. const tree = helpers.evaluate('(+ 1 2)')
  8. t.deepEqual(tree[0], new AST.Number({ value: 3 }))
  9. })
  10. test('applies lambda functions', t => {
  11. t.plan(1)
  12. const tree = helpers.evaluate('((lambda (x y) (+ x y)) 1 2)')
  13. t.deepEqual(tree[0], new AST.Number({ value: 3 }))
  14. })
  15. test('define', t => {
  16. t.plan(2)
  17. let tree = helpers.evaluate('(define x 5) (+ x 1)')
  18. t.deepEqual(tree[0], new AST.Number({ value: 6 }))
  19. tree = helpers.evaluate('(define plusOne (lambda (x) (+ x 1))) (plusOne 5)')
  20. t.deepEqual(tree[0], new AST.Number({ value: 6 }))
  21. })
  22. test('conditionals', t => {
  23. t.plan(3)
  24. let tree = helpers.evaluate('(if #t 1 0)')
  25. t.deepEqual(tree[0], new AST.Number({ value: 1 }))
  26. tree = helpers.evaluate('(if #f 1 0)')
  27. t.deepEqual(tree[0], new AST.Number({ value: 0 }))
  28. tree = helpers.evaluate('(if (= (+ 4 9) (- 20 7)) (+ 10 9) (- 4 2))')
  29. t.deepEqual(tree[0], new AST.Number({ value: 19 }))
  30. })
  31. test('let bindings', t => {
  32. t.plan(1)
  33. const tree = helpers.evaluate('(let ((x 1) (y 2)) (+ x y))')
  34. t.deepEqual(tree[0], new AST.Number({ value: 3 }))
  35. })