Merge pull request 'test_harness' (#22) from test_harness into main

Reviewed-on: #22
This commit is contained in:
Scott Richmond 2023-12-25 04:41:16 +00:00
commit 47420740df
13 changed files with 4150 additions and 22 deletions

3
foo.ld
View File

@ -1 +1,2 @@
:foo
& EXPECT "foo"
"foo"

View File

@ -3,4 +3,4 @@ repl:
clj -X:repl
build:
shadow-cljs release node
shadow-cljs release module

4100
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -3,12 +3,14 @@
"version": "0.1.0-alpha.7.9",
"description": "A Ludus interpreter in a pure JS function.",
"main": "target/js/ludus.js",
"type": "module",
"directories": {},
"keywords": [],
"author": "Scott Richmond",
"license": "GPL-3.0",
"files": "target/js/*",
"devDependencies": {
"shadow-cljs": "^2.26.0"
},
"dependencies": {}
"shadow-cljs": "^2.26.0",
"tap": "^18.6.1"
}
}

View File

@ -8,6 +8,10 @@
:output-to "target/js/ludus.js"
:exports {:run ludus.node/run}
:modules {:main {:entries [ludus.node]}}}
:module {:target :esm
:output-dir "target/js"
:modules {:ludus {:exports {run ludus.node/run test ludus.node/run-test}}}
}
:browser {:target :browser
:output-dir "target/js"
:asset-path "target"

View File

@ -64,7 +64,7 @@
(defn test-run [source] (run source true))
(do
(comment
(def source "

7
test/cases/if.ld Normal file
View File

@ -0,0 +1,7 @@
& EXPECT (:true, :false, :true, :false)
let true_literal = if true then :true else :false
let false_literal = if false then :true else :false
let truthy = if :truthy then :true else :false
let falsy = if nil then :true else :false
(true_literal, false_literal, truthy, falsy)

2
test/cases/list_atoms.ld Normal file
View File

@ -0,0 +1,2 @@
& EXPECT [:one, 2, "three"]
[:one, 2, "three"]

View File

@ -0,0 +1,2 @@
& EXPECT 12.123
12.123

2
test/cases/single_int.ld Normal file
View File

@ -0,0 +1,2 @@
& EXPECT 42
42

View File

@ -0,0 +1,2 @@
& EXPECT "foo"
"foo"

View File

@ -0,0 +1,2 @@
& EXPECT (true, false, nil)
(true, false, nil)

30
test/run_tests.js Normal file
View File

@ -0,0 +1,30 @@
import {run} from "../target/js/ludus.js"
import * as fs from "node:fs/promises"
import t from "tap"
const case_path = "./cases"
const files = await fs.readdir(case_path)
for (const file of files) {
const source = await fs.readFile(`${case_path}/${file}`, {encoding: "utf8"})
const first_line = source.split("\n")[0]
const expected = first_line.split("EXPECT")[1].trim()
if (expected === "PANIC") expect_panic(file, source)
else expect_result(file, source, expected)
}
function expect_panic(file, source) {
const result = run(source).errors[0]
t.test(`testing ${file}: EXPECT PANIC`, t => {
t.ok(result)
t.end()
})
}
function expect_result(file, source, expected) {
const result = run(source).result
t.test(`testing ${file}: EXPECT ${expected}, GOT ${result}`, t => {
t.equal(expected, result)
t.end()
})
}