Files
Web_FreeCAD_Bitbybit/tests/camoticsWasm.test.ts

36 lines
2.1 KiB
TypeScript

import test from 'node:test'
import assert from 'node:assert/strict'
import { CAMOTICS_WASM_ARTIFACT_SHA256, CAMOTICS_WASM_SOURCE_REVISION, createCamoticsSweepKernel } from '../src/facade/camoticsWasm'
const calls: number[][] = []
const kernel = createCamoticsSweepKernel({
memory: {} as WebAssembly.Memory,
camotics_sweep_abi_version: () => 1,
camotics_conic_depth: (...values: number[]) => { calls.push(values); return 1 },
camotics_spheroid_depth: (...values: number[]) => { calls.push(values); return -1 },
camotics_conic_bbox_count: (...values: number[]) => { calls.push(values); return 3 },
} as never)
test('CAMotics sweep adapter preserves upstream WASM identity and parser boundary', () => {
assert.equal(kernel.backend, 'camotics-upstream-sweep-wasm')
assert.equal(kernel.sourceRevision, CAMOTICS_WASM_SOURCE_REVISION)
assert.equal(kernel.artifactSha256, CAMOTICS_WASM_ARTIFACT_SHA256)
assert.equal(kernel.abiVersion, 1)
assert.equal(kernel.fullCamoticsProgram, false)
assert.equal(kernel.gcodeParserIncluded, false)
})
test('CAMotics sweep adapter validates and forwards native arguments', () => {
assert.equal(kernel.conicDepth({ length: 5, topRadius: 2, start: [0, 0, 0], end: [10, 0, 0], point: [5, 0, 0] }), 1)
assert.equal(kernel.spheroidDepth({ radius: 2, start: [0, 0, 0], end: [10, 0, 0], point: [5, 4, 0] }), -1)
assert.equal(kernel.conicBoundingBoxCount({ length: 5, topRadius: 2, start: [0, 0, 0], end: [100, 0, 0] }), 3)
assert.equal(calls.length, 3)
assert.throws(() => kernel.conicDepth({ length: 0, topRadius: 2, start: [0, 0, 0], end: [1, 0, 0], point: [0, 0, 0] }), /greater than zero/)
assert.throws(() => kernel.spheroidDepth({ radius: 2, start: [0, 0, 0], end: [1, Number.NaN, 0], point: [0, 0, 0] }), /must be finite/)
assert.throws(() => kernel.conicBoundingBoxCount({ length: 5, topRadius: 2, start: [0, 0, 0], end: [1, 0, 0], tolerance: -1 }), /must not be negative/)
})
test('CAMotics sweep adapter rejects an unknown ABI', () => {
assert.throws(() => createCamoticsSweepKernel({ camotics_sweep_abi_version: () => 2 } as never), /Unsupported CAMotics sweep WASM ABI/)
})