summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorLizzy Hunt <lizzy.hunt@usu.edu>2024-02-28 13:41:53 -0700
committerLizzy Hunt <lizzy.hunt@usu.edu>2024-02-28 13:41:53 -0700
commitd39cf84965dffd11cab440f5a4efa1b16932ba73 (patch)
treee0239d2047756120c51fd431999520ffbb38d29b /test
parent7cc3ef5fa1feec8087618c899441a11052f84c48 (diff)
downloadcps-interpreter-d39cf84965dffd11cab440f5a4efa1b16932ba73.tar.gz
cps-interpreter-d39cf84965dffd11cab440f5a4efa1b16932ba73.zip
branching
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);