123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- const test = require("tape");
- const helpers = require("./helpers");
-
- const AST = require("../src/ast/index");
-
- test("quote", t => {
- t.plan(3);
-
- t.deepEqual(helpers.resolve("(quote 5)"), [
- new AST.Symbol({
- value: new AST.Number({
- value: 5
- })
- })
- ]);
-
- t.deepEqual(helpers.resolve('(quote "hello")'), [
- new AST.Symbol({
- value: new AST.String({
- value: "hello"
- })
- })
- ]);
-
- t.deepEqual(helpers.resolve("(quote (list 1 2 3))"), [
- new AST.Symbol({
- value: new AST.Application({
- functionName: new AST.Identifier({ name: "list" }),
- args: [
- new AST.Number({ value: 1 }),
- new AST.Number({ value: 2 }),
- new AST.Number({ value: 3 })
- ]
- })
- })
- ]);
- });
-
- test("list", t => {
- t.plan(2);
-
- t.deepEqual(helpers.resolve("(list 1 2 3 4 5)"), [
- new AST.List({
- elements: [
- new AST.Number({ value: 1 }),
- new AST.Number({ value: 2 }),
- new AST.Number({ value: 3 }),
- new AST.Number({ value: 4 }),
- new AST.Number({ value: 5 })
- ]
- })
- ]);
-
- t.deepEqual(helpers.resolve("(list (list 1 2) (list 3 4))"), [
- new AST.List({
- elements: [
- new AST.List({
- elements: [new AST.Number({ value: 1 }), new AST.Number({ value: 2 })]
- }),
- new AST.List({
- elements: [new AST.Number({ value: 3 }), new AST.Number({ value: 4 })]
- })
- ]
- })
- ]);
- });
-
- test("if", t => {
- t.plan(3);
-
- t.deepEqual(helpers.resolve("(if #t 1 0)"), [new AST.Number({ value: 1 })]);
-
- t.deepEqual(helpers.resolve("(if #f 1 0)"), [new AST.Number({ value: 0 })]);
-
- t.deepEqual(helpers.resolve("(if (if #t #t #f) 1 0)"), [
- new AST.Number({ value: 1 })
- ]);
- });
-
- test("=", t => {
- t.plan(6);
-
- t.equal(helpers.resolve("(= 5 5)")[0].value, true);
- t.equal(helpers.resolve("(= 5 6)")[0].value, false);
- t.equal(helpers.resolve('(= "hello" "hello")')[0].value, true);
- t.equal(helpers.resolve('(= "hello" "world")')[0].value, false);
- t.equal(
- helpers.resolve("(= (list #t #t #t) (list (> 5 4) (< 3 7) (= 9 9)))")[0]
- .value,
- true
- );
- t.equal(
- helpers.resolve("(= (list #t #t #t) (list (> 5 4) (< 3 7) (= 9 10)))")[0]
- .value,
- false
- );
- });
-
- test(">", t => {
- t.plan(2);
-
- t.deepEqual(helpers.resolve("(> 5 4)"), [new AST.Boolean({ value: true })]);
- t.deepEqual(helpers.resolve("(> 4 5)"), [new AST.Boolean({ value: false })]);
- });
-
- test("<", t => {
- t.plan(2);
-
- t.deepEqual(helpers.resolve("(< 5 4)"), [new AST.Boolean({ value: false })]);
- t.deepEqual(helpers.resolve("(< 4 5)"), [new AST.Boolean({ value: true })]);
- });
-
- test(">=", t => {
- t.plan(3);
-
- t.deepEqual(helpers.resolve("(>= 5 5)"), [new AST.Boolean({ value: true })]);
- t.deepEqual(helpers.resolve("(>= 6 5)"), [new AST.Boolean({ value: true })]);
- t.deepEqual(helpers.resolve("(>= 5 6)"), [new AST.Boolean({ value: false })]);
- });
-
- test("<=", t => {
- t.plan(3);
-
- t.deepEqual(helpers.resolve("(<= 5 5)"), [new AST.Boolean({ value: true })]);
- t.deepEqual(helpers.resolve("(<= 5 6)"), [new AST.Boolean({ value: true })]);
- t.deepEqual(helpers.resolve("(<= 6 5)"), [new AST.Boolean({ value: false })]);
- });
-
- test("and", t => {
- t.plan(2);
-
- t.equal(helpers.resolve("(and #t #t #t)")[0].value, true);
- t.equal(helpers.resolve("(and #t #t #f)")[0].value, false);
- });
-
- test("or", t => {
- t.plan(2);
-
- t.equal(helpers.resolve("(or #f #f #f)")[0].value, false);
- t.equal(helpers.resolve("(or #t #f #f)")[0].value, true);
- });
|