intval3/experiments/mscript.js

169 lines
3.4 KiB
JavaScript

'use strict'
const log = require('../lib/log')('mscript-tests')
const mscript = require('../lib/mscript')
//TODO: rewrite for mocha
const tests = function tests () {
log.info('Running mscript tests')
console.time('Tests took')
mscript.alts_unique(); //perform check only during tests
var fail = function (script, obj) {
log.error('...Failed :(')
log.error('script', script)
log.error('err', obj)
process.exit(1)
}
let script =
`CF
PF
CB
PB
BF
BB`
log.info('Basic function test...');
mscript.interpret(script, function (obj) {
if (obj.success === true
&& obj.cam === 0
&& obj.proj === 0
&& obj.arr.length === 6) {
log.info('...Passed!')
} else {
fail(script, obj)
}
})
script =
`CF
PF
CB
PB
BF
BB`
log.info('Functions with integers test...')
mscript.interpret(script, function (obj) {
if (obj.success === true
&& obj.cam === 0
&& obj.proj === 0
&& obj.arr.length === 6) {
log.info('...Passed!')
} else {
fail(script, obj)
}
})
script =
`CF 1000
CB 1000
SET PROJ 200
PB 200`
log.info('Basic state test...')
mscript.interpret(script, function (obj) {
if (obj.success === true
&& obj.cam === 0
&& obj.proj === 0) {
log.info('...Passed!')
} else {
fail(script, obj)
}
})
script =
`LOOP 10
CF 3
PF 1
END LOOP`
log.info('Basic loop test...')
mscript.interpret(script, function (obj) {
if (obj.success === true
&& obj.cam === 30
&& obj.proj === 10
&& obj.arr.length === 40) {
log.info('...Passed!')
} else {
fail(script, obj)
}
});
script = `LOOP 4\nLOOP 4\nPF\nBF\nEND LOOP\nEND LOOP`
log.info('Recursive loop test...');
mscript.interpret(script, function (obj) {
if (obj.success === true
&& obj.cam === 16
&& obj.proj === 16
&& obj.arr.length === 32) {
log.info('...Passed!');
} else {
fail(script, obj);
}
});
//Lighting tests
script = `L 255,255,255\nCF\nPF`
log.info('Basic light test...');
mscript.interpret(script, function (obj) {
if (obj.success === true
&& obj.cam === 1
&& obj.proj === 1
&& obj.arr.length === 2
&& obj.light.length === 2
&& obj.light[0] === '255,255,255'
&& obj.light[1] === '') {
log.info('...Passed!');
} else {
fail(script, obj);
}
});
script = 'L 255,255,255\nCF\nPF\nBF';
log.info('Basic black test...');
mscript.interpret(script, function (obj) {
if (obj.success === true
&& obj.cam === 2
&& obj.proj === 1
&& obj.arr.length === 3
&& obj.light.length === 3
&& obj.light[0] === '255,255,255'
&& obj.light[1] === ''
&& obj.light[2] === mscript.black) {
log.info('...Passed!');
} else {
fail(script, obj);
}
});
script = 'LOOP 2\nL 1,1,1\nCF\nL 2,2,2\nCF\nEND';
log.info('Basic light loop test...');
mscript.interpret(script, function (obj) {
if (obj.success === true
&& obj.cam === 4
&& obj.proj === 0
&& obj.arr.length === 4
&& obj.light.length === 4
&& obj.light[0] === '1,1,1'
&& obj.light[3] === '2,2,2') {
log.info('...Passed!');
} else {
fail(script, obj);
}
});
//LOOP W/ CAM and PROJ
script = 'LOOP 2\nCAM 4\nPROJ 4\nEND';
log.info('Basic cam/proj loop test...');
mscript.interpret(script, function (obj) {
if (obj.success === true
&& obj.cam === 8
&& obj.proj === 8
&& obj.arr.length === 16
&& obj.light.length === 16
&& obj.light[0] === mscript.black) {
log.info('...Passed!');
} else {
fail(script, obj);
}
});
log.info('All tests completed');
console.timeEnd('Tests took');
}
tests()