summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/interpreter.spec.ts7
-rw-r--r--test/programs/branching.cps10
-rw-r--r--test/programs/index.ts3
-rw-r--r--test/signature_match.spec.ts4
4 files changed, 20 insertions, 4 deletions
diff --git a/test/interpreter.spec.ts b/test/interpreter.spec.ts
index fa74ef0..49b741e 100644
--- a/test/interpreter.spec.ts
+++ b/test/interpreter.spec.ts
@@ -18,6 +18,13 @@ test('Add (1 real) and (3 int) -> result => (real 1 - result) = -3 done with cor
expect(result).toEqual({ type: 'real', value: -3 });
});
+test('Branching', async () => {
+ const ast = peggyParse(await TestPrograms.Branching);
+
+ const result = await evaluate(ast, testingLogger);
+ expect(result).toEqual({ type: 'real', value: 2 });
+});
+
/*
test('String equality', async () => {
const ast = peggyParse(await TestPrograms.StringEquality);
diff --git a/test/programs/branching.cps b/test/programs/branching.cps
new file mode 100644
index 0000000..f73704c
--- /dev/null
+++ b/test/programs/branching.cps
@@ -0,0 +1,10 @@
+PRIMOP(>=, [REAL 0, REAL 1], [resultFalse], [
+ PRIMOP(+, [REAL 2, REAL 4], [result], []),
+ PRIMOP(<=, [INT 1, REAL 1], [resultTrue], [
+ PRIMOP(&&, [VAR resultTrue, VAR resultFalse], [fin], [
+ PRIMOP(-, [REAL 1, REAL 1], [result], []),
+ PRIMOP(+, [REAL 1, REAL 1], [twoWhenFinIsFalse], [])
+ ]),
+ PRIMOP(-, [REAL 1, REAL 1], [result], [])
+ ])
+]) \ No newline at end of file
diff --git a/test/programs/index.ts b/test/programs/index.ts
index c8f3c85..864169f 100644
--- a/test/programs/index.ts
+++ b/test/programs/index.ts
@@ -7,6 +7,9 @@ export namespace TestPrograms {
export const PrimopScope = Bun.file(
join(import.meta.dir + '/primop-scope.cps'),
).text();
+ export const Branching = Bun.file(
+ join(import.meta.dir + '/branching.cps'),
+ ).text();
export const StringEquality = Bun.file(
join(import.meta.dir + '/string-equal.cps'),
).text();
diff --git a/test/signature_match.spec.ts b/test/signature_match.spec.ts
index 10be880..02b8c89 100644
--- a/test/signature_match.spec.ts
+++ b/test/signature_match.spec.ts
@@ -1,13 +1,9 @@
import { expect, test } from 'bun:test';
-import { TestPrograms } from './programs';
-import { peggyParse } from '@/parser';
import {
- evaluate,
type DenotableFunctionSignature,
denotableTypesEquivalent,
matchSignature,
} from '@/interpreter';
-import { testingLogger } from './logger';
test('simple denotable types are equivalent', () => {
expect(denotableTypesEquivalent('int', 'int')).toBe(true);