silphius/app/astride/evaluators/unary.test.js

43 lines
1.1 KiB
JavaScript
Raw Normal View History

2024-06-16 08:01:01 -05:00
import {expect, test} from 'vitest';
import evaluate from '@/astride/evaluate.js';
import expression from '@/astride/test/expression.js';
2024-06-16 08:01:01 -05:00
test('evaluates +', async () => {
2024-06-18 21:46:51 -05:00
expect(evaluate(await expression('+1')))
2024-06-16 08:01:01 -05:00
.to.deep.include({value: 1});
});
test('evaluates -', async () => {
2024-06-18 21:46:51 -05:00
expect(evaluate(await expression('-1')))
2024-06-16 08:01:01 -05:00
.to.deep.include({value: -1});
});
test('evaluates !', async () => {
2024-06-18 21:46:51 -05:00
expect(evaluate(await expression('!true')))
2024-06-16 08:01:01 -05:00
.to.deep.include({value: false});
});
test('evaluates ~', async () => {
2024-06-18 21:46:51 -05:00
expect(evaluate(await expression('~1')))
2024-06-16 08:01:01 -05:00
.to.deep.include({value: -2});
});
test('evaluates typeof', async () => {
2024-06-18 21:46:51 -05:00
expect(evaluate(await expression('typeof "a"')))
2024-06-16 08:01:01 -05:00
.to.deep.include({value: 'string'});
});
test('evaluates void', async () => {
2024-06-18 21:46:51 -05:00
expect(evaluate(await expression('void 0')))
2024-06-16 08:01:01 -05:00
.to.deep.include({value: undefined});
});
test('evaluates promised unary expression', async () => {
2024-06-18 21:46:51 -05:00
const evaluated = evaluate(await expression('-(await 4)'));
2024-06-16 08:01:01 -05:00
expect(evaluated.async)
.to.equal(true);
expect(await evaluated.value)
.to.equal(-4);
});