完善AMESim组件界面与仿真求解稳定性
This commit is contained in:
1 parent
e7177ab03e
commit
410ef535e8
34 files changed
+3340
-251
No files matched your search
@@ -0,0 +1,42 @@
|
||||
import { expect, test } from "@playwright/test";
|
||||
|
||||
import { evaluateParameterExpression } from "../../src/parameterExpression";
|
||||
|
||||
function expectExpressionValue(expression: string, expected: number) {
|
||||
const result = evaluateParameterExpression(expression);
|
||||
expect(result.ok, result.ok ? undefined : result.message).toBe(true);
|
||||
if (result.ok) {
|
||||
expect(result.value).toBeCloseTo(expected, 10);
|
||||
}
|
||||
}
|
||||
|
||||
test("安全解析 AMESim 风格的算术、幂与科学计数等式", () => {
|
||||
expectExpressionValue("=3.14*10^2/4", 78.5);
|
||||
expectExpressionValue("(2+3)*4", 20);
|
||||
expectExpressionValue("2^3^2", 512);
|
||||
expectExpressionValue("-2^2", -4);
|
||||
expectExpressionValue("2.5E-3", 0.0025);
|
||||
});
|
||||
|
||||
test("支持有限的数学常量与白名单函数", () => {
|
||||
expectExpressionValue("sqrt(16)+abs(-2)", 6);
|
||||
expectExpressionValue("sin(pi/2)+ln(e)", 2);
|
||||
expectExpressionValue("max(1, 5, 3)+pow(2, 3)", 13);
|
||||
});
|
||||
|
||||
test("拒绝除零、非法定义域、未知变量和任意代码", () => {
|
||||
for (const expression of [
|
||||
"1/0",
|
||||
"sqrt(-1)",
|
||||
"unknown+1",
|
||||
"window.alert(1)",
|
||||
"1+*2",
|
||||
"1e309",
|
||||
]) {
|
||||
const result = evaluateParameterExpression(expression);
|
||||
expect(result.ok, expression).toBe(false);
|
||||
if (!result.ok) {
|
||||
expect(result.message.length).toBeGreaterThan(0);
|
||||
}
|
||||
}
|
||||
});
|
||||
Reference in new issue
Block a user