修复机械事件力曲线并对齐气动孔口端口显示
This commit is contained in:
1 parent
e18399c022
commit
408b4ecb22
11 files changed
+697
-43
No files matched your search
@@ -0,0 +1,131 @@
|
||||
import { expect, test } from "@playwright/test";
|
||||
|
||||
import {
|
||||
continuousMechanicalForceChartValues,
|
||||
resultStateTransitionSampleIndices,
|
||||
segmentedChartPath,
|
||||
} from "../../src/resultEventSeries";
|
||||
|
||||
const mechanicalComponent = {
|
||||
data: {
|
||||
ports: [{ name: "port_2", domain: "mechanical" }],
|
||||
},
|
||||
};
|
||||
|
||||
const mechanicalPortForce = {
|
||||
scope: "port" as const,
|
||||
portName: "port_2",
|
||||
quantity: "force",
|
||||
category: "flow",
|
||||
};
|
||||
|
||||
test("只分离机械事件中的孤立力尖峰,同时保留连续曲线和原始值", () => {
|
||||
const time = [0, 0.5, 0.75, 1, 1.5];
|
||||
const eventIndices = resultStateTransitionSampleIndices(time, {
|
||||
integration: {
|
||||
segments: [
|
||||
{ stateTransitionTimes: [0.75] },
|
||||
{ stateTransitionTimes: [0.7500000000000001] },
|
||||
],
|
||||
},
|
||||
});
|
||||
expect([...eventIndices]).toEqual([2]);
|
||||
|
||||
const rawForce = [1, 2, 1e12, 3, 4];
|
||||
const displayedForce = continuousMechanicalForceChartValues(
|
||||
mechanicalPortForce,
|
||||
mechanicalComponent,
|
||||
rawForce,
|
||||
eventIndices,
|
||||
);
|
||||
expect(displayedForce.separatedEventSampleCount).toBe(1);
|
||||
expect(Number.isNaN(displayedForce.values[2])).toBe(true);
|
||||
expect(Math.max(...displayedForce.values.filter(Number.isFinite))).toBe(4);
|
||||
expect(rawForce[2]).toBe(1e12);
|
||||
|
||||
const path = segmentedChartPath(
|
||||
time,
|
||||
displayedForce.values,
|
||||
(value) => value,
|
||||
(value) => value,
|
||||
);
|
||||
expect(path.match(/\bM /g)).toHaveLength(1);
|
||||
|
||||
const smoothForce = [1, 2, 2.5, 3, 4];
|
||||
const displayedSmoothForce = continuousMechanicalForceChartValues(
|
||||
mechanicalPortForce,
|
||||
mechanicalComponent,
|
||||
smoothForce,
|
||||
eventIndices,
|
||||
);
|
||||
expect(displayedSmoothForce.values).toBe(smoothForce);
|
||||
expect(displayedSmoothForce.separatedEventSampleCount).toBe(0);
|
||||
|
||||
const componentForce = continuousMechanicalForceChartValues(
|
||||
{
|
||||
scope: "component",
|
||||
portName: null,
|
||||
quantity: "force",
|
||||
category: "derived",
|
||||
},
|
||||
mechanicalComponent,
|
||||
[1, 2, -1e12, 3, 4],
|
||||
eventIndices,
|
||||
);
|
||||
expect(componentForce.separatedEventSampleCount).toBe(1);
|
||||
expect(Number.isNaN(componentForce.values[2])).toBe(true);
|
||||
|
||||
const signalForce = continuousMechanicalForceChartValues(
|
||||
{
|
||||
scope: "component",
|
||||
portName: null,
|
||||
quantity: "force",
|
||||
category: "signal",
|
||||
},
|
||||
mechanicalComponent,
|
||||
[1, 2, -1e12, 3, 4],
|
||||
eventIndices,
|
||||
);
|
||||
expect(signalForce.values[2]).toBe(-1e12);
|
||||
expect(signalForce.separatedEventSampleCount).toBe(0);
|
||||
|
||||
const stateValues = [0, 0.5, 1e9, 1, 1.5];
|
||||
const displayedState = continuousMechanicalForceChartValues(
|
||||
{ ...mechanicalPortForce, quantity: "velocity" },
|
||||
mechanicalComponent,
|
||||
stateValues,
|
||||
eventIndices,
|
||||
);
|
||||
expect(displayedState.values).toBe(stateValues);
|
||||
expect(displayedState.values[2]).toBe(1e9);
|
||||
|
||||
const pneumaticForce = continuousMechanicalForceChartValues(
|
||||
mechanicalPortForce,
|
||||
{
|
||||
data: {
|
||||
ports: [{ name: "port_2", domain: "pneumatic" }],
|
||||
},
|
||||
},
|
||||
rawForce,
|
||||
eventIndices,
|
||||
);
|
||||
expect(pneumaticForce.values).toBe(rawForce);
|
||||
|
||||
const persistentContactForce = [0, 0, 1e6, 1e6, 1e6];
|
||||
const displayedPersistentContactForce =
|
||||
continuousMechanicalForceChartValues(
|
||||
mechanicalPortForce,
|
||||
mechanicalComponent,
|
||||
persistentContactForce,
|
||||
eventIndices,
|
||||
);
|
||||
expect(displayedPersistentContactForce.values).toBe(
|
||||
persistentContactForce,
|
||||
);
|
||||
expect(
|
||||
displayedPersistentContactForce.separatedEventSampleCount,
|
||||
).toBe(0);
|
||||
expect(
|
||||
resultStateTransitionSampleIndices(time, {}),
|
||||
).toEqual(new Set<number>());
|
||||
});
|
||||
Reference in new issue
Block a user