Skip to content

Commit 863baff

Browse files
committed
add basic tests for wasm library and wrapper
1 parent 5b7c5b0 commit 863baff

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

tests/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,9 @@ add_ear_test("gain_calculator_hoa_tests")
4545
add_ear_test("gain_calculator_objects_tests")
4646
add_ear_test("gain_interpolator_tests")
4747
add_ear_test("variable_block_size_tests")
48+
49+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "wasm32|wasm64")
50+
add_test(
51+
NAME libear_js
52+
COMMAND node ${CMAKE_CURRENT_SOURCE_DIR}/test_libear.mjs -- $<TARGET_FILE:ear_wasm>)
53+
endif()

tests/test_libear.mjs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
let [wasm_file] = process.argv.slice(process.argv.indexOf("--") + 1);
2+
3+
import {
4+
EARLibrary,
5+
GainCalculatorObjects,
6+
ObjectsTypeMetadata,
7+
} from "../src/libear.mjs";
8+
import fs from "node:fs";
9+
import { test } from "node:test";
10+
import assert from "node:assert";
11+
12+
/// check that two arrays are the same size and the same within a small tolerance
13+
function assertArraysClose(a, b) {
14+
assert.strictEqual(a.length, b.length);
15+
16+
for (let i = 0; i < a.length; i++) {
17+
assert.ok(Math.abs(a[i] - b[i]) < 1e-6);
18+
}
19+
}
20+
21+
function assertClose(a, b) {
22+
assert.ok(Math.abs(a - b) < 1e-6);
23+
}
24+
25+
test("load library then", async (t) => {
26+
const wasm_buf = fs.readFileSync(wasm_file);
27+
let lib = await EARLibrary.from_buffer(wasm_buf);
28+
29+
await test("layout", (t) => {
30+
let layout = lib.get_layout("0+5+0");
31+
assert.equal(layout.num_channels(), 6);
32+
});
33+
34+
await test("get_layout throw", (t) => {
35+
assert.throws(() => lib.get_layout("0+5+1"), {
36+
name: "RangeError",
37+
message: "unknown layout: 0+5+1",
38+
});
39+
});
40+
41+
await test("decorrelator", (t) => {
42+
let layout = lib.get_layout("0+5+0");
43+
44+
assert.equal(lib.decorrelator_compensation_delay(), 255);
45+
46+
let dec = lib.design_decorrelator(layout, 1);
47+
assert.equal(dec.length, 512);
48+
49+
assertClose(dec[0], 0.06860811);
50+
assertClose(dec[256], 0.111747);
51+
assertClose(dec[511], -0.01473256);
52+
});
53+
54+
await test("calculate objects gains", (t) => {
55+
let layout = lib.get_layout("0+5+0");
56+
let gain_calc = new GainCalculatorObjects(lib, layout);
57+
58+
let otm = new ObjectsTypeMetadata(lib);
59+
otm.set_polar_position(15.0, 0.0, 1.0);
60+
otm.set_gain(0.5);
61+
otm.set_diffuse(0.25);
62+
63+
let gains = gain_calc.calculate(otm);
64+
assertArraysClose(
65+
gains["direct"],
66+
[0.3061862178478973, 0, 0.3061862178478973, 0, 0, 0],
67+
);
68+
assertArraysClose(
69+
gains["diffuse"],
70+
[0.1767766952966369, 0, 0.1767766952966369, 0, 0, 0],
71+
);
72+
});
73+
});

0 commit comments

Comments
 (0)