mirror of
https://github.com/jamiebuilds/the-super-tiny-compiler.git
synced 2024-10-27 20:34:08 +00:00
Add a test
This commit is contained in:
parent
ed6d5b5eb2
commit
9bee727f77
@ -29,6 +29,10 @@ inline annotations. If you want to come back when that's done, you can either
|
|||||||
watch/star this repo or follow me on
|
watch/star this repo or follow me on
|
||||||
[twitter](https://twitter.com/thejameskyle) for updates.
|
[twitter](https://twitter.com/thejameskyle) for updates.
|
||||||
|
|
||||||
|
### Tests
|
||||||
|
|
||||||
|
Run with `node ./test/test.js`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
[![cc-by-4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](http://creativecommons.org/licenses/by/4.0/)
|
[![cc-by-4.0](https://licensebuttons.net/l/by/4.0/80x15.png)](http://creativecommons.org/licenses/by/4.0/)
|
||||||
|
101
test/test.js
Normal file
101
test/test.js
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
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