mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-05-15 22:30:38 +08:00
77 lines
1.8 KiB
JavaScript
77 lines
1.8 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { diffuseAndRank } from "../diffusion.js";
|
|
import {
|
|
addEdge,
|
|
addNode,
|
|
buildTemporalAdjacencyMap,
|
|
createEdge,
|
|
createEmptyGraph,
|
|
createNode,
|
|
invalidateEdge,
|
|
} from "../graph.js";
|
|
|
|
const graph = createEmptyGraph();
|
|
|
|
const event1 = createNode({
|
|
type: "event",
|
|
seq: 1,
|
|
fields: { summary: "初始事件" },
|
|
importance: 5,
|
|
});
|
|
const event2 = createNode({
|
|
type: "event",
|
|
seq: 2,
|
|
fields: { summary: "后续事件" },
|
|
importance: 6,
|
|
});
|
|
const character = createNode({
|
|
type: "character",
|
|
seq: 2,
|
|
fields: { name: "艾琳", state: "警觉" },
|
|
importance: 7,
|
|
});
|
|
|
|
addNode(graph, event1);
|
|
addNode(graph, event2);
|
|
addNode(graph, character);
|
|
|
|
const currentEdge = createEdge({
|
|
fromId: event2.id,
|
|
toId: character.id,
|
|
relation: "involved_in",
|
|
strength: 0.9,
|
|
});
|
|
assert.ok(addEdge(graph, currentEdge));
|
|
|
|
const historicalEdge = createEdge({
|
|
fromId: event1.id,
|
|
toId: character.id,
|
|
relation: "involved_in",
|
|
strength: 0.4,
|
|
});
|
|
assert.ok(addEdge(graph, historicalEdge));
|
|
invalidateEdge(historicalEdge);
|
|
|
|
const replacementEdge = createEdge({
|
|
fromId: event1.id,
|
|
toId: character.id,
|
|
relation: "involved_in",
|
|
strength: 0.7,
|
|
});
|
|
assert.ok(addEdge(graph, replacementEdge));
|
|
assert.notEqual(replacementEdge.id, historicalEdge.id);
|
|
|
|
const adjacencyMap = buildTemporalAdjacencyMap(graph);
|
|
const event1Neighbors = adjacencyMap.get(event1.id) || [];
|
|
assert.equal(event1Neighbors.length, 1);
|
|
assert.equal(event1Neighbors[0].targetId, character.id);
|
|
assert.equal(event1Neighbors[0].strength, 0.7);
|
|
|
|
const diffusion = diffuseAndRank(adjacencyMap, [
|
|
{ id: event2.id, energy: 1 },
|
|
{ id: event2.id, energy: 0.5 },
|
|
]);
|
|
assert.ok(diffusion.some((item) => item.nodeId === character.id));
|
|
|
|
console.log("graph-retrieval tests passed");
|