mirror of
https://github.com/jamiebuilds/the-super-tiny-compiler.git
synced 2024-10-27 20:34:08 +00:00
Clean up test file
This commit is contained in:
parent
04ef11d85e
commit
6c2eedab23
84
test.js
Normal file
84
test.js
Normal file
@ -0,0 +1,84 @@
|
||||
var superTinyCompiler = require('./super-tiny-compiler');
|
||||
var assert = require('assert');
|
||||
|
||||
var tokenizer = superTinyCompiler.tokenizer;
|
||||
var parser = superTinyCompiler.parser;
|
||||
var transformer = superTinyCompiler.transformer;
|
||||
var codeGenerator = superTinyCompiler.codeGenerator;
|
||||
var compiler = superTinyCompiler.compiler;
|
||||
|
||||
var input = '(add 2 (subtract 4 2))';
|
||||
var output = 'add(2, subtract(4, 2));';
|
||||
|
||||
var tokens = [
|
||||
{ type: 'paren', value: '(' },
|
||||
{ type: 'name', value: 'add' },
|
||||
{ type: 'number', value: '2' },
|
||||
{ type: 'paren', value: '(' },
|
||||
{ type: 'name', value: 'subtract' },
|
||||
{ type: 'number', value: '4' },
|
||||
{ type: 'number', value: '2' },
|
||||
{ type: 'paren', value: ')' },
|
||||
{ type: 'paren', value: ')' }
|
||||
];
|
||||
|
||||
var ast = {
|
||||
type: 'Program',
|
||||
body: [{
|
||||
type: 'CallExpression',
|
||||
name: 'add',
|
||||
params: [{
|
||||
type: 'NumberLiteral',
|
||||
value: '2'
|
||||
}, {
|
||||
type: 'CallExpression',
|
||||
name: 'subtract',
|
||||
params: [{
|
||||
type: 'NumberLiteral',
|
||||
value: '4'
|
||||
}, {
|
||||
type: 'NumberLiteral',
|
||||
value: '2'
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
};
|
||||
|
||||
var newAst = {
|
||||
type: 'Program',
|
||||
body: [{
|
||||
type: 'ExpressionStatement',
|
||||
expression: {
|
||||
type: 'CallExpression',
|
||||
callee: {
|
||||
type: 'Identifier',
|
||||
name: 'add'
|
||||
},
|
||||
arguments: [{
|
||||
type: 'NumberLiteral',
|
||||
value: '2'
|
||||
}, {
|
||||
type: 'CallExpression',
|
||||
callee: {
|
||||
type: 'Identifier',
|
||||
name: 'subtract'
|
||||
},
|
||||
arguments: [{
|
||||
type: 'NumberLiteral',
|
||||
value: '4'
|
||||
}, {
|
||||
type: 'NumberLiteral',
|
||||
value: '2'
|
||||
}]
|
||||
}]
|
||||
}
|
||||
}]
|
||||
};
|
||||
|
||||
assert.deepStrictEqual(tokenizer(input), tokens, 'Tokeizer should turn `input` string into `tokens` array');
|
||||
assert.deepStrictEqual(parser(tokens), ast, 'Parser should turn `tokens` array into `ast`');
|
||||
assert.deepStrictEqual(transformer(ast), newAst, 'Transformer should turn `ast` into a `newAst`');
|
||||
assert.deepStrictEqual(codeGenerator(newAst), output, 'Code Generator should turn `newAst` into `output` string');
|
||||
assert.deepStrictEqual(compiler(input), output, 'Compiler should turn `input` into `output`');
|
||||
|
||||
console.log('All Passed!');
|
101
test/test.js
101
test/test.js
@ -1,101 +0,0 @@
|
||||
var assert = require('assert');
|
||||
var superTinyCompiler = require('../super-tiny-compiler');
|
||||
|
||||
var tokenizer = superTinyCompiler.tokenizer;
|
||||
var parser = superTinyCompiler.parser;
|
||||
var transformer = superTinyCompiler.transformer;
|
||||
var codeGenerator = superTinyCompiler.codeGenerator;
|
||||
var compiler = superTinyCompiler.compiler;
|
||||
|
||||
var input = '(add 2 (subtract 4 2))';
|
||||
|
||||
var tokens = [
|
||||
{ type: 'paren', value: '(' },
|
||||
{ type: 'name', value: 'add' },
|
||||
{ type: 'number', value: '2' },
|
||||
{ type: 'paren', value: '(' },
|
||||
{ type: 'name', value: 'subtract' },
|
||||
{ type: 'number', value: '4' },
|
||||
{ type: 'number', value: '2' },
|
||||
{ type: 'paren', value: ')' },
|
||||
{ type: 'paren', value: ')' }
|
||||
];
|
||||
|
||||
//test tokenizer
|
||||
assert.deepStrictEqual(tokenizer(input), tokens);
|
||||
|
||||
var ast = {
|
||||
type: 'Program',
|
||||
body: [{
|
||||
type: 'CallExpression',
|
||||
name: 'add',
|
||||
params: [{
|
||||
type: 'NumberLiteral',
|
||||
value: '2'
|
||||
}, {
|
||||
type: 'CallExpression',
|
||||
name: 'subtract',
|
||||
params: [{
|
||||
type: 'NumberLiteral',
|
||||
value: '4'
|
||||
}, {
|
||||
type: 'NumberLiteral',
|
||||
value: '2'
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
};
|
||||
|
||||
// test parser/ast
|
||||
assert.deepStrictEqual(parser(tokens), ast);
|
||||
|
||||
var newAst = {
|
||||
"type": "Program",
|
||||
"body": [
|
||||
{
|
||||
"type": "ExpressionStatement",
|
||||
"expression": {
|
||||
"type": "CallExpression",
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"name": "add"
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"type": "NumberLiteral",
|
||||
"value": "2"
|
||||
},
|
||||
{
|
||||
"type": "CallExpression",
|
||||
"callee": {
|
||||
"type": "Identifier",
|
||||
"name": "subtract"
|
||||
},
|
||||
"arguments": [
|
||||
{
|
||||
"type": "NumberLiteral",
|
||||
"value": "4"
|
||||
},
|
||||
{
|
||||
"type": "NumberLiteral",
|
||||
"value": "2"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
assert.deepStrictEqual(transformer(ast), newAst);
|
||||
|
||||
var output = 'add(2, subtract(4, 2));';
|
||||
|
||||
// test generator
|
||||
assert.deepStrictEqual(codeGenerator(newAst), output);
|
||||
|
||||
// test whole compiler
|
||||
assert.deepStrictEqual(compiler(input), output);
|
||||
|
||||
console.log('All Passed!');
|
Loading…
Reference in New Issue
Block a user